1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-12-24 20:32:39 +00:00

Improved fragments.

This commit is contained in:
jespergravgaard 2020-09-30 20:16:27 +02:00
parent 295c5d1dbd
commit a6a3aed144
17 changed files with 1238 additions and 1232 deletions

View File

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE 12beec37ea 12beec5182
//KICKC FRAGMENT CACHE 11e0585d5e 11e05876ff
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}

View File

@ -1,67 +1,19 @@
//KICKC FRAGMENT CACHE 12beec37ea 12beec5182
//FRAGMENT _deref_pbuc1=vbuc2
lda #{c2}
sta {c1}
//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2
lda #{c2}
ora {c1}
sta {c1}
//KICKC FRAGMENT CACHE 11e0585d5e 11e05876ff
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}
//FRAGMENT pbuz1=pbuc1
lda #<{c1}
sta {z1}
lda #>{c1}
sta {z1}+1
//FRAGMENT pbuz1_lt_pbuc1_then_la1
lda {z1}+1
cmp #>{c1}
bcc {la1}
bne !+
lda {z1}
cmp #<{c1}
bcc {la1}
!:
//FRAGMENT _deref_pbuc1=_deref_pbuc2
lda {c2}
//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2
lda #{c2}
ora {c1}
sta {c1}
//FRAGMENT _deref_pbuc1=vbuc2
lda #{c2}
sta {c1}
//FRAGMENT vbuz1=_lo_pbuz2
lda {z2}
sta {z1}
//FRAGMENT _deref_pbuz1=vbuz2
lda {z2}
ldy #0
sta ({z1}),y
//FRAGMENT pbuz1=_inc_pbuz1
inw {z1}
//FRAGMENT _deref_pbuz1=vbuc1
lda #{c1}
ldy #0
sta ({z1}),y
//FRAGMENT vbuaa=_lo_pbuz1
lda {z1}
//FRAGMENT vbuxx=_lo_pbuz1
ldx {z1}
//FRAGMENT _deref_pbuz1=vbuaa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuxx
txa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuyy
tya
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuzz
tza
ldy #0
sta ({z1}),y
//FRAGMENT vbuyy=_lo_pbuz1
ldy {z1}
//FRAGMENT vbuzz=_lo_pbuz1
ldz {z1}
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}
//FRAGMENT vbuz1=_inc_vbuz1
inc {z1}
//FRAGMENT vbuz1=vbuz2
@ -88,6 +40,8 @@ dec {z1}
ldy #0
lda ({z2}),y
sta {z1}
//FRAGMENT pbuz1=_inc_pbuz1
inw {z1}
//FRAGMENT vbuz1_neq_0_then_la1
lda {z1}
cmp #0
@ -180,6 +134,10 @@ bne {la1}
lda {z1}
cmp #<{c1}
bne {la1}
//FRAGMENT _deref_pbuz1=vbuc1
lda #{c1}
ldy #0
sta ({z1}),y
//FRAGMENT vbuaa=vbuz1
lda {z1}
//FRAGMENT vbuxx=vbuz1
@ -1290,6 +1248,10 @@ sta {z1}
lda #0
adc {z2}+1
sta {z1}+1
//FRAGMENT _deref_pbuz1=vbuz2
lda {z2}
ldy #0
sta ({z1}),y
//FRAGMENT vbuaa=_deref_pbuc1_plus_1
lda {c1}
inc
@ -1325,6 +1287,18 @@ sta ({z1}),y
txa
ldz {z2}
sta ({z1}),z
//FRAGMENT _deref_pbuz1=vbuxx
txa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuyy
tya
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuzz
tza
ldy #0
sta ({z1}),y
//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy
tya
ldy {z2}
@ -1536,6 +1510,9 @@ tay
tza
sty $ff
ora $ff
//FRAGMENT _deref_pbuc1=_deref_pbuc2
lda {c2}
sta {c1}
//FRAGMENT vduz1=vduc1
lda #<{c1}
sta {z1}

View File

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE 12beec37ea 12beec5182
//KICKC FRAGMENT CACHE 11e0585d5e 11e05876ff
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE 12beec37ea 12beec5182
//KICKC FRAGMENT CACHE 11e0585d5e 11e05876ff
//FRAGMENT vbuz1=_deref_pbuc1
lda {c1}
sta {z1}

View File

@ -1,3 +0,0 @@
tay
txa
sta {c1},y

View File

@ -0,0 +1,3 @@
sta {c1},y
lda #0
sta {c1}+1,y

View File

