📄 newgfx16.asm
字号:
or [bgcmsung],ebx mov [BGMS1+eax*2],ebx cmp [BGMS1+eax*2-2],bx je .nosbgms1 mov byte[bgallchange+eax],1.nosbgms1 ; if palette[0] = 0 and transparency is just add to back area, ; set ngmsdraw to 1 mov byte[clinemainsub],0 cmp word[cgram],0 jne .ngmsdraw0 mov bl,[scrnon] and bl,1Fh or bl,0E0h and bl,[scaddtype] cmp bl,20h jne .ngmsdraw0 mov byte[ngmsdraw],1 mov byte[FillSubScr+eax],0 mov byte[clinemainsub],1.ngmsdraw0 ; Scroll Values mov bx,[bg1scrolx] mov [BG1SXl+eax*2],bx cmp [BG1SXl+eax*2-2],bx je .nosbgx1 mov byte[bg1change+eax],1.nosbgx1 mov bx,[bg2scrolx] mov [BG2SXl+eax*2],bx cmp [BG2SXl+eax*2-2],bx je .nosbgx2 mov byte[bg2change+eax],1.nosbgx2 mov bx,[bg3scrolx] mov [BG3SXl+eax*2],bx cmp [BG3SXl+eax*2-2],bx je .nosbgx3 mov byte[bg3change+eax],1.nosbgx3 mov bx,[bg4scrolx] mov [BG4SXl+eax*2],bx cmp [BG4SXl+eax*2-2],bx je .nosbgx4 mov byte[bg4change+eax],1.nosbgx4 mov bx,[bg1scroly] mov [BG1SYl+eax*2],bx cmp [BG1SYl+eax*2-2],bx je .nosbgy1 mov byte[bg1change+eax],1.nosbgy1 mov bx,[bg2scroly] mov [BG2SYl+eax*2],bx cmp [BG2SYl+eax*2-2],bx je .nosbgy2 mov byte[bg2change+eax],1.nosbgy2 mov bx,[bg3scroly] mov [BG3SYl+eax*2],bx cmp [BG3SYl+eax*2-2],bx je .nosbgy3 mov byte[bg3change+eax],1.nosbgy3 mov bx,[bg4scroly] mov [BG4SYl+eax*2],bx cmp [BG4SYl+eax*2-2],bx je .nosbgy4 mov byte[bg1change+eax],1.nosbgy4 ; Background Mode mov bl,[bgmode] and bl,07h mov [BGMA+eax],bl cmp bl,4 je .changedmode4 cmp [BGMA+eax-1],bl je .nobgma.changedmode4 mov byte[bgallchange+eax],1.nobgma ; new graphics fix, thanks to TRAC and ebx,07h mov byte[modeused+ebx],1 ; Pointer to OBJ tile data mov ebx,[bg1objptr] mov [BGOPT1+eax*2],ebx cmp [BGOPT1+eax*2-2],bx je .nosbgo1 mov byte[bg1change+eax],1.nosbgo1 mov ebx,[bg2objptr] mov [BGOPT2+eax*2],ebx cmp [BGOPT2+eax*2-2],bx je .nosbgo2 mov byte[bg2change+eax],1.nosbgo2 mov ebx,[bg3objptr] mov [BGOPT3+eax*2],ebx cmp [BGOPT3+eax*2-2],bx je .nosbgo3 mov byte[bg3change+eax],1.nosbgo3 mov ebx,[bg4objptr] mov [BGOPT4+eax*2],ebx cmp [BGOPT4+eax*2-2],bx je .nosbgo4 mov byte[bg4change+eax],1.nosbgo4 ; Pointer to tile status data mov ebx,[bg1ptr] mov [BGPT1+eax*2],ebx cmp [BGPT1+eax*2-2],bx je .nosbgp1 mov byte[bg1change+eax],1.nosbgp1 mov ebx,[bg2ptr] mov [BGPT2+eax*2],ebx cmp [BGPT2+eax*2-2],bx je .nosbgp2 mov byte[bg2change+eax],1.nosbgp2 mov ebx,[bg3ptr] mov [BGPT3+eax*2],ebx cmp [BGPT3+eax*2-2],bx je .nosbgp3 mov byte[bg3change+eax],1.nosbgp3 mov ebx,[bg4ptr] mov [BGPT4+eax*2],ebx cmp [BGPT4+eax*2-2],bx je .nosbgp4 mov byte[bg4change+eax],1.nosbgp4 mov ebx,[bg1ptrx] mov [BGPT1X+eax*2],ebx cmp [BGPT1X+eax*2-2],bx je .nosbgpx1 mov byte[bg1change+eax],1.nosbgpx1 mov ebx,[bg2ptrx] mov [BGPT2X+eax*2],ebx cmp [BGPT2X+eax*2-2],bx je .nosbgpx2 mov byte[bg2change+eax],1.nosbgpx2 mov ebx,[bg3ptrx] mov [BGPT3X+eax*2],ebx cmp [BGPT3X+eax*2-2],bx je .nosbgpx3 mov byte[bg3change+eax],1.nosbgpx3 mov ebx,[bg4ptrx] mov [BGPT4X+eax*2],ebx cmp [BGPT4X+eax*2-2],bx je .nosbgpx4 mov byte[bg4change+eax],1.nosbgpx4 mov ebx,[bg1ptry] mov [BGPT1Y+eax*2],ebx cmp [BGPT1Y+eax*2-2],bx je .nosbgpy1 mov byte[bg1change+eax],1.nosbgpy1 mov ebx,[bg2ptry] mov [BGPT2Y+eax*2],ebx cmp [BGPT2Y+eax*2-2],bx je .nosbgpy2 mov byte[bg2change+eax],1.nosbgpy2 mov ebx,[bg3ptry] mov [BGPT3Y+eax*2],ebx cmp [BGPT3Y+eax*2-2],bx je .nosbgpy3 mov byte[bg3change+eax],1.nosbgpy3 mov ebx,[bg4ptry] mov [BGPT4Y+eax*2],ebx cmp [BGPT4Y+eax*2-2],bx je .nosbgpy4 mov byte[bg4change+eax],1.nosbgpy4 mov ebx,[forceblnk] or bl,bl jne .dontdraw mov dword[scfbl],0.dontdraw ; Variable size write error fix [TRAC] mov [BGFB+eax],bl cmp [BGFB+eax-1],bl je .nosbgfb mov byte[bgallchange+eax],1.nosbgfb test byte[interlval],40h jz .nointrl mov byte[bgallchange+eax],1.nointrl mov ebx,[mode7A] mov [mode7ab+eax*4],ebx mov ebx,[mode7C] mov [mode7cd+eax*4],ebx mov ebx,[mode7X0] mov [mode7xy+eax*4],ebx mov ebx,[mode7set] mov [mode7st+eax],ebx ; 16x16 tiles mov ebx,[BG116x16t] mov [t16x161+eax],ebx cmp [t16x161+eax-1],bl je .not16x161 mov byte[bg1change+eax],1.not16x161 mov ebx,[BG216x16t] mov [t16x162+eax],ebx cmp [t16x162+eax-1],bl je .not16x162 mov byte[bg2change+eax],1.not16x162 mov ebx,[BG316x16t] mov [t16x163+eax],ebx cmp [t16x163+eax-1],bl je .not16x163 mov byte[bg3change+eax],1.not16x163 mov ebx,[BG416x16t] mov [t16x164+eax],ebx cmp [t16x164+eax-1],bl je .not16x164 mov byte[bg4change+eax],1.not16x164; mov byte[mode7hr+eax],0 cmp byte[bgmode],7 jne .noextbg; cmp byte[res640],0; je .nomode7512; mov byte[mode7hr+eax],1;.nomode7512 test byte[interlval],40h jz .noextbg mov byte[ngextbg],1.noextbg ; mosaic mov ebx,[mosaicon] mov [mosenng+eax],ebx mov ebx,[mosaicsz] mov [mosszng+eax],ebx ; Interlaced mov ebx,[interlval] mov [intrlng+eax],ebx ; Set palette call setpalette16bng cmp dword[palchanged],1 jne .notpchanged cmp eax,112 jae .endl mov [startlinet],eax jmp .notpchanged.endl cmp dword[endlinet],255 jb .notpchanged mov [endlinet],eax.notpchanged mov ebx,[cpalptrng] add ebx,[vbufdptr] mov [cpalval+eax*4],ebx ; Set Transparency mov bl,[scaddtype] mov [scadtng+eax],bl cmp [scadtng+eax-1],bl je .noscadt mov byte[bgallchange+eax],1.noscadt mov bl,[scaddset] mov [scadsng+eax],bl cmp [scadsng+eax-1],bl je .noscads mov byte[bgallchange+eax],1.noscads; Windowing Stuff;NEWSYM winl1, 0 ; window 1 left position;NEWSYM winr1, 0 ; window 1 right position;NEWSYM winl2, 0 ; window 2 left position;NEWSYM winr2, 0 ; window 2 right position;NEWSYM winbg1en, 0 ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on BG1;NEWSYM winbg2en, 0 ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on BG2;NEWSYM winbg3en, 0 ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on BG3;NEWSYM winbg4en, 0 ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on BG4;NEWSYM winobjen, 0 ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on sprites;NEWSYM wincolen, 0 ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on backarea;NEWSYM winlogica, 0 ; Window logic type for BG1 to 4;NEWSYM winlogicb, 0 ; Window logic type for Sprites and Backarea;NEWSYM winenabm, 0 ; Window logic enable for main screen;NEWSYM winenabs, 0 ; Window logic enable for sub screen mov byte[bgwinchange+eax],0 cmp byte[disableeffects],1 je near .finishwin push ecx push edx WinBGCheck 0 WinBGCheck 1 WinBGCheck 2 WinBGCheck 3 WinBGCheck 4 WinBGCheck2 5 mov ebx,[winlogica] mov [winlogicaval+eax*2],ebx cmp [winlogicaval+eax*2-2],bx je .winnchangedb mov byte[bgwinchange+eax],1.winnchangedb mov ebx,[winl1] mov [winboundary+eax*4],ebx cmp [winboundary+eax*4-4],ebx je .winnchanged mov byte[bgwinchange+eax],1.winnchanged ; generate sprite window cmp byte[winbg1enval+eax+4*256],0 je near .skipobjw mov ebx,[winl1] mov dl,[winobjen] mov dh,[winlogicb] and dh,03h ; Same as previous line? cmp dword[objwlrpos+eax*4-4],0FFFFFFFFh je .changed cmp [objwlrpos+eax*4-4],ebx jne .changedb cmp [objwen+eax*2-2],dx je near .notchanged.changedb cmp [objwlrpos+eax*4],ebx jne .changed cmp [objwen+eax*2],dx jne .changed mov ecx,[CSprWinPtr] cmp [objclineptr+eax*4],ecx ja near .usecurrent.changed mov [objwlrpos+eax*4],ebx mov [objwen+eax*2],dx mov bl,[winlogicb] and bl,03h mov [nglogicval],bl mov ebx,4*256 add ebx,eax mov dword[ngwinen],0 call BuildWindow2 cmp dword[ngwinen],0 je near .disablesprwin mov ecx,[CSprWinPtr] add ecx,260 mov [CSprWinPtr],ecx mov [objclineptr+eax*4],ecx add ecx,[ngwinptr] ; Construct Window in ecx push eax mov ebx,ngwintable dec ecx mov eax,256.procnotempty mov edx,[ebx] add ebx,4 or edx,edx jz .procempty dec edx.swloop mov dword[ecx],0 add ecx,4 sub eax,4 jc .done sub edx,4 jnc .swloop sub eax,edx add ecx,edx dec eax inc ecx.procempty mov edx,[ebx] dec edx add ebx,4.swloop2 mov dword[ecx],01010101h add ecx,4 sub eax,4 jc .done sub edx,4 jnc .swloop2 sub eax,edx add ecx,edx dec eax inc ecx jmp .procnotempty.done pop eax jmp .skipobjw.usecurrent mov ecx,[objclineptr+eax*4] mov [CSprWinPtr],ecx cmp ecx,0FFFFFFFFh jnz .skipobjw jmp .disablesprwin ; copy over if it's the same.notchanged mov [objwlrpos+eax*4],ebx mov [objwen+eax*2],dx mov ebx,[objclineptr+eax*4-4] mov [objclineptr+eax*4],ebx cmp ebx,0FFFFFFFFh je .disablesprwin.skipobjw pop edx pop ecx jmp .okaywin.disablesprwin mov dword[objclineptr+eax*4],0FFFFFFFFh mov byte[winbg1enval+eax+4*256],0 mov byte[winbg1envals+eax+4*256],0 mov byte[winbg1envalm+eax+4*256],0 pop edx pop ecx jmp .okaywin.finishwin mov byte[winbg1enval+eax],0 mov byte[winbg2enval+eax],0 mov byte[winbg3enval+eax],0 mov byte[winbg4enval+eax],0 mov byte[winbgobjenval+eax],0.okaywin xor ebx,ebx mov ebx,[coladdr-1] mov bl,[vidbright] cmp [Prevcoladdr],ebx je .samecolor mov [Prevcoladdr],ebx push ecx push eax mov al,[coladdr] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[ngrposng] xor ebx,ebx shl ax,cl add bx,ax mov al,[coladdg] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[nggposng] shl ax,cl add bx,ax mov al,[coladdb] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[ngbposng] shl ax,cl add bx,ax mov [ColResult],bx mov [ColResult+2],bx pop eax pop ecx.samecolor cmp word[ColResult],0 je .black cmp byte[FillSubScr+eax],0 je .notblack or byte[FillSubScr+eax],2 jmp .notblack.black cmp byte[scrnon+1],0 jne .notblack; mov byte[clinemainsub],1 test byte[scadtng+eax],40h jnz .notblack xor byte[scadtng+eax],1; mov byte[FillSubScr+eax],0.notblack ; fill back area ; get back window settings mov dword[ngwinen],0 push ecx push edx cmp byte[winbg1enval+eax+5*256],0 je .nowindowb mov bl,[winlogicb] shr bl,2 and bl,03h mov [nglogicval],bl mov ebx,5*256 add ebx,eax call BuildWindow2.nowindowb mov dword[BackAreaAdd],0 cmp byte[clinemainsub],1 jne near .domainscreen mov ebx,[ColResult] or ebx,[UnusedBit] mov edx,[UnusedBit] mov cl,[scaddset].filledscreen ; get sub-screen colors test cl,10h jnz .inside test cl,20h jnz .outside.insideb mov [BackAreaUnFillCol],ebx mov [BackAreaFillCol],ebx jmp .donesubscreen.inside test cl,20h jnz .filled mov [BackAreaUnFillCol],edx mov [BackAreaFillCol],ebx jmp .donesubscreen.outside mov [BackAreaUnFillCol],ebx mov [BackAreaFillCol],edx jmp .donesubscreen.filled xor ebx,ebx mov [BackAreaUnFillCol],edx mov [BackAreaFillCol],edx jmp .donesubscreen.domainscreen mov ebx,[vbufdptr] add ebx,dword[cpalptrng] xor edx,edx mov cx,[ebx] shl ecx,16 mov cx,[ebx] mov ebx,ecx mov cl,[scaddset] shr cl,2 test byte[scaddtype],20h jz .notaddbackub or ebx,[UnusedBit] mov edx,[UnusedBit].notaddbackub jmp .filledscreen.donesubscreen cmp dword[ngwinen],0 jne .nowinsc2 mov edx,[BackAreaUnFillCol] mov [BackAreaFillCol],edx.nowinsc2 cmp byte[forceblnk],0 je .notforceblanked mov dword[BackAreaUnFillCol],0 mov dword[BackAreaFillCol],0.notforceblanked call BackAreaFill test byte[FillSubScr+eax],1 jz near .nosubscreen2 mov dword[BackAreaAdd],75036*2 mov ebx,[ColResult] mov edx,[UnusedBit] test byte[scaddset],02h jz .notbackfixed or ebx,[UnusedBit].notbackfixed mov cl,[scaddset] ; get sub-screen colors test cl,10h jnz .inside2 test cl,20h jnz .outside2.inside2b mov [BackAreaUnFillCol],ebx mov [BackAreaFillCol],ebx jmp .donesubscreen2.inside2 test cl,20h jnz .filled2 mov [BackAreaUnFillCol],edx mov [BackAreaFillCol],ebx jmp .donesubscreen2.outside2 mov [BackAreaUnFillCol],ebx mov [BackAreaFillCol],edx jmp .donesubscreen2.filled2 xor ebx,ebx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -