📄 procvid.asm
字号:
add esi,[vidbuffer] mov ecx,80 call drawvline16b mov esi,75*2+103*288*2 add esi,[vidbuffer] mov ecx,111 call drawhline16b mov esi,75*2+114*288*2 add esi,[vidbuffer] mov ecx,111 call drawhline16b mov esi,75*2+104*288*2 add esi,[vidbuffer] mov bl,11.nextvline16b mov ecx,10 push esi push ebx call drawvline16b pop ebx pop esi add esi,22 dec bl jnz .nextvline16b mov esi,78*2+106*288*2 add esi,[vidbuffer] mov al,1 call outputchar16b mov bl,9.nextnumchar16b add esi,22 inc al push ebx call outputchar16b pop ebx dec bl jnz .nextnumchar16b mov byte[curblank],0h; mov dx,[.allred]; call drawbox16b push ebx mov al,[newengen] mov byte[newengen],0 push eax call copyvid pop eax mov [newengen],al pop ebx ; wait until esc/enter is pressed mov byte[PrevPictureVal],0FFh.noesc16b push eax mov eax,[current_zst] mov [CurPictureVal],al pop eax pushad call GetPicture popad mov dx,0FFFFh call drawbox16b mov ecx,2500 call delay testpressed 16b test byte[pressed+1],1 jnz near .esc16b test byte[pressed+28],1 jnz near .enter16b mov ecx,2500 call delay testpressed 16b test byte[pressed+1],1 jnz near .esc16b test byte[pressed+28],1 jnz near .enter16b push ebx mov al,[newengen] mov byte[newengen],0 push eax call copyvid pop eax mov [newengen],al pop ebx mov ecx,2500 call delay testpressed 16b test byte[pressed+1],1 jnz near .esc16b test byte[pressed+28],1 jnz near .enter16b mov ecx,2500 call delay testpressed 16b test byte[pressed+1],1 jnz near .esc16b test byte[pressed+28],1 jnz near .enter16b mov dx,[.allred] call drawbox16b push ebx mov al,[newengen] mov byte[newengen],0 push eax call copyvid pop eax mov [newengen],al pop ebx jmp .noesc16b.enter16b mov byte[pressed+28],2.esc16b mov eax,pressed mov ecx,256.looppr2 cmp byte[eax],1 jne .notpr2 mov byte[eax],2.notpr2 inc eax dec ecx jnz .looppr2.prwin%ifdef __MSDOS__ mov byte[pressed+1],0%endif mov word[t1cc],0 mov byte[csounddisable],0 call StartSound mov byte[f3menuen],0 mov byte[ForceNonTransp],0 mov byte[GUIOn],0 pushad call Clear2xSaIBuffer popad retSECTION .data.stringa db 'PLEASE SELECT',0.stringb db 'SAVE STATE SLOT',0.stringb2 db 'SLOT LEVEL:',0.stringc db 'USE CURSOR KEYS',0.stringd db 'TO MOVE AND',0.stringe db 'ENTER TO SELECT',0slotlevelnum db '-',0SECTION .bssNEWSYM ForceNonTransp, resb 1;*******************************************************; MakePal Changes the entire palette;*******************************************************; set the brightness with [maxbr]SECTION .bssNEWSYM cgramback, resw 256SECTION .textNEWSYM doveg pushad ; backup cgram mov ecx,128 xor ebx,ebx.loop mov eax,[cgram+ebx] mov [cgramback+ebx],eax add ebx,4 dec ecx jnz .loop xor eax,eax mov al,[coladdr] add al,[coladdg] add al,[coladdb] xor dx,dx mov bx,3 div bx and ax,011111b mov [coladdr],al mov [coladdg],al mov [coladdb],al xor eax,eax.next push eax mov ax,[cgram+eax] mov bx,ax mov cx,ax and bx,011111b and cx,1111100000b shr cx,5 add bx,cx mov cx,ax and cx,111110000000000b shr cx,10 add bx,cx mov ax,bx xor dx,dx mov bx,3 div bx and ax,011111b mov cx,ax mov bx,ax shl bx,5 or ax,bx shl cx,10 or ax,cx mov bx,ax pop eax mov [cgram+eax],bx add eax,2 cmp eax,200h jne .next popad retNEWSYM dovegrest pushad ; backup cgram mov ecx,128 xor ebx,ebx.loop mov eax,[cgramback+ebx] mov [cgram+ebx],eax add ebx,4 dec ecx jnz .loop popad retSECTION .bssNEWSYM tempco0, resw 1NEWSYM prevbright, resb 1 ; previous brightnessSECTION .text%ifdef __MSDOS__NEWSYM dosmakepal cmp byte[V8Mode],1 jne .noveg call doveg.noveg mov ax,[cgram] mov [tempco0],ax test byte[scaddtype],00100000b jz near .noaddition test byte[scaddtype],10000000b jnz near .noaddition mov cx,[cgram] mov ax,cx and ax,001Fh add al,[coladdr] cmp al,01Fh jb .noadd mov al,01Fh.noadd mov bx,ax mov ax,cx shr ax,5 and ax,001Fh add al,[coladdg] cmp al,01Fh jb .noaddb mov al,01Fh.noaddb shl ax,5 add bx,ax mov ax,cx shr ax,10 and ax,001Fh add al,[coladdb] cmp al,01Fh jb .noaddc mov al,01Fh.noaddc shl ax,10 add bx,ax mov [cgram],bx.noaddition cmp byte[Palette0],0 je .nocol0mod mov word[cgram],0.nocol0modNEWSYM makepalb mov edi,cgram mov ebx,prevpal xor ah,ah.loopa mov cx,[edi] push eax push ebx mov [ebx],cx mov al,ah mov dx,03C8h out dx,al mov ax,cx and al,01Fh mov bh,[maxbr] mov bl,bh mul bl mov bl,15 div bl shl al,1 mov dx,03C9h add al,[gammalevel] cmp al,63 jbe .nor mov al,63.nor out dx,al mov ax,cx shr ax,5 and al,01Fh mov bl,bh mul bl mov bl,15 div bl shl al,1 add al,[gammalevel] cmp al,63 jbe .nog mov al,63.nog out dx,al mov ax,cx shr ax,10 and al,01Fh mov bl,bh mul bl mov bl,15 div bl shl al,1 add al,[gammalevel] cmp al,63 jbe .nob mov al,63.nob out dx,al pop ebx pop eax add edi,2 add ebx,2 inc ah jnz near .loopa mov al,[maxbr] mov [prevbright],al mov ax,[tempco0] mov [cgram],ax cmp byte[MessageOn],0 je .nochange128 mov dx,03C8h mov al,128 out dx,al mov al,63 inc dx out dx,al out dx,al out dx,al mov dx,03C8h mov al,128+64 out dx,al mov al,0 inc dx out dx,al out dx,al out dx,al.nochange128 cmp byte[V8Mode],1 jne .noveg2 call dovegrest.noveg2 ret;*******************************************************; ChangePal Sets up the palette;*******************************************************NEWSYM doschangepal cmp byte[V8Mode],1 jne .noveg call doveg.noveg mov ax,[cgram] mov [tempco0],ax test byte[scaddtype],00100000b jz near .noaddition test byte[scaddtype],10000000b jnz near .noaddition mov cx,[cgram] mov ax,cx and ax,001Fh add al,[coladdr] cmp al,01Fh jb .noadd mov al,01Fh.noadd mov bx,ax mov ax,cx shr ax,5 and ax,001Fh add al,[coladdg] cmp al,01Fh jb .noaddb mov al,01Fh.noaddb shl ax,5 add bx,ax mov ax,cx shr ax,10 and ax,001Fh add al,[coladdb] cmp al,01Fh jb .noaddc mov al,01Fh.noaddc shl ax,10 add bx,ax mov [cgram],bx.noaddition cmp byte[Palette0],0 je .nocol0mod mov word[cgram],0.nocol0mod ; check if brightness differs mov al,[maxbr] cmp al,[prevbright] jne near makepalb ; check for duplicate palette (Compare prevpal with cgram) mov ebx,prevpal mov edi,cgram xor ah,ah.loopa mov cx,[edi] cmp cx,[ebx] je .nochange push eax push ebx push eax pop eax mov [ebx],cx mov al,ah mov dx,03C8h out dx,al mov ax,cx and al,01Fh mov bh,[maxbr] mov bl,bh mul bl mov bl,15 div bl shl al,1 add al,[gammalevel] cmp al,63 jbe .nor mov al,63.nor inc dx out dx,al mov ax,cx shr ax,5 and al,01Fh mov bl,bh mul bl mov bl,15 div bl shl al,1 add al,[gammalevel] cmp al,63 jbe .nog mov al,63.nog out dx,al mov ax,cx shr ax,10 and al,01Fh mov bl,bh mul bl mov bl,15 div bl shl al,1 add al,[gammalevel] cmp al,63 jbe .nob mov al,63.nob out dx,al pop ebx pop eax.nochange add edi,2 add ebx,2 inc ah jnz near .loopa mov ax,[tempco0] mov [cgram],ax cmp byte[MessageOn],0 je .nochange128 mov dx,03C8h mov al,128 out dx,al mov al,63 inc dx out dx,al out dx,al out dx,al.nochange128 cmp byte[V8Mode],1 jne .noveg2 call dovegrest.noveg2 ret%endif;*******************************************************; CopyVid Copies buffer into video;*******************************************************NEWSYM showfps mov ax,60 cmp byte[romispal],0 je .ntsc mov ax,50.ntsc inc byte[curfps] cmp byte[nextframe],al jb .nofrc mov cl,[curfps] mov [lastfps],cl mov cl,[curfps2] mov [lastfps2],cl mov byte[curfps],0 mov byte[curfps2],0 sub byte[nextframe],al.nofrc mov cl,[SloMo] or cl,cl jz .noslw inc cl div cl.noslw mov cl,al cmp byte[cbitmode],1 je near .do16b%ifdef __MSDOS__ call displayfpspal%endif movzx ax,byte[lastfps] mov bl,10 div bl shl al,4 add ah,al mov al,ah mov esi,208*288+32 add esi,[vidbuffer] push ecx call outputhex mov esi,208*288+48 add esi,[vidbuffer] mov al,29h call outputchar pop ecx mov al,cl mov bl,10 xor ah,ah div bl shl al,4 add ah,al mov al,ah mov esi,208*288+56 add esi,[vidbuffer] call outputhex ret.do16b mov esi,208*288*2+48*2 add esi,[vidbuffer] mov al,[lastfps] push ecx xor ecx,ecx.strloop xor ah,ah add al,48 sub esi,8*2.asciiloop16b cmp al,58 jb .h2adone16b inc ah sub al,10 jmp .asciiloop16b.h2adone16b mov cl,al mov al,[ASCII2Font+ecx] call outputchar16b mov al,ah or al,al jnz .strloop mov esi,208*288*2+48*2 add esi,[vidbuffer] mov al,41 ; '/' call outputchar16b pop ecx mov al,cl mov bl,10 xor ah,ah div bl shl al,4 add ah,al mov al,ah mov esi,208*288*2+56*2 add esi,[vidbuffer] call outputhex16 retSECTION .bssNEWSYM tempoffset, resw 1NEWSYM Testval, resd 1SECTION .textEXTSYM TwelveHourClockNEWSYM ClockOutput cmp byte[cbitmode],1 je near .do16b3.no16b3%ifdef __MSDOS__ call displayfpspal%endif mov esi,215*288+32+192 add esi,[vidbuffer] cmp byte[ForceNonTransp],1 je .menuon8 cmp byte[ClockBox],1 jne near .do8b
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -