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

📄 procvid.asm

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