⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 procvid.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;*******************************************************
; 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 + -