1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-22 16:33:48 +00:00

Added random walk for Plus/4 to examples. Thanks to Carrion of Bonzai!

This commit is contained in:
jespergravgaard 2020-05-08 18:28:48 +02:00
parent 6a5aa72ed5
commit 6aa88fe3e6
13 changed files with 9086 additions and 15268 deletions

View File

@ -0,0 +1,8 @@
sec
sbc {z1}
beq !e+
bvc !+
eor #$80
!:
bpl {la1}
!e:

View File

@ -41,13 +41,18 @@ public class TestPrograms {
}
@Test
public void testCircleChars() throws IOException, URISyntaxException {
compileAndCompare("circlechars.c");
public void testPolygon() throws IOException, URISyntaxException {
compileAndCompare("complex/polygon/polygon.c");
}
@Test
public void testPolygon() throws IOException, URISyntaxException {
compileAndCompare("complex/polygon/polygon.c");
public void testPlus4Walk() throws IOException, URISyntaxException {
compileAndCompare("examples/plus4walk/plus4walk.c");
}
@Test
public void testCircleChars() throws IOException, URISyntaxException {
compileAndCompare("circlechars.c");
}
@Test

View File

@ -34,7 +34,7 @@ char volatile canvas_show_flag = 0;
// SIN/COS tables
char align(0x100) SINTAB[0x140] = kickasm {{
.fill $200, 63 + 63*sin(i*2*PI/$100)
.fill $200, round(63 + 63*sin(i*2*PI/$100))
}};
char* COSTAB = SINTAB+0x40;
@ -64,7 +64,7 @@ void main() {
// Set text color
textcolor(WHITE);
char p0_idx = 0xf0;
char p0_idx = 0xb5;
char p1_idx = p0_idx+15;
char p2_idx = p0_idx+170;
@ -103,8 +103,8 @@ void main() {
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);
//gotoxy(0,24);
//printf("frame: %02x cycles: %6lu", p0_idx, cyclecount);
//printf("(%02x,%02x)-(%02x,%02x)", x0, y0, x1, y1);
}
}
@ -127,7 +127,7 @@ void setup_irq() {
// Interrupt Routine 1: Just above last text line.
interrupt(kernel_min) void irq_bottom_1() {
// Change border color
VICII->BORDER_COLOR = WHITE;
VICII->BORDER_COLOR = DARK_GREY;
// Show the cycle counter
VICII->MEMORY = toD018(CONSOLE, PETSCII);
// Acknowledge the IRQ
@ -144,6 +144,8 @@ interrupt(kernel_keyboard) void irq_bottom_2() {
// Show the current canvas (unless a key is being pressed)
if(!kbhit()) {
VICII->MEMORY = canvas_show_memory;
} else {
VICII->MEMORY = toD018(SCREEN, LINE_BUFFER);
}
canvas_show_flag = 0;
// Acknowledge the IRQ
@ -162,39 +164,57 @@ void line(char* canvas, char x1, char y1, char x2, char y2) {
char dy = abs_u8(y2-y1);
char sx = sgn_u8(x2-x1);
char sy = sgn_u8(y2-y1);
// The sign of the x-difference determines if this is a line at the top of the face
// being filled or a line at the bottom of the face. Because the points are organized in a clockwise
// fashion any line pointing right is filled below the line and any line pointing left is filled above
if(sx==0xff) {
// The sign of the x-difference determines if this is a line at the top of the face
// being filled or a line at the bottom of the face. Because the points are organized in a clockwise
// fashion any line pointing right is filled below the line and any line pointing left is filled above
// If this line is pointing left then move it down one pixel to ensure the fill is stopped correctly
// This is a line at the bottom of the face - move it 1 pixel down to stop the fill correctly
y++; y2++;
}
}
if(dx > dy) {
// X is the driver - plot every X using bresenham
// Flat slope - X is the driver - plot every X using bresenham
char e = dx/2;
do {
do {
plot(x, y);
x += sx;
e += dy;
if(dx < e) {
if(e>dx) {
y += sy;
e -= dx;
}
} while (x != x2);
plot(x, y);
} else {
// Y is the driver - only plot one plot per X
char e = dy/2;
plot(x, y);
do {
y += sy;
e += dx;
if(dy<e) {
// Steep slope - Y is the driver - only plot one plot per X
if(sx==sy) {
// If dx/dy signs are identical we must render the first pixel of each segment
plot(x, y);
if(dx==0)
return;
char e = dy/2;
do {
do {
y += sy;
e += dx;
} while(e<=dy);
x += sx;
e -= dy;
plot(x, y);
}
} while (y != y2);
} while (x != x2);
} else {
// If dx/dy signs differ we must render the last pixel of each segment
char e = dy/2;
do {
y += sy;
e += dx;
if(e>dy) {
plot(x, y-sy);
x += sx;
e -= dy;
}
} while (y != y2);
plot(x, y);
}
}
}
@ -217,6 +237,7 @@ void eorfill(char* line_buffer, char* canvas) {
char* fill_column = canvas;
for(char x=0;x<16;x++) {
char eor = line_column[0];
fill_column[0] = eor;
for(char y=1;y<16*8;y++) {
eor ^= line_column[y];
fill_column[y] = eor;

View File

@ -0,0 +1,9 @@
.file [name="%O.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$1001]
.segmentdef Code [start=$1010]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(%E)
.segment Code

View File

@ -0,0 +1,48 @@
// Random walk with color fading for Commodore Plus/4 / C16
#pragma link("plus4.ld")
#include <string.h>
#include <stdlib.h>
char * const SCREEN = 0x0c00;
char * const COLORRAM = 0x0800;
char * const BGCOLOR = 0xff19;
char * const BORDERCOLOR = 0xff15;
char * const RASTER = 0xff1d;
char FADE[16] = { 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x76, 0x66, 0x56, 0x46, 0x36, 0x26, 0x16, 0x06 };
char COUNT[1000];
void main() {
memset(SCREEN, 0xa0, 1000);
memset(COLORRAM, 0, 1000);
memset(COUNT, 0, 1000);
*BORDERCOLOR = 0;
*BGCOLOR = 0;
char x=20, y=12;
while(1) {
unsigned int offset = (unsigned int)y*40+x;
char cnt = ++*(COUNT+offset);
*(COLORRAM+offset) = FADE[cnt&0xf];
char rnd = >rand();
if(rnd & 0x80) {
if(rnd& 0x40) {
x++;
if(x==40) x=39;
} else {
x--;
if(x==0xff) x=0;
}
} else {
if(rnd & 0x40) {
y++;
if(y==25) y=24;
} else {
y--;
if(y==0xff) y=0;
}
}
while(*RASTER!=0xff) {}
}
}

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

@ -1,6 +1,5 @@
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const nomodify byte) BLACK = (byte) 0
@ -13,16 +12,12 @@
(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
(const nomodify byte*) CONIO_SCREEN_COLORS = (byte*) 55296
(const nomodify byte*) CONIO_SCREEN_TEXT = (byte*) 1024
(const nomodify byte) CONIO_TEXTCOLOR_DEFAULT = (byte) $e
(const nomodify byte*) CONSOLE = (byte*) 1024
(const byte*) COSTAB = (const byte*) SINTAB+(byte) $40
(const byte*) DIGITS[] = (byte*) "0123456789abcdef"z
(const nomodify byte) DARK_GREY = (byte) $b
(const nomodify byte) IRQ_RASTER = (byte) 1
(const nomodify void()**) KERNEL_IRQ = (void()**) 788
(const nomodify byte*) LINE_BUFFER = (byte*) 8192
@ -120,19 +115,15 @@
(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = (byte) $19
(const byte) OFFSET_STRUCT_MOS6569_VICII_MEMORY = (byte) $18
(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER = (byte) $12
(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1
(const nomodify byte*) PETSCII = (byte*) 4096
(const byte) RADIX::BINARY = (number) 2
(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)
(const byte*) SINTAB[(number) $140] = kickasm {{ .fill $200, round(63 + 63*sin(i*2*PI/$100))
}}
(const byte) SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = (byte) $c
(const nomodify struct MOS6569_VICII*) VICII = (struct MOS6569_VICII*) 53248
(const nomodify byte) WHITE = (byte) 1
(byte()) abs_u8((byte) abs_u8::u)
@ -148,55 +139,13 @@
(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
(volatile byte) canvas_show_flag loadstore zp[1]:18 18.74576271186441
(volatile byte) canvas_show_memory loadstore zp[1]:17 2.8611111111111107
(dword()) clock()
(label) clock::@return
(dword) clock::return
(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]: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
(label) cputc::@3
(label) cputc::@return
(byte) cputc::c
(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.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]:40 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.0000001E7
(to_nomodify byte*) cputs::s
(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]:21 2.0000000002E10
(byte*~) cscroll::$8 zp[2]:23 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
@ -205,33 +154,24 @@
(label) eorfill::@5
(label) eorfill::@return
(byte*) eorfill::canvas
(byte*) eorfill::canvas#0 canvas zp[2]:23 551.0
(byte*) eorfill::canvas#0 canvas zp[2]:31 551.0
(byte) eorfill::eor
(byte) eorfill::eor#0 reg byte a 200002.0
(byte) eorfill::eor#0 reg byte a 150001.5
(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]:23 100001.0
(byte*) eorfill::fill_column#5 fill_column zp[2]:23 133444.88888888888
(byte*) eorfill::fill_column#1 fill_column zp[2]:31 100001.0
(byte*) eorfill::fill_column#2 fill_column zp[2]:31 130100.5
(byte*) eorfill::line_buffer
(byte*) eorfill::line_column
(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::line_column#1 line_column zp[2]:28 66667.33333333333
(byte*) eorfill::line_column#2 line_column zp[2]:28 144444.88888888888
(byte) eorfill::x
(byte) eorfill::x#1 reg byte x 200002.0
(byte) eorfill::x#2 reg byte x 30000.300000000003
(byte) eorfill::x#2 reg byte x 27273.0
(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)
(label) gotoxy::@1
(label) gotoxy::@return
(word) gotoxy::offset
(const word) gotoxy::offset#0 offset = (word)(const byte) gotoxy::y#2*(byte) $28
(byte) gotoxy::x
(const byte) gotoxy::x#2 x = (byte) 0
(byte) gotoxy::y
(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
@ -245,7 +185,13 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) irq_bottom_2::@1
(label) irq_bottom_2::@2
(label) irq_bottom_2::@3
(label) irq_bottom_2::@4
(label) irq_bottom_2::@return
(label) irq_bottom_2::toD0181
(byte*) irq_bottom_2::toD0181_gfx
(byte) irq_bottom_2::toD0181_return
(const byte) irq_bottom_2::toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) LINE_BUFFER/(byte) 4&(byte) $f
(byte*) irq_bottom_2::toD0181_screen
(byte()) kbhit()
(label) kbhit::@return
(byte) kbhit::return
@ -259,7 +205,14 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) line::@13
(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::@3
(label) line::@4
(label) line::@5
@ -270,95 +223,120 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) line::@return
(byte*) line::canvas
(byte) line::dx
(byte) line::dx#0 dx zp[1]:36 5941.294117647059
(byte) line::dx#0 dx zp[1]:23 19462.805970149253
(byte) line::dy
(byte) line::dy#0 dy zp[1]:37 6446.936170212766
(byte) line::dy#0 dy zp[1]:24 22285.85714285714
(byte) line::e
(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#0 reg byte x 2002.0
(byte) line::e#1 reg byte x 44444.88888888889
(byte) line::e#2 reg byte x 200002.0
(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 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
(byte) line::e1#0 e1 zp[1]:14 2002.0
(byte) line::e1#1 e1 zp[1]:14 1033334.6666666666
(byte) line::e1#2 e1 zp[1]:14 28571.714285714286
(byte) line::e1#3 e1 zp[1]:14 1050502.0
(byte) line::e2
(byte) line::e2#0 reg byte x 2002.0
(byte) line::e2#1 reg byte x 133334.66666666666
(byte) line::e2#2 reg byte x 200002.0
(byte) line::e2#3 reg byte x 28714.714285714286
(byte) line::e2#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_$1 reg byte a 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_column#0 plot1_column zp[2]:33 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_$1 zp[1]:30 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_column#0 plot2_column zp[2]:28 150001.5
(byte) line::plot2_x
(byte) line::plot2_x#0 plot2_x zp[1]:17 57143.42857142857
(byte) line::plot2_y
(byte) line::plot2_y#0 plot2_y zp[1]:27 60000.600000000006
(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_$0 reg byte a 2002.0
(byte~) line::plot3_$1 reg byte a 2002.0
(byte~) line::plot3_$2 reg byte a 2002.0
(byte*) line::plot3_column
(byte*) line::plot3_column#0 plot3_column zp[2]:46 150001.5
(byte*) line::plot3_column#0 plot3_column zp[2]:31 1501.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_$0 reg byte a 200002.0
(byte~) line::plot4_$1 reg byte a 200002.0
(byte~) line::plot4_$2 reg byte a 200002.0
(byte*) line::plot4_column
(byte*) line::plot4_column#0 plot4_column zp[2]:49 1501.5
(byte*) line::plot4_column#0 plot4_column zp[2]:35 150001.5
(byte) line::plot4_x
(byte) line::plot4_y
(label) line::plot5
(byte~) line::plot5_$0 reg byte a 200002.0
(byte~) line::plot5_$1 zp[1]:39 200002.0
(byte~) line::plot5_$2 reg byte a 200002.0
(byte*) line::plot5_column
(byte*) line::plot5_column#0 plot5_column zp[2]:37 150001.5
(byte) line::plot5_x
(byte) line::plot5_y
(label) line::plot6
(byte~) line::plot6_$0 reg byte a 2002.0
(byte~) line::plot6_$1 reg byte a 2002.0
(byte~) line::plot6_$2 reg byte a 2002.0
(byte*) line::plot6_column
(byte*) line::plot6_column#0 plot6_column zp[2]:40 1501.5
(byte) line::plot6_x
(byte) line::plot6_y
(byte) line::sx
(byte) line::sx#0 sx zp[1]:38 4697.767441860465
(byte) line::sx#0 sx zp[1]:25 5135.6949152542375
(byte) line::sy
(byte) line::sy#0 sy zp[1]:39 5153.923076923076
(byte) line::sy#0 sy zp[1]:26 23672.836363636365
(byte) line::x
(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::x#0 x zp[1]:15 228.4375
(byte) line::x#1 x zp[1]:15 100001.0
(byte) line::x#10 x zp[1]:15 66834.16666666666
(byte) line::x#12 x zp[1]:15 30200.5
(byte) line::x#15 x zp[1]:15 50100.6
(byte) line::x#17 x zp[1]:15 60401.0
(byte) line::x#18 x zp[1]:15 550251.25
(byte) line::x#19 x zp[1]:15 62500.625
(byte) line::x1
(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::x1#0 x1 zp[1]:15 50.5
(byte) line::x1#1 x1 zp[1]:15 50.5
(byte) line::x1#2 x1 zp[1]:15 50.5
(byte) line::x2
(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::x2#0 x2 zp[1]:12 101.0
(byte) line::x2#1 x2 zp[1]:12 101.0
(byte) line::x2#15 x2 zp[1]:12 3612.625
(byte) line::x2#2 x2 zp[1]:12 101.0
(byte) line::y
(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::y#0 y zp[1]:16 239.27777777777777
(byte) line::y#1 y zp[1]:16 1001.0
(byte) line::y#10 y zp[1]:16 23647.411764705877
(byte) line::y#11 y zp[1]:16 2101004.0
(byte) line::y#12 y zp[1]:16 209091.36363636365
(byte) line::y#13 y zp[1]:16 55667.33333333333
(byte) line::y#15 y zp[1]:16 50334.16666666667
(byte) line::y#17 y zp[1]:16 583.9166666666667
(byte) line::y#4 y zp[1]:16 100001.0
(byte) line::y#7 y zp[1]:16 201003.0
(byte) line::y1
(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::y1#0 y1 zp[1]:16 67.33333333333333
(byte) line::y1#1 y1 zp[1]:16 67.33333333333333
(byte) line::y1#2 y1 zp[1]:16 67.33333333333333
(byte) line::y2
(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
(byte) line::y2#0 y2 zp[1]:13 202.0
(byte) line::y2#1 y2 zp[1]:13 202.0
(byte) line::y2#10 y2 zp[1]:13 226.68421052631578
(byte) line::y2#13 y2 zp[1]:13 5666.833333333334
(byte) line::y2#2 y2 zp[1]:13 202.0
(byte) line::y2#3 y2 zp[1]:13 2002.0
(void()) main()
(dword~) main::$18 zp[4]:11 202.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -373,11 +351,6 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(label) main::@2
(label) main::@20
(label) main::@21
(label) main::@22
(label) main::@23
(label) main::@24
(label) main::@25
(label) main::@26
(label) main::@3
(label) main::@4
(label) main::@5
@ -390,28 +363,24 @@ 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 5.611111111111111
(byte*) main::canvas#10 canvas zp[2]:9 8.911764705882353
(byte*) main::canvas#24 canvas zp[2]:9 202.0
(word) main::canvas#1 canvas zp[2]:10 16.833333333333332
(byte*) main::canvas#10 canvas zp[2]:10 8.911764705882353
(byte*) main::canvas#19 canvas zp[2]:10 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]:11 25.25
(byte*) main::cols#1 cols zp[2]:3 67.33333333333333
(byte*) main::cols#5 cols zp[2]:3 133.66666666666669
(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::p0_idx#1 p0_idx zp[1]:7 13.466666666666667
(byte) main::p0_idx#2 p0_idx zp[1]:7 15.538461538461538
(byte) main::p1_idx
(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::p1_idx#1 p1_idx zp[1]:8 14.428571428571429
(byte) main::p1_idx#2 p1_idx zp[1]:8 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::p2_idx#1 p2_idx zp[1]:9 15.538461538461538
(byte) main::p2_idx#2 p2_idx zp[1]:9 14.428571428571429
(byte*) main::screen
(byte*) main::screen#1 screen zp[2]:4 101.0
(byte*) main::screen#5 screen zp[2]:4 120.3
(byte*) main::screen#1 screen zp[2]:5 101.0
(byte*) main::screen#5 screen zp[2]:5 120.3
(label) main::toD0181
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
@ -426,62 +395,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]:28 16.833333333333332
(byte) main::x0#0 x0 zp[1]:19 16.833333333333332
(byte) main::x1
(byte) main::x1#0 x1 zp[1]:15 33.666666666666664
(byte) main::x1#0 x1 zp[1]:12 33.666666666666664
(byte) main::x2
(byte) main::x2#0 x2 zp[1]:15 43.285714285714285
(byte) main::x2#0 x2 zp[1]:12 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]:2 202.0
(byte) main::y#2 y zp[1]:2 36.72727272727273
(byte) main::y0
(byte) main::y0#0 y0 zp[1]:29 16.833333333333332
(byte) main::y0#0 y0 zp[1]:20 16.833333333333332
(byte) main::y1
(byte) main::y1#0 y1 zp[1]:30 33.666666666666664
(byte) main::y1#0 y1 zp[1]:21 33.666666666666664
(byte) main::y2
(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]:49
(byte*) memcpy::dst
(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]:40
(byte*) memcpy::src
(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]:43 1.251250000000025E13
(byte) main::y2#0 y2 zp[1]:22 43.285714285714285
(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.0000000002E10
(byte) memset::c#8 reg byte x 1.25125000000025E12
(byte) memset::c#6 reg byte x 12500.125
(byte*) memset::dst
(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::dst#1 dst zp[2]:31 200002.0
(byte*) memset::dst#2 dst zp[2]:31 133668.3333333333
(byte*) memset::dst#4 dst zp[2]:31 2002.0
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:40 1.6833333333336665E12
(byte*) memset::end#0 end zp[2]:28 16833.666666666664
(word) memset::num
(word) memset::num#6 num zp[2]:40 1.00000000001E11
(word) memset::num#4 num zp[2]:28 1001.0
(void*) memset::return
(void*) memset::str
(void*) memset::str#7 str zp[2]:49
(void*) memset::str#5 str zp[2]:31
(const byte*) plot_bit[(number) 8] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 }
(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
(byte) printf_format_number::justify_left
@ -492,103 +439,6 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) printf_format_number::zero_padding
(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]:49 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
(label) printf_number_buffer::@6
(label) printf_number_buffer::@7
(label) printf_number_buffer::@8
(label) printf_number_buffer::@9
(label) printf_number_buffer::@return
(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]: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]: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]:15 384.65384615384613
(byte) printf_number_buffer::format_zero_padding
(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]: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]: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]: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]: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
(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 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]:11 367.33333333333337
(void()) setup_irq()
(label) setup_irq::@return
(byte()) sgn_u8((byte) sgn_u8::u)
@ -603,30 +453,6 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(byte) sgn_u8::u#0 reg byte a 2002.0
(byte) sgn_u8::u#1 reg byte a 2002.0
(byte) sgn_u8::u#2 reg byte a 12003.0
(word()) strlen((byte*) strlen::str)
(label) strlen::@1
(label) strlen::@2
(label) strlen::@return
(word) strlen::len
(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]:49 20002.0
(byte*) strlen::str
(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
(label) strupr::@2
(label) strupr::@3
(label) strupr::@return
(byte*) strupr::return
(byte*) strupr::src
(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)
(label) textcolor::@return
(byte) textcolor::color
@ -637,194 +463,71 @@ 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
(label) uctoa::@3
(label) uctoa::@4
(label) uctoa::@5
(label) uctoa::@6
(label) uctoa::@7
(label) uctoa::@return
(byte*) uctoa::buffer
(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]: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]: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]: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
(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]: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]: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
(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]: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]: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]:32 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]: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]: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]:11 2000002.0
(dword) ultoa_append::sub
(dword) ultoa_append::sub#0 sub zp[4]:32 3.3335000005E9
(dword) ultoa_append::value
(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 ]
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 ]
zp[1]:2 [ main::y#2 main::y#1 ]
zp[2]:3 [ main::cols#5 main::cols#1 ]
zp[2]:5 [ main::screen#5 main::screen#1 ]
zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ]
zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ]
zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ]
zp[2]:10 [ main::canvas#10 main::canvas#19 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 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 a [ toupper::return#2 toupper::return#0 toupper::ch#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 ]
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 ]
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]: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 ]
zp[1]:12 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 main::x1#0 main::x2#0 ]
zp[1]:13 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ]
reg byte x [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ]
zp[1]:14 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ]
zp[1]:15 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ]
zp[1]:16 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ]
reg byte x [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#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 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]:32 [ ultoa::digit_value#0 ultoa_append::sub#0 ]
reg byte x [ uctoa_append::return#0 ]
reg byte x [ memset::c#6 ]
zp[1]:17 [ canvas_show_memory ]
zp[1]:18 [ canvas_show_flag ]
zp[1]:19 [ main::x0#0 ]
zp[1]:20 [ main::y0#0 ]
zp[1]:21 [ main::y1#0 ]
zp[1]:22 [ main::y2#0 ]
reg byte a [ abs_u8::return#0 ]
zp[1]:36 [ line::dx#0 uctoa::digit_value#0 uctoa_append::sub#0 ]
zp[1]:23 [ line::dx#0 ]
reg byte a [ abs_u8::return#1 ]
zp[1]:37 [ line::dy#0 ]
zp[1]:24 [ line::dy#0 ]
reg byte a [ sgn_u8::return#0 ]
zp[1]:38 [ line::sx#0 ]
zp[1]:25 [ line::sx#0 ]
reg byte a [ sgn_u8::return#1 ]
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 ]
zp[1]:26 [ line::sy#0 ]
zp[1]:27 [ line::plot2_y#0 ]
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 ]
zp[2]:28 [ line::plot2_column#0 memset::num#4 memset::end#0 eorfill::line_column#2 eorfill::line_column#1 ]
zp[1]:30 [ 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 ]
zp[2]:31 [ line::plot3_column#0 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 ]
reg byte a [ line::plot3_$1 ]
reg byte a [ line::plot1_$0 ]
reg byte a [ line::plot1_$2 ]
zp[2]:33 [ line::plot1_column#0 ]
reg byte a [ line::plot1_$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 ]
zp[2]:35 [ line::plot4_column#0 ]
reg byte a [ line::plot4_$1 ]
reg byte a [ line::plot5_$0 ]
reg byte a [ line::plot5_$2 ]
zp[2]:37 [ line::plot5_column#0 ]
zp[1]:39 [ line::plot5_$1 ]
reg byte a [ line::plot6_$0 ]
reg byte a [ line::plot6_$2 ]
zp[2]:40 [ line::plot6_column#0 ]
reg byte a [ line::plot6_$1 ]
reg byte a [ sgn_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 ]
mem[12] [ printf_buffer ]

View File

@ -0,0 +1,299 @@
// Random walk with color fading for Commodore Plus/4 / C16
.file [name="plus4walk.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$1001]
.segmentdef Code [start=$1010]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(__bbegin)
.segment Code
.label SCREEN = $c00
.label COLORRAM = $800
.label BGCOLOR = $ff19
.label BORDERCOLOR = $ff15
.label RASTER = $ff1d
// The random state variable
.label rand_state = 3
__bbegin:
.segment Code
main: {
.label __3 = 5
.label __5 = 9
.label __6 = $b
.label __8 = 5
.label __10 = $d
.label __24 = 5
.label offset = 5
.label y = 2
.label __29 = 7
.label __30 = 5
// memset(SCREEN, 0xa0, 1000)
ldx #$a0
lda #<SCREEN
sta.z memset.str
lda #>SCREEN
sta.z memset.str+1
jsr memset
// memset(COLORRAM, 0, 1000)
ldx #0
lda #<COLORRAM
sta.z memset.str
lda #>COLORRAM
sta.z memset.str+1
jsr memset
// memset(COUNT, 0, 1000)
ldx #0
lda #<COUNT
sta.z memset.str
lda #>COUNT
sta.z memset.str+1
jsr memset
// *BORDERCOLOR = 0
lda #0
sta BORDERCOLOR
// *BGCOLOR = 0
sta BGCOLOR
lda #<1
sta.z rand_state
lda #>1
sta.z rand_state+1
ldx #$14
lda #$c
sta.z y
__b2:
// (unsigned int)y*40
lda.z y
sta.z __24
lda #0
sta.z __24+1
lda.z __24
asl
sta.z __29
lda.z __24+1
rol
sta.z __29+1
asl.z __29
rol.z __29+1
lda.z __30
clc
adc.z __29
sta.z __30
lda.z __30+1
adc.z __29+1
sta.z __30+1
asl.z __3
rol.z __3+1
asl.z __3
rol.z __3+1
asl.z __3
rol.z __3+1
// offset = (unsigned int)y*40+x
txa
clc
adc.z offset
sta.z offset
bcc !+
inc.z offset+1
!:
// COUNT+offset
lda.z offset
clc
adc #<COUNT
sta.z __5
lda.z offset+1
adc #>COUNT
sta.z __5+1
// cnt = ++*(COUNT+offset)
ldy #0
lda (__5),y
clc
adc #1
sta (__5),y
// COUNT+offset
lda.z offset
clc
adc #<COUNT
sta.z __6
lda.z offset+1
adc #>COUNT
sta.z __6+1
// cnt = ++*(COUNT+offset)
lda (__6),y
tay
// COLORRAM+offset
clc
lda.z __8
adc #<COLORRAM
sta.z __8
lda.z __8+1
adc #>COLORRAM
sta.z __8+1
// cnt&0xf
tya
and #$f
// *(COLORRAM+offset) = FADE[cnt&0xf]
tay
lda FADE,y
ldy #0
sta (__8),y
// rand()
jsr rand
// rnd = >rand()
ldy.z __10+1
// rnd & 0x80
tya
and #$80
// if(rnd & 0x80)
cmp #0
bne __b3
// rnd & 0x40
tya
and #$40
// if(rnd & 0x40)
cmp #0
bne __b4
// y--;
dec.z y
// if(y==0xff)
lda #$ff
cmp.z y
bne __b6
lda #0
sta.z y
__b6:
// while(*RASTER!=0xff)
lda #$ff
cmp RASTER
bne __b6
jmp __b2
__b4:
// y++;
inc.z y
// if(y==25)
lda #$19
cmp.z y
bne __b6
lda #$18
sta.z y
jmp __b6
__b3:
// rnd& 0x40
tya
and #$40
// if(rnd& 0x40)
cmp #0
bne __b5
// x--;
dex
// if(x==0xff)
cpx #$ff
bne __b6
ldx #0
jmp __b6
__b5:
// x++;
inx
// if(x==40)
cpx #$28
bne __b6
ldx #$27
jmp __b6
}
// Returns a pseudo-random number in the range of 0 to RAND_MAX (65535)
// Uses an xorshift pseudorandom number generator that hits all different values
// Information https://en.wikipedia.org/wiki/Xorshift
// Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html
rand: {
.label __0 = $13
.label __1 = $f
.label __2 = $11
.label return = $d
// rand_state << 7
lda.z rand_state+1
lsr
lda.z rand_state
ror
sta.z __0+1
lda #0
ror
sta.z __0
// rand_state ^= rand_state << 7
lda.z rand_state
eor.z __0
sta.z rand_state
lda.z rand_state+1
eor.z __0+1
sta.z rand_state+1
// rand_state >> 9
lsr
sta.z __1
lda #0
sta.z __1+1
// rand_state ^= rand_state >> 9
lda.z rand_state
eor.z __1
sta.z rand_state
lda.z rand_state+1
eor.z __1+1
sta.z rand_state+1
// rand_state << 8
lda.z rand_state
sta.z __2+1
lda #0
sta.z __2
// rand_state ^= rand_state << 8
lda.z rand_state
eor.z __2
sta.z rand_state
lda.z rand_state+1
eor.z __2+1
sta.z rand_state+1
// return rand_state;
lda.z rand_state
sta.z return
lda.z rand_state+1
sta.z return+1
// }
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(5) str, byte register(X) c)
memset: {
.label end = $13
.label dst = 5
.label str = 5
// end = (char*)str + num
lda.z str
clc
adc #<$3e8
sta.z end
lda.z str+1
adc #>$3e8
sta.z end+1
__b2:
// for(char* dst = str; dst!=end; dst++)
lda.z dst+1
cmp.z end+1
bne __b3
lda.z dst
cmp.z end
bne __b3
// }
rts
__b3:
// *dst = c
txa
ldy #0
sta (dst),y
// for(char* dst = str; dst!=end; dst++)
inc.z dst
bne !+
inc.z dst+1
!:
jmp __b2
}
.segment Data
FADE: .byte 2, $12, $22, $32, $42, $52, $62, $72, $76, $66, $56, $46, $36, $26, $16, 6
COUNT: .fill $3e8, 0

View File

@ -0,0 +1,130 @@
@begin: scope:[] from
[0] phi()
to:@1
@1: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @1
[3] phi()
(void()) main()
main: scope:[main] from @1
[4] phi()
[5] call memset
to:main::@10
main::@10: scope:[main] from main
[6] phi()
[7] call memset
to:main::@11
main::@11: scope:[main] from main::@10
[8] phi()
[9] call memset
to:main::@12
main::@12: scope:[main] from main::@11
[10] *((const nomodify byte*) BORDERCOLOR) ← (byte) 0
[11] *((const nomodify byte*) BGCOLOR) ← (byte) 0
to:main::@1
main::@1: scope:[main] from main::@12 main::@6
[12] (word) rand_state#11 ← phi( main::@12/(word) 1 main::@6/(word) rand_state#3 )
[12] (byte) main::x#11 ← phi( main::@12/(byte) $14 main::@6/(byte) main::x#10 )
[12] (byte) main::y#11 ← phi( main::@12/(byte) $c main::@6/(byte) main::y#10 )
to:main::@2
main::@2: scope:[main] from main::@1
[13] (word~) main::$24 ← (word)(byte) main::y#11
[14] (word~) main::$29 ← (word~) main::$24 << (byte) 2
[15] (word~) main::$30 ← (word~) main::$29 + (word~) main::$24
[16] (word~) main::$3 ← (word~) main::$30 << (byte) 3
[17] (word) main::offset#0 ← (word~) main::$3 + (byte) main::x#11
[18] (byte*~) main::$5 ← (const byte*) COUNT + (word) main::offset#0
[19] *((byte*~) main::$5) ← ++ *((byte*~) main::$5)
[20] (byte*~) main::$6 ← (const byte*) COUNT + (word) main::offset#0
[21] (byte) main::cnt#0 ← *((byte*~) main::$6)
[22] (byte*~) main::$8 ← (const nomodify byte*) COLORRAM + (word) main::offset#0
[23] (byte~) main::$9 ← (byte) main::cnt#0 & (byte) $f
[24] *((byte*~) main::$8) ← *((const byte*) FADE + (byte~) main::$9)
[25] call rand
[26] (word) rand::return#2 ← (word) rand::return#0
to:main::@13
main::@13: scope:[main] from main::@2
[27] (word~) main::$10 ← (word) rand::return#2
[28] (byte) main::rnd#0 ← > (word~) main::$10
[29] (byte~) main::$12 ← (byte) main::rnd#0 & (byte) $80
[30] if((byte) 0!=(byte~) main::$12) goto main::@3
to:main::@7
main::@7: scope:[main] from main::@13
[31] (byte~) main::$13 ← (byte) main::rnd#0 & (byte) $40
[32] if((byte) 0!=(byte~) main::$13) goto main::@4
to:main::@8
main::@8: scope:[main] from main::@7
[33] (byte) main::y#2 ← -- (byte) main::y#11
[34] if((byte) main::y#2!=(byte) $ff) goto main::@14
to:main::@6
main::@14: scope:[main] from main::@8
[35] phi()
to:main::@6
main::@6: scope:[main] from main::@14 main::@15 main::@16 main::@17 main::@4 main::@5 main::@6 main::@8 main::@9
[36] (byte) main::x#10 ← phi( main::@14/(byte) main::x#11 main::@8/(byte) main::x#11 main::@15/(byte) main::x#2 main::@9/(byte) 0 main::@16/(byte) main::x#11 main::@4/(byte) main::x#11 main::@17/(byte) main::x#1 main::@5/(byte) $27 main::@6/(byte) main::x#10 )
[36] (byte) main::y#10 ← phi( main::@14/(byte) main::y#2 main::@8/(byte) 0 main::@15/(byte) main::y#11 main::@9/(byte) main::y#11 main::@16/(byte) main::y#1 main::@4/(byte) $18 main::@17/(byte) main::y#11 main::@5/(byte) main::y#11 main::@6/(byte) main::y#10 )
[37] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto main::@6
to:main::@1
main::@4: scope:[main] from main::@7
[38] (byte) main::y#1 ← ++ (byte) main::y#11
[39] if((byte) main::y#1!=(byte) $19) goto main::@16
to:main::@6
main::@16: scope:[main] from main::@4
[40] phi()
to:main::@6
main::@3: scope:[main] from main::@13
[41] (byte~) main::$18 ← (byte) main::rnd#0 & (byte) $40
[42] if((byte) 0!=(byte~) main::$18) goto main::@5
to:main::@9
main::@9: scope:[main] from main::@3
[43] (byte) main::x#2 ← -- (byte) main::x#11
[44] if((byte) main::x#2!=(byte) $ff) goto main::@15
to:main::@6
main::@15: scope:[main] from main::@9
[45] phi()
to:main::@6
main::@5: scope:[main] from main::@3
[46] (byte) main::x#1 ← ++ (byte) main::x#11
[47] if((byte) main::x#1!=(byte) $28) goto main::@17
to:main::@6
main::@17: scope:[main] from main::@5
[48] phi()
to:main::@6
(word()) rand()
rand: scope:[rand] from main::@2
[49] (word~) rand::$0 ← (word) rand_state#11 << (byte) 7
[50] (word) rand_state#1 ← (word) rand_state#11 ^ (word~) rand::$0
[51] (word~) rand::$1 ← (word) rand_state#1 >> (byte) 9
[52] (word) rand_state#2 ← (word) rand_state#1 ^ (word~) rand::$1
[53] (word~) rand::$2 ← (word) rand_state#2 << (byte) 8
[54] (word) rand_state#3 ← (word) rand_state#2 ^ (word~) rand::$2
[55] (word) rand::return#0 ← (word) rand_state#3
to:rand::@return
rand::@return: scope:[rand] from rand
[56] return
to:@return
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset] from main main::@10 main::@11
[57] (byte) memset::c#5 ← phi( main/(byte) $a0 main::@10/(byte) 0 main::@11/(byte) 0 )
[57] (void*) memset::str#4 ← phi( main/(void*)(const nomodify byte*) SCREEN main::@10/(void*)(const nomodify byte*) COLORRAM main::@11/(void*)(const byte*) COUNT )
to:memset::@1
memset::@1: scope:[memset] from memset
[58] (byte*) memset::end#0 ← (byte*)(void*) memset::str#4 + (word) $3e8
[59] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#4
to:memset::@2
memset::@2: scope:[memset] from memset::@1 memset::@3
[60] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
[61] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
to:memset::@return
memset::@return: scope:[memset] from memset::@2
[62] return
to:@return
memset::@3: scope:[memset] from memset::@2
[63] *((byte*) memset::dst#2) ← (byte) memset::c#5
[64] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
to:memset::@2

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,109 @@
(label) @1
(label) @begin
(label) @end
(const nomodify byte*) BGCOLOR = (byte*) 65305
(const nomodify byte*) BORDERCOLOR = (byte*) 65301
(const nomodify byte*) COLORRAM = (byte*) 2048
(const byte*) COUNT[(number) $3e8] = { fill( $3e8, 0) }
(const byte*) FADE[(number) $10] = { (byte) 2, (byte) $12, (byte) $22, (byte) $32, (byte) $42, (byte) $52, (byte) $62, (byte) $72, (byte) $76, (byte) $66, (byte) $56, (byte) $46, (byte) $36, (byte) $26, (byte) $16, (byte) 6 }
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const nomodify byte*) RASTER = (byte*) 65309
(const nomodify byte*) SCREEN = (byte*) 3072
(void()) main()
(word~) main::$10 zp[2]:13 202.0
(byte~) main::$12 reg byte a 202.0
(byte~) main::$13 reg byte a 202.0
(byte~) main::$18 reg byte a 202.0
(word~) main::$24 zp[2]:5 151.5
(word~) main::$29 zp[2]:7 202.0
(word~) main::$3 zp[2]:5 202.0
(word~) main::$30 zp[2]:5 202.0
(byte*~) main::$5 zp[2]:9 303.0
(byte*~) main::$6 zp[2]:11 202.0
(byte*~) main::$8 zp[2]:5 101.0
(byte~) main::$9 reg byte a 202.0
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@17
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(byte) main::cnt
(byte) main::cnt#0 reg byte y 101.0
(word) main::offset
(word) main::offset#0 offset zp[2]:5 80.8
(byte) main::rnd
(byte) main::rnd#0 reg byte y 134.66666666666666
(byte) main::x
(byte) main::x#1 reg byte x 101.0
(byte) main::x#10 reg byte x 1804.5
(byte) main::x#11 reg byte x 58.89655172413795
(byte) main::x#2 reg byte x 101.0
(byte) main::y
(byte) main::y#1 y zp[1]:2 101.0
(byte) main::y#10 y zp[1]:2 1804.5
(byte) main::y#11 y zp[1]:2 55.41379310344829
(byte) main::y#2 y zp[1]:2 101.0
(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#5 reg byte x 143.0
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:5 2002.0
(byte*) memset::dst#2 dst zp[2]:5 1368.3333333333335
(byte*) memset::dst#4 dst zp[2]:5 202.0
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:19 183.66666666666669
(word) memset::num
(void*) memset::return
(void*) memset::str
(void*) memset::str#4 str zp[2]:5
(word()) rand()
(word~) rand::$0 zp[2]:19 2002.0
(word~) rand::$1 zp[2]:15 2002.0
(word~) rand::$2 zp[2]:17 2002.0
(label) rand::@return
(word) rand::return
(word) rand::return#0 return zp[2]:13 367.33333333333337
(word) rand::return#2 return zp[2]:13 202.0
(word) rand_state
(word) rand_state#1 rand_state zp[2]:3 1501.5
(word) rand_state#11 rand_state zp[2]:3 214.5
(word) rand_state#2 rand_state zp[2]:3 1501.5
(word) rand_state#3 rand_state zp[2]:3 111.22222222222223
zp[1]:2 [ main::y#11 main::y#10 main::y#2 main::y#1 ]
reg byte x [ main::x#11 main::x#10 main::x#2 main::x#1 ]
zp[2]:3 [ rand_state#11 rand_state#3 rand_state#1 rand_state#2 ]
reg byte x [ memset::c#5 ]
zp[2]:5 [ main::$24 main::$30 main::$3 main::offset#0 main::$8 memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ]
zp[2]:7 [ main::$29 ]
zp[2]:9 [ main::$5 ]
zp[2]:11 [ main::$6 ]
reg byte y [ main::cnt#0 ]
reg byte a [ main::$9 ]
zp[2]:13 [ rand::return#2 main::$10 rand::return#0 ]
reg byte y [ main::rnd#0 ]
reg byte a [ main::$12 ]
reg byte a [ main::$13 ]
reg byte a [ main::$18 ]
zp[2]:15 [ rand::$1 ]
zp[2]:17 [ rand::$2 ]
zp[2]:19 [ memset::end#0 rand::$0 ]