📄 st22xx.inc
字号:
.IFNDEF _ST22XX_INC_
_ST22XX_INC_ .EQU 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Macros ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;; for touch panel
TP_CS_LOW MACRO
pha
lda <PC
ora #PORTC_MASK
and #(TP_CS^ffh)
sta <PC
pla
ENDM
TP_CS_HIGH macro
pha
lda <PC
ora #PORTC_MASK|TP_CS
sta <PC
pla
endm
TP_CLK_LOW macro
pha
lda <PC
ora #PORTC_MASK
and #(TP_CLK^ffh)
sta <PC
pla
endm
TP_CLK_HIGH macro
pha
lda <PC
ora #PORTC_MASK|TP_CLK
sta <PC
pla
endm
TP_DATA_LOW macro
pha
lda <PC
ora #PORTC_MASK
and #(TP_DOUT^ffh)
sta <PC
pla
endm
TP_DATA_HIGH macro
pha
lda <PC
ora #PORTC_MASK|TP_DOUT
sta <PC
pla
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; for display (ST7565) ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CURSOR_HOME macro
pha
lda #10110000B+00h
sta ST7565CommandPort ;;Set display RAM page address
lda #00010000B+00h
sta ST7565CommandPort ;;Set MSB of column address
lda #00000000B+00h
sta ST7565CommandPort ;;Set LSB of column address
pla
endm
SHOW_A_IN_HEX_XY macro xx,yy
pha
lda xx
sta <CursorX
lda yy
sta <CursorY
pla
SHOW_A_IN_HEX
endm
SA_XY macro xx,yy
pha
lda xx
sta <CursorX
lda yy
sta <CursorY
pla
SHOW_A_IN_HEX
endm
SET_XY macro xx,yy
pha
lda xx
sta <CursorX
lda yy
sta <CursorY
pla
endm
SHOW_A_IN_NIBBLE_XY macro xx,yy
pha
lda xx
sta <CursorX
lda yy
sta <CursorY
pla
SHOW_A_IN_NIBBLE
endm
SHOW_A_IN_OCT_XY macro xx,yy
pha
lda xx
sta <CursorX
lda yy
sta <CursorY
pla
SHOW_A_IN_OCT
endm
SHOW_A_IN_HEX macro
pha
pha
lsr a
lsr a
lsr a
lsr a
jsr Draw8x8Font
pla
and #0fh
jsr Draw8x8Font
pla
endm
SA macro
pha
pha
lsr a
lsr a
lsr a
lsr a
jsr Draw8x8Font
pla
and #0fh
jsr Draw8x8Font
pla
endm
SHOW_A_IN_NIBBLE macro
pha
and #0fh
jsr Draw8x8Font
pla
endm
SHOW_A_IN_OCT macro
pha
phx
tax
lda Hex2BcdTab,x
jsr Draw8x8Font
lda Hex2BcdTab+256,x
jsr Draw8x8Font
lda Hex2BcdTab+512,x
jsr Draw8x8Font
plx
pla
endm
SHOW_A_IN_TIME_XY macro xx,yy
PUSH_REG
ldx xx
ldy yy
jsr Set8x8CursorXY
tax
lda Hex2BcdTab,x
jsr Draw8x8Font
phx
ldx xx+2
ldy yy
jsr Set8x8CursorXY
plx
lda Hex2BcdTab+256,x
jsr Draw8x8Font
lda Hex2BcdTab+512,x
jsr Draw8x8Font
PULL_REG
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; HWR ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SHOW_CANDIDATE macro n
PUSH_ALL
;;; move nth candidate GB_code to (x,y)
ldx n*4
lda HWRCandidateBuffer+2,x
ldy HWRCandidateBuffer+3,x
tax
jsr ConvertGBCode
ldx n*2
ldy n
jsr SetCandidateXY
jsr Draw12x12Font
PULL_ALL
endm
SHOW_CANDIDATE_ASC macro n
PUSH_ALL
ldx n*4
lda HWRCandidateBuffer+2,x
ldx n*2
jsr SetEditLineXY
jsr Draw6x12Font75
PULL_ALL
endm
SHOW_EDIT_LINE macro n
PUSH_ALL
;;; move nth candidate GB_code to (x,y)
ldx n*4
lda HWRCandidateBuffer+2,x
ldy HWRCandidateBuffer+3,x
tax
jsr ConvertGBCode
ldx n*2
jsr SetEditLineXY
jsr Draw12x12Font75
PULL_ALL
endm
INC_BUFFER_PTR macro ptrl,ptrh,buffer_start
;;; increment stroke buffer ptr
inc ptrl
bne label#
inc ptrh
bbr4 ptrh,label#
pha
lda #>buffer_start
sta ptrh
pla
label#
endm
DEC_BUFFER_PTR macro ptrl,ptrh,buffer_start
;;; decrement stroke buffer ptr
pha
dec ptrl
lda ptrl
cmp #ffh
bne label#
dec ptrh
lda ptrh
cmp #>buffer_start-0100h
bne label#
lda #0fh
sta ptrh
label# pla
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; others ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLEAR_MEMORY macro base,size
phx
ldx size
label# stz base-1,x
dex
bne label#
plx
endm
FILL_MEMORY macro base,size,constant
pha
phx
lda constant
ldx size
label# sta base-1,x
dex
bne label#
plx
pla
endm
MOVE_MEMORY macro source,destination,size
pha
phy
ldy #0
label# lda source,y
sta destination,y
iny
cpy size
bne label#
ply
pla
endm
DUMP_MEMORY macro base,number
pha
phy
ldy #0
?label# lda base,y
SHOW_A_IN_HEX
iny
cpy number
bne ?label#
ply
pla
endm
DUMP_MEMORY_XY macro base,number,xx,yy
pha
phy
lda xx
sta <CursorX
lda yy
sta <CursorY
ldy #0
?label# lda base,y
SHOW_A_IN_HEX
iny
cpy number
bne ?label#
ply
pla
endm
DISTANCE macro variable
sec
sbc variable
bcs _end#
;; negative
eor #ffh
inc a
_end#
endm
PUSH_REG macro
pha
phx
phy
endm
PUSH_ALL macro
pha
phx
phy
php
endm
PULL_REG macro
ply
plx
pla
endm
PULL_ALL macro
plp
ply
plx
pla
endm
PUSH_DRR macro tmp
sta tmp
lda <DRRL
pha
lda <DRRH
pha
lda tmp
endm
PULL_DRR macro tmp
sta tmp
pla
sta <DRRH
pla
sta <DRRL
lda tmp
endm
PUSH_PRR macro tmp
sta tmp
lda <PRRL
pha
lda <PRRH
pha
lda tmp
endm
PULL_PRR macro tmp
sta tmp
pla
sta <PRRH
pla
sta <PRRL
lda tmp
endm
PAUSE0 macro
bbr7 <PA,$
endm
PAUSE1 macro
bbs7 <PA,$
endm
STOP macro
bra $
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; for Danny's adpcm test program
SETB: .MACRO BITN,ADDR
.IF BITN=0
SMB0 <ADDR
.ENDIF
.IF BITN=1
SMB1 <ADDR
.ENDIF
.IF BITN=2
SMB2 <ADDR
.ENDIF
.IF BITN=3
SMB3 <ADDR
.ENDIF
.IF BITN=4
SMB4 <ADDR
.ENDIF
.IF BITN=5
SMB5 <ADDR
.ENDIF
.IF BITN=6
SMB6 <ADDR
.ENDIF
.IF BITN=7
SMB7 <ADDR
.ENDIF
.ENDM
RESB: .MACRO BITN,ADDR
.IF BITN=0
RMB0 <ADDR
.ENDIF
.IF BITN=1
RMB1 <ADDR
.ENDIF
.IF BITN=2
RMB2 <ADDR
.ENDIF
.IF BITN=3
RMB3 <ADDR
.ENDIF
.IF BITN=4
RMB4 <ADDR
.ENDIF
.IF BITN=5
RMB5 <ADDR
.ENDIF
.IF BITN=6
RMB6 <ADDR
.ENDIF
.IF BITN=7
RMB7 <ADDR
.ENDIF
.ENDM
JBS: .MACRO BITN,ADDR,LAB
.IF BITN=0
BBS0 <ADDR,LAB
.ENDIF
.IF BITN=1
BBS1 <ADDR,LAB
.ENDIF
.IF BITN=2
BBS2 <ADDR,LAB
.ENDIF
.IF BITN=3
BBS3 <ADDR,LAB
.ENDIF
.IF BITN=4
BBS4 <ADDR,LAB
.ENDIF
.IF BITN=5
BBS5 <ADDR,LAB
.ENDIF
.IF BITN=6
BBS6 <ADDR,LAB
.ENDIF
.IF BITN=7
BBS7 <ADDR,LAB
.ENDIF
.ENDM
JBR: .MACRO BITN,ADDR,LAB
.IF BITN=0
BBR0 <ADDR,LAB
.ENDIF
.IF BITN=1
BBR1 <ADDR,LAB
.ENDIF
.IF BITN=2
BBR2 <ADDR,LAB
.ENDIF
.IF BITN=3
BBR3 <ADDR,LAB
.ENDIF
.IF BITN=4
BBR4 <ADDR,LAB
.ENDIF
.IF BITN=5
BBR5 <ADDR,LAB
.ENDIF
.IF BITN=6
BBR6 <ADDR,LAB
.ENDIF
.IF BITN=7
BBR7 <ADDR,LAB
.ENDIF
.ENDM
SIGN_LIMIT: .MACRO
BVC NO_OVERFS# ;
BMI P_OVER# ;
LDA #$80 ;MIN
BRA NO_OVERFS# ;
P_OVER# LDA #$7F ;MAX
NO_OVERFS# ;
.ENDM
.ENDIF ;_ST22XX_INC_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -