📄 spc700.asm
字号:
;************************************************; 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 + -