1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-08-09 04:25:12 +00:00

Introduced KickAss XEX format modifier plugin https://gitlab.com/jespergravgaard/kickass-plugin-atari-xex. Changed #pragma pc() to #pragma start_address(). Added start_address to .TGT platform file. Closes #571

This commit is contained in:
jespergravgaard
2020-11-15 02:15:48 +01:00
parent bca3622d55
commit a67f01a61a
43 changed files with 1525 additions and 1784 deletions

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: dk.camelot64.kickass.xexplugin:kickassxexformat:1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/dk/camelot64/kickass/xexplugin/kickassxexformat/1.0/kickassxexformat-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/dk/camelot64/kickass/xexplugin/kickassxexformat/1.0/kickassxexformat-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/dk/camelot64/kickass/xexplugin/kickassxexformat/1.0/kickassxexformat-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -22,9 +22,10 @@
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.2" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.2" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.2" level="project" />
<orderEntry type="library" name="Maven: cml.kickass:kickassembler:5.16-65ce02.h" level="project" />
<orderEntry type="library" name="Maven: info.picocli:picocli:4.5.2" level="project" /> <orderEntry type="library" name="Maven: info.picocli:picocli:4.5.2" level="project" />
<orderEntry type="library" name="Maven: javax.json:javax.json-api:1.1.4" level="project" /> <orderEntry type="library" name="Maven: javax.json:javax.json-api:1.1.4" level="project" />
<orderEntry type="library" name="Maven: org.glassfish:javax.json:1.1.4" level="project" /> <orderEntry type="library" name="Maven: org.glassfish:javax.json:1.1.4" level="project" />
<orderEntry type="library" name="Maven: cml.kickass:kickassembler:5.16-65ce02.h" level="project" />
<orderEntry type="library" name="Maven: dk.camelot64.kickass.xexplugin:kickassxexformat:1.0" level="project" />
</component> </component>
</module> </module>

15
pom.xml
View File

@@ -41,11 +41,6 @@
<version>5.6.2</version> <version>5.6.2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>cml.kickass</groupId>
<artifactId>kickassembler</artifactId>
<version>5.16-65ce02.h</version>
</dependency>
<dependency> <dependency>
<groupId>info.picocli</groupId> <groupId>info.picocli</groupId>
<artifactId>picocli</artifactId> <artifactId>picocli</artifactId>
@@ -61,6 +56,16 @@
<artifactId>javax.json</artifactId> <artifactId>javax.json</artifactId>
<version>1.1.4</version> <version>1.1.4</version>
</dependency> </dependency>
<dependency>
<groupId>cml.kickass</groupId>
<artifactId>kickassembler</artifactId>
<version>5.16-65ce02.h</version>
</dependency>
<dependency>
<groupId>dk.camelot64.kickass.xexplugin</groupId>
<artifactId>kickassxexformat</artifactId>
<version>1.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -0,0 +1,4 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Sun Nov 15 00:38:04 CET 2020
kickassxexformat-1.0.jar>=
kickassxexformat-1.0.pom>=

View File

@@ -0,0 +1 @@
94a44ac4f920430017256c0adc7c907f

View File

@@ -0,0 +1 @@
fcd40077f803f35d9bed3de427db21e92ba039a0

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>dk.camelot64.kickass.xexplugin</groupId>
<artifactId>kickassxexformat</artifactId>
<version>1.0</version>
<description>POM was created from install:install-file</description>
</project>

View File

@@ -0,0 +1 @@
df3752a1ed930cd6074d32aa8805977a

View File

@@ -0,0 +1 @@
11aa7e9264382c8b9e96034541035884887c94ec

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>dk.camelot64.kickass.xexplugin</groupId>
<artifactId>kickassxexformat</artifactId>
<versioning>
<release>1.0</release>
<versions>
<version>1.0</version>
</versions>
<lastUpdated>20201114233804</lastUpdated>
</versioning>
</metadata>

View File

@@ -0,0 +1 @@
692a58cd7630b4d37973c20aa00542a1

View File

@@ -0,0 +1 @@
09008b573126bb7a904d1cf0743605bc5b929ab8

View File

@@ -47,8 +47,6 @@ public class Program {
/** Enable live ranges per call path optimization, which limits memory usage and code, but takes a lot of compile time. */ /** Enable live ranges per call path optimization, which limits memory usage and code, but takes a lot of compile time. */
private boolean enableLiveRangeCallPath = true; private boolean enableLiveRangeCallPath = true;
/** Absolute start address of the code. Null to start ad 0x080d. PASS 0-5 (STATIC) */
private Number programPc;
/** Reserved ZP addresses that the compiler cannot use. PASS 0-5 (STATIC) */ /** Reserved ZP addresses that the compiler cannot use. PASS 0-5 (STATIC) */
private List<Integer> reservedZps; private List<Integer> reservedZps;
/** Resource files that should be copied to the output folder to be compiled with the generated ASM. PASS 0-5 (STATIC) */ /** Resource files that should be copied to the output folder to be compiled with the generated ASM. PASS 0-5 (STATIC) */
@@ -226,7 +224,6 @@ public class Program {
return getTargetPlatform().getCpu(); return getTargetPlatform().getCpu();
} }
public StructVariableMemberUnwinding getStructVariableMemberUnwinding() { public StructVariableMemberUnwinding getStructVariableMemberUnwinding() {
return structVariableMemberUnwinding; return structVariableMemberUnwinding;
} }
@@ -513,19 +510,6 @@ public class Program {
this.reservedZps = reservedZps; this.reservedZps = reservedZps;
} }
/**
* Set the absolute position of the program code
*
* @param programPc The address
*/
public void setProgramPc(Number programPc) {
this.programPc = programPc;
}
public Number getProgramPc() {
return programPc;
}
public CompileLog getLog() { public CompileLog getLog() {
return log; return log;
} }
@@ -534,7 +518,6 @@ public class Program {
this.log = log; this.log = log;
} }
/** /**
* Get information about the size of the program * Get information about the size of the program
* *

View File

@@ -26,6 +26,9 @@ public class TargetPlatform {
/** The target CPU. */ /** The target CPU. */
private TargetCpu cpu; private TargetCpu cpu;
/** The default program start address. */
private Number startAddress;
/** The link script file. */ /** The link script file. */
private File linkScriptFile; private File linkScriptFile;
@@ -53,6 +56,8 @@ public class TargetPlatform {
VariableBuilderConfig.defaultPreConfig(config); VariableBuilderConfig.defaultPreConfig(config);
VariableBuilderConfig.defaultPostConfig(config); VariableBuilderConfig.defaultPostConfig(config);
this.variableBuilderConfig = config; this.variableBuilderConfig = config;
// Set the default start address
this.startAddress = 0x080d;
} }
public String getName() { public String getName() {
@@ -71,6 +76,14 @@ public class TargetPlatform {
this.cpu = cpu; this.cpu = cpu;
} }
public Number getStartAddress() {
return startAddress;
}
public void setStartAddress(Number startAddress) {
this.startAddress = startAddress;
}
public File getLinkScriptFile() { public File getLinkScriptFile() {
return linkScriptFile; return linkScriptFile;
} }

View File

@@ -38,7 +38,7 @@ public class CParser {
public static final String PRAGMA_ENCODING = "encoding"; public static final String PRAGMA_ENCODING = "encoding";
public static final String PRAGMA_CODE_SEG = "code_seg"; public static final String PRAGMA_CODE_SEG = "code_seg";
public static final String PRAGMA_DATA_SEG = "data_seg"; public static final String PRAGMA_DATA_SEG = "data_seg";
public static final String PRAGMA_PC = "pc"; public static final String PRAGMA_START_ADDRESS = "start_address";
public static final String PRAGMA_CALLING = "calling"; public static final String PRAGMA_CALLING = "calling";
public static final String PRAGMA_ZP_RESERVE = "zp_reserve"; public static final String PRAGMA_ZP_RESERVE = "zp_reserve";
public static final String PRAGMA_CONSTRUCTOR_FOR = "constructor_for"; public static final String PRAGMA_CONSTRUCTOR_FOR = "constructor_for";

View File

@@ -28,7 +28,6 @@ public class CTargetPlatformParser {
/** The file extension used for target platform files. */ /** The file extension used for target platform files. */
public static final String FILE_EXTENSION = "tgt"; public static final String FILE_EXTENSION = "tgt";
public static TargetPlatform parseTargetPlatformFile(String platformName, File platformFile, Path currentFolder, List<String> platformSearchPaths) { public static TargetPlatform parseTargetPlatformFile(String platformName, File platformFile, Path currentFolder, List<String> platformSearchPaths) {
try { try {
final JsonReader jsonReader = Json.createReader(new BufferedInputStream(new FileInputStream(platformFile))); final JsonReader jsonReader = Json.createReader(new BufferedInputStream(new FileInputStream(platformFile)));
@@ -44,6 +43,13 @@ public class CTargetPlatformParser {
if(linkScriptName != null) if(linkScriptName != null)
targetPlatform.setLinkScriptFile(SourceLoader.loadFile(linkScriptName, currentFolder, platformSearchPaths)); targetPlatform.setLinkScriptFile(SourceLoader.loadFile(linkScriptName, currentFolder, platformSearchPaths));
} }
{
final String startAddress = platformJson.getString("start_address", null);
if(startAddress != null) {
final Number startAddressNumber = NumberParser.parseLiteral(startAddress);
targetPlatform.setStartAddress(startAddressNumber.intValue());
}
}
{ {
final String emulatorCommand = platformJson.getString("emulator", null); final String emulatorCommand = platformJson.getString("emulator", null);
if(emulatorCommand != null) if(emulatorCommand != null)

View File

@@ -243,9 +243,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
case CParser.PRAGMA_DATA_SEG: case CParser.PRAGMA_DATA_SEG:
this.currentDataSegment = pragmaParamName(pragmaParamSingle(ctx)); this.currentDataSegment = pragmaParamName(pragmaParamSingle(ctx));
break; break;
case CParser.PRAGMA_PC: case CParser.PRAGMA_START_ADDRESS:
Number programPc = pragmaParamNumber(pragmaParamSingle(ctx)); Number startAddress = pragmaParamNumber(pragmaParamSingle(ctx));
program.setProgramPc(programPc); program.getTargetPlatform().setStartAddress(startAddress);
break; break;
case CParser.PRAGMA_CALLING: case CParser.PRAGMA_CALLING:
currentCallingConvention = pragmaParamCallingConvention(pragmaParamSingle(ctx)); currentCallingConvention = pragmaParamCallingConvention(pragmaParamSingle(ctx));

View File

@@ -96,9 +96,8 @@ public class Pass4CodeGeneration {
linkScriptBody = linkScriptBody.replace("%^O", outputFileName.toUpperCase()); linkScriptBody = linkScriptBody.replace("%^O", outputFileName.toUpperCase());
String entryName = program.getStartProcedure().getFullName(); String entryName = program.getStartProcedure().getFullName();
linkScriptBody = linkScriptBody.replace("%E", entryName); linkScriptBody = linkScriptBody.replace("%E", entryName);
Number programPc = program.getProgramPc(); Number startAddress = program.getTargetPlatform().getStartAddress();
if(programPc == null) programPc = 0x080d; linkScriptBody = linkScriptBody.replace("%P", AsmFormat.getAsmNumber(startAddress));
linkScriptBody = linkScriptBody.replace("%P", AsmFormat.getAsmNumber(programPc));
asm.addLine(new AsmInlineKickAsm(linkScriptBody, 0L, 0L)); asm.addLine(new AsmInlineKickAsm(linkScriptBody, 0L, 0L));
// If the link script contains ".segment" then generate segments! // If the link script contains ".segment" then generate segments!

View File

@@ -1,22 +1,8 @@
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="%O", type="bin", segments="XexFile"] .file [name="%O", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=%E]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=%P]
.byte $ff, $ff .segmentdef Data [startAfter="Code"]
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word %E
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:

View File

@@ -1,11 +1,13 @@
{ {
"description": "Atari XL/XE executable XEX file with a single segment.", "description": "Atari XL/XE executable XEX file with a single segment.",
"extension": "xex",
"link": "atarixl.ld",
"cpu": "MOS6502X", "cpu": "MOS6502X",
"encoding": "screencode_atari", "link": "atarixl.ld",
"start_address": "0x2000",
"zp_reserve": [ "0x00..0x7f" ],
"encoding": "atascii",
"extension": "xex",
"emulator": "atari800 -xl",
"defines": { "defines": {
"__ATARIXL__": 1 "__ATARIXL__": 1
}, }
"emulator": "atari800 -xl"
} }

View File

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Prepare by making the "official" metadata local
cp ./repo/dk/camelot64/kickass/xexplugin/kickassxexformat/maven-metadata.xml ./repo/dk/camelot64/kickass/xexplugin/kickassxexformat/maven-metadata-local.xml
# mvn install:install-file -Dmaven.repo.local=./repo/ -Dfile=/Applications/KickAssembler/KickAss.jar -DgroupId=cml.kickass -DartifactId=kickassembler -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true -Dversion=5.16
mvn install:install-file -Dmaven.repo.local=./repo/ -Dfile=/Users/jespergravgaard/c64/kickass-plugin-atari-xex/bin/KickAssXexFormat.jar -DgroupId=dk.camelot64.kickass.xexplugin -DartifactId=kickassxexformat -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true -Dversion=1.0
# Finalize by making the local metadata official
pushd ./repo/dk/camelot64/kickass/xexplugin/kickassxexformat
mv maven-metadata-local.xml maven-metadata.xml
mv maven-metadata-local.xml.md5 maven-metadata.xml.md5
mv maven-metadata-local.xml.sha1 maven-metadata.xml.sha1
popd
# Remove stuff that Maven adds, that we don't need
rm -rf ./repo/classworlds
rm -rf ./repo/junit
rm -rf ./repo/org

View File

@@ -1,8 +1,6 @@
// Example usages of conio for Atari XL target. // Example usages of conio for Atari XL target.
#pragma target(atarixl) #pragma target(atarixl)
#pragma encoding(atascii)
#pragma zp_reserve(0x00..0x7f)
#include <atari-xl.h> #include <atari-xl.h>
#include <printf.h> #include <printf.h>

View File

@@ -4,7 +4,7 @@
// Display Lists atariarchives.org/mapping/appendix8.php // Display Lists atariarchives.org/mapping/appendix8.php
#pragma target(atarixl) #pragma target(atarixl)
#pragma emulator("65XEDebugger") #pragma encoding(screencode_atari)
#include <atari-xl.h> #include <atari-xl.h>
void main() { void main() {

View File

@@ -1,7 +1,7 @@
// Raster Bars for Atari XL / XE // Raster Bars for Atari XL / XE
#pragma target(atarixl) #pragma target(atarixl)
#pragma emulator("65XEDebugger") #pragma encoding(screencode_atari)
#include <atari-xl.h> #include <atari-xl.h>
void main() { void main() {

View File

@@ -4,7 +4,7 @@
byte* const BG_COLOR = 0xd021; byte* const BG_COLOR = 0xd021;
byte* const RASTER = 0xd012; byte* const RASTER = 0xd012;
#pragma pc(0x1000) #pragma start_address(0x1000)
void main() { void main() {
asm { sei } asm { sei }
@@ -16,7 +16,7 @@ void main() {
} }
} }
#pragma pc(0x2000) #pragma start_address(0x2000)
void incScreen() { void incScreen() {
*BG_COLOR = *RASTER; *BG_COLOR = *RASTER;

View File

@@ -1,6 +1,6 @@
// Test setting the program PC through a #pc directive // Test setting the program PC through a #pc directive
#pragma pc(0x1000) #pragma start_address(0x1000)
byte* const BG_COLOR = 0xd021; byte* const BG_COLOR = 0xd021;
byte* const RASTER = 0xd012; byte* const RASTER = 0xd012;

View File

@@ -1,7 +1,7 @@
// Tests the target platform ASM6502 // Tests the target platform ASM6502
#pragma target(asm6502) #pragma target(asm6502)
#pragma pc(0x2000) #pragma start_address(0x2000)
unsigned char TABLE[10]; unsigned char TABLE[10];

View File

@@ -1,27 +1,12 @@
// 8 bit converted md5 calculator // 8 bit converted md5 calculator
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="atarixl-md5.xex", type="bin", segments="XexFile"] .file [name="atarixl-md5.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
.const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1
.const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c
// 2-byte saved memory scan counter // 2-byte saved memory scan counter
@@ -39,10 +24,10 @@ ProgramEnd:
.label ROWCRS = $54 .label ROWCRS = $54
// 2-byte cursor column // 2-byte cursor column
.label COLCRS = $55 .label COLCRS = $55
.label h0 = 6 .label h0 = $84
.label h1 = $a .label h1 = $88
.label h2 = $e .label h2 = $8c
.label h3 = $12 .label h3 = $90
.segment Code .segment Code
main: { main: {
// printf("Calculating MD5\n") // printf("Calculating MD5\n")
@@ -71,9 +56,9 @@ main: {
} }
.segment Code .segment Code
// Output a NUL-terminated string at the current cursor position // Output a NUL-terminated string at the current cursor position
// cputs(byte* zp($38) s) // cputs(byte* zp($b6) s)
cputs: { cputs: {
.label s = $38 .label s = $b6
__b1: __b1:
// while (c = *s++) // while (c = *s++)
ldy #0 ldy #0
@@ -93,11 +78,11 @@ cputs: {
jmp __b1 jmp __b1
} }
// Computes the length of the string str up to but not including the terminating null character. // Computes the length of the string str up to but not including the terminating null character.
// strlen(byte* zp($38) str) // strlen(byte* zp($b6) str)
strlen: { strlen: {
.label len = 2 .label len = $80
.label str = $38 .label str = $b6
.label return = 2 .label return = $80
lda #<0 lda #<0
sta.z len sta.z len
sta.z len+1 sta.z len+1
@@ -122,46 +107,46 @@ strlen: {
!: !:
jmp __b1 jmp __b1
} }
// md5(word zp(2) initial_len) // md5(word zp($80) initial_len)
md5: { md5: {
.label __0 = $34 .label __0 = $b2
.label __1 = $34 .label __1 = $b2
.label __2 = $34 .label __2 = $b2
.label __3 = $34 .label __3 = $b2
.label bits_len = $3a .label bits_len = $b8
.label __8 = 2 .label __8 = $80
.label __26 = $27 .label __26 = $a5
.label __27 = $52 .label __27 = $d0
.label __28 = $52 .label __28 = $d0
.label __30 = $27 .label __30 = $a5
.label __31 = $4e .label __31 = $cc
.label __32 = $4e .label __32 = $cc
.label __34 = $2c .label __34 = $aa
.label __37 = $27 .label __37 = $a5
.label __39 = $2c .label __39 = $aa
.label __42 = $27 .label __42 = $a5
.label __43 = $27 .label __43 = $a5
.label __65 = $17 .label __65 = $95
.label __66 = $17 .label __66 = $95
.label __67 = $17 .label __67 = $95
.label __71 = $2b .label __71 = $a9
.label __72 = $44 .label __72 = $c2
.label initial_len = 2 .label initial_len = $80
.label new_len = $34 .label new_len = $b2
.label msg = $36 .label msg = $b4
.label w = $3e .label w = $bc
.label a = $17 .label a = $95
.label b = $1b .label b = $99
.label c = $1f .label c = $9d
.label d = $23 .label d = $a1
.label offset = 4 .label offset = $82
.label f = $27 .label f = $a5
.label g = $2b .label g = $a9
.label temp = $23 .label temp = $a1
.label lr = $4a .label lr = $c8
.label b_1 = $4a .label b_1 = $c8
.label i = $16 .label i = $94
.label __74 = $38 .label __74 = $b6
// initial_len + 8 // initial_len + 8
lda #8 lda #8
clc clc
@@ -1050,10 +1035,10 @@ md5: {
.segment Code .segment Code
// Output one character at the current cursor position // Output one character at the current cursor position
// Moves the cursor forward. Scrolls the entire screen if needed // Moves the cursor forward. Scrolls the entire screen if needed
// cputc(byte zp($33) c) // cputc(byte zp($b1) c)
cputc: { cputc: {
.label convertToScreenCode1_v = c .label convertToScreenCode1_v = c
.label c = $33 .label c = $b1
// if (c == '\r') // if (c == '\r')
lda #'\r' lda #'\r'
cmp.z c cmp.z c
@@ -1116,10 +1101,10 @@ cputc: {
// Allocates memory and returns a pointer to it. Sets allocated memory to zero. // Allocates memory and returns a pointer to it. Sets allocated memory to zero.
// - nitems This is the number of elements to be allocated. // - nitems This is the number of elements to be allocated.
// - size This is the size of elements. // - size This is the size of elements.
// calloc(word zp($5d) nitems) // calloc(word zp($db) nitems)
calloc: { calloc: {
.label return = $36 .label return = $b4
.label nitems = $5d .label nitems = $db
// malloc(nitems*size) // malloc(nitems*size)
lda.z nitems lda.z nitems
sta.z malloc.size sta.z malloc.size
@@ -1137,14 +1122,14 @@ calloc: {
} }
// Copy block of memory (forwards) // Copy block of memory (forwards)
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. // Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
// memcpy(void* zp($5d) destination, byte* zp($2c) source, word zp(2) num) // memcpy(void* zp($db) destination, byte* zp($aa) source, word zp($80) num)
memcpy: { memcpy: {
.label src_end = $5a .label src_end = $d8
.label dst = $5d .label dst = $db
.label src = $2c .label src = $aa
.label destination = $5d .label destination = $db
.label source = $2c .label source = $aa
.label num = 2 .label num = $80
// src_end = (char*)source+num // src_end = (char*)source+num
lda.z source lda.z source
clc clc
@@ -1180,9 +1165,9 @@ memcpy: {
jmp __b1 jmp __b1
} }
// Print an unsigned char using a specific format // Print an unsigned char using a specific format
// printf_uchar(byte register(X) uvalue, byte zp($49) format_zero_padding) // printf_uchar(byte register(X) uvalue, byte zp($c7) format_zero_padding)
printf_uchar: { printf_uchar: {
.label format_zero_padding = $49 .label format_zero_padding = $c7
// printf_buffer.sign = format.sign_always?'+':0 // printf_buffer.sign = format.sign_always?'+':0
// Handle any sign // Handle any sign
lda #0 lda #0
@@ -1198,10 +1183,10 @@ printf_uchar: {
// } // }
rts rts
} }
// print32(dword zp($40) l) // print32(dword zp($be) l)
print32: { print32: {
.label dp = l .label dp = l
.label l = $40 .label l = $be
// printf("%02x%02x%02x%02x", dp[0], dp[1], dp[2], dp[3]) // printf("%02x%02x%02x%02x", dp[0], dp[1], dp[2], dp[3])
ldx.z dp ldx.z dp
lda #1 lda #1
@@ -1236,13 +1221,13 @@ cputln: {
// } // }
rts rts
} }
// leftRotate(dword zp($45) a, byte zp($49) r) // leftRotate(dword zp($c3) a, byte zp($c7) r)
leftRotate: { leftRotate: {
.label p = a .label p = a
.label result = p .label result = p
.label a = $45 .label a = $c3
.label return = $4a .label return = $c8
.label r = $49 .label r = $c7
// if (r < 8) // if (r < 8)
lda.z r lda.z r
cmp #8 cmp #8
@@ -1319,11 +1304,11 @@ leftRotate: {
} }
// mul7(byte register(A) a) // mul7(byte register(A) a)
mul7: { mul7: {
.label __1 = $2c .label __1 = $aa
.label return = $2c .label return = $aa
.label __2 = $5a .label __2 = $d8
.label __3 = $5a .label __3 = $d8
.label __4 = $5a .label __4 = $d8
// ((uint16_t) a) * 7 // ((uint16_t) a) * 7
sta.z __1 sta.z __1
lda #0 lda #0
@@ -1353,10 +1338,10 @@ mul7: {
// } // }
rts rts
} }
// mod16(word zp($2c) a) // mod16(word zp($aa) a)
mod16: { mod16: {
.label t = $2c .label t = $aa
.label a = $2c .label a = $aa
// t = a % 16 // t = a % 16
lda #$10-1 lda #$10-1
and.z t and.z t
@@ -1371,9 +1356,9 @@ mod16: {
} }
// mul3(byte register(A) a) // mul3(byte register(A) a)
mul3: { mul3: {
.label __1 = $2c .label __1 = $aa
.label return = $2c .label return = $aa
.label __2 = $5d .label __2 = $db
// ((uint16_t) a) * 3 // ((uint16_t) a) * 3
sta.z __1 sta.z __1
lda #0 lda #0
@@ -1396,9 +1381,9 @@ mul3: {
} }
// mul5(byte register(A) a) // mul5(byte register(A) a)
mul5: { mul5: {
.label __1 = $2c .label __1 = $aa
.label return = $2c .label return = $aa
.label __2 = $5d .label __2 = $db
// ((uint16_t) a) * 5 // ((uint16_t) a) * 5
sta.z __1 sta.z __1
lda #0 lda #0
@@ -1423,7 +1408,7 @@ mul5: {
} }
// Puts a character to the screen a the current location. Uses internal screencode. Deals with storing the old cursor value // Puts a character to the screen a the current location. Uses internal screencode. Deals with storing the old cursor value
putchar: { putchar: {
.label loc = $5a .label loc = $d8
// **OLDADR = *OLDCHR // **OLDADR = *OLDCHR
lda OLDCHR lda OLDCHR
ldy OLDADR ldy OLDADR
@@ -1449,7 +1434,7 @@ putchar: {
} }
// Handles cursor movement, displaying it if required, and inverting character it is over if there is one (and enabled) // Handles cursor movement, displaying it if required, and inverting character it is over if there is one (and enabled)
setcursor: { setcursor: {
.label loc = $5a .label loc = $d8
// **OLDADR = *OLDCHR // **OLDADR = *OLDCHR
// save the current oldchr into oldadr // save the current oldchr into oldadr
lda OLDCHR lda OLDCHR
@@ -1491,7 +1476,7 @@ setcursor: {
rts rts
} }
newline: { newline: {
.label start = $2e .label start = $ac
// if ((*ROWCRS)++ == CONIO_HEIGHT) // if ((*ROWCRS)++ == CONIO_HEIGHT)
inc ROWCRS inc ROWCRS
lda #$18 lda #$18
@@ -1556,10 +1541,10 @@ newline: {
} }
// Allocates a block of size chars of memory, returning a pointer to the beginning of the block. // Allocates a block of size chars of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
// malloc(word zp($36) size) // malloc(word zp($b4) size)
malloc: { malloc: {
.label mem = $36 .label mem = $b4
.label size = $36 .label size = $b4
// mem = heap_head-size // mem = heap_head-size
sec sec
lda #<HEAP_TOP lda #<HEAP_TOP
@@ -1572,12 +1557,12 @@ malloc: {
rts rts
} }
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp($2e) str, word zp($5d) num) // memset(void* zp($ac) str, word zp($db) num)
memset: { memset: {
.label end = $5d .label end = $db
.label dst = $2e .label dst = $ac
.label str = $2e .label str = $ac
.label num = $5d .label num = $db
// if(num>0) // if(num>0)
lda.z num lda.z num
bne !+ bne !+
@@ -1620,12 +1605,12 @@ memset: {
// - value : The number to be converted to RADIX // - value : The number to be converted to RADIX
// - buffer : receives the string representing the number and zero-termination. // - buffer : receives the string representing the number and zero-termination.
// - radix : The radix to convert the number to (from the enum RADIX) // - radix : The radix to convert the number to (from the enum RADIX)
// uctoa(byte register(X) value, byte* zp($2e) buffer) // uctoa(byte register(X) value, byte* zp($ac) buffer)
uctoa: { uctoa: {
.label digit_value = $5c .label digit_value = $da
.label buffer = $2e .label buffer = $ac
.label digit = $30 .label digit = $ae
.label started = $31 .label started = $af
lda #<printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS lda #<printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
sta.z buffer sta.z buffer
lda #>printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS lda #>printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
@@ -1684,14 +1669,14 @@ uctoa: {
} }
// Print the contents of the number buffer using a specific format. // Print the contents of the number buffer using a specific format.
// This handles minimum length, zero-filling, and left/right justification from the format // This handles minimum length, zero-filling, and left/right justification from the format
// printf_number_buffer(byte zp($56) buffer_sign, byte zp($49) format_zero_padding) // printf_number_buffer(byte zp($d4) buffer_sign, byte zp($c7) format_zero_padding)
printf_number_buffer: { printf_number_buffer: {
.const format_min_length = 2 .const format_min_length = 2
.label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS .label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
.label __19 = 2 .label __19 = $80
.label buffer_sign = $56 .label buffer_sign = $d4
.label format_zero_padding = $49 .label format_zero_padding = $c7
.label padding = $30 .label padding = $ae
// strlen(buffer.digits) // strlen(buffer.digits)
lda #<buffer_digits lda #<buffer_digits
sta.z strlen.str sta.z strlen.str
@@ -1787,10 +1772,10 @@ move16Left: {
// } // }
rts rts
} }
// rotateLeft(byte* zp($57) p, byte zp($59) r) // rotateLeft(byte* zp($d5) p, byte zp($d7) r)
rotateLeft: { rotateLeft: {
.label p = $57 .label p = $d5
.label r = $59 .label r = $d7
// kickasm // kickasm
ldx #r ldx #r
!s: !s:
@@ -1827,12 +1812,12 @@ move8Left: {
} }
// Return a pointer to the location of the cursor // Return a pointer to the location of the cursor
cursorLocation: { cursorLocation: {
.label __0 = $5a .label __0 = $d8
.label __1 = $5a .label __1 = $d8
.label __3 = $5a .label __3 = $d8
.label return = $5a .label return = $d8
.label __4 = $5d .label __4 = $db
.label __5 = $5a .label __5 = $d8
// (word)(*ROWCRS)*CONIO_WIDTH // (word)(*ROWCRS)*CONIO_WIDTH
lda ROWCRS lda ROWCRS
sta.z __3 sta.z __3
@@ -1886,10 +1871,10 @@ cursorLocation: {
// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased.
// (For decimal the subs used are 10000, 1000, 100, 10, 1) // (For decimal the subs used are 10000, 1000, 100, 10, 1)
// returns : the value reduced by sub * digit so that it is less than sub. // returns : the value reduced by sub * digit so that it is less than sub.
// uctoa_append(byte* zp($2e) buffer, byte register(X) value, byte zp($5c) sub) // uctoa_append(byte* zp($ac) buffer, byte register(X) value, byte zp($da) sub)
uctoa_append: { uctoa_append: {
.label buffer = $2e .label buffer = $ac
.label sub = $5c .label sub = $da
ldy #0 ldy #0
__b1: __b1:
// while (value >= sub) // while (value >= sub)
@@ -1912,11 +1897,11 @@ uctoa_append: {
jmp __b1 jmp __b1
} }
// Print a padding char a number of times // Print a padding char a number of times
// printf_padding(byte zp($5c) pad, byte zp($31) length) // printf_padding(byte zp($da) pad, byte zp($af) length)
printf_padding: { printf_padding: {
.label i = $32 .label i = $b0
.label length = $31 .label length = $af
.label pad = $5c .label pad = $da
lda #0 lda #0
sta.z i sta.z i
__b1: __b1:

File diff suppressed because one or more lines are too long

View File

@@ -16,13 +16,13 @@ const byte SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c
void* calloc(word calloc::nitems , word calloc::size) void* calloc(word calloc::nitems , word calloc::size)
void* calloc::mem void* calloc::mem
word calloc::nitems word calloc::nitems
word calloc::nitems#0 nitems zp[2]:93 53.25 word calloc::nitems#0 nitems zp[2]:219 53.25
void* calloc::return void* calloc::return
void* calloc::return#0 return zp[2]:54 35.5 void* calloc::return#0 return zp[2]:180 35.5
void* calloc::return#2 return zp[2]:54 22.0 void* calloc::return#2 return zp[2]:180 22.0
word calloc::size word calloc::size
void cputc(volatile byte cputc::c) void cputc(volatile byte cputc::c)
volatile byte cputc::c loadstore zp[1]:51 2.3853923693384613E10 volatile byte cputc::c loadstore zp[1]:177 2.3853923693384613E10
byte cputc::convertToScreenCode1_return byte cputc::convertToScreenCode1_return
byte cputc::convertToScreenCode1_return#0 reg byte x 1.833333333336667E11 byte cputc::convertToScreenCode1_return#0 reg byte x 1.833333333336667E11
byte* cputc::convertToScreenCode1_v byte* cputc::convertToScreenCode1_v
@@ -32,124 +32,124 @@ void cputs(to_nomodify byte* cputs::s)
byte cputs::c byte cputs::c
byte cputs::c#1 reg byte a 1.00000001E8 byte cputs::c#1 reg byte a 1.00000001E8
to_nomodify byte* cputs::s to_nomodify byte* cputs::s
to_nomodify byte* cputs::s#0 s zp[2]:56 5.00000005E7 to_nomodify byte* cputs::s#0 s zp[2]:182 5.00000005E7
to_nomodify byte* cputs::s#10 s zp[2]:56 1.55000002E8 to_nomodify byte* cputs::s#10 s zp[2]:182 1.55000002E8
to_nomodify byte* cputs::s#11 s zp[2]:56 1.0000001E7 to_nomodify byte* cputs::s#11 s zp[2]:182 1.0000001E7
byte* cursorLocation() byte* cursorLocation()
word~ cursorLocation::$0 zp[2]:90 2.00000000000002E14 word~ cursorLocation::$0 zp[2]:216 2.00000000000002E14
byte*~ cursorLocation::$1 zp[2]:90 2.00000000000002E14 byte*~ cursorLocation::$1 zp[2]:216 2.00000000000002E14
word~ cursorLocation::$3 zp[2]:90 1.500000000000015E14 word~ cursorLocation::$3 zp[2]:216 1.500000000000015E14
word~ cursorLocation::$4 zp[2]:93 2.00000000000002E14 word~ cursorLocation::$4 zp[2]:219 2.00000000000002E14
word~ cursorLocation::$5 zp[2]:90 2.00000000000002E14 word~ cursorLocation::$5 zp[2]:216 2.00000000000002E14
byte* cursorLocation::return byte* cursorLocation::return
byte* cursorLocation::return#0 return zp[2]:90 2.000000000002E12 byte* cursorLocation::return#0 return zp[2]:216 2.000000000002E12
byte* cursorLocation::return#1 return zp[2]:90 2.775000000000075E13 byte* cursorLocation::return#1 return zp[2]:216 2.775000000000075E13
byte* cursorLocation::return#3 return zp[2]:90 2.0000000000002E13 byte* cursorLocation::return#3 return zp[2]:216 2.0000000000002E13
dword h0 dword h0
dword h0#10 h0 zp[4]:6 2.312977099236641 dword h0#10 h0 zp[4]:132 2.312977099236641
dword h0#3 h0 zp[4]:6 40.4 dword h0#3 h0 zp[4]:132 40.4
dword h1 dword h1
dword h1#10 h1 zp[4]:10 2.2954545454545454 dword h1#10 h1 zp[4]:136 2.2954545454545454
dword h1#3 h1 zp[4]:10 50.5 dword h1#3 h1 zp[4]:136 50.5
dword h2 dword h2
dword h2#10 h2 zp[4]:14 2.2781954887218046 dword h2#10 h2 zp[4]:140 2.2781954887218046
dword h2#3 h2 zp[4]:14 67.33333333333333 dword h2#3 h2 zp[4]:140 67.33333333333333
dword h3 dword h3
dword h3#10 h3 zp[4]:18 2.261194029850746 dword h3#10 h3 zp[4]:144 2.261194029850746
dword h3#3 h3 zp[4]:18 101.0 dword h3#3 h3 zp[4]:144 101.0
byte* heap_head byte* heap_head
dword leftRotate(volatile dword leftRotate::a , byte leftRotate::r) dword leftRotate(volatile dword leftRotate::a , byte leftRotate::r)
byte~ leftRotate::$5 reg byte x 10001.0 byte~ leftRotate::$5 reg byte x 10001.0
byte~ leftRotate::$9 reg byte x 10001.0 byte~ leftRotate::$9 reg byte x 10001.0
volatile dword leftRotate::a loadstore zp[4]:69 10010.0 volatile dword leftRotate::a loadstore zp[4]:195 10010.0
byte* leftRotate::p byte* leftRotate::p
const byte* leftRotate::p#1 p = (byte*)&leftRotate::a const byte* leftRotate::p#1 p = (byte*)&leftRotate::a
byte leftRotate::r byte leftRotate::r
byte leftRotate::r#0 r zp[1]:73 7100.800000000001 byte leftRotate::r#0 r zp[1]:199 7100.800000000001
dword* leftRotate::result dword* leftRotate::result
const dword* leftRotate::result#0 result = (dword*)leftRotate::p#1 const dword* leftRotate::result#0 result = (dword*)leftRotate::p#1
dword leftRotate::return dword leftRotate::return
dword leftRotate::return#0 return zp[4]:74 3667.333333333333 dword leftRotate::return#0 return zp[4]:200 3667.333333333333
dword leftRotate::return#2 return zp[4]:74 2002.0 dword leftRotate::return#2 return zp[4]:200 2002.0
void main() void main()
const byte* main::message = "The quick brown fox jumps over the lazy dog"at const byte* main::message = "The quick brown fox jumps over the lazy dog"at
const byte* main::s[$11] = "Calculating MD5 const byte* main::s[$11] = "Calculating MD5
"at "at
void* malloc(word malloc::size) void* malloc(word malloc::size)
byte* malloc::mem byte* malloc::mem
byte* malloc::mem#0 mem zp[2]:54 333.6666666666667 byte* malloc::mem#0 mem zp[2]:180 333.6666666666667
void* malloc::return void* malloc::return
word malloc::size word malloc::size
word malloc::size#0 size zp[2]:54 1102.0 word malloc::size#0 size zp[2]:180 1102.0
void md5(byte* md5::initial_msg , word md5::initial_len) void md5(byte* md5::initial_msg , word md5::initial_len)
word~ md5::$0 zp[2]:52 22.0 word~ md5::$0 zp[2]:178 22.0
word~ md5::$1 zp[2]:52 22.0 word~ md5::$1 zp[2]:178 22.0
word~ md5::$2 zp[2]:52 22.0 word~ md5::$2 zp[2]:178 22.0
byte~ md5::$24 reg byte a 2002.0 byte~ md5::$24 reg byte a 2002.0
byte~ md5::$25 reg byte a 1251.25 byte~ md5::$25 reg byte a 1251.25
dword~ md5::$26 zp[4]:39 667.3333333333334 dword~ md5::$26 zp[4]:165 667.3333333333334
dword~ md5::$27 zp[4]:82 2002.0 dword~ md5::$27 zp[4]:208 2002.0
dword~ md5::$28 zp[4]:82 2002.0 dword~ md5::$28 zp[4]:208 2002.0
word~ md5::$3 zp[2]:52 22.0 word~ md5::$3 zp[2]:178 22.0
dword~ md5::$30 zp[4]:39 667.3333333333334 dword~ md5::$30 zp[4]:165 667.3333333333334
dword~ md5::$31 zp[4]:78 2002.0 dword~ md5::$31 zp[4]:204 2002.0
dword~ md5::$32 zp[4]:78 2002.0 dword~ md5::$32 zp[4]:204 2002.0
word~ md5::$34 zp[2]:44 2002.0 word~ md5::$34 zp[2]:170 2002.0
dword~ md5::$37 zp[4]:39 2002.0 dword~ md5::$37 zp[4]:165 2002.0
word~ md5::$39 zp[2]:44 2002.0 word~ md5::$39 zp[2]:170 2002.0
dword~ md5::$42 zp[4]:39 2002.0 dword~ md5::$42 zp[4]:165 2002.0
dword~ md5::$43 zp[4]:39 2002.0 dword~ md5::$43 zp[4]:165 2002.0
dword~ md5::$65 zp[4]:23 2002.0 dword~ md5::$65 zp[4]:149 2002.0
dword~ md5::$66 zp[4]:23 2002.0 dword~ md5::$66 zp[4]:149 2002.0
dword~ md5::$67 zp[4]:23 2002.0 dword~ md5::$67 zp[4]:149 2002.0
byte~ md5::$71 zp[1]:43 117.76470588235294 byte~ md5::$71 zp[1]:169 117.76470588235294
byte~ md5::$72 zp[1]:68 176.64705882352942 byte~ md5::$72 zp[1]:194 176.64705882352942
byte*~ md5::$74 zp[2]:56 22.0 byte*~ md5::$74 zp[2]:182 22.0
word~ md5::$8 zp[2]:2 22.0 word~ md5::$8 zp[2]:128 22.0
dword md5::a dword md5::a
dword md5::a#0 a zp[4]:23 50.5 dword md5::a#0 a zp[4]:149 50.5
dword md5::a#11 a zp[4]:23 38.236363636363635 dword md5::a#11 a zp[4]:149 38.236363636363635
dword md5::a#56 a zp[4]:23 500.5 dword md5::a#56 a zp[4]:149 500.5
dword md5::b dword md5::b
dword md5::b#0 b zp[4]:27 67.33333333333333 dword md5::b#0 b zp[4]:153 67.33333333333333
dword md5::b#1 b_1 zp[4]:74 667.3333333333334 dword md5::b#1 b_1 zp[4]:200 667.3333333333334
dword md5::b#10 b zp[4]:27 74.88617886178862 dword md5::b#10 b zp[4]:153 74.88617886178862
dword md5::b#57 b zp[4]:27 667.3333333333334 dword md5::b#57 b zp[4]:153 667.3333333333334
volatile dword md5::bits_len loadstore zp[4]:58 110.0 volatile dword md5::bits_len loadstore zp[4]:184 110.0
dword md5::c dword md5::c
dword md5::c#0 c zp[4]:31 101.0 dword md5::c#0 c zp[4]:157 101.0
dword md5::c#10 c zp[4]:31 57.67199999999998 dword md5::c#10 c zp[4]:157 57.67199999999998
dword md5::c#57 c zp[4]:31 1001.0 dword md5::c#57 c zp[4]:157 1001.0
dword md5::d dword md5::d
dword md5::d#0 d zp[4]:35 202.0 dword md5::d#0 d zp[4]:161 202.0
dword md5::f dword md5::f
dword md5::f#1 f zp[4]:39 1001.0 dword md5::f#1 f zp[4]:165 1001.0
dword md5::f#10 f zp[4]:39 159.25 dword md5::f#10 f zp[4]:165 159.25
dword md5::f#12 f zp[4]:39 222.44444444444446 dword md5::f#12 f zp[4]:165 222.44444444444446
dword md5::f#13 f zp[4]:39 222.44444444444446 dword md5::f#13 f zp[4]:165 222.44444444444446
dword md5::f#14 f zp[4]:39 250.25 dword md5::f#14 f zp[4]:165 250.25
byte md5::g byte md5::g
byte md5::g#10 g zp[1]:43 500.50000000000006 byte md5::g#10 g zp[1]:169 500.50000000000006
byte md5::g#2 g zp[1]:43 2002.0 byte md5::g#2 g zp[1]:169 2002.0
byte md5::g#3 g zp[1]:43 2002.0 byte md5::g#3 g zp[1]:169 2002.0
byte md5::g#36 g zp[1]:43 2002.0 byte md5::g#36 g zp[1]:169 2002.0
byte md5::g#4 g zp[1]:43 2002.0 byte md5::g#4 g zp[1]:169 2002.0
byte md5::i byte md5::i
byte md5::i#1 i zp[1]:22 400.4 byte md5::i#1 i zp[1]:148 400.4
byte md5::i#10 i zp[1]:22 100.94117647058822 byte md5::i#10 i zp[1]:148 100.94117647058822
word md5::initial_len word md5::initial_len
word md5::initial_len#0 initial_len zp[2]:2 3.0666666666666664 word md5::initial_len#0 initial_len zp[2]:128 3.0666666666666664
byte* md5::initial_msg byte* md5::initial_msg
const dword* md5::k[] = { $d76aa478, $e8c7b756, $242070db, $c1bdceee, $f57c0faf, $4787c62a, $a8304613, $fd469501, $698098d8, $8b44f7af, $ffff5bb1, $895cd7be, $6b901122, $fd987193, $a679438e, $49b40821, $f61e2562, $c040b340, $265e5a51, $e9b6c7aa, $d62f105d, $2441453, $d8a1e681, $e7d3fbc8, $21e1cde6, $c33707d6, $f4d50d87, $455a14ed, $a9e3e905, $fcefa3f8, $676f02d9, $8d2a4c8a, $fffa3942, $8771f681, $6d9d6122, $fde5380c, $a4beea44, $4bdecfa9, $f6bb4b60, $bebfbc70, $289b7ec6, $eaa127fa, $d4ef3085, $4881d05, $d9d4d039, $e6db99e5, $1fa27cf8, $c4ac5665, $f4292244, $432aff97, $ab9423a7, $fc93a039, $655b59c3, $8f0ccc92, $ffeff47d, $85845dd1, $6fa87e4f, $fe2ce6e0, $a3014314, $4e0811a1, $f7537e82, $bd3af235, $2ad7d2bb, $eb86d391 } const dword* md5::k[] = { $d76aa478, $e8c7b756, $242070db, $c1bdceee, $f57c0faf, $4787c62a, $a8304613, $fd469501, $698098d8, $8b44f7af, $ffff5bb1, $895cd7be, $6b901122, $fd987193, $a679438e, $49b40821, $f61e2562, $c040b340, $265e5a51, $e9b6c7aa, $d62f105d, $2441453, $d8a1e681, $e7d3fbc8, $21e1cde6, $c33707d6, $f4d50d87, $455a14ed, $a9e3e905, $fcefa3f8, $676f02d9, $8d2a4c8a, $fffa3942, $8771f681, $6d9d6122, $fde5380c, $a4beea44, $4bdecfa9, $f6bb4b60, $bebfbc70, $289b7ec6, $eaa127fa, $d4ef3085, $4881d05, $d9d4d039, $e6db99e5, $1fa27cf8, $c4ac5665, $f4292244, $432aff97, $ab9423a7, $fc93a039, $655b59c3, $8f0ccc92, $ffeff47d, $85845dd1, $6fa87e4f, $fe2ce6e0, $a3014314, $4e0811a1, $f7537e82, $bd3af235, $2ad7d2bb, $eb86d391 }
dword md5::lr dword md5::lr
dword md5::lr#0 lr zp[4]:74 2002.0 dword md5::lr#0 lr zp[4]:200 2002.0
byte* md5::msg byte* md5::msg
void* md5::msg#1 msg zp[2]:54 0.07482993197278912 void* md5::msg#1 msg zp[2]:180 0.07482993197278912
word md5::new_len word md5::new_len
word md5::new_len#0 new_len zp[2]:52 0.8874172185430463 word md5::new_len#0 new_len zp[2]:178 0.8874172185430463
signed word md5::offset signed word md5::offset
signed word md5::offset#1 offset zp[2]:4 202.0 signed word md5::offset#1 offset zp[2]:130 202.0
signed word md5::offset#2 offset zp[2]:4 2.9925925925925925 signed word md5::offset#2 offset zp[2]:130 2.9925925925925925
const byte* md5::r[] = { 7, $c, $11, $16, 7, $c, $11, $16, 7, $c, $11, $16, 7, $c, $11, $16, 5, 9, $e, $14, 5, 9, $e, $14, 5, 9, $e, $14, 5, 9, $e, $14, 4, $b, $10, $17, 4, $b, $10, $17, 4, $b, $10, $17, 4, $b, $10, $17, 6, $a, $f, $15, 6, $a, $f, $15, 6, $a, $f, $15, 6, $a, $f, $15 } const byte* md5::r[] = { 7, $c, $11, $16, 7, $c, $11, $16, 7, $c, $11, $16, 7, $c, $11, $16, 5, 9, $e, $14, 5, 9, $e, $14, 5, 9, $e, $14, 5, 9, $e, $14, 4, $b, $10, $17, 4, $b, $10, $17, 4, $b, $10, $17, 4, $b, $10, $17, 6, $a, $f, $15, 6, $a, $f, $15, 6, $a, $f, $15, 6, $a, $f, $15 }
const byte* md5::s[3] = ": "at const byte* md5::s[3] = ": "at
const byte* md5::s1[4] = "f: "at const byte* md5::s1[4] = "f: "at
@@ -160,65 +160,65 @@ const byte* md5::s5[4] = "r: "at
const byte* md5::s6[2] = " const byte* md5::s6[2] = "
"at "at
dword md5::temp dword md5::temp
dword md5::temp#0 temp zp[4]:35 66.7479674796748 dword md5::temp#0 temp zp[4]:161 66.7479674796748
dword md5::temp#16 temp zp[4]:35 2002.0 dword md5::temp#16 temp zp[4]:161 2002.0
dword* md5::w dword* md5::w
byte* md5::w#0 w zp[2]:62 0.7829457364341085 byte* md5::w#0 w zp[2]:188 0.7829457364341085
void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num) void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num)
void* memcpy::destination void* memcpy::destination
void* memcpy::destination#0 destination zp[2]:93 1.000000000001E12 void* memcpy::destination#0 destination zp[2]:219 1.000000000001E12
byte* memcpy::destination#2 destination zp[2]:93 11.0 byte* memcpy::destination#2 destination zp[2]:219 11.0
void* memcpy::destination#3 destination zp[2]:93 3.33333333341E11 void* memcpy::destination#3 destination zp[2]:219 3.33333333341E11
void* memcpy::destination#7 destination zp[2]:93 22.0 void* memcpy::destination#7 destination zp[2]:219 22.0
void* memcpy::destination#8 destination zp[2]:93 22.0 void* memcpy::destination#8 destination zp[2]:219 22.0
byte* memcpy::dst byte* memcpy::dst
byte* memcpy::dst#1 dst zp[2]:93 1.0E16 byte* memcpy::dst#1 dst zp[2]:219 1.0E16
byte* memcpy::dst#2 dst zp[2]:93 1.0003333333333334E16 byte* memcpy::dst#2 dst zp[2]:219 1.0003333333333334E16
byte* memcpy::dst#4 dst zp[2]:93 2.0000000000002E13 byte* memcpy::dst#4 dst zp[2]:219 2.0000000000002E13
word memcpy::num word memcpy::num
word memcpy::num#1 num zp[2]:2 11.0 word memcpy::num#1 num zp[2]:128 11.0
word memcpy::num#3 num zp[2]:2 1.0000000000012E13 word memcpy::num#3 num zp[2]:128 1.0000000000012E13
void* memcpy::return void* memcpy::return
void* memcpy::source void* memcpy::source
byte* memcpy::source#0 source zp[2]:44 5.000000000005E11 byte* memcpy::source#0 source zp[2]:170 5.000000000005E11
void* memcpy::source#3 source zp[2]:44 5.000000000005E11 void* memcpy::source#3 source zp[2]:170 5.000000000005E11
void* memcpy::source#4 source zp[2]:44 2.000000000002E12 void* memcpy::source#4 source zp[2]:170 2.000000000002E12
byte* memcpy::src byte* memcpy::src
byte* memcpy::src#1 src zp[2]:44 2.0E16 byte* memcpy::src#1 src zp[2]:170 2.0E16
byte* memcpy::src#2 src zp[2]:44 1.00025E16 byte* memcpy::src#2 src zp[2]:170 1.00025E16
byte* memcpy::src#4 src zp[2]:44 1.0000000000001E13 byte* memcpy::src#4 src zp[2]:170 1.0000000000001E13
byte* memcpy::src_end byte* memcpy::src_end
byte* memcpy::src_end#0 src_end zp[2]:90 1.25125E15 byte* memcpy::src_end#0 src_end zp[2]:216 1.25125E15
void* memset(void* memset::str , byte memset::c , word memset::num) void* memset(void* memset::str , byte memset::c , word memset::num)
byte memset::c byte memset::c
byte* memset::dst byte* memset::dst
byte* memset::dst#1 dst zp[2]:46 2.0E16 byte* memset::dst#1 dst zp[2]:172 2.0E16
byte* memset::dst#2 dst zp[2]:46 1.3336666666666668E16 byte* memset::dst#2 dst zp[2]:172 1.3336666666666668E16
byte* memset::dst#4 dst zp[2]:46 2.0000000000002E13 byte* memset::dst#4 dst zp[2]:172 2.0000000000002E13
byte* memset::end byte* memset::end
byte* memset::end#0 end zp[2]:93 1.6683333333333335E15 byte* memset::end#0 end zp[2]:219 1.6683333333333335E15
word memset::num word memset::num
word memset::num#0 num zp[2]:93 101.0 word memset::num#0 num zp[2]:219 101.0
word memset::num#2 num zp[2]:93 1.00000000000515E13 word memset::num#2 num zp[2]:219 1.00000000000515E13
void* memset::return void* memset::return
void* memset::str void* memset::str
void* memset::str#0 str zp[2]:46 202.0 void* memset::str#0 str zp[2]:172 202.0
byte* memset::str#1 str zp[2]:46 1.000000000001E12 byte* memset::str#1 str zp[2]:172 1.000000000001E12
void* memset::str#3 str zp[2]:46 3.333333333673334E11 void* memset::str#3 str zp[2]:172 3.333333333673334E11
void* memset::str#8 str zp[2]:46 2.000000000002E12 void* memset::str#8 str zp[2]:172 2.000000000002E12
byte mod16(word mod16::a) byte mod16(word mod16::a)
word mod16::a word mod16::a
word mod16::a#0 a zp[2]:44 2002.0 word mod16::a#0 a zp[2]:170 2002.0
word mod16::a#1 a zp[2]:44 2002.0 word mod16::a#1 a zp[2]:170 2002.0
word mod16::a#2 a zp[2]:44 2002.0 word mod16::a#2 a zp[2]:170 2002.0
word mod16::a#3 a zp[2]:44 13004.0 word mod16::a#3 a zp[2]:170 13004.0
byte mod16::return byte mod16::return
byte mod16::return#0 reg byte a 2600.8 byte mod16::return#0 reg byte a 2600.8
byte mod16::return#2 reg byte a 2002.0 byte mod16::return#2 reg byte a 2002.0
byte mod16::return#3 reg byte a 2002.0 byte mod16::return#3 reg byte a 2002.0
byte mod16::return#4 reg byte a 2002.0 byte mod16::return#4 reg byte a 2002.0
word mod16::t word mod16::t
word mod16::t#0 t zp[2]:44 20002.0 word mod16::t#0 t zp[2]:170 20002.0
void move16Left(byte* move16Left::p) void move16Left(byte* move16Left::p)
byte* move16Left::p byte* move16Left::p
byte move16Left::s byte move16Left::s
@@ -230,46 +230,46 @@ byte* move8Left::p
byte move8Left::t byte move8Left::t
byte move8Left::t#0 reg byte x 50000.5 byte move8Left::t#0 reg byte x 50000.5
word mul3(byte mul3::a) word mul3(byte mul3::a)
word~ mul3::$1 zp[2]:44 15001.5 word~ mul3::$1 zp[2]:170 15001.5
word~ mul3::$2 zp[2]:93 20002.0 word~ mul3::$2 zp[2]:219 20002.0
byte mul3::a byte mul3::a
byte mul3::a#0 reg byte a 1001.0 byte mul3::a#0 reg byte a 1001.0
word mul3::return word mul3::return
word mul3::return#0 return zp[2]:44 3667.333333333333 word mul3::return#0 return zp[2]:170 3667.333333333333
word mul3::return#2 return zp[2]:44 2002.0 word mul3::return#2 return zp[2]:170 2002.0
word mul5(byte mul5::a) word mul5(byte mul5::a)
word~ mul5::$1 zp[2]:44 15001.5 word~ mul5::$1 zp[2]:170 15001.5
word~ mul5::$2 zp[2]:93 20002.0 word~ mul5::$2 zp[2]:219 20002.0
byte mul5::a byte mul5::a
byte mul5::a#0 reg byte a 1001.0 byte mul5::a#0 reg byte a 1001.0
word mul5::return word mul5::return
word mul5::return#0 return zp[2]:44 3667.333333333333 word mul5::return#0 return zp[2]:170 3667.333333333333
word mul5::return#2 return zp[2]:44 2002.0 word mul5::return#2 return zp[2]:170 2002.0
word mul7(byte mul7::a) word mul7(byte mul7::a)
word~ mul7::$1 zp[2]:44 10001.0 word~ mul7::$1 zp[2]:170 10001.0
word~ mul7::$2 zp[2]:90 20002.0 word~ mul7::$2 zp[2]:216 20002.0
word~ mul7::$3 zp[2]:90 20002.0 word~ mul7::$3 zp[2]:216 20002.0
word~ mul7::$4 zp[2]:90 20002.0 word~ mul7::$4 zp[2]:216 20002.0
byte mul7::a byte mul7::a
byte mul7::a#0 reg byte a 1001.0 byte mul7::a#0 reg byte a 1001.0
word mul7::return word mul7::return
word mul7::return#0 return zp[2]:44 3667.333333333333 word mul7::return#0 return zp[2]:170 3667.333333333333
word mul7::return#2 return zp[2]:44 2002.0 word mul7::return#2 return zp[2]:170 2002.0
void newline() void newline()
byte* newline::start byte* newline::start
byte* newline::start#0 start zp[2]:46 6.000000000006001E11 byte* newline::start#0 start zp[2]:172 6.000000000006001E11
void print32(volatile dword print32::l) void print32(volatile dword print32::l)
byte* print32::dp byte* print32::dp
const byte* print32::dp#1 dp = (byte*)&print32::l const byte* print32::dp#1 dp = (byte*)&print32::l
volatile dword print32::l loadstore zp[4]:64 100100.0 volatile dword print32::l loadstore zp[4]:190 100100.0
struct printf_buffer_number printf_buffer loadstore mem[12] = {} struct printf_buffer_number printf_buffer loadstore mem[12] = {}
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) 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]:2 1000001.0 word~ printf_number_buffer::$19 zp[2]:128 1000001.0
struct printf_buffer_number printf_number_buffer::buffer struct printf_buffer_number printf_number_buffer::buffer
byte* printf_number_buffer::buffer_digits byte* printf_number_buffer::buffer_digits
const byte* printf_number_buffer::buffer_digits#0 buffer_digits = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS const byte* printf_number_buffer::buffer_digits#0 buffer_digits = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
byte printf_number_buffer::buffer_sign byte printf_number_buffer::buffer_sign
byte printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:86 155000.2 byte printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:212 155000.2
struct printf_format_number printf_number_buffer::format struct printf_format_number printf_number_buffer::format
byte printf_number_buffer::format_justify_left byte printf_number_buffer::format_justify_left
byte printf_number_buffer::format_min_length byte printf_number_buffer::format_min_length
@@ -278,24 +278,24 @@ byte printf_number_buffer::format_radix
byte printf_number_buffer::format_sign_always byte printf_number_buffer::format_sign_always
byte printf_number_buffer::format_upper_case byte printf_number_buffer::format_upper_case
byte printf_number_buffer::format_zero_padding byte printf_number_buffer::format_zero_padding
byte printf_number_buffer::format_zero_padding#0 format_zero_padding zp[1]:73 100000.14285714286 byte printf_number_buffer::format_zero_padding#0 format_zero_padding zp[1]:199 100000.14285714286
signed byte printf_number_buffer::len signed byte printf_number_buffer::len
signed byte printf_number_buffer::len#0 reg byte x 1500001.5 signed byte printf_number_buffer::len#0 reg byte x 1500001.5
signed byte printf_number_buffer::len#1 reg byte x 2000002.0 signed byte printf_number_buffer::len#1 reg byte x 2000002.0
signed byte printf_number_buffer::len#2 reg byte x 3000003.0 signed byte printf_number_buffer::len#2 reg byte x 3000003.0
signed byte printf_number_buffer::padding signed byte printf_number_buffer::padding
signed byte printf_number_buffer::padding#1 padding zp[1]:48 1000001.0 signed byte printf_number_buffer::padding#1 padding zp[1]:174 1000001.0
signed byte printf_number_buffer::padding#10 padding zp[1]:48 300000.30000000005 signed byte printf_number_buffer::padding#10 padding zp[1]:174 300000.30000000005
void printf_padding(byte printf_padding::pad , byte printf_padding::length) void printf_padding(byte printf_padding::pad , byte printf_padding::length)
byte printf_padding::i byte printf_padding::i
byte printf_padding::i#1 i zp[1]:50 2.0000000002E10 byte printf_padding::i#1 i zp[1]:176 2.0000000002E10
byte printf_padding::i#2 i zp[1]:50 7.50000000075E9 byte printf_padding::i#2 i zp[1]:176 7.50000000075E9
byte printf_padding::length byte printf_padding::length
byte printf_padding::length#0 length zp[1]:49 2000002.0 byte printf_padding::length#0 length zp[1]:175 2000002.0
byte printf_padding::length#1 length zp[1]:49 2000002.0 byte printf_padding::length#1 length zp[1]:175 2000002.0
byte printf_padding::length#4 length zp[1]:49 1.6670000005E9 byte printf_padding::length#4 length zp[1]:175 1.6670000005E9
byte printf_padding::pad byte printf_padding::pad
byte printf_padding::pad#5 pad zp[1]:92 1.6666666668333333E9 byte printf_padding::pad#5 pad zp[1]:218 1.6666666668333333E9
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) 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)
struct printf_format_number printf_uchar::format struct printf_format_number printf_uchar::format
byte printf_uchar::format_justify_left byte printf_uchar::format_justify_left
@@ -304,7 +304,7 @@ byte printf_uchar::format_radix
byte printf_uchar::format_sign_always byte printf_uchar::format_sign_always
byte printf_uchar::format_upper_case byte printf_uchar::format_upper_case
byte printf_uchar::format_zero_padding byte printf_uchar::format_zero_padding
byte printf_uchar::format_zero_padding#10 format_zero_padding zp[1]:73 20000.2 byte printf_uchar::format_zero_padding#10 format_zero_padding zp[1]:199 20000.2
byte printf_uchar::uvalue byte printf_uchar::uvalue
byte printf_uchar::uvalue#0 reg byte x 20002.0 byte printf_uchar::uvalue#0 reg byte x 20002.0
byte printf_uchar::uvalue#1 reg byte x 20002.0 byte printf_uchar::uvalue#1 reg byte x 20002.0
@@ -317,7 +317,7 @@ byte printf_uchar::uvalue#6 reg byte x 2002.0
void putchar(byte putchar::code) void putchar(byte putchar::code)
byte putchar::code byte putchar::code
byte* putchar::loc byte* putchar::loc
byte* putchar::loc#0 loc zp[2]:90 1.000000000001E12 byte* putchar::loc#0 loc zp[2]:216 1.000000000001E12
byte putchar::newChar byte putchar::newChar
byte putchar::newChar#0 reg byte a 1.5000000000015E12 byte putchar::newChar#0 reg byte a 1.5000000000015E12
const byte* rawmap[$100] = kickasm {{ .var ht = Hashtable().put(0,64, 1,0, 2,32, 3,96) // the table for converting bit 6,7 into ora value const byte* rawmap[$100] = kickasm {{ .var ht = Hashtable().put(0,64, 1,0, 2,32, 3,96) // the table for converting bit 6,7 into ora value
@@ -328,42 +328,42 @@ const byte* rawmap[$100] = kickasm {{ .var ht = Hashtable().put(0,64, 1,0, 2,32
} }
}} }}
void rotateLeft(volatile byte* rotateLeft::p , volatile byte rotateLeft::r) void rotateLeft(volatile byte* rotateLeft::p , volatile byte rotateLeft::r)
volatile byte* rotateLeft::p loadstore zp[2]:87 5000.5 volatile byte* rotateLeft::p loadstore zp[2]:213 5000.5
volatile byte rotateLeft::r loadstore zp[1]:89 10001.0 volatile byte rotateLeft::r loadstore zp[1]:215 10001.0
void setcursor() void setcursor()
byte setcursor::c byte setcursor::c
byte setcursor::c#0 reg byte x 7.50000000000075E12 byte setcursor::c#0 reg byte x 7.50000000000075E12
byte setcursor::c#1 reg byte a 2.0000000000002E13 byte setcursor::c#1 reg byte a 2.0000000000002E13
byte* setcursor::loc byte* setcursor::loc
byte* setcursor::loc#0 loc zp[2]:90 1.0000000000001E13 byte* setcursor::loc#0 loc zp[2]:216 1.0000000000001E13
word strlen(byte* strlen::str) word strlen(byte* strlen::str)
word strlen::len word strlen::len
word strlen::len#1 len zp[2]:2 1.00000001E8 word strlen::len#1 len zp[2]:128 1.00000001E8
word strlen::len#2 len zp[2]:2 4.0200001E7 word strlen::len#2 len zp[2]:128 4.0200001E7
word strlen::return word strlen::return
word strlen::return#2 return zp[2]:2 2000002.0 word strlen::return#2 return zp[2]:128 2000002.0
word strlen::return#3 return zp[2]:2 4.0 word strlen::return#3 return zp[2]:128 4.0
byte* strlen::str byte* strlen::str
byte* strlen::str#0 str zp[2]:56 2.00000002E8 byte* strlen::str#0 str zp[2]:182 2.00000002E8
byte* strlen::str#3 str zp[2]:56 1.0333333466666667E8 byte* strlen::str#3 str zp[2]:182 1.0333333466666667E8
byte* strlen::str#5 str zp[2]:56 1.0000001E7 byte* strlen::str#5 str zp[2]:182 1.0000001E7
void uctoa(byte uctoa::value , byte* uctoa::buffer , byte uctoa::radix) void uctoa(byte uctoa::value , byte* uctoa::buffer , byte uctoa::radix)
byte* uctoa::buffer byte* uctoa::buffer
byte* uctoa::buffer#11 buffer zp[2]:46 3.3350000050000006E8 byte* uctoa::buffer#11 buffer zp[2]:172 3.3350000050000006E8
byte* uctoa::buffer#14 buffer zp[2]:46 1.5000000015E9 byte* uctoa::buffer#14 buffer zp[2]:172 1.5000000015E9
byte* uctoa::buffer#3 buffer zp[2]:46 2000002.0 byte* uctoa::buffer#3 buffer zp[2]:172 2000002.0
byte* uctoa::buffer#4 buffer zp[2]:46 2.000000002E9 byte* uctoa::buffer#4 buffer zp[2]:172 2.000000002E9
byte uctoa::digit byte uctoa::digit
byte uctoa::digit#1 digit zp[1]:48 2.000000002E9 byte uctoa::digit#1 digit zp[1]:174 2.000000002E9
byte uctoa::digit#2 digit zp[1]:48 3.07692308E8 byte uctoa::digit#2 digit zp[1]:174 3.07692308E8
byte uctoa::digit_value byte uctoa::digit_value
byte uctoa::digit_value#0 digit_value zp[1]:92 6.000000005999999E8 byte uctoa::digit_value#0 digit_value zp[1]:218 6.000000005999999E8
byte* uctoa::digit_values byte* uctoa::digit_values
byte uctoa::max_digits byte uctoa::max_digits
byte uctoa::radix byte uctoa::radix
byte uctoa::started byte uctoa::started
byte uctoa::started#2 started zp[1]:49 6.000000005999999E8 byte uctoa::started#2 started zp[1]:175 6.000000005999999E8
byte uctoa::started#4 started zp[1]:49 1.000000001E9 byte uctoa::started#4 started zp[1]:175 1.000000001E9
byte uctoa::value byte uctoa::value
byte uctoa::value#0 reg byte x 1.000000001E9 byte uctoa::value#0 reg byte x 1.000000001E9
byte uctoa::value#1 reg byte x 550001.0 byte uctoa::value#1 reg byte x 550001.0
@@ -371,79 +371,79 @@ byte uctoa::value#2 reg byte x 6.670000010000001E8
byte uctoa::value#6 reg byte x 1.5000000015E9 byte uctoa::value#6 reg byte x 1.5000000015E9
byte uctoa_append(byte* uctoa_append::buffer , byte uctoa_append::value , byte uctoa_append::sub) byte uctoa_append(byte* uctoa_append::buffer , byte uctoa_append::value , byte uctoa_append::sub)
byte* uctoa_append::buffer byte* uctoa_append::buffer
byte* uctoa_append::buffer#0 buffer zp[2]:46 1.37500000025E9 byte* uctoa_append::buffer#0 buffer zp[2]:172 1.37500000025E9
byte uctoa_append::digit byte uctoa_append::digit
byte uctoa_append::digit#1 reg byte y 1.00000000000001E14 byte uctoa_append::digit#1 reg byte y 1.00000000000001E14
byte uctoa_append::digit#2 reg byte y 1.000050000000015E14 byte uctoa_append::digit#2 reg byte y 1.000050000000015E14
byte uctoa_append::return byte uctoa_append::return
byte uctoa_append::return#0 reg byte x 2.000000002E9 byte uctoa_append::return#0 reg byte x 2.000000002E9
byte uctoa_append::sub byte uctoa_append::sub
byte uctoa_append::sub#0 sub zp[1]:92 3.33335000000005E13 byte uctoa_append::sub#0 sub zp[1]:218 3.33335000000005E13
byte uctoa_append::value byte uctoa_append::value
byte uctoa_append::value#0 reg byte x 3.666666667333333E9 byte uctoa_append::value#0 reg byte x 3.666666667333333E9
byte uctoa_append::value#1 reg byte x 2.00000000000002E14 byte uctoa_append::value#1 reg byte x 2.00000000000002E14
byte uctoa_append::value#2 reg byte x 5.000183333333417E13 byte uctoa_append::value#2 reg byte x 5.000183333333417E13
zp[2]:2 [ strlen::len#2 strlen::len#1 strlen::return#3 strlen::return#2 memcpy::num#3 memcpy::num#1 md5::initial_len#0 printf_number_buffer::$19 md5::$8 ] zp[2]:128 [ strlen::len#2 strlen::len#1 strlen::return#3 strlen::return#2 memcpy::num#3 memcpy::num#1 md5::initial_len#0 printf_number_buffer::$19 md5::$8 ]
zp[2]:4 [ md5::offset#2 md5::offset#1 ] zp[2]:130 [ md5::offset#2 md5::offset#1 ]
zp[4]:6 [ h0#10 h0#3 ] zp[4]:132 [ h0#10 h0#3 ]
zp[4]:10 [ h1#10 h1#3 ] zp[4]:136 [ h1#10 h1#3 ]
zp[4]:14 [ h2#10 h2#3 ] zp[4]:140 [ h2#10 h2#3 ]
zp[4]:18 [ h3#10 h3#3 ] zp[4]:144 [ h3#10 h3#3 ]
zp[1]:22 [ md5::i#10 md5::i#1 ] zp[1]:148 [ md5::i#10 md5::i#1 ]
zp[4]:23 [ md5::a#11 md5::a#56 md5::a#0 md5::$65 md5::$66 md5::$67 ] zp[4]:149 [ md5::a#11 md5::a#56 md5::a#0 md5::$65 md5::$66 md5::$67 ]
zp[4]:27 [ md5::b#10 md5::b#57 md5::b#0 ] zp[4]:153 [ md5::b#10 md5::b#57 md5::b#0 ]
zp[4]:31 [ md5::c#10 md5::c#57 md5::c#0 ] zp[4]:157 [ md5::c#10 md5::c#57 md5::c#0 ]
zp[4]:35 [ md5::temp#0 md5::temp#16 md5::d#0 ] zp[4]:161 [ md5::temp#0 md5::temp#16 md5::d#0 ]
zp[4]:39 [ md5::f#10 md5::f#12 md5::f#13 md5::f#14 md5::f#1 md5::$43 md5::$37 md5::$30 md5::$26 md5::$42 ] zp[4]:165 [ md5::f#10 md5::f#12 md5::f#13 md5::f#14 md5::f#1 md5::$43 md5::$37 md5::$30 md5::$26 md5::$42 ]
zp[1]:43 [ md5::g#10 md5::g#2 md5::g#3 md5::g#4 md5::g#36 md5::$71 ] zp[1]:169 [ md5::g#10 md5::g#2 md5::g#3 md5::g#4 md5::g#36 md5::$71 ]
reg byte x [ printf_uchar::uvalue#10 printf_uchar::uvalue#4 printf_uchar::uvalue#5 printf_uchar::uvalue#6 printf_uchar::uvalue#0 printf_uchar::uvalue#1 printf_uchar::uvalue#2 printf_uchar::uvalue#3 ] reg byte x [ printf_uchar::uvalue#10 printf_uchar::uvalue#4 printf_uchar::uvalue#5 printf_uchar::uvalue#6 printf_uchar::uvalue#0 printf_uchar::uvalue#1 printf_uchar::uvalue#2 printf_uchar::uvalue#3 ]
zp[2]:44 [ mod16::a#3 mod16::a#0 mod16::a#1 mod16::a#2 mul7::return#2 md5::$39 md5::$34 mod16::t#0 mul3::return#2 mul3::return#0 mul5::return#2 mul5::return#0 mul7::$1 mul7::return#0 mul3::$1 mul5::$1 memcpy::source#3 memcpy::source#4 memcpy::src#2 memcpy::src#4 memcpy::src#1 memcpy::source#0 ] zp[2]:170 [ mod16::a#3 mod16::a#0 mod16::a#1 mod16::a#2 mul7::return#2 md5::$39 md5::$34 mod16::t#0 mul3::return#2 mul3::return#0 mul5::return#2 mul5::return#0 mul7::$1 mul7::return#0 mul3::$1 mul5::$1 memcpy::source#3 memcpy::source#4 memcpy::src#2 memcpy::src#4 memcpy::src#1 memcpy::source#0 ]
reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ]
zp[2]:46 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 memset::str#3 memset::str#0 memset::str#8 memset::dst#2 memset::dst#4 memset::dst#1 memset::str#1 newline::start#0 ] zp[2]:172 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 memset::str#3 memset::str#0 memset::str#8 memset::dst#2 memset::dst#4 memset::dst#1 memset::str#1 newline::start#0 ]
reg byte x [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] reg byte x [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ]
zp[1]:48 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 uctoa::digit#2 uctoa::digit#1 ] zp[1]:174 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 uctoa::digit#2 uctoa::digit#1 ]
reg byte x [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] reg byte x [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ]
reg byte y [ uctoa_append::digit#2 uctoa_append::digit#1 ] reg byte y [ uctoa_append::digit#2 uctoa_append::digit#1 ]
zp[1]:49 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#0 uctoa::started#2 uctoa::started#4 ] zp[1]:175 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#0 uctoa::started#2 uctoa::started#4 ]
zp[1]:50 [ printf_padding::i#2 printf_padding::i#1 ] zp[1]:176 [ printf_padding::i#2 printf_padding::i#1 ]
reg byte a [ cputs::c#1 ] reg byte a [ cputs::c#1 ]
zp[1]:51 [ cputc::c ] zp[1]:177 [ cputc::c ]
zp[2]:52 [ md5::$0 md5::$1 md5::$2 md5::$3 md5::new_len#0 ] zp[2]:178 [ md5::$0 md5::$1 md5::$2 md5::$3 md5::new_len#0 ]
zp[2]:54 [ calloc::return#2 md5::msg#1 calloc::return#0 malloc::size#0 malloc::mem#0 ] zp[2]:180 [ calloc::return#2 md5::msg#1 calloc::return#0 malloc::size#0 malloc::mem#0 ]
zp[2]:56 [ md5::$74 strlen::str#3 strlen::str#5 strlen::str#0 cputs::s#10 cputs::s#11 cputs::s#0 ] zp[2]:182 [ md5::$74 strlen::str#3 strlen::str#5 strlen::str#0 cputs::s#10 cputs::s#11 cputs::s#0 ]
zp[4]:58 [ md5::bits_len ] zp[4]:184 [ md5::bits_len ]
zp[2]:62 [ md5::w#0 ] zp[2]:188 [ md5::w#0 ]
zp[4]:64 [ print32::l ] zp[4]:190 [ print32::l ]
reg byte a [ md5::$24 ] reg byte a [ md5::$24 ]
reg byte a [ md5::$25 ] reg byte a [ md5::$25 ]
zp[1]:68 [ md5::$72 ] zp[1]:194 [ md5::$72 ]
zp[4]:69 [ leftRotate::a ] zp[4]:195 [ leftRotate::a ]
zp[1]:73 [ leftRotate::r#0 printf_uchar::format_zero_padding#10 printf_number_buffer::format_zero_padding#0 ] zp[1]:199 [ leftRotate::r#0 printf_uchar::format_zero_padding#10 printf_number_buffer::format_zero_padding#0 ]
zp[4]:74 [ leftRotate::return#2 md5::lr#0 leftRotate::return#0 md5::b#1 ] zp[4]:200 [ leftRotate::return#2 md5::lr#0 leftRotate::return#0 md5::b#1 ]
reg byte a [ mul7::a#0 ] reg byte a [ mul7::a#0 ]
reg byte a [ mod16::return#4 ] reg byte a [ mod16::return#4 ]
reg byte a [ mul3::a#0 ] reg byte a [ mul3::a#0 ]
reg byte a [ mod16::return#3 ] reg byte a [ mod16::return#3 ]
zp[4]:78 [ md5::$31 md5::$32 ] zp[4]:204 [ md5::$31 md5::$32 ]
reg byte a [ mul5::a#0 ] reg byte a [ mul5::a#0 ]
reg byte a [ mod16::return#2 ] reg byte a [ mod16::return#2 ]
zp[4]:82 [ md5::$27 md5::$28 ] zp[4]:208 [ md5::$27 md5::$28 ]
reg byte x [ cputc::convertToScreenCode1_return#0 ] reg byte x [ cputc::convertToScreenCode1_return#0 ]
zp[1]:86 [ printf_number_buffer::buffer_sign#0 ] zp[1]:212 [ printf_number_buffer::buffer_sign#0 ]
reg byte x [ leftRotate::$5 ] reg byte x [ leftRotate::$5 ]
zp[2]:87 [ rotateLeft::p ] zp[2]:213 [ rotateLeft::p ]
zp[1]:89 [ rotateLeft::r ] zp[1]:215 [ rotateLeft::r ]
reg byte x [ leftRotate::$9 ] reg byte x [ leftRotate::$9 ]
reg byte a [ mod16::return#0 ] reg byte a [ mod16::return#0 ]
zp[2]:90 [ cursorLocation::return#0 putchar::loc#0 cursorLocation::return#1 cursorLocation::return#3 setcursor::loc#0 cursorLocation::$0 cursorLocation::$1 cursorLocation::$3 cursorLocation::$5 mul7::$2 mul7::$3 mul7::$4 memcpy::src_end#0 ] zp[2]:216 [ cursorLocation::return#0 putchar::loc#0 cursorLocation::return#1 cursorLocation::return#3 setcursor::loc#0 cursorLocation::$0 cursorLocation::$1 cursorLocation::$3 cursorLocation::$5 mul7::$2 mul7::$3 mul7::$4 memcpy::src_end#0 ]
reg byte a [ putchar::newChar#0 ] reg byte a [ putchar::newChar#0 ]
reg byte x [ setcursor::c#0 ] reg byte x [ setcursor::c#0 ]
reg byte a [ setcursor::c#1 ] reg byte a [ setcursor::c#1 ]
zp[1]:92 [ uctoa::digit_value#0 uctoa_append::sub#0 printf_padding::pad#5 ] zp[1]:218 [ uctoa::digit_value#0 uctoa_append::sub#0 printf_padding::pad#5 ]
reg byte x [ uctoa_append::return#0 ] reg byte x [ uctoa_append::return#0 ]
reg byte y [ move16Left::s#0 ] reg byte y [ move16Left::s#0 ]
reg byte x [ move16Left::t#0 ] reg byte x [ move16Left::t#0 ]
reg byte x [ move8Left::t#0 ] reg byte x [ move8Left::t#0 ]
zp[2]:93 [ cursorLocation::$4 mul5::$2 mul3::$2 memset::num#2 memset::num#0 calloc::nitems#0 memset::end#0 memcpy::destination#3 memcpy::destination#7 memcpy::destination#8 memcpy::destination#0 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memcpy::destination#2 ] zp[2]:219 [ cursorLocation::$4 mul5::$2 mul3::$2 memset::num#2 memset::num#0 calloc::nitems#0 memset::end#0 memcpy::destination#3 memcpy::destination#7 memcpy::destination#8 memcpy::destination#0 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memcpy::destination#2 ]
mem[12] [ printf_buffer ] mem[12] [ printf_buffer ]

View File

@@ -1,27 +1,12 @@
// Example usages of conio for Atari XL target. // Example usages of conio for Atari XL target.
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="conio-test.xex", type="bin", segments="XexFile"] .file [name="conio-test.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=__start]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word __start
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
.const DARK_ORANGE = $30 .const DARK_ORANGE = $30
.const MEDIUM_BLUE = $80 .const MEDIUM_BLUE = $80
.const WHITE = $fe .const WHITE = $fe

View File

@@ -4850,29 +4850,14 @@ ASSEMBLER BEFORE OPTIMIZATION
// File Comments // File Comments
// Example usages of conio for Atari XL target. // Example usages of conio for Atari XL target.
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.file [name="conio-test.xex", type="bin", segments="XexFile"] .plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.segmentdef XexFile .file [name="conio-test.xex", type="bin", segments="XexFile"]
.segment XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=__start]
// Binary File Header .segmentdef Program [segments="Code, Data"]
.byte $ff, $ff .segmentdef Code [start=$2000]
// Program segment [start address, end address, data] .segmentdef Data [startAfter="Code"]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word __start
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
.const DARK_ORANGE = $30 .const DARK_ORANGE = $30
.const MEDIUM_BLUE = $80 .const MEDIUM_BLUE = $80
@@ -6927,29 +6912,14 @@ Score: 162868
// File Comments // File Comments
// Example usages of conio for Atari XL target. // Example usages of conio for Atari XL target.
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.file [name="conio-test.xex", type="bin", segments="XexFile"] .plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.segmentdef XexFile .file [name="conio-test.xex", type="bin", segments="XexFile"]
.segment XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=__start]
// Binary File Header .segmentdef Program [segments="Code, Data"]
.byte $ff, $ff .segmentdef Code [start=$2000]
// Program segment [start address, end address, data] .segmentdef Data [startAfter="Code"]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word __start
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
.const DARK_ORANGE = $30 .const DARK_ORANGE = $30
.const MEDIUM_BLUE = $80 .const MEDIUM_BLUE = $80

View File

@@ -4,27 +4,12 @@
// Display Lists atariarchives.org/mapping/appendix8.php // Display Lists atariarchives.org/mapping/appendix8.php
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="helloxl.xex", type="bin", segments="XexFile"] .file [name="helloxl.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL. // 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL.
.const MODE2 = 2 .const MODE2 = 2
// 7: Single color text in five colors. 16 scanlines per char, 16/20/24 chars wide. the upper two bits are used to select the foreground color used by 1 bits, with 00-11 producing PF0-PF3. // 7: Single color text in five colors. 16 scanlines per char, 16/20/24 chars wide. the upper two bits are used to select the foreground color used by 1 bits, with 00-11 producing PF0-PF3.

View File

@@ -128,27 +128,12 @@ ASSEMBLER BEFORE OPTIMIZATION
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="helloxl.xex", type="bin", segments="XexFile"] .file [name="helloxl.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
// 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL. // 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL.
.const MODE2 = 2 .const MODE2 = 2
@@ -235,27 +220,12 @@ Score: 48
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="helloxl.xex", type="bin", segments="XexFile"] .file [name="helloxl.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
// 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL. // 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL.
.const MODE2 = 2 .const MODE2 = 2

View File

@@ -1,27 +1,12 @@
// Raster Bars for Atari XL / XE // Raster Bars for Atari XL / XE
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="rasterbars.xex", type="bin", segments="XexFile"] .file [name="rasterbars.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL. // 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL.
.const MODE2 = 2 .const MODE2 = 2
// 7: Single color text in five colors. 16 scanlines per char, 16/20/24 chars wide. the upper two bits are used to select the foreground color used by 1 bits, with 00-11 producing PF0-PF3. // 7: Single color text in five colors. 16 scanlines per char, 16/20/24 chars wide. the upper two bits are used to select the foreground color used by 1 bits, with 00-11 producing PF0-PF3.

View File

@@ -248,9 +248,9 @@ Complete equivalence classes
[ main::l#2 main::l#1 ] [ main::l#2 main::l#1 ]
[ main::c#2 main::col#2 main::col#8 main::c#1 ] [ main::c#2 main::col#2 main::col#8 main::c#1 ]
[ main::col#1 ] [ main::col#1 ]
Allocated zp[1]:2 [ main::l#2 main::l#1 ] Allocated zp[1]:128 [ main::l#2 main::l#1 ]
Allocated zp[1]:3 [ main::c#2 main::col#2 main::col#8 main::c#1 ] Allocated zp[1]:129 [ main::c#2 main::col#2 main::col#8 main::c#1 ]
Allocated zp[1]:4 [ main::col#1 ] Allocated zp[1]:130 [ main::col#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] *((byte*)ANTIC) = $21 [ ] ( [ ] { } ) always clobbers reg byte a Statement [1] *((byte*)ANTIC) = $21 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *((byte**)ANTIC+OFFSET_STRUCT_ATARI_ANTIC_DLIST) = DISPLAY_LIST [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *((byte**)ANTIC+OFFSET_STRUCT_ATARI_ANTIC_DLIST) = DISPLAY_LIST [ ] ( [ ] { } ) always clobbers reg byte a
@@ -259,9 +259,9 @@ Statement [4] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF1) = $48 [ ] (
Statement [5] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF2) = $80 [ ] ( [ ] { } ) always clobbers reg byte a Statement [5] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF2) = $80 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [6] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF3) = $c8 [ ] ( [ ] { } ) always clobbers reg byte a Statement [6] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF3) = $c8 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [8] if(*((byte*)ANTIC+OFFSET_STRUCT_ATARI_ANTIC_VCOUNT)!=$28) goto main::@1 [ main::col#2 ] ( [ main::col#2 ] { } ) always clobbers reg byte a Statement [8] if(*((byte*)ANTIC+OFFSET_STRUCT_ATARI_ANTIC_VCOUNT)!=$28) goto main::@1 [ main::col#2 ] ( [ main::col#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::c#2 main::col#2 main::col#8 main::c#1 ] Removing always clobbered register reg byte a as potential for zp[1]:129 [ main::c#2 main::col#2 main::col#8 main::c#1 ]
Statement [12] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLBK) = 0 [ main::col#1 ] ( [ main::col#1 ] { } ) always clobbers reg byte a Statement [12] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLBK) = 0 [ main::col#1 ] ( [ main::col#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::col#1 ] Removing always clobbered register reg byte a as potential for zp[1]:130 [ main::col#1 ]
Statement [1] *((byte*)ANTIC) = $21 [ ] ( [ ] { } ) always clobbers reg byte a Statement [1] *((byte*)ANTIC) = $21 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] *((byte**)ANTIC+OFFSET_STRUCT_ATARI_ANTIC_DLIST) = DISPLAY_LIST [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *((byte**)ANTIC+OFFSET_STRUCT_ATARI_ANTIC_DLIST) = DISPLAY_LIST [ ] ( [ ] { } ) always clobbers reg byte a
Statement [3] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF0) = $28 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF0) = $28 [ ] ( [ ] { } ) always clobbers reg byte a
@@ -270,12 +270,12 @@ Statement [5] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF2) = $80 [ ] (
Statement [6] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF3) = $c8 [ ] ( [ ] { } ) always clobbers reg byte a Statement [6] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLPF3) = $c8 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [8] if(*((byte*)ANTIC+OFFSET_STRUCT_ATARI_ANTIC_VCOUNT)!=$28) goto main::@1 [ main::col#2 ] ( [ main::col#2 ] { } ) always clobbers reg byte a Statement [8] if(*((byte*)ANTIC+OFFSET_STRUCT_ATARI_ANTIC_VCOUNT)!=$28) goto main::@1 [ main::col#2 ] ( [ main::col#2 ] { } ) always clobbers reg byte a
Statement [12] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLBK) = 0 [ main::col#1 ] ( [ main::col#1 ] { } ) always clobbers reg byte a Statement [12] *((byte*)GTIA+OFFSET_STRUCT_ATARI_GTIA_WRITE_COLBK) = 0 [ main::col#1 ] ( [ main::col#1 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::l#2 main::l#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:128 [ main::l#2 main::l#1 ] : zp[1]:128 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::c#2 main::col#2 main::col#8 main::c#1 ] : zp[1]:3 , reg byte x , reg byte y , Potential registers zp[1]:129 [ main::c#2 main::col#2 main::col#8 main::c#1 ] : zp[1]:129 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::col#1 ] : zp[1]:4 , reg byte x , reg byte y , Potential registers zp[1]:130 [ main::col#1 ] : zp[1]:130 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES REGISTER UPLIFT SCOPES
Uplift Scope [main] 305.08: zp[1]:3 [ main::c#2 main::col#2 main::col#8 main::c#1 ] 262.6: zp[1]:2 [ main::l#2 main::l#1 ] 2.75: zp[1]:4 [ main::col#1 ] Uplift Scope [main] 305.08: zp[1]:129 [ main::c#2 main::col#2 main::col#8 main::c#1 ] 262.6: zp[1]:128 [ main::l#2 main::l#1 ] 2.75: zp[1]:130 [ main::col#1 ]
Uplift Scope [ATARI_ANTIC] Uplift Scope [ATARI_ANTIC]
Uplift Scope [ATARI_GTIA_READ] Uplift Scope [ATARI_GTIA_READ]
Uplift Scope [ATARI_GTIA_WRITE] Uplift Scope [ATARI_GTIA_WRITE]
@@ -297,27 +297,12 @@ ASSEMBLER BEFORE OPTIMIZATION
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="rasterbars.xex", type="bin", segments="XexFile"] .file [name="rasterbars.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
// 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL. // 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL.
.const MODE2 = 2 .const MODE2 = 2
@@ -507,27 +492,12 @@ Score: 3634
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="rasterbars.xex", type="bin", segments="XexFile"] .file [name="rasterbars.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
// 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL. // 2: High Resolution Text Mode. 8 scanlines per char, 32/40/48 chars wide. bit 7 controls inversion or blinking, based on modes in CHACTL.
.const MODE2 = 2 .const MODE2 = 2

View File

@@ -2,27 +2,12 @@
// See https://gitlab.com/camelot/kickc/-/issues/557 // See https://gitlab.com/camelot/kickc/-/issues/557
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="function-pointer-noarg-call-13.xex", type="bin", segments="XexFile"] .file [name="function-pointer-noarg-call-13.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
.label r = $8000 .label r = $8000
.segment Code .segment Code
fn2: { fn2: {

View File

@@ -175,27 +175,12 @@ ASSEMBLER BEFORE OPTIMIZATION
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="function-pointer-noarg-call-13.xex", type="bin", segments="XexFile"] .file [name="function-pointer-noarg-call-13.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
.label r = $8000 .label r = $8000
.segment Code .segment Code
@@ -301,27 +286,12 @@ Score: 87
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="function-pointer-noarg-call-13.xex", type="bin", segments="XexFile"] .file [name="function-pointer-noarg-call-13.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
.label r = $8000 .label r = $8000
.segment Code .segment Code

View File

@@ -2,27 +2,12 @@
// See https://gitlab.com/camelot/kickc/-/issues/558 // See https://gitlab.com/camelot/kickc/-/issues/558
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="inline-kickasm-uses-problem.xex", type="bin", segments="XexFile"] .file [name="inline-kickasm-uses-problem.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
.label OUT = $8000 .label OUT = $8000
.segment Code .segment Code
main: { main: {

View File

@@ -176,27 +176,12 @@ ASSEMBLER BEFORE OPTIMIZATION
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="inline-kickasm-uses-problem.xex", type="bin", segments="XexFile"] .file [name="inline-kickasm-uses-problem.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
.label OUT = $8000 .label OUT = $8000
.segment Code .segment Code
@@ -293,27 +278,12 @@ Score: 320
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="inline-kickasm-uses-problem.xex", type="bin", segments="XexFile"] .file [name="inline-kickasm-uses-problem.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
.label OUT = $8000 .label OUT = $8000
.segment Code .segment Code

View File

@@ -2,27 +2,12 @@
// https://gitlab.com/camelot/kickc/-/issues/550 // https://gitlab.com/camelot/kickc/-/issues/550
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="zp-reserve-coalesce-problem.xex", type="bin", segments="XexFile"] .file [name="zp-reserve-coalesce-problem.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
.label lms = $a000 .label lms = $a000
.segment Code .segment Code
main: { main: {

View File

@@ -650,27 +650,12 @@ ASSEMBLER BEFORE OPTIMIZATION
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="zp-reserve-coalesce-problem.xex", type="bin", segments="XexFile"] .file [name="zp-reserve-coalesce-problem.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
.label lms = $a000 .label lms = $a000
.segment Code .segment Code
@@ -1023,27 +1008,12 @@ Score: 649273
// Upstart // Upstart
// Atari XL/XE executable XEX file with a single segment // Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html // https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="zp-reserve-coalesce-problem.xex", type="bin", segments="XexFile"] .file [name="zp-reserve-coalesce-problem.xex", type="bin", segments="XexFile"]
.segmentdef XexFile .segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segment XexFile .segmentdef Program [segments="Code, Data"]
// Binary File Header .segmentdef Code [start=$2000]
.byte $ff, $ff
// Program segment [start address, end address, data]
.word ProgramStart, ProgramEnd-1
.segmentout [ segments="Program" ]
// RunAd - Run Address Segment [start address, end address, data]
.word $02e0, $02e1
.word main
.segmentdef Program [segments="ProgramStart, Code, Data, ProgramEnd"]
.segmentdef ProgramStart [start=$2000]
.segment ProgramStart
ProgramStart:
.segmentdef Code [startAfter="ProgramStart"]
.segmentdef Data [startAfter="Code"] .segmentdef Data [startAfter="Code"]
.segmentdef ProgramEnd [startAfter="Data"]
.segment ProgramEnd
ProgramEnd:
// Global Constants & labels // Global Constants & labels
.label lms = $a000 .label lms = $a000
.segment Code .segment Code