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

📄 spcaddr.inc

📁 NES game Emulator in Linux.c and asm codes.
💻 INC
字号:
%if 0

SNEeSe, an Open Source Super NES emulator.


Copyright (c) 1998-2004 Charles Bilyue'.
Portions Copyright (c) 2003-2004 Daniel Horchner.

This is free software.  See 'LICENSE' for details.
You must read and accept the license prior to use.

%endif

; SNEeSe SPC700 CPU emulation core
; Originally written by Savoury SnaX (Not quite sure if I like AT&T)
; Maintained/rewritten by Charles Bilyue'
;
; Compile under NASM
;
; This file contains:
;  SPC700 addressing mode macros
;

; Immediate (read-only)
;  Read 8-bit
;    OR  A-08  AND A-28  EOR A-48  CMP A-68  ADC A-88  MOV Y-8D
;    SBC A-A8  CMP Y-AD  CMP X-C8  MOV X-CD  MOV A-E8
;
%macro ADDR_imm 0
%endmacro

; Direct Page
;  Read 8-bit
;    OR  A-04  AND A-24  CMP X-3E  EOR A-44  CMP A-64  CMP Y-7E  ADC A-84
;    SBC A-A4  MOV A-E4  MOV Y-EB  MOV X-F8
;  Read 16-bit
;    CMP YA-5A ADD YA-7A SUB YA-9A MOV YA-BA
;  RMW 8-bit
;    ASL-0B  ROL-2B  LSR-4B  ROR-6B  DEC-8B  INC-AB
;  RMW 16-bit
;    DECW-1A INCW-3A
;  Write 8-bit
;    MOV A-C4  MOV Y-CB  MOV X-D8
;  Write 16-bit
;    MOV YA-DA
;
%macro ADDR_dp 0
 mov ebx,B_SPC_PAGE
 mov bl,[1+R_NativePC]  ; get dp
 add R_NativePC,byte 2
%endmacro

; Direct Page index X
;  Read 8-bit
;    OR  A-14  AND A-34  EOR A-54  CMP A-74  ADC A-94  SBC A-B4  MOV A-F4
;    MOV Y-FB
;  RMW 8-bit
;    ASL-1B  ROL-3B  LSR-5B  ROR-7B  DEC-9B  INC-BB
;  Write 8-bit
;    MOV A-D4  MOV Y-DB
;
%macro ADDR_Odp_XO 0
 mov ebx,B_SPC_PAGE
 mov cl,B_X
 mov bl,[1+R_NativePC]  ; get dp
 add R_NativePC,byte 2
 add bl,cl
%endmacro

; Direct Page index Y
;  Read 8-bit
;    MOV X-F9
;  Write 8-bit
;    MOV X-D9
;
%macro ADDR_Odp_YO 0
 mov ebx,B_SPC_PAGE
 mov cl,B_Y
 mov bl,[1+R_NativePC]  ; get dp
 add R_NativePC,byte 2
 add bl,cl
%endmacro

; Indexed Indirect
;  Read 8-bit
;    OR  A-07  AND A-27  EOR A-47  CMP A-67  ADC A-87  SBC A-A7  MOV A-E7
;  Write 8-bit
;    MOV A-C7
;
%macro ADDR_OOdp_XOO 0
 ADDR_Odp_XO
 GET_WORD_SPC
 mov ebx,eax
%endmacro

; Indirect Indexed
;  Read 8-bit
;    OR  A-17  AND A-37  EOR A-57  CMP A-77  ADC A-97  SBC A-B7  MOV A-F7
;  Write 8-bit
;    MOV A-D7
;
%macro ADDR_OOdpO_YO 0
 ADDR_dp
 GET_WORD_SPC
 xor ebx,ebx
 mov bl,B_Y
 add bx,ax
%endmacro

; Direct Page X
;  Read 8-bit
;    OR  A-06  AND A-26  EOR A-46  CMP A-66  ADC A-86  SBC A-A6  MOV A-E6
;  Write 8-bit
;    MOV A-C6
;
%macro ADDR_OXO 0
 mov ebx,B_SPC_PAGE
 inc R_NativePC
 mov bl,B_X
%endmacro

; Direct Page to Direct Page
;  RMW 8-bit
;    OR -09  AND-29  EOR-49  CMP-69  ADC-89  SBC-A9  MOV-FA
;
;%1 = reg
%macro ADDR2_dp_dp 0-1 al   ; al or reg contains src byte
                            ; bx dest address
 mov ebx,B_SPC_PAGE
 mov bl,[1+R_NativePC]  ; get src dp
 GET_BYTE_SPC
 mov bl,[2+R_NativePC]  ; get dest dp
%ifnidni %1,al
 mov %1,al
%endif
 add R_NativePC,byte 3
%endmacro

; Immediate to Direct Page
;  RMW 8-bit
;    OR -18  AND-38  EOR-58  CMP-78  MOV-8F  ADC-98  SBC-B8
;
;%1 = reg
%macro ADDR2_dp_IM 0-1 0    ; -2(R_NativePC) or reg contains src byte
                            ; bx dest address
%ifnidni %1,0
 mov %1,[1+R_NativePC]
%endif
 mov ebx,B_SPC_PAGE
 mov bl,[2+R_NativePC]  ; get dp
 add R_NativePC,byte 3
%endmacro

; Direct Page Y to Direct Page X
;  RMW 8-bit
;    OR -19  AND-39  EOR-59  CMP-79  ADC-99  SBC-B9
;
;%1 = reg
%macro ADDR2_OXO_OYO 0-1 al ; al or reg contains src byte (Y)
                            ; bx dest address
 mov ebx,B_SPC_PAGE
 inc R_NativePC
 mov bl,B_Y
 GET_BYTE_SPC
%ifnidni %1,al
 mov %1,al
%endif
 mov bl,B_X
%endmacro

; Direct Page X autoincrement
;  Read 8-bit
;    MOV A-BF
;  Write 8-bit
;    MOV A-AF
;
%macro ADDR_OXOInc 0
 mov ebx,B_SPC_PAGE     ; Get Page Variable!
 mov al,B_X
 mov bl,al
 inc al
 inc R_NativePC
 mov B_X,al
%endmacro

; Absolute
;  Read 8-bit
;    OR  A-05  CMP X-1E  AND A-25  EOR A-45  CMP Y-5E  CMP A-65  ADC A-85
;    SBC A-A5  MOV A-E5  MOV X-E9  MOV Y-EC
;  Read 16-bit
;    CALL -3F  JMP  -5F
;  RMW 8-bit
;    ASL  -0C  TSET1-0E  ROL  -2C  LSR  -4C  TCLR1-4E  ROR  -6C  DEC  -8C
;    INC  -AC
;  Write 8-bit
;    MOV A-C5  MOV X-C9  MOV Y-CC
;
%macro ADDR_abs 0
 mov bl,[1+R_NativePC]
 mov bh,[2+R_NativePC]
 add R_NativePC,byte 3
%endmacro

; Absolute index X
;  Read 8-bit
;    OR  A-15  AND A-35  EOR A-55  CMP A-75  ADC A-95  SBC A-B5  MOV A-F5
;  Write 8-bit
;    MOV A-D5
;
%macro ADDR_Oabs_XO 0
 mov bl,[1+R_NativePC]
 mov al,B_X
 mov bh,[2+R_NativePC]
 add R_NativePC,byte 3
 add ebx,eax
 and ebx,0xFFFF
%endmacro

; Absolute index Y
;  Read 8-bit
;    OR  A-16  AND A-36  EOR A-56  CMP A-76  ADC A-96  SBC A-B6  MOV A-F6
;  Write 8-bit
;    MOV A-D6
;
%macro ADDR_Oabs_YO 0
 mov bl,[1+R_NativePC]
 mov al,B_Y
 mov bh,[2+R_NativePC]
 add R_NativePC,byte 3
 add ebx,eax
 and ebx,0xFFFF
%endmacro

; mem.bit
;  Read 8-bit
;    OR1  C -0A  OR1  C/-2A  AND1 C -4A  AND1 C/-6A  EOR1 C -8A
;    MOV1 C -AA
;  Write 8-bit
;    MOV1  C-CA
;  RMW 8-bit
;    NOT1   -EA
;
%macro ADDR_membit 0    ; This is a weird addressing mode!
 mov bl,[1+R_NativePC]
 xor ecx,ecx
 mov cl,[2+R_NativePC]
 add R_NativePC,byte 3
 mov bh,cl
 shr ecx,5      ; Get bit number
 and ebx,0x1FFF ; Get address
%endmacro

⌨️ 快捷键说明

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