Use these macros to program the SX with a '68HC11 like' instruction set
;*************************************************************************
; F
; Ready-to-Use Modules in asm
;
; "68HC11 Like" Instruction Set
;
; (F) Copywrong 1997, f@POBoxes.com
;
; Filename : HC11LIKE.MAC
; Programmer : Frans Gunawan (92101710)
; Desription : Some "68HC11 Like" Instruction Set
; History :
; Version Comment
; 1.0sx Translated for use in the Ubicom SX processors
; 1.0 Support
; ---------------------
; July 22 adddIMM
; 1997 beq
; bne
; decEXT
; incEXT
; incX
; incY
; ldwIMM
; ldwEXT
; ldwINDX
; ldwINDY
; lddIMM
; lddDIR
; lddEXT
; ldxIMM
; ldxDIR
; ldxEXT
; ldyIMM
; ldyDIR
; ldyEXT
; stwEXT
; stwINDX
; stwINDY
; stdDIR
; stdEXT
; stdINDX
; stdINDY
; xgdx
; xgdy
;---------------------------------
; 1.0b abx
; July 23 ldabDIR
; 1997
;---------------------------------
; 1.0c ldabIMM
; August 02 ldaaIMM
; 1997
;---------------------------------
; 1.0d cpxIMM
; August 16 cpyIMM
; 1997 cpdIMM
;
; WARNING: these instructions are not 100% portable, i.e. status bit
;*************************************************************************
;*************************************************************************
; macro
;*************************************************************************
movlf MACRO FILE, LITERAL
mov W, #LITERAL
mov FILE, W
ENDM
longcall MACRO SUBROUTINE
MOVPF WREG, TEMP_W
mov W, #HIGH SUBROUTINE
MOVPF WREG, PCLATH
call @LOW SUBROUTINE
ENDM
longgoto MACRO ADDRESS
mov W, #HIGH ADDRESS
;*** WARNING: PCLATH register bits are in STATUS PAx bits. Or use PAGE/IREAD if possible
; MOVWF PCLATH
mov PCLATH, W
mov W, #LOW ADDRESS
mov PC, W
ENDM
abx MACRO
MOVFP REGB, WREG
add (REGX+1), W
mov W, #$00
ADDWFC REGX
ENDM
; A jmp
; h l
;------------+
;A+h+c B+l
;
adddIMM MACRO WORD
mov W, #LOW WORD
add REGB, W
mov W, #HIGH WORD
ADDWFC REGA
ENDM
beq MACRO JUMP
snb ALUSTA.Z
jmp JUMP
ENDM
bne MACRO JUMP
sb ALUSTA.Z
jmp JUMP
ENDM
; cpx result is in Zero bit
; this instruction is followed by beq or bne
; ex: ldxIMM 0x1234
; cpxIMM 0x1234
; beq same
; no:
; same:
cpxIMM MACRO WORD
LOCAL cpx_exit
LOCAL same
local not_same
mov W, #LOW WORD
CPFSEQ (REGX+1)
jmp not_same
mov W, #HIGH WORD
CPFSEQ REGX
jmp not_same
same: setb ALUSTA.Z
jmp cpx_exit
not_same: clrb ALUSTA.Z
cpx_exit: ; jmp cpx_exit
ENDM
cpyIMM MACRO WORD
LOCAL cpy_exit
LOCAL same
LOCAL not_same
mov W, #LOW WORD
CPFSEQ (REGY+1)
jmp not_same
mov W, #HIGH WORD
CPFSEQ REGY
jmp not_same
same: setb ALUSTA.Z
jmp cpy_exit
not_same: clrb ALUSTA.Z
cpy_exit: ; jmp cpy_exit
ENDM
cpdIMM MACRO WORD
LOCAL cpd_exit
LOCAL same
LOCAL not_same
mov W, #LOW WORD
CPFSEQ REGB
jmp not_same
mov W, #HIGH WORD
CPFSEQ REGA
jmp not_same
same: setb ALUSTA.Z
jmp cpd_exit
not_same: clrb ALUSTA.Z
cpd_exit: ; jmp cpd_exit
ENDM
decEXT MACRO TARGET
ldwEXT TARGET
dec WREG
stwEXT TARGET
ENDM
incEXT MACRO TARGET
ldwEXT TARGET
inc WREG
stwEXT TARGET
ENDM
incX MACRO
mov W, #$01
add (REGX+1), W
mov W, #$00
ADDWFC REGX
ENDM
incY MACRO
mov W, #$01
add (REGY+1), W
mov W, #$00
ADDWFC REGY
ENDM
ldabDIR MACRO SOURCE
MOVFP SOURCE, WREG
MOVPF WREG, REGB
ENDM
ldwIMM MACRO DATA
mov W, #DATA
ENDM
ldwEXT MACRO SOURCE ; External RAM
mov W, #HIGH SOURCE
mov TBLPTRH, W
mov W, #LOW SOURCE
mov TBLPTRL, W
TABLRD 0,0,WREG ;DUMMY
TLRD 0,WREG
ENDM
ldwINDX MACRO ; (REGX) -> WREG
MOVFP REGX, WREG
mov TBLPTRH, W
MOVFP (REGX+1), WREG
mov TBLPTRL, W
TABLRD 0, 0, WREG ; DUMMY
TLRD 0, WREG ; HIGH
ENDM
ldwINDY MACRO ; (REGY) -> WREG
MOVFP REGY, WREG
mov TBLPTRH, W
MOVFP (REGY+1), WREG
mov TBLPTRL, W
TABLRD 0, 0, WREG ; DUMMY
TLRD 0, WREG ; HIGH
ENDM
ldabIMM MACRO DATA
mov W, #DATA
mov REGB, W
ENDM
ldaaIMM MACRO DATA
mov W, #DATA
mov REGA, W
ENDM
lddIMM MACRO WORD ; load Immediate
mov W, #HIGH WORD
mov REGA, W
mov W, #LOW WORD
mov REGB, W
ENDM
lddDIR MACRO SOURCE
MOVFP SOURCE, WREG
MOVPF WREG, REGA
MOVFP (SOURCE+1), WREG
MOVPF WREG, REGB
ENDM
lddEXT MACRO SOURCE
mov W, #HIGH SOURCE
mov TBLPTRH, W
mov W, #LOW SOURCE
mov TBLPTRL, W
TABLRD 0, 1, WREG ; DUMMY
TLRD 0, REGA ; HIGH
TABLRD 0, 0, WREG ; DUMMY
TLRD 0, REGB ; LOW
ENDM
ldxIMM MACRO WORD ; load Immediate
mov W, #HIGH WORD
mov REGX, W
mov W, #LOW WORD
mov (REGX+1), W
ENDM
ldxDIR MACRO SOURCE
MOVFP SOURCE, WREG
MOVPF WREG, REGX
MOVFP (SOURCE+1), WREG
MOVPF WREG, (REGX+1)
ENDM
ldxEXT MACRO SOURCE
mov W, #HIGH SOURCE
mov TBLPTRH, W
mov W, #LOW SOURCE
mov TBLPTRL, W
TABLRD 0, 1, WREG ; DUMMY
TLRD 0, REGX ; HIGH
TABLRD 0, 0, WREG ; DUMMY
TLRD 0, (REGX+1) ; LOW
ENDM
ldyIMM MACRO WORD ; load Immediate
mov W, #HIGH WORD
mov REGY, W
mov W, #LOW WORD
mov (REGY+1), W
ENDM
ldyDIR MACRO SOURCE
MOVFP SOURCE, WREG
MOVPF WREG, REGY
MOVFP (SOURCE+1), WREG
MOVPF WREG, (REGY+1)
ENDM
ldyEXT MACRO SOURCE
mov W, #HIGH SOURCE
mov TBLPTRH, W
mov W, #LOW SOURCE
mov TBLPTRL, W
TABLRD 0, 1, WREG ; DUMMY
TLRD 0, REGY ; HIGH
TABLRD 0, 0, WREG ; DUMMY
TLRD 0, (REGY+1) ; LOW
ENDM
stwEXT MACRO DESTINATION ; External RAM
MOVPF WREG, TEMP_W
mov W, #HIGH DESTINATION
mov TBLPTRH, W
mov W, #LOW DESTINATION
mov TBLPTRL, W
MOVFP TEMP_W, WREG
TABLWT 0, 0, WREG
ENDM
stwINDX MACRO
MOVFP REGX, TBLPTRH
MOVFP (REGX+1), TBLPTRL
TABLWT 0, 0, WREG
ENDM
stwINDY MACRO
MOVFP REGY, TBLPTRH
MOVFP (REGY+1), TBLPTRL
TABLWT 0, 0, WREG
ENDM
stdDIR MACRO DESTINATION
MOVFP REGA, WREG
MOVPF WREG, DESTINATION
MOVFP REGB, WREG
MOVPF WREG, (DESTINATION+1)
ENDM
stdEXT MACRO DESTINATION ; External RAM
mov W, #HIGH DESTINATION
mov TBLPTRH, W
mov W, #LOW DESTINATION
mov TBLPTRL, W
TABLWT 0, 1, REGA
TABLWT 0, 0, REGB
ENDM
stdINDX MACRO
MOVFP REGX, TBLPTRH
MOVFP (REGX+1), TBLPTRL
TABLWT 0, 1, REGA
TABLWT 0, 0, REGB
ENDM
stdINDY MACRO
MOVFP REGY, TBLPTRH
MOVFP (REGY+1), TBLPTRL
TABLWT 0, 1, REGA
TABLWT 0, 0, REGB
ENDM
xgdx MACRO
MOVFP REGA, WREG
MOVPF WREG, TEMP_W
MOVFP REGX, WREG
MOVPF WREG, REGA
MOVFP TEMP_W, WREG
MOVPF WREG, REGX
MOVFP REGB, WREG
MOVPF WREG, TEMP_W
MOVFP (REGX+1), WREG
MOVPF WREG, REGB
MOVFP TEMP_W, WREG
MOVPF WREG, (REGX+1)
ENDM
xgdy MACRO
MOVFP REGA, WREG
MOVPF WREG, TEMP_W
MOVFP REGY, WREG
MOVPF WREG, REGA
MOVFP TEMP_W, WREG
MOVPF WREG, REGY
MOVFP REGB, WREG
MOVPF WREG, TEMP_W
MOVFP (REGY+1), WREG
MOVPF WREG, REGB
MOVFP TEMP_W, WREG
MOVPF WREG, (REGY+1)
ENDM
; END OF FILE