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

📄 vidmacrb.mac

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 MAC
📖 第 1 页 / 共 3 页
字号:
    mov esi,[esi+2]
    mov dl,[csprbit]
    sprdrawa sprdrawpra2
    pop esi
    add esi,8
    dec byte[csprprlft]
    jnz near .loopobj
    rol byte[csprbit],1
    cmp byte[csprbit],1
    je near .clearcsprmem
    ret
.drawspriteflipx
    mov bx,[esi]
    push esi
    mov ch,[esi+6]
    mov dl,[esi+7]
    xor eax,eax
    and edx,03h
    cmp edx,ebp
    jne near .notpriof
    cmp ch,12*16
    jae near .transpobjf
    mov esi,[esi+2]
    mov cl,[csprbit]
    sprdrawaf16b %3
    pop esi
    add esi,8
    dec byte[csprprlft]
    jnz near .loopobj
    rol byte[csprbit],1
    cmp byte[csprbit],1
    je near .clearcsprmem
.endobj
    ret
.transpobjf
    mov esi,[esi+2]
    mov cl,[csprbit]
    sprdrawaf16b %1
    pop esi
    add esi,8
    dec byte[csprprlft]
    jnz near .loopobj
    rol byte[csprbit],1
    cmp byte[csprbit],1
    je near .clearcsprmem
    ret
.notpriof
    mov esi,[esi+2]
    mov dl,[csprbit]
    sprdrawaf sprdrawpra2
    pop esi
    add esi,8
    dec byte[csprprlft]
    jnz near .loopobj
    rol byte[csprbit],1
    cmp byte[csprbit],1
    je near .clearcsprmem
    ret
.clearcsprmem
    xor eax,eax
    mov ecx,64
    mov edi,sprpriodata+16
    rep stosd
    ret
.drawsingle
    mov esi,[currentobjptr]
    mov edi,[curvidoffset]
    mov edx,ecx
    and edx,0FFh
    xor eax,eax
    shl edx,3
    sub edx,8
    add edx,esi
    mov esi,edx
    xor ebx,ebx
.loopobj2
    test byte[esi+7],20h
    jnz near .drawspriteflipx2
    mov bx,[esi]
    push esi
    mov ch,[esi+6]
    mov esi,[esi+2]
    cmp ch,12*16
    jae near .transpobj2
    sprdrawa16b %4
    pop esi
    sub esi,8
    dec cl
    jnz near .loopobj2
    ret
.transpobj2
    sprdrawa16b %2
    pop esi
    sub esi,8
    dec cl
    jnz near .loopobj2
    ret
.drawspriteflipx2
    mov bx,[esi]
    push esi
    mov ch,[esi+6]
    mov esi,[esi+2]
    cmp ch,12*16
    jae near .transpobj2f
    sprdrawaf16b %4
    pop esi
    sub esi,8
    dec cl
    jnz near .loopobj2
    ret
.transpobj2f
    sprdrawaf16b %2
    pop esi
    sub esi,8
    dec cl
    jnz near .loopobj2
    ret
%endmacro

%macro sprdrawpra16bha 1
    or eax,eax
    jz %%skip
    test byte[sprpriodata+ebx-%1+16],cl
    jnz %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16b+eax*4]
    cmp dx,0
    je %%noadd
    and edx,[vesa2_clbit]
    and eax,[vesa2_clbit]
    add eax,edx
    shr eax,1
%%noadd
    mov [edi+ebx*2-%1*2],ax
    or byte[sprpriodata+ebx-%1+16],cl
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprb16bha 1
    or eax,eax
    jz %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16b+eax*4]
    cmp dx,0
    je %%noadd
    and edx,[vesa2_clbit]
    and eax,[vesa2_clbit]
    add eax,edx
    shr eax,1
%%noadd
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawpraw16bha 1
    or eax,eax
    jz %%skip
    test byte[sprpriodata+ebx-%1+16],cl
    jnz %%skip
    cmp byte[winspdata+ebx-%1+16],0
    jne %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16b+eax*4]
    cmp dx,0
    je %%noadd
    and edx,[vesa2_clbit]
    and eax,[vesa2_clbit]
    add eax,edx
    shr eax,1
%%noadd
    mov [edi+ebx*2-%1*2],ax
    or byte[sprpriodata+ebx-%1+16],cl
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbw16bha 1
    or eax,eax
    jz %%skip
    cmp byte[winspdata+ebx-%1+16],0
    jne %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16b+eax*4]
    cmp dx,0
    je %%noadd
    and edx,[vesa2_clbit]
    and eax,[vesa2_clbit]
    add eax,edx
    shr eax,1
%%noadd
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro


%macro sprdrawpra16bfa 1
    or eax,eax
    jz %%skip
    test byte[sprpriodata+ebx-%1+16],cl
    jnz %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16bcl+eax*4]
    and edx,[vesa2_clbit]
    add edx,eax
    shr edx,1
    xor eax,eax
    mov edx,[fulladdtab+edx*2]
    mov [edi+ebx*2-%1*2],dx
    or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro

%macro sprdrawprb16bfa 1
    or eax,eax
    jz %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16bcl+eax*4]
    and edx,[vesa2_clbit]
    add edx,eax
    shr edx,1
    xor eax,eax
    mov edx,[fulladdtab+edx*2]
    mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro

%macro sprdrawpraw16bfa 1
    or eax,eax
    jz %%skip
    test byte[sprpriodata+ebx-%1+16],cl
    jnz %%skip
    cmp byte[winspdata+ebx-%1+16],0
    jne %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16bcl+eax*4]
    and edx,[vesa2_clbit]
    add edx,eax
    shr edx,1
    xor eax,eax
    mov edx,[fulladdtab+edx*2]
    mov [edi+ebx*2-%1*2],dx
    or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro

%macro sprdrawprbw16bfa 1
    or eax,eax
    jz %%skip
    cmp byte[winspdata+ebx-%1+16],0
    jne %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16bcl+eax*4]
    and edx,[vesa2_clbit]
    add edx,eax
    shr edx,1
    xor eax,eax
    mov edx,[fulladdtab+edx*2]
    mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro

%macro sprdrawpra16bfs 1
    or eax,eax
    jz %%skip
    test byte[sprpriodata+ebx-%1+16],cl
    jnz %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16bxcl+eax*4]
    and edx,[vesa2_clbit]
    add edx,eax
    shr edx,1
    xor eax,eax
    mov edx,[fulladdtab+edx*2]
    xor edx,0FFFFh
    mov [edi+ebx*2-%1*2],dx
    or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro

%macro sprdrawprb16bfs 1
    or eax,eax
    jz %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16bxcl+eax*4]
    and edx,[vesa2_clbit]
    add edx,eax
    shr edx,1
    xor eax,eax
    mov edx,[fulladdtab+edx*2]
    xor edx,0FFFFh
    mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro

%macro sprdrawpraw16bfs 1
    or eax,eax
    jz %%skip
    test byte[sprpriodata+ebx-%1+16],cl
    jnz %%skip
    cmp byte[winspdata+ebx-%1+16],0
    jne %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16bxcl+eax*4]
    and edx,[vesa2_clbit]
    add edx,eax
    shr edx,1
    xor eax,eax
    mov edx,[fulladdtab+edx*2]
    xor edx,0FFFFh
    mov [edi+ebx*2-%1*2],dx
    or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro

%macro sprdrawprbw16bfs 1
    or eax,eax
    jz %%skip
    cmp byte[winspdata+ebx-%1+16],0
    jne %%skip
    add al,ch
    mov edx,[transpbuf+32+ebx*2-%1*2]
    mov eax,[pal16bxcl+eax*4]
    and edx,[vesa2_clbit]
    add edx,eax
    shr edx,1
    xor eax,eax
    mov edx,[fulladdtab+edx*2]
    xor edx,0FFFFh
    mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro

;*******************************************************
; Processes & Draws 8x8 tiles for both main & sub screen
;*******************************************************

%macro draw8x816bta 2
    mov al,[ebx+%1]
    or al,al
    jz %%loop
    add al,dh
    mov ecx,[pal16b+eax*4]
    mov [esi+%2],cx
    mov [ebp+%2],cx
%%loop
%endmacro

%macro draw8x816btawinon 2
    mov al,[ebx+%1]
    or al,al
    jz %%loop
    test byte[ecx+%1],0FFh
    jnz %%loop
    add al,dh
    mov eax,[pal16b+eax*4]
    mov [esi+%2],ax
    mov [ebp+%2],ax
    xor eax,eax
%%loop
%endmacro

%macro draw8x816btawinonb 2
    mov al,[ebx+%1]
    or al,al
    jz %%loop
    test byte[ecx+7-%1],0FFh
    jnz %%loop
    add al,dh
    mov eax,[pal16b+eax*4]
    mov [esi+%2],ax
    mov [ebp+%2],ax
    xor eax,eax
%%loop
%endmacro

%macro drawtilegrp 1
    cmp dword[ebx],0
    je near %%loop
    %1 0, 0
    %1 1, 2
    %1 2, 4
    %1 3, 6
%%loop
    cmp dword[ebx+4],0
    je near %%loop2
    %1 4, 8
    %1 5, 10
    %1 6, 12
    %1 7, 14
%%loop2
%endmacro

%macro drawtilegrpf 1
    cmp dword[ebx+4],0
    je near %%loop
    %1 7, 0
    %1 6, 2
    %1 5, 4
    %1 4, 6
%%loop
    cmp dword[ebx],0
    je near %%loop2
    %1 3, 8
    %1 2, 10
    %1 1, 12
    %1 0, 14
%%loop2
%endmacro

%macro drawtilegrpfull 1
    cmp dword[edi],0
    je near %%loop
    %1 0, 0
    %1 1, 2
    %1 2, 4
    %1 3, 6
%%loop
    cmp dword[edi+4],0
    je near %%loop2
    %1 4, 8
    %1 5, 10
    %1 6, 12
    %1 7, 14
%%loop2
%endmacro

%macro drawtilegrpfullf 1
    cmp dword[edi+4],0
    je near %%loop
    %1 7, 0
    %1 6, 2
    %1 5, 4
    %1 4, 6
%%loop
    cmp dword[edi],0
    je near %%loop2
    %1 3, 8
    %1 2, 10
    %1 1, 12
    %1 0, 14
%%loop2
%endmacro


;*******************************************************
; Processes & Draws 8x8 tiles in 2, 4, & 8 bit mode
;*******************************************************

%macro draw8x816ta 2
    mov al,[ebx+%1]
    or al,al
    jz %%loop
    add al,dh
    mov ecx,[ebp+%2]
    mov eax,[pal16b+eax*4]
    test ecx,0FFFFh
    je %%noadd
    and eax,1111011111011110b  ; [vesa2_clbit]
    and ecx,1111011111011110b  ; [vesa2_clbit]
    add eax,ecx
    shr eax,1
%%noadd
    mov [esi+%2],ax
    xor eax,eax
%%loop
%endmacro

%macro draw8x816ta2 2
    mov al,[edi+%1]
    or al,al
    jz %%loop
    add al,dh
    mov ebx,[ebp+%2]
    mov ecx,[pal16b+eax*4]
    test ebx,0FFFFh
    je %%noadd
    and ecx,1111011111011110b  ; [vesa2_clbit]
    and ebx,1111011111011110b  ; [vesa2_clbit]
    add ecx,ebx
    shr ecx,1
%%noadd
    mov [esi+%2],cx
%%loop
%endmacro

%macro draw8x816tb 2
    mov al,[edi+%1]
    or al,al
    jz %%loop
    add al,dh
    mov ebx,[ebp+%2]
    mov ecx,[pal16bcl+eax*4]
    and ebx,1111011111011110b  ; [vesa2_clbit]
    add ecx,ebx
    shr ecx,1
    mov ecx,[fulladdtab+ecx*2]
    mov [esi+%2],cx
%%loop
%endmacro

%macro draw8x816tc 2
    mov al,[edi+%1]
    or al,al
    jz %%loop
    add al,dh
    mov ebx,[ebp+%2]
    mov ecx,[pal16bxcl+eax*4]
    and ebx,1111011111011110b  ; [vesa2_clbit]
    add ecx,ebx
    shr ecx,1
    mov ecx,[fulladdtab+ecx*2]
    xor ecx,0FFFFh
    mov [esi+%2],cx
%%loop
%endmacro

%macro draw8x816tawinon 2
    mov al,[ebx+%1]
    or al,al
    jz %%loop
    test byte[edx+%1],0FFh
    jnz %%loop
    add al,[coadder16]
    mov ecx,[ebp+%2]
    mov eax,[pal16b+eax*4]
    test ecx,0FFFFh
    je %%noadd
    and eax,1111011111011110b  ; [vesa2_clbit]
    and ecx,1111011111011110b  ; [vesa2_clbit]
    add eax,ecx
    shr eax,1
%%noadd
    mov [esi+%2],ax
    xor eax,eax
%%loop
%endmacro

%macro draw8x816tbwinon 2
    mov al,[edi+%1]
    or al,al
    jz %%loop
    test byte[edx+%1],0FFh
    jnz %%loop
    add al,[coadder16]
    mov ebx,[ebp+%2]
    mov ecx,[pal16bcl+eax*4]
    and ebx,1111011111011110b  ; [vesa2_clbit]
    add ecx,ebx
    shr ecx,1
    mov ecx,[fulladdtab+ecx*2]
    mov [esi+%2],cx
%%loop
%endmacro

%macro draw8x816tcwinon 2
    mov al,[edi+%1]
    or al,al
    jz %%loop
    test byte[edx+%1],0FFh
    jnz %%loop
    add al,[coadder16]
    mov ebx,[ebp+%2]
    mov ecx,[pal16bxcl+eax*4]
    and ebx,1111011111011110b  ; [vesa2_clbit]
    add ecx,ebx
    shr ecx,1
    mov ecx,[fulladdtab+ecx*2]
    xor ecx,0FFFFh
    mov [esi+%2],cx
%%loop
%endmacro

%macro draw8x816tawinon2 3

⌨️ 快捷键说明

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