mirror of
https://gitlab.com/camelot/kickc.git
synced 2026-04-25 14:27:43 +00:00
Added random walk for Plus/4 to examples. Thanks to Carrion of Bonzai!
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
sec
|
||||
sbc {z1}
|
||||
beq !e+
|
||||
bvc !+
|
||||
eor #$80
|
||||
!:
|
||||
bpl {la1}
|
||||
!e:
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
+4894
-12952
File diff suppressed because one or more lines are too long
@@ -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 ]
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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 ]
|
||||
Reference in New Issue
Block a user