📄 spc700.asm
字号:
%macro spcgetdp_imm 0
mov bl,[ebp+1]
mov ah,[ebp]
add ebx,[spcRamDP]
ReadByte2
add ebp,2
%endmacro
NEWSYM 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
ret
NEWSYM 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
ret
NEWSYM 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
ret
NEWSYM 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
ret
NEWSYM 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
ret
NEWSYM 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
%endmacro
NEWSYM 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
ret
NEWSYM 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
ret
NEWSYM 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
ret
NEWSYM Op69 ; CMP dp(d),dp(s) (dp(d))-(dp(s)) N......ZC
spcaddrDPbDb_DPbSb Op69b:
cmp al,ah
cmc
SPCSetFlagnzcnoret
xor ecx,ecx
ret
NEWSYM 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
ret
NEWSYM 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
ret
NEWSYM 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
%endmacro
NEWSYM Op19 ; OR (X),(Y) (X) <- (X) OR (Y) N......Z.
spcaddrDPbXb_bYb Op19b:
or al, ah
mov [spcNZ],al
WriteByte
ret
NEWSYM Op39 ; AND (X),(Y) (X) <- (X) AND (Y) N......Z.
spcaddrDPbXb_bYb Op39b:
and al, ah
mov [spcNZ],al
WriteByte
ret
NEWSYM Op59 ; EOR (X),(Y) (X) <- (X) EOR (Y) N......Z.
spcaddrDPbXb_bYb Op59b:
xor al, ah
mov [spcNZ],al
WriteByte
ret
NEWSYM Op79 ; CMP (X),(Y) (X)-(Y) N......ZC
spcaddrDPbXb_bYb Op79b:
cmp al, ah
cmc
SPCSetFlagnzc
NEWSYM 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
ret
NEWSYM 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, byte [spcA]
add ebx,[spcRamDP]
inc ebp
WriteByte
ret
NEWSYM OpD4 ; MOV dp+x,A A -> (dp+X) ........
mov bl,[ebp]
add bl,[spcX]
mov al, byte [spcA]
add ebx,[spcRamDP]
inc ebp
WriteByte
ret
NEWSYM OpC5 ; MOV labs,A A -> (abs) ........
mov bx,[ebp]
mov al, byte [spcA]
add ebp,2
add ebx,spcRam
WriteByte
ret
NEWSYM OpD5 ; MOV labs+X,A A -> (abs+X) ........
mov bl,[spcX]
add bx,[ebp]
mov al, byte [spcA]
add ebp,2
add ebx,spcRam
WriteByte
ret
NEWSYM OpC6 ; MOV (X),A A -> (X) ........
mov bl,[spcX]
add ebx,[spcRamDP]
mov al, byte [spcA]
WriteByte
ret
NEWSYM OpD6 ; MOV labs+Y,A A -> (abs+Y) ........
mov bl,[spcY]
mov al, byte [spcA]
add bx,[ebp]
add ebp,2
add ebx,spcRam
WriteByte
ret
NEWSYM 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, word [ebx]
mov ebx,eax
add ebx,spcRam
mov al, byte [spcA]
WriteByte
ret
NEWSYM OpD7 ; MOV (dp)+Y,A A -> ((dp+1)(dp)+Y) ........
mov bl,[ebp]
xor eax,eax
add ebx,[spcRamDP]
inc ebp
mov ax, word [ebx]
add ax,[spcY]
mov ebx,eax
add ebx,spcRam
mov al, byte [spcA]
WriteByte
ret
;************************************************
; MOV instructions (Verified)
;************************************************
NEWSYM OpD8 ; MOV dp,X X -> (dp) ........
mov bl,[ebp]
mov al, byte [spcX]
add ebx,[spcRamDP]
inc ebp
WriteByte
ret
NEWSYM OpF8 ; MOV X,dp X <- (dp) N......Z
mov bl,[ebp]
inc ebp
add ebx,[spcRamDP]
ReadByte
mov byte [spcX], al
mov [spcNZ],al
ret
NEWSYM OpC9 ; MOV labs,X X -> (abs) ........
mov bx,[ebp]
mov al, byte [spcX]
add ebp,2
add ebx,spcRam
WriteByte
ret
NEWSYM OpE9 ; MOV X,labs X <- (abs) N......Z
mov bx,[ebp]
add ebx,spcRam
ReadByte
add ebp,2
mov byte [spcX], al
mov [spcNZ],al
ret
NEWSYM OpD9 ; MOV dp+Y,X X -> (dp+Y) ........
mov bl,[ebp]
mov al, byte [spcX]
add bl,[spcY]
inc ebp
add ebx,[spcRamDP]
WriteByte
ret
NEWSYM OpF9 ; MOV X,dp+Y X <- (dp+Y) N......Z
mov bl,[ebp]
add bl,[spcY]
inc ebp
add ebx,[spcRamDP]
ReadByte
mov byte [spcX], al
mov [spcNZ],al
ret
NEWSYM OpCB ; MOV dp,Y Y -> (dp) ........
mov bl,[ebp]
mov al, byte [spcY]
add ebx,[spcRamDP]
inc ebp
WriteByte
ret
NEWSYM OpEB ; MOV Y,dp Y <- (dp) N......Z
mov bl,[ebp]
add ebx,[spcRamDP]
inc ebp
ReadByte
mov byte [spcY], al
mov [spcNZ],al
ret
NEWSYM OpDB ; MOV dp+X,Y X -> (dp+X) ........
mov bl,[ebp]
add bl,[spcX]
mov al, byte [spcY]
add ebx,[spcRamDP]
inc ebp
WriteByte
ret
NEWSYM OpFB ; MOV Y,dp+X Y <- (dp+X) N......Z
mov bl,[ebp]
add bl,[spcX]
inc ebp
add ebx,[spcRamDP]
ReadByte
mov byte [spcY], al
mov [spcNZ],al
ret
NEWSYM OpCC ; MOV labs,Y Y -> (abs) ........
mov bx,[ebp]
mov al, byte [spcY]
add ebp,2
add ebx,spcRam
WriteByte
ret
NEWSYM OpEC ; MOV Y,labs Y <- (abs) N......Z
mov bx,[ebp]
add ebx,spcRam
ReadByte
add ebp,2
mov byte [spcY],al
mov [spcNZ],al
ret
NEWSYM Op5D ; MOV X,A X <- A N......Z
mov al,[spcA]
mov [spcX],al
mov [spcNZ],al
ret
NEWSYM Op7D ; MOV A,X A <- X N......Z
mov al,[spcX]
mov [spcA],al
mov [spcNZ],al
ret
NEWSYM Op8D ; MOV Y,#inm Y <- inm N......Z
mov bl,[ebp]
mov [spcY],bl
inc ebp
mov [spcNZ],bl
ret
NEWSYM OpCD ; MOV X,#inm X <- inm N......Z
mov bl,[ebp]
mov [spcX],bl
inc ebp
mov [spcNZ],bl
ret
NEWSYM Op8F ; MOV dp,#inm (dp) <- inm ........
mov bl,[ebp+1]
mov al,[ebp]
add ebx,[spcRamDP]
add ebp,2
WriteByte
ret
NEWSYM Op9D ; MOV X,SP X <- SP N......Z
mov al,[spcS]
mov [spcX],al
mov [spcNZ],al
ret
NEWSYM OpBD ; MOV SP,X SP <- X ........
mov al,[spcX]
mov [spcS],al
ret
NEWSYM OpDD ; MOV A,Y A <- Y N......Z
mov al,[spcY]
mov [spcA],al
mov [spcNZ],al
ret
NEWSYM OpFD ; MOV Y,A Y <- A N......Z
mov al,[spcA]
mov [spcY],al
mov [spcNZ],al
ret
NEWSYM OpAF ; MOV (X)+,A A -> (X) with auto inc ........
mov bl,[spcX]
add ebx,[spcRamDP]
mov al, byte [spcA]
inc byte [spcX]
WriteByte
ret
NEWSYM OpBF ; MOV A,(X)+ A <- (X) with auto inc N......Z
mov bl,[spcX]
add ebx,[spcRamDP]
ReadByte
inc byte [spcX]
mov byte [spcA],al
mov [spcNZ],al
ret
;************************************************
; CMP instructions (Verified)
;************************************************
NEWSYM OpC8 ; CMP X,#inm X-inm N......ZC
mov bl,[ebp]
inc ebp
cmp [spcX],bl
cmc
SPCSetFlagnzc
NEWSYM OpAD ; CMP Y,#inm Y-inm N......ZC
mov bl,[ebp]
inc ebp
cmp [spcY],bl
cmc
SPCSetFlagnzc
NEWSYM Op1E ; CMP X,labs X-(abs) N......ZC
mov bx,[ebp]
add ebp,2
add ebx,spcRam
ReadByte
cmp byte [spcX], al
cmc
SPCSetFlagnzc
NEWSYM Op3E ; CMP X,dp X-(dp) N......ZC
mov bl,[ebp]
add ebx,[spcRamDP]
inc ebp
ReadByte
cmp byte [spcX], al
cmc
SPCSetFlagnzc
NEWSYM Op5E ; CMP Y,labs Y-(abs) N......ZC
mov bx,[ebp]
add ebx,spcRam
ReadByte
add ebp,2
cmp byte [spcY], al
cmc
SPCSetFlagnzc
NEWSYM Op7E ; CMP Y,dp Y-(dp) N......ZC
mov bl,[ebp]
add ebx,[spcRamDP]
inc ebp
ReadByte
cmp byte [spcY], al
cmc
SPCSetFlagnzc
;************************************************
; Word Instructions (Verified)
;************************************************
NEWSYM Op1A ; DECW dp Decrement dp memory pair N......Z.
mov bl,[ebp]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -