1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-08-02 09:29:35 +00:00

Fixed loop detection problem.

This commit is contained in:
jespergravgaard 2018-04-01 12:32:45 +02:00
parent 10fd6ff19a
commit 91589327e3
12 changed files with 11124 additions and 10369 deletions

View File

@ -64,7 +64,21 @@ public class Pass3LoopAnalysis extends Pass2Base {
getLog().append("Populated: " + loop.toString());
}
// Coalesce loops that are neither nested, nor disjoint
boolean coalesceMore = true;
while(coalesceMore) {
coalesceMore = coalesceLoops(loopSet);
}
getProgram().setLoopSet(loopSet);
}
/**
* Coalesce loops that are neither nested, nor disjoint
* @param loopSet The set of loops
* @return true if there might be more loops to coalesce - meaning the coalescer shoulbe be called again.
* false if no loops can be coalesced.
*/
private boolean coalesceLoops(NaturalLoopSet loopSet) {
for(NaturalLoop loop : loopSet.getLoops()) {
Set<NaturalLoop> headLoops = loopSet.getLoopsFromHead(loop.getHead());
for(NaturalLoop other : headLoops) {
@ -80,11 +94,11 @@ public class Pass3LoopAnalysis extends Pass2Base {
loop.addBlocks(other.getBlocks());
loopSet.remove(other);
getLog().append("Coalesced: " + loop.toString());
return true;
}
}
}
getProgram().setLoopSet(loopSet);
return false;
}

View File

