📄 procvid.asm
字号:
SECTION .text;*******************************************************; Output Char Outputs char in al @ esi;*******************************************************NEWSYM outputchar push edi push esi push eax mov edi,FontData xor ebx,ebx mov bl,al shl ebx,3 add edi,ebx mov cl,8.loopa mov ah,[edi] mov ch,8.loopb test ah,80h jz .nowrite mov al,[textcolor] mov [esi],al mov byte[esi+289],192.nowrite shl ah,1 inc esi dec ch jnz .loopb add esi,280 inc edi dec cl jnz .loopa pop eax pop esi pop edi retNEWSYM outputchar16b push edi push esi push eax push edx push ecx mov dx,[vesa2_clbitng] ror edx,16 mov dx,[vesa2_clbitng] shr dx,1 ror edx,16 mov edi,FontData xor ebx,ebx mov bl,al shl ebx,3 add edi,ebx call OutputText16b pop ecx pop edx pop eax pop esi pop edi retSECTION .dataNEWSYM textcolor, db 128NEWSYM textcolor16b, dw 0FFFFhSECTION .textNEWSYM outputchar5x5 push edi push esi push eax mov edi,GUIFontData xor ebx,ebx mov bl,al shl ebx,2 add edi,ebx xor ebx,ebx mov bl,al add edi,ebx mov cl,5.loopa mov ah,[edi] mov ch,5.loopb test ah,80h jz .nowrite mov al,[textcolor] mov [esi],al.nowrite shl ah,1 inc esi dec ch jnz .loopb add esi,283 inc edi dec cl jnz .loopa pop eax pop esi pop edi retNEWSYM outputchar16b5x5 push edi push esi push eax mov edi,GUIFontData xor ebx,ebx mov bl,al shl ebx,2 add edi,ebx xor ebx,ebx mov bl,al add edi,ebx mov cl,5.loopa mov ah,[edi] mov ch,5.loopb test ah,80h jz .nowrite push eax mov ax,[textcolor16b] mov [esi],ax mov [esi+75036*4],ax pop eax.nowrite shl ah,1 add esi,2 dec ch jnz .loopb add esi,283*2 inc edi dec cl jnz .loopa pop eax pop esi pop edi ret;*******************************************************; Output Graphic String Outputs String from edi to esi;*******************************************************NEWSYM OutputGraphicString cmp byte[cbitmode],1 je .do16b.no16bit xor eax,eax.nextstr mov al,[edi] cmp al,0 je .nomore mov al,[ASCII2Font+eax] call outputchar add esi,8 inc edi jmp .nextstr.nomore ret.do16b sub esi,[vidbuffer] shl esi,1 add esi,[vidbuffer] cmp byte[textcolor],128 jne .no128 mov word[textcolor16b],0FFFFh.no128 cmp byte[textcolor],129 jne .no129 mov word[textcolor16b],0.no129 cmp byte[textcolor],130 jne .no130 xor ax,ax xor bx,bx mov cl,[vesa2_rpos] mov bx,20 shl bx,cl add ax,bx mov cl,[vesa2_gpos] mov bx,20 shl bx,cl add ax,bx mov cl,[vesa2_bpos] mov bx,20 shl bx,cl add ax,bx mov [textcolor16b],ax.no130 ; Color #131, Red cmp byte[textcolor],131 jne .no131 xor ax,ax xor bx,bx mov cl,[vesa2_rpos] mov bx,22 shl bx,cl add ax,bx mov cl,[vesa2_gpos] mov bx,5 shl bx,cl add ax,bx mov cl,[vesa2_bpos] mov bx,5 shl bx,cl add ax,bx mov [textcolor16b],ax.no131 jmp OutputGraphicString16bNEWSYM OutputGraphicString16b xor eax,eax.nextstr mov al,[edi] cmp al,0 je .nomore mov al,[ASCII2Font+eax] call outputchar16b add esi,16 inc edi jmp .nextstr.nomore retNEWSYM OutputGraphicString5x5 cmp byte[cbitmode],1 je .do16b.no16bit xor eax,eax.nextstr mov al,[edi] cmp al,0 je .nomore mov al,[ASCII2Font+eax] call outputchar5x5 add esi,6 inc edi jmp .nextstr.nomore ret.do16b sub esi,[vidbuffer] shl esi,1 add esi,[vidbuffer] cmp byte[textcolor],128 jne .no128 mov word[textcolor16b],0FFFFh.no128 cmp byte[textcolor],129 jne .no129 mov word[textcolor16b],0.no129 cmp byte[textcolor],130 jne .no130 xor ax,ax xor bx,bx mov cl,[vesa2_rpos] mov bx,20 shl bx,cl add ax,bx mov cl,[vesa2_gpos] mov bx,20 shl bx,cl add ax,bx mov cl,[vesa2_bpos] mov bx,20 shl bx,cl add ax,bx mov [textcolor16b],ax.no130 ; Color #131, Red cmp byte[textcolor],131 jne .no131 xor ax,ax xor bx,bx mov cl,[vesa2_rpos] mov bx,22 shl bx,cl add ax,bx mov cl,[vesa2_gpos] mov bx,5 shl bx,cl add ax,bx mov cl,[vesa2_bpos] mov bx,5 shl bx,cl add ax,bx mov [textcolor16b],ax.no131 jmp OutputGraphicString16b5x5NEWSYM OutputGraphicString16b5x5 xor eax,eax.nextstr mov al,[edi] cmp al,0 je .nomore mov al,[ASCII2Font+eax] call outputchar16b5x5 add esi,12 inc edi jmp .nextstr.nomore ret;*******************************************************; Save Select Allows user to select save state slot;*******************************************************; For Save StateSECTION .bssNEWSYM csounddisable, resb 1f3menuen resb 1PrevPictureVal resb 1CurPictureVal resb 1SECTION .textNEWSYM drawhline.loop mov [esi],al inc esi dec ecx jnz .loop retNEWSYM drawhline16b.loop mov [esi],ax add esi,2 dec ecx jnz .loop retNEWSYM drawvline.loop mov [esi],al add esi,288 dec ecx jnz .loop retNEWSYM drawvline16b.loop mov [esi],ax add esi,288*2 dec ecx jnz .loop retDetermineNewest: pushad mov dword[newestfiledate],0 mov eax,[current_zst] push eax mov bl,10 div bl mul bl movzx ecx,al add al,bl.again mov [current_zst],ecx pushad call zst_determine_newest popad inc cl cmp cl,al jne .again pop eax mov [current_zst],eax popad retGetPicture: mov cl,[CurPictureVal] cmp [PrevPictureVal],cl jne .notskip ret.notskip mov [PrevPictureVal],cl pushad call LoadPicture popad ; convert to 1:5:5:5 cmp byte[newengen],0 je .noneweng cmp byte[nggposng],5 jne .noneweng mov edx,PrevPicture mov ecx,64*56.loop2 mov ax,[edx] mov bx,ax and ax,1111111111000000b and bx,0000000000011111b shr ax,1 or bx,ax mov [edx],bx add edx,2 dec ecx jnz .loop2.noneweng ; draw border mov esi,75*2+9*288*2 add esi,[vidbuffer] mov edx,58.ploopa mov ecx,66 push esi.ploopb mov word[esi],0FFFFh add esi,2 dec ecx jnz .ploopb pop esi add esi,288*2 dec edx jnz .ploopa ; draw picture mov esi,76*2+10*288*2 add esi,[vidbuffer] mov edx,56 mov edi,PrevPicture.ploopa2 mov ecx,64 push esi.ploopb2 mov ax,[edi] mov [esi],ax add esi,2 add edi,2 dec ecx jnz .ploopb2 pop esi add esi,288*2 dec edx jnz .ploopa2 retNEWSYM drawfillboxsc pushad call zst_exists cmp eax,1 popad jne .nodraw push eax ; draws a 10x10 filled box according to position bl and color dl xor eax,eax mov al,11 mul bl mov esi,76+104*288 add esi,[vidbuffer] add esi,eax mov ecx,10 mov al,176 push eax mov eax,[current_zst] cmp eax,[newest_zst] pop eax jne .next mov al,208.next push esi push ecx mov ecx,10 call drawhline pop ecx pop esi add esi,288 dec ecx jnz .next pop eax.nodraw retNEWSYM drawfillboxsc16b pushad call zst_exists cmp eax,1 popad jne .nodraw push eax ; draws a 10x10 filled box according to position bl and color dl xor eax,eax mov al,11 mul bl mov esi,76*2+104*288*2 add esi,[vidbuffer] add esi,eax add esi,eax mov ecx,10 mov ax,[saveselect.allgrn] push eax mov eax,[current_zst] cmp eax,[newest_zst] pop eax jne .next mov ax,[saveselect.allgrnb].next push esi push ecx mov ecx,10 call drawhline16b pop ecx pop esi add esi,288*2 dec ecx jnz .next pop eax.nodraw retNEWSYM drawbox ; draws a box according to position bl and color dl xor eax,eax mov al,11 mul bl mov esi,75+103*288 add esi,[vidbuffer] add esi,eax mov al,dl push esi mov ecx,12 call drawhline pop esi push esi mov ecx,12 call drawvline pop esi push esi add esi,11 mov ecx,12 call drawvline pop esi add esi,11*288 mov ecx,12 call drawhline retNEWSYM drawbox16b ; draws a box according to position bl and color dx xor eax,eax mov al,11 mul bl mov esi,75*2+103*288*2 add esi,[vidbuffer] add esi,eax add esi,eax mov ax,dx push esi mov ecx,12 call drawhline16b pop esi push esi mov ecx,12 call drawvline16b pop esi push esi add esi,11*2 mov ecx,12 call drawvline16b pop esi add esi,11*288*2 mov ecx,12 call drawhline16b ret%macro drawfillboxbase 2 push eax mov eax,[current_zst] mov bl,10 div bl mul bl mov bl,%1 add al,bl mov [current_zst],eax pop eax call %2%endmacro%macro drawfillboxhelp 1 drawfillboxbase %1,drawfillboxsc%endmacro%macro drawfillboxhelp16b 1 drawfillboxbase %1,drawfillboxsc16b%endmacro%macro testpressed 1 push eax mov eax,[current_zst] mov bl,10 div bl mov bl,ah mov ah,10 mul ah%ifdef __UNIXSDL__ cmp dword[numlockptr],0 ; if numlock on, let's try this first je %%try1 test byte[pressed+04Fh],1 jz %%try1 jmp %%yes1%%try1%endif test byte[pressed+2],1 jz %%no1%%yes1 mov bl,1%%no1%ifdef __UNIXSDL__ cmp dword[numlockptr],0 ; if numlock on, let's try this first je %%try2 test byte[pressed+050h],1 jz %%try2 jmp %%yes2%%try2%endif test byte[pressed+3],1 jz %%no2%%yes2 mov bl,2%%no2%ifdef __UNIXSDL__ cmp dword[numlockptr],0 ; if numlock on, let's try this first je %%try3 test byte[pressed+051h],1 jz %%try3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -