diff --git a/zsnes/src/cpu/dma.asm b/zsnes/src/cpu/dma.asm index 55d1e944..aa5a2e2a 100644 --- a/zsnes/src/cpu/dma.asm +++ b/zsnes/src/cpu/dma.asm @@ -37,7 +37,9 @@ NEWSYM DmaAsmStart ;******************************************************* ; DMA transfer register -NEWSYM AddrNoIncr, db 0 +section .bss +NEWSYM AddrNoIncr, resb 1 +section .text %macro ExecSPCCycles 0 xor ebx,ebx @@ -220,6 +222,7 @@ NEWSYM transdma mov byte[AddrNoIncr],0 ret +section .data ALIGN32 .curbank dd 0 @@ -233,6 +236,7 @@ ALIGN32 .regptrd dd 0 .readaddr dd 0 .cebx dd 0 +section .text NEWSYM transdmappu2cpu ; set address increment value @@ -379,6 +383,7 @@ NEWSYM transdmappu2cpu pop eax ret +section .data ALIGN32 .curbank dd 0 @@ -392,6 +397,7 @@ ALIGN32 .regptrd dd 0 .writeaddr dd 0 .cebx dd 0 +section .text %macro TestDMA 0 %endmacro @@ -566,9 +572,11 @@ NEWSYM setuphdma or [hdmatype],ah ret +section .data .addrwrite dw 0,0,0,0, 0,1,0,1, 0,0,0,0, 0,0,1,1, 0,1,2,3, 0,1,2,3, 0,1,2,3 dw 0,1,2,3 .addrnumt db 1,2,2,4,4,4,4,4 +section .text NEWSYM setuphdmars push eax @@ -666,9 +674,11 @@ NEWSYM setuphdmars pop eax ret +section .data .addrwrite dw 0,0,0,0, 0,1,0,1, 0,0,0,0, 0,0,1,1, 0,1,2,3, 0,1,2,3, 0,1,2,3 dw 0,1,2,3 .addrnumt db 1,2,2,4,4,4,4,4 +section .text NEWSYM setuphdma2 push eax @@ -777,12 +787,17 @@ NEWSYM setuphdma2 and [nexthdma],ah ret +section .data .addrwrite dw 0,0,0,0, 0,1,0,1, 0,0,0,0, 0,0,1,1, 0,1,2,3, 0,1,2,3, 0,1,2,3 dw 0,1,2,3 .addrnumt db 1,2,2,4,4,4,4,4 -NEWSYM hdmastartsc, db 0 -NEWSYM hdmarestart, db 0 +section .bss + +NEWSYM hdmastartsc, resb 1 +NEWSYM hdmarestart, resb 1 + +section .text NEWSYM reg420Cw @@ -1024,7 +1039,9 @@ NEWSYM dohdma pop eax ret -.tempdecr db 0 +section .bss +.tempdecr resd 1 +section .text NEWSYM hdmatype2 mov al,[edx+16] @@ -1067,7 +1084,9 @@ NEWSYM hdmatype2 dec byte[esi+10] ret -.tempdecr db 0 +section .bss +.tempdecr resd 1 +section .text NEWSYM indirectaddr push eax @@ -1128,7 +1147,7 @@ NEWSYM indirectaddr mov bl,[esi+7] mov cx,[esi+5] ; increment/decrement/keep pointer location add cx,3 - call dword near [memtabler8+ebx*4] + call dword near [memtabler8+ebx*4] call dword near [edx+12] jmp .finhdma .nozero @@ -1146,11 +1165,17 @@ NEWSYM indirectaddr pop eax ret -.tempdecr db 0 +section .bss +.tempdecr resd 1 + +section .data .fname2 db 9,'vram2.dat',0 +section .text EXTSYM spcRam +section .data NEWSYM ewj2hack, dd 0 +section .text NEWSYM hdmatype2indirect cmp dword [ewj2hack],1 @@ -1243,8 +1268,10 @@ NEWSYM hdmatype2indirect dec byte[esi+10] ret -.dest dd 0 -.tempdecr db 0 +section .bss +.tempdecr resd 1 +.dest resd 1 +section .text NEWSYM exechdma cmp byte[hdmarestart],1 diff --git a/zsnes/src/cpu/execute.asm b/zsnes/src/cpu/execute.asm index 50fe7a74..1d0b4723 100644 --- a/zsnes/src/cpu/execute.asm +++ b/zsnes/src/cpu/execute.asm @@ -391,7 +391,7 @@ NEWSYM ResetExecStuff mov dword[nmistatus],0 mov byte[NextLineCache],0 mov dword[spcnumread],0 - mov dword[spchalted],-1 +; mov dword[spchalted],-1 mov dword[timer2upd],0 mov dword[HIRQCycNext],0 mov byte[HIRQNextExe],0 diff --git a/zsnes/src/cpu/regs.inc b/zsnes/src/cpu/regs.inc index cdf1a37d..4ef4a14e 100644 --- a/zsnes/src/cpu/regs.inc +++ b/zsnes/src/cpu/regs.inc @@ -21,7 +21,7 @@ EXTSYM SPC7110Enable,initSPC7110regs,RTCEnable,RTCReset EXTSYM curypos,cycpl,debuggeron,pdh EXTSYM vram EXTSYM romispal -EXTSYM reg1read,spcnumread,spcon +EXTSYM reg1read,spcnumread,spchalted,spcon EXTSYM reg2read EXTSYM reg3read EXTSYM reg4read @@ -30,6 +30,9 @@ EXTSYM snesmouse EXTSYM cycphb,joycontren,totlines EXTSYM DosExit,invalid,numinst,previdmode,printhex,printnum +%ifdef OPENSPC +EXTSYM SPC_PORT0W, SPC_PORT1W, SPC_PORT2W, SPC_PORT3W +%endif @@ -505,6 +508,7 @@ NEWSYM initregr ret ; global variables +SECTION .data ;ALIGN=32 NEWSYM invreg, dw 0 NEWSYM sndrot, db 0 ; rotates to use A,X or Y for sound skip NEWSYM sndrot2, db 0 ; rotates a random value for sound skip @@ -712,6 +716,8 @@ NEWSYM nssdip4, db 0 NEWSYM nssdip5, db 0 NEWSYM nssdip6, db 0 +SECTION .text + NEWSYM ClearRegs mov word[VIRQLoc],0 mov word[bg1ptr],0 @@ -984,11 +990,16 @@ reg213Fr: ; Sound Reg #1 reg2140r: +%ifdef OPENSPC + mov al,[SPC_PORT0W] + ret +%else cmp byte[spcon],0 je .nosound inc dword[SPC700read] mov al,[reg1read] - mov byte[spcnumread],0 + mov dword[spcnumread],0 +; mov dword[spchalted],-1 ret .nosound ; Find for D0 @@ -1020,14 +1031,20 @@ reg2140r: mov al,[xa] .n ret +%endif ; Sound Reg #2 reg2141r: +%ifdef OPENSPC + mov al,[SPC_PORT1W] + ret +%else cmp byte[spcon],0 je .nosound inc dword[SPC700read] mov al,[reg2read] - mov byte[spcnumread],0 + mov dword[spcnumread],0 +; mov dword[spchalted],-1 ret .nosound ; Find for D0 @@ -1051,14 +1068,20 @@ reg2141r: mov al,[xa] .n ret +%endif ; Sound Reg #3 reg2142r: +%ifdef OPENSPC + mov al,[SPC_PORT2W] + ret +%else cmp byte[spcon],0 je .nosound inc dword[SPC700read] mov al,[reg3read] - mov byte[spcnumread],0 + mov dword[spcnumread],0 +; mov dword[spchalted],-1 ret .nosound ; Find for D0 @@ -1081,14 +1104,20 @@ reg2142r: mov al,[xa+1] .n ret +%endif ; Sound Reg #4 reg2143r: +%ifdef OPENSPC + mov al,[SPC_PORT3W] + ret +%else cmp byte[spcon],0 je .nosound inc dword[SPC700read] mov al,[reg4read] - mov byte[spcnumread],0 + mov dword[spcnumread],0 +; mov dword[spchalted],-1 ret .nosound ; Find for D0 @@ -1107,6 +1136,7 @@ reg2143r: .notfound mov al,[xa+1] ret +%endif reg2144r: xor al,al @@ -1136,7 +1166,10 @@ reg4016r: rol dword[JoyANow],1 ret -NEWSYM MultiTap, db 0 +SECTION .bss ;ALIGN=32 +NEWSYM MultiTap, resb 1 +SECTION .text + ; Joystick Data for controller 2 and 4 reg4017r: cmp byte[snesmouse],0 @@ -1242,6 +1275,10 @@ reg4211r: .nohblank ret +SECTION .bss +NEWSYM hblank, resb 1 +SECTION .text + ; H/V Blank Flag & Joystick Controller Enable Flag ; bit 7 = vblank, 0=out,1=in, bit 6 = hblank, 0=out,1=in, bit 0 = joystick on reg4212r: @@ -1275,8 +1312,10 @@ reg4212r: or al,80h ; jmp .nohblank .novbl + mov byte[hblank],0 cmp dh,[cycphb] jae .nohblank + mov byte[hblank],1 or al,40h .nohblank test byte[INTEnab],01h @@ -1464,6 +1503,8 @@ regINVALID: ; Invalid Register call printnum jmp DosExit +SECTION .data ;ALIGN=32 .invalidreg db 'Invalid Read Register : $' +SECTION .text diff --git a/zsnes/src/cpu/regsw.inc b/zsnes/src/cpu/regsw.inc index e334d920..c8705c28 100644 --- a/zsnes/src/cpu/regsw.inc +++ b/zsnes/src/cpu/regsw.inc @@ -32,14 +32,17 @@ EXTSYM opexec358,opexec358cph EXTSYM hdmarestart EXTSYM printhex8 +%ifdef OPENSPC +EXTSYM SPC_PORT0R, SPC_PORT1R, SPC_PORT2R, SPC_PORT3R +%endif - -NEWSYM testgfxv1, db 0 -NEWSYM testgfxv2, db 0 - +SECTION .bss ;ALIGN=32 +NEWSYM testgfxv1, resb 1 +NEWSYM testgfxv2, resb 1 +SECTION .text NEWSYM initregw ; Fill register pointer with invalid register accesses @@ -444,7 +447,9 @@ reg2100w: and byte[forceblnk],80h ret -NEWSYM prevoamptr, db 0 +SECTION .bss ;ALIGN=32 +NEWSYM prevoamptr, resb 1 +SECTION .text ; OAM size register reg2101w: @@ -487,6 +492,7 @@ reg2101w: .noproc ret +SECTION .data ;ALIGN=32 .objsize1 db 1,1,1,4,4,16,1,1 .objsize2 db 4,16,64,16,64,64,4,4 .objmovs1 db 2,2,2,2,2,4,2,2 @@ -494,7 +500,9 @@ reg2101w: .objadds1 dw 14,14,14,14,14,12,14,14 .objadds2 dw 14,12,8,12,8,8,14,14 -NEWSYM oamlow, db 0 +SECTION .bss ;ALIGN=32 +NEWSYM oamlow, resb 1 +SECTION .text ; OAM address register reg2102w: @@ -798,7 +806,9 @@ reg210Ew: mov byte[bg1scroly+1],al ret -bgscroltemp db 0 +SECTION .bss ;ALIGN=32 +bgscroltemp resb 1 +SECTION .text ; BG2 horizontal scroll register reg210Fw: @@ -1124,7 +1134,9 @@ reg211Aw: mov [mode7set],al ret +SECTION .data ;ALIGN=32 NEWSYM multchange, db 1 +SECTION .text ; COS (COSINE) rotate angle / X Expansion reg211Bw: @@ -1328,7 +1340,9 @@ reg2133w: mov word[resolutn],239 ret -NEWSYM CleartheScreen, db 0 +SECTION .bss ;ALIGN=32 +NEWSYM CleartheScreen, resb 1 +SECTION .text ; Sound Register #1 reg2140w: @@ -1337,9 +1351,13 @@ reg2140w: jne .n mov byte[nmirept],0 .n +%ifdef OPENSPC + mov byte[SPC_PORT0R],al +%else mov byte[spcRam+0F4h],al inc dword[SPC700write] reenablespc +%endif ret ; cmp dword[cycpbl],0FFFFh ; ja .spcreset @@ -1351,9 +1369,13 @@ reg2140w: ; Sound Register #2 reg2141w: mov byte[sndwrit],1 +%ifdef OPENSPC + mov byte[SPC_PORT1R],al +%else mov byte[spcRam+0F5h],al inc dword[SPC700write] reenablespc +%endif ret ; cmp dword[cycpbl],0FFFFh ; ja .spcreset @@ -1365,9 +1387,13 @@ reg2141w: ; Sound Register #3 reg2142w: mov byte[sndwrit],1 +%ifdef OPENSPC + mov byte[SPC_PORT2R],al +%else mov byte[spcRam+0F6h],al inc dword[SPC700write] reenablespc +%endif ret ; cmp dword[cycpbl],0FFFFh ; ja .spcreset @@ -1379,9 +1405,13 @@ reg2142w: ; Sound Register #4 reg2143w: mov byte[sndwrit],1 +%ifdef OPENSPC + mov byte[SPC_PORT3R],al +%else mov byte[spcRam+0F7h],al inc dword[SPC700write] reenablespc +%endif ret ; cmp dword[cycpbl],0FFFFh ; ja .spcreset @@ -1417,7 +1447,9 @@ reg2183w: ret ; Joystick 1 & 2 status bytes -NEWSYM MultiTapStat, db 0 +SECTION .bss ;ALIGN=32 +NEWSYM MultiTapStat, resb 1 +SECTION .text reg4016w: test byte[INTEnab],1 @@ -1831,7 +1863,11 @@ regexiter: call printnum jmp DosExit +SECTION .data ;ALIGN=32 .invalidreg db 'Invalid Write Register : $' .invalidaddr db ' at address $' -.invbank db 0 -.invaddr db 0 + +SECTION .bss ;ALIGN=32 +.invbank resb 1 +.invaddr resb 1 +SECTION .text diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index 5203ab0e..ebeb25f4 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -66,7 +66,7 @@ EXTSYM nmirept,nmistatus,opexec268,opexec268b,opexec268cph EXTSYM opexec268cphb,opexec358,opexec358b,opexec358cph,spcextraram EXTSYM opexec358cphb,prevoamptr,reg1read,reg2read,reg3read EXTSYM reg4read,resolutn,romdata,scrndis,spcBuffera,spcP,spcRam -EXTSYM spcnumread,tableD,timeron,vidbright,DSPMem,OldGfxMode2 +EXTSYM spcnumread,spchalted,tableD,timeron,vidbright,DSPMem,OldGfxMode2 EXTSYM SPC700read,SPC700write,GUIDoReset,spc700read EXTSYM InitC4,SA1Reset,SetAddressingModesSA1,SetAddressingModes,SDD1BankA,SPC7110init EXTSYM RTCinit,InitOBC @@ -223,13 +223,14 @@ NEWSYM init xor edx,edx mov al,[MusicRelVol] shl eax,7 - mov ebx,100 - div ebx - cmp al,127 + mov ebx,0A3D70A3Dh + mul ebx + shr edx,6 + cmp dl,127 jb .noof - mov al,127 + mov dl,127 .noof - mov [MusicVol],al + mov [MusicVol],dl ; FIX STATMAT ; Here's the auto-load ZST file stuff @@ -406,7 +407,7 @@ NEWSYM cycpb358, db 149 ; 155 NEWSYM cycpbl2, db 109 ; percentage left of CPU/SPC to run (3.58 = 175) NEWSYM cycpblt2, db 149 ; percentage of CPU/SPC to run NEWSYM writeon, db 0 ; Write enable/disable on snes rom memory -NEWSYM totlines, dw 262 ; total # of lines +NEWSYM totlines, dw 263 ; total # of lines NEWSYM soundon, db 0 ; Current sound enabled (1=enabled) NEWSYM zsmesg, db 'ZSNES Save State File V0.6',26 NEWSYM versn, db 60 ; version #/100 @@ -585,29 +586,29 @@ NEWSYM Setper2exec ; Read Input Device Reads from Keyboard, etc. ;******************************************************* -SECTION .data -NEWSYM WhichSW, db 0 -NEWSYM WhichGR, db 0 -NEWSYM autofr, db 0 -TurboCB db 0 +SECTION .bss +NEWSYM WhichSW, resb 1 +NEWSYM WhichGR, resb 1 +NEWSYM autofr, resb 1 +TurboCB resb 1 -NEWSYM MovieTemp, db 0 -NEWSYM JoyAOrig, dd 0 -NEWSYM JoyBOrig, dd 0 -NEWSYM JoyCOrig, dd 0 -NEWSYM JoyDOrig, dd 0 -NEWSYM JoyEOrig, dd 0 -NEWSYM JoyANow, dd 0 -NEWSYM JoyBNow, dd 0 -NEWSYM JoyCNow, dd 0 -NEWSYM JoyDNow, dd 0 -NEWSYM JoyENow, dd 0 -NEWSYM PJoyAOrig, dd 0 -NEWSYM PJoyBOrig, dd 0 -NEWSYM PJoyCOrig, dd 0 -NEWSYM PJoyDOrig, dd 0 -NEWSYM PJoyEOrig, dd 0 -NEWSYM LethEnData, dd 0 +NEWSYM MovieTemp, resb 1 +NEWSYM JoyAOrig, resd 1 +NEWSYM JoyBOrig, resd 1 +NEWSYM JoyCOrig, resd 1 +NEWSYM JoyDOrig, resd 1 +NEWSYM JoyEOrig, resd 1 +NEWSYM JoyANow, resd 1 +NEWSYM JoyBNow, resd 1 +NEWSYM JoyCNow, resd 1 +NEWSYM JoyDNow, resd 1 +NEWSYM JoyENow, resd 1 +NEWSYM PJoyAOrig, resd 1 +NEWSYM PJoyBOrig, resd 1 +NEWSYM PJoyCOrig, resd 1 +NEWSYM PJoyDOrig, resd 1 +NEWSYM PJoyEOrig, resd 1 +NEWSYM LethEnData, resd 1 SECTION .text %macro PlayerDeviceHelp 3 @@ -682,7 +683,8 @@ SECTION .text je %%startprogress %%nopress add eax,66 - loop %%loop + dec ecx + jnz %%loop jmp %%endcomb %%startprogress mov byte[pressed+ebx],2 @@ -1355,15 +1357,20 @@ NEWSYM ProcessMovies call .writebuffertodisk ret +SECTION .data + .movieended db 'MOVIE FINISHED.',0 -NEWSYM MovieBuffSize, dd 0 -NEWSYM MovieBuffFrame, dd 0 -MovieBuffer times 21*60 dd 0 NEWSYM CFWriteStart, dd 64+30 -NEWSYM CReadHead, dd 0 -NEWSYM ReadHead, dd 0 -NEWSYM CFWriteHead, dd 0 -NEWSYM StoreBuffer, times 128*32 db 0 + +SECTION .bss +NEWSYM MovieBuffSize, resd 1 +NEWSYM MovieBuffFrame, resd 1 +MovieBuffer resd 21*60 +NEWSYM CReadHead, resd 1 +NEWSYM ReadHead, resd 1 +NEWSYM CFWriteHead, resd 1 +NEWSYM StoreBuffer, resb 128*32 + ;******************************************************* ; Init 65816 Initializes the Registers ;******************************************************* @@ -1498,7 +1505,9 @@ headerhack2: .nokingofrally ret +SECTION .data .mmx2head db 50,58,56,62,50,62,49,95,39,77,95,95,95,95,95,95,95,95,95,95 +SECTION .text EXTSYM ewj2hack EXTSYM latchyr @@ -1747,16 +1756,16 @@ NEWSYM headerhack mov byte[esi+1],0BCh ; RTS instead of jumping to a rts .nothomealone - mov esi,[romdata] - add esi,0FFC0h - cmp dword[esi],'EMER' - jne .notemeralddragon - cmp dword[esi+4],'ALD ' - jne .notemeralddragon - cmp dword[esi+8],'DRAG' - jne .notemeralddragon - mov byte[ENVDisable],1 -.notemeralddragon +; mov esi,[romdata] +; add esi,0FFC0h +; cmp dword[esi],'EMER' +; jne .notemeralddragon +; cmp dword[esi+4],'ALD ' +; jne .notemeralddragon +; cmp dword[esi+8],'DRAG' +; jne .notemeralddragon +; mov byte[ENVDisable],1 +;.notemeralddragon mov esi,[romdata] add esi,7FC0h @@ -2124,6 +2133,8 @@ NEWSYM headerhack .noromheaddk ret +SECTION .data + .ewj2head db 58,62,45,43,55,40,48,45,50,95,53,54,50,95,77,95,95,95,95,95 .bubshead db 61,10,29,12,06,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95 .btvdhead db 61,62,43,43,51,58,43,48,62,59,44,95,59,81,59,81,95,95,95,95 @@ -2136,6 +2147,7 @@ NEWSYM headerhack .adm3head db 62,59,59,62,50,44,95,57,62,50,54,51,38,95,41,62,51,42,58,44 .fmishead db 57,13,16,17,11,95,50,22,12,12,22,16,17,95,87,58,86,95,95,95 +SECTION .text NEWSYM idledetectspc @@ -2151,13 +2163,15 @@ NEWSYM idledetectspc mov eax,[MsgCount] mov [MessageOn],eax ret -.unableskip db 'SPC700 STALL DETECTED.',0 SECTION .data -NEWSYM ReturnFromSPCStall, db 0 -NEWSYM SPCStallSetting, db 0 -NEWSYM SPCSkipXtraROM, db 0 -NEWSYM WindowDisables, dd 0 +.unableskip db 'SPC700 STALL DETECTED.',0 + +SECTION .bss +NEWSYM ReturnFromSPCStall, resb 1 +NEWSYM SPCStallSetting, resb 1 +NEWSYM SPCSkipXtraROM, resb 1 +NEWSYM WindowDisables, resd 1 SECTION .text %macro helpclearmem 2 @@ -2327,7 +2341,8 @@ NEWSYM init65816 mov byte [reg3read],0 mov byte [reg4read],0 mov dword[cycpbl],0 - mov byte[spcnumread],0 + mov dword[spcnumread],0 + mov dword[spchalted],-1 mov dword[coladdr],0 mov byte[NMIEnab],1 mov word[VIRQLoc],0 @@ -2481,7 +2496,9 @@ NEWSYM init65816 mov dword[wramwriteptr],setwram1fff ret +SECTION .data .boffound db '.....',0 +SECTION .text getwram1fff: mov al,[wramdataa+1fffh] @@ -2500,11 +2517,11 @@ setwram1fff: ; Bank 7E : WRAM (0000h-FFFFh) ; Bank 7F : ExtendRAM (0000h-FFFFh) -SECTION .data -NEWSYM curromsize, db 0 -NEWSYM cromptradd, dd 0 -NEWSYM NoiseDisTemp, dd 0,0 -NEWSYM lorommapmode2, db 0 +SECTION .bss +NEWSYM curromsize, resb 1 +NEWSYM cromptradd, resd 1 +NEWSYM NoiseDisTemp, resd 2 +NEWSYM lorommapmode2, resb 1 SECTION .text NEWSYM initsnes @@ -3719,7 +3736,9 @@ NEWSYM printhex jnz .loopa ret +SECTION .data .hexdat db '0123456789ABCDEF' +SECTION .text NEWSYM printhex8 mov ecx,2 @@ -3728,7 +3747,7 @@ NEWSYM printhex8 mov bx,ax and bx,0F0h shr bx,4 - mov dl,[.hexdat+ebx] + mov dl,[printhex.hexdat+ebx] push ax mov ah,02h call Output_Text @@ -3738,7 +3757,31 @@ NEWSYM printhex8 jnz .loopb ret -.hexdat db '0123456789ABCDEF' +;EXTSYM _imp__OutputDebugStringA@4 + +;NEWSYM printhex32 +; pushf +; mov ecx,8 +;.loopa +; mov ebx,eax +; and ebx,0Fh +; mov dl,[printhex.hexdat+ebx] +; mov [.hexout-1+ecx],dl +; shr eax,4 +; dec ecx +; jnz .loopa + +; push dword .hexout +; call [_imp__OutputDebugStringA@4] + +; popf +; db 0C3h ; ret + +;section .bss +;NEWSYM __debug_crap_address__, dd 0,0,0,0 +;.hexout db "blahblah",0 +;section .text + ;******************************************************* ; Load File ;******************************************************* @@ -3768,7 +3811,10 @@ NEWSYM RetrieveDataIPS inc ecx ret -IPSSL dd 0 + +SECTION .bss +IPSSL resd 1 +SECTION .text NEWSYM PatchIPS %ifdef __LINUX__ @@ -3941,25 +3987,28 @@ NEWSYM PatchIPS ;.ltop ; mov byte[esi+edx],0 ; inc edx -; loop .ltop +; dec ecx +; jnz .ltop %ifdef __LINUX__ pushad call popdir popad %endif ret + +SECTION .data .ipsokaymsg db 'IPS PATCHED.',0 .ipsnokaymsg db 'IPS IS CORRUPT.',0 -section .data -NEWSYM Header512, db 0 -NEWSYM Prevextn, dd 0 -NEWSYM Headchek, db 0,0,0,0,0 -NEWSYM IPSLimit, dd 0 -NEWSYM IPSOffset, dd 0 -NEWSYM IPSCount, dd 0 -IPSPatched db 0 -section .text +SECTION .bss +NEWSYM Header512, resb 1 +NEWSYM Prevextn, resd 1 +NEWSYM Headchek, resb 5 +NEWSYM IPSLimit, resd 1 +NEWSYM IPSOffset, resd 1 +NEWSYM IPSCount, resd 1 +IPSPatched resb 1 +SECTION .text OpenCombFile: mov edx,fnames+1 @@ -4057,37 +4106,42 @@ NEWSYM loadfile jmp loadfileGUI.nogui SECTION .data -.multfound db 0 -.first db 0 -.cchar db 0 -.dotpos dd 0 -.curfileofs dd 0 -.filehand dw 0 .failop db 'Error opening file!',13,10,0 .opened db 'File opened successfully!',13,10,0 .mult db 'Multiple file format detected.',13,10,13,10,0 -.temp db 0 -.fail db 0 +SECTION .bss +.multfound resb 1 +.first resb 1 +.cchar resb 1 +.dotpos resd 1 +.curfileofs resd 1 +.filehand resw 1 +.temp resb 1 +.fail resb 1 -NEWSYM Checksumvalue, dw 0 -NEWSYM Checksumvalue2, dw 0 -NEWSYM SramExists, db 0 -NEWSYM NumofBanks, dd 0 -NEWSYM NumofBytes, dd 0 -NEWSYM ZipSupport, db 0 -InGUI db 0 +NEWSYM Checksumvalue, resw 1 +NEWSYM Checksumvalue2, resw 1 +NEWSYM SramExists, resb 1 +NEWSYM NumofBanks, resd 1 +NEWSYM NumofBytes, resd 1 +NEWSYM ZipSupport, resb 1 +InGUI resb 1 + +SECTION .data + %ifdef __LINUX__ tempdirname db '/tmp/zziptmp',0 %else tempdirname db 'zziptmp_.__z',0 %endif PrevDir db '..',0 -SECTION .text GUIfindBlank db '*.',0 +SECTION .text + %macro UnZipSearch 1 mov cx,20h mov edx,%1 @@ -4099,9 +4153,13 @@ GUIfindBlank db '*.',0 %%notfound %endmacro +SECTION .data InvalidZip db 'ZSNES Version A does not support .ZIP files.',13,10,'Please use Version C for this feature.',10,13,0 -ZipError db 0 +SECTION .bss +ZipError resb 1 + +SECTION .text UnZipFile: ; cmp byte[OSPort],1 @@ -4271,7 +4329,9 @@ ZipDelete: call Makemode7Table ret -tempzip db 0 +SECTION .bss +tempzip resb 1 +SECTION .text ZipDeleteRecurse: ; Find all directories @@ -4343,15 +4403,14 @@ ZipDeleteRecurse: .notfound ret -SPC7110Allocated db 0 +SECTION .data + SPC7110DIRA db 'FEOEZSP7',0 SPC7110DIRB db 'SMHT-SP7',0 SDD1DIRA db 'SOCNSDD1',0 SDD1DIRB db 'SFA2SDD1',0 SPC7110IndexName db 'index.bin',0 SPC7110DirEntry db '*.bin',0 -SPC7110CPtr dd 0 -SPC7110CPtr2 dd 0 NEWSYM SDD1Offset, dd 65536*8 %ifndef __LINUX__ NEWSYM SDD1nfname, db ' \_00000-0.bin',0 @@ -4363,13 +4422,21 @@ NEWSYM SPC7110nfname, db ' / .bin',0 NEWSYM SDD1ifname, db 'sdd1gfx.idx',0 NEWSYM SDD1dfname, db 'sdd1gfx.dat',0 NEWSYM SDD1pfname, db 'sdd1gfx.pat',0 -NEWSYM SPC7110IndexSize, dd 0 -NEWSYM SPC7110Entries, dd 0 spc7110notfound db 'DECOMPRESSED PACK NOT FOUND',0 spc7110notfoundb db 'INDEX DATA NOT FOUND',0 -SDD1PatchAddr dd 0 -SDD1PatchOfs dd 0 -SDD1PatchLen dd 0 + +SECTION .bss + +SPC7110Allocated resb 1 +SPC7110CPtr resd 1 +SPC7110CPtr2 resd 1 +NEWSYM SPC7110IndexSize, resd 1 +NEWSYM SPC7110Entries, resd 1 +SDD1PatchAddr resd 1 +SDD1PatchOfs resd 1 +SDD1PatchLen resd 1 + +SECTION .text EXTSYM sdd1fname @@ -5111,8 +5178,13 @@ NEWSYM loadfileGUI jmp near .notwiz4 -.romtable times 128 db 0 -.romtableb times 128 db 0 +SECTION .bss + +.romtable resb 128 +.romtableb resb 128 + +SECTION .text + .notwiz4 jmp .skipall @@ -5290,20 +5362,23 @@ NEWSYM loadfileGUI jmp DosExit SECTION .data -.multfound db 0 -.first db 0 -.cchar db 0 -.dotpos dd 0 -.curfileofs dd 0 -.filehand dw 0 -.temp db 0 -.fail db 0 .failop db 'Error opening file!',13,10,0 .opened db 'File opened successfully!',13,10,0 .mult db 'Multiple file format detected.',13,10,13,10,0 -.maxromspace dd 0 -.curromspace dd 0 -NEWSYM GUIloadfailed, db 0 + +SECTION .bss + +.multfound resb 1 +.first resb 1 +.cchar resb 1 +.dotpos resd 1 +.curfileofs resd 1 +.filehand resw 1 +.temp resb 1 +.fail resb 1 +.maxromspace resd 1 +.curromspace resd 1 +NEWSYM GUIloadfailed, resb 1 SECTION .text @@ -5385,7 +5460,9 @@ NEWSYM convertsram call Change_Dir ret +SECTION .data NEWSYM CSStatus, db ' TYPE: CHSUM:OK ',0 +SECTION .text NEWSYM showinfogui mov esi,[romdata] @@ -5880,7 +5957,6 @@ NEWSYM showinfo ret SECTION .data -.memfree times 30 db 0 .filename db 'Filename : ',0 .frameskip db 'Frame Skip : ',0 .percexec db '% to Exec : ',0 @@ -5930,8 +6006,12 @@ SECTION .data .doh db 'Cannot detect whether cartridge is HiROM or LoROM.',13,10,'Please use -h/-l',13,10,0 .intlvd db 'Image is uninterleaved.',13,10,0 -NEWSYM DSP1Type, db 0 -NEWSYM intldone, db 0 +SECTION .bss + +.memfree resb 30 + +NEWSYM DSP1Type, resb 1 +NEWSYM intldone, resb 1 SECTION .text NEWSYM CheckROMType @@ -6371,18 +6451,18 @@ NEWSYM CheckROMType call SPC7110Load ret -SECTION .data -NEWSYM SFXEnable, db 0 -NEWSYM C4Enable, db 0 -NEWSYM SPC7110Enable, db 0 -NEWSYM RTCEnable, db 0 -NEWSYM SA1Enable, db 0 -NEWSYM SDD1Enable, db 0 -NEWSYM OBCEnable, db 0 -NEWSYM C4RamR, dd 0 -NEWSYM C4RamW, dd 0 -NEWSYM C4Ram, dd 0 -NEWSYM ROMTypeNOTFound, db 0 +SECTION .bss +NEWSYM SFXEnable, resb 1 +NEWSYM C4Enable, resb 1 +NEWSYM SPC7110Enable, resb 1 +NEWSYM RTCEnable, resb 1 +NEWSYM SA1Enable, resb 1 +NEWSYM SDD1Enable, resb 1 +NEWSYM OBCEnable, resb 1 +NEWSYM C4RamR, resd 1 +NEWSYM C4RamW, resd 1 +NEWSYM C4Ram, resd 1 +NEWSYM ROMTypeNOTFound, resb 1 SECTION .text NEWSYM SetIRQVectors @@ -6482,8 +6562,9 @@ NEWSYM outofmemfix mov dword[MessageOn],0FFFFFFFFh ret +SECTION .bss +NEWSYM yesoutofmemory, resb 1 SECTION .data -NEWSYM yesoutofmemory, db 0 NEWSYM outofmemoryerror, db 'OUT OF MEMORY.',0 NEWSYM outofmemoryerror2, db 'ROM IS TOO BIG.',0 SECTION .text