@ -48,12 +48,7 @@ public class TestPrograms {
@Test
public void testLoopProblem2() throws IOException, URISyntaxException {
try {
compileAndCompare("loop-problem2");
} catch(ConcurrentModificationException e) {
return;
}
fail("Exception expected!");
}
@Test

View File

@ -125,6 +125,9 @@ void menu() {
}
// The value of the DTV control register
byte dtv_control = 0;
// Allow the user to control the DTV graphics using different keys
void mode_ctrl() {
while(true) {
@ -134,19 +137,7 @@ void mode_ctrl() {
if(keyboard_key_pressed(KEY_SPACE)!=0) {
return;
}
mode_ctrl_keys();
}
}
// The value of the DTV control register
byte dtv_control = 0;
void mode_ctrl_keys() {
// Read the current control byte
if(dtv_control==$ff) {
*BORDERCOL = 2;
} else {
*BORDERCOL = dtv_control;
byte ctrl = dtv_control;
// Test for control keys
if(keyboard_key_pressed(KEY_L)!=0) {
@ -177,6 +168,7 @@ void mode_ctrl_keys() {
// DTV Graphics Mode - Reset
ctrl = 0;
}
// If the control byte is modified - write it
if(ctrl != dtv_control) {
dtv_control = ctrl;
*DTV_CONTROL = ctrl;
@ -185,6 +177,7 @@ void mode_ctrl_keys() {
}
}
// Standard Character Mode (LINEAR/HICOL/CHUNK/COLDIS/ECM/MCM/BMM = 0)
// Resolution: 320x200
// Normal VIC Adressing:

View File

@ -14,7 +14,7 @@ void print_cls() {
void mode_ctrl() {
while(true) {
byte before = 0;
byte before = *BORDERCOL;
if(before==$ff) {
*BORDERCOL = 2;
} else {

View File

@ -76,6 +76,7 @@
.const KEY_2 = $3b
.const KEY_SPACE = $3c
.label print_char_cursor = 5
.label dtv_control = 2
.label print_line_cursor = $d
jsr main
main: {
@ -86,7 +87,8 @@ main: {
sta PROCPORT
lda #DTV_FEATURE_ENABLE
sta DTV_FEATURE
ldx #0
lda #0
sta dtv_control
b2:
jsr menu
jmp b2
@ -94,7 +96,7 @@ main: {
menu: {
.label SCREEN = $8000
.label CHARSET = $9800
.label c = 2
.label c = 3
lda #($ffffffff&CHARSET)/$10000
sta DTV_GRAPHICS_VIC_BANK
lda #DTV_COLOR_BANK_DEFAULT/$400
@ -112,12 +114,12 @@ menu: {
sta VIC_CONTROL2
lda #(SCREEN&$3fff)/$40|(CHARSET&$3fff)/$400
sta VIC_MEMORY
ldy #0
ldx #0
b1:
lda DTV_PALETTE_DEFAULT,y
sta DTV_PALETTE,y
iny
cpy #$10
lda DTV_PALETTE_DEFAULT,x
sta DTV_PALETTE,x
inx
cpx #$10
bne b1
lda #<COLS
sta c
@ -237,8 +239,8 @@ mode_8bppchunkybmm: {
.const PLANEB = $20000
.label _23 = $d
.label gfxb = 5
.label x = 2
.label y = 4
.label x = 3
.label y = 2
lda #DTV_HIGHCOLOR|DTV_LINEAR|DTV_CHUNKY|DTV_COLORRAM_OFF
sta DTV_CONTROL
lda #VIC_ECM|VIC_DEN|VIC_RSEL|3
@ -322,7 +324,8 @@ mode_8bppchunkybmm: {
bne b2
lda #$4000/$4000
jsr dtvSetCpuBankSegment1
ldx #DTV_HIGHCOLOR|DTV_LINEAR|DTV_CHUNKY|DTV_COLORRAM_OFF
lda #DTV_HIGHCOLOR|DTV_LINEAR|DTV_CHUNKY|DTV_COLORRAM_OFF
sta dtv_control
jsr mode_ctrl
rts
}
@ -340,83 +343,67 @@ mode_ctrl: {
beq b7
jmp breturn
b7:
jsr mode_ctrl_keys
jmp b4
}
mode_ctrl_keys: {
.label ctrl = 4
cpx #$ff
bne b1
lda #2
sta BORDERCOL
breturn:
rts
b1:
stx BORDERCOL
stx ctrl
ldx dtv_control
ldy #KEY_L
jsr keyboard_key_pressed
cmp #0
beq b3
lda #DTV_LINEAR
ora ctrl
sta ctrl
b3:
beq b8
txa
ora #DTV_LINEAR
tax
b8:
ldy #KEY_H
jsr keyboard_key_pressed
cmp #0
beq b4
lda #DTV_HIGHCOLOR
ora ctrl
sta ctrl
b4:
beq b9
txa
ora #DTV_HIGHCOLOR
tax
b9:
ldy #KEY_O
jsr keyboard_key_pressed
cmp #0
beq b5
lda #DTV_OVERSCAN
ora ctrl
sta ctrl
b5:
beq b10
txa
ora #DTV_OVERSCAN
tax
b10:
ldy #KEY_B
jsr keyboard_key_pressed
cmp #0
beq b6
lda #DTV_BORDER_OFF
ora ctrl
sta ctrl
b6:
beq b11
txa
ora #DTV_BORDER_OFF
tax
b11:
ldy #KEY_U
jsr keyboard_key_pressed
cmp #0
beq b7
lda #DTV_CHUNKY
ora ctrl
sta ctrl
b7:
beq b12
txa
ora #DTV_CHUNKY
tax
b12:
ldy #KEY_C
jsr keyboard_key_pressed
cmp #0
beq b8
lda #DTV_COLORRAM_OFF
ora ctrl
sta ctrl
b8:
beq b13
txa
ora #DTV_COLORRAM_OFF
tax
b13:
ldy #KEY_0
jsr keyboard_key_pressed
cmp #0
beq b9
lda #0
sta ctrl
b9:
cpx ctrl
beq breturn
ldx ctrl
txa
sta DTV_CONTROL
txa
sta BORDERCOL
jmp breturn
beq b14
ldx #0
b14:
cpx dtv_control
beq b4
stx dtv_control
stx DTV_CONTROL
stx BORDERCOL
jmp b4
}
keyboard_key_pressed: {
.label colidx = 7
@ -452,14 +439,14 @@ mode_8bpppixelcell: {
.label PLANEA = $3c00
.label PLANEB = $4000
.label _14 = 7
.label gfxa = 2
.label ay = 4
.label gfxa = 3
.label ay = 2
.label bits = 8
.label chargen = 2
.label chargen = 3
.label gfxb = 5
.label col = 9
.label cr = 7
.label ch = 4
.label ch = 2
lda #DTV_HIGHCOLOR|DTV_LINEAR|DTV_CHUNKY
sta DTV_CONTROL
lda #VIC_ECM|VIC_DEN|VIC_RSEL|3
@ -581,7 +568,8 @@ mode_8bpppixelcell: {
bne b4
lda #PROCPORT_RAM_IO
sta PROCPORT
ldx #DTV_HIGHCOLOR|DTV_LINEAR|DTV_CHUNKY
lda #DTV_HIGHCOLOR|DTV_LINEAR|DTV_CHUNKY
sta dtv_control
jsr mode_ctrl
rts
}
@ -589,12 +577,12 @@ mode_sixsfred: {
.label PLANEA = $4000
.label PLANEB = $6000
.label COLORS = $8000
.label col = 2
.label cy = 4
.label gfxa = 2
.label ay = 4
.label gfxb = 2
.label by = 4
.label col = 3
.label cy = 2
.label gfxa = 3
.label ay = 2
.label gfxb = 3
.label by = 2
lda #DTV_HIGHCOLOR|DTV_LINEAR
sta DTV_CONTROL
lda #VIC_ECM|VIC_BMM|VIC_DEN|VIC_RSEL|3
@ -712,7 +700,8 @@ mode_sixsfred: {
lda by
cmp #$c8
bne b6
ldx #DTV_HIGHCOLOR|DTV_LINEAR
lda #DTV_HIGHCOLOR|DTV_LINEAR
sta dtv_control
jsr mode_ctrl
rts
row_bitmask: .byte 0, $55, $aa, $ff
@ -722,12 +711,12 @@ mode_twoplanebitmap: {
.label PLANEB = $6000
.label COLORS = $8000
.label _16 = 7
.label col = 2
.label cy = 4
.label gfxa = 2
.label ay = 4
.label gfxb = 2
.label by = 4
.label col = 3
.label cy = 2
.label gfxa = 3
.label ay = 2
.label gfxb = 3
.label by = 2
lda #DTV_HIGHCOLOR|DTV_LINEAR
sta DTV_CONTROL
lda #VIC_ECM|VIC_BMM|VIC_DEN|VIC_RSEL|3
@ -856,7 +845,8 @@ mode_twoplanebitmap: {
lda by
cmp #$c8
bne b8
ldx #DTV_HIGHCOLOR|DTV_LINEAR
lda #DTV_HIGHCOLOR|DTV_LINEAR
sta dtv_control
jsr mode_ctrl
rts
b6:
@ -874,12 +864,12 @@ mode_sixsfred2: {
.label PLANEB = $6000
.label COLORS = $8000
.label _15 = 7
.label col = 2
.label cy = 4
.label gfxa = 2
.label ay = 4
.label gfxb = 2
.label by = 4
.label col = 3
.label cy = 2
.label gfxa = 3
.label ay = 2
.label gfxb = 3
.label by = 2
lda #DTV_LINEAR
sta DTV_CONTROL
lda #VIC_ECM|VIC_BMM|VIC_DEN|VIC_RSEL|3
@ -1003,7 +993,8 @@ mode_sixsfred2: {
lda by
cmp #$c8
bne b6
ldx #DTV_LINEAR
lda #DTV_LINEAR
sta dtv_control
jsr mode_ctrl
rts
row_bitmask: .byte 0, $55, $aa, $ff
@ -1013,9 +1004,9 @@ mode_hicolmcchar: {
.label CHARSET = $9000
.label COLORS = $8400
.label _26 = 7
.label col = 2
.label col = 3
.label ch = 5
.label cy = 4
.label cy = 2
lda #($ffffffff&CHARSET)/$10000
sta DTV_GRAPHICS_VIC_BANK
lda #COLORS/$400
@ -1091,7 +1082,8 @@ mode_hicolmcchar: {
lda cy
cmp #$19
bne b2
ldx #DTV_HIGHCOLOR
lda #DTV_HIGHCOLOR
sta dtv_control
jsr mode_ctrl
rts
}
@ -1100,9 +1092,9 @@ mode_hicolecmchar: {
.label CHARSET = $9000
.label COLORS = $8400
.label _26 = 7
.label col = 2
.label col = 3
.label ch = 5
.label cy = 4
.label cy = 2
lda #($ffffffff&CHARSET)/$10000
sta DTV_GRAPHICS_VIC_BANK
lda #COLORS/$400
@ -1180,7 +1172,8 @@ mode_hicolecmchar: {
lda cy
cmp #$19
bne b2
ldx #DTV_HIGHCOLOR
lda #DTV_HIGHCOLOR
sta dtv_control
jsr mode_ctrl
rts
}
@ -1189,9 +1182,9 @@ mode_hicolstdchar: {
.label CHARSET = $9000
.label COLORS = $8400
.label _25 = 7
.label col = 2
.label col = 3
.label ch = 5
.label cy = 4
.label cy = 2
lda #($ffffffff&CHARSET)/$10000
sta DTV_GRAPHICS_VIC_BANK
lda #COLORS/$400
@ -1262,7 +1255,8 @@ mode_hicolstdchar: {
lda cy
cmp #$19
bne b2
ldx #DTV_HIGHCOLOR
lda #DTV_HIGHCOLOR
sta dtv_control
jsr mode_ctrl
rts
}
@ -1271,9 +1265,9 @@ mode_stdbitmap: {
.label BITMAP = $6000
.const lines_cnt = 9
.label col2 = 7
.label ch = 2
.label cy = 4
.label l = 4
.label ch = 3
.label cy = 2
.label l = 2
lda #($ffffffff&BITMAP)/$10000
sta DTV_GRAPHICS_VIC_BANK
lda #0
@ -1355,7 +1349,8 @@ mode_stdbitmap: {
lda l
cmp #lines_cnt
bcc b4
ldx #0
lda #0
sta dtv_control
jsr mode_ctrl
rts
lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80
@ -1492,8 +1487,8 @@ bitmap_line_ydxi: {
rts
}
bitmap_plot: {
.label _0 = 2
.label plotter_x = 2
.label _0 = 3
.label plotter_x = 3
.label plotter_y = 5
lda bitmap_plot_xhi,x
sta plotter_x+1
@ -1617,9 +1612,9 @@ bitmap_line_xdyd: {
rts
}
bitmap_clear: {
.label bitmap = 2
.label y = 4
.label _3 = 2
.label bitmap = 3
.label y = 2
.label _3 = 3
lda bitmap_plot_xlo+0
sta _3
lda bitmap_plot_xhi+0
@ -1646,8 +1641,8 @@ bitmap_clear: {
rts
}
bitmap_init: {
.label _6 = 4
.label yoffs = 2
.label _6 = 2
.label yoffs = 3
ldy #$80
ldx #0
b1:
@ -1703,9 +1698,9 @@ mode_mcchar: {
.label CHARSET = $9000
.label COLORS = $d800
.label _28 = 7
.label col = 2
.label col = 3
.label ch = 5
.label cy = 4
.label cy = 2
lda #($ffffffff&CHARSET)/$10000
sta DTV_GRAPHICS_VIC_BANK
lda #DTV_COLOR_BANK_DEFAULT/$400
@ -1784,7 +1779,8 @@ mode_mcchar: {
lda cy
cmp #$19
bne b2
ldx #0
lda #0
sta dtv_control
jsr mode_ctrl
rts
}
@ -1793,9 +1789,9 @@ mode_ecmchar: {
.label CHARSET = $9000
.label COLORS = $d800
.label _28 = 7
.label col = 2
.label col = 3
.label ch = 5
.label cy = 4
.label cy = 2
lda #($ffffffff&CHARSET)/$10000
sta DTV_GRAPHICS_VIC_BANK
lda #DTV_COLOR_BANK_DEFAULT/$400
@ -1875,7 +1871,8 @@ mode_ecmchar: {
lda cy
cmp #$19
bne b2
ldx #0
lda #0
sta dtv_control
jsr mode_ctrl
rts
}
@ -1884,9 +1881,9 @@ mode_stdchar: {
.label CHARSET = $9000
.label COLORS = $d800
.label _27 = 7
.label col = 2
.label col = 3
.label ch = 5
.label cy = 4
.label cy = 2
lda #($ffffffff&CHARSET)/$10000
sta DTV_GRAPHICS_VIC_BANK
lda #DTV_COLOR_BANK_DEFAULT/$400
@ -1960,12 +1957,13 @@ mode_stdchar: {
lda cy
cmp #$19
bne b2
ldx #0
lda #0
sta dtv_control
jsr mode_ctrl
rts
}
print_str_lines: {
.label str = 2
.label str = 3
lda #<menu.SCREEN
sta print_line_cursor
lda #>menu.SCREEN
@ -2029,7 +2027,7 @@ print_ln: {
rts
}
print_cls: {
.label sc = 2
.label sc = 3
lda #<menu.SCREEN
sta sc
lda #>menu.SCREEN

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
(label) @43
(label) @42
(label) @begin
(label) @end
(byte*) BGCOL
@ -154,26 +154,26 @@
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(void()) bitmap_clear()
(word~) bitmap_clear::$3 $3 zp ZP_WORD:2 2.0
(word~) bitmap_clear::$3 $3 zp ZP_WORD:3 2.0
(label) bitmap_clear::@1
(label) bitmap_clear::@2
(label) bitmap_clear::@3
(label) bitmap_clear::@return
(byte*) bitmap_clear::bitmap
(byte*) bitmap_clear::bitmap#1 bitmap zp ZP_WORD:2 420.59999999999997
(byte*) bitmap_clear::bitmap#2 bitmap zp ZP_WORD:2 1552.0
(byte*) bitmap_clear::bitmap#3 bitmap zp ZP_WORD:2 204.0
(byte*~) bitmap_clear::bitmap#5 bitmap zp ZP_WORD:2 4.0
(byte*) bitmap_clear::bitmap#1 bitmap zp ZP_WORD:3 420.59999999999997
(byte*) bitmap_clear::bitmap#2 bitmap zp ZP_WORD:3 1552.0
(byte*) bitmap_clear::bitmap#3 bitmap zp ZP_WORD:3 204.0
(byte*~) bitmap_clear::bitmap#5 bitmap zp ZP_WORD:3 4.0
(byte) bitmap_clear::x
(byte) bitmap_clear::x#1 reg byte x 1501.5
(byte) bitmap_clear::x#2 reg byte x 667.3333333333334
(byte) bitmap_clear::y
(byte) bitmap_clear::y#1 y zp ZP_BYTE:4 151.5
(byte) bitmap_clear::y#4 y zp ZP_BYTE:4 33.666666666666664
(byte) bitmap_clear::y#1 y zp ZP_BYTE:2 151.5
(byte) bitmap_clear::y#4 y zp ZP_BYTE:2 33.666666666666664
(void()) bitmap_init((byte*) bitmap_init::bitmap)
(byte~) bitmap_init::$0 reg byte a 202.0
(byte~) bitmap_init::$10 reg byte a 202.0
(byte~) bitmap_init::$6 $6 zp ZP_BYTE:4 101.0
(byte~) bitmap_init::$6 $6 zp ZP_BYTE:2 101.0
(byte~) bitmap_init::$7 reg byte a 202.0
(byte~) bitmap_init::$8 reg byte a 202.0
(byte~) bitmap_init::$9 reg byte a 202.0
@ -196,9 +196,9 @@
(byte) bitmap_init::y#1 reg byte x 151.5
(byte) bitmap_init::y#2 reg byte x 55.090909090909086
(byte*) bitmap_init::yoffs
(byte*) bitmap_init::yoffs#1 yoffs zp ZP_WORD:2 202.0
(byte*) bitmap_init::yoffs#2 yoffs zp ZP_WORD:2 56.11111111111111
(byte*) bitmap_init::yoffs#4 yoffs zp ZP_WORD:2 101.0
(byte*) bitmap_init::yoffs#1 yoffs zp ZP_WORD:3 202.0
(byte*) bitmap_init::yoffs#2 yoffs zp ZP_WORD:3 56.11111111111111
(byte*) bitmap_init::yoffs#4 yoffs zp ZP_WORD:3 101.0
(void()) bitmap_line((byte) bitmap_line::x0 , (byte) bitmap_line::x1 , (byte) bitmap_line::y0 , (byte) bitmap_line::y1)
(label) bitmap_line::@1
(label) bitmap_line::@10
@ -384,12 +384,12 @@
(byte) bitmap_line_ydxi::yd#1 yd zp ZP_BYTE:8 2.0
(byte) bitmap_line_ydxi::yd#5 yd zp ZP_BYTE:8 143.28571428571428
(void()) bitmap_plot((byte) bitmap_plot::x , (byte) bitmap_plot::y)
(word~) bitmap_plot::$0 $0 zp ZP_WORD:2 1.0
(word~) bitmap_plot::$0 $0 zp ZP_WORD:3 1.0
(byte~) bitmap_plot::$1 reg byte a 4.0
(label) bitmap_plot::@return
(byte*) bitmap_plot::plotter
(word) bitmap_plot::plotter_x
(word) bitmap_plot::plotter_x#0 plotter_x zp ZP_WORD:2 2.0
(word) bitmap_plot::plotter_x#0 plotter_x zp ZP_WORD:3 2.0
(word) bitmap_plot::plotter_y
(word) bitmap_plot::plotter_y#0 plotter_y zp ZP_WORD:5 4.0
(byte) bitmap_plot::x
@ -422,12 +422,11 @@
(byte) dtvSetCpuBankSegment1::cpuBankIdx#1 reg byte a 2002.0
(byte) dtvSetCpuBankSegment1::cpuBankIdx#3 reg byte a 1003.0
(byte) dtv_control
(byte) dtv_control#1 reg byte x 1.2727272727272727
(byte) dtv_control#119 reg byte x 1.4946236559139783
(byte) dtv_control#153 reg byte x 2.0
(byte) dtv_control#18 reg byte x 1.3333333333333333
(byte) dtv_control#19 reg byte x 35.66666666666666
(byte) dtv_control#3 reg byte x 45.3333333333333
(byte) dtv_control#1 dtv_control zp ZP_BYTE:2 1.2727272727272727
(byte) dtv_control#114 dtv_control zp ZP_BYTE:2 24.19318181818182
(byte) dtv_control#145 dtv_control zp ZP_BYTE:2 2.0
(byte) dtv_control#17 dtv_control zp ZP_BYTE:2 67.33333333333333
(byte) dtv_control#3 dtv_control zp ZP_BYTE:2 45.3333333333333
(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
(byte~) keyboard_key_pressed::$2 reg byte a 4.0
(label) keyboard_key_pressed::@2
@ -437,20 +436,20 @@
(byte) keyboard_key_pressed::key
(byte) keyboard_key_pressed::key#20 reg byte y 2.0
(byte) keyboard_key_pressed::return
(byte) keyboard_key_pressed::return#0 reg byte a 60.40909090909094
(byte) keyboard_key_pressed::return#0 reg byte a 419.1818181818182
(byte) keyboard_key_pressed::return#10 reg byte a 202.0
(byte) keyboard_key_pressed::return#11 reg byte a 202.0
(byte) keyboard_key_pressed::return#12 reg byte a 202.0
(byte) keyboard_key_pressed::return#13 reg byte a 202.0
(byte) keyboard_key_pressed::return#14 reg byte a 202.0
(byte) keyboard_key_pressed::return#15 reg byte a 4.0
(byte) keyboard_key_pressed::return#16 reg byte a 4.0
(byte) keyboard_key_pressed::return#17 reg byte a 4.0
(byte) keyboard_key_pressed::return#18 reg byte a 4.0
(byte) keyboard_key_pressed::return#19 reg byte a 4.0
(byte) keyboard_key_pressed::return#14 reg byte a 2002.0
(byte) keyboard_key_pressed::return#15 reg byte a 2002.0
(byte) keyboard_key_pressed::return#16 reg byte a 2002.0
(byte) keyboard_key_pressed::return#17 reg byte a 2002.0
(byte) keyboard_key_pressed::return#18 reg byte a 2002.0
(byte) keyboard_key_pressed::return#19 reg byte a 2002.0
(byte) keyboard_key_pressed::return#2 reg byte a 202.0
(byte) keyboard_key_pressed::return#20 reg byte a 4.0
(byte) keyboard_key_pressed::return#21 reg byte a 4.0
(byte) keyboard_key_pressed::return#20 reg byte a 2002.0
(byte) keyboard_key_pressed::return#21 reg byte a 2002.0
(byte) keyboard_key_pressed::return#24 reg byte a 202.0
(byte) keyboard_key_pressed::return#25 reg byte a 202.0
(byte) keyboard_key_pressed::return#26 reg byte a 202.0
@ -537,11 +536,11 @@
(byte*) menu::SCREEN
(const byte*) menu::SCREEN#0 SCREEN = ((byte*))(word/dword/signed dword) 32768
(byte*) menu::c
(byte*) menu::c#1 c zp ZP_WORD:2 151.5
(byte*) menu::c#2 c zp ZP_WORD:2 151.5
(byte*) menu::c#1 c zp ZP_WORD:3 151.5
(byte*) menu::c#2 c zp ZP_WORD:3 151.5
(byte) menu::i
(byte) menu::i#1 reg byte y 151.5
(byte) menu::i#2 reg byte y 202.0
(byte) menu::i#1 reg byte x 151.5
(byte) menu::i#2 reg byte x 202.0
(void()) mode_8bppchunkybmm()
(word~) mode_8bppchunkybmm::$23 $23 zp ZP_WORD:13 2002.0
(label) mode_8bppchunkybmm::@1
@ -573,11 +572,11 @@
(byte) mode_8bppchunkybmm::i#1 reg byte x 151.5
(byte) mode_8bppchunkybmm::i#2 reg byte x 202.0
(word) mode_8bppchunkybmm::x
(word) mode_8bppchunkybmm::x#1 x zp ZP_WORD:2 1501.5
(word) mode_8bppchunkybmm::x#2 x zp ZP_WORD:2 300.29999999999995
(word) mode_8bppchunkybmm::x#1 x zp ZP_WORD:3 1501.5
(word) mode_8bppchunkybmm::x#2 x zp ZP_WORD:3 300.29999999999995
(byte) mode_8bppchunkybmm::y
(byte) mode_8bppchunkybmm::y#1 y zp ZP_BYTE:4 151.5
(byte) mode_8bppchunkybmm::y#6 y zp ZP_BYTE:4 92.53846153846155
(byte) mode_8bppchunkybmm::y#1 y zp ZP_BYTE:2 151.5
(byte) mode_8bppchunkybmm::y#6 y zp ZP_BYTE:2 92.53846153846155
(void()) mode_8bpppixelcell()
(byte~) mode_8bpppixelcell::$13 reg byte a 2002.0
(byte~) mode_8bpppixelcell::$14 $14 zp ZP_BYTE:7 1001.0
@ -607,8 +606,8 @@
(byte) mode_8bpppixelcell::ax#1 reg byte x 1501.5
(byte) mode_8bpppixelcell::ax#2 reg byte x 429.0
(byte) mode_8bpppixelcell::ay
(byte) mode_8bpppixelcell::ay#1 ay zp ZP_BYTE:4 151.5
(byte) mode_8bpppixelcell::ay#4 ay zp ZP_BYTE:4 120.29999999999998
(byte) mode_8bpppixelcell::ay#1 ay zp ZP_BYTE:2 151.5
(byte) mode_8bpppixelcell::ay#4 ay zp ZP_BYTE:2 120.29999999999998
(byte) mode_8bpppixelcell::bits
(byte) mode_8bpppixelcell::bits#0 bits zp ZP_BYTE:8 1001.0
(byte) mode_8bpppixelcell::bits#1 bits zp ZP_BYTE:8 5000.5
@ -617,12 +616,12 @@
(byte) mode_8bpppixelcell::c#2 reg byte a 20002.0
(byte~) mode_8bpppixelcell::c#3 reg byte a 20002.0
(byte) mode_8bpppixelcell::ch
(byte) mode_8bpppixelcell::ch#1 ch zp ZP_BYTE:4 151.5
(byte) mode_8bpppixelcell::ch#8 ch zp ZP_BYTE:4 11.882352941176471
(byte) mode_8bpppixelcell::ch#1 ch zp ZP_BYTE:2 151.5
(byte) mode_8bpppixelcell::ch#8 ch zp ZP_BYTE:2 11.882352941176471
(byte*) mode_8bpppixelcell::chargen
(byte*) mode_8bpppixelcell::chargen#1 chargen zp ZP_WORD:2 131.4375
(byte*) mode_8bpppixelcell::chargen#2 chargen zp ZP_WORD:2 1552.0
(byte*) mode_8bpppixelcell::chargen#4 chargen zp ZP_WORD:2 202.0
(byte*) mode_8bpppixelcell::chargen#1 chargen zp ZP_WORD:3 131.4375
(byte*) mode_8bpppixelcell::chargen#2 chargen zp ZP_WORD:3 1552.0
(byte*) mode_8bpppixelcell::chargen#4 chargen zp ZP_WORD:3 202.0
(byte) mode_8bpppixelcell::col
(byte) mode_8bpppixelcell::col#1 col zp ZP_BYTE:9 3014.857142857143
(byte) mode_8bpppixelcell::col#2 col zp ZP_BYTE:9 3875.5
@ -635,9 +634,9 @@
(byte) mode_8bpppixelcell::cr#1 cr zp ZP_BYTE:7 1501.5
(byte) mode_8bpppixelcell::cr#6 cr zp ZP_BYTE:7 143.0
(byte*) mode_8bpppixelcell::gfxa
(byte*) mode_8bpppixelcell::gfxa#1 gfxa zp ZP_WORD:2 420.59999999999997
(byte*) mode_8bpppixelcell::gfxa#2 gfxa zp ZP_WORD:2 517.3333333333334
(byte*) mode_8bpppixelcell::gfxa#3 gfxa zp ZP_WORD:2 202.0
(byte*) mode_8bpppixelcell::gfxa#1 gfxa zp ZP_WORD:3 420.59999999999997
(byte*) mode_8bpppixelcell::gfxa#2 gfxa zp ZP_WORD:3 517.3333333333334
(byte*) mode_8bpppixelcell::gfxa#3 gfxa zp ZP_WORD:3 202.0
(byte*) mode_8bpppixelcell::gfxb
(byte*) mode_8bpppixelcell::gfxb#1 gfxb zp ZP_WORD:5 2344.8888888888887
(byte*) mode_8bpppixelcell::gfxb#2 gfxb zp ZP_WORD:5 5167.333333333333
@ -647,61 +646,57 @@
(byte) mode_8bpppixelcell::i#1 reg byte x 151.5
(byte) mode_8bpppixelcell::i#2 reg byte x 202.0
(void()) mode_ctrl()
(byte~) mode_ctrl::$1 reg byte a 202.0
(byte~) mode_ctrl::$1 reg byte a 2002.0
(byte~) mode_ctrl::$12 reg byte a 2002.0
(byte~) mode_ctrl::$16 reg byte a 2002.0
(byte~) mode_ctrl::$20 reg byte a 2002.0
(byte~) mode_ctrl::$24 reg byte a 2002.0
(byte~) mode_ctrl::$28 reg byte a 2002.0
(byte~) mode_ctrl::$4 reg byte a 2002.0
(byte~) mode_ctrl::$8 reg byte a 2002.0
(label) mode_ctrl::@1
(label) mode_ctrl::@16
(label) mode_ctrl::@10
(label) mode_ctrl::@11
(label) mode_ctrl::@12
(label) mode_ctrl::@13
(label) mode_ctrl::@14
(label) mode_ctrl::@23
(label) mode_ctrl::@24
(label) mode_ctrl::@25
(label) mode_ctrl::@26
(label) mode_ctrl::@27
(label) mode_ctrl::@28
(label) mode_ctrl::@30
(label) mode_ctrl::@32
(label) mode_ctrl::@33
(label) mode_ctrl::@34
(label) mode_ctrl::@35
(label) mode_ctrl::@36
(label) mode_ctrl::@37
(label) mode_ctrl::@38
(label) mode_ctrl::@39
(label) mode_ctrl::@4
(label) mode_ctrl::@46
(label) mode_ctrl::@6
(label) mode_ctrl::@7
(label) mode_ctrl::@8
(label) mode_ctrl::@9
(label) mode_ctrl::@return
(void()) mode_ctrl_keys()
(byte~) mode_ctrl_keys::$10 reg byte a 4.0
(byte~) mode_ctrl_keys::$14 reg byte a 4.0
(byte~) mode_ctrl_keys::$18 reg byte a 4.0
(byte~) mode_ctrl_keys::$2 reg byte a 4.0
(byte~) mode_ctrl_keys::$22 reg byte a 4.0
(byte~) mode_ctrl_keys::$26 reg byte a 4.0
(byte~) mode_ctrl_keys::$6 reg byte a 4.0
(label) mode_ctrl_keys::@1
(label) mode_ctrl_keys::@11
(label) mode_ctrl_keys::@13
(label) mode_ctrl_keys::@14
(label) mode_ctrl_keys::@15
(label) mode_ctrl_keys::@16
(label) mode_ctrl_keys::@17
(label) mode_ctrl_keys::@18
(label) mode_ctrl_keys::@20
(label) mode_ctrl_keys::@21
(label) mode_ctrl_keys::@22
(label) mode_ctrl_keys::@23
(label) mode_ctrl_keys::@24
(label) mode_ctrl_keys::@25
(label) mode_ctrl_keys::@26
(label) mode_ctrl_keys::@27
(label) mode_ctrl_keys::@3
(label) mode_ctrl_keys::@35
(label) mode_ctrl_keys::@4
(label) mode_ctrl_keys::@5
(label) mode_ctrl_keys::@6
(label) mode_ctrl_keys::@7
(label) mode_ctrl_keys::@8
(label) mode_ctrl_keys::@9
(label) mode_ctrl_keys::@return
(byte) mode_ctrl_keys::ctrl
(byte) mode_ctrl_keys::ctrl#0 ctrl zp ZP_BYTE:4 1.2000000000000002
(byte) mode_ctrl_keys::ctrl#1 ctrl zp ZP_BYTE:4 4.0
(byte) mode_ctrl_keys::ctrl#10 ctrl zp ZP_BYTE:4 1.6
(byte) mode_ctrl_keys::ctrl#11 ctrl zp ZP_BYTE:4 1.6
(byte) mode_ctrl_keys::ctrl#12 ctrl zp ZP_BYTE:4 1.6
(byte) mode_ctrl_keys::ctrl#13 ctrl zp ZP_BYTE:4 1.6
(byte) mode_ctrl_keys::ctrl#14 ctrl zp ZP_BYTE:4 2.5
(byte) mode_ctrl_keys::ctrl#17 ctrl zp ZP_BYTE:4 1.6
(byte) mode_ctrl_keys::ctrl#2 ctrl zp ZP_BYTE:4 4.0
(byte) mode_ctrl_keys::ctrl#22 ctrl zp ZP_BYTE:4 1.0
(byte) mode_ctrl_keys::ctrl#3 ctrl zp ZP_BYTE:4 4.0
(byte) mode_ctrl_keys::ctrl#4 ctrl zp ZP_BYTE:4 4.0
(byte) mode_ctrl_keys::ctrl#5 ctrl zp ZP_BYTE:4 4.0
(byte) mode_ctrl_keys::ctrl#6 ctrl zp ZP_BYTE:4 4.0
(byte) mode_ctrl::ctrl
(byte) mode_ctrl::ctrl#0 reg byte x 600.5999999999999
(byte) mode_ctrl::ctrl#1 reg byte x 2002.0
(byte) mode_ctrl::ctrl#10 reg byte x 800.8
(byte) mode_ctrl::ctrl#11 reg byte x 800.8
(byte) mode_ctrl::ctrl#12 reg byte x 800.8
(byte) mode_ctrl::ctrl#13 reg byte x 800.8
(byte) mode_ctrl::ctrl#14 reg byte x 576.25
(byte) mode_ctrl::ctrl#17 reg byte x 800.8
(byte) mode_ctrl::ctrl#2 reg byte x 2002.0
(byte) mode_ctrl::ctrl#22 reg byte x 500.5
(byte) mode_ctrl::ctrl#3 reg byte x 2002.0
(byte) mode_ctrl::ctrl#4 reg byte x 2002.0
(byte) mode_ctrl::ctrl#5 reg byte x 2002.0
(byte) mode_ctrl::ctrl#6 reg byte x 2002.0
(void()) mode_ecmchar()
(byte~) mode_ecmchar::$25 reg byte a 2002.0
(byte~) mode_ecmchar::$26 reg byte a 2002.0
@ -727,15 +722,15 @@
(byte*) mode_ecmchar::ch#2 ch zp ZP_WORD:5 310.4
(byte*) mode_ecmchar::ch#3 ch zp ZP_WORD:5 202.0
(byte*) mode_ecmchar::col
(byte*) mode_ecmchar::col#1 col zp ZP_WORD:2 191.1818181818182
(byte*) mode_ecmchar::col#2 col zp ZP_WORD:2 776.0
(byte*) mode_ecmchar::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_ecmchar::col#1 col zp ZP_WORD:3 191.1818181818182
(byte*) mode_ecmchar::col#2 col zp ZP_WORD:3 776.0
(byte*) mode_ecmchar::col#3 col zp ZP_WORD:3 202.0
(byte) mode_ecmchar::cx
(byte) mode_ecmchar::cx#1 reg byte x 1501.5
(byte) mode_ecmchar::cx#2 reg byte x 364.0
(byte) mode_ecmchar::cy
(byte) mode_ecmchar::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_ecmchar::cy#4 cy zp ZP_BYTE:4 157.42857142857144
(byte) mode_ecmchar::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_ecmchar::cy#4 cy zp ZP_BYTE:2 157.42857142857144
(byte) mode_ecmchar::i
(byte) mode_ecmchar::i#1 reg byte x 151.5
(byte) mode_ecmchar::i#2 reg byte x 202.0
@ -761,15 +756,15 @@
(byte*) mode_hicolecmchar::ch#2 ch zp ZP_WORD:5 388.0
(byte*) mode_hicolecmchar::ch#3 ch zp ZP_WORD:5 202.0
(byte*) mode_hicolecmchar::col
(byte*) mode_hicolecmchar::col#1 col zp ZP_WORD:2 300.42857142857144
(byte*) mode_hicolecmchar::col#2 col zp ZP_WORD:2 517.3333333333334
(byte*) mode_hicolecmchar::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_hicolecmchar::col#1 col zp ZP_WORD:3 300.42857142857144
(byte*) mode_hicolecmchar::col#2 col zp ZP_WORD:3 517.3333333333334
(byte*) mode_hicolecmchar::col#3 col zp ZP_WORD:3 202.0
(byte) mode_hicolecmchar::cx
(byte) mode_hicolecmchar::cx#1 reg byte x 1501.5
(byte) mode_hicolecmchar::cx#2 reg byte x 333.6666666666667
(byte) mode_hicolecmchar::cy
(byte) mode_hicolecmchar::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_hicolecmchar::cy#4 cy zp ZP_BYTE:4 100.25000000000001
(byte) mode_hicolecmchar::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_hicolecmchar::cy#4 cy zp ZP_BYTE:2 100.25000000000001
(byte) mode_hicolecmchar::i
(byte) mode_hicolecmchar::i#1 reg byte x 151.5
(byte) mode_hicolecmchar::i#2 reg byte x 202.0
@ -797,15 +792,15 @@
(byte*) mode_hicolmcchar::ch#2 ch zp ZP_WORD:5 388.0
(byte*) mode_hicolmcchar::ch#3 ch zp ZP_WORD:5 202.0
(byte*) mode_hicolmcchar::col
(byte*) mode_hicolmcchar::col#1 col zp ZP_WORD:2 300.42857142857144
(byte*) mode_hicolmcchar::col#2 col zp ZP_WORD:2 517.3333333333334
(byte*) mode_hicolmcchar::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_hicolmcchar::col#1 col zp ZP_WORD:3 300.42857142857144
(byte*) mode_hicolmcchar::col#2 col zp ZP_WORD:3 517.3333333333334
(byte*) mode_hicolmcchar::col#3 col zp ZP_WORD:3 202.0
(byte) mode_hicolmcchar::cx
(byte) mode_hicolmcchar::cx#1 reg byte x 1501.5
(byte) mode_hicolmcchar::cx#2 reg byte x 333.6666666666667
(byte) mode_hicolmcchar::cy
(byte) mode_hicolmcchar::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_hicolmcchar::cy#4 cy zp ZP_BYTE:4 100.25000000000001
(byte) mode_hicolmcchar::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_hicolmcchar::cy#4 cy zp ZP_BYTE:2 100.25000000000001
(byte) mode_hicolmcchar::i
(byte) mode_hicolmcchar::i#1 reg byte x 151.5
(byte) mode_hicolmcchar::i#2 reg byte x 202.0
@ -833,15 +828,15 @@
(byte*) mode_hicolstdchar::ch#2 ch zp ZP_WORD:5 388.0
(byte*) mode_hicolstdchar::ch#3 ch zp ZP_WORD:5 202.0
(byte*) mode_hicolstdchar::col
(byte*) mode_hicolstdchar::col#1 col zp ZP_WORD:2 300.42857142857144
(byte*) mode_hicolstdchar::col#2 col zp ZP_WORD:2 517.3333333333334
(byte*) mode_hicolstdchar::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_hicolstdchar::col#1 col zp ZP_WORD:3 300.42857142857144
(byte*) mode_hicolstdchar::col#2 col zp ZP_WORD:3 517.3333333333334
(byte*) mode_hicolstdchar::col#3 col zp ZP_WORD:3 202.0
(byte) mode_hicolstdchar::cx
(byte) mode_hicolstdchar::cx#1 reg byte x 1501.5
(byte) mode_hicolstdchar::cx#2 reg byte x 333.6666666666667
(byte) mode_hicolstdchar::cy
(byte) mode_hicolstdchar::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_hicolstdchar::cy#4 cy zp ZP_BYTE:4 100.25000000000001
(byte) mode_hicolstdchar::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_hicolstdchar::cy#4 cy zp ZP_BYTE:2 100.25000000000001
(byte) mode_hicolstdchar::i
(byte) mode_hicolstdchar::i#1 reg byte x 151.5
(byte) mode_hicolstdchar::i#2 reg byte x 202.0
@ -872,15 +867,15 @@
(byte*) mode_mcchar::ch#2 ch zp ZP_WORD:5 310.4
(byte*) mode_mcchar::ch#3 ch zp ZP_WORD:5 202.0
(byte*) mode_mcchar::col
(byte*) mode_mcchar::col#1 col zp ZP_WORD:2 191.1818181818182
(byte*) mode_mcchar::col#2 col zp ZP_WORD:2 776.0
(byte*) mode_mcchar::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_mcchar::col#1 col zp ZP_WORD:3 191.1818181818182
(byte*) mode_mcchar::col#2 col zp ZP_WORD:3 776.0
(byte*) mode_mcchar::col#3 col zp ZP_WORD:3 202.0
(byte) mode_mcchar::cx
(byte) mode_mcchar::cx#1 reg byte x 1501.5
(byte) mode_mcchar::cx#2 reg byte x 364.0
(byte) mode_mcchar::cy
(byte) mode_mcchar::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_mcchar::cy#4 cy zp ZP_BYTE:4 157.42857142857144
(byte) mode_mcchar::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_mcchar::cy#4 cy zp ZP_BYTE:2 157.42857142857144
(byte) mode_mcchar::i
(byte) mode_mcchar::i#1 reg byte x 151.5
(byte) mode_mcchar::i#2 reg byte x 202.0
@ -911,32 +906,32 @@
(byte) mode_sixsfred::ax#1 reg byte x 1501.5
(byte) mode_sixsfred::ax#2 reg byte x 400.4
(byte) mode_sixsfred::ay
(byte) mode_sixsfred::ay#1 ay zp ZP_BYTE:4 151.5
(byte) mode_sixsfred::ay#4 ay zp ZP_BYTE:4 150.375
(byte) mode_sixsfred::ay#1 ay zp ZP_BYTE:2 151.5
(byte) mode_sixsfred::ay#4 ay zp ZP_BYTE:2 150.375
(byte) mode_sixsfred::bx
(byte) mode_sixsfred::bx#1 reg byte x 1501.5
(byte) mode_sixsfred::bx#2 reg byte x 667.3333333333334
(byte) mode_sixsfred::by
(byte) mode_sixsfred::by#1 by zp ZP_BYTE:4 151.5
(byte) mode_sixsfred::by#4 by zp ZP_BYTE:4 33.666666666666664
(byte) mode_sixsfred::by#1 by zp ZP_BYTE:2 151.5
(byte) mode_sixsfred::by#4 by zp ZP_BYTE:2 33.666666666666664
(byte*) mode_sixsfred::col
(byte*) mode_sixsfred::col#1 col zp ZP_WORD:2 420.59999999999997
(byte*) mode_sixsfred::col#2 col zp ZP_WORD:2 776.0
(byte*) mode_sixsfred::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_sixsfred::col#1 col zp ZP_WORD:3 420.59999999999997
(byte*) mode_sixsfred::col#2 col zp ZP_WORD:3 776.0
(byte*) mode_sixsfred::col#3 col zp ZP_WORD:3 202.0
(byte) mode_sixsfred::cx
(byte) mode_sixsfred::cx#1 reg byte x 1501.5
(byte) mode_sixsfred::cx#2 reg byte x 600.5999999999999
(byte) mode_sixsfred::cy
(byte) mode_sixsfred::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_sixsfred::cy#4 cy zp ZP_BYTE:4 150.375
(byte) mode_sixsfred::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_sixsfred::cy#4 cy zp ZP_BYTE:2 150.375
(byte*) mode_sixsfred::gfxa
(byte*) mode_sixsfred::gfxa#1 gfxa zp ZP_WORD:2 420.59999999999997
(byte*) mode_sixsfred::gfxa#2 gfxa zp ZP_WORD:2 776.0
(byte*) mode_sixsfred::gfxa#3 gfxa zp ZP_WORD:2 202.0
(byte*) mode_sixsfred::gfxa#1 gfxa zp ZP_WORD:3 420.59999999999997
(byte*) mode_sixsfred::gfxa#2 gfxa zp ZP_WORD:3 776.0
(byte*) mode_sixsfred::gfxa#3 gfxa zp ZP_WORD:3 202.0
(byte*) mode_sixsfred::gfxb
(byte*) mode_sixsfred::gfxb#1 gfxb zp ZP_WORD:2 420.59999999999997
(byte*) mode_sixsfred::gfxb#2 gfxb zp ZP_WORD:2 1552.0
(byte*) mode_sixsfred::gfxb#3 gfxb zp ZP_WORD:2 202.0
(byte*) mode_sixsfred::gfxb#1 gfxb zp ZP_WORD:3 420.59999999999997
(byte*) mode_sixsfred::gfxb#2 gfxb zp ZP_WORD:3 1552.0
(byte*) mode_sixsfred::gfxb#3 gfxb zp ZP_WORD:3 202.0
(byte) mode_sixsfred::i
(byte) mode_sixsfred::i#1 reg byte x 151.5
(byte) mode_sixsfred::i#2 reg byte x 202.0
@ -973,32 +968,32 @@
(byte) mode_sixsfred2::ax#1 reg byte x 1501.5
(byte) mode_sixsfred2::ax#2 reg byte x 400.4
(byte) mode_sixsfred2::ay
(byte) mode_sixsfred2::ay#1 ay zp ZP_BYTE:4 151.5
(byte) mode_sixsfred2::ay#4 ay zp ZP_BYTE:4 150.375
(byte) mode_sixsfred2::ay#1 ay zp ZP_BYTE:2 151.5
(byte) mode_sixsfred2::ay#4 ay zp ZP_BYTE:2 150.375
(byte) mode_sixsfred2::bx
(byte) mode_sixsfred2::bx#1 reg byte x 1501.5
(byte) mode_sixsfred2::bx#2 reg byte x 667.3333333333334
(byte) mode_sixsfred2::by
(byte) mode_sixsfred2::by#1 by zp ZP_BYTE:4 151.5
(byte) mode_sixsfred2::by#4 by zp ZP_BYTE:4 33.666666666666664
(byte) mode_sixsfred2::by#1 by zp ZP_BYTE:2 151.5
(byte) mode_sixsfred2::by#4 by zp ZP_BYTE:2 33.666666666666664
(byte*) mode_sixsfred2::col
(byte*) mode_sixsfred2::col#1 col zp ZP_WORD:2 420.59999999999997
(byte*) mode_sixsfred2::col#2 col zp ZP_WORD:2 517.3333333333334
(byte*) mode_sixsfred2::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_sixsfred2::col#1 col zp ZP_WORD:3 420.59999999999997
(byte*) mode_sixsfred2::col#2 col zp ZP_WORD:3 517.3333333333334
(byte*) mode_sixsfred2::col#3 col zp ZP_WORD:3 202.0
(byte) mode_sixsfred2::cx
(byte) mode_sixsfred2::cx#1 reg byte x 1501.5
(byte) mode_sixsfred2::cx#2 reg byte x 429.0
(byte) mode_sixsfred2::cy
(byte) mode_sixsfred2::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_sixsfred2::cy#4 cy zp ZP_BYTE:4 120.29999999999998
(byte) mode_sixsfred2::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_sixsfred2::cy#4 cy zp ZP_BYTE:2 120.29999999999998
(byte*) mode_sixsfred2::gfxa
(byte*) mode_sixsfred2::gfxa#1 gfxa zp ZP_WORD:2 420.59999999999997
(byte*) mode_sixsfred2::gfxa#2 gfxa zp ZP_WORD:2 776.0
(byte*) mode_sixsfred2::gfxa#3 gfxa zp ZP_WORD:2 202.0
(byte*) mode_sixsfred2::gfxa#1 gfxa zp ZP_WORD:3 420.59999999999997
(byte*) mode_sixsfred2::gfxa#2 gfxa zp ZP_WORD:3 776.0
(byte*) mode_sixsfred2::gfxa#3 gfxa zp ZP_WORD:3 202.0
(byte*) mode_sixsfred2::gfxb
(byte*) mode_sixsfred2::gfxb#1 gfxb zp ZP_WORD:2 420.59999999999997
(byte*) mode_sixsfred2::gfxb#2 gfxb zp ZP_WORD:2 1552.0
(byte*) mode_sixsfred2::gfxb#3 gfxb zp ZP_WORD:2 202.0
(byte*) mode_sixsfred2::gfxb#1 gfxb zp ZP_WORD:3 420.59999999999997
(byte*) mode_sixsfred2::gfxb#2 gfxb zp ZP_WORD:3 1552.0
(byte*) mode_sixsfred2::gfxb#3 gfxb zp ZP_WORD:3 202.0
(byte) mode_sixsfred2::i
(byte) mode_sixsfred2::i#1 reg byte x 151.5
(byte) mode_sixsfred2::i#2 reg byte x 202.0
@ -1026,9 +1021,9 @@
(byte*) mode_stdbitmap::SCREEN
(const byte*) mode_stdbitmap::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 16384
(byte*) mode_stdbitmap::ch
(byte*) mode_stdbitmap::ch#1 ch zp ZP_WORD:2 420.59999999999997
(byte*) mode_stdbitmap::ch#2 ch zp ZP_WORD:2 443.42857142857144
(byte*) mode_stdbitmap::ch#3 ch zp ZP_WORD:2 202.0
(byte*) mode_stdbitmap::ch#1 ch zp ZP_WORD:3 420.59999999999997
(byte*) mode_stdbitmap::ch#2 ch zp ZP_WORD:3 443.42857142857144
(byte*) mode_stdbitmap::ch#3 ch zp ZP_WORD:3 202.0
(byte) mode_stdbitmap::col
(byte) mode_stdbitmap::col#0 reg byte y 1501.5
(byte) mode_stdbitmap::col2
@ -1037,14 +1032,14 @@
(byte) mode_stdbitmap::cx#1 reg byte x 1501.5
(byte) mode_stdbitmap::cx#2 reg byte x 375.375
(byte) mode_stdbitmap::cy
(byte) mode_stdbitmap::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_stdbitmap::cy#4 cy zp ZP_BYTE:4 109.36363636363637
(byte) mode_stdbitmap::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_stdbitmap::cy#4 cy zp ZP_BYTE:2 109.36363636363637
(byte) mode_stdbitmap::i
(byte) mode_stdbitmap::i#1 reg byte x 151.5
(byte) mode_stdbitmap::i#2 reg byte x 202.0
(byte) mode_stdbitmap::l
(byte) mode_stdbitmap::l#1 l zp ZP_BYTE:4 151.5
(byte) mode_stdbitmap::l#2 l zp ZP_BYTE:4 100.99999999999999
(byte) mode_stdbitmap::l#1 l zp ZP_BYTE:2 151.5
(byte) mode_stdbitmap::l#2 l zp ZP_BYTE:2 100.99999999999999
(byte) mode_stdbitmap::lines_cnt
(const byte) mode_stdbitmap::lines_cnt#0 lines_cnt = (byte/signed byte/word/signed word/dword/signed dword) 9
(byte[]) mode_stdbitmap::lines_x
@ -1076,15 +1071,15 @@
(byte*) mode_stdchar::ch#2 ch zp ZP_WORD:5 310.4
(byte*) mode_stdchar::ch#3 ch zp ZP_WORD:5 202.0
(byte*) mode_stdchar::col
(byte*) mode_stdchar::col#1 col zp ZP_WORD:2 191.1818181818182
(byte*) mode_stdchar::col#2 col zp ZP_WORD:2 776.0
(byte*) mode_stdchar::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_stdchar::col#1 col zp ZP_WORD:3 191.1818181818182
(byte*) mode_stdchar::col#2 col zp ZP_WORD:3 776.0
(byte*) mode_stdchar::col#3 col zp ZP_WORD:3 202.0
(byte) mode_stdchar::cx
(byte) mode_stdchar::cx#1 reg byte x 1501.5
(byte) mode_stdchar::cx#2 reg byte x 364.0
(byte) mode_stdchar::cy
(byte) mode_stdchar::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_stdchar::cy#4 cy zp ZP_BYTE:4 157.42857142857144
(byte) mode_stdchar::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_stdchar::cy#4 cy zp ZP_BYTE:2 157.42857142857144
(byte) mode_stdchar::i
(byte) mode_stdchar::i#1 reg byte x 151.5
(byte) mode_stdchar::i#2 reg byte x 202.0
@ -1120,34 +1115,34 @@
(byte) mode_twoplanebitmap::ax#1 reg byte x 1501.5
(byte) mode_twoplanebitmap::ax#2 reg byte x 250.25
(byte) mode_twoplanebitmap::ay
(byte) mode_twoplanebitmap::ay#1 ay zp ZP_BYTE:4 151.5
(byte) mode_twoplanebitmap::ay#4 ay zp ZP_BYTE:4 109.36363636363637
(byte) mode_twoplanebitmap::ay#1 ay zp ZP_BYTE:2 151.5
(byte) mode_twoplanebitmap::ay#4 ay zp ZP_BYTE:2 109.36363636363637
(byte) mode_twoplanebitmap::bx
(byte) mode_twoplanebitmap::bx#1 reg byte x 1501.5
(byte) mode_twoplanebitmap::bx#2 reg byte x 667.3333333333334
(byte) mode_twoplanebitmap::by
(byte) mode_twoplanebitmap::by#1 by zp ZP_BYTE:4 151.5
(byte) mode_twoplanebitmap::by#4 by zp ZP_BYTE:4 33.666666666666664
(byte) mode_twoplanebitmap::by#1 by zp ZP_BYTE:2 151.5
(byte) mode_twoplanebitmap::by#4 by zp ZP_BYTE:2 33.666666666666664
(byte*) mode_twoplanebitmap::col
(byte*) mode_twoplanebitmap::col#1 col zp ZP_WORD:2 420.59999999999997
(byte*) mode_twoplanebitmap::col#2 col zp ZP_WORD:2 517.3333333333334
(byte*) mode_twoplanebitmap::col#3 col zp ZP_WORD:2 202.0
(byte*) mode_twoplanebitmap::col#1 col zp ZP_WORD:3 420.59999999999997
(byte*) mode_twoplanebitmap::col#2 col zp ZP_WORD:3 517.3333333333334
(byte*) mode_twoplanebitmap::col#3 col zp ZP_WORD:3 202.0
(byte) mode_twoplanebitmap::cx
(byte) mode_twoplanebitmap::cx#1 reg byte x 1501.5
(byte) mode_twoplanebitmap::cx#2 reg byte x 429.0
(byte) mode_twoplanebitmap::cy
(byte) mode_twoplanebitmap::cy#1 cy zp ZP_BYTE:4 151.5
(byte) mode_twoplanebitmap::cy#4 cy zp ZP_BYTE:4 120.29999999999998
(byte) mode_twoplanebitmap::cy#1 cy zp ZP_BYTE:2 151.5
(byte) mode_twoplanebitmap::cy#4 cy zp ZP_BYTE:2 120.29999999999998
(byte*) mode_twoplanebitmap::gfxa
(byte*) mode_twoplanebitmap::gfxa#1 gfxa zp ZP_WORD:2 2002.0
(byte*) mode_twoplanebitmap::gfxa#2 gfxa zp ZP_WORD:2 2002.0
(byte*) mode_twoplanebitmap::gfxa#3 gfxa zp ZP_WORD:2 1021.2
(byte*) mode_twoplanebitmap::gfxa#6 gfxa zp ZP_WORD:2 202.0
(byte*) mode_twoplanebitmap::gfxa#7 gfxa zp ZP_WORD:2 620.8
(byte*) mode_twoplanebitmap::gfxa#1 gfxa zp ZP_WORD:3 2002.0
(byte*) mode_twoplanebitmap::gfxa#2 gfxa zp ZP_WORD:3 2002.0
(byte*) mode_twoplanebitmap::gfxa#3 gfxa zp ZP_WORD:3 1021.2
(byte*) mode_twoplanebitmap::gfxa#6 gfxa zp ZP_WORD:3 202.0
(byte*) mode_twoplanebitmap::gfxa#7 gfxa zp ZP_WORD:3 620.8
(byte*) mode_twoplanebitmap::gfxb
(byte*) mode_twoplanebitmap::gfxb#1 gfxb zp ZP_WORD:2 420.59999999999997
(byte*) mode_twoplanebitmap::gfxb#2 gfxb zp ZP_WORD:2 1552.0
(byte*) mode_twoplanebitmap::gfxb#3 gfxb zp ZP_WORD:2 202.0
(byte*) mode_twoplanebitmap::gfxb#1 gfxb zp ZP_WORD:3 420.59999999999997
(byte*) mode_twoplanebitmap::gfxb#2 gfxb zp ZP_WORD:3 1552.0
(byte*) mode_twoplanebitmap::gfxb#3 gfxb zp ZP_WORD:3 202.0
(byte) mode_twoplanebitmap::i
(byte) mode_twoplanebitmap::i#1 reg byte x 151.5
(byte) mode_twoplanebitmap::i#2 reg byte x 202.0
@ -1161,8 +1156,8 @@
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 151.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 151.5
(byte*) print_cls::sc#1 sc zp ZP_WORD:3 151.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:3 151.5
(byte*) print_line_cursor
(byte*) print_line_cursor#17 print_line_cursor zp ZP_WORD:13 8.583333333333332
(byte*) print_line_cursor#18 print_line_cursor zp ZP_WORD:13 2004.0
@ -1184,17 +1179,17 @@
(byte) print_str_lines::ch
(byte) print_str_lines::ch#0 reg byte a 667.3333333333334
(byte*) print_str_lines::str
(byte*) print_str_lines::str#0 str zp ZP_WORD:2 233.66666666666669
(byte*) print_str_lines::str#2 str zp ZP_WORD:2 151.5
(byte*) print_str_lines::str#3 str zp ZP_WORD:2 1552.0
(byte*) print_str_lines::str#0 str zp ZP_WORD:3 233.66666666666669
(byte*) print_str_lines::str#2 str zp ZP_WORD:3 151.5
(byte*) print_str_lines::str#3 str zp ZP_WORD:3 1552.0
reg byte x [ dtv_control#1 dtv_control#3 dtv_control#119 dtv_control#153 dtv_control#19 dtv_control#18 ]
reg byte y [ menu::i#2 menu::i#1 ]
zp ZP_WORD:2 [ menu::c#2 menu::c#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 print_cls::sc#2 print_cls::sc#1 bitmap_plot::plotter_x#0 bitmap_plot::$0 ]
zp ZP_BYTE:2 [ dtv_control#1 dtv_control#3 dtv_control#114 dtv_control#145 dtv_control#17 mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 mode_sixsfred::cy#4 mode_sixsfred::cy#1 mode_sixsfred::ay#4 mode_sixsfred::ay#1 mode_sixsfred::by#4 mode_sixsfred::by#1 mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 mode_twoplanebitmap::ay#4 mode_twoplanebitmap::ay#1 mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 mode_sixsfred2::by#4 mode_sixsfred2::by#1 mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 mode_stdbitmap::l#2 mode_stdbitmap::l#1 bitmap_clear::y#4 bitmap_clear::y#1 mode_mcchar::cy#4 mode_mcchar::cy#1 mode_ecmchar::cy#4 mode_ecmchar::cy#1 mode_stdchar::cy#4 mode_stdchar::cy#1 bitmap_init::$6 ]
reg byte x [ menu::i#2 menu::i#1 ]
zp ZP_WORD:3 [ menu::c#2 menu::c#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 print_cls::sc#2 print_cls::sc#1 bitmap_plot::plotter_x#0 bitmap_plot::$0 ]
reg byte x [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ]
zp ZP_BYTE:4 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 mode_ctrl_keys::ctrl#14 mode_ctrl_keys::ctrl#22 mode_ctrl_keys::ctrl#6 mode_ctrl_keys::ctrl#13 mode_ctrl_keys::ctrl#5 mode_ctrl_keys::ctrl#12 mode_ctrl_keys::ctrl#4 mode_ctrl_keys::ctrl#11 mode_ctrl_keys::ctrl#3 mode_ctrl_keys::ctrl#10 mode_ctrl_keys::ctrl#2 mode_ctrl_keys::ctrl#17 mode_ctrl_keys::ctrl#1 mode_ctrl_keys::ctrl#0 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 mode_sixsfred::cy#4 mode_sixsfred::cy#1 mode_sixsfred::ay#4 mode_sixsfred::ay#1 mode_sixsfred::by#4 mode_sixsfred::by#1 mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 mode_twoplanebitmap::ay#4 mode_twoplanebitmap::ay#1 mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 mode_sixsfred2::by#4 mode_sixsfred2::by#1 mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 mode_stdbitmap::l#2 mode_stdbitmap::l#1 bitmap_clear::y#4 bitmap_clear::y#1 mode_mcchar::cy#4 mode_mcchar::cy#1 mode_ecmchar::cy#4 mode_ecmchar::cy#1 mode_stdchar::cy#4 mode_stdchar::cy#1 bitmap_init::$6 ]
reg byte x [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ]
zp ZP_WORD:5 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 print_char_cursor#17 print_char_cursor#19 print_char_cursor#101 print_char_cursor#32 print_char_cursor#1 bitmap_plot::plotter_y#0 ]
reg byte x [ mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ]
reg byte y [ keyboard_key_pressed::key#20 ]
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
reg byte x [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ]
@ -1272,19 +1267,19 @@ reg byte a [ mode_8bppchunkybmm::c#0 ]
reg byte a [ keyboard_key_pressed::return#14 ]
reg byte a [ mode_ctrl::$1 ]
reg byte a [ keyboard_key_pressed::return#15 ]
reg byte a [ mode_ctrl_keys::$2 ]
reg byte a [ mode_ctrl::$4 ]
reg byte a [ keyboard_key_pressed::return#16 ]
reg byte a [ mode_ctrl_keys::$6 ]
reg byte a [ mode_ctrl::$8 ]
reg byte a [ keyboard_key_pressed::return#17 ]
reg byte a [ mode_ctrl_keys::$10 ]
reg byte a [ mode_ctrl::$12 ]
reg byte a [ keyboard_key_pressed::return#18 ]
reg byte a [ mode_ctrl_keys::$14 ]
reg byte a [ mode_ctrl::$16 ]
reg byte a [ keyboard_key_pressed::return#19 ]
reg byte a [ mode_ctrl_keys::$18 ]
reg byte a [ mode_ctrl::$20 ]
reg byte a [ keyboard_key_pressed::return#20 ]
reg byte a [ mode_ctrl_keys::$22 ]
reg byte a [ mode_ctrl::$24 ]
reg byte a [ keyboard_key_pressed::return#21 ]
reg byte a [ mode_ctrl_keys::$26 ]
reg byte a [ mode_ctrl::$28 ]
reg byte a [ keyboard_key_pressed::rowidx#0 ]
reg byte y [ keyboard_matrix_read::rowid#0 ]
reg byte a [ keyboard_matrix_read::return#2 ]

View File

@ -0,0 +1,46 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label BORDERCOL = $d020
.label SCREEN = $400
jsr main
main: {
jsr print_cls
jsr mode_ctrl
rts
}
mode_ctrl: {
b2:
lda BORDERCOL
cmp #$ff
bne b4
lda #2
sta BORDERCOL
jmp b2
b4:
lda #3
sta BORDERCOL
jmp b2
}
print_cls: {
.label sc = 2
lda #<SCREEN
sta sc
lda #>SCREEN
sta sc+1
b1:
lda #' '
ldy #0
sta (sc),y
inc sc
bne !+
inc sc+1
!:
lda sc+1
cmp #>SCREEN+$3e8
bne b1
lda sc
cmp #<SCREEN+$3e8
bne b1
rts
}

View File

@ -0,0 +1,51 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@3
@3: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @3
[3] phi() [ ] ( )
main: scope:[main] from @3
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main
[6] phi() [ ] ( main:2 [ ] )
[7] call mode_ctrl param-assignment [ ] ( main:2 [ ] )
to:main::@return
main::@return: scope:[main] from main::@1
[8] return [ ] ( main:2 [ ] )
to:@return
mode_ctrl: scope:[mode_ctrl] from main::@1
[9] phi() [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@1
mode_ctrl::@1: scope:[mode_ctrl] from mode_ctrl mode_ctrl::@4 mode_ctrl::@8
[10] if(true) goto mode_ctrl::@2 [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@return
mode_ctrl::@return: scope:[mode_ctrl] from mode_ctrl::@1
[11] return [ ] ( main:2::mode_ctrl:7 [ ] )
to:@return
mode_ctrl::@2: scope:[mode_ctrl] from mode_ctrl::@1
[12] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0) [ mode_ctrl::before#0 ] ( main:2::mode_ctrl:7 [ mode_ctrl::before#0 ] )
[13] if((byte) mode_ctrl::before#0!=(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@8
mode_ctrl::@8: scope:[mode_ctrl] from mode_ctrl::@2
[14] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@1
mode_ctrl::@4: scope:[mode_ctrl] from mode_ctrl::@2
[15] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@1
print_cls: scope:[print_cls] from main
[16] phi() [ ] ( main:2::print_cls:5 [ ] )
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[17] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) SCREEN#0 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] )
[18] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] )
[19] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] )
[20] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] )
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[21] return [ ] ( main:2::print_cls:5 [ ] )
to:@return

View File

@ -0,0 +1,856 @@
PARSING src/test/java/dk/camelot64/kickc/test/kc/loop-problem2.kc
const byte* BORDERCOL = $d020;
const byte* SCREEN = $0400;
void main() {
print_cls();
mode_ctrl();
}
void print_cls() {
for(byte* sc=SCREEN; sc!=SCREEN+1000; sc++) {
*sc = ' ';
}
}
void mode_ctrl() {
while(true) {
byte before = *BORDERCOL;
if(before==$ff) {
*BORDERCOL = 2;
} else {
*BORDERCOL = 3;
}
}
}
Adding pre/post-modifier (byte*) print_cls::sc ← ++ (byte*) print_cls::sc
STATEMENTS
(byte*) BORDERCOL ← (word/dword/signed dword) 53280
(byte*) SCREEN ← (word/signed word/dword/signed dword) 1024
proc (void()) main()
(void~) main::$0 ← call print_cls
(void~) main::$1 ← call mode_ctrl
main::@return:
return
endproc // main()
proc (void()) print_cls()
(byte*) print_cls::sc ← (byte*) SCREEN
print_cls::@1:
*((byte*) print_cls::sc) ← (byte) ' '
(byte*) print_cls::sc ← ++ (byte*) print_cls::sc
(byte*~) print_cls::$0 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1000
(boolean~) print_cls::$1 ← (byte*) print_cls::sc != (byte*~) print_cls::$0
if((boolean~) print_cls::$1) goto print_cls::@1
print_cls::@return:
return
endproc // print_cls()
proc (void()) mode_ctrl()
mode_ctrl::@1:
if(true) goto mode_ctrl::@2
goto mode_ctrl::@3
mode_ctrl::@2:
(byte) mode_ctrl::before ← *((byte*) BORDERCOL)
(boolean~) mode_ctrl::$0 ← (byte) mode_ctrl::before == (byte/word/signed word/dword/signed dword) 255
(boolean~) mode_ctrl::$1 ← ! (boolean~) mode_ctrl::$0
if((boolean~) mode_ctrl::$1) goto mode_ctrl::@4
*((byte*) BORDERCOL) ← (byte/signed byte/word/signed word/dword/signed dword) 2
goto mode_ctrl::@5
mode_ctrl::@4:
*((byte*) BORDERCOL) ← (byte/signed byte/word/signed word/dword/signed dword) 3
mode_ctrl::@5:
goto mode_ctrl::@1
mode_ctrl::@3:
mode_ctrl::@return:
return
endproc // mode_ctrl()
call main
SYMBOLS
(byte*) BORDERCOL
(byte*) SCREEN
(void()) main()
(void~) main::$0
(void~) main::$1
(label) main::@return
(void()) mode_ctrl()
(boolean~) mode_ctrl::$0
(boolean~) mode_ctrl::$1
(label) mode_ctrl::@1
(label) mode_ctrl::@2
(label) mode_ctrl::@3
(label) mode_ctrl::@4
(label) mode_ctrl::@5
(label) mode_ctrl::@return
(byte) mode_ctrl::before
(void()) print_cls()
(byte*~) print_cls::$0
(boolean~) print_cls::$1
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
Promoting word/dword/signed dword to byte* in BORDERCOL ← ((byte*)) 53280
Promoting word/signed word/dword/signed dword to byte* in SCREEN ← ((byte*)) 1024
INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
(byte*) BORDERCOL ← ((byte*)) (word/dword/signed dword) 53280
(byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@1
main: scope:[main] from
(void~) main::$0 ← call print_cls
(void~) main::$1 ← call mode_ctrl
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
to:@2
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
*((byte*) print_cls::sc) ← (byte) ' '
(byte*) print_cls::sc ← ++ (byte*) print_cls::sc
(byte*~) print_cls::$0 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1000
(boolean~) print_cls::$1 ← (byte*) print_cls::sc != (byte*~) print_cls::$0
if((boolean~) print_cls::$1) goto print_cls::@1
to:print_cls::@2
print_cls::@2: scope:[print_cls] from print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@2: scope:[] from @1
to:@3
mode_ctrl: scope:[mode_ctrl] from
to:mode_ctrl::@1
mode_ctrl::@1: scope:[mode_ctrl] from mode_ctrl mode_ctrl::@5
if(true) goto mode_ctrl::@2
to:mode_ctrl::@6
mode_ctrl::@2: scope:[mode_ctrl] from mode_ctrl::@1 mode_ctrl::@7
(byte) mode_ctrl::before ← *((byte*) BORDERCOL)
(boolean~) mode_ctrl::$0 ← (byte) mode_ctrl::before == (byte/word/signed word/dword/signed dword) 255
(boolean~) mode_ctrl::$1 ← ! (boolean~) mode_ctrl::$0
if((boolean~) mode_ctrl::$1) goto mode_ctrl::@4
to:mode_ctrl::@8
mode_ctrl::@6: scope:[mode_ctrl] from mode_ctrl::@1
to:mode_ctrl::@3
mode_ctrl::@3: scope:[mode_ctrl] from mode_ctrl::@10 mode_ctrl::@6
to:mode_ctrl::@return
mode_ctrl::@7: scope:[mode_ctrl] from
to:mode_ctrl::@2
mode_ctrl::@4: scope:[mode_ctrl] from mode_ctrl::@2 mode_ctrl::@9
*((byte*) BORDERCOL) ← (byte/signed byte/word/signed word/dword/signed dword) 3
to:mode_ctrl::@5
mode_ctrl::@8: scope:[mode_ctrl] from mode_ctrl::@2
*((byte*) BORDERCOL) ← (byte/signed byte/word/signed word/dword/signed dword) 2
to:mode_ctrl::@5
mode_ctrl::@5: scope:[mode_ctrl] from mode_ctrl::@4 mode_ctrl::@8
to:mode_ctrl::@1
mode_ctrl::@9: scope:[mode_ctrl] from
to:mode_ctrl::@4
mode_ctrl::@10: scope:[mode_ctrl] from
to:mode_ctrl::@3
mode_ctrl::@return: scope:[mode_ctrl] from mode_ctrl::@3
return
to:@return
@3: scope:[] from @2
call main
to:@end
@end: scope:[] from @3
Eliminating unused variable - keeping the call (void~) main::$0
Eliminating unused variable - keeping the call (void~) main::$1
Removing empty block @1
Removing empty block print_cls::@2
Removing empty block @2
Removing empty block mode_ctrl::@6
Removing empty block mode_ctrl::@3
Removing empty block mode_ctrl::@7
Removing empty block mode_ctrl::@5
Removing empty block mode_ctrl::@9
Removing empty block mode_ctrl::@10
PROCEDURE MODIFY VARIABLE ANALYSIS
Completing Phi functions...
CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@3
main: scope:[main] from @3
call print_cls param-assignment
to:main::@1
main::@1: scope:[main] from main
call mode_ctrl param-assignment
to:main::@2
main::@2: scope:[main] from main::@1
to:main::@return
main::@return: scope:[main] from main::@2
return
to:@return
print_cls: scope:[print_cls] from main
(byte*) print_cls::sc#0 ← (byte*) SCREEN#0
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
(byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 )
*((byte*) print_cls::sc#2) ← (byte) ' '
(byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
(byte*~) print_cls::$0 ← (byte*) SCREEN#0 + (word/signed word/dword/signed dword) 1000
(boolean~) print_cls::$1 ← (byte*) print_cls::sc#1 != (byte*~) print_cls::$0
if((boolean~) print_cls::$1) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
return
to:@return
mode_ctrl: scope:[mode_ctrl] from main::@1
to:mode_ctrl::@1
mode_ctrl::@1: scope:[mode_ctrl] from mode_ctrl mode_ctrl::@4 mode_ctrl::@8
if(true) goto mode_ctrl::@2
to:mode_ctrl::@return
mode_ctrl::@2: scope:[mode_ctrl] from mode_ctrl::@1
(byte) mode_ctrl::before#0 ← *((byte*) BORDERCOL#0)
(boolean~) mode_ctrl::$0 ← (byte) mode_ctrl::before#0 == (byte/word/signed word/dword/signed dword) 255
(boolean~) mode_ctrl::$1 ← ! (boolean~) mode_ctrl::$0
if((boolean~) mode_ctrl::$1) goto mode_ctrl::@4
to:mode_ctrl::@8
mode_ctrl::@4: scope:[mode_ctrl] from mode_ctrl::@2
*((byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
to:mode_ctrl::@1
mode_ctrl::@8: scope:[mode_ctrl] from mode_ctrl::@2
*((byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
to:mode_ctrl::@1
mode_ctrl::@return: scope:[mode_ctrl] from mode_ctrl::@1
return
to:@return
@3: scope:[] from @begin
call main param-assignment
to:@4
@4: scope:[] from @3
to:@end
@end: scope:[] from @4
SYMBOL TABLE SSA
(label) @3
(label) @4
(label) @begin
(label) @end
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte*) SCREEN
(byte*) SCREEN#0
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@return
(void()) mode_ctrl()
(boolean~) mode_ctrl::$0
(boolean~) mode_ctrl::$1
(label) mode_ctrl::@1
(label) mode_ctrl::@2
(label) mode_ctrl::@4
(label) mode_ctrl::@8
(label) mode_ctrl::@return
(byte) mode_ctrl::before
(byte) mode_ctrl::before#0
(void()) print_cls()
(byte*~) print_cls::$0
(boolean~) print_cls::$1
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#0
(byte*) print_cls::sc#1
(byte*) print_cls::sc#2
OPTIMIZING CONTROL FLOW GRAPH
Culled Empty Block (label) main::@2
Culled Empty Block (label) @4
Succesful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not (boolean~) mode_ctrl::$1 ← (byte) mode_ctrl::before#0 != (byte/word/signed word/dword/signed dword) 255 from (boolean~) mode_ctrl::$0 ← (byte) mode_ctrl::before#0 == (byte/word/signed word/dword/signed dword) 255
Succesful SSA optimization Pass2UnaryNotSimplification
Not aliassing across scopes: print_cls::sc#0 SCREEN#0
Simple Condition (boolean~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
Simple Condition (boolean~) mode_ctrl::$1 if((byte) mode_ctrl::before#0!=(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4
Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) SCREEN#0 = ((byte*))1024
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = SCREEN#0
Constant (const byte*) print_cls::$0 = SCREEN#0+1000
Succesful SSA optimization Pass2ConstantIdentification
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte*) print_cls::sc#0
Constant inlined print_cls::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000
Constant inlined print_cls::sc#0 = (const byte*) SCREEN#0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @3 @end main main::@1 main::@return mode_ctrl mode_ctrl::@1 mode_ctrl::@return mode_ctrl::@2 mode_ctrl::@8 mode_ctrl::@4 print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @3 @end main main::@1 main::@return mode_ctrl mode_ctrl::@1 mode_ctrl::@return mode_ctrl::@2 mode_ctrl::@8 mode_ctrl::@4 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of mode_ctrl
Adding NOP phi() at start of print_cls
CALL GRAPH
Calls in [] to main:2
Calls in [main] to print_cls:5 mode_ctrl:7
Propagating live ranges...
Propagating live ranges...
Created 1 initial phi equivalence classes
Coalesced [22] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @3 @end main main::@1 main::@return mode_ctrl mode_ctrl::@1 mode_ctrl::@return mode_ctrl::@2 mode_ctrl::@8 mode_ctrl::@4 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of mode_ctrl
Adding NOP phi() at start of print_cls
Propagating live ranges...
Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@3
@3: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @3
[3] phi() [ ] ( )
main: scope:[main] from @3
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main
[6] phi() [ ] ( main:2 [ ] )
[7] call mode_ctrl param-assignment [ ] ( main:2 [ ] )
to:main::@return
main::@return: scope:[main] from main::@1
[8] return [ ] ( main:2 [ ] )
to:@return
mode_ctrl: scope:[mode_ctrl] from main::@1
[9] phi() [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@1
mode_ctrl::@1: scope:[mode_ctrl] from mode_ctrl mode_ctrl::@4 mode_ctrl::@8
[10] if(true) goto mode_ctrl::@2 [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@return
mode_ctrl::@return: scope:[mode_ctrl] from mode_ctrl::@1
[11] return [ ] ( main:2::mode_ctrl:7 [ ] )
to:@return
mode_ctrl::@2: scope:[mode_ctrl] from mode_ctrl::@1
[12] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0) [ mode_ctrl::before#0 ] ( main:2::mode_ctrl:7 [ mode_ctrl::before#0 ] )
[13] if((byte) mode_ctrl::before#0!=(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@8
mode_ctrl::@8: scope:[mode_ctrl] from mode_ctrl::@2
[14] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@1
mode_ctrl::@4: scope:[mode_ctrl] from mode_ctrl::@2
[15] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2::mode_ctrl:7 [ ] )
to:mode_ctrl::@1
print_cls: scope:[print_cls] from main
[16] phi() [ ] ( main:2::print_cls:5 [ ] )
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[17] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) SCREEN#0 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] )
[18] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] )
[19] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] )
[20] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] )
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[21] return [ ] ( main:2::print_cls:5 [ ] )
to:@return
DOMINATORS
@begin dominated by @begin
@3 dominated by @begin @3
@end dominated by @begin @end @3
main dominated by @begin main @3
main::@1 dominated by @begin main @3 main::@1
main::@return dominated by main::@return @begin main @3 main::@1
mode_ctrl dominated by @begin main mode_ctrl @3 main::@1
mode_ctrl::@1 dominated by @begin main mode_ctrl @3 main::@1 mode_ctrl::@1
mode_ctrl::@return dominated by @begin main mode_ctrl @3 mode_ctrl::@return main::@1 mode_ctrl::@1
mode_ctrl::@2 dominated by @begin main mode_ctrl @3 main::@1 mode_ctrl::@2 mode_ctrl::@1
mode_ctrl::@8 dominated by @begin main mode_ctrl @3 main::@1 mode_ctrl::@2 mode_ctrl::@1 mode_ctrl::@8
mode_ctrl::@4 dominated by @begin main mode_ctrl @3 main::@1 mode_ctrl::@2 mode_ctrl::@1 mode_ctrl::@4
print_cls dominated by @begin main print_cls @3
print_cls::@1 dominated by @begin print_cls::@1 main print_cls @3
print_cls::@return dominated by @begin print_cls::@1 main print_cls @3 print_cls::@return
NATURAL LOOPS
Found back edge: Loop head: mode_ctrl::@1 tails: mode_ctrl::@8 blocks: null
Found back edge: Loop head: mode_ctrl::@1 tails: mode_ctrl::@4 blocks: null
Found back edge: Loop head: print_cls::@1 tails: print_cls::@1 blocks: null
Populated: Loop head: mode_ctrl::@1 tails: mode_ctrl::@8 blocks: mode_ctrl::@8 mode_ctrl::@2 mode_ctrl::@1
Populated: Loop head: mode_ctrl::@1 tails: mode_ctrl::@4 blocks: mode_ctrl::@4 mode_ctrl::@2 mode_ctrl::@1
Populated: Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1
Coalesced: Loop head: mode_ctrl::@1 tails: mode_ctrl::@8 mode_ctrl::@4 blocks: mode_ctrl::@8 mode_ctrl::@2 mode_ctrl::@1 mode_ctrl::@4
Loop head: mode_ctrl::@1 tails: mode_ctrl::@8 mode_ctrl::@4 blocks: mode_ctrl::@8 mode_ctrl::@2 mode_ctrl::@1 mode_ctrl::@4
Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1
NATURAL LOOPS WITH DEPTH
Found 0 loops in scope []
Found 0 loops in scope [main]
Found 1 loops in scope [print_cls]
Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1
Found 1 loops in scope [mode_ctrl]
Loop head: mode_ctrl::@1 tails: mode_ctrl::@8 mode_ctrl::@4 blocks: mode_ctrl::@8 mode_ctrl::@2 mode_ctrl::@1 mode_ctrl::@4
Loop head: mode_ctrl::@1 tails: mode_ctrl::@8 mode_ctrl::@4 blocks: mode_ctrl::@8 mode_ctrl::@2 mode_ctrl::@1 mode_ctrl::@4 depth: 1
Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 depth: 1
VARIABLE REGISTER WEIGHTS
(byte*) BORDERCOL
(byte*) SCREEN
(void()) main()
(void()) mode_ctrl()
(byte) mode_ctrl::before
(byte) mode_ctrl::before#0 22.0
(void()) print_cls()
(byte*) print_cls::sc
(byte*) print_cls::sc#1 16.5
(byte*) print_cls::sc#2 16.5
Initial phi equivalence classes
[ print_cls::sc#2 print_cls::sc#1 ]
Added variable mode_ctrl::before#0 to zero page equivalence class [ mode_ctrl::before#0 ]
Complete equivalence classes
[ print_cls::sc#2 print_cls::sc#1 ]
[ mode_ctrl::before#0 ]
Allocated zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ]
Allocated zp ZP_BYTE:4 [ mode_ctrl::before#0 ]
INITIAL ASM
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label BORDERCOL = $d020
.label SCREEN = $400
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @3 [phi:@begin->@3]
b3_from_bbegin:
jmp b3
//SEG4 @3
b3:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @3 to main [phi:@3->main]
main_from_b3:
jsr main
//SEG7 [3] phi from @3 to @end [phi:@3->@end]
bend_from_b3:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
//SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] )
//SEG11 [16] phi from main to print_cls [phi:main->print_cls]
print_cls_from_main:
jsr print_cls
//SEG12 [6] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
jmp b1
//SEG13 main::@1
b1:
//SEG14 [7] call mode_ctrl param-assignment [ ] ( main:2 [ ] )
//SEG15 [9] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl]
mode_ctrl_from_b1:
jsr mode_ctrl
jmp breturn
//SEG16 main::@return
breturn:
//SEG17 [8] return [ ] ( main:2 [ ] )
rts
}
//SEG18 mode_ctrl
mode_ctrl: {
.label before = 4
jmp b1
//SEG19 mode_ctrl::@1
b1:
//SEG20 [10] if(true) goto mode_ctrl::@2 [ ] ( main:2::mode_ctrl:7 [ ] ) -- true_then_la1
jmp b2
jmp breturn
//SEG21 mode_ctrl::@return
breturn:
//SEG22 [11] return [ ] ( main:2::mode_ctrl:7 [ ] )
rts
//SEG23 mode_ctrl::@2
b2:
//SEG24 [12] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0) [ mode_ctrl::before#0 ] ( main:2::mode_ctrl:7 [ mode_ctrl::before#0 ] ) -- vbuz1=_deref_pbuc1
lda BORDERCOL
sta before
//SEG25 [13] if((byte) mode_ctrl::before#0!=(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 [ ] ( main:2::mode_ctrl:7 [ ] ) -- vbuz1_neq_vbuc1_then_la1
lda before
cmp #$ff
bne b4
jmp b8
//SEG26 mode_ctrl::@8
b8:
//SEG27 [14] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::mode_ctrl:7 [ ] ) -- _deref_pbuc1=vbuc2
lda #2
sta BORDERCOL
jmp b1
//SEG28 mode_ctrl::@4
b4:
//SEG29 [15] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2::mode_ctrl:7 [ ] ) -- _deref_pbuc1=vbuc2
lda #3
sta BORDERCOL
jmp b1
}
//SEG30 print_cls
print_cls: {
.label sc = 2
//SEG31 [17] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
b1_from_print_cls:
//SEG32 [17] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<SCREEN
sta sc
lda #>SCREEN
sta sc+1
jmp b1
//SEG33 [17] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
b1_from_b1:
//SEG34 [17] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy
jmp b1
//SEG35 print_cls::@1
b1:
//SEG36 [18] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1
lda #' '
ldy #0
sta (sc),y
//SEG37 [19] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1
inc sc
bne !+
inc sc+1
!:
//SEG38 [20] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_pbuc1_then_la1
lda sc+1
cmp #>SCREEN+$3e8
bne b1_from_b1
lda sc
cmp #<SCREEN+$3e8
bne b1_from_b1
jmp breturn
//SEG39 print_cls::@return
breturn:
//SEG40 [21] return [ ] ( main:2::print_cls:5 [ ] )
rts
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [14] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::mode_ctrl:7 [ ] ) always clobbers reg byte a
Statement [15] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2::mode_ctrl:7 [ ] ) always clobbers reg byte a
Statement [18] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y
Statement [20] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a
Potential registers zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_BYTE:4 [ mode_ctrl::before#0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [print_cls] 33: zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ]
Uplift Scope [mode_ctrl] 22: zp ZP_BYTE:4 [ mode_ctrl::before#0 ]
Uplift Scope [main]
Uplift Scope []
Uplifting [print_cls] best 1058 combination zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [mode_ctrl] best 998 combination reg byte a [ mode_ctrl::before#0 ]
Uplifting [main] best 998 combination
Uplifting [] best 998 combination
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label BORDERCOL = $d020
.label SCREEN = $400
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @3 [phi:@begin->@3]
b3_from_bbegin:
jmp b3
//SEG4 @3
b3:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @3 to main [phi:@3->main]
main_from_b3:
jsr main
//SEG7 [3] phi from @3 to @end [phi:@3->@end]
bend_from_b3:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
//SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] )
//SEG11 [16] phi from main to print_cls [phi:main->print_cls]
print_cls_from_main:
jsr print_cls
//SEG12 [6] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
jmp b1
//SEG13 main::@1
b1:
//SEG14 [7] call mode_ctrl param-assignment [ ] ( main:2 [ ] )
//SEG15 [9] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl]
mode_ctrl_from_b1:
jsr mode_ctrl
jmp breturn
//SEG16 main::@return
breturn:
//SEG17 [8] return [ ] ( main:2 [ ] )
rts
}
//SEG18 mode_ctrl
mode_ctrl: {
jmp b1
//SEG19 mode_ctrl::@1
b1:
//SEG20 [10] if(true) goto mode_ctrl::@2 [ ] ( main:2::mode_ctrl:7 [ ] ) -- true_then_la1
jmp b2
jmp breturn
//SEG21 mode_ctrl::@return
breturn:
//SEG22 [11] return [ ] ( main:2::mode_ctrl:7 [ ] )
rts
//SEG23 mode_ctrl::@2
b2:
//SEG24 [12] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0) [ mode_ctrl::before#0 ] ( main:2::mode_ctrl:7 [ mode_ctrl::before#0 ] ) -- vbuaa=_deref_pbuc1
lda BORDERCOL
//SEG25 [13] if((byte) mode_ctrl::before#0!=(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 [ ] ( main:2::mode_ctrl:7 [ ] ) -- vbuaa_neq_vbuc1_then_la1
cmp #$ff
bne b4
jmp b8
//SEG26 mode_ctrl::@8
b8:
//SEG27 [14] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::mode_ctrl:7 [ ] ) -- _deref_pbuc1=vbuc2
lda #2
sta BORDERCOL
jmp b1
//SEG28 mode_ctrl::@4
b4:
//SEG29 [15] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2::mode_ctrl:7 [ ] ) -- _deref_pbuc1=vbuc2
lda #3
sta BORDERCOL
jmp b1
}
//SEG30 print_cls
print_cls: {
.label sc = 2
//SEG31 [17] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
b1_from_print_cls:
//SEG32 [17] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<SCREEN
sta sc
lda #>SCREEN
sta sc+1
jmp b1
//SEG33 [17] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
b1_from_b1:
//SEG34 [17] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy
jmp b1
//SEG35 print_cls::@1
b1:
//SEG36 [18] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1
lda #' '
ldy #0
sta (sc),y
//SEG37 [19] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1
inc sc
bne !+
inc sc+1
!:
//SEG38 [20] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_pbuc1_then_la1
lda sc+1
cmp #>SCREEN+$3e8
bne b1_from_b1
lda sc
cmp #<SCREEN+$3e8
bne b1_from_b1
jmp breturn
//SEG39 print_cls::@return
breturn:
//SEG40 [21] return [ ] ( main:2::print_cls:5 [ ] )
rts
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b3
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b8
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b3_from_bbegin:
Removing instruction main_from_b3:
Removing instruction bend_from_b3:
Removing instruction b1_from_main:
Removing instruction mode_ctrl_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b3:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction b8:
Removing instruction b1_from_print_cls:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Skipping double jump to b2 in jmp b1
Skipping double jump to b2 in jmp b1
Succesful ASM optimization Pass5DoubleJumpElimination
Removing unreachable instruction rts
Succesful ASM optimization Pass5UnreachableCodeElimination
Removing instruction jmp b2
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction b1:
Succesful ASM optimization Pass5RedundantLabelElimination
FINAL SYMBOL TABLE
(label) @3
(label) @begin
(label) @end
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) main()
(label) main::@1
(label) main::@return
(void()) mode_ctrl()
(label) mode_ctrl::@1
(label) mode_ctrl::@2
(label) mode_ctrl::@4
(label) mode_ctrl::@8
(label) mode_ctrl::@return
(byte) mode_ctrl::before
(byte) mode_ctrl::before#0 reg byte a 22.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ]
reg byte a [ mode_ctrl::before#0 ]
FINAL ASSEMBLER
Score: 770
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label BORDERCOL = $d020
.label SCREEN = $400
//SEG2 @begin
//SEG3 [1] phi from @begin to @3 [phi:@begin->@3]
//SEG4 @3
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @3 to main [phi:@3->main]
jsr main
//SEG7 [3] phi from @3 to @end [phi:@3->@end]
//SEG8 @end
//SEG9 main
main: {
//SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] )
//SEG11 [16] phi from main to print_cls [phi:main->print_cls]
jsr print_cls
//SEG12 [6] phi from main to main::@1 [phi:main->main::@1]
//SEG13 main::@1
//SEG14 [7] call mode_ctrl param-assignment [ ] ( main:2 [ ] )
//SEG15 [9] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl]
jsr mode_ctrl
//SEG16 main::@return
//SEG17 [8] return [ ] ( main:2 [ ] )
rts
}
//SEG18 mode_ctrl
mode_ctrl: {
//SEG19 mode_ctrl::@1
//SEG20 [10] if(true) goto mode_ctrl::@2 [ ] ( main:2::mode_ctrl:7 [ ] ) -- true_then_la1
//SEG21 mode_ctrl::@return
//SEG22 [11] return [ ] ( main:2::mode_ctrl:7 [ ] )
//SEG23 mode_ctrl::@2
b2:
//SEG24 [12] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0) [ mode_ctrl::before#0 ] ( main:2::mode_ctrl:7 [ mode_ctrl::before#0 ] ) -- vbuaa=_deref_pbuc1
lda BORDERCOL
//SEG25 [13] if((byte) mode_ctrl::before#0!=(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 [ ] ( main:2::mode_ctrl:7 [ ] ) -- vbuaa_neq_vbuc1_then_la1
cmp #$ff
bne b4
//SEG26 mode_ctrl::@8
//SEG27 [14] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::mode_ctrl:7 [ ] ) -- _deref_pbuc1=vbuc2
lda #2
sta BORDERCOL
jmp b2
//SEG28 mode_ctrl::@4
b4:
//SEG29 [15] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2::mode_ctrl:7 [ ] ) -- _deref_pbuc1=vbuc2
lda #3
sta BORDERCOL
jmp b2
}
//SEG30 print_cls
print_cls: {
.label sc = 2
//SEG31 [17] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
//SEG32 [17] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<SCREEN
sta sc
lda #>SCREEN
sta sc+1
//SEG33 [17] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
//SEG34 [17] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy
//SEG35 print_cls::@1
b1:
//SEG36 [18] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1
lda #' '
ldy #0
sta (sc),y
//SEG37 [19] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1
inc sc
bne !+
inc sc+1
!:
//SEG38 [20] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_pbuc1_then_la1
lda sc+1
cmp #>SCREEN+$3e8
bne b1
lda sc
cmp #<SCREEN+$3e8
bne b1
//SEG39 print_cls::@return
//SEG40 [21] return [ ] ( main:2::print_cls:5 [ ] )
rts
}

View File

@ -0,0 +1,27 @@
(label) @3
(label) @begin
(label) @end
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) main()
(label) main::@1
(label) main::@return
(void()) mode_ctrl()
(label) mode_ctrl::@1
(label) mode_ctrl::@2
(label) mode_ctrl::@4
(label) mode_ctrl::@8
(label) mode_ctrl::@return
(byte) mode_ctrl::before
(byte) mode_ctrl::before#0 reg byte a 22.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ]
reg byte a [ mode_ctrl::before#0 ]