1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-02-20 00:29:10 +00:00

Added 2D-acceleration. Added more fragments. Improved word ror'ing.

This commit is contained in:
jespergravgaard 2019-06-16 00:31:43 +02:00
parent 94b0dbcffc
commit ba9b11f77b
26 changed files with 4937 additions and 4462 deletions

View File

@ -0,0 +1,10 @@
ldy #1
lda #>{c1}
cmp ({z1}),y
bcc {la1}
bne !+
dey
lda #<{c1}
cmp ({z1}),y
bcc {la1}
!:

View File

@ -0,0 +1,10 @@
iny
lda #>{c1}
cmp ({z1}),y
bcc {la1}
bne !+
dey
lda #<{c1}
cmp ({z1}),y
bcc {la1}
!:

View File

@ -1,5 +1,5 @@
lda {z2}+1 lda {z2}+1
ror lsr
sta {z1}+1 sta {z1}+1
lda {z2} lda {z2}
ror ror

View File

@ -0,0 +1,9 @@
lda ({z2}),y
clc
adc {c2},x
sta {z1}
iny
lda ({z2}),y
adc {c2}+1,x
sta {z1}+1

View File

@ -1,3 +1,2 @@
clc lsr {z1}+1
ror {z1}+1
ror {z1} ror {z1}

View File

@ -0,0 +1,6 @@
lsr {z1}+1
ror {z1}
lsr {z1}+1
ror {z1}
lsr {z1}+1
ror {z1}

View File

@ -0,0 +1,8 @@
lda {z2}+1
lsr
sta {z1}+1
lda {z2}
ror
sta {z1}
lsr {z1}+1
ror {z1}

View File

@ -0,0 +1,10 @@
lda {z2}+1
lsr
sta {z1}+1
lda {z2}
ror
sta {z1}
lsr {z1}+1
ror {z1}
lsr {z1}+1
ror {z1}

View File

@ -23,7 +23,9 @@ const byte* CHARGEN = $d000;
// Positions of the border (in sprite positions) // Positions of the border (in sprite positions)
const byte BORDER_XPOS_LEFT=24; const byte BORDER_XPOS_LEFT=24;
const word BORDER_XPOS_RIGHT=344;
const byte BORDER_YPOS_TOP=50; const byte BORDER_YPOS_TOP=50;
const byte BORDER_YPOS_BOTTOM=250;
// The offset of the sprite pointers from the screen start address // The offset of the sprite pointers from the screen start address
const word SPRITE_PTRS = $3f8; const word SPRITE_PTRS = $3f8;

View File

