Save a byte in tree decoder routine by recycling sentinel bit via cf
authorNick Downing <nick@ndcode.org>
Tue, 14 Jun 2022 16:55:16 +0000 (02:55 +1000)
committerNick Downing <nick@ndcode.org>
Tue, 14 Jun 2022 16:57:06 +0000 (02:57 +1000)
disasm/tree_encode_lc.py
loader/tree_decode.py
loader/tree_encode.py
loader/tree_loader.asm

index f2da7ce..d1b894e 100755 (executable)
@@ -22,7 +22,7 @@ out_bin = sys.argv[4]
 
 with open(tree_loader_bin, 'rb') as fin:
   tree_loader = list(fin.read())
-assert len(tree_loader) == 0x91
+assert len(tree_loader) == 0x90
 
 with open(in_bin, 'rb') as fin:
   data = list(fin.read())
@@ -196,25 +196,25 @@ tree[0x2e] = bits & 0xff
 assert tree[0x2f] == 0x18 # clc
 tree[0x2f] |= (bits >> 3) & 0x20 # clc or sec
 
-assert tree[0x60] == 0x4c # jmp NNNN
-tree[0x61] = entry_point & 0xff
-tree[0x62] = entry_point >> 8
+assert tree[0x5f] == 0x4c # jmp NNNN
+tree[0x60] = entry_point & 0xff
+tree[0x61] = entry_point >> 8
 
-assert tree[0x65] == 0xe9 # sbc #NN
-tree[0x66] = break3
-assert tree[0x67] == 0xc9 # cmp #NN
-tree[0x68] = (break1 - break3) & 0xff
+assert tree[0x64] == 0xe9 # sbc #NN
+tree[0x65] = break3
+assert tree[0x66] == 0xc9 # cmp #NN
+tree[0x67] = (break1 - break3) & 0xff
 
-assert tree[0x69] == 0xbd # lda NNNN,x
-tree[0x6a] = right1 & 0xff
-tree[0x6b] = right1 >> 8
+assert tree[0x68] == 0xbd # lda NNNN,x
+tree[0x69] = right1 & 0xff
+tree[0x6a] = right1 >> 8
 
-assert tree[0x7a] == 0xc9 # cmp #NN
-tree[0x7b] = break2
+assert tree[0x79] == 0xc9 # cmp #NN
+tree[0x7a] = break2
 
-assert tree[0x7c] == 0xbd # lda NNNN,x
-tree[0x7d] = left1 & 0xff
-tree[0x7e] = left1 >> 8
+assert tree[0x7b] == 0xbd # lda NNNN,x
+tree[0x7c] = left1 & 0xff
+tree[0x7d] = left1 >> 8
 
 tree = [0xad, 0x87, 0xc0] * 2 + tree # hack for lc
 
index daf2338..4e9bcfc 100755 (executable)
@@ -35,21 +35,21 @@ assert tree[0x2d] == 0xa9 # lda #NN
 assert tree[0x2f] & ~0x20 == 0x18 # clc
 bits = tree[0x2e] | ((tree[0x2f] & 0x20) << 3)
 
-assert tree[0x60] == 0x4c # jmp NNNN
-entry_point = tree[0x61] | (tree[0x62] << 8)
+assert tree[0x5f] == 0x4c # jmp NNNN
+entry_point = tree[0x60] | (tree[0x61] << 8)
 
-assert tree[0x65] == 0xe9 # sbc #NN
-break3 = tree[0x66]
-assert tree[0x67] == 0xc9 # cmp #NN
-break1 = (tree[0x68] + break3) & 0xff
+assert tree[0x64] == 0xe9 # sbc #NN
+break3 = tree[0x65]
+assert tree[0x66] == 0xc9 # cmp #NN
+break1 = (tree[0x67] + break3) & 0xff
 
-assert tree[0x7a] == 0xc9 # cmp #NN
-break2 = tree[0x7b]
+assert tree[0x79] == 0xc9 # cmp #NN
+break2 = tree[0x7a]
 
 assert src == load_addr0 + load_size0 - 0x200
 left = tree[-0x200:-0x100]
 right = tree[-0x100:]
-tree = [0] + tree[0x91:-0x200] # 0 is sentinel for last dummy bits load
+tree = [0] + tree[0x90:-0x200] # 0 is sentinel for last dummy bits load
 
 bin = []
 def decode(_bytes, bits):
index c51c4d3..433897f 100755 (executable)
@@ -18,7 +18,7 @@ out_bin = sys.argv[4]
 
 with open(tree_loader_bin, 'rb') as fin:
   tree_loader = list(fin.read())
-assert len(tree_loader) == 0x91
+assert len(tree_loader) == 0x90
 
 with open(in_bin, 'rb') as fin:
   data = list(fin.read())
@@ -192,25 +192,25 @@ tree[0x2e] = bits & 0xff
 assert tree[0x2f] == 0x18 # clc
 tree[0x2f] |= (bits >> 3) & 0x20 # clc or sec
 
-assert tree[0x60] == 0x4c # jmp NNNN
-tree[0x61] = entry_point & 0xff
-tree[0x62] = entry_point >> 8
+assert tree[0x5f] == 0x4c # jmp NNNN
+tree[0x60] = entry_point & 0xff
+tree[0x61] = entry_point >> 8
 
-assert tree[0x65] == 0xe9 # sbc #NN
-tree[0x66] = break3
-assert tree[0x67] == 0xc9 # cmp #NN
-tree[0x68] = (break1 - break3) & 0xff
+assert tree[0x64] == 0xe9 # sbc #NN
+tree[0x65] = break3
+assert tree[0x66] == 0xc9 # cmp #NN
+tree[0x67] = (break1 - break3) & 0xff
 
-assert tree[0x69] == 0xbd # lda NNNN,x
-tree[0x6a] = right1 & 0xff
-tree[0x6b] = right1 >> 8
+assert tree[0x68] == 0xbd # lda NNNN,x
+tree[0x69] = right1 & 0xff
+tree[0x6a] = right1 >> 8
 
-assert tree[0x7a] == 0xc9 # cmp #NN
-tree[0x7b] = break2
+assert tree[0x79] == 0xc9 # cmp #NN
+tree[0x7a] = break2
 
-assert tree[0x7c] == 0xbd # lda NNNN,x
-tree[0x7d] = left1 & 0xff
-tree[0x7e] = left1 >> 8
+assert tree[0x7b] == 0xbd # lda NNNN,x
+tree[0x7c] = left1 & 0xff
+tree[0x7d] = left1 >> 8
 
 hdr = [load_addr & 0xff, load_addr >> 8, load_size & 0xff, load_size >> 8]
 with open(out_bin, 'wb') as fout:
index 0045e9b..b91984d 100644 (file)
@@ -73,7 +73,7 @@ expand_ret0:
 1$:    dec     src
 
        lda     [src],y
-       sec
+       ;sec
        rol     a
 
        inc     count