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

Introduced line buffer.

This commit is contained in:
jespergravgaard 2020-05-07 09:04:42 +02:00
parent 42aa2d9a8f
commit 6da9a8f9f8
6 changed files with 11295 additions and 12419 deletions

View File

@ -7,7 +7,7 @@ Used for rendering lines into. Organized with linear addressed columns of 8 bits
Used for filling & showing to the user. There are 2 screen buffers allowing for double buffering.
Memory organization is be adapted to the specific display. This means the same line routines can be used for charsets, bitmaps, sprites etc.
### Algorithm
### Algorithm
1. Move points
2. Clear line buffer

View File

@ -11,13 +11,15 @@
#include <stdio.h>
#include <conio.h>
#define DEBUG
#undef DEBUG
// The screen matrix
char* const SCREEN = 0x2c00;
// The two charsets used for double buffering
// The line buffer
char* const LINE_BUFFER = 0x4000;
// The two charsets used as screen buffers
char* const CANVAS1 = 0x3000;
char* const CANVAS2 = 0x3800;
// The screen matrix
char* const SCREEN = 0x2c00;
// The screen console
char* const CONSOLE = 0x0400;
@ -36,10 +38,12 @@ char align(0x100) SINTAB[0x140] = kickasm {{
}};
char* COSTAB = SINTAB+0x40;
void plot(char* canvas, char x, char y);
void main() {
// Clear the console
memset(CONSOLE, ' ', 40*25);
// Clear the screen & canvasses
// Clear the screen
memset(SCREEN, 0, 40*25);
memset(COLS, BLACK, 40*25);
// Setup 16x16 canvas for rendering
@ -71,38 +75,39 @@ void main() {
while(1) {
clock_start();
// Clear canvas
memset(canvas, 0, 0x0800);
// Plot on canvas
// Clear line buffer
memset(LINE_BUFFER, 0, 0x0800);
// Plot in line buffer
char x0 = COSTAB[p0_idx];
char y0 = SINTAB[p0_idx];
char x1 = COSTAB[p1_idx];
char y1 = SINTAB[p1_idx];
line(canvas, x0, y0, x1, y1);
line(LINE_BUFFER, x0, y0, x1, y1);
char x2 = COSTAB[p2_idx];
char y2 = SINTAB[p2_idx];
line(canvas, x1, y1, x2, y2);
line(canvas, x2, y2, x0, y0);
line(LINE_BUFFER, x1, y1, x2, y2);
line(LINE_BUFFER, x2, y2, x0, y0);
// Move idx
p0_idx++;
p1_idx++;
p2_idx++;
// Fill canvas
eorfill(canvas);
eorfill(LINE_BUFFER, canvas);
// Wait until the canvas on screen has been switched before starting work on the next frame
VICII->BORDER_COLOR = RED;
while(canvas_show_flag) {}
VICII->BORDER_COLOR = BLACK;
// Swap canvas to show on screen (using XOR)
canvas_show_memory ^= toD018(SCREEN,CANVAS1)^toD018(SCREEN,CANVAS2);
// swap canvas being rendered to (using XOR)
canvas ^= (CANVAS1^CANVAS2);
// Set flag used to signal when the canvas has been shown
canvas_show_flag = 1;
// Read and display cycles
clock_t cyclecount = clock()-CLOCKS_PER_INIT;
gotoxy(0,24);
//printf("frame: %02x cycles: %6lu", p0_idx, cyclecount);
printf("(%02x,%02x)-(%02x,%02x)", x0, y0, x1, y1);
// Wait until the canvas on screen has been switched before starting work on the next frame
canvas_show_flag = 1;
VICII->BORDER_COLOR = RED;
while(canvas_show_flag) {}
VICII->BORDER_COLOR = BLACK;
printf("frame: %02x cycles: %6lu", p0_idx, cyclecount);
//printf("(%02x,%02x)-(%02x,%02x)", x0, y0, x1, y1);
}
}
@ -166,28 +171,10 @@ void line(char* canvas, char x1, char y1, char x2, char y2) {
// If this line is pointing left then move it down one pixel to ensure the fill is stopped correctly
y++; y2++;
}
#ifdef DEBUG
gotoxy(0,0);
printf("dx:%02x dy:%02x sx:%02x sy:%02x",dx,dy,sx,sy);
char print_col = 0;
char print_row = 1;
#endif
if(dx > dy) {
// X is the driver - plot every X using bresenham
char e = dx/2;
do {
#ifdef DEBUG
if(print_col<40-8) {
gotoxy(print_col, print_row);
printf("%02x %02x %02x",x,y,e);
if(++print_row==24) {
print_row = 1;
print_col +=9;
}
}
#endif
plot(canvas, x, y);
x += sx;
e += dy;
@ -200,16 +187,6 @@ void line(char* canvas, char x1, char y1, char x2, char y2) {
} else {
// Y is the driver - only plot one plot per X
char e = dy/2;
#ifdef DEBUG
if(print_col<40-8) {
gotoxy(print_col, print_row);
printf("%02x %02x %02x",x,y,e);
if(++print_row==24) {
print_row = 1;
print_col +=9;
}
}
#endif
plot(canvas, x, y);
do {
y += sy;
@ -217,51 +194,37 @@ void line(char* canvas, char x1, char y1, char x2, char y2) {
if(dy<e) {
x += sx;
e -= dy;
#ifdef DEBUG
if(print_col<40-8) {
gotoxy(print_col, print_row);
printf("%02x %02x %02x",x,y,e);
if(++print_row==24) {
print_row = 1;
print_col +=9;
}
}
#endif
plot(canvas, x, y);
} else {
printf("*");
}
} while (y != y2);
#ifdef DEBUG
gotoxy(20,24);
printf("(%02x,%02x)", x, y);
#endif
}
}
// Column offsets
unsigned int plot_column[] = { 0, 1*128, 2*128, 3*128, 4*128, 5*128, 6*128, 7*128, 8*128, 9*128, 10*128, 11*128, 12*128, 13*128, 14*128, 15*128 };
unsigned int plot_column[16] = { 0, 1*128, 2*128, 3*128, 4*128, 5*128, 6*128, 7*128, 8*128, 9*128, 10*128, 11*128, 12*128, 13*128, 14*128, 15*128 };
// The bits used for plotting a pixel
char plot_bit[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
char plot_bit[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
// Plot a single point on the canvas
inline void plot(char* canvas, char x, char y) {
void plot(char* canvas, char x, char y) {
// Find the canvas column
char* column = canvas + plot_column[x/8];
// Plot the bit
column[y] |= plot_bit[x&7];
}
// EOR fill
void eorfill(char* canvas) {
char* column = canvas;
// EOR fill from the line buffer onto the canvas
void eorfill(char* line_buffer, char* canvas) {
char* line_column = line_buffer;
char* fill_column = canvas;
for(char x=0;x<16;x++) {
char eor = column[0];
char eor = line_column[0];
for(char y=1;y<16*8;y++) {
eor ^= column[y];
column[y] = eor;
eor ^= line_column[y];
fill_column[y] = eor;
}
column += 16*8;
line_column += 16*8;
fill_column += 16*8;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -13,6 +13,7 @@
(const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f
(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40
(const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1
(const nomodify dword) CLOCKS_PER_INIT = (dword) $12
(const nomodify byte*) COLS = (byte*) 55296
(const nomodify byte*) CONIO_CIA1_PORT_A = (byte*) 56320
(const nomodify byte*) CONIO_CIA1_PORT_B = (byte*) 56321
@ -24,6 +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
(byte) MOS6526_CIA::INTERRUPT
(byte) MOS6526_CIA::PORT_A
(byte) MOS6526_CIA::PORT_A_DDR
@ -124,7 +126,9 @@
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const dword*) RADIX_DECIMAL_VALUES_LONG[] = { (dword) $3b9aca00, (dword) $5f5e100, (dword) $989680, (dword) $f4240, (dword) $186a0, (dword) $2710, (dword) $3e8, (dword) $64, (dword) $a }
(const byte*) RADIX_HEXADECIMAL_VALUES_CHAR[] = { (byte) $10 }
(const nomodify byte) RED = (byte) 2
(const nomodify byte*) SCREEN = (byte*) 11264
(const byte*) SINTAB[(number) $140] = kickasm {{ .fill $200, 63 + 63*sin(i*2*PI/$100)
}}
@ -132,88 +136,102 @@
(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 x 20002.0
(byte~) abs_u8::$0 reg byte a 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 a 20002.0
(byte) abs_u8::return#4 reg byte a 5501.0
(byte) abs_u8::return#2 reg byte y 20002.0
(byte) abs_u8::return#4 reg byte y 5501.0
(byte) abs_u8::u
(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 553.0
(volatile byte) canvas_show_memory loadstore zp[1]:26 2.783783783783784
(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
(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
(void()) clock_start()
(label) clock_start::@return
(byte*) conio_cursor_color loadstore zp[2]:23 1.2185792404372131E12
(byte*) conio_cursor_text loadstore zp[2]:21 1.205405410810865E12
(byte) conio_cursor_x loadstore zp[1]:19 1.3714286285719427E11
(byte) conio_cursor_y loadstore zp[1]:20 1.6597938195876804E12
(byte) conio_textcolor loadstore zp[1]:25 3.7827715355844574E11
(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
(void()) cputc((byte) cputc::c)
(label) cputc::@1
(label) cputc::@2
(label) cputc::@3
(label) cputc::@return
(byte) cputc::c
(byte) cputc::c#0 reg byte a 2.00000000002E11
(byte) cputc::c#2 reg byte a 2.0000002E7
(byte) cputc::c#3 reg byte a 1.050005000002E12
(byte) cputc::c#0 reg byte a 2.0000002E7
(byte) cputc::c#1 reg byte a 2.0000002E7
(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]:21 2.0000000000002E13
(byte*~) cputln::$2 zp[2]:23 2.0000000000002E13
(byte*~) cputln::$1 zp[2]:28 2.000000002E9
(byte*~) cputln::$2 zp[2]:30 2.000000002E9
(label) cputln::@return
(word) cputln::ln_offset
(word) cputln::ln_offset#0 ln_offset zp[2]:43 1.0000000000001E13
(word) cputln::ln_offset#0 ln_offset zp[2]:47 1.000000001E9
(void()) cputs((to_nomodify byte*) cputs::s)
(label) cputs::@1
(label) cputs::@2
(label) cputs::@return
(byte) cputs::c
(byte) cputs::c#1 reg byte a 1.00000000001E11
(byte) cputs::c#1 reg byte a 1.0000001E7
(to_nomodify byte*) cputs::s
(to_nomodify byte*) cputs::s#0 s zp[2]:39 5.00000000005E10
(to_nomodify byte*) cputs::s#21 s zp[2]:39 1.50050000002E11
(to_nomodify byte*) cputs::s#22 s zp[2]:39 1.00000001E8
(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
(void()) cscroll()
(byte*~) cscroll::$7 zp[2]:21 2.00000000000002E14
(byte*~) cscroll::$8 zp[2]:23 2.00000000000002E14
(byte*~) cscroll::$7 zp[2]:28 2.0000000002E10
(byte*~) cscroll::$8 zp[2]:30 2.0000000002E10
(label) cscroll::@1
(label) cscroll::@2
(label) cscroll::@3
(label) cscroll::@4
(label) cscroll::@5
(label) cscroll::@return
(void()) eorfill((byte*) eorfill::line_buffer , (byte*) eorfill::canvas)
(label) eorfill::@1
(label) eorfill::@2
(label) eorfill::@3
(label) eorfill::@4
(label) eorfill::@5
(label) eorfill::@return
(byte*) eorfill::canvas
(byte*) eorfill::canvas#0 canvas zp[2]:30 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::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::x
(byte) eorfill::x#1 reg byte x 200002.0
(byte) eorfill::x#2 reg byte x 30000.300000000003
(byte) eorfill::y
(byte) eorfill::y#1 reg byte y 2000002.0
(byte) eorfill::y#2 reg byte y 1250001.25
(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y)
(word~) gotoxy::$10 zp[2]:23 2000002.0
(word~) gotoxy::$4 zp[2]:23 2000002.0
(byte*~) gotoxy::$6 zp[2]:21 2000002.0
(byte*~) gotoxy::$7 zp[2]:23 2000002.0
(word~) gotoxy::$8 zp[2]:23 1500001.5
(word~) gotoxy::$9 zp[2]:43 2000002.0
(label) gotoxy::@1
(label) gotoxy::@2
(label) gotoxy::@3
(label) gotoxy::@4
(label) gotoxy::@return
(word) gotoxy::offset
(word) gotoxy::offset#0 offset zp[2]:23 1000001.0
(const word) gotoxy::offset#0 offset = (word)(const byte) gotoxy::y#2*(byte) $28
(byte) gotoxy::x
(byte) gotoxy::x#10 reg byte x 366667.3333333334
(byte) gotoxy::x#5 reg byte x 100001.0
(byte) gotoxy::x#7 reg byte x 100001.0
(byte) gotoxy::x#9 reg byte x 428571.85714285716
(const byte) gotoxy::x#2 x = (byte) 0
(byte) gotoxy::y
(byte) gotoxy::y#10 reg byte a 333333.6666666667
(byte) gotoxy::y#5 reg byte a 200002.0
(byte) gotoxy::y#7 reg byte a 200002.0
(byte) gotoxy::y#8 reg byte a 733334.6666666667
(const byte) gotoxy::y#2 y = (byte) $18
interrupt(KERNEL_MIN)(void()) irq_bottom_1()
(label) irq_bottom_1::@1
(label) irq_bottom_1::@return
@ -242,159 +260,74 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) line::@14
(label) line::@15
(label) line::@16
(label) line::@17
(label) line::@18
(label) line::@19
(label) line::@2
(label) line::@20
(label) line::@21
(label) line::@22
(label) line::@23
(label) line::@24
(label) line::@25
(label) line::@26
(label) line::@27
(label) line::@28
(label) line::@29
(label) line::@3
(label) line::@30
(label) line::@31
(label) line::@32
(label) line::@33
(label) line::@34
(label) line::@35
(label) line::@36
(label) line::@37
(label) line::@38
(label) line::@39
(label) line::@4
(label) line::@40
(label) line::@41
(label) line::@42
(label) line::@43
(label) line::@44
(label) line::@45
(label) line::@46
(label) line::@47
(label) line::@48
(label) line::@49
(label) line::@5
(label) line::@50
(label) line::@51
(label) line::@52
(label) line::@53
(label) line::@54
(label) line::@55
(label) line::@6
(label) line::@7
(label) line::@8
(label) line::@9
(label) line::@return
(byte*) line::canvas
(byte*) line::canvas#0 canvas zp[2]:6 1578.9453125
(byte) line::dx
(byte) line::dx#0 dx zp[1]:33 2576.330508474576
(byte) line::dx#0 dx zp[1]:43 6733.466666666667
(byte) line::dy
(byte) line::dy#0 dy zp[1]:34 2666.728070175439
(byte) line::dy#0 dy zp[1]:44 7390.390243902439
(byte) line::e
(byte) line::e#0 e zp[1]:11 166.83333333333334
(byte) line::e#1 e zp[1]:11 80000.8
(byte) line::e#10 e zp[1]:11 12500.125
(byte) line::e#4 e zp[1]:11 100501.5
(byte) line::e#8 e zp[1]:11 150001.5
(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::e1
(byte) line::e1#0 e1 zp[1]:18 2002.0
(byte) line::e1#1 e1 zp[1]:18 133334.66666666666
(byte) line::e1#10 e1 zp[1]:18 12040.16
(byte) line::e1#14 e1 zp[1]:18 150001.5
(byte) line::e1#2 e1 zp[1]:18 200002.0
(label) line::plot1
(byte~) line::plot1_$0 reg byte a 2002.0
(byte~) line::plot1_$2 reg byte a 2002.0
(byte~) line::plot1_$3 reg byte a 2002.0
(byte*) line::plot1_canvas
(byte*) line::plot1_column
(byte*) line::plot1_column#0 plot1_column zp[2]:37 1501.5
(byte) line::plot1_x
(byte) line::plot1_y
(byte) line::plot1_y#0 plot1_y zp[1]:16 184.39473684210526
(label) line::plot2
(byte~) line::plot2_$0 reg byte a 200002.0
(byte~) line::plot2_$2 reg byte a 200002.0
(byte~) line::plot2_$3 reg byte a 200002.0
(byte*) line::plot2_canvas
(byte*) line::plot2_column
(byte*) line::plot2_column#0 plot2_column zp[2]:39 150001.5
(byte) line::plot2_x
(byte) line::plot2_x#0 plot2_x zp[1]:15 20000.2
(byte) line::plot2_y
(label) line::plot3
(byte~) line::plot3_$0 reg byte a 200002.0
(byte~) line::plot3_$2 reg byte a 200002.0
(byte~) line::plot3_$3 reg byte a 200002.0
(byte*) line::plot3_canvas
(byte*) line::plot3_column
(byte*) line::plot3_column#0 plot3_column zp[2]:41 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_$2 reg byte a 2002.0
(byte~) line::plot4_$3 reg byte a 2002.0
(byte*) line::plot4_canvas
(byte*) line::plot4_column
(byte*) line::plot4_column#0 plot4_column zp[2]:43 1501.5
(byte) line::plot4_x
(byte) line::plot4_y
(byte) line::print_col
(byte) line::print_col#10 print_col_1 zp[1]:14 35294.470588235294
(byte) line::print_col#14 print_col zp[1]:12 29166.95833333333
(byte) line::print_col#16 print_col_1 zp[1]:14 30769.53846153846
(byte) line::print_col#2 print_col zp[1]:12 200002.0
(byte) line::print_col#20 print_col zp[1]:12 150001.5
(byte) line::print_col#29 print_col zp[1]:12 66667.33333333333
(byte) line::print_col#3 print_col_1 zp[1]:14 200002.0
(byte) line::print_row
(byte) line::print_row#10 print_row zp[1]:13 22727.5
(byte) line::print_row#11 print_row_1 zp[1]:17 26666.933333333334
(byte) line::print_row#22 print_row_1 zp[1]:17 23077.153846153844
(byte) line::print_row#26 print_row zp[1]:13 150001.5
(byte) line::print_row#3 print_row zp[1]:13 150001.5
(byte) line::print_row#35 print_row zp[1]:13 50000.5
(byte) line::print_row#5 print_row_1 zp[1]:17 150001.5
(const byte*) line::s[(byte) 4] = (byte*) "dx:"
(const byte*) line::s1[(byte) 5] = (byte*) " dy:"
(const byte*) line::s2[(byte) 5] = (byte*) " sx:"
(const byte*) line::s3[(byte) 5] = (byte*) " sy:"
(const byte*) line::s4[(byte) 2] = (byte*) " "
(const byte*) line::s6[(byte) 2] = (byte*) "*"
(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::sx
(byte) line::sx#0 sx zp[1]:35 1845.5
(byte) line::sx#0 sx zp[1]:45 5459.567567567567
(byte) line::sy
(byte) line::sy#0 sy zp[1]:36 1905.698113207547
(byte) line::sy#0 sy zp[1]:46 6091.0
(byte) line::x
(byte) line::x#10 x zp[1]:15 20875.249999999996
(byte) line::x#12 x zp[1]:15 30200.5
(byte) line::x#18 x zp[1]:15 50167.33333333333
(byte) line::x#22 x zp[1]:15 50167.333333333336
(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::x1
(byte) line::x1#0 x1 zp[1]:15 116.52459016393443
(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::x2
(byte) line::x2#0 x2 zp[1]:30 1418.111111111111
(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::y
(byte) line::y#1 y zp[1]:16 1001.0
(byte) line::y#11 y zp[1]:16 15025.175
(byte) line::y#12 y zp[1]:16 22259.51851851852
(byte) line::y#15 y zp[1]:16 50334.16666666667
(byte) line::y#3 y zp[1]:16 100001.0
(byte) line::y#7 y zp[1]:16 201003.0
(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::y1
(byte) line::y1#0 y1 zp[1]:16 205.25
(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::y2
(byte) line::y2#0 y2 zp[1]:10 216.05263157894734
(byte) line::y2#1 y2 zp[1]:10 2002.0
(byte) line::y2#17 y2 zp[1]:10 1457.185714285714
(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
(void()) main()
(dword~) main::$18 zp[4]:13 202.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -414,7 +347,6 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) main::@24
(label) main::@25
(label) main::@26
(label) main::@27
(label) main::@3
(label) main::@4
(label) main::@5
@ -427,16 +359,25 @@ 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]:6 4.208333333333333
(byte*) main::canvas#10 canvas zp[2]:6 16.833333333333332
(byte*) main::canvas#25 canvas zp[2]:6 202.0
(word) main::canvas#1 canvas zp[2]:9 6.733333333333333
(byte*) main::canvas#10 canvas zp[2]:9 8.18918918918919
(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
(const byte) main::p0_idx = (byte) $88
(dword) main::cyclecount
(dword) main::cyclecount#0 cyclecount zp[4]:13 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
(byte) main::p1_idx
(const byte) main::p1_idx#0 p1_idx = (const byte) main::p0_idx+(byte) $f
(const byte*) main::s2[(byte) 4] = (byte*) ")-("
(byte) main::p1_idx#1 p1_idx zp[1]:7 7.769230769230769
(byte) main::p1_idx#2 p1_idx zp[1]:7 14.962962962962964
(byte) main::p2_idx
(byte) main::p2_idx#1 p2_idx zp[1]:8 8.08
(byte) main::p2_idx#2 p2_idx zp[1]:8 14.428571428571429
(const byte*) main::s[(byte) 8] = (byte*) "frame: "
(const byte*) main::s1[(byte) $a] = (byte*) " cycles: "
(byte*) main::screen
(byte*) main::screen#1 screen zp[2]:4 101.0
(byte*) main::screen#5 screen zp[2]:4 120.3
@ -454,58 +395,81 @@ 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]:28 15.947368421052632
(byte) main::x0#0 x0 zp[1]:35 16.833333333333332
(byte) main::x1
(byte) main::x1#0 x1 zp[1]:30 12.120000000000001
(byte) main::x1#0 x1 zp[1]:21 33.666666666666664
(byte) main::x2
(byte) main::x2#0 x2 zp[1]:21 43.285714285714285
(byte) main::y
(byte) main::y#1 y zp[1]:19 202.0
(byte) main::y#2 y zp[1]:19 36.72727272727273
(byte) main::y#1 y zp[1]:26 202.0
(byte) main::y#2 y zp[1]:26 36.72727272727273
(byte) main::y0
(byte) main::y0#0 y0 zp[1]:29 13.772727272727273
(byte) main::y0#0 y0 zp[1]:36 16.833333333333332
(byte) main::y1
(byte) main::y1#0 y1 zp[1]:31 10.821428571428571
(byte) main::y1#0 y1 zp[1]:37 33.666666666666664
(byte) main::y2
(byte) main::y2#0 y2 zp[1]:38 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]:43
(void*) memcpy::destination#2 destination zp[2]:19
(byte*) memcpy::dst
(byte*) memcpy::dst#1 dst zp[2]:43 1.0E19
(byte*) memcpy::dst#2 dst zp[2]:43 1.0000333333333334E19
(byte*) memcpy::dst#4 dst zp[2]:43 2.000000000000002E15
(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
(word) memcpy::num
(void*) memcpy::return
(void*) memcpy::source
(void*) memcpy::source#2 source zp[2]:41
(void*) memcpy::source#2 source zp[2]:17
(byte*) memcpy::src
(byte*) memcpy::src#1 src zp[2]:41 2.0E19
(byte*) memcpy::src#2 src zp[2]:41 1.000025E19
(byte*) memcpy::src#4 src zp[2]:41 1.000000000000001E15
(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_end
(byte*) memcpy::src_end#0 src_end zp[2]:37 1.250125E18
(byte*) memcpy::src_end#0 src_end zp[2]:47 1.251250000000025E13
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
(label) memset::@3
(label) memset::@return
(byte) memset::c
(byte) memset::c#1 reg byte x 2.00000000000002E14
(byte) memset::c#8 reg byte x 1.25125E16
(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]:43 2.0E17
(byte*) memset::dst#2 dst zp[2]:43 1.33666666666666656E17
(byte*) memset::dst#4 dst zp[2]:43 2.000000000000002E15
(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::end
(byte*) memset::end#0 end zp[2]:41 1.6833333333333332E16
(byte*) memset::end#0 end zp[2]:17 1.6833333333336665E12
(word) memset::num
(word) memset::num#6 num zp[2]:41 1.000000000000001E15
(word) memset::num#6 num zp[2]:17 1.00000000001E11
(void*) memset::return
(void*) memset::str
(void*) memset::str#5 str zp[2]:43 202.0
(void*) memset::str#7 str zp[2]:43 33.666666666666664
(const byte*) plot_bit[] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 }
(const word*) plot_column[] = { (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 }
(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
(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 }
(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
@ -518,11 +482,21 @@ 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]:41 1.0000001E7
(word~) printf_number_buffer::$19 zp[2]:19 10001.0
(label) printf_number_buffer::@1
(label) printf_number_buffer::@10
(label) printf_number_buffer::@11
(label) printf_number_buffer::@12
(label) printf_number_buffer::@13
(label) printf_number_buffer::@14
(label) printf_number_buffer::@15
(label) printf_number_buffer::@16
(label) printf_number_buffer::@17
(label) printf_number_buffer::@18
(label) printf_number_buffer::@19
(label) printf_number_buffer::@2
(label) printf_number_buffer::@20
(label) printf_number_buffer::@21
(label) printf_number_buffer::@3
(label) printf_number_buffer::@4
(label) printf_number_buffer::@5
@ -533,70 +507,77 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) printf_number_buffer::@return
(struct printf_buffer_number) printf_number_buffer::buffer
(byte*) printf_number_buffer::buffer_digits
(const byte*) printf_number_buffer::buffer_digits#0 buffer_digits = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
(byte) printf_number_buffer::buffer_sign
(byte) printf_number_buffer::buffer_sign#0 reg byte x 2066666.933333333
(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
(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_min_length
(const byte) printf_number_buffer::format_min_length#0 format_min_length = (byte) 2
(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_zero_padding
(byte) printf_number_buffer::format_zero_padding#10 format_zero_padding zp[1]:36 937.59375
(signed byte) printf_number_buffer::len
(signed byte) printf_number_buffer::len#0 reg byte a 1.50000015E7
(signed byte) printf_number_buffer::len#1 reg byte a 2.0000002E7
(signed byte) printf_number_buffer::len#2 reg byte a 3.0000003E7
(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]:8 1.0000001E7
(signed byte) printf_number_buffer::padding#10 padding zp[1]:8 4000000.4
(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
(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]:9 2.00000000002E11
(byte) printf_padding::i#2 i zp[1]:9 7.500000000075E10
(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::length
(byte) printf_padding::length#1 length zp[1]:8 1.4287142857428572E10
(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::pad
(byte) printf_padding::pad#5 pad zp[1]:24 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
(label) printf_uchar::@return
(struct printf_format_number) printf_uchar::format
(byte) printf_uchar::format_justify_left
(const byte) printf_uchar::format_justify_left#0 format_justify_left = (byte) 0
(byte) printf_uchar::format_min_length
(const byte) printf_uchar::format_min_length#0 format_min_length = (byte) 2
(byte) printf_uchar::format_radix
(byte) printf_uchar::format_sign_always
(byte) printf_uchar::format_upper_case
(const byte) printf_uchar::format_upper_case#0 format_upper_case = (byte) 0
(byte) printf_uchar::format_zero_padding
(const byte) printf_uchar::format_zero_padding#0 format_zero_padding = (byte) 1
(byte) printf_uchar::uvalue
(byte) printf_uchar::uvalue#0 reg byte x 202.0
(byte) printf_uchar::uvalue#1 reg byte x 202.0
(byte) printf_uchar::uvalue#10 reg byte x 2002.0
(byte) printf_uchar::uvalue#11 reg byte x 200002.0
(byte) printf_uchar::uvalue#12 reg byte x 200002.0
(byte) printf_uchar::uvalue#13 reg byte x 200002.0
(byte) printf_uchar::uvalue#14 reg byte x 2002.0
(byte) printf_uchar::uvalue#15 reg byte x 2002.0
(byte) printf_uchar::uvalue#16 reg byte x 200002.0
(byte) printf_uchar::uvalue#17 reg byte x 200002.0
(byte) printf_uchar::uvalue#18 reg byte x 200002.0
(byte) printf_uchar::uvalue#19 reg byte x 804710.0
(byte) printf_uchar::uvalue#2 reg byte x 202.0
(byte) printf_uchar::uvalue#3 reg byte x 202.0
(byte) printf_uchar::uvalue#4 reg byte x 2002.0
(byte) printf_uchar::uvalue#5 reg byte x 2002.0
(byte) printf_uchar::uvalue#6 reg byte x 2002.0
(byte) printf_uchar::uvalue#7 reg byte x 2002.0
(byte) printf_uchar::uvalue#8 reg byte x 2002.0
(byte) printf_uchar::uvalue#9 reg byte x 2002.0
(const byte*) s[(byte) 2] = (byte*) "("
(const byte*) s1[(byte) 2] = (byte*) ","
(const byte*) s4[(byte) 2] = (byte*) ")"
(byte) printf_uchar::uvalue#0 reg byte x 367.33333333333337
(void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix)
(label) printf_ulong::@1
(label) printf_ulong::@2
(label) printf_ulong::@return
(struct printf_format_number) printf_ulong::format
(byte) printf_ulong::format_justify_left
(const byte) printf_ulong::format_justify_left#0 format_justify_left = (byte) 0
(byte) printf_ulong::format_min_length
(const byte) printf_ulong::format_min_length#0 format_min_length = (byte) 6
(byte) printf_ulong::format_radix
(byte) printf_ulong::format_sign_always
(byte) printf_ulong::format_upper_case
(const byte) printf_ulong::format_upper_case#0 format_upper_case = (byte) 0
(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
(void()) setup_irq()
(label) setup_irq::@return
(byte()) sgn_u8((byte) sgn_u8::u)
@ -616,13 +597,25 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) strlen::@2
(label) strlen::@return
(word) strlen::len
(word) strlen::len#1 len zp[2]:41 1.00000000001E11
(word) strlen::len#2 len zp[2]:41 5.000250000075E10
(word) strlen::len#1 len zp[2]:19 1.0000001E7
(word) strlen::len#2 len zp[2]:19 5002500.75
(word) strlen::return
(word) strlen::return#2 return zp[2]:41 2.0000002E7
(word) strlen::return#2 return zp[2]:19 20002.0
(byte*) strlen::str
(byte*) strlen::str#0 str zp[2]:39 2.00000000002E11
(byte*) strlen::str#2 str zp[2]:39 1.00000000001E11
(byte*) strlen::str#0 str zp[2]:17 2.0000002E7
(byte*) strlen::str#2 str zp[2]:17 1.0000001E7
(byte*()) strupr((byte*) strupr::str)
(byte~) strupr::$0 reg byte a 2.0000002E7
(label) strupr::@1
(label) strupr::@2
(label) strupr::@3
(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::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)
(label) textcolor::@return
(byte) textcolor::color
@ -633,6 +626,16 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) toD0181_return
(const byte) toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) CANVAS2/(byte) 4&(byte) $f
(byte*) toD0181_screen
(byte()) toupper((byte) toupper::ch)
(label) toupper::@1
(label) toupper::@2
(label) toupper::@return
(byte) toupper::ch
(byte) toupper::ch#0 reg byte a 1.70000002E8
(byte) toupper::return
(byte) toupper::return#0 reg byte a 2.00000002E8
(byte) toupper::return#2 reg byte a 1.0333333466666667E8
(byte) toupper::return#3 reg byte a 2.0000002E7
(void()) uctoa((byte) uctoa::value , (byte*) uctoa::buffer , (byte) uctoa::radix)
(label) uctoa::@1
(label) uctoa::@2
@ -643,114 +646,165 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) uctoa::@7
(label) uctoa::@return
(byte*) uctoa::buffer
(byte*) uctoa::buffer#11 buffer zp[2]:41 3.3350000004999995E9
(byte*) uctoa::buffer#14 buffer zp[2]:41 1.50000000015E10
(byte*) uctoa::buffer#3 buffer zp[2]:41 2.0000002E7
(byte*) uctoa::buffer#4 buffer zp[2]:41 2.0000000002E10
(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::digit
(byte) uctoa::digit#1 digit zp[1]:8 2.0000000002E10
(byte) uctoa::digit#2 digit zp[1]:8 3.076923077230769E9
(byte) uctoa::digit#1 digit zp[1]:36 2000002.0
(byte) uctoa::digit#2 digit zp[1]:36 307692.6153846154
(byte) uctoa::digit_value
(byte) uctoa::digit_value#0 digit_value zp[1]:32 6.0000000006E9
(byte) uctoa::digit_value#0 digit_value zp[1]:43 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]:9 6.0000000006E9
(byte) uctoa::started#4 started zp[1]:9 1.0000000001E10
(byte) uctoa::started#2 started zp[1]:37 600000.6000000001
(byte) uctoa::started#4 started zp[1]:37 1000001.0
(byte) uctoa::value
(byte) uctoa::value#0 reg byte x 1.0000000001E10
(byte) uctoa::value#1 reg byte x 5500001.0
(byte) uctoa::value#2 reg byte x 6.670000000999999E9
(byte) uctoa::value#6 reg byte x 1.50000000015E10
(byte) uctoa::value#0 reg byte x 1000001.0
(byte) uctoa::value#1 reg byte x 5501.0
(byte) uctoa::value#2 reg byte x 670001.0000000001
(byte) uctoa::value#6 reg byte x 1500001.5
(byte()) uctoa_append((byte*) uctoa_append::buffer , (byte) uctoa_append::value , (byte) uctoa_append::sub)
(label) uctoa_append::@1
(label) uctoa_append::@2
(label) uctoa_append::@3
(label) uctoa_append::@return
(byte*) uctoa_append::buffer
(byte*) uctoa_append::buffer#0 buffer zp[2]:41 1.375000000025E10
(byte*) uctoa_append::buffer#0 buffer zp[2]:19 1375000.25
(byte) uctoa_append::digit
(byte) uctoa_append::digit#1 reg byte y 1.000000000000001E15
(byte) uctoa_append::digit#2 reg byte y 1.0000500000000015E15
(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 2.0000000002E10
(byte) uctoa_append::return#0 reg byte x 2000002.0
(byte) uctoa_append::sub
(byte) uctoa_append::sub#0 sub zp[1]:32 3.333350000000005E14
(byte) uctoa_append::sub#0 sub zp[1]:43 3.3335000005E9
(byte) uctoa_append::value
(byte) uctoa_append::value#0 reg byte x 3.6666666667333336E10
(byte) uctoa_append::value#1 reg byte x 2.000000000000002E15
(byte) uctoa_append::value#2 reg byte x 5.0001833333333425E14
(byte) uctoa_append::value#0 reg byte x 3666667.333333333
(byte) uctoa_append::value#1 reg byte x 2.0000000002E10
(byte) uctoa_append::value#2 reg byte x 5.001833334166666E9
(void()) ultoa((dword) ultoa::value , (byte*) ultoa::buffer , (byte) ultoa::radix)
(byte~) ultoa::$10 reg byte a 2000002.0
(byte~) ultoa::$11 reg byte a 20002.0
(label) ultoa::@1
(label) ultoa::@2
(label) ultoa::@3
(label) ultoa::@4
(label) ultoa::@5
(label) ultoa::@6
(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::digit
(byte) ultoa::digit#1 digit zp[1]:35 2000002.0
(byte) ultoa::digit#2 digit zp[1]:35 285714.5714285714
(dword) ultoa::digit_value
(dword) ultoa::digit_value#0 digit_value zp[4]:39 600000.6000000001
(dword*) ultoa::digit_values
(byte) ultoa::max_digits
(const byte) ultoa::max_digits#1 max_digits = (byte) $a
(byte) ultoa::radix
(byte) ultoa::started
(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_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::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::sub
(dword) ultoa_append::sub#0 sub zp[4]:39 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
zp[2]:2 [ main::cols#5 main::cols#1 ]
zp[2]:4 [ main::screen#5 main::screen#1 ]
zp[2]:6 [ main::canvas#10 main::canvas#25 main::canvas#1 line::canvas#0 ]
zp[1]:6 [ main::p0_idx#11 main::p0_idx#1 ]
zp[1]:7 [ main::p1_idx#2 main::p1_idx#1 ]
zp[1]:8 [ main::p2_idx#2 main::p2_idx#1 ]
zp[2]:9 [ main::canvas#10 main::canvas#24 main::canvas#1 ]
reg byte y [ main::x#2 main::x#1 ]
reg byte x [ main::c#2 main::c#4 main::c#1 ]
reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ]
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 ]
reg byte x [ printf_uchar::uvalue#19 printf_uchar::uvalue#4 printf_uchar::uvalue#5 printf_uchar::uvalue#6 printf_uchar::uvalue#7 printf_uchar::uvalue#8 printf_uchar::uvalue#9 printf_uchar::uvalue#10 printf_uchar::uvalue#11 printf_uchar::uvalue#12 printf_uchar::uvalue#13 printf_uchar::uvalue#14 printf_uchar::uvalue#15 printf_uchar::uvalue#16 printf_uchar::uvalue#17 printf_uchar::uvalue#18 printf_uchar::uvalue#0 printf_uchar::uvalue#1 printf_uchar::uvalue#2 printf_uchar::uvalue#3 ]
reg byte a [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ]
zp[1]:8 [ uctoa::digit#2 uctoa::digit#1 printf_number_buffer::padding#10 printf_number_buffer::padding#1 printf_padding::length#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 ]
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[1]:9 [ uctoa::started#2 uctoa::started#4 printf_padding::i#2 printf_padding::i#1 ]
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 a [ gotoxy::y#10 gotoxy::y#8 gotoxy::y#5 gotoxy::y#7 ]
reg byte x [ gotoxy::x#9 gotoxy::x#10 gotoxy::x#5 gotoxy::x#7 ]
zp[1]:10 [ line::y2#17 line::y2#0 line::y2#1 ]
zp[1]:11 [ line::e#4 line::e#8 line::e#0 line::e#1 line::e#10 ]
zp[1]:12 [ line::print_col#14 line::print_col#20 line::print_col#29 line::print_col#2 ]
zp[1]:13 [ line::print_row#10 line::print_row#26 line::print_row#35 line::print_row#3 ]
zp[1]:14 [ line::print_col#10 line::print_col#16 line::print_col#3 ]
zp[1]:15 [ line::x#10 line::x#12 line::x#18 line::x#22 line::x1#0 line::plot2_x#0 ]
zp[1]:16 [ line::y#12 line::y#15 line::y#7 line::y#11 line::plot1_y#0 line::y1#0 line::y#1 line::y#3 ]
zp[1]:17 [ line::print_row#11 line::print_row#22 line::print_row#5 ]
zp[1]:18 [ line::e1#10 line::e1#14 line::e1#0 line::e1#2 line::e1#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 ]
reg byte a [ sgn_u8::u#2 sgn_u8::u#0 sgn_u8::u#1 ]
reg byte a [ sgn_u8::return#4 ]
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 gotoxy::$6 ]
zp[2]:23 [ conio_cursor_color cputln::$2 cscroll::$8 gotoxy::$7 gotoxy::$4 gotoxy::offset#0 gotoxy::$8 gotoxy::$10 ]
zp[1]:25 [ conio_textcolor ]
zp[1]:26 [ canvas_show_memory ]
zp[1]:27 [ canvas_show_flag ]
zp[1]:28 [ main::x0#0 ]
zp[1]:29 [ main::y0#0 ]
zp[1]:30 [ main::x1#0 line::x2#0 ]
zp[1]:31 [ main::y1#0 ]
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 x [ printf_uchar::uvalue#0 ]
reg byte a [ cputs::c#1 ]
reg byte x [ printf_number_buffer::buffer_sign#0 ]
zp[1]:32 [ uctoa::digit_value#0 uctoa_append::sub#0 ]
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 ]
reg byte x [ uctoa_append::return#0 ]
reg byte a [ abs_u8::return#0 ]
zp[1]:33 [ line::dx#0 ]
zp[1]:43 [ line::dx#0 uctoa::digit_value#0 uctoa_append::sub#0 ]
reg byte a [ abs_u8::return#1 ]
zp[1]:34 [ line::dy#0 ]
zp[1]:44 [ line::dy#0 ]
reg byte a [ sgn_u8::return#0 ]
zp[1]:35 [ line::sx#0 ]
zp[1]:45 [ line::sx#0 ]
reg byte a [ sgn_u8::return#1 ]
zp[1]:36 [ line::sy#0 ]
reg byte a [ line::plot1_$0 ]
reg byte a [ line::plot1_$3 ]
zp[2]:37 [ line::plot1_column#0 memcpy::src_end#0 ]
reg byte a [ line::plot1_$2 ]
reg byte a [ line::plot2_$0 ]
reg byte a [ line::plot2_$3 ]
zp[2]:39 [ line::plot2_column#0 strlen::str#2 strlen::str#0 cputs::s#21 cputs::s#22 cputs::s#0 ]
reg byte a [ line::plot2_$2 ]
reg byte a [ line::plot3_$0 ]
reg byte a [ line::plot3_$3 ]
zp[2]:41 [ line::plot3_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::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 memset::num#6 memset::end#0 ]
reg byte a [ line::plot3_$2 ]
reg byte a [ line::plot4_$0 ]
reg byte a [ line::plot4_$3 ]
zp[2]:43 [ line::plot4_column#0 gotoxy::$9 cputln::ln_offset#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memset::str#7 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 ]
reg byte a [ line::plot4_$2 ]
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 ]
reg byte a [ sgn_u8::$0 ]
reg byte x [ abs_u8::$0 ]
reg byte a [ abs_u8::$0 ]
reg byte a [ kbhit::return#2 ]
reg byte a [ irq_bottom_2::$0 ]
reg byte a [ kbhit::return#0 ]