@ -1,5 +1,4 @@
// Black Hole at the center of the BASIC screen sucking in letters // Black Hole at the center of the BASIC screen sucking in letters
import "c64" import "c64"
import "multiply" import "multiply"
@ -7,6 +6,10 @@ import "multiply"
const byte* SCREEN = 0x0400; const byte* SCREEN = 0x0400;
// Sprite data for the animating sprites // Sprite data for the animating sprites
const byte* SPRITE_DATA = 0x2000; const byte* SPRITE_DATA = 0x2000;
// Values added to VX
const word* VXSIN = 0x2200;
// Values added to VY
const word* VYSIN = 0x2280;
// Copy of the screen used for finding chars to process // Copy of the screen used for finding chars to process
byte[1000] SCREEN_COPY; byte[1000] SCREEN_COPY;
@ -14,7 +17,6 @@ byte[1000] SCREEN_COPY;
// Max number of chars processed at once // Max number of chars processed at once
const byte NUM_PROCESSING = 8; const byte NUM_PROCESSING = 8;
// Struct holding char being processed // Struct holding char being processed
struct ProcessingChar { struct ProcessingChar {
// x-position (0-39) // x-position (0-39)
@ -75,6 +77,7 @@ void main() {
break; break;
startProcessing(center); startProcessing(center);
} while(true); } while(true);
(*(SCREEN+999)) = '.';
do { do {
(*(COLS+999))++; (*(COLS+999))++;
} while (true); } while (true);
@ -136,11 +139,24 @@ void startProcessing(struct ProcessingChar center) {
word spriteY = (BORDER_YPOS_TOP + (word)center.y*8) << 4; word spriteY = (BORDER_YPOS_TOP + (word)center.y*8) << 4;
byte spritePtr = (byte)(SPRITE_DATA/64)+spriteIdx; byte spritePtr = (byte)(SPRITE_DATA/64)+spriteIdx;
// Put the sprite into the PROCESSING array // Put the sprite into the PROCESSING array
PROCESSING[spriteIdx] = { spriteX, spriteY, (word)-((signed byte)spriteIdx*2-8), (word)-16, spriteIdx, spritePtr, STATUS_NEW, screenPtr }; PROCESSING[spriteIdx] = { spriteX, spriteY, 60, 60, spriteIdx, spritePtr, STATUS_NEW, screenPtr };
} }
const word XPOS_LEFTMOST = (word)(BORDER_XPOS_LEFT-8)<<4; const word XPOS_LEFTMOST = (word)(BORDER_XPOS_LEFT-8)<<4;
const word YPOS_UPMOST = (word)(BORDER_YPOS_TOP-8)<<4; const word XPOS_RIGHTMOST = (word)(BORDER_XPOS_RIGHT)<<4;
const word YPOS_TOPMOST = (word)(BORDER_YPOS_TOP-8)<<4;
const word YPOS_BOTTOMMOST = (word)(BORDER_YPOS_BOTTOM)<<4;
kickasm(pc VXSIN) {{
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
}}
kickasm(pc VYSIN) {{
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
// Process any chars in the PROCESSING array // Process any chars in the PROCESSING array
void processChars() { void processChars() {
@ -167,22 +183,27 @@ void processChars() {
*SPRITES_XMSB &= 0xff ^ bitmask; *SPRITES_XMSB &= 0xff ^ bitmask;
} }
SPRITES_XPOS[i*2] = (byte)xpos; SPRITES_XPOS[i*2] = (byte)xpos;
SPRITES_YPOS[i*2] = (byte)(processing->y>>4); byte ypos = (byte)(processing->y>>4);
SPRITES_YPOS[i*2] = ypos;
// Move sprite // Move sprite
if(processing->x < XPOS_LEFTMOST || processing->y < YPOS_UPMOST) { if(processing->x < XPOS_LEFTMOST || processing->x > XPOS_RIGHTMOST || processing->y < YPOS_TOPMOST|| processing->y > YPOS_BOTTOMMOST ) {
// Set status to FREE // Set status to FREE
processing->status = STATUS_FREE; processing->status = STATUS_FREE;
// Disable the sprite // Disable the sprite
*SPRITES_ENABLE &= 0xff ^ bitmask; *SPRITES_ENABLE &= 0xff ^ bitmask;
} else { } else {
byte xchar = (byte)(xpos/8) - BORDER_XPOS_LEFT/8;
processing->vx = processing->vx + VXSIN[xchar];
processing->x += processing->vx; processing->x += processing->vx;
byte ychar = (byte)(ypos/8) - BORDER_YPOS_TOP/8;
processing->vy = processing->vy + VYSIN[ychar];
processing->y += processing->vy; processing->y += processing->vy;
} }
numActive++; numActive++;
} }
} }
*(SCREEN+999) = '0'+numActive; //*(SCREEN+999) = '0'+numActive;
} }
// SQUARES_X[i] = (i-20)*(i-20) // SQUARES_X[i] = (i-20)*(i-20)
@ -241,11 +262,11 @@ const byte RASTER_IRQ_TOP = 0x30;
// Raster Interrupt at the top of the screen // Raster Interrupt at the top of the screen
interrupt(hardware_all) void irqTop() { interrupt(hardware_all) void irqTop() {
for( byte i: 0..4) {} for( byte i: 0..4) {}
*BORDERCOL = WHITE; //*BORDERCOL = WHITE;
*BGCOL = WHITE; //*BGCOL = WHITE;
for( byte i: 0..7) {} for( byte i: 0..7) {}
*BORDERCOL = LIGHT_BLUE; //*BORDERCOL = LIGHT_BLUE;
*BGCOL = BLUE; //*BGCOL = BLUE;
// Trigger IRQ at the middle of the screen // Trigger IRQ at the middle of the screen
*RASTER = RASTER_IRQ_MIDDLE; *RASTER = RASTER_IRQ_MIDDLE;
@ -259,11 +280,11 @@ const byte RASTER_IRQ_MIDDLE = 0xff;
// Raster Interrupt at the middle of the screen // Raster Interrupt at the middle of the screen
interrupt(hardware_all) void irqBottom() { interrupt(hardware_all) void irqBottom() {
for( byte i: 0..4) {} for( byte i: 0..4) {}
*BORDERCOL = WHITE; //*BORDERCOL = WHITE;
*BGCOL = WHITE; //*BGCOL = WHITE;
processChars(); processChars();
*BORDERCOL = LIGHT_BLUE; //*BORDERCOL = LIGHT_BLUE;
*BGCOL = BLUE; //*BGCOL = BLUE;
// Trigger IRQ at the top of the screen // Trigger IRQ at the top of the screen
*RASTER = RASTER_IRQ_TOP; *RASTER = RASTER_IRQ_TOP;

View File

@ -23,7 +23,9 @@
.label CHARGEN = $d000 .label CHARGEN = $d000
// Positions of the border (in sprite positions) // Positions of the border (in sprite positions)
.const BORDER_XPOS_LEFT = $18 .const BORDER_XPOS_LEFT = $18
.const BORDER_XPOS_RIGHT = $158
.const BORDER_YPOS_TOP = $32 .const BORDER_YPOS_TOP = $32
.const BORDER_YPOS_BOTTOM = $fa
// The offset of the sprite pointers from the screen start address // The offset of the sprite pointers from the screen start address
.const SPRITE_PTRS = $3f8 .const SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000 .label SPRITES_XPOS = $d000
@ -34,8 +36,6 @@
.label SPRITES_EXPAND_Y = $d017 .label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c .label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d .label SPRITES_EXPAND_X = $d01d
.label BORDERCOL = $d020
.label BGCOL = $d021
.label SPRITES_COLS = $d027 .label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011 .label VIC_CONTROL = $d011
// VIC II IRQ Status Register // VIC II IRQ Status Register
@ -52,13 +52,15 @@
.const CIA_INTERRUPT_CLEAR = $7f .const CIA_INTERRUPT_CLEAR = $7f
// The vector used when the HARDWARE serves IRQ interrupts // The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe .label HARDWARE_IRQ = $fffe
.const WHITE = 1
.const BLUE = 6
.const LIGHT_BLUE = $e .const LIGHT_BLUE = $e
// Address of the screen // Address of the screen
.label SCREEN = $400 .label SCREEN = $400
// Sprite data for the animating sprites // Sprite data for the animating sprites
.label SPRITE_DATA = $2000 .label SPRITE_DATA = $2000
// Values added to VX
.label VXSIN = $2200
// Values added to VY
.label VYSIN = $2280
// Max number of chars processed at once // Max number of chars processed at once
.const NUM_PROCESSING = 8 .const NUM_PROCESSING = 8
// Distance value meaning not found // Distance value meaning not found
@ -69,8 +71,10 @@
.const STATUS_PROCESSING = 2 .const STATUS_PROCESSING = 2
.const RASTER_IRQ_TOP = $30 .const RASTER_IRQ_TOP = $30
.const RASTER_IRQ_MIDDLE = $ff .const RASTER_IRQ_MIDDLE = $ff
.const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
.const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
.const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4 .const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
.const YPOS_UPMOST = BORDER_YPOS_TOP-8<<4 .const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
main: { main: {
.label src = 2 .label src = 2
.label dst = 4 .label dst = 4
@ -150,9 +154,11 @@ main: {
lda center_dist lda center_dist
cmp #<NOT_FOUND cmp #<NOT_FOUND
bne b5 bne b5
b6: lda #'.'
sta SCREEN+$3e7
b7:
inc COLS+$3e7 inc COLS+$3e7
jmp b6 jmp b7
b5: b5:
stx startProcessing.center_x stx startProcessing.center_x
sty startProcessing.center_y sty startProcessing.center_y
@ -160,34 +166,33 @@ main: {
jmp b3 jmp b3
} }
// Start processing a char - by inserting it into the PROCESSING array // Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($20) center_x, byte zeropage($21) center_y) // startProcessing(byte zeropage($1f) center_x, byte zeropage($20) center_y)
startProcessing: { startProcessing: {
.label _0 = $22 .label _0 = $21
.label _1 = $22 .label _1 = $21
.label _2 = $22 .label _2 = $21
.label _4 = $a .label _4 = $a
.label _5 = $a .label _5 = $a
.label _7 = 8 .label _7 = 8
.label _8 = 8 .label _8 = 8
.label _10 = $28 .label _10 = $27
.label _11 = $28 .label _11 = $27
.label _12 = $28 .label _12 = $27
.label _14 = $2a .label _14 = $29
.label _15 = $2a .label _15 = $29
.label _16 = $2a .label _16 = $29
.label _25 = $2d .label center_x = $1f
.label center_x = $20 .label center_y = $20
.label center_y = $21
.label i = 7 .label i = 7
.label screenPtr = $26 .label screenPtr = $25
.label spriteData = $a .label spriteData = $a
.label chargenData = 8 .label chargenData = 8
.label spriteX = $28 .label spriteX = $27
.label spriteY = $2a .label spriteY = $29
.label spritePtr = $2c .label spritePtr = $2b
.label freeIdx = 7 .label freeIdx = 7
.label _48 = $24 .label _42 = $23
.label _49 = $22 .label _43 = $21
ldx #$ff ldx #$ff
b1: b1:
lda #0 lda #0
@ -219,19 +224,19 @@ startProcessing: {
sta _0+1 sta _0+1
lda _0 lda _0
asl asl
sta _48 sta _42
lda _0+1 lda _0+1
rol rol
sta _48+1 sta _42+1
asl _48 asl _42
rol _48+1 rol _42+1
lda _49 lda _43
clc clc
adc _48 adc _42
sta _49 sta _43
lda _49+1 lda _43+1
adc _48+1 adc _42+1
sta _49+1 sta _43+1
asl _1 asl _1
rol _1+1 rol _1+1
asl _1 asl _1
@ -373,19 +378,6 @@ startProcessing: {
stx spritePtr stx spritePtr
lda freeIdx lda freeIdx
asl asl
sec
sbc #8
eor #$ff
clc
adc #1
sta _25
ora #$7f
bmi !+
lda #0
!:
sta _25+1
lda freeIdx
asl
clc clc
adc freeIdx adc freeIdx
asl asl
@ -401,13 +393,13 @@ startProcessing: {
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
lda spriteY+1 lda spriteY+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
lda _25 lda #$3c
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
lda _25+1 lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
lda #<-$10 lda #$3c
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
lda #>-$10 lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
lda freeIdx lda freeIdx
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
@ -436,9 +428,9 @@ startProcessing: {
// Find the non-space char closest to the center of the screen // Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff // If no non-space char is found the distance will be 0xffff
getCharToProcess: { getCharToProcess: {
.label _9 = $2f .label _9 = $2c
.label _10 = $2f .label _10 = $2c
.label _11 = $2f .label _11 = $2c
.label return_dist = $14 .label return_dist = $14
.label x = $f .label x = $f
.label dist = $14 .label dist = $14
@ -449,8 +441,8 @@ getCharToProcess: {
.label closest_dist = $10 .label closest_dist = $10
.label closest_x = $12 .label closest_x = $12
.label closest_y = $13 .label closest_y = $13
.label _15 = $31 .label _15 = $2e
.label _16 = $2f .label _16 = $2c
lda #0 lda #0
sta closest_y sta closest_y
sta closest_x sta closest_x
@ -765,14 +757,7 @@ irqBottom: {
inx inx
cpx #5 cpx #5
bne b1 bne b1
lda #WHITE
sta BORDERCOL
sta BGCOL
jsr processChars jsr processChars
lda #LIGHT_BLUE
sta BORDERCOL
lda #BLUE
sta BGCOL
// Trigger IRQ at the top of the screen // Trigger IRQ at the top of the screen
lda #RASTER_IRQ_TOP lda #RASTER_IRQ_TOP
sta RASTER sta RASTER
@ -793,14 +778,16 @@ irqBottom: {
} }
// Process any chars in the PROCESSING array // Process any chars in the PROCESSING array
processChars: { processChars: {
.label _17 = $38 .label _14 = $35
.label processing = $33 .label _24 = $33
.label bitmask = $35 .label _28 = $38
.label _33 = $3a
.label processing = $30
.label bitmask = $32
.label i = $1e .label i = $1e
.label xpos = $36 .label xpos = $33
.label numActive = $1f .label ypos = $37
lda #0 lda #0
sta numActive
sta i sta i
b1: b1:
lda i lda i
@ -899,42 +886,106 @@ processChars: {
sta SPRITES_XPOS,x sta SPRITES_XPOS,x
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y lda (processing),y
sta _17 sta _14
iny iny
lda (processing),y lda (processing),y
sta _17+1 sta _14+1
lsr _17+1 lsr _14+1
ror _17 ror _14
lsr _17+1 lsr _14+1
ror _17 ror _14
lsr _17+1 lsr _14+1
ror _17 ror _14
lsr _17+1 lsr _14+1
ror _17 ror _14
lda _17 lda _14
sta ypos
sta SPRITES_YPOS,x sta SPRITES_YPOS,x
// Move sprite // Move sprite
ldy #1 ldy #1
lda (processing),y lda (processing),y
cmp #>XPOS_LEFTMOST cmp #>XPOS_LEFTMOST
bcc b6 bcs !b6+
jmp b6
!b6:
bne !+ bne !+
dey dey
lda (processing),y lda (processing),y
cmp #<XPOS_LEFTMOST cmp #<XPOS_LEFTMOST
bcc b6 bcs !b6+
jmp b6
!b6:
!:
ldy #1
lda #>XPOS_RIGHTMOST
cmp (processing),y
bcs !b6+
jmp b6
!b6:
bne !+
dey
lda #<XPOS_RIGHTMOST
cmp (processing),y
bcs !b6+
jmp b6
!b6:
!: !:
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
iny iny
lda (processing),y lda (processing),y
cmp #>YPOS_UPMOST cmp #>YPOS_TOPMOST
bcc b6 bcs !b6+
jmp b6
!b6:
bne !+ bne !+
dey dey
lda (processing),y lda (processing),y
cmp #<YPOS_UPMOST cmp #<YPOS_TOPMOST
bcc b6 bcs !b6+
jmp b6
!b6:
!: !:
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
iny
lda #>YPOS_BOTTOMMOST
cmp (processing),y
bcs !b6+
jmp b6
!b6:
bne !+
dey
lda #<YPOS_BOTTOMMOST
cmp (processing),y
bcs !b6+
jmp b6
!b6:
!:
lsr _24+1
ror _24
lsr _24+1
ror _24
lsr _24+1
ror _24
lda _24
sec
sbc #BORDER_XPOS_LEFT/8
asl
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
tax
lda (processing),y
clc
adc VXSIN,x
sta _28
iny
lda (processing),y
adc VXSIN+1,x
sta _28+1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
lda _28
sta (processing),y
iny
lda _28+1
sta (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
sty $ff sty $ff
clc clc
@ -948,6 +999,29 @@ processChars: {
ldy #1 ldy #1
adc (processing),y adc (processing),y
sta (processing),y sta (processing),y
lda ypos
lsr
lsr
lsr
sec
sbc #BORDER_YPOS_TOP/8
asl
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
tax
lda (processing),y
clc
adc VYSIN,x
sta _33
iny
lda (processing),y
adc VYSIN+1,x
sta _33+1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
lda _33
sta (processing),y
iny
lda _33+1
sta (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
clc clc
lda (processing),y lda (processing),y
@ -959,8 +1033,6 @@ processChars: {
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y+1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y+1
adc (processing),y adc (processing),y
sta (processing),y sta (processing),y
b7:
inc numActive
b2: b2:
inc i inc i
lda #NUM_PROCESSING-1+1 lda #NUM_PROCESSING-1+1
@ -968,9 +1040,6 @@ processChars: {
beq !b1+ beq !b1+
jmp b1 jmp b1
!b1: !b1:
lax numActive
axs #-['0']
stx SCREEN+$3e7
rts rts
b6: b6:
// Set status to FREE // Set status to FREE
@ -982,7 +1051,7 @@ processChars: {
// Disable the sprite // Disable the sprite
and SPRITES_ENABLE and SPRITES_ENABLE
sta SPRITES_ENABLE sta SPRITES_ENABLE
jmp b7 jmp b2
b4: b4:
lda SPRITES_XMSB lda SPRITES_XMSB
ora bitmask ora bitmask
@ -999,18 +1068,13 @@ irqTop: {
inx inx
cpx #5 cpx #5
bne b1 bne b1
lda #WHITE
sta BORDERCOL
sta BGCOL
ldx #0 ldx #0
b3: //*BORDERCOL = WHITE;
//*BGCOL = WHITE;
b2:
inx inx
cpx #8 cpx #8
bne b3 bne b2
lda #LIGHT_BLUE
sta BORDERCOL
lda #BLUE
sta BGCOL
// Trigger IRQ at the middle of the screen // Trigger IRQ at the middle of the screen
lda #RASTER_IRQ_MIDDLE lda #RASTER_IRQ_MIDDLE
sta RASTER sta RASTER
@ -1037,3 +1101,13 @@ irqTop: {
SQUARES_Y: .fill 2*$19, 0 SQUARES_Y: .fill 2*$19, 0
// Sprites currently being processed in the interrupt // Sprites currently being processed in the interrupt
PROCESSING: .fill $d*NUM_PROCESSING, 0 PROCESSING: .fill $d*NUM_PROCESSING, 0
.pc = VXSIN "VXSIN"
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
.pc = VYSIN "VYSIN"
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}

View File

@ -2,459 +2,467 @@
[0] phi() [0] phi()
to:@1 to:@1
@1: scope:[] from @begin @1: scope:[] from @begin
[1] phi() kickasm(location (const word*) VXSIN#0) {{ .for(var i=0; i<40; i++) {
[2] call main .word -sin(toRadians([i*360]/40))*4
to:@end }
@end: scope:[] from @1 }}
kickasm(location (const word*) VYSIN#0) {{ .for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
to:@2
@2: scope:[] from @1
[3] phi() [3] phi()
main: scope:[main] from @1 [4] call main
[4] phi() to:@end
[5] call initSquareTables @end: scope:[] from @2
[5] phi()
main: scope:[main] from @2
[6] phi()
[7] call initSquareTables
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[6] (byte*) main::dst#2 ← phi( main::@1/(byte*) main::dst#1 main/(const byte[$3e8]) SCREEN_COPY#0 ) [8] (byte*) main::dst#2 ← phi( main::@1/(byte*) main::dst#1 main/(const byte[$3e8]) SCREEN_COPY#0 )
[6] (byte*) main::src#2 ← phi( main::@1/(byte*) main::src#1 main/(const byte*) SCREEN#0 ) [8] (byte*) main::src#2 ← phi( main::@1/(byte*) main::src#1 main/(const byte*) SCREEN#0 )
[7] *((byte*) main::dst#2) ← *((byte*) main::src#2) [9] *((byte*) main::dst#2) ← *((byte*) main::src#2)
[8] (byte*) main::src#1 ← ++ (byte*) main::src#2 [10] (byte*) main::src#1 ← ++ (byte*) main::src#2
[9] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 [11] (byte*) main::dst#1 ← ++ (byte*) main::dst#2
[10] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1 [12] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1
to:main::@2 to:main::@2
main::@2: scope:[main] from main::@1 main::@2 main::@2: scope:[main] from main::@1 main::@2
[11] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i#1 ) [13] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i#1 )
[12] (byte) main::$24 ← (byte) main::i#2 << (byte) 1 [14] (byte) main::$25 ← (byte) main::i#2 << (byte) 1
[13] (byte) main::$25 ← (byte) main::$24 + (byte) main::i#2 [15] (byte) main::$26 ← (byte) main::$25 + (byte) main::i#2
[14] (byte) main::$26 ← (byte) main::$25 << (byte) 2 [16] (byte) main::$27 ← (byte) main::$26 << (byte) 2
[15] (byte~) main::$15 ← (byte) main::$26 + (byte) main::i#2 [17] (byte~) main::$16 ← (byte) main::$27 + (byte) main::i#2
[16] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$15) ← (byte) 0 [18] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0
[17] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$15) ← (byte) 0 [19] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0
[18] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$15) ← (byte) 0 [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0
[19] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$15) ← (byte) 0 [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0
[20] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$15) ← (byte) 0 [22] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0
[21] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$15) ← (byte) 0 [23] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0
[22] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$15) ← (const byte) STATUS_FREE#0 [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE#0
[23] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$15) ← (byte*) 0 [25] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0
[24] (byte) main::i#1 ← ++ (byte) main::i#2 [26] (byte) main::i#1 ← ++ (byte) main::i#2
[25] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@2 [27] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@2
to:main::@3 to:main::@3
main::@3: scope:[main] from main::@2 main::@3: scope:[main] from main::@2
[26] phi()
[27] call initSprites
to:main::@7
main::@7: scope:[main] from main::@3
[28] phi() [28] phi()
[29] call setupRasterIrq [29] call initSprites
to:main::@4
main::@4: scope:[main] from main::@5 main::@7
[30] phi()
[31] call getCharToProcess
[32] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
[33] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
[34] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
to:main::@8 to:main::@8
main::@8: scope:[main] from main::@4 main::@8: scope:[main] from main::@3
[35] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 [30] phi()
[36] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 [31] call setupRasterIrq
[37] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0 to:main::@4
[38] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5 main::@4: scope:[main] from main::@5 main::@8
[32] phi()
[33] call getCharToProcess
[34] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
[35] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
[36] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
to:main::@9
main::@9: scope:[main] from main::@4
[37] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
[38] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
[39] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0
[40] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5
to:main::@6 to:main::@6
main::@6: scope:[main] from main::@6 main::@8 main::@6: scope:[main] from main::@9
[39] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) [41] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.'
to:main::@6 to:main::@7
main::@5: scope:[main] from main::@8 main::@7: scope:[main] from main::@6 main::@7
[40] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 [42] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
[41] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 to:main::@7
[42] call startProcessing main::@5: scope:[main] from main::@9
[43] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
[44] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
[45] call startProcessing
to:main::@4 to:main::@4
startProcessing: scope:[startProcessing] from main::@5 startProcessing: scope:[startProcessing] from main::@5
[43] phi() [46] phi()
to:startProcessing::@1 to:startProcessing::@1
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@8 startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@8
[44] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 ) [47] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 )
to:startProcessing::@2 to:startProcessing::@2
startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3 startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3
[45] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 ) [48] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
[46] (byte) startProcessing::$44 ← (byte) startProcessing::i#2 << (byte) 1 [49] (byte) startProcessing::$38 ← (byte) startProcessing::i#2 << (byte) 1
[47] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 [50] (byte) startProcessing::$39 ← (byte) startProcessing::$38 + (byte) startProcessing::i#2
[48] (byte) startProcessing::$46 ← (byte) startProcessing::$45 << (byte) 2 [51] (byte) startProcessing::$40 ← (byte) startProcessing::$39 << (byte) 2
[49] (byte~) startProcessing::$33 ← (byte) startProcessing::$46 + (byte) startProcessing::i#2 [52] (byte~) startProcessing::$27 ← (byte) startProcessing::$40 + (byte) startProcessing::i#2
[50] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$33)!=(const byte) STATUS_FREE#0) goto startProcessing::@3 [53] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE#0) goto startProcessing::@3
to:startProcessing::@4 to:startProcessing::@4
startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@9 startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@9
[51] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 ) [54] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
[52] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 [55] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8
to:startProcessing::@5 to:startProcessing::@5
startProcessing::@5: scope:[startProcessing] from startProcessing::@4 startProcessing::@5: scope:[startProcessing] from startProcessing::@4
[53] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [56] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0
[54] (word) startProcessing::$48 ← (word~) startProcessing::$0 << (byte) 2 [57] (word) startProcessing::$42 ← (word~) startProcessing::$0 << (byte) 2
[55] (word) startProcessing::$49 ← (word) startProcessing::$48 + (word~) startProcessing::$0 [58] (word) startProcessing::$43 ← (word) startProcessing::$42 + (word~) startProcessing::$0
[56] (word~) startProcessing::$1 ← (word) startProcessing::$49 << (byte) 3 [59] (word~) startProcessing::$1 ← (word) startProcessing::$43 << (byte) 3
[57] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1 [60] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1
[58] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0 [61] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0
[59] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2 [62] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2
[60] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6 [63] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6
[61] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5 [64] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5
[62] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0) [65] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0)
[63] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0 [66] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0
[64] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3 [67] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3
[65] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8 [68] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8
asm { sei } asm { sei }
[67] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [70] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0
to:startProcessing::@6 to:startProcessing::@6
startProcessing::@6: scope:[startProcessing] from startProcessing::@5 startProcessing::@6 startProcessing::@6: scope:[startProcessing] from startProcessing::@5 startProcessing::@6
[68] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 ) [71] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 )
[68] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 ) [71] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 )
[68] (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@5/(byte*) startProcessing::chargenData#0 startProcessing::@6/(byte*) startProcessing::chargenData#1 ) [71] (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@5/(byte*) startProcessing::chargenData#0 startProcessing::@6/(byte*) startProcessing::chargenData#1 )
[69] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [72] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2)
[70] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [73] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3
[71] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 [74] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2
[72] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 [75] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2
[73] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 [76] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6
to:startProcessing::@7 to:startProcessing::@7
startProcessing::@7: scope:[startProcessing] from startProcessing::@6 startProcessing::@7: scope:[startProcessing] from startProcessing::@6
[74] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [77] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
asm { cli } asm { cli }
[76] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0 [79] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0
[77] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3 [80] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3
[78] (word~) startProcessing::$12 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11 [81] (word~) startProcessing::$12 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11
[79] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$12 << (byte) 4 [82] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$12 << (byte) 4
[80] (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#0 [83] (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#0
[81] (word~) startProcessing::$15 ← (word~) startProcessing::$14 << (byte) 3 [84] (word~) startProcessing::$15 ← (word~) startProcessing::$14 << (byte) 3
[82] (word~) startProcessing::$16 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15 [85] (word~) startProcessing::$16 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15
[83] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$16 << (byte) 4 [86] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$16 << (byte) 4
[84] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [87] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2
[85] (signed byte~) startProcessing::$22 ← (signed byte)(byte) startProcessing::freeIdx#2 << (byte) 1 [88] (byte) startProcessing::$45 ← (byte) startProcessing::freeIdx#2 << (byte) 1
[86] (signed byte~) startProcessing::$23 ← (signed byte~) startProcessing::$22 - (signed byte) 8 [89] (byte) startProcessing::$46 ← (byte) startProcessing::$45 + (byte) startProcessing::freeIdx#2
[87] (signed byte~) startProcessing::$24 ← - (signed byte~) startProcessing::$23 [90] (byte) startProcessing::$47 ← (byte) startProcessing::$46 << (byte) 2
[88] (word~) startProcessing::$25 ← (word)(signed byte~) startProcessing::$24 [91] (byte~) startProcessing::$28 ← (byte) startProcessing::$47 + (byte) startProcessing::freeIdx#2
[89] (byte) startProcessing::$51 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [92] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0
[90] (byte) startProcessing::$52 ← (byte) startProcessing::$51 + (byte) startProcessing::freeIdx#2 [93] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0
[91] (byte) startProcessing::$53 ← (byte) startProcessing::$52 << (byte) 2 [94] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (byte) $3c
[92] (byte~) startProcessing::$34 ← (byte) startProcessing::$53 + (byte) startProcessing::freeIdx#2 [95] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (byte) $3c
[93] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$34) ← (word) startProcessing::spriteX#0 [96] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2
[94] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$34) ← (word) startProcessing::spriteY#0 [97] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0
[95] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$34) ← (word~) startProcessing::$25 [98] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW#0
[96] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$34) ← (word) -$10 [99] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0
[97] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$34) ← (byte) startProcessing::freeIdx#2
[98] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$34) ← (byte) startProcessing::spritePtr#0
[99] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$34) ← (const byte) STATUS_NEW#0
[100] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$34) ← (byte*) startProcessing::screenPtr#0
to:startProcessing::@return to:startProcessing::@return
startProcessing::@return: scope:[startProcessing] from startProcessing::@7 startProcessing::@return: scope:[startProcessing] from startProcessing::@7
[101] return [100] return
to:@return to:@return
startProcessing::@8: scope:[startProcessing] from startProcessing::@4 startProcessing::@8: scope:[startProcessing] from startProcessing::@4
[102] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 [101] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2
to:startProcessing::@1 to:startProcessing::@1
startProcessing::@3: scope:[startProcessing] from startProcessing::@2 startProcessing::@3: scope:[startProcessing] from startProcessing::@2
[103] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 [102] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2
[104] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2 [103] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2
to:startProcessing::@9 to:startProcessing::@9
startProcessing::@9: scope:[startProcessing] from startProcessing::@3 startProcessing::@9: scope:[startProcessing] from startProcessing::@3
[105] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 [104] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6
to:startProcessing::@4 to:startProcessing::@4
getCharToProcess: scope:[getCharToProcess] from main::@4 getCharToProcess: scope:[getCharToProcess] from main::@4
[106] phi() [105] phi()
to:getCharToProcess::@1 to:getCharToProcess::@1
getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9 getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9
[107] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 ) [106] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 )
[107] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 ) [106] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 )
[107] (word) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const word) NOT_FOUND#0 getCharToProcess::@9/(word~) getCharToProcess::closest_dist#10 ) [106] (word) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const word) NOT_FOUND#0 getCharToProcess::@9/(word~) getCharToProcess::closest_dist#10 )
[107] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 ) [106] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
[107] (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(const byte[$3e8]) SCREEN_COPY#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 ) [106] (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(const byte[$3e8]) SCREEN_COPY#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 )
to:getCharToProcess::@2 to:getCharToProcess::@2
getCharToProcess::@2: scope:[getCharToProcess] from getCharToProcess::@1 getCharToProcess::@10 getCharToProcess::@2: scope:[getCharToProcess] from getCharToProcess::@1 getCharToProcess::@10
[108] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 ) [107] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 )
[108] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 ) [107] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 )
[108] (word) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(word) getCharToProcess::closest_dist#8 getCharToProcess::@10/(word~) getCharToProcess::closest_dist#12 ) [107] (word) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(word) getCharToProcess::closest_dist#8 getCharToProcess::@10/(word~) getCharToProcess::closest_dist#12 )
[108] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 ) [107] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 )
[109] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [108] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11
to:getCharToProcess::@4 to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@2 getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@2
[110] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1 [109] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1
[111] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1 [110] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1
[112] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14) [111] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14)
[113] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 [112] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12
to:getCharToProcess::@5 to:getCharToProcess::@5
getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4 getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4
[114] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 [113] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2
[115] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 [114] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7
to:getCharToProcess::@3 to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5
[116] (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 ) [115] (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 )
[116] (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 ) [115] (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 )
[116] (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 ) [115] (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 )
[117] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 [116] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2
[118] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 [117] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10
to:getCharToProcess::@6 to:getCharToProcess::@6
getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3 getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3
[119] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [118] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28
[120] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 [119] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7
[121] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 [120] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9
to:getCharToProcess::@7 to:getCharToProcess::@7
getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6 getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6
[122] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return [121] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return
to:getCharToProcess::@8 to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7
[123] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1 [122] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1
[124] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2 [123] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2
[125] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9 [124] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9
[126] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3 [125] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3
[127] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10 [126] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10
[128] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [127] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' '
to:getCharToProcess::@return to:getCharToProcess::@return
getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8 getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8
[129] return [128] return
to:@return to:@return
getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6 getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6
[130] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1 [129] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1
to:getCharToProcess::@1 to:getCharToProcess::@1
getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3 getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3
[131] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1 [130] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1
to:getCharToProcess::@2 to:getCharToProcess::@2
getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4 getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4
[132] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2 [131] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2
to:getCharToProcess::@3 to:getCharToProcess::@3
getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2 getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2
[133] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2 [132] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2
to:getCharToProcess::@3 to:getCharToProcess::@3
setupRasterIrq: scope:[setupRasterIrq] from main::@7 setupRasterIrq: scope:[setupRasterIrq] from main::@8
asm { sei } asm { sei }
[135] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [134] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[136] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [135] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[137] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [136] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
to:setupRasterIrq::@1 to:setupRasterIrq::@1
setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq
[138] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [137] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
to:setupRasterIrq::@2 to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1 setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1
[139] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [138] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0
[140] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [139] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[141] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [140] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0
asm { cli } asm { cli }
to:setupRasterIrq::@return to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2 setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2
[143] return [142] return
to:@return to:@return
initSprites: scope:[initSprites] from main::@3 initSprites: scope:[initSprites] from main::@3
[144] phi() [143] phi()
to:initSprites::@1 to:initSprites::@1
initSprites::@1: scope:[initSprites] from initSprites initSprites::@1 initSprites::@1: scope:[initSprites] from initSprites initSprites::@1
[145] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA#0 initSprites::@1/(byte*) initSprites::sp#1 ) [144] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA#0 initSprites::@1/(byte*) initSprites::sp#1 )
[146] *((byte*) initSprites::sp#2) ← (byte) 0 [145] *((byte*) initSprites::sp#2) ← (byte) 0
[147] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 [146] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2
[148] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1 [147] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1
to:initSprites::@2 to:initSprites::@2
initSprites::@2: scope:[initSprites] from initSprites::@1 initSprites::@2 initSprites::@2: scope:[initSprites] from initSprites::@1 initSprites::@2
[149] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@2/(byte) initSprites::i#1 ) [148] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@2/(byte) initSprites::i#1 )
[150] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [149] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0
[151] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 [150] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2
[152] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2 [151] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2
to:initSprites::@3 to:initSprites::@3
initSprites::@3: scope:[initSprites] from initSprites::@2 initSprites::@3: scope:[initSprites] from initSprites::@2
[153] *((const byte*) SPRITES_MC#0) ← (byte) 0 [152] *((const byte*) SPRITES_MC#0) ← (byte) 0
[154] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [153] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0
[155] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [154] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0
to:initSprites::@return to:initSprites::@return
initSprites::@return: scope:[initSprites] from initSprites::@3 initSprites::@return: scope:[initSprites] from initSprites::@3
[156] return [155] return
to:@return to:@return
initSquareTables: scope:[initSquareTables] from main initSquareTables: scope:[initSquareTables] from main
[157] phi() [156] phi()
to:initSquareTables::@1 to:initSquareTables::@1
initSquareTables::@1: scope:[initSquareTables] from initSquareTables initSquareTables::@9 initSquareTables::@1: scope:[initSquareTables] from initSquareTables initSquareTables::@9
[158] (byte) initSquareTables::x#2 ← phi( initSquareTables/(byte) 0 initSquareTables::@9/(byte) initSquareTables::x#1 ) [157] (byte) initSquareTables::x#2 ← phi( initSquareTables/(byte) 0 initSquareTables::@9/(byte) initSquareTables::x#1 )
[159] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2 [158] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2
to:initSquareTables::@3 to:initSquareTables::@3
initSquareTables::@3: scope:[initSquareTables] from initSquareTables::@1 initSquareTables::@3: scope:[initSquareTables] from initSquareTables::@1
[160] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14 [159] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14
to:initSquareTables::@4 to:initSquareTables::@4
initSquareTables::@4: scope:[initSquareTables] from initSquareTables::@2 initSquareTables::@3 initSquareTables::@4: scope:[initSquareTables] from initSquareTables::@2 initSquareTables::@3
[161] (byte) initSquareTables::x_dist#0 ← phi( initSquareTables::@2/(byte~) initSquareTables::$4 initSquareTables::@3/(byte~) initSquareTables::$2 ) [160] (byte) initSquareTables::x_dist#0 ← phi( initSquareTables::@2/(byte~) initSquareTables::$4 initSquareTables::@3/(byte~) initSquareTables::$2 )
[162] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0 [161] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0
[163] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0 [162] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
[164] call mul8u [163] call mul8u
[165] (word) mul8u::return#2 ← (word) mul8u::res#2 [164] (word) mul8u::return#2 ← (word) mul8u::res#2
to:initSquareTables::@9 to:initSquareTables::@9
initSquareTables::@9: scope:[initSquareTables] from initSquareTables::@4 initSquareTables::@9: scope:[initSquareTables] from initSquareTables::@4
[166] (word~) initSquareTables::$6 ← (word) mul8u::return#2 [165] (word~) initSquareTables::$6 ← (word) mul8u::return#2
[167] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1 [166] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1
[168] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6 [167] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6
[169] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2 [168] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2
[170] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1 [169] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1
to:initSquareTables::@5 to:initSquareTables::@5
initSquareTables::@5: scope:[initSquareTables] from initSquareTables::@10 initSquareTables::@9 initSquareTables::@5: scope:[initSquareTables] from initSquareTables::@10 initSquareTables::@9
[171] (byte) initSquareTables::y#2 ← phi( initSquareTables::@10/(byte) initSquareTables::y#1 initSquareTables::@9/(byte) 0 ) [170] (byte) initSquareTables::y#2 ← phi( initSquareTables::@10/(byte) initSquareTables::y#1 initSquareTables::@9/(byte) 0 )
[172] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6 [171] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6
to:initSquareTables::@7 to:initSquareTables::@7
initSquareTables::@7: scope:[initSquareTables] from initSquareTables::@5 initSquareTables::@7: scope:[initSquareTables] from initSquareTables::@5
[173] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c [172] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c
to:initSquareTables::@8 to:initSquareTables::@8
initSquareTables::@8: scope:[initSquareTables] from initSquareTables::@6 initSquareTables::@7 initSquareTables::@8: scope:[initSquareTables] from initSquareTables::@6 initSquareTables::@7
[174] (byte) initSquareTables::y_dist#0 ← phi( initSquareTables::@6/(byte~) initSquareTables::$12 initSquareTables::@7/(byte~) initSquareTables::$10 ) [173] (byte) initSquareTables::y_dist#0 ← phi( initSquareTables::@6/(byte~) initSquareTables::$12 initSquareTables::@7/(byte~) initSquareTables::$10 )
[175] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0 [174] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0
[176] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0 [175] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
[177] call mul8u [176] call mul8u
[178] (word) mul8u::return#3 ← (word) mul8u::res#2 [177] (word) mul8u::return#3 ← (word) mul8u::res#2
to:initSquareTables::@10 to:initSquareTables::@10
initSquareTables::@10: scope:[initSquareTables] from initSquareTables::@8 initSquareTables::@10: scope:[initSquareTables] from initSquareTables::@8
[179] (word~) initSquareTables::$14 ← (word) mul8u::return#3 [178] (word~) initSquareTables::$14 ← (word) mul8u::return#3
[180] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1 [179] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1
[181] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14 [180] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14
[182] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2 [181] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2
[183] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5 [182] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5
to:initSquareTables::@return to:initSquareTables::@return
initSquareTables::@return: scope:[initSquareTables] from initSquareTables::@10 initSquareTables::@return: scope:[initSquareTables] from initSquareTables::@10
[184] return [183] return
to:@return to:@return
initSquareTables::@6: scope:[initSquareTables] from initSquareTables::@5 initSquareTables::@6: scope:[initSquareTables] from initSquareTables::@5
[185] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2 [184] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2
to:initSquareTables::@8 to:initSquareTables::@8
initSquareTables::@2: scope:[initSquareTables] from initSquareTables::@1 initSquareTables::@2: scope:[initSquareTables] from initSquareTables::@1
[186] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2 [185] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2
to:initSquareTables::@4 to:initSquareTables::@4
mul8u: scope:[mul8u] from initSquareTables::@4 initSquareTables::@8 mul8u: scope:[mul8u] from initSquareTables::@4 initSquareTables::@8
[187] (byte) mul8u::a#6 ← phi( initSquareTables::@8/(byte) mul8u::a#2 initSquareTables::@4/(byte) mul8u::a#1 ) [186] (byte) mul8u::a#6 ← phi( initSquareTables::@8/(byte) mul8u::a#2 initSquareTables::@4/(byte) mul8u::a#1 )
[187] (word) mul8u::mb#0 ← phi( initSquareTables::@8/(byte) mul8u::b#1 initSquareTables::@4/(byte) mul8u::b#0 ) [186] (word) mul8u::mb#0 ← phi( initSquareTables::@8/(byte) mul8u::b#1 initSquareTables::@4/(byte) mul8u::b#0 )
to:mul8u::@1 to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3
[188] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) [187] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 )
[188] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) [187] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 )
[188] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) [187] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 )
[189] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 [188] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2
to:mul8u::@return to:mul8u::@return
mul8u::@return: scope:[mul8u] from mul8u::@1 mul8u::@return: scope:[mul8u] from mul8u::@1
[190] return [189] return
to:@return to:@return
mul8u::@2: scope:[mul8u] from mul8u::@1 mul8u::@2: scope:[mul8u] from mul8u::@1
[191] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [190] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1
[192] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 [191] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
to:mul8u::@4 to:mul8u::@4
mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@4: scope:[mul8u] from mul8u::@2
[193] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [192] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
to:mul8u::@3 to:mul8u::@3
mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4
[194] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) [193] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
[195] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 [194] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1
[196] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 [195] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
to:mul8u::@1 to:mul8u::@1
irqBottom: scope:[irqBottom] from irqBottom: scope:[irqBottom] from
[197] phi() [196] phi()
to:irqBottom::@1 to:irqBottom::@1
irqBottom::@1: scope:[irqBottom] from irqBottom irqBottom::@1 irqBottom::@1: scope:[irqBottom] from irqBottom irqBottom::@1
[198] (byte) irqBottom::i#2 ← phi( irqBottom/(byte) 0 irqBottom::@1/(byte) irqBottom::i#1 ) [197] (byte) irqBottom::i#2 ← phi( irqBottom/(byte) 0 irqBottom::@1/(byte) irqBottom::i#1 )
[199] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2 [198] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2
[200] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1 [199] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1
to:irqBottom::@2 to:irqBottom::@2
irqBottom::@2: scope:[irqBottom] from irqBottom::@1 irqBottom::@2: scope:[irqBottom] from irqBottom::@1
[201] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 [200] phi()
[202] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [201] call processChars
[203] call processChars
to:irqBottom::@3 to:irqBottom::@3
irqBottom::@3: scope:[irqBottom] from irqBottom::@2 irqBottom::@3: scope:[irqBottom] from irqBottom::@2
[204] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 [202] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0
[205] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [203] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
[206] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 [204] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[207] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
[208] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqBottom::@return to:irqBottom::@return
irqBottom::@return: scope:[irqBottom] from irqBottom::@3 irqBottom::@return: scope:[irqBottom] from irqBottom::@3
[209] return [205] return
to:@return to:@return
processChars: scope:[processChars] from irqBottom::@2 processChars: scope:[processChars] from irqBottom::@2
[210] phi() [206] phi()
to:processChars::@1 to:processChars::@1
processChars::@1: scope:[processChars] from processChars processChars::@2 processChars::@1: scope:[processChars] from processChars processChars::@2
[211] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 ) [207] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
[211] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 ) [208] (byte) processChars::$64 ← (byte) processChars::i#10 << (byte) 1
[212] (byte) processChars::$44 ← (byte) processChars::i#10 << (byte) 1 [209] (byte) processChars::$65 ← (byte) processChars::$64 + (byte) processChars::i#10
[213] (byte) processChars::$45 ← (byte) processChars::$44 + (byte) processChars::i#10 [210] (byte) processChars::$66 ← (byte) processChars::$65 << (byte) 2
[214] (byte) processChars::$46 ← (byte) processChars::$45 << (byte) 2 [211] (byte~) processChars::$36 ← (byte) processChars::$66 + (byte) processChars::i#10
[215] (byte~) processChars::$24 ← (byte) processChars::$46 + (byte) processChars::i#10 [212] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$36
[216] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$24 [213] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
[217] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [214] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2
[218] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2 to:processChars::@9
processChars::@9: scope:[processChars] from processChars::@1
[215] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3
to:processChars::@10 to:processChars::@10
processChars::@10: scope:[processChars] from processChars::@1 processChars::@10: scope:[processChars] from processChars::@9
[219] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3 [216] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' '
to:processChars::@11 [217] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0
processChars::@11: scope:[processChars] from processChars::@10 [218] *((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)
[220] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [219] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0
[221] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0
[222] *((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)
[223] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0
to:processChars::@3 to:processChars::@3
processChars::@3: scope:[processChars] from processChars::@10 processChars::@11 processChars::@3: scope:[processChars] from processChars::@10 processChars::@9
[224] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [220] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4
[225] (byte~) processChars::$12 ← > (word) processChars::xpos#0 [221] (byte~) processChars::$10 ← > (word) processChars::xpos#0
[226] if((byte) 0!=(byte~) processChars::$12) goto processChars::@4 [222] if((byte) 0!=(byte~) processChars::$10) goto processChars::@4
to:processChars::@8 to:processChars::@7
processChars::@8: scope:[processChars] from processChars::@3 processChars::@7: scope:[processChars] from processChars::@3
[227] (byte~) processChars::$13 ← (byte) $ff ^ (byte) processChars::bitmask#0 [223] (byte~) processChars::$11 ← (byte) $ff ^ (byte) processChars::bitmask#0
[228] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$13 [224] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$11
to:processChars::@5 to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@8 processChars::@5: scope:[processChars] from processChars::@4 processChars::@7
[229] (byte~) processChars::$16 ← (byte) processChars::i#10 << (byte) 1 [225] (byte~) processChars::$16 ← (byte) processChars::i#10 << (byte) 1
[230] (byte~) processChars::$15 ← (byte)(word) processChars::xpos#0 [226] (byte~) processChars::$13 ← (byte)(word) processChars::xpos#0
[231] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$16) ← (byte~) processChars::$15 [227] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$16) ← (byte~) processChars::$13
[232] (word~) processChars::$17 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [228] (word~) processChars::$14 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4
[233] (byte~) processChars::$18 ← (byte)(word~) processChars::$17 [229] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$14
[234] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$16) ← (byte~) processChars::$18 [230] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$16) ← (byte) processChars::ypos#0
[235] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 [231] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6
to:processChars::@13 to:processChars::@13
processChars::@13: scope:[processChars] from processChars::@5 processChars::@13: scope:[processChars] from processChars::@5
[236] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_UPMOST#0) goto processChars::@6 [232] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6
to:processChars::@9
processChars::@9: scope:[processChars] from processChars::@13
[237] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
[238] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY)
to:processChars::@7
processChars::@7: scope:[processChars] from processChars::@6 processChars::@9
[239] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10
to:processChars::@2
processChars::@2: scope:[processChars] from processChars::@1 processChars::@7
[240] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 )
[241] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
[242] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1
to:processChars::@12 to:processChars::@12
processChars::@12: scope:[processChars] from processChars::@2 processChars::@12: scope:[processChars] from processChars::@13
[243] (byte~) processChars::$1 ← (byte) '0' + (byte) processChars::numActive#3 [233] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6
[244] *((const byte*) SCREEN#0+(word) $3e7) ← (byte~) processChars::$1 to:processChars::@11
processChars::@11: scope:[processChars] from processChars::@12
[234] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6
to:processChars::@8
processChars::@8: scope:[processChars] from processChars::@11
[235] (word~) processChars::$24 ← (word) processChars::xpos#0 >> (byte) 3
[236] (byte~) processChars::$25 ← (byte)(word~) processChars::$24
[237] (byte) processChars::xchar#0 ← (byte~) processChars::$25 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8
[238] (byte~) processChars::$37 ← (byte) processChars::xchar#0 << (byte) 1
[239] (word~) processChars::$28 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$37)
[240] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← (word~) processChars::$28
[241] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
[242] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3
[243] (byte) processChars::ychar#0 ← (byte~) processChars::$30 - (const byte) BORDER_YPOS_TOP#0/(byte) 8
[244] (byte~) processChars::$38 ← (byte) processChars::ychar#0 << (byte) 1
[245] (word~) processChars::$33 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$38)
[246] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← (word~) processChars::$33
[247] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY)
to:processChars::@2
processChars::@2: scope:[processChars] from processChars::@1 processChars::@6 processChars::@8
[248] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
[249] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1
to:processChars::@return to:processChars::@return
processChars::@return: scope:[processChars] from processChars::@12 processChars::@return: scope:[processChars] from processChars::@2
[245] return [250] return
to:@return to:@return
processChars::@6: scope:[processChars] from processChars::@13 processChars::@5 processChars::@6: scope:[processChars] from processChars::@11 processChars::@12 processChars::@13 processChars::@5
[246] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0 [251] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0
[247] (byte~) processChars::$22 ← (byte) $ff ^ (byte) processChars::bitmask#0 [252] (byte~) processChars::$34 ← (byte) $ff ^ (byte) processChars::bitmask#0
[248] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$22 [253] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$34
to:processChars::@7 to:processChars::@2
processChars::@4: scope:[processChars] from processChars::@3 processChars::@4: scope:[processChars] from processChars::@3
[249] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 [254] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0
to:processChars::@5 to:processChars::@5
irqTop: scope:[irqTop] from irqTop: scope:[irqTop] from
[250] phi() [255] phi()
to:irqTop::@1 to:irqTop::@1
irqTop::@1: scope:[irqTop] from irqTop irqTop::@1 irqTop::@1: scope:[irqTop] from irqTop irqTop::@1
[251] (byte) irqTop::i#2 ← phi( irqTop/(byte) 0 irqTop::@1/(byte) irqTop::i#1 ) [256] (byte) irqTop::i#2 ← phi( irqTop/(byte) 0 irqTop::@1/(byte) irqTop::i#1 )
[252] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2 [257] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2
[253] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1 [258] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1
to:irqTop::@2 to:irqTop::@2
irqTop::@2: scope:[irqTop] from irqTop::@1 irqTop::@2: scope:[irqTop] from irqTop::@1 irqTop::@2
[254] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 [259] (byte) irqTop::i1#2 ← phi( irqTop::@1/(byte) 0 irqTop::@2/(byte) irqTop::i1#1 )
[255] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [260] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2
[261] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@2
to:irqTop::@3 to:irqTop::@3
irqTop::@3: scope:[irqTop] from irqTop::@2 irqTop::@3 irqTop::@3: scope:[irqTop] from irqTop::@2
[256] (byte) irqTop::i1#2 ← phi( irqTop::@2/(byte) 0 irqTop::@3/(byte) irqTop::i1#1 ) [262] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
[257] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2 [263] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
[258] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@3 [264] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqTop::@4
irqTop::@4: scope:[irqTop] from irqTop::@3
[259] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[260] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[261] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
[262] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
[263] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqTop::@return to:irqTop::@return
irqTop::@return: scope:[irqTop] from irqTop::@4 irqTop::@return: scope:[irqTop] from irqTop::@3
[264] return [265] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,13 @@
(label) @1 (label) @1
(label) @2
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = (byte*) 53281
(byte) BLUE
(const byte) BLUE#0 BLUE = (byte) 6
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280
(byte) BORDER_XPOS_LEFT (byte) BORDER_XPOS_LEFT
(const byte) BORDER_XPOS_LEFT#0 BORDER_XPOS_LEFT = (byte) $18 (const byte) BORDER_XPOS_LEFT#0 BORDER_XPOS_LEFT = (byte) $18
(word) BORDER_XPOS_RIGHT
(const word) BORDER_XPOS_RIGHT#0 BORDER_XPOS_RIGHT = (word) $158
(byte) BORDER_YPOS_BOTTOM
(const byte) BORDER_YPOS_BOTTOM#0 BORDER_YPOS_BOTTOM = (byte) $fa
(byte) BORDER_YPOS_TOP (byte) BORDER_YPOS_TOP
(const byte) BORDER_YPOS_TOP#0 BORDER_YPOS_TOP = (byte) $32 (const byte) BORDER_YPOS_TOP#0 BORDER_YPOS_TOP = (byte) $32
(byte*) CHARGEN (byte*) CHARGEN
@ -105,20 +104,26 @@
(const byte) STATUS_PROCESSING#0 STATUS_PROCESSING = (byte) 2 (const byte) STATUS_PROCESSING#0 STATUS_PROCESSING = (byte) 2
(byte*) VIC_CONTROL (byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
(byte) WHITE (word*) VXSIN
(const byte) WHITE#0 WHITE = (byte) 1 (const word*) VXSIN#0 VXSIN = (word*) 8704
(word*) VYSIN
(const word*) VYSIN#0 VYSIN = (word*) 8832
(word) XPOS_LEFTMOST (word) XPOS_LEFTMOST
(const word) XPOS_LEFTMOST#0 XPOS_LEFTMOST = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8<<(byte) 4 (const word) XPOS_LEFTMOST#0 XPOS_LEFTMOST = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8<<(byte) 4
(word) YPOS_UPMOST (word) XPOS_RIGHTMOST
(const word) YPOS_UPMOST#0 YPOS_UPMOST = (word)(const byte) BORDER_YPOS_TOP#0-(byte) 8<<(byte) 4 (const word) XPOS_RIGHTMOST#0 XPOS_RIGHTMOST = (const word) BORDER_XPOS_RIGHT#0<<(byte) 4
(word) YPOS_BOTTOMMOST
(const word) YPOS_BOTTOMMOST#0 YPOS_BOTTOMMOST = (word)(const byte) BORDER_YPOS_BOTTOM#0<<(byte) 4
(word) YPOS_TOPMOST
(const word) YPOS_TOPMOST#0 YPOS_TOPMOST = (word)(const byte) BORDER_YPOS_TOP#0-(byte) 8<<(byte) 4
(struct ProcessingChar()) getCharToProcess() (struct ProcessingChar()) getCharToProcess()
(word~) getCharToProcess::$10 $10 zp ZP_WORD:47 4.0 (word~) getCharToProcess::$10 $10 zp ZP_WORD:44 4.0
(byte*~) getCharToProcess::$11 $11 zp ZP_WORD:47 4.0 (byte*~) getCharToProcess::$11 $11 zp ZP_WORD:44 4.0
(byte~) getCharToProcess::$13 reg byte x 1001.0 (byte~) getCharToProcess::$13 reg byte x 1001.0
(byte~) getCharToProcess::$14 reg byte a 2002.0 (byte~) getCharToProcess::$14 reg byte a 2002.0
(word) getCharToProcess::$15 $15 zp ZP_WORD:49 4.0 (word) getCharToProcess::$15 $15 zp ZP_WORD:46 4.0
(word) getCharToProcess::$16 $16 zp ZP_WORD:47 4.0 (word) getCharToProcess::$16 $16 zp ZP_WORD:44 4.0
(word~) getCharToProcess::$9 $9 zp ZP_WORD:47 3.0 (word~) getCharToProcess::$9 $9 zp ZP_WORD:44 3.0
(label) getCharToProcess::@1 (label) getCharToProcess::@1
(label) getCharToProcess::@10 (label) getCharToProcess::@10
(label) getCharToProcess::@11 (label) getCharToProcess::@11
@ -222,7 +227,6 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(label) irqTop::@1 (label) irqTop::@1
(label) irqTop::@2 (label) irqTop::@2
(label) irqTop::@3 (label) irqTop::@3
(label) irqTop::@4
(label) irqTop::@return (label) irqTop::@return
(byte) irqTop::i (byte) irqTop::i
(byte) irqTop::i#1 reg byte x 16.5 (byte) irqTop::i#1 reg byte x 16.5
@ -231,11 +235,11 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) irqTop::i1#1 reg byte x 16.5 (byte) irqTop::i1#1 reg byte x 16.5
(byte) irqTop::i1#2 reg byte x 22.0 (byte) irqTop::i1#2 reg byte x 22.0
(void()) main() (void()) main()
(byte~) main::$15 reg byte x 12.375 (byte~) main::$16 reg byte x 12.375
(byte) main::$24 reg byte a 22.0
(byte) main::$25 reg byte a 22.0 (byte) main::$25 reg byte a 22.0
(byte) main::$26 reg byte a 22.0 (byte) main::$26 reg byte a 22.0
(struct ProcessingChar~) main::$8 (byte) main::$27 reg byte a 22.0
(struct ProcessingChar~) main::$9
(label) main::@1 (label) main::@1
(label) main::@2 (label) main::@2
(label) main::@3 (label) main::@3
@ -244,6 +248,7 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(label) main::@6 (label) main::@6
(label) main::@7 (label) main::@7
(label) main::@8 (label) main::@8
(label) main::@9
(struct ProcessingChar) main::center (struct ProcessingChar) main::center
(word) main::center_dist (word) main::center_dist
(word) main::center_dist#0 center_dist zp ZP_WORD:20 22.0 (word) main::center_dist#0 center_dist zp ZP_WORD:20 22.0
@ -288,18 +293,23 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(word) mul8u::return#2 return zp ZP_WORD:26 22.0 (word) mul8u::return#2 return zp ZP_WORD:26 22.0
(word) mul8u::return#3 return zp ZP_WORD:26 22.0 (word) mul8u::return#3 return zp ZP_WORD:26 22.0
(void()) processChars() (void()) processChars()
(byte~) processChars::$1 reg byte x 4.0 (byte~) processChars::$10 reg byte a 22.0
(byte~) processChars::$12 reg byte a 22.0 (byte~) processChars::$11 reg byte a 22.0
(byte~) processChars::$13 reg byte a 22.0 (byte~) processChars::$13 reg byte a 22.0
(byte~) processChars::$15 reg byte a 22.0 (word~) processChars::$14 $14 zp ZP_WORD:53 11.0
(byte~) processChars::$16 reg byte x 6.6000000000000005 (byte~) processChars::$16 reg byte x 6.6000000000000005
(word~) processChars::$17 $17 zp ZP_WORD:56 11.0 (word~) processChars::$24 $24 zp ZP_WORD:51 11.0
(byte~) processChars::$18 reg byte a 22.0 (byte~) processChars::$25 reg byte a 22.0
(byte~) processChars::$22 reg byte a 22.0 (word~) processChars::$28 $28 zp ZP_WORD:56 22.0
(byte~) processChars::$24 reg byte a 22.0 (byte~) processChars::$30 reg byte a 22.0
(byte) processChars::$44 reg byte a 22.0 (word~) processChars::$33 $33 zp ZP_WORD:58 22.0
(byte) processChars::$45 reg byte a 22.0 (byte~) processChars::$34 reg byte a 22.0
(byte) processChars::$46 reg byte a 22.0 (byte~) processChars::$36 reg byte a 22.0
(byte~) processChars::$37 reg byte a 22.0
(byte~) processChars::$38 reg byte a 22.0
(byte) processChars::$64 reg byte a 22.0
(byte) processChars::$65 reg byte a 22.0
(byte) processChars::$66 reg byte a 22.0
(label) processChars::@1 (label) processChars::@1
(label) processChars::@10 (label) processChars::@10
(label) processChars::@11 (label) processChars::@11
@ -315,18 +325,20 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(label) processChars::@9 (label) processChars::@9
(label) processChars::@return (label) processChars::@return
(byte) processChars::bitmask (byte) processChars::bitmask
(byte) processChars::bitmask#0 bitmask zp ZP_BYTE:53 2.5 (byte) processChars::bitmask#0 bitmask zp ZP_BYTE:50 2.2916666666666665
(byte) processChars::i (byte) processChars::i
(byte) processChars::i#1 i zp ZP_BYTE:30 16.5 (byte) processChars::i#1 i zp ZP_BYTE:30 16.5
(byte) processChars::i#10 i zp ZP_BYTE:30 1.9411764705882353 (byte) processChars::i#10 i zp ZP_BYTE:30 1.4666666666666666
(byte) processChars::numActive
(byte) processChars::numActive#1 numActive zp ZP_BYTE:31 22.0
(byte) processChars::numActive#10 numActive zp ZP_BYTE:31 1.03125
(byte) processChars::numActive#3 numActive zp ZP_BYTE:31 11.666666666666666
(struct ProcessingSprite*) processChars::processing (struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0 processing zp ZP_WORD:51 0.4782608695652174 (struct ProcessingSprite*) processChars::processing#0 processing zp ZP_WORD:48 0.3055555555555556
(byte) processChars::xchar
(byte) processChars::xchar#0 reg byte a 22.0
(word) processChars::xpos (word) processChars::xpos
(word) processChars::xpos#0 xpos zp ZP_WORD:54 3.142857142857143 (word) processChars::xpos#0 xpos zp ZP_WORD:51 2.0625
(byte) processChars::ychar
(byte) processChars::ychar#0 reg byte a 22.0
(byte) processChars::ypos
(byte) processChars::ypos#0 ypos zp ZP_BYTE:55 2.5384615384615383
(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine) (void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
(label) setupRasterIrq::@1 (label) setupRasterIrq::@1
(label) setupRasterIrq::@2 (label) setupRasterIrq::@2
@ -335,31 +347,27 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(const void()*) setupRasterIrq::irqRoutine#0 irqRoutine = &interrupt(HARDWARE_ALL)(void()) irqTop() (const void()*) setupRasterIrq::irqRoutine#0 irqRoutine = &interrupt(HARDWARE_ALL)(void()) irqTop()
(word) setupRasterIrq::raster (word) setupRasterIrq::raster
(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (word) startProcessing::center_dist) (void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (word) startProcessing::center_dist)
(word~) startProcessing::$0 $0 zp ZP_WORD:34 3.0 (word~) startProcessing::$0 $0 zp ZP_WORD:33 3.0
(word~) startProcessing::$1 $1 zp ZP_WORD:34 4.0 (word~) startProcessing::$1 $1 zp ZP_WORD:33 4.0
(word~) startProcessing::$10 $10 zp ZP_WORD:40 4.0 (word~) startProcessing::$10 $10 zp ZP_WORD:39 4.0
(word~) startProcessing::$11 $11 zp ZP_WORD:40 4.0 (word~) startProcessing::$11 $11 zp ZP_WORD:39 4.0
(word~) startProcessing::$12 $12 zp ZP_WORD:40 4.0 (word~) startProcessing::$12 $12 zp ZP_WORD:39 4.0
(word~) startProcessing::$14 $14 zp ZP_WORD:42 4.0 (word~) startProcessing::$14 $14 zp ZP_WORD:41 4.0
(word~) startProcessing::$15 $15 zp ZP_WORD:42 4.0 (word~) startProcessing::$15 $15 zp ZP_WORD:41 4.0
(word~) startProcessing::$16 $16 zp ZP_WORD:42 4.0 (word~) startProcessing::$16 $16 zp ZP_WORD:41 4.0
(byte*~) startProcessing::$2 $2 zp ZP_WORD:34 1.2000000000000002 (byte*~) startProcessing::$2 $2 zp ZP_WORD:33 1.2000000000000002
(signed byte~) startProcessing::$22 reg byte a 4.0 (byte~) startProcessing::$27 reg byte a 2002.0
(signed byte~) startProcessing::$23 reg byte a 4.0 (byte~) startProcessing::$28 reg byte x 2.25
(signed byte~) startProcessing::$24 reg byte a 2.0 (byte) startProcessing::$38 reg byte a 2002.0
(word~) startProcessing::$25 $25 zp ZP_WORD:45 0.5714285714285714 (byte) startProcessing::$39 reg byte a 2002.0
(byte~) startProcessing::$33 reg byte a 2002.0
(byte~) startProcessing::$34 reg byte x 2.25
(word~) startProcessing::$4 $4 zp ZP_WORD:10 4.0 (word~) startProcessing::$4 $4 zp ZP_WORD:10 4.0
(byte) startProcessing::$44 reg byte a 2002.0 (byte) startProcessing::$40 reg byte a 2002.0
(byte) startProcessing::$45 reg byte a 2002.0 (word) startProcessing::$42 $42 zp ZP_WORD:35 4.0
(byte) startProcessing::$46 reg byte a 2002.0 (word) startProcessing::$43 $43 zp ZP_WORD:33 4.0
(word) startProcessing::$48 $48 zp ZP_WORD:36 4.0 (byte) startProcessing::$45 reg byte a 4.0
(word) startProcessing::$49 $49 zp ZP_WORD:34 4.0 (byte) startProcessing::$46 reg byte a 4.0
(byte) startProcessing::$47 reg byte a 4.0
(word~) startProcessing::$5 $5 zp ZP_WORD:10 4.0 (word~) startProcessing::$5 $5 zp ZP_WORD:10 4.0
(byte) startProcessing::$51 reg byte a 4.0
(byte) startProcessing::$52 reg byte a 4.0
(byte) startProcessing::$53 reg byte a 4.0
(word~) startProcessing::$7 $7 zp ZP_WORD:8 4.0 (word~) startProcessing::$7 $7 zp ZP_WORD:8 4.0
(word~) startProcessing::$8 $8 zp ZP_WORD:8 4.0 (word~) startProcessing::$8 $8 zp ZP_WORD:8 4.0
(label) startProcessing::@1 (label) startProcessing::@1
@ -375,9 +383,9 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(struct ProcessingChar) startProcessing::center (struct ProcessingChar) startProcessing::center
(word) startProcessing::center_dist (word) startProcessing::center_dist
(byte) startProcessing::center_x (byte) startProcessing::center_x
(byte) startProcessing::center_x#0 center_x zp ZP_BYTE:32 0.3846153846153846 (byte) startProcessing::center_x#0 center_x zp ZP_BYTE:31 0.3846153846153846
(byte) startProcessing::center_y (byte) startProcessing::center_y
(byte) startProcessing::center_y#0 center_y zp ZP_BYTE:33 0.2619047619047619 (byte) startProcessing::center_y#0 center_y zp ZP_BYTE:32 0.2619047619047619
(byte) startProcessing::ch (byte) startProcessing::ch
(byte) startProcessing::ch#0 reg byte a 2.0 (byte) startProcessing::ch#0 reg byte a 2.0
(byte*) startProcessing::chargenData (byte*) startProcessing::chargenData
@ -385,7 +393,7 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte*) startProcessing::chargenData#1 chargenData zp ZP_WORD:8 67.33333333333333 (byte*) startProcessing::chargenData#1 chargenData zp ZP_WORD:8 67.33333333333333
(byte*) startProcessing::chargenData#2 chargenData zp ZP_WORD:8 101.66666666666666 (byte*) startProcessing::chargenData#2 chargenData zp ZP_WORD:8 101.66666666666666
(byte) startProcessing::freeIdx (byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#2 freeIdx zp ZP_BYTE:7 28.56521739130435 (byte) startProcessing::freeIdx#2 freeIdx zp ZP_BYTE:7 31.285714285714285
(byte) startProcessing::freeIdx#6 reg byte x 22.444444444444443 (byte) startProcessing::freeIdx#6 reg byte x 22.444444444444443
(byte~) startProcessing::freeIdx#7 reg byte x 202.0 (byte~) startProcessing::freeIdx#7 reg byte x 202.0
(byte~) startProcessing::freeIdx#8 freeIdx zp ZP_BYTE:7 202.0 (byte~) startProcessing::freeIdx#8 freeIdx zp ZP_BYTE:7 202.0
@ -396,18 +404,18 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) startProcessing::i1#1 reg byte x 151.5 (byte) startProcessing::i1#1 reg byte x 151.5
(byte) startProcessing::i1#2 reg byte x 50.5 (byte) startProcessing::i1#2 reg byte x 50.5
(byte*) startProcessing::screenPtr (byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0 screenPtr zp ZP_WORD:38 0.09523809523809523 (byte*) startProcessing::screenPtr#0 screenPtr zp ZP_WORD:37 0.10526315789473684
(byte*) startProcessing::spriteData (byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0 spriteData zp ZP_WORD:10 0.5714285714285714 (byte*) startProcessing::spriteData#0 spriteData zp ZP_WORD:10 0.5714285714285714
(byte*) startProcessing::spriteData#1 spriteData zp ZP_WORD:10 50.5 (byte*) startProcessing::spriteData#1 spriteData zp ZP_WORD:10 50.5
(byte*) startProcessing::spriteData#2 spriteData zp ZP_WORD:10 152.5 (byte*) startProcessing::spriteData#2 spriteData zp ZP_WORD:10 152.5
(byte) startProcessing::spriteIdx (byte) startProcessing::spriteIdx
(byte) startProcessing::spritePtr (byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0 spritePtr zp ZP_BYTE:44 0.2857142857142857 (byte) startProcessing::spritePtr#0 spritePtr zp ZP_BYTE:43 0.4
(word) startProcessing::spriteX (word) startProcessing::spriteX
(word) startProcessing::spriteX#0 spriteX zp ZP_WORD:40 0.2857142857142857 (word) startProcessing::spriteX#0 spriteX zp ZP_WORD:39 0.4
(word) startProcessing::spriteY (word) startProcessing::spriteY
(word) startProcessing::spriteY#0 spriteY zp ZP_WORD:42 0.36363636363636365 (word) startProcessing::spriteY#0 spriteY zp ZP_WORD:41 0.5714285714285714
zp ZP_WORD:2 [ main::src#2 main::src#1 ] zp ZP_WORD:2 [ main::src#2 main::src#1 ]
zp ZP_WORD:4 [ main::dst#2 main::dst#1 ] zp ZP_WORD:4 [ main::dst#2 main::dst#1 ]
@ -437,57 +445,59 @@ zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::re
zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
reg byte x [ irqBottom::i#2 irqBottom::i#1 ] reg byte x [ irqBottom::i#2 irqBottom::i#1 ]
zp ZP_BYTE:30 [ processChars::i#10 processChars::i#1 ] zp ZP_BYTE:30 [ processChars::i#10 processChars::i#1 ]
zp ZP_BYTE:31 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
reg byte x [ irqTop::i#2 irqTop::i#1 ] reg byte x [ irqTop::i#2 irqTop::i#1 ]
reg byte x [ irqTop::i1#2 irqTop::i1#1 ] reg byte x [ irqTop::i1#2 irqTop::i1#1 ]
reg byte a [ main::$24 ]
reg byte a [ main::$25 ] reg byte a [ main::$25 ]
reg byte a [ main::$26 ] reg byte a [ main::$26 ]
reg byte x [ main::$15 ] reg byte a [ main::$27 ]
reg byte x [ main::$16 ]
reg byte x [ getCharToProcess::return_x#0 ] reg byte x [ getCharToProcess::return_x#0 ]
reg byte y [ getCharToProcess::return_y#0 ] reg byte y [ getCharToProcess::return_y#0 ]
reg byte x [ main::center_x#0 ] reg byte x [ main::center_x#0 ]
reg byte y [ main::center_y#0 ] reg byte y [ main::center_y#0 ]
zp ZP_BYTE:32 [ startProcessing::center_x#0 ] zp ZP_BYTE:31 [ startProcessing::center_x#0 ]
zp ZP_BYTE:33 [ startProcessing::center_y#0 ] zp ZP_BYTE:32 [ startProcessing::center_y#0 ]
reg byte a [ startProcessing::$44 ] reg byte a [ startProcessing::$38 ]
reg byte a [ startProcessing::$39 ]
reg byte a [ startProcessing::$40 ]
reg byte a [ startProcessing::$27 ]
zp ZP_WORD:33 [ startProcessing::$0 startProcessing::$43 startProcessing::$1 startProcessing::$2 ]
zp ZP_WORD:35 [ startProcessing::$42 ]
zp ZP_WORD:37 [ startProcessing::screenPtr#0 ]
reg byte a [ startProcessing::ch#0 ]
zp ZP_WORD:39 [ startProcessing::$10 startProcessing::$11 startProcessing::$12 startProcessing::spriteX#0 ]
zp ZP_WORD:41 [ startProcessing::$14 startProcessing::$15 startProcessing::$16 startProcessing::spriteY#0 ]
zp ZP_BYTE:43 [ startProcessing::spritePtr#0 ]
reg byte a [ startProcessing::$45 ] reg byte a [ startProcessing::$45 ]
reg byte a [ startProcessing::$46 ] reg byte a [ startProcessing::$46 ]
reg byte a [ startProcessing::$33 ] reg byte a [ startProcessing::$47 ]
zp ZP_WORD:34 [ startProcessing::$0 startProcessing::$49 startProcessing::$1 startProcessing::$2 ] reg byte x [ startProcessing::$28 ]
zp ZP_WORD:36 [ startProcessing::$48 ]
zp ZP_WORD:38 [ startProcessing::screenPtr#0 ]
reg byte a [ startProcessing::ch#0 ]
zp ZP_WORD:40 [ startProcessing::$10 startProcessing::$11 startProcessing::$12 startProcessing::spriteX#0 ]
zp ZP_WORD:42 [ startProcessing::$14 startProcessing::$15 startProcessing::$16 startProcessing::spriteY#0 ]
zp ZP_BYTE:44 [ startProcessing::spritePtr#0 ]
reg byte a [ startProcessing::$22 ]
reg byte a [ startProcessing::$23 ]
reg byte a [ startProcessing::$24 ]
zp ZP_WORD:45 [ startProcessing::$25 ]
reg byte a [ startProcessing::$51 ]
reg byte a [ startProcessing::$52 ]
reg byte a [ startProcessing::$53 ]
reg byte x [ startProcessing::$34 ]
reg byte x [ getCharToProcess::$13 ] reg byte x [ getCharToProcess::$13 ]
reg byte a [ getCharToProcess::$14 ] reg byte a [ getCharToProcess::$14 ]
zp ZP_WORD:47 [ getCharToProcess::$9 getCharToProcess::$16 getCharToProcess::$10 getCharToProcess::$11 ] zp ZP_WORD:44 [ getCharToProcess::$9 getCharToProcess::$16 getCharToProcess::$10 getCharToProcess::$11 ]
zp ZP_WORD:49 [ getCharToProcess::$15 ] zp ZP_WORD:46 [ getCharToProcess::$15 ]
reg byte a [ initSquareTables::$16 ] reg byte a [ initSquareTables::$16 ]
reg byte a [ initSquareTables::$17 ] reg byte a [ initSquareTables::$17 ]
reg byte a [ mul8u::$1 ] reg byte a [ mul8u::$1 ]
reg byte a [ processChars::$44 ] reg byte a [ processChars::$64 ]
reg byte a [ processChars::$45 ] reg byte a [ processChars::$65 ]
reg byte a [ processChars::$46 ] reg byte a [ processChars::$66 ]
reg byte a [ processChars::$24 ] reg byte a [ processChars::$36 ]
zp ZP_WORD:51 [ processChars::processing#0 ] zp ZP_WORD:48 [ processChars::processing#0 ]
zp ZP_BYTE:53 [ processChars::bitmask#0 ] zp ZP_BYTE:50 [ processChars::bitmask#0 ]
zp ZP_WORD:54 [ processChars::xpos#0 ] zp ZP_WORD:51 [ processChars::xpos#0 processChars::$24 ]
reg byte a [ processChars::$12 ] reg byte a [ processChars::$10 ]
reg byte a [ processChars::$13 ] reg byte a [ processChars::$11 ]
reg byte x [ processChars::$16 ] reg byte x [ processChars::$16 ]
reg byte a [ processChars::$15 ] reg byte a [ processChars::$13 ]
zp ZP_WORD:56 [ processChars::$17 ] zp ZP_WORD:53 [ processChars::$14 ]
reg byte a [ processChars::$18 ] zp ZP_BYTE:55 [ processChars::ypos#0 ]
reg byte x [ processChars::$1 ] reg byte a [ processChars::$25 ]
reg byte a [ processChars::$22 ] reg byte a [ processChars::xchar#0 ]
reg byte a [ processChars::$37 ]
zp ZP_WORD:56 [ processChars::$28 ]
reg byte a [ processChars::$30 ]
reg byte a [ processChars::ychar#0 ]
reg byte a [ processChars::$38 ]
zp ZP_WORD:58 [ processChars::$33 ]
reg byte a [ processChars::$34 ]

View File

@ -409,8 +409,7 @@ mul16u: {
adc mb+3 adc mb+3
sta res+3 sta res+3
b3: b3:
clc lsr a+1
ror a+1
ror a ror a
asl mb asl mb
rol mb+1 rol mb+1

View File

@ -5245,8 +5245,7 @@ mul16u: {
//SEG252 mul16u::@3 //SEG252 mul16u::@3
b3: b3:
//SEG253 [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG253 [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG254 [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG254 [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -6283,57 +6282,57 @@ Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::ch#2 main::ch#1 ]
Uplift Scope [] 26.12: zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] 0.8: zp ZP_WORD:175 [ rem16u#1 ] Uplift Scope [] 26.12: zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] 0.8: zp ZP_WORD:175 [ rem16u#1 ]
Uplift Scope [div32u16u] 4: zp ZP_DWORD:80 [ div32u16u::return#2 ] 4: zp ZP_WORD:167 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:169 [ div32u16u::return#0 ] 0.8: zp ZP_WORD:163 [ div32u16u::quotient_hi#0 ] Uplift Scope [div32u16u] 4: zp ZP_DWORD:80 [ div32u16u::return#2 ] 4: zp ZP_WORD:167 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:169 [ div32u16u::return#0 ] 0.8: zp ZP_WORD:163 [ div32u16u::quotient_hi#0 ]
Uplifting [mul16u] best 72862 combination zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:21 [ mul16u::b#1 ] zp ZP_DWORD:102 [ mul16u::return#2 ] zp ZP_DWORD:147 [ mul16u::return#3 ] Uplifting [mul16u] best 72662 combination zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:21 [ mul16u::b#1 ] zp ZP_DWORD:102 [ mul16u::return#2 ] zp ZP_DWORD:147 [ mul16u::return#3 ]
Uplifting [divr16u] best 72652 combination zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:161 [ divr16u::return#2 ] zp ZP_WORD:165 [ divr16u::return#3 ] Uplifting [divr16u] best 72452 combination zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:161 [ divr16u::return#2 ] zp ZP_WORD:165 [ divr16u::return#3 ]
Uplifting [sin16s] best 72652 combination zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:88 [ sin16s::return#0 ] zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:115 [ sin16s::$4 ] zp ZP_WORD:123 [ sin16s::x2#0 ] zp ZP_WORD:131 [ sin16s::x3_6#0 ] zp ZP_WORD:137 [ sin16s::x4#0 ] zp ZP_WORD:141 [ sin16s::x5#0 ] zp ZP_WORD:143 [ sin16s::x5_128#0 ] zp ZP_WORD:127 [ sin16s::x3#0 ] zp ZP_WORD:145 [ sin16s::usinx#1 ] zp ZP_WORD:119 [ sin16s::x1#0 ] zp ZP_WORD:133 [ sin16s::usinx#0 ] zp ZP_BYTE:33 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 72452 combination zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:88 [ sin16s::return#0 ] zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:115 [ sin16s::$4 ] zp ZP_WORD:123 [ sin16s::x2#0 ] zp ZP_WORD:131 [ sin16s::x3_6#0 ] zp ZP_WORD:137 [ sin16s::x4#0 ] zp ZP_WORD:141 [ sin16s::x5#0 ] zp ZP_WORD:143 [ sin16s::x5_128#0 ] zp ZP_WORD:127 [ sin16s::x3#0 ] zp ZP_WORD:145 [ sin16s::usinx#1 ] zp ZP_WORD:119 [ sin16s::x1#0 ] zp ZP_WORD:133 [ sin16s::usinx#0 ] zp ZP_BYTE:33 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 72636 combination zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:121 [ mulu16_sel::return#0 ] zp ZP_WORD:125 [ mulu16_sel::return#1 ] zp ZP_WORD:129 [ mulu16_sel::return#2 ] zp ZP_WORD:135 [ mulu16_sel::return#10 ] zp ZP_WORD:139 [ mulu16_sel::return#11 ] zp ZP_DWORD:151 [ mulu16_sel::$0 ] zp ZP_DWORD:155 [ mulu16_sel::$1 ] zp ZP_WORD:159 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] Uplifting [mulu16_sel] best 72436 combination zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:121 [ mulu16_sel::return#0 ] zp ZP_WORD:125 [ mulu16_sel::return#1 ] zp ZP_WORD:129 [ mulu16_sel::return#2 ] zp ZP_WORD:135 [ mulu16_sel::return#10 ] zp ZP_WORD:139 [ mulu16_sel::return#11 ] zp ZP_DWORD:151 [ mulu16_sel::$0 ] zp ZP_DWORD:155 [ mulu16_sel::$1 ] zp ZP_WORD:159 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [sin16s_gen2] best 72636 combination zp ZP_DWORD:96 [ sin16s_gen2::$5 ] zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_WORD:100 [ sin16s_gen2::$6 ] zp ZP_DWORD:9 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:13 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:84 [ sin16s_gen2::step#0 ] Uplifting [sin16s_gen2] best 72436 combination zp ZP_DWORD:96 [ sin16s_gen2::$5 ] zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_WORD:100 [ sin16s_gen2::$6 ] zp ZP_DWORD:9 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:13 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:84 [ sin16s_gen2::step#0 ]
Uplifting [loop] best 72636 combination zp ZP_WORD:55 [ loop::$5 ] zp ZP_WORD:57 [ loop::$1 ] zp ZP_WORD:59 [ loop::xpos#0 ] Uplifting [loop] best 72436 combination zp ZP_WORD:55 [ loop::$5 ] zp ZP_WORD:57 [ loop::$1 ] zp ZP_WORD:59 [ loop::xpos#0 ]
Uplifting [mul16s] best 72636 combination zp ZP_DWORD:92 [ mul16s::return#2 ] zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:110 [ mul16s::return#0 ] zp ZP_WORD:106 [ mul16s::$9 ] zp ZP_WORD:108 [ mul16s::$16 ] zp ZP_WORD:90 [ mul16s::a#0 ] Uplifting [mul16s] best 72436 combination zp ZP_DWORD:92 [ mul16s::return#2 ] zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:110 [ mul16s::return#0 ] zp ZP_WORD:106 [ mul16s::$9 ] zp ZP_WORD:108 [ mul16s::$16 ] zp ZP_WORD:90 [ mul16s::a#0 ]
Uplifting [fill] best 72620 combination zp ZP_WORD:53 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp ZP_WORD:177 [ fill::end#0 ] reg byte x [ fill::val#3 ] Uplifting [fill] best 72420 combination zp ZP_WORD:53 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp ZP_WORD:177 [ fill::end#0 ] reg byte x [ fill::val#3 ]
Uplifting [main] best 72500 combination reg byte x [ main::ch#2 main::ch#1 ] Uplifting [main] best 72300 combination reg byte x [ main::ch#2 main::ch#1 ]
Uplifting [] best 72500 combination zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] zp ZP_WORD:175 [ rem16u#1 ] Uplifting [] best 72300 combination zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] zp ZP_WORD:175 [ rem16u#1 ]
Uplifting [div32u16u] best 72500 combination zp ZP_DWORD:80 [ div32u16u::return#2 ] zp ZP_WORD:167 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:169 [ div32u16u::return#0 ] zp ZP_WORD:163 [ div32u16u::quotient_hi#0 ] Uplifting [div32u16u] best 72300 combination zp ZP_DWORD:80 [ div32u16u::return#2 ] zp ZP_WORD:167 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:169 [ div32u16u::return#0 ] zp ZP_WORD:163 [ div32u16u::quotient_hi#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
Uplifting [render_logo] best 67400 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] Uplifting [render_logo] best 67200 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
Uplifting [render_logo] best 62600 combination reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] Uplifting [render_logo] best 62400 combination reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
Uplifting [render_logo] best 62600 combination zp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] Uplifting [render_logo] best 62400 combination zp ZP_BYTE:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
Uplifting [render_logo] best 62600 combination zp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] Uplifting [render_logo] best 62400 combination zp ZP_BYTE:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:69 [ render_logo::$33 ] Attempting to uplift remaining variables inzp ZP_BYTE:69 [ render_logo::$33 ]
Uplifting [render_logo] best 62200 combination reg byte a [ render_logo::$33 ] Uplifting [render_logo] best 62000 combination reg byte a [ render_logo::$33 ]
Attempting to uplift remaining variables inzp ZP_BYTE:70 [ render_logo::$36 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ render_logo::$36 ]
Uplifting [render_logo] best 61800 combination reg byte a [ render_logo::$36 ] Uplifting [render_logo] best 61600 combination reg byte a [ render_logo::$36 ]
Attempting to uplift remaining variables inzp ZP_BYTE:71 [ render_logo::$39 ] Attempting to uplift remaining variables inzp ZP_BYTE:71 [ render_logo::$39 ]
Uplifting [render_logo] best 61400 combination reg byte a [ render_logo::$39 ] Uplifting [render_logo] best 61200 combination reg byte a [ render_logo::$39 ]
Attempting to uplift remaining variables inzp ZP_BYTE:72 [ render_logo::$42 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ render_logo::$42 ]
Uplifting [render_logo] best 61000 combination reg byte a [ render_logo::$42 ] Uplifting [render_logo] best 60800 combination reg byte a [ render_logo::$42 ]
Attempting to uplift remaining variables inzp ZP_BYTE:73 [ render_logo::$45 ] Attempting to uplift remaining variables inzp ZP_BYTE:73 [ render_logo::$45 ]
Uplifting [render_logo] best 60600 combination reg byte a [ render_logo::$45 ] Uplifting [render_logo] best 60400 combination reg byte a [ render_logo::$45 ]
Attempting to uplift remaining variables inzp ZP_BYTE:75 [ render_logo::$73 ] Attempting to uplift remaining variables inzp ZP_BYTE:75 [ render_logo::$73 ]
Uplifting [render_logo] best 60200 combination reg byte a [ render_logo::$73 ] Uplifting [render_logo] best 60000 combination reg byte a [ render_logo::$73 ]
Attempting to uplift remaining variables inzp ZP_BYTE:76 [ render_logo::$76 ] Attempting to uplift remaining variables inzp ZP_BYTE:76 [ render_logo::$76 ]
Uplifting [render_logo] best 59800 combination reg byte a [ render_logo::$76 ] Uplifting [render_logo] best 59600 combination reg byte a [ render_logo::$76 ]
Attempting to uplift remaining variables inzp ZP_BYTE:77 [ render_logo::$79 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ render_logo::$79 ]
Uplifting [render_logo] best 59400 combination reg byte a [ render_logo::$79 ] Uplifting [render_logo] best 59200 combination reg byte a [ render_logo::$79 ]
Attempting to uplift remaining variables inzp ZP_BYTE:78 [ render_logo::$82 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ render_logo::$82 ]
Uplifting [render_logo] best 59000 combination reg byte a [ render_logo::$82 ] Uplifting [render_logo] best 58800 combination reg byte a [ render_logo::$82 ]
Attempting to uplift remaining variables inzp ZP_BYTE:79 [ render_logo::$85 ] Attempting to uplift remaining variables inzp ZP_BYTE:79 [ render_logo::$85 ]
Uplifting [render_logo] best 58600 combination reg byte a [ render_logo::$85 ] Uplifting [render_logo] best 58400 combination reg byte a [ render_logo::$85 ]
Attempting to uplift remaining variables inzp ZP_BYTE:63 [ render_logo::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ render_logo::$0 ]
Uplifting [render_logo] best 58594 combination reg byte a [ render_logo::$0 ] Uplifting [render_logo] best 58394 combination reg byte a [ render_logo::$0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:64 [ render_logo::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:64 [ render_logo::$1 ]
Uplifting [render_logo] best 58588 combination reg byte a [ render_logo::$1 ] Uplifting [render_logo] best 58388 combination reg byte a [ render_logo::$1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:65 [ render_logo::$2 ] Attempting to uplift remaining variables inzp ZP_BYTE:65 [ render_logo::$2 ]
Uplifting [render_logo] best 58582 combination reg byte a [ render_logo::$2 ] Uplifting [render_logo] best 58382 combination reg byte a [ render_logo::$2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:74 [ render_logo::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:74 [ render_logo::$17 ]
Uplifting [render_logo] best 58576 combination reg byte a [ render_logo::$17 ] Uplifting [render_logo] best 58376 combination reg byte a [ render_logo::$17 ]
Attempting to uplift remaining variables inzp ZP_BYTE:68 [ render_logo::x_char#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:68 [ render_logo::x_char#0 ]
Uplifting [render_logo] best 58576 combination zp ZP_BYTE:68 [ render_logo::x_char#0 ] Uplifting [render_logo] best 58376 combination zp ZP_BYTE:68 [ render_logo::x_char#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ sin16s::isUpper#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 58576 combination zp ZP_BYTE:33 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 58376 combination zp ZP_BYTE:33 [ sin16s::isUpper#2 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:145 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:145 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:127 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:127 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:175 [ rem16u#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:175 [ rem16u#1 ] ] - score: 2
@ -7225,8 +7224,7 @@ mul16u: {
//SEG252 mul16u::@3 //SEG252 mul16u::@3
b3: b3:
//SEG253 [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG253 [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG254 [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG254 [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -8503,7 +8501,7 @@ zp ZP_WORD:62 [ fill::end#0 ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 44254 Score: 44054
//SEG0 File Comments //SEG0 File Comments
//SEG1 Basic Upstart //SEG1 Basic Upstart
@ -9170,8 +9168,7 @@ mul16u: {
//SEG252 mul16u::@3 //SEG252 mul16u::@3
b3: b3:
//SEG253 [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG253 [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG254 [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG254 [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb

View File

@ -402,8 +402,7 @@ mul16u: {
adc mb+3 adc mb+3
sta res+3 sta res+3
b3: b3:
clc lsr a+1
ror a+1
ror a ror a
asl mb asl mb
rol mb+1 rol mb+1

View File

@ -4637,8 +4637,7 @@ mul16u: {
//SEG196 mul16u::@3 //SEG196 mul16u::@3
b3: b3:
//SEG197 [108] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG197 [108] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG198 [109] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG198 [109] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -5899,32 +5898,32 @@ Uplift Scope [div32u16u] 4: zp ZP_DWORD:89 [ div32u16u::return#2 ] 4: zp ZP_WORD
Uplift Scope [] 0.8: zp ZP_WORD:184 [ rem16u#1 ] Uplift Scope [] 0.8: zp ZP_WORD:184 [ rem16u#1 ]
Uplift Scope [main] Uplift Scope [main]
Uplifting [mul16u] best 36744 combination zp ZP_DWORD:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:23 [ mul16u::b#1 ] zp ZP_DWORD:111 [ mul16u::return#2 ] zp ZP_DWORD:156 [ mul16u::return#3 ] Uplifting [mul16u] best 36544 combination zp ZP_DWORD:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:23 [ mul16u::b#1 ] zp ZP_DWORD:111 [ mul16u::return#2 ] zp ZP_DWORD:156 [ mul16u::return#3 ]
Uplifting [wrap_y] best 36561 combination zp ZP_WORD:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#0 wrap_y::y#1 wrap_y::y#2 wrap_y::y#3 ] reg byte a [ wrap_y::return#0 ] reg byte a [ wrap_y::return#1 ] reg byte a [ wrap_y::return#2 ] Uplifting [wrap_y] best 36361 combination zp ZP_WORD:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#0 wrap_y::y#1 wrap_y::y#2 wrap_y::y#3 ] reg byte a [ wrap_y::return#0 ] reg byte a [ wrap_y::return#1 ] reg byte a [ wrap_y::return#2 ]
Uplifting [bitmap_clear] best 35661 combination zp ZP_WORD:55 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:54 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:186 [ bitmap_clear::$3 ] Uplifting [bitmap_clear] best 35461 combination zp ZP_WORD:55 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:54 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:186 [ bitmap_clear::$3 ]
Uplifting [divr16u] best 35451 combination zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:170 [ divr16u::return#2 ] zp ZP_WORD:174 [ divr16u::return#3 ] Uplifting [divr16u] best 35251 combination zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:170 [ divr16u::return#2 ] zp ZP_WORD:174 [ divr16u::return#3 ]
Uplifting [render_sine] best 35371 combination zp ZP_WORD:65 [ render_sine::$10 ] zp ZP_WORD:67 [ render_sine::$0 ] zp ZP_WORD:69 [ render_sine::sin_val#0 ] zp ZP_WORD:73 [ render_sine::$11 ] zp ZP_WORD:75 [ render_sine::$3 ] zp ZP_WORD:77 [ render_sine::sin2_val#0 ] zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#8 render_sine::xpos#1 ] zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] reg byte x [ render_sine::ypos#0 ] reg byte x [ render_sine::ypos2#0 ] Uplifting [render_sine] best 35171 combination zp ZP_WORD:65 [ render_sine::$10 ] zp ZP_WORD:67 [ render_sine::$0 ] zp ZP_WORD:69 [ render_sine::sin_val#0 ] zp ZP_WORD:73 [ render_sine::$11 ] zp ZP_WORD:75 [ render_sine::$3 ] zp ZP_WORD:77 [ render_sine::sin2_val#0 ] zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#8 render_sine::xpos#1 ] zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] reg byte x [ render_sine::ypos#0 ] reg byte x [ render_sine::ypos2#0 ]
Uplifting [bitmap_init] best 34861 combination zp ZP_WORD:61 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:190 [ bitmap_init::$5 ] zp ZP_BYTE:191 [ bitmap_init::$6 ] zp ZP_BYTE:188 [ bitmap_init::$7 ] Uplifting [bitmap_init] best 34661 combination zp ZP_WORD:61 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:190 [ bitmap_init::$5 ] zp ZP_BYTE:191 [ bitmap_init::$6 ] zp ZP_BYTE:188 [ bitmap_init::$7 ]
Limited combination testing to 100 combinations of 15360 possible. Limited combination testing to 100 combinations of 15360 possible.
Uplifting [bitmap_plot] best 34794 combination reg byte x [ bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] zp ZP_WORD:83 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:85 [ bitmap_plot::plotter#1 ] zp ZP_WORD:81 [ bitmap_plot::$3 ] Uplifting [bitmap_plot] best 34594 combination reg byte x [ bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] zp ZP_WORD:83 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:85 [ bitmap_plot::plotter#1 ] zp ZP_WORD:81 [ bitmap_plot::$3 ]
Uplifting [sin16s] best 34794 combination zp ZP_DWORD:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:97 [ sin16s::return#0 ] zp ZP_WORD:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:124 [ sin16s::$4 ] zp ZP_WORD:132 [ sin16s::x2#0 ] zp ZP_WORD:140 [ sin16s::x3_6#0 ] zp ZP_WORD:146 [ sin16s::x4#0 ] zp ZP_WORD:150 [ sin16s::x5#0 ] zp ZP_WORD:152 [ sin16s::x5_128#0 ] zp ZP_WORD:136 [ sin16s::x3#0 ] zp ZP_WORD:154 [ sin16s::usinx#1 ] zp ZP_WORD:128 [ sin16s::x1#0 ] zp ZP_WORD:142 [ sin16s::usinx#0 ] zp ZP_BYTE:35 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 34594 combination zp ZP_DWORD:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:97 [ sin16s::return#0 ] zp ZP_WORD:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:124 [ sin16s::$4 ] zp ZP_WORD:132 [ sin16s::x2#0 ] zp ZP_WORD:140 [ sin16s::x3_6#0 ] zp ZP_WORD:146 [ sin16s::x4#0 ] zp ZP_WORD:150 [ sin16s::x5#0 ] zp ZP_WORD:152 [ sin16s::x5_128#0 ] zp ZP_WORD:136 [ sin16s::x3#0 ] zp ZP_WORD:154 [ sin16s::usinx#1 ] zp ZP_WORD:128 [ sin16s::x1#0 ] zp ZP_WORD:142 [ sin16s::usinx#0 ] zp ZP_BYTE:35 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 34778 combination zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:130 [ mulu16_sel::return#0 ] zp ZP_WORD:134 [ mulu16_sel::return#1 ] zp ZP_WORD:138 [ mulu16_sel::return#2 ] zp ZP_WORD:144 [ mulu16_sel::return#10 ] zp ZP_WORD:148 [ mulu16_sel::return#11 ] zp ZP_DWORD:160 [ mulu16_sel::$0 ] zp ZP_DWORD:164 [ mulu16_sel::$1 ] zp ZP_WORD:168 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] Uplifting [mulu16_sel] best 34578 combination zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:130 [ mulu16_sel::return#0 ] zp ZP_WORD:134 [ mulu16_sel::return#1 ] zp ZP_WORD:138 [ mulu16_sel::return#2 ] zp ZP_WORD:144 [ mulu16_sel::return#10 ] zp ZP_WORD:148 [ mulu16_sel::return#11 ] zp ZP_DWORD:160 [ mulu16_sel::$0 ] zp ZP_DWORD:164 [ mulu16_sel::$1 ] zp ZP_WORD:168 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [sin16s_gen2] best 34778 combination zp ZP_DWORD:105 [ sin16s_gen2::$5 ] zp ZP_WORD:17 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_WORD:109 [ sin16s_gen2::$6 ] zp ZP_DWORD:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:93 [ sin16s_gen2::step#0 ] Uplifting [sin16s_gen2] best 34578 combination zp ZP_DWORD:105 [ sin16s_gen2::$5 ] zp ZP_WORD:17 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_WORD:109 [ sin16s_gen2::$6 ] zp ZP_DWORD:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:93 [ sin16s_gen2::step#0 ]
Uplifting [mul16s] best 34778 combination zp ZP_DWORD:101 [ mul16s::return#2 ] zp ZP_DWORD:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:119 [ mul16s::return#0 ] zp ZP_WORD:115 [ mul16s::$9 ] zp ZP_WORD:117 [ mul16s::$16 ] zp ZP_WORD:99 [ mul16s::a#0 ] Uplifting [mul16s] best 34578 combination zp ZP_DWORD:101 [ mul16s::return#2 ] zp ZP_DWORD:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:119 [ mul16s::return#0 ] zp ZP_WORD:115 [ mul16s::$9 ] zp ZP_WORD:117 [ mul16s::$16 ] zp ZP_WORD:99 [ mul16s::a#0 ]
Uplifting [fill] best 34778 combination zp ZP_WORD:63 [ fill::addr#2 fill::addr#1 ] Uplifting [fill] best 34578 combination zp ZP_WORD:63 [ fill::addr#2 fill::addr#1 ]
Uplifting [div32u16u] best 34778 combination zp ZP_DWORD:89 [ div32u16u::return#2 ] zp ZP_WORD:176 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:178 [ div32u16u::return#0 ] zp ZP_WORD:172 [ div32u16u::quotient_hi#0 ] Uplifting [div32u16u] best 34578 combination zp ZP_DWORD:89 [ div32u16u::return#2 ] zp ZP_WORD:176 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:178 [ div32u16u::return#0 ] zp ZP_WORD:172 [ div32u16u::quotient_hi#0 ]
Uplifting [] best 34778 combination zp ZP_WORD:184 [ rem16u#1 ] Uplifting [] best 34578 combination zp ZP_WORD:184 [ rem16u#1 ]
Uplifting [main] best 34778 combination Uplifting [main] best 34578 combination
Attempting to uplift remaining variables inzp ZP_BYTE:190 [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp ZP_BYTE:190 [ bitmap_init::$5 ]
Uplifting [bitmap_init] best 34718 combination reg byte a [ bitmap_init::$5 ] Uplifting [bitmap_init] best 34518 combination reg byte a [ bitmap_init::$5 ]
Attempting to uplift remaining variables inzp ZP_BYTE:191 [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:191 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 34658 combination reg byte a [ bitmap_init::$6 ] Uplifting [bitmap_init] best 34458 combination reg byte a [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:54 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:54 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Uplifting [bitmap_clear] best 34658 combination zp ZP_BYTE:54 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Uplifting [bitmap_clear] best 34458 combination zp ZP_BYTE:54 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:188 [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:188 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 34658 combination zp ZP_BYTE:188 [ bitmap_init::$7 ] Uplifting [bitmap_init] best 34458 combination zp ZP_BYTE:188 [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:35 [ sin16s::isUpper#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:35 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 34658 combination zp ZP_BYTE:35 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 34458 combination zp ZP_BYTE:35 [ sin16s::isUpper#2 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#8 render_sine::xpos#1 ] ] with [ zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#8 render_sine::xpos#1 ] ] with [ zp ZP_WORD:7 [ bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:154 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:154 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:136 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:136 [ sin16s::x3#0 ] ] - score: 2
@ -6714,8 +6713,7 @@ mul16u: {
//SEG196 mul16u::@3 //SEG196 mul16u::@3
b3: b3:
//SEG197 [108] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG197 [108] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG198 [109] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG198 [109] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -8215,7 +8213,7 @@ reg byte a [ bitmap_init::$6 ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 28552 Score: 28352
//SEG0 File Comments //SEG0 File Comments
// Generate a big sinus and plot it on a bitmap // Generate a big sinus and plot it on a bitmap
@ -8819,8 +8817,7 @@ mul16u: {
//SEG196 mul16u::@3 //SEG196 mul16u::@3
b3: b3:
//SEG197 [108] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG197 [108] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG198 [109] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG198 [109] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb

View File

@ -501,8 +501,7 @@ mul16u: {
adc mb+3 adc mb+3
sta res+3 sta res+3
b3: b3:
clc lsr a+1
ror a+1
ror a ror a
asl mb asl mb
rol mb+1 rol mb+1

View File

@ -3632,8 +3632,7 @@ mul16u: {
//SEG259 mul16u::@3 //SEG259 mul16u::@3
b3: b3:
//SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -4085,22 +4084,22 @@ Uplift Scope [div32u16u] 4: zp ZP_DWORD:57 [ div32u16u::return#2 ] 4: zp ZP_WORD
Uplift Scope [print_sword] 9.58: zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] Uplift Scope [print_sword] 9.58: zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplift Scope [print_word] Uplift Scope [print_word]
Uplifting [mul16u] best 27049 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:101 [ mul16u::return#2 ] zp ZP_WORD:44 [ mul16u::b#0 ] Uplifting [mul16u] best 26849 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:101 [ mul16u::return#2 ] zp ZP_WORD:44 [ mul16u::b#0 ]
Uplifting [print_str] best 27049 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] Uplifting [print_str] best 26849 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 26839 combination zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:116 [ divr16u::return#2 ] zp ZP_WORD:120 [ divr16u::return#3 ] Uplifting [divr16u] best 26639 combination zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:116 [ divr16u::return#2 ] zp ZP_WORD:120 [ divr16u::return#3 ]
Uplifting [] best 26839 combination zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:130 [ rem16u#1 ] Uplifting [] best 26639 combination zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:130 [ rem16u#1 ]
Uplifting [sin16s] best 26839 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:65 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:69 [ sin16s::$4 ] zp ZP_WORD:77 [ sin16s::x2#0 ] zp ZP_WORD:85 [ sin16s::x3_6#0 ] zp ZP_WORD:91 [ sin16s::x4#0 ] zp ZP_WORD:95 [ sin16s::x5#0 ] zp ZP_WORD:97 [ sin16s::x5_128#0 ] zp ZP_WORD:81 [ sin16s::x3#0 ] zp ZP_WORD:99 [ sin16s::usinx#1 ] zp ZP_WORD:73 [ sin16s::x1#0 ] zp ZP_WORD:87 [ sin16s::usinx#0 ] zp ZP_BYTE:22 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 26639 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:65 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:69 [ sin16s::$4 ] zp ZP_WORD:77 [ sin16s::x2#0 ] zp ZP_WORD:85 [ sin16s::x3_6#0 ] zp ZP_WORD:91 [ sin16s::x4#0 ] zp ZP_WORD:95 [ sin16s::x5#0 ] zp ZP_WORD:97 [ sin16s::x5_128#0 ] zp ZP_WORD:81 [ sin16s::x3#0 ] zp ZP_WORD:99 [ sin16s::usinx#1 ] zp ZP_WORD:73 [ sin16s::x1#0 ] zp ZP_WORD:87 [ sin16s::usinx#0 ] zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 26823 combination zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:75 [ mulu16_sel::return#0 ] zp ZP_WORD:79 [ mulu16_sel::return#1 ] zp ZP_WORD:83 [ mulu16_sel::return#2 ] zp ZP_WORD:89 [ mulu16_sel::return#10 ] zp ZP_WORD:93 [ mulu16_sel::return#11 ] zp ZP_DWORD:105 [ mulu16_sel::$0 ] zp ZP_DWORD:109 [ mulu16_sel::$1 ] zp ZP_WORD:113 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] Uplifting [mulu16_sel] best 26623 combination zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:75 [ mulu16_sel::return#0 ] zp ZP_WORD:79 [ mulu16_sel::return#1 ] zp ZP_WORD:83 [ mulu16_sel::return#2 ] zp ZP_WORD:89 [ mulu16_sel::return#10 ] zp ZP_WORD:93 [ mulu16_sel::return#11 ] zp ZP_DWORD:105 [ mulu16_sel::$0 ] zp ZP_DWORD:109 [ mulu16_sel::$1 ] zp ZP_WORD:113 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [sin16s_gen] best 26823 combination zp ZP_WORD:67 [ sin16s_gen::$1 ] zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:61 [ sin16s_gen::step#0 ] Uplifting [sin16s_gen] best 26623 combination zp ZP_WORD:67 [ sin16s_gen::$1 ] zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:61 [ sin16s_gen::step#0 ]
Uplifting [print_cls] best 26823 combination zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ] Uplifting [print_cls] best 26623 combination zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [main] best 26823 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:53 [ main::sw#0 ] Uplifting [main] best 26623 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:53 [ main::sw#0 ]
Uplifting [print_byte] best 26809 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] Uplifting [print_byte] best 26609 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ]
Uplifting [print_char] best 26797 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] Uplifting [print_char] best 26597 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Uplifting [div32u16u] best 26797 combination zp ZP_DWORD:57 [ div32u16u::return#2 ] zp ZP_WORD:122 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:124 [ div32u16u::return#0 ] zp ZP_WORD:118 [ div32u16u::quotient_hi#0 ] Uplifting [div32u16u] best 26597 combination zp ZP_DWORD:57 [ div32u16u::return#2 ] zp ZP_WORD:122 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:124 [ div32u16u::return#0 ] zp ZP_WORD:118 [ div32u16u::quotient_hi#0 ]
Uplifting [print_sword] best 26797 combination zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] Uplifting [print_sword] best 26597 combination zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplifting [print_word] best 26797 combination Uplifting [print_word] best 26597 combination
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ sin16s::isUpper#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 26797 combination zp ZP_BYTE:22 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 26597 combination zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:99 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:99 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:81 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:81 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:130 [ rem16u#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:130 [ rem16u#1 ] ] - score: 2
@ -5047,8 +5046,7 @@ mul16u: {
//SEG259 mul16u::@3 //SEG259 mul16u::@3
b3: b3:
//SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -5720,7 +5718,7 @@ reg byte a [ divr16u::$2 ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 22865 Score: 22665
//SEG0 File Comments //SEG0 File Comments
// Generates a 16-bit signed sinus // Generates a 16-bit signed sinus
@ -6486,8 +6484,7 @@ mul16u: {
//SEG259 mul16u::@3 //SEG259 mul16u::@3
b3: b3:
//SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb

View File

@ -485,8 +485,7 @@ mul16u: {
adc mb+3 adc mb+3
sta res+3 sta res+3
b3: b3:
clc lsr a+1
ror a+1
ror a ror a
asl mb asl mb
rol mb+1 rol mb+1

View File

@ -4509,8 +4509,7 @@ mul16u: {
//SEG268 mul16u::@3 //SEG268 mul16u::@3
b3: b3:
//SEG269 [133] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG269 [133] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG270 [134] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG270 [134] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -5568,28 +5567,28 @@ Uplift Scope [print_char] 14: zp ZP_BYTE:12 [ print_char::ch#3 print_char::ch#1
Uplift Scope [print_sword] 9.58: zp ZP_WORD:9 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] Uplift Scope [print_sword] 9.58: zp ZP_WORD:9 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplift Scope [print_word] Uplift Scope [print_word]
Uplifting [mul16u] best 30094 combination zp ZP_DWORD:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:41 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:113 [ mul16u::return#2 ] zp ZP_WORD:45 [ mul16u::b#0 ] Uplifting [mul16u] best 29894 combination zp ZP_DWORD:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:41 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:113 [ mul16u::return#2 ] zp ZP_WORD:45 [ mul16u::b#0 ]
Uplifting [print_str] best 30094 combination zp ZP_WORD:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] Uplifting [print_str] best 29894 combination zp ZP_WORD:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 29884 combination zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:128 [ divr16u::return#2 ] zp ZP_WORD:132 [ divr16u::return#3 ] Uplifting [divr16u] best 29684 combination zp ZP_WORD:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:128 [ divr16u::return#2 ] zp ZP_WORD:132 [ divr16u::return#3 ]
Uplifting [] best 29884 combination zp ZP_WORD:13 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:142 [ rem16u#1 ] Uplifting [] best 29684 combination zp ZP_WORD:13 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:142 [ rem16u#1 ]
Uplifting [mulu16_sel] best 29853 combination zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] zp ZP_WORD:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] zp ZP_WORD:87 [ mulu16_sel::return#18 ] zp ZP_WORD:91 [ mulu16_sel::return#19 ] zp ZP_WORD:95 [ mulu16_sel::return#20 ] zp ZP_WORD:101 [ mulu16_sel::return#10 ] zp ZP_WORD:105 [ mulu16_sel::return#11 ] zp ZP_DWORD:117 [ mulu16_sel::$0 ] zp ZP_DWORD:121 [ mulu16_sel::$1 ] zp ZP_WORD:162 [ mulu16_sel::return#0 ] zp ZP_WORD:166 [ mulu16_sel::return#1 ] zp ZP_WORD:170 [ mulu16_sel::return#14 ] zp ZP_WORD:176 [ mulu16_sel::return#15 ] zp ZP_WORD:180 [ mulu16_sel::return#16 ] zp ZP_WORD:125 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ] Uplifting [mulu16_sel] best 29653 combination zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] zp ZP_WORD:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] zp ZP_WORD:87 [ mulu16_sel::return#18 ] zp ZP_WORD:91 [ mulu16_sel::return#19 ] zp ZP_WORD:95 [ mulu16_sel::return#20 ] zp ZP_WORD:101 [ mulu16_sel::return#10 ] zp ZP_WORD:105 [ mulu16_sel::return#11 ] zp ZP_DWORD:117 [ mulu16_sel::$0 ] zp ZP_DWORD:121 [ mulu16_sel::$1 ] zp ZP_WORD:162 [ mulu16_sel::return#0 ] zp ZP_WORD:166 [ mulu16_sel::return#1 ] zp ZP_WORD:170 [ mulu16_sel::return#14 ] zp ZP_WORD:176 [ mulu16_sel::return#15 ] zp ZP_WORD:180 [ mulu16_sel::return#16 ] zp ZP_WORD:125 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ]
Uplifting [sin16s] best 29853 combination zp ZP_DWORD:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:152 [ sin16s::return#0 ] zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:156 [ sin16s::$4 ] zp ZP_WORD:164 [ sin16s::x2#0 ] zp ZP_WORD:172 [ sin16s::x3_6#0 ] zp ZP_WORD:178 [ sin16s::x4#0 ] zp ZP_WORD:182 [ sin16s::x5#0 ] zp ZP_WORD:184 [ sin16s::x5_128#0 ] zp ZP_WORD:168 [ sin16s::x3#0 ] zp ZP_WORD:186 [ sin16s::usinx#1 ] zp ZP_WORD:160 [ sin16s::x1#0 ] zp ZP_WORD:174 [ sin16s::usinx#0 ] zp ZP_BYTE:62 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 29653 combination zp ZP_DWORD:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:152 [ sin16s::return#0 ] zp ZP_WORD:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:156 [ sin16s::$4 ] zp ZP_WORD:164 [ sin16s::x2#0 ] zp ZP_WORD:172 [ sin16s::x3_6#0 ] zp ZP_WORD:178 [ sin16s::x4#0 ] zp ZP_WORD:182 [ sin16s::x5#0 ] zp ZP_WORD:184 [ sin16s::x5_128#0 ] zp ZP_WORD:168 [ sin16s::x3#0 ] zp ZP_WORD:186 [ sin16s::usinx#1 ] zp ZP_WORD:160 [ sin16s::x1#0 ] zp ZP_WORD:174 [ sin16s::usinx#0 ] zp ZP_BYTE:62 [ sin16s::isUpper#2 ]
Uplifting [sin16sb] best 29853 combination zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp ZP_WORD:81 [ sin16sb::return#0 ] zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp ZP_WORD:89 [ sin16sb::x2#0 ] zp ZP_WORD:97 [ sin16sb::x3_6#0 ] zp ZP_WORD:103 [ sin16sb::x4#0 ] zp ZP_WORD:107 [ sin16sb::x5#0 ] zp ZP_WORD:109 [ sin16sb::x5_128#0 ] zp ZP_WORD:93 [ sin16sb::x3#0 ] zp ZP_WORD:111 [ sin16sb::usinx#1 ] zp ZP_WORD:85 [ sin16sb::x1#0 ] zp ZP_WORD:99 [ sin16sb::usinx#0 ] zp ZP_BYTE:25 [ sin16sb::isUpper#2 ] Uplifting [sin16sb] best 29653 combination zp ZP_WORD:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp ZP_WORD:81 [ sin16sb::return#0 ] zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp ZP_WORD:89 [ sin16sb::x2#0 ] zp ZP_WORD:97 [ sin16sb::x3_6#0 ] zp ZP_WORD:103 [ sin16sb::x4#0 ] zp ZP_WORD:107 [ sin16sb::x5#0 ] zp ZP_WORD:109 [ sin16sb::x5_128#0 ] zp ZP_WORD:93 [ sin16sb::x3#0 ] zp ZP_WORD:111 [ sin16sb::usinx#1 ] zp ZP_WORD:85 [ sin16sb::x1#0 ] zp ZP_WORD:99 [ sin16sb::usinx#0 ] zp ZP_BYTE:25 [ sin16sb::isUpper#2 ]
Uplifting [sin16s_gen] best 29853 combination zp ZP_WORD:154 [ sin16s_gen::$1 ] zp ZP_WORD:60 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:148 [ sin16s_gen::step#0 ] Uplifting [sin16s_gen] best 29653 combination zp ZP_WORD:154 [ sin16s_gen::$1 ] zp ZP_WORD:60 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:148 [ sin16s_gen::step#0 ]
Uplifting [sin16s_genb] best 29853 combination zp ZP_WORD:83 [ sin16s_genb::$2 ] zp ZP_WORD:23 [ sin16s_genb::i#2 sin16s_genb::i#1 ] zp ZP_DWORD:17 [ sin16s_genb::x#2 sin16s_genb::x#1 ] zp ZP_WORD:21 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] zp ZP_DWORD:77 [ sin16s_genb::step#0 ] Uplifting [sin16s_genb] best 29653 combination zp ZP_WORD:83 [ sin16s_genb::$2 ] zp ZP_WORD:23 [ sin16s_genb::i#2 sin16s_genb::i#1 ] zp ZP_DWORD:17 [ sin16s_genb::x#2 sin16s_genb::x#1 ] zp ZP_WORD:21 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] zp ZP_DWORD:77 [ sin16s_genb::step#0 ]
Uplifting [main] best 29763 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:69 [ main::sw#0 ] Uplifting [main] best 29563 combination reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::st2#2 main::st2#1 ] zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:69 [ main::sw#0 ]
Uplifting [print_cls] best 29763 combination zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ] Uplifting [print_cls] best 29563 combination zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 29755 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] Uplifting [print_byte] best 29555 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [div32u16u] best 29755 combination zp ZP_DWORD:73 [ div32u16u::return#3 ] zp ZP_WORD:134 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:144 [ div32u16u::return#2 ] zp ZP_DWORD:136 [ div32u16u::return#0 ] zp ZP_WORD:130 [ div32u16u::quotient_hi#0 ] Uplifting [div32u16u] best 29555 combination zp ZP_DWORD:73 [ div32u16u::return#3 ] zp ZP_WORD:134 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:144 [ div32u16u::return#2 ] zp ZP_DWORD:136 [ div32u16u::return#0 ] zp ZP_WORD:130 [ div32u16u::quotient_hi#0 ]
Uplifting [print_char] best 29743 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] Uplifting [print_char] best 29543 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Uplifting [print_sword] best 29743 combination zp ZP_WORD:9 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] Uplifting [print_sword] best 29543 combination zp ZP_WORD:9 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Uplifting [print_word] best 29743 combination Uplifting [print_word] best 29543 combination
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Uplifting [print_byte] best 29743 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Uplifting [print_byte] best 29543 combination zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ sin16sb::isUpper#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ sin16sb::isUpper#2 ]
Uplifting [sin16sb] best 29743 combination zp ZP_BYTE:25 [ sin16sb::isUpper#2 ] Uplifting [sin16sb] best 29543 combination zp ZP_BYTE:25 [ sin16sb::isUpper#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:62 [ sin16s::isUpper#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:62 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 29743 combination zp ZP_BYTE:62 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 29543 combination zp ZP_BYTE:62 [ sin16s::isUpper#2 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] ] with [ zp ZP_WORD:111 [ sin16sb::usinx#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] ] with [ zp ZP_WORD:111 [ sin16sb::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] ] with [ zp ZP_WORD:93 [ sin16sb::x3#0 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] ] with [ zp ZP_WORD:93 [ sin16sb::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 ] ] with [ zp ZP_WORD:168 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 ] ] with [ zp ZP_WORD:168 [ sin16s::x3#0 ] ] - score: 2
@ -6560,8 +6559,7 @@ mul16u: {
//SEG268 mul16u::@3 //SEG268 mul16u::@3
b3: b3:
//SEG269 [133] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG269 [133] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG270 [134] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG270 [134] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -7796,7 +7794,7 @@ zp ZP_WORD:71 [ sin16s::x1#0 ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 25153 Score: 24953
//SEG0 File Comments //SEG0 File Comments
// Generates a 16-bit signed sinus // Generates a 16-bit signed sinus
@ -8555,8 +8553,7 @@ mul16u: {
//SEG268 mul16u::@3 //SEG268 mul16u::@3
b3: b3:
//SEG269 [133] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG269 [133] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG270 [134] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG270 [134] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb

View File

@ -497,8 +497,7 @@ mul16u: {
adc mb+3 adc mb+3
sta res+3 sta res+3
b3: b3:
clc lsr a+1
ror a+1
ror a ror a
asl mb asl mb
rol mb+1 rol mb+1

View File

@ -4784,8 +4784,7 @@ mul16u: {
//SEG251 mul16u::@3 //SEG251 mul16u::@3
b3: b3:
//SEG252 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG252 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG253 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG253 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -5911,60 +5910,60 @@ Uplift Scope [print_byte] 4: zp ZP_BYTE:81 [ print_byte::$0 ] 4: zp ZP_BYTE:82 [
Uplift Scope [print_sbyte] 7.83: zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Uplift Scope [print_sbyte] 7.83: zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ]
Uplift Scope [div16u] 4: zp ZP_WORD:158 [ div16u::return#2 ] 1.33: zp ZP_WORD:189 [ div16u::return#0 ] Uplift Scope [div16u] 4: zp ZP_WORD:158 [ div16u::return#2 ] 1.33: zp ZP_WORD:189 [ div16u::return#0 ]
Uplifting [mul8u] best 39176 combination zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:67 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:179 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] Uplifting [mul8u] best 38976 combination zp ZP_WORD:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:67 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:179 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ]
Uplifting [mul16u] best 38576 combination zp ZP_DWORD:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:37 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:127 [ mul16u::return#2 ] zp ZP_WORD:41 [ mul16u::b#0 ] Uplifting [mul16u] best 38376 combination zp ZP_DWORD:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:37 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:127 [ mul16u::return#2 ] zp ZP_WORD:41 [ mul16u::b#0 ]
Uplifting [print_str] best 38576 combination zp ZP_WORD:3 [ print_str::str#2 print_str::str#0 ] Uplifting [print_str] best 38376 combination zp ZP_WORD:3 [ print_str::str#2 print_str::str#0 ]
Uplifting [divr16u] best 38366 combination zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] zp ZP_WORD:142 [ divr16u::return#3 ] zp ZP_WORD:146 [ divr16u::return#4 ] zp ZP_WORD:187 [ divr16u::return#2 ] Uplifting [divr16u] best 38166 combination zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] zp ZP_WORD:142 [ divr16u::return#3 ] zp ZP_WORD:146 [ divr16u::return#4 ] zp ZP_WORD:187 [ divr16u::return#2 ]
Uplifting [] best 38366 combination zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] zp ZP_WORD:156 [ rem16u#1 ] Uplifting [] best 38166 combination zp ZP_WORD:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] zp ZP_WORD:156 [ rem16u#1 ]
Uplifting [main] best 38136 combination zp ZP_WORD:71 [ main::$3 ] zp ZP_WORD:73 [ main::$11 ] zp ZP_WORD:75 [ main::$4 ] zp ZP_WORD:77 [ main::sw#0 ] reg byte a [ main::sd#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$5 ] zp ZP_BYTE:70 [ main::sb#0 ] Uplifting [main] best 37936 combination zp ZP_WORD:71 [ main::$3 ] zp ZP_WORD:73 [ main::$11 ] zp ZP_WORD:75 [ main::$4 ] zp ZP_WORD:77 [ main::sw#0 ] reg byte a [ main::sd#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$5 ] zp ZP_BYTE:70 [ main::sb#0 ]
Uplifting [sin8s] best 38031 combination zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:164 [ sin8s::$4 ] zp ZP_BYTE:168 [ sin8s::x2#0 ] zp ZP_BYTE:172 [ sin8s::x3_6#0 ] zp ZP_BYTE:175 [ sin8s::x4#0 ] zp ZP_BYTE:177 [ sin8s::x5#0 ] zp ZP_BYTE:178 [ sin8s::x5_128#0 ] zp ZP_BYTE:170 [ sin8s::x3#0 ] zp ZP_BYTE:166 [ sin8s::x1#0 ] zp ZP_BYTE:173 [ sin8s::usinx#0 ] zp ZP_BYTE:56 [ sin8s::isUpper#10 ] Uplifting [sin8s] best 37831 combination zp ZP_WORD:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:164 [ sin8s::$4 ] zp ZP_BYTE:168 [ sin8s::x2#0 ] zp ZP_BYTE:172 [ sin8s::x3_6#0 ] zp ZP_BYTE:175 [ sin8s::x4#0 ] zp ZP_BYTE:177 [ sin8s::x5#0 ] zp ZP_BYTE:178 [ sin8s::x5_128#0 ] zp ZP_BYTE:170 [ sin8s::x3#0 ] zp ZP_BYTE:166 [ sin8s::x1#0 ] zp ZP_BYTE:173 [ sin8s::usinx#0 ] zp ZP_BYTE:56 [ sin8s::isUpper#10 ]
Limited combination testing to 100 combinations of 5308416 possible. Limited combination testing to 100 combinations of 5308416 possible.
Uplifting [sin16s] best 38031 combination zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:91 [ sin16s::return#0 ] zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:95 [ sin16s::$4 ] zp ZP_WORD:103 [ sin16s::x2#0 ] zp ZP_WORD:111 [ sin16s::x3_6#0 ] zp ZP_WORD:117 [ sin16s::x4#0 ] zp ZP_WORD:121 [ sin16s::x5#0 ] zp ZP_WORD:123 [ sin16s::x5_128#0 ] zp ZP_WORD:107 [ sin16s::x3#0 ] zp ZP_WORD:125 [ sin16s::usinx#1 ] zp ZP_WORD:99 [ sin16s::x1#0 ] zp ZP_WORD:113 [ sin16s::usinx#0 ] zp ZP_BYTE:19 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 37831 combination zp ZP_DWORD:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:91 [ sin16s::return#0 ] zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:95 [ sin16s::$4 ] zp ZP_WORD:103 [ sin16s::x2#0 ] zp ZP_WORD:111 [ sin16s::x3_6#0 ] zp ZP_WORD:117 [ sin16s::x4#0 ] zp ZP_WORD:121 [ sin16s::x5#0 ] zp ZP_WORD:123 [ sin16s::x5_128#0 ] zp ZP_WORD:107 [ sin16s::x3#0 ] zp ZP_WORD:125 [ sin16s::usinx#1 ] zp ZP_WORD:99 [ sin16s::x1#0 ] zp ZP_WORD:113 [ sin16s::usinx#0 ] zp ZP_BYTE:19 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 38015 combination zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:101 [ mulu16_sel::return#0 ] zp ZP_WORD:105 [ mulu16_sel::return#1 ] zp ZP_WORD:109 [ mulu16_sel::return#2 ] zp ZP_WORD:115 [ mulu16_sel::return#10 ] zp ZP_WORD:119 [ mulu16_sel::return#11 ] zp ZP_DWORD:131 [ mulu16_sel::$0 ] zp ZP_DWORD:135 [ mulu16_sel::$1 ] zp ZP_WORD:139 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] Uplifting [mulu16_sel] best 37815 combination zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:101 [ mulu16_sel::return#0 ] zp ZP_WORD:105 [ mulu16_sel::return#1 ] zp ZP_WORD:109 [ mulu16_sel::return#2 ] zp ZP_WORD:115 [ mulu16_sel::return#10 ] zp ZP_WORD:119 [ mulu16_sel::return#11 ] zp ZP_DWORD:131 [ mulu16_sel::$0 ] zp ZP_DWORD:135 [ mulu16_sel::$1 ] zp ZP_WORD:139 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [mulu8_sel] best 37969 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:171 [ mulu8_sel::return#2 ] zp ZP_BYTE:174 [ mulu8_sel::return#10 ] zp ZP_BYTE:176 [ mulu8_sel::return#11 ] zp ZP_WORD:181 [ mulu8_sel::$0 ] zp ZP_WORD:183 [ mulu8_sel::$1 ] zp ZP_BYTE:185 [ mulu8_sel::return#12 ] zp ZP_BYTE:63 [ mulu8_sel::select#5 ] Uplifting [mulu8_sel] best 37769 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:171 [ mulu8_sel::return#2 ] zp ZP_BYTE:174 [ mulu8_sel::return#10 ] zp ZP_BYTE:176 [ mulu8_sel::return#11 ] zp ZP_WORD:181 [ mulu8_sel::$0 ] zp ZP_WORD:183 [ mulu8_sel::$1 ] zp ZP_BYTE:185 [ mulu8_sel::return#12 ] zp ZP_BYTE:63 [ mulu8_sel::select#5 ]
Limited combination testing to 100 combinations of 196608 possible. Limited combination testing to 100 combinations of 196608 possible.
Uplifting [sin16s_gen] best 37969 combination zp ZP_WORD:93 [ sin16s_gen::$1 ] zp ZP_WORD:17 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:11 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:15 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:87 [ sin16s_gen::step#0 ] Uplifting [sin16s_gen] best 37769 combination zp ZP_WORD:93 [ sin16s_gen::$1 ] zp ZP_WORD:17 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:11 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:15 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:87 [ sin16s_gen::step#0 ]
Uplifting [sin8s_gen] best 37909 combination reg byte a [ sin8s_gen::$1 ] zp ZP_WORD:54 [ sin8s_gen::i#2 sin8s_gen::i#1 ] zp ZP_WORD:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp ZP_WORD:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp ZP_WORD:160 [ sin8s_gen::step#0 ] Uplifting [sin8s_gen] best 37709 combination reg byte a [ sin8s_gen::$1 ] zp ZP_WORD:54 [ sin8s_gen::i#2 sin8s_gen::i#1 ] zp ZP_WORD:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp ZP_WORD:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp ZP_WORD:160 [ sin8s_gen::step#0 ]
Uplifting [print_cls] best 37909 combination zp ZP_WORD:9 [ print_cls::sc#2 print_cls::sc#1 ] Uplifting [print_cls] best 37709 combination zp ZP_WORD:9 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_char] best 37894 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplifting [print_char] best 37694 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [div32u16u] best 37894 combination zp ZP_DWORD:83 [ div32u16u::return#2 ] zp ZP_WORD:148 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:150 [ div32u16u::return#0 ] zp ZP_WORD:144 [ div32u16u::quotient_hi#0 ] Uplifting [div32u16u] best 37694 combination zp ZP_DWORD:83 [ div32u16u::return#2 ] zp ZP_WORD:148 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:150 [ div32u16u::return#0 ] zp ZP_WORD:144 [ div32u16u::quotient_hi#0 ]
Uplifting [print_byte] best 37886 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] Uplifting [print_byte] best 37686 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [print_sbyte] best 37886 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Uplifting [print_sbyte] best 37686 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ]
Uplifting [div16u] best 37886 combination zp ZP_WORD:158 [ div16u::return#2 ] zp ZP_WORD:189 [ div16u::return#0 ] Uplifting [div16u] best 37686 combination zp ZP_WORD:158 [ div16u::return#2 ] zp ZP_WORD:189 [ div16u::return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ]
Uplifting [print_sbyte] best 37886 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Uplifting [print_sbyte] best 37686 combination zp ZP_BYTE:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:168 [ sin8s::x2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:168 [ sin8s::x2#0 ]
Uplifting [sin8s] best 37882 combination reg byte a [ sin8s::x2#0 ] Uplifting [sin8s] best 37682 combination reg byte a [ sin8s::x2#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:171 [ mulu8_sel::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:171 [ mulu8_sel::return#2 ]
Uplifting [mulu8_sel] best 37876 combination reg byte a [ mulu8_sel::return#2 ] Uplifting [mulu8_sel] best 37676 combination reg byte a [ mulu8_sel::return#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:172 [ sin8s::x3_6#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:172 [ sin8s::x3_6#0 ]
Uplifting [sin8s] best 37872 combination reg byte a [ sin8s::x3_6#0 ] Uplifting [sin8s] best 37672 combination reg byte a [ sin8s::x3_6#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:174 [ mulu8_sel::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:174 [ mulu8_sel::return#10 ]
Uplifting [mulu8_sel] best 37866 combination reg byte a [ mulu8_sel::return#10 ] Uplifting [mulu8_sel] best 37666 combination reg byte a [ mulu8_sel::return#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:175 [ sin8s::x4#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:175 [ sin8s::x4#0 ]
Uplifting [sin8s] best 37862 combination reg byte a [ sin8s::x4#0 ] Uplifting [sin8s] best 37662 combination reg byte a [ sin8s::x4#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:176 [ mulu8_sel::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:176 [ mulu8_sel::return#11 ]
Uplifting [mulu8_sel] best 37856 combination reg byte a [ mulu8_sel::return#11 ] Uplifting [mulu8_sel] best 37656 combination reg byte a [ mulu8_sel::return#11 ]
Attempting to uplift remaining variables inzp ZP_BYTE:177 [ sin8s::x5#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:177 [ sin8s::x5#0 ]
Uplifting [sin8s] best 37850 combination reg byte a [ sin8s::x5#0 ] Uplifting [sin8s] best 37650 combination reg byte a [ sin8s::x5#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:178 [ sin8s::x5_128#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:178 [ sin8s::x5_128#0 ]
Uplifting [sin8s] best 37844 combination reg byte a [ sin8s::x5_128#0 ] Uplifting [sin8s] best 37644 combination reg byte a [ sin8s::x5_128#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:70 [ main::sb#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ main::sb#0 ]
Uplifting [main] best 37844 combination zp ZP_BYTE:70 [ main::sb#0 ] Uplifting [main] best 37644 combination zp ZP_BYTE:70 [ main::sb#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:185 [ mulu8_sel::return#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:185 [ mulu8_sel::return#12 ]
Uplifting [mulu8_sel] best 37826 combination reg byte a [ mulu8_sel::return#12 ] Uplifting [mulu8_sel] best 37626 combination reg byte a [ mulu8_sel::return#12 ]
Attempting to uplift remaining variables inzp ZP_BYTE:170 [ sin8s::x3#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:170 [ sin8s::x3#0 ]
Uplifting [sin8s] best 37826 combination zp ZP_BYTE:170 [ sin8s::x3#0 ] Uplifting [sin8s] best 37626 combination zp ZP_BYTE:170 [ sin8s::x3#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:166 [ sin8s::x1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:166 [ sin8s::x1#0 ]
Uplifting [sin8s] best 37826 combination zp ZP_BYTE:166 [ sin8s::x1#0 ] Uplifting [sin8s] best 37626 combination zp ZP_BYTE:166 [ sin8s::x1#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:63 [ mulu8_sel::select#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ mulu8_sel::select#5 ]
Uplifting [mulu8_sel] best 37826 combination zp ZP_BYTE:63 [ mulu8_sel::select#5 ] Uplifting [mulu8_sel] best 37626 combination zp ZP_BYTE:63 [ mulu8_sel::select#5 ]
Attempting to uplift remaining variables inzp ZP_BYTE:173 [ sin8s::usinx#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:173 [ sin8s::usinx#0 ]
Uplifting [sin8s] best 37826 combination zp ZP_BYTE:173 [ sin8s::usinx#0 ] Uplifting [sin8s] best 37626 combination zp ZP_BYTE:173 [ sin8s::usinx#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:19 [ sin16s::isUpper#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 37826 combination zp ZP_BYTE:19 [ sin16s::isUpper#2 ] Uplifting [sin16s] best 37626 combination zp ZP_BYTE:19 [ sin16s::isUpper#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:56 [ sin8s::isUpper#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:56 [ sin8s::isUpper#10 ]
Uplifting [sin8s] best 37826 combination zp ZP_BYTE:56 [ sin8s::isUpper#10 ] Uplifting [sin8s] best 37626 combination zp ZP_BYTE:56 [ sin8s::isUpper#10 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:125 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:125 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:107 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:107 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:156 [ rem16u#1 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:156 [ rem16u#1 ] ] - score: 2
@ -6918,8 +6917,7 @@ mul16u: {
//SEG251 mul16u::@3 //SEG251 mul16u::@3
b3: b3:
//SEG252 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG252 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG253 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG253 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -8303,7 +8301,7 @@ reg byte a [ mul8u::$1 ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 32078 Score: 31878
//SEG0 File Comments //SEG0 File Comments
//SEG1 Basic Upstart //SEG1 Basic Upstart
@ -9057,8 +9055,7 @@ mul16u: {
//SEG251 mul16u::@3 //SEG251 mul16u::@3
b3: b3:
//SEG252 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG252 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG253 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG253 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb

View File

@ -614,8 +614,7 @@ mul16u: {
adc mb+3 adc mb+3
sta res+3 sta res+3
b3: b3:
clc lsr a+1
ror a+1
ror a ror a
asl mb asl mb
rol mb+1 rol mb+1

View File

@ -6390,8 +6390,7 @@ mul16u: {
//SEG378 mul16u::@3 //SEG378 mul16u::@3
b3: b3:
//SEG379 [184] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG379 [184] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG380 [185] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG380 [185] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -7893,39 +7892,39 @@ Uplift Scope [mul16s_error] 0.57: zp ZP_WORD:126 [ mul16s_error::a#0 ] 0.4: zp Z
Uplift Scope [print_ln] Uplift Scope [print_ln]
Uplift Scope [main] Uplift Scope [main]
Uplifting [muls16s] best 550894 combination zp ZP_DWORD:55 [ muls16s::m#5 muls16s::return#0 muls16s::m#2 muls16s::m#3 muls16s::m#1 ] zp ZP_WORD:53 [ muls16s::j#2 muls16s::j#1 ] zp ZP_WORD:59 [ muls16s::i#2 muls16s::i#1 ] zp ZP_DWORD:94 [ muls16s::return#2 ] zp ZP_WORD:92 [ muls16s::b#0 ] zp ZP_WORD:90 [ muls16s::a#0 ] Uplifting [muls16s] best 548894 combination zp ZP_DWORD:55 [ muls16s::m#5 muls16s::return#0 muls16s::m#2 muls16s::m#3 muls16s::m#1 ] zp ZP_WORD:53 [ muls16s::j#2 muls16s::j#1 ] zp ZP_WORD:59 [ muls16s::i#2 muls16s::i#1 ] zp ZP_DWORD:94 [ muls16s::return#2 ] zp ZP_WORD:92 [ muls16s::b#0 ] zp ZP_WORD:90 [ muls16s::a#0 ]
Uplifting [mul16u] best 544894 combination zp ZP_DWORD:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#6 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:41 [ mul16u::b#1 ] zp ZP_DWORD:193 [ mul16u::return#3 ] zp ZP_DWORD:164 [ mul16u::return#2 ] Uplifting [mul16u] best 542894 combination zp ZP_DWORD:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#6 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:41 [ mul16u::b#1 ] zp ZP_DWORD:193 [ mul16u::return#3 ] zp ZP_DWORD:164 [ mul16u::return#2 ]
Uplifting [muls16u] best 544894 combination zp ZP_DWORD:70 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] zp ZP_WORD:68 [ muls16u::i#2 muls16u::i#1 ] zp ZP_DWORD:185 [ muls16u::return#2 ] zp ZP_WORD:183 [ muls16u::b#0 ] zp ZP_WORD:181 [ muls16u::a#0 ] Uplifting [muls16u] best 542894 combination zp ZP_DWORD:70 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] zp ZP_WORD:68 [ muls16u::i#2 muls16u::i#1 ] zp ZP_DWORD:185 [ muls16u::return#2 ] zp ZP_WORD:183 [ muls16u::b#0 ] zp ZP_WORD:181 [ muls16u::a#0 ]
Uplifting [mul16u_compare] best 542794 combination zp ZP_WORD:62 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] reg byte x [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] reg byte y [ mul16u_compare::j#10 mul16u_compare::j#1 ] zp ZP_WORD:64 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] zp ZP_BYTE:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] zp ZP_DWORD:205 [ mul16u_compare::mf#0 ] zp ZP_DWORD:189 [ mul16u_compare::ms#0 ] zp ZP_DWORD:197 [ mul16u_compare::mn#0 ] Uplifting [mul16u_compare] best 540794 combination zp ZP_WORD:62 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] reg byte x [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] reg byte y [ mul16u_compare::j#10 mul16u_compare::j#1 ] zp ZP_WORD:64 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] zp ZP_BYTE:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] zp ZP_DWORD:205 [ mul16u_compare::mf#0 ] zp ZP_DWORD:189 [ mul16u_compare::ms#0 ] zp ZP_DWORD:197 [ mul16u_compare::mn#0 ]
Uplifting [mul16s_compare] best 540694 combination zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] reg byte x [ mul16s_compare::ok#3 mul16s_compare::ok#4 ] reg byte y [ mul16s_compare::j#10 mul16s_compare::j#1 ] zp ZP_WORD:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] zp ZP_DWORD:122 [ mul16s_compare::mf#0 ] zp ZP_DWORD:98 [ mul16s_compare::ms#0 ] zp ZP_DWORD:110 [ mul16s_compare::mn#0 ] Uplifting [mul16s_compare] best 538694 combination zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] reg byte x [ mul16s_compare::ok#3 mul16s_compare::ok#4 ] reg byte y [ mul16s_compare::j#10 mul16s_compare::j#1 ] zp ZP_WORD:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] zp ZP_DWORD:122 [ mul16s_compare::mf#0 ] zp ZP_DWORD:98 [ mul16s_compare::ms#0 ] zp ZP_DWORD:110 [ mul16s_compare::mn#0 ]
Uplifting [mulf16u] best 540694 combination zp ZP_WORD:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#4 ] zp ZP_WORD:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#4 ] zp ZP_DWORD:201 [ mulf16u::return#3 ] zp ZP_DWORD:160 [ mulf16u::return#0 ] zp ZP_DWORD:144 [ mulf16u::return#2 ] Uplifting [mulf16u] best 538694 combination zp ZP_WORD:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#4 ] zp ZP_WORD:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#4 ] zp ZP_DWORD:201 [ mulf16u::return#3 ] zp ZP_DWORD:160 [ mulf16u::return#0 ] zp ZP_DWORD:144 [ mulf16u::return#2 ]
Uplifting [print_str] best 540694 combination zp ZP_WORD:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ] Uplifting [print_str] best 538694 combination zp ZP_WORD:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ]
Uplifting [mul16s] best 540694 combination zp ZP_DWORD:106 [ mul16s::return#2 ] zp ZP_DWORD:176 [ mul16s::return#0 ] zp ZP_DWORD:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_WORD:104 [ mul16s::b#0 ] zp ZP_WORD:102 [ mul16s::a#0 ] zp ZP_WORD:168 [ mul16s::$9 ] zp ZP_WORD:170 [ mul16s::$16 ] zp ZP_WORD:172 [ mul16s::$13 ] zp ZP_WORD:174 [ mul16s::$17 ] Uplifting [mul16s] best 538694 combination zp ZP_DWORD:106 [ mul16s::return#2 ] zp ZP_DWORD:176 [ mul16s::return#0 ] zp ZP_DWORD:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_WORD:104 [ mul16s::b#0 ] zp ZP_WORD:102 [ mul16s::a#0 ] zp ZP_WORD:168 [ mul16s::$9 ] zp ZP_WORD:170 [ mul16s::$16 ] zp ZP_WORD:172 [ mul16s::$13 ] zp ZP_WORD:174 [ mul16s::$17 ]
Uplifting [mulf16s] best 540694 combination zp ZP_DWORD:118 [ mulf16s::return#2 ] zp ZP_DWORD:156 [ mulf16s::return#0 ] zp ZP_DWORD:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] zp ZP_WORD:116 [ mulf16s::b#0 ] zp ZP_WORD:114 [ mulf16s::a#0 ] zp ZP_WORD:148 [ mulf16s::$9 ] zp ZP_WORD:150 [ mulf16s::$16 ] zp ZP_WORD:152 [ mulf16s::$13 ] zp ZP_WORD:154 [ mulf16s::$17 ] Uplifting [mulf16s] best 538694 combination zp ZP_DWORD:118 [ mulf16s::return#2 ] zp ZP_DWORD:156 [ mulf16s::return#0 ] zp ZP_DWORD:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] zp ZP_WORD:116 [ mulf16s::b#0 ] zp ZP_WORD:114 [ mulf16s::a#0 ] zp ZP_WORD:148 [ mulf16s::$9 ] zp ZP_WORD:150 [ mulf16s::$16 ] zp ZP_WORD:152 [ mulf16s::$13 ] zp ZP_WORD:154 [ mulf16s::$17 ]
Uplifting [] best 540694 combination zp ZP_WORD:25 [ print_char_cursor#84 print_char_cursor#136 print_char_cursor#132 print_char_cursor#133 print_char_cursor#134 print_char_cursor#148 print_char_cursor#129 print_char_cursor#143 print_char_cursor#218 print_char_cursor#128 print_char_cursor#20 print_char_cursor#177 print_char_cursor#139 print_char_cursor#184 print_char_cursor#1 print_char_cursor#130 ] zp ZP_WORD:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] Uplifting [] best 538694 combination zp ZP_WORD:25 [ print_char_cursor#84 print_char_cursor#136 print_char_cursor#132 print_char_cursor#133 print_char_cursor#134 print_char_cursor#148 print_char_cursor#129 print_char_cursor#143 print_char_cursor#218 print_char_cursor#128 print_char_cursor#20 print_char_cursor#177 print_char_cursor#139 print_char_cursor#184 print_char_cursor#1 print_char_cursor#130 ] zp ZP_WORD:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ]
Uplifting [mulf_init] best 540444 combination zp ZP_WORD:80 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] reg byte x [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_BYTE:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$7 ] reg byte a [ mulf_init::$10 ] reg byte a [ mulf_init::$11 ] zp ZP_WORD:83 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:75 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] zp ZP_BYTE:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_WORD:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#3 ] zp ZP_WORD:77 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Uplifting [mulf_init] best 538444 combination zp ZP_WORD:80 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] reg byte x [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_BYTE:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$7 ] reg byte a [ mulf_init::$10 ] reg byte a [ mulf_init::$11 ] zp ZP_WORD:83 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:75 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] zp ZP_BYTE:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_WORD:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#3 ] zp ZP_WORD:77 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
Limited combination testing to 100 combinations of 1024 possible. Limited combination testing to 100 combinations of 1024 possible.
Uplifting [print_cls] best 540444 combination zp ZP_WORD:88 [ print_cls::sc#2 print_cls::sc#1 ] Uplifting [print_cls] best 538444 combination zp ZP_WORD:88 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_word] best 540444 combination zp ZP_WORD:21 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#11 ] Uplifting [print_word] best 538444 combination zp ZP_WORD:21 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#11 ]
Uplifting [print_sdword] best 540444 combination zp ZP_DWORD:13 [ print_sdword::dw#5 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_sdword::dw#0 ] Uplifting [print_sdword] best 538444 combination zp ZP_DWORD:13 [ print_sdword::dw#5 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_sdword::dw#0 ]
Uplifting [print_dword] best 540444 combination zp ZP_DWORD:17 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] Uplifting [print_dword] best 538444 combination zp ZP_DWORD:17 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ]
Uplifting [print_sword] best 540444 combination zp ZP_WORD:27 [ print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 ] Uplifting [print_sword] best 538444 combination zp ZP_WORD:27 [ print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 ]
Uplifting [print_byte] best 540430 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] Uplifting [print_byte] best 538430 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ]
Uplifting [print_char] best 540415 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplifting [print_char] best 538415 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [mul16u_error] best 540415 combination zp ZP_WORD:209 [ mul16u_error::a#0 ] zp ZP_WORD:211 [ mul16u_error::b#0 ] zp ZP_DWORD:213 [ mul16u_error::ms#0 ] zp ZP_DWORD:217 [ mul16u_error::mn#0 ] zp ZP_DWORD:221 [ mul16u_error::mf#0 ] Uplifting [mul16u_error] best 538415 combination zp ZP_WORD:209 [ mul16u_error::a#0 ] zp ZP_WORD:211 [ mul16u_error::b#0 ] zp ZP_DWORD:213 [ mul16u_error::ms#0 ] zp ZP_DWORD:217 [ mul16u_error::mn#0 ] zp ZP_DWORD:221 [ mul16u_error::mf#0 ]
Uplifting [mul16s_error] best 540415 combination zp ZP_WORD:126 [ mul16s_error::a#0 ] zp ZP_WORD:128 [ mul16s_error::b#0 ] zp ZP_DWORD:130 [ mul16s_error::ms#0 ] zp ZP_DWORD:134 [ mul16s_error::mn#0 ] zp ZP_DWORD:138 [ mul16s_error::mf#0 ] Uplifting [mul16s_error] best 538415 combination zp ZP_WORD:126 [ mul16s_error::a#0 ] zp ZP_WORD:128 [ mul16s_error::b#0 ] zp ZP_DWORD:130 [ mul16s_error::ms#0 ] zp ZP_DWORD:134 [ mul16s_error::mn#0 ] zp ZP_DWORD:138 [ mul16s_error::mf#0 ]
Uplifting [print_ln] best 540415 combination Uplifting [print_ln] best 538415 combination
Uplifting [main] best 540415 combination Uplifting [main] best 538415 combination
Attempting to uplift remaining variables inzp ZP_BYTE:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Uplifting [mulf_init] best 540415 combination zp ZP_BYTE:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] Uplifting [mulf_init] best 538415 combination zp ZP_BYTE:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ]
Uplifting [mul16s_compare] best 540415 combination zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] Uplifting [mul16s_compare] best 538415 combination zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ]
Uplifting [mul16u_compare] best 540415 combination zp ZP_BYTE:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] Uplifting [mul16u_compare] best 538415 combination zp ZP_BYTE:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Uplifting [mulf_init] best 540275 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] Uplifting [mulf_init] best 538275 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#3 ]
Uplifting [mulf_init] best 540275 combination zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#3 ] Uplifting [mulf_init] best 538275 combination zp ZP_BYTE:87 [ mulf_init::dir#2 mulf_init::dir#3 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] ] with [ zp ZP_WORD:90 [ muls16s::a#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] ] with [ zp ZP_WORD:90 [ muls16s::a#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 ] ] with [ zp ZP_WORD:102 [ mul16s::a#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 ] ] with [ zp ZP_WORD:102 [ mul16s::a#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 ] ] with [ zp ZP_WORD:114 [ mulf16s::a#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 ] ] with [ zp ZP_WORD:114 [ mulf16s::a#0 ] ] - score: 1
@ -9198,8 +9197,7 @@ mul16u: {
//SEG378 mul16u::@3 //SEG378 mul16u::@3
b3: b3:
//SEG379 [184] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG379 [184] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG380 [185] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG380 [185] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb
@ -10579,8 +10577,8 @@ Succesful ASM optimization Pass5DoubleJumpElimination
Removing instruction b1: Removing instruction b1:
Succesful ASM optimization Pass5UnusedLabelElimination Succesful ASM optimization Pass5UnusedLabelElimination
Fixing long branch [109] bne b1 to beq Fixing long branch [109] bne b1 to beq
Fixing long branch [828] bne b2 to beq Fixing long branch [827] bne b2 to beq
Fixing long branch [834] bne b1 to beq Fixing long branch [833] bne b1 to beq
FINAL SYMBOL TABLE FINAL SYMBOL TABLE
(label) @1 (label) @1
@ -11057,7 +11055,7 @@ reg byte a [ mulf_init::$11 ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 442228 Score: 440228
//SEG0 File Comments //SEG0 File Comments
// Test the fast multiplication library // Test the fast multiplication library
@ -12055,8 +12053,7 @@ mul16u: {
//SEG378 mul16u::@3 //SEG378 mul16u::@3
b3: b3:
//SEG379 [184] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 //SEG379 [184] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
clc lsr a+1
ror a+1
ror a ror a
//SEG380 [185] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 //SEG380 [185] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1
asl mb asl mb