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

📄 spc700.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;************************************************;  CLRP           20    1     2   clear direct page flag    ..0.....NEWSYM Op20     ; CLRP Clear direct page flag    and byte[spcP],11011111b    mov dword[spcRamDP],SPCRAM    ret;  SETP           40    1     2   set dorect page flag    ..1..0..NEWSYM Op40     ; SETP Set Direct Page Flag  (Also clear interupt flag?)    or byte[spcP],00100000b    and byte[spcP],11111011b    mov dword[spcRamDP],SPCRAM    add dword[spcRamDP],100h    ret;  CLRC           60    1     2   clear carry flag        .......0NEWSYM Op60     ; CLRC Clear carry flag    and byte[spcP],11111110b    ret;  SETC           80    1     2   set carry flag        .......1NEWSYM Op80     ; SETC Set carry flag    or byte[spcP],00000001b    ret;  EI             A0    1     3  set interrup enable flag   .....1..NEWSYM OpA0     ; EI set interrupt flag    or byte[spcP],00000100b    ret;  DI             C0    1     3  clear interrup enable flag .....0..NEWSYM OpC0     ; DI clear interrupt flag    and byte[spcP],11111011b    ret;  CLRV           E0    1     2   clear V and H         .0..0...NEWSYM OpE0     ; CLRV clear V and H    and byte[spcP],10110111b    ret;  NOTC           ED    1     3   complement carry flag     .......CNEWSYM OpED     ; NOTC       complement carry flag     .......C    xor byte[spcP],00000001b    ret;************************************************; TCALL instructions (Verified);************************************************NEWSYM Op01     ; TCALL 0    spctcall 30NEWSYM Op11     ; TCALL 1    spctcall 28NEWSYM Op21     ; TCALL 2    spctcall 26NEWSYM Op31     ; TCALL 3    spctcall 24NEWSYM Op41     ; TCALL 4    spctcall 22NEWSYM Op51     ; TCALL 5    spctcall 20NEWSYM Op61     ; TCALL 6    spctcall 18NEWSYM Op71     ; TCALL 7    spctcall 16NEWSYM Op81     ; TCALL 8    spctcall 14NEWSYM Op91     ; TCALL 9    spctcall 12NEWSYM OpA1     ; TCALL A    spctcall 10NEWSYM OpB1     ; TCALL B    spctcall 08NEWSYM OpC1     ; TCALL C    spctcall 06NEWSYM OpD1     ; TCALL D    spctcall 04NEWSYM OpE1     ; TCALL E    spctcall 02NEWSYM OpF1     ; TCALL F    spctcall 00;************************************************; SET1 instructions (Verified);************************************************NEWSYM Op02     ; SET1 direct page bit 0    set1 1NEWSYM Op22     ; SET1 direct page bit 1    set1 2NEWSYM Op42     ; SET1 direct page bit 2    set1 4NEWSYM Op62     ; SET1 direct page bit 3    set1 8NEWSYM Op82     ; SET1 direct page bit 4    set1 16NEWSYM OpA2     ; SET1 direct page bit 5    set1 32NEWSYM OpC2     ; SET1 direct page bit 6    set1 64NEWSYM OpE2     ; SET1 direct page bit 7    set1 128;************************************************; CLR1 instructions (Verified);************************************************NEWSYM Op12     ; CLR1 direct page bit 0    clr1 255-1NEWSYM Op32     ; CLR1 direct page bit 1    clr1 255-2NEWSYM Op52     ; CLR1 direct page bit 2    clr1 255-4NEWSYM Op72     ; CLR1 direct page bit 3    clr1 255-8NEWSYM Op92     ; CLR1 direct page bit 4    clr1 255-16NEWSYM OpB2     ; CLR1 direct page bit 5    clr1 255-32NEWSYM OpD2     ; CLR1 direct page bit 6    clr1 255-64NEWSYM OpF2     ; CLR1 direct page bit 7    clr1 255-128;************************************************; BBS instructions (Verified);************************************************NEWSYM Op03     ; BBS direct page bit 0    bbs 1NEWSYM Op23     ; BBS direct page bit 1    bbs 2NEWSYM Op43     ; BBS direct page bit 2    bbs 4NEWSYM Op63     ; BBS direct page bit 3    bbs 8NEWSYM Op83     ; BBS direct page bit 4    bbs 16NEWSYM OpA3     ; BBS direct page bit 5    bbs 32NEWSYM OpC3     ; BBS direct page bit 6    bbs 64NEWSYM OpE3     ; BBS direct page bit 7    bbs 128;************************************************; BBC instructions (Verified);************************************************NEWSYM Op13     ; BBC direct page bit 0    bbc 1NEWSYM Op33     ; BBC direct page bit 1    bbc 2NEWSYM Op53     ; BBC direct page bit 2    bbc 4NEWSYM Op73     ; BBC direct page bit 3    bbc 8NEWSYM Op93     ; BBC direct page bit 4    bbc 16NEWSYM OpB3     ; BBC direct page bit 5    bbc 32NEWSYM OpD3     ; BBC direct page bit 6    bbc 64NEWSYM OpF3     ; BBC direct page bit 7    bbc 128;************************************************; OR A,instructions;************************************************NEWSYM Op04     ; OR A,dp   A <- A OR (dp)    N.....Z.    SPCaddr_DP    SPC_OR_ANEWSYM Op14     ; OR A,dp+X    A <- A OR (dp+X)     N.....Z.    SPCaddr_DP_X    SPC_OR_ANEWSYM Op05     ; OR A,labs   A <- A OR (abs)     N.....Z.    SPCaddr_LABS    SPC_OR_ANEWSYM Op15     ; OR A,labs+x  A <- A OR (abs+X)    N.....Z.    SPCaddr_LABS_X    SPC_OR_ANEWSYM Op06     ; OR A,(X)     A <- A OR (X)      N.....Z.    SPCaddr__X_    SPC_OR_ANEWSYM Op16     ; OR A,labs+Y  A <- A OR (abs+Y)    N......Z.    SPCaddr_LABS_Y    SPC_OR_ANEWSYM Op07     ; OR A,(dp+X)  A <- A OR ((dp+X+1)(dp+X))  N......Z.    SPCaddr_bDP_Xb    SPC_OR_ANEWSYM Op17     ; OR A,(dp)+Y  A <- A OR ((dp+1)(dp)+Y)   N......Z.    SPCaddr_bDPb_Y    SPC_OR_ANEWSYM Op08     ; OR A,#inm    A <- A OR inm        N......Z.    mov al,[ebp]    inc ebp    SPC_OR_A;************************************************; AND A, instructions;************************************************NEWSYM Op24     ; AND A,dp     A <- A AND (dp)    N.....Z.    SPCaddr_DP    SPC_AND_ANEWSYM Op34     ; AND A,dp+x   A <- A AND (dp+X)    N.....Z.    SPCaddr_DP_X    SPC_AND_ANEWSYM Op25     ; AND A,labs   A <- A AND (abs)     N.....Z.    SPCaddr_LABS    SPC_AND_ANEWSYM Op35     ; AND A,labs+X A <- A AND (abs+X)   N.....Z.    SPCaddr_LABS_X    SPC_AND_ANEWSYM Op26     ; AND A,(X)    A <- A AND (X)     N......Z.    SPCaddr__X_    SPC_AND_ANEWSYM Op36     ; AND A,labs+Y A <- A AND (abs+Y)   N......Z.    SPCaddr_LABS_Y    SPC_AND_ANEWSYM Op27     ; AND A,(dp+X) A <- A AND ((dp+X+1)(dp+X)) N......Z.    SPCaddr_bDP_Xb    SPC_AND_ANEWSYM Op37     ; AND A,(dp)+Y A <- A AND ((dp+1)(dp)+Y)  N......Z.    SPCaddr_bDPb_Y    SPC_AND_ANEWSYM Op28     ; AND A,#inm   A <- A AND inm         N......Z.    mov al,[ebp]    inc ebp    SPC_AND_A;************************************************; EOR A, instructions;************************************************NEWSYM Op44     ; EOR A,dp     A <- A EOR (dp)    N.....Z.    SPCaddr_DP    SPC_EOR_ANEWSYM Op54     ; EOR A,dp+x   A <- A EOR (dp+X)    N.....Z.    SPCaddr_DP_X    SPC_EOR_ANEWSYM Op45     ; EOR A,labs   A <- A EOR (abs)     N.....Z.    SPCaddr_LABS    SPC_EOR_ANEWSYM Op55     ; EOR A,labs+X A <- A EOR (abs+X)   N.....Z.    SPCaddr_LABS_X    SPC_EOR_ANEWSYM Op46     ; EOR A,(X)    A <- A EOR (X)     N......Z.    SPCaddr__X_    SPC_EOR_ANEWSYM Op56     ; EOR A,labs+Y A <- A EOR (abs+Y)   N......Z.    SPCaddr_LABS_Y    SPC_EOR_ANEWSYM Op47     ; EOR A,(dp+X) A <- A EOR ((dp+X+1)(dp+X)) N......Z.    SPCaddr_bDP_Xb    SPC_EOR_ANEWSYM Op57     ; EOR A,(dp)+Y A <- A EOR ((dp+1)(dp)+Y)  N......Z.    SPCaddr_bDPb_Y    SPC_EOR_ANEWSYM Op48     ; EOR A,#inm   A <- A EOR inm         N......Z.    mov al,[ebp]    inc ebp    SPC_EOR_A;************************************************; CMP A, instructions;************************************************NEWSYM Op64     ; CMP A,dp     A-(dp)           N.....ZC    SPCaddr_DP    SPC_CMP_ANEWSYM Op74     ; CMP A,dp+x   A-(dp+X)         N.....ZC    SPCaddr_DP_X    SPC_CMP_ANEWSYM Op65     ; CMP A,labs   A-(abs)          N.....ZC    SPCaddr_LABS    SPC_CMP_ANEWSYM Op75     ; CMP A,labs+X A-(abs+X)        N.....ZC    SPCaddr_LABS_X    SPC_CMP_ANEWSYM Op66     ; CMP A,(X)    A-(X)            N......ZC    SPCaddr__X_    SPC_CMP_ANEWSYM Op76     ; CMP A,labs+Y A-(abs+Y)        N......ZC    SPCaddr_LABS_Y    SPC_CMP_ANEWSYM Op67     ; CMP A,(dp+X) A-((dp+X+1)(dp+X))    N......ZC    SPCaddr_bDP_Xb    SPC_CMP_ANEWSYM Op77     ; CMP A,(dp)+Y A-((dp+1)(dp)+Y)      N......ZC    SPCaddr_bDPb_Y    SPC_CMP_ANEWSYM Op68     ; CMP A,#inm   A-inm             N......ZC    mov al,[ebp]    inc ebp    SPC_CMP_A;************************************************; ADC A, instructions;************************************************NEWSYM Op84     ; ADC A,dp     A <- A+(dp)+C      NV..H.ZC    SPCaddr_DP    SPC_ADC_ANEWSYM Op94     ; ADC A,dp+x   A <- A+(dp+X)+C    NV..H.ZC    SPCaddr_DP_X    SPC_ADC_ANEWSYM Op85     ; ADC A,labs   A <- A+(abs)+C     NV..H.ZC    SPCaddr_LABS    SPC_ADC_ANEWSYM Op95     ; ADC A,labs+X A <- A+(abs+X)+C     NV..H.ZC    SPCaddr_LABS_X    SPC_ADC_ANEWSYM Op86     ; ADC A,(X)    A <- A+(X)+C       NV..H..ZC    SPCaddr__X_    SPC_ADC_ANEWSYM Op96     ; ADC A,labs+Y A <- A+(abs+Y)+C     NV..H..ZC    SPCaddr_LABS_Y    SPC_ADC_ANEWSYM Op87     ; ADC A,(dp+X) A <- A+((dp+X+1)(dp+X)) NV..H..ZC    SPCaddr_bDP_Xb    SPC_ADC_ANEWSYM Op97     ; ADC A,(dp)+Y A <- A+((dp+1)(dp)+Y)   NV..H..ZC    SPCaddr_bDPb_Y    SPC_ADC_ANEWSYM Op88     ; ADC A,#inm   A <- A+inm+C        NV..H..ZC    mov al,[ebp]    inc ebp    SPC_ADC_A;************************************************; SBC A, instructions;************************************************NEWSYM OpA4     ; SBC A,dp     A <- A-(dp)-!C     NV..H.ZC    SPCaddr_DP    SPC_SBC_ANEWSYM OpB4     ; SBC A,dp+x   A <- A-(dp+X)-!C     NV..H.ZC    SPCaddr_DP_X    SPC_SBC_ANEWSYM OpA5     ; SBC A,labs   A <- A-(abs)-!C    NV..H.ZC    SPCaddr_LABS    SPC_SBC_ANEWSYM OpB5     ; SBC A,labs+x A <- A-(abs+X)-!C    NV..H.ZC    SPCaddr_LABS_X    SPC_SBC_ANEWSYM OpA6     ; SBC A,(X)    A <- A-(X)-!C      NV..H..ZC    SPCaddr__X_    SPC_SBC_ANEWSYM OpB6     ; SBC A,labs+Y A <- A-(abs+Y)-!C    NV..H..ZC    SPCaddr_LABS_Y    SPC_SBC_ANEWSYM OpA7     ; SBC A,(dp+X) A <- A-((dp+X+1)(dp+X))-!C NV..H..ZC    SPCaddr_bDP_Xb    SPC_SBC_ANEWSYM OpB7     ; SBC A,(dp)+Y A <- A-((dp+1)(dp)+Y)-!C   NV..H..ZC    SPCaddr_bDPb_Y    SPC_SBC_ANEWSYM OpA8     ; SBC A,#inm   A <- A-inm-!C         NV..H..ZC    mov al,[ebp]    inc ebp    SPC_SBC_A;************************************************; MOV A, instructions;************************************************NEWSYM OpE4     ; MOV A,dp     A <- (dp)        N......Z    SPCaddr_DP    SPC_MOV_ANEWSYM OpF4     ; MOV A,dp+x   A <- (dp+X)        N......Z    SPCaddr_DP_X    SPC_MOV_ANEWSYM OpE5     ; MOV A,labs   A <- (abs)         N......Z    SPCaddr_LABS    SPC_MOV_ANEWSYM OpF5     ; MOV A,labs+X A <- (abs+X)       N......Z    SPCaddr_LABS_X    SPC_MOV_ANEWSYM OpE6     ; MOV A,(X)    A <- (X)         N......Z    SPCaddr__X_    SPC_MOV_ANEWSYM OpF6     ; MOV A,labs+Y A <- (abs+Y)       N......Z    SPCaddr_LABS_Y    SPC_MOV_ANEWSYM OpE7     ; MOV A,(dp+X) A <- ((dp+X+1)(dp+X))     N......Z    SPCaddr_bDP_Xb    SPC_MOV_ANEWSYM OpF7     ; MOV A,(dp)+Y A <- ((dp+1)(dp)+Y)     N......Z    SPCaddr_bDPb_Y    SPC_MOV_ANEWSYM OpE8     ;  MOV A,#inm  A <- inm            N......Z    mov al,[ebp]    inc ebp    SPC_MOV_A;************************************************; DP,#imm instructions;************************************************%macro spcgetdp_imm 0    mov bl,[ebp+1]    mov ah,[ebp]    add ebx,[spcRamDP]    ReadByte2    add ebp,2%endmacroNEWSYM OpB8     ; SBC dp,#inm  (dp) <- (dp)-inm-!C      NV..H..ZC    spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2    mov cl,[spcP]    xor cl,1    shr cl,1    sbb al,ah    cmc    SPCSetFlagnvhzcnoret    WriteByte    retNEWSYM Op98     ; ADC dp,#inm  (dp) <- (dp)+inm+C       NV..H..ZC    spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2    mov cl,[spcP]    shr cl,1    adc al,ah    SPCSetFlagnvhzcnoret    WriteByte    retNEWSYM Op78     ; CMP dp,#inm  (dp)-inm            N......ZC    mov bl,[ebp+1]    mov ah,[ebp]    add ebx,[spcRamDP]    ReadByte    add ebp,2    cmp al,ah    cmc    SPCSetFlagnzcnoret    retNEWSYM Op58    ; EOR dp,#inm  (dp) <- (dp) EOR inm      N......Z.    spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2    xor al,ah    mov [spcNZ], al    WriteByte    retNEWSYM Op38     ; AND dp,#inm  (dp) <- (dp) AND inm      N......Z.    spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2    and al,ah    mov [spcNZ], al    WriteByte    retNEWSYM Op18     ; OR dp,#inm   (dp) <- (dp) OR inm       N......Z.    spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2    or al,ah    mov [spcNZ],al    WriteByte    ret;************************************************; DP(D),DP(S) instructions;************************************************%macro spcaddrDPbDb_DPbSb 1    xor ecx,ecx    mov bl,[ebp+1]    mov cl,[ebp]    add ebx,[spcRamDP]    add ebp,2    add ecx,[spcRamDP]    push ebx    ReadByte    mov ebx,ecx    mov cl,al%1    ReadByte    mov ah,al    mov al,cl    pop ebx%endmacroNEWSYM Op09     ; OR dp(d),dp(s)  (dp(d))<-(dp(d)) OR (dp(s))  N......Z.    spcaddrDPbDb_DPbSb Op09b:    or al,ah    mov [spcNZ], al    WriteByte    xor ecx,ecx    retNEWSYM Op29     ; AND dp(d),dp(s) (dp(d))<-(dp(d)) AND (dp(s)) N......Z.    spcaddrDPbDb_DPbSb Op29b:    and al,ah    mov [spcNZ], al    WriteByte    xor ecx,ecx    retNEWSYM Op49     ; EOR dp(d),dp(s) (dp(d))<-(dp(d)) EOR (dp(s)) N......Z.    spcaddrDPbDb_DPbSb Op49b:    xor al,ah    mov [spcNZ], al    WriteByte    xor ecx,ecx    retNEWSYM Op69     ; CMP dp(d),dp(s) (dp(d))-(dp(s))       N......ZC    spcaddrDPbDb_DPbSb Op69b:    cmp al,ah    cmc    SPCSetFlagnzcnoret    xor ecx,ecx    retNEWSYM Op89     ; ADC dp(d),dp(s) (dp(d))<-(dp(d))+(dp(s))+C  NV..H..ZC    spcaddrDPbDb_DPbSb Op89b    mov cl,[spcP]    shr cl,1    adc al,ah    SPCSetFlagnvhzcnoret    WriteByte    xor ecx,ecx    retNEWSYM OpA9     ; SBC dp(d),dp(s) (dp(d))<-(dp(d))-(dp(s))-!C NV..H..ZC    spcaddrDPbDb_DPbSb OpA9b    mov cl,[spcP]    xor cl,1    shr cl,1    sbb al,ah    cmc    SPCSetFlagnvhzcnoret    WriteByte    xor ecx,ecx    retNEWSYM OpFA     ; MOV dp(d),dp(s) (dp(d)) <- (dp(s))      ........    xor ecx,ecx    mov bl,[ebp+1]    mov cl,[ebp]    add ebx,[spcRamDP]    add ecx,[spcRamDP]    add ebp,2    push ebx    mov ebx,ecx    ReadByte    pop ebx    WriteByte    xor ecx,ecx    ret;************************************************; (X),(Y) instructions;************************************************%macro spcaddrDPbXb_bYb 1    mov bl,[spcY]    add ebx,[spcRamDP]    ReadByte    xor ebx,ebx    mov ah,al    mov bl,[spcX]    add ebx,[spcRamDP]%1    ReadByte%endmacroNEWSYM Op19     ; OR (X),(Y)   (X) <- (X) OR (Y)        N......Z.    spcaddrDPbXb_bYb Op19b:    or al, ah    mov [spcNZ],al    WriteByte    retNEWSYM Op39     ; AND (X),(Y)  (X) <- (X) AND (Y)       N......Z.    spcaddrDPbXb_bYb Op39b:    and al, ah    mov [spcNZ],al    WriteByte    retNEWSYM Op59     ; EOR (X),(Y)  (X) <- (X) EOR (Y)       N......Z.    spcaddrDPbXb_bYb Op59b:    xor al, ah    mov [spcNZ],al    WriteByte    retNEWSYM Op79     ; CMP (X),(Y)  (X)-(Y)             N......ZC    spcaddrDPbXb_bYb Op79b:    cmp al, ah    cmc    SPCSetFlagnzcNEWSYM Op99     ; ADC (X),(Y)  (X) <- (X)+(Y)+C        NV..H..ZC    spcaddrDPbXb_bYb Op99b:    mov cl,[spcP]    shr cl,1    adc al,ah    SPCSetFlagnvhzcnoret    WriteByte    retNEWSYM OpB9     ; SBC (X),(Y)  (X) <- (X)-(Y)-!C       NV..H..ZC    spcaddrDPbXb_bYb OpB9b:    mov cl,[spcP]    xor cl,1    shr cl,1    sbb al,ah    cmc    SPCSetFlagnvhzcnoret    WriteByte    ret;************************************************; MOV ,A instructions (Verified);************************************************NEWSYM OpC4     ; MOV dp,A     A -> (dp)        ........    mov bl,[ebp]    mov al, [spcA]    add ebx,[spcRamDP]    inc ebp    WriteByte    retNEWSYM OpD4     ; MOV dp+x,A   A -> (dp+X)        ........    mov bl,[ebp]    add bl,[spcX]    mov al, [spcA]    add ebx,[spcRamDP]    inc ebp    WriteByte    retNEWSYM OpC5     ; MOV labs,A   A -> (abs)         ........    mov bx,[ebp]    mov al, [spcA]    add ebp,2    add ebx,SPCRAM    WriteByte    retNEWSYM OpD5     ; MOV labs+X,A A -> (abs+X)       ........    mov bl,[spcX]    add bx,[ebp]    mov al, [spcA]    add ebp,2    add ebx,SPCRAM    WriteByte    retNEWSYM OpC6     ; MOV (X),A    A -> (X)         ........    mov bl,[spcX]    add ebx,[spcRamDP]    mov al, [spcA]    WriteByte    retNEWSYM OpD6     ; MOV labs+Y,A A -> (abs+Y)       ........    mov bl,[spcY]    mov al, [spcA]    add bx,[ebp]    add ebp,2    add ebx,SPCRAM    WriteByte    retNEWSYM OpC7     ; MOV (dp+X),A A -> ((dp+X+1)(dp+X))     ........    mov bl,[ebp]    add bl,[spcX]    xor eax,eax    add ebx,[spcRamDP]    inc ebp    mov ax, [ebx]    mov ebx,eax    add ebx,SPCRAM    mov al, [spcA]    WriteByte    retNEWSYM OpD7     ; MOV (dp)+Y,A A -> ((dp+1)(dp)+Y)     ........

⌨️ 快捷键说明

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