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

📄 newgfx.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 4 页
字号:
    jnz near .nodobg3sb2
    cmp byte[modeused+1],0
    je near .nodobg3sb2
    test dword[bgcmsung],400h
    jz near .nodobg3sb2
    mov eax,[bg3totng]
    cmp eax,[bg3drwng]
    je near .nodobg3sb2
    mov dword[mode0ads],40404040h
    Procbg3pr1b 2, drawbg3linepr1, drawbg3tilepr1, prdatc, 400h, 4h
.nodobg3sb2

    mov dword[bg1totng],0
    mov dword[bg2totng],0
    mov dword[bg3totng],0
    mov dword[bg4totng],0
    mov dword[bg1drwng],0
    mov dword[bg2drwng],0
    mov dword[bg3drwng],0
    mov dword[bg4drwng],0

    ; Draw MainScreens
    test byte[scrndis],8h
    jnz near .nodobg4m
    test dword[bgcmsung],8h
    jz near .nodobg4m
    mov dword[mode0ads],60606060h
    Procbgpr0 3, drawbg4line, drawbg4tile, 8h, 0
.nodobg4m
    test byte[scrndis],4h
    jnz near .nodobg3m
    test dword[bgcmsung],4h
    jz near .nodobg3m
    mov dword[mode0ads],40404040h
    Procbg3pr0 2, drawbg3line, drawbg3tile, 4h, 0
.nodobg3m

    ; draw sprites mode 0-1
    test byte[scrndis],10h
    jnz near .nosprprma
    test dword[modeused],00000101h
    jz near .nosprprma
    test dword[bgcmsung],10h
    jz near .nosprprma
    Procsprng01 10h, 0
.nosprprma

    test byte[scrndis],8h
    jnz near .nodobg4mb
    test dword[bgcmsung],8h
    jz near .nodobg4mb
    mov eax,[bg4totng]
    cmp eax,[bg4drwng]
    je near .nodobg4mb
    mov dword[mode0ads],60606060h
    Procbgpr1 3, drawbg4linepr1, drawbg4tilepr1, prdata, 8h, 0
.nodobg4mb
    test byte[scrndis],4h
    jnz near .nodobg3mb
    test dword[bgcmsung],4h
    jz near .nodobg3mb
    mov eax,[bg3totng]
    cmp eax,[bg3drwng]
    je near .nodobg3mb
    mov dword[mode0ads],40404040h
    Procbg3pr1 2, drawbg3linepr1, drawbg3tilepr1, prdatc, 4h, 0
.nodobg3mb

    ; draw sprites mode 0-1
    test byte[scrndis],10h
    jnz near .nosprprmb
    test dword[modeused],00000101h
    jz near .nosprprmb
    test dword[bgcmsung],10h
    jz near .nosprprmb
    Procsprng01 10h, 0
.nosprprmb

    test byte[scrndis],2h
    jnz near .nodobg2m
    test dword[bgcmsung],2h
    jz near .nodobg2m
    mov dword[mode0ads],20202020h
    Procbgpr0 1, drawbg2line, drawbg2tile, 2h, 0
.nodobg2m

    ; draw mode 7 extbg pr 0
    cmp byte[ngextbg],0
    je near .noextbgmn
    test dword[bgcmsung],3h
    jz near .noextbgmn
    ProcMode7ngextbg 3h, 0
.noextbgmn

    ; draw sprites mode 2-7
    test byte[scrndis],10h
    jnz near .nosprprmc
    test dword[modeused],01010000h
    jnz near .yessprprmc
    test dword[modeused+4],01010101h
    jz near .nosprprmc
.yessprprmc
    test dword[bgcmsung],10h
    jz near .nosprprmc
    Procsprng234567 10h, 0h
.nosprprmc

    test byte[scrndis],1h
    jnz near .nodobg1m
    test dword[bgcmsung],1h
    jz near .nodobg1m
    mov dword[mode0ads],00000000h
    Procbgpr0 0, drawbg1line, drawbg1tile, 1h, 0
