📄 procvid.asm
字号:
;*******************************************************
; CopyVid Copies buffer into video
;*******************************************************
NEWSYM showfps
mov cl,50
cmp byte[romispal],0
jne .nontsc
mov cl,60
.nontsc
inc byte[curfps]
cmp byte[nextframe],cl
jb .nofrc
mov al,[curfps]
mov [lastfps],al
mov al,[curfps2]
mov [lastfps2],al
mov byte[curfps],0
mov byte[curfps2],0
sub byte[nextframe],cl
.nofrc
cmp byte[cbitmode],1
je near .do16b
call displayfpspal
mov al,[lastfps]
mov bl,10
xor ah,ah
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 al,[lastfps]
mov bl,10
xor ah,ah
div bl
shl al,4
add ah,al
mov al,ah
mov esi,208*288*2+32*2
add esi,[vidbuffer]
push ecx
call outputhex16
mov esi,208*288*2+48*2
add esi,[vidbuffer]
mov al,29h
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
ret
.ng16b
mov byte[ngfont],1
mov al,[lastfps]
mov bl,10
xor ah,ah
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
NEWSYM spcdebugaddr, dd 0
NEWSYM tempoffset, dw 0
NEWSYM Testval, dd 0
NEWSYM ClockOutput
cmp byte[cbitmode],1
je near .do16b3
.no16b3
mov byte[ngfont],1
call displayfpspal
mov esi,215*288+32+192
add esi,[vidbuffer]
mov ebx,7
.loop2
mov ecx,12
mov byte[esi-1],0C0h
.loop
mov dword[esi],0C0C0C0C0h
add esi,4
loop .loop
add esi,288-48
dec ebx
jnz .loop2
jmp .do8b
.do16b3
mov esi,215*288*2+32*2+192*2
add esi,[vidbuffer]
mov ebx,7
.loop2b
mov ecx,24
mov word[esi-2],0
mov word[esi-2+75036*4],0
.loopb
mov dword[esi],0
mov dword[esi+75036*4],0
add esi,4
loop .loopb
add esi,288*2-48*2
dec ebx
jnz .loop2b
.do8b
call GetTimeInSeconds
xor edx,edx
mov ebx,60
div ebx
push eax
; edx = seconds
mov eax,edx
xor edx,edx
mov ebx,10
div ebx
mov esi,216*288+32+228
call .output
pop eax
mov ebx,60
xor edx,edx
div ebx
push eax
; edx = minutes
mov eax,edx
xor edx,edx
mov ebx,10
div ebx
mov esi,216*288+32+210
call .output
pop eax
; eax = hours
xor edx,edx
mov ebx,10
div ebx
mov esi,216*288+32+192
call .output
cmp byte[cbitmode],1
je .do16b2
.no16b4
mov esi,216*288+32+222
add esi,[vidbuffer]
xor eax,eax
add al,':'
mov al,[ASCII2Font+eax]
pushad
call outputchar5x5
popad
mov esi,216*288+32+204
add esi,[vidbuffer]
xor eax,eax
add al,':'
mov al,[ASCII2Font+eax]
pushad
call outputchar5x5
popad
ret
.do16b2
mov esi,216*288*2+32*2+222*2
add esi,[vidbuffer]
xor eax,eax
add al,':'
mov al,[ASCII2Font+eax]
pushad
call outputchar16b5x5
popad
mov esi,216*288*2+32*2+204*2
add esi,[vidbuffer]
xor eax,eax
add al,':'
mov al,[ASCII2Font+eax]
pushad
call outputchar16b5x5
popad
ret
.output
; output char value at al and dl
cmp byte[cbitmode],1
je .do16b
.no16b5
add esi,[vidbuffer]
and eax,0FFh
add al,48
mov al,[ASCII2Font+eax]
pushad
call outputchar5x5
popad
xor eax,eax
mov al,dl
add al,48
mov al,[ASCII2Font+eax]
add esi,6
pushad
call outputchar5x5
popad
ret
.do16b
add esi,esi
add esi,[vidbuffer]
and eax,0FFh
add al,48
mov al,[ASCII2Font+eax]
pushad
call outputchar16b5x5
popad
xor eax,eax
mov al,dl
add al,48
mov al,[ASCII2Font+eax]
add esi,12
pushad
call outputchar16b5x5
popad
ret
NEWSYM ClockOutputB
cmp byte[cbitmode],1
je near .do16b3
.no16b3
mov byte[ngfont],1
call displayfpspal
mov esi,208*288+32+192
add esi,[vidbuffer]
mov ebx,7
.loop2
mov ecx,12
mov byte[esi-1],0C0h
.loop
mov dword[esi],0C0C0C0C0h
add esi,4
loop .loop
add esi,288-48
dec ebx
jnz .loop2
jmp .do8b
.do16b3
mov esi,208*288*2+32*2+192*2
add esi,[vidbuffer]
mov ebx,7
.loop2b
mov ecx,24
mov word[esi-2],0
mov word[esi-2+75036*4],0
.loopb
mov dword[esi],0
mov dword[esi+75036*4],0
add esi,4
loop .loopb
add esi,288*2-48*2
dec ebx
jnz .loop2b
.do8b
call GetTimeInSeconds
xor edx,edx
mov ebx,60
div ebx
push eax
; edx = seconds
mov eax,edx
xor edx,edx
mov ebx,10
div ebx
mov esi,209*288+32+228
call .output
pop eax
mov ebx,60
xor edx,edx
div ebx
push eax
; edx = minutes
mov eax,edx
xor edx,edx
mov ebx,10
div ebx
mov esi,209*288+32+210
call .output
pop eax
; eax = hours
xor edx,edx
mov ebx,10
div ebx
mov esi,209*288+32+192
call .output
cmp byte[cbitmode],1
je .do16b2
.no16b4
mov esi,209*288+32+222
add esi,[vidbuffer]
xor eax,eax
add al,':'
mov al,[ASCII2Font+eax]
pushad
call outputchar5x5
popad
mov esi,209*288+32+204
add esi,[vidbuffer]
xor eax,eax
add al,':'
mov al,[ASCII2Font+eax]
pushad
call outputchar5x5
popad
ret
.do16b2
mov esi,209*288*2+32*2+222*2
add esi,[vidbuffer]
xor eax,eax
add al,':'
mov al,[ASCII2Font+eax]
pushad
call outputchar16b5x5
popad
mov esi,209*288*2+32*2+204*2
add esi,[vidbuffer]
xor eax,eax
add al,':'
mov al,[ASCII2Font+eax]
pushad
call outputchar16b5x5
popad
ret
.output
; output char value at al and dl
cmp byte[cbitmode],1
je .do16b
.no16b5
add esi,[vidbuffer]
and eax,0FFh
add al,48
mov al,[ASCII2Font+eax]
pushad
call outputchar5x5
popad
xor eax,eax
mov al,dl
add al,48
mov al,[ASCII2Font+eax]
add esi,6
pushad
call outputchar5x5
popad
ret
.do16b
add esi,esi
add esi,[vidbuffer]
and eax,0FFh
add al,48
mov al,[ASCII2Font+eax]
pushad
call outputchar16b5x5
popad
xor eax,eax
mov al,dl
add al,48
mov al,[ASCII2Font+eax]
add esi,12
pushad
call outputchar16b5x5
popad
ret
hextestfilen db 'DSP1DUMP.DAT',0
NEWSYM SoundTest, db 0
blahrnr dw 0
NEWSYM hextestoutput
mov dx,[bg3scroly]
; and dx,0F8h
shr edx,3
shl edx,6
xor eax,eax
mov ax,[bg3ptr]
add ax,dx
xor edx,edx
mov dx,[bg3scrolx]
and dx,0F8h
shr edx,3
shl edx,1
add ax,dx
mov dx,[bg3scrolx]
test dx,8000h
jz .nooma
and dx,0F000h
shr dx,5
add ax,dx
.nooma
add eax,40h
mov edx,eax
mov [Testval],edx
cmp byte[pressed+25],1
jne .nopress25
jmp .nopress25
pushad
mov edx,hextestfilen
call Create_File
jc .failed
mov bx,ax
mov edx,dsp1array
mov ecx,4096
call Write_File
call Close_File
.failed
popad
mov byte[pressed+25],2
.nopress25
call displayfpspal
mov esi,[vram]
mov ax,0
mov ecx,400h
.loop
; mov word[esi],ax
add esi,2
loop .loop
inc word[blahrnr]
mov esi,216*288+32
add esi,[vidbuffer]
xor eax,eax
EXTSYM Op14Zr,Op14Xr,Op14Yr,Op14U,Op14F,Op14L
EXTSYM Op02CX,Op02CY,bg1scrolx,bg1scroly
EXTSYM TValDebug,TValDebug2,curhdma,bg1ptr,bg1objptr,DecompAPtr
; 4F00h
mov ebx,[C4Ram]
mov ebx,[vram]
mov al,[DecompAPtr+1h]
call outputhex
mov esi,216*288+32+16
add esi,[vidbuffer]
xor eax,eax
mov ebx,[C4Ram]
mov ebx,[vram]
mov al,[DecompAPtr]
call outputhex
mov esi,216*288+70
add esi,[vidbuffer]
xor eax,eax
mov ebx,[C4Ram]
mov al,[bg1objptr+1]
call outputhex
mov esi,216*288+70+16
add esi,[vidbuffer]
xor eax,eax
mov ebx,[C4Ram]
mov al,[bg1objptr]
call outputhex
mov esi,216*288+108
add esi,[vidbuffer]
xor eax,eax
mov ebx,[C4Ram]
mov al,[ebx+4]
call outputhex
mov esi,216*288+108+16
add esi,[vidbuffer]
xor eax,eax
mov ebx,[C4Ram]
mov al,[ebx+9]
call outputhex
mov esi,216*288+146
add esi,[vidbuffer]
xor eax,eax
mov ebx,[C4Ram]
mov al,[ebx+10]
call outputhex
xor eax,eax
mov esi,216*288+146+16
add esi,[vidbuffer]
or al,[bg1scroly]
mov ebx,[C4Ram]
mov al,[ebx+11]
call outputhex
ret
NEWSYM SoundPlayed0, db 0
NEWSYM SoundPlayed1, db 0
NEWSYM SoundPlayed2, db 0
NEWSYM SoundPlayed3, db 0
NEWSYM SoundPlayed4, db 0
NEWSYM SoundPlayed5, db 0
NEWSYM SoundPlayed6, db 0
NEWSYM SoundPlayed7, db 0
NEWSYM ngfont, db 0
NEWSYM ShowSound
add esi,[vidbuffer]
.next
mov [esi],ebx
mov [esi+4],ebx
mov [esi+8],bx
sub esi,288
dec al
jnz .next
ret
NEWSYM sounddisplay
call displayfpspal
push esi
push ebx
push eax
mov ebx,80808080h
cmp byte[SoundPlayed0],0
je .nosnd0
mov al,[SoundPlayed0]
mov esi,223*288+16
call ShowSound
sub byte[SoundPlayed0],2
.nosnd0
cmp byte[SoundPlayed1],0
je .nosnd1
mov al,[SoundPlayed1]
mov esi,223*288+28
call ShowSound
sub byte[SoundPlayed1],2
.nosnd1
cmp byte[SoundPlayed2],0
je .nosnd2
mov al,[SoundPlayed2]
mov esi,223*288+40
call ShowSound
sub byte[SoundPlayed2],2
.nosnd2
cmp byte[SoundPlayed3],0
je .nosnd3
mov al,[SoundPlayed3]
mov esi,223*288+52
call ShowSound
sub byte[SoundPlayed3],2
.nosnd3
cmp byte[SoundPlayed4],0
je .nosnd4
mov al,[SoundPlayed4]
mov esi,223*288+64
call ShowSound
sub byte[SoundPlayed4],2
.nosnd4
cmp byte[SoundPlayed5],0
je .nosnd5
mov al,[SoundPlayed5]
mov esi,223*288+76
call ShowSound
sub byte[SoundPlayed5],2
.nosnd5
cmp byte[SoundPlayed6],0
je .nosnd6
mov al,[SoundPlayed6]
mov esi,223*288+88
call ShowSound
sub byte[SoundPlayed6],2
.nosnd6
cmp byte[SoundPlayed7],0
je .nosnd7
mov al,[SoundPlayed7]
mov esi,223*288+100
call ShowSound
sub byte[SoundPlayed7],2
.nosnd7
pop eax
pop esi
pop ebx
ret
NEWSYM waitvsync
mov dx,3DAh ;VGA status port
;.loop
; in al,dx
; test al,8 ;check VR bit
; jnz .loop ;in middle of VR, better wait for next one
.loop2
in al,dx
test al,8
jz .loop2 ;updating the screen
ret
NEWSYM prevengval, db 10
NEWSYM chaton, db 0
NEWSYM chatstrL, times 140 db 0
NEWSY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -