1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-23 08:32:39 +00:00

Working on blackhole. Added a ton of fragments & and some synth.

This commit is contained in:
jespergravgaard 2019-06-12 21:38:07 +02:00
parent 30de557d61
commit a3c5bb06da
43 changed files with 51863 additions and 15042 deletions

View File

@ -0,0 +1,5 @@
ldx {c1},y
stx !+ +1
ldx {c1}+1,y
stx !+ +2
!: sta $ffff

View File

@ -0,0 +1,9 @@
pha
ldy #{c1}
lda ({z1}),y
sta !+ +1
iny
lda ({z1}),y
sta !+ +2
pla
!: sta $ffff

View File

@ -0,0 +1,8 @@
ldy #{c1}
lda ({z1}),y
sta !+ +1
iny
lda ({z1}),y
sta !+ +2
txa
!: sta $ffff

View File

@ -0,0 +1,5 @@
ldy #0
lda ({z1}),y
sec
sbc #1
sta ({z1}),y

View File

@ -0,0 +1,6 @@
ldy #0
lda ({z1}),y
bne {la1}
iny
lda ({z1}),y
bne {la1}

View File

@ -0,0 +1,3 @@
lda {c3},x
ldy {c2},x
sta {c1},y

View File

@ -0,0 +1,3 @@
lda {c3},x
ldy {c2},x
sta {c1},y

View File

@ -0,0 +1,3 @@
lda ({z1}),y
tay
lda {c1},y

View File

@ -0,0 +1,4 @@
lda #<{c2}
sta {c1},x
lda #>{c2}
sta {c1}+1,x

View File

@ -0,0 +1,4 @@
lda #<{c2}
sta {c1},y
lda #>{c2}
sta {c1}+1,y

View File

@ -0,0 +1,5 @@
lda {c1},x
bne !+
dec {c1}+1,x
!:
dec {c1},x

View File

@ -0,0 +1,4 @@
lda {c1}+1,x
bne {la1}
lda {c1},x
bne {la1}

View File

@ -0,0 +1,4 @@
lda {c1}+1,y
bne {la1}
lda {c1},y
bne {la1}

View File

@ -0,0 +1,2 @@
ldy #0
lda ({z1}),y

View File

@ -0,0 +1 @@
lda {c1},x

View File

@ -0,0 +1 @@
lda {c1},y

View File

@ -0,0 +1,12 @@
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1

View File

@ -0,0 +1,16 @@
lda {z2}
asl
sta {z1}
lda {z2}+1
rol
sta {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1

View File

@ -210,16 +210,16 @@ class AsmFragmentTemplateSynthesisRule {
mapZ3.put("z3", "z2");
Map<String, String> mapZ4 = new LinkedHashMap<>();
mapZ3.put("z4", "z3");
Map<String, String> mapC = new LinkedHashMap<>();
mapC.put("c2", "c1");
mapC.put("c3", "c2");
mapC.put("c4", "c3");
Map<String, String> mapC2 = new LinkedHashMap<>();
mapC2.put("c2", "c1");
mapC2.put("c3", "c2");
mapC2.put("c4", "c3");
Map<String, String> mapC3 = new LinkedHashMap<>();
mapC3.put("c3", "c2");
mapC3.put("c4", "c3");
Map<String, String> mapZC = new LinkedHashMap<>();
mapZC.putAll(mapZ);
mapZC.putAll(mapC);
mapZC.putAll(mapC2);
Map<String, String> mapSToU = new LinkedHashMap<>();
mapSToU.put("vbsz1", "vbuz1");
mapSToU.put("vbsz2", "vbuz2");
@ -296,6 +296,8 @@ class AsmFragmentTemplateSynthesisRule {
// Presence of unwanted single symbols
String oneZ2 = ".*z2.*";
String derefC1 = ".*c1_deref.*";
String derefC2 = ".*c2_deref.*";
String derefC3 = ".*c3_deref.*";
List<AsmFragmentTemplateSynthesisRule> synths = new ArrayList<>();
@ -511,21 +513,31 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("p..([cz].)=_(inc|dec)_p..([cz].)", null, null, "vwu$1=_$2_vwu$3", null, null));
// Synthesize constants using AA/XX/YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbuc1(.*)", rvalAa+"|"+"|"+ derefC1, "lda #{c1}", "$1=$2vbuaa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbsc1(.*)", rvalAa+"|"+"|"+ derefC1, "lda #{c1}", "$1=$2vbsaa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbuc1(.*)", rvalYy+"|"+"|"+ derefC1, "ldy #{c1}", "$1=$2vbuyy$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbsc1(.*)", rvalYy+"|"+"|"+ derefC1, "ldy #{c1}", "$1=$2vbsyy$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbuc1(.*)", rvalXx+"|"+"|"+ derefC1, "ldx #{c1}", "$1=$2vbuxx$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)vbsc1(.*)", rvalXx+"|"+"|"+ derefC1, "ldx #{c1}", "$1=$2vbsxx$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)", rvalAa+"|"+"|"+ derefC1, "lda #{c1}", "$1vb$2aa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)", rvalYy+"|"+"|"+ derefC1, "ldy #{c1}", "$1vb$2yy$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)", rvalXx+"|"+"|"+ derefC1, "ldx #{c1}", "$1vb$2xx$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)", rvalAa+"|"+"|"+ derefC2, "lda #{c2}", "$1vb$2aa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)", rvalYy+"|"+"|"+ derefC2, "ldy #{c2}", "$1vb$2yy$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)", rvalXx+"|"+"|"+ derefC2, "ldx #{c2}", "$1vb$2xx$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c3(.*)", rvalAa+"|"+"|"+ derefC3, "lda #{c3}", "$1vb$2aa$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c3(.*)", rvalYy+"|"+"|"+ derefC3, "ldy #{c3}", "$1vb$2yy$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c3(.*)", rvalXx+"|"+"|"+ derefC3, "ldx #{c3}", "$1vb$2xx$3", null, null));
// Rewrite any signed dereference (.*_derefidx_vbs.*) to unsigned (.*_derefidx_vbu.*)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbs(.*)", null, null, "$1_derefidx_vbu$2", null, null));
// If no C1 is present in the signature map other Cs down to take its place
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c2.*)", ".*c1.*", null, "$1", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c2.*)", ".*c1.*", null, "$1", null, mapC2));
// If no C2 is present in the signature map other Cs down to take its place
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c3.*)", ".*c2.*", null, "$1", null, mapC3));
// Rewrite trailing right-size (Z1),y to use AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)z1_derefidx_vbuyy", twoZ1+"|"+rvalAa, "lda ({z1}),y", "$1=$2vb$3aa", null, mapZ, null));
// Rewrite trailing right-size (Z1),y to use AA - when 2 Z1
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z1(.*)pb(.)z1_derefidx_vbuyy", rvalAa, "lda ({z1}),y", "$1z1$2vb$3aa", null, null, null));
// OLD STYLE REWRITES - written when only one rule could be taken
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*)", twoZ1+"|"+twoC1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapZC));
@ -552,18 +564,18 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", threeZ2+"|"+rvalYy+"|"+lvalDerefIdxZ2, "ldy {z2}", "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", null, mapZ));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*c1.*)", twoZ1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapZ));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*z1.*)", twoC1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*z1.*)", twoC1, null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x", mapC2));
// Convert X/Y-based array indexing of a constant pointer into A-register by prefixing lda cn,x / lda cn,y ( ...pb.c1_derefidx_vbuxx... / ...pb.c1_derefidx_vbuyy... -> ...vb.aa... )
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", rvalAa+"|"+twoC1, "lda {c1},x", "$1=$2vb$3aa$4", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", rvalYy+"|"+twoC1, "ldy {c1},x", "$1=$2vb$3yy$4", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", rvalAa+"|"+twoC1, "lda {c1},x", "$1=$2vb$3aa$4", null, mapC2));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", rvalYy+"|"+twoC1, "ldy {c1},x", "$1=$2vb$3yy$4", null, mapC2));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*c1.*)pb(.)c1_derefidx_vbuxx(.*)", rvalAa, "lda {c1},x", "$1=$2vb$3aa$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*c1.*)", rvalAa, "lda {c1},x", "$1=$2vb$3aa$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuyy(.*)", rvalAa+"|"+twoC1, "lda {c1},y", "$1=$2vb$3aa$4", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuyy(.*)", rvalXx+"|"+twoC1, "ldx {c1},y", "$1=$2vb$3xx$4", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuyy(.*)", rvalAa+"|"+twoC1, "lda {c1},y", "$1=$2vb$3aa$4", null, mapC2));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuyy(.*)", rvalXx+"|"+twoC1, "ldx {c1},y", "$1=$2vb$3xx$4", null, mapC2));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*c1.*)pb(.)c1_derefidx_vbuyy(.*)", rvalAa, "lda {c1},y", "$1=$2vb$3aa$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=(.*)pb(.)c1_derefidx_vbuyy(.*c1.*)", rvalAa, "lda {c1},y", "$1=$2vb$3aa$4", null, null));
@ -579,9 +591,9 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz1_(.*)", rvalYy+"|"+twoZ1, "ldy {z1}", "$1_derefidx_vbuyy_$2", null, mapZ));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz1_(lt|gt|le|ge|eq|neq)_(.*)", rvalXx+"|"+twoZ1, "ldx {z1}", "$1_derefidx_vbuxx_$2_$3", null, mapZ));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy_(lt|gt|le|ge|eq|neq)_(.*)", rvalAa+"|"+twoC1, "lda {c1},y", "vb$1aa_$2_$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy_(lt|gt|le|ge|eq|neq)_(.*)", rvalAa+"|"+twoC1, "lda {c1},y", "vb$1aa_$2_$3", null, mapC2));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy_(lt|gt|le|ge|eq|neq)_(.*c1.*)", rvalAa, "lda {c1},y", "vb$1aa_$2_$3", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx_(lt|gt|le|ge|eq|neq)_(.*)", rvalAa+"|"+twoC1, "lda {c1},x", "vb$1aa_$2_$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx_(lt|gt|le|ge|eq|neq)_(.*)", rvalAa+"|"+twoC1, "lda {c1},x", "vb$1aa_$2_$3", null, mapC2));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx_(lt|gt|le|ge|eq|neq)_(.*c1.*)", rvalAa, "lda {c1},x", "vb$1aa_$2_$3", null, null));
// Use unsigned ASM to synthesize signed ASM ( ...vbs... -> ...vbu... )

View File

