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

📄 s65816d.inc

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 INC
📖 第 1 页 / 共 2 页
字号:
    mov al,[xpc+1]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov al,[xpc]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx

    xor eax,eax
    xor bh,bh
    mov ax,[esi]
    mov bl,[esi+2]
    mov [xpc],ax
    mov [SA1xpb],bl
    test eax,8000h
    jz .loweraddr
    mov esi,[snesmmap+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
.loweraddr
    cmp ebx,0
    jne .notupper
    cmp eax,2000h
    ja .upperbank
.notupper
    mov esi,[snesmap2+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
.upperbank
    mov esi,IRAM
    sub esi,3000h
    mov [initaddrl],esi
    add esi,eax
    endloop
%endmacro

%macro JSRMacro20 0
    mov ebx,esi
    sub ebx,[initaddrl]
    inc bx
    mov [xpc],bx

    mov cx,[SA1xs]
    mov al,[xpc+1]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov al,[xpc]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx

    xor eax,eax
    mov ax,[esi]
    xor bh,bh
    mov [xpc],ax
    mov bl,[SA1xpb]
    test eax,8000h
    jz .loweraddr
    mov esi,[snesmmap+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
.loweraddr
    mov esi,[snesmap2+ebx*4]
    cmp eax,4300h
    jae .upperlower
    mov [initaddrl],esi
    add esi,eax
    endloop
.upperlower
    mov [initaddrl],esi
    add esi,eax
    endloop
%endmacro

%macro JSRMacroFC 0
    mov ebx,esi
    sub ebx,[initaddrl]
    inc bx
    mov [xpc],bx

    mov cx,[SA1xs]
    mov al,[xpc+1]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov al,[xpc]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx

    xor eax,eax
    xor bh,bh
    mov cx,[esi]
    mov bl,[SA1xpb]
    add cx,[SA1xx]
    call dword near [memtabler16+ebx*4]
    mov [xpc],ax
    mov bl,[SA1xpb]
    test eax,8000h
    jz .loweraddr
    mov esi,[snesmmap+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
.loweraddr
    mov esi,[snesmap2+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
%endmacro

%macro LDAMacro8b 0
    mov dword[Sflagnz],0
    mov [SA1xa],al
    mov [Sflagnz+1],al
    endloop
%endmacro

%macro LDAMacro16b 0
    mov [SA1xa],ax
    flagsetnz16b
    endloop
%endmacro

%macro LDXMacro8b 0
    mov dword[Sflagnz],0
    mov [SA1xx],al
    mov [Sflagnz+1],al
    endloop
%endmacro

%macro LDXMacro16b 0
    mov [SA1xx],ax
    flagsetnz16b
    endloop
%endmacro

%macro LDYMacro8b 0
    mov dword[Sflagnz],0
    mov [SA1xy],al
    mov [Sflagnz+1],al
    endloop
%endmacro

%macro LDYMacro16b 0
    mov [SA1xy],ax
    flagsetnz16b
    endloop
%endmacro

%macro LSRMacro8b 0
    shr al,1
    flagsetnzc8b
%endmacro

%macro LSRMacro16b 0
    shr ax,1
    flagsetnzc
%endmacro

%macro MVNMacro 0
    mov ax,[esi]
    mov [SA1xdb],al
    mov bl,ah
    mov cx,[SA1xx]
    call dword near [memtabler8+ebx*4]
    mov bl,[SA1xdb]
    mov cx,[SA1xy]
    call dword near [memtablew8+ebx*4]
    test dl,10h
    jnz .pagezero
    inc word[SA1xx]
    inc word[SA1xy]
    dec word[SA1xa]
    cmp word[SA1xa],0FFFFh
    je .endmove
    dec esi
    endloop
.endmove
    add esi,2
    endloop
.pagezero
    inc byte[SA1xx]
    inc byte[SA1xy]
    dec word[SA1xa]
    cmp word[SA1xa],0FFFFh
    je .endmove
    dec esi
    endloop
%endmacro

%macro MVPMacro 0
    mov ax,[esi]
    mov [SA1xdb],al
    mov bl,ah
    mov cx,[SA1xx]
    call dword near [memtabler8+ebx*4]
    mov bl,[SA1xdb]
    mov cx,[SA1xy]
    call dword near [memtablew8+ebx*4]
    test dl,10h
    jnz .pagezero
    dec word[SA1xx]
    dec word[SA1xy]
    dec word[SA1xa]
    cmp word[SA1xa],0FFFFh
    je .endmove
    dec esi
    endloop
.endmove
    add esi,2
    endloop
.pagezero
    dec byte[SA1xx]
    dec byte[SA1xy]
    dec word[SA1xa]
    cmp word[SA1xa],0FFFFh
    je .endmove
    dec esi
    endloop
%endmacro

%macro ORAMacro8b 0
    or al,[SA1xa]
    mov dword[Sflagnz],0
    mov [SA1xa],al
    mov [Sflagnz+1],al
    endloop
%endmacro

%macro ORAMacro16b 0
    or ax,[SA1xa]
    mov [SA1xa],ax
    flagsetnz16b
%endmacro

%macro PUSHMacro8b 1
    mov eax,[wramdata]
    mov cx,[SA1xs]
    mov al,%1
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx
    endloop
%endmacro

%macro PUSHMacro8bp 0
    mov eax,[wramdata]
    makedl
    mov cx,[SA1xs]
    mov al,dl
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx
    endloop
%endmacro

%macro PUSHMacro16b 2
    mov cx,[SA1xs]
    mov al,%2
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov al,%1
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx
    endloop
%endmacro

%macro PEAMacro 0
    mov cx,[SA1xs]
    mov al,[esi+1]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov al,[esi]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx
    add esi,2
    endloop
%endmacro

%macro PEIMacro 0
    xor ah,ah
    mov al,[esi]
    mov cx,[SA1xd]
    inc esi
    add cx,ax
    call membank0r16
    mov cx,[SA1xs]
    push eax
    mov al,ah
    call membank0w8
    pop eax
    dec cx
    or cx,word[stackor]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx
    endloop
%endmacro

%macro PERMacro 0
    mov bl,[SA1xpb]
    mov ax,[xpc]
    test eax,8000h
    jz .loweraddr
    mov eax,[snesmmap+ebx*4]
    mov ebx,esi
    sub ebx,eax
    add bx,[esi]
    mov ax,bx
    add esi,2
    add ax,2
    mov cx,[SA1xs]
    push eax
    mov al,ah
    call membank0w8
    pop eax
    dec cx
    or cx,word[stackor]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx
    xor ebx,ebx
    endloop
.loweraddr
    mov eax,[snesmap2+ebx*4]
    mov ebx,esi
    sub ebx,eax
    add bx,[esi]
    mov ax,bx
    add esi,2
    add ax,2
    mov cx,[SA1xs]
    push eax
    mov al,ah
    call membank0w8
    pop eax
    dec cx
    or cx,word[stackor]
    call membank0w8
    dec cx
    or cx,word[stackor]
    mov [SA1xs],cx
    xor ebx,ebx
    endloop
%endmacro

%macro POPMacro8b 1
    mov eax,[wramdata]
    mov cx,[SA1xs]
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [SA1xs],cx
    mov %1,al
    flagsetnz8b
    endloop
%endmacro

%macro POPMacro16b 2
    mov eax,[wramdata]
    mov cx,[SA1xs]
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov %1,al
    mov [SA1xs],cx
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov %2,al
    mov [SA1xs],cx
    mov ah,al
    mov al,%1
    flagsetnz16b
%endmacro

%macro POPMacro16bd 2
    mov eax,[wramdata]
    mov cx,[SA1xs]
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov %1,al
    mov [SA1xs],cx
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov %2,al
    call SA1UpdateDPage
    mov [SA1xs],cx
    mov ah,al
    mov al,%1
    flagsetnz16b
%endmacro

%macro POPMacroP 0
    mov cx,[SA1xs]
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [SA1xs],cx
    mov dl,al
    restoredl
    test byte[xe],01h
    jnz .emul
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    test dl,00010000b
    jnz .setx
    endloop
.setx
    mov byte[SA1xx+1],0
    mov byte[SA1xy+1],0
    endloop
.emul
    or dl,00110000b
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    endloop
%endmacro

%macro REPMacro 0
    mov al,[esi]
    inc esi
    test al,11000011b
    jnz .extraflags
    not al
    and dl,al
    test byte[xe],01h
    jnz .emul
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    endloop
.emul
    or dl,00110000b
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    endloop

.extraflags
    not al
    makedl
    and dl,al
    restoredl
    test byte[xe],01h
    jnz .emul2
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    endloop
.emul2
    or dl,00110000b
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    endloop
%endmacro

%macro ROLMacro8b 0
    mov cl,[Sflagc]
    add cl,cl
    rcl al,1
    flagsetnzc8b
%endmacro

%macro ROLMacro16b 0
    mov cl,[Sflagc]
    add cl,cl
    rcl ax,1
    flagsetnzc
%endmacro

%macro RORMacro8b 0
    mov cl,[Sflagc]
    add cl,cl
    rcr al,1
    flagsetnzc8b
%endmacro

%macro RORMacro16b 0
    mov cl,[Sflagc]
    add cl,cl
    rcr ax,1
    flagsetnzc
%endmacro

%macro RTIMacro 0
    cmp byte[curexecstate],0
    jne .nn
    xor dh,dh
.nn
.nodis658162
    mov byte[curnmi],0

    mov cx,[SA1xs]
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov dl,al
    restoredl

    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [xpc],al
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [xpc+1],al
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [SA1xpb],al
    mov [SA1xs],cx

    xor bh,bh
    xor eax,eax
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    mov bl,[SA1xpb]
    mov ax,[xpc]
    test eax,8000h
    jz .loweraddr
    mov esi,[snesmmap+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    test dl,00010000b
    jnz .setx
    endloop
.loweraddr
    mov esi,[snesmap2+ebx*4]
    cmp eax,4300h
    jae .upperlower
    mov [initaddrl],esi
    add esi,eax
    test dl,00010000b
    jnz .setx
    endloop
.setx
    mov byte[SA1xx+1],0
    mov byte[SA1xy+1],0
    endloop
.upperlower
    cmp dword[memtabler8+ebx*4],regaccessbankr8
    je .dma
    mov [initaddrl],esi
    add esi,eax
    test dl,00010000b
    jnz .setx
    endloop
.dma
    mov esi,dmadata-4300h
    mov [initaddrl],esi
    add esi,eax
    test dl,00010000b
    jnz .setx
    endloop
%endmacro

%macro RTLMacro 0
    mov cx,[SA1xs]
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [xpc],al
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [xpc+1],al
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [SA1xpb],al
    mov [SA1xs],cx

    xor bh,bh
    xor eax,eax
    inc word[xpc]
    mov bl,[SA1xpb]
    mov ax,[xpc]
    test eax,8000h
    jz .loweraddr
    mov esi,[snesmmap+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
.loweraddr
    mov esi,[snesmap2+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
%endmacro

%macro RTSMacro 0
    mov cx,[SA1xs]
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [xpc],al
    inc cx
    and cx,word[stackand]
    call membank0r8
    mov [xpc+1],al
    mov [SA1xs],cx

    xor bh,bh
    inc word[xpc]
    xor eax,eax
    mov ax,[xpc]
    mov bl,[SA1xpb]
    test eax,8000h
    jz .loweraddr
    mov esi,[snesmmap+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
.loweraddr
    mov esi,[snesmap2+ebx*4]
    mov [initaddrl],esi
    add esi,eax
    endloop
%endmacro

%macro SBCMacro8bnd 0
    mov cl,[Sflagc]
    sub cl,1
    sbb [SA1xa],al
    flagsetnvzcs8b
    endloop
%endmacro

%macro SBCMacro16bnd 0
    mov cl,[Sflagc]
    sub cl,1
    sbb [SA1xa],ax
    flagsetnvzcs16b
    endloop
%endmacro

%macro SBCMacro8bd 0
    mov cl,[Sflagc]
    sub cl,1
    mov cl,al
    mov al,[SA1xa]
    sbb al,cl
    das
    mov [SA1xa],al
    flagsetnvzcs8b
    endloop
%endmacro

%macro SBCMacro16bd 0
    mov cl,[Sflagc]
    sub cl,1
    mov cx,ax
    mov al,[SA1xa]
    sbb al,cl
    das
    mov [SA1xa],al
    mov al,[SA1xa+1]
    sbb al,ch
    das
    mov [SA1xa+1],al
    cmc
    flagsetnvzcd
    endloop
%endmacro

%macro SEPMacro 0
    mov al,[esi]
    inc esi
    test al,11000011b
    jnz .extraflags
    or dl,al
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    test dl,00010000b
    jnz .setx
    endloop
.setx
    mov byte[SA1xx+1],0
    mov byte[SA1xy+1],0
    endloop
.extraflags
    makedl
    or dl,al
    restoredl
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    test dl,00010000b
    jnz .setx2
    endloop
.setx2
    mov byte[SA1xx+1],0
    mov byte[SA1xy+1],0
    endloop
%endmacro

%macro STAMacro8b 0
    mov al,[SA1xa]
%endmacro

%macro STAMacro16b 0
    mov eax,[SA1xa]
%endmacro

%macro STXMacro8b 0
    mov al,[SA1xx]
%endmacro

%macro STXMacro16b 0
    mov eax,[SA1xx]
%endmacro

%macro STYMacro8b 0
    mov al,[SA1xy]
%endmacro

%macro STYMacro16b 0
    mov eax,[SA1xy]
%endmacro

%macro WAIMacro 0
    cmp byte[intrset],1
    jne .notws
    dec esi
    endloop
.notws
    test byte[intrset],0FFh
    jz .waitstate
    cmp byte[intrset],2
    je .stopint
    dec esi
    endloop
.waitstate
    mov byte[intrset],1
    dec esi
    endloop
.stopint
    mov byte[intrset],0
    endloop
%endmacro

%macro XCEMacro 0
    mov al,[Sflagc]
    mov dword[Sflagc],0
    and al,00000001b
    test byte[xe],0FFh
    jz .noemul
    mov dword[Sflagc],0FFh
.noemul
    mov [xe],al
    test byte[xe],01h
    jnz .emul
    or dl,00100000b
    mov word[stackand],0FFFFh
    mov word[stackor],0000h
    endloop
.emul
    or dl,00110000b
    mov bl,dl
    mov edi,[SA1tablead+ebx*4]
    mov byte[SA1xx+1],0
    mov byte[SA1xy+1],0
    mov byte[SA1xs+1],1
    mov word[stackand],01FFh
    mov word[stackor],0100h
    endloop
%endmacro

⌨️ 快捷键说明

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