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

📄 procvid.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    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 + -