📄 m716text.asm
字号:
and byte[.mode7xrpos+1],07h mov cl,[.mode7yrpos+1] mov eax,[.mode7xadder] mov ch,[.mode7xrpos+1] add [.mode7xrpos],eax mov dl,[mode7tab+ecx] mov eax,[.mode7yadder] mov dl,[vrama+edx] sub [.mode7yrpos],eax %1 add esi,2 add ebp,2 dec byte[.temp] jnz near .tilerep3 jmp .finishmode7;**********************************************************; Mode 7, old routines;**********************************************************.nextval3 test byte[mode7set],80h jnz near .norep.nextval2 ; get tile # @ ([.mode7xpos],[.mode7ypos]) ; get tile location in vram (tileloc=x*2+y*256) mov ebx,[.mode7ypos+1] mov eax,[.mode7xpos+1] mov cl,bl mov ch,al shl ebx,5 shr eax,3 mov dl,[mode7tab+ecx] and ebx,07FF8h shl al,1 mov bl,al xor ch,ch mov cl,[edi+ebx] mov eax,[.mode7xadder] shl ecx,7 add [.mode7xpos],eax add ecx,edx mov eax,[.mode7yadder] mov dl,[edi+ecx] sub [.mode7ypos],eax %1 add esi,2 add ebp,2 dec byte[.temp] jnz near .nextval2 xor eax,eax mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b ret ; Color repetition.norep test byte[mode7set],40h jnz near .tilerep.nextvalb ; get tile # @ ([.mode7xpos],[.mode7ypos]) ; get tile location in vram (tileloc=x*2+y*256) cmp byte[.mode7ypos+2],3 ja near .offscr cmp byte[.mode7xpos+2],3 ja near .offscr.offscrb mov ebx,[.mode7ypos+1] mov eax,[.mode7xpos+1] mov cl,bl mov ch,al shl ebx,5 shr eax,3 mov dl,[mode7tab+ecx] and ebx,07FF8h shl al,1 mov bl,al xor ch,ch mov cl,[edi+ebx] mov eax,[.mode7xadder] shl ecx,7 add [.mode7xpos],eax add ecx,edx mov eax,[.mode7yadder] mov dl,[edi+ecx] sub [.mode7ypos],eax %1 add esi,2 add ebp,2 dec byte[.temp] jnz near .nextvalb jmp .goon.offscrc cmp byte[.mode7ypos+2],3 ja .offscr cmp byte[.mode7xpos+2],3 jbe near .offscrb.offscr mov eax,[.mode7xadder] mov ebx,[.mode7yadder] add [.mode7xpos],eax sub [.mode7ypos],ebx add esi,2 add ebp,2 dec byte[.temp] jnz .offscrc.goon xor eax,eax mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b ret.tilerep.nextvalbtr ; get tile # @ ([.mode7xpos],[.mode7ypos]) ; get tile location in vram (tileloc=x*2+y*256) cmp byte[.mode7ypos+2],3 ja near .offscrtr cmp byte[.mode7xpos+2],3 ja near .offscrtr.offscrtrb mov ebx,[.mode7ypos+1] mov eax,[.mode7xpos+1] mov cl,bl mov ch,al shl ebx,5 shr eax,3 mov dl,[mode7tab+ecx] and ebx,07FF8h shl al,1 mov bl,al xor ch,ch mov cl,[edi+ebx] mov eax,[.mode7xadder] shl ecx,7 add [.mode7xpos],eax add ecx,edx mov eax,[.mode7yadder] mov dl,[edi+ecx] sub [.mode7ypos],eax %1 add esi,2 add ebp,2 dec byte[.temp] jnz near .nextvalbtr jmp .goon.offscrtrc cmp byte[.mode7ypos+2],3 ja .offscrtr cmp byte[.mode7xpos+2],3 jbe near .offscrtrb.offscrtr mov ch,[.mode7xpos+1] mov eax,[.mode7xadder] mov cl,[.mode7ypos+1] mov ebx,[.mode7yadder] mov dl,[mode7tab+ecx] add [.mode7xpos],eax mov dl,[vrama+edx] sub [.mode7ypos],ebx %1 add esi,2 add ebp,2 dec byte[.temp] jnz near .offscrtrc jmp .goonSECTION .dataALIGN32.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 locationSECTION .text%endmacroSECTION .text;*******************************************************; Processes & Draws Mode 7 half Addition;*******************************************************NEWSYM drawmode716textbg; test byte[scaddset],1; jnz near drawmode7dcolor mov esi,[cwinptr] mov [winptrref],esi cmp byte[curmosaicsz],1 jne .domosaic cmp byte[winon],0 jne near drawmode716twinonextbg.domosaic test byte[scaddtype],80h jnz near drawmode716tsubextbg test byte[scaddtype],40h jz near drawmode716tfulladdextbg cmp byte[scrnon+1],0 je near drawmode716tfulladdextbg cmp dword[coladdr],0 jnz near drawmode716tfulladdextbg mode716tmacro mode7halfadd;*******************************************************; Processes & Draws Mode 7 Full Addition;*******************************************************NEWSYM drawmode716tfulladdextbg mode716tmacro mode7fulladd;**********************************************************; Processes and draws Mode 7 subtract;**********************************************************drawmode716tsubextbg: mode716tmacro mode7fullsub;**********************************************************; Mode 7, main & sub mode;**********************************************************NEWSYM drawmode716tbextbg mode716tmacro mode7mainsub;*******************************************************; Processes & Draws Mode 7 half Addition, Window on;*******************************************************NEWSYM drawmode716twinonextbg test byte[scaddtype],80h jnz near drawmode716tsubwinonextbg test byte[scaddtype],40h jz near drawmode716tfulladdwinonextbg cmp byte[scrnon+1],0 je near drawmode716tfulladdwinonextbg cmp dword[coladdr],0 jnz near drawmode716tfulladdwinonextbg mode716tmacro mode7halfaddwinon;*******************************************************; Processes & Draws Mode 7 Full Addition, Window on;*******************************************************NEWSYM drawmode716tfulladdwinonextbg mode716tmacro mode7fulladdwinon;**********************************************************; Processes and draws Mode 7 subtract, Window on;**********************************************************NEWSYM drawmode716tsubwinonextbg mode716tmacro mode7fullsubwinon;**********************************************************; Mode 7, main & sub mode, Window on;**********************************************************NEWSYM drawmode716tbwinonextbg mode716tmacro mode7mainsubwinonNEWSYM drawmode716textbg2 mov esi,[cwinptr] mov [winptrref],esi ; esi = pointer to video buffer mov esi,[curvidoffset] ; esi = [vidbuffer] + curypos * 288 + 16 mov edi,[vram] cmp byte[curmosaicsz],1 je .nomosaic mov esi,xtravbuf+32 mov ecx,128.clearnext mov dword[esi],0 add esi,4 dec ecx jnz .clearnext mov esi,xtravbuf+32.nomosaic mov edi,transpbuf+32 test byte[scaddtype],80h jnz near extbg2sub test byte[scaddtype],40h jz near extbg2add cmp byte[curmosaicsz],1 jne .domosaic cmp byte[winon],0 jne near .drawwin.domosaic mov ecx,256 xor eax,eax.loop mov al,[esi+288*2] test al,80h jz .nopr2 and al,7Fh mov edx,[edi] mov ebx,[pal16bcl+eax*4] cmp dx,0 je .noadd and ebx,[vesa2_clbit] and edx,[vesa2_clbit] add ebx,edx shr ebx,1.noadd mov [esi],bx.nopr2 add esi,2 add edi,2 dec ecx jnz .loop xor eax,eax mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b ret.drawwin mov ebp,[cwinptr] mov [esi],cl.nodrawbw mov ecx,256 xor eax,eax.loop2 mov al,[esi+288*2] test byte[ebp],0FFh jnz .nopr2b test al,80h jz .nopr2b and al,7Fh mov edx,[edi] mov ebx,[pal16bcl+eax*4] cmp dx,0 je .noadd2 and ebx,[vesa2_clbit] and edx,[vesa2_clbit] add ebx,edx shr ebx,1.noadd2 mov [esi],bx.nopr2b add esi,2 add edi,2 inc ebp dec ecx jnz .loop2 xor eax,eax mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b retextbg2add: cmp byte[curmosaicsz],1 jne .domosaic cmp byte[winon],0 jne near .drawwin.domosaic mov ecx,256 xor eax,eax.loop mov al,[esi+288*2] test al,80h jz .nopr2 and al,7Fh mov edx,[edi] mov ebx,[pal16bcl+eax*4] and edx,[vesa2_clbit] add ebx,edx shr ebx,1 mov ebx,[fulladdtab+ebx*2] mov [esi],bx.nopr2 add esi,2 add edi,2 dec ecx jnz .loop xor eax,eax mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b ret.drawwin mov ebp,[cwinptr] mov [esi],cl.nodrawbw mov ecx,256 xor eax,eax.loop2 mov al,[esi+288*2] test byte[ebp],0FFh jnz .nopr2b test al,80h jz .nopr2b and al,7Fh mov edx,[edi] mov ebx,[pal16bcl+eax*4] and edx,[vesa2_clbit] add ebx,edx shr ebx,1 mov ebx,[fulladdtab+ebx*2] mov [esi],bx.nopr2b add esi,2 add edi,2 inc ebp dec ecx jnz .loop2 xor eax,eax mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b retextbg2sub: cmp byte[curmosaicsz],1 jne .domosaic cmp byte[winon],0 jne near .drawwin.domosaic mov ecx,256 xor eax,eax.loop mov al,[esi+288*2] test al,80h jz .nopr2 and al,7Fh mov edx,[edi] mov ebx,[pal16bxcl+eax*4] and edx,[vesa2_clbit] add ebx,edx shr ebx,1 mov ebx,[fulladdtab+ebx*2] xor ebx,0FFFFh mov [esi],bx.nopr2 add esi,2 add edi,2 dec ecx jnz .loop xor eax,eax mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b ret.drawwin mov ebp,[cwinptr] mov [esi],cl.nodrawbw mov ecx,256 xor eax,eax.loop2 mov al,[esi+288*2] test byte[ebp],0FFh jnz .nopr2b test al,80h jz .nopr2b and al,7Fh mov edx,[edi] mov ebx,[pal16bxcl+eax*4] and edx,[vesa2_clbit] add ebx,edx shr ebx,1 mov ebx,[fulladdtab+ebx*2] xor ebx,0FFFFh mov [esi],bx.nopr2b add esi,2 add edi,2 inc ebp dec ecx jnz .loop2 xor eax,eax mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -