daily_automated
This commit is contained in:
78
trunk/workspace/AVR-Computer/msbasic/macros.s
Normal file
78
trunk/workspace/AVR-Computer/msbasic/macros.s
Normal file
@@ -0,0 +1,78 @@
|
||||
; htasc - set the hi bit on the last byte of a string for termination
|
||||
; (by Tom Greene)
|
||||
.macro htasc str
|
||||
.repeat .strlen(str)-1,I
|
||||
.byte .strat(str,I)
|
||||
.endrep
|
||||
.byte .strat(str,.strlen(str)-1) | $80
|
||||
.endmacro
|
||||
|
||||
; For every token, a byte gets put into segment "DUMMY".
|
||||
; This way, we count up with every token. The DUMMY segment
|
||||
; doesn't get linked into the binary.
|
||||
.macro init_token_tables
|
||||
.segment "VECTORS"
|
||||
TOKEN_ADDRESS_TABLE:
|
||||
.segment "KEYWORDS"
|
||||
TOKEN_NAME_TABLE:
|
||||
.segment "DUMMY"
|
||||
DUMMY_START:
|
||||
.endmacro
|
||||
|
||||
; optionally define token symbol
|
||||
; count up token number
|
||||
.macro define_token token
|
||||
.segment "DUMMY"
|
||||
.ifnblank token
|
||||
token := <(*-DUMMY_START)+$80
|
||||
.endif
|
||||
.res 1; count up in any case
|
||||
.endmacro
|
||||
|
||||
; lay down a keyword, optionally define a token symbol
|
||||
.macro keyword key, token
|
||||
.segment "KEYWORDS"
|
||||
htasc key
|
||||
define_token token
|
||||
.endmacro
|
||||
|
||||
; lay down a keyword and an address (RTS style),
|
||||
; optionally define a token symbol
|
||||
.macro keyword_rts key, vec, token
|
||||
.segment "VECTORS"
|
||||
.word vec-1
|
||||
keyword key, token
|
||||
.endmacro
|
||||
|
||||
; lay down a keyword and an address,
|
||||
; optionally define a token symbol
|
||||
.macro keyword_addr key, vec, token
|
||||
.segment "VECTORS"
|
||||
.addr vec
|
||||
keyword key, token
|
||||
.endmacro
|
||||
|
||||
.macro count_tokens
|
||||
.segment "DUMMY"
|
||||
NUM_TOKENS := <(*-DUMMY_START)
|
||||
.endmacro
|
||||
|
||||
.macro init_error_table
|
||||
.segment "ERROR"
|
||||
ERROR_MESSAGES:
|
||||
.endmacro
|
||||
|
||||
.macro define_error error, msg
|
||||
.segment "ERROR"
|
||||
error := <(*-ERROR_MESSAGES)
|
||||
htasc msg
|
||||
.endmacro
|
||||
|
||||
;---------------------------------------------
|
||||
; set the MSB of every byte of a string
|
||||
.macro asc80 str
|
||||
.repeat .strlen(str),I
|
||||
.byte .strat(str,I)+$80
|
||||
.endrep
|
||||
.endmacro
|
||||
|
||||
Reference in New Issue
Block a user