1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-10-10 20:23:47 +00:00

Added missing fragment for Scan/Desire.

This commit is contained in:
jespergravgaard 2019-01-03 18:54:59 +01:00
parent db733eec53
commit 8898dfb255
7 changed files with 4356 additions and 0 deletions

View File

@ -0,0 +1,10 @@
sta !v+ +1
lda #<{c1}
clc
adc {z1}
sta !a+ +1
lda #>{c1}
adc {z1}+1
sta !a+ +2
!v: lda #0
!a: sta {c1}

View File

@ -54,6 +54,11 @@ public class TestPrograms {
compileAndCompare("examples/tetris/tetris");
}
@Test
public void testScanDesireProblem() throws IOException, URISyntaxException {
compileAndCompare("scan-desire-problem");
}
@Test
public void testClobberAProblem() throws IOException, URISyntaxException {
compileAndCompare("clobber-a-problem");

View File

@ -0,0 +1,66 @@
// Illustrates a problem with a missing fragment - pbuc1_derefidx_vwuz1=vbuz2
import "c64.kc"
import "keyboard.kc"
import "memory.kc"
import "multiply.kc"
const byte* screen = $400;
const byte* charset = $2000;
const byte* tileset = $2800;
const byte* colors = $d800;
const byte* level_address = $3000;
void main() {
init();
for (byte x = 0; x < 16; x++ ){
for (byte y = 0; y < 9; y++) {
byte z = x+y;
byte tile = level_address[z];
draw_block(tile,x,y,YELLOW);
}
}
do {
} while(true);
}
void init() {
init_sprites();
fill(screen,1000,0);
fill(colors,1000,BLACK);
*D018 = toD018(screen, charset);
asm {
lda #$5b // as there are more than 256 rasterlines, the topmost bit of $d011 serves as
sta $d011 // the 8th bit for the rasterline we want our irq to be triggered.
}
*BORDERCOL = BLACK;
*BGCOL1 = BLACK;
*BGCOL2 = RED;
*BGCOL3 = BLUE;
*BGCOL4 = GREEN;
}
void init_sprites() {
*SPRITES_ENABLE = %00000001; // one sprite enabled
*SPRITES_EXPAND_X = 0;
*SPRITES_EXPAND_Y = 0;
*SPRITES_XMSB = 0;
*SPRITES_COLS = WHITE;
*SPRITES_MC = 0;
}
void draw_block(byte tileno, byte x, byte y, byte color) {
tileno = tileno << 2;
word x1 = x << 1;
y = y << 1;
word z = mul8u(y,40);
z = z + x1;
byte drawtile = tileset[tileno];
screen[z] = drawtile;
colors[z] = YELLOW;
screen[z+1] = 1;
colors[z+1] = YELLOW;
screen[z+40] = 2;
colors[z+40] = YELLOW;
screen[z+41] = 3;
colors[z+41] = YELLOW;
}

View File

@ -0,0 +1,270 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label SPRITES_XMSB = $d010
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label BORDERCOL = $d020
.label BGCOL1 = $d021
.label BGCOL2 = $d022
.label BGCOL3 = $d023
.label BGCOL4 = $d024
.label SPRITES_COLS = $d027
.label D018 = $d018
.const BLACK = 0
.const WHITE = 1
.const RED = 2
.const GREEN = 5
.const BLUE = 6
.const YELLOW = 7
.label screen = $400
.label charset = $2000
.label tileset = $2800
.label colors = $d800
.label level_address = $3000
main: {
.label y = 3
.label x = 2
jsr init
lda #0
sta x
b1:
lda #0
sta y
b2:
lda x
clc
adc y
tay
lda level_address,y
ldy x
ldx y
jsr draw_block
inc y
lda y
cmp #9
bcc b2
inc x
lda x
cmp #$10
bcc b1
b3:
jmp b3
}
draw_block: {
.label tileno = 8
.label x1 = 9
.label z = 4
.label z_1 = 9
asl
asl
sta tileno
tya
asl
sta x1
lda #0
sta x1+1
txa
asl
tax
jsr mul8u
lda z_1
clc
adc z
sta z_1
lda z_1+1
adc z+1
sta z_1+1
ldy tileno
lda tileset,y
sta !v++1
lda #<screen
clc
adc z_1
sta !a++1
lda #>screen
adc z_1+1
sta !a++2
!v:
lda #0
!a:
sta screen
lda #<colors
clc
adc z_1
sta !++1
lda #>colors
adc z_1+1
sta !++2
lda #YELLOW
!:
sta colors
lda #<screen+1
clc
adc z_1
sta !++1
lda #>screen+1
adc z_1+1
sta !++2
lda #1
!:
sta screen+1
lda #<colors+1
clc
adc z_1
sta !++1
lda #>colors+1
adc z_1+1
sta !++2
lda #YELLOW
!:
sta colors+1
lda #<screen+$28
clc
adc z_1
sta !++1
lda #>screen+$28
adc z_1+1
sta !++2
lda #2
!:
sta screen+$28
lda #<colors+$28
clc
adc z_1
sta !++1
lda #>colors+$28
adc z_1+1
sta !++2
lda #YELLOW
!:
sta colors+$28
lda #<screen+$29
clc
adc z_1
sta !++1
lda #>screen+$29
adc z_1+1
sta !++2
lda #3
!:
sta screen+$29
lda #<colors+$29
clc
adc z_1
sta !++1
lda #>colors+$29
adc z_1+1
sta !++2
lda #YELLOW
!:
sta colors+$29
rts
}
mul8u: {
.const b = $28
.label mb = 6
.label res = 4
.label return = 4
lda #<b
sta mb
lda #>b
sta mb+1
lda #<0
sta res
sta res+1
b1:
cpx #0
bne b2
rts
b2:
txa
and #1
cmp #0
beq b4
lda res
clc
adc mb
sta res
lda res+1
adc mb+1
sta res+1
b4:
txa
lsr
tax
asl mb
rol mb+1
jmp b1
}
init: {
.const toD0181_return = (>(screen&$3fff)<<2)|(>charset)>>2&$f
jsr init_sprites
ldx #0
lda #<screen
sta fill.addr
lda #>screen
sta fill.addr+1
jsr fill
ldx #BLACK
lda #<colors
sta fill.addr
lda #>colors
sta fill.addr+1
jsr fill
lda #toD0181_return
sta D018
lda #$5b
sta $d011
lda #BLACK
sta BORDERCOL
sta BGCOL1
lda #RED
sta BGCOL2
lda #BLUE
sta BGCOL3
lda #GREEN
sta BGCOL4
rts
}
fill: {
.label end = 6
.label addr = 4
lda addr
clc
adc #<$3e8
sta end
lda addr+1
adc #>$3e8
sta end+1
b1:
txa
ldy #0
sta (addr),y
inc addr
bne !+
inc addr+1
!:
lda addr+1
cmp end+1
bne b1
lda addr
cmp end
bne b1
rts
}
init_sprites: {
lda #1
sta SPRITES_ENABLE
lda #0
sta SPRITES_EXPAND_X
sta SPRITES_EXPAND_Y
sta SPRITES_XMSB
lda #WHITE
sta SPRITES_COLS
lda #0
sta SPRITES_MC
rts
}

View File

@ -0,0 +1,137 @@
@begin: scope:[] from
[0] phi()
to:@21
@21: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @21
[3] phi()
main: scope:[main] from @21
[4] phi()
[5] call init
to:main::@1
main::@1: scope:[main] from main main::@4
[6] (byte) main::x#4 ← phi( main::@4/(byte) main::x#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
to:main::@2
main::@2: scope:[main] from main::@1 main::@8
[7] (byte) main::y#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@8/(byte) main::y#1 )
[8] (byte) main::z#0 ← (byte) main::x#4 + (byte) main::y#2
[9] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0)
[10] (byte) draw_block::tileno#0 ← (byte) main::tile#0
[11] (byte) draw_block::x#0 ← (byte) main::x#4
[12] (byte) draw_block::y#0 ← (byte) main::y#2
[13] call draw_block
to:main::@8
main::@8: scope:[main] from main::@2
[14] (byte) main::y#1 ← ++ (byte) main::y#2
[15] if((byte) main::y#1<(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@8
[16] (byte) main::x#1 ← ++ (byte) main::x#4
[17] if((byte) main::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto main::@1
to:main::@3
main::@3: scope:[main] from main::@3 main::@4
[18] phi()
to:main::@3
draw_block: scope:[draw_block] from main::@2
[19] (byte) draw_block::tileno#1 ← (byte) draw_block::tileno#0 << (byte/signed byte/word/signed word/dword/signed dword) 2
[20] (byte~) draw_block::$1 ← (byte) draw_block::x#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
[21] (word) draw_block::x1#0 ← ((word)) (byte~) draw_block::$1
[22] (byte) draw_block::y#1 ← (byte) draw_block::y#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
[23] (byte) mul8u::a#1 ← (byte) draw_block::y#1
[24] call mul8u
[25] (word) mul8u::return#2 ← (word) mul8u::res#2
to:draw_block::@1
draw_block::@1: scope:[draw_block] from draw_block
[26] (word) draw_block::z#0 ← (word) mul8u::return#2
[27] (word) draw_block::z#1 ← (word) draw_block::z#0 + (word) draw_block::x1#0
[28] (byte) draw_block::drawtile#0 ← *((const byte*) tileset#0 + (byte) draw_block::tileno#1)
[29] *((const byte*) screen#0 + (word) draw_block::z#1) ← (byte) draw_block::drawtile#0
[30] *((const byte*) colors#0 + (word) draw_block::z#1) ← (const byte) YELLOW#0
[31] *((const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word) draw_block::z#1) ← (byte/signed byte/word/signed word/dword/signed dword) 1
[32] *((const byte*) colors#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word) draw_block::z#1) ← (const byte) YELLOW#0
[33] *((const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word) draw_block::z#1) ← (byte/signed byte/word/signed word/dword/signed dword) 2
[34] *((const byte*) colors#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word) draw_block::z#1) ← (const byte) YELLOW#0
[35] *((const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41 + (word) draw_block::z#1) ← (byte/signed byte/word/signed word/dword/signed dword) 3
[36] *((const byte*) colors#0+(byte/signed byte/word/signed word/dword/signed dword) 41 + (word) draw_block::z#1) ← (const byte) YELLOW#0
to:draw_block::@return
draw_block::@return: scope:[draw_block] from draw_block::@1
[37] return
to:@return
mul8u: scope:[mul8u] from draw_block
[38] phi()
to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@4
[39] (word) mul8u::mb#2 ← phi( mul8u/((word))(const byte) mul8u::b#0 mul8u::@4/(word) mul8u::mb#1 )
[39] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 )
[39] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@4/(byte) mul8u::a#0 )
[40] if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2
to:mul8u::@return
mul8u::@return: scope:[mul8u] from mul8u::@1
[41] return
to:@return
mul8u::@2: scope:[mul8u] from mul8u::@1
[42] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1
[43] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4
to:mul8u::@7
mul8u::@7: scope:[mul8u] from mul8u::@2
[44] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
to:mul8u::@4
mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7
[45] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 )
[46] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[47] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:mul8u::@1
init: scope:[init] from main
[48] phi()
[49] call init_sprites
to:init::@2
init::@2: scope:[init] from init
[50] phi()
[51] call fill
to:init::@3
init::@3: scope:[init] from init::@2
[52] phi()
[53] call fill
to:init::toD0181
init::toD0181: scope:[init] from init::@3
[54] phi()
to:init::@1
init::@1: scope:[init] from init::toD0181
[55] *((const byte*) D018#0) ← (const byte) init::toD0181_return#0
asm { lda#$5b sta$d011 }
[57] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
[58] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0
[59] *((const byte*) BGCOL2#0) ← (const byte) RED#0
[60] *((const byte*) BGCOL3#0) ← (const byte) BLUE#0
[61] *((const byte*) BGCOL4#0) ← (const byte) GREEN#0
to:init::@return
init::@return: scope:[init] from init::@1
[62] return
to:@return
fill: scope:[fill] from init::@2 init::@3
[63] (byte) fill::val#3 ← phi( init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@3/(const byte) BLACK#0 )
[63] (byte*) fill::addr#0 ← phi( init::@2/(const byte*) screen#0 init::@3/(const byte*) colors#0 )
[64] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
[65] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[66] *((byte*) fill::addr#2) ← (byte) fill::val#3
[67] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[68] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@1
[69] return
to:@return
init_sprites: scope:[init_sprites] from init
[70] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1
[71] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[72] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[73] *((const byte*) SPRITES_XMSB#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[74] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0
[75] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:init_sprites::@return
init_sprites::@return: scope:[init_sprites] from init_sprites
[76] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,296 @@
(label) @21
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(const byte*) BGCOL1#0 BGCOL1 = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL2
(const byte*) BGCOL2#0 BGCOL2 = ((byte*))(word/dword/signed dword) 53282
(byte*) BGCOL3
(const byte*) BGCOL3#0 BGCOL3 = ((byte*))(word/dword/signed dword) 53283
(byte*) BGCOL4
(const byte*) BGCOL4#0 BGCOL4 = ((byte*))(word/dword/signed dword) 53284
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(const byte) BLUE#0 BLUE = (byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte) KEY_0
(byte) KEY_1
(byte) KEY_2
(byte) KEY_3
(byte) KEY_4
(byte) KEY_5
(byte) KEY_6
(byte) KEY_7
(byte) KEY_8
(byte) KEY_9
(byte) KEY_A
(byte) KEY_ARROW_LEFT
(byte) KEY_ARROW_UP
(byte) KEY_ASTERISK
(byte) KEY_AT
(byte) KEY_B
(byte) KEY_C
(byte) KEY_COLON
(byte) KEY_COMMA
(byte) KEY_COMMODORE
(byte) KEY_CRSR_DOWN
(byte) KEY_CRSR_RIGHT
(byte) KEY_CTRL
(byte) KEY_D
(byte) KEY_DEL
(byte) KEY_DOT
(byte) KEY_E
(byte) KEY_EQUALS
(byte) KEY_F
(byte) KEY_F1
(byte) KEY_F3
(byte) KEY_F5
(byte) KEY_F7
(byte) KEY_G
(byte) KEY_H
(byte) KEY_HOME
(byte) KEY_I
(byte) KEY_J
(byte) KEY_K
(byte) KEY_L
(byte) KEY_LSHIFT
(byte) KEY_M
(byte) KEY_MINUS
(byte) KEY_MODIFIER_COMMODORE
(byte) KEY_MODIFIER_CTRL
(byte) KEY_MODIFIER_LSHIFT
(byte) KEY_MODIFIER_RSHIFT
(byte) KEY_MODIFIER_SHIFT
(byte) KEY_N
(byte) KEY_O
(byte) KEY_P
(byte) KEY_PLUS
(byte) KEY_POUND
(byte) KEY_Q
(byte) KEY_R
(byte) KEY_RETURN
(byte) KEY_RSHIFT
(byte) KEY_RUNSTOP
(byte) KEY_S
(byte) KEY_SEMICOLON
(byte) KEY_SLASH
(byte) KEY_SPACE
(byte) KEY_T
(byte) KEY_U
(byte) KEY_V
(byte) KEY_W
(byte) KEY_X
(byte) KEY_Y
(byte) KEY_Z
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(const byte) RED#0 RED = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*) SPRITES_COLS
(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_X
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = ((byte*))(word/dword/signed dword) 53277
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = ((byte*))(word/dword/signed dword) 53271
(byte*) SPRITES_MC
(const byte*) SPRITES_MC#0 SPRITES_MC = ((byte*))(word/dword/signed dword) 53276
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
(const byte) YELLOW#0 YELLOW = (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) charset
(const byte*) charset#0 charset = ((byte*))(word/signed word/dword/signed dword) 8192
(byte*) colors
(const byte*) colors#0 colors = ((byte*))(word/dword/signed dword) 55296
(void()) draw_block((byte) draw_block::tileno , (byte) draw_block::x , (byte) draw_block::y , (byte) draw_block::color)
(byte~) draw_block::$1 reg byte a 4.0
(label) draw_block::@1
(label) draw_block::@return
(byte) draw_block::color
(byte) draw_block::drawtile
(byte) draw_block::drawtile#0 reg byte a 4.0
(byte) draw_block::tileno
(byte) draw_block::tileno#0 reg byte a 34.33333333333333
(byte) draw_block::tileno#1 tileno zp ZP_BYTE:8 0.4444444444444444
(byte) draw_block::x
(byte) draw_block::x#0 reg byte y 34.33333333333333
(word) draw_block::x1
(word) draw_block::x1#0 x1 zp ZP_WORD:9 0.6666666666666666
(byte) draw_block::y
(byte) draw_block::y#0 reg byte x 25.75
(byte) draw_block::y#1 reg byte a 4.0
(word) draw_block::z
(word) draw_block::z#0 z zp ZP_WORD:4 4.0
(word) draw_block::z#1 z#1 zp ZP_WORD:9 2.0000000000000004
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
(byte*) fill::addr
(byte*) fill::addr#0 addr zp ZP_WORD:4 2.0
(byte*) fill::addr#1 addr zp ZP_WORD:4 16.5
(byte*) fill::addr#2 addr zp ZP_WORD:4 17.5
(byte*) fill::end
(byte*) fill::end#0 end zp ZP_WORD:6 2.6
(word) fill::size
(byte*) fill::start
(byte) fill::val
(byte) fill::val#3 reg byte x 1.8333333333333333
(void()) init()
(label) init::@1
(label) init::@2
(label) init::@3
(label) init::@return
(label) init::toD0181
(word~) init::toD0181_$0
(word~) init::toD0181_$1
(word~) init::toD0181_$2
(byte~) init::toD0181_$3
(word~) init::toD0181_$4
(byte~) init::toD0181_$5
(byte~) init::toD0181_$6
(byte~) init::toD0181_$7
(byte~) init::toD0181_$8
(byte*) init::toD0181_gfx
(byte) init::toD0181_return
(const byte) init::toD0181_return#0 toD0181_return = >((word))(const byte*) screen#0&(word/signed word/dword/signed dword) 16383<<(byte/signed byte/word/signed word/dword/signed dword) 2|>((word))(const byte*) charset#0>>(byte/signed byte/word/signed word/dword/signed dword) 2&(byte/signed byte/word/signed word/dword/signed dword) 15
(byte*) init::toD0181_screen
(void()) init_sprites()
(label) init_sprites::@return
(byte[]) keyboard_char_keycodes
(byte[8]) keyboard_events
(byte) keyboard_events_size
(byte[8]) keyboard_matrix_col_bitmask
(byte[8]) keyboard_matrix_row_bitmask
(byte) keyboard_modifiers
(byte[8]) keyboard_scan_values
(byte*) level_address
(const byte*) level_address#0 level_address = ((byte*))(word/signed word/dword/signed dword) 12288
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@8
(byte) main::tile
(byte) main::tile#0 reg byte a 202.0
(byte) main::x
(byte) main::x#1 x zp ZP_BYTE:2 16.5
(byte) main::x#4 x zp ZP_BYTE:2 22.4
(byte) main::y
(byte) main::y#1 y zp ZP_BYTE:3 151.5
(byte) main::y#2 y zp ZP_BYTE:3 57.714285714285715
(byte) main::z
(byte) main::z#0 reg byte a 202.0
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
(byte~) mul8u::$1 reg byte a 2002.0
(label) mul8u::@1
(label) mul8u::@2
(label) mul8u::@4
(label) mul8u::@7
(label) mul8u::@return
(byte) mul8u::a
(byte) mul8u::a#0 reg byte x 1001.0
(byte) mul8u::a#1 reg byte x 2.0
(byte) mul8u::a#2 reg byte x 667.6666666666667
(byte) mul8u::b
(const byte) mul8u::b#0 b = (byte/signed byte/word/signed word/dword/signed dword) 40
(word) mul8u::mb
(word) mul8u::mb#1 mb zp ZP_WORD:6 2002.0
(word) mul8u::mb#2 mb zp ZP_WORD:6 429.0
(word) mul8u::res
(word) mul8u::res#1 res zp ZP_WORD:4 2002.0
(word) mul8u::res#2 res zp ZP_WORD:4 500.83333333333337
(word) mul8u::res#6 res zp ZP_WORD:4 1001.0
(word) mul8u::return
(word) mul8u::return#2 return zp ZP_WORD:4 4.0
(byte*) screen
(const byte*) screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) tileset
(const byte*) tileset#0 tileset = ((byte*))(word/signed word/dword/signed dword) 10240
zp ZP_BYTE:2 [ main::x#4 main::x#1 ]
zp ZP_BYTE:3 [ main::y#2 main::y#1 ]
reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
zp ZP_WORD:4 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 draw_block::z#0 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp ZP_WORD:6 [ mul8u::mb#2 mul8u::mb#1 fill::end#0 ]
reg byte x [ fill::val#3 ]
reg byte a [ main::z#0 ]
reg byte a [ main::tile#0 ]
reg byte a [ draw_block::tileno#0 ]
reg byte y [ draw_block::x#0 ]
reg byte x [ draw_block::y#0 ]
zp ZP_BYTE:8 [ draw_block::tileno#1 ]
reg byte a [ draw_block::$1 ]
zp ZP_WORD:9 [ draw_block::x1#0 draw_block::z#1 ]
reg byte a [ draw_block::y#1 ]
reg byte a [ draw_block::drawtile#0 ]
reg byte a [ mul8u::$1 ]