.nodobg1m

    ; draw mode 7, priority 0
    cmp byte[modeused+7],0
    je near .nomode7m
    test dword[bgcmsung],1h
    jz near .nomode7m
    ProcMode7ng 1h, 0
.nomode7m

    ; draw sprites mode 0-7
    test byte[scrndis],10h
    jnz near .nosprprmd
    test dword[bgcmsung],10h
    jz near .nosprprmd
    Procsprng 10h, 0
.nosprprmd

    ; draw mode 7 extbg pr 1
    cmp byte[ngextbg],0
    je near .noextbgmn2
    test dword[bgcmsung],3h
    jz near .noextbgmn2
    ProcMode7ngextbg2 2h, 0
.noextbgmn2

    test byte[scrndis],2h
    jnz near .nodobg2mb
    test dword[bgcmsung],2h
    jz near .nodobg2mb
    mov eax,[bg2totng]
    cmp eax,[bg2drwng]
    je near .nodobg2mb
    mov dword[mode0ads],20202020h
    Procbgpr1 1, drawbg2linepr1, drawbg2tilepr1, prdata, 2h, 0
.nodobg2mb

    ; draw sprites mode 2-7
    test byte[scrndis],10h
    jnz near .nosprprme
    test dword[modeused],01010000h
    jnz near .yessprprme
    test dword[modeused+4],01010101h
    jz near .nosprprme
.yessprprme
    test dword[bgcmsung],10h
    jz near .nosprprme
    Procsprng234567 10h, 0
.nosprprme

    test byte[scrndis],1h
    jnz near .nodobg1mb
    test dword[bgcmsung],1h
    jz near .nodobg1mb
    mov eax,[bg1totng]
    cmp eax,[bg1drwng]
    je near .nodobg1mb
    mov dword[mode0ads],00000000h
    Procbgpr1 0, drawbg1linepr1, drawbg1tilepr1, prdatb, 1h, 0
.nodobg1mb

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

    test byte[scrndis],4h
    jnz near .nodobg3mb2
    cmp byte[modeused+1],0
    je near .nodobg3mb2
    test dword[bgcmsung],4h
    jz near .nodobg3mb2
    mov eax,[bg3totng]
    cmp eax,[bg3drwng]
    je near .nodobg3mb2
    mov dword[mode0ads],40404040h
    Procbg3pr1b 2, drawbg3linepr1, drawbg3tilepr1, prdatc, 4h, 0
.nodobg3mb2

.dontdraw
    xor ebx,ebx
    xor ecx,ecx
    pop ebp
    pop edi
    pop esi
    pop edx
    ret

NEWSYM drawbg1tile
    mov byte[prdatb+ebx],1
    drawbgtileng 0,0
    ret

NEWSYM drawbg2tile
    mov byte[prdata+ebx],1
    drawbgtileng 1,1
    ret

NEWSYM drawbg3tile
    mov byte[prdatc+ebx],1
    drawbgtileng 2,2
    ret

NEWSYM drawbg4tile
    mov byte[prdata+ebx],1
    drawbgtileng 3,1
    ret

NEWSYM drawbg1tilepr1
    drawbgtilengpr1 0,0
    ret

NEWSYM drawbg2tilepr1
    drawbgtilengpr1 1,1
    ret

NEWSYM drawbg3tilepr1
    drawbgtilengpr1 2,2
    ret

NEWSYM drawbg4tilepr1
    drawbgtilengpr1 3,1
    ret

NEWSYM drawbg1line
    mov byte[prdatb+ebx],0
    drawbglineng 0,0

NEWSYM drawbg2line
    mov byte[prdata+ebx],0
    drawbglineng 1,1

NEWSYM drawbg3line
    mov byte[prdatc+ebx],0
    drawbglineng 2,2

NEWSYM drawbg4line
    mov byte[prdata+ebx],0
    drawbglineng 3,1

NEWSYM domosaicng
    mov esi,[pesimpng]
    xor eax,eax
    mov edi,xtravbuf+16
    mov al,[curmosaicsz]
    cmp al,16
    ja .notokay
    cmp al,1
    jbe .notokay
    push esi
    jmp [mosjmptab+eax*4-8]
.notokay
    ret

