diff --git a/zsnes/src/video/2xsaimmx.inc b/zsnes/src/video/2xsaimmx.inc index b97f235f..8f9461eb 100644 --- a/zsnes/src/video/2xsaimmx.inc +++ b/zsnes/src/video/2xsaimmx.inc @@ -2072,5 +2072,4 @@ final1b resb 8 final2a resb 8 final2b resb 8 - - +SECTION .text diff --git a/zsnes/src/video/2xsaiw.asm b/zsnes/src/video/2xsaiw.asm index 9278b2d7..f5badf6e 100644 --- a/zsnes/src/video/2xsaiw.asm +++ b/zsnes/src/video/2xsaiw.asm @@ -786,7 +786,7 @@ NEWSYM _2xSaISuper2xSaILineW pop ecx sub ecx, 4 cmp ecx, 0 - jg near .Loop + jg .Loop ; Restore some stuff popad @@ -1345,7 +1345,7 @@ NEWSYM _2xSaISuperEagleLineW pop ecx sub ecx, 4 cmp ecx, 0 - jg near .Loop + jg .Loop ; Restore some stuff popad @@ -1954,7 +1954,7 @@ NEWSYM _2xSaILineW pop ecx sub ecx, 4 cmp ecx, 0 - jg near .Loop + jg .Loop ; Restore some stuff popad diff --git a/zsnes/src/video/2xsaiw.inc b/zsnes/src/video/2xsaiw.inc index 08a53076..4b4b8408 100644 --- a/zsnes/src/video/2xsaiw.inc +++ b/zsnes/src/video/2xsaiw.inc @@ -1354,21 +1354,23 @@ FALSE dd 0x00000000, 0x00000000 TRUE dd 0xffffffff, 0xffffffff ONE dd 0x00010001, 0x00010001 -ACPixel times 8 db 0 -Mask1 times 8 db 0 -Mask2 times 8 db 0 -I56Pixel times 8 db 0 -I23Pixel times 8 db 0 -Mask26 times 8 db 0 -Mask35 times 8 db 0 -Mask26b times 8 db 0 -Mask35b times 8 db 0 -product1a times 8 db 0 -product1b times 8 db 0 -product2a times 8 db 0 -product2b times 8 db 0 -final1a times 8 db 0 -final1b times 8 db 0 -final2a times 8 db 0 -final2b times 8 db 0 + SECTION .bss ALIGN = 32 +ACPixel resb 8 +Mask1 resb 8 +Mask2 resb 8 + +I56Pixel resb 8 +I23Pixel resb 8 +Mask26 resb 8 +Mask35 resb 8 +Mask26b resb 8 +Mask35b resb 8 +product1a resb 8 +product1b resb 8 +product2a resb 8 +product2b resb 8 +final1a resb 8 +final1b resb 8 +final2a resb 8 +final2b resb 8 diff --git a/zsnes/src/video/m716text.asm b/zsnes/src/video/m716text.asm index 201de5c5..901ca8ee 100644 --- a/zsnes/src/video/m716text.asm +++ b/zsnes/src/video/m716text.asm @@ -670,33 +670,34 @@ NEWSYM M716TExtAsmStart jnz near .offscrtrc jmp .goon -ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dd 0 ; cx location -.cyloc dd 0 ; cy location +SECTION .bss ;ALIGN=32 +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resd 1 ; cx location +.cyloc resd 1 ; cy location +SECTION .text %endmacro ;******************************************************* diff --git a/zsnes/src/video/makev16b.asm b/zsnes/src/video/makev16b.asm index fccd955f..3d825ce4 100644 --- a/zsnes/src/video/makev16b.asm +++ b/zsnes/src/video/makev16b.asm @@ -60,11 +60,14 @@ NEWSYM MakeV16BAsmStart ;drawspritesprio -NEWSYM tempstuff, dd 0 +SECTION .bss +NEWSYM tempstuff, resd 1 -ALIGN16 -.stuff dd 0 -.stuff2 db 0,0 +;ALIGN16 +.stuff resd 1 +.stuff2 resb 2 + +SECTION .text %macro procmode716bextbg 3 xor eax,eax @@ -886,7 +889,9 @@ NEWSYM setpalall .noveg2 ret -NEWSYM colleft16b, db 0 +SECTION .bss +NEWSYM colleft16b, resb 1 +SECTION .text NEWSYM setpalette16b cmp byte[gammalevel16b],0 @@ -1858,7 +1863,9 @@ NEWSYM draw8x816b .nodraw2 ret -NEWSYM tileleft16b, db 0 +SECTION .bss +NEWSYM tileleft16b, resb 1 +SECTION .text NEWSYM draw8x816bwinon mov byte[tileleft16b],33 @@ -2955,8 +2962,10 @@ NEWSYM draw16x1616b jne near domosaic16b ret -.yadd dw 0 -.yflipadd dw 0 +SECTION .bss +.yadd resw 1 +.yflipadd resw 1 +SECTION .text draw16x1616bwinon: mov byte[tileleft16b],33 diff --git a/zsnes/src/video/makev16t.asm b/zsnes/src/video/makev16t.asm index a3197f1b..9dd1597f 100644 --- a/zsnes/src/video/makev16t.asm +++ b/zsnes/src/video/makev16t.asm @@ -989,8 +989,9 @@ NEWSYM drawbackgrndmain16tfix ALIGN32 -NEWSYM transpbuf, times 576+16+288*2 db 0 ; Transparent buffer - +SECTION .bss +NEWSYM transpbuf, resb 576+16+288*2 ; Transparent buffer +SECTION .text NEWSYM drawline16t cmp byte[bgmode],7 @@ -1397,8 +1398,10 @@ NEWSYM processmode716t2 ; Clear Backarea, with 0s ;******************************************************* -NEWSYM prevrgbcol, dd 0 -NEWSYM prevrgbpal, dd 0 +SECTION .bss +NEWSYM prevrgbcol, resd 1 +NEWSYM prevrgbpal, resd 1 +SECTION .text NEWSYM clearback16bts mov byte[DoTransp],0 @@ -1490,7 +1493,9 @@ NEWSYM clearback16bts xor eax,eax ret -mmxtempdat dd 0,0 +SECTION .bss +mmxtempdat resd 2 +SECTION .text NEWSYM clearback16bts0b mov eax,[coladdr] @@ -1967,7 +1972,9 @@ NEWSYM clearback16bdualrev2 .findraw ret -NEWSYM DoTransp, db 0 +SECTION .bss +NEWSYM DoTransp, resb 1 +SECTION .data ;******************************************************* ; Clear Backarea, 16-bit mode w/ transparency @@ -3185,7 +3192,9 @@ NEWSYM draw8x816ts ret ALIGN32 -NEWSYM coadder16, dd 0 +SECTION .bss +NEWSYM coadder16, resd 1 +SECTION .text NEWSYM draw8x816twinon mov ebp,transpbuf+32 @@ -4744,8 +4753,10 @@ NEWSYM draw16x1616t jne near domosaic16b ret -NEWSYM yadd, dw 0 -NEWSYM yflipadd, dw 0 +SECTION .bss +NEWSYM yadd, resw 1 +NEWSYM yflipadd, resw 1 +SECTION .text NEWSYM draw16x16fulladd mov byte[tileleft16b],33 diff --git a/zsnes/src/video/makevid.asm b/zsnes/src/video/makevid.asm index b0acd366..53b59474 100644 --- a/zsnes/src/video/makevid.asm +++ b/zsnes/src/video/makevid.asm @@ -51,8 +51,10 @@ NEWSYM MakeVidAsmStart ;drawspritesprio -NEWSYM bgcoloradder, db 0 -NEWSYM res512switch, db 0 +SECTION .bss +NEWSYM bgcoloradder, resb 1 +NEWSYM res512switch, resb 1 +SECTION .text ; mov cl,[bshifter] ;******************************************************* @@ -175,18 +177,22 @@ NEWSYM res512switch, db 0 call drawmode7extbg2 %endmacro +SECTION .data NEWSYM MosaicYAdder, dw 0,0,0,1,0,2,1,0,0,4,2,2,3,1,0,7 -NEWSYM pwinbgenab, db 0 -NEWSYM pwinbgtype, dd 0 -NEWSYM winonbtype, db 0 -NEWSYM dualwinbg, db 0 -NEWSYM pwinspenab, db 0 -NEWSYM pwinsptype, dd 0 -NEWSYM winonstype, db 0 -NEWSYM dualwinsp, db 0 NEWSYM cwinptr, dd winbgdata -NEWSYM dwinptrproc, dd 0 + +SECTION .bss +NEWSYM pwinbgenab, resb 1 +NEWSYM pwinbgtype, resd 1 +NEWSYM winonbtype, resb 1 +NEWSYM dualwinbg, resb 1 +NEWSYM pwinspenab, resb 1 +NEWSYM pwinsptype, resd 1 +NEWSYM winonstype, resb 1 +NEWSYM dualwinsp, resb 1 +NEWSYM dwinptrproc, resd 1 +SECTION .text ; is this macro even used? %macro ClearWindowData 0 @@ -731,11 +737,13 @@ NEWSYM dualwinxnor jnz .loopxor2 ret +SECTION .bss ;pwinspenab db 0 ;pwinsptype dd 0 ;winonstype db 0 ;dualwinsp db 0 -NEWSYM winonsp, db 0 +NEWSYM winonsp, resb 1 +SECTION .text NEWSYM makewindowsp mov al,[winobjen] @@ -890,11 +898,13 @@ NEWSYM makedualwinsp jmp dualstartprocess ; window logic data -NEWSYM windowdata, times 16 db 0 -NEWSYM numwin, db 0 -NEWSYM multiwin, db 0 -NEWSYM multiclip, db 0 -NEWSYM multitype, db 0 +SECTION .bss +NEWSYM windowdata, resb 16 +NEWSYM numwin, resb 1 +NEWSYM multiwin, resb 1 +NEWSYM multiclip, resb 1 +NEWSYM multitype, resb 1 +SECTION .text ; jmp .finishwin %macro procwindow 1 @@ -1069,7 +1079,9 @@ NEWSYM procspritesmain .nosprites ret -NEWSYM curbgnum, db 0 +SECTION .bss +NEWSYM curbgnum, resb 1 +SECTION .text NEWSYM drawbackgrndsub mov esi,[colormodeofs] @@ -1294,39 +1306,41 @@ NEWSYM procbackgrnd .noback ret -NEWSYM nextprimode, db 0 -NEWSYM cursprloc, dd 0 -NEWSYM curcolor, db 0 -NEWSYM curtileptr, dw 0 +SECTION .bss +NEWSYM nextprimode, resb 1 +NEWSYM cursprloc, resd 1 +NEWSYM curcolor, resb 1 +NEWSYM curtileptr, resw 1 ; esi = pointer to video buffer ; edi = pointer to tile data ; ebx = cached memory ; al = current x position -NEWSYM bg1vbufloc, dd 0 -NEWSYM bg2vbufloc, dd 0 -NEWSYM bg3vbufloc, dd 0 -NEWSYM bg4vbufloc, dd 0 -NEWSYM bg1tdatloc, dd 0 -NEWSYM bg2tdatloc, dd 0 -NEWSYM bg3tdatloc, dd 0 -NEWSYM bg4tdatloc, dd 0 -NEWSYM bg1tdabloc, dd 0 -NEWSYM bg2tdabloc, dd 0 -NEWSYM bg3tdabloc, dd 0 -NEWSYM bg4tdabloc, dd 0 -NEWSYM bg1cachloc, dd 0 -NEWSYM bg2cachloc, dd 0 -NEWSYM bg3cachloc, dd 0 -NEWSYM bg4cachloc, dd 0 -NEWSYM bg1yaddval, dd 0 -NEWSYM bg2yaddval, dd 0 -NEWSYM bg3yaddval, dd 0 -NEWSYM bg4yaddval, dd 0 -NEWSYM bg1xposloc, dd 0 -NEWSYM bg2xposloc, dd 0 -NEWSYM bg3xposloc, dd 0 -NEWSYM bg4xposloc, dd 0 -NEWSYM alreadydrawn, db 0 +NEWSYM bg1vbufloc, resd 1 +NEWSYM bg2vbufloc, resd 1 +NEWSYM bg3vbufloc, resd 1 +NEWSYM bg4vbufloc, resd 1 +NEWSYM bg1tdatloc, resd 1 +NEWSYM bg2tdatloc, resd 1 +NEWSYM bg3tdatloc, resd 1 +NEWSYM bg4tdatloc, resd 1 +NEWSYM bg1tdabloc, resd 1 +NEWSYM bg2tdabloc, resd 1 +NEWSYM bg3tdabloc, resd 1 +NEWSYM bg4tdabloc, resd 1 +NEWSYM bg1cachloc, resd 1 +NEWSYM bg2cachloc, resd 1 +NEWSYM bg3cachloc, resd 1 +NEWSYM bg4cachloc, resd 1 +NEWSYM bg1yaddval, resd 1 +NEWSYM bg2yaddval, resd 1 +NEWSYM bg3yaddval, resd 1 +NEWSYM bg4yaddval, resd 1 +NEWSYM bg1xposloc, resd 1 +NEWSYM bg2xposloc, resd 1 +NEWSYM bg3xposloc, resd 1 +NEWSYM bg4xposloc, resd 1 +NEWSYM alreadydrawn, resb 1 +SECTION .text NEWSYM fillwithnothing push edi @@ -1340,8 +1354,11 @@ NEWSYM fillwithnothing pop edi ret -NEWSYM bg3draw, db 0 -NEWSYM maxbr, db 0 +SECTION .bss +NEWSYM bg3draw, resb 1 +NEWSYM maxbr, resb 1 +SECTION .text + NEWSYM blanker ; calculate current video offset push ebx @@ -1365,9 +1382,11 @@ NEWSYM blanker ret ALIGN32 -NEWSYM bg3high2, dd 0 -NEWSYM newengen, dd 0 -NEWSYM cwinenabm, dd 0 +SECTION .bss +NEWSYM bg3high2, resd 1 +NEWSYM newengen, resd 1 +NEWSYM cwinenabm, resd 1 +SECTION .text NEWSYM drawline mov al,[winenabs] @@ -1678,10 +1697,12 @@ NEWSYM priority2 ret ALIGN32 -NEWSYM tempbuffer, times 33 dd 0 -NEWSYM currentobjptr, dd 0 -NEWSYM curmosaicsz, dd 0 -NEWSYM extbgdone, db 0 +SECTION .bss +NEWSYM tempbuffer, resd 33 +NEWSYM currentobjptr, resd 1 +NEWSYM curmosaicsz, resd 1 +NEWSYM extbgdone, resb 1 +SECTION .text NEWSYM processmode7 @@ -2415,9 +2436,11 @@ NEWSYM drawspritespriowinon jnz near .loopobj2 ret +SECTION .data NEWSYM prfixobjl, db 0 NEWSYM csprbit, db 1 NEWSYM csprprlft, db 0 +SECTION .text ;******************************************************* ; Processes & Draws 8x8 tiles in 2, 4, & 8 bit mode ;******************************************************* @@ -2626,8 +2649,10 @@ NEWSYM proc16x8 ; al = current x position ret -NEWSYM drawn, db 0 -NEWSYM curbgpr, db 0 ; 00h = low priority, 20h = high priority +SECTION .bss +NEWSYM drawn, resb 1 +NEWSYM curbgpr, resb 1 ; 00h = low priority, 20h = high priority +SECTION .text %macro drawpixel8b8x8 3 or %1,%1 @@ -2647,7 +2672,9 @@ NEWSYM curbgpr, db 0 ; 00h = low priority, 20h = high priority %2 %endmacro -NEWSYM winptrref, dd 0 +SECTION .bss +NEWSYM winptrref, resd 1 +SECTION .text NEWSYM draw8x8 cmp byte[osm2dis],1 @@ -2917,8 +2944,10 @@ NEWSYM draw8x8winon jnz near .loopa ret -NEWSYM alttile, db 0 -NEWSYM hirestiledat, times 256 db 0 +SECTION .bss +NEWSYM alttile, resb 1 +NEWSYM hirestiledat, resb 256 +SECTION .text NEWSYM draw16x8 push eax @@ -3498,7 +3527,9 @@ NEWSYM draw16x8bwinon jnz near .loopa ret +SECTION .data NEWSYM extraleft, db 0,0,0,1,0,1,2,2,0,2,3,1,2,4,2,1 +SECTION .text NEWSYM domosaic mov esi,xtravbuf+16 @@ -3645,20 +3676,22 @@ NEWSYM dowindow ALIGN32 -NEWSYM yadder, dd 0 -NEWSYM yrevadder, dd 0 -NEWSYM tempcach, dd 0 ; points to cached memory -NEWSYM temptile, dd 0 ; points to the secondary video pointer -NEWSYM bgptr, dd 0 -NEWSYM bgptrb, dd 0 -NEWSYM bgptrc, dd 0 -NEWSYM bgptrd, dd 0 -NEWSYM bgptrx1, dd 0 -NEWSYM bgptrx2, dd 0 -NEWSYM curvidoffset, dd 0 -NEWSYM winon, dd 0 -NEWSYM bgofwptr, dd 0 -NEWSYM bgsubby, dd 0 +SECTION .bss +NEWSYM yadder, resd 1 +NEWSYM yrevadder, resd 1 +NEWSYM tempcach, resd 1 ; points to cached memory +NEWSYM temptile, resd 1 ; points to the secondary video pointer +NEWSYM bgptr, resd 1 +NEWSYM bgptrb, resd 1 +NEWSYM bgptrc, resd 1 +NEWSYM bgptrd, resd 1 +NEWSYM bgptrx1, resd 1 +NEWSYM bgptrx2, resd 1 +NEWSYM curvidoffset, resd 1 +NEWSYM winon, resd 1 +NEWSYM bgofwptr, resd 1 +NEWSYM bgsubby, resd 1 +SECTION .text NEWSYM draw8x8offset @@ -3915,21 +3948,23 @@ NEWSYM draw8x8winonoffset ALIGN32 -NEWSYM offsetmodeptr, dd 0 -NEWSYM offsetptra, dd 0 -NEWSYM offsetptrb, dd 0 -NEWSYM prevtempcache, dd 0 -NEWSYM prevoffsetdat, dd 0 -NEWSYM offsetenab, dd 0 -NEWSYM offsettilel, dd 0 -NEWSYM offsetrevval, dd 0 -NEWSYM posyscroll, dd 0 -NEWSYM offsetmcol, dd 0 -NEWSYM offsetmshl, dd 0 -NEWSYM offsetmptr, dd 0 -NEWSYM offsetmtst, dd 0 -NEWSYM offsetmclr, dd 0 -NEWSYM offsetcedi, dd 0 +SECTION .bss +NEWSYM offsetmodeptr, resd 1 +NEWSYM offsetptra, resd 1 +NEWSYM offsetptrb, resd 1 +NEWSYM prevtempcache, resd 1 +NEWSYM prevoffsetdat, resd 1 +NEWSYM offsetenab, resd 1 +NEWSYM offsettilel, resd 1 +NEWSYM offsetrevval, resd 1 +NEWSYM posyscroll, resd 1 +NEWSYM offsetmcol, resd 1 +NEWSYM offsetmshl, resd 1 +NEWSYM offsetmptr, resd 1 +NEWSYM offsetmtst, resd 1 +NEWSYM offsetmclr, resd 1 +NEWSYM offsetcedi, resd 1 +SECTION .text ;******************************************************* ; Processes & Draws 16x16 tiles in 2, 4, & 8 bit mode @@ -4238,8 +4273,10 @@ NEWSYM draw16x16 jne near domosaic ret -.yadd dw 0 -.yflipadd dw 0 +SECTION .bss +.yadd resw 1 +.yflipadd resw 1 +SECTION .text NEWSYM draw16x16winon .domosaic @@ -4379,10 +4416,12 @@ NEWSYM draw16x16winon jnz near .loopa ret -NEWSYM temp, db 0 -NEWSYM bshifter, db 0 -NEWSYM a16x16xinc, db 0 -NEWSYM a16x16yinc, db 0 +SECTION .bss +NEWSYM temp, resb 1 +NEWSYM bshifter, resb 1 +NEWSYM a16x16xinc, resb 1 +NEWSYM a16x16yinc, resb 1 +SECTION .text NEWSYM MakeVidAsmEnd diff --git a/zsnes/src/video/mode7.asm b/zsnes/src/video/mode7.asm index ad064378..1ae833c2 100644 --- a/zsnes/src/video/mode7.asm +++ b/zsnes/src/video/mode7.asm @@ -143,37 +143,39 @@ NEWSYM drawmode7 Mode7ProcessB Mode7Normal, domosaic, 1 ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 +SECTION .text .drawmode7win .domosaicw @@ -264,37 +266,39 @@ NEWSYM drawmode7win Mode7ProcessB Mode7Normal, domosaicng, 1 ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 +SECTION .text .drawmode7win .domosaicw @@ -383,37 +387,39 @@ NEWSYM drawmode7winB Mode7ProcessB Mode7Normal, domosaic, 1 ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 +SECTION .text .drawmode7win .domosaicw @@ -506,38 +512,40 @@ NEWSYM drawmode7winhr Mode7ProcessBhr Mode7Normal, domosaicng, 1 ALIGN32 -.temp dd 0 ; for byte move left -.temp2 dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.temp2 resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 +SECTION .text NEWSYM drawmode7winBhr ProcessBuildWindow 0 @@ -611,48 +619,50 @@ NEWSYM drawmode7winBhr Mode7ProcessBhr Mode7Normal, domosaic, 1 ALIGN32 -.temp dd 0 ; for byte move left -.temp2 dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.temp2 resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 -ALIGN32 -NEWSYM ngwleft, dd 0 ; for byte move left -NEWSYM ngwleftb, dd 0 ; for byte move left -NEWSYM mode7xpos, dd 0,0 ; x position -NEWSYM mode7ypos, dd 0,0 ; x position -NEWSYM mode7xrpos, dd 0,0 ; x position, relative -NEWSYM mode7yrpos, dd 0,0 ; y position, relative -NEWSYM mode7xadder, dd 0,0 ; number to add for x -NEWSYM mode7yadder, dd 0,0 ; number to add for y +;ALIGN32 +NEWSYM ngwleft, resd 1 ; for byte move left +NEWSYM ngwleftb, resd 1 ; for byte move left +NEWSYM mode7xpos, resd 2 ; x position +NEWSYM mode7ypos, resd 2 ; x position +NEWSYM mode7xrpos, resd 2 ; x position, relative +NEWSYM mode7yrpos, resd 2 ; y position, relative +NEWSYM mode7xadder, resd 2 ; number to add for x +NEWSYM mode7yadder, resd 2 ; number to add for y +SECTION .text NEWSYM ProcessMode7ngwin mov ecx,[ngcwinptr] diff --git a/zsnes/src/video/mode716.asm b/zsnes/src/video/mode716.asm index aeee0a22..6eacd7ca 100644 --- a/zsnes/src/video/mode716.asm +++ b/zsnes/src/video/mode716.asm @@ -552,45 +552,47 @@ drawmode7ngextbg216bsnt: ExtBG2 ExtBGNormalsnt ALIGN32 -mtemp dd 0 ; for byte move left -mmode7xpos dd 0 ; x position -mtempa2 dd 0 ; keep this blank! -mmode7xrpos dd 0 ; x position -mtempa dd 0 ; keep this blank! -mmode7ypos dd 0 ; y position -mtempb2 dd 0 ; keep this blank! -mmode7yrpos dd 0 ; y position -mtempb dd 0 ; keep this blank! -mmode7xadder dd 0 ; number to add for x -mtempc2 dd 0 ; keep this blank! -mmode7xadd2 dd 0 ; number to add for x -mtempc dd 0 ; keep this blank! -mmode7yadder dd 0 ; number to add for y -mtempd2 dd 0 ; keep this blank! -mmode7yadd2 dd 0 ; number to add for y -mtempd dd 0 ; keep this blank! -mmode7ptr dd 0 ; pointer value -mmode7xinc dd 0 ; number to add for x -mmode7xincc dd 0 ; range check for x -mmode7yinc dd 0 ; number to add for y -mmode7xsloc dd 0 ; which screen x -mmode7ysloc dd 0 ; which screen y -mmode7xsrl dd 0 ; which relative screen x -mmode7ysrl dd 0 ; which relative screen y -mcxloc dw 0 ; cx location -mcyloc dw 0 ; cy location -M7HROn dd 0 ; High Resolution On -switchtorep3 dd 0 +SECTION .bss +mtemp resd 1 ; for byte move left +mmode7xpos resd 1 ; x position +mtempa2 resd 1 ; keep this blank! +mmode7xrpos resd 1 ; x position +mtempa resd 1 ; keep this blank! +mmode7ypos resd 1 ; y position +mtempb2 resd 1 ; keep this blank! +mmode7yrpos resd 1 ; y position +mtempb resd 1 ; keep this blank! +mmode7xadder resd 1 ; number to add for x +mtempc2 resd 1 ; keep this blank! +mmode7xadd2 resd 1 ; number to add for x +mtempc resd 1 ; keep this blank! +mmode7yadder resd 1 ; number to add for y +mtempd2 resd 1 ; keep this blank! +mmode7yadd2 resd 1 ; number to add for y +mtempd resd 1 ; keep this blank! +mmode7ptr resd 1 ; pointer value +mmode7xinc resd 1 ; number to add for x +mmode7xincc resd 1 ; range check for x +mmode7yinc resd 1 ; number to add for y +mmode7xsloc resd 1 ; which screen x +mmode7ysloc resd 1 ; which screen y +mmode7xsrl resd 1 ; which relative screen x +mmode7ysrl resd 1 ; which relative screen y +mcxloc resw 1 ; cx location +mcyloc resw 1 ; cy location +M7HROn resd 1 ; High Resolution On +switchtorep3 resd 1 -m7xaddof dd 0 -m7xaddof2 dd 0 -m7yaddof dd 0 -m7yaddof2 dd 0 -pixelsleft dd 0 -mm7xaddof dd 0 -mm7xaddof2 dd 0 -mm7yaddof dd 0 -mm7yaddof2 dd 0 +m7xaddof resd 1 +m7xaddof2 resd 1 +m7yaddof resd 1 +m7yaddof2 resd 1 +pixelsleft resd 1 +mm7xaddof resd 1 +mm7xaddof2 resd 1 +mm7yaddof resd 1 +mm7yaddof2 resd 1 +SECTION .text %macro newvaluepred 2 mov dx,word[%1+ebx*4+8] diff --git a/zsnes/src/video/mode716b.asm b/zsnes/src/video/mode716b.asm index 685c7378..ec1daa64 100644 --- a/zsnes/src/video/mode716b.asm +++ b/zsnes/src/video/mode716b.asm @@ -139,37 +139,39 @@ NEWSYM drawmode716b Mode7ProcessB Mode7Normal, domosaic16b, 2 ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 +SECTION .text .drawmode7win .domosaicw diff --git a/zsnes/src/video/mode716d.asm b/zsnes/src/video/mode716d.asm index 0701e1da..140d80ef 100644 --- a/zsnes/src/video/mode716d.asm +++ b/zsnes/src/video/mode716d.asm @@ -96,7 +96,9 @@ NEWSYM Gendcolortable ;******************************************************* ; Processes & Draws Mode 7 ;******************************************************* -NEWSYM prevbrightdc, db 0 +SECTION .bss +NEWSYM prevbrightdc, resb 1 +SECTION .text NEWSYM drawmode7dcolor mov bl,[vidbright] cmp bl,[prevbrightdc] @@ -183,37 +185,39 @@ NEWSYM drawmode7dcolor Mode7ProcessB Mode7Normal, domosaic16b, 2 ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 +SECTION .text .drawmode7win .domosaicw diff --git a/zsnes/src/video/mode716e.asm b/zsnes/src/video/mode716e.asm index d312081e..91d1ec7a 100644 --- a/zsnes/src/video/mode716e.asm +++ b/zsnes/src/video/mode716e.asm @@ -592,33 +592,35 @@ NEWSYM drawmode716extbg jmp .goon ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dd 0 ; cx location -.cyloc dd 0 ; cy location +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resd 1 ; cx location +.cyloc resd 1 ; cy location +SECTION .text NEWSYM drawmode716bwinonextbg @@ -1165,33 +1167,35 @@ NEWSYM drawmode716bwinonextbg jmp .goon ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dd 0 ; cx location -.cyloc dd 0 ; cy location +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resd 1 ; cx location +.cyloc resd 1 ; cy location +SECTION .text NEWSYM drawmode716extbg2 mov esi,[cwinptr] diff --git a/zsnes/src/video/mode716t.asm b/zsnes/src/video/mode716t.asm index d74a333b..bc2996a9 100644 --- a/zsnes/src/video/mode716t.asm +++ b/zsnes/src/video/mode716t.asm @@ -262,37 +262,39 @@ NEWSYM Mode716TAsmStart Mode7ProcessB %1, domosaic16b, 2 ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 +SECTION .text .drawmode7win .domosaicw @@ -361,6 +363,8 @@ NEWSYM drawmode716tb mov [cwinptr2],esi mode716tmacro mode7mainsub,mode7mainsubwinon -cwinptr2 dd 0 +SECTION .bss ;ALIGN=32 +cwinptr2 resd 1 +SECTION .text NEWSYM Mode716TAsmEnd diff --git a/zsnes/src/video/mode7ext.asm b/zsnes/src/video/mode7ext.asm index 11cfabfd..40402653 100644 --- a/zsnes/src/video/mode7ext.asm +++ b/zsnes/src/video/mode7ext.asm @@ -620,33 +620,35 @@ NEWSYM drawmode7extbg jmp .goon ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +SECTION .text .drawmode7win .domosaicw @@ -1241,37 +1243,39 @@ NEWSYM drawmode7ngextbg ret ALIGN32 -.temp dd 0 ; for byte move left -.mode7xpos dd 0 ; x position -.tempa2 dd 0 ; keep this blank! -.mode7xrpos dd 0 ; x position -.tempa dd 0 ; keep this blank! -.mode7ypos dd 0 ; y position -.tempb2 dd 0 ; keep this blank! -.mode7yrpos dd 0 ; y position -.tempb dd 0 ; keep this blank! -.mode7xadder dd 0 ; number to add for x -.tempc2 dd 0 ; keep this blank! -.mode7xadd2 dd 0 ; number to add for x -.tempc dd 0 ; keep this blank! -.mode7yadder dd 0 ; number to add for y -.tempd2 dd 0 ; keep this blank! -.mode7yadd2 dd 0 ; number to add for y -.tempd dd 0 ; keep this blank! -.mode7ptr dd 0 ; pointer value -.mode7xinc dd 0 ; number to add for x -.mode7xincc dd 0 ; range check for x -.mode7yinc dd 0 ; number to add for y -.mode7xsloc dd 0 ; which screen x -.mode7ysloc dd 0 ; which screen y -.mode7xsrl dd 0 ; which relative screen x -.mode7ysrl dd 0 ; which relative screen y -.cxloc dw 0 ; cx location -.cyloc dw 0 ; cy location -.m7xaddofa dd 0 -.m7xaddof2a dd 0 -.m7yaddofa dd 0 -.m7yaddof2a dd 0 +SECTION .bss +.temp resd 1 ; for byte move left +.mode7xpos resd 1 ; x position +.tempa2 resd 1 ; keep this blank! +.mode7xrpos resd 1 ; x position +.tempa resd 1 ; keep this blank! +.mode7ypos resd 1 ; y position +.tempb2 resd 1 ; keep this blank! +.mode7yrpos resd 1 ; y position +.tempb resd 1 ; keep this blank! +.mode7xadder resd 1 ; number to add for x +.tempc2 resd 1 ; keep this blank! +.mode7xadd2 resd 1 ; number to add for x +.tempc resd 1 ; keep this blank! +.mode7yadder resd 1 ; number to add for y +.tempd2 resd 1 ; keep this blank! +.mode7yadd2 resd 1 ; number to add for y +.tempd resd 1 ; keep this blank! +.mode7ptr resd 1 ; pointer value +.mode7xinc resd 1 ; number to add for x +.mode7xincc resd 1 ; range check for x +.mode7yinc resd 1 ; number to add for y +.mode7xsloc resd 1 ; which screen x +.mode7ysloc resd 1 ; which screen y +.mode7xsrl resd 1 ; which relative screen x +.mode7ysrl resd 1 ; which relative screen y +.cxloc resw 1 ; cx location +.cyloc resw 1 ; cy location +.m7xaddofa resd 1 +.m7xaddof2a resd 1 +.m7yaddofa resd 1 +.m7yaddof2a resd 1 +SECTION .text .drawmode7win diff --git a/zsnes/src/video/newg162.asm b/zsnes/src/video/newg162.asm index a8c8fd86..e5b36dee 100644 --- a/zsnes/src/video/newg162.asm +++ b/zsnes/src/video/newg162.asm @@ -77,6 +77,7 @@ NEWSYM NewG162AsmStart add ecx,[%2] mov edi,ecx mov ecx,8 + .loop cacheloopstuff 0 cacheloopstuff 1 @@ -196,6 +197,7 @@ cache8b16b: %macro drawtile16b 10 mov byte[tleftn],33 + %%loop mov cx,[vrama+eax] xor ecx,[ng16bprval] diff --git a/zsnes/src/video/newgfx.asm b/zsnes/src/video/newgfx.asm index 3c1cb906..fec9b0ce 100644 --- a/zsnes/src/video/newgfx.asm +++ b/zsnes/src/video/newgfx.asm @@ -890,58 +890,74 @@ NEWSYM BuildWindow pop edx ret +SECTION .data ;ALIGN=32 NEWSYM firstdrawn, db 0 -ALIGN32 + NEWSYM bgusedng dd 01010101h,00010101h,00000101h,00000101h,00000101h,00000101h dd 00000001h,00000001h -NEWSYM bgcmsung, dd 0 -NEWSYM modeused, dd 0,0 -NEWSYM reslbyl, dd 0 -NEWSYM sprprdrn, dd 0 -NEWSYM csprival, dd 0 -NEWSYM pesimpng2, dd 0 -NEWSYM cfieldad, dd 0 -NEWSYM ignor512, dd 0 -NEWSYM ofsmcptr, dd 0 -NEWSYM ofsmtptr, dd 0 -NEWSYM ofsmmptr, dd 0 -NEWSYM ofsmcyps, dd 0 -NEWSYM ofsmady, dd 0 -NEWSYM ofsmadx, dd 0 -NEWSYM mosoldtab, times 15 dd 0 + +SECTION .bss ;ALIGN=32 +NEWSYM bgcmsung, resd 1 +NEWSYM modeused, resd 2 +NEWSYM reslbyl, resd 1 +NEWSYM sprprdrn, resd 1 +NEWSYM csprival, resd 1 +NEWSYM pesimpng2, resd 1 +NEWSYM cfieldad, resd 1 +NEWSYM ignor512, resd 1 +NEWSYM ofsmcptr, resd 1 +NEWSYM ofsmtptr, resd 1 +NEWSYM ofsmmptr, resd 1 +NEWSYM ofsmcyps, resd 1 +NEWSYM ofsmady, resd 1 +NEWSYM ofsmadx, resd 1 +NEWSYM mosoldtab, resd 15 + +SECTION .data ;ALIGN=32 NEWSYM ngwintable, times 16 dd 0EE00h NEWSYM ngwintableb, times 16 dd 0EE00h NEWSYM ngwintablec, times 16 dd 0EE00h NEWSYM ngwintabled, times 16 dd 0EE00h NEWSYM valtemp, dd 0EE00h, 0EE00h -NEWSYM ngwinen, dd 0 NEWSYM ngcwinptr, dd ngwintable -NEWSYM ngcwinmode, dd 0 -NEWSYM ngcpixleft, dd 0 -NEWSYM Mode7BackA, dd 0 -NEWSYM Mode7BackC, dd 0 -NEWSYM Mode7BackX0, dd 0 -NEWSYM Mode7BackSet, dd 0 -NEWSYM ngextbg, dd 0 -NEWSYM cbgval, dd 0 -NEWSYM ofsmval, dd 0 -NEWSYM ofsmvalh, dd 0 + +SECTION .bss ;ALIGN=32 +NEWSYM ngwinen, resd 1 +NEWSYM ngcwinmode, resd 1 +NEWSYM ngcpixleft, resd 1 +NEWSYM Mode7BackA, resd 1 +NEWSYM Mode7BackC, resd 1 +NEWSYM Mode7BackX0, resd 1 +NEWSYM Mode7BackSet, resd 1 +NEWSYM ngextbg, resd 1 +NEWSYM cbgval, resd 1 +NEWSYM ofsmval, resd 1 +NEWSYM ofsmvalh, resd 1 + +SECTION .data ;ALIGN=32 NEWSYM pwinen, dd 0FFFFh NEWSYM pngwinen, dd 0FFFFh -NEWSYM pwinbound, dd 0 -NEWSYM WinPtrAPos, dd 0 -NEWSYM WinPtrBPos, dd 0 + +SECTION .bss ;ALIGN=32 +NEWSYM pwinbound, resd 1 +NEWSYM WinPtrAPos, resd 1 +NEWSYM WinPtrBPos, resd 1 + +SECTION .data ;ALIGN=32 NEWSYM OrLogicTable, db 0,1,1,0 NEWSYM AndLogicTable, db 0,0,1,0 NEWSYM XorLogicTable, db 0,1,0,0 NEWSYM XNorLogicTable, db 1,0,1,0 -NEWSYM nglogicval, dd 0 -NEWSYM pnglogicval, dd 0 -NEWSYM mosjmptab, times 15 dd 0 -NEWSYM Mode7HiRes, dd 0 -NEWSYM pesimpng, dd 0 -NEWSYM bgtxadd2, dd 0 + +SECTION .bss ;ALIGN=32 +NEWSYM nglogicval, resd 1 +NEWSYM pnglogicval, resd 1 +NEWSYM mosjmptab, resd 15 +NEWSYM Mode7HiRes, resd 1 +NEWSYM pesimpng, resd 1 +NEWSYM bgtxadd2, resd 1 +SECTION .text NEWSYM StartDrawNewGfx mov byte[WindowRedraw],1 @@ -1712,31 +1728,32 @@ NEWSYM drawbg4linepr1 drawbglinengpr1 3,1 -ALIGN32 -NEWSYM bgtxadd, dd 0 -NEWSYM bgcyval, dd 0 -NEWSYM bgcxval, dd 0 -NEWSYM tleftn, dd 0 -NEWSYM tleftnb, dd 0 -NEWSYM bg1totng, dd 0 -NEWSYM bg2totng, dd 0 -NEWSYM bg3totng, dd 0 -NEWSYM bg4totng, dd 0 -NEWSYM bg1drwng, dd 0 -NEWSYM bg2drwng, dd 0 -NEWSYM bg3drwng, dd 0 -NEWSYM bg4drwng, dd 0 -NEWSYM sprcurng, dd 0 -NEWSYM scfbl, dd 0 -NEWSYM mode0ads, dd 0 -NEWSYM mode0add, dd 0 -NEWSYM taddnfy16x16, dd 0 -NEWSYM taddfy16x16, dd 0 -NEWSYM switch16x16, dd 0 -NEWSYM yposng, dd 0 -NEWSYM flipyposng, dd 0 -NEWSYM yposngom, dd 0 -NEWSYM flipyposngom, dd 0 +SECTION .bss ;ALIGN=32 +NEWSYM bgtxadd, resd 1 +NEWSYM bgcyval, resd 1 +NEWSYM bgcxval, resd 1 +NEWSYM tleftn, resd 1 +NEWSYM tleftnb, resd 1 +NEWSYM bg1totng, resd 1 +NEWSYM bg2totng, resd 1 +NEWSYM bg3totng, resd 1 +NEWSYM bg4totng, resd 1 +NEWSYM bg1drwng, resd 1 +NEWSYM bg2drwng, resd 1 +NEWSYM bg3drwng, resd 1 +NEWSYM bg4drwng, resd 1 +NEWSYM sprcurng, resd 1 +NEWSYM scfbl, resd 1 +NEWSYM mode0ads, resd 1 +NEWSYM mode0add, resd 1 +NEWSYM taddnfy16x16, resd 1 +NEWSYM taddfy16x16, resd 1 +NEWSYM switch16x16, resd 1 +NEWSYM yposng, resd 1 +NEWSYM flipyposng, resd 1 +NEWSYM yposngom, resd 1 +NEWSYM flipyposngom, resd 1 +SECTION .text NEWSYM drawsprng cmp byte[winbg1enval+ebx+4*256],0 @@ -2012,7 +2029,9 @@ NEWSYM drawsprngm7h pop esi ret -NEWSYM NGNumSpr, db 0 +SECTION .bss +NEWSYM NGNumSpr, resb 1 +SECTION .text ; cmp byte[winbg1enval+eax+4*256],0 ; je near .skipobjw @@ -2342,8 +2361,9 @@ NEWSYM preparesprpr mov dword[sprsingle],1 ret -ALIGN32 -NEWSYM sprclprio, dd 0 -NEWSYM sprsingle, dd 0 +SECTION .bss ;ALIGN=32 +NEWSYM sprclprio, resd 1 +NEWSYM sprsingle, resd 1 +SECTION .text NEWSYM NewGfxAsmEnd diff --git a/zsnes/src/video/newgfx16.asm b/zsnes/src/video/newgfx16.asm index d86f43e2..2bf1e2ec 100644 --- a/zsnes/src/video/newgfx16.asm +++ b/zsnes/src/video/newgfx16.asm @@ -274,7 +274,9 @@ NEWSYM setpalette16bng .noveg2 ret +section .data prevpal2 times 256 dw 0F00Fh +section .text %macro WinBGCheck 1 mov bl,[winbg1en+%1] @@ -427,10 +429,12 @@ prevpal2 times 256 dw 0F00Fh mov [winbg1enval+eax+%1*256],bl %endmacro -BackAreaAdd dd 0 -BackAreaUnFillCol dd 0 -BackAreaFillCol dd 0 -clinemainsub dd 0 +section .bss +BackAreaAdd resd 1 +BackAreaUnFillCol resd 1 +BackAreaFillCol resd 1 +clinemainsub resd 1 +section .text BackAreaFill: cmp byte[winbg1enval+eax+5*256],0 @@ -1331,45 +1335,47 @@ NEWSYM newengine16b xor ebx,ebx ret -ALIGN32 -NEWSYM ngwinenval, dd 0 -NEWSYM cdrawbuffer, dd 0 -NEWSYM draw16bnng, dd 0 -NEWSYM scaddsngb, dd 0 -NEWSYM scaddtngb, dd 0 -NEWSYM scaddtngbx, dd 0 -NEWSYM prevbcolng, dd 0 -NEWSYM bcolvalng, dd 0 -NEWSYM cebppos, dd 0 -NEWSYM subscreenonng, dd 0 -NEWSYM cdrawmeth, dd 0 -NEWSYM cpalptrng, dd 0 -NEWSYM prevcoladdrng, dd 0 -NEWSYM prevcolvalng, dd 0 -NEWSYM cbackofsaddr, dd 0 -NEWSYM cbackofsaddrs, dd 0 -NEWSYM cbackofsaddrm, dd 0 -NEWSYM subscrng, dd 0 -NEWSYM ngmsdraw, dd 0 -NEWSYM CMainWinScr, dd 0 -NEWSYM CSubWinScr, dd 0 -NEWSYM Prevcoladdr, dd 0 -NEWSYM ColResult, dd 0 -NEWSYM CPalPtrng, dd 0 -NEWSYM WindowRedraw, dd 0 -NEWSYM mostranspval, dd 0 -NEWSYM mosclineval, dd 0 -NEWSYM startlinet, dd 0 -NEWSYM endlinet, dd 0 -NEWSYM palchanged, dd 0 +section .bss +alignb 32 +NEWSYM ngwinenval, resd 1 +NEWSYM cdrawbuffer, resd 1 +NEWSYM draw16bnng, resd 1 +NEWSYM scaddsngb, resd 1 +NEWSYM scaddtngb, resd 1 +NEWSYM scaddtngbx, resd 1 +NEWSYM prevbcolng, resd 1 +NEWSYM bcolvalng, resd 1 +NEWSYM cebppos, resd 1 +NEWSYM subscreenonng, resd 1 +NEWSYM cdrawmeth, resd 1 +NEWSYM cpalptrng, resd 1 +NEWSYM prevcoladdrng, resd 1 +NEWSYM prevcolvalng, resd 1 +NEWSYM cbackofsaddr, resd 1 +NEWSYM cbackofsaddrs, resd 1 +NEWSYM cbackofsaddrm, resd 1 +NEWSYM subscrng, resd 1 +NEWSYM ngmsdraw, resd 1 +NEWSYM CMainWinScr, resd 1 +NEWSYM CSubWinScr, resd 1 +NEWSYM Prevcoladdr, resd 1 +NEWSYM ColResult, resd 1 +NEWSYM CPalPtrng, resd 1 +NEWSYM WindowRedraw, resd 1 +NEWSYM mostranspval, resd 1 +NEWSYM mosclineval, resd 1 +NEWSYM startlinet, resd 1 +NEWSYM endlinet, resd 1 +NEWSYM palchanged, resd 1 -NEWSYM ng16bbgval, dd 0 ; bg # (mov dword[ng16bbgval],%1) -NEWSYM ng16bprval, dd 0 ; 0 = pr0, 2000h = pr1 +NEWSYM ng16bbgval, resd 1 ; bg # (mov dword[ng16bbgval],%1) +NEWSYM ng16bprval, resd 1 ; 0 = pr0, 2000h = pr1 -NEWSYM mosjmptab16b, times 15 dd 0 -NEWSYM mosjmptab16bt, times 15 dd 0 -NEWSYM mosjmptab16btms, times 15 dd 0 -NEWSYM mosjmptab16bntms, times 15 dd 0 +NEWSYM mosjmptab16b, resd 15 +NEWSYM mosjmptab16bt, resd 15 +NEWSYM mosjmptab16btms, resd 15 +NEWSYM mosjmptab16bntms, resd 15 +section .text NEWSYM StartDrawNewGfx16b push edx @@ -3027,6 +3033,8 @@ ProcessTransparencies: dec ecx jnz .prochalfadd jmp .faddloopdoneh +.procfulladdnext: + movq [esi-8],mm0 .procfulladd mov ebx,[esi] and ebx,eax @@ -3048,35 +3056,37 @@ ProcessTransparencies: movq mm0,[esi] movq mm1,[esi+75036*2] pand mm0,[UnusedBitXor] - movq mm2,mm0 movq mm4,mm1 - movq mm3,mm0 + movq mm2,mm0 %if %1>0 psllw mm0,%1 psllw mm1,%1 + movq mm3,mm2 + %else + movq mm3,mm0 %endif + psllw mm2,%2 paddusw mm0,mm1 pand mm0,[FullBitAnd] movq mm1,mm4 + psllw mm4,%2 + add esi,byte 8 %if %1>0 psrlw mm0,%1 %endif - psllw mm2,%2 - psllw mm1,%2 - paddusw mm2,mm1 - pand mm2,[FullBitAnd] - psrlw mm2,%2 + paddusw mm2,mm4 psllw mm3,%3 - psllw mm4,%3 - paddusw mm3,mm4 + pand mm2,[FullBitAnd] + psllw mm1,%3 + psrlw mm2,%2 + paddusw mm3,mm1 + por mm0,mm2 pand mm3,[FullBitAnd] psrlw mm3,%3 por mm0,mm3 - por mm0,mm2 - movq [esi],mm0 - add esi,8 dec ecx - jnz near .procfulladd + jnz near .procfulladdnext + movq [esi],mm0 jmp .faddloopdoneh .faddlooph mov ebx,dword[esi] @@ -3252,56 +3262,62 @@ ProcessTransparencies: .faddl2 test dword[esi],eax jnz .faddloopb +.faddl2_2 test dword[esi+4],eax jnz .faddloopb add esi,8 dec ecx jnz .faddl2 jmp .faddloopdone +.faddloopnext + movq [esi-8],mm0 .faddloop test dword[esi],eax - jz .faddl2 + jz .faddl2_2 .faddloopb movq mm0,[esi] movq mm1,[esi+75036*2] movq mm6,mm0 pand mm0,[UnusedBitXor] - movq mm2,mm0 movq mm4,mm1 - movq mm3,mm0 - movq mm5,mm0 + movq mm2,mm0 %if %1>0 psllw mm0,%1 psllw mm1,%1 + movq mm3,mm2 + movq mm5,mm2 + %else + movq mm3,mm0 + movq mm5,mm0 %endif paddusw mm0,mm1 pand mm0,[FullBitAnd] + psllw mm2,%2 movq mm1,mm4 + psllw mm4,%2 + paddusw mm2,mm4 + psllw mm3,%3 + pand mm2,[FullBitAnd] + psllw mm1,%3 + psrlw mm2,%2 + paddusw mm3,mm1 + pand mm3,[FullBitAnd] %if %1>0 psrlw mm0,%1 %endif - psllw mm2,%2 - psllw mm1,%2 - paddusw mm2,mm1 - pand mm2,[FullBitAnd] - psrlw mm2,%2 - psllw mm3,%3 - psllw mm4,%3 - paddusw mm3,mm4 - pand mm3,[FullBitAnd] psrlw mm3,%3 - por mm0,mm3 - por mm0,mm2 pand mm6,[UnusedBit] + por mm0,mm2 pcmpeqw mm6,[UnusedBit] + por mm0,mm3 pand mm0,mm6 pxor mm6,[UnusedBitXor] pand mm5,mm6 + add esi,byte 8 por mm0,mm5 - movq [esi],mm0 - add esi,8 dec ecx - jnz near .faddloop + jnz near .faddloopnext + movq [esi-8],mm0 .faddloopdone pop esi pop ebx @@ -3438,6 +3454,7 @@ ProcessTransparenciesMMXargb ; PSRLW - Shirt Right, Logical ; POR +section .data ALIGN32 NEWSYM UnusedBit, dd 00000000001000000000000000100000b,00000000001000000000000000100000b NEWSYM HalfTrans, dd 11110111110111101111011111011110b,11110111110111101111011111011110b,0,0 @@ -3450,6 +3467,7 @@ NEWSYM FullBitAnd, dd 0F800F800h,0F800F800h NEWSYM HalfTransB, dd 00001000010000010000100001000001b,00001000010000010000100001000001b NEWSYM HalfTransC, dd 11110111100111101111011110011110b,11110111100111101111011110011110b NEWSYM NGNoTransp, dd 0 +section .text NEWSYM NewGfx16AsmEnd %macro SCMainA 0 diff --git a/zsnes/src/video/newgfx16.mac b/zsnes/src/video/newgfx16.mac index ba55ba1d..2815b95d 100644 --- a/zsnes/src/video/newgfx16.mac +++ b/zsnes/src/video/newgfx16.mac @@ -3426,6 +3426,7 @@ EXTSYM osm2dis ; eax = pointer to beginning of tile area mov dword[mode0add],0 mov byte[tleftn],33 + .loopdn mov cx,[vrama+eax] test cx,2000h @@ -3443,6 +3444,7 @@ EXTSYM osm2dis mov [ngcedi+%2*1024+ebx*4],edi ; eax = pointer to beginning of tile area mov byte[tleftn],33 + .loopdn2 mov cx,[vrama+eax] test cx,2000h @@ -3803,6 +3805,7 @@ EXTSYM osm2dis jne near .no2bitdn ; eax = pointer to beginning of tile area mov byte[tleftn],33 + .loopdn mov cx,[vrama+eax] test cx,2000h @@ -3813,6 +3816,7 @@ EXTSYM osm2dis jne near .no8bitdn ; eax = pointer to beginning of tile area mov byte[tleftn],33 + .loopdn2 mov cx,[vrama+eax] test cx,2000h