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

📄 spc700.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 5 页
字号:

%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 + -