1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-01-14 09:30:57 +00:00

A very early grid bob.

This commit is contained in:
jespergravgaard 2019-12-08 15:16:32 +01:00
parent 9daf5d7dc8
commit ad28ad18f9
5 changed files with 3842 additions and 5020 deletions

View File

@ -29,9 +29,9 @@ signed char[0x140] align(0x40) SIN = kickasm {{
signed char* COS = SIN+$40; // sin(x) = cos(x+PI/2)
// The BASIC screen
const char* SCREEN_BASIC = 0x0400;
const char* BASIC_SCREEN = 0x0400;
// The BASIC charset
const char* CHARSET_BASIC = 0x1000;
const char* BASIC_CHARSET = 0x1000;
// The BOB screen
const char* BOB_SCREEN = 0x2800;
// The BOB charset
@ -48,7 +48,7 @@ const char BOB_SHIFTS_Y = 8;
const char BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y;
// The number of BOBs to render
const char NUM_BOBS = 20;
const char NUM_BOBS = 25;
void main() {
mulf_init();
@ -58,25 +58,38 @@ void main() {
*D018 = toD018(BOB_SCREEN, BOB_CHARSET);
// Clear screen
memset(BOB_SCREEN, 0x00, 1000);
// Render Rotated BOBs
char angle = 0;
// Origin point
int origX = 0x0a00;
int origY = 0x0a00;
// Row and column offset vectors
int rowOffsetX = 0x0c00;
int rowOffsetY = 0x0100;
int colOffsetX = 0x0100;
int colOffsetY = 0x1800;
// Render Grid of BOBs
while(true) {
do { } while (*RASTER<$f8);
*BORDERCOL = 0xf;
renderBobCleanup();
signed char r = 30;
char a = angle;
for(char i: 0..NUM_BOBS-1) {
//kickasm {{ .break }}
*BORDERCOL = 1;
int x = mulf8s(r, COS[a]) + 75*0x100;
int y = mulf8s(r, SIN[a])*2 + 90*0x100;
*BORDERCOL = 2;
a += 98;
r += 3;
renderBob(>x, >y);
int rowX = origX;
int rowY = origY;
for(char col: 0..4) {
int x = rowX;
int y = rowY;
for(char row: 0..4) {
//kickasm {{ .break }}
*BORDERCOL = 1;
renderBob(>x, >y);
x += rowOffsetX;
y += rowOffsetY;
*BORDERCOL = 2;
}
rowX += colOffsetX;
rowY += colOffsetY;
}
angle += 3;
origX += 0x0100;
rowOffsetY += 0x0080;
*BORDERCOL = 0;
if(keyboard_key_pressed(KEY_SPACE)) {
break;
@ -85,8 +98,8 @@ void main() {
// Wait for space release
while(keyboard_key_pressed(KEY_SPACE)) {}
// Return to BASIC
vicSelectGfxBank(SCREEN_BASIC);
*D018 = toD018(SCREEN_BASIC, CHARSET_BASIC);
vicSelectGfxBank(BASIC_SCREEN);
*D018 = toD018(BASIC_SCREEN, BASIC_CHARSET);
}
// Table used for deleting rendered BOB's. Contains pointers to first char of each BOB.
@ -148,7 +161,7 @@ void renderBobCleanup() {
// Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES
// Modifies PROTO_BOB by shifting it around
void prepareBobs() {
progress_init(SCREEN_BASIC);
progress_init(BASIC_SCREEN);
bob_charset_next_id = 0;
// Ensure that glyph #0 is empty
charsetFindOrAddGlyph(PROTO_BOB+48, BOB_CHARSET);

View File

@ -15,9 +15,9 @@
.label CIA2_PORT_A_DDR = $dd02
.const KEY_SPACE = $3c
// The BASIC screen
.label SCREEN_BASIC = $400
.label BASIC_SCREEN = $400
// The BASIC charset
.label CHARSET_BASIC = $1000
.label BASIC_CHARSET = $1000
// The BOB screen
.label BOB_SCREEN = $2800
// The BOB charset
@ -29,33 +29,37 @@
// The size of a sub-table of BOB_TABLES
.const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y
// The number of BOBs to render
.const NUM_BOBS = $14
.const NUM_BOBS = $19
.const SIZEOF_POINTER = 2
.label COS = SIN+$40
// BOB charset ID of the next glyph to be added
.label bob_charset_next_id = $d
.label bob_charset_next_id = $e
// Current index within the progress cursor (0-7)
.label progress_idx = 3
.label progress_idx = 9
// Current position of the progress cursor
.label progress_cursor = $b
.label progress_cursor = $17
// Pointer to the next clean-up to add
// Prepare for next clean-up
.label renderBobCleanupNext = 6
.label renderBobCleanupNext = $a
main: {
.const origY = $a00
// Row and column offset vectors
.const rowOffsetX = $c00
.const colOffsetX = $100
.const colOffsetY = $1800
.const vicSelectGfxBank1_toDd001_return = 3
.const vicSelectGfxBank2_toDd001_return = 3
.const toD0181_return = (>(BOB_SCREEN&$3fff)*4)|(>BOB_CHARSET)/4&$f
.const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f
.label __10 = $b
.label __12 = $b
.label __13 = $b
.label x = 8
.label y = $b
.label a = 4
.label r = 3
.label i = 5
// Render Rotated BOBs
.label angle = 2
.const toD0182_return = (>(BASIC_SCREEN&$3fff)*4)|(>BASIC_CHARSET)/4&$f
.label x = $13
.label y = 3
.label x_1 = 5
.label y_1 = 7
.label rowX = $13
.label rowY = 3
.label col = 2
// Origin point
.label origX = $15
.label rowOffsetY = $17
jsr mulf_init
jsr prepareBobs
jsr renderBobInit
@ -66,8 +70,15 @@ main: {
lda #toD0181_return
sta D018
jsr memset
lda #0
sta.z angle
lda #<$100
sta.z rowOffsetY
lda #>$100
sta.z rowOffsetY+1
lda #<$a00
sta.z origX
lda #>$a00
sta.z origX+1
// Render Grid of BOBs
__b2:
lda RASTER
cmp #$f8
@ -75,75 +86,101 @@ main: {
lda #$f
sta BORDERCOL
jsr renderBobCleanup
lda.z angle
sta.z a
lda.z origX
sta.z x
lda.z origX+1
sta.z x+1
lda #0
sta.z i
sta.z col
lda #<RENDERBOB_CLEANUP
sta.z renderBobCleanupNext
lda #>RENDERBOB_CLEANUP
sta.z renderBobCleanupNext+1
lda #$1e
sta.z r
lda #<origY
sta.z y
lda #>origY
sta.z y+1
__b4:
lda.z x
sta.z x_1
lda.z x+1
sta.z x_1+1
lda.z y
sta.z y_1
lda.z y+1
sta.z y_1+1
ldx #0
__b5:
//kickasm {{ .break }}
lda #1
sta BORDERCOL
lda.z r
ldy.z a
ldx COS,y
jsr mulf8s
lda.z __10
lda.z x_1+1
sta.z renderBob.xpos
lda.z y_1+1
sta.z renderBob.ypos
jsr renderBob
clc
adc #<$4b*$100
sta.z x
lda.z __10+1
adc #>$4b*$100
sta.z x+1
lda.z r
ldy.z a
ldx SIN,y
jsr mulf8s
asl.z __13
rol.z __13+1
lda.z x_1
adc #<rowOffsetX
sta.z x_1
lda.z x_1+1
adc #>rowOffsetX
sta.z x_1+1
lda.z y_1
clc
lda.z y
adc #<$5a*$100
sta.z y
lda.z y+1
adc #>$5a*$100
sta.z y+1
adc.z rowOffsetY
sta.z y_1
lda.z y_1+1
adc.z rowOffsetY+1
sta.z y_1+1
lda #2
sta BORDERCOL
lax.z a
axs #-[$62]
stx.z a
lax.z r
axs #-[3]
stx.z r
lda.z x+1
sta.z renderBob.xpos
lda.z y+1
tax
jsr renderBob
inc.z i
lda #NUM_BOBS-1+1
cmp.z i
inx
cpx #5
bne __b5
clc
lda.z rowX
adc #<colOffsetX
sta.z rowX
lda.z rowX+1
adc #>colOffsetX
sta.z rowX+1
clc
lda.z rowY
adc #<colOffsetY
sta.z rowY
lda.z rowY+1
adc #>colOffsetY
sta.z rowY+1
inc.z col
lda #5
cmp.z col
bne __b4
lax.z angle
axs #-[3]
stx.z angle
clc
lda.z origX
adc #<$100
sta.z origX
lda.z origX+1
adc #>$100
sta.z origX+1
clc
lda.z rowOffsetY
adc #<$80
sta.z rowOffsetY
lda.z rowOffsetY+1
adc #>$80
sta.z rowOffsetY+1
lda #0
sta BORDERCOL
jsr keyboard_key_pressed
cmp #0
bne __b6
bne __b8
jmp __b2
// Wait for space release
__b6:
__b8:
jsr keyboard_key_pressed
cmp #0
bne __b6
bne __b8
lda #3
sta CIA2_PORT_A_DDR
lda #vicSelectGfxBank2_toDd001_return
@ -178,19 +215,21 @@ keyboard_matrix_read: {
// Render a single BOB at a given x/y-position
// X-position is 0-151. Each x-position is 2 pixels wide.
// Y-position is 0-183. Each y-position is 1 pixel high.
// renderBob(byte zeropage($e) xpos, byte register(X) ypos)
// renderBob(byte zeropage($d) xpos, byte zeropage($e) ypos)
renderBob: {
.label __2 = $b
.label __5 = $d
.label xpos = $e
.label x_char_offset = $a
.label y_offset = $b
.label screen = $b
.label __2 = $10
.label __5 = $12
.label xpos = $d
.label ypos = $e
.label x_char_offset = $f
.label y_offset = $10
.label screen = $10
.label bob_table_idx = $12
lda.z xpos
lsr
lsr
sta.z x_char_offset
txa
lda.z ypos
lsr
lsr
lsr
@ -214,16 +253,16 @@ renderBob: {
bcc !+
inc.z screen+1
!:
txa
and #7
lda #7
and.z ypos
asl
asl
sta.z __5
lda #3
and.z xpos
clc
adc.z __5
tax
adc.z bob_table_idx
sta.z bob_table_idx
ldy #0
lda.z screen
sta (renderBobCleanupNext),y
@ -237,112 +276,47 @@ renderBob: {
bcc !+
inc.z renderBobCleanupNext+1
!:
lda BOB_TABLES,x
ldy.z bob_table_idx
lda BOB_TABLES,y
ldy #0
sta (screen),y
lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,x
ldy.z bob_table_idx
lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,y
ldy #$28
sta (screen),y
lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,x
ldy.z bob_table_idx
lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,y
ldy #$50
sta (screen),y
lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,x
ldy.z bob_table_idx
lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,y
ldy #1
sta (screen),y
lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,x
ldy.z bob_table_idx
lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,y
ldy #$29
sta (screen),y
lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,x
ldy.z bob_table_idx
lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,y
ldy #$51
sta (screen),y
lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,x
ldy.z bob_table_idx
lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,y
ldy #2
sta (screen),y
lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,x
ldy.z bob_table_idx
lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,y
ldy #$2a
sta (screen),y
lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,x
ldy.z bob_table_idx
lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,y
ldy #$52
sta (screen),y
rts
}
// Fast multiply two signed bytes to a word result
// mulf8s(signed byte register(A) a, signed byte register(X) b)
mulf8s: {
.label return = $b
jsr mulf8u_prepare
stx.z mulf8s_prepared.b
jsr mulf8s_prepared
rts
}
// Calculate fast multiply with a prepared unsigned byte to a word result
// The prepared number is set by calling mulf8s_prepare(byte a)
// mulf8s_prepared(signed byte zeropage($e) b)
mulf8s_prepared: {
.label memA = $fd
.label m = $b
.label b = $e
lda.z b
jsr mulf8u_prepared
lda memA
cmp #0
bpl __b1
lda.z m+1
sec
sbc.z b
sta.z m+1
__b1:
lda.z b
cmp #0
bpl __b2
lda.z m+1
sec
sbc memA
sta.z m+1
__b2:
rts
}
// Calculate fast multiply with a prepared unsigned byte to a word result
// The prepared number is set by calling mulf8u_prepare(byte a)
// mulf8u_prepared(byte register(A) b)
mulf8u_prepared: {
.label resL = $fe
.label memB = $ff
.label return = $b
sta memB
tax
sec
sm1:
lda mulf_sqr1_lo,x
sm2:
sbc mulf_sqr2_lo,x
sta resL
sm3:
lda mulf_sqr1_hi,x
sm4:
sbc mulf_sqr2_hi,x
sta memB
lda resL
sta.z return
lda memB
sta.z return+1
rts
}
// Prepare for fast multiply with an unsigned byte to a word result
// mulf8u_prepare(byte register(A) a)
mulf8u_prepare: {
.label memA = $fd
sta memA
sta mulf8u_prepared.sm1+1
sta mulf8u_prepared.sm3+1
eor #$ff
sta mulf8u_prepared.sm2+1
sta mulf8u_prepared.sm4+1
rts
}
// Clean Up the rendered BOB's
renderBobCleanup: {
.label screen = $f
.label screen = $13
ldx #0
__b1:
txa
@ -382,7 +356,7 @@ memset: {
.const c = 0
.const num = $3e8
.label end = str+num
.label dst = 6
.label dst = $15
lda #<str
sta.z dst
lda #>str
@ -407,10 +381,10 @@ memset: {
}
// Initialize the tables used by renderBob()
renderBobInit: {
.label __0 = $f
.label __1 = $f
.label __6 = $11
.label __7 = $f
.label __0 = $15
.label __1 = $15
.label __6 = $17
.label __7 = $15
ldx #0
__b1:
txa
@ -465,13 +439,13 @@ renderBobInit: {
// Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES
// Modifies PROTO_BOB by shifting it around
prepareBobs: {
.label bob_table = $f
.label bob_table = 3
.label shift_y = 2
// Populate charset and tables
.label bob_glyph = 6
.label cell = $a
.label bob_table_idx = 4
.label shift_x = 5
.label bob_glyph = $13
.label cell = $12
.label bob_table_idx = $c
.label shift_x = $d
jsr progress_init
lda #<PROTO_BOB+$30
sta.z charsetFindOrAddGlyph.glyph
@ -483,9 +457,9 @@ prepareBobs: {
lda #0
sta.z bob_table_idx
sta.z progress_idx
lda #<SCREEN_BASIC
lda #<BASIC_SCREEN
sta.z progress_cursor
lda #>SCREEN_BASIC
lda #>BASIC_SCREEN
sta.z progress_cursor+1
lda #0
sta.z shift_y
@ -580,10 +554,10 @@ progress_inc: {
}
// Looks through a charset to find a glyph if present. If not present it is added.
// Returns the glyph ID
// charsetFindOrAddGlyph(byte* zeropage(6) glyph)
// charsetFindOrAddGlyph(byte* zeropage($13) glyph)
charsetFindOrAddGlyph: {
.label glyph = 6
.label glyph_cursor = $11
.label glyph = $13
.label glyph_cursor = 5
lda #<BOB_CHARSET
sta.z glyph_cursor
lda #>BOB_CHARSET
@ -636,8 +610,8 @@ charsetFindOrAddGlyph: {
}
// Shift PROTO_BOB right one X pixel
protoBobShiftRight: {
.label carry = $e
.label i = $a
.label carry = $f
.label i = $12
ldy #0
ldx #0
txa
@ -708,17 +682,17 @@ progress_init: {
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4)
mulf_init: {
// x/2
.label c = $d
.label c = 9
// Counter used for determining x%2==0
.label sqr1_hi = $f
.label sqr1_hi = $a
// Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4
.label sqr = $b
.label sqr1_lo = 6
.label sqr = $15
.label sqr1_lo = 7
// Decrease or increase x_255 - initially we decrease
.label sqr2_hi = 8
.label sqr2_lo = $11
.label sqr2_hi = $13
.label sqr2_lo = $10
//Start with g(0)=f(255)
.label dir = $e
.label dir = $c
ldx #0
lda #<mulf_sqr1_hi+1
sta.z sqr1_hi
@ -849,14 +823,6 @@ PROTO_BOB:
.for (var y=0; y<24; y++)
.byte pic.getSinglecolorByte(x,y)
// Sine and Cosine tables
// Angles: $00=0, $80=PI,$100=2*PI
// Sine/Cosine: signed fixed [-$7f,$7f]
.align $40
SIN:
.for(var i=0;i<$140;i++)
.byte >round($7fff*sin(i*2*PI/256))
// Tables containing the char to use for a specific cell of a shifted BOB.
// char_id = BOB_TABLES[cell*BOB_SUBTABLE_SIZE + shift_y*BOB_SHIFTS_X + shift_x];
BOB_TABLES: .fill 9*8*4, 0

View File

@ -12,16 +12,16 @@
main: scope:[main] from @1
[4] phi()
[5] call mulf_init
to:main::@9
main::@9: scope:[main] from main
to:main::@11
main::@11: scope:[main] from main
[6] phi()
[7] call prepareBobs
to:main::@10
main::@10: scope:[main] from main::@9
to:main::@12
main::@12: scope:[main] from main::@11
[8] phi()
[9] call renderBobInit
to:main::vicSelectGfxBank1
main::vicSelectGfxBank1: scope:[main] from main::@10
main::vicSelectGfxBank1: scope:[main] from main::@12
[10] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3
to:main::vicSelectGfxBank1_toDd001
main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1
@ -32,13 +32,14 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001
to:main::toD0181
main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1
[13] phi()
to:main::@7
main::@7: scope:[main] from main::toD0181
to:main::@9
main::@9: scope:[main] from main::toD0181
[14] *((const byte*) D018) ← (const byte) main::toD0181_return#0
[15] call memset
to:main::@1
main::@1: scope:[main] from main::@15 main::@7
[16] (byte) main::angle#8 ← phi( main::@7/(byte) 0 main::@15/(byte) main::angle#1 )
main::@1: scope:[main] from main::@15 main::@9
[16] (signed word) main::rowOffsetY#10 ← phi( main::@9/(signed word) $100 main::@15/(signed word) main::rowOffsetY#1 )
[16] (signed word) main::origX#8 ← phi( main::@9/(signed word) $a00 main::@15/(signed word) main::origX#1 )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[17] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2
@ -46,532 +47,460 @@ main::@2: scope:[main] from main::@1 main::@2
main::@3: scope:[main] from main::@2
[18] *((const byte*) BORDERCOL) ← (byte) $f
[19] call renderBobCleanup
to:main::@11
main::@11: scope:[main] from main::@3
[20] (byte) main::a#6 ← (byte) main::angle#8
to:main::@4
main::@4: scope:[main] from main::@11 main::@14
[21] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@14/(byte) main::i#1 )
[21] (byte**) renderBobCleanupNext#17 ← phi( main::@11/(const byte**) RENDERBOB_CLEANUP main::@14/(byte**) renderBobCleanupNext#13 )
[21] (byte) main::a#2 ← phi( main::@11/(byte) main::a#6 main::@14/(byte) main::a#1 )
[21] (signed byte) main::r#2 ← phi( main::@11/(signed byte) $1e main::@14/(signed byte) main::r#1 )
[22] *((const byte*) BORDERCOL) ← (byte) 1
[23] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2
[24] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2)
[25] call mulf8s
[26] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0
to:main::@12
main::@12: scope:[main] from main::@4
[27] (signed word~) main::$10 ← (signed word) mulf8s::return#2
[28] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100
[29] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2
[30] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2)
[31] call mulf8s
[32] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0
to:main::@13
main::@13: scope:[main] from main::@12
[33] (signed word~) main::$12 ← (signed word) mulf8s::return#3
[34] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1
[35] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100
[36] *((const byte*) BORDERCOL) ← (byte) 2
[37] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62
[38] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3
[39] (byte) renderBob::xpos#0 ← > (signed word) main::x#0
[40] (byte) renderBob::ypos#0 ← > (signed word) main::y#0
[41] call renderBob
to:main::@14
main::@14: scope:[main] from main::@13
[42] (byte) main::i#1 ← ++ (byte) main::i#2
[43] if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4
main::@13: scope:[main] from main::@3
[20] (signed word) main::x#4 ← (signed word) main::origX#8
to:main::@4
main::@4: scope:[main] from main::@13 main::@6
[21] (byte) main::col#5 ← phi( main::@13/(byte) 0 main::@6/(byte) main::col#1 )
[21] (byte**) renderBobCleanupNext#21 ← phi( main::@13/(const byte**) RENDERBOB_CLEANUP main::@6/(byte**) renderBobCleanupNext#13 )
[21] (signed word) main::y#0 ← phi( main::@13/(const signed word) main::origY main::@6/(signed word) main::rowY#1 )
[21] (signed word) main::x#0 ← phi( main::@13/(signed word) main::x#4 main::@6/(signed word) main::rowX#1 )
[22] (signed word) main::x#7 ← (signed word) main::x#0
[23] (signed word) main::y#6 ← (signed word) main::y#0
to:main::@5
main::@5: scope:[main] from main::@14
[44] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3
[45] *((const byte*) BORDERCOL) ← (byte) 0
[46] call keyboard_key_pressed
[47] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0
main::@5: scope:[main] from main::@14 main::@4
[24] (byte) main::row#2 ← phi( main::@14/(byte) main::row#1 main::@4/(byte) 0 )
[24] (byte**) renderBobCleanupNext#17 ← phi( main::@14/(byte**) renderBobCleanupNext#13 main::@4/(byte**) renderBobCleanupNext#21 )
[24] (signed word) main::y#2 ← phi( main::@14/(signed word) main::y#1 main::@4/(signed word) main::y#6 )
[24] (signed word) main::x#2 ← phi( main::@14/(signed word) main::x#1 main::@4/(signed word) main::x#7 )
[25] *((const byte*) BORDERCOL) ← (byte) 1
[26] (byte) renderBob::xpos#0 ← > (signed word) main::x#2
[27] (byte) renderBob::ypos#0 ← > (signed word) main::y#2
[28] call renderBob
to:main::@14
main::@14: scope:[main] from main::@5
[29] (signed word) main::x#1 ← (signed word) main::x#2 + (const signed word) main::rowOffsetX
[30] (signed word) main::y#1 ← (signed word) main::y#2 + (signed word) main::rowOffsetY#10
[31] *((const byte*) BORDERCOL) ← (byte) 2
[32] (byte) main::row#1 ← ++ (byte) main::row#2
[33] if((byte) main::row#1!=(byte) 5) goto main::@5
to:main::@6
main::@6: scope:[main] from main::@14
[34] (signed word) main::rowX#1 ← (signed word) main::x#0 + (const signed word) main::colOffsetX
[35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const signed word) main::colOffsetY
[36] (byte) main::col#1 ← ++ (byte) main::col#5
[37] if((byte) main::col#1!=(byte) 5) goto main::@4
to:main::@7
main::@7: scope:[main] from main::@6
[38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100
[39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80
[40] *((const byte*) BORDERCOL) ← (byte) 0
[41] call keyboard_key_pressed
[42] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0
to:main::@15
main::@15: scope:[main] from main::@5
[48] (byte~) main::$19 ← (byte) keyboard_key_pressed::return#2
[49] if((byte) 0!=(byte~) main::$19) goto main::@6
main::@15: scope:[main] from main::@7
[43] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2
[44] if((byte) 0!=(byte~) main::$15) goto main::@8
to:main::@1
main::@6: scope:[main] from main::@15 main::@16
[50] phi()
[51] call keyboard_key_pressed
[52] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0
main::@8: scope:[main] from main::@15 main::@16
[45] phi()
[46] call keyboard_key_pressed
[47] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0
to:main::@16
main::@16: scope:[main] from main::@6
[53] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#3
[54] if((byte) 0!=(byte~) main::$21) goto main::@6
main::@16: scope:[main] from main::@8
[48] (byte~) main::$17 ← (byte) keyboard_key_pressed::return#3
[49] if((byte) 0!=(byte~) main::$17) goto main::@8
to:main::vicSelectGfxBank2
main::vicSelectGfxBank2: scope:[main] from main::@16
[55] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3
[50] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3
to:main::vicSelectGfxBank2_toDd001
main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2
[56] phi()
[51] phi()
to:main::vicSelectGfxBank2_@1
main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001
[57] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0
[52] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0
to:main::toD0182
main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1
[58] phi()
to:main::@8
main::@8: scope:[main] from main::toD0182
[59] *((const byte*) D018) ← (const byte) main::toD0182_return#0
[53] phi()
to:main::@10
main::@10: scope:[main] from main::toD0182
[54] *((const byte*) D018) ← (const byte) main::toD0182_return#0
to:main::@return
main::@return: scope:[main] from main::@8
[60] return
main::@return: scope:[main] from main::@10
[55] return
to:@return
(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@5 main::@6
[61] phi()
[62] call keyboard_matrix_read
[63] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@7 main::@8
[56] phi()
[57] call keyboard_matrix_read
[58] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
to:keyboard_key_pressed::@1
keyboard_key_pressed::@1: scope:[keyboard_key_pressed] from keyboard_key_pressed
[64] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
[65] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0)
[59] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
[60] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0)
to:keyboard_key_pressed::@return
keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed::@1
[66] return
[61] return
to:@return
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed
[67] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0)
[68] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B)
[62] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0)
[63] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B)
to:keyboard_matrix_read::@return
keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read
[69] return
[64] return
to:@return
(void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos)
renderBob: scope:[renderBob] from main::@13
[70] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2
[71] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3
[72] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1
[73] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8)
[74] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0
[75] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0
[76] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7
[77] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2
[78] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3
[79] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6
[80] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0
[81] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER
[82] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0)
[83] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[84] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[85] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[86] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[87] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[88] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[89] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[90] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
renderBob: scope:[renderBob] from main::@5
[65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2
[66] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3
[67] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1
[68] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8)
[69] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0
[70] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0
[71] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7
[72] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2
[73] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3
[74] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6
[75] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0
[76] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER
[77] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0)
[78] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[79] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[80] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[81] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[82] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[83] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[84] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
[85] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
to:renderBob::@return
renderBob::@return: scope:[renderBob] from renderBob
[91] return
to:@return
(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b)
mulf8s: scope:[mulf8s] from main::@12 main::@4
[92] (signed byte) mulf8s::b#2 ← phi( main::@12/(signed byte) mulf8s::b#1 main::@4/(signed byte) mulf8s::b#0 )
[92] (signed byte) mulf8s::mulf8s_prepare1_a#0 ← phi( main::@12/(signed byte) mulf8s::a#1 main::@4/(signed byte) mulf8s::a#0 )
to:mulf8s::mulf8s_prepare1
mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s
[93] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0
[94] call mulf8u_prepare
to:mulf8s::@1
mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1
[95] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2
[96] call mulf8s_prepared
to:mulf8s::@2
mulf8s::@2: scope:[mulf8s] from mulf8s::@1
[97] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4
to:mulf8s::@return
mulf8s::@return: scope:[mulf8s] from mulf8s::@2
[98] return
to:@return
(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b)
mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1
[99] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0
[100] call mulf8u_prepared
[101] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0
to:mulf8s_prepared::@5
mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared
[102] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2
[103] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1
to:mulf8s_prepared::@3
mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5
[104] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0
[105] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0
[106] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
to:mulf8s_prepared::@1
mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5
[107] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 )
[108] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2
to:mulf8s_prepared::@4
mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1
[109] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5
[110] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA)
[111] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
to:mulf8s_prepared::@2
mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4
[112] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
to:mulf8s_prepared::@return
mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2
[113] return
to:@return
(word()) mulf8u_prepared((byte) mulf8u_prepared::b)
mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared
[114] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0
asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB }
[116] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL)
to:mulf8u_prepared::@return
mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared
[117] return
to:@return
(void()) mulf8u_prepare((byte) mulf8u_prepare::a)
mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1
[118] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0
asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 }
to:mulf8u_prepare::@return
mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare
[120] return
[86] return
to:@return
(void()) renderBobCleanup()
renderBobCleanup: scope:[renderBobCleanup] from main::@3
[121] phi()
[87] phi()
to:renderBobCleanup::@1
renderBobCleanup::@1: scope:[renderBobCleanup] from renderBobCleanup renderBobCleanup::@1
[122] (byte) renderBobCleanup::i#2 ← phi( renderBobCleanup/(byte) 0 renderBobCleanup::@1/(byte) renderBobCleanup::i#1 )
[123] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1
[124] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1)
[125] *((byte*) renderBobCleanup::screen#0) ← (byte) 0
[126] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0
[127] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0
[128] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0
[129] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0
[130] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0
[131] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0
[132] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0
[133] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0
[134] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2
[135] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1
[88] (byte) renderBobCleanup::i#2 ← phi( renderBobCleanup/(byte) 0 renderBobCleanup::@1/(byte) renderBobCleanup::i#1 )
[89] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1
[90] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1)
[91] *((byte*) renderBobCleanup::screen#0) ← (byte) 0
[92] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0
[93] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0
[94] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0
[95] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0
[96] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0
[97] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0
[98] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0
[99] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0
[100] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2
[101] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1
to:renderBobCleanup::@return
renderBobCleanup::@return: scope:[renderBobCleanup] from renderBobCleanup::@1
[136] return
[102] return
to:@return
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset] from main::@7
[137] phi()
memset: scope:[memset] from main::@9
[103] phi()
to:memset::@1
memset::@1: scope:[memset] from memset memset::@2
[138] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 )
[139] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2
[104] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 )
[105] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2
to:memset::@return
memset::@return: scope:[memset] from memset::@1
[140] return
[106] return
to:@return
memset::@2: scope:[memset] from memset::@1
[141] *((byte*) memset::dst#2) ← (const byte) memset::c#0
[142] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
[107] *((byte*) memset::dst#2) ← (const byte) memset::c#0
[108] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
to:memset::@1
(void()) renderBobInit()
renderBobInit: scope:[renderBobInit] from main::@10
[143] phi()
renderBobInit: scope:[renderBobInit] from main::@12
[109] phi()
to:renderBobInit::@1
renderBobInit::@1: scope:[renderBobInit] from renderBobInit renderBobInit::@1
[144] (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) 0 renderBobInit::@1/(byte) renderBobInit::y#1 )
[145] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2
[146] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2
[147] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0
[148] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3
[149] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1
[150] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1
[151] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2
[152] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1
[110] (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) 0 renderBobInit::@1/(byte) renderBobInit::y#1 )
[111] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2
[112] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2
[113] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0
[114] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3
[115] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1
[116] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1
[117] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2
[118] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1
to:renderBobInit::@2
renderBobInit::@2: scope:[renderBobInit] from renderBobInit::@1 renderBobInit::@2
[153] (byte) renderBobInit::i#2 ← phi( renderBobInit::@1/(byte) 0 renderBobInit::@2/(byte) renderBobInit::i#1 )
[154] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1
[155] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN
[156] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2
[157] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2
[119] (byte) renderBobInit::i#2 ← phi( renderBobInit::@1/(byte) 0 renderBobInit::@2/(byte) renderBobInit::i#1 )
[120] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1
[121] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN
[122] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2
[123] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2
to:renderBobInit::@return
renderBobInit::@return: scope:[renderBobInit] from renderBobInit::@2
[158] return
[124] return
to:@return
(void()) prepareBobs()
prepareBobs: scope:[prepareBobs] from main::@9
[159] phi()
[160] call progress_init
prepareBobs: scope:[prepareBobs] from main::@11
[125] phi()
[126] call progress_init
to:prepareBobs::@8
prepareBobs::@8: scope:[prepareBobs] from prepareBobs
[161] phi()
[162] call charsetFindOrAddGlyph
[127] phi()
[128] call charsetFindOrAddGlyph
to:prepareBobs::@1
prepareBobs::@1: scope:[prepareBobs] from prepareBobs::@8 prepareBobs::@9
[163] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::bob_table_idx#12 )
[163] (byte) bob_charset_next_id#14 ← phi( prepareBobs::@8/(byte) bob_charset_next_id#16 prepareBobs::@9/(byte) bob_charset_next_id#30 )
[163] (byte) progress_idx#16 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) progress_idx#31 )
[163] (byte*) progress_cursor#15 ← phi( prepareBobs::@8/(const byte*) SCREEN_BASIC prepareBobs::@9/(byte*) progress_cursor#31 )
[163] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::shift_y#1 )
[164] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2
[129] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::bob_table_idx#12 )
[129] (byte) bob_charset_next_id#14 ← phi( prepareBobs::@8/(byte) bob_charset_next_id#16 prepareBobs::@9/(byte) bob_charset_next_id#30 )
[129] (byte) progress_idx#16 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) progress_idx#31 )
[129] (byte*) progress_cursor#15 ← phi( prepareBobs::@8/(const byte*) BASIC_SCREEN prepareBobs::@9/(byte*) progress_cursor#31 )
[129] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::shift_y#1 )
[130] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2
to:prepareBobs::@return
prepareBobs::@return: scope:[prepareBobs] from prepareBobs::@1
[165] return
[131] return
to:@return
prepareBobs::@2: scope:[prepareBobs] from prepareBobs::@1 prepareBobs::@13
[166] (byte) progress_idx#31 ← phi( prepareBobs::@1/(byte) progress_idx#16 prepareBobs::@13/(byte) progress_idx#25 )
[166] (byte*) progress_cursor#31 ← phi( prepareBobs::@1/(byte*) progress_cursor#15 prepareBobs::@13/(byte*) progress_cursor#24 )
[166] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@13/(byte) bob_charset_next_id#21 )
[166] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@13/(byte) prepareBobs::bob_table_idx#1 )
[166] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@13/(byte) prepareBobs::shift_x#1 )
[167] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3
[132] (byte) progress_idx#31 ← phi( prepareBobs::@1/(byte) progress_idx#16 prepareBobs::@13/(byte) progress_idx#25 )
[132] (byte*) progress_cursor#31 ← phi( prepareBobs::@1/(byte*) progress_cursor#15 prepareBobs::@13/(byte*) progress_cursor#24 )
[132] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@13/(byte) bob_charset_next_id#21 )
[132] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@13/(byte) prepareBobs::bob_table_idx#1 )
[132] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@13/(byte) prepareBobs::shift_x#1 )
[133] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3
to:prepareBobs::@4
prepareBobs::@4: scope:[prepareBobs] from prepareBobs::@2
[168] phi()
[169] call protoBobShiftDown
[134] phi()
[135] call protoBobShiftDown
to:prepareBobs::@9
prepareBobs::@9: scope:[prepareBobs] from prepareBobs::@4
[170] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2
[136] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2
to:prepareBobs::@1
prepareBobs::@3: scope:[prepareBobs] from prepareBobs::@2
[171] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12
[137] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12
to:prepareBobs::@5
prepareBobs::@5: scope:[prepareBobs] from prepareBobs::@11 prepareBobs::@3
[172] (byte*) progress_cursor#24 ← phi( prepareBobs::@11/(byte*) progress_cursor#17 prepareBobs::@3/(byte*) progress_cursor#31 )
[172] (byte) progress_idx#25 ← phi( prepareBobs::@11/(byte) progress_idx#10 prepareBobs::@3/(byte) progress_idx#31 )
[172] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 )
[172] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@11/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 )
[172] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB )
[172] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@11/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 )
[173] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6
[138] (byte*) progress_cursor#24 ← phi( prepareBobs::@11/(byte*) progress_cursor#17 prepareBobs::@3/(byte*) progress_cursor#31 )
[138] (byte) progress_idx#25 ← phi( prepareBobs::@11/(byte) progress_idx#10 prepareBobs::@3/(byte) progress_idx#31 )
[138] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 )
[138] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@11/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 )
[138] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB )
[138] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@11/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 )
[139] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6
to:prepareBobs::@7
prepareBobs::@7: scope:[prepareBobs] from prepareBobs::@5
[174] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12
[175] call protoBobShiftRight
[140] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12
[141] call protoBobShiftRight
to:prepareBobs::@12
prepareBobs::@12: scope:[prepareBobs] from prepareBobs::@7
[176] phi()
[177] call protoBobShiftRight
[142] phi()
[143] call protoBobShiftRight
to:prepareBobs::@13
prepareBobs::@13: scope:[prepareBobs] from prepareBobs::@12
[178] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2
[144] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2
to:prepareBobs::@2
prepareBobs::@6: scope:[prepareBobs] from prepareBobs::@5
[179] (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2
[180] call charsetFindOrAddGlyph
[181] (byte) charsetFindOrAddGlyph::return#1 ← (byte) charsetFindOrAddGlyph::glyph_id#11
[145] (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2
[146] call charsetFindOrAddGlyph
[147] (byte) charsetFindOrAddGlyph::return#1 ← (byte) charsetFindOrAddGlyph::glyph_id#11
to:prepareBobs::@10
prepareBobs::@10: scope:[prepareBobs] from prepareBobs::@6
[182] (byte~) prepareBobs::$6 ← (byte) charsetFindOrAddGlyph::return#1
[183] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6
[184] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8
[185] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y
[186] call progress_inc
[148] (byte~) prepareBobs::$6 ← (byte) charsetFindOrAddGlyph::return#1
[149] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6
[150] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8
[151] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y
[152] call progress_inc
to:prepareBobs::@11
prepareBobs::@11: scope:[prepareBobs] from prepareBobs::@10
[187] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2
[153] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2
to:prepareBobs::@5
(void()) progress_inc()
progress_inc: scope:[progress_inc] from prepareBobs::@10
[188] (byte) progress_idx#8 ← ++ (byte) progress_idx#25
[189] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1
[154] (byte) progress_idx#8 ← ++ (byte) progress_idx#25
[155] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1
to:progress_inc::@2
progress_inc::@2: scope:[progress_inc] from progress_inc
[190] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8)
[191] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24
[156] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8)
[157] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24
to:progress_inc::@1
progress_inc::@1: scope:[progress_inc] from progress_inc progress_inc::@2
[192] (byte*) progress_cursor#17 ← phi( progress_inc/(byte*) progress_cursor#24 progress_inc::@2/(byte*) progress_cursor#8 )
[192] (byte) progress_idx#10 ← phi( progress_inc/(byte) progress_idx#8 progress_inc::@2/(byte) 0 )
[193] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10)
[158] (byte*) progress_cursor#17 ← phi( progress_inc/(byte*) progress_cursor#24 progress_inc::@2/(byte*) progress_cursor#8 )
[158] (byte) progress_idx#10 ← phi( progress_inc/(byte) progress_idx#8 progress_inc::@2/(byte) 0 )
[159] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10)
to:progress_inc::@return
progress_inc::@return: scope:[progress_inc] from progress_inc::@1
[194] return
[160] return
to:@return
(byte()) charsetFindOrAddGlyph((byte*) charsetFindOrAddGlyph::glyph , (byte*) charsetFindOrAddGlyph::charset)
charsetFindOrAddGlyph: scope:[charsetFindOrAddGlyph] from prepareBobs::@6 prepareBobs::@8
[195] (byte*) charsetFindOrAddGlyph::glyph#10 ← phi( prepareBobs::@8/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) charsetFindOrAddGlyph::glyph#1 )
[195] (byte) bob_charset_next_id#23 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 )
[161] (byte*) charsetFindOrAddGlyph::glyph#10 ← phi( prepareBobs::@8/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) charsetFindOrAddGlyph::glyph#1 )
[161] (byte) bob_charset_next_id#23 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 )
to:charsetFindOrAddGlyph::@1
charsetFindOrAddGlyph::@1: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph charsetFindOrAddGlyph::@6
[196] (byte*) charsetFindOrAddGlyph::glyph_cursor#11 ← phi( charsetFindOrAddGlyph/(const byte*) BOB_CHARSET charsetFindOrAddGlyph::@6/(byte*) charsetFindOrAddGlyph::glyph_cursor#1 )
[196] (byte) charsetFindOrAddGlyph::glyph_id#11 ← phi( charsetFindOrAddGlyph/(byte) 0 charsetFindOrAddGlyph::@6/(byte) charsetFindOrAddGlyph::glyph_id#1 )
[197] if((byte) charsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto charsetFindOrAddGlyph::@2
[162] (byte*) charsetFindOrAddGlyph::glyph_cursor#11 ← phi( charsetFindOrAddGlyph/(const byte*) BOB_CHARSET charsetFindOrAddGlyph::@6/(byte*) charsetFindOrAddGlyph::glyph_cursor#1 )
[162] (byte) charsetFindOrAddGlyph::glyph_id#11 ← phi( charsetFindOrAddGlyph/(byte) 0 charsetFindOrAddGlyph::@6/(byte) charsetFindOrAddGlyph::glyph_id#1 )
[163] if((byte) charsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto charsetFindOrAddGlyph::@2
to:charsetFindOrAddGlyph::@7
charsetFindOrAddGlyph::@7: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@1 charsetFindOrAddGlyph::@8
[198] (byte) charsetFindOrAddGlyph::i1#2 ← phi( charsetFindOrAddGlyph::@8/(byte) charsetFindOrAddGlyph::i1#1 charsetFindOrAddGlyph::@1/(byte) 0 )
[199] if((byte) charsetFindOrAddGlyph::i1#2<(byte) 8) goto charsetFindOrAddGlyph::@8
[164] (byte) charsetFindOrAddGlyph::i1#2 ← phi( charsetFindOrAddGlyph::@8/(byte) charsetFindOrAddGlyph::i1#1 charsetFindOrAddGlyph::@1/(byte) 0 )
[165] if((byte) charsetFindOrAddGlyph::i1#2<(byte) 8) goto charsetFindOrAddGlyph::@8
to:charsetFindOrAddGlyph::@9
charsetFindOrAddGlyph::@9: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@7
[200] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23
[166] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23
to:charsetFindOrAddGlyph::@return
charsetFindOrAddGlyph::@return: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@5 charsetFindOrAddGlyph::@9
[201] (byte) bob_charset_next_id#16 ← phi( charsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 charsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 )
[202] return
[167] (byte) bob_charset_next_id#16 ← phi( charsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 charsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 )
[168] return
to:@return
charsetFindOrAddGlyph::@8: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@7
[203] *((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i1#2) ← *((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i1#2)
[204] (byte) charsetFindOrAddGlyph::i1#1 ← ++ (byte) charsetFindOrAddGlyph::i1#2
[169] *((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i1#2) ← *((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i1#2)
[170] (byte) charsetFindOrAddGlyph::i1#1 ← ++ (byte) charsetFindOrAddGlyph::i1#2
to:charsetFindOrAddGlyph::@7
charsetFindOrAddGlyph::@2: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@1 charsetFindOrAddGlyph::@4
[205] (byte) charsetFindOrAddGlyph::i#2 ← phi( charsetFindOrAddGlyph::@1/(byte) 0 charsetFindOrAddGlyph::@4/(byte) charsetFindOrAddGlyph::i#1 )
[206] if((byte) charsetFindOrAddGlyph::i#2<(byte) 8) goto charsetFindOrAddGlyph::@3
[171] (byte) charsetFindOrAddGlyph::i#2 ← phi( charsetFindOrAddGlyph::@1/(byte) 0 charsetFindOrAddGlyph::@4/(byte) charsetFindOrAddGlyph::i#1 )
[172] if((byte) charsetFindOrAddGlyph::i#2<(byte) 8) goto charsetFindOrAddGlyph::@3
to:charsetFindOrAddGlyph::@5
charsetFindOrAddGlyph::@3: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@2
[207] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@4
[173] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@4
to:charsetFindOrAddGlyph::@5
charsetFindOrAddGlyph::@5: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@2 charsetFindOrAddGlyph::@3
[208] (byte) charsetFindOrAddGlyph::found#2 ← phi( charsetFindOrAddGlyph::@3/(byte) 0 charsetFindOrAddGlyph::@2/(byte) 1 )
[209] if((byte) 0==(byte) charsetFindOrAddGlyph::found#2) goto charsetFindOrAddGlyph::@6
[174] (byte) charsetFindOrAddGlyph::found#2 ← phi( charsetFindOrAddGlyph::@3/(byte) 0 charsetFindOrAddGlyph::@2/(byte) 1 )
[175] if((byte) 0==(byte) charsetFindOrAddGlyph::found#2) goto charsetFindOrAddGlyph::@6
to:charsetFindOrAddGlyph::@return
charsetFindOrAddGlyph::@6: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@5
[210] (byte) charsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) charsetFindOrAddGlyph::glyph_id#11
[211] (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8
[176] (byte) charsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) charsetFindOrAddGlyph::glyph_id#11
[177] (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8
to:charsetFindOrAddGlyph::@1
charsetFindOrAddGlyph::@4: scope:[charsetFindOrAddGlyph] from charsetFindOrAddGlyph::@3
[212] (byte) charsetFindOrAddGlyph::i#1 ← ++ (byte) charsetFindOrAddGlyph::i#2
[178] (byte) charsetFindOrAddGlyph::i#1 ← ++ (byte) charsetFindOrAddGlyph::i#2
to:charsetFindOrAddGlyph::@2
(void()) protoBobShiftRight()
protoBobShiftRight: scope:[protoBobShiftRight] from prepareBobs::@12 prepareBobs::@7
[213] phi()
[179] phi()
to:protoBobShiftRight::@1
protoBobShiftRight::@1: scope:[protoBobShiftRight] from protoBobShiftRight protoBobShiftRight::@6
[214] (byte) protoBobShiftRight::carry#2 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::carry#10 )
[214] (byte) protoBobShiftRight::j#3 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::j#10 )
[214] (byte) protoBobShiftRight::i#2 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::i#1 )
[215] if((byte) protoBobShiftRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto protoBobShiftRight::@2
[180] (byte) protoBobShiftRight::carry#2 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::carry#10 )
[180] (byte) protoBobShiftRight::j#3 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::j#10 )
[180] (byte) protoBobShiftRight::i#2 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::i#1 )
[181] if((byte) protoBobShiftRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto protoBobShiftRight::@2
to:protoBobShiftRight::@return
protoBobShiftRight::@return: scope:[protoBobShiftRight] from protoBobShiftRight::@1
[216] return
[182] return
to:@return
protoBobShiftRight::@2: scope:[protoBobShiftRight] from protoBobShiftRight::@1
[217] (byte~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1
[218] if((byte) 0!=(byte~) protoBobShiftRight::$1) goto protoBobShiftRight::@3
[183] (byte~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1
[184] if((byte) 0!=(byte~) protoBobShiftRight::$1) goto protoBobShiftRight::@3
to:protoBobShiftRight::@4
protoBobShiftRight::@3: scope:[protoBobShiftRight] from protoBobShiftRight::@2
[219] phi()
[185] phi()
to:protoBobShiftRight::@4
protoBobShiftRight::@4: scope:[protoBobShiftRight] from protoBobShiftRight::@2 protoBobShiftRight::@3
[220] (byte) protoBobShiftRight::carry#1 ← phi( protoBobShiftRight::@3/(byte) $80 protoBobShiftRight::@2/(byte) 0 )
[221] (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) >> (byte) 1
[222] (byte~) protoBobShiftRight::$6 ← (byte) protoBobShiftRight::carry#2 | (byte~) protoBobShiftRight::$5
[223] *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) ← (byte~) protoBobShiftRight::$6
[224] if((byte) protoBobShiftRight::j#3>=(byte) $30) goto protoBobShiftRight::@5
[186] (byte) protoBobShiftRight::carry#1 ← phi( protoBobShiftRight::@3/(byte) $80 protoBobShiftRight::@2/(byte) 0 )
[187] (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) >> (byte) 1
[188] (byte~) protoBobShiftRight::$6 ← (byte) protoBobShiftRight::carry#2 | (byte~) protoBobShiftRight::$5
[189] *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) ← (byte~) protoBobShiftRight::$6
[190] if((byte) protoBobShiftRight::j#3>=(byte) $30) goto protoBobShiftRight::@5
to:protoBobShiftRight::@7
protoBobShiftRight::@7: scope:[protoBobShiftRight] from protoBobShiftRight::@4
[225] (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#3 + (byte) $18
[191] (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#3 + (byte) $18
to:protoBobShiftRight::@6
protoBobShiftRight::@6: scope:[protoBobShiftRight] from protoBobShiftRight::@5 protoBobShiftRight::@7
[226] (byte) protoBobShiftRight::j#10 ← phi( protoBobShiftRight::@7/(byte) protoBobShiftRight::j#2 protoBobShiftRight::@5/(byte) protoBobShiftRight::j#1 )
[227] (byte) protoBobShiftRight::i#1 ← ++ (byte) protoBobShiftRight::i#2
[228] (byte) protoBobShiftRight::carry#10 ← (byte) protoBobShiftRight::carry#1
[192] (byte) protoBobShiftRight::j#10 ← phi( protoBobShiftRight::@7/(byte) protoBobShiftRight::j#2 protoBobShiftRight::@5/(byte) protoBobShiftRight::j#1 )
[193] (byte) protoBobShiftRight::i#1 ← ++ (byte) protoBobShiftRight::i#2
[194] (byte) protoBobShiftRight::carry#10 ← (byte) protoBobShiftRight::carry#1
to:protoBobShiftRight::@1
protoBobShiftRight::@5: scope:[protoBobShiftRight] from protoBobShiftRight::@4
[229] (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#3 - (byte) $2f
[195] (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#3 - (byte) $2f
to:protoBobShiftRight::@6
(void()) protoBobShiftDown()
protoBobShiftDown: scope:[protoBobShiftDown] from prepareBobs::@4
[230] phi()
[196] phi()
to:protoBobShiftDown::@1
protoBobShiftDown::@1: scope:[protoBobShiftDown] from protoBobShiftDown protoBobShiftDown::@2
[231] (byte) protoBobShiftDown::i#2 ← phi( protoBobShiftDown/(byte) $17 protoBobShiftDown::@2/(byte) protoBobShiftDown::i#1 )
[232] if((byte) protoBobShiftDown::i#2>(byte) 0) goto protoBobShiftDown::@2
[197] (byte) protoBobShiftDown::i#2 ← phi( protoBobShiftDown/(byte) $17 protoBobShiftDown::@2/(byte) protoBobShiftDown::i#1 )
[198] if((byte) protoBobShiftDown::i#2>(byte) 0) goto protoBobShiftDown::@2
to:protoBobShiftDown::@3
protoBobShiftDown::@3: scope:[protoBobShiftDown] from protoBobShiftDown::@1
[233] *((const byte*) PROTO_BOB) ← (byte) 0
[234] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0
[235] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0
[199] *((const byte*) PROTO_BOB) ← (byte) 0
[200] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0
[201] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0
to:protoBobShiftDown::@return
protoBobShiftDown::@return: scope:[protoBobShiftDown] from protoBobShiftDown::@3
[236] return
[202] return
to:@return
protoBobShiftDown::@2: scope:[protoBobShiftDown] from protoBobShiftDown::@1
[237] *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) protoBobShiftDown::i#2)
[238] *((const byte*) PROTO_BOB+(byte) $18 + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) protoBobShiftDown::i#2)
[239] *((const byte*) PROTO_BOB+(byte) $30 + (byte) protoBobShiftDown::i#2) ← (byte) 0
[240] (byte) protoBobShiftDown::i#1 ← -- (byte) protoBobShiftDown::i#2
[203] *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) protoBobShiftDown::i#2)
[204] *((const byte*) PROTO_BOB+(byte) $18 + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) protoBobShiftDown::i#2)
[205] *((const byte*) PROTO_BOB+(byte) $30 + (byte) protoBobShiftDown::i#2) ← (byte) 0
[206] (byte) protoBobShiftDown::i#1 ← -- (byte) protoBobShiftDown::i#2
to:protoBobShiftDown::@1
(void()) progress_init((byte*) progress_init::line)
progress_init: scope:[progress_init] from prepareBobs
[241] phi()
[207] phi()
to:progress_init::@return
progress_init::@return: scope:[progress_init] from progress_init
[242] return
[208] return
to:@return
(void()) mulf_init()
mulf_init: scope:[mulf_init] from main
[243] phi()
[209] phi()
to:mulf_init::@1
mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3
[244] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 )
[244] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 )
[244] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 )
[244] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 )
[244] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 )
[245] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2
[210] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 )
[210] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 )
[210] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 )
[210] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 )
[210] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 )
[211] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2
to:mulf_init::@5
mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8
[246] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff )
[246] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi )
[246] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 )
[246] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo )
[247] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6
[212] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff )
[212] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi )
[212] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 )
[212] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo )
[213] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6
to:mulf_init::@7
mulf_init::@7: scope:[mulf_init] from mulf_init::@5
[248] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100)
[249] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100)
[214] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100)
[215] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100)
to:mulf_init::@return
mulf_init::@return: scope:[mulf_init] from mulf_init::@7
[250] return
[216] return
to:@return
mulf_init::@6: scope:[mulf_init] from mulf_init::@5
[251] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2)
[252] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2)
[253] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[254] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[255] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9
[217] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2)
[218] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2)
[219] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[220] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[221] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9
to:mulf_init::@8
mulf_init::@9: scope:[mulf_init] from mulf_init::@6
[256] phi()
[222] phi()
to:mulf_init::@8
mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9
[257] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 )
[258] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[223] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 )
[224] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
to:mulf_init::@5
mulf_init::@2: scope:[mulf_init] from mulf_init::@1
[259] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[260] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1
[261] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3
[225] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[226] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1
[227] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3
to:mulf_init::@4
mulf_init::@4: scope:[mulf_init] from mulf_init::@2
[262] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[263] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
[228] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[229] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
to:mulf_init::@3
mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4
[264] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 )
[264] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 )
[265] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3
[266] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4
[267] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3
[268] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5
[269] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[270] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[271] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[230] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 )
[230] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 )
[231] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3
[232] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4
[233] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3
[234] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5
[235] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[236] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[237] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
to:mulf_init::@1

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,8 @@
(label) @1
(label) @begin
(label) @end
(const byte*) BASIC_CHARSET = (byte*) 4096
(const byte*) BASIC_SCREEN = (byte*) 1024
(const byte*) BOB_CHARSET = (byte*) 8192
(const byte*) BOB_SCREEN = (byte*) 10240
(const byte) BOB_SHIFTS_X = (number) 4
@ -8,16 +10,14 @@
(const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y
(const byte*) BOB_TABLES = { fill( 9*8*4, 0) }
(const byte*) BORDERCOL = (byte*) 53280
(const byte*) CHARSET_BASIC = (byte*) 4096
(const byte*) CIA1_PORT_A = (byte*) 56320
(const byte*) CIA1_PORT_B = (byte*) 56321
(const byte*) CIA2_PORT_A = (byte*) 56576
(const byte*) CIA2_PORT_A_DDR = (byte*) 56578
(const signed byte*) COS = (const signed byte*) SIN+(byte) $40
(const byte*) D018 = (byte*) 53272
(const byte) KEY_SPACE = (number) $3c
(const word*) MUL40 = { fill( $20, 0) }
(const byte) NUM_BOBS = (number) $14
(const byte) NUM_BOBS = (number) $19
(const byte*) PROTO_BOB = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff))
.for (var x=0;x<3; x++)
.for (var y=0; y<24; y++)
@ -29,18 +29,14 @@
(const byte) RADIX::OCTAL = (number) 8
(const byte*) RASTER = (byte*) 53266
(const byte**) RENDERBOB_CLEANUP = { fill( NUM_BOBS, 0) }
(const byte*) SCREEN_BASIC = (byte*) 1024
(const signed byte*) SIN = kickasm {{ .for(var i=0;i<$140;i++)
.byte >round($7fff*sin(i*2*PI/256))
}}
(const byte) SIZEOF_POINTER = (byte) 2
(byte) bob_charset_next_id
(byte) bob_charset_next_id#14 bob_charset_next_id zp[1]:13 12.0
(byte) bob_charset_next_id#16 bob_charset_next_id zp[1]:13 1000.5454545454544
(byte) bob_charset_next_id#21 bob_charset_next_id zp[1]:13 275.5
(byte) bob_charset_next_id#23 bob_charset_next_id zp[1]:13 1400.3333333333335
(byte) bob_charset_next_id#30 bob_charset_next_id zp[1]:13 37.33333333333333
(byte) bob_charset_next_id#8 bob_charset_next_id zp[1]:13 4.0
(byte) bob_charset_next_id#14 bob_charset_next_id zp[1]:14 12.0
(byte) bob_charset_next_id#16 bob_charset_next_id zp[1]:14 1000.5454545454544
(byte) bob_charset_next_id#21 bob_charset_next_id zp[1]:14 275.5
(byte) bob_charset_next_id#23 bob_charset_next_id zp[1]:14 1400.3333333333335
(byte) bob_charset_next_id#30 bob_charset_next_id zp[1]:14 37.33333333333333
(byte) bob_charset_next_id#8 bob_charset_next_id zp[1]:14 4.0
(byte()) charsetFindOrAddGlyph((byte*) charsetFindOrAddGlyph::glyph , (byte*) charsetFindOrAddGlyph::charset)
(label) charsetFindOrAddGlyph::@1
(label) charsetFindOrAddGlyph::@2
@ -56,11 +52,11 @@
(byte) charsetFindOrAddGlyph::found
(byte) charsetFindOrAddGlyph::found#2 reg byte a 10001.0
(byte*) charsetFindOrAddGlyph::glyph
(byte*) charsetFindOrAddGlyph::glyph#1 glyph zp[2]:6 2002.0
(byte*) charsetFindOrAddGlyph::glyph#10 glyph zp[2]:6 7400.200000000001
(byte*) charsetFindOrAddGlyph::glyph#1 glyph zp[2]:19 2002.0
(byte*) charsetFindOrAddGlyph::glyph#10 glyph zp[2]:19 7400.200000000001
(byte*) charsetFindOrAddGlyph::glyph_cursor
(byte*) charsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:17 20002.0
(byte*) charsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:17 10000.307692307691
(byte*) charsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:5 20002.0
(byte*) charsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:5 10000.307692307691
(byte) charsetFindOrAddGlyph::glyph_id
(byte) charsetFindOrAddGlyph::glyph_id#1 reg byte x 10001.0
(byte) charsetFindOrAddGlyph::glyph_id#11 reg byte x 1937.75
@ -95,11 +91,8 @@
(byte) keyboard_matrix_read::rowid
(const byte*) keyboard_matrix_row_bitmask = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f }
(void()) main()
(signed word~) main::$10 zp[2]:11 202.0
(signed word~) main::$12 zp[2]:11 202.0
(signed word~) main::$13 zp[2]:11 202.0
(byte~) main::$19 reg byte a 22.0
(byte~) main::$21 reg byte a 22.0
(byte~) main::$15 reg byte a 22.0
(byte~) main::$17 reg byte a 22.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -117,19 +110,26 @@
(label) main::@8
(label) main::@9
(label) main::@return
(byte) main::a
(byte) main::a#1 a zp[1]:4 28.857142857142858
(byte) main::a#2 a zp[1]:4 25.9375
(byte) main::a#6 a zp[1]:4 22.0
(byte) main::angle
(byte) main::angle#1 angle zp[1]:2 3.6666666666666665
(byte) main::angle#8 angle zp[1]:2 1.1785714285714286
(byte) main::i
(byte) main::i#1 i zp[1]:5 151.5
(byte) main::i#2 i zp[1]:5 9.619047619047619
(signed byte) main::r
(signed byte) main::r#1 r zp[1]:3 33.666666666666664
(signed byte) main::r#2 r zp[1]:3 23.764705882352942
(byte) main::col
(byte) main::col#1 col zp[1]:2 151.5
(byte) main::col#5 col zp[1]:2 13.466666666666667
(const signed word) main::colOffsetX = (signed word) $100
(const signed word) main::colOffsetY = (signed word) $1800
(signed word) main::origX
(signed word) main::origX#1 origX zp[2]:21 3.142857142857143
(signed word) main::origX#8 origX zp[2]:21 1.5
(const signed word) main::origY = (signed word) $a00
(byte) main::row
(byte) main::row#1 reg byte x 1501.5
(byte) main::row#2 reg byte x 250.25
(const signed word) main::rowOffsetX = (signed word) $c00
(signed word) main::rowOffsetY
(signed word) main::rowOffsetY#1 rowOffsetY zp[2]:23 3.6666666666666665
(signed word) main::rowOffsetY#10 rowOffsetY zp[2]:23 44.47826086956522
(signed word) main::rowX
(signed word) main::rowX#1 rowX zp[2]:19 50.5
(signed word) main::rowY
(signed word) main::rowY#1 rowY zp[2]:3 67.33333333333333
(label) main::toD0181
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
@ -138,7 +138,7 @@
(label) main::toD0182
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN_BASIC&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET_BASIC/(byte) 4&(byte) $f
(const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) BASIC_SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BASIC_CHARSET/(byte) 4&(byte) $f
(byte*) main::toD0182_screen
(label) main::vicSelectGfxBank1
(label) main::vicSelectGfxBank1_@1
@ -155,9 +155,16 @@
(byte) main::vicSelectGfxBank2_toDd001_return
(const byte) main::vicSelectGfxBank2_toDd001_return#0 vicSelectGfxBank2_toDd001_return = (byte) 3
(signed word) main::x
(signed word) main::x#0 x zp[2]:8 18.363636363636363
(signed word) main::x#0 x zp[2]:19 24.153846153846153
(signed word) main::x#1 x_1 zp[2]:5 400.4
(signed word) main::x#2 x_1 zp[2]:5 620.8
(signed word) main::x#4 x zp[2]:19 22.0
(signed word) main::x#7 x_1 zp[2]:5 101.0
(signed word) main::y
(signed word) main::y#0 y zp[2]:11 40.4
(signed word) main::y#0 y zp[2]:3 21.642857142857142
(signed word) main::y#1 y_1 zp[2]:7 500.5
(signed word) main::y#2 y_1 zp[2]:7 517.3333333333334
(signed word) main::y#6 y_1 zp[2]:7 202.0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
@ -165,8 +172,8 @@
(byte) memset::c
(const byte) memset::c#0 c = (byte) 0
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:6 22.0
(byte*) memset::dst#2 dst zp[2]:6 14.666666666666666
(byte*) memset::dst#1 dst zp[2]:21 22.0
(byte*) memset::dst#2 dst zp[2]:21 14.666666666666666
(byte*) memset::end
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
(word) memset::num
@ -174,59 +181,6 @@
(void*) memset::return
(void*) memset::str
(const void*) memset::str#0 str = (void*)(const byte*) BOB_SCREEN
(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b)
(label) mulf8s::@1
(label) mulf8s::@2
(label) mulf8s::@return
(signed byte) mulf8s::a
(signed byte) mulf8s::a#0 reg byte a 101.0
(signed byte) mulf8s::a#1 reg byte a 101.0
(signed byte) mulf8s::b
(signed byte) mulf8s::b#0 reg byte x 202.0
(signed byte) mulf8s::b#1 reg byte x 202.0
(signed byte) mulf8s::b#2 reg byte x 68.0
(label) mulf8s::mulf8s_prepare1
(signed byte) mulf8s::mulf8s_prepare1_a
(signed byte) mulf8s::mulf8s_prepare1_a#0 reg byte a 202.0
(signed word) mulf8s::return
(signed word) mulf8s::return#0 return zp[2]:11 51.0
(signed word) mulf8s::return#2 return zp[2]:11 202.0
(signed word) mulf8s::return#3 return zp[2]:11 202.0
(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b)
(byte~) mulf8s_prepared::$12 reg byte a 4.0
(byte~) mulf8s_prepared::$15 reg byte a 4.0
(byte~) mulf8s_prepared::$16 reg byte a 4.0
(byte~) mulf8s_prepared::$8 reg byte a 4.0
(label) mulf8s_prepared::@1
(label) mulf8s_prepared::@2
(label) mulf8s_prepared::@3
(label) mulf8s_prepared::@4
(label) mulf8s_prepared::@5
(label) mulf8s_prepared::@return
(signed byte) mulf8s_prepared::b
(signed byte) mulf8s_prepared::b#0 b zp[1]:14 0.4
(word) mulf8s_prepared::m
(word) mulf8s_prepared::m#0 m zp[2]:11 2.0
(word) mulf8s_prepared::m#1 m zp[2]:11 4.0
(word) mulf8s_prepared::m#2 m zp[2]:11 4.0
(word) mulf8s_prepared::m#4 m zp[2]:11 1.3333333333333333
(word) mulf8s_prepared::m#5 m zp[2]:11 2.5
(const signed byte*) mulf8s_prepared::memA = (signed byte*) 253
(signed word) mulf8s_prepared::return
(void()) mulf8u_prepare((byte) mulf8u_prepare::a)
(label) mulf8u_prepare::@return
(byte) mulf8u_prepare::a
(byte) mulf8u_prepare::a#0 reg byte a 4.0
(const byte*) mulf8u_prepare::memA = (byte*) 253
(word()) mulf8u_prepared((byte) mulf8u_prepared::b)
(label) mulf8u_prepared::@return
(byte) mulf8u_prepared::b
(byte) mulf8u_prepared::b#0 reg byte a 4.0
(const byte*) mulf8u_prepared::memB = (byte*) 255
(const byte*) mulf8u_prepared::resL = (byte*) 254
(word) mulf8u_prepared::return
(word) mulf8u_prepared::return#0 return zp[2]:11 1.3333333333333333
(word) mulf8u_prepared::return#2 return zp[2]:11 4.0
(void()) mulf_init()
(byte~) mulf_init::$1 reg byte a 22.0
(byte~) mulf_init::$4 reg byte a 22.0
@ -242,28 +196,28 @@
(label) mulf_init::@9
(label) mulf_init::@return
(byte) mulf_init::c
(byte) mulf_init::c#1 c zp[1]:13 2.5384615384615383
(byte) mulf_init::c#2 c zp[1]:13 11.0
(byte) mulf_init::c#1 c zp[1]:9 2.5384615384615383
(byte) mulf_init::c#2 c zp[1]:9 11.0
(byte) mulf_init::dir
(byte) mulf_init::dir#2 dir zp[1]:14 4.125
(byte) mulf_init::dir#4 dir zp[1]:14 11.0
(byte) mulf_init::dir#2 dir zp[1]:12 4.125
(byte) mulf_init::dir#4 dir zp[1]:12 11.0
(word) mulf_init::sqr
(word) mulf_init::sqr#1 sqr zp[2]:11 11.0
(word) mulf_init::sqr#2 sqr zp[2]:11 22.0
(word) mulf_init::sqr#3 sqr zp[2]:11 9.166666666666666
(word) mulf_init::sqr#4 sqr zp[2]:11 5.5
(word) mulf_init::sqr#1 sqr zp[2]:21 11.0
(word) mulf_init::sqr#2 sqr zp[2]:21 22.0
(word) mulf_init::sqr#3 sqr zp[2]:21 9.166666666666666
(word) mulf_init::sqr#4 sqr zp[2]:21 5.5
(byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:15 7.333333333333333
(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:15 2.75
(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:10 7.333333333333333
(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:10 2.75
(byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:6 22.0
(byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:6 3.142857142857143
(byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:7 22.0
(byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:7 3.142857142857143
(byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:8 3.6666666666666665
(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:8 8.25
(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:19 3.6666666666666665
(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:19 8.25
(byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:17 22.0
(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:17 4.888888888888889
(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:16 22.0
(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:16 4.888888888888889
(byte) mulf_init::x_2
(byte) mulf_init::x_2#1 reg byte x 11.0
(byte) mulf_init::x_2#2 reg byte x 5.5
@ -292,37 +246,37 @@
(label) prepareBobs::@9
(label) prepareBobs::@return
(byte*) prepareBobs::bob_glyph
(byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:6 500.5
(byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:6 429.0
(byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:19 500.5
(byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:19 429.0
(byte*) prepareBobs::bob_table
(byte*) prepareBobs::bob_table#0 bob_table zp[2]:15 202.0
(byte*) prepareBobs::bob_table#1 bob_table zp[2]:15 667.3333333333334
(byte*) prepareBobs::bob_table#2 bob_table zp[2]:15 388.0
(byte*) prepareBobs::bob_table#0 bob_table zp[2]:3 202.0
(byte*) prepareBobs::bob_table#1 bob_table zp[2]:3 667.3333333333334
(byte*) prepareBobs::bob_table#2 bob_table zp[2]:3 388.0
(byte) prepareBobs::bob_table_idx
(byte) prepareBobs::bob_table_idx#1 bob_table_idx zp[1]:4 40.4
(byte) prepareBobs::bob_table_idx#12 bob_table_idx zp[1]:4 19.11764705882353
(byte) prepareBobs::bob_table_idx#6 bob_table_idx zp[1]:4 11.0
(byte) prepareBobs::bob_table_idx#1 bob_table_idx zp[1]:12 40.4
(byte) prepareBobs::bob_table_idx#12 bob_table_idx zp[1]:12 19.11764705882353
(byte) prepareBobs::bob_table_idx#6 bob_table_idx zp[1]:12 11.0
(byte) prepareBobs::cell
(byte) prepareBobs::cell#1 cell zp[1]:10 2002.0
(byte) prepareBobs::cell#2 cell zp[1]:10 300.29999999999995
(byte) prepareBobs::cell#1 cell zp[1]:18 2002.0
(byte) prepareBobs::cell#2 cell zp[1]:18 300.29999999999995
(byte) prepareBobs::shift_x
(byte) prepareBobs::shift_x#1 shift_x zp[1]:5 202.0
(byte) prepareBobs::shift_x#2 shift_x zp[1]:5 16.833333333333332
(byte) prepareBobs::shift_x#1 shift_x zp[1]:13 202.0
(byte) prepareBobs::shift_x#2 shift_x zp[1]:13 16.833333333333332
(byte) prepareBobs::shift_y
(byte) prepareBobs::shift_y#1 shift_y zp[1]:2 22.0
(byte) prepareBobs::shift_y#2 shift_y zp[1]:2 1.4347826086956523
(byte*) progress_cursor
(byte*) progress_cursor#15 progress_cursor zp[2]:11 11.0
(byte*) progress_cursor#17 progress_cursor zp[2]:11 201.4
(byte*) progress_cursor#24 progress_cursor zp[2]:11 71.11764705882355
(byte*) progress_cursor#31 progress_cursor zp[2]:11 37.33333333333333
(byte*) progress_cursor#8 progress_cursor zp[2]:11 4.0
(byte*) progress_cursor#15 progress_cursor zp[2]:23 11.0
(byte*) progress_cursor#17 progress_cursor zp[2]:23 201.4
(byte*) progress_cursor#24 progress_cursor zp[2]:23 71.11764705882355
(byte*) progress_cursor#31 progress_cursor zp[2]:23 37.33333333333333
(byte*) progress_cursor#8 progress_cursor zp[2]:23 4.0
(byte) progress_idx
(byte) progress_idx#10 progress_idx zp[1]:3 201.0
(byte) progress_idx#16 progress_idx zp[1]:3 11.0
(byte) progress_idx#25 progress_idx zp[1]:3 86.07142857142856
(byte) progress_idx#31 progress_idx zp[1]:3 37.33333333333333
(byte) progress_idx#8 progress_idx zp[1]:3 3.0
(byte) progress_idx#10 progress_idx zp[1]:9 201.0
(byte) progress_idx#16 progress_idx zp[1]:9 11.0
(byte) progress_idx#25 progress_idx zp[1]:9 86.07142857142856
(byte) progress_idx#31 progress_idx zp[1]:9 37.33333333333333
(byte) progress_idx#8 progress_idx zp[1]:9 3.0
(void()) progress_inc()
(label) progress_inc::@1
(label) progress_inc::@2
@ -352,12 +306,12 @@
(label) protoBobShiftRight::@7
(label) protoBobShiftRight::@return
(byte) protoBobShiftRight::carry
(byte) protoBobShiftRight::carry#1 carry zp[1]:14 111.22222222222223
(byte) protoBobShiftRight::carry#1 carry zp[1]:15 111.22222222222223
(byte) protoBobShiftRight::carry#10 reg byte y 2002.0
(byte) protoBobShiftRight::carry#2 reg byte y 286.0
(byte) protoBobShiftRight::i
(byte) protoBobShiftRight::i#1 i zp[1]:10 1001.0
(byte) protoBobShiftRight::i#2 i zp[1]:10 231.0
(byte) protoBobShiftRight::i#1 i zp[1]:18 1001.0
(byte) protoBobShiftRight::i#2 i zp[1]:18 231.0
(byte) protoBobShiftRight::j
(byte) protoBobShiftRight::j#1 reg byte x 2002.0
(byte) protoBobShiftRight::j#10 reg byte x 1001.0
@ -365,26 +319,26 @@
(byte) protoBobShiftRight::j#3 reg byte x 700.7
(byte) protoBobShiftRight::new_carry
(void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos)
(byte*~) renderBob::$2 zp[2]:11 4.0
(byte*~) renderBob::$2 zp[2]:16 4.0
(byte~) renderBob::$4 reg byte a 4.0
(byte~) renderBob::$5 zp[1]:13 2.0
(byte~) renderBob::$5 zp[1]:18 2.0
(byte~) renderBob::$6 reg byte a 4.0
(byte~) renderBob::$8 reg byte a 4.0
(label) renderBob::@return
(byte) renderBob::bob_table_idx
(byte) renderBob::bob_table_idx#0 reg byte x 1.8181818181818186
(byte) renderBob::bob_table_idx#0 bob_table_idx zp[1]:18 1.8181818181818186
(byte*) renderBob::screen
(byte*) renderBob::screen#0 screen zp[2]:11 1.4666666666666666
(byte*) renderBob::screen#0 screen zp[2]:16 1.4666666666666666
(byte) renderBob::x_char_offset
(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:10 0.8
(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:15 0.8
(byte) renderBob::xpos
(byte) renderBob::xpos#0 xpos zp[1]:14 10.499999999999998
(byte) renderBob::xpos#0 xpos zp[1]:13 100.5
(byte) renderBob::y_char_offset
(byte) renderBob::y_char_offset#0 reg byte a 4.0
(word) renderBob::y_offset
(word) renderBob::y_offset#0 y_offset zp[2]:11 4.0
(word) renderBob::y_offset#0 y_offset zp[2]:16 4.0
(byte) renderBob::ypos
(byte) renderBob::ypos#0 reg byte x 15.000000000000002
(byte) renderBob::ypos#0 ypos zp[1]:14 143.57142857142856
(void()) renderBobCleanup()
(byte~) renderBobCleanup::$1 reg byte a 202.0
(label) renderBobCleanup::@1
@ -393,17 +347,18 @@
(byte) renderBobCleanup::i#1 reg byte x 151.5
(byte) renderBobCleanup::i#2 reg byte x 25.25
(byte*) renderBobCleanup::screen
(byte*) renderBobCleanup::screen#0 screen zp[2]:15 112.22222222222223
(byte*) renderBobCleanup::screen#0 screen zp[2]:19 112.22222222222223
(byte**) renderBobCleanupNext
(byte**) renderBobCleanupNext#13 renderBobCleanupNext zp[2]:6 7.357142857142858
(byte**) renderBobCleanupNext#17 renderBobCleanupNext zp[2]:6 3.3870967741935485
(byte**) renderBobCleanupNext#13 renderBobCleanupNext zp[2]:10 52.57142857142857
(byte**) renderBobCleanupNext#17 renderBobCleanupNext zp[2]:10 73.73333333333335
(byte**) renderBobCleanupNext#21 renderBobCleanupNext zp[2]:10 67.33333333333333
(void()) renderBobInit()
(word~) renderBobInit::$0 zp[2]:15 16.5
(word~) renderBobInit::$1 zp[2]:15 11.0
(word~) renderBobInit::$0 zp[2]:21 16.5
(word~) renderBobInit::$1 zp[2]:21 11.0
(byte~) renderBobInit::$4 reg byte a 22.0
(byte~) renderBobInit::$5 reg byte a 22.0
(word~) renderBobInit::$6 zp[2]:17 22.0
(word~) renderBobInit::$7 zp[2]:15 22.0
(word~) renderBobInit::$6 zp[2]:23 22.0
(word~) renderBobInit::$7 zp[2]:21 22.0
(label) renderBobInit::@1
(label) renderBobInit::@2
(label) renderBobInit::@return
@ -414,53 +369,47 @@
(byte) renderBobInit::y#1 reg byte x 16.5
(byte) renderBobInit::y#2 reg byte x 4.714285714285714
reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ]
reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ]
reg byte x [ main::row#2 main::row#1 ]
reg byte x [ renderBobCleanup::i#2 renderBobCleanup::i#1 ]
reg byte x [ renderBobInit::y#2 renderBobInit::y#1 ]
reg byte x [ renderBobInit::i#2 renderBobInit::i#1 ]
zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::angle#8 main::angle#1 ]
zp[1]:3 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 main::r#2 main::r#1 ]
zp[1]:4 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::a#2 main::a#6 main::a#1 ]
zp[1]:5 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 main::i#2 main::i#1 ]
zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::col#5 main::col#1 ]
zp[2]:3 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 main::y#0 main::rowY#1 ]
reg byte x [ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ]
zp[2]:5 [ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 main::x#2 main::x#1 main::x#7 ]
reg byte y [ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ]
reg byte y [ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ]
reg byte a [ charsetFindOrAddGlyph::found#2 ]
reg byte x [ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ]
reg byte y [ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ]
reg byte x [ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ]
zp[2]:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 memset::dst#2 memset::dst#1 renderBobCleanupNext#17 renderBobCleanupNext#13 ]
zp[2]:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 main::y#2 main::y#1 main::y#6 ]
zp[1]:9 [ mulf_init::c#2 mulf_init::c#1 progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
zp[2]:10 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ]
reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
zp[2]:8 [ main::x#0 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
reg byte x [ renderBob::ypos#0 ]
zp[1]:12 [ mulf_init::dir#2 mulf_init::dir#4 prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
zp[1]:13 [ renderBob::xpos#0 prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
zp[1]:14 [ renderBob::ypos#0 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
reg byte a [ keyboard_key_pressed::return#2 ]
reg byte a [ main::$19 ]
reg byte a [ main::$15 ]
reg byte a [ keyboard_key_pressed::return#3 ]
reg byte a [ main::$21 ]
reg byte a [ main::$17 ]
reg byte a [ keyboard_matrix_read::return#2 ]
reg byte a [ keyboard_key_pressed::$2 ]
reg byte a [ keyboard_key_pressed::return#0 ]
reg byte a [ keyboard_matrix_read::return#0 ]
zp[1]:10 [ renderBob::x_char_offset#0 protoBobShiftRight::i#2 protoBobShiftRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ]
zp[1]:15 [ renderBob::x_char_offset#0 protoBobShiftRight::carry#1 ]
reg byte a [ renderBob::y_char_offset#0 ]
reg byte a [ renderBob::$8 ]
zp[2]:11 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 mulf8s::return#3 main::$12 mulf8u_prepared::return#0 main::$13 main::y#0 ]
zp[2]:16 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
reg byte a [ renderBob::$4 ]
zp[1]:13 [ renderBob::$5 mulf_init::c#2 mulf_init::c#1 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
zp[1]:18 [ renderBob::$5 renderBob::bob_table_idx#0 protoBobShiftRight::i#2 protoBobShiftRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ]
reg byte a [ renderBob::$6 ]
reg byte x [ renderBob::bob_table_idx#0 ]
reg byte a [ mulf8u_prepare::a#0 ]
zp[1]:14 [ mulf8s_prepared::b#0 renderBob::xpos#0 mulf_init::dir#2 mulf_init::dir#4 protoBobShiftRight::carry#1 ]
reg byte a [ mulf8u_prepared::b#0 ]
reg byte a [ mulf8s_prepared::$8 ]
reg byte a [ mulf8s_prepared::$15 ]
reg byte a [ mulf8s_prepared::$12 ]
reg byte a [ mulf8s_prepared::$16 ]
reg byte a [ renderBobCleanup::$1 ]
zp[2]:15 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 renderBobCleanup::screen#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ]
zp[2]:17 [ renderBobInit::$6 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 ]
zp[2]:19 [ renderBobCleanup::screen#0 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 main::x#0 main::x#4 main::rowX#1 ]
zp[2]:21 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 memset::dst#2 memset::dst#1 main::origX#8 main::origX#1 ]
zp[2]:23 [ renderBobInit::$6 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 main::rowOffsetY#10 main::rowOffsetY#1 ]
reg byte a [ renderBobInit::$4 ]
reg byte a [ renderBobInit::$5 ]
reg byte a [ charsetFindOrAddGlyph::return#1 ]