second: more size optimization of encoding

This commit is contained in:
Vince Weaver 2023-09-27 01:24:33 -04:00
parent d1d32a7c35
commit be489d8228
3 changed files with 178 additions and 150 deletions

View File

@ -49,62 +49,59 @@ frame15:
; .byte BOX, 32,3,39,13
.byte END
frame16:
.byte SET_COLOR | WHITE
.byte BOX, 4, 6, 27,41
.byte SET_COLOR | BROWN
.byte BOX, 28, 6, 35,34
.byte 28, 6, 35,34 ; BOX
.byte SET_COLOR | GREY1
.byte BOX, 28, 19, 33, 21
.byte BOX, 28, 35, 35, 38
.byte 28, 19, 33, 21 ; BOX
.byte 28, 35, 35, 38 ; BOX
.byte HLIN, 28, 31, 18
.byte HLIN, 28, 30, 34
.byte HLIN, 33, 35, 39
.byte 28, 30, 34 ; HLIN
.byte 33, 35, 39 ; HLIN
.byte SET_COLOR | RED
.byte HLIN, 28, 32, 21
.byte 28, 32, 21 ; HLIN
.byte SET_COLOR | LIGHT_BLUE
.byte HLIN, 28, 33, 22
.byte 28, 33, 22 ; HLIN
.byte HLIN_ADD, 28, 30 ; 23
.byte END
frame17:
.byte SET_COLOR | WHITE ; 3
.byte BOX, 4, 6, 23,41 ; 8
.byte SET_COLOR | BROWN ; 9
.byte BOX, 24, 6, 35,36 ; 14
.byte SET_COLOR | GREY1 ; 15
.byte BOX, 26, 20, 32, 21 ; 20
.byte BOX, 24, 36, 30, 40 ; 25
.byte BOX, 29, 37, 35, 41 ; 30
.byte HLIN, 27, 31, 19 ; 34
.byte SET_COLOR | RED ; 35
.byte HLIN, 26, 32, 22 ; 39
.byte SET_COLOR | MEDIUM_BLUE ; 40
.byte BOX, 33, 11, 35, 17 ; 45
.byte BOX, 33, 25, 35, 30 ; 50
.byte SET_COLOR | LIGHT_BLUE ; 51
.byte HLIN, 26, 32, 23 ; 55
.byte HLIN_ADD, 27, 31 ; 24 ; 58
.byte END ; 59
.byte SET_COLOR | WHITE ; 1
.byte BOX, 4, 6, 23,41 ; 6
.byte SET_COLOR | BROWN ; 7
.byte 24, 6, 35,36 ; BOX ; 11
.byte SET_COLOR | GREY1 ; 12
.byte 26, 20, 32, 21 ; BOX ; 16
.byte 24, 36, 30, 40 ; BOX ; 20
.byte 29, 37, 35, 41 ; BOX ; 24
.byte HLIN, 27, 31, 19 ; 28
.byte SET_COLOR | RED ; 29
.byte 26, 32, 22 ; HLIN ; 32
.byte SET_COLOR | MEDIUM_BLUE ; 33
.byte BOX, 33, 11, 35, 17 ; 38
.byte 33, 25, 35, 30 ; BOX ; 42
.byte SET_COLOR | LIGHT_BLUE ; 43
.byte HLIN, 26, 32, 23 ; 47
.byte HLIN_ADD, 27, 31 ; 24 ; 50
.byte END ; 51
frame18:
.byte SET_COLOR | WHITE
.byte BOX, 4, 6, 18,41
.byte SET_COLOR | BROWN
.byte BOX, 19, 6, 35,38
.byte 19, 6, 35,38 ; BOX
.byte SET_COLOR | GREY1
.byte BOX, 27, 21, 34, 23
.byte BOX, 19, 39, 35, 41
.byte 27, 21, 34, 23 ; BOX
.byte 19, 39, 35, 41 ; BOX
.byte HLIN, 28, 31, 20
.byte HLIN, 19, 23, 37
.byte 19, 23, 37 ; HLIN
.byte HLIN_ADD, 19, 28 ; 38
.byte SET_COLOR | RED
.byte HLIN, 27, 34, 24
.byte SET_COLOR | MEDIUM_BLUE
.byte BOX, 29, 11, 32, 18
.byte BOX, 29, 27, 32, 32
.byte 29, 27, 32, 32 ; BOX
.byte SET_COLOR | LIGHT_BLUE
.byte HLIN, 27, 34, 25
.byte HLIN_ADD, 28, 33 ; 26
@ -113,25 +110,25 @@ frame19:
.byte SET_COLOR | WHITE
.byte BOX, 4, 6, 12,41
.byte SET_COLOR | BROWN
.byte BOX, 13, 6, 35,40
.byte 13, 6, 35,40 ; BOX
.byte SET_COLOR | MEDIUM_BLUE
.byte BOX, 25, 11, 28, 18
.byte BOX, 33, 11, 35, 18
.byte BOX, 25, 26, 28, 32
.byte BOX, 33, 29, 35, 33
.byte 25, 11, 28, 18 ; BOX
.byte 33, 11, 35, 18 ; BOX
.byte 25, 26, 28, 32 ; BOX
.byte 33, 29, 35, 33 ; BOX
.byte SET_COLOR | GREY1
.byte BOX, 29, 21, 35, 24
.byte 29, 21, 35, 24 ; BOX
.byte HLIN, 29, 34, 20
.byte HLIN, 13, 18, 38
.byte 13, 18, 38 ; HLIN
.byte HLIN_ADD, 13, 25 ; 39
.byte HLIN_ADD, 13, 33 ; 40
.byte HLIN_ADD, 13, 35 ; 41
.byte 13, 33 ; HLIN_ADD 40
.byte 13, 35 ; HLIN_ADD 41
.byte SET_COLOR | RED
.byte HLIN, 29, 35, 25
.byte SET_COLOR | LIGHT_BLUE
.byte HLIN_ADD, 28, 35 ; 26
.byte HLIN_ADD, 29, 35 ; 27
.byte HLIN_ADD, 30, 35 ; 28
.byte 29, 35 ; HLIN_ADD 27
.byte 30, 35 ; HLIN_ADD 28
.byte VLIN, 21, 26, 28
.byte END
@ -139,22 +136,22 @@ frame20:
.byte SET_COLOR | BROWN
.byte BOX, 4, 6, 35,41
.byte SET_COLOR | MEDIUM_BLUE
.byte BOX, 18, 9, 21, 17
.byte BOX, 26, 10, 29, 17
.byte BOX, 34, 10, 35, 17
.byte BOX, 18, 26, 21, 33
.byte BOX, 25, 26, 29, 33
.byte BOX, 34, 30, 35, 34
.byte 18, 9, 21, 17 ; BOX
.byte 26, 10, 29, 17 ; BOX
.byte 34, 10, 35, 17 ; BOX
.byte 18, 26, 21, 33 ; BOX
.byte 25, 26, 29, 33 ; BOX
.byte 34, 30, 35, 34 ; BOX
.byte SET_COLOR | LIGHT_BLUE
.byte BOX, 31, 21, 35, 27
.byte 31, 21, 35, 27 ; BOX
.byte HLIN, 32, 35, 20
.byte HLIN, 34, 35, 29
.byte 34, 35, 29 ; HLIN
.byte SET_COLOR | GREY1
.byte BOX, 34, 22, 35, 28
.byte HLIN, 32, 35, 24
.byte HLIN, 4,6,39
.byte 4,6,39 ; HLIN
.byte HLIN_ADD, 4,19 ; 40
.byte HLIN_ADD, 4,29 ; 41
.byte 4,29 ; HLIN_ADD 41
.byte SET_COLOR | RED
.byte HLIN, 34, 35, 26
.byte SET_COLOR | ORANGE
@ -165,20 +162,20 @@ frame21:
.byte SET_COLOR | BROWN
.byte BOX, 4, 6, 35, 41
.byte SET_COLOR | MEDIUM_BLUE
.byte BOX, 7, 7, 11, 16
.byte BOX, 16, 8, 20, 16
.byte BOX, 25, 9, 28, 17
.byte BOX, 33, 9, 35, 17
.byte BOX, 7, 25, 11, 34
.byte BOX, 16,26, 20, 34
.byte BOX, 25,26, 28, 34
.byte BOX, 33,28, 35, 33
.byte 7, 7, 11, 16 ; BOX
.byte 16, 8, 20, 16 ; BOX
.byte 25, 9, 28, 17 ; BOX
.byte 33, 9, 35, 17 ; BOX
.byte 7, 25, 11, 34 ; BOX
.byte 16,26, 20, 34 ; BOX
.byte 25,26, 28, 34 ; BOX
.byte 33,28, 35, 33 ; BOX
.byte SET_COLOR | GREY1
.byte BOX, 32,20,35,21
.byte 32,20,35,21 ; BOX
.byte SET_COLOR | LIGHT_BLUE
.byte BOX, 31, 22, 35,26
.byte 31, 22, 35,26 ; BOX
.byte HLIN, 33, 35, 21
.byte HLIN, 32, 35, 27
.byte 32, 35, 27 ; HLIN
.byte SET_COLOR | GREY1
.byte BOX, 33,23,35,24
.byte SET_COLOR | ORANGE
@ -189,22 +186,22 @@ frame22:
.byte SET_COLOR | GREY1
.byte BOX, 4,6,31,41
.byte SET_COLOR | BROWN
.byte BOX, 32, 6, 35, 32
.byte 32, 6, 35, 32 ; BOX
.byte SET_COLOR | MEDIUM_BLUE
.byte BOX, 4, 6, 5, 14
.byte BOX, 12, 7, 15, 15
.byte BOX, 20, 8, 23, 16
.byte BOX, 4, 25, 5, 35
.byte BOX, 11,25, 15, 34
.byte BOX, 20,25, 22, 33
.byte 4, 6, 5, 14 ; BOX
.byte 12, 7, 15, 15 ; BOX
.byte 20, 8, 23, 16 ; BOX
.byte 4, 25, 5, 35 ; BOX
.byte 11,25, 15, 34 ; BOX
.byte 20,25, 22, 33 ; BOX
.byte SET_COLOR | GREY1
.byte BOX, 32,22,35,25
.byte BOX, 32,32,33,41
.byte BOX, 34,33,35,41
.byte 32,22,35,25 ; BOX
.byte 32,32,33,41 ; BOX
.byte 34,33,35,41 ; BOX
.byte SET_COLOR | LIGHT_BLUE
.byte BOX, 30,20,33,21
.byte 30,20,33,21 ; BOX
.byte 30,24,31,26 ; BOX
.byte HLIN, 30,31,19
.byte BOX, 30,24,31,26
.byte PLOT, 32,25
.byte SET_COLOR | ORANGE
.byte HLIN, 33,34,24
@ -217,7 +214,7 @@ frame22:
.byte PLOT, 31,22
.byte SET_COLOR | BLACK
.byte BOX, 31,34, 33,35
.byte BOX, 32,35, 35,36
.byte 32,35, 35,36 ; BOX
.byte HLIN, 34,35,37
.byte END
@ -226,29 +223,29 @@ frame23:
.byte SET_COLOR | GREY1
.byte BOX, 4,6,18,41
.byte SET_COLOR | BROWN
.byte BOX, 19, 6, 34, 35
.byte 19, 6, 34, 35 ; BOX
.byte SET_COLOR | MEDIUM_BLUE
.byte BOX, 7, 6, 9, 15
.byte BOX, 6,26, 9, 34
.byte 7, 6, 9, 15 ; BOX
.byte 6,26, 9, 34 ; BOX
.byte SET_COLOR | GREY1
.byte 20,32,23,41 ; BOX
.byte 24,33,25,41 ; BOX
.byte 26,34,29,41 ; BOX
.byte 30,35,32,41 ; BOX
.byte 33,36,35,41 ; BOX
.byte VLIN, 20,41,19
.byte BOX, 20,32,23,41
.byte BOX, 24,33,25,41
.byte BOX, 26,34,29,41
.byte BOX, 30,35,32,41
.byte BOX, 33,36,35,41
.byte VLIN, 26,35,34
.byte VLIN, 6,35,35
.byte 26,35,34 ; VLIN
.byte 6,35,35 ; VLIN
.byte SET_COLOR | LIGHT_BLUE
.byte BOX, 24,19,25,24
.byte 31,20,33,25 ; BOX
.byte VLIN, 21,22,26
.byte BOX, 31,20,33,25
.byte PLOT, 32,19
.byte SET_COLOR | GREY1
.byte VLIN, 17,23,24
.byte BOX, 27,21, 31,23
.byte PLOT, 24,17
.byte PLOT, 31,20
.byte 31,20 ; PLOT
.byte SET_COLOR | ORANGE
.byte HLIN, 28,29,22
.byte SET_COLOR | RED
@ -256,64 +253,64 @@ frame23:
.byte HLIN, 32,33,23
.byte SET_COLOR | BLACK
.byte BOX, 18,33,20,35
.byte BOX, 20,34,22,36
.byte BOX, 23,35,25,37
.byte BOX, 25,36,27,38
.byte BOX, 27,37,30,39
.byte BOX, 29,38,32,40
.byte BOX, 31,39,35,41
.byte 20,34,22,36 ; BOX
.byte 23,35,25,37 ; BOX
.byte 25,36,27,38 ; BOX
.byte 27,37,30,39 ; BOX
.byte 29,38,32,40 ; BOX
.byte 31,39,35,41 ; BOX
.byte END
frame24:
.byte SET_COLOR | WHITE
.byte BOX, 4,6,10,41
.byte BOX, 28,6,35,24
.byte BOX, 27,25,35,35
.byte 28,6,35,24 ; BOX
.byte 27,25,35,35 ; BOX
.byte SET_COLOR | BROWN
.byte BOX, 11,6,27,18
.byte BOX, 11,19,26,31
.byte BOX, 15,32,26,34
.byte 11,6,27,18 ; BOX
.byte 11,19,26,31 ; BOX
.byte 15,32,26,34 ; BOX
.byte HLIN,25,26,35
.byte VLIN,6,15,34
.byte VLIN,16,32,33
.byte 16,32,33 ; VLIN
.byte SET_COLOR | GREY1
.byte HLIN,11,14,32
.byte HLIN_ADD,11,18 ; 33
.byte HLIN_ADD,14,21 ; 34
.byte HLIN_ADD,17,24 ; 35
.byte HLIN_ADD,19,34 ; 36
.byte HLIN_ADD,22,34 ; 37
.byte HLIN_ADD,25,32 ; 38
.byte HLIN_ADD,28,31 ; 39
.byte 14,21 ; HLIN_ADD 34
.byte 17,24 ; HLIN_ADD 35
.byte 19,34 ; HLIN_ADD 36
.byte 22,34 ; HLIN_ADD 37
.byte 25,32 ; HLIN_ADD 38
.byte 28,31 ; HLIN_ADD 39
.byte HLIN,11,13,37
.byte HLIN_ADD,11,16 ; 38
.byte HLIN_ADD,11,18 ; 39
.byte HLIN_ADD,11,21 ; 40
.byte HLIN_ADD,11,22 ; 41
.byte 11,18 ; HLIN_ADD 39
.byte 11,21 ; HLIN_ADD 40
.byte 11,22 ; HLIN_ADD 41
.byte HLIN,34,35,32
.byte HLIN_ADD,32,35 ; 33
.byte HLIN_ADD,31,35 ; 34
.byte 31,35 ; HLIN_ADD 34
.byte HLIN,29,35,35
.byte BOX,20,18,22,22
.byte BOX,23,20,27,21
.byte 23,20,27,21 ; BOX
.byte HLIN,20,21,17
.byte PLOT,26,19
.byte PLOT,27,23
.byte 27,23 ; PLOT
.byte SET_COLOR | LIGHT_BLUE
.byte HLIN,23,25,22
.byte HLIN_ADD,20,22 ; 23
.byte HLIN_ADD,27,28 ; 24
.byte 27,28 ; HLIN_ADD 24
.byte VLIN,19,21,22
.byte VLIN,20,23,28
.byte 20,23,28 ; VLIN
.byte PLOT,27,19
.byte PLOT,26,23
.byte 26,23 ; PLOT
.byte SET_COLOR | ORANGE
.byte PLOT,24,21
.byte 24,21 ; PLOT
.byte SET_COLOR | RED
.byte PLOT, 28,22
.byte 28,22 ; PLOT
.byte HLIN, 20,21,20
.byte SET_COLOR | DARK_BLUE
.byte HLIN,26,27,22
.byte 26,27,22 ; HLIN
.byte END
frame25:

View File

@ -10,16 +10,16 @@
; data in INL/INH
SET_COLOR = $80
END = $00
CLEAR = $01
BOX = $02
HLIN = $03
VLIN = $04
PLOT = $05
HLIN_ADD= $06
HLIN_ADD_LSAME= $07
HLIN_ADD_RSAME= $08
SET_COLOR = $C0
END = $80
CLEAR = $81
BOX = $82
HLIN = $83
VLIN = $84
PLOT = $85
HLIN_ADD= $86
HLIN_ADD_LSAME= $87
HLIN_ADD_RSAME= $88
BLACK = $00
RED = $01
@ -41,6 +41,13 @@ WHITE = $0f
; top bit not set, command
; top bit set, repeat last command
; 11xx xxxx
; 00 = co-ord
; 10 = new command
; 11 = new-color
draw_scene:
lda #0 ; always clear to black
@ -49,13 +56,27 @@ draw_scene:
draw_scene_loop:
ldy #0
lda (INL),Y ; load next byte
lda (INL),Y
bmi set_color
beq done_scene
bpl repeat_last ; if top bit 0, repeat last
; command
asl ; clear top bit
beq done_scene ; if 0, END
bmi set_color ; if negative, color
lsr ; shift back down
sta LAST_TYPE ; store last type
jsr inc_inl
repeat_last:
lda LAST_TYPE
; iny ; point to next byte
; use jump table for rest
and #$7f
and #$3f
tax
dex ; types start at 1
lda draw_table_h,X
@ -74,6 +95,7 @@ really_done_scene:
set_color:
; make top and bottom byte the same
lsr ; shift back down
and #$f
sta COLOR
asl
@ -84,7 +106,7 @@ set_color:
sta COLOR
lda #1 ; we were one byte long
bne update_pointer
; bne update_pointer
; adds A to input pointer and continues
@ -115,7 +137,7 @@ draw_table_h:
;=================================
clear_screen:
jsr clear_fullgr
lda #1
lda #0
jmp update_pointer
;=================================
@ -135,7 +157,7 @@ clear_screen:
; 3/4 case, 2 to 1 (!)
; 3/6 case, 2 to 2
draw_box:
iny
; iny
lda (INL),Y
sta X1
iny
@ -224,7 +246,7 @@ done_draw_box_yloop:
definitely_odd_bottom:
; done
lda #5
lda #4
jmp update_pointer
@ -235,7 +257,7 @@ definitely_odd_bottom:
;=================================
draw_hlin:
iny ; FIXME: move to common code
; iny ; FIXME: move to common code
lda (INL),Y
sta X1
iny
@ -257,7 +279,7 @@ do_hlin_mask_odd:
; done
hlin_done:
lda #4
lda #3
jmp update_pointer
@ -270,7 +292,7 @@ hlin_done:
; increment Y1
draw_hlin_add:
iny ; FIXME: move to common code
; iny ; FIXME: move to common code
lda (INL),Y
sta X1
iny
@ -293,7 +315,7 @@ do_hlin_add_mask_odd:
; done
hlin_add_done:
lda #3
lda #2
jmp update_pointer
@ -306,7 +328,7 @@ hlin_add_done:
; use old left value
draw_hlin_add_lsame:
iny ; FIXME: move to common code
; iny ; FIXME: move to common code
lda (INL),Y
sta X2
@ -326,7 +348,7 @@ do_hlin_add_lsame_mask_odd:
; done
hlin_add_lsame_done:
lda #2
lda #1
jmp update_pointer
@ -339,7 +361,7 @@ hlin_add_lsame_done:
; use old right value
draw_hlin_add_rsame:
iny ; FIXME: move to common code
; iny ; FIXME: move to common code
lda (INL),Y
sta X1
@ -359,7 +381,7 @@ do_hlin_add_rsame_mask_odd:
; done
hlin_add_rsame_done:
lda #2
lda #1
jmp update_pointer
@ -371,7 +393,7 @@ hlin_add_rsame_done:
;=================================
;=================================
draw_vlin:
iny
; iny
lda (INL),Y
sta Y1
iny
@ -455,7 +477,7 @@ done_vlin_yloop:
definitely_odd_vlin:
; done
lda #4
lda #3
jmp update_pointer
@ -465,7 +487,7 @@ definitely_odd_vlin:
;=================================
;=================================
draw_plot:
iny
; iny
lda (INL),Y
sta X1
@ -488,7 +510,7 @@ plot_done:
; done
lda #3
lda #2
jmp update_pointer
@ -577,6 +599,14 @@ plot_s_smc:
rts
; inline this?
inc_inl:
inc INL
bne done_inc_inl
inc INH
done_inc_inl:
rts
.include "gr_fast_clear.s"
gr_offsets_l:

View File

@ -149,6 +149,7 @@ HGR_COLOR = $E4
;NAMEX = $EB
;CHAR = $EC
LAST_TYPE = $E6
COLOR2 = $E7
X1 = $E8
X2 = $E9