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

📄 newgfx16.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    test dword[bgcmsung],1010h
    jz near .nosprprme
    Procsprng23456716b ngmain ,10h
.nosprprme

    test byte[scrndis],1h
    jnz near .nodobg1mb
    test dword[bgcmsung],101h
    jz near .nodobg1mb
    mov eax,[bg1totng]
    cmp eax,[bg1drwng]
    je near .nodobg1mb
    mov dword[mode0ads],00000000h
    Procbgpr116b 0, drawbg1linepr116b, drawbg1tilepr116b, prdatb, ngmain, 1h
.nodobg1mb

    ; draw sprites mode 0-7
    test byte[scrndis],10h
    jnz near .nosprprmf
    test dword[bgcmsung],1010h
    jz near .nosprprmf
    Procsprng16b ngmain, 10h
.nosprprmf

    test byte[scrndis],4h
    jnz near .nodobg3mb2
    cmp byte[modeused+1],0
    je near .nodobg3mb2
    test dword[bgcmsung],404h
    jz near .nodobg3mb2
    mov eax,[bg3totng]
    cmp eax,[bg3drwng]
    je near .nodobg3mb2
    mov dword[mode0ads],40404040h
    Procbg3pr1b16b 2, drawbg3linepr116b, drawbg3tilepr116b, prdatc, ngmain, 4h
.nodobg3mb2
    call MainScreenClip
    call ProcessTransparencies
.dontdraw
    xor ebx,ebx
    xor ecx,ecx
    xor eax,eax
    pop ebp
    pop edi
    pop esi
    pop edx
    ret


NEWSYM domosaicng16b
    mov esi,[pesimpng]
    xor eax,eax
    mov edi,xtravbuf+32
    mov al,[curmosaicsz]
    cmp al,16
    ja .notokay
    cmp al,1
    jbe .notokay
    push esi
    push ebx
    mov ebx,[mosclineval]
    mov cl,[mostranspval]
    cmp byte[BGMA+ebx],7
    je .main
    test byte[BGMS1+ebx*2],cl
    jz .nosubmain
    test byte[FillSubScr+ebx],1
    jnz .transpstuff
    jmp .main
.nosubmain
    test byte[FillSubScr+ebx],1
    jz .main
    add esi,75036*2
.main
    pop ebx
    jmp [mosjmptab16b+eax*4-8]
    pop esi
.notokay
    ret
.transpstuff
    test byte[BGMS1+ebx*2+1],cl
    jnz near .mosaicms
    test byte[scadtng+ebx],cl
    jz near .main
    pop ebx
    jmp [mosjmptab16bt+eax*4-8]
    pop esi
    ret
.mosaicms
    test byte[scadtng+ebx],cl
    jz near .mosaicmsnt
    pop ebx
    jmp [mosjmptab16btms+eax*4-8]
    pop esi
    ret
.mosaicmsnt
    pop ebx
    jmp [mosjmptab16bntms+eax*4-8]
    pop esi
    ret

%macro mosaic2 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
%endmacro
%macro mosaic3 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
%endmacro
%macro mosaic4 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
%endmacro
%macro mosaic5 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
%endmacro
%macro mosaic6 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
%endmacro
%macro mosaic7 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
%endmacro
%macro mosaic8 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
%endmacro
%macro mosaic9 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
    mov [esi+%1+16],ax
%endmacro
%macro mosaic10 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
    mov [esi+%1+16],ax
    mov [esi+%1+18],ax
%endmacro
%macro mosaic11 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
    mov [esi+%1+16],ax
    mov [esi+%1+18],ax
    mov [esi+%1+20],ax
%endmacro
%macro mosaic12 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
    mov [esi+%1+16],ax
    mov [esi+%1+18],ax
    mov [esi+%1+20],ax
    mov [esi+%1+22],ax
%endmacro
%macro mosaic13 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
    mov [esi+%1+16],ax
    mov [esi+%1+18],ax
    mov [esi+%1+20],ax
    mov [esi+%1+22],ax
    mov [esi+%1+24],ax
%endmacro
%macro mosaic14 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
    mov [esi+%1+16],ax
    mov [esi+%1+18],ax
    mov [esi+%1+20],ax
    mov [esi+%1+22],ax
    mov [esi+%1+24],ax
    mov [esi+%1+26],ax
%endmacro
%macro mosaic15 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
    mov [esi+%1+16],ax
    mov [esi+%1+18],ax
    mov [esi+%1+20],ax
    mov [esi+%1+22],ax
    mov [esi+%1+24],ax
    mov [esi+%1+26],ax
    mov [esi+%1+28],ax
%endmacro
%macro mosaic16 1
    mov [esi+%1],ax
    mov [esi+%1+2],ax
    mov [esi+%1+4],ax
    mov [esi+%1+6],ax
    mov [esi+%1+8],ax
    mov [esi+%1+10],ax
    mov [esi+%1+12],ax
    mov [esi+%1+14],ax
    mov [esi+%1+16],ax
    mov [esi+%1+18],ax
    mov [esi+%1+20],ax
    mov [esi+%1+22],ax
    mov [esi+%1+24],ax
    mov [esi+%1+26],ax
    mov [esi+%1+28],ax
    mov [esi+%1+30],ax
%endmacro

%macro mosaicproc 3
    mov ecx,%1
.next
    mov ax,[edi]
    cmp ax,0FFFFh
    je .nodraw
    %2 0
    mosender %3
%endmacro

%macro mosaicproct 3
    mov ecx,%1
.next
    mov ax,[edi]
    cmp ax,0FFFFh
    je .nodraw
    or ax,[UnusedBit]
    %2 0
    mosender %3
%endmacro

%macro mosaicprocntms 3
    mov ecx,%1
.next
    mov ax,[edi]
    cmp ax,0FFFFh
    je near .nodraw
    %2 0
    %2 75036*2
    mosender %3
%endmacro

%macro mosaicproctms 3
    mov ecx,%1
.next
    mov ax,[edi]
    cmp ax,0FFFFh
    je near .nodraw
    or ax,[UnusedBit]
    %2 0
    and ax,[UnusedBit]
    %2 75036*2
    mosender %3
%endmacro

NEWSYM mosdraw216b
    mosaicproc 128,mosaic2,2
NEWSYM mosdraw316b
    mosaicproc 86,mosaic3,3
NEWSYM mosdraw416b
    mosaicproc 64,mosaic4,4
NEWSYM mosdraw516b
    mosaicproc 52,mosaic5,5
NEWSYM mosdraw616b
    mosaicproc 43,mosaic6,6
NEWSYM mosdraw716b
    mosaicproc 37,mosaic7,7
NEWSYM mosdraw816b
    mosaicproc 32,mosaic8,8
NEWSYM mosdraw916b
    mosaicproc 29,mosaic9,9
NEWSYM mosdraw1016b
    mosaicproc 26,mosaic10,10
NEWSYM mosdraw1116b
    mosaicproc 24,mosaic11,11
NEWSYM mosdraw1216b
    mosaicproc 22,mosaic12,12
NEWSYM mosdraw1316b
    mosaicproc 20,mosaic13,13
NEWSYM mosdraw1416b
    mosaicproc 19,mosaic14,14
NEWSYM mosdraw1516b
    mosaicproc 18,mosaic15,15
NEWSYM mosdraw1616b
    mosaicproc 16,mosaic16,16

NEWSYM mosdraw216bt
    mosaicproct 128,mosaic2,2
NEWSYM mosdraw316bt
    mosaicproct 86,mosaic3,3
NEWSYM mosdraw416bt
    mosaicproct 64,mosaic4,4
NEWSYM mosdraw516bt
    mosaicproct 52,mosaic5,5
NEWSYM mosdraw616bt
    mosaicproct 43,mosaic6,6
NEWSYM mosdraw716bt
    mosaicproct 37,mosaic7,7
NEWSYM mosdraw816bt
    mosaicproct 32,mosaic8,8
NEWSYM mosdraw916bt
    mosaicproct 29,mosaic9,9
NEWSYM mosdraw1016bt
    mosaicproct 26,mosaic10,10
NEWSYM mosdraw1116bt
    mosaicproct 24,mosaic11,11
NEWSYM mosdraw1216bt
    mosaicproct 22,mosaic12,12
NEWSYM mosdraw1316bt
    mosaicproct 20,mosaic13,13
NEWSYM mosdraw1416bt
    mosaicproct 19,mosaic14,14
NEWSYM mosdraw1516bt
    mosaicproct 18,mosaic15,15
NEWSYM mosdraw1616bt
    mosaicproct 16,mosaic16,16

NEWSYM mosdraw216btms
    mosaicproctms 128,mosaic2,2
NEWSYM mosdraw316btms
    mosaicproctms 86,mosaic3,3
NEWSYM mosdraw416btms
    mosaicproctms 64,mosaic4,4
NEWSYM mosdraw516btms
    mosaicproctms 52,mosaic5,5
NEWSYM mosdraw616btms
    mosaicproctms 43,mosaic6,6
NEWSYM mosdraw716btms
    mosaicproctms 37,mosaic7,7
NEWSYM mosdraw816btms
    mosaicproctms 32,mosaic8,8
NEWSYM mosdraw916btms
    mosaicproctms 29,mosaic9,9
NEWSYM mosdraw1016btms
    mosaicproctms 26,mosaic10,10
NEWSYM mosdraw1116btms
    mosaicproctms 24,mosaic11,11
NEWSYM mosdraw1216btms
    mosaicproctms 22,mosaic12,12
NEWSYM mosdraw1316btms
    mosaicproctms 20,mosaic13,13
NEWSYM mosdraw1416btms
    mosaicproctms 19,mosaic14,14
NEWSYM mosdraw1516btms
    mosaicproctms 18,mosaic15,15
NEWSYM mosdraw1616btms
    mosaicproctms 16,mosaic16,16

NEWSYM mosdraw216bntms
    mosaicprocntms 128,mosaic2,2
NEWSYM mosdraw316bntms
    mosaicprocntms 86,mosaic3,3
NEWSYM mosdraw416bntms
    mosaicprocntms 64,mosaic4,4
NEWSYM mosdraw516bntms
    mosaicprocntms 52,mosaic5,5
NEWSYM mosdraw616bntms
    mosaicprocntms 43,mosaic6,6
NEWSYM mosdraw716bntms
    mosaicprocntms 37,mosaic7,7
NEWSYM mosdraw816bntms
    mosaicprocntms 32,mosaic8,8
NEWSYM mosdraw916bntms
    mosaicprocntms 29,mosaic9,9
NEWSYM mosdraw1016bntms
    mosaicprocntms 26,mosaic10,10
NEWSYM mosdraw1116bntms
    mosaicprocntms 24,mosaic11,11
NEWSYM mosdraw1216bntms
    mosaicprocntms 22,mosaic12,12
NEWSYM mosdraw1316bntms
    mosaicprocntms 20,mosaic13,13
NEWSYM mosdraw1416bntms
    mosaicprocntms 19,mosaic14,14
NEWSYM mosdraw1516bntms
    mosaicprocntms 18,mosaic15,15
NEWSYM mosdraw1616bntms
    mosaicprocntms 16,mosaic16,16


NEWSYM drawbg1tile16b
    mov byte[prdatb+ebx],1
    drawbgtileng16b 0,0
    ret

NEWSYM drawbg2tile16b
    mov byte[prdata+ebx],1
    drawbgtileng16b 1,1
    ret

NEWSYM drawbg3tile16b
    mov byte[prdatc+ebx],1
    drawbgtileng16b 2,2
    ret

NEWSYM drawbg4tile16b
    mov byte[prdata+ebx],1
    drawbgtileng16b 3,3
    ret

NEWSYM drawbg1tilepr116b
    drawbgtilengpr116b 0,0
    ret

NEWSYM drawbg2tilepr116b
    drawbgtilengpr116b 1,1
    ret

NEWSYM drawbg3tilepr116b
    drawbgtilengpr116b 2,2
    ret

NEWSYM drawbg4tilepr116b
    drawbgtilengpr116b 3,3
    ret

NEWSYM drawbg1line16b
    mov byte[prdatb+ebx],0
    drawbglineng16b 0,0

NEWSYM drawbg2line16b
    mov byte[prdata+ebx],0
    drawbglineng16b 1,1

NEWSYM drawbg3line16b
    mov byte[prdatc+ebx],0
    drawbglineng16b 2,2

NEWSYM drawbg4line16b
    mov byte[prdata+ebx],0
    drawbglineng16b 3,3

NEWSYM drawbg1linepr116b
    drawbglinengpr116b 0,0

NEWSYM drawbg2linepr116b
    drawbglinengpr116b 1,1

NEWSYM drawbg3linepr116b
    drawbglinengpr116b 2,2

NEWSYM drawbg4linepr116b
    drawbglinengpr116b 3,3

%macro normalsprng16b 2
    test dword[sprleftpr+ebx*4],80000000h
    jnz near .drawsingle
    push esi
    push ebx
    add edi,esi
    mov esi,[sprtbng+ebx*4]
    mov edx,esi
    xor ebx,ebx
.loopobj
    test byte[esi+7],20h
    jnz near .drawspriteflipx
    mov bx,[esi]
    push edx
    mov ch,[esi+6]
    mov dl,[esi+7]
    and edx,03h
    cmp edx,[csprival]
    jne near .notprio
    mov esi,[esi+2]
    mov dl,[csprbit]
    sprdrawa16b %1
    pop edx
.nodrawspr
    add edx,8
    mov esi,edx
    dec cl
    jnz near .loopobj
    rol byte[csprbit],1
    cmp byte[csprbit],1
    je near .clearcsprmem
    pop ebx
    pop esi
    ret
.notprio
    mov esi,[esi+2]
    mov dl,[csprbit]
    sprdrawa sprdrawpra2
    pop edx
    add edx,8
    mov esi,edx
    dec cl
    jnz near .loopobj
    rol byte[csprbit],1
    cmp byte[csprbit],1
    je near .clearcsprmem
    pop ebx
    pop esi
    ret
.drawspriteflipx
    mov bx,[esi]
    push edx
    mov ch,[esi+6]
    mov dl,[esi+7]
    and edx,03h
    cmp edx,[csprival]
    jne near .notpriof
    mov esi,[esi+2]
    mov dl,[csprbit]
    sprdrawaf16b %1
    pop edx
    add edx,8
    mov esi,edx
    dec cl
    jnz near .loopobj
    rol byte[csprbit],1
    cmp byte[csprbit],1
    je near .clearcsprmem
.endobj
    pop ebx
    pop esi
    ret
.notpriof
    mov esi,[esi+2]
    mov dl,[csprbit]
    sprdrawaf sprdrawpra2
    pop edx
    add edx,8
    mov esi,edx
    dec cl
    jnz near .loopobj
    rol byte[csprbit],1
    cmp byte[csprbit],1
    je near .clearcsprmem

⌨️ 快捷键说明

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