196 lines
3.9 KiB
ArmAsm
196 lines
3.9 KiB
ArmAsm
;; #LAYOUT# STD * #TAKE
|
|
;; #LAYOUT# CRT BASIC_1 #TAKE
|
|
;; #LAYOUT# M65 BASIC_1 #TAKE
|
|
;; #LAYOUT# * BASIC_0 #TAKE
|
|
;; #LAYOUT# * * #IGNORE
|
|
|
|
; This routine prints strings that have been packed using the 'generate_trings' tool.
|
|
; The general idea is to save space in the ROM.
|
|
|
|
|
|
!ifdef SEGMENT_M65_BASIC_0 {
|
|
|
|
print_packed_error:
|
|
|
|
jsr map_BASIC_1
|
|
jsr (VB1__print_packed_error)
|
|
jmp map_NORMAL
|
|
|
|
print_packed_misc_str:
|
|
|
|
jsr map_BASIC_1
|
|
jsr (VB1__print_packed_misc_str)
|
|
jmp map_NORMAL
|
|
|
|
} else ifdef SEGMENT_CRT_BASIC_0 {
|
|
|
|
print_packed_error:
|
|
|
|
jsr map_BASIC_1
|
|
jsr JB1__print_packed_error
|
|
jmp map_NORMAL
|
|
|
|
print_packed_misc_str:
|
|
|
|
jsr map_BASIC_1
|
|
jsr JB1__print_packed_misc_str
|
|
jmp map_NORMAL
|
|
|
|
} else {
|
|
|
|
!ifndef CONFIG_COMPRESSION_LVL_2 {
|
|
|
|
print_packed_error: ; .X - error string index
|
|
|
|
lda #<packed_freq_errors
|
|
ldy #>packed_freq_errors
|
|
bne print_freq_packed_string ; branch always
|
|
|
|
print_packed_misc_str: ; .X - misc string index
|
|
|
|
lda #<packed_freq_misc
|
|
ldy #>packed_freq_misc
|
|
bne print_freq_packed_string ; branch always
|
|
}
|
|
|
|
print_packed_keyword_01: ; .X - token number
|
|
|
|
lda #<packed_freq_keywords_01
|
|
ldy #>packed_freq_keywords_01
|
|
bne print_freq_packed_string ; branch always
|
|
|
|
!ifndef HAS_SMALL_BASIC {
|
|
|
|
print_packed_keyword_02: ; .X - token number
|
|
|
|
lda #<packed_freq_keywords_02
|
|
ldy #>packed_freq_keywords_02
|
|
bne print_freq_packed_string ; branch always
|
|
}
|
|
|
|
!ifdef CONFIG_MB_M65 {
|
|
|
|
print_packed_keyword_03: ; .X - token number
|
|
|
|
lda #<packed_freq_keywords_03
|
|
ldy #>packed_freq_keywords_03
|
|
bne print_freq_packed_string ; branch always
|
|
}
|
|
|
|
print_packed_keyword_V2: ; .X - token number
|
|
|
|
lda #<packed_freq_keywords_V2
|
|
ldy #>packed_freq_keywords_V2
|
|
|
|
; FALLTROUGH
|
|
|
|
print_freq_packed_string: ; not to be used directly XXX rename to print_packed_string
|
|
|
|
; Search for the packed string on the list
|
|
|
|
jsr print_packed_search
|
|
|
|
; At this point FRESPC contains a pointer to the string to display
|
|
; and we should start from the lower nibble
|
|
|
|
ldy #$00
|
|
|
|
; FALLTROUGH
|
|
|
|
print_freq_packed_string_nibble_lo:
|
|
|
|
; Get the low nibble and check for the end of packed string
|
|
|
|
lda (FRESPC), y
|
|
and #$0F
|
|
beq print_freq_packed_string_end
|
|
|
|
; Not the end - check if this is a common character, encoded by a single nibble
|
|
|
|
cmp #$0F
|
|
beq print_freq_packed_string_3n_split
|
|
|
|
; Character is encoded by a single nibble - fetch it and display
|
|
|
|
tax
|
|
lda packed_as_1n-1, x
|
|
jsr JCHROUT ; preserves .Y
|
|
|
|
; FALLTROUGH
|
|
|
|
print_freq_packed_string_nibble_hi:
|
|
|
|
; Get the high nibble and check for the end of packed string
|
|
|
|
lda (FRESPC), y
|
|
and #$F0
|
|
beq print_freq_packed_string_end
|
|
|
|
; Not the end - check if this is a common character, encoded by a single nibble
|
|
|
|
cmp #$F0
|
|
beq print_freq_packed_string_3n_single
|
|
|
|
; Character is encoded by a single nibble - fetch it and display
|
|
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
|
|
tax
|
|
lda packed_as_1n-1, x
|
|
+bra print_freq_packed_string_3n_single_cont
|
|
|
|
print_freq_packed_string_3n_single:
|
|
|
|
; Character is encoded using 3 nibbles (1st is a mark, already interpreted)
|
|
|
|
iny
|
|
lda (FRESPC), y
|
|
tax
|
|
lda packed_as_3n-1, x
|
|
|
|
; FALLTROUGH
|
|
|
|
print_freq_packed_string_3n_single_cont:
|
|
|
|
jsr JCHROUT ; preserves .Y
|
|
|
|
; Advance to next nibble
|
|
|
|
iny
|
|
bne print_freq_packed_string_nibble_lo ; branch always
|
|
|
|
print_freq_packed_string_3n_split:
|
|
|
|
; Character is encoded using 3 nibbles (1st is a mark, already interpreted),
|
|
; but the 2 remaining nibbles are in two neighbour bytes; use a stack to combine them
|
|
|
|
lda (FRESPC), y
|
|
and #$F0
|
|
tsx
|
|
pha
|
|
|
|
iny
|
|
lda (FRESPC), y
|
|
and #$0F
|
|
|
|
clc
|
|
adc STACK, x
|
|
|
|
txs ; one cycle faster than PLA
|
|
|
|
tax
|
|
lda packed_as_3n-1, x
|
|
jsr JCHROUT ; preserves .Y
|
|
|
|
jmp print_freq_packed_string_nibble_hi
|
|
|
|
print_freq_packed_string_end:
|
|
|
|
rts
|
|
|
|
|
|
} ; ROM layout
|