?? sysdef.inc
字號:
r0 EQU 0x00 ;Indirect Addressing Register
DirR EQU 0x00 ;Indirect Addressing Register
r2 EQU 0x02 ;Program Counter Register
r3 EQU 0x03 ;Status Register
sr EQU 0x03 ;Status Register
r4 EQU 0x04 ;RAM Select Register
SelRamR EQU 0x04 ;RAM Select Register
cflag EQU 0 ;bit number of the carry flag
zflag EQU 2 ;bit number of the zero flag
eax EQU 0x10
ax EQU 0x10
al EQU 0x10
ecx EQU 0x14
cx EQU 0x14
cl EQU 0x14
pr0 EQU 0x18
pr1 EQU 0x1b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Macro spec
; LDA _symbol , 0, 0
; | | |
; | | ------access method(0-ram; 1-rom; 2-io; 3-ind)
; | --------byte index
; -----------------address
;
; LDA _symbol , 0, 0
; | | |
; | | ------access method(0-ram; 1-rom; 2-io; 3-ind)
; | --------byte index
; -----------------address
;
; example:
; LDA _g_romttest1,0,1: load the first byte from _g_romttest1 to A with rom access method.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO LDA symbol, byteidx, access
; RAM
.IF access = 0
mov a, symbol + byteidx
.ENDIF
; ROM
.IF access = 1
mov a, @.B0.(symbol + byteidx)
mov pr0, a
mov a, @.B1.(symbol + byteidx)
mov pr0+1, a
call ReadROM
.ENDIF
; IO
.IF access = 2
ior symbol + byteidx
.ENDIF
; IND
.IF access = 3
mov a, @.B0.(symbol + byteidx)
mov pr0, a
mov a, @.B1.(symbol)
mov pr0+1, a
mov a, @.B2.(symbol)
mov pr0+2, a
call ReadIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO STA symbol, byteidx, access
; RAM
.IF access = 0
mov symbol + byteidx, a
.ENDIF
; ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
iow symbol + byteidx
.ENDIF
; IND
.IF access = 3
mov pr1, a
mov a, @.B0.(symbol + byteidx)
mov pr0, a
mov a, @.B1.(symbol)
mov pr0+1, a
mov a, @.B2.(symbol)
mov pr0+2, a
mov a, pr1
call WriteIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO LDAP symbol, byteidx, access
; RAM
.IF access = 0
mov a, symbol
.IF byteidx <> 0
add a, @byteidx
.ENDIF
mov r4, a
mov a, r0
.ENDIF
; ROM
.IF access = 1
mov a, symbol
.IF byteidx <> 0
add a, @byteidx
.endif
mov pr0, a
mov a, symbol + 1
mov pr0+1, a
call ReadROM
.ENDIF
; IO
.IF access = 2
ERROR "Can't access to IO data"
.ENDIF
; IND
.IF access = 3
mov a, symbol
mov pr0, a
mov a, symbol + 1
mov pr0, a
mov a, symbol + 2
mov pr0, a
.IF byteidx <> 0
mov a, @byteidx
add pr0, a
jbc sr,cflag
inc pr0 + 1
.ENDIF
call ReadIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO INCMB addr, access
; RAM
.IF access = 0
inc addr
.ENDIF
; ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, @1
iow addr
.ENDIF
; IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a,@1
call WriteIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO DECMB addr, access
; RAM
.IF access = 0
dec addr
.ENDIF
; ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, @0xff
iow addr
.ENDIF
; IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a, @0xff
call WriteIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO INCMW addr, access
.LOCAL incmw_end
; RAM
.IF access = 0
inc addr
jbc r3, zflag
inc addr+1
.ENDIF
; ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, @1
iow addr
jbs r3, cflag
jmp incmw_end
ior addr+1
add a, @1
iow addr+1
.ENDIF
; IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a,@1
call WriteIND
jbs r3, cflag
jmp incmw_end
mov a, @.B0.(addr)
add a, @1
jbc r3, cflag
inc pr0+1
jbc r3, zflag
inc pr0+2
mov pr0, a
call ReadIND
add a,@1
call WriteIND
.ENDIF
incmw_end:
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO DECMW addr, access
.LOCAL decmw_end
.LOCAL decmw_read
; RAM
.IF access = 0
mov a, @1
sub addr,a
jbs r3, cflag
dec addr+1
.ENDIF
; ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, @0xff
iow addr
jbc r3, cflag
jmp decmw_end
ior addr+1
add a, @0xff
iow addr+1
.ENDIF
; IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a,@0xff
call WriteIND
jbc r3, cflag
jmp decmw_end
inc pr0
jbs r3, zflag
jmp decmw_read
inc pr0+1
jbc r3, zflag
inc pr0+2
decmw_read:
call ReadIND
add a,@0xff
call WriteIND
.ENDIF
decmw_end:
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO INCMD addr, access
.local incmd_end
.LOCAL incmd_read1
.LOCAL incmd_read2
.LOCAL incmd_read3
; RAM
.IF access = 0
inc addr
jbc r3, zflag
inc addr+1
jbc r3, zflag
inc addr+2
jbc r3, zflag
inc addr+3
.ENDIF
; ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, @1
iow addr
jbs r3, cflag
jmp incmd_end
ior addr+1
add a, @1
iow addr+1
jbs r3, cflag
jmp incmd_end
ior addr+2
add a, @1
iow addr+2
jbs r3, cflag
jmp incmd_end
ior addr+3
add a, @1
iow addr+3
.ENDIF
; IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a,@1
call WriteIND
jbs r3, cflag
jmp incmd_end
inc pr0
jbs r3, zflag
jmp incmd_read1
inc pr0+1
jbc r3, zflag
inc pr0+2
incmd_read1:
call ReadIND
add a,@1
call WriteIND
jbs r3, cflag
jmp incmd_end
inc pr0
jbs r3, zflag
jmp incmd_read2
inc pr0+1
jbc r3, zflag
inc pr0+2
incmd_read2:
call ReadIND
add a,@1
call WriteIND
jbs r3, cflag
jmp incmd_end
inc pr0
jbs r3, zflag
jmp incmd_read3
inc pr0+1
jbc r3, zflag
inc pr0+2
incmd_read3:
call ReadIND
add a,@1
call WriteIND
.ENDIF
incmd_end:
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO DECMD addr, access
.LOCAL decmd_end
.LOCAL decmd_read1
.LOCAL decmd_read2
.LOCAL decmd_read3
; RAM
.IF access = 0
mov a, @1
sub addr,a
jbs r3, cflag
sub addr+1, a
jbs r3, cflag
sub addr+2, a
jbs r3, cflag
sub addr+3, a
.ENDIF
; ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, @0xff
iow addr
jbc r3, cflag
jmp decmd_end
ior addr+1
add a, @0xff
iow addr+1
jbc r3, cflag
jmp decmd_end
ior addr+2
add a, @0xff
iow addr+2
jbc r3, cflag
jmp decmd_end
ior addr+3
add a, @0xff
iow addr+3
.ENDIF
; IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a,@0xff
call WriteIND
jbc r3, cflag
jmp decmd_end
inc pr0
jbs r3, zflag
jmp decmd_read1
inc pr0+1
jbc r3, zflag
inc pr0+2
decmd_read1:
call ReadIND
add a,@0xff
call WriteIND
jbc r3, cflag
jmp decmd_end
inc pr0
jbs r3, zflag
jmp decmd_read2
inc pr0+1
jbc r3, zflag
inc pr0+2
decmd_read2:
call ReadIND
add a,@0xff
call WriteIND
jbc r3, cflag
jmp decmd_end
inc pr0
jbs r3, zflag
jmp decmd_read3
inc pr0+1
jbc r3, zflag
inc pr0+2
decmd_read3:
call ReadIND
add a,@0xff
call WriteIND
.ENDIF
decmd_end:
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO ADDMRB addr,reg,access
; RAM
.IF access = 0
MOV a, reg
ADD addr, a
.ENDIF
;ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, reg
iow addr
.ENDIF
;IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a, reg
call WriteIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO ADDMRW addr,reg,access
.LOCAL addmrw_read1
; RAM
.IF access = 0
mov a, reg
add addr, a
jbc r3, cflag
inc addr+1
mov a, reg+1
add addr+1, a
.ENDIF
;ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, reg
iow addr
ior addr+1
jbc r3, cflag
add a, 1
add a, reg+1
iow addr+1
.ENDIF
;IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a, reg
call WriteIND
inc pr0
jbs r3, zflag
jmp addmrw_read1
inc pr0+1
jbc r3, zflag
inc pr0+2
addmrw_read1:
call ReadIND
jbc r3, cflag
add a, @1
add a, reg+1
call WriteIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO ADDMRD addr,reg,access
.LOCAL ADDMRD_BYTE2
.LOCAL ADDMRD_BYTE3
.LOCAL addmrd_read1
.LOCAL addmrd_read2
.LOCAL addmrd_read3
;RAM
.IF access = 0
mov a, reg
add addr, a
rlc pr1
mov a, reg+1
add addr+1, a
jbs pr1,0
jmp ADDMRD_BYTE2
inc addr+1
jbc r3,zflag
bs r3,cflag
ADDMRD_BYTE2:
rlc pr1
mov a, reg+2
add addr+2, a
jbs pr1,0
jmp ADDMRD_BYTE3
inc addr+2
jbc r3,zflag
bs r3,cflag
ADDMRD_BYTE3:
jbc r3, cflag
inc addr+3
mov a, reg+3
add addr+3, a
.ENDIF
;ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
add a, reg
iow addr
rlc pr1
ior addr+1
add a, reg+1
rlc pr1
jbc pr1, 1
add a, 1
iow addr+1
jbc r3, cflag
bs pr1, 0
ior addr+2
add a, reg+2
rlc pr1
jbc pr1, 1
add a, 1
iow addr+2
jbc r3, cflag
bs pr1, 0
ior addr+3
add a, reg+3
rlc pr1
jbc pr1, 1
add a, 1
iow addr+3
.ENDIF
;IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
add a, reg
call WriteIND
rlc pr1
inc pr0
jbs r3, zflag
jmp addmrd_read1
inc pr0+1
jbc r3, zflag
addmrd_read1:
call ReadIND
add a, reg+1
rlc pr1
jbc pr1, 1
add a, 1
call WriteIND
jbc r3, zflag
bs pr1, 0
inc pr0
jbs r3, zflag
jmp addmrd_read2
inc pr0+1
jbc r3, zflag
addmrd_read2:
call ReadIND
add a, reg+2
rlc pr1
jbc pr1, 1
add a, 1
call WriteIND
jbc r3, zflag
bs pr1, 0
inc pr0
jbs r3, zflag
jmp addmrd_read3
inc pr0+1
jbc r3, zflag
addmrd_read3:
inc pr0+1
call ReadIND
add a, reg+3
rlc pr1
jbc pr1, 1
add a, 1
call WriteIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO SUBMRB addr,reg,access
; RAM
.IF access = 0
mov a, reg
sub addr, a
.ENDIF
;ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
sub a, reg
sub a, @0
iow addr
.ENDIF
;IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
call ReadIND
sub a, reg
sub a, @0
call WriteIND
.ENDIF
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO SUBMRW addr,reg,access
.LOCAL submrw_read1
; RAM
.IF access = 0
mov a, reg
sub addr, a
jbs r3, cflag
dec addr+1
mov a, reg+1
sub addr+1, a
.ENDIF
;ROM
.IF access = 1
ERROR "Can't write to ROM data"
.ENDIF
; IO
.IF access = 2
ior addr
sub a, reg
rlc pr1
sub a, @0
iow addr
ior addr+1
sub a, reg+1
jbs pr1, 0
add a, @1
sub a, @0
iow addr+1
.ENDIF
;IND
.IF access = 3
mov a, @.B0.(addr)
mov pr0, a
mov a, @.B1.(addr)
mov pr0+1, a
mov a, @.B2.(addr)
mov pr0+2, a
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -