Replaced builtin macro packages with .mac files that are included like ordinary .inc files.
The benefits are: - Independency of ca65 build from perl - More transparent behaviour
This commit is contained in:
59
asminc/atari.mac
Normal file
59
asminc/atari.mac
Normal file
@@ -0,0 +1,59 @@
|
||||
; Convert characters to screen codes
|
||||
|
||||
; Helper macro that converts and outputs one character
|
||||
.macro _scrcode char
|
||||
.if (char >= 0) .and (char <= 31)
|
||||
.byte (char + 64)
|
||||
.elseif (char >= 32) .and (char <= 95)
|
||||
.byte (char - 32)
|
||||
.elseif (char >= 96) .and (char <= 127)
|
||||
.byte char
|
||||
.elseif (char >= 128) .and (char <= 159)
|
||||
.byte (char + 64)
|
||||
.elseif (char >= 160) .and (char <= 223)
|
||||
.byte (char - 32)
|
||||
.elseif (char >= 224) .and (char <= 255)
|
||||
.byte char
|
||||
.else
|
||||
.error "scrcode: Character constant out of range"
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
.macro scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||||
|
||||
; Bail out if next argument is empty
|
||||
.if .blank (arg1)
|
||||
.exitmacro
|
||||
.endif
|
||||
|
||||
; Check for a string
|
||||
.if .match ({arg1}, "")
|
||||
|
||||
; Walk over all string chars
|
||||
.repeat .strlen (arg1), i
|
||||
_scrcode {.strat (arg1, i)}
|
||||
.endrepeat
|
||||
|
||||
; Check for a number
|
||||
.elseif .match (.left (1, {arg1}), 0)
|
||||
|
||||
; Just output the number
|
||||
_scrcode arg1
|
||||
|
||||
; Check for a character
|
||||
.elseif .match (.left (1, {arg1}), 'a')
|
||||
|
||||
; Just output the character
|
||||
_scrcode arg1
|
||||
|
||||
; Anything else is an error
|
||||
.else
|
||||
|
||||
.error "scrcode: invalid argument type"
|
||||
|
||||
.endif
|
||||
|
||||
; Call the macro recursively with the remaining args
|
||||
scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||||
.endmacro
|
||||
|
||||
62
asminc/cbm.mac
Normal file
62
asminc/cbm.mac
Normal file
@@ -0,0 +1,62 @@
|
||||
; Convert characters to screen codes
|
||||
|
||||
; Helper macro that converts and outputs one character
|
||||
.macro _scrcode char
|
||||
.if (char >= '@' .and char <= 'z')
|
||||
.byte (char - '@')
|
||||
.elseif (char >= 'A' .and char <= 'Z')
|
||||
.byte (char - 'A' + 65)
|
||||
.elseif (char = '[')
|
||||
.byte 27
|
||||
.elseif (char = ']')
|
||||
.byte 29
|
||||
.elseif (char = '^')
|
||||
.byte 30
|
||||
.elseif (char = '_')
|
||||
.byte 31
|
||||
.elseif (char < 256)
|
||||
.byte char
|
||||
.else
|
||||
.error "scrcode: Character constant out of range"
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
.macro scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||||
|
||||
; Bail out if next argument is empty
|
||||
.if .blank (arg1)
|
||||
.exitmacro
|
||||
.endif
|
||||
|
||||
; Check for a string
|
||||
.if .match ({arg1}, "")
|
||||
|
||||
; Walk over all string chars
|
||||
.repeat .strlen (arg1), i
|
||||
_scrcode {.strat (arg1, i)}
|
||||
.endrepeat
|
||||
|
||||
; Check for a number
|
||||
.elseif .match (.left (1, {arg1}), 0)
|
||||
|
||||
; Just output the number
|
||||
_scrcode arg1
|
||||
|
||||
; Check for a character
|
||||
.elseif .match (.left (1, {arg1}), 'a')
|
||||
|
||||
; Just output the character
|
||||
_scrcode arg1
|
||||
|
||||
; Anything else is an error
|
||||
.else
|
||||
|
||||
.error "scrcode: invalid argument type"
|
||||
|
||||
.endif
|
||||
|
||||
; Call the macro recursively with the remaining args
|
||||
scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||||
.endmacro
|
||||
|
||||
|
||||
24
asminc/cpu.mac
Normal file
24
asminc/cpu.mac
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
; CPU bitmask constants
|
||||
CPU_ISET_NONE = $0001
|
||||
CPU_ISET_6502 = $0002
|
||||
CPU_ISET_6502X = $0004
|
||||
CPU_ISET_65SC02 = $0008
|
||||
CPU_ISET_65C02 = $0010
|
||||
CPU_ISET_65816 = $0020
|
||||
CPU_ISET_SUNPLUS = $0040
|
||||
CPU_ISET_SWEET16 = $0080
|
||||
CPU_ISET_HUC6280 = $0100
|
||||
|
||||
; CPU capabilities
|
||||
CPU_NONE = CPU_ISET_NONE
|
||||
CPU_6502 = CPU_ISET_6502
|
||||
CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X
|
||||
CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02
|
||||
CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
|
||||
CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
|
||||
CPU_SUNPLUS = CPU_ISET_SUNPLUS
|
||||
CPU_SWEET16 = CPU_ISET_SWEET16
|
||||
CPU_HUC6280 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_HUC6280
|
||||
|
||||
|
||||
45
asminc/generic.mac
Normal file
45
asminc/generic.mac
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
; add - Add without carry
|
||||
.macro add Arg1, Arg2
|
||||
clc
|
||||
.if .paramcount = 2
|
||||
adc Arg1, Arg2
|
||||
.else
|
||||
adc Arg1
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
; sub - subtract without borrow
|
||||
.macro sub Arg1, Arg2
|
||||
sec
|
||||
.if .paramcount = 2
|
||||
sbc Arg1, Arg2
|
||||
.else
|
||||
sbc Arg1
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
; bge - jump if unsigned greater or equal
|
||||
.macro bge Arg
|
||||
bcs Arg
|
||||
.endmacro
|
||||
|
||||
; blt - Jump if unsigned less
|
||||
.macro blt Arg
|
||||
bcc Arg
|
||||
.endmacro
|
||||
|
||||
; bgt - jump if unsigned greater
|
||||
.macro bgt Arg
|
||||
.local L
|
||||
beq L
|
||||
bcs Arg
|
||||
L:
|
||||
.endmacro
|
||||
|
||||
; ble - jump if unsigned less or equal
|
||||
.macro ble Arg
|
||||
beq Arg
|
||||
bcc Arg
|
||||
.endmacro
|
||||
|
||||
88
asminc/longbranch.mac
Normal file
88
asminc/longbranch.mac
Normal file
@@ -0,0 +1,88 @@
|
||||
.macro jeq Target
|
||||
.if .match(Target, 0)
|
||||
bne *+5
|
||||
jmp Target
|
||||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||||
beq Target
|
||||
.else
|
||||
bne *+5
|
||||
jmp Target
|
||||
.endif
|
||||
.endmacro
|
||||
.macro jne Target
|
||||
.if .match(Target, 0)
|
||||
beq *+5
|
||||
jmp Target
|
||||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||||
bne Target
|
||||
.else
|
||||
beq *+5
|
||||
jmp Target
|
||||
.endif
|
||||
.endmacro
|
||||
.macro jmi Target
|
||||
.if .match(Target, 0)
|
||||
bpl *+5
|
||||
jmp Target
|
||||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||||
bmi Target
|
||||
.else
|
||||
bpl *+5
|
||||
jmp Target
|
||||
.endif
|
||||
.endmacro
|
||||
.macro jpl Target
|
||||
.if .match(Target, 0)
|
||||
bmi *+5
|
||||
jmp Target
|
||||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||||
bpl Target
|
||||
.else
|
||||
bmi *+5
|
||||
jmp Target
|
||||
.endif
|
||||
.endmacro
|
||||
.macro jcs Target
|
||||
.if .match(Target, 0)
|
||||
bcc *+5
|
||||
jmp Target
|
||||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||||
bcs Target
|
||||
.else
|
||||
bcc *+5
|
||||
jmp Target
|
||||
.endif
|
||||
.endmacro
|
||||
.macro jcc Target
|
||||
.if .match(Target, 0)
|
||||
bcs *+5
|
||||
jmp Target
|
||||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||||
bcc Target
|
||||
.else
|
||||
bcs *+5
|
||||
jmp Target
|
||||
.endif
|
||||
.endmacro
|
||||
.macro jvs Target
|
||||
.if .match(Target, 0)
|
||||
bvc *+5
|
||||
jmp Target
|
||||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||||
bvs Target
|
||||
.else
|
||||
bvc *+5
|
||||
jmp Target
|
||||
.endif
|
||||
.endmacro
|
||||
.macro jvc Target
|
||||
.if .match(Target, 0)
|
||||
bvs *+5
|
||||
jmp Target
|
||||
.elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
|
||||
bvc Target
|
||||
.else
|
||||
bvs *+5
|
||||
jmp Target
|
||||
.endif
|
||||
.endmacro
|
||||
Reference in New Issue
Block a user