📄 graphics.asm
字号:
sbc #0aeh ;;#0b0h
sta <INSL
stz <INSH
stz <INDL
stz <INDH
ldx #0
?1Multi_94:
clc
lda <INSL
adc <INDL
sta <INDL
lda <INDH
adc #0
sta <INDH
inx
cpx #94
bne ?1Multi_94
clc
tya
adc <INDL
sta <INDL
lda <INDH
adc #0
sta <INDH
stz <DRR
stz <drrh
asl <INDL
rol <INDH
asl <INDL
rol <INDH
asl <INDL
rol <INDH
asl <INDL
rol <INDH
rol <DRR
rol <DRRh
asl <INDL
rol <INDH
rol <DRR
rol <DRRh
ldy <INDL
lda <INDH
ora #80h
tax
asl <INDH
rol <DRR
rol <DRRh
clc
lda #<CFontBank
adc <DRR
sta <DRR
lda <DRRh
adc #>CFontBank
sta <DRRh
rts
;;=========================================
?2222_next_rom:
tya
sec
sbc #0a1h
tay
txa
sec
sbc #0a1h ;;#0b0h
sta <INSL
stz <INSH
stz <INDL
stz <INDH
ldx #0
?2Multi_94:
clc
lda <INSL
adc <INDL
sta <INDL
lda <INDH
adc #0
sta <INDH
inx
cpx #94
bne ?2Multi_94
clc
tya
adc <INDL
sta <INDL
lda <INDH
adc #0
sta <INDH
stz <DRR
stz <drrh
asl <INDL
rol <INDH
asl <INDL
rol <INDH
asl <INDL
rol <INDH
asl <INDL
rol <INDH
rol <DRR
rol <DRRh
asl <INDL
rol <INDH
rol <DRR
rol <DRRh
ldy <INDL
lda <INDH
ora #80h
tax
asl <INDH
rol <DRR
rol <DRRh
clc
lda #<CFontBank2
adc <DRR
sta <DRR
lda <DRRh
adc #>CFontBank2
sta <DRRh
rts
Draw8x16Phonetic:
txa
sec
sbc #51h
ldx #>DJFont8x16_yh ;;DJFont8x16
ldy #<DJFont8x16_yh ;;DJFont8x16
bra drawcharxxx
;;===============================================
DrawChar16:
txa
ldx #>ASC816Font_yh
ldy #<ASC816Font_yh
bra drawcharxxx
DrawChar12:
txa
ldx #>ASC816FontD
ldy #<ASC816FontD
drawcharxxx_slow: ;;任意位置,显示速度慢
jsr A2FontA
stx <image_addrh
sty <image_addrl
lda <drr
pha
lda <drrh
pha
lda #>FontBank
sta <DRRh
lda #<FontBank
sta <DRR
lda #8
sta <image_width
lda #16
sta <image_hight_temp
jsr print_block_at_anywhere
pla
sta <drrh
pla
sta <drr
rts
drawcharxxx: ;;非任意位置,ox,oy必须以8为单位,显示速度快
jsr A2FontA
stx <image_addrh
sty <image_addrl
lda <drr
pha
lda <drrh
pha
lda #>FontBank
sta <DRRh
lda #<FontBank
sta <DRR
jsr speed_print_8_x_16
pla
sta <drrh
pla
sta <drr
rts
SetScreen_to_ds0:
jsr set_to_ds0bank
bra SetScreen
SetScreenU_to_ds0:
jsr set_to_ds0bank
SetScreenU:
stx <ScreenMode
txa
bne ?SetCur00 ;; Set cursor=(0,0)
rts
?SetCur00:
SetScreen:
stx <ScreenMode
txa
bne Cls ;; Clear screen if mode #0.
;; stz <ox
;; stz <oy
jmp ClrLCD
Cls:
jsr SetCur00 ;; Set cursor=(0,0)
lda <ScreenMode
bne Cls0
jmp ClrLCD ;; Branch if mode 0.
Cls0:
ldx #0
lda #' ' ;; 'Space'
?cls1:
sta TextBuffor,x
inx
cpx #textbuffer_num
bcc ?cls1
clrallicon:
jmp clear_all_icon
SetCur00:
ldx #0
ldy #0
SetCur: stx <CurX
sty <CurY
rts
CursorSizeTbl:
db 0,3,81h
SetCursorSize:
lda CursorSizeTbl,x
sta <CursorSize
rts
OYAd1:
lda #1
bra oyad25
OYAd2:
lda #2
oyad25: clc
adc <OY
sta <OY
stz <OX
rts
OXAd16: lda #16
clc
adc <OX
sta <OX
cmp #LCD_SEG
bcc oxa8e
stz <OX
lda <OY
adc #15
bra OXxx81
OXAd8: lda #8
clc
adc <OX
sta <OX
cmp #LCD_SEG
bcc oxa8e
stz <OX
lda <OY
adc #15
OXxx81:
sta <OY
oxa8e: rts
;;[S]-----------------------------------------------[S]
;; Draw font 8X8 (phonetic code).
;;[S]-----------------------------------------------[S]
DrawFont8Phonetic:
cpx #20h
bne DrawFont8Phonetic_0
bra DrawFont8
DrawFont8Phonetic_0:
lda #>FontBank
sta <DRRh
lda #<FontBank
sta <DRR
txa
ldx #>DJFont_yh
ldy #<DJFont_yh
sec
sbc #44h ;5ah
bra dwf83
;;[S]-----------------------------------------------[S]
;; Draw font 8X8 (ASCII code).
;;[S]-----------------------------------------------[S]
DrawFont8:
lda #>FontBank
sta <DRRh
lda #<FontBank
sta <DRR
txa
ldy #<Asc88Font_yh ;;ASC88Font
ldx #>Asc88Font_yh ;;ASC88Font
;;sec
;;sbc #10h
Dwf83:;;
;;bcs dwf85
;;lda #0
dwf85: stx <INSH
sty <INSL
stz <INDH ;; ASCII code *= 8.
asl
rol <INDH
asl
rol <INDH
asl
rol <INDH
clc
adc <INSL
sta <image_addrl
lda <INDH
adc <INSH
sta <image_addrh
jsr speed_print_8_x_8
lda <OX
clc
adc #8
cmp #LCD_SEG
bcc DrawFont_0
lda <OY
adc #7
cmp #LCD_COM
bcc DrawFont_1
rts
;;[S]-----------------------------------------------[S]
;; Draw out X(,Y)(ASCII code).
;;[S]-----------------------------------------------[S]
DrawFont:
phx
jsr A2FontAddr ;; Font code -> Font patten address.
stx <image_addrh
sty <image_addrl
pla ;; Get org. font code.
cmp #0a1h
bcc DrawFont_2
jsr speed_print_16_x_16
lda <OX
sec
adc #15
cmp #LCD_SEG
bcc DrawFont_0
lda <OY
adc #15
cmp #LCD_COM
bcc DrawFont_1
rts
DrawFont_1:
stz <OX
sta <OY
rts
DrawFont_0:
sta <OX
rts
DrawFont_2:
jsr speed_print_8_x_16
lda <OX
sec
adc #7
cmp #LCD_SEG
bcc DrawFont_0
lda <OY
adc #15
cmp #LCD_COM
bcc DrawFont_1
rts
DrawFont0:
phx
jsr A2FontAddr ;; Font code -> Font patten address.
stx <image_addrh
sty <image_addrl
pla ;; Get org. font code.
cmp #0a1h
bcc ?DrawFont_2
lda #16
sta <image_width
sta <image_hight_temp
jsr print_block_at_anywhere
lda <OX
sec
adc #15
cmp #LCD_SEG
bcc ?DrawFont_0
lda <OY
adc #15
cmp #LCD_COM
bcc ?DrawFont_1
rts
?DrawFont_1:
stz <OX
sta <OY
rts
?DrawFont_0:
sta <OX
rts
?DrawFont_2:
lda #8
sta <image_width
lda #16
sta <image_hight_temp
jsr print_block_at_anywhere
lda <OX
sec
adc #7
cmp #LCD_SEG
bcc ?DrawFont_0
lda <OY
adc #15
cmp #LCD_COM
bcc ?DrawFont_1
rts
ClearCursor:
BackSpace:
rts
tab_oytab:
db 72,72,72,72,72,72,72,72,64,64,64,64,64,64,64,64
DrawNxLoc:
clc
txa
adc <OX ;; OX += width.
cmp #LCD_SEG
bcc draw95 ;; Branch if OX < 112
tya ;; Get height.
clc
adc <OY ;; OY += height.
cmp #LCD_COM ;; OY >= 6 ?
bcc draw92 ;; Branch if OY < 6 (0..5)
lda tab_oytab,y
draw92: sta <OY
lda #0 ;; Clear OX.
draw95: sta <OX
rts
;;[S]-----------------------------------------------[S]
;; OX,OY -> LCD address.(IND) fine
;;[S]-----------------------------------------------[S]
;oybittab:
; db 00000001b
; db 00000010b
; db 00000100b
; db 00001000b
; db 00010000b
; db 00100000b
; db 01000000b
; db 10000000b
OXY2IND:
lda <oy
asl
tax
lda <ox
lsr
lsr
lsr
sta <indl
lda y_col_address_tab_5x10,x
sec
sbc <indl
sta <indl
lda y_col_address_tab_5x10+1,x
sbc #0
sta <indh
rts
;;============================================================================
;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -