1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-26 12:49:21 +00:00

Fixed tests.

This commit is contained in:
jespergravgaard 2020-05-08 09:10:59 +02:00
parent aa66273149
commit 6a5aa72ed5
4 changed files with 3198 additions and 2866 deletions

View File

@ -62,7 +62,7 @@
// CIA#1 Port B: keyboard matrix rows and joystick #1.
.label CONIO_CIA1_PORT_B = $dc01
// The line buffer
.label LINE_BUFFER = $4000
.label LINE_BUFFER = $2000
// The two charsets used as screen buffers
.label CANVAS1 = $3000
.label CANVAS2 = $3800
@ -73,13 +73,13 @@
// The default charset address
.label PETSCII = $1000
.label COSTAB = SINTAB+$40
.label conio_cursor_x = $1a
.label conio_cursor_y = $1b
.label conio_cursor_text = $1c
.label conio_cursor_color = $1e
.label conio_textcolor = $20
.label canvas_show_memory = $21
.label canvas_show_flag = $22
.label conio_cursor_x = $13
.label conio_cursor_y = $14
.label conio_cursor_text = $15
.label conio_cursor_color = $17
.label conio_textcolor = $19
.label canvas_show_memory = $1a
.label canvas_show_flag = $1b
__bbegin:
// conio_cursor_x = 0
// The current cursor x-position
@ -118,23 +118,23 @@ __bbegin:
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CANVAS1)/4&$f
.const toD0182_return = (>(SCREEN&$3fff)*4)|(>CANVAS2)/4&$f
.label __18 = $d
.label __18 = $b
.label cols = 2
// Setup 16x16 canvas for rendering
.label screen = 4
.label y = $1a
.label x0 = $23
.label y0 = $24
.label x1 = $15
.label y1 = $25
.label x2 = $15
.label y2 = $26
.label y = $13
.label x0 = $1c
.label y0 = $1d
.label x1 = $f
.label y1 = $1e
.label x2 = $f
.label y2 = $1f
.label p0_idx = 6
.label p1_idx = 7
.label p2_idx = 8
// The current canvas being rendered to
.label canvas = 9
.label cyclecount = $d
.label cyclecount = $b
// memset(CONSOLE, ' ', 40*25)
// Clear the console
ldx #' '
@ -202,11 +202,11 @@ main: {
sta.z canvas
lda #>CANVAS1
sta.z canvas+1
lda #$88+$aa
lda #$f0+$aa
sta.z p2_idx
lda #$88+$f
lda #$f0+$f
sta.z p1_idx
lda #$88
lda #$f0
sta.z p0_idx
__b8:
// clock_start()
@ -241,7 +241,8 @@ main: {
// line(LINE_BUFFER, x0, y0, x1, y1)
lda.z x0
sta.z line.x1
ldx.z y0
lda.z y0
sta.z line.y1
lda.z y1
sta.z line.y2
jsr line
@ -255,14 +256,16 @@ main: {
// line(LINE_BUFFER, x1, y1, x2, y2)
lda.z x1
sta.z line.x1
ldx.z y1
lda.z y1
sta.z line.y1
lda.z y2
sta.z line.y2
jsr line
// line(LINE_BUFFER, x2, y2, x0, y0)
lda.z x2
sta.z line.x1
ldx.z y2
lda.z y2
sta.z line.y1
lda.z x0
sta.z line.x2
lda.z y0
@ -274,13 +277,6 @@ main: {
inc.z p1_idx
// p2_idx++;
inc.z p2_idx
// eorfill(LINE_BUFFER, canvas)
lda.z canvas
sta.z eorfill.canvas
lda.z canvas+1
sta.z eorfill.canvas+1
// Fill canvas
jsr eorfill
// VICII->BORDER_COLOR = RED
// Wait until the canvas on screen has been switched before starting work on the next frame
lda #RED
@ -293,11 +289,13 @@ main: {
// VICII->BORDER_COLOR = BLACK
lda #BLACK
sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR
// canvas_show_memory ^= toD018(SCREEN,CANVAS1)^toD018(SCREEN,CANVAS2)
// Swap canvas to show on screen (using XOR)
lda #toD0181_return^toD0182_return
eor.z canvas_show_memory
sta.z canvas_show_memory
// eorfill(LINE_BUFFER, canvas)
lda.z canvas
sta.z eorfill.canvas
lda.z canvas+1
sta.z eorfill.canvas+1
// Fill canvas
jsr eorfill
// canvas ^= (CANVAS1^CANVAS2)
// swap canvas being rendered to (using XOR)
lda #<CANVAS1^CANVAS2
@ -306,6 +304,11 @@ main: {
lda #>CANVAS1^CANVAS2
eor.z canvas+1
sta.z canvas+1
// canvas_show_memory ^= toD018(SCREEN,CANVAS1)^toD018(SCREEN,CANVAS2)
// Swap canvas to show on screen (using XOR)
lda #toD0181_return^toD0182_return
eor.z canvas_show_memory
sta.z canvas_show_memory
// canvas_show_flag = 1
// Set flag used to signal when the canvas has been shown
lda #1
@ -391,13 +394,13 @@ main: {
.byte 0
}
// Print an unsigned int using a specific format
// printf_ulong(dword zp($d) uvalue)
// printf_ulong(dword zp($b) uvalue)
printf_ulong: {
.const format_min_length = 6
.const format_justify_left = 0
.const format_zero_padding = 0
.const format_upper_case = 0
.label uvalue = $d
.label uvalue = $b
// printf_buffer.sign = format.sign_always?'+':0
// Handle any sign
lda #0
@ -422,14 +425,14 @@ printf_ulong: {
}
// Print the contents of the number buffer using a specific format.
// This handles minimum length, zero-filling, and left/right justification from the format
// printf_number_buffer(byte zp($25) buffer_sign, byte register(X) format_min_length, byte zp($23) format_justify_left, byte zp($24) format_zero_padding, byte zp($15) format_upper_case)
// printf_number_buffer(byte zp($1f) buffer_sign, byte register(X) format_min_length, byte zp($1d) format_justify_left, byte zp($1e) format_zero_padding, byte zp($f) format_upper_case)
printf_number_buffer: {
.label __19 = $13
.label buffer_sign = $25
.label padding = $16
.label format_zero_padding = $24
.label format_justify_left = $23
.label format_upper_case = $15
.label __19 = $31
.label buffer_sign = $1f
.label padding = $10
.label format_zero_padding = $1e
.label format_justify_left = $1d
.label format_upper_case = $f
// if(format.min_length)
cpx #0
beq __b6
@ -534,11 +537,11 @@ printf_number_buffer: {
rts
}
// Print a padding char a number of times
// printf_padding(byte zp($18) pad, byte zp($17) length)
// printf_padding(byte zp($12) pad, byte zp($11) length)
printf_padding: {
.label i = $19
.label length = $17
.label pad = $18
.label i = $1c
.label length = $11
.label pad = $12
lda #0
sta.z i
__b1:
@ -602,9 +605,9 @@ cputc: {
}
// Print a newline
cputln: {
.label __1 = $1c
.label __2 = $1e
.label ln_offset = $2f
.label __1 = $15
.label __2 = $17
.label ln_offset = $28
// ln_offset = CONIO_WIDTH - conio_cursor_x
sec
lda #$28
@ -643,8 +646,8 @@ cputln: {
}
// Scroll the entire screen if the cursor is beyond the last line
cscroll: {
.label __7 = $1c
.label __8 = $1e
.label __7 = $15
.label __8 = $17
// if(conio_cursor_y==CONIO_HEIGHT)
lda #$19
cmp.z conio_cursor_y
@ -716,12 +719,12 @@ cscroll: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp($13) str, byte register(X) c, word zp($11) num)
// memset(void* zp($31) str, byte register(X) c, word zp($28) num)
memset: {
.label end = $11
.label dst = $13
.label num = $11
.label str = $13
.label end = $28
.label dst = $31
.label num = $28
.label str = $31
// if(num>0)
lda.z num
bne !+
@ -761,13 +764,13 @@ memset: {
}
// Copy block of memory (forwards)
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
// memcpy(void* zp($13) destination, void* zp($11) source)
// memcpy(void* zp($31) destination, void* zp($28) source)
memcpy: {
.label src_end = $2f
.label dst = $13
.label src = $11
.label source = $11
.label destination = $13
.label src_end = $2b
.label dst = $31
.label src = $28
.label source = $28
.label destination = $31
// src_end = (char*)source+num
lda.z source
clc
@ -803,9 +806,9 @@ memcpy: {
jmp __b1
}
// Output a NUL-terminated string at the current cursor position
// cputs(byte* zp($b) s)
// cputs(byte* zp($2e) s)
cputs: {
.label s = $b
.label s = $2e
__b1:
// c=*s++
ldy #0
@ -827,7 +830,7 @@ cputs: {
// Converts a string to uppercase.
strupr: {
.label str = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
.label src = $b
.label src = $2e
lda #<str
sta.z src
lda #>str
@ -875,11 +878,11 @@ toupper: {
rts
}
// Computes the length of the string str up to but not including the terminating null character.
// strlen(byte* zp($11) str)
// strlen(byte* zp($28) str)
strlen: {
.label len = $13
.label str = $11
.label return = $13
.label len = $31
.label str = $28
.label return = $31
lda #<0
sta.z len
sta.z len+1
@ -913,13 +916,13 @@ strlen: {
// - value : The number to be converted to RADIX
// - buffer : receives the string representing the number and zero-termination.
// - radix : The radix to convert the number to (from the enum RADIX)
// ultoa(dword zp($d) value, byte* zp($11) buffer)
// ultoa(dword zp($b) value, byte* zp($28) buffer)
ultoa: {
.const max_digits = $a
.label digit_value = $27
.label buffer = $11
.label digit = $23
.label value = $d
.label digit_value = $20
.label buffer = $28
.label digit = $1d
.label value = $b
lda #<printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
sta.z buffer
lda #>printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
@ -1007,12 +1010,12 @@ ultoa: {
// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased.
// (For decimal the subs used are 10000, 1000, 100, 10, 1)
// returns : the value reduced by sub * digit so that it is less than sub.
// ultoa_append(byte* zp($11) buffer, dword zp($d) value, dword zp($27) sub)
// ultoa_append(byte* zp($28) buffer, dword zp($b) value, dword zp($20) sub)
ultoa_append: {
.label buffer = $11
.label value = $d
.label sub = $27
.label return = $d
.label buffer = $28
.label value = $b
.label sub = $20
.label return = $b
ldx #0
__b1:
// while (value >= sub)
@ -1091,13 +1094,13 @@ printf_uchar: {
// - value : The number to be converted to RADIX
// - buffer : receives the string representing the number and zero-termination.
// - radix : The radix to convert the number to (from the enum RADIX)
// uctoa(byte register(X) value, byte* zp($13) buffer)
// uctoa(byte register(X) value, byte* zp($31) buffer)
uctoa: {
.const max_digits = 2
.label digit_value = $2b
.label buffer = $13
.label digit = $24
.label started = $25
.label digit_value = $24
.label buffer = $31
.label digit = $1e
.label started = $1f
lda #<printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
sta.z buffer
lda #>printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
@ -1162,10 +1165,10 @@ uctoa: {
// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased.
// (For decimal the subs used are 10000, 1000, 100, 10, 1)
// returns : the value reduced by sub * digit so that it is less than sub.
// uctoa_append(byte* zp($13) buffer, byte register(X) value, byte zp($2b) sub)
// uctoa_append(byte* zp($31) buffer, byte register(X) value, byte zp($24) sub)
uctoa_append: {
.label buffer = $13
.label sub = $2b
.label buffer = $31
.label sub = $24
ldy #0
__b1:
// while (value >= sub)
@ -1214,7 +1217,7 @@ gotoxy: {
// Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program).
// This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start()
clock: {
.label return = $d
.label return = $b
// 0xffffffff - *CIA2_TIMER_AB
lda #<$ffffffff
sec
@ -1233,11 +1236,11 @@ clock: {
rts
}
// EOR fill from the line buffer onto the canvas
// eorfill(byte* zp($1e) canvas)
// eorfill(byte* zp($17) canvas)
eorfill: {
.label canvas = $1e
.label line_column = $1c
.label fill_column = $1e
.label canvas = $17
.label line_column = $15
.label fill_column = $17
lda #<LINE_BUFFER
sta.z line_column
lda #>LINE_BUFFER
@ -1288,37 +1291,40 @@ eorfill: {
}
// Draw a EOR friendly line between two points
// Uses bresenham line drawing routine
// line(byte zp($18) x1, byte register(X) y1, byte zp($15) x2, byte zp($16) y2)
// line(byte zp($11) x1, byte zp($12) y1, byte zp($f) x2, byte zp($10) y2)
line: {
.label x1 = $18
.label x2 = $15
.label y2 = $16
.label x = $18
.label dx = $2b
.label dy = $2c
.label sx = $2d
.label sy = $2e
.label e1 = $19
.label e = $17
.label plot1___1 = $2a
.label plot2___1 = $2d
.label plot3___1 = $30
.label x1 = $11
.label y1 = $12
.label x2 = $f
.label y2 = $10
.label x = $11
.label y = $12
.label dx = $24
.label dy = $25
.label sx = $26
.label sy = $27
.label plot1_column = $28
.label plot2_x = $11
.label plot2_column = $2b
.label plot3_column = $2e
.label plot4_column = $31
// abs_u8(x2-x1)
lda.z x2
sec
sbc.z x
tay
jsr abs_u8
// abs_u8(x2-x1)
tya
// dx = abs_u8(x2-x1)
sta.z dx
// abs_u8(y2-y1)
txa
eor #$ff
lda.z y2
sec
adc.z y2
tay
sbc.z y
jsr abs_u8
// abs_u8(y2-y1)
tya
// dy = abs_u8(y2-y1)
sta.z dy
// sgn_u8(x2-x1)
@ -1330,10 +1336,9 @@ line: {
// sx = sgn_u8(x2-x1)
sta.z sx
// sgn_u8(y2-y1)
txa
eor #$ff
lda.z y2
sec
adc.z y2
sbc.z y
jsr sgn_u8
// sgn_u8(y2-y1)
// sy = sgn_u8(y2-y1)
@ -1343,7 +1348,7 @@ line: {
cmp.z sx
bne __b1
// y++;
inx
inc.z y
// y2++;
inc.z y2
__b1:
@ -1353,39 +1358,83 @@ line: {
bcc __b2
// e = dy/2
lsr
sta.z e
// plot(canvas, x, y)
jsr plot
tax
// x/8
lda.z x
lsr
lsr
lsr
// column = plot_column[x/8]
asl
tay
lda plot_column,y
sta.z plot1_column
lda plot_column+1,y
sta.z plot1_column+1
// x&7
lda #7
and.z x
sta.z plot1___1
// column[y] |= plot_bit[x&7]
ldy.z y
lda (plot1_column),y
ldy.z plot1___1
ora plot_bit,y
ldy.z y
sta (plot1_column),y
__b5:
// y += sy
txa
lda.z y
clc
adc.z sy
tax
sta.z y
// e += dx
lda.z e
txa
clc
adc.z dx
sta.z e
tax
// if(dy<e)
lda.z dy
cmp.z e
stx.z $ff
cmp.z $ff
bcs __b6
// x += sx
lda.z x
lda.z plot2_x
clc
adc.z sx
sta.z x
sta.z plot2_x
// e -= dy
lda.z e
txa
sec
sbc.z dy
sta.z e
// plot(canvas, x, y)
jsr plot
tax
// x/8
lda.z plot2_x
lsr
lsr
lsr
// column = plot_column[x/8]
asl
tay
lda plot_column,y
sta.z plot2_column
lda plot_column+1,y
sta.z plot2_column+1
// x&7
lda #7
and.z plot2_x
sta.z plot2___1
// column[y] |= plot_bit[x&7]
ldy.z y
lda (plot2_column),y
ldy.z plot2___1
ora plot_bit,y
ldy.z y
sta (plot2_column),y
__b6:
// while (y != y2)
cpx.z y2
lda.z y
cmp.z y2
bne __b5
// }
rts
@ -1393,80 +1442,81 @@ line: {
// e = dx/2
lda.z dx
lsr
sta.z e1
tax
__b8:
// plot(canvas, x, y)
jsr plot
// x/8
lda.z x
lsr
lsr
lsr
// column = plot_column[x/8]
asl
tay
lda plot_column,y
sta.z plot3_column
lda plot_column+1,y
sta.z plot3_column+1
// x&7
lda #7
and.z x
sta.z plot3___1
// column[y] |= plot_bit[x&7]
ldy.z y
lda (plot3_column),y
ldy.z plot3___1
ora plot_bit,y
ldy.z y
sta (plot3_column),y
// x += sx
lda.z x
clc
adc.z sx
sta.z x
// e += dy
lda.z e1
clc
adc.z dy
sta.z e1
// if(dx < e)
lda.z dx
cmp.z e1
bcs __b9
// y += sy
txa
clc
adc.z sy
adc.z dy
tax
// if(dx < e)
lda.z dx
stx.z $ff
cmp.z $ff
bcs __b9
// y += sy
tya
clc
adc.z sy
sta.z y
// e -= dx
lda.z e1
txa
sec
sbc.z dx
sta.z e1
tax
__b9:
// while (x != x2)
lda.z x
cmp.z x2
bne __b8
// plot(canvas, x, y)
jsr plot
rts
}
// Plot a single point on the canvas
// plot(byte zp($18) x, byte register(X) y)
plot: {
.label __2 = $31
.label x = $18
.label column = $2f
// x/8
lda.z x
lsr
lsr
lsr
// canvas + plot_column[x/8]
// column = plot_column[x/8]
asl
// column = canvas + plot_column[x/8]
tay
clc
lda #<LINE_BUFFER
adc plot_column,y
sta.z column
lda #>LINE_BUFFER
adc plot_column+1,y
sta.z column+1
lda plot_column,y
sta.z plot4_column
lda plot_column+1,y
sta.z plot4_column+1
// x&7
lda #7
and.z x
sta.z __2
// column[y] |= plot_bit[x&7]
// Plot the bit
txa
tay
lda (column),y
ldy.z __2
stx.z $ff
ora plot_bit,y
ldy.z $ff
sta (column),y
// }
ldy.z y
tax
lda (plot4_column),y
ora plot_bit,x
sta (plot4_column),y
rts
}
// Get the sign of a 8-bit unsigned number treated as a signed number.
@ -1486,21 +1536,20 @@ sgn_u8: {
rts
}
// Get the absolute value of a u-bit unsigned number treated as a signed number.
// abs_u8(byte register(Y) u)
// abs_u8(byte register(A) u)
abs_u8: {
// u & 0x80
tya
and #$80
ldx #$80
axs #0
// if(u & 0x80)
cmp #0
cpx #0
bne __b1
rts
__b1:
// return -u;
dey
tya
eor #$ff
tay
clc
adc #1
// }
rts
}
@ -1655,7 +1704,7 @@ SINTAB:
.fill $200, 63 + 63*sin(i*2*PI/$100)
// Column offsets
plot_column: .word 0, 1*$80, 2*$80, 3*$80, 4*$80, 5*$80, 6*$80, 7*$80, 8*$80, 9*$80, $a*$80, $b*$80, $c*$80, $d*$80, $e*$80, $f*$80
plot_column: .word LINE_BUFFER, LINE_BUFFER+1*$80, LINE_BUFFER+2*$80, LINE_BUFFER+3*$80, LINE_BUFFER+4*$80, LINE_BUFFER+5*$80, LINE_BUFFER+6*$80, LINE_BUFFER+7*$80, LINE_BUFFER+8*$80, LINE_BUFFER+9*$80, LINE_BUFFER+$a*$80, LINE_BUFFER+$b*$80, LINE_BUFFER+$c*$80, LINE_BUFFER+$d*$80, LINE_BUFFER+$e*$80, LINE_BUFFER+$f*$80
// The bits used for plotting a pixel
plot_bit: .byte $80, $40, $20, $10, 8, 4, 2, 1
// Buffer used for stringified number being printed

View File

@ -52,9 +52,9 @@ main::@14: scope:[main] from main::@3
to:main::@7
main::@7: scope:[main] from main::@14 main::@26
[25] (byte*) main::canvas#10 ← phi( main::@14/(const nomodify byte*) CANVAS1 main::@26/(byte*) main::canvas#24 )
[25] (byte) main::p2_idx#2 ← phi( main::@14/(byte) $88+(byte) $aa main::@26/(byte) main::p2_idx#1 )
[25] (byte) main::p1_idx#2 ← phi( main::@14/(byte) $88+(byte) $f main::@26/(byte) main::p1_idx#1 )
[25] (byte) main::p0_idx#11 ← phi( main::@14/(byte) $88 main::@26/(byte) main::p0_idx#1 )
[25] (byte) main::p2_idx#2 ← phi( main::@14/(byte) $f0+(byte) $aa main::@26/(byte) main::p2_idx#1 )
[25] (byte) main::p1_idx#2 ← phi( main::@14/(byte) $f0+(byte) $f main::@26/(byte) main::p1_idx#1 )
[25] (byte) main::p0_idx#11 ← phi( main::@14/(byte) $f0 main::@26/(byte) main::p0_idx#1 )
to:main::@8
main::@8: scope:[main] from main::@7
[26] phi()
@ -95,27 +95,27 @@ main::@19: scope:[main] from main::@18
[51] (byte) main::p0_idx#1 ← ++ (byte) main::p0_idx#11
[52] (byte) main::p1_idx#1 ← ++ (byte) main::p1_idx#2
[53] (byte) main::p2_idx#1 ← ++ (byte) main::p2_idx#2
[54] (byte*) eorfill::canvas#0 ← (byte*) main::canvas#10
[55] call eorfill
to:main::@20
main::@20: scope:[main] from main::@19
[56] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (const nomodify byte) RED
[54] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (const nomodify byte) RED
to:main::@9
main::@9: scope:[main] from main::@20 main::@9
[57] if((byte) 0!=(volatile byte) canvas_show_flag) goto main::@9
main::@9: scope:[main] from main::@19 main::@9
[55] if((byte) 0!=(volatile byte) canvas_show_flag) goto main::@9
to:main::@10
main::@10: scope:[main] from main::@9
[58] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (const nomodify byte) BLACK
[56] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (const nomodify byte) BLACK
[57] (byte*) eorfill::canvas#0 ← (byte*) main::canvas#10
[58] call eorfill
to:main::@20
main::@20: scope:[main] from main::@10
[59] (word) main::canvas#1 ← (byte*) main::canvas#10 ^ (const nomodify byte*) CANVAS1^(const nomodify byte*) CANVAS2
to:main::toD0181
main::toD0181: scope:[main] from main::@10
[59] phi()
main::toD0181: scope:[main] from main::@20
[60] phi()
to:main::toD0182
main::toD0182: scope:[main] from main::toD0181
[60] phi()
[61] phi()
to:main::@11
main::@11: scope:[main] from main::toD0182
[61] (volatile byte) canvas_show_memory ← (volatile byte) canvas_show_memory ^ (const byte) main::toD0181_return#0^(const byte) main::toD0182_return#0
[62] (word) main::canvas#1 ← (byte*) main::canvas#10 ^ (const nomodify byte*) CANVAS1^(const nomodify byte*) CANVAS2
[62] (volatile byte) canvas_show_memory ← (volatile byte) canvas_show_memory ^ (const byte) main::toD0181_return#0^(const byte) main::toD0182_return#0
[63] (volatile byte) canvas_show_flag ← (byte) 1
[64] call clock
[65] (dword) clock::return#2 ← (dword) clock::return#0
@ -650,7 +650,7 @@ clock::@return: scope:[clock] from clock
to:@return
(void()) eorfill((byte*) eorfill::line_buffer , (byte*) eorfill::canvas)
eorfill: scope:[eorfill] from main::@19
eorfill: scope:[eorfill] from main::@10
[294] phi()
to:eorfill::@1
eorfill::@1: scope:[eorfill] from eorfill eorfill::@5
@ -684,10 +684,10 @@ eorfill::@4: scope:[eorfill] from eorfill::@3
(void()) line((byte*) line::canvas , (byte) line::x1 , (byte) line::y1 , (byte) line::x2 , (byte) line::y2)
line: scope:[line] from main::@16 main::@17 main::@18
[307] (byte) line::y2#10 ← phi( main::@16/(byte) line::y2#0 main::@17/(byte) line::y2#1 main::@18/(byte) line::y2#2 )
[307] (byte) line::x2#10 ← phi( main::@16/(byte) line::x2#0 main::@17/(byte) line::x2#1 main::@18/(byte) line::x2#2 )
[307] (byte) line::x2#11 ← phi( main::@16/(byte) line::x2#0 main::@17/(byte) line::x2#1 main::@18/(byte) line::x2#2 )
[307] (byte) line::y#0 ← phi( main::@16/(byte) line::y1#0 main::@17/(byte) line::y1#1 main::@18/(byte) line::y1#2 )
[307] (byte) line::x#0 ← phi( main::@16/(byte) line::x1#0 main::@17/(byte) line::x1#1 main::@18/(byte) line::x1#2 )
[308] (byte) abs_u8::u#0 ← (byte) line::x2#10 - (byte) line::x#0
[308] (byte) abs_u8::u#0 ← (byte) line::x2#11 - (byte) line::x#0
[309] call abs_u8
[310] (byte) abs_u8::return#0 ← (byte) abs_u8::return#4
to:line::@12
@ -699,7 +699,7 @@ line::@12: scope:[line] from line
to:line::@13
line::@13: scope:[line] from line::@12
[315] (byte) line::dy#0 ← (byte) abs_u8::return#1
[316] (byte) sgn_u8::u#0 ← (byte) line::x2#10 - (byte) line::x#0
[316] (byte) sgn_u8::u#0 ← (byte) line::x2#11 - (byte) line::x#0
[317] call sgn_u8
[318] (byte) sgn_u8::return#0 ← (byte) sgn_u8::return#4
to:line::@14
@ -724,185 +724,185 @@ line::@1: scope:[line] from line::@15 line::@3
to:line::@4
line::@4: scope:[line] from line::@1
[329] (byte) line::e#0 ← (byte) line::dy#0 >> (byte) 1
[330] (byte) plot::x#0 ← (byte) line::x#0
[331] (byte) plot::y#0 ← (byte) line::y#13
[332] call plot
to:line::plot1
line::plot1: scope:[line] from line::@4
[330] (byte~) line::plot1_$0 ← (byte) line::x#0 >> (byte) 3
[331] (byte~) line::plot1_$2 ← (byte~) line::plot1_$0 << (byte) 1
[332] (byte*) line::plot1_column#0 ← *((const byte**) plot_column + (byte~) line::plot1_$2)
[333] (byte~) line::plot1_$1 ← (byte) line::x#0 & (byte) 7
[334] *((byte*) line::plot1_column#0 + (byte) line::y#13) ← *((byte*) line::plot1_column#0 + (byte) line::y#13) | *((const byte*) plot_bit + (byte~) line::plot1_$1)
to:line::@5
line::@5: scope:[line] from line::@4 line::@6
[333] (byte) line::x#10 ← phi( line::@4/(byte) line::x#0 line::@6/(byte) line::x#16 )
[333] (byte) line::e#3 ← phi( line::@4/(byte) line::e#0 line::@6/(byte) line::e#6 )
[333] (byte) line::y#6 ← phi( line::@4/(byte) line::y#13 line::@6/(byte) line::y#15 )
[334] (byte) line::y#15 ← (byte) line::y#6 + (byte) line::sy#0
[335] (byte) line::e#1 ← (byte) line::e#3 + (byte) line::dx#0
[336] if((byte) line::dy#0>=(byte) line::e#1) goto line::@6
line::@5: scope:[line] from line::@6 line::plot1
[335] (byte) line::x#10 ← phi( line::@6/(byte) line::x#16 line::plot1/(byte) line::x#0 )
[335] (byte) line::e#3 ← phi( line::@6/(byte) line::e#5 line::plot1/(byte) line::e#0 )
[335] (byte) line::y#6 ← phi( line::@6/(byte) line::y#15 line::plot1/(byte) line::y#13 )
[336] (byte) line::y#15 ← (byte) line::y#6 + (byte) line::sy#0
[337] (byte) line::e#1 ← (byte) line::e#3 + (byte) line::dx#0
[338] if((byte) line::dy#0>=(byte) line::e#1) goto line::@6
to:line::@7
line::@7: scope:[line] from line::@5
[337] (byte) line::x#1 ← (byte) line::x#10 + (byte) line::sx#0
[338] (byte) line::e#2 ← (byte) line::e#1 - (byte) line::dy#0
[339] (byte) plot::x#1 ← (byte) line::x#1
[340] (byte) plot::y#1 ← (byte) line::y#15
[341] call plot
[339] (byte) line::plot2_x#0 ← (byte) line::x#10 + (byte) line::sx#0
[340] (byte) line::e#2 ← (byte) line::e#1 - (byte) line::dy#0
to:line::plot2
line::plot2: scope:[line] from line::@7
[341] (byte~) line::plot2_$0 ← (byte) line::plot2_x#0 >> (byte) 3
[342] (byte~) line::plot2_$2 ← (byte~) line::plot2_$0 << (byte) 1
[343] (byte*) line::plot2_column#0 ← *((const byte**) plot_column + (byte~) line::plot2_$2)
[344] (byte~) line::plot2_$1 ← (byte) line::plot2_x#0 & (byte) 7
[345] *((byte*) line::plot2_column#0 + (byte) line::y#15) ← *((byte*) line::plot2_column#0 + (byte) line::y#15) | *((const byte*) plot_bit + (byte~) line::plot2_$1)
to:line::@6
line::@6: scope:[line] from line::@5 line::@7
[342] (byte) line::x#16 ← phi( line::@7/(byte) line::x#1 line::@5/(byte) line::x#10 )
[342] (byte) line::e#6 ← phi( line::@7/(byte) line::e#2 line::@5/(byte) line::e#1 )
[343] if((byte) line::y#15!=(byte) line::y2#13) goto line::@5
line::@6: scope:[line] from line::@5 line::plot2
[346] (byte) line::x#16 ← phi( line::@5/(byte) line::x#10 line::plot2/(byte) line::plot2_x#0 )
[346] (byte) line::e#5 ← phi( line::@5/(byte) line::e#1 line::plot2/(byte) line::e#2 )
[347] if((byte) line::y#15!=(byte) line::y2#13) goto line::@5
to:line::@return
line::@return: scope:[line] from line::@11 line::@6
[344] return
line::@return: scope:[line] from line::@6 line::plot4
[348] return
to:@return
line::@2: scope:[line] from line::@1
[345] (byte) line::e1#0 ← (byte) line::dx#0 >> (byte) 1
[349] (byte) line::e1#0 ← (byte) line::dx#0 >> (byte) 1
to:line::@8
line::@8: scope:[line] from line::@2 line::@9
[346] (byte) line::e1#3 ← phi( line::@2/(byte) line::e1#0 line::@9/(byte) line::e1#6 )
[346] (byte) line::y#10 ← phi( line::@2/(byte) line::y#13 line::@9/(byte) line::y#11 )
[346] (byte) line::x#5 ← phi( line::@2/(byte) line::x#0 line::@9/(byte) line::x#12 )
[347] (byte) plot::x#2 ← (byte) line::x#5
[348] (byte) plot::y#2 ← (byte) line::y#10
[349] call plot
to:line::@16
line::@16: scope:[line] from line::@8
[350] (byte) line::x#12 ← (byte) line::x#5 + (byte) line::sx#0
[351] (byte) line::e1#1 ← (byte) line::e1#3 + (byte) line::dy#0
[352] if((byte) line::dx#0>=(byte) line::e1#1) goto line::@9
to:line::@10
line::@10: scope:[line] from line::@16
[353] (byte) line::y#3 ← (byte) line::y#10 + (byte) line::sy#0
[354] (byte) line::e1#2 ← (byte) line::e1#1 - (byte) line::dx#0
to:line::@9
line::@9: scope:[line] from line::@10 line::@16
[355] (byte) line::e1#6 ← phi( line::@10/(byte) line::e1#2 line::@16/(byte) line::e1#1 )
[355] (byte) line::y#11 ← phi( line::@10/(byte) line::y#3 line::@16/(byte) line::y#10 )
[356] if((byte) line::x#12!=(byte) line::x2#10) goto line::@8
[350] (byte) line::e1#3 ← phi( line::@2/(byte) line::e1#0 line::@9/(byte) line::e1#7 )
[350] (byte) line::y#10 ← phi( line::@2/(byte) line::y#13 line::@9/(byte) line::y#11 )
[350] (byte) line::x#12 ← phi( line::@2/(byte) line::x#0 line::@9/(byte) line::x#13 )
to:line::plot3
line::plot3: scope:[line] from line::@8
[351] (byte~) line::plot3_$0 ← (byte) line::x#12 >> (byte) 3
[352] (byte~) line::plot3_$2 ← (byte~) line::plot3_$0 << (byte) 1
[353] (byte*) line::plot3_column#0 ← *((const byte**) plot_column + (byte~) line::plot3_$2)
[354] (byte~) line::plot3_$1 ← (byte) line::x#12 & (byte) 7
[355] *((byte*) line::plot3_column#0 + (byte) line::y#10) ← *((byte*) line::plot3_column#0 + (byte) line::y#10) | *((const byte*) plot_bit + (byte~) line::plot3_$1)
to:line::@11
line::@11: scope:[line] from line::@9
[357] (byte) plot::x#3 ← (byte) line::x#12
[358] (byte) plot::y#3 ← (byte) line::y#11
[359] call plot
line::@11: scope:[line] from line::plot3
[356] (byte) line::x#13 ← (byte) line::x#12 + (byte) line::sx#0
[357] (byte) line::e1#1 ← (byte) line::e1#3 + (byte) line::dy#0
[358] if((byte) line::dx#0>=(byte) line::e1#1) goto line::@9
to:line::@10
line::@10: scope:[line] from line::@11
[359] (byte) line::y#3 ← (byte) line::y#10 + (byte) line::sy#0
[360] (byte) line::e1#2 ← (byte) line::e1#1 - (byte) line::dx#0
to:line::@9
line::@9: scope:[line] from line::@10 line::@11
[361] (byte) line::e1#7 ← phi( line::@10/(byte) line::e1#2 line::@11/(byte) line::e1#1 )
[361] (byte) line::y#11 ← phi( line::@10/(byte) line::y#3 line::@11/(byte) line::y#10 )
[362] if((byte) line::x#13!=(byte) line::x2#11) goto line::@8
to:line::plot4
line::plot4: scope:[line] from line::@9
[363] (byte~) line::plot4_$0 ← (byte) line::x#13 >> (byte) 3
[364] (byte~) line::plot4_$2 ← (byte~) line::plot4_$0 << (byte) 1
[365] (byte*) line::plot4_column#0 ← *((const byte**) plot_column + (byte~) line::plot4_$2)
[366] (byte~) line::plot4_$1 ← (byte) line::x#13 & (byte) 7
[367] *((byte*) line::plot4_column#0 + (byte) line::y#11) ← *((byte*) line::plot4_column#0 + (byte) line::y#11) | *((const byte*) plot_bit + (byte~) line::plot4_$1)
to:line::@return
(void()) plot((byte*) plot::canvas , (byte) plot::x , (byte) plot::y)
plot: scope:[plot] from line::@11 line::@4 line::@7 line::@8
[360] (byte) plot::y#4 ← phi( line::@11/(byte) plot::y#3 line::@4/(byte) plot::y#0 line::@7/(byte) plot::y#1 line::@8/(byte) plot::y#2 )
[360] (byte) plot::x#4 ← phi( line::@11/(byte) plot::x#3 line::@4/(byte) plot::x#0 line::@7/(byte) plot::x#1 line::@8/(byte) plot::x#2 )
[361] (byte~) plot::$0 ← (byte) plot::x#4 >> (byte) 3
[362] (byte~) plot::$3 ← (byte~) plot::$0 << (byte) 1
[363] (byte*) plot::column#0 ← (const nomodify byte*) LINE_BUFFER + *((const word*) plot_column + (byte~) plot::$3)
[364] (byte~) plot::$2 ← (byte) plot::x#4 & (byte) 7
[365] *((byte*) plot::column#0 + (byte) plot::y#4) ← *((byte*) plot::column#0 + (byte) plot::y#4) | *((const byte*) plot_bit + (byte~) plot::$2)
to:plot::@return
plot::@return: scope:[plot] from plot
[366] return
to:@return
(byte()) sgn_u8((byte) sgn_u8::u)
sgn_u8: scope:[sgn_u8] from line::@13 line::@14
[367] (byte) sgn_u8::u#2 ← phi( line::@13/(byte) sgn_u8::u#0 line::@14/(byte) sgn_u8::u#1 )
[368] (byte~) sgn_u8::$0 ← (byte) sgn_u8::u#2 & (byte) $80
[369] if((byte) 0!=(byte~) sgn_u8::$0) goto sgn_u8::@1
[368] (byte) sgn_u8::u#2 ← phi( line::@13/(byte) sgn_u8::u#0 line::@14/(byte) sgn_u8::u#1 )
[369] (byte~) sgn_u8::$0 ← (byte) sgn_u8::u#2 & (byte) $80
[370] if((byte) 0!=(byte~) sgn_u8::$0) goto sgn_u8::@1
to:sgn_u8::@return
sgn_u8::@1: scope:[sgn_u8] from sgn_u8
[370] phi()
[371] phi()
to:sgn_u8::@return
sgn_u8::@return: scope:[sgn_u8] from sgn_u8 sgn_u8::@1
[371] (byte) sgn_u8::return#4 ← phi( sgn_u8::@1/(byte) -1 sgn_u8/(byte) 1 )
[372] return
[372] (byte) sgn_u8::return#4 ← phi( sgn_u8::@1/(byte) -1 sgn_u8/(byte) 1 )
[373] return
to:@return
(byte()) abs_u8((byte) abs_u8::u)
abs_u8: scope:[abs_u8] from line line::@12
[373] (byte) abs_u8::u#2 ← phi( line/(byte) abs_u8::u#0 line::@12/(byte) abs_u8::u#1 )
[374] (byte~) abs_u8::$0 ← (byte) abs_u8::u#2 & (byte) $80
[375] if((byte) 0!=(byte~) abs_u8::$0) goto abs_u8::@1
[374] (byte) abs_u8::u#2 ← phi( line/(byte) abs_u8::u#0 line::@12/(byte) abs_u8::u#1 )
[375] (byte~) abs_u8::$0 ← (byte) abs_u8::u#2 & (byte) $80
[376] if((byte) 0!=(byte~) abs_u8::$0) goto abs_u8::@1
to:abs_u8::@return
abs_u8::@1: scope:[abs_u8] from abs_u8
[376] (byte) abs_u8::return#2 ← - (byte) abs_u8::u#2
[377] (byte) abs_u8::return#2 ← - (byte) abs_u8::u#2
to:abs_u8::@return
abs_u8::@return: scope:[abs_u8] from abs_u8 abs_u8::@1
[377] (byte) abs_u8::return#4 ← phi( abs_u8::@1/(byte) abs_u8::return#2 abs_u8/(byte) abs_u8::u#2 )
[378] return
[378] (byte) abs_u8::return#4 ← phi( abs_u8::@1/(byte) abs_u8::return#2 abs_u8/(byte) abs_u8::u#2 )
[379] return
to:@return
(void()) clock_start()
clock_start: scope:[clock_start] from main::@8
[379] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0
[380] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
[381] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff
[382] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
[383] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START
[380] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0
[381] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
[382] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff
[383] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
[384] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START
to:clock_start::@return
clock_start::@return: scope:[clock_start] from clock_start
[384] return
[385] return
to:@return
(byte()) textcolor((byte) textcolor::color)
textcolor: scope:[textcolor] from main::@14
[385] (byte) conio_textcolor ← (const nomodify byte) WHITE
[386] (byte) conio_textcolor ← (const nomodify byte) WHITE
to:textcolor::@return
textcolor::@return: scope:[textcolor] from textcolor
[386] return
[387] return
to:@return
(void()) setup_irq()
setup_irq: scope:[setup_irq] from main::@3
asm { sei }
[388] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR
[389] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f
[390] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (const nomodify byte) BORDER_YPOS_BOTTOM-(byte) 8
[391] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER
[392] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) irq_bottom_1()
[389] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR
[390] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f
[391] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (const nomodify byte) BORDER_YPOS_BOTTOM-(byte) 8
[392] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER
[393] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) irq_bottom_1()
asm { cli }
to:setup_irq::@return
setup_irq::@return: scope:[setup_irq] from setup_irq
[394] return
[395] return
to:@return
interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
irq_bottom_2: scope:[irq_bottom_2] from
[395] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (const nomodify byte) BLACK
[396] call kbhit
[397] (byte) kbhit::return#2 ← (byte) kbhit::return#0
[396] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (const nomodify byte) BLACK
[397] call kbhit
[398] (byte) kbhit::return#2 ← (byte) kbhit::return#0
to:irq_bottom_2::@3
irq_bottom_2::@3: scope:[irq_bottom_2] from irq_bottom_2
[398] (byte~) irq_bottom_2::$0 ← (byte) kbhit::return#2
[399] if((byte) 0!=(byte~) irq_bottom_2::$0) goto irq_bottom_2::@1
[399] (byte~) irq_bottom_2::$0 ← (byte) kbhit::return#2
[400] if((byte) 0!=(byte~) irq_bottom_2::$0) goto irq_bottom_2::@1
to:irq_bottom_2::@2
irq_bottom_2::@2: scope:[irq_bottom_2] from irq_bottom_2::@3
[400] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_MEMORY) ← (volatile byte) canvas_show_memory
[401] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_MEMORY) ← (volatile byte) canvas_show_memory
to:irq_bottom_2::@1
irq_bottom_2::@1: scope:[irq_bottom_2] from irq_bottom_2::@2 irq_bottom_2::@3
[401] (volatile byte) canvas_show_flag ← (byte) 0
[402] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[403] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (const nomodify byte) BORDER_YPOS_BOTTOM-(byte) 8
[404] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) irq_bottom_1()
[402] (volatile byte) canvas_show_flag ← (byte) 0
[403] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[404] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (const nomodify byte) BORDER_YPOS_BOTTOM-(byte) 8
[405] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) irq_bottom_1()
to:irq_bottom_2::@return
irq_bottom_2::@return: scope:[irq_bottom_2] from irq_bottom_2::@1
[405] return
[406] return
to:@return
(byte()) kbhit()
kbhit: scope:[kbhit] from irq_bottom_2
[406] *((const nomodify byte*) CONIO_CIA1_PORT_A) ← (byte) 0
[407] (byte) kbhit::return#0 ← ~ *((const nomodify byte*) CONIO_CIA1_PORT_B)
[407] *((const nomodify byte*) CONIO_CIA1_PORT_A) ← (byte) 0
[408] (byte) kbhit::return#0 ← ~ *((const nomodify byte*) CONIO_CIA1_PORT_B)
to:kbhit::@return
kbhit::@return: scope:[kbhit] from kbhit
[408] return
[409] return
to:@return
interrupt(KERNEL_MIN)(void()) irq_bottom_1()
irq_bottom_1: scope:[irq_bottom_1] from
[409] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (const nomodify byte) WHITE
[410] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (const nomodify byte) WHITE
to:irq_bottom_1::toD0181
irq_bottom_1::toD0181: scope:[irq_bottom_1] from irq_bottom_1
[410] phi()
[411] phi()
to:irq_bottom_1::@1
irq_bottom_1::@1: scope:[irq_bottom_1] from irq_bottom_1::toD0181
[411] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_MEMORY) ← (const byte) irq_bottom_1::toD0181_return#0
[412] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[413] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (const nomodify byte) BORDER_YPOS_BOTTOM
[414] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
[412] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_MEMORY) ← (const byte) irq_bottom_1::toD0181_return#0
[413] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[414] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (const nomodify byte) BORDER_YPOS_BOTTOM
[415] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
to:irq_bottom_1::@return
irq_bottom_1::@return: scope:[irq_bottom_1] from irq_bottom_1::@1
[415] return
[416] return
to:@return

File diff suppressed because one or more lines are too long

View File

@ -25,7 +25,7 @@
(const byte*) DIGITS[] = (byte*) "0123456789abcdef"z
(const nomodify byte) IRQ_RASTER = (byte) 1
(const nomodify void()**) KERNEL_IRQ = (void()**) 788
(const nomodify byte*) LINE_BUFFER = (byte*) 16384
(const nomodify byte*) LINE_BUFFER = (byte*) 8192
(byte) MOS6526_CIA::INTERRUPT
(byte) MOS6526_CIA::PORT_A
(byte) MOS6526_CIA::PORT_A_DDR
@ -136,32 +136,32 @@
(const nomodify struct MOS6569_VICII*) VICII = (struct MOS6569_VICII*) 53248
(const nomodify byte) WHITE = (byte) 1
(byte()) abs_u8((byte) abs_u8::u)
(byte~) abs_u8::$0 reg byte a 20002.0
(byte~) abs_u8::$0 reg byte x 20002.0
(label) abs_u8::@1
(label) abs_u8::@return
(byte) abs_u8::return
(byte) abs_u8::return#0 reg byte a 2002.0
(byte) abs_u8::return#1 reg byte a 2002.0
(byte) abs_u8::return#2 reg byte y 20002.0
(byte) abs_u8::return#4 reg byte y 5501.0
(byte) abs_u8::return#2 reg byte a 20002.0
(byte) abs_u8::return#4 reg byte a 5501.0
(byte) abs_u8::u
(byte) abs_u8::u#0 reg byte y 2002.0
(byte) abs_u8::u#1 reg byte y 2002.0
(byte) abs_u8::u#2 reg byte y 10668.333333333332
(volatile byte) canvas_show_flag loadstore zp[1]:34 15.150684931506847
(volatile byte) canvas_show_memory loadstore zp[1]:33 2.452380952380952
(byte) abs_u8::u#0 reg byte a 2002.0
(byte) abs_u8::u#1 reg byte a 2002.0
(byte) abs_u8::u#2 reg byte a 10668.333333333332
(volatile byte) canvas_show_flag loadstore zp[1]:27 15.577464788732396
(volatile byte) canvas_show_memory loadstore zp[1]:26 2.452380952380952
(dword()) clock()
(label) clock::@return
(dword) clock::return
(dword) clock::return#0 return zp[4]:13 367.33333333333337
(dword) clock::return#2 return zp[4]:13 202.0
(dword) clock::return#0 return zp[4]:11 367.33333333333337
(dword) clock::return#2 return zp[4]:11 202.0
(void()) clock_start()
(label) clock_start::@return
(byte*) conio_cursor_color loadstore zp[2]:30 2.027272819090909E8
(byte*) conio_cursor_text loadstore zp[2]:28 2.0090091E8
(byte) conio_cursor_x loadstore zp[1]:26 2.5263168515789475E7
(byte) conio_cursor_y loadstore zp[1]:27 2.824561492105263E8
(byte) conio_textcolor loadstore zp[1]:32 6.312500065625E7
(byte*) conio_cursor_color loadstore zp[2]:23 2.027272819090909E8
(byte*) conio_cursor_text loadstore zp[2]:21 2.0090091E8
(byte) conio_cursor_x loadstore zp[1]:19 2.5263168515789475E7
(byte) conio_cursor_y loadstore zp[1]:20 2.824561492105263E8
(byte) conio_textcolor loadstore zp[1]:25 6.312500065625E7
(void()) cputc((byte) cputc::c)
(label) cputc::@1
(label) cputc::@2
@ -173,11 +173,11 @@
(byte) cputc::c#2 reg byte a 20002.0
(byte) cputc::c#3 reg byte a 1.100050025E8
(void()) cputln()
(byte*~) cputln::$1 zp[2]:28 2.000000002E9
(byte*~) cputln::$2 zp[2]:30 2.000000002E9
(byte*~) cputln::$1 zp[2]:21 2.000000002E9
(byte*~) cputln::$2 zp[2]:23 2.000000002E9
(label) cputln::@return
(word) cputln::ln_offset
(word) cputln::ln_offset#0 ln_offset zp[2]:47 1.000000001E9
(word) cputln::ln_offset#0 ln_offset zp[2]:40 1.000000001E9
(void()) cputs((to_nomodify byte*) cputs::s)
(label) cputs::@1
(label) cputs::@2
@ -185,12 +185,12 @@
(byte) cputs::c
(byte) cputs::c#1 reg byte a 1.0000001E7
(to_nomodify byte*) cputs::s
(to_nomodify byte*) cputs::s#0 s zp[2]:11 5000000.5
(to_nomodify byte*) cputs::s#4 s zp[2]:11 1.5050002E7
(to_nomodify byte*) cputs::s#5 s zp[2]:11 100001.0
(to_nomodify byte*) cputs::s#0 s zp[2]:46 5000000.5
(to_nomodify byte*) cputs::s#4 s zp[2]:46 1.5050002E7
(to_nomodify byte*) cputs::s#5 s zp[2]:46 100001.0
(void()) cscroll()
(byte*~) cscroll::$7 zp[2]:28 2.0000000002E10
(byte*~) cscroll::$8 zp[2]:30 2.0000000002E10
(byte*~) cscroll::$7 zp[2]:21 2.0000000002E10
(byte*~) cscroll::$8 zp[2]:23 2.0000000002E10
(label) cscroll::@1
(label) cscroll::@2
(label) cscroll::@3
@ -205,18 +205,18 @@
(label) eorfill::@5
(label) eorfill::@return
(byte*) eorfill::canvas
(byte*) eorfill::canvas#0 canvas zp[2]:30 551.0
(byte*) eorfill::canvas#0 canvas zp[2]:23 551.0
(byte) eorfill::eor
(byte) eorfill::eor#0 reg byte a 200002.0
(byte) eorfill::eor#1 reg byte a 1000001.0
(byte) eorfill::eor#2 reg byte a 1050001.5
(byte*) eorfill::fill_column
(byte*) eorfill::fill_column#1 fill_column zp[2]:30 100001.0
(byte*) eorfill::fill_column#5 fill_column zp[2]:30 133444.88888888888
(byte*) eorfill::fill_column#1 fill_column zp[2]:23 100001.0
(byte*) eorfill::fill_column#5 fill_column zp[2]:23 133444.88888888888
(byte*) eorfill::line_buffer
(byte*) eorfill::line_column
(byte*) eorfill::line_column#1 line_column zp[2]:28 66667.33333333333
(byte*) eorfill::line_column#2 line_column zp[2]:28 162500.5
(byte*) eorfill::line_column#1 line_column zp[2]:21 66667.33333333333
(byte*) eorfill::line_column#2 line_column zp[2]:21 162500.5
(byte) eorfill::x
(byte) eorfill::x#1 reg byte x 200002.0
(byte) eorfill::x#2 reg byte x 30000.300000000003
@ -259,7 +259,6 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) line::@13
(label) line::@14
(label) line::@15
(label) line::@16
(label) line::@2
(label) line::@3
(label) line::@4
@ -271,63 +270,95 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) line::@return
(byte*) line::canvas
(byte) line::dx
(byte) line::dx#0 dx zp[1]:43 6733.466666666667
(byte) line::dx#0 dx zp[1]:36 5941.294117647059
(byte) line::dy
(byte) line::dy#0 dy zp[1]:44 7390.390243902439
(byte) line::dy#0 dy zp[1]:37 6446.936170212766
(byte) line::e
(byte) line::e#0 e zp[1]:23 500.5
(byte) line::e#1 e zp[1]:23 133334.66666666666
(byte) line::e#2 e zp[1]:23 50000.5
(byte) line::e#3 e zp[1]:23 100501.5
(byte) line::e#6 e zp[1]:23 150001.5
(byte) line::e#0 reg byte x 333.6666666666667
(byte) line::e#1 reg byte x 133334.66666666666
(byte) line::e#2 reg byte x 33333.666666666664
(byte) line::e#3 reg byte x 100501.5
(byte) line::e#5 reg byte x 150001.5
(byte) line::e1
(byte) line::e1#0 e1 zp[1]:25 2002.0
(byte) line::e1#1 e1 zp[1]:25 133334.66666666666
(byte) line::e1#2 e1 zp[1]:25 200002.0
(byte) line::e1#3 e1 zp[1]:25 40200.600000000006
(byte) line::e1#6 e1 zp[1]:25 150001.5
(byte) line::e1#0 reg byte x 2002.0
(byte) line::e1#1 reg byte x 133334.66666666666
(byte) line::e1#2 reg byte x 200002.0
(byte) line::e1#3 reg byte x 28714.714285714286
(byte) line::e1#7 reg byte x 150001.5
(label) line::plot1
(byte~) line::plot1_$0 reg byte a 2002.0
(byte~) line::plot1_$1 zp[1]:42 2002.0
(byte~) line::plot1_$2 reg byte a 2002.0
(byte*) line::plot1_column
(byte*) line::plot1_column#0 plot1_column zp[2]:40 1501.5
(byte) line::plot1_x
(byte) line::plot1_y
(label) line::plot2
(byte~) line::plot2_$0 reg byte a 200002.0
(byte~) line::plot2_$1 zp[1]:45 200002.0
(byte~) line::plot2_$2 reg byte a 200002.0
(byte*) line::plot2_column
(byte*) line::plot2_column#0 plot2_column zp[2]:43 150001.5
(byte) line::plot2_x
(byte) line::plot2_x#0 plot2_x zp[1]:17 57143.42857142857
(byte) line::plot2_y
(label) line::plot3
(byte~) line::plot3_$0 reg byte a 200002.0
(byte~) line::plot3_$1 zp[1]:48 200002.0
(byte~) line::plot3_$2 reg byte a 200002.0
(byte*) line::plot3_column
(byte*) line::plot3_column#0 plot3_column zp[2]:46 150001.5
(byte) line::plot3_x
(byte) line::plot3_y
(label) line::plot4
(byte~) line::plot4_$0 reg byte a 2002.0
(byte~) line::plot4_$1 reg byte a 2002.0
(byte~) line::plot4_$2 reg byte a 2002.0
(byte*) line::plot4_column
(byte*) line::plot4_column#0 plot4_column zp[2]:49 1501.5
(byte) line::plot4_x
(byte) line::plot4_y
(byte) line::sx
(byte) line::sx#0 sx zp[1]:45 5459.567567567567
(byte) line::sx#0 sx zp[1]:38 4697.767441860465
(byte) line::sy
(byte) line::sy#0 sy zp[1]:46 6091.0
(byte) line::sy#0 sy zp[1]:39 5153.923076923076
(byte) line::x
(byte) line::x#0 x zp[1]:24 196.5925925925926
(byte) line::x#1 x zp[1]:24 60000.600000000006
(byte) line::x#10 x zp[1]:24 75251.0
(byte) line::x#12 x zp[1]:24 43000.57142857143
(byte) line::x#16 x zp[1]:24 150001.5
(byte) line::x#5 x zp[1]:24 75251.0
(byte) line::x#0 x zp[1]:17 217.55172413793105
(byte) line::x#10 x zp[1]:17 75251.0
(byte) line::x#12 x zp[1]:17 66834.16666666666
(byte) line::x#13 x zp[1]:17 30200.5
(byte) line::x#16 x zp[1]:17 150001.5
(byte) line::x1
(byte) line::x1#0 x1 zp[1]:24 50.5
(byte) line::x1#1 x1 zp[1]:24 50.5
(byte) line::x1#2 x1 zp[1]:24 50.5
(byte) line::x1#0 x1 zp[1]:17 50.5
(byte) line::x1#1 x1 zp[1]:17 50.5
(byte) line::x1#2 x1 zp[1]:17 50.5
(byte) line::x2
(byte) line::x2#0 x2 zp[1]:21 101.0
(byte) line::x2#1 x2 zp[1]:21 101.0
(byte) line::x2#10 x2 zp[1]:21 3009.0
(byte) line::x2#2 x2 zp[1]:21 101.0
(byte) line::x2#0 x2 zp[1]:15 101.0
(byte) line::x2#1 x2 zp[1]:15 101.0
(byte) line::x2#11 x2 zp[1]:15 2841.8333333333335
(byte) line::x2#2 x2 zp[1]:15 101.0
(byte) line::y
(byte) line::y#0 reg byte x 239.27777777777777
(byte) line::y#1 reg byte x 1001.0
(byte) line::y#10 reg byte x 57286.42857142857
(byte) line::y#11 reg byte x 100334.66666666667
(byte) line::y#13 reg byte x 715.0
(byte) line::y#15 reg byte x 40000.4
(byte) line::y#3 reg byte x 100001.0
(byte) line::y#6 reg byte x 201003.0
(byte) line::y#0 y zp[1]:18 239.27777777777777
(byte) line::y#1 y zp[1]:18 1001.0
(byte) line::y#10 y zp[1]:18 55667.33333333333
(byte) line::y#11 y zp[1]:18 50334.16666666667
(byte) line::y#13 y zp[1]:18 667.3333333333333
(byte) line::y#15 y zp[1]:18 41667.08333333333
(byte) line::y#3 y zp[1]:18 100001.0
(byte) line::y#6 y zp[1]:18 201003.0
(byte) line::y1
(byte) line::y1#0 reg byte x 67.33333333333333
(byte) line::y1#1 reg byte x 67.33333333333333
(byte) line::y1#2 reg byte x 67.33333333333333
(byte) line::y1#0 y1 zp[1]:18 67.33333333333333
(byte) line::y1#1 y1 zp[1]:18 67.33333333333333
(byte) line::y1#2 y1 zp[1]:18 67.33333333333333
(byte) line::y2
(byte) line::y2#0 y2 zp[1]:22 202.0
(byte) line::y2#1 y2 zp[1]:22 202.0
(byte) line::y2#10 y2 zp[1]:22 226.68421052631578
(byte) line::y2#13 y2 zp[1]:22 6000.176470588235
(byte) line::y2#2 y2 zp[1]:22 202.0
(byte) line::y2#3 y2 zp[1]:22 2002.0
(byte) line::y2#0 y2 zp[1]:16 202.0
(byte) line::y2#1 y2 zp[1]:16 202.0
(byte) line::y2#10 y2 zp[1]:16 226.68421052631578
(byte) line::y2#13 y2 zp[1]:16 4857.285714285714
(byte) line::y2#2 y2 zp[1]:16 202.0
(byte) line::y2#3 y2 zp[1]:16 2002.0
(void()) main()
(dword~) main::$18 zp[4]:13 202.0
(dword~) main::$18 zp[4]:11 202.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -359,14 +390,14 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) main::c#2 reg byte x 776.0
(byte) main::c#4 reg byte x 202.0
(byte*) main::canvas
(word) main::canvas#1 canvas zp[2]:9 6.733333333333333
(byte*) main::canvas#10 canvas zp[2]:9 8.18918918918919
(word) main::canvas#1 canvas zp[2]:9 5.611111111111111
(byte*) main::canvas#10 canvas zp[2]:9 8.911764705882353
(byte*) main::canvas#24 canvas zp[2]:9 202.0
(byte*) main::cols
(byte*) main::cols#1 cols zp[2]:2 67.33333333333333
(byte*) main::cols#5 cols zp[2]:2 133.66666666666669
(dword) main::cyclecount
(dword) main::cyclecount#0 cyclecount zp[4]:13 25.25
(dword) main::cyclecount#0 cyclecount zp[4]:11 25.25
(byte) main::p0_idx
(byte) main::p0_idx#1 p0_idx zp[1]:6 11.222222222222223
(byte) main::p0_idx#11 p0_idx zp[1]:6 15.538461538461538
@ -395,40 +426,40 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) main::x#1 reg byte y 2002.0
(byte) main::x#2 reg byte y 1001.0
(byte) main::x0
(byte) main::x0#0 x0 zp[1]:35 16.833333333333332
(byte) main::x0#0 x0 zp[1]:28 16.833333333333332
(byte) main::x1
(byte) main::x1#0 x1 zp[1]:21 33.666666666666664
(byte) main::x1#0 x1 zp[1]:15 33.666666666666664
(byte) main::x2
(byte) main::x2#0 x2 zp[1]:21 43.285714285714285
(byte) main::x2#0 x2 zp[1]:15 43.285714285714285
(byte) main::y
(byte) main::y#1 y zp[1]:26 202.0
(byte) main::y#2 y zp[1]:26 36.72727272727273
(byte) main::y#1 y zp[1]:19 202.0
(byte) main::y#2 y zp[1]:19 36.72727272727273
(byte) main::y0
(byte) main::y0#0 y0 zp[1]:36 16.833333333333332
(byte) main::y0#0 y0 zp[1]:29 16.833333333333332
(byte) main::y1
(byte) main::y1#0 y1 zp[1]:37 33.666666666666664
(byte) main::y1#0 y1 zp[1]:30 33.666666666666664
(byte) main::y2
(byte) main::y2#0 y2 zp[1]:38 43.285714285714285
(byte) main::y2#0 y2 zp[1]:31 43.285714285714285
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
(label) memcpy::@1
(label) memcpy::@2
(label) memcpy::@return
(void*) memcpy::destination
(void*) memcpy::destination#2 destination zp[2]:19
(void*) memcpy::destination#2 destination zp[2]:49
(byte*) memcpy::dst
(byte*) memcpy::dst#1 dst zp[2]:19 1.00000000000001E14
(byte*) memcpy::dst#2 dst zp[2]:19 1.0003333333333467E14
(byte*) memcpy::dst#4 dst zp[2]:19 2.00000000002E11
(byte*) memcpy::dst#1 dst zp[2]:49 1.00000000000001E14
(byte*) memcpy::dst#2 dst zp[2]:49 1.0003333333333467E14
(byte*) memcpy::dst#4 dst zp[2]:49 2.00000000002E11
(word) memcpy::num
(void*) memcpy::return
(void*) memcpy::source
(void*) memcpy::source#2 source zp[2]:17
(void*) memcpy::source#2 source zp[2]:40
(byte*) memcpy::src
(byte*) memcpy::src#1 src zp[2]:17 2.00000000000002E14
(byte*) memcpy::src#2 src zp[2]:17 1.0002500000000125E14
(byte*) memcpy::src#4 src zp[2]:17 1.00000000001E11
(byte*) memcpy::src#1 src zp[2]:40 2.00000000000002E14
(byte*) memcpy::src#2 src zp[2]:40 1.0002500000000125E14
(byte*) memcpy::src#4 src zp[2]:40 1.00000000001E11
(byte*) memcpy::src_end
(byte*) memcpy::src_end#0 src_end zp[2]:47 1.251250000000025E13
(byte*) memcpy::src_end#0 src_end zp[2]:43 1.251250000000025E13
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
@ -438,38 +469,18 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) memset::c#1 reg byte x 2.0000000002E10
(byte) memset::c#8 reg byte x 1.25125000000025E12
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:19 2.0000000000002E13
(byte*) memset::dst#2 dst zp[2]:19 1.3366666666668332E13
(byte*) memset::dst#4 dst zp[2]:19 2.00000000002E11
(byte*) memset::dst#1 dst zp[2]:49 2.0000000000002E13
(byte*) memset::dst#2 dst zp[2]:49 1.3366666666668332E13
(byte*) memset::dst#4 dst zp[2]:49 2.00000000002E11
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:17 1.6833333333336665E12
(byte*) memset::end#0 end zp[2]:40 1.6833333333336665E12
(word) memset::num
(word) memset::num#6 num zp[2]:17 1.00000000001E11
(word) memset::num#6 num zp[2]:40 1.00000000001E11
(void*) memset::return
(void*) memset::str
(void*) memset::str#7 str zp[2]:19
(void()) plot((byte*) plot::canvas , (byte) plot::x , (byte) plot::y)
(byte~) plot::$0 reg byte a 2000002.0
(byte~) plot::$2 zp[1]:49 2000002.0
(byte~) plot::$3 reg byte a 2000002.0
(label) plot::@return
(byte*) plot::canvas
(byte*) plot::column
(byte*) plot::column#0 column zp[2]:47 1500001.5
(byte) plot::x
(byte) plot::x#0 x zp[1]:24 1001.0
(byte) plot::x#1 x zp[1]:24 100001.0
(byte) plot::x#2 x zp[1]:24 100001.0
(byte) plot::x#3 x zp[1]:24 1001.0
(byte) plot::x#4 x zp[1]:24 550501.5
(byte) plot::y
(byte) plot::y#0 reg byte x 2002.0
(byte) plot::y#1 reg byte x 200002.0
(byte) plot::y#2 reg byte x 200002.0
(byte) plot::y#3 reg byte x 2002.0
(byte) plot::y#4 reg byte x 440401.2
(void*) memset::str#7 str zp[2]:49
(const byte*) plot_bit[(number) 8] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 }
(const word*) plot_column[(number) $10] = { (word) 0, (word)(number) 1*(number) $80, (word)(number) 2*(number) $80, (word)(number) 3*(number) $80, (word)(number) 4*(number) $80, (word)(number) 5*(number) $80, (word)(number) 6*(number) $80, (word)(number) 7*(number) $80, (word)(number) 8*(number) $80, (word)(number) 9*(number) $80, (word)(number) $a*(number) $80, (word)(number) $b*(number) $80, (word)(number) $c*(number) $80, (word)(number) $d*(number) $80, (word)(number) $e*(number) $80, (word)(number) $f*(number) $80 }
(const byte**) plot_column[(number) $10] = { (const nomodify byte*) LINE_BUFFER, (const nomodify byte*) LINE_BUFFER+(byte)(number) 1*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) 2*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) 3*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) 4*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) 5*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) 6*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) 7*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) 8*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) 9*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) $a*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) $b*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) $c*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) $d*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) $e*(number) $80, (const nomodify byte*) LINE_BUFFER+(word)(number) $f*(number) $80 }
(struct printf_buffer_number) printf_buffer loadstore mem[12] = {}
(const byte*) printf_buffer_number::digits[(number) $b] = { fill( $b, 0) }
(byte) printf_buffer_number::sign
@ -482,7 +493,7 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) printf_format_string::justify_left
(byte) printf_format_string::min_length
(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix)
(word~) printf_number_buffer::$19 zp[2]:19 10001.0
(word~) printf_number_buffer::$19 zp[2]:49 10001.0
(label) printf_number_buffer::@1
(label) printf_number_buffer::@10
(label) printf_number_buffer::@11
@ -508,42 +519,42 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(struct printf_buffer_number) printf_number_buffer::buffer
(byte*) printf_number_buffer::buffer_digits
(byte) printf_number_buffer::buffer_sign
(byte) printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:37 2002.0
(byte) printf_number_buffer::buffer_sign#1 buffer_sign zp[1]:37 2002.0
(byte) printf_number_buffer::buffer_sign#10 buffer_sign zp[1]:37 1600.25
(byte) printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:31 2002.0
(byte) printf_number_buffer::buffer_sign#1 buffer_sign zp[1]:31 2002.0
(byte) printf_number_buffer::buffer_sign#10 buffer_sign zp[1]:31 1600.25
(struct printf_format_number) printf_number_buffer::format
(byte) printf_number_buffer::format_justify_left
(byte) printf_number_buffer::format_justify_left#10 format_justify_left zp[1]:35 645.2258064516129
(byte) printf_number_buffer::format_justify_left#10 format_justify_left zp[1]:29 645.2258064516129
(byte) printf_number_buffer::format_min_length
(byte) printf_number_buffer::format_min_length#2 reg byte x 1000.1
(byte) printf_number_buffer::format_radix
(byte) printf_number_buffer::format_sign_always
(byte) printf_number_buffer::format_upper_case
(byte) printf_number_buffer::format_upper_case#10 format_upper_case zp[1]:21 384.65384615384613
(byte) printf_number_buffer::format_upper_case#10 format_upper_case zp[1]:15 384.65384615384613
(byte) printf_number_buffer::format_zero_padding
(byte) printf_number_buffer::format_zero_padding#10 format_zero_padding zp[1]:36 937.59375
(byte) printf_number_buffer::format_zero_padding#10 format_zero_padding zp[1]:30 937.59375
(signed byte) printf_number_buffer::len
(signed byte) printf_number_buffer::len#0 reg byte y 15001.5
(signed byte) printf_number_buffer::len#1 reg byte y 20002.0
(signed byte) printf_number_buffer::len#2 reg byte y 30003.0
(signed byte) printf_number_buffer::padding
(signed byte) printf_number_buffer::padding#1 padding zp[1]:22 10001.0
(signed byte) printf_number_buffer::padding#10 padding zp[1]:22 1904.952380952381
(signed byte) printf_number_buffer::padding#1 padding zp[1]:16 10001.0
(signed byte) printf_number_buffer::padding#10 padding zp[1]:16 1904.952380952381
(void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length)
(label) printf_padding::@1
(label) printf_padding::@2
(label) printf_padding::@3
(label) printf_padding::@return
(byte) printf_padding::i
(byte) printf_padding::i#1 i zp[1]:25 2.0000002E7
(byte) printf_padding::i#2 i zp[1]:25 7500000.75
(byte) printf_padding::i#1 i zp[1]:28 2.0000002E7
(byte) printf_padding::i#2 i zp[1]:28 7500000.75
(byte) printf_padding::length
(byte) printf_padding::length#0 length zp[1]:23 20002.0
(byte) printf_padding::length#1 length zp[1]:23 20002.0
(byte) printf_padding::length#2 length zp[1]:23 20002.0
(byte) printf_padding::length#4 length zp[1]:23 1671667.3333333333
(byte) printf_padding::length#0 length zp[1]:17 20002.0
(byte) printf_padding::length#1 length zp[1]:17 20002.0
(byte) printf_padding::length#2 length zp[1]:17 20002.0
(byte) printf_padding::length#4 length zp[1]:17 1671667.3333333333
(byte) printf_padding::pad
(byte) printf_padding::pad#5 pad zp[1]:24 1666666.8333333333
(byte) printf_padding::pad#5 pad zp[1]:18 1666666.8333333333
(void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix)
(label) printf_uchar::@1
(label) printf_uchar::@2
@ -577,7 +588,7 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) printf_ulong::format_zero_padding
(const byte) printf_ulong::format_zero_padding#0 format_zero_padding = (byte) 0
(dword) printf_ulong::uvalue
(dword) printf_ulong::uvalue#0 uvalue zp[4]:13 367.33333333333337
(dword) printf_ulong::uvalue#0 uvalue zp[4]:11 367.33333333333337
(void()) setup_irq()
(label) setup_irq::@return
(byte()) sgn_u8((byte) sgn_u8::u)
@ -597,13 +608,13 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) strlen::@2
(label) strlen::@return
(word) strlen::len
(word) strlen::len#1 len zp[2]:19 1.0000001E7
(word) strlen::len#2 len zp[2]:19 5002500.75
(word) strlen::len#1 len zp[2]:49 1.0000001E7
(word) strlen::len#2 len zp[2]:49 5002500.75
(word) strlen::return
(word) strlen::return#2 return zp[2]:19 20002.0
(word) strlen::return#2 return zp[2]:49 20002.0
(byte*) strlen::str
(byte*) strlen::str#0 str zp[2]:17 2.0000002E7
(byte*) strlen::str#2 str zp[2]:17 1.0000001E7
(byte*) strlen::str#0 str zp[2]:40 2.0000002E7
(byte*) strlen::str#2 str zp[2]:40 1.0000001E7
(byte*()) strupr((byte*) strupr::str)
(byte~) strupr::$0 reg byte a 2.0000002E7
(label) strupr::@1
@ -612,8 +623,8 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) strupr::@return
(byte*) strupr::return
(byte*) strupr::src
(byte*) strupr::src#1 src zp[2]:11 2.0000002E7
(byte*) strupr::src#2 src zp[2]:11 7142857.857142856
(byte*) strupr::src#1 src zp[2]:46 2.0000002E7
(byte*) strupr::src#2 src zp[2]:46 7142857.857142856
(byte*) strupr::str
(const byte*) strupr::str#0 str = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
(byte()) textcolor((byte) textcolor::color)
@ -646,22 +657,22 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) uctoa::@7
(label) uctoa::@return
(byte*) uctoa::buffer
(byte*) uctoa::buffer#11 buffer zp[2]:19 335000.50000000006
(byte*) uctoa::buffer#14 buffer zp[2]:19 1500001.5
(byte*) uctoa::buffer#3 buffer zp[2]:19 20002.0
(byte*) uctoa::buffer#4 buffer zp[2]:19 2000002.0
(byte*) uctoa::buffer#11 buffer zp[2]:49 335000.50000000006
(byte*) uctoa::buffer#14 buffer zp[2]:49 1500001.5
(byte*) uctoa::buffer#3 buffer zp[2]:49 20002.0
(byte*) uctoa::buffer#4 buffer zp[2]:49 2000002.0
(byte) uctoa::digit
(byte) uctoa::digit#1 digit zp[1]:36 2000002.0
(byte) uctoa::digit#2 digit zp[1]:36 307692.6153846154
(byte) uctoa::digit#1 digit zp[1]:30 2000002.0
(byte) uctoa::digit#2 digit zp[1]:30 307692.6153846154
(byte) uctoa::digit_value
(byte) uctoa::digit_value#0 digit_value zp[1]:43 600000.6000000001
(byte) uctoa::digit_value#0 digit_value zp[1]:36 600000.6000000001
(byte*) uctoa::digit_values
(byte) uctoa::max_digits
(const byte) uctoa::max_digits#2 max_digits = (byte) 2
(byte) uctoa::radix
(byte) uctoa::started
(byte) uctoa::started#2 started zp[1]:37 600000.6000000001
(byte) uctoa::started#4 started zp[1]:37 1000001.0
(byte) uctoa::started#2 started zp[1]:31 600000.6000000001
(byte) uctoa::started#4 started zp[1]:31 1000001.0
(byte) uctoa::value
(byte) uctoa::value#0 reg byte x 1000001.0
(byte) uctoa::value#1 reg byte x 5501.0
@ -673,14 +684,14 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) uctoa_append::@3
(label) uctoa_append::@return
(byte*) uctoa_append::buffer
(byte*) uctoa_append::buffer#0 buffer zp[2]:19 1375000.25
(byte*) uctoa_append::buffer#0 buffer zp[2]:49 1375000.25
(byte) uctoa_append::digit
(byte) uctoa_append::digit#1 reg byte y 1.0000000001E10
(byte) uctoa_append::digit#2 reg byte y 1.00050000015E10
(byte) uctoa_append::return
(byte) uctoa_append::return#0 reg byte x 2000002.0
(byte) uctoa_append::sub
(byte) uctoa_append::sub#0 sub zp[1]:43 3.3335000005E9
(byte) uctoa_append::sub#0 sub zp[1]:36 3.3335000005E9
(byte) uctoa_append::value
(byte) uctoa_append::value#0 reg byte x 3666667.333333333
(byte) uctoa_append::value#1 reg byte x 2.0000000002E10
@ -697,15 +708,15 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) ultoa::@7
(label) ultoa::@return
(byte*) ultoa::buffer
(byte*) ultoa::buffer#11 buffer zp[2]:17 287143.2857142857
(byte*) ultoa::buffer#14 buffer zp[2]:17 1500001.5
(byte*) ultoa::buffer#3 buffer zp[2]:17 20002.0
(byte*) ultoa::buffer#4 buffer zp[2]:17 2000002.0
(byte*) ultoa::buffer#11 buffer zp[2]:40 287143.2857142857
(byte*) ultoa::buffer#14 buffer zp[2]:40 1500001.5
(byte*) ultoa::buffer#3 buffer zp[2]:40 20002.0
(byte*) ultoa::buffer#4 buffer zp[2]:40 2000002.0
(byte) ultoa::digit
(byte) ultoa::digit#1 digit zp[1]:35 2000002.0
(byte) ultoa::digit#2 digit zp[1]:35 285714.5714285714
(byte) ultoa::digit#1 digit zp[1]:29 2000002.0
(byte) ultoa::digit#2 digit zp[1]:29 285714.5714285714
(dword) ultoa::digit_value
(dword) ultoa::digit_value#0 digit_value zp[4]:39 600000.6000000001
(dword) ultoa::digit_value#0 digit_value zp[4]:32 600000.6000000001
(dword*) ultoa::digit_values
(byte) ultoa::max_digits
(const byte) ultoa::max_digits#1 max_digits = (byte) $a
@ -714,28 +725,28 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) ultoa::started#2 reg byte x 500000.5
(byte) ultoa::started#4 reg byte x 1000001.0
(dword) ultoa::value
(dword) ultoa::value#0 value zp[4]:13 1000001.0
(dword) ultoa::value#1 value zp[4]:13 5501.0
(dword) ultoa::value#2 value zp[4]:13 572857.857142857
(dword) ultoa::value#6 value zp[4]:13 1500001.5
(dword) ultoa::value#0 value zp[4]:11 1000001.0
(dword) ultoa::value#1 value zp[4]:11 5501.0
(dword) ultoa::value#2 value zp[4]:11 572857.857142857
(dword) ultoa::value#6 value zp[4]:11 1500001.5
(dword()) ultoa_append((byte*) ultoa_append::buffer , (dword) ultoa_append::value , (dword) ultoa_append::sub)
(label) ultoa_append::@1
(label) ultoa_append::@2
(label) ultoa_append::@3
(label) ultoa_append::@return
(byte*) ultoa_append::buffer
(byte*) ultoa_append::buffer#0 buffer zp[2]:17 1375000.25
(byte*) ultoa_append::buffer#0 buffer zp[2]:40 1375000.25
(byte) ultoa_append::digit
(byte) ultoa_append::digit#1 reg byte x 1.0000000001E10
(byte) ultoa_append::digit#2 reg byte x 1.00050000015E10
(dword) ultoa_append::return
(dword) ultoa_append::return#0 return zp[4]:13 2000002.0
(dword) ultoa_append::return#0 return zp[4]:11 2000002.0
(dword) ultoa_append::sub
(dword) ultoa_append::sub#0 sub zp[4]:39 3.3335000005E9
(dword) ultoa_append::sub#0 sub zp[4]:32 3.3335000005E9
(dword) ultoa_append::value
(dword) ultoa_append::value#0 value zp[4]:13 3666667.333333333
(dword) ultoa_append::value#1 value zp[4]:13 2.0000000002E10
(dword) ultoa_append::value#2 value zp[4]:13 5.001833334166666E9
(dword) ultoa_append::value#0 value zp[4]:11 3666667.333333333
(dword) ultoa_append::value#1 value zp[4]:11 2.0000000002E10
(dword) ultoa_append::value#2 value zp[4]:11 5.001833334166666E9
zp[2]:2 [ main::cols#5 main::cols#1 ]
zp[2]:4 [ main::screen#5 main::screen#1 ]
@ -749,62 +760,70 @@ reg byte x [ printf_number_buffer::format_min_length#2 ]
reg byte y [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ]
reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 cputc::c#1 ]
reg byte x [ memset::c#8 memset::c#1 ]
zp[2]:11 [ strupr::src#2 strupr::src#1 cputs::s#4 cputs::s#5 cputs::s#0 ]
reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ]
zp[4]:13 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 printf_ulong::uvalue#0 ultoa_append::return#0 main::cyclecount#0 clock::return#2 main::$18 clock::return#0 ]
zp[4]:11 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 printf_ulong::uvalue#0 ultoa_append::return#0 main::cyclecount#0 clock::return#2 main::$18 clock::return#0 ]
reg byte x [ ultoa::started#2 ultoa::started#4 ]
zp[2]:17 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::str#2 strlen::str#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 memset::num#6 memset::end#0 ]
reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ]
reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ]
zp[2]:19 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memset::str#7 memset::dst#2 memset::dst#4 memset::dst#1 ]
reg byte x [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ]
reg byte y [ uctoa_append::digit#2 uctoa_append::digit#1 ]
reg byte x [ eorfill::x#2 eorfill::x#1 ]
reg byte y [ eorfill::y#2 eorfill::y#1 ]
reg byte a [ eorfill::eor#2 eorfill::eor#0 eorfill::eor#1 ]
zp[1]:21 [ line::x2#10 line::x2#0 line::x2#1 line::x2#2 main::x1#0 main::x2#0 printf_number_buffer::format_upper_case#10 ]
zp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 printf_number_buffer::padding#10 printf_number_buffer::padding#1 ]
zp[1]:23 [ line::e#3 line::e#0 line::e#6 line::e#2 line::e#1 printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ]
zp[1]:24 [ line::x#5 line::x#10 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#16 line::x#1 line::x#12 plot::x#4 plot::x#3 plot::x#0 plot::x#1 plot::x#2 printf_padding::pad#5 ]
reg byte x [ line::y#10 line::y#6 line::y#13 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#15 line::y#11 line::y#3 ]
zp[1]:25 [ line::e1#3 line::e1#0 line::e1#6 line::e1#2 line::e1#1 printf_padding::i#2 printf_padding::i#1 ]
reg byte x [ plot::y#4 plot::y#3 plot::y#0 plot::y#1 plot::y#2 ]
zp[1]:15 [ line::x2#11 line::x2#0 line::x2#1 line::x2#2 main::x1#0 main::x2#0 printf_number_buffer::format_upper_case#10 ]
zp[1]:16 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 printf_number_buffer::padding#10 printf_number_buffer::padding#1 ]
reg byte x [ line::e#3 line::e#5 line::e#0 line::e#1 line::e#2 ]
zp[1]:17 [ line::x#12 line::x#10 line::x#16 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::plot2_x#0 line::x#13 printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ]
zp[1]:18 [ line::y#10 line::y#6 line::y#15 line::y#13 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#11 line::y#3 printf_padding::pad#5 ]
reg byte x [ line::e1#3 line::e1#0 line::e1#7 line::e1#2 line::e1#1 ]
reg byte a [ sgn_u8::u#2 sgn_u8::u#0 sgn_u8::u#1 ]
reg byte a [ sgn_u8::return#4 ]
reg byte y [ abs_u8::return#4 abs_u8::return#2 abs_u8::u#2 abs_u8::u#0 abs_u8::u#1 ]
zp[1]:26 [ conio_cursor_x main::y#2 main::y#1 ]
zp[1]:27 [ conio_cursor_y ]
zp[2]:28 [ conio_cursor_text cputln::$1 cscroll::$7 eorfill::line_column#2 eorfill::line_column#1 ]
zp[2]:30 [ conio_cursor_color cputln::$2 cscroll::$8 eorfill::fill_column#5 eorfill::canvas#0 eorfill::fill_column#1 ]
zp[1]:32 [ conio_textcolor ]
zp[1]:33 [ canvas_show_memory ]
zp[1]:34 [ canvas_show_flag ]
zp[1]:35 [ main::x0#0 ultoa::digit#2 ultoa::digit#1 printf_number_buffer::format_justify_left#10 ]
zp[1]:36 [ main::y0#0 uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_zero_padding#10 ]
zp[1]:37 [ main::y1#0 uctoa::started#2 uctoa::started#4 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ]
zp[1]:38 [ main::y2#0 ]
reg byte a [ abs_u8::return#4 abs_u8::return#2 abs_u8::u#2 abs_u8::u#0 abs_u8::u#1 ]
zp[1]:19 [ conio_cursor_x main::y#2 main::y#1 ]
zp[1]:20 [ conio_cursor_y ]
zp[2]:21 [ conio_cursor_text cputln::$1 cscroll::$7 eorfill::line_column#2 eorfill::line_column#1 ]
zp[2]:23 [ conio_cursor_color cputln::$2 cscroll::$8 eorfill::fill_column#5 eorfill::canvas#0 eorfill::fill_column#1 ]
zp[1]:25 [ conio_textcolor ]
zp[1]:26 [ canvas_show_memory ]
zp[1]:27 [ canvas_show_flag ]
zp[1]:28 [ main::x0#0 printf_padding::i#2 printf_padding::i#1 ]
zp[1]:29 [ main::y0#0 ultoa::digit#2 ultoa::digit#1 printf_number_buffer::format_justify_left#10 ]
zp[1]:30 [ main::y1#0 uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_zero_padding#10 ]
zp[1]:31 [ main::y2#0 uctoa::started#2 uctoa::started#4 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ]
reg byte x [ printf_uchar::uvalue#0 ]
reg byte a [ cputs::c#1 ]
reg byte a [ toupper::return#3 ]
reg byte a [ strupr::$0 ]
reg byte a [ ultoa::$11 ]
reg byte a [ ultoa::$10 ]
zp[4]:39 [ ultoa::digit_value#0 ultoa_append::sub#0 ]
zp[4]:32 [ ultoa::digit_value#0 ultoa_append::sub#0 ]
reg byte x [ uctoa_append::return#0 ]
reg byte a [ abs_u8::return#0 ]
zp[1]:43 [ line::dx#0 uctoa::digit_value#0 uctoa_append::sub#0 ]
zp[1]:36 [ line::dx#0 uctoa::digit_value#0 uctoa_append::sub#0 ]
reg byte a [ abs_u8::return#1 ]
zp[1]:44 [ line::dy#0 ]
zp[1]:37 [ line::dy#0 ]
reg byte a [ sgn_u8::return#0 ]
zp[1]:45 [ line::sx#0 ]
zp[1]:38 [ line::sx#0 ]
reg byte a [ sgn_u8::return#1 ]
zp[1]:46 [ line::sy#0 ]
reg byte a [ plot::$0 ]
reg byte a [ plot::$3 ]
zp[2]:47 [ plot::column#0 cputln::ln_offset#0 memcpy::src_end#0 ]
zp[1]:49 [ plot::$2 ]
zp[1]:39 [ line::sy#0 ]
reg byte a [ line::plot1_$0 ]
reg byte a [ line::plot1_$2 ]
zp[2]:40 [ line::plot1_column#0 cputln::ln_offset#0 ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::str#2 strlen::str#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 memset::num#6 memset::end#0 ]
zp[1]:42 [ line::plot1_$1 ]
reg byte a [ line::plot2_$0 ]
reg byte a [ line::plot2_$2 ]
zp[2]:43 [ line::plot2_column#0 memcpy::src_end#0 ]
zp[1]:45 [ line::plot2_$1 ]
reg byte a [ line::plot3_$0 ]
reg byte a [ line::plot3_$2 ]
zp[2]:46 [ line::plot3_column#0 strupr::src#2 strupr::src#1 cputs::s#4 cputs::s#5 cputs::s#0 ]
zp[1]:48 [ line::plot3_$1 ]
reg byte a [ line::plot4_$0 ]
reg byte a [ line::plot4_$2 ]
zp[2]:49 [ line::plot4_column#0 uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memset::str#7 memset::dst#2 memset::dst#4 memset::dst#1 ]
reg byte a [ line::plot4_$1 ]
reg byte a [ sgn_u8::$0 ]
reg byte a [ abs_u8::$0 ]
reg byte x [ abs_u8::$0 ]
reg byte a [ kbhit::return#2 ]
reg byte a [ irq_bottom_2::$0 ]
reg byte a [ kbhit::return#0 ]