added code to display dictionary compressed strings
This commit is contained in:
1 parent
d3fdc6cc59
commit
3b4d1345db
13 files changed
+202
-78
No files matched your search
@@ -178,15 +178,15 @@ updatebin:
|
|||||||
|
|
||||||
$(TOOL_PNGPREPARE): tools/pngprepare.c
|
$(TOOL_PNGPREPARE): tools/pngprepare.c
|
||||||
@mkdir -p build/tools
|
@mkdir -p build/tools
|
||||||
$(CC) -O2 -g -Wall -I/usr/local/include -L/usr/local/lib -o $@ $< -lpng
|
$(CC) -O2 -Wall -I/usr/local/include -L/usr/local/lib -o $@ $< -lpng
|
||||||
|
|
||||||
build/tools/%: tools/%.c
|
build/tools/%: tools/%.c
|
||||||
@mkdir -p build/tools
|
@mkdir -p build/tools
|
||||||
$(CC) -O2 -g -Wall -o $@ $<
|
$(CC) -O2 -Wall -o $@ $<
|
||||||
|
|
||||||
build/tools/%: tools/%.cc tools/common.h
|
build/tools/%: tools/%.cc tools/common.h
|
||||||
@mkdir -p build/tools
|
@mkdir -p build/tools
|
||||||
$(CXX) -O2 -g -Wall -o $@ $<
|
$(CXX) -O0 -g -Wall -o $@ $<
|
||||||
|
|
||||||
# Rules - CHARGEN
|
# Rules - CHARGEN
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,10 @@
|
|||||||
// #LAYOUT# * * #IGNORE
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
packed_str_keywords_V2:
|
#if CONFIG_COMPRESSION_LVL_2
|
||||||
|
|
||||||
put_freq_packed_keywords_V2()
|
packed_dictionary:
|
||||||
|
|
||||||
|
put_packed_freq_DICTIONARY()
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# M65 BASIC_1 #TAKE
|
||||||
|
// #LAYOUT# X16 BASIC_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_COMPRESSION_LVL_2
|
||||||
|
|
||||||
|
packed_dict_errors:
|
||||||
|
|
||||||
|
put_packed_dict_errors()
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
packed_freq_errors:
|
||||||
|
|
||||||
|
put_packed_freq_errors()
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
// #LAYOUT# * * #IGNORE
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
packed_str_errors:
|
packed_freq_keywords_CC:
|
||||||
|
|
||||||
put_freq_packed_errors()
|
put_packed_freq_keywords_CC()
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
// #LAYOUT# * * #IGNORE
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
packed_str_keywords_CC:
|
packed_freq_keywords_CD:
|
||||||
|
|
||||||
put_freq_packed_keywords_CC()
|
put_packed_freq_keywords_CD()
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
// #LAYOUT# * * #IGNORE
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
packed_str_keywords_CD:
|
packed_freq_keywords_V2:
|
||||||
|
|
||||||
put_freq_packed_keywords_CD()
|
put_packed_freq_keywords_V2()
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# M65 BASIC_1 #TAKE
|
||||||
|
// #LAYOUT# X16 BASIC_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_COMPRESSION_LVL_2
|
||||||
|
|
||||||
|
packed_dict_misc:
|
||||||
|
|
||||||
|
put_packed_dict_misc()
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
packed_freq_misc:
|
||||||
|
|
||||||
|
put_packed_freq_misc()
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
// #LAYOUT# STD * #TAKE
|
|
||||||
// #LAYOUT# M65 BASIC_1 #TAKE
|
|
||||||
// #LAYOUT# X16 BASIC_0 #TAKE
|
|
||||||
// #LAYOUT# * * #IGNORE
|
|
||||||
|
|
||||||
|
|
||||||
packed_str_misc:
|
|
||||||
|
|
||||||
put_freq_packed_misc()
|
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# M65 BASIC_1 #TAKE
|
||||||
|
// #LAYOUT# X16 BASIC_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_COMPRESSION_LVL_2
|
||||||
|
|
||||||
|
print_packed_error: // .X - error string index
|
||||||
|
|
||||||
|
lda #<packed_dict_errors
|
||||||
|
ldy #>packed_dict_errors
|
||||||
|
bne print_dict_packed_string // branch always
|
||||||
|
|
||||||
|
print_packed_misc_str: // .X - misc string index
|
||||||
|
|
||||||
|
lda #<packed_dict_misc
|
||||||
|
ldy #>packed_dict_misc
|
||||||
|
|
||||||
|
// FALLTROUGH
|
||||||
|
|
||||||
|
print_dict_packed_string:
|
||||||
|
|
||||||
|
// Search for the packed string on the list
|
||||||
|
|
||||||
|
jsr print_packed_search
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
|
!:
|
||||||
|
// At this point FRESPC contains a pointer to the string to display
|
||||||
|
// Fetch a byte-code
|
||||||
|
|
||||||
|
lda (FRESPC), y
|
||||||
|
beq print_dict_packed_string_end // branch if everything displayed
|
||||||
|
tax
|
||||||
|
dex
|
||||||
|
|
||||||
|
// Call 'print_freq_packed_string' - but preserve all the data needed to progress further
|
||||||
|
|
||||||
|
phy_trash_a
|
||||||
|
lda FRESPC+0
|
||||||
|
pha
|
||||||
|
lda FRESPC+1
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda #<packed_dictionary
|
||||||
|
ldy #>packed_dictionary
|
||||||
|
|
||||||
|
jsr print_freq_packed_string
|
||||||
|
|
||||||
|
pla
|
||||||
|
sta FRESPC+1
|
||||||
|
pla
|
||||||
|
sta FRESPC+0
|
||||||
|
ply_trash_a
|
||||||
|
|
||||||
|
// Next iteration
|
||||||
|
|
||||||
|
iny
|
||||||
|
bne !- // branch always
|
||||||
|
|
||||||
|
print_dict_packed_string_end:
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
+16
-39
@@ -23,69 +23,46 @@ print_packed_misc_str:
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
#if !CONFIG_COMPRESSION_LVL_2
|
||||||
|
|
||||||
print_packed_error: // .X - error string index
|
print_packed_error: // .X - error string index
|
||||||
|
|
||||||
lda #<packed_str_errors
|
lda #<packed_freq_errors
|
||||||
ldy #>packed_str_errors
|
ldy #>packed_freq_errors
|
||||||
bne print_freq_packed_string // branch always
|
bne print_freq_packed_string // branch always
|
||||||
|
|
||||||
print_packed_misc_str: // .X - misc string index
|
print_packed_misc_str: // .X - misc string index
|
||||||
|
|
||||||
lda #<packed_str_misc
|
lda #<packed_freq_misc
|
||||||
ldy #>packed_str_misc
|
ldy #>packed_freq_misc
|
||||||
bne print_freq_packed_string // branch always
|
bne print_freq_packed_string // branch always
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
print_packed_keyword_CC: // .X - token number
|
print_packed_keyword_CC: // .X - token number
|
||||||
|
|
||||||
lda #<packed_str_keywords_CC
|
lda #<packed_freq_keywords_CC
|
||||||
ldy #>packed_str_keywords_CC
|
ldy #>packed_freq_keywords_CC
|
||||||
bne print_freq_packed_string // branch always
|
bne print_freq_packed_string // branch always
|
||||||
|
|
||||||
print_packed_keyword_CD: // .X - token number
|
print_packed_keyword_CD: // .X - token number
|
||||||
|
|
||||||
lda #<packed_str_keywords_CD
|
lda #<packed_freq_keywords_CD
|
||||||
ldy #>packed_str_keywords_CD
|
ldy #>packed_freq_keywords_CD
|
||||||
bne print_freq_packed_string // branch always
|
bne print_freq_packed_string // branch always
|
||||||
|
|
||||||
print_packed_keyword_V2: // .X - token number
|
print_packed_keyword_V2: // .X - token number
|
||||||
|
|
||||||
lda #<packed_str_keywords_V2
|
lda #<packed_freq_keywords_V2
|
||||||
ldy #>packed_str_keywords_V2
|
ldy #>packed_freq_keywords_V2
|
||||||
|
|
||||||
// FALLTROUGH
|
// FALLTROUGH
|
||||||
|
|
||||||
print_freq_packed_string: // not to be used directly XXX rename to print_packed_string
|
print_freq_packed_string: // not to be used directly XXX rename to print_packed_string
|
||||||
|
|
||||||
// First store the initial address of the packed strings list
|
// Search for the packed string on the list
|
||||||
|
|
||||||
sta FRESPC+0
|
jsr print_packed_search
|
||||||
sty FRESPC+1
|
|
||||||
|
|
||||||
// Now find the address of the string to print out
|
|
||||||
// The implementation assumes no packed string is longer than 255 bytes, including trailing zero
|
|
||||||
!:
|
|
||||||
cpx #$00
|
|
||||||
beq print_freq_packed_string_found // branch if no need to advance anymore
|
|
||||||
dex
|
|
||||||
|
|
||||||
ldy #$00
|
|
||||||
!:
|
|
||||||
lda (FRESPC), y
|
|
||||||
iny
|
|
||||||
cmp #$00
|
|
||||||
bne !- // branch if not the end of packed string
|
|
||||||
|
|
||||||
clc // advance FREESPC pointer
|
|
||||||
tya
|
|
||||||
adc FRESPC+0
|
|
||||||
sta FRESPC+0
|
|
||||||
lda #$00
|
|
||||||
adc FRESPC+1
|
|
||||||
sta FRESPC+1
|
|
||||||
|
|
||||||
jmp !--
|
|
||||||
|
|
||||||
print_freq_packed_string_found:
|
|
||||||
|
|
||||||
// At this point FRESPC contains a pointer to the string to display
|
// At this point FRESPC contains a pointer to the string to display
|
||||||
// and we should start from the lower nibble
|
// and we should start from the lower nibble
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# M65 BASIC_1 #TAKE
|
||||||
|
// #LAYOUT# X16 BASIC_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
|
print_packed_search:
|
||||||
|
|
||||||
|
// First store the initial address of the packed strings list
|
||||||
|
|
||||||
|
sta FRESPC+0
|
||||||
|
sty FRESPC+1
|
||||||
|
|
||||||
|
// Now find the address of the string to print out
|
||||||
|
// The implementation assumes no packed string is longer than 255 bytes, including trailing zero
|
||||||
|
!:
|
||||||
|
cpx #$00
|
||||||
|
beq print_packed_done // branch if no need to advance anymore
|
||||||
|
dex
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
|
!:
|
||||||
|
lda (FRESPC), y
|
||||||
|
iny
|
||||||
|
cmp #$00
|
||||||
|
bne !- // branch if not the end of packed string
|
||||||
|
|
||||||
|
clc // advance FREESPC pointer
|
||||||
|
tya
|
||||||
|
adc FRESPC+0
|
||||||
|
sta FRESPC+0
|
||||||
|
lda #$00
|
||||||
|
adc FRESPC+1
|
||||||
|
sta FRESPC+1
|
||||||
|
|
||||||
|
jmp !--
|
||||||
|
|
||||||
|
print_packed_done:
|
||||||
|
|
||||||
|
rts
|
||||||
@@ -72,9 +72,9 @@ tokenise_line_loop:
|
|||||||
|
|
||||||
// Check for BASIC V2 tokens
|
// Check for BASIC V2 tokens
|
||||||
|
|
||||||
lda #<packed_str_keywords_V2
|
lda #<packed_freq_keywords_V2
|
||||||
sta FRESPC+0
|
sta FRESPC+0
|
||||||
lda #>packed_str_keywords_V2
|
lda #>packed_freq_keywords_V2
|
||||||
sta FRESPC+1
|
sta FRESPC+1
|
||||||
|
|
||||||
jsr tk_search
|
jsr tk_search
|
||||||
@@ -82,17 +82,17 @@ tokenise_line_loop:
|
|||||||
|
|
||||||
// Check for extended tokens
|
// Check for extended tokens
|
||||||
|
|
||||||
lda #<packed_str_keywords_CC
|
lda #<packed_freq_keywords_CC
|
||||||
sta FRESPC+0
|
sta FRESPC+0
|
||||||
lda #>packed_str_keywords_CC
|
lda #>packed_freq_keywords_CC
|
||||||
sta FRESPC+1
|
sta FRESPC+1
|
||||||
|
|
||||||
jsr tk_search
|
jsr tk_search
|
||||||
bcc tokenise_line_keyword_CC // branch if keyword identified
|
bcc tokenise_line_keyword_CC // branch if keyword identified
|
||||||
|
|
||||||
lda #<packed_str_keywords_CD
|
lda #<packed_freq_keywords_CD
|
||||||
sta FRESPC+0
|
sta FRESPC+0
|
||||||
lda #>packed_str_keywords_CD
|
lda #>packed_freq_keywords_CD
|
||||||
sta FRESPC+1
|
sta FRESPC+1
|
||||||
|
|
||||||
jsr tk_search
|
jsr tk_search
|
||||||
|
|||||||
+20
-13
@@ -1279,16 +1279,19 @@ void DataSet::prepareOutput()
|
|||||||
const auto &stringEntryList = stringEntryLists[idxList];
|
const auto &stringEntryList = stringEntryLists[idxList];
|
||||||
const auto &stringEncodedList = stringEncodedLists[idxList];
|
const auto &stringEncodedList = stringEncodedLists[idxList];
|
||||||
|
|
||||||
stream << std::endl;
|
if (stringEntryList.type != ListType::DICTIONARY)
|
||||||
for (uint8_t idxString = 0; idxString < stringEncodedList.size(); idxString++)
|
|
||||||
{
|
{
|
||||||
const auto &stringEntry = stringEntryList.list[idxString];
|
stream << std::endl;
|
||||||
const auto &stringEncoded = stringEncodedList[idxString];
|
for (uint8_t idxString = 0; idxString < stringEncodedList.size(); idxString++)
|
||||||
|
|
||||||
if (!stringEncoded.empty())
|
|
||||||
{
|
{
|
||||||
stream << ".label IDX__" << stringEntry.alias << std::string(maxAliasLen - stringEntry.alias.length(), ' ') <<
|
const auto &stringEntry = stringEntryList.list[idxString];
|
||||||
" = $" << std::uppercase << std::hex << std::setfill('0') << std::setw(2) << +idxString << std::endl;
|
const auto &stringEncoded = stringEncodedList[idxString];
|
||||||
|
|
||||||
|
if (!stringEncoded.empty())
|
||||||
|
{
|
||||||
|
stream << ".label IDX__" << stringEntry.alias << std::string(maxAliasLen - stringEntry.alias.length(), ' ') <<
|
||||||
|
" = $" << std::uppercase << std::hex << std::setfill('0') << std::setw(2) << +idxString << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1302,11 +1305,11 @@ void DataSet::prepareOutput()
|
|||||||
|
|
||||||
if (isCompressionLvl2(stringEntryList))
|
if (isCompressionLvl2(stringEntryList))
|
||||||
{
|
{
|
||||||
stream << std::endl << ".macro put_dict_packed_";
|
stream << std::endl << ".macro put_packed_dict_";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stream << std::endl << ".macro put_freq_packed_";
|
stream << std::endl << ".macro put_packed_freq_";
|
||||||
}
|
}
|
||||||
|
|
||||||
stream << stringEntryList.name << "()" << std::endl << "{" << std::endl;
|
stream << stringEntryList.name << "()" << std::endl << "{" << std::endl;
|
||||||
@@ -1314,20 +1317,24 @@ void DataSet::prepareOutput()
|
|||||||
enum LastStr { NONE, SKIPPED, WRITTEN } lastStr = LastStr::NONE;
|
enum LastStr { NONE, SKIPPED, WRITTEN } lastStr = LastStr::NONE;
|
||||||
for (uint8_t idxString = 0; idxString < stringEncodedList.size(); idxString++)
|
for (uint8_t idxString = 0; idxString < stringEncodedList.size(); idxString++)
|
||||||
{
|
{
|
||||||
const auto &stringEntry = stringEntryList.list[idxString];
|
|
||||||
const auto &stringEncoded = stringEncodedList[idxString];
|
const auto &stringEncoded = stringEncodedList[idxString];
|
||||||
|
|
||||||
if (stringEncoded.empty())
|
if (stringEncoded.empty())
|
||||||
{
|
{
|
||||||
|
if (stringEntryList.type == ListType::DICTIONARY) ERROR("internal error"); // should never happen
|
||||||
|
|
||||||
if (lastStr == LastStr::WRITTEN) stream << std::endl;
|
if (lastStr == LastStr::WRITTEN) stream << std::endl;
|
||||||
stream << "\t.byte $00 // skipped " << stringEntry.alias << std::endl;
|
stream << "\t.byte $00 // skipped " << stringEntryList.list[idxString].alias << std::endl;
|
||||||
lastStr = LastStr::SKIPPED;
|
lastStr = LastStr::SKIPPED;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (lastStr != LastStr::NONE) stream << std::endl;
|
if (lastStr != LastStr::NONE) stream << std::endl;
|
||||||
|
|
||||||
stream << "\t// IDX__" << stringEntry.alias << std::endl;
|
if (stringEntryList.type != ListType::DICTIONARY)
|
||||||
|
{
|
||||||
|
stream << "\t// IDX__" << stringEntryList.list[idxString].alias << std::endl;
|
||||||
|
}
|
||||||
stream << "\t.byte ";
|
stream << "\t.byte ";
|
||||||
|
|
||||||
bool first = true;
|
bool first = true;
|
||||||
|
|||||||
Reference in new issue
Block a user