NEWSYM mosdraw2
    mov ecx,128
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mosender 2

NEWSYM mosdraw3
    mov ecx,86
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mosender 3

NEWSYM mosdraw4
    mov ecx,64
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mosender 4

NEWSYM mosdraw5
    mov ecx,52
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mosender 5

NEWSYM mosdraw6
    mov ecx,43
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mosender 6

NEWSYM mosdraw7
    mov ecx,37
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mosender 7

NEWSYM mosdraw8
    mov ecx,32
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mosender 8

NEWSYM mosdraw9
    mov ecx,29
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mov [esi+8],al
    mosender 9

NEWSYM mosdraw10
    mov ecx,26
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mov [esi+8],al
    mov [esi+9],al
    mosender 10

NEWSYM mosdraw11
    mov ecx,24
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mov [esi+8],al
    mov [esi+9],al
    mov [esi+10],al
    mosender 11

NEWSYM mosdraw12
    mov ecx,22
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mov [esi+8],al
    mov [esi+9],al
    mov [esi+10],al
    mov [esi+11],al
    mosender 12

NEWSYM mosdraw13
    mov ecx,20
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mov [esi+8],al
    mov [esi+9],al
    mov [esi+10],al
    mov [esi+11],al
    mov [esi+12],al
    mosender 13

NEWSYM mosdraw14
    mov ecx,19
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mov [esi+8],al
    mov [esi+9],al
    mov [esi+10],al
    mov [esi+11],al
    mov [esi+12],al
    mov [esi+13],al
    mosender 14

NEWSYM mosdraw15
    mov ecx,18
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mov [esi+8],al
    mov [esi+9],al
    mov [esi+10],al
    mov [esi+11],al
    mov [esi+12],al
    mov [esi+13],al
    mov [esi+14],al
    mosender 15

NEWSYM mosdraw16
    mov ecx,16
.next
    mov al,[edi]
    or al,al
    jz .nodraw
    mov [esi],al
    mov [esi+1],al
    mov [esi+2],al
    mov [esi+3],al
    mov [esi+4],al
    mov [esi+5],al
    mov [esi+6],al
    mov [esi+7],al
    mov [esi+8],al
    mov [esi+9],al
    mov [esi+10],al
    mov [esi+11],al
    mov [esi+12],al
    mov [esi+13],al
    mov [esi+14],al
    mov [esi+15],al
    mosender 16

NEWSYM drawbg1linepr1
    drawbglinengpr1 0,0

NEWSYM drawbg2linepr1
    drawbglinengpr1 1,1

NEWSYM drawbg3linepr1
    drawbglinengpr1 2,2

NEWSYM drawbg4linepr1
    drawbglinengpr1 3,1


ALIGN32
NEWSYM bgtxadd,  dd 0
NEWSYM bgcyval,  dd 0
NEWSYM bgcxval,  dd 0
NEWSYM tleftn,   dd 0
NEWSYM tleftnb,  dd 0
NEWSYM bg1totng, dd 0
NEWSYM bg2totng, dd 0
NEWSYM bg3totng, dd 0
NEWSYM bg4totng, dd 0
NEWSYM bg1drwng, dd 0
NEWSYM bg2drwng, dd 0
NEWSYM bg3drwng, dd 0
NEWSYM bg4drwng, dd 0
NEWSYM sprcurng, dd 0
NEWSYM scfbl,    dd 0
NEWSYM mode0ads, dd 0
NEWSYM mode0add, dd 0
NEWSYM taddnfy16x16, dd 0
NEWSYM taddfy16x16, dd 0
NEWSYM switch16x16, dd 0
NEWSYM yposng,     dd 0
NEWSYM flipyposng, dd 0
NEWSYM yposngom,     dd 0
NEWSYM flipyposngom, dd 0

NEWSYM drawsprng
    cmp byte[winbg1enval+ebx+4*256],0
    jne near drawsprngw
    test dword[sprleftpr+ebx*4],80000000h
    jnz near .drawsingle
    push esi
    push ebx
    mov 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]
    sprdrawa sprdrawpra

⌨️ 快捷键说明

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