@ -76,10 +76,10 @@
.label PPU = $2000
// NES CPU and audion processing unit (APU)
.label APU = $4000
.label scroll_y = $a
.label vblank_hit = $b
.label scroll_y = 9
.label vblank_hit = $a
// The random state variable
.label rand_state = 8
.label rand_state = 7
.segment Code
__start: {
// scroll_y = 0
@ -121,24 +121,24 @@ vblank: {
rti
}
main: {
.label __9 = $1a
.label __10 = $1a
.label __11 = $1a
.label __20 = $d
.label __23 = $f
.label __25 = $11
.label __26 = $13
.label __31 = $14
.label __32 = $16
.label __33 = $18
.label __56 = $14
.label i = 2
.label timer_2 = 3
.label h_bar = $c
.label active_balls = 4
.label sprite_idx = 7
.label i_1 = 6
.label timer = 5
.label __9 = $19
.label __10 = $19
.label __11 = $19
.label __12 = $1b
.label __20 = $c
.label __23 = $e
.label __25 = $10
.label __26 = $12
.label __31 = $13
.label __32 = $15
.label __33 = $17
.label __56 = $13
.label timer_2 = 2
.label h_bar = $b
.label active_balls = 3
.label sprite_idx = 6
.label i = 5
.label timer = 4
// asm
cld
ldx #$ff
@ -250,11 +250,10 @@ main: {
sta.z rand_state
lda #>1
sta.z rand_state+1
sta.z i
tax
__b1:
// for (i = 0; i < MAX_BALLS; i++)
lda.z i
cmp #$20
cpx #$20
bcs !__b2+
jmp __b2
!__b2:
@ -306,10 +305,10 @@ main: {
__b5:
lda #0
sta.z sprite_idx
sta.z i_1
sta.z i
__b6:
// for (i = 0; i < active_balls; i++)
lda.z i_1
lda.z i
cmp.z active_balls
bcc __b7
// poke(0x2001) = 0x98
@ -329,7 +328,7 @@ main: {
jmp __b4
__b7:
// balls[i].x_position += balls[i].x_velocity
lda.z i_1
lda.z i
asl
asl
asl
@ -370,7 +369,7 @@ main: {
bcs __b9
!:
// balls[i].x_velocity ^= 0xFFFF
lda.z i_1
lda.z i
asl
asl
asl
@ -383,7 +382,7 @@ main: {
sta balls+4+1,y
__b9:
// balls[i].y_position >> 8
lda.z i_1
lda.z i
asl
asl
asl
@ -414,7 +413,7 @@ main: {
bcs __b10
!:
// balls[i].y_velocity ^= 0xFFFF
lda.z i_1
lda.z i
asl
asl
asl
@ -443,7 +442,7 @@ main: {
sta balls+2+1,y
__b10:
// balls[i].y_position >> 8
lda.z i_1
lda.z i
asl
asl
asl
@ -475,7 +474,7 @@ main: {
// sprite_idx++;
inc.z sprite_idx
// for (i = 0; i < active_balls; i++)
inc.z i_1
inc.z i
jmp __b6
__b25:
stx.z timer
@ -492,7 +491,7 @@ main: {
and #>$3ff
sta.z __10+1
// balls[i].x_velocity = rand() & 0x3FF
lda.z i
txa
asl
asl
asl
@ -507,29 +506,31 @@ main: {
// rand() & 0x0FF
lda #$ff
and.z __11
tax
sta.z __12
// balls[i].y_velocity = rand() & 0x0FF
lda.z i
txa
asl
asl
asl
tay
txa
lda.z __12
sta balls+6,y
lda #0
sta balls+6+1,y
// for (i = 0; i < MAX_BALLS; i++)
inc.z i
inx
jmp __b1
}
// Transfer a number of bytes from the CPU memory to the PPU memory
// - ppuData : Pointer in the PPU memory
// - cpuData : Pointer to the CPU memory (RAM of ROM)
// - size : The number of bytes to transfer
// ppuDataTransfer(void* zp($f) cpuData)
// ppuDataTransfer(void* zp($e) cpuData)
ppuDataTransfer: {
.label ppuDataPrepare1_ppuData = $d
.label cpuSrc = $f
.label i = $11
.label cpuData = $f
.label ppuDataPrepare1_ppuData = $c
.label cpuSrc = $e
.label i = $10
.label cpuData = $e
// >ppuData
lda.z ppuDataPrepare1_ppuData+1
// PPU->PPUADDR = >ppuData
@ -572,11 +573,11 @@ ppuDataTransfer: {
// Fill a number of bytes in the PPU memory
// - ppuData : Pointer in the PPU memory
// - size : The number of bytes to transfer
// ppuDataFill(word zp($f) size)
// ppuDataFill(word zp($e) size)
ppuDataFill: {
.label ppuDataPrepare1_ppuData = $d
.label i = $11
.label size = $f
.label ppuDataPrepare1_ppuData = $c
.label i = $10
.label size = $e
// >ppuData
lda.z ppuDataPrepare1_ppuData+1
// PPU->PPUADDR = >ppuData
@ -620,7 +621,7 @@ rand: {
.label __0 = $1c
.label __1 = $1e
.label __2 = $20
.label return = $1a
.label return = $19
// rand_state << 7
lda.z rand_state+1
lsr

View File

@ -2963,17 +2963,17 @@ main: {
asl
sta.z __38
// [60] *((word*)(const struct $0*) balls + (byte~) main::$38) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z __38
ldx #0
tay
txa
lda #0
ldy.z __38
sta balls,y
lda #0
sta balls+1,y
// [61] *((word*)(const struct $0*) balls+(byte) 2 + (byte~) main::$38) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z __38
ldx #0
tay
txa
lda #0
ldy.z __38
sta balls+2,y
lda #0
sta balls+2+1,y
// [62] phi from main::@16 to main::@5 [phi:main::@16->main::@5]
__b5_from___b16:
// [62] phi (byte) main::timer#15 = (byte) 0 [phi:main::@16->main::@5#0] -- vbuz1=vbuc1
@ -3306,11 +3306,11 @@ main: {
asl
sta.z __36
// [112] *((word*)(const struct $0*) balls+(byte) 6 + (byte~) main::$36) ← (byte~) main::$12 -- pwuc1_derefidx_vbuz1=vbuz2
lda.z __36
ldx.z __12
tay
txa
lda.z __12
ldy.z __36
sta balls+6,y
lda #0
sta balls+6+1,y
// [113] (byte) main::i#2 ← ++ (byte) main::i#14 -- vbuz1=_inc_vbuz1
inc.z i
// [48] phi from main::@23 to main::@1 [phi:main::@23->main::@1]
@ -3823,72 +3823,72 @@ Uplift Scope [$0]
Uplift Scope [vblank]
Uplift Scope [__start]
Uplifting [ppuDataTransfer] best 56820 combination zp[2]:13 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:15 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:9 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:11 [ ppuDataTransfer::cpuData#2 ]
Uplifting [rand] best 56820 combination zp[2]:73 [ rand::$0 ] zp[2]:77 [ rand::$1 ] zp[2]:81 [ rand::$2 ] zp[2]:83 [ rand::return#0 ] zp[2]:55 [ rand::return#2 ] zp[2]:62 [ rand::return#3 ]
Uplifting [] best 56820 combination zp[2]:75 [ rand_state#0 ] zp[2]:79 [ rand_state#1 ] zp[2]:23 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:25 [ scroll_y ] zp[1]:26 [ vblank_hit ]
Uplifting [ppuDataFill] best 56808 combination zp[2]:21 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:19 [ ppuDataFill::size#3 ] zp[2]:17 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ]
Uplifting [RICOH_2C02] best 56808 combination
Uplifting [RICOH_2A03] best 56808 combination
Uplifting [SpriteData] best 56808 combination
Uplifting [RADIX] best 56808 combination
Uplifting [printf_format_number] best 56808 combination
Uplifting [printf_buffer_number] best 56808 combination
Uplifting [printf_format_string] best 56808 combination
Uplifting [$0] best 56808 combination
Uplifting [vblank] best 56808 combination
Uplifting [__start] best 56808 combination
Uplifting [ppuDataTransfer] best 56910 combination zp[2]:13 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:15 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:9 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:11 [ ppuDataTransfer::cpuData#2 ]
Uplifting [rand] best 56910 combination zp[2]:73 [ rand::$0 ] zp[2]:77 [ rand::$1 ] zp[2]:81 [ rand::$2 ] zp[2]:83 [ rand::return#0 ] zp[2]:55 [ rand::return#2 ] zp[2]:62 [ rand::return#3 ]
Uplifting [] best 56910 combination zp[2]:75 [ rand_state#0 ] zp[2]:79 [ rand_state#1 ] zp[2]:23 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:25 [ scroll_y ] zp[1]:26 [ vblank_hit ]
Uplifting [ppuDataFill] best 56898 combination zp[2]:21 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:19 [ ppuDataFill::size#3 ] zp[2]:17 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ]
Uplifting [RICOH_2C02] best 56898 combination
Uplifting [RICOH_2A03] best 56898 combination
Uplifting [SpriteData] best 56898 combination
Uplifting [RADIX] best 56898 combination
Uplifting [printf_format_number] best 56898 combination
Uplifting [printf_buffer_number] best 56898 combination
Uplifting [printf_format_string] best 56898 combination
Uplifting [$0] best 56898 combination
Uplifting [vblank] best 56898 combination
Uplifting [__start] best 56898 combination
Attempting to uplift remaining variables inzp[1]:36 [ main::$45 ]
Uplifting [main] best 56408 combination reg byte a [ main::$45 ]
Uplifting [main] best 56498 combination reg byte a [ main::$45 ]
Attempting to uplift remaining variables inzp[1]:33 [ main::$40 ]
Uplifting [main] best 55108 combination reg byte y [ main::$40 ]
Uplifting [main] best 55198 combination reg byte y [ main::$40 ]
Attempting to uplift remaining variables inzp[1]:7 [ main::i#10 main::i#4 ]
Uplifting [main] best 55108 combination zp[1]:7 [ main::i#10 main::i#4 ]
Uplifting [main] best 55198 combination zp[1]:7 [ main::i#10 main::i#4 ]
Attempting to uplift remaining variables inzp[1]:37 [ main::$44 ]
Uplifting [main] best 54408 combination reg byte y [ main::$44 ]
Uplifting [main] best 54498 combination reg byte y [ main::$44 ]
Attempting to uplift remaining variables inzp[1]:8 [ main::sprite_idx#3 main::sprite_idx#2 ]
Uplifting [main] best 54408 combination zp[1]:8 [ main::sprite_idx#3 main::sprite_idx#2 ]
Uplifting [main] best 54498 combination zp[1]:8 [ main::sprite_idx#3 main::sprite_idx#2 ]
Attempting to uplift remaining variables inzp[1]:42 [ main::$26 ]
Uplifting [main] best 54408 combination zp[1]:42 [ main::$26 ]
Uplifting [main] best 54498 combination zp[1]:42 [ main::$26 ]
Attempting to uplift remaining variables inzp[1]:44 [ main::$30 ]
Uplifting [main] best 53808 combination reg byte a [ main::$30 ]
Uplifting [main] best 53898 combination reg byte a [ main::$30 ]
Attempting to uplift remaining variables inzp[1]:52 [ main::$48 ]
Uplifting [main] best 52508 combination reg byte x [ main::$48 ]
Uplifting [main] best 52598 combination reg byte x [ main::$48 ]
Attempting to uplift remaining variables inzp[1]:43 [ main::$53 ]
Uplifting [main] best 51808 combination reg byte y [ main::$53 ]
Uplifting [main] best 51898 combination reg byte y [ main::$53 ]
Attempting to uplift remaining variables inzp[1]:49 [ main::$50 ]
Uplifting [main] best 51108 combination reg byte y [ main::$50 ]
Uplifting [main] best 51198 combination reg byte y [ main::$50 ]
Attempting to uplift remaining variables inzp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ]
Uplifting [main] best 51108 combination zp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ]
Uplifting [main] best 51198 combination zp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ]
Uplifting [main] best 50778 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ]
Uplifting [main] best 50868 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ]
Attempting to uplift remaining variables inzp[1]:3 [ main::i#14 main::i#2 ]
Uplifting [main] best 50778 combination zp[1]:3 [ main::i#14 main::i#2 ]
Uplifting [main] best 50758 combination reg byte x [ main::i#14 main::i#2 ]
Attempting to uplift remaining variables inzp[1]:4 [ main::timer_2#2 main::timer_2#1 ]
Uplifting [main] best 50778 combination zp[1]:4 [ main::timer_2#2 main::timer_2#1 ]
Uplifting [main] best 50758 combination zp[1]:4 [ main::timer_2#2 main::timer_2#1 ]
Attempting to uplift remaining variables inzp[1]:27 [ main::initNES1_waitForVBlank1_$0 ]
Uplifting [main] best 50718 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ]
Uplifting [main] best 50698 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ]
Attempting to uplift remaining variables inzp[1]:28 [ main::initNES1_waitForVBlank2_$0 ]
Uplifting [main] best 50658 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ]
Uplifting [main] best 50638 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ]
Attempting to uplift remaining variables inzp[1]:30 [ main::$14 ]
Uplifting [main] best 50598 combination reg byte a [ main::$14 ]
Uplifting [main] best 50578 combination reg byte a [ main::$14 ]
Attempting to uplift remaining variables inzp[1]:61 [ main::$35 ]
Uplifting [main] best 50558 combination reg byte a [ main::$35 ]
Uplifting [main] best 50538 combination reg byte a [ main::$35 ]
Attempting to uplift remaining variables inzp[1]:67 [ main::$36 ]
Uplifting [main] best 50498 combination reg byte a [ main::$36 ]
Attempting to uplift remaining variables inzp[1]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ]
Uplifting [main] best 50498 combination zp[1]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ]
Attempting to uplift remaining variables inzp[1]:32 [ main::$38 ]
Uplifting [main] best 50488 combination reg byte x [ main::$38 ]
Uplifting [main] best 50428 combination reg byte x [ main::$38 ]
Attempting to uplift remaining variables inzp[1]:25 [ scroll_y ]
Uplifting [] best 50488 combination zp[1]:25 [ scroll_y ]
Uplifting [] best 50428 combination zp[1]:25 [ scroll_y ]
Attempting to uplift remaining variables inzp[1]:31 [ main::timer#1 ]
Uplifting [main] best 50428 combination reg byte x [ main::timer#1 ]
Uplifting [main] best 50368 combination reg byte x [ main::timer#1 ]
Attempting to uplift remaining variables inzp[1]:66 [ main::$12 ]
Uplifting [main] best 50388 combination reg byte x [ main::$12 ]
Uplifting [main] best 50368 combination zp[1]:66 [ main::$12 ]
Attempting to uplift remaining variables inzp[1]:29 [ main::h_bar#1 ]
Uplifting [main] best 50388 combination zp[1]:29 [ main::h_bar#1 ]
Uplifting [main] best 50368 combination zp[1]:29 [ main::h_bar#1 ]
Attempting to uplift remaining variables inzp[1]:26 [ vblank_hit ]
Uplifting [] best 50388 combination zp[1]:26 [ vblank_hit ]
Uplifting [] best 50368 combination zp[1]:26 [ vblank_hit ]
Coalescing zero page register [ zp[2]:11 [ ppuDataTransfer::cpuData#2 ] ] with [ zp[2]:15 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:23 [ rand_state#10 rand_state#17 rand_state#11 ] ] with [ zp[2]:75 [ rand_state#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:23 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 ] ] with [ zp[2]:79 [ rand_state#1 ] ] - score: 1
@ -3904,24 +3904,24 @@ Coalescing zero page register [ zp[2]:21 [ ppuDataFill::i#2 ppuDataFill::i#1 ] ]
Coalescing zero page register [ zp[2]:34 [ main::$20 ] ] with [ zp[2]:17 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] ]
Coalescing zero page register [ zp[2]:38 [ main::$23 ] ] with [ zp[2]:19 [ ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ]
Coalescing zero page register [ zp[2]:40 [ main::$25 ] ] with [ zp[2]:21 [ ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] ]
Allocated (was zp[1]:3) zp[1]:2 [ main::i#14 main::i#2 ]
Allocated (was zp[1]:4) zp[1]:3 [ main::timer_2#2 main::timer_2#1 ]
Allocated (was zp[1]:5) zp[1]:4 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ]
Allocated (was zp[1]:6) zp[1]:5 [ main::timer#3 main::timer#15 main::timer#21 ]
Allocated (was zp[1]:7) zp[1]:6 [ main::i#10 main::i#4 ]
Allocated (was zp[1]:8) zp[1]:7 [ main::sprite_idx#3 main::sprite_idx#2 ]
Allocated (was zp[2]:23) zp[2]:8 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ]
Allocated (was zp[1]:25) zp[1]:10 [ scroll_y ]
Allocated (was zp[1]:26) zp[1]:11 [ vblank_hit ]
Allocated (was zp[1]:29) zp[1]:12 [ main::h_bar#1 ]
Allocated (was zp[2]:34) zp[2]:13 [ main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ]
Allocated (was zp[2]:38) zp[2]:15 [ main::$23 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ]
Allocated (was zp[2]:40) zp[2]:17 [ main::$25 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
Allocated (was zp[1]:42) zp[1]:19 [ main::$26 ]
Allocated (was zp[2]:45) zp[2]:20 [ main::$56 main::$31 ]
Allocated (was zp[2]:50) zp[2]:22 [ main::$32 ]
Allocated (was zp[2]:53) zp[2]:24 [ main::$33 ]
Allocated (was zp[2]:55) zp[2]:26 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ]
Allocated (was zp[1]:4) zp[1]:2 [ main::timer_2#2 main::timer_2#1 ]
Allocated (was zp[1]:5) zp[1]:3 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ]
Allocated (was zp[1]:6) zp[1]:4 [ main::timer#3 main::timer#15 main::timer#21 ]
Allocated (was zp[1]:7) zp[1]:5 [ main::i#10 main::i#4 ]
Allocated (was zp[1]:8) zp[1]:6 [ main::sprite_idx#3 main::sprite_idx#2 ]
Allocated (was zp[2]:23) zp[2]:7 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ]
Allocated (was zp[1]:25) zp[1]:9 [ scroll_y ]
Allocated (was zp[1]:26) zp[1]:10 [ vblank_hit ]
Allocated (was zp[1]:29) zp[1]:11 [ main::h_bar#1 ]
Allocated (was zp[2]:34) zp[2]:12 [ main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ]
Allocated (was zp[2]:38) zp[2]:14 [ main::$23 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ]
Allocated (was zp[2]:40) zp[2]:16 [ main::$25 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
Allocated (was zp[1]:42) zp[1]:18 [ main::$26 ]
Allocated (was zp[2]:45) zp[2]:19 [ main::$56 main::$31 ]
Allocated (was zp[2]:50) zp[2]:21 [ main::$32 ]
Allocated (was zp[2]:53) zp[2]:23 [ main::$33 ]
Allocated (was zp[2]:55) zp[2]:25 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ]
Allocated (was zp[1]:66) zp[1]:27 [ main::$12 ]
Allocated (was zp[2]:73) zp[2]:28 [ rand::$0 ]
Allocated (was zp[2]:77) zp[2]:30 [ rand::$1 ]
Allocated (was zp[2]:81) zp[2]:32 [ rand::$2 ]
@ -4008,10 +4008,10 @@ ASSEMBLER BEFORE OPTIMIZATION
.label PPU = $2000
// NES CPU and audion processing unit (APU)
.label APU = $4000
.label scroll_y = $a
.label vblank_hit = $b
.label scroll_y = 9
.label vblank_hit = $a
// The random state variable
.label rand_state = 8
.label rand_state = 7
.segment Code
// __start
__start: {
@ -4082,24 +4082,24 @@ vblank: {
}
// main
main: {
.label __9 = $1a
.label __10 = $1a
.label __11 = $1a
.label __20 = $d
.label __23 = $f
.label __25 = $11
.label __26 = $13
.label __31 = $14
.label __32 = $16
.label __33 = $18
.label __56 = $14
.label i = 2
.label timer_2 = 3
.label h_bar = $c
.label active_balls = 4
.label sprite_idx = 7
.label i_1 = 6
.label timer = 5
.label __9 = $19
.label __10 = $19
.label __11 = $19
.label __12 = $1b
.label __20 = $c
.label __23 = $e
.label __25 = $10
.label __26 = $12
.label __31 = $13
.label __32 = $15
.label __33 = $17
.label __56 = $13
.label timer_2 = 2
.label h_bar = $b
.label active_balls = 3
.label sprite_idx = 6
.label i = 5
.label timer = 4
jmp initNES1
// main::initNES1
initNES1:
@ -4304,15 +4304,13 @@ main: {
sta.z rand_state
lda #>1
sta.z rand_state+1
// [48] phi (byte) main::i#14 = (byte) 0 [phi:main::@18->main::@1#1] -- vbuz1=vbuc1
lda #0
sta.z i
// [48] phi (byte) main::i#14 = (byte) 0 [phi:main::@18->main::@1#1] -- vbuxx=vbuc1
ldx #0
jmp __b1
// main::@1
__b1:
// [49] if((byte) main::i#14<(byte) $20) goto main::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #$20
// [49] if((byte) main::i#14<(byte) $20) goto main::@2 -- vbuxx_lt_vbuc1_then_la1
cpx #$20
bcc __b2_from___b1
// [50] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
__b3_from___b1:
@ -4401,12 +4399,12 @@ main: {
sta.z sprite_idx
// [63] phi (byte) main::i#10 = (byte) 0 [phi:main::@5->main::@6#1] -- vbuz1=vbuc1
lda #0
sta.z i_1
sta.z i
jmp __b6
// main::@6
__b6:
// [64] if((byte) main::i#10<(byte) main::active_balls#8) goto main::@7 -- vbuz1_lt_vbuz2_then_la1
lda.z i_1
lda.z i
cmp.z active_balls
bcc __b7
jmp __b8
@ -4441,7 +4439,7 @@ main: {
// main::@7
__b7:
// [69] (byte~) main::$40 ← (byte) main::i#10 << (byte) 3 -- vbuyy=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -4486,7 +4484,7 @@ main: {
// main::@11
__b11:
// [75] (byte~) main::$45 ← (byte) main::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -4502,7 +4500,7 @@ main: {
// main::@9
__b9:
// [77] (byte~) main::$44 ← (byte) main::i#10 << (byte) 3 -- vbuyy=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -4542,7 +4540,7 @@ main: {
// main::@12
__b12:
// [83] (byte~) main::$53 ← (byte) main::i#10 << (byte) 3 -- vbuyy=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -4576,7 +4574,7 @@ main: {
// main::@10
__b10:
// [89] (byte~) main::$50 ← (byte) main::i#10 << (byte) 3 -- vbuyy=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -4611,7 +4609,7 @@ main: {
// [97] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1
inc.z sprite_idx
// [98] (byte) main::i#4 ← ++ (byte) main::i#10 -- vbuz1=_inc_vbuz1
inc.z i_1
inc.z i
// [63] phi from main::@10 to main::@6 [phi:main::@10->main::@6]
__b6_from___b10:
// [63] phi (byte) main::sprite_idx#3 = (byte) main::sprite_idx#2 [phi:main::@10->main::@6#0] -- register_copy
@ -4644,8 +4642,8 @@ main: {
lda.z __10+1
and #>$3ff
sta.z __10+1
// [105] (byte~) main::$35 ← (byte) main::i#14 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
// [105] (byte~) main::$35 ← (byte) main::i#14 << (byte) 3 -- vbuaa=vbuxx_rol_3
txa
asl
asl
asl
@ -4665,21 +4663,23 @@ main: {
// main::@23
__b23:
// [109] (word~) main::$11 ← (word) rand::return#3
// [110] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuxx=vwuz1_band_vbuc1
// [110] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuz1=vwuz2_band_vbuc1
lda #$ff
and.z __11
tax
// [111] (byte~) main::$36 ← (byte) main::i#14 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [112] *((word*)(const struct $0*) balls+(byte) 6 + (byte~) main::$36) ← (byte~) main::$12 -- pwuc1_derefidx_vbuaa=vbuxx
tay
sta.z __12
// [111] (byte~) main::$36 ← (byte) main::i#14 << (byte) 3 -- vbuaa=vbuxx_rol_3
txa
asl
asl
asl
// [112] *((word*)(const struct $0*) balls+(byte) 6 + (byte~) main::$36) ← (byte~) main::$12 -- pwuc1_derefidx_vbuaa=vbuz1
tay
lda.z __12
sta balls+6,y
// [113] (byte) main::i#2 ← ++ (byte) main::i#14 -- vbuz1=_inc_vbuz1
inc.z i
lda #0
sta balls+6+1,y
// [113] (byte) main::i#2 ← ++ (byte) main::i#14 -- vbuxx=_inc_vbuxx
inx
// [48] phi from main::@23 to main::@1 [phi:main::@23->main::@1]
__b1_from___b23:
// [48] phi (word) rand_state#17 = (word) rand_state#11 [phi:main::@23->main::@1#0] -- register_copy
@ -4691,12 +4691,12 @@ main: {
// - ppuData : Pointer in the PPU memory
// - cpuData : Pointer to the CPU memory (RAM of ROM)
// - size : The number of bytes to transfer
// ppuDataTransfer(void* zp($f) cpuData)
// ppuDataTransfer(void* zp($e) cpuData)
ppuDataTransfer: {
.label ppuDataPrepare1_ppuData = $d
.label cpuSrc = $f
.label i = $11
.label cpuData = $f
.label ppuDataPrepare1_ppuData = $c
.label cpuSrc = $e
.label i = $10
.label cpuData = $e
jmp ppuDataPrepare1
// ppuDataTransfer::ppuDataPrepare1
ppuDataPrepare1:
@ -4768,11 +4768,11 @@ ppuDataTransfer: {
// Fill a number of bytes in the PPU memory
// - ppuData : Pointer in the PPU memory
// - size : The number of bytes to transfer
// ppuDataFill(word zp($f) size)
// ppuDataFill(word zp($e) size)
ppuDataFill: {
.label ppuDataPrepare1_ppuData = $d
.label i = $11
.label size = $f
.label ppuDataPrepare1_ppuData = $c
.label i = $10
.label size = $e
jmp ppuDataPrepare1
// ppuDataFill::ppuDataPrepare1
ppuDataPrepare1:
@ -4836,7 +4836,7 @@ rand: {
.label __0 = $1c
.label __1 = $1e
.label __2 = $20
.label return = $1a
.label return = $19
// [138] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7
lda.z rand_state+1
lsr
@ -4970,7 +4970,7 @@ Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction ldx #0 with TAX
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
@ -5066,8 +5066,8 @@ Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Fixing long branch [221] bcc __b2 to bcs
Fixing long branch [245] bne __b25 to beq
Fixing long branch [220] bcc __b2 to bcs
Fixing long branch [244] bne __b25 to beq
FINAL SYMBOL TABLE
(word) $0::x_position
@ -5145,18 +5145,18 @@ FINAL SYMBOL TABLE
(const struct $0*) balls[(number) $40] = { fill( $40, 0) }
(const to_nomodify byte*) h_bar_tilemap[] = { (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1 }
(signed word()) main()
(word~) main::$10 zp[2]:26 101.0
(word~) main::$11 zp[2]:26 202.0
(byte~) main::$12 reg byte x 101.0
(word~) main::$10 zp[2]:25 101.0
(word~) main::$11 zp[2]:25 202.0
(byte~) main::$12 zp[1]:27 101.0
(byte~) main::$14 reg byte a 202.0
(word~) main::$20 zp[2]:13 2002.0
(word~) main::$23 zp[2]:15 667.3333333333334
(word~) main::$25 zp[2]:17 667.3333333333334
(byte~) main::$26 zp[1]:19 1001.0
(word~) main::$20 zp[2]:12 2002.0
(word~) main::$23 zp[2]:14 667.3333333333334
(word~) main::$25 zp[2]:16 667.3333333333334
(byte~) main::$26 zp[1]:18 1001.0
(byte~) main::$30 reg byte a 1001.0
(word~) main::$31 zp[2]:20 2002.0
(word~) main::$32 zp[2]:22 500.5
(word~) main::$33 zp[2]:24 1001.0
(word~) main::$31 zp[2]:19 2002.0
(word~) main::$32 zp[2]:21 500.5
(word~) main::$33 zp[2]:23 1001.0
(byte~) main::$35 reg byte a 202.0
(byte~) main::$36 reg byte a 202.0
(byte~) main::$38 reg byte x 151.5
@ -5166,8 +5166,8 @@ FINAL SYMBOL TABLE
(byte~) main::$48 reg byte x 1001.0
(byte~) main::$50 reg byte y 500.5
(byte~) main::$53 reg byte y 800.8
(word~) main::$56 zp[2]:20 2002.0
(word~) main::$9 zp[2]:26 202.0
(word~) main::$56 zp[2]:19 2002.0
(word~) main::$9 zp[2]:25 202.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -5194,17 +5194,17 @@ FINAL SYMBOL TABLE
(label) main::@8
(label) main::@9
(byte) main::active_balls
(byte) main::active_balls#1 active_balls zp[1]:4 75.75
(byte) main::active_balls#2 active_balls zp[1]:4 56.11111111111111
(byte) main::active_balls#8 active_balls zp[1]:4 37.97297297297297
(byte) main::active_balls#1 active_balls zp[1]:3 75.75
(byte) main::active_balls#2 active_balls zp[1]:3 56.11111111111111
(byte) main::active_balls#8 active_balls zp[1]:3 37.97297297297297
(label) main::enableVideoOutput1
(byte) main::h_bar
(byte) main::h_bar#1 h_bar zp[1]:12 72.8409090909091
(byte) main::h_bar#1 h_bar zp[1]:11 72.8409090909091
(byte) main::i
(byte) main::i#10 i_1 zp[1]:6 258.3225806451613
(byte) main::i#14 i zp[1]:2 33.666666666666664
(byte) main::i#2 i zp[1]:2 202.0
(byte) main::i#4 i_1 zp[1]:6 2002.0
(byte) main::i#10 i zp[1]:5 258.3225806451613
(byte) main::i#14 reg byte x 33.666666666666664
(byte) main::i#2 reg byte x 202.0
(byte) main::i#4 i zp[1]:5 2002.0
(label) main::initNES1
(label) main::initNES1_@1
(label) main::initNES1_@7
@ -5222,34 +5222,34 @@ FINAL SYMBOL TABLE
(label) main::initNES1_waitForVBlank2_@1
(signed word) main::return
(byte) main::sprite_idx
(byte) main::sprite_idx#2 sprite_idx zp[1]:7 1001.0
(byte) main::sprite_idx#3 sprite_idx zp[1]:7 100.1
(byte) main::sprite_idx#2 sprite_idx zp[1]:6 1001.0
(byte) main::sprite_idx#3 sprite_idx zp[1]:6 100.1
(byte) main::timer
(byte) main::timer#1 reg byte x 101.0
(byte) main::timer#15 timer zp[1]:5 8.18918918918919
(byte) main::timer#21 timer zp[1]:5 202.0
(byte) main::timer#3 timer zp[1]:5 57.714285714285715
(byte) main::timer#15 timer zp[1]:4 8.18918918918919
(byte) main::timer#21 timer zp[1]:4 202.0
(byte) main::timer#3 timer zp[1]:4 57.714285714285715
(byte) main::timer_2
(byte) main::timer_2#1 timer_2 zp[1]:3 6.183673469387754
(byte) main::timer_2#2 timer_2 zp[1]:3 202.0
(byte) main::timer_2#1 timer_2 zp[1]:2 6.183673469387754
(byte) main::timer_2#2 timer_2 zp[1]:2 202.0
(const to_nomodify byte*) palette[] = { (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4 }
(void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size)
(label) ppuDataFill::@1
(label) ppuDataFill::@2
(label) ppuDataFill::@return
(word) ppuDataFill::i
(word) ppuDataFill::i#1 i zp[2]:17 2002.0
(word) ppuDataFill::i#2 i zp[2]:17 1001.0
(word) ppuDataFill::i#1 i zp[2]:16 2002.0
(word) ppuDataFill::i#2 i zp[2]:16 1001.0
(nomodify void*) ppuDataFill::ppuData
(label) ppuDataFill::ppuDataPrepare1
(byte~) ppuDataFill::ppuDataPrepare1_$0 reg byte a 202.0
(byte~) ppuDataFill::ppuDataPrepare1_$1 reg byte a 202.0
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:13 67.33333333333333
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:12 67.33333333333333
(label) ppuDataFill::ppuDataPut1
(byte) ppuDataFill::ppuDataPut1_val
(word) ppuDataFill::size
(word) ppuDataFill::size#3 size zp[2]:15 111.22222222222223
(word) ppuDataFill::size#3 size zp[2]:14 111.22222222222223
(byte) ppuDataFill::val
(void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size)
(label) ppuDataTransfer::@1
@ -5258,20 +5258,20 @@ FINAL SYMBOL TABLE
(label) ppuDataTransfer::@4
(label) ppuDataTransfer::@return
(nomodify void*) ppuDataTransfer::cpuData
(nomodify void*) ppuDataTransfer::cpuData#2 cpuData zp[2]:15
(nomodify void*) ppuDataTransfer::cpuData#2 cpuData zp[2]:14
(byte*) ppuDataTransfer::cpuSrc
(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:15 1001.0
(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:15 776.0
(byte*) ppuDataTransfer::cpuSrc#6 cpuSrc zp[2]:15 202.0
(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:14 1001.0
(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:14 776.0
(byte*) ppuDataTransfer::cpuSrc#6 cpuSrc zp[2]:14 202.0
(word) ppuDataTransfer::i
(word) ppuDataTransfer::i#1 i zp[2]:17 2002.0
(word) ppuDataTransfer::i#2 i zp[2]:17 600.5999999999999
(word) ppuDataTransfer::i#1 i zp[2]:16 2002.0
(word) ppuDataTransfer::i#2 i zp[2]:16 600.5999999999999
(nomodify void*) ppuDataTransfer::ppuData
(label) ppuDataTransfer::ppuDataPrepare1
(byte~) ppuDataTransfer::ppuDataPrepare1_$0 reg byte a 202.0
(byte~) ppuDataTransfer::ppuDataPrepare1_$1 reg byte a 202.0
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:13 67.33333333333333
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:12 67.33333333333333
(label) ppuDataTransfer::ppuDataPut1
(byte) ppuDataTransfer::ppuDataPut1_val
(byte) ppuDataTransfer::ppuDataPut1_val#0 reg byte a 2002.0
@ -5292,57 +5292,57 @@ FINAL SYMBOL TABLE
(word~) rand::$2 zp[2]:32 2002.0
(label) rand::@return
(word) rand::return
(word) rand::return#0 return zp[2]:26 300.75
(word) rand::return#2 return zp[2]:26 202.0
(word) rand::return#3 return zp[2]:26 202.0
(word) rand::return#0 return zp[2]:25 300.75
(word) rand::return#2 return zp[2]:25 202.0
(word) rand::return#3 return zp[2]:25 202.0
(word) rand_state
(word) rand_state#0 rand_state zp[2]:8 1501.5
(word) rand_state#1 rand_state zp[2]:8 1501.5
(word) rand_state#10 rand_state zp[2]:8 1102.0
(word) rand_state#11 rand_state zp[2]:8 137.75
(word) rand_state#17 rand_state zp[2]:8 67.33333333333333
(volatile byte) scroll_y loadstore zp[1]:10 105.0
(word) rand_state#0 rand_state zp[2]:7 1501.5
(word) rand_state#1 rand_state zp[2]:7 1501.5
(word) rand_state#10 rand_state zp[2]:7 1102.0
(word) rand_state#11 rand_state zp[2]:7 137.75
(word) rand_state#17 rand_state zp[2]:7 67.33333333333333
(volatile byte) scroll_y loadstore zp[1]:9 105.0
(const to_nomodify byte*) sine_table[(number) $100] = { (byte) $40, (byte) $42, (byte) $43, (byte) $45, (byte) $46, (byte) $48, (byte) $49, (byte) $4b, (byte) $4c, (byte) $4e, (byte) $50, (byte) $51, (byte) $53, (byte) $54, (byte) $56, (byte) $57, (byte) $58, (byte) $5a, (byte) $5b, (byte) $5d, (byte) $5e, (byte) $60, (byte) $61, (byte) $62, (byte) $64, (byte) $65, (byte) $66, (byte) $67, (byte) $69, (byte) $6a, (byte) $6b, (byte) $6c, (byte) $6d, (byte) $6e, (byte) $6f, (byte) $70, (byte) $71, (byte) $72, (byte) $73, (byte) $74, (byte) $75, (byte) $76, (byte) $77, (byte) $78, (byte) $78, (byte) $79, (byte) $7a, (byte) $7b, (byte) $7b, (byte) $7c, (byte) $7c, (byte) $7d, (byte) $7d, (byte) $7e, (byte) $7e, (byte) $7e, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $7e, (byte) $7e, (byte) $7e, (byte) $7d, (byte) $7d, (byte) $7c, (byte) $7c, (byte) $7b, (byte) $7b, (byte) $7a, (byte) $79, (byte) $78, (byte) $78, (byte) $77, (byte) $76, (byte) $75, (byte) $74, (byte) $73, (byte) $72, (byte) $71, (byte) $70, (byte) $6f, (byte) $6e, (byte) $6d, (byte) $6c, (byte) $6b, (byte) $6a, (byte) $69, (byte) $67, (byte) $66, (byte) $65, (byte) $64, (byte) $62, (byte) $61, (byte) $60, (byte) $5e, (byte) $5d, (byte) $5b, (byte) $5a, (byte) $58, (byte) $57, (byte) $56, (byte) $54, (byte) $53, (byte) $51, (byte) $50, (byte) $4e, (byte) $4c, (byte) $4b, (byte) $49, (byte) $48, (byte) $46, (byte) $45, (byte) $43, (byte) $42, (byte) $40, (byte) $3e, (byte) $3d, (byte) $3b, (byte) $3a, (byte) $38, (byte) $37, (byte) $35, (byte) $34, (byte) $32, (byte) $30, (byte) $2f, (byte) $2d, (byte) $2c, (byte) $2a, (byte) $29, (byte) $28, (byte) $26, (byte) $25, (byte) $23, (byte) $22, (byte) $20, (byte) $1f, (byte) $1e, (byte) $1c, (byte) $1b, (byte) $1a, (byte) $19, (byte) $17, (byte) $16, (byte) $15, (byte) $14, (byte) $13, (byte) $12, (byte) $11, (byte) $10, (byte) $f, (byte) $e, (byte) $d, (byte) $c, (byte) $b, (byte) $a, (byte) 9, (byte) 8, (byte) 8, (byte) 7, (byte) 6, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 2, (byte) 2, (byte) 3, (byte) 3, (byte) 4, (byte) 4, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 8, (byte) 8, (byte) 9, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $e, (byte) $f, (byte) $10, (byte) $11, (byte) $12, (byte) $13, (byte) $14, (byte) $15, (byte) $16, (byte) $17, (byte) $19, (byte) $1a, (byte) $1b, (byte) $1c, (byte) $1e, (byte) $1f, (byte) $20, (byte) $22, (byte) $23, (byte) $25, (byte) $26, (byte) $28, (byte) $29, (byte) $2a, (byte) $2c, (byte) $2d, (byte) $2f, (byte) $30, (byte) $32, (byte) $34, (byte) $35, (byte) $37, (byte) $38, (byte) $3a, (byte) $3b, (byte) $3d, (byte) $3e }
interrupt(HARDWARE_STACK)(void()) vblank()
(label) vblank::@1
(label) vblank::@return
(label) vblank::ppuSpriteBufferDmaTransfer1
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer
(volatile byte) vblank_hit loadstore zp[1]:11 10.25925925925926
(volatile byte) vblank_hit loadstore zp[1]:10 10.25925925925926
reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ]
zp[1]:2 [ main::i#14 main::i#2 ]
zp[1]:3 [ main::timer_2#2 main::timer_2#1 ]
zp[1]:4 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ]
zp[1]:5 [ main::timer#3 main::timer#15 main::timer#21 ]
zp[1]:6 [ main::i#10 main::i#4 ]
zp[1]:7 [ main::sprite_idx#3 main::sprite_idx#2 ]
zp[2]:8 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ]
zp[1]:10 [ scroll_y ]
zp[1]:11 [ vblank_hit ]
reg byte x [ main::i#14 main::i#2 ]
zp[1]:2 [ main::timer_2#2 main::timer_2#1 ]
zp[1]:3 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ]
zp[1]:4 [ main::timer#3 main::timer#15 main::timer#21 ]
zp[1]:5 [ main::i#10 main::i#4 ]
zp[1]:6 [ main::sprite_idx#3 main::sprite_idx#2 ]
zp[2]:7 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ]
zp[1]:9 [ scroll_y ]
zp[1]:10 [ vblank_hit ]
reg byte a [ main::initNES1_waitForVBlank1_$0 ]
reg byte a [ main::initNES1_waitForVBlank2_$0 ]
zp[1]:12 [ main::h_bar#1 ]
zp[1]:11 [ main::h_bar#1 ]
reg byte a [ main::$14 ]
reg byte x [ main::timer#1 ]
reg byte x [ main::$38 ]
reg byte y [ main::$40 ]
zp[2]:13 [ main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ]
zp[2]:12 [ main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ]
reg byte a [ main::$45 ]
reg byte y [ main::$44 ]
zp[2]:15 [ main::$23 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ]
zp[2]:17 [ main::$25 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
zp[1]:19 [ main::$26 ]
zp[2]:14 [ main::$23 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ]
zp[2]:16 [ main::$25 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
zp[1]:18 [ main::$26 ]
reg byte y [ main::$53 ]
reg byte a [ main::$30 ]
zp[2]:20 [ main::$56 main::$31 ]
zp[2]:19 [ main::$56 main::$31 ]
reg byte y [ main::$50 ]
zp[2]:22 [ main::$32 ]
zp[2]:21 [ main::$32 ]
reg byte x [ main::$48 ]
zp[2]:24 [ main::$33 ]
zp[2]:26 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ]
zp[2]:23 [ main::$33 ]
zp[2]:25 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ]
reg byte a [ main::$35 ]
reg byte x [ main::$12 ]
zp[1]:27 [ main::$12 ]
reg byte a [ main::$36 ]
reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ]
reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ]
@ -5438,10 +5438,10 @@ Score: 45543
.label PPU = $2000
// NES CPU and audion processing unit (APU)
.label APU = $4000
.label scroll_y = $a
.label vblank_hit = $b
.label scroll_y = 9
.label vblank_hit = $a
// The random state variable
.label rand_state = 8
.label rand_state = 7
.segment Code
// __start
__start: {
@ -5505,24 +5505,24 @@ vblank: {
}
// main
main: {
.label __9 = $1a
.label __10 = $1a
.label __11 = $1a
.label __20 = $d
.label __23 = $f
.label __25 = $11
.label __26 = $13
.label __31 = $14
.label __32 = $16
.label __33 = $18
.label __56 = $14
.label i = 2
.label timer_2 = 3
.label h_bar = $c
.label active_balls = 4
.label sprite_idx = 7
.label i_1 = 6
.label timer = 5
.label __9 = $19
.label __10 = $19
.label __11 = $19
.label __12 = $1b
.label __20 = $c
.label __23 = $e
.label __25 = $10
.label __26 = $12
.label __31 = $13
.label __32 = $15
.label __33 = $17
.label __56 = $13
.label timer_2 = 2
.label h_bar = $b
.label active_balls = 3
.label sprite_idx = 6
.label i = 5
.label timer = 4
// main::initNES1
// asm
// asm { cld ldx#$ff txs }
@ -5702,14 +5702,13 @@ main: {
sta.z rand_state
lda #>1
sta.z rand_state+1
// [48] phi (byte) main::i#14 = (byte) 0 [phi:main::@18->main::@1#1] -- vbuz1=vbuc1
sta.z i
// [48] phi (byte) main::i#14 = (byte) 0 [phi:main::@18->main::@1#1] -- vbuxx=vbuc1
tax
// main::@1
__b1:
// for (i = 0; i < MAX_BALLS; i++)
// [49] if((byte) main::i#14<(byte) $20) goto main::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #$20
// [49] if((byte) main::i#14<(byte) $20) goto main::@2 -- vbuxx_lt_vbuc1_then_la1
cpx #$20
bcs !__b2+
jmp __b2
!__b2:
@ -5790,12 +5789,12 @@ main: {
lda #0
sta.z sprite_idx
// [63] phi (byte) main::i#10 = (byte) 0 [phi:main::@5->main::@6#1] -- vbuz1=vbuc1
sta.z i_1
sta.z i
// main::@6
__b6:
// for (i = 0; i < active_balls; i++)
// [64] if((byte) main::i#10<(byte) main::active_balls#8) goto main::@7 -- vbuz1_lt_vbuz2_then_la1
lda.z i_1
lda.z i
cmp.z active_balls
bcc __b7
// main::@8
@ -5828,7 +5827,7 @@ main: {
__b7:
// balls[i].x_position += balls[i].x_velocity
// [69] (byte~) main::$40 ← (byte) main::i#10 << (byte) 3 -- vbuyy=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -5876,7 +5875,7 @@ main: {
// main::@11
// balls[i].x_velocity ^= 0xFFFF
// [75] (byte~) main::$45 ← (byte) main::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -5892,7 +5891,7 @@ main: {
__b9:
// balls[i].y_position >> 8
// [77] (byte~) main::$44 ← (byte) main::i#10 << (byte) 3 -- vbuyy=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -5931,7 +5930,7 @@ main: {
// main::@12
// balls[i].y_velocity ^= 0xFFFF
// [83] (byte~) main::$53 ← (byte) main::i#10 << (byte) 3 -- vbuyy=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -5967,7 +5966,7 @@ main: {
__b10:
// balls[i].y_position >> 8
// [89] (byte~) main::$50 ← (byte) main::i#10 << (byte) 3 -- vbuyy=vbuz1_rol_3
lda.z i_1
lda.z i
asl
asl
asl
@ -6008,7 +6007,7 @@ main: {
inc.z sprite_idx
// for (i = 0; i < active_balls; i++)
// [98] (byte) main::i#4 ← ++ (byte) main::i#10 -- vbuz1=_inc_vbuz1
inc.z i_1
inc.z i
// [63] phi from main::@10 to main::@6 [phi:main::@10->main::@6]
// [63] phi (byte) main::sprite_idx#3 = (byte) main::sprite_idx#2 [phi:main::@10->main::@6#0] -- register_copy
// [63] phi (byte) main::i#10 = (byte) main::i#4 [phi:main::@10->main::@6#1] -- register_copy
@ -6039,8 +6038,8 @@ main: {
and #>$3ff
sta.z __10+1
// balls[i].x_velocity = rand() & 0x3FF
// [105] (byte~) main::$35 ← (byte) main::i#14 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
// [105] (byte~) main::$35 ← (byte) main::i#14 << (byte) 3 -- vbuaa=vbuxx_rol_3
txa
asl
asl
asl
@ -6060,23 +6059,25 @@ main: {
// main::@23
// [109] (word~) main::$11 ← (word) rand::return#3
// rand() & 0x0FF
// [110] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuxx=vwuz1_band_vbuc1
// [110] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuz1=vwuz2_band_vbuc1
lda #$ff
and.z __11
tax
sta.z __12
// balls[i].y_velocity = rand() & 0x0FF
// [111] (byte~) main::$36 ← (byte) main::i#14 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [112] *((word*)(const struct $0*) balls+(byte) 6 + (byte~) main::$36) ← (byte~) main::$12 -- pwuc1_derefidx_vbuaa=vbuxx
tay
// [111] (byte~) main::$36 ← (byte) main::i#14 << (byte) 3 -- vbuaa=vbuxx_rol_3
txa
asl
asl
asl
// [112] *((word*)(const struct $0*) balls+(byte) 6 + (byte~) main::$36) ← (byte~) main::$12 -- pwuc1_derefidx_vbuaa=vbuz1
tay
lda.z __12
sta balls+6,y
lda #0
sta balls+6+1,y
// for (i = 0; i < MAX_BALLS; i++)
// [113] (byte) main::i#2 ← ++ (byte) main::i#14 -- vbuz1=_inc_vbuz1
inc.z i
// [113] (byte) main::i#2 ← ++ (byte) main::i#14 -- vbuxx=_inc_vbuxx
inx
// [48] phi from main::@23 to main::@1 [phi:main::@23->main::@1]
// [48] phi (word) rand_state#17 = (word) rand_state#11 [phi:main::@23->main::@1#0] -- register_copy
// [48] phi (byte) main::i#14 = (byte) main::i#2 [phi:main::@23->main::@1#1] -- register_copy
@ -6087,12 +6088,12 @@ main: {
// - ppuData : Pointer in the PPU memory
// - cpuData : Pointer to the CPU memory (RAM of ROM)
// - size : The number of bytes to transfer
// ppuDataTransfer(void* zp($f) cpuData)
// ppuDataTransfer(void* zp($e) cpuData)
ppuDataTransfer: {
.label ppuDataPrepare1_ppuData = $d
.label cpuSrc = $f
.label i = $11
.label cpuData = $f
.label ppuDataPrepare1_ppuData = $c
.label cpuSrc = $e
.label i = $10
.label cpuData = $e
// ppuDataTransfer::ppuDataPrepare1
// >ppuData
// [115] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1
@ -6160,11 +6161,11 @@ ppuDataTransfer: {
// Fill a number of bytes in the PPU memory
// - ppuData : Pointer in the PPU memory
// - size : The number of bytes to transfer
// ppuDataFill(word zp($f) size)
// ppuDataFill(word zp($e) size)
ppuDataFill: {
.label ppuDataPrepare1_ppuData = $d
.label i = $11
.label size = $f
.label ppuDataPrepare1_ppuData = $c
.label i = $10
.label size = $e
// ppuDataFill::ppuDataPrepare1
// >ppuData
// [128] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1
@ -6226,7 +6227,7 @@ rand: {
.label __0 = $1c
.label __1 = $1e
.label __2 = $20
.label return = $1a
.label return = $19
// rand_state << 7
// [138] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7
lda.z rand_state+1

View File

@ -73,18 +73,18 @@
(const struct $0*) balls[(number) $40] = { fill( $40, 0) }
(const to_nomodify byte*) h_bar_tilemap[] = { (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1 }
(signed word()) main()
(word~) main::$10 zp[2]:26 101.0
(word~) main::$11 zp[2]:26 202.0
(byte~) main::$12 reg byte x 101.0
(word~) main::$10 zp[2]:25 101.0
(word~) main::$11 zp[2]:25 202.0
(byte~) main::$12 zp[1]:27 101.0
(byte~) main::$14 reg byte a 202.0
(word~) main::$20 zp[2]:13 2002.0
(word~) main::$23 zp[2]:15 667.3333333333334
(word~) main::$25 zp[2]:17 667.3333333333334
(byte~) main::$26 zp[1]:19 1001.0
(word~) main::$20 zp[2]:12 2002.0
(word~) main::$23 zp[2]:14 667.3333333333334
(word~) main::$25 zp[2]:16 667.3333333333334
(byte~) main::$26 zp[1]:18 1001.0
(byte~) main::$30 reg byte a 1001.0
(word~) main::$31 zp[2]:20 2002.0
(word~) main::$32 zp[2]:22 500.5
(word~) main::$33 zp[2]:24 1001.0
(word~) main::$31 zp[2]:19 2002.0
(word~) main::$32 zp[2]:21 500.5
(word~) main::$33 zp[2]:23 1001.0
(byte~) main::$35 reg byte a 202.0
(byte~) main::$36 reg byte a 202.0
(byte~) main::$38 reg byte x 151.5
@ -94,8 +94,8 @@
(byte~) main::$48 reg byte x 1001.0
(byte~) main::$50 reg byte y 500.5
(byte~) main::$53 reg byte y 800.8
(word~) main::$56 zp[2]:20 2002.0
(word~) main::$9 zp[2]:26 202.0
(word~) main::$56 zp[2]:19 2002.0
(word~) main::$9 zp[2]:25 202.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -122,17 +122,17 @@
(label) main::@8
(label) main::@9
(byte) main::active_balls
(byte) main::active_balls#1 active_balls zp[1]:4 75.75
(byte) main::active_balls#2 active_balls zp[1]:4 56.11111111111111
(byte) main::active_balls#8 active_balls zp[1]:4 37.97297297297297
(byte) main::active_balls#1 active_balls zp[1]:3 75.75
(byte) main::active_balls#2 active_balls zp[1]:3 56.11111111111111
(byte) main::active_balls#8 active_balls zp[1]:3 37.97297297297297
(label) main::enableVideoOutput1
(byte) main::h_bar
(byte) main::h_bar#1 h_bar zp[1]:12 72.8409090909091
(byte) main::h_bar#1 h_bar zp[1]:11 72.8409090909091
(byte) main::i
(byte) main::i#10 i_1 zp[1]:6 258.3225806451613
(byte) main::i#14 i zp[1]:2 33.666666666666664
(byte) main::i#2 i zp[1]:2 202.0
(byte) main::i#4 i_1 zp[1]:6 2002.0
(byte) main::i#10 i zp[1]:5 258.3225806451613
(byte) main::i#14 reg byte x 33.666666666666664
(byte) main::i#2 reg byte x 202.0
(byte) main::i#4 i zp[1]:5 2002.0
(label) main::initNES1
(label) main::initNES1_@1
(label) main::initNES1_@7
@ -150,34 +150,34 @@
(label) main::initNES1_waitForVBlank2_@1
(signed word) main::return
(byte) main::sprite_idx
(byte) main::sprite_idx#2 sprite_idx zp[1]:7 1001.0
(byte) main::sprite_idx#3 sprite_idx zp[1]:7 100.1
(byte) main::sprite_idx#2 sprite_idx zp[1]:6 1001.0
(byte) main::sprite_idx#3 sprite_idx zp[1]:6 100.1
(byte) main::timer
(byte) main::timer#1 reg byte x 101.0
(byte) main::timer#15 timer zp[1]:5 8.18918918918919
(byte) main::timer#21 timer zp[1]:5 202.0
(byte) main::timer#3 timer zp[1]:5 57.714285714285715
(byte) main::timer#15 timer zp[1]:4 8.18918918918919
(byte) main::timer#21 timer zp[1]:4 202.0
(byte) main::timer#3 timer zp[1]:4 57.714285714285715
(byte) main::timer_2
(byte) main::timer_2#1 timer_2 zp[1]:3 6.183673469387754
(byte) main::timer_2#2 timer_2 zp[1]:3 202.0
(byte) main::timer_2#1 timer_2 zp[1]:2 6.183673469387754
(byte) main::timer_2#2 timer_2 zp[1]:2 202.0
(const to_nomodify byte*) palette[] = { (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4 }
(void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size)
(label) ppuDataFill::@1
(label) ppuDataFill::@2
(label) ppuDataFill::@return
(word) ppuDataFill::i
(word) ppuDataFill::i#1 i zp[2]:17 2002.0
(word) ppuDataFill::i#2 i zp[2]:17 1001.0
(word) ppuDataFill::i#1 i zp[2]:16 2002.0
(word) ppuDataFill::i#2 i zp[2]:16 1001.0
(nomodify void*) ppuDataFill::ppuData
(label) ppuDataFill::ppuDataPrepare1
(byte~) ppuDataFill::ppuDataPrepare1_$0 reg byte a 202.0
(byte~) ppuDataFill::ppuDataPrepare1_$1 reg byte a 202.0
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:13 67.33333333333333
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:12 67.33333333333333
(label) ppuDataFill::ppuDataPut1
(byte) ppuDataFill::ppuDataPut1_val
(word) ppuDataFill::size
(word) ppuDataFill::size#3 size zp[2]:15 111.22222222222223
(word) ppuDataFill::size#3 size zp[2]:14 111.22222222222223
(byte) ppuDataFill::val
(void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size)
(label) ppuDataTransfer::@1
@ -186,20 +186,20 @@
(label) ppuDataTransfer::@4
(label) ppuDataTransfer::@return
(nomodify void*) ppuDataTransfer::cpuData
(nomodify void*) ppuDataTransfer::cpuData#2 cpuData zp[2]:15
(nomodify void*) ppuDataTransfer::cpuData#2 cpuData zp[2]:14
(byte*) ppuDataTransfer::cpuSrc
(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:15 1001.0
(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:15 776.0
(byte*) ppuDataTransfer::cpuSrc#6 cpuSrc zp[2]:15 202.0
(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:14 1001.0
(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:14 776.0
(byte*) ppuDataTransfer::cpuSrc#6 cpuSrc zp[2]:14 202.0
(word) ppuDataTransfer::i
(word) ppuDataTransfer::i#1 i zp[2]:17 2002.0
(word) ppuDataTransfer::i#2 i zp[2]:17 600.5999999999999
(word) ppuDataTransfer::i#1 i zp[2]:16 2002.0
(word) ppuDataTransfer::i#2 i zp[2]:16 600.5999999999999
(nomodify void*) ppuDataTransfer::ppuData
(label) ppuDataTransfer::ppuDataPrepare1
(byte~) ppuDataTransfer::ppuDataPrepare1_$0 reg byte a 202.0
(byte~) ppuDataTransfer::ppuDataPrepare1_$1 reg byte a 202.0
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:13 67.33333333333333
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:12 67.33333333333333
(label) ppuDataTransfer::ppuDataPut1
(byte) ppuDataTransfer::ppuDataPut1_val
(byte) ppuDataTransfer::ppuDataPut1_val#0 reg byte a 2002.0
@ -220,57 +220,57 @@
(word~) rand::$2 zp[2]:32 2002.0
(label) rand::@return
(word) rand::return
(word) rand::return#0 return zp[2]:26 300.75
(word) rand::return#2 return zp[2]:26 202.0
(word) rand::return#3 return zp[2]:26 202.0
(word) rand::return#0 return zp[2]:25 300.75
(word) rand::return#2 return zp[2]:25 202.0
(word) rand::return#3 return zp[2]:25 202.0
(word) rand_state
(word) rand_state#0 rand_state zp[2]:8 1501.5
(word) rand_state#1 rand_state zp[2]:8 1501.5
(word) rand_state#10 rand_state zp[2]:8 1102.0
(word) rand_state#11 rand_state zp[2]:8 137.75
(word) rand_state#17 rand_state zp[2]:8 67.33333333333333
(volatile byte) scroll_y loadstore zp[1]:10 105.0
(word) rand_state#0 rand_state zp[2]:7 1501.5
(word) rand_state#1 rand_state zp[2]:7 1501.5
(word) rand_state#10 rand_state zp[2]:7 1102.0
(word) rand_state#11 rand_state zp[2]:7 137.75
(word) rand_state#17 rand_state zp[2]:7 67.33333333333333
(volatile byte) scroll_y loadstore zp[1]:9 105.0
(const to_nomodify byte*) sine_table[(number) $100] = { (byte) $40, (byte) $42, (byte) $43, (byte) $45, (byte) $46, (byte) $48, (byte) $49, (byte) $4b, (byte) $4c, (byte) $4e, (byte) $50, (byte) $51, (byte) $53, (byte) $54, (byte) $56, (byte) $57, (byte) $58, (byte) $5a, (byte) $5b, (byte) $5d, (byte) $5e, (byte) $60, (byte) $61, (byte) $62, (byte) $64, (byte) $65, (byte) $66, (byte) $67, (byte) $69, (byte) $6a, (byte) $6b, (byte) $6c, (byte) $6d, (byte) $6e, (byte) $6f, (byte) $70, (byte) $71, (byte) $72, (byte) $73, (byte) $74, (byte) $75, (byte) $76, (byte) $77, (byte) $78, (byte) $78, (byte) $79, (byte) $7a, (byte) $7b, (byte) $7b, (byte) $7c, (byte) $7c, (byte) $7d, (byte) $7d, (byte) $7e, (byte) $7e, (byte) $7e, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $7e, (byte) $7e, (byte) $7e, (byte) $7d, (byte) $7d, (byte) $7c, (byte) $7c, (byte) $7b, (byte) $7b, (byte) $7a, (byte) $79, (byte) $78, (byte) $78, (byte) $77, (byte) $76, (byte) $75, (byte) $74, (byte) $73, (byte) $72, (byte) $71, (byte) $70, (byte) $6f, (byte) $6e, (byte) $6d, (byte) $6c, (byte) $6b, (byte) $6a, (byte) $69, (byte) $67, (byte) $66, (byte) $65, (byte) $64, (byte) $62, (byte) $61, (byte) $60, (byte) $5e, (byte) $5d, (byte) $5b, (byte) $5a, (byte) $58, (byte) $57, (byte) $56, (byte) $54, (byte) $53, (byte) $51, (byte) $50, (byte) $4e, (byte) $4c, (byte) $4b, (byte) $49, (byte) $48, (byte) $46, (byte) $45, (byte) $43, (byte) $42, (byte) $40, (byte) $3e, (byte) $3d, (byte) $3b, (byte) $3a, (byte) $38, (byte) $37, (byte) $35, (byte) $34, (byte) $32, (byte) $30, (byte) $2f, (byte) $2d, (byte) $2c, (byte) $2a, (byte) $29, (byte) $28, (byte) $26, (byte) $25, (byte) $23, (byte) $22, (byte) $20, (byte) $1f, (byte) $1e, (byte) $1c, (byte) $1b, (byte) $1a, (byte) $19, (byte) $17, (byte) $16, (byte) $15, (byte) $14, (byte) $13, (byte) $12, (byte) $11, (byte) $10, (byte) $f, (byte) $e, (byte) $d, (byte) $c, (byte) $b, (byte) $a, (byte) 9, (byte) 8, (byte) 8, (byte) 7, (byte) 6, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 2, (byte) 2, (byte) 3, (byte) 3, (byte) 4, (byte) 4, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 8, (byte) 8, (byte) 9, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $e, (byte) $f, (byte) $10, (byte) $11, (byte) $12, (byte) $13, (byte) $14, (byte) $15, (byte) $16, (byte) $17, (byte) $19, (byte) $1a, (byte) $1b, (byte) $1c, (byte) $1e, (byte) $1f, (byte) $20, (byte) $22, (byte) $23, (byte) $25, (byte) $26, (byte) $28, (byte) $29, (byte) $2a, (byte) $2c, (byte) $2d, (byte) $2f, (byte) $30, (byte) $32, (byte) $34, (byte) $35, (byte) $37, (byte) $38, (byte) $3a, (byte) $3b, (byte) $3d, (byte) $3e }
interrupt(HARDWARE_STACK)(void()) vblank()
(label) vblank::@1
(label) vblank::@return
(label) vblank::ppuSpriteBufferDmaTransfer1
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer
(volatile byte) vblank_hit loadstore zp[1]:11 10.25925925925926
(volatile byte) vblank_hit loadstore zp[1]:10 10.25925925925926
reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ]
zp[1]:2 [ main::i#14 main::i#2 ]
zp[1]:3 [ main::timer_2#2 main::timer_2#1 ]
zp[1]:4 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ]
zp[1]:5 [ main::timer#3 main::timer#15 main::timer#21 ]
zp[1]:6 [ main::i#10 main::i#4 ]
zp[1]:7 [ main::sprite_idx#3 main::sprite_idx#2 ]
zp[2]:8 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ]
zp[1]:10 [ scroll_y ]
zp[1]:11 [ vblank_hit ]
reg byte x [ main::i#14 main::i#2 ]
zp[1]:2 [ main::timer_2#2 main::timer_2#1 ]
zp[1]:3 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ]
zp[1]:4 [ main::timer#3 main::timer#15 main::timer#21 ]
zp[1]:5 [ main::i#10 main::i#4 ]
zp[1]:6 [ main::sprite_idx#3 main::sprite_idx#2 ]
zp[2]:7 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ]
zp[1]:9 [ scroll_y ]
zp[1]:10 [ vblank_hit ]
reg byte a [ main::initNES1_waitForVBlank1_$0 ]
reg byte a [ main::initNES1_waitForVBlank2_$0 ]
zp[1]:12 [ main::h_bar#1 ]
zp[1]:11 [ main::h_bar#1 ]
reg byte a [ main::$14 ]
reg byte x [ main::timer#1 ]
reg byte x [ main::$38 ]
reg byte y [ main::$40 ]
zp[2]:13 [ main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ]
zp[2]:12 [ main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ]
reg byte a [ main::$45 ]
reg byte y [ main::$44 ]
zp[2]:15 [ main::$23 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ]
zp[2]:17 [ main::$25 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
zp[1]:19 [ main::$26 ]
zp[2]:14 [ main::$23 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ]
zp[2]:16 [ main::$25 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
zp[1]:18 [ main::$26 ]
reg byte y [ main::$53 ]
reg byte a [ main::$30 ]
zp[2]:20 [ main::$56 main::$31 ]
zp[2]:19 [ main::$56 main::$31 ]
reg byte y [ main::$50 ]
zp[2]:22 [ main::$32 ]
zp[2]:21 [ main::$32 ]
reg byte x [ main::$48 ]
zp[2]:24 [ main::$33 ]
zp[2]:26 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ]
zp[2]:23 [ main::$33 ]
zp[2]:25 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ]
reg byte a [ main::$35 ]
reg byte x [ main::$12 ]
zp[1]:27 [ main::$12 ]
reg byte a [ main::$36 ]
reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ]
reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ]

View File

@ -101,6 +101,8 @@ init: {
tay
txa
sta PLEX_XPOS,y
lda #0
sta PLEX_XPOS+1,y
// i*8
lda.z i
asl
@ -199,6 +201,8 @@ loop: {
tay
txa
sta PLEX_XPOS,y
lda #0
sta PLEX_XPOS+1,y
// mulf8s(r, SIN[a])
lda.z r
ldy.z a

View File

@ -3381,11 +3381,11 @@ init: {
asl
sta.z __9
// [24] *((const word*) PLEX_XPOS + (byte~) init::$9) ← (byte~) init::$4 -- pwuc1_derefidx_vbuz1=vbuz2
lda.z __9
ldx.z __4
tay
txa
lda.z __4
ldy.z __9
sta PLEX_XPOS,y
lda #0
sta PLEX_XPOS+1,y
// [25] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 -- vbuz1=vbuz2_rol_3
lda.z i
asl
@ -3576,11 +3576,11 @@ loop: {
asl
sta.z __20
// [56] *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 -- pwuc1_derefidx_vbuz1=vbuz2
lda.z __20
ldx.z __4
tay
txa
lda.z __4
ldy.z __20
sta PLEX_XPOS,y
lda #0
sta PLEX_XPOS+1,y
// [57] (signed byte) mulf8s::a#1 ← (signed byte) loop::r#2 -- vbsz1=vbsz2
lda.z r
sta.z mulf8s.a
@ -5057,97 +5057,97 @@ Uplift Scope [MOS6581_SID]
Uplift Scope [main]
Uplift Scope [__start]
Uplifting [plexSort] best 105188 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::s#2 ] zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] zp[1]:76 [ plexSort::nxt_y#0 ] zp[1]:75 [ plexSort::nxt_idx#0 ]
Uplifting [plexSort] best 105518 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::s#2 ] zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] zp[1]:76 [ plexSort::nxt_y#0 ] zp[1]:75 [ plexSort::nxt_idx#0 ]
Limited combination testing to 100 combinations of 972 possible.
Uplifting [mulf8u_prepared] best 105182 combination reg byte a [ mulf8u_prepared::b#0 ] zp[2]:101 [ mulf8u_prepared::return#0 ] zp[2]:94 [ mulf8u_prepared::return#2 ]
Uplifting [mulf8s_prepared] best 105158 combination zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$6 ] reg byte a [ mulf8s_prepared::$11 ] reg byte a [ mulf8s_prepared::$9 ] reg byte a [ mulf8s_prepared::$12 ] zp[1]:72 [ mulf8s_prepared::b#0 ]
Uplifting [mulf8u_prepared] best 105512 combination reg byte a [ mulf8u_prepared::b#0 ] zp[2]:101 [ mulf8u_prepared::return#0 ] zp[2]:94 [ mulf8u_prepared::return#2 ]
Uplifting [mulf8s_prepared] best 105488 combination zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$6 ] reg byte a [ mulf8s_prepared::$11 ] reg byte a [ mulf8s_prepared::$9 ] reg byte a [ mulf8s_prepared::$12 ] zp[1]:72 [ mulf8s_prepared::b#0 ]
Limited combination testing to 100 combinations of 512 possible.
Uplifting [plexShowSprite] best 105138 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] reg byte a [ plexShowSprite::xpos_idx#0 ] zp[1]:85 [ plexShowSprite::$2 ] zp[1]:86 [ plexShowSprite::$3 ] zp[1]:87 [ plexShowSprite::$9 ] zp[1]:88 [ plexShowSprite::$5 ] zp[1]:89 [ plexShowSprite::$6 ] zp[1]:79 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:84 [ plexShowSprite::$11 ] zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplifting [plexShowSprite] best 105468 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] reg byte a [ plexShowSprite::xpos_idx#0 ] zp[1]:85 [ plexShowSprite::$2 ] zp[1]:86 [ plexShowSprite::$3 ] zp[1]:87 [ plexShowSprite::$9 ] zp[1]:88 [ plexShowSprite::$5 ] zp[1]:89 [ plexShowSprite::$6 ] zp[1]:79 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:84 [ plexShowSprite::$11 ] zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ]
Limited combination testing to 100 combinations of 1572864 possible.
Uplifting [mulf8u_prepare] best 105132 combination reg byte a [ mulf8u_prepare::a#0 ]
Uplifting [loop] best 103332 combination zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] zp[2]:45 [ loop::$1 ] zp[2]:47 [ loop::$2 ] zp[2]:49 [ loop::x#0 ] reg byte a [ loop::$20 ] zp[2]:55 [ loop::$5 ] zp[2]:57 [ loop::$6 ] zp[2]:59 [ loop::y#0 ] reg byte a [ loop::$8 ] reg byte a [ loop::$11 ] zp[1]:8 [ loop::i1#5 loop::i1#1 ] zp[1]:7 [ loop::i#2 loop::i#1 ] zp[1]:51 [ loop::$4 ] zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] zp[1]:5 [ loop::r#2 loop::r#1 ] zp[1]:65 [ loop::$18 ] zp[1]:4 [ loop::angle#6 loop::angle#1 ]
Uplifting [mulf8u_prepare] best 105462 combination reg byte a [ mulf8u_prepare::a#0 ]
Uplifting [loop] best 103862 combination zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] zp[2]:45 [ loop::$1 ] zp[2]:47 [ loop::$2 ] zp[2]:49 [ loop::x#0 ] reg byte a [ loop::$20 ] zp[2]:55 [ loop::$5 ] zp[2]:57 [ loop::$6 ] zp[2]:59 [ loop::y#0 ] reg byte a [ loop::$8 ] reg byte a [ loop::$11 ] zp[1]:8 [ loop::i1#5 loop::i1#1 ] zp[1]:7 [ loop::i#2 loop::i#1 ] zp[1]:51 [ loop::$4 ] zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] zp[1]:5 [ loop::r#2 loop::r#1 ] zp[1]:65 [ loop::$18 ] zp[1]:4 [ loop::angle#6 loop::angle#1 ]
Limited combination testing to 100 combinations of 24576 possible.
Uplifting [mulf_init] best 103082 combination zp[2]:22 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:16 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:10 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:19 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
Uplifting [mulf_init] best 103612 combination zp[2]:22 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:16 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:10 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:19 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
Limited combination testing to 100 combinations of 1024 possible.
Uplifting [mulf8s] best 101876 combination reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] zp[2]:73 [ mulf8s::return#0 ] zp[2]:43 [ mulf8s::return#2 ] zp[2]:53 [ mulf8s::return#3 ]
Uplifting [keyboard_matrix_read] best 101864 combination reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ]
Uplifting [] best 101864 combination zp[1]:35 [ plex_sprite_msb ] zp[1]:33 [ plex_show_idx ] zp[1]:34 [ plex_sprite_idx ] zp[1]:36 [ plex_free_next ]
Uplifting [plexInit] best 101744 combination reg byte x [ plexInit::i#2 plexInit::i#1 ]
Uplifting [memset] best 101744 combination zp[2]:24 [ memset::dst#2 memset::dst#1 ]
Uplifting [keyboard_key_pressed] best 101555 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#2 ]
Uplifting [mulf8s] best 102406 combination reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] zp[2]:73 [ mulf8s::return#0 ] zp[2]:43 [ mulf8s::return#2 ] zp[2]:53 [ mulf8s::return#3 ]
Uplifting [keyboard_matrix_read] best 102394 combination reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ]
Uplifting [] best 102394 combination zp[1]:35 [ plex_sprite_msb ] zp[1]:33 [ plex_show_idx ] zp[1]:34 [ plex_sprite_idx ] zp[1]:36 [ plex_free_next ]
Uplifting [plexInit] best 102274 combination reg byte x [ plexInit::i#2 plexInit::i#1 ]
Uplifting [memset] best 102274 combination zp[2]:24 [ memset::dst#2 memset::dst#1 ]
Uplifting [keyboard_key_pressed] best 102085 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#2 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [init] best 101335 combination reg byte x [ init::i1#2 init::i1#1 ] zp[1]:2 [ init::i#2 init::i#1 ] reg byte a [ init::$10 ] reg byte a [ init::$3 ] zp[1]:40 [ init::$9 ] zp[1]:41 [ init::$5 ] zp[1]:42 [ init::$6 ] zp[1]:39 [ init::$4 ]
Uplifting [init] best 101865 combination reg byte x [ init::i1#2 init::i1#1 ] zp[1]:2 [ init::i#2 init::i#1 ] reg byte a [ init::$10 ] reg byte a [ init::$3 ] zp[1]:40 [ init::$9 ] zp[1]:41 [ init::$5 ] zp[1]:42 [ init::$6 ] zp[1]:39 [ init::$4 ]
Limited combination testing to 100 combinations of 27648 possible.
Uplifting [exit] best 101275 combination reg byte a [ exit::$0 ]
Uplifting [MOS6526_CIA] best 101275 combination
Uplifting [MOS6569_VICII] best 101275 combination
Uplifting [MOS6581_SID] best 101275 combination
Uplifting [main] best 101275 combination
Uplifting [__start] best 101275 combination
Uplifting [exit] best 101805 combination reg byte a [ exit::$0 ]
Uplifting [MOS6526_CIA] best 101805 combination
Uplifting [MOS6569_VICII] best 101805 combination
Uplifting [MOS6581_SID] best 101805 combination
Uplifting [main] best 101805 combination
Uplifting [__start] best 101805 combination
Attempting to uplift remaining variables inzp[1]:28 [ plexSort::m#2 plexSort::m#1 ]
Uplifting [plexSort] best 101275 combination zp[1]:28 [ plexSort::m#2 plexSort::m#1 ]
Uplifting [plexSort] best 101805 combination zp[1]:28 [ plexSort::m#2 plexSort::m#1 ]
Attempting to uplift remaining variables inzp[1]:76 [ plexSort::nxt_y#0 ]
Uplifting [plexSort] best 101275 combination zp[1]:76 [ plexSort::nxt_y#0 ]
Uplifting [plexSort] best 101805 combination zp[1]:76 [ plexSort::nxt_y#0 ]
Attempting to uplift remaining variables inzp[1]:75 [ plexSort::nxt_idx#0 ]
Uplifting [plexSort] best 101275 combination zp[1]:75 [ plexSort::nxt_idx#0 ]
Uplifting [plexSort] best 101805 combination zp[1]:75 [ plexSort::nxt_idx#0 ]
Attempting to uplift remaining variables inzp[1]:85 [ plexShowSprite::$2 ]
Uplifting [plexShowSprite] best 101269 combination reg byte a [ plexShowSprite::$2 ]
Uplifting [plexShowSprite] best 101799 combination reg byte a [ plexShowSprite::$2 ]
Attempting to uplift remaining variables inzp[1]:86 [ plexShowSprite::$3 ]
Uplifting [plexShowSprite] best 101263 combination reg byte a [ plexShowSprite::$3 ]
Uplifting [plexShowSprite] best 101793 combination reg byte a [ plexShowSprite::$3 ]
Attempting to uplift remaining variables inzp[1]:87 [ plexShowSprite::$9 ]
Uplifting [plexShowSprite] best 101257 combination reg byte a [ plexShowSprite::$9 ]
Uplifting [plexShowSprite] best 101787 combination reg byte a [ plexShowSprite::$9 ]
Attempting to uplift remaining variables inzp[1]:88 [ plexShowSprite::$5 ]
Uplifting [plexShowSprite] best 101251 combination reg byte x [ plexShowSprite::$5 ]
Uplifting [plexShowSprite] best 101781 combination reg byte x [ plexShowSprite::$5 ]
Attempting to uplift remaining variables inzp[1]:89 [ plexShowSprite::$6 ]
Uplifting [plexShowSprite] best 101247 combination reg byte a [ plexShowSprite::$6 ]
Uplifting [plexShowSprite] best 101777 combination reg byte a [ plexShowSprite::$6 ]
Attempting to uplift remaining variables inzp[1]:79 [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Uplifting [plexShowSprite] best 101238 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Uplifting [plexShowSprite] best 101768 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Attempting to uplift remaining variables inzp[1]:72 [ mulf8s_prepared::b#0 ]
Uplifting [mulf8s_prepared] best 101238 combination zp[1]:72 [ mulf8s_prepared::b#0 ]
Uplifting [mulf8s_prepared] best 101768 combination zp[1]:72 [ mulf8s_prepared::b#0 ]
Attempting to uplift remaining variables inzp[1]:84 [ plexShowSprite::$11 ]
Uplifting [plexShowSprite] best 101231 combination reg byte x [ plexShowSprite::$11 ]
Uplifting [plexShowSprite] best 101761 combination reg byte x [ plexShowSprite::$11 ]
Attempting to uplift remaining variables inzp[1]:63 [ loop::plexFreeNextYpos1_return#0 ]
Uplifting [loop] best 101231 combination zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ]
Uplifting [loop] best 101761 combination zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ]
Attempting to uplift remaining variables inzp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplifting [plexShowSprite] best 101231 combination zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplifting [plexShowSprite] best 101761 combination zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ]
Attempting to uplift remaining variables inzp[1]:8 [ loop::i1#5 loop::i1#1 ]
Uplifting [loop] best 101231 combination zp[1]:8 [ loop::i1#5 loop::i1#1 ]
Uplifting [loop] best 101761 combination zp[1]:8 [ loop::i1#5 loop::i1#1 ]
Attempting to uplift remaining variables inzp[1]:7 [ loop::i#2 loop::i#1 ]
Uplifting [loop] best 101231 combination zp[1]:7 [ loop::i#2 loop::i#1 ]
Uplifting [loop] best 101761 combination zp[1]:7 [ loop::i#2 loop::i#1 ]
Attempting to uplift remaining variables inzp[1]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Uplifting [mulf_init] best 101091 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Uplifting [mulf_init] best 101621 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Attempting to uplift remaining variables inzp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ]
Uplifting [mulf_init] best 101091 combination zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ]
Uplifting [mulf_init] best 101621 combination zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ]
Attempting to uplift remaining variables inzp[1]:35 [ plex_sprite_msb ]
Uplifting [] best 101091 combination zp[1]:35 [ plex_sprite_msb ]
Uplifting [] best 101621 combination zp[1]:35 [ plex_sprite_msb ]
Attempting to uplift remaining variables inzp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ]
Uplifting [mulf_init] best 101091 combination zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ]
Uplifting [mulf_init] best 101621 combination zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ]
Attempting to uplift remaining variables inzp[1]:33 [ plex_show_idx ]
Uplifting [] best 101091 combination zp[1]:33 [ plex_show_idx ]
Uplifting [] best 101621 combination zp[1]:33 [ plex_show_idx ]
Attempting to uplift remaining variables inzp[1]:51 [ loop::$4 ]
Uplifting [loop] best 100491 combination reg byte x [ loop::$4 ]
Uplifting [loop] best 101221 combination reg byte x [ loop::$4 ]
Attempting to uplift remaining variables inzp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ]
Uplifting [loop] best 100491 combination zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ]
Uplifting [loop] best 101221 combination zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ]
Attempting to uplift remaining variables inzp[1]:34 [ plex_sprite_idx ]
Uplifting [] best 100491 combination zp[1]:34 [ plex_sprite_idx ]
Uplifting [] best 101221 combination zp[1]:34 [ plex_sprite_idx ]
Attempting to uplift remaining variables inzp[1]:5 [ loop::r#2 loop::r#1 ]
Uplifting [loop] best 100491 combination zp[1]:5 [ loop::r#2 loop::r#1 ]
Uplifting [loop] best 101221 combination zp[1]:5 [ loop::r#2 loop::r#1 ]
Attempting to uplift remaining variables inzp[1]:36 [ plex_free_next ]
Uplifting [] best 100491 combination zp[1]:36 [ plex_free_next ]
Uplifting [] best 101221 combination zp[1]:36 [ plex_free_next ]
Attempting to uplift remaining variables inzp[1]:2 [ init::i#2 init::i#1 ]
Uplifting [init] best 100491 combination zp[1]:2 [ init::i#2 init::i#1 ]
Uplifting [init] best 101221 combination zp[1]:2 [ init::i#2 init::i#1 ]
Attempting to uplift remaining variables inzp[1]:40 [ init::$9 ]
Uplifting [init] best 100431 combination reg byte a [ init::$9 ]
Uplifting [init] best 101181 combination reg byte a [ init::$9 ]
Attempting to uplift remaining variables inzp[1]:41 [ init::$5 ]
Uplifting [init] best 100391 combination reg byte a [ init::$5 ]
Uplifting [init] best 101141 combination reg byte a [ init::$5 ]
Attempting to uplift remaining variables inzp[1]:42 [ init::$6 ]
Uplifting [init] best 100331 combination reg byte a [ init::$6 ]
Uplifting [init] best 101081 combination reg byte a [ init::$6 ]
Attempting to uplift remaining variables inzp[1]:65 [ loop::$18 ]
Uplifting [loop] best 100271 combination reg byte a [ loop::$18 ]
Uplifting [loop] best 101021 combination reg byte a [ loop::$18 ]
Attempting to uplift remaining variables inzp[1]:39 [ init::$4 ]
Uplifting [init] best 100211 combination reg byte x [ init::$4 ]
Uplifting [init] best 100981 combination reg byte x [ init::$4 ]
Attempting to uplift remaining variables inzp[1]:4 [ loop::angle#6 loop::angle#1 ]
Uplifting [loop] best 100211 combination zp[1]:4 [ loop::angle#6 loop::angle#1 ]
Uplifting [loop] best 100981 combination zp[1]:4 [ loop::angle#6 loop::angle#1 ]
Coalescing zero page register [ zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp[2]:73 [ mulf8s::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 ] ] with [ zp[2]:94 [ mulf8u_prepared::return#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:43 [ mulf8s::return#2 ] ] with [ zp[2]:45 [ loop::$1 ] ] - score: 1
@ -5342,6 +5342,8 @@ init: {
tay
txa
sta PLEX_XPOS,y
lda #0
sta PLEX_XPOS+1,y
// [25] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
@ -5508,6 +5510,8 @@ loop: {
tay
txa
sta PLEX_XPOS,y
lda #0
sta PLEX_XPOS+1,y
// [57] (signed byte) mulf8s::a#1 ← (signed byte) loop::r#2 -- vbsaa=vbsz1
lda.z r
// [58] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) loop::a#2) -- vbsxx=pbsc1_derefidx_vbuz1
@ -7150,7 +7154,7 @@ reg byte a [ keyboard_matrix_read::return#0 ]
FINAL ASSEMBLER
Score: 74020
Score: 74790
// File Comments
// Same animation using a multiplexer
@ -7299,6 +7303,8 @@ init: {
tay
txa
sta PLEX_XPOS,y
lda #0
sta PLEX_XPOS+1,y
// i*8
// [25] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
@ -7455,6 +7461,8 @@ loop: {
tay
txa
sta PLEX_XPOS,y
lda #0
sta PLEX_XPOS+1,y
// mulf8s(r, SIN[a])
// [57] (signed byte) mulf8s::a#1 ← (signed byte) loop::r#2 -- vbsaa=vbsz1
lda.z r

View File

@ -62,10 +62,10 @@ main: {
// entities[i] =0
lda.z i
asl
ldx #0
tay
txa
lda #0
sta entities,y
sta entities+1,y
__b6:
// line[entities[i]] = '*'
lda.z i

View File

@ -393,11 +393,11 @@ main: {
asl
sta.z __8
// [12] *((const word*) entities + (byte~) main::$8) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z __8
ldx #0
tay
txa
lda #0
ldy.z __8
sta entities,y
lda #0
sta entities+1,y
jmp __b6
// main::@6
__b6:
@ -481,13 +481,13 @@ REGISTER UPLIFT SCOPES
Uplift Scope [main] 248.62: zp[1]:2 [ main::i#2 main::i#1 ] 202: zp[1]:6 [ main::$9 ] 202: zp[1]:7 [ main::$8 ] 202: zp[1]:8 [ main::$7 ] 202: zp[2]:9 [ main::$11 ] 134.67: zp[2]:3 [ main::line#2 main::line#1 ] 101: zp[1]:5 [ main::$5 ]
Uplift Scope []
Uplifting [main] best 19305 combination zp[1]:2 [ main::i#2 main::i#1 ] reg byte a [ main::$9 ] reg byte a [ main::$8 ] reg byte a [ main::$7 ] zp[2]:9 [ main::$11 ] zp[2]:3 [ main::line#2 main::line#1 ] zp[1]:5 [ main::$5 ]
Uplifting [main] best 19805 combination zp[1]:2 [ main::i#2 main::i#1 ] reg byte a [ main::$9 ] reg byte a [ main::$8 ] reg byte a [ main::$7 ] zp[2]:9 [ main::$11 ] zp[2]:3 [ main::line#2 main::line#1 ] zp[1]:5 [ main::$5 ]
Limited combination testing to 100 combinations of 384 possible.
Uplifting [] best 19305 combination
Uplifting [] best 19805 combination
Attempting to uplift remaining variables inzp[1]:2 [ main::i#2 main::i#1 ]
Uplifting [main] best 19305 combination zp[1]:2 [ main::i#2 main::i#1 ]
Uplifting [main] best 19805 combination zp[1]:2 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp[1]:5 [ main::$5 ]
Uplifting [main] best 18305 combination reg byte x [ main::$5 ]
Uplifting [main] best 18805 combination reg byte x [ main::$5 ]
Allocated (was zp[2]:9) zp[2]:5 [ main::$11 ]
ASSEMBLER BEFORE OPTIMIZATION
@ -580,10 +580,11 @@ main: {
lda.z i
asl
// [12] *((const word*) entities + (byte~) main::$8) ← (byte) 0 -- pwuc1_derefidx_vbuaa=vbuc2
ldx #0
tay
txa
lda #0
sta entities,y
lda #0
sta entities+1,y
jmp __b6
// main::@6
__b6:
@ -632,6 +633,8 @@ Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __b6
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction __b2:
Removing instruction __b3_from___b2:
Removing instruction __b5:
@ -674,7 +677,7 @@ zp[2]:5 [ main::$11 ]
FINAL ASSEMBLER
Score: 16802
Score: 17102
// File Comments
// Test that the multiplication of a idx*sizeof(element) is reused inside loops
@ -765,10 +768,10 @@ main: {
lda.z i
asl
// [12] *((const word*) entities + (byte~) main::$8) ← (byte) 0 -- pwuc1_derefidx_vbuaa=vbuc2
ldx #0
tay
txa
lda #0
sta entities,y
sta entities+1,y
// main::@6
__b6:
// line[entities[i]] = '*'

View File

@ -4,23 +4,25 @@
.pc = $80d "Program"
main: {
.label screen = $400
.label b = 2
lda #0
sta.z b
.label __0 = 2
ldy #0
__b1:
// -0x30+b
lax.z b
axs #-[-$30]
tya
clc
adc #-$30
sta.z __0
// screen[b] = -0x30+b
lda.z b
tya
asl
tay
txa
sta screen,y
tax
lda.z __0
sta screen,x
lda #0
sta screen+1,x
// for( byte b: 0..20)
inc.z b
lda #$15
cmp.z b
iny
cpy #$15
bne __b1
// }
rts

View File

@ -163,11 +163,11 @@ main: {
asl
sta.z __2
// [4] *((const nomodify word*) main::screen + (byte~) main::$2) ← (byte~) main::$0 -- pwuc1_derefidx_vbuz1=vbuz2
lda.z __2
ldx.z __0
tay
txa
lda.z __0
ldy.z __2
sta screen,y
lda #0
sta screen+1,y
// [5] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuz1=_inc_vbuz1
inc.z b
// [6] if((byte) main::b#1!=(byte) $15) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
@ -198,10 +198,11 @@ REGISTER UPLIFT SCOPES
Uplift Scope [main] 27.5: zp[1]:2 [ main::b#2 main::b#1 ] 22: zp[1]:4 [ main::$2 ] 11: zp[1]:3 [ main::$0 ]
Uplift Scope []
Uplifting [main] best 461 combination zp[1]:2 [ main::b#2 main::b#1 ] reg byte a [ main::$2 ] reg byte x [ main::$0 ]
Uplifting [] best 461 combination
Attempting to uplift remaining variables inzp[1]:2 [ main::b#2 main::b#1 ]
Uplifting [main] best 461 combination zp[1]:2 [ main::b#2 main::b#1 ]
Uplifting [main] best 481 combination reg byte y [ main::b#2 main::b#1 ] reg byte x [ main::$2 ] zp[1]:3 [ main::$0 ]
Uplifting [] best 481 combination
Attempting to uplift remaining variables inzp[1]:3 [ main::$0 ]
Uplifting [main] best 481 combination zp[1]:3 [ main::$0 ]
Allocated (was zp[1]:3) zp[1]:2 [ main::$0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -214,12 +215,11 @@ ASSEMBLER BEFORE OPTIMIZATION
// main
main: {
.label screen = $400
.label b = 2
.label __0 = 2
// [1] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
// [1] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta.z b
// [1] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1
ldy #0
jmp __b1
// [1] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
__b1_from___b1:
@ -227,21 +227,24 @@ main: {
jmp __b1
// main::@1
__b1:
// [2] (byte~) main::$0 ← (byte) -$30 + (byte) main::b#2 -- vbuxx=vbuc1_plus_vbuz1
lax.z b
axs #-[-$30]
// [3] (byte~) main::$2 ← (byte) main::b#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z b
// [2] (byte~) main::$0 ← (byte) -$30 + (byte) main::b#2 -- vbuz1=vbuc1_plus_vbuyy
tya
clc
adc #-$30
sta.z __0
// [3] (byte~) main::$2 ← (byte) main::b#2 << (byte) 1 -- vbuxx=vbuyy_rol_1
tya
asl
// [4] *((const nomodify word*) main::screen + (byte~) main::$2) ← (byte~) main::$0 -- pwuc1_derefidx_vbuaa=vbuxx
tay
txa
sta screen,y
// [5] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuz1=_inc_vbuz1
inc.z b
// [6] if((byte) main::b#1!=(byte) $15) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$15
cmp.z b
tax
// [4] *((const nomodify word*) main::screen + (byte~) main::$2) ← (byte~) main::$0 -- pwuc1_derefidx_vbuxx=vbuz1
lda.z __0
sta screen,x
lda #0
sta screen+1,x
// [5] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuyy=_inc_vbuyy
iny
// [6] if((byte) main::b#1!=(byte) $15) goto main::@1 -- vbuyy_neq_vbuc1_then_la1
cpy #$15
bne __b1_from___b1
jmp __breturn
// main::@return
@ -266,22 +269,22 @@ Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(void()) main()
(byte~) main::$0 reg byte x 11.0
(byte~) main::$2 reg byte a 22.0
(byte~) main::$0 zp[1]:2 11.0
(byte~) main::$2 reg byte x 22.0
(label) main::@1
(label) main::@return
(byte) main::b
(byte) main::b#1 b zp[1]:2 16.5
(byte) main::b#2 b zp[1]:2 11.0
(byte) main::b#1 reg byte y 16.5
(byte) main::b#2 reg byte y 11.0
(const nomodify word*) main::screen = (word*) 1024
zp[1]:2 [ main::b#2 main::b#1 ]
reg byte x [ main::$0 ]
reg byte a [ main::$2 ]
reg byte y [ main::b#2 main::b#1 ]
zp[1]:2 [ main::$0 ]
reg byte x [ main::$2 ]
FINAL ASSEMBLER
Score: 371
Score: 391
// File Comments
// Test inference of integer types in expressions
@ -293,33 +296,35 @@ Score: 371
// main
main: {
.label screen = $400
.label b = 2
.label __0 = 2
// [1] phi from main to main::@1 [phi:main->main::@1]
// [1] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta.z b
// [1] phi (byte) main::b#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1
ldy #0
// [1] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
// [1] phi (byte) main::b#2 = (byte) main::b#1 [phi:main::@1->main::@1#0] -- register_copy
// main::@1
__b1:
// -0x30+b
// [2] (byte~) main::$0 ← (byte) -$30 + (byte) main::b#2 -- vbuxx=vbuc1_plus_vbuz1
lax.z b
axs #-[-$30]
// [2] (byte~) main::$0 ← (byte) -$30 + (byte) main::b#2 -- vbuz1=vbuc1_plus_vbuyy
tya
clc
adc #-$30
sta.z __0
// screen[b] = -0x30+b
// [3] (byte~) main::$2 ← (byte) main::b#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z b
// [3] (byte~) main::$2 ← (byte) main::b#2 << (byte) 1 -- vbuxx=vbuyy_rol_1
tya
asl
// [4] *((const nomodify word*) main::screen + (byte~) main::$2) ← (byte~) main::$0 -- pwuc1_derefidx_vbuaa=vbuxx
tay
txa
sta screen,y
tax
// [4] *((const nomodify word*) main::screen + (byte~) main::$2) ← (byte~) main::$0 -- pwuc1_derefidx_vbuxx=vbuz1
lda.z __0
sta screen,x
lda #0
sta screen+1,x
// for( byte b: 0..20)
// [5] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuz1=_inc_vbuz1
inc.z b
// [6] if((byte) main::b#1!=(byte) $15) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$15
cmp.z b
// [5] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuyy=_inc_vbuyy
iny
// [6] if((byte) main::b#1!=(byte) $15) goto main::@1 -- vbuyy_neq_vbuc1_then_la1
cpy #$15
bne __b1
// main::@return
// }

View File

@ -1,13 +1,13 @@
(void()) main()
(byte~) main::$0 reg byte x 11.0
(byte~) main::$2 reg byte a 22.0
(byte~) main::$0 zp[1]:2 11.0
(byte~) main::$2 reg byte x 22.0
(label) main::@1
(label) main::@return
(byte) main::b
(byte) main::b#1 b zp[1]:2 16.5
(byte) main::b#2 b zp[1]:2 11.0
(byte) main::b#1 reg byte y 16.5
(byte) main::b#2 reg byte y 11.0
(const nomodify word*) main::screen = (word*) 1024
zp[1]:2 [ main::b#2 main::b#1 ]
reg byte x [ main::$0 ]
reg byte a [ main::$2 ]
reg byte y [ main::b#2 main::b#1 ]
zp[1]:2 [ main::$0 ]
reg byte x [ main::$2 ]