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

📄 makev16b.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    test byte[scrndis],10h    jnz near .nosprites2    test word[scrnon],1010h    jz near .nosprites2    cmp byte[winonsp],0FFh    je .nosprites2    xor ebx,ebx    mov bl,[curypos]    mov cl,[sprleftpr1+ebx]    cmp byte[sprprifix],0    je .nosprprio3    mov cl,[sprlefttot+ebx].nosprprio3    cmp cl,0    je .nosprites2    mov ebp,1    call drawsprites16b.nosprites2    test byte[interlval],40h    jz near .noback0b    test byte[scrndis],01h    jnz near .noback0b    cmp byte[extbgdone],0    jne near .noback0b    ; do background 1    test word[scrnon],0101h    jz near .noback0b    mov byte[winon],0    test word[winenabm],0002h    jz near .nobackwin0b    test word[winenabm],0200h    jnz near .nobackwin0b    mov al,[winbg1en]    call makewindow    cmp byte[winon],0FFh    je near .noback0b.nobackwin0b    mov byte[extbgdone],1    procmode716bextbg [bg1scroly_m7],[bg1scrolx_m7],1.noback0b    ; mode 7 extbg    test byte[interlval],40h    jz near .noback2    cmp byte[extbgdone],0    je near .noback2    test byte[scrndis],01h    jnz near .noback2    ; do background 1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin2    test word[winenabm],0100h    jnz near .nobackwin2    mov al,[winbg1en]    call makewindow    cmp byte[winon],0FFh    je near .noback2.nobackwin2    procmode716bextbg2 [bg1scroly_m7],[bg1scrolx_m7],1.noback2    ; do objects    test byte[scrndis],10h    jnz near .nosprites3    test word[scrnon],1010h    jz near .nosprites3    cmp byte[winonsp],0FFh    je .nosprites3    xor ebx,ebx    mov bl,[curypos]    mov cl,[sprleftpr2+ebx]    cmp byte[sprprifix],0    je .nosprprio4    mov cl,[sprlefttot+ebx].nosprprio4    cmp cl,0    je .nosprites3    mov ebp,2    call drawsprites16b.nosprites3    ; do objects    test byte[scrndis],10h    jnz near .nosprites4    test word[scrnon],1010h    jz near .nosprites4    cmp byte[winonsp],0FFh    je .nosprites4    xor ebx,ebx    mov bl,[curypos]    mov cl,[sprleftpr3+ebx]    cmp byte[sprprifix],0    je .nosprprio5    mov cl,[sprlefttot+ebx].nosprprio5    cmp cl,0    je .nosprites4    mov ebp,3    call drawsprites16b.nosprites4    pop ebp    pop edx    pop ebx    pop edi    pop esi    xor eax,eax    xor ecx,ecx    ret;*******************************************************; Clear Backarea, 16-bit mode;*******************************************************NEWSYM clearback16b    test byte[scaddtype],00100000b    jz near .noaddition    test byte[scaddtype],10000000b    jnz near .noaddition    mov dx,[cgram]    mov ax,dx    and ax,001Fh    add al,[coladdr]    cmp al,01Fh    jb .noadd    mov al,01Fh.noadd    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_rpos]    shl ax,cl    mov bx,ax    mov ax,dx    shr ax,5    and ax,001Fh    add al,[coladdg]    cmp al,01Fh    jb .noaddb    mov al,01Fh.noaddb    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_gpos]    shl ax,cl    add bx,ax    mov ax,dx    shr ax,10    and ax,001Fh    add al,[coladdb]    cmp al,01Fh    jb .noaddc    mov al,01Fh.noaddc    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_bpos]    shl ax,cl    add bx,ax    mov ax,bx    shl eax,16    mov ax,bx    mov edi,[curvidoffset]    mov ecx,128    rep stosd    xor eax,eax    ret.noaddition    mov edi,[curvidoffset]    mov ax,[pal16b]    shl eax,16    mov ax,[pal16b]    mov ecx,128    rep stosd    xor eax,eax    ret;*******************************************************; Set palette 16bit;*******************************************************NEWSYM setpalall    cmp byte[V8Mode],1    jne .noveg    call doveg.noveg    xor esi,esi    mov byte[colleft16b],0.loopa    mov dx,[cgram+esi]    mov [prevpal+esi],dx    mov ax,dx    and al,01Fh    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_rpos]    xor bx,bx    shl ax,cl    add bx,ax    mov ax,dx    shr ax,5    and al,01Fh    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_gpos]    shl ax,cl    add bx,ax    mov ax,dx    shr ax,10    and al,01Fh    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_bpos]    shl ax,cl    add bx,ax    cmp bx,0    jne .col0    cmp byte[vidbright],0    je .col0    or bx,0000000000100000b.col0    mov ax,bx    mov [pal16b+esi*2],bx    and bx,[vesa2_clbit]    mov [pal16bcl+esi*2],bx    xor ax,0FFFFh    and ax,[vesa2_clbit]    mov [pal16bxcl+esi*2],ax    add esi,2    inc byte[colleft16b]    jnz near .loopa    mov al,[vidbright]    mov [prevbright],al    cmp byte[V8Mode],1    jne .noveg2    call dovegrest.noveg2    retSECTION .bssNEWSYM colleft16b, resb 1SECTION .textNEWSYM setpalette16b    cmp byte[gammalevel16b],0    jne near setpalette16bgamma    cmp byte[V8Mode],1    jne .noveg    call doveg.noveg    mov al,[vidbright]    cmp al,[prevbright]    jne near setpalall    cmp byte[cgmod],0    je near .skipall    mov byte[cgmod],0    xor esi,esi    mov byte[colleft16b],0.loopa    mov dx,[cgram+esi]    cmp [prevpal+esi],dx    je near .skipa    mov [prevpal+esi],dx    mov ax,dx    and al,01Fh    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_rpos]    xor bx,bx    shl ax,cl    add bx,ax    mov ax,dx    shr ax,5    and al,01Fh    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_gpos]    shl ax,cl    add bx,ax    mov ax,dx    shr ax,10    and al,01Fh    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_bpos]    shl ax,cl    add bx,ax    cmp bx,0    jne .col0    cmp byte[vidbright],0    je .col0    or bx,0000000000100000b.col0    mov [pal16b+esi*2],bx    mov ax,bx    and bx,[vesa2_clbit]    mov [pal16bcl+esi*2],bx    xor ax,0FFFFh    and ax,[vesa2_clbit]    mov [pal16bxcl+esi*2],ax.skipa    add esi,2    inc byte[colleft16b]    jnz near .loopa.skipall    cmp byte[V8Mode],1    jne .noveg2    call dovegrest.noveg2    retNEWSYM setpalallgamma    xor esi,esi    mov byte[colleft16b],0.loopa    mov dx,[cgram+esi]    mov [prevpal+esi],dx    mov ax,dx    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .norr    mov al,31.norr    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_rpos]    xor bx,bx    shl ax,cl    add bx,ax    mov ax,dx    shr ax,5    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .nogr    mov al,31.nogr    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_gpos]    shl ax,cl    add bx,ax    mov ax,dx    shr ax,10    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .nobr    mov al,31.nobr    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_bpos]    shl ax,cl    add bx,ax    cmp bx,0    jne .col0    cmp byte[vidbright],0    je .col0    or bx,0000000000100000b.col0    mov ax,bx    mov [pal16b+esi*2],bx    and bx,[vesa2_clbit]    mov [pal16bcl+esi*2],bx    xor ax,0FFFFh    and ax,[vesa2_clbit]    mov [pal16bxcl+esi*2],ax    add esi,2    inc byte[colleft16b]    jnz near .loopa    mov al,[vidbright]    mov [prevbright],al    retNEWSYM setpalette16bgamma    mov al,[vidbright]    cmp al,[prevbright]    jne near setpalallgamma    cmp byte[cgmod],0    je near .skipall    mov byte[cgmod],0    xor esi,esi    mov byte[colleft16b],0.loopa    mov dx,[cgram+esi]    cmp [prevpal+esi],dx    je near .skipa    mov [prevpal+esi],dx    mov ax,dx    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .norb    mov al,31.norb    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_rpos]    xor bx,bx    shl ax,cl    add bx,ax    mov ax,dx    shr ax,5    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .norr    mov al,31.norr    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_gpos]    shl ax,cl    add bx,ax    mov ax,dx    shr ax,10    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .norg    mov al,31.norg    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[vesa2_bpos]    shl ax,cl    add bx,ax    cmp bx,0    jne .col0    cmp byte[vidbright],0    je .col0    or bx,0000000000100000b.col0    mov [pal16b+esi*2],bx    mov ax,bx    and bx,[vesa2_clbit]    mov [pal16bcl+esi*2],bx    xor ax,0FFFFh    and ax,[vesa2_clbit]    mov [pal16bxcl+esi*2],ax.skipa    add esi,2    inc byte[colleft16b]    jnz near .loopa.skipall    ret;*******************************************************; Processes & Draws 4-bit sprites;*******************************************************NEWSYM drawsprites16b    cmp byte[sprprifix],1    je near drawsprites16bprio    test byte[cwinenabm],10h    jz .drawnowin    cmp byte[winonsp],0    jne near drawsprites16bwinon.drawnowin    mov esi,[currentobjptr]    mov edi,[curvidoffset]    xor ebx,ebx    xor eax,eax.loopobj    test byte[esi+7],20h    jnz near .drawspriteflipx    push esi    mov bx,[esi]    mov ch,[esi+6]    mov esi,[esi+2]    shl bx,1    mov al,[esi]    test al,0Fh    jz .skipa    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-16],dx.skipa    mov al,[esi+1]    test al,0Fh    jz .skipb    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-14],dx.skipb    mov al,[esi+2]    test al,0Fh    jz .skipc    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-12],dx.skipc    mov al,[esi+3]    test al,0Fh    jz .skipd    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-10],dx.skipd    mov al,[esi+4]    test al,0Fh    jz .skipe    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-8],dx.skipe    mov al,[esi+5]    test al,0Fh    jz .skipf    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-6],dx.skipf    mov al,[esi+6]    test al,0Fh    jz .skipg    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-4],dx.skipg    mov al,[esi+7]    test al,0Fh    jz .skiph    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-2],dx.skiph    pop esi    add esi,8    dec cl    jnz near .loopobj    mov [currentobjptr],esi    ret.drawspriteflipx    push esi    mov bx,[esi]    mov ch,[esi+6]    mov esi,[esi+2]    shl bx,1    mov al,[esi+7]    test al,0Fh    jz .skipa2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-16],dx.skipa2    mov al,[esi+6]    test al,0Fh    jz .skipb2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-14],dx.skipb2    mov al,[esi+5]    test al,0Fh    jz .skipc2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-12],dx.skipc2    mov al,[esi+4]    test al,0Fh    jz .skipd2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-10],dx.skipd2    mov al,[esi+3]    test al,0Fh    jz .skipe2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-8],dx.skipe2    mov al,[esi+2]    test al,0Fh    jz .skipf2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -