1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-07-11 15:29:16 +00:00

Added kickc.sh executor and examples of kickc code to release.

This commit is contained in:
jespergravgaard 2018-10-01 01:14:59 +02:00
parent 0b86f55829
commit 32d224589a
72 changed files with 173 additions and 59 deletions

View File

@ -11,9 +11,10 @@ release:
artifacts:
name: kickc_${CI_BUILD_REF_NAME}
paths:
- ./bin
- ./lib
- ./stdlib
- ./examples
- ./LICENSE*
- ./NOTICE*
- ./*.pdf

View File

@ -18,6 +18,14 @@
<include>*.kc</include>
</includes>
</fileSet>
<fileSet>
<directory>src/test/java/dk/camelot64/kickc/test/kc/examples</directory>
<outputDirectory>examples</outputDirectory>
<includes>
<include>*/*.kc</include>
<include>*/*.png</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/doc</directory>
<outputDirectory></outputDirectory>
@ -25,6 +33,13 @@
<include>*.pdf</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/script</directory>
<outputDirectory>bin</outputDirectory>
<includes>
<include>*.sh</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>lib</outputDirectory>

12
src/main/script/kickc.sh Executable file
View File

@ -0,0 +1,12 @@
#!/bin/bash
# JAVA HOME
# KICKC HOME
export KICKC_HOME="$(dirname $0)/.."
# KCLIB HOME
export KICKCLIB_HOME="$KICKC_HOME/stdlib"
# KICKASSEMBLER HOME
# VICE HOME
echo java -jar lib/kickc-0.5-SNAPSHOT.jar -I $KICKCLIB_HOME $*
java -jar lib/kickc-0.5-SNAPSHOT.jar -I $KICKCLIB_HOME $*

View File

@ -106,7 +106,23 @@ public class ReferenceHelper {
}
public File getTmpFile(String fileName, String extension) {
return new File(tempDir.toFile(), fileName + extension);
File file = new File(tempDir.toFile(), fileName + extension);
mkPath(file);
return file;
}
/**
* Ensures that the path to the passed file is created.
* @param file The file to create a path for
*/
private void mkPath(File file) {
Path parent = file.toPath().getParent();
File dir = parent.toFile();
if(!dir.exists()) {
mkPath(dir);
dir.mkdir();
}
}
}

View File