@ -5,15 +5,15 @@ import "multiply"
// Address of the screen
const byte* SCREEN = 0x0400;
// Sprite data for the animating sprites
const byte* SPRITE_DATA = 0x2000;
// Copy of the screen used for finding chars to process
byte[1000] SCREEN_COPY;
// Max number of chars processed at once
const byte NUM_PROCESSING = 8;
const byte NUM_PROCESSING = 1;
// Sprite data for the animating sprites
const align(64) byte[NUM_PROCESSING*64] SPRITE_DATA;
// Struct holding char being processed
struct ProcessingChar {
@ -95,9 +95,12 @@ void startProcessing(struct ProcessingChar center) {
// Copy char into sprite
// TODO: Copy chargen data
byte* spriteData = SPRITE_DATA+(word)spriteIdx*64;
for( byte i: 0..7) *spriteData++ = 0xff;
for( byte i: 0..7) {
*spriteData = 0xff;
spriteData += 3;
}
word spriteX = 24 + (word)center.x*8;
byte spriteY = 30 + center.y*8;
byte spriteY = 50 + center.y*8;
byte spritePtr = (byte)(SPRITE_DATA/64)+spriteIdx;
byte* screenPtr = SCREEN+(word)center.y*40+center.x;
// Put the sprite into the PROCESSING array
@ -107,31 +110,33 @@ void startProcessing(struct ProcessingChar center) {
// Process any chars in the PROCESSING array
void processChars() {
for( byte i: 0..NUM_PROCESSING-1 ) {
if(PROCESSING[i].status!=STATUS_FREE) {
if(PROCESSING[i].status==STATUS_NEW) {
struct ProcessingSprite* processing = PROCESSING+i;
byte bitmask = 1<<processing->id;
if(processing->status!=STATUS_FREE) {
if(processing->status==STATUS_NEW) {
// Clear the char on the screen
*PROCESSING[i].screenPtr = ' ';
*(processing->screenPtr) = ' ';
// Enable the sprite
*SPRITES_ENABLE |= 1<<PROCESSING[i].id;
*SPRITES_ENABLE |= bitmask;
// Set sprite pointer
*(SCREEN+SPRITE_PTRS+PROCESSING[i].id) = PROCESSING[i].ptr;
*(SCREEN+SPRITE_PTRS+processing->id) = processing->ptr;
// Set status
PROCESSING[i].status = STATUS_PROCESSING;
processing->status = STATUS_PROCESSING;
}
// Set sprite position
if(>PROCESSING[i].x) {
*SPRITES_XMSB |= (1<<PROCESSING[i].id);
if(>processing->x) {
*SPRITES_XMSB |= bitmask;
} else {
*SPRITES_XMSB &= 0xff ^ (1<<PROCESSING[i].id);
*SPRITES_XMSB &= 0xff ^ bitmask;
}
SPRITES_XPOS[i<<2] = (byte)PROCESSING[i].x;
SPRITES_YPOS[i<<2] = PROCESSING[i].y;
SPRITES_XPOS[i*2] = (byte)processing->x;
SPRITES_YPOS[i*2] = processing->y;
// Move sprite
if(--(PROCESSING[i].x)==0) {
if(--(processing->x)==0) {
// Set status
PROCESSING[i].status = STATUS_FREE;
processing->status = STATUS_FREE;
// Disable the sprite
*SPRITES_ENABLE &= 0xff ^ (1<<PROCESSING[i].id);
*SPRITES_ENABLE &= 0xff ^ bitmask;
}
}
}

View File

@ -1,9 +1,13 @@
// Black Hole at the center of the BASIC screen sucking in any letters
// Black Hole at the center of the BASIC screen sucking in letters
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.const OFFSET_STRUCT_PROCESSINGCHAR_Y = 1
.const OFFSET_STRUCT_PROCESSINGCHAR_DIST = 2
.const SIZEOF_POINTER = 2
.const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2
.const OFFSET_STRUCT_PROCESSINGSPRITE_ID = 3
.const OFFSET_STRUCT_PROCESSINGSPRITE_PTR = 4
.const OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = 5
.const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = 6
// Processor port data direction register
.label PROCPORT_DDR = 0
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
@ -12,7 +16,13 @@
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
// The offset of the sprite pointers from the screen start address
.const SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label SPRITES_XMSB = $d010
.label RASTER = $d012
.label SPRITES_ENABLE = $d015
.label BORDERCOL = $d020
.label BGCOL = $d021
.label VIC_CONTROL = $d011
@ -22,8 +32,6 @@
.label IRQ_ENABLE = $d01a
// Bits for the IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Color Ram
.label COLS = $d800
// CIA#1 Interrupt Status & Control Register
.label CIA1_INTERRUPT = $dc0d
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
@ -33,33 +41,68 @@
.const WHITE = 1
.const BLUE = 6
.const LIGHT_BLUE = $e
// Address of the screen
.label SCREEN = $400
// Sprite data for the animating sprites
.label SPRITE_DATA = $2000
// Max number of chars processed at once
.const NUM_PROCESSING = 1
// Distance value meaning not found
.const NOT_FOUND = $ffff
.const NUM_PROCESSING = $10
// Values for ProcessingSprite.status
.const STATUS_FREE = 0
.const STATUS_NEW = 1
.const STATUS_PROCESSING = 2
.const RASTER_IRQ_TOP = $30
.const RASTER_IRQ_MIDDLE = $ff
main: {
.label src = 2
.label dst = 4
.label center_dist = $f
.label sp = 2
.label src = 4
.label dst = 6
.label center_dist = $13
ldy #0
// Init processing array
b1:
tya
asl
asl
asl
tax
lda #0
sta PROCESSING,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_Y,x
lda #<NOT_FOUND
sta PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST,x
lda #>NOT_FOUND
sta PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST+1,x
sta PROCESSING+1,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
lda #STATUS_FREE
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
lda #<0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
iny
cpy #NUM_PROCESSING-1+1
cpy #1
bne b1
lda #<SPRITE_DATA
sta sp
lda #>SPRITE_DATA
sta sp+1
// Clear sprites
b2:
lda #0
tay
sta (sp),y
inc sp
bne !+
inc sp+1
!:
lda sp+1
cmp #>SPRITE_DATA+SIZEOF_POINTER
bcc b2
bne !+
lda sp
cmp #<SPRITE_DATA+SIZEOF_POINTER
bcc b2
!:
jsr setupRasterIrq
lda #<SCREEN_COPY
sta dst
@ -69,8 +112,10 @@ main: {
sta src
lda #>SCREEN
sta src+1
// Fill screen with some chars
//for( byte* sc: SCREEN..SCREEN+999) *sc = 'a'+(<sc&0x1f);
// Copy screen to screen copy
b3:
b4:
ldy #0
lda (src),y
sta (dst),y
@ -84,97 +129,229 @@ main: {
!:
lda src+1
cmp #>SCREEN+$3e8
bne b3
bne b4
lda src
cmp #<SCREEN+$3e8
bne b3
bne b4
jsr initSquareTables
b2:
b3:
// Main loop
jsr getCharToProcess
ldy getCharToProcess.return_x
ldx getCharToProcess.return_y
lda center_dist+1
cmp #>NOT_FOUND
bne b6
bne b7
lda center_dist
cmp #<NOT_FOUND
bne b6
b7:
bne b7
b8:
inc SCREEN+$3e7
jmp b7
b6:
jmp b8
b7:
sty startProcessing.center_x
stx startProcessing.center_y
jsr startProcessing
jmp b2
jmp b3
}
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($17) center_x, byte zeropage($18) center_y, word zeropage($f) center_dist)
// startProcessing(byte zeropage($1c) center_x, byte zeropage($1d) center_y)
startProcessing: {
.label center_x = $17
.label center_y = $18
.label center_dist = $f
.label freeIdx = 6
lda #$ff
sta freeIdx
.label _0 = 9
.label _1 = 9
.label _3 = $1e
.label _4 = $1e
.label _11 = $21
.label _12 = $21
.label _13 = $21
.label center_x = $1c
.label center_y = $1d
.label i = 8
.label spriteData = 9
.label spriteX = $1e
.label spritePtr = $20
.label screenPtr = $21
.label freeIdx = 8
.label _30 = $23
.label _31 = $21
ldx #$ff
b1:
ldx #0
lda #0
sta i
b2:
txa
lda i
asl
asl
asl
tay
lda PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST+1,y
cmp #>NOT_FOUND
bne b3
lda PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST,y
cmp #<NOT_FOUND
bne b3
lda #STATUS_FREE
cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
beq !b3+
jmp b3
!b3:
b4:
cpx #$ff
beq b6
txa
lda #$ff
cmp freeIdx
bne !b8+
jmp b8
!b8:
lda freeIdx
sta _0
lda #0
sta _0+1
asl _1
rol _1+1
asl _1
rol _1+1
asl _1
rol _1+1
asl _1
rol _1+1
asl _1
rol _1+1
asl _1
rol _1+1
clc
lda spriteData
adc #<SPRITE_DATA
sta spriteData
lda spriteData+1
adc #>SPRITE_DATA
sta spriteData+1
ldx #0
b6:
lda #$ff
ldy #0
sta (spriteData),y
lda #3
clc
adc spriteData
sta spriteData
bcc !+
inc spriteData+1
!:
inx
cpx #8
bne b6
lda center_x
sta _3
lda #0
sta _3+1
asl _4
rol _4+1
asl _4
rol _4+1
asl _4
rol _4+1
lda #$18
clc
adc spriteX
sta spriteX
bcc !+
inc spriteX+1
!:
lda center_y
asl
asl
asl
clc
adc #$32
tay
lax freeIdx
axs #-[SPRITE_DATA/$40]
stx spritePtr
lda center_y
sta _11
lda #0
sta _11+1
lda _11
asl
sta _30
lda _11+1
rol
sta _30+1
asl _30
rol _30+1
lda _31
clc
adc _30
sta _31
lda _31+1
adc _30+1
sta _31+1
asl _12
rol _12+1
asl _12
rol _12+1
asl _12
rol _12+1
clc
lda _13
adc #<SCREEN
sta _13
lda _13+1
adc #>SCREEN
sta _13+1
lda center_x
clc
adc screenPtr
sta screenPtr
bcc !+
inc screenPtr+1
!:
lda freeIdx
asl
asl
asl
tax
lda center_x
lda spriteX
sta PROCESSING,x
lda center_y
sta PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_Y,x
lda center_dist
sta PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST,x
lda center_dist+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST+1,x
lda spriteX+1
sta PROCESSING+1,x
tya
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
lda freeIdx
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
lda spritePtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
lda #STATUS_NEW
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
lda screenPtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
lda screenPtr+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
rts
b6:
stx freeIdx
b8:
ldx freeIdx
jmp b1
b3:
inx
cpx #NUM_PROCESSING-1+1
bne b2
ldx freeIdx
inc i
lda #1
cmp i
beq !b2+
jmp b2
!b2:
stx freeIdx
jmp b4
}
// Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff
getCharToProcess: {
.label _9 = $19
.label _10 = $19
.label _11 = $19
.label return_dist = $f
.label x = $a
.label dist = $f
.label screen_line = 7
.label y = 9
.label return_x = $d
.label return_y = $e
.label closest_dist = $b
.label closest_x = $d
.label closest_y = $e
.label _15 = $1b
.label _16 = $19
.label _9 = $25
.label _10 = $25
.label _11 = $25
.label return_dist = $13
.label x = $e
.label dist = $13
.label screen_line = $b
.label y = $d
.label return_x = $11
.label return_y = $12
.label closest_dist = $f
.label closest_x = $11
.label closest_y = $12
.label _15 = $27
.label _16 = $25
lda #0
sta closest_y
sta closest_x
@ -314,10 +491,10 @@ getCharToProcess: {
}
// initialize SQUARES table
initSquareTables: {
.label _6 = $13
.label _14 = $13
.label x = $11
.label y = $12
.label _6 = $17
.label _14 = $17
.label x = $15
.label y = $16
lda #0
sta x
b1:
@ -383,9 +560,9 @@ initSquareTables: {
// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
// mul8u(byte register(X) a, byte register(A) b)
mul8u: {
.label mb = $15
.label res = $13
.label return = $13
.label mb = $19
.label res = $17
.label return = $17
lda #0
sta res
sta res+1
@ -479,144 +656,119 @@ irqBottom: {
}
// Process any chars in the PROCESSING array
processChars: {
.label _3 = $1f
.label _4 = $1f
.label _5 = $1f
.label _7 = $23
.label _8 = $23
.label _9 = $23
.label processing_x = $1d
.label processing_y = $1e
.label _22 = $21
.label _23 = $1f
.label _25 = $25
.label _26 = $23
ldx #0
.label processing = $29
.label bitmask = $2b
.label i = $1b
lda #0
sta i
b1:
txa
lda i
asl
asl
tay
lda PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST,y
cmp #<NOT_FOUND
bne !+
lda PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST+1,y
cmp #>NOT_FOUND
bne !b2+
jmp b2
!b2:
asl
clc
adc #<PROCESSING
sta processing
lda #>PROCESSING
adc #0
sta processing+1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
lda (processing),y
tax
lda #1
cpx #0
beq !e+
!:
asl
dex
bne !-
!e:
sta bitmask
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
lda (processing),y
cmp #STATUS_FREE
beq b2
lda (processing),y
cmp #STATUS_NEW
bne b3
// Clear the char on the screen
ldx #' '
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
lda (processing),y
sta !++1
iny
lda (processing),y
sta !++2
txa
asl
asl
tay
lda PROCESSING,y
sta processing_x
lda PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_Y,y
sta processing_y
sta _3
lda #0
sta _3+1
lda _3
asl
sta _22
lda _3+1
rol
sta _22+1
asl _22
rol _22+1
lda _23
clc
adc _22
sta _23
lda _23+1
adc _22+1
sta _23+1
asl _4
rol _4+1
asl _4
rol _4+1
asl _4
rol _4+1
clc
lda _5
adc #<COLS
sta _5
lda _5+1
adc #>COLS
sta _5+1
lda #WHITE
ldy processing_x
sta (_5),y
lda processing_y
sta _7
lda #0
sta _7+1
lda _7
asl
sta _25
lda _7+1
rol
sta _25+1
asl _25
rol _25+1
lda _26
clc
adc _25
sta _26
lda _26+1
adc _25+1
sta _26+1
asl _8
rol _8+1
asl _8
rol _8+1
asl _8
rol _8+1
clc
lda _9
adc #<SCREEN
sta _9
lda _9+1
adc #>SCREEN
sta _9+1
lda (_9),y
cmp #' '
beq b3
lda (_9),y
cmp #' '
beq !+
bcs b4
!:
ldy processing_x
lda (_9),y
clc
adc #1
sta (_9),y
sta $ffff
// Enable the sprite
lda SPRITES_ENABLE
ora bitmask
sta SPRITES_ENABLE
// Set sprite pointer
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
lda (processing),y
tay
lda SCREEN+SPRITE_PTRS,y
// Set status
lda #STATUS_PROCESSING
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
b3:
ldy #1
lda (processing),y
// Set sprite position
cmp #0
bne b4
lda #$ff
eor bitmask
and SPRITES_XMSB
sta SPRITES_XMSB
b5:
lda i
asl
tax
ldy #0
lda (processing),y
sta SPRITES_XPOS,x
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y
sta SPRITES_YPOS,x
ldy #0
lda (processing),y
sec
sbc #1
sta (processing),y
lda (processing),y
bne b2
iny
lda (processing),y
bne b2
// Set status
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
lda #$ff
eor bitmask
// Disable the sprite
and SPRITES_ENABLE
sta SPRITES_ENABLE
b2:
inx
cpx #NUM_PROCESSING-1+1
inc i
lda #1
cmp i
beq !b1+
jmp b1
!b1:
rts
b4:
ldy processing_x
lda (_9),y
sec
sbc #1
sta (_9),y
jmp b2
b3:
txa
asl
asl
tay
lda #<NOT_FOUND
sta PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST,y
lda #>NOT_FOUND
sta PROCESSING+OFFSET_STRUCT_PROCESSINGCHAR_DIST+1,y
jmp b2
lda SPRITES_XMSB
ora bitmask
sta SPRITES_XMSB
jmp b5
}
// Raster Interrupt at the top of the screen
irqTop: {
@ -664,5 +816,5 @@ irqTop: {
SQUARES_X: .fill 2*$28, 0
// SQUARES_Y[i] = (i-12)*(i-12)
SQUARES_Y: .fill 2*$19, 0
// Chars currently being processed in the interrupt
PROCESSING: .fill 4*NUM_PROCESSING, 0
// Sprites currently being processed in the interrupt
PROCESSING: .fill 8*NUM_PROCESSING, 0

View File

@ -12,339 +12,380 @@ main: scope:[main] from @1
to:main::@1
main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 )
[6] (byte~) main::$14 ← (byte) main::i#2 << (byte) 2
[7] *((byte*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$14) ← (byte) 0
[8] *((byte*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGCHAR_Y + (byte~) main::$14) ← (byte) 0
[9] *((word*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGCHAR_DIST + (byte~) main::$14) ← (const word) NOT_FOUND#0
[10] (byte) main::i#1 ← ++ (byte) main::i#2
[11] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@1
[6] (byte~) main::$17 ← (byte) main::i#2 << (byte) 3
[7] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$17) ← (byte) 0
[8] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$17) ← (byte) 0
[9] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$17) ← (byte) 0
[10] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$17) ← (byte) 0
[11] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$17) ← (const byte) STATUS_FREE#0
[12] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$17) ← (byte*) 0
[13] (byte) main::i#1 ← ++ (byte) main::i#2
[14] if((byte) main::i#1!=(byte) 1) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1
[12] phi()
[13] call setupRasterIrq
main::@2: scope:[main] from main::@1 main::@2
[15] (byte*) main::sp#2 ← phi( main::@1/(const byte*) SPRITE_DATA#0 main::@2/(byte*) main::sp#1 )
[16] *((byte*) main::sp#2) ← (byte) 0
[17] (byte*) main::sp#1 ← ++ (byte*) main::sp#2
[18] if((byte*) main::sp#1<(const byte*) SPRITE_DATA#0+(const byte) SIZEOF_POINTER) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2 main::@3
[14] (byte*) main::dst#2 ← phi( main::@2/(const byte[$3e8]) SCREEN_COPY#0 main::@3/(byte*) main::dst#1 )
[14] (byte*) main::src#2 ← phi( main::@2/(const byte*) SCREEN#0 main::@3/(byte*) main::src#1 )
[15] *((byte*) main::dst#2) ← *((byte*) main::src#2)
[16] (byte*) main::src#1 ← ++ (byte*) main::src#2
[17] (byte*) main::dst#1 ← ++ (byte*) main::dst#2
[18] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@3
to:main::@4
main::@4: scope:[main] from main::@3
main::@3: scope:[main] from main::@2
[19] phi()
[20] call initSquareTables
[20] call setupRasterIrq
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
[21] (byte*) main::dst#2 ← phi( main::@3/(const byte[$3e8]) SCREEN_COPY#0 main::@4/(byte*) main::dst#1 )
[21] (byte*) main::src#2 ← phi( main::@3/(const byte*) SCREEN#0 main::@4/(byte*) main::src#1 )
[22] *((byte*) main::dst#2) ← *((byte*) main::src#2)
[23] (byte*) main::src#1 ← ++ (byte*) main::src#2
[24] (byte*) main::dst#1 ← ++ (byte*) main::dst#2
[25] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@4 main::@6
[21] phi()
[22] call getCharToProcess
[23] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
[24] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
[25] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
main::@5: scope:[main] from main::@4
[26] phi()
[27] call initSquareTables
to:main::@6
main::@6: scope:[main] from main::@5 main::@7
[28] phi()
[29] call getCharToProcess
[30] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
[31] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
[32] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
to:main::@9
main::@9: scope:[main] from main::@6
[33] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
[34] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
[35] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0
[36] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@7
to:main::@8
main::@8: scope:[main] from main::@5
[26] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
[27] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
[28] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0
[29] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@6
to:main::@7
main::@7: scope:[main] from main::@7 main::@8
[30] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7)
to:main::@7
main::@6: scope:[main] from main::@8
[31] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
[32] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
[33] (word) startProcessing::center_dist#0 ← (word) main::center_dist#0
[34] call startProcessing
to:main::@5
startProcessing: scope:[startProcessing] from main::@6
[35] phi()
main::@8: scope:[main] from main::@8 main::@9
[37] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7)
to:main::@8
main::@7: scope:[main] from main::@9
[38] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
[39] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
[40] call startProcessing
to:main::@6
startProcessing: scope:[startProcessing] from main::@7
[41] phi()
to:startProcessing::@1
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@6
[36] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@6/(byte~) startProcessing::freeIdx#7 )
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@8
[42] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 )
to:startProcessing::@2
startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3
[37] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
[38] (byte~) startProcessing::$5 ← (byte) startProcessing::i#2 << (byte) 2
[39] if(*((word*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGCHAR_DIST + (byte~) startProcessing::$5)!=(const word) NOT_FOUND#0) goto startProcessing::@3
[43] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
[44] (byte~) startProcessing::$21 ← (byte) startProcessing::i#2 << (byte) 3
[45] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$21)!=(const byte) STATUS_FREE#0) goto startProcessing::@3
to:startProcessing::@4
startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@7
[40] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@7/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
[41] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@6
startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@9
[46] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
[47] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8
to:startProcessing::@5
startProcessing::@5: scope:[startProcessing] from startProcessing::@4
[42] (byte~) startProcessing::$6 ← (byte) startProcessing::freeIdx#2 << (byte) 2
[43] *((byte*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$6) ← (byte) startProcessing::center_x#0
[44] *((byte*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGCHAR_Y + (byte~) startProcessing::$6) ← (byte) startProcessing::center_y#0
[45] *((word*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGCHAR_DIST + (byte~) startProcessing::$6) ← (word) startProcessing::center_dist#0
[48] (word~) startProcessing::$0 ← (word)(byte) startProcessing::freeIdx#2
[49] (word~) startProcessing::$1 ← (word~) startProcessing::$0 << (byte) 6
[50] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$1
to:startProcessing::@6
startProcessing::@6: scope:[startProcessing] from startProcessing::@5 startProcessing::@6
[51] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 )
[51] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 )
[52] *((byte*) startProcessing::spriteData#2) ← (byte) $ff
[53] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3
[54] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2
[55] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6
to:startProcessing::@7
startProcessing::@7: scope:[startProcessing] from startProcessing::@6
[56] (word~) startProcessing::$3 ← (word)(byte) startProcessing::center_x#0
[57] (word~) startProcessing::$4 ← (word~) startProcessing::$3 << (byte) 3
[58] (word) startProcessing::spriteX#0 ← (byte) $18 + (word~) startProcessing::$4
[59] (byte~) startProcessing::$6 ← (byte) startProcessing::center_y#0 << (byte) 3
[60] (byte) startProcessing::spriteY#0 ← (byte) $32 + (byte~) startProcessing::$6
[61] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2
[62] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_y#0
[63] (word) startProcessing::$30 ← (word~) startProcessing::$11 << (byte) 2
[64] (word) startProcessing::$31 ← (word) startProcessing::$30 + (word~) startProcessing::$11
[65] (word~) startProcessing::$12 ← (word) startProcessing::$31 << (byte) 3
[66] (byte*~) startProcessing::$13 ← (const byte*) SCREEN#0 + (word~) startProcessing::$12
[67] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$13 + (byte) startProcessing::center_x#0
[68] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3
[69] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$22) ← (word) startProcessing::spriteX#0
[70] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$22) ← (byte) startProcessing::spriteY#0
[71] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$22) ← (byte) startProcessing::freeIdx#2
[72] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$22) ← (byte) startProcessing::spritePtr#0
[73] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$22) ← (const byte) STATUS_NEW#0
[74] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$22) ← (byte*) startProcessing::screenPtr#0
to:startProcessing::@return
startProcessing::@return: scope:[startProcessing] from startProcessing::@5
[46] return
startProcessing::@return: scope:[startProcessing] from startProcessing::@7
[75] return
to:@return
startProcessing::@6: scope:[startProcessing] from startProcessing::@4
[47] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2
startProcessing::@8: scope:[startProcessing] from startProcessing::@4
[76] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2
to:startProcessing::@1
startProcessing::@3: scope:[startProcessing] from startProcessing::@2
[48] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2
[49] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2
to:startProcessing::@7
startProcessing::@7: scope:[startProcessing] from startProcessing::@3
[50] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6
[77] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2
[78] if((byte) startProcessing::i#1!=(byte) 1) goto startProcessing::@2
to:startProcessing::@9
startProcessing::@9: scope:[startProcessing] from startProcessing::@3
[79] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6
to:startProcessing::@4
getCharToProcess: scope:[getCharToProcess] from main::@5
[51] phi()
getCharToProcess: scope:[getCharToProcess] from main::@6
[80] phi()
to:getCharToProcess::@1
getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9
[52] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 )
[52] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 )
[52] (word) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const word) NOT_FOUND#0 getCharToProcess::@9/(word~) getCharToProcess::closest_dist#10 )
[52] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
[52] (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(const byte[$3e8]) SCREEN_COPY#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 )
[81] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 )
[81] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 )
[81] (word) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const word) NOT_FOUND#0 getCharToProcess::@9/(word~) getCharToProcess::closest_dist#10 )
[81] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
[81] (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(const byte[$3e8]) SCREEN_COPY#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 )
to:getCharToProcess::@2
getCharToProcess::@2: scope:[getCharToProcess] from getCharToProcess::@1 getCharToProcess::@10
[53] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 )
[53] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 )
[53] (word) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(word) getCharToProcess::closest_dist#8 getCharToProcess::@10/(word~) getCharToProcess::closest_dist#12 )
[53] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 )
[54] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11
[82] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 )
[82] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 )
[82] (word) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(word) getCharToProcess::closest_dist#8 getCharToProcess::@10/(word~) getCharToProcess::closest_dist#12 )
[82] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 )
[83] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11
to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@2
[55] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1
[56] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1
[57] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14)
[58] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12
[84] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1
[85] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1
[86] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14)
[87] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12
to:getCharToProcess::@5
getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4
[59] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2
[60] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7
[88] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2
[89] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7
to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5
[61] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte~) getCharToProcess::return_y#7 )
[61] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte~) getCharToProcess::return_x#7 )
[61] (word) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(word~) getCharToProcess::return_dist#5 getCharToProcess::@12/(word~) getCharToProcess::return_dist#6 getCharToProcess::@5/(word) getCharToProcess::dist#0 )
[62] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2
[63] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10
[90] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte~) getCharToProcess::return_y#7 )
[90] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte~) getCharToProcess::return_x#7 )
[90] (word) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(word~) getCharToProcess::return_dist#5 getCharToProcess::@12/(word~) getCharToProcess::return_dist#6 getCharToProcess::@5/(word) getCharToProcess::dist#0 )
[91] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2
[92] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10
to:getCharToProcess::@6
getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3
[64] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28
[65] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7
[66] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9
[93] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28
[94] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7
[95] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9
to:getCharToProcess::@7
getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6
[67] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return
[96] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return
to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7
[68] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1
[69] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2
[70] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9
[71] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3
[72] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10
[73] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' '
[97] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1
[98] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2
[99] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9
[100] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3
[101] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10
[102] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' '
to:getCharToProcess::@return
getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8
[74] return
[103] return
to:@return
getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6
[75] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1
[104] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1
to:getCharToProcess::@1
getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3
[76] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1
[105] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1
to:getCharToProcess::@2
getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4
[77] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2
[106] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2
to:getCharToProcess::@3
getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2
[78] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2
[107] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2
to:getCharToProcess::@3
initSquareTables: scope:[initSquareTables] from main::@4
[79] phi()
initSquareTables: scope:[initSquareTables] from main::@5
[108] phi()
to:initSquareTables::@1
initSquareTables::@1: scope:[initSquareTables] from initSquareTables initSquareTables::@9
[80] (byte) initSquareTables::x#2 ← phi( initSquareTables/(byte) 0 initSquareTables::@9/(byte) initSquareTables::x#1 )
[81] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2
[109] (byte) initSquareTables::x#2 ← phi( initSquareTables/(byte) 0 initSquareTables::@9/(byte) initSquareTables::x#1 )
[110] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2
to:initSquareTables::@3
initSquareTables::@3: scope:[initSquareTables] from initSquareTables::@1
[82] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14
[111] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14
to:initSquareTables::@4
initSquareTables::@4: scope:[initSquareTables] from initSquareTables::@2 initSquareTables::@3
[83] (byte) initSquareTables::x_dist#0 ← phi( initSquareTables::@2/(byte~) initSquareTables::$4 initSquareTables::@3/(byte~) initSquareTables::$2 )
[84] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0
[85] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
[86] call mul8u
[87] (word) mul8u::return#2 ← (word) mul8u::res#2
[112] (byte) initSquareTables::x_dist#0 ← phi( initSquareTables::@2/(byte~) initSquareTables::$4 initSquareTables::@3/(byte~) initSquareTables::$2 )
[113] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0
[114] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
[115] call mul8u
[116] (word) mul8u::return#2 ← (word) mul8u::res#2
to:initSquareTables::@9
initSquareTables::@9: scope:[initSquareTables] from initSquareTables::@4
[88] (word~) initSquareTables::$6 ← (word) mul8u::return#2
[89] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1
[90] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6
[91] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2
[92] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1
[117] (word~) initSquareTables::$6 ← (word) mul8u::return#2
[118] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1
[119] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6
[120] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2
[121] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1
to:initSquareTables::@5
initSquareTables::@5: scope:[initSquareTables] from initSquareTables::@10 initSquareTables::@9
[93] (byte) initSquareTables::y#2 ← phi( initSquareTables::@10/(byte) initSquareTables::y#1 initSquareTables::@9/(byte) 0 )
[94] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6
[122] (byte) initSquareTables::y#2 ← phi( initSquareTables::@10/(byte) initSquareTables::y#1 initSquareTables::@9/(byte) 0 )
[123] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6
to:initSquareTables::@7
initSquareTables::@7: scope:[initSquareTables] from initSquareTables::@5
[95] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c
[124] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c
to:initSquareTables::@8
initSquareTables::@8: scope:[initSquareTables] from initSquareTables::@6 initSquareTables::@7
[96] (byte) initSquareTables::y_dist#0 ← phi( initSquareTables::@6/(byte~) initSquareTables::$12 initSquareTables::@7/(byte~) initSquareTables::$10 )
[97] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0
[98] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
[99] call mul8u
[100] (word) mul8u::return#3 ← (word) mul8u::res#2
[125] (byte) initSquareTables::y_dist#0 ← phi( initSquareTables::@6/(byte~) initSquareTables::$12 initSquareTables::@7/(byte~) initSquareTables::$10 )
[126] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0
[127] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
[128] call mul8u
[129] (word) mul8u::return#3 ← (word) mul8u::res#2
to:initSquareTables::@10
initSquareTables::@10: scope:[initSquareTables] from initSquareTables::@8
[101] (word~) initSquareTables::$14 ← (word) mul8u::return#3
[102] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1
[103] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14
[104] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2
[105] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5
[130] (word~) initSquareTables::$14 ← (word) mul8u::return#3
[131] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1
[132] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14
[133] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2
[134] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5
to:initSquareTables::@return
initSquareTables::@return: scope:[initSquareTables] from initSquareTables::@10
[106] return
[135] return
to:@return
initSquareTables::@6: scope:[initSquareTables] from initSquareTables::@5
[107] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2
[136] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2
to:initSquareTables::@8
initSquareTables::@2: scope:[initSquareTables] from initSquareTables::@1
[108] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2
[137] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2
to:initSquareTables::@4
mul8u: scope:[mul8u] from initSquareTables::@4 initSquareTables::@8
[109] (byte) mul8u::a#6 ← phi( initSquareTables::@8/(byte) mul8u::a#2 initSquareTables::@4/(byte) mul8u::a#1 )
[109] (word) mul8u::mb#0 ← phi( initSquareTables::@8/(byte) mul8u::b#1 initSquareTables::@4/(byte) mul8u::b#0 )
[138] (byte) mul8u::a#6 ← phi( initSquareTables::@8/(byte) mul8u::a#2 initSquareTables::@4/(byte) mul8u::a#1 )
[138] (word) mul8u::mb#0 ← phi( initSquareTables::@8/(byte) mul8u::b#1 initSquareTables::@4/(byte) mul8u::b#0 )
to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@3
[110] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 )
[110] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 )
[110] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 )
[111] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2
[139] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 )
[139] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 )
[139] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 )
[140] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2
to:mul8u::@return
mul8u::@return: scope:[mul8u] from mul8u::@1
[112] return
[141] return
to:@return
mul8u::@2: scope:[mul8u] from mul8u::@1
[113] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1
[114] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
[142] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1
[143] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
to:mul8u::@4
mul8u::@4: scope:[mul8u] from mul8u::@2
[115] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
[144] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
to:mul8u::@3
mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4
[116] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
[117] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1
[118] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
[145] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
[146] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1
[147] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
to:mul8u::@1
setupRasterIrq: scope:[setupRasterIrq] from main::@2
setupRasterIrq: scope:[setupRasterIrq] from main::@3
asm { sei }
[120] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[121] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[122] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[149] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[150] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[151] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
to:setupRasterIrq::@1
setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq
[123] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
[152] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1
[124] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0
[125] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[126] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0
[153] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0
[154] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[155] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0
asm { cli }
to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2
[128] return
[157] return
to:@return
irqBottom: scope:[irqBottom] from
[129] phi()
[158] phi()
to:irqBottom::@1
irqBottom::@1: scope:[irqBottom] from irqBottom irqBottom::@1
[130] (byte) irqBottom::i#2 ← phi( irqBottom/(byte) 0 irqBottom::@1/(byte) irqBottom::i#1 )
[131] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2
[132] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1
[159] (byte) irqBottom::i#2 ← phi( irqBottom/(byte) 0 irqBottom::@1/(byte) irqBottom::i#1 )
[160] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2
[161] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1
to:irqBottom::@2
irqBottom::@2: scope:[irqBottom] from irqBottom::@1
[133] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[134] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[135] call processChars
[162] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[163] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[164] call processChars
to:irqBottom::@3
irqBottom::@3: scope:[irqBottom] from irqBottom::@2
[136] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[137] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[138] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0
[139] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
[140] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[165] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[166] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[167] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0
[168] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
[169] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqBottom::@return
irqBottom::@return: scope:[irqBottom] from irqBottom::@3
[141] return
[170] return
to:@return
processChars: scope:[processChars] from irqBottom::@2
[142] phi()
[171] phi()
to:processChars::@1
processChars::@1: scope:[processChars] from processChars processChars::@2
[143] (byte) processChars::i#2 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
[144] (byte~) processChars::$14 ← (byte) processChars::i#2 << (byte) 2
[145] if(*((word*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGCHAR_DIST + (byte~) processChars::$14)==(const word) NOT_FOUND#0) goto processChars::@2
to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@1
[146] (byte~) processChars::$15 ← (byte) processChars::i#2 << (byte) 2
[147] (byte) processChars::processing_x#0 ← *((byte*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$15)
[148] (byte) processChars::processing_y#0 ← *((byte*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGCHAR_Y + (byte~) processChars::$15)
[149] (word~) processChars::$3 ← (word)(byte) processChars::processing_y#0
[150] (word) processChars::$22 ← (word~) processChars::$3 << (byte) 2
[151] (word) processChars::$23 ← (word) processChars::$22 + (word~) processChars::$3
[152] (word~) processChars::$4 ← (word) processChars::$23 << (byte) 3
[153] (byte*~) processChars::$5 ← (const byte*) COLS#0 + (word~) processChars::$4
[154] *((byte*~) processChars::$5 + (byte) processChars::processing_x#0) ← (const byte) WHITE#0
[155] (word~) processChars::$7 ← (word)(byte) processChars::processing_y#0
[156] (word) processChars::$25 ← (word~) processChars::$7 << (byte) 2
[157] (word) processChars::$26 ← (word) processChars::$25 + (word~) processChars::$7
[158] (word~) processChars::$8 ← (word) processChars::$26 << (byte) 3
[159] (byte*~) processChars::$9 ← (const byte*) SCREEN#0 + (word~) processChars::$8
[160] if(*((byte*~) processChars::$9 + (byte) processChars::processing_x#0)==(byte) ' ') goto processChars::@3
[172] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
[173] (byte~) processChars::$18 ← (byte) processChars::i#10 << (byte) 3
[174] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$18
[175] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
[176] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2
to:processChars::@8
processChars::@8: scope:[processChars] from processChars::@1
[177] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3
to:processChars::@9
processChars::@9: scope:[processChars] from processChars::@8
[178] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' '
[179] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0
[180] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
[181] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0
to:processChars::@3
processChars::@3: scope:[processChars] from processChars::@8 processChars::@9
[182] (byte~) processChars::$9 ← > *((word*)(struct ProcessingSprite*) processChars::processing#0)
[183] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4
to:processChars::@6
processChars::@6: scope:[processChars] from processChars::@5
[161] if(*((byte*~) processChars::$9 + (byte) processChars::processing_x#0)>(byte) ' ') goto processChars::@4
processChars::@6: scope:[processChars] from processChars::@3
[184] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0
[185] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$10
to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@6
[186] (byte~) processChars::$13 ← (byte) processChars::i#10 << (byte) 1
[187] (byte~) processChars::$12 ← (byte)*((word*)(struct ProcessingSprite*) processChars::processing#0)
[188] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$13) ← (byte~) processChars::$12
[189] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$13) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)
[190] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← -- *((word*)(struct ProcessingSprite*) processChars::processing#0)
[191] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)!=(byte) 0) goto processChars::@2
to:processChars::@7
processChars::@7: scope:[processChars] from processChars::@6
[162] *((byte*~) processChars::$9 + (byte) processChars::processing_x#0) ← ++ *((byte*~) processChars::$9 + (byte) processChars::processing_x#0)
processChars::@7: scope:[processChars] from processChars::@5
[192] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0
[193] (byte~) processChars::$16 ← (byte) $ff ^ (byte) processChars::bitmask#0
[194] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$16
to:processChars::@2
processChars::@2: scope:[processChars] from processChars::@1 processChars::@3 processChars::@4 processChars::@7
[163] (byte) processChars::i#1 ← ++ (byte) processChars::i#2
[164] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1
processChars::@2: scope:[processChars] from processChars::@1 processChars::@5 processChars::@7
[195] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
[196] if((byte) processChars::i#1!=(byte) 1) goto processChars::@1
to:processChars::@return
processChars::@return: scope:[processChars] from processChars::@2
[165] return
[197] return
to:@return
processChars::@4: scope:[processChars] from processChars::@6
[166] *((byte*~) processChars::$9 + (byte) processChars::processing_x#0) ← -- *((byte*~) processChars::$9 + (byte) processChars::processing_x#0)
to:processChars::@2
processChars::@3: scope:[processChars] from processChars::@5
[167] (byte~) processChars::$16 ← (byte) processChars::i#2 << (byte) 2
[168] *((word*)(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGCHAR_DIST + (byte~) processChars::$16) ← (const word) NOT_FOUND#0
to:processChars::@2
processChars::@4: scope:[processChars] from processChars::@3
[198] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0
to:processChars::@5
irqTop: scope:[irqTop] from
[169] phi()
[199] phi()
to:irqTop::@1
irqTop::@1: scope:[irqTop] from irqTop irqTop::@1
[170] (byte) irqTop::i#2 ← phi( irqTop/(byte) 0 irqTop::@1/(byte) irqTop::i#1 )
[171] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2
[172] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1
[200] (byte) irqTop::i#2 ← phi( irqTop/(byte) 0 irqTop::@1/(byte) irqTop::i#1 )
[201] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2
[202] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1
to:irqTop::@2
irqTop::@2: scope:[irqTop] from irqTop::@1
[173] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[174] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[203] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[204] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
to:irqTop::@3
irqTop::@3: scope:[irqTop] from irqTop::@2 irqTop::@3
[175] (byte) irqTop::i1#2 ← phi( irqTop::@2/(byte) 0 irqTop::@3/(byte) irqTop::i1#1 )
[176] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2
[177] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@3
[205] (byte) irqTop::i1#2 ← phi( irqTop::@2/(byte) 0 irqTop::@3/(byte) irqTop::i1#1 )
[206] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2
[207] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@3
to:irqTop::@4
irqTop::@4: scope:[irqTop] from irqTop::@3
[178] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[179] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[180] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
[181] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
[182] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[208] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[209] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[210] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
[211] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
[212] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqTop::@return
irqTop::@return: scope:[irqTop] from irqTop::@4
[183] return
[213] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -11,8 +11,6 @@
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = (byte*) 56333
(byte) CIA_INTERRUPT_CLEAR
(const byte) CIA_INTERRUPT_CLEAR#0 CIA_INTERRUPT_CLEAR = (byte) $7f
(byte*) COLS
(const byte*) COLS#0 COLS = (byte*) 55296
(void()**) HARDWARE_IRQ
(const void()**) HARDWARE_IRQ#0 HARDWARE_IRQ = (void()**) 65534
(byte*) IRQ_ENABLE
@ -26,11 +24,14 @@
(word) NOT_FOUND
(const word) NOT_FOUND#0 NOT_FOUND = (word) $ffff
(byte) NUM_PROCESSING
(const byte) NUM_PROCESSING#0 NUM_PROCESSING = (byte) $10
(const byte) OFFSET_STRUCT_PROCESSINGCHAR_DIST OFFSET_STRUCT_PROCESSINGCHAR_DIST = (byte) 2
(const byte) OFFSET_STRUCT_PROCESSINGCHAR_Y OFFSET_STRUCT_PROCESSINGCHAR_Y = (byte) 1
(struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING
(const struct ProcessingChar[NUM_PROCESSING#0]) PROCESSING#0 PROCESSING = { fill( NUM_PROCESSING#0, 0) }
(const byte) NUM_PROCESSING#0 NUM_PROCESSING = (byte) 1
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID OFFSET_STRUCT_PROCESSINGSPRITE_ID = (byte) 3
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR OFFSET_STRUCT_PROCESSINGSPRITE_PTR = (byte) 4
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = (byte) 6
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = (byte) 5
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y OFFSET_STRUCT_PROCESSINGSPRITE_Y = (byte) 2
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING
(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 PROCESSING = { fill( NUM_PROCESSING#0, 0) }
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = (byte*) 1
(byte*) PROCPORT_DDR
@ -42,6 +43,12 @@
(word) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::x
(byte) ProcessingSprite::y
(byte*) RASTER
(const byte*) RASTER#0 RASTER = (byte*) 53266
(byte) RASTER_IRQ_MIDDLE
@ -52,22 +59,41 @@
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
(byte[$3e8]) SCREEN_COPY
(const byte[$3e8]) SCREEN_COPY#0 SCREEN_COPY = { fill( $3e8, 0) }
(const byte) SIZEOF_POINTER SIZEOF_POINTER = (byte) 2
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = (byte*) 53269
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = (byte*) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = (byte*) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = (byte*) 53249
(byte*) SPRITE_DATA
(const byte*) SPRITE_DATA#0 SPRITE_DATA = (byte*) 8192
(word) SPRITE_PTRS
(const word) SPRITE_PTRS#0 SPRITE_PTRS = (word) $3f8
(word[$28]) SQUARES_X
(const word[$28]) SQUARES_X#0 SQUARES_X = { fill( $28, 0) }
(word[$19]) SQUARES_Y
(const word[$19]) SQUARES_Y#0 SQUARES_Y = { fill( $19, 0) }
(byte) STATUS_FREE
(const byte) STATUS_FREE#0 STATUS_FREE = (byte) 0
(byte) STATUS_NEW
(const byte) STATUS_NEW#0 STATUS_NEW = (byte) 1
(byte) STATUS_PROCESSING
(const byte) STATUS_PROCESSING#0 STATUS_PROCESSING = (byte) 2
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte) 1
(struct ProcessingChar()) getCharToProcess()
(word~) getCharToProcess::$10 $10 zp ZP_WORD:25 4.0
(byte*~) getCharToProcess::$11 $11 zp ZP_WORD:25 4.0
(word~) getCharToProcess::$10 $10 zp ZP_WORD:37 4.0
(byte*~) getCharToProcess::$11 $11 zp ZP_WORD:37 4.0
(byte~) getCharToProcess::$13 reg byte x 1001.0
(byte~) getCharToProcess::$14 reg byte a 2002.0
(word) getCharToProcess::$15 $15 zp ZP_WORD:27 4.0
(word) getCharToProcess::$16 $16 zp ZP_WORD:25 4.0
(word~) getCharToProcess::$9 $9 zp ZP_WORD:25 3.0
(word) getCharToProcess::$15 $15 zp ZP_WORD:39 4.0
(word) getCharToProcess::$16 $16 zp ZP_WORD:37 4.0
(word~) getCharToProcess::$9 $9 zp ZP_WORD:37 3.0
(label) getCharToProcess::@1
(label) getCharToProcess::@10
(label) getCharToProcess::@11
@ -83,50 +109,50 @@
(label) getCharToProcess::@return
(struct ProcessingChar) getCharToProcess::closest
(word) getCharToProcess::closest_dist
(word~) getCharToProcess::closest_dist#10 closest_dist zp ZP_WORD:11 202.0
(word~) getCharToProcess::closest_dist#12 closest_dist zp ZP_WORD:11 2002.0
(word) getCharToProcess::closest_dist#2 closest_dist zp ZP_WORD:11 684.1666666666667
(word) getCharToProcess::closest_dist#8 closest_dist zp ZP_WORD:11 202.0
(word~) getCharToProcess::closest_dist#10 closest_dist zp ZP_WORD:15 202.0
(word~) getCharToProcess::closest_dist#12 closest_dist zp ZP_WORD:15 2002.0
(word) getCharToProcess::closest_dist#2 closest_dist zp ZP_WORD:15 684.1666666666667
(word) getCharToProcess::closest_dist#8 closest_dist zp ZP_WORD:15 202.0
(byte) getCharToProcess::closest_x
(byte) getCharToProcess::closest_x#7 closest_x zp ZP_BYTE:13 388.0
(byte) getCharToProcess::closest_x#9 closest_x zp ZP_BYTE:13 202.0
(byte) getCharToProcess::closest_x#7 closest_x zp ZP_BYTE:17 388.0
(byte) getCharToProcess::closest_x#9 closest_x zp ZP_BYTE:17 202.0
(byte) getCharToProcess::closest_y
(byte) getCharToProcess::closest_y#7 closest_y zp ZP_BYTE:14 388.0
(byte) getCharToProcess::closest_y#9 closest_y zp ZP_BYTE:14 202.0
(byte) getCharToProcess::closest_y#7 closest_y zp ZP_BYTE:18 388.0
(byte) getCharToProcess::closest_y#9 closest_y zp ZP_BYTE:18 202.0
(word) getCharToProcess::dist
(word) getCharToProcess::dist#0 dist zp ZP_WORD:15 750.75
(word) getCharToProcess::dist#0 dist zp ZP_WORD:19 750.75
(struct ProcessingChar) getCharToProcess::return
(word) getCharToProcess::return_dist
(word) getCharToProcess::return_dist#0 return_dist zp ZP_WORD:15 7.333333333333333
(word) getCharToProcess::return_dist#1 return_dist zp ZP_WORD:15 242.23529411764704
(word~) getCharToProcess::return_dist#5 return_dist zp ZP_WORD:15 2002.0
(word~) getCharToProcess::return_dist#6 return_dist zp ZP_WORD:15 2002.0
(word) getCharToProcess::return_dist#0 return_dist zp ZP_WORD:19 7.333333333333333
(word) getCharToProcess::return_dist#1 return_dist zp ZP_WORD:19 242.23529411764704
(word~) getCharToProcess::return_dist#5 return_dist zp ZP_WORD:19 2002.0
(word~) getCharToProcess::return_dist#6 return_dist zp ZP_WORD:19 2002.0
(byte) getCharToProcess::return_x
(byte) getCharToProcess::return_x#0 reg byte y 7.333333333333333
(byte) getCharToProcess::return_x#1 return_x zp ZP_BYTE:13 242.23529411764704
(byte~) getCharToProcess::return_x#7 return_x zp ZP_BYTE:13 1001.0
(byte) getCharToProcess::return_x#1 return_x zp ZP_BYTE:17 242.23529411764704
(byte~) getCharToProcess::return_x#7 return_x zp ZP_BYTE:17 1001.0
(byte) getCharToProcess::return_y
(byte) getCharToProcess::return_y#0 reg byte x 7.333333333333333
(byte) getCharToProcess::return_y#1 return_y zp ZP_BYTE:14 228.66666666666669
(byte~) getCharToProcess::return_y#7 return_y zp ZP_BYTE:14 2002.0
(byte) getCharToProcess::return_y#1 return_y zp ZP_BYTE:18 228.66666666666669
(byte~) getCharToProcess::return_y#7 return_y zp ZP_BYTE:18 2002.0
(byte*) getCharToProcess::screen_line
(byte*) getCharToProcess::screen_line#1 screen_line zp ZP_WORD:7 50.5
(byte*) getCharToProcess::screen_line#4 screen_line zp ZP_WORD:7 80.2
(byte*) getCharToProcess::screen_line#1 screen_line zp ZP_WORD:11 50.5
(byte*) getCharToProcess::screen_line#4 screen_line zp ZP_WORD:11 80.2
(byte) getCharToProcess::x
(byte) getCharToProcess::x#1 x zp ZP_BYTE:10 1001.0
(byte) getCharToProcess::x#2 x zp ZP_BYTE:10 455.0
(byte) getCharToProcess::x#1 x zp ZP_BYTE:14 1001.0
(byte) getCharToProcess::x#2 x zp ZP_BYTE:14 455.0
(byte) getCharToProcess::y
(byte) getCharToProcess::y#1 y zp ZP_BYTE:9 101.0
(byte) getCharToProcess::y#7 y zp ZP_BYTE:9 137.75
(byte) getCharToProcess::y#1 y zp ZP_BYTE:13 101.0
(byte) getCharToProcess::y#7 y zp ZP_BYTE:13 137.75
(void()) initSquareTables()
(byte~) initSquareTables::$10 reg byte a 22.0
(byte~) initSquareTables::$12 reg byte a 22.0
(word~) initSquareTables::$14 $14 zp ZP_WORD:19 11.0
(word~) initSquareTables::$14 $14 zp ZP_WORD:23 11.0
(byte~) initSquareTables::$16 reg byte a 22.0
(byte~) initSquareTables::$17 reg byte a 22.0
(byte~) initSquareTables::$2 reg byte a 22.0
(byte~) initSquareTables::$4 reg byte a 22.0
(word~) initSquareTables::$6 $6 zp ZP_WORD:19 11.0
(word~) initSquareTables::$6 $6 zp ZP_WORD:23 11.0
(label) initSquareTables::@1
(label) initSquareTables::@10
(label) initSquareTables::@2
@ -139,13 +165,13 @@
(label) initSquareTables::@9
(label) initSquareTables::@return
(byte) initSquareTables::x
(byte) initSquareTables::x#1 x zp ZP_BYTE:17 16.5
(byte) initSquareTables::x#2 x zp ZP_BYTE:17 5.5
(byte) initSquareTables::x#1 x zp ZP_BYTE:21 16.5
(byte) initSquareTables::x#2 x zp ZP_BYTE:21 5.5
(byte) initSquareTables::x_dist
(byte) initSquareTables::x_dist#0 reg byte a 22.0
(byte) initSquareTables::y
(byte) initSquareTables::y#1 y zp ZP_BYTE:18 16.5
(byte) initSquareTables::y#2 y zp ZP_BYTE:18 5.5
(byte) initSquareTables::y#1 y zp ZP_BYTE:22 16.5
(byte) initSquareTables::y#2 y zp ZP_BYTE:22 5.5
(byte) initSquareTables::y_dist
(byte) initSquareTables::y_dist#0 reg byte a 22.0
interrupt(HARDWARE_ALL)(void()) irqBottom()
@ -169,8 +195,8 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) irqTop::i1#1 reg byte x 16.5
(byte) irqTop::i1#2 reg byte x 22.0
(void()) main()
(byte~) main::$14 reg byte x 14.666666666666666
(struct ProcessingChar~) main::$7
(struct ProcessingChar~) main::$10
(byte~) main::$17 reg byte x 12.833333333333334
(label) main::@1
(label) main::@2
(label) main::@3
@ -179,22 +205,26 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(struct ProcessingChar) main::center
(word) main::center_dist
(word) main::center_dist#0 center_dist zp ZP_WORD:15 8.25
(word) main::center_dist#0 center_dist zp ZP_WORD:19 22.0
(byte) main::center_x
(byte) main::center_x#0 reg byte y 5.5
(byte) main::center_y
(byte) main::center_y#0 reg byte x 5.5
(byte*) main::dst
(byte*) main::dst#1 dst zp ZP_WORD:4 11.0
(byte*) main::dst#2 dst zp ZP_WORD:4 11.0
(byte*) main::dst#1 dst zp ZP_WORD:6 11.0
(byte*) main::dst#2 dst zp ZP_WORD:6 11.0
(byte) main::i
(byte) main::i#1 reg byte y 16.5
(byte) main::i#2 reg byte y 6.6000000000000005
(byte) main::i#2 reg byte y 4.125
(byte*) main::sp
(byte*) main::sp#1 sp zp ZP_WORD:2 16.5
(byte*) main::sp#2 sp zp ZP_WORD:2 16.5
(byte*) main::src
(byte*) main::src#1 src zp ZP_WORD:2 11.0
(byte*) main::src#2 src zp ZP_WORD:2 16.5
(byte*) main::src#1 src zp ZP_WORD:4 11.0
(byte*) main::src#2 src zp ZP_WORD:4 16.5
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
(byte~) mul8u::$1 reg byte a 202.0
(label) mul8u::@1
@ -212,30 +242,23 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) mul8u::b#0 reg byte a 22.0
(byte) mul8u::b#1 reg byte a 22.0
(word) mul8u::mb
(word) mul8u::mb#0 mb zp ZP_WORD:21 24.0
(word) mul8u::mb#1 mb zp ZP_WORD:21 202.0
(word) mul8u::mb#2 mb zp ZP_WORD:21 43.57142857142858
(word) mul8u::mb#0 mb zp ZP_WORD:25 24.0
(word) mul8u::mb#1 mb zp ZP_WORD:25 202.0
(word) mul8u::mb#2 mb zp ZP_WORD:25 43.57142857142858
(word) mul8u::res
(word) mul8u::res#1 res zp ZP_WORD:19 202.0
(word) mul8u::res#2 res zp ZP_WORD:19 46.42857142857143
(word) mul8u::res#6 res zp ZP_WORD:19 101.0
(word) mul8u::res#1 res zp ZP_WORD:23 202.0
(word) mul8u::res#2 res zp ZP_WORD:23 46.42857142857143
(word) mul8u::res#6 res zp ZP_WORD:23 101.0
(word) mul8u::return
(word) mul8u::return#2 return zp ZP_WORD:19 22.0
(word) mul8u::return#3 return zp ZP_WORD:19 22.0
(word) mul8u::return#2 return zp ZP_WORD:23 22.0
(word) mul8u::return#3 return zp ZP_WORD:23 22.0
(void()) processChars()
(byte~) processChars::$14 reg byte a 22.0
(byte~) processChars::$15 reg byte y 16.5
(byte~) processChars::$10 reg byte a 22.0
(byte~) processChars::$12 reg byte a 22.0
(byte~) processChars::$13 reg byte x 11.0
(byte~) processChars::$16 reg byte a 22.0
(word) processChars::$22 $22 zp ZP_WORD:33 22.0
(word) processChars::$23 $23 zp ZP_WORD:31 22.0
(word) processChars::$25 $25 zp ZP_WORD:37 22.0
(word) processChars::$26 $26 zp ZP_WORD:35 22.0
(word~) processChars::$3 $3 zp ZP_WORD:31 16.5
(word~) processChars::$4 $4 zp ZP_WORD:31 22.0
(byte*~) processChars::$5 $5 zp ZP_WORD:31 22.0
(word~) processChars::$7 $7 zp ZP_WORD:35 16.5
(word~) processChars::$8 $8 zp ZP_WORD:35 22.0
(byte*~) processChars::$9 $9 zp ZP_WORD:35 25.666666666666668
(byte~) processChars::$18 reg byte a 22.0
(byte~) processChars::$9 reg byte a 22.0
(label) processChars::@1
(label) processChars::@2
(label) processChars::@3
@ -243,16 +266,16 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(label) processChars::@5
(label) processChars::@6
(label) processChars::@7
(label) processChars::@8
(label) processChars::@9
(label) processChars::@return
(byte) processChars::bitmask
(byte) processChars::bitmask#0 bitmask zp ZP_BYTE:43 2.8947368421052633
(byte) processChars::i
(byte) processChars::i#1 reg byte x 16.5
(byte) processChars::i#2 reg byte x 2.391304347826087
(struct ProcessingChar) processChars::processing
(byte*) processChars::processing_ptr
(byte) processChars::processing_x
(byte) processChars::processing_x#0 processing_x zp ZP_BYTE:29 5.866666666666666
(byte) processChars::processing_y
(byte) processChars::processing_y#0 processing_y zp ZP_BYTE:30 1.5714285714285714
(byte) processChars::i#1 i zp ZP_BYTE:27 16.5
(byte) processChars::i#10 i zp ZP_BYTE:27 1.8333333333333333
(struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0 processing zp ZP_WORD:41 0.5789473684210527
(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
(label) setupRasterIrq::@1
(label) setupRasterIrq::@2
@ -261,8 +284,18 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(const void()*) setupRasterIrq::irqRoutine#0 irqRoutine = &interrupt(HARDWARE_ALL)(void()) irqTop()
(word) setupRasterIrq::raster
(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (word) startProcessing::center_dist)
(byte~) startProcessing::$5 reg byte a 2002.0
(byte~) startProcessing::$6 reg byte x 2.6666666666666665
(word~) startProcessing::$0 $0 zp ZP_WORD:9 4.0
(word~) startProcessing::$1 $1 zp ZP_WORD:9 4.0
(word~) startProcessing::$11 $11 zp ZP_WORD:33 3.0
(word~) startProcessing::$12 $12 zp ZP_WORD:33 4.0
(byte*~) startProcessing::$13 $13 zp ZP_WORD:33 4.0
(byte~) startProcessing::$21 reg byte a 2002.0
(byte~) startProcessing::$22 reg byte x 2.333333333333333
(word~) startProcessing::$3 $3 zp ZP_WORD:30 4.0
(word) startProcessing::$30 $30 zp ZP_WORD:35 4.0
(word) startProcessing::$31 $31 zp ZP_WORD:33 4.0
(word~) startProcessing::$4 $4 zp ZP_WORD:30 4.0
(byte~) startProcessing::$6 reg byte a 4.0
(label) startProcessing::@1
(label) startProcessing::@2
(label) startProcessing::@3
@ -270,70 +303,95 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(label) startProcessing::@5
(label) startProcessing::@6
(label) startProcessing::@7
(label) startProcessing::@8
(label) startProcessing::@9
(label) startProcessing::@return
(struct ProcessingChar) startProcessing::center
(word) startProcessing::center_dist
(word) startProcessing::center_dist#0 center_dist zp ZP_WORD:15 0.8666666666666666
(byte) startProcessing::center_x
(byte) startProcessing::center_x#0 center_x zp ZP_BYTE:23 0.8666666666666666
(byte) startProcessing::center_x#0 center_x zp ZP_BYTE:28 0.40625
(byte) startProcessing::center_y
(byte) startProcessing::center_y#0 center_y zp ZP_BYTE:24 0.8666666666666666
(byte) startProcessing::center_y#0 center_y zp ZP_BYTE:29 0.5
(byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#2 reg byte x 653.0
(byte) startProcessing::freeIdx#6 freeIdx zp ZP_BYTE:6 33.666666666666664
(byte~) startProcessing::freeIdx#7 freeIdx zp ZP_BYTE:6 202.0
(byte~) startProcessing::freeIdx#8 reg byte x 202.0
(byte) startProcessing::freeIdx#2 freeIdx zp ZP_BYTE:8 52.39999999999999
(byte) startProcessing::freeIdx#6 reg byte x 33.666666666666664
(byte~) startProcessing::freeIdx#7 reg byte x 202.0
(byte~) startProcessing::freeIdx#8 freeIdx zp ZP_BYTE:8 202.0
(byte) startProcessing::i
(byte) startProcessing::i#1 reg byte x 1501.5
(byte) startProcessing::i#2 reg byte x 1334.6666666666667
(byte) startProcessing::i#1 i zp ZP_BYTE:8 1501.5
(byte) startProcessing::i#2 i zp ZP_BYTE:8 1334.6666666666667
(byte) startProcessing::i1
(byte) startProcessing::i1#1 reg byte x 151.5
(byte) startProcessing::i1#2 reg byte x 67.33333333333333
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0 screenPtr zp ZP_WORD:33 0.5714285714285714
(byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0 spriteData zp ZP_WORD:9 4.0
(byte*) startProcessing::spriteData#1 spriteData zp ZP_WORD:9 67.33333333333333
(byte*) startProcessing::spriteData#2 spriteData zp ZP_WORD:9 152.5
(byte) startProcessing::spriteIdx
(byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0 spritePtr zp ZP_BYTE:32 0.36363636363636365
(word) startProcessing::spriteX
(word) startProcessing::spriteX#0 spriteX zp ZP_WORD:30 0.36363636363636365
(byte) startProcessing::spriteY
(byte) startProcessing::spriteY#0 reg byte y 0.4
reg byte y [ main::i#2 main::i#1 ]
zp ZP_WORD:2 [ main::src#2 main::src#1 ]
zp ZP_WORD:4 [ main::dst#2 main::dst#1 ]
zp ZP_BYTE:6 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
reg byte x [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
zp ZP_WORD:7 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ]
zp ZP_BYTE:9 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
zp ZP_BYTE:10 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
zp ZP_WORD:11 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
zp ZP_BYTE:13 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
zp ZP_BYTE:14 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
zp ZP_WORD:15 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 getCharToProcess::return_dist#0 main::center_dist#0 startProcessing::center_dist#0 ]
zp ZP_BYTE:17 [ initSquareTables::x#2 initSquareTables::x#1 ]
zp ZP_WORD:2 [ main::sp#2 main::sp#1 ]
zp ZP_WORD:4 [ main::src#2 main::src#1 ]
zp ZP_WORD:6 [ main::dst#2 main::dst#1 ]
reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
zp ZP_WORD:9 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$1 startProcessing::$0 ]
reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ]
zp ZP_WORD:11 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ]
zp ZP_BYTE:13 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
zp ZP_BYTE:14 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
zp ZP_WORD:15 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
zp ZP_BYTE:17 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
zp ZP_BYTE:18 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
zp ZP_WORD:19 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 getCharToProcess::return_dist#0 main::center_dist#0 ]
zp ZP_BYTE:21 [ initSquareTables::x#2 initSquareTables::x#1 ]
reg byte a [ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ]
zp ZP_BYTE:18 [ initSquareTables::y#2 initSquareTables::y#1 ]
zp ZP_BYTE:22 [ initSquareTables::y#2 initSquareTables::y#1 ]
reg byte a [ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ]
reg byte a [ mul8u::b#1 ]
reg byte a [ mul8u::b#0 ]
reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
zp ZP_WORD:19 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 initSquareTables::$6 initSquareTables::$14 ]
zp ZP_WORD:21 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
zp ZP_WORD:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 initSquareTables::$6 initSquareTables::$14 ]
zp ZP_WORD:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
reg byte x [ irqBottom::i#2 irqBottom::i#1 ]
reg byte x [ processChars::i#2 processChars::i#1 ]
zp ZP_BYTE:27 [ processChars::i#10 processChars::i#1 ]
reg byte x [ irqTop::i#2 irqTop::i#1 ]
reg byte x [ irqTop::i1#2 irqTop::i1#1 ]
reg byte x [ main::$14 ]
reg byte x [ main::$17 ]
reg byte y [ getCharToProcess::return_x#0 ]
reg byte x [ getCharToProcess::return_y#0 ]
reg byte y [ main::center_x#0 ]
reg byte x [ main::center_y#0 ]
zp ZP_BYTE:23 [ startProcessing::center_x#0 ]
zp ZP_BYTE:24 [ startProcessing::center_y#0 ]
reg byte a [ startProcessing::$5 ]
reg byte x [ startProcessing::$6 ]
zp ZP_BYTE:28 [ startProcessing::center_x#0 ]
zp ZP_BYTE:29 [ startProcessing::center_y#0 ]
reg byte a [ startProcessing::$21 ]
zp ZP_WORD:30 [ startProcessing::$3 startProcessing::$4 startProcessing::spriteX#0 ]
reg byte a [ startProcessing::$6 ]
reg byte y [ startProcessing::spriteY#0 ]
zp ZP_BYTE:32 [ startProcessing::spritePtr#0 ]
zp ZP_WORD:33 [ startProcessing::$11 startProcessing::$31 startProcessing::$12 startProcessing::$13 startProcessing::screenPtr#0 ]
zp ZP_WORD:35 [ startProcessing::$30 ]
reg byte x [ startProcessing::$22 ]
reg byte x [ getCharToProcess::$13 ]
reg byte a [ getCharToProcess::$14 ]
zp ZP_WORD:25 [ getCharToProcess::$9 getCharToProcess::$16 getCharToProcess::$10 getCharToProcess::$11 ]
zp ZP_WORD:27 [ getCharToProcess::$15 ]
zp ZP_WORD:37 [ getCharToProcess::$9 getCharToProcess::$16 getCharToProcess::$10 getCharToProcess::$11 ]
zp ZP_WORD:39 [ getCharToProcess::$15 ]
reg byte a [ initSquareTables::$16 ]
reg byte a [ initSquareTables::$17 ]
reg byte a [ mul8u::$1 ]
reg byte a [ processChars::$14 ]
reg byte y [ processChars::$15 ]
zp ZP_BYTE:29 [ processChars::processing_x#0 ]
zp ZP_BYTE:30 [ processChars::processing_y#0 ]
zp ZP_WORD:31 [ processChars::$3 processChars::$23 processChars::$4 processChars::$5 ]
zp ZP_WORD:33 [ processChars::$22 ]
zp ZP_WORD:35 [ processChars::$7 processChars::$26 processChars::$8 processChars::$9 ]
zp ZP_WORD:37 [ processChars::$25 ]
reg byte a [ processChars::$18 ]
zp ZP_WORD:41 [ processChars::processing#0 ]
zp ZP_BYTE:43 [ processChars::bitmask#0 ]
reg byte a [ processChars::$9 ]
reg byte a [ processChars::$10 ]
reg byte x [ processChars::$13 ]
reg byte a [ processChars::$12 ]
reg byte a [ processChars::$16 ]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,43 @@
CANNOT SYNTHESIZE vbuz1=pbuz2_derefidx_vbuc1_band_pbuz3_derefidx_vbuc2
CANNOT SYNTHESIZE pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1_band_pbuz3_derefidx_vbuc2
CANNOT SYNTHESIZE vbuxx=pbuz1_derefidx_vbuc1_band_pbuz2_derefidx_vbuc2
CANNOT SYNTHESIZE _deref_pbuz1=pbuz2_derefidx_vbuc1_band_pbuz3_derefidx_vbuc2
CANNOT SYNTHESIZE pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc1_band_pbuz3_derefidx_vbuc2
vbuz1=pbuz2_derefidx_vbuc1_band_pbuz3_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuc1_band_pbuz2_derefidx_vbuc2 < vbuaa=pbuz2_derefidx_vbuc2_band_pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc2_band_pbuz2_derefidx_vbuc1 < vbuaa=pbuz2_derefidx_vbuc1_band_pbuz1_derefidx_vbuc2 < vbuaa=pbuz2_derefidx_vbuyy_band_pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuyy_band_pbuz2_derefidx_vbuc2 < vbuaa=pbuz2_derefidx_vbuc2_band_pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuc2_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuc2 < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:18.0
ldy #{c1}
lda ({z2}),y
ldy #{c2}
and ({z3}),y
sta {z1}
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1_band_pbuz3_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz2_derefidx_vbuz1_band_pbuz3_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz2_band_pbuz3_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz3_derefidx_vbuc2_band_pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuxx=pbuz2_derefidx_vbuc2_band_pbuz1_derefidx_vbuz3 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuc2_band_pbuz2_derefidx_vbuz3 < pbuc1_derefidx_vbuxx=pbuz2_derefidx_vbuz3_band_pbuz1_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz3_band_pbuz2_derefidx_vbuc2 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz3_band_pbuz2_derefidx_vbuyy < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz2_band_pbuz3_derefidx_vbuyy < pbuc1_derefidx_vbuxx=pbuz3_derefidx_vbuyy_band_pbuz1_derefidx_vbuz2 < pbuc1_derefidx_vbuxx=pbuz2_derefidx_vbuyy_band_pbuz1_derefidx_vbuz3 < pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy_band_pbuz2_derefidx_vbuz3 < pbuc1_derefidx_vbuxx=pbuz2_derefidx_vbuz3_band_pbuz1_derefidx_vbuyy < vbuaa=pbuz2_derefidx_vbuz3_band_pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuz2_band_vbuaa < vbuaa=pbuz1_derefidx_vbuyy_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A X Y cycles:24.0
ldx {z1}
ldy #{c2}
lda ({z3}),y
ldy {z1}
and ({z2}),y
sta {c1},x
pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1_band_pbuz3_derefidx_vbuc2 < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_band_pbuz2_derefidx_vbuc2 < pbuc1_derefidx_vbuyy=pbuz2_derefidx_vbuc2_band_pbuz1_derefidx_vbuyy < pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2_band_vbuaa < pbuc1_derefidx_vbuyy=vbuaa_band_pbuz1_derefidx_vbuc2 < vbuaa=vbuaa_band_pbuz1_derefidx_vbuc2 < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:27.0
ldy {z1}
lda ({z2}),y
sty $ff
ldy #{c2}
and ({z3}),y
ldy $ff
sta {c1},y
vbuxx=pbuz1_derefidx_vbuc1_band_pbuz2_derefidx_vbuc2 < vbuxx=pbuz2_derefidx_vbuc2_band_pbuz1_derefidx_vbuc1 < vbuxx=pbuz2_derefidx_vbuc2_band_pbuz1_derefidx_vbuyy < vbuxx=pbuz1_derefidx_vbuc2_band_vbuaa < vbuxx=vbuaa_band_pbuz1_derefidx_vbuc2 < vbuxx=vbuaa_band_pbuz1_derefidx_vbuyy < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A X Y cycles:17.0
ldy #{c1}
lda ({z1}),y
ldy #{c2}
and ({z2}),y
tax
_deref_pbuz1=pbuz2_derefidx_vbuc1_band_pbuz3_derefidx_vbuc2 < _deref_pbuz1=pbuz3_derefidx_vbuc2_band_pbuz2_derefidx_vbuc1 < _deref_pbuz1=pbuz2_derefidx_vbuc2_band_pbuz3_derefidx_vbuc1 < _deref_pbuz1=pbuz3_derefidx_vbuc1_band_pbuz2_derefidx_vbuc2 < vbuaa=pbuz2_derefidx_vbuc1_band_pbuz1_derefidx_vbuc2 < vbuaa=pbuz2_derefidx_vbuyy_band_pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuyy_band_pbuz2_derefidx_vbuc2 < vbuaa=pbuz2_derefidx_vbuc2_band_pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuc2_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuc2 < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:23.0
ldy #{c1}
lda ({z2}),y
ldy #{c2}
and ({z3}),y
ldy #0
sta ({z1}),y
pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc1_band_pbuz3_derefidx_vbuc2 < pbuz1_derefidx_vbuaa=pbuz3_derefidx_vbuc2_band_pbuz2_derefidx_vbuc1 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc2_band_pbuz3_derefidx_vbuc1 < pbuz1_derefidx_vbuaa=pbuz3_derefidx_vbuc1_band_pbuz2_derefidx_vbuc2 < pbuz1_derefidx_vbuaa=pbuz3_derefidx_vbuyy_band_pbuz2_derefidx_vbuc2 < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy_band_pbuz3_derefidx_vbuc2 < pbuz1_derefidx_vbuaa=pbuz3_derefidx_vbuc2_band_pbuz2_derefidx_vbuyy < pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuc2_band_pbuz3_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuc2_band_pbuz2_derefidx_vbuyy < vbuaa=pbuz2_derefidx_vbuyy_band_pbuz1_derefidx_vbuc2 < vbuaa=pbuz1_derefidx_vbuyy_band_pbuz2_derefidx_vbuc2 < vbuaa=pbuz2_derefidx_vbuc2_band_pbuz1_derefidx_vbuyy < vbuaa=pbuz1_derefidx_vbuc2_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuc2 < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:27.0
ldy #{c1}
sta $ff
lda ({z2}),y
ldy #{c2}
and ({z3}),y
ldy $ff
sta ({z1}),y