@ -115,7 +115,7 @@ public class TestPrograms {
@Test
public void testIrqHyperscreen() throws IOException, URISyntaxException {
compileAndCompare("irq-hyperscreen");
compileAndCompare("examples/irq/irq-hyperscreen");
}
@Test
@ -140,7 +140,7 @@ public class TestPrograms {
@Test
public void testMultiplexer() throws IOException, URISyntaxException {
compileAndCompare("simple-multiplexer", 10);
compileAndCompare("examples/multiplexer/simple-multiplexer", 10);
}
@Test
@ -165,17 +165,17 @@ public class TestPrograms {
@Test
public void testSinePlotter() throws IOException, URISyntaxException {
compileAndCompare("sine-plotter");
compileAndCompare("examples/sinplotter/sine-plotter");
}
@Test
public void testScrollLogo() throws IOException, URISyntaxException {
compileAndCompare("scrolllogo");
compileAndCompare("examples/scrolllogo/scrolllogo");
}
@Test
public void testShowLogo() throws IOException, URISyntaxException {
compileAndCompare("showlogo");
compileAndCompare("examples/showlogo/showlogo");
}
@Test
@ -250,7 +250,7 @@ public class TestPrograms {
@Test
public void testHelloWorld() throws IOException, URISyntaxException {
compileAndCompare("helloworld");
compileAndCompare("examples/helloworld/helloworld");
}
@Test
@ -280,7 +280,7 @@ public class TestPrograms {
@Test
public void testVarForwardProblem() throws IOException, URISyntaxException {
compileAndCompare("var-forward-problem");
compileAndCompare("var-forward-problem");
}
@Test
@ -375,7 +375,7 @@ public class TestPrograms {
@Test
public void testChargenAnalysis() throws IOException, URISyntaxException {
compileAndCompare("chargen-analysis");
compileAndCompare("examples/chargen/chargen-analysis");
}
@Test
@ -485,7 +485,7 @@ public class TestPrograms {
@Test
public void testRasterBars() throws IOException, URISyntaxException {
compileAndCompare("raster-bars");
compileAndCompare("examples/rasterbars/raster-bars");
}
@Test
@ -555,7 +555,7 @@ public class TestPrograms {
@Test
public void testSinusSprites() throws IOException, URISyntaxException {
compileAndCompare("sinus-sprites");
compileAndCompare("examples/sinsprites/sinus-sprites");
}
@Test
@ -650,7 +650,7 @@ public class TestPrograms {
@Test
public void testScrollBig() throws IOException, URISyntaxException {
compileAndCompare("scrollbig");
compileAndCompare("examples/scrollbig/scrollbig");
}
@Test
@ -675,7 +675,7 @@ public class TestPrograms {
@Test
public void testBitmapBresenham() throws IOException, URISyntaxException {
compileAndCompare("bitmap-bresenham");
compileAndCompare("examples/bresenham/bitmap-bresenham");
}
@Test
@ -725,7 +725,7 @@ public class TestPrograms {
@Test
public void testScroll() throws IOException, URISyntaxException {
compileAndCompare("scroll");
compileAndCompare("examples/scroll/scroll");
}
@Test
@ -1025,7 +1025,7 @@ public class TestPrograms {
Compiler compiler = new Compiler();
compiler.addImportPath(stdlibPath);
compiler.addImportPath(testPath);
if(upliftCombinations!=null) {
if(upliftCombinations != null) {
compiler.setUpliftCombinations(upliftCombinations);
}
Program program = compiler.compile(fileName);
@ -1047,9 +1047,12 @@ public class TestPrograms {
private void compileAsm(String fileName, Program program) throws IOException {
writeBinFile(fileName, ".asm", program.getAsm().toString(false));
for(Path asmResourceFile : program.getAsmResourceFiles()) {
File binFile = getBinFile(asmResourceFile.getFileName().toString());
File asmFile = getBinFile(fileName, ".asm");
String asmFolder = asmFile.getParent();
File resFile = new File(asmFolder, asmResourceFile.getFileName().toString());
mkPath(resFile);
try {
Files.copy(asmResourceFile, binFile.toPath());
Files.copy(asmResourceFile, resFile.toPath());
} catch(FileAlreadyExistsException e) {
// Ignore this
}
@ -1080,11 +1083,23 @@ public class TestPrograms {
}
public File getBinFile(String fileName, String extension) {
return new File(getBinDir(), fileName + extension);
File binFile = new File(getBinDir(), fileName + extension);
mkPath(binFile);
return binFile;
}
public File getBinFile(String fileName) {
return new File(getBinDir(), fileName);
*/
/**
* Ensures that the path to the passed file is created.
* @param file The file to create a path for
*/
private void mkPath(File file) {
Path parent = file.toPath().getParent();
File dir = parent.toFile();
if(!dir.exists()) {
mkPath(dir);
dir.mkdir();
}
}
public File getBinDir() {
@ -1092,10 +1107,8 @@ public class TestPrograms {
File binDir = new File(tempDir.toFile(), "bin");
if(!binDir.exists()) {
binDir.mkdir();
}
return binDir;
}
*/
}

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -5,7 +5,6 @@ import "memory.kc"
byte* SCREEN = $400;
byte* LOGO = $2000;
kickasm(resource "logo.png", pc LOGO, bytes 6*40*8) {{
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -4,7 +4,6 @@ byte* SCREEN = $400;
byte* LOGO = $2000;
kickasm(resource "logo.png", pc LOGO, bytes 6*40*8 ) {{
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)

View File

@ -712,8 +712,7 @@ fill: {
.align $100
xsin: .fill 2*XSIN_SIZE, 0
.pc = LOGO "Inline"
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)

View File

@ -2,8 +2,7 @@
[0] phi() [ ] ( )
to:@24
@24: scope:[] from @begin
kickasm(location (const byte*) LOGO#0) {{ logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)

View File

@ -505,8 +505,7 @@ fill::@return: scope:[fill] from fill::@1
(byte*) LOGO#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
(byte/word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 6 * (byte/signed byte/word/signed word/dword/signed dword) 40
(byte/signed word/word/dword/signed dword~) $1 ← (byte/word/signed word/dword/signed dword~) $0 * (byte/signed byte/word/signed word/dword/signed dword) 8
kickasm(location (byte*) LOGO#0) {{ logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
kickasm(location (byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
@ -2745,8 +2744,7 @@ FINAL CONTROL FLOW GRAPH
[0] phi() [ ] ( )
to:@24
@24: scope:[] from @begin
kickasm(location (const byte*) LOGO#0) {{ logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
@ -3743,7 +3741,7 @@ bbegin:
jmp b24
//SEG3 @24
b24:
//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @24 to @27 [phi:@24->@27]
b27_from_b24:
jmp b27
@ -5379,8 +5377,7 @@ fill: {
.align $100
xsin: .fill 2*XSIN_SIZE, 0
.pc = LOGO "Inline"
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
@ -5886,7 +5883,7 @@ bbegin:
jmp b24
//SEG3 @24
b24:
//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @24 to @27 [phi:@24->@27]
b27_from_b24:
jmp b27
@ -7254,8 +7251,7 @@ fill: {
.align $100
xsin: .fill 2*XSIN_SIZE, 0
.pc = LOGO "Inline"
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
@ -7969,7 +7965,7 @@ Score: 41393
.label xsin_idx = 2
//SEG2 @begin
//SEG3 @24
//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @24 to @27 [phi:@24->@27]
//SEG6 @27
//SEG7 [3] call main [ ] ( )
@ -9107,8 +9103,7 @@ fill: {
.align $100
xsin: .fill 2*XSIN_SIZE, 0
.pc = LOGO "Inline"
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)

View File

@ -89,8 +89,7 @@ fill: {
rts
}
.pc = LOGO "Inline"
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)

View File

@ -2,8 +2,7 @@
[0] phi() [ ] ( )
to:@3
@3: scope:[] from @begin
kickasm(location (const byte*) LOGO#0) {{ logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)

View File

@ -21,8 +21,7 @@ CONTROL FLOW GRAPH SSA
(byte*) LOGO#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
(byte/word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 6 * (byte/signed byte/word/signed word/dword/signed dword) 40
(byte/signed word/word/dword/signed dword~) $1 ← (byte/word/signed word/dword/signed dword~) $0 * (byte/signed byte/word/signed word/dword/signed dword) 8
kickasm(location (byte*) LOGO#0) {{ logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
kickasm(location (byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
@ -398,8 +397,7 @@ FINAL CONTROL FLOW GRAPH
[0] phi() [ ] ( )
to:@3
@3: scope:[] from @begin
kickasm(location (const byte*) LOGO#0) {{ logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
@ -544,7 +542,7 @@ bbegin:
jmp b3
//SEG3 @3
b3:
//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @3 to @5 [phi:@3->@5]
b5_from_b3:
jmp b5
@ -701,8 +699,7 @@ fill: {
rts
}
.pc = LOGO "Inline"
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
@ -773,7 +770,7 @@ bbegin:
jmp b3
//SEG3 @3
b3:
//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @3 to @5 [phi:@3->@5]
b5_from_b3:
jmp b5
@ -923,8 +920,7 @@ fill: {
rts
}
.pc = LOGO "Inline"
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
@ -1071,7 +1067,7 @@ Score: 3578
.label LOGO = $2000
//SEG2 @begin
//SEG3 @3
//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @3 to @5 [phi:@3->@5]
//SEG6 @5
//SEG7 [3] call main [ ] ( )
@ -1194,8 +1190,7 @@ fill: {
rts
}
.pc = LOGO "Inline"
logo:
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)

View File

@ -0,0 +1,73 @@
(label) @3
(label) @5
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL2
(const byte*) BGCOL2#0 BGCOL2 = ((byte*))(word/dword/signed dword) 53282
(byte*) BGCOL3
(const byte*) BGCOL3#0 BGCOL3 = ((byte*))(word/dword/signed dword) 53283
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte*) D016
(const byte*) D016#0 D016 = ((byte*))(word/dword/signed dword) 53270
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(const byte) DARK_GREY#0 DARK_GREY = (byte/signed byte/word/signed word/dword/signed dword) 11
(byte*) LOGO
(const byte*) LOGO#0 LOGO = ((byte*))(word/signed word/dword/signed dword) 8192
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte) VIC_CSEL
(const byte) VIC_CSEL#0 VIC_CSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_MCM
(const byte) VIC_MCM#0 VIC_MCM = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
(byte*) fill::addr
(byte*) fill::addr#0 addr zp ZP_WORD:4 2.0
(byte*) fill::addr#1 addr zp ZP_WORD:4 16.5
(byte*) fill::addr#2 addr zp ZP_WORD:4 17.5
(byte*) fill::end
(byte*) fill::end#0 end zp ZP_WORD:2 2.6
(word) fill::size
(word) fill::size#2 size zp ZP_WORD:2 2.0
(byte*) fill::start
(byte) fill::val
(byte) fill::val#3 reg byte x 1.8333333333333333
(void()) main()
(label) main::@1
(label) main::@10
(label) main::@3
(label) main::@9
(byte) main::ch
(byte) main::ch#1 reg byte x 16.5
(byte) main::ch#2 reg byte x 22.0
(label) main::toD0181
(word~) main::toD0181_$0
(word~) main::toD0181_$1
(word~) main::toD0181_$2
(byte~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(byte~) main::toD0181_$6
(byte~) main::toD0181_$7
(byte~) main::toD0181_$8
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) 16383<<(byte/signed byte/word/signed word/dword/signed dword) 2|>((word))(const byte*) LOGO#0>>(byte/signed byte/word/signed word/dword/signed dword) 2&(byte/signed byte/word/signed word/dword/signed dword) 15
(byte*) main::toD0181_screen
reg byte x [ main::ch#2 main::ch#1 ]
zp ZP_WORD:2 [ fill::size#2 fill::end#0 ]
reg byte x [ fill::val#3 ]
zp ZP_WORD:4 [ fill::addr#2 fill::addr#0 fill::addr#1 ]