1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-10-10 20:23:47 +00:00

Fixed sprite multiplexer when double buffering.

This commit is contained in:
jespergravgaard 2018-12-29 18:52:23 +01:00
parent b1d358403a
commit 76b13d6b55
13 changed files with 8474 additions and 8005 deletions

View File

@ -44,6 +44,17 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
}
@Test
public void testTetrisSprites() throws IOException, URISyntaxException {
compileAndCompare("examples/tetris/test-sprites");
}
@Test
public void testTetris() throws IOException, URISyntaxException {
compileAndCompare("examples/tetris/tetris");
}
@Test
public void testClobberAProblem() throws IOException, URISyntaxException {
compileAndCompare("clobber-a-problem");
@ -74,16 +85,6 @@ public class TestPrograms {
compileAndCompare("longbranch-interrupt-problem");
}
@Test
public void testTetrisSprites() throws IOException, URISyntaxException {
compileAndCompare("examples/tetris/test-sprites");
}
@Test
public void testTetris() throws IOException, URISyntaxException {
compileAndCompare("examples/tetris/tetris");
}
@Test
public void testVarInitProblem() throws IOException, URISyntaxException {
compileAndCompare("var-init-problem");

View File

@ -31,4 +31,11 @@ byte current_piece_char;
// Position of top left corner of current moving piece on the playfield
byte current_xpos;
byte current_ypos;
byte current_ypos;
// The screen currently being rendered to. $00 for screen 1 / $40 for screen 2.
byte render_screen_render = $40;
// The screen currently to show next to the user. $00 for screen 1 / $40 for screen 2.
byte render_screen_show = 0;
// The screen currently being showed to the user. $00 for screen 1 / $40 for screen 2.
volatile byte render_screen_showing = 0;

View File

@ -16,16 +16,12 @@ kickasm(pc PLAYFIELD_SCREEN_ORIGINAL, resource "nes-screen.iscr") {{
align($80) byte*[PLAYFIELD_LINES] screen_lines_1;
align($40) byte*[PLAYFIELD_LINES] screen_lines_2;
// The screen currently being showed to the user. $00 for screen 1 / $40 for screen 2.
byte render_screen_show;
// The screen currently being rendered to. $00 for screen 1 / $40 for screen 2.
byte render_screen_render;
// Initialize rendering
void render_init() {
vicSelectGfxBank(PLAYFIELD_CHARSET);
// Enable Extended Background Color Mode
*D011 = VIC_ECM | VIC_DEN | VIC_RSEL | 3;
*BORDERCOL = BLACK;
*BGCOL1 = BLACK;
*BGCOL2 = BLUE;
*BGCOL3 = CYAN;
@ -69,6 +65,7 @@ void render_show() {
d018val = toD018(PLAYFIELD_SCREEN_2, PLAYFIELD_CHARSET);
}
*D018 = d018val;
render_screen_showing = render_screen_show;
}
// Swap rendering to the other screen (used for double buffering)

View File

@ -58,16 +58,17 @@ void sprites_irq_init() {
// Enable Raster Interrupt
*IRQ_ENABLE = IRQ_RASTER;
// Set the IRQ routine
*HARDWARE_IRQ = &irq;
*HARDWARE_IRQ = &sprites_irq;
asm { cli }
}
// Raster Interrupt Routine - sets up the sprites covering the playfield
// Repeats 10 timers every 21 lines from line IRQ_RASTER_FIRST
interrupt(hardware_clobber) void irq() {
interrupt(hardware_clobber) void sprites_irq() {
//*BORDERCOL = DARK_GREY;
*BORDERCOL = DARK_GREY;
// Place the sprites
byte ypos = irq_sprite_ypos;
SPRITES_YPOS[0] = ypos;
@ -77,17 +78,20 @@ interrupt(hardware_clobber) void irq() {
// Wait for the y-position before changing sprite pointers
do {
} while(*RASTER!=irq_sprite_ypos);
} while(*RASTER<irq_sprite_ypos);
byte ptr = irq_sprite_ptr;
PLAYFIELD_SPRITE_PTRS_1[0] = ptr;
PLAYFIELD_SPRITE_PTRS_2[0] = ptr++;
PLAYFIELD_SPRITE_PTRS_1[1] = ptr;
PLAYFIELD_SPRITE_PTRS_2[1] = ptr;
PLAYFIELD_SPRITE_PTRS_1[2] = ptr;
PLAYFIELD_SPRITE_PTRS_2[2] = ptr++;
PLAYFIELD_SPRITE_PTRS_1[3] = ptr;
PLAYFIELD_SPRITE_PTRS_2[3] = ptr;
if(render_screen_showing==0) {
PLAYFIELD_SPRITE_PTRS_1[0] = ptr++;
PLAYFIELD_SPRITE_PTRS_1[1] = ptr;
PLAYFIELD_SPRITE_PTRS_1[2] = ptr++;
PLAYFIELD_SPRITE_PTRS_1[3] = ptr;
} else {
PLAYFIELD_SPRITE_PTRS_2[0] = ptr++;
PLAYFIELD_SPRITE_PTRS_2[1] = ptr;
PLAYFIELD_SPRITE_PTRS_2[2] = ptr++;
PLAYFIELD_SPRITE_PTRS_2[3] = ptr;
}
// Find next raster line / sprite positions
if(++irq_cnt==10) {
@ -110,6 +114,6 @@ interrupt(hardware_clobber) void irq() {
// Acknowledge the IRQ and setup the next one
*IRQ_STATUS = IRQ_RASTER;
*BORDERCOL = BLACK;
//*BORDERCOL = BLACK;
}

View File

@ -21,7 +21,7 @@ void main() {
while(true) {
// Wait for a frame to pass
while(*RASTER!=$ff) {}
*BORDERCOL = render_screen_show>>4;
//*BORDERCOL = render_screen_show>>4;
// Update D018 to show the selected screen
render_show();
// Scan keyboard events
@ -36,6 +36,6 @@ void main() {
render_current();
render_screen_swap();
}
*BORDERCOL = 0;
//*BORDERCOL = 0;
}
}

View File

@ -13,7 +13,6 @@
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label BORDERCOL = $d020
.label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011
.label D018 = $d018
@ -26,7 +25,6 @@
.label CIA2_PORT_A_DDR = $dd02
.label HARDWARE_IRQ = $fffe
.const BLACK = 0
.const DARK_GREY = $b
.label PLAYFIELD_SCREEN_1 = $400
.label PLAYFIELD_SCREEN_2 = $2c00
.label PLAYFIELD_SPRITES = $2000
@ -37,11 +35,14 @@
.label PLAYFIELD_SPRITE_PTRS_1 = PLAYFIELD_SCREEN_1+SPRITE_PTRS
.label PLAYFIELD_SPRITE_PTRS_2 = PLAYFIELD_SCREEN_2+SPRITE_PTRS
.const toSpritePtr1_return = PLAYFIELD_SPRITES>>6
.label render_screen_showing = 4
.label irq_raster_next = 3
.label irq_sprite_ypos = 4
.label irq_sprite_ptr = 5
.label irq_cnt = 6
.label irq_sprite_ypos = 5
.label irq_sprite_ptr = 6
.label irq_cnt = 7
bbegin:
lda #0
sta render_screen_showing
lda #IRQ_RASTER_FIRST
sta irq_raster_next
lda #$32
@ -84,9 +85,9 @@ sprites_irq_init: {
sta RASTER
lda #IRQ_RASTER
sta IRQ_ENABLE
lda #<irq
lda #<sprites_irq
sta HARDWARE_IRQ
lda #>irq
lda #>sprites_irq
sta HARDWARE_IRQ+1
cli
rts
@ -119,12 +120,10 @@ sprites_init: {
bne b1
rts
}
irq: {
sprites_irq: {
.const toSpritePtr2_return = PLAYFIELD_SPRITES>>6
sta rega+1
stx regx+1
lda #DARK_GREY
sta BORDERCOL
lda irq_sprite_ypos
sta SPRITES_YPOS
sta SPRITES_YPOS+2
@ -133,23 +132,22 @@ irq: {
b1:
lda RASTER
cmp irq_sprite_ypos
bne b1
lda irq_sprite_ptr
sta PLAYFIELD_SPRITE_PTRS_1
sta PLAYFIELD_SPRITE_PTRS_2
tax
bcc b1
ldx irq_sprite_ptr
lda render_screen_showing
cmp #0
beq b2
stx PLAYFIELD_SPRITE_PTRS_2
inx
stx PLAYFIELD_SPRITE_PTRS_1+1
stx PLAYFIELD_SPRITE_PTRS_2+1
stx PLAYFIELD_SPRITE_PTRS_1+2
stx PLAYFIELD_SPRITE_PTRS_2+2
inx
stx PLAYFIELD_SPRITE_PTRS_1+3
stx PLAYFIELD_SPRITE_PTRS_2+3
b3:
inc irq_cnt
lda irq_cnt
cmp #$a
beq b2
beq b4
lda #$15
clc
adc irq_raster_next
@ -162,25 +160,23 @@ irq: {
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
b3:
b5:
ldx irq_raster_next
txa
and #7
cmp #3
bne b4
bne b6
dex
b4:
b6:
stx RASTER
lda #IRQ_RASTER
sta IRQ_STATUS
lda #BLACK
sta BORDERCOL
rega:
lda #00
regx:
ldx #00
rti
b2:
b4:
lda #0
sta irq_cnt
lda #IRQ_RASTER_FIRST
@ -189,6 +185,17 @@ irq: {
sta irq_sprite_ypos
lda #toSpritePtr2_return
sta irq_sprite_ptr
jmp b5
b2:
stx PLAYFIELD_SPRITE_PTRS_1
txa
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_1+1
sta PLAYFIELD_SPRITE_PTRS_1+2
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b3
}
.pc = PLAYFIELD_SPRITES "PLAYFIELD_SPRITES"

View File

@ -2,6 +2,7 @@
[0] phi()
to:@4
@4: scope:[] from @begin
[1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
kickasm(location (const byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("nes-playfield.png", List().add($010101, $000000))
.for(var sy=0;sy<10;sy++) {
.for(var sx=0;sx<3;sx++) {
@ -16,140 +17,147 @@
}}
to:@5
@5: scope:[] from @4
[2] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0
[3] (byte) irq_sprite_ypos#0 ← (byte/signed byte/word/signed word/dword/signed dword) 50
[3] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0
[4] (byte) irq_sprite_ypos#0 ← (byte/signed byte/word/signed word/dword/signed dword) 50
to:toSpritePtr1
toSpritePtr1: scope:[] from @5
[4] phi()
[5] phi()
to:@9
@9: scope:[] from toSpritePtr1
[5] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0
[6] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
[6] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0
[7] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@8
@8: scope:[] from @9
[7] phi()
[8] call main
[8] phi()
[9] call main
to:@end
@end: scope:[] from @8
[9] phi()
main: scope:[main] from @8
[10] phi()
main: scope:[main] from @8
[11] phi()
to:main::vicSelectGfxBank1
main::vicSelectGfxBank1: scope:[main] from main
[11] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
[12] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
to:main::vicSelectGfxBank1_toDd001
main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1
[12] phi()
[13] phi()
to:main::vicSelectGfxBank1_@1
main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001
[13] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0
[14] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0
to:main::toD0181
main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1
[14] phi()
[15] phi()
to:main::@8
main::@8: scope:[main] from main::toD0181
[15] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
[16] call sprites_init
[16] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
[17] call sprites_init
to:main::@9
main::@9: scope:[main] from main::@8
[17] phi()
[18] call sprites_irq_init
[18] phi()
[19] call sprites_irq_init
to:main::@2
main::@2: scope:[main] from main::@2 main::@9
[19] *((const byte*) PLAYFIELD_SCREEN_1#0) ← ++ *((const byte*) PLAYFIELD_SCREEN_1#0)
[20] *((const byte*) PLAYFIELD_SCREEN_1#0) ← ++ *((const byte*) PLAYFIELD_SCREEN_1#0)
to:main::@2
sprites_irq_init: scope:[sprites_irq_init] from main::@9
asm { sei }
[21] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[22] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
asm { ldaCIA1_INTERRUPT }
[23] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[24] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[25] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[26] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) 127
[27] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0
[28] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[29] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) irq()
[24] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[25] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[26] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[27] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) 127
[28] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0
[29] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[30] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
asm { cli }
to:sprites_irq_init::@return
sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init
[31] return
[32] return
to:@return
sprites_init: scope:[sprites_init] from main::@8
[32] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 15
[33] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[34] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0)
[35] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0)
[33] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 15
[34] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[35] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0)
[36] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0)
to:sprites_init::@1
sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1
[36] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 24+(byte/signed byte/word/signed word/dword/signed dword) 15*(byte/signed byte/word/signed word/dword/signed dword) 8 sprites_init::@1/(byte) sprites_init::xpos#1 )
[36] (byte) sprites_init::s#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 0 sprites_init::@1/(byte) sprites_init::s#1 )
[37] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[38] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
[39] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0
[40] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) 24
[41] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2
[42] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1
[37] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 24+(byte/signed byte/word/signed word/dword/signed dword) 15*(byte/signed byte/word/signed word/dword/signed dword) 8 sprites_init::@1/(byte) sprites_init::xpos#1 )
[37] (byte) sprites_init::s#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 0 sprites_init::@1/(byte) sprites_init::s#1 )
[38] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[39] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
[40] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0
[41] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) 24
[42] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2
[43] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1
to:sprites_init::@return
sprites_init::@return: scope:[sprites_init] from sprites_init::@1
[43] return
[44] return
to:@return
irq: scope:[irq] from
[44] *((const byte*) BORDERCOL#0) ← (const byte) DARK_GREY#0
[45] (byte) irq::ypos#0 ← (byte) irq_sprite_ypos#0
[46] *((const byte*) SPRITES_YPOS#0) ← (byte) irq::ypos#0
[47] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) irq::ypos#0
[48] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) irq::ypos#0
[49] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) irq::ypos#0
to:irq::@1
irq::@1: scope:[irq] from irq irq::@1
[50] if(*((const byte*) RASTER#0)!=(byte) irq_sprite_ypos#0) goto irq::@1
to:irq::@5
irq::@5: scope:[irq] from irq::@1
[51] (byte) irq::ptr#0 ← (byte) irq_sprite_ptr#0
[52] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) irq::ptr#0
[53] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) irq::ptr#0
[54] (byte) irq::ptr#1 ← ++ (byte) irq::ptr#0
[55] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) irq::ptr#1
[56] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) irq::ptr#1
[57] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) irq::ptr#1
[58] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) irq::ptr#1
[59] (byte) irq::ptr#2 ← ++ (byte) irq::ptr#1
[60] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) irq::ptr#2
[61] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) irq::ptr#2
[62] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0
[63] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 10) goto irq::@2
to:irq::@6
irq::@6: scope:[irq] from irq::@5
[64] (byte) irq_raster_next#2 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[65] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[66] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3
to:irq::@3
irq::@3: scope:[irq] from irq::@6 irq::@9
[67] (byte) irq_raster_next#12 ← phi( irq::@6/(byte) irq_raster_next#2 irq::@9/(byte) irq_raster_next#1 )
[68] (byte) irq::raster_next#0 ← (byte) irq_raster_next#12
[69] (byte~) irq::$3 ← (byte) irq::raster_next#0 & (byte/signed byte/word/signed word/dword/signed dword) 7
[70] if((byte~) irq::$3!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto irq::@4
to:irq::@8
irq::@8: scope:[irq] from irq::@3
[71] (byte) irq::raster_next#1 ← (byte) irq::raster_next#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
to:irq::@4
irq::@4: scope:[irq] from irq::@3 irq::@8
[72] (byte) irq::raster_next#2 ← phi( irq::@3/(byte) irq::raster_next#0 irq::@8/(byte) irq::raster_next#1 )
[73] *((const byte*) RASTER#0) ← (byte) irq::raster_next#2
[74] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[75] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
to:irq::@return
irq::@return: scope:[irq] from irq::@4
[76] return
sprites_irq: scope:[sprites_irq] from
[45] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0
[46] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0
[47] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ypos#0
[48] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) sprites_irq::ypos#0
[49] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) sprites_irq::ypos#0
to:sprites_irq::@1
sprites_irq::@1: scope:[sprites_irq] from sprites_irq sprites_irq::@1
[50] if(*((const byte*) RASTER#0)<(byte) irq_sprite_ypos#0) goto sprites_irq::@1
to:sprites_irq::@7
sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@1
[51] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0
[52] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@2
to:sprites_irq::@8
sprites_irq::@8: scope:[sprites_irq] from sprites_irq::@7
[53] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0
[54] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0
[55] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3
[56] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3
[57] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3
[58] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#4
to:sprites_irq::@3
sprites_irq::@3: scope:[sprites_irq] from sprites_irq::@2 sprites_irq::@8
[59] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0
[60] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 10) goto sprites_irq::@4
to:sprites_irq::@10
sprites_irq::@10: scope:[sprites_irq] from sprites_irq::@3
[61] (byte) irq_raster_next#2 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[62] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[63] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3
to:sprites_irq::@5
sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@10 sprites_irq::@13
[64] (byte) irq_raster_next#13 ← phi( sprites_irq::@10/(byte) irq_raster_next#2 sprites_irq::@13/(byte) irq_raster_next#1 )
[65] (byte) sprites_irq::raster_next#0 ← (byte) irq_raster_next#13
[66] (byte~) sprites_irq::$4 ← (byte) sprites_irq::raster_next#0 & (byte/signed byte/word/signed word/dword/signed dword) 7
[67] if((byte~) sprites_irq::$4!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto sprites_irq::@6
to:sprites_irq::@12
sprites_irq::@12: scope:[sprites_irq] from sprites_irq::@5
[68] (byte) sprites_irq::raster_next#1 ← (byte) sprites_irq::raster_next#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
to:sprites_irq::@6
sprites_irq::@6: scope:[sprites_irq] from sprites_irq::@12 sprites_irq::@5
[69] (byte) sprites_irq::raster_next#2 ← phi( sprites_irq::@12/(byte) sprites_irq::raster_next#1 sprites_irq::@5/(byte) sprites_irq::raster_next#0 )
[70] *((const byte*) RASTER#0) ← (byte) sprites_irq::raster_next#2
[71] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:sprites_irq::@return
sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@6
[72] return
to:@return
irq::@2: scope:[irq] from irq::@5
[77] (byte) irq_cnt#13 ← (byte/signed byte/word/signed word/dword/signed dword) 0
[78] (byte) irq_raster_next#1 ← (const byte) IRQ_RASTER_FIRST#0
[79] (byte) irq_sprite_ypos#1 ← (byte/signed byte/word/signed word/dword/signed dword) 50
to:irq::toSpritePtr2
irq::toSpritePtr2: scope:[irq] from irq::@2
[80] phi()
to:irq::@9
irq::@9: scope:[irq] from irq::toSpritePtr2
[81] (byte) irq_sprite_ptr#1 ← (const byte) irq::toSpritePtr2_return#0
to:irq::@3
sprites_irq::@4: scope:[sprites_irq] from sprites_irq::@3
[73] (byte) irq_cnt#14 ← (byte/signed byte/word/signed word/dword/signed dword) 0
[74] (byte) irq_raster_next#1 ← (const byte) IRQ_RASTER_FIRST#0
[75] (byte) irq_sprite_ypos#1 ← (byte/signed byte/word/signed word/dword/signed dword) 50
to:sprites_irq::toSpritePtr2
sprites_irq::toSpritePtr2: scope:[sprites_irq] from sprites_irq::@4
[76] phi()
to:sprites_irq::@13
sprites_irq::@13: scope:[sprites_irq] from sprites_irq::toSpritePtr2
[77] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0
to:sprites_irq::@5
sprites_irq::@2: scope:[sprites_irq] from sprites_irq::@7
[78] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0
[79] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0
[80] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1
[81] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1
[82] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1
[83] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2
to:sprites_irq::@3

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,6 @@
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
@ -38,7 +37,6 @@
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(const byte) DARK_GREY#0 DARK_GREY = (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
@ -132,51 +130,23 @@
(byte*) current_piece_gfx
(byte) current_xpos
(byte) current_ypos
interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte~) irq::$3 reg byte a 4.0
(label) irq::@1
(label) irq::@2
(label) irq::@3
(label) irq::@4
(label) irq::@5
(label) irq::@6
(label) irq::@8
(label) irq::@9
(label) irq::@return
(byte) irq::ptr
(byte) irq::ptr#0 reg byte a 2.6666666666666665
(byte) irq::ptr#1 reg byte x 2.4
(byte) irq::ptr#2 reg byte x 3.0
(byte) irq::raster_next
(byte) irq::raster_next#0 reg byte x 2.6666666666666665
(byte) irq::raster_next#1 reg byte x 4.0
(byte) irq::raster_next#2 reg byte x 6.0
(label) irq::toSpritePtr2
(word~) irq::toSpritePtr2_$0
(word~) irq::toSpritePtr2_$1
(byte~) irq::toSpritePtr2_$2
(byte) irq::toSpritePtr2_return
(const byte) irq::toSpritePtr2_return#0 toSpritePtr2_return = ((byte))((word))(const byte*) PLAYFIELD_SPRITES#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) irq::toSpritePtr2_sprite
(byte) irq::ypos
(byte) irq::ypos#0 reg byte a 2.5
(byte) irq_cnt
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:6 0.2222222222222222
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:6 4.0
(byte) irq_cnt#13 irq_cnt zp ZP_BYTE:6 20.0
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:7 0.2
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:7 4.0
(byte) irq_cnt#14 irq_cnt zp ZP_BYTE:7 20.0
(byte) irq_raster_next
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:3 0.2
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:3 0.18181818181818182
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:3 1.0
(byte) irq_raster_next#12 irq_raster_next zp ZP_BYTE:3 6.0
(byte) irq_raster_next#13 irq_raster_next zp ZP_BYTE:3 6.0
(byte) irq_raster_next#2 irq_raster_next zp ZP_BYTE:3 1.3333333333333333
(byte) irq_sprite_ptr
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:5 0.2727272727272727
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:5 20.0
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:5 20.0
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:6 0.25
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:6 20.0
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:6 20.0
(byte) irq_sprite_ypos
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:4 0.8095238095238095
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:4 20.0
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:4 20.0
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:5 0.7391304347826086
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:5 20.0
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:5 20.0
(void()) main()
(label) main::@2
(label) main::@8
@ -208,6 +178,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) main::vicSelectGfxBank1_toDd001_return
(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte/signed byte/word/signed word/dword/signed dword) 3^>((word))(const byte*) PLAYFIELD_SCREEN_1#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield
(byte) render_screen_render
(byte) render_screen_show
(byte) render_screen_showing
(byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:4 0.5714285714285714
(void()) sprites_init()
(label) sprites_init::@1
(label) sprites_init::@return
@ -219,6 +193,39 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) sprites_init::xpos
(byte) sprites_init::xpos#1 xpos zp ZP_BYTE:2 7.333333333333333
(byte) sprites_init::xpos#2 xpos zp ZP_BYTE:2 8.25
interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
(byte~) sprites_irq::$4 reg byte a 4.0
(label) sprites_irq::@1
(label) sprites_irq::@10
(label) sprites_irq::@12
(label) sprites_irq::@13
(label) sprites_irq::@2
(label) sprites_irq::@3
(label) sprites_irq::@4
(label) sprites_irq::@5
(label) sprites_irq::@6
(label) sprites_irq::@7
(label) sprites_irq::@8
(label) sprites_irq::@return
(byte) sprites_irq::ptr
(byte) sprites_irq::ptr#0 reg byte x 2.5
(byte) sprites_irq::ptr#1 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#2 reg byte a 4.0
(byte) sprites_irq::ptr#3 reg byte x 2.6666666666666665
(byte) sprites_irq::ptr#4 reg byte x 4.0
(byte) sprites_irq::raster_next
(byte) sprites_irq::raster_next#0 reg byte x 2.6666666666666665
(byte) sprites_irq::raster_next#1 reg byte x 4.0
(byte) sprites_irq::raster_next#2 reg byte x 6.0
(label) sprites_irq::toSpritePtr2
(word~) sprites_irq::toSpritePtr2_$0
(word~) sprites_irq::toSpritePtr2_$1
(byte~) sprites_irq::toSpritePtr2_$2
(byte) sprites_irq::toSpritePtr2_return
(const byte) sprites_irq::toSpritePtr2_return#0 toSpritePtr2_return = ((byte))((word))(const byte*) PLAYFIELD_SPRITES#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) sprites_irq::toSpritePtr2_sprite
(byte) sprites_irq::ypos
(byte) sprites_irq::ypos#0 reg byte a 2.5
(void()) sprites_irq_init()
(label) sprites_irq_init::@return
(label) toSpritePtr1
@ -231,14 +238,17 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
reg byte x [ sprites_init::s#2 sprites_init::s#1 ]
zp ZP_BYTE:2 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
zp ZP_BYTE:3 [ irq_raster_next#12 irq_raster_next#2 irq_raster_next#1 irq_raster_next#0 ]
reg byte x [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ]
zp ZP_BYTE:4 [ irq_sprite_ypos#0 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
zp ZP_BYTE:5 [ irq_sprite_ptr#0 irq_sprite_ptr#2 irq_sprite_ptr#1 ]
zp ZP_BYTE:6 [ irq_cnt#0 irq_cnt#1 irq_cnt#13 ]
zp ZP_BYTE:3 [ irq_raster_next#13 irq_raster_next#2 irq_raster_next#1 irq_raster_next#0 ]
reg byte x [ sprites_irq::raster_next#2 sprites_irq::raster_next#1 sprites_irq::raster_next#0 ]
zp ZP_BYTE:4 [ render_screen_showing#0 ]
zp ZP_BYTE:5 [ irq_sprite_ypos#0 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
zp ZP_BYTE:6 [ irq_sprite_ptr#0 irq_sprite_ptr#2 irq_sprite_ptr#1 ]
zp ZP_BYTE:7 [ irq_cnt#0 irq_cnt#1 irq_cnt#14 ]
reg byte a [ sprites_init::s2#0 ]
reg byte a [ irq::ypos#0 ]
reg byte a [ irq::ptr#0 ]
reg byte x [ irq::ptr#1 ]
reg byte x [ irq::ptr#2 ]
reg byte a [ irq::$3 ]
reg byte a [ sprites_irq::ypos#0 ]
reg byte x [ sprites_irq::ptr#0 ]
reg byte x [ sprites_irq::ptr#3 ]
reg byte x [ sprites_irq::ptr#4 ]
reg byte a [ sprites_irq::$4 ]
reg byte a [ sprites_irq::ptr#1 ]
reg byte a [ sprites_irq::ptr#2 ]

View File

@ -78,10 +78,11 @@
.label PLAYFIELD_SPRITE_PTRS_2 = PLAYFIELD_SCREEN_2+SPRITE_PTRS
.const toSpritePtr1_return = PLAYFIELD_SPRITES>>6
.label keyboard_events_size = $16
.label render_screen_showing = $18
.label irq_raster_next = $17
.label irq_sprite_ypos = $18
.label irq_sprite_ptr = $19
.label irq_cnt = $1a
.label irq_sprite_ypos = $19
.label irq_sprite_ptr = $1a
.label irq_cnt = $1b
.label current_movedown_counter = 4
.label current_ypos = $e
.label current_piece_gfx = $12
@ -92,22 +93,21 @@
.label render_screen_show = 2
.label current_piece = $f
.label current_piece_12 = 7
.label render_screen_render_27 = 5
.label render_screen_render_28 = 5
.label current_xpos_47 = 6
.label current_piece_gfx_52 = 7
.label current_piece_char_62 = 9
.label render_screen_render_68 = 5
.label current_xpos_109 = 6
.label current_piece_gfx_53 = 7
.label render_screen_render_62 = 5
.label current_xpos_110 = 6
.label current_piece_gfx_99 = 7
.label current_xpos_111 = 6
.label current_piece_gfx_100 = 7
.label current_piece_char_87 = 9
.label current_piece_char_88 = 9
.label current_piece_73 = 7
.label current_piece_gfx_101 = 7
.label current_piece_74 = 7
.label current_piece_75 = 7
.label current_piece_76 = 7
.label current_piece_77 = 7
bbegin:
lda #0
sta render_screen_showing
lda #IRQ_RASTER_FIRST
sta irq_raster_next
lda #$32
@ -119,7 +119,7 @@ bbegin:
jsr main
main: {
.label key_event = $d
.label render = $1b
.label render = $1c
jsr sid_rnd_init
sei
jsr render_init
@ -129,17 +129,16 @@ main: {
jsr play_spawn_current
ldx #$40
jsr render_playfield
ldx current_ypos
ldy current_ypos
lda current_xpos
sta current_xpos_109
sta current_xpos_110
lda current_piece_gfx
sta current_piece_gfx_99
sta current_piece_gfx_100
lda current_piece_gfx+1
sta current_piece_gfx_99+1
lda current_piece_char
sta current_piece_char_87
sta current_piece_gfx_100+1
ldx current_piece_char
lda #$40
sta render_screen_render_27
sta render_screen_render_28
jsr render_current
ldy play_spawn_current._3
lda PIECES,y
@ -158,12 +157,6 @@ main: {
lda RASTER
cmp #$ff
bne b4
lda render_screen_show
lsr
lsr
lsr
lsr
sta BORDERCOL
jsr render_show
jsr keyboard_event_scan
jsr keyboard_event_get
@ -183,25 +176,21 @@ main: {
clc
adc render
cmp #0
beq b7
beq b4
ldx render_screen_render
jsr render_playfield
ldx current_ypos
ldy current_ypos
lda render_screen_render
sta render_screen_render_68
sta render_screen_render_62
lda current_xpos
sta current_xpos_110
sta current_xpos_111
lda current_piece_gfx
sta current_piece_gfx_100
sta current_piece_gfx_101
lda current_piece_gfx+1
sta current_piece_gfx_100+1
lda current_piece_char
sta current_piece_char_88
sta current_piece_gfx_101+1
ldx current_piece_char
jsr render_current
jsr render_screen_swap
b7:
lda #0
sta BORDERCOL
jmp b4
}
render_screen_swap: {
@ -214,12 +203,13 @@ render_screen_swap: {
rts
}
render_current: {
.label ypos2 = $a
.label screen_line = $1c
.label xpos = $d
.label i = $c
.label l = $b
txa
.label ypos2 = 9
.label screen_line = $1d
.label xpos = $c
.label i = $b
.label l = $a
.label c = $d
tya
asl
sta ypos2
lda #0
@ -252,7 +242,7 @@ render_current: {
bcc b2
jmp b7
b2:
lda render_screen_render_27
lda render_screen_render_28
clc
adc ypos2
tay
@ -262,23 +252,25 @@ render_current: {
sta screen_line+1
lda current_xpos_47
sta xpos
ldx #0
lda #0
sta c
b4:
ldy i
lda (current_piece_gfx_52),y
lda (current_piece_gfx_53),y
inc i
cmp #0
beq b5
lda xpos
cmp #PLAYFIELD_COLS
bcs b5
lda current_piece_char_62
ldy xpos
tay
txa
sta (screen_line),y
b5:
inc xpos
inx
cpx #4
inc c
lda c
cmp #4
bne b4
jmp b3
}
@ -346,9 +338,9 @@ play_move_rotate: {
ldy current_ypos
ldx orientation
lda current_piece
sta current_piece_76
sta current_piece_77
lda current_piece+1
sta current_piece_76+1
sta current_piece_77+1
jsr play_collision
cmp #COLLISION_NONE
bne b3
@ -374,8 +366,8 @@ play_collision: {
.label xpos = 6
.label piece_gfx = 7
.label ypos2 = 9
.label playfield_line = $1c
.label i = $1e
.label playfield_line = $1d
.label i = $1f
.label col = $c
.label l = $a
.label i_2 = $b
@ -473,9 +465,9 @@ play_move_leftright: {
ldy current_ypos
ldx current_orientation
lda current_piece
sta current_piece_75
sta current_piece_76
lda current_piece+1
sta current_piece_75+1
sta current_piece_76+1
jsr play_collision
cmp #COLLISION_NONE
bne b3
@ -494,9 +486,9 @@ play_move_leftright: {
ldy current_ypos
ldx current_orientation
lda current_piece
sta current_piece_74
sta current_piece_75
lda current_piece+1
sta current_piece_74+1
sta current_piece_75+1
jsr play_collision
cmp #COLLISION_NONE
bne b3
@ -535,9 +527,9 @@ play_move_down: {
sta play_collision.xpos
ldx current_orientation
lda current_piece
sta current_piece_73
sta current_piece_74
lda current_piece+1
sta current_piece_73+1
sta current_piece_74+1
jsr play_collision
cmp #COLLISION_NONE
beq b6
@ -847,6 +839,8 @@ render_show: {
lda #toD0182_return
b2:
sta D018
lda render_screen_show
sta render_screen_showing
rts
toD0181:
lda #toD0181_return
@ -908,9 +902,9 @@ sprites_irq_init: {
sta RASTER
lda #IRQ_RASTER
sta IRQ_ENABLE
lda #<irq
lda #<sprites_irq
sta HARDWARE_IRQ
lda #>irq
lda #>sprites_irq
sta HARDWARE_IRQ+1
cli
rts
@ -957,6 +951,7 @@ render_init: {
lda #VIC_ECM|VIC_DEN|VIC_RSEL|3
sta D011
lda #BLACK
sta BORDERCOL
sta BGCOL1
lda #BLUE
sta BGCOL2
@ -1159,12 +1154,10 @@ sid_rnd_init: {
sta SID_VOICE3_CONTROL
rts
}
irq: {
sprites_irq: {
.const toSpritePtr2_return = PLAYFIELD_SPRITES>>6
sta rega+1
stx regx+1
lda #DARK_GREY
sta BORDERCOL
lda irq_sprite_ypos
sta SPRITES_YPOS
sta SPRITES_YPOS+2
@ -1173,23 +1166,22 @@ irq: {
b1:
lda RASTER
cmp irq_sprite_ypos
bne b1
lda irq_sprite_ptr
sta PLAYFIELD_SPRITE_PTRS_1
sta PLAYFIELD_SPRITE_PTRS_2
tax
bcc b1
ldx irq_sprite_ptr
lda render_screen_showing
cmp #0
beq b2
stx PLAYFIELD_SPRITE_PTRS_2
inx
stx PLAYFIELD_SPRITE_PTRS_1+1
stx PLAYFIELD_SPRITE_PTRS_2+1
stx PLAYFIELD_SPRITE_PTRS_1+2
stx PLAYFIELD_SPRITE_PTRS_2+2
inx
stx PLAYFIELD_SPRITE_PTRS_1+3
stx PLAYFIELD_SPRITE_PTRS_2+3
b3:
inc irq_cnt
lda irq_cnt
cmp #$a
beq b2
beq b4
lda #$15
clc
adc irq_raster_next
@ -1202,25 +1194,23 @@ irq: {
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
b3:
b5:
ldx irq_raster_next
txa
and #7
cmp #3
bne b4
bne b6
dex
b4:
b6:
stx RASTER
lda #IRQ_RASTER
sta IRQ_STATUS
lda #BLACK
sta BORDERCOL
rega:
lda #00
regx:
ldx #00
rti
b2:
b4:
lda #0
sta irq_cnt
lda #IRQ_RASTER_FIRST
@ -1229,6 +1219,17 @@ irq: {
sta irq_sprite_ypos
lda #toSpritePtr2_return
sta irq_sprite_ptr
jmp b5
b2:
stx PLAYFIELD_SPRITE_PTRS_1
txa
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_1+1
sta PLAYFIELD_SPRITE_PTRS_1+2
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b3
}
keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -279,53 +279,53 @@
(byte) YELLOW
(byte) current_movedown_counter
(byte) current_movedown_counter#1 current_movedown_counter zp ZP_BYTE:4 0.5333333333333333
(byte) current_movedown_counter#10 current_movedown_counter zp ZP_BYTE:4 0.4482758620689655
(byte) current_movedown_counter#12 current_movedown_counter zp ZP_BYTE:4 1.0833333333333333
(byte) current_movedown_counter#10 current_movedown_counter zp ZP_BYTE:4 4.222222222222222
(byte) current_movedown_counter#12 current_movedown_counter zp ZP_BYTE:4 10.363636363636363
(byte) current_movedown_fast
(const byte) current_movedown_fast#0 current_movedown_fast = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) current_movedown_slow
(const byte) current_movedown_slow#0 current_movedown_slow = (byte/signed byte/word/signed word/dword/signed dword) 50
(byte) current_orientation
(byte) current_orientation#10 current_orientation zp ZP_BYTE:17 0.4722222222222223
(byte) current_orientation#10 current_orientation zp ZP_BYTE:17 3.371428571428571
(byte) current_orientation#14 current_orientation zp ZP_BYTE:17 0.32653061224489793
(byte) current_orientation#19 current_orientation zp ZP_BYTE:17 0.8947368421052632
(byte) current_orientation#19 current_orientation zp ZP_BYTE:17 6.941176470588235
(byte) current_orientation#29 current_orientation zp ZP_BYTE:17 4.0
(byte) current_orientation#4 current_orientation zp ZP_BYTE:17 3.0
(byte*) current_piece
(byte*) current_piece#10 current_piece zp ZP_WORD:15 0.3285714285714286
(byte*) current_piece#10 current_piece zp ZP_WORD:15 1.8235294117647054
(byte*) current_piece#12 current_piece#12 zp ZP_WORD:7 10.0
(byte*) current_piece#16 current_piece zp ZP_WORD:15 0.5277777777777779
(byte*) current_piece#16 current_piece zp ZP_WORD:15 3.428571428571428
(byte*) current_piece#20 current_piece zp ZP_WORD:15 6.0
(byte*~) current_piece#71 current_piece zp ZP_WORD:15 4.0
(byte*~) current_piece#73 current_piece#73 zp ZP_WORD:7 4.0
(byte*~) current_piece#74 current_piece#74 zp ZP_WORD:7 4.0
(byte*~) current_piece#75 current_piece#75 zp ZP_WORD:7 4.0
(byte*~) current_piece#76 current_piece#76 zp ZP_WORD:7 4.0
(byte*~) current_piece#77 current_piece zp ZP_WORD:15 4.0
(byte*~) current_piece#77 current_piece#77 zp ZP_WORD:7 4.0
(byte*~) current_piece#78 current_piece zp ZP_WORD:15 4.0
(byte) current_piece_char
(byte) current_piece_char#1 current_piece_char zp ZP_BYTE:21 0.896551724137931
(byte) current_piece_char#1 current_piece_char zp ZP_BYTE:21 4.703703703703704
(byte) current_piece_char#12 current_piece_char zp ZP_BYTE:21 0.6153846153846154
(byte) current_piece_char#15 current_piece_char zp ZP_BYTE:21 19.20754716981132
(byte) current_piece_char#15 current_piece_char zp ZP_BYTE:21 194.59615384615384
(byte) current_piece_char#20 current_piece_char zp ZP_BYTE:21 6.0
(byte) current_piece_char#62 current_piece_char#62 zp ZP_BYTE:9 46.09090909090909
(byte~) current_piece_char#87 current_piece_char#87 zp ZP_BYTE:9 4.0
(byte~) current_piece_char#88 current_piece_char#88 zp ZP_BYTE:9 22.0
(byte) current_piece_char#63 reg byte x 46.09090909090909
(byte~) current_piece_char#88 reg byte x 4.0
(byte~) current_piece_char#89 reg byte x 22.0
(byte*) current_piece_gfx
(byte*) current_piece_gfx#1 current_piece_gfx zp ZP_WORD:18 0.2962962962962963
(byte*~) current_piece_gfx#100 current_piece_gfx#100 zp ZP_WORD:7 11.0
(byte*) current_piece_gfx#14 current_piece_gfx zp ZP_WORD:18 1.4736842105263155
(byte*~) current_piece_gfx#100 current_piece_gfx#100 zp ZP_WORD:7 2.0
(byte*~) current_piece_gfx#101 current_piece_gfx#101 zp ZP_WORD:7 11.0
(byte*) current_piece_gfx#14 current_piece_gfx zp ZP_WORD:18 7.588235294117647
(byte*) current_piece_gfx#16 current_piece_gfx zp ZP_WORD:18 0.5
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:18 19.20754716981132
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:18 194.59615384615384
(byte*) current_piece_gfx#26 current_piece_gfx zp ZP_WORD:18 6.0
(byte*) current_piece_gfx#3 current_piece_gfx zp ZP_WORD:18 4.0
(byte*) current_piece_gfx#52 current_piece_gfx#52 zp ZP_WORD:7 46.09090909090909
(byte*~) current_piece_gfx#99 current_piece_gfx#99 zp ZP_WORD:7 2.0
(byte*) current_piece_gfx#53 current_piece_gfx#53 zp ZP_WORD:7 46.09090909090909
(byte) current_xpos
(byte) current_xpos#1 current_xpos zp ZP_BYTE:20 0.72
(byte) current_xpos#10 current_xpos zp ZP_BYTE:20 2.2641509433962264
(byte~) current_xpos#109 current_xpos#109 zp ZP_BYTE:6 1.3333333333333333
(byte~) current_xpos#110 current_xpos#110 zp ZP_BYTE:6 7.333333333333333
(byte) current_xpos#19 current_xpos zp ZP_BYTE:20 0.7906976744186045
(byte) current_xpos#10 current_xpos zp ZP_BYTE:20 21.557692307692307
(byte~) current_xpos#110 current_xpos#110 zp ZP_BYTE:6 1.3333333333333333
(byte~) current_xpos#111 current_xpos#111 zp ZP_BYTE:6 7.333333333333333
(byte) current_xpos#19 current_xpos zp ZP_BYTE:20 3.2926829268292686
(byte) current_xpos#2 current_xpos zp ZP_BYTE:20 4.0
(byte) current_xpos#23 current_xpos zp ZP_BYTE:20 0.5333333333333333
(byte) current_xpos#33 current_xpos zp ZP_BYTE:20 6.0
@ -333,13 +333,13 @@
(byte) current_xpos#47 current_xpos#47 zp ZP_BYTE:6 5.181818181818182
(byte) current_ypos
(byte) current_ypos#0 current_ypos zp ZP_BYTE:14 4.0
(byte) current_ypos#13 current_ypos zp ZP_BYTE:14 0.4571428571428572
(byte) current_ypos#13 current_ypos zp ZP_BYTE:14 1.9558823529411762
(byte) current_ypos#18 current_ypos zp ZP_BYTE:14 0.5714285714285714
(byte) current_ypos#21 current_ypos zp ZP_BYTE:14 0.5833333333333335
(byte) current_ypos#21 current_ypos zp ZP_BYTE:14 3.485714285714285
(byte) current_ypos#29 current_ypos zp ZP_BYTE:14 6.0
(byte~) current_ypos#83 reg byte x 1.0
(byte~) current_ypos#84 reg byte x 4.4
(byte) current_ypos#9 reg byte x 15.0
(byte~) current_ypos#84 reg byte y 1.0
(byte~) current_ypos#85 reg byte y 4.4
(byte) current_ypos#9 reg byte y 15.0
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
@ -352,59 +352,31 @@
(const word) fill::size#0 size = (word/signed word/dword/signed dword) 1000
(byte*) fill::start
(byte) fill::val
interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte~) irq::$3 reg byte a 4.0
(label) irq::@1
(label) irq::@2
(label) irq::@3
(label) irq::@4
(label) irq::@5
(label) irq::@6
(label) irq::@8
(label) irq::@9
(label) irq::@return
(byte) irq::ptr
(byte) irq::ptr#0 reg byte a 2.6666666666666665
(byte) irq::ptr#1 reg byte x 2.4
(byte) irq::ptr#2 reg byte x 3.0
(byte) irq::raster_next
(byte) irq::raster_next#0 reg byte x 2.6666666666666665
(byte) irq::raster_next#1 reg byte x 4.0
(byte) irq::raster_next#2 reg byte x 6.0
(label) irq::toSpritePtr2
(word~) irq::toSpritePtr2_$0
(word~) irq::toSpritePtr2_$1
(byte~) irq::toSpritePtr2_$2
(byte) irq::toSpritePtr2_return
(const byte) irq::toSpritePtr2_return#0 toSpritePtr2_return = ((byte))((word))(const byte*) PLAYFIELD_SPRITES#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) irq::toSpritePtr2_sprite
(byte) irq::ypos
(byte) irq::ypos#0 reg byte a 2.5
(byte) irq_cnt
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:26 0.2222222222222222
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:26 4.0
(byte) irq_cnt#13 irq_cnt zp ZP_BYTE:26 20.0
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:27 0.2
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:27 4.0
(byte) irq_cnt#14 irq_cnt zp ZP_BYTE:27 20.0
(byte) irq_raster_next
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:23 0.2
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:23 0.18181818181818182
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:23 1.0
(byte) irq_raster_next#12 irq_raster_next zp ZP_BYTE:23 6.0
(byte) irq_raster_next#13 irq_raster_next zp ZP_BYTE:23 6.0
(byte) irq_raster_next#2 irq_raster_next zp ZP_BYTE:23 1.3333333333333333
(byte) irq_sprite_ptr
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:25 0.2727272727272727
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:25 20.0
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:25 20.0
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:26 0.25
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:26 20.0
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:26 20.0
(byte) irq_sprite_ypos
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:24 0.8095238095238095
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:24 20.0
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:24 20.0
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:25 0.7391304347826086
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:25 20.0
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:25 20.0
(byte[]) keyboard_char_keycodes
(byte()) keyboard_event_get()
(label) keyboard_event_get::@3
(label) keyboard_event_get::@return
(byte) keyboard_event_get::return
(byte) keyboard_event_get::return#1 reg byte a 4.0
(byte) keyboard_event_get::return#2 reg byte a 4.333333333333333
(byte) keyboard_event_get::return#3 reg byte a 22.0
(byte) keyboard_event_get::return#2 reg byte a 34.33333333333333
(byte) keyboard_event_get::return#3 reg byte a 202.0
(byte()) keyboard_event_pressed((byte) keyboard_event_pressed::keycode)
(byte~) keyboard_event_pressed::$0 reg byte a 4.0
(byte~) keyboard_event_pressed::$1 reg byte a 4.0
@ -421,13 +393,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) keyboard_event_pressed::row_bits
(byte) keyboard_event_pressed::row_bits#0 row_bits zp ZP_BYTE:6 2.0
(void()) keyboard_event_scan()
(byte/word/dword~) keyboard_event_scan::$11 reg byte a 2002.0
(byte/word/dword~) keyboard_event_scan::$11 reg byte a 20002.0
(byte~) keyboard_event_scan::$14 reg byte a 4.0
(byte~) keyboard_event_scan::$18 reg byte a 4.0
(byte~) keyboard_event_scan::$22 reg byte a 4.0
(byte~) keyboard_event_scan::$26 reg byte a 4.0
(byte~) keyboard_event_scan::$3 reg byte a 2002.0
(byte~) keyboard_event_scan::$4 reg byte a 2002.0
(byte~) keyboard_event_scan::$3 reg byte a 20002.0
(byte~) keyboard_event_scan::$4 reg byte a 20002.0
(label) keyboard_event_scan::@1
(label) keyboard_event_scan::@10
(label) keyboard_event_scan::@11
@ -453,43 +425,43 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) keyboard_event_scan::@9
(label) keyboard_event_scan::@return
(byte) keyboard_event_scan::col
(byte) keyboard_event_scan::col#1 reg byte x 1501.5
(byte) keyboard_event_scan::col#2 reg byte x 286.0
(byte) keyboard_event_scan::col#1 reg byte x 15001.5
(byte) keyboard_event_scan::col#2 reg byte x 2857.4285714285716
(byte) keyboard_event_scan::event_type
(byte) keyboard_event_scan::event_type#0 reg byte a 2002.0
(byte) keyboard_event_scan::event_type#0 reg byte a 20002.0
(byte) keyboard_event_scan::keycode
(byte) keyboard_event_scan::keycode#1 keycode zp ZP_BYTE:6 202.0
(byte) keyboard_event_scan::keycode#10 keycode zp ZP_BYTE:6 315.7692307692308
(byte) keyboard_event_scan::keycode#11 keycode zp ZP_BYTE:6 50.5
(byte) keyboard_event_scan::keycode#14 keycode zp ZP_BYTE:6 101.0
(byte) keyboard_event_scan::keycode#15 keycode zp ZP_BYTE:6 525.75
(byte) keyboard_event_scan::keycode#1 keycode zp ZP_BYTE:6 2002.0
(byte) keyboard_event_scan::keycode#10 keycode zp ZP_BYTE:6 3154.230769230769
(byte) keyboard_event_scan::keycode#11 keycode zp ZP_BYTE:6 500.5
(byte) keyboard_event_scan::keycode#14 keycode zp ZP_BYTE:6 1001.0
(byte) keyboard_event_scan::keycode#15 keycode zp ZP_BYTE:6 5250.75
(byte) keyboard_event_scan::row
(byte) keyboard_event_scan::row#1 row zp ZP_BYTE:5 151.5
(byte) keyboard_event_scan::row#2 row zp ZP_BYTE:5 60.24
(byte) keyboard_event_scan::row#1 row zp ZP_BYTE:5 1501.5
(byte) keyboard_event_scan::row#2 row zp ZP_BYTE:5 600.24
(byte) keyboard_event_scan::row_scan
(byte) keyboard_event_scan::row_scan#0 row_scan zp ZP_BYTE:9 128.05555555555557
(byte) keyboard_event_scan::row_scan#0 row_scan zp ZP_BYTE:9 1278.0555555555554
(byte[8]) keyboard_events
(const byte[8]) keyboard_events#0 keyboard_events = { fill( 8, 0) }
(byte) keyboard_events_size
(byte) keyboard_events_size#1 keyboard_events_size zp ZP_BYTE:22 2002.0
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:22 810.9000000000001
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:22 9.967741935483872
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:22 0.45454545454545453
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:22 1.8571428571428572
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:22 2002.0
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:22 43.57142857142858
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:22 1021.2
(byte) keyboard_events_size#1 keyboard_events_size zp ZP_BYTE:22 20002.0
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:22 8100.9000000000015
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:22 97.06451612903226
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:22 3.741935483870968
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:22 18.999999999999996
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:22 20002.0
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:22 429.2857142857143
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:22 10201.2
(byte) keyboard_events_size#4 keyboard_events_size zp ZP_BYTE:22 3.0
(byte[8]) keyboard_matrix_col_bitmask
(const byte[8]) keyboard_matrix_col_bitmask#0 keyboard_matrix_col_bitmask = { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/word/signed word/dword/signed dword) 128 }
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
(label) keyboard_matrix_read::@return
(byte) keyboard_matrix_read::return
(byte) keyboard_matrix_read::return#0 reg byte a 34.33333333333333
(byte) keyboard_matrix_read::return#2 reg byte a 202.0
(byte) keyboard_matrix_read::return#0 reg byte a 334.33333333333337
(byte) keyboard_matrix_read::return#2 reg byte a 2002.0
(byte) keyboard_matrix_read::row_pressed_bits
(byte) keyboard_matrix_read::rowid
(byte) keyboard_matrix_read::rowid#0 reg byte x 103.0
(byte) keyboard_matrix_read::rowid#0 reg byte x 1003.0
(byte[8]) keyboard_matrix_row_bitmask
(const byte[8]) keyboard_matrix_row_bitmask#0 keyboard_matrix_row_bitmask = { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 }
(byte) keyboard_modifiers
@ -502,10 +474,9 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte[8]) keyboard_scan_values
(const byte[8]) keyboard_scan_values#0 keyboard_scan_values = { fill( 8, 0) }
(void()) main()
(byte~) main::$13 reg byte a 22.0
(byte~) main::$14 reg byte a 22.0
(byte~) main::$15 reg byte a 22.0
(byte~) main::$9 reg byte a 22.0
(byte~) main::$12 reg byte a 202.0
(byte~) main::$13 reg byte a 202.0
(byte~) main::$14 reg byte a 202.0
(label) main::@1
(label) main::@13
(label) main::@15
@ -525,15 +496,14 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) main::@30
(label) main::@4
(label) main::@6
(label) main::@7
(byte) main::key_event
(byte) main::key_event#0 key_event zp ZP_BYTE:13 4.0
(byte) main::key_event#0 key_event zp ZP_BYTE:13 36.72727272727273
(byte) main::render
(byte) main::render#1 render zp ZP_BYTE:27 4.4
(byte) main::render#2 render zp ZP_BYTE:27 4.4
(byte) main::render#3 reg byte a 22.0
(byte) main::render#1 render zp ZP_BYTE:28 40.4
(byte) main::render#2 render zp ZP_BYTE:28 40.4
(byte) main::render#3 reg byte a 202.0
(byte()) play_collision((byte) play_collision::xpos , (byte) play_collision::ypos , (byte) play_collision::orientation)
(byte~) play_collision::$7 reg byte a 2002.0
(byte~) play_collision::$7 reg byte a 20002.0
(label) play_collision::@1
(label) play_collision::@17
(label) play_collision::@2
@ -546,21 +516,21 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) play_collision::@8
(label) play_collision::@return
(byte) play_collision::c
(byte) play_collision::c#1 reg byte x 1001.0
(byte) play_collision::c#2 reg byte x 222.44444444444446
(byte) play_collision::c#1 reg byte x 10001.0
(byte) play_collision::c#2 reg byte x 2222.4444444444443
(byte) play_collision::col
(byte) play_collision::col#1 col zp ZP_BYTE:12 500.5
(byte) play_collision::col#2 col zp ZP_BYTE:12 638.25
(byte~) play_collision::col#9 col zp ZP_BYTE:12 202.0
(byte) play_collision::col#1 col zp ZP_BYTE:12 5000.5
(byte) play_collision::col#2 col zp ZP_BYTE:12 6375.75
(byte~) play_collision::col#9 col zp ZP_BYTE:12 2002.0
(byte) play_collision::i
(byte) play_collision::i#1 i zp ZP_BYTE:30 161.76923076923077
(byte~) play_collision::i#11 i#11 zp ZP_BYTE:11 202.0
(byte~) play_collision::i#13 i#13 zp ZP_BYTE:11 2002.0
(byte) play_collision::i#2 i#2 zp ZP_BYTE:11 1552.0
(byte) play_collision::i#3 i#3 zp ZP_BYTE:11 67.33333333333333
(byte) play_collision::i#1 i zp ZP_BYTE:31 1615.6153846153845
(byte~) play_collision::i#11 i#11 zp ZP_BYTE:11 2002.0
(byte~) play_collision::i#13 i#13 zp ZP_BYTE:11 20002.0
(byte) play_collision::i#2 i#2 zp ZP_BYTE:11 15502.0
(byte) play_collision::i#3 i#3 zp ZP_BYTE:11 667.3333333333334
(byte) play_collision::l
(byte) play_collision::l#1 l zp ZP_BYTE:10 101.0
(byte) play_collision::l#6 l zp ZP_BYTE:10 12.625
(byte) play_collision::l#1 l zp ZP_BYTE:10 1001.0
(byte) play_collision::l#6 l zp ZP_BYTE:10 125.125
(byte) play_collision::orientation
(byte) play_collision::orientation#0 reg byte x 2.0
(byte) play_collision::orientation#1 reg byte x 2.0
@ -568,9 +538,9 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) play_collision::orientation#3 reg byte x 2.0
(byte) play_collision::orientation#4 reg byte x 10.0
(byte*) play_collision::piece_gfx
(byte*) play_collision::piece_gfx#0 piece_gfx zp ZP_WORD:7 47.76190476190476
(byte*) play_collision::piece_gfx#0 piece_gfx zp ZP_WORD:7 476.3333333333333
(byte*) play_collision::playfield_line
(byte*) play_collision::playfield_line#0 playfield_line zp ZP_WORD:28 78.71428571428571
(byte*) play_collision::playfield_line#0 playfield_line zp ZP_WORD:29 785.8571428571429
(byte) play_collision::return
(byte) play_collision::return#0 reg byte a 4.0
(byte) play_collision::return#1 reg byte a 4.0
@ -582,7 +552,7 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) play_collision::xpos#1 xpos zp ZP_BYTE:6 1.0
(byte) play_collision::xpos#2 xpos zp ZP_BYTE:6 1.0
(byte) play_collision::xpos#3 xpos zp ZP_BYTE:6 1.0
(byte) play_collision::xpos#5 xpos zp ZP_BYTE:6 4.954545454545454
(byte) play_collision::xpos#5 xpos zp ZP_BYTE:6 45.86363636363637
(byte) play_collision::ypos
(byte) play_collision::ypos#0 reg byte y 1.0
(byte) play_collision::ypos#1 reg byte y 1.3333333333333333
@ -591,8 +561,8 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) play_collision::ypos#4 reg byte y 5.0
(byte) play_collision::ypos2
(byte) play_collision::ypos2#0 ypos2 zp ZP_BYTE:9 4.0
(byte) play_collision::ypos2#1 ypos2 zp ZP_BYTE:9 50.5
(byte) play_collision::ypos2#2 ypos2 zp ZP_BYTE:9 87.06666666666668
(byte) play_collision::ypos2#1 ypos2 zp ZP_BYTE:9 500.5
(byte) play_collision::ypos2#2 ypos2 zp ZP_BYTE:9 867.0666666666667
(void()) play_init()
(byte~) play_init::$1 reg byte a 22.0
(label) play_init::@1
@ -617,27 +587,27 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) play_lock_current::@8
(label) play_lock_current::@return
(byte) play_lock_current::c
(byte) play_lock_current::c#1 reg byte x 1001.0
(byte) play_lock_current::c#2 reg byte x 400.4
(byte) play_lock_current::c#1 reg byte x 10001.0
(byte) play_lock_current::c#2 reg byte x 4000.4
(byte) play_lock_current::col
(byte) play_lock_current::col#0 col zp ZP_BYTE:6 202.0
(byte) play_lock_current::col#1 col zp ZP_BYTE:6 500.5
(byte) play_lock_current::col#2 col zp ZP_BYTE:6 776.0
(byte) play_lock_current::col#0 col zp ZP_BYTE:6 2002.0
(byte) play_lock_current::col#1 col zp ZP_BYTE:6 5000.5
(byte) play_lock_current::col#2 col zp ZP_BYTE:6 7751.0
(byte) play_lock_current::i
(byte) play_lock_current::i#1 i zp ZP_BYTE:9 233.66666666666669
(byte) play_lock_current::i#2 i#2 zp ZP_BYTE:5 1552.0
(byte) play_lock_current::i#3 i#3 zp ZP_BYTE:5 67.33333333333333
(byte~) play_lock_current::i#7 i#7 zp ZP_BYTE:5 202.0
(byte~) play_lock_current::i#9 i#9 zp ZP_BYTE:5 2002.0
(byte) play_lock_current::i#1 i zp ZP_BYTE:9 2333.6666666666665
(byte) play_lock_current::i#2 i#2 zp ZP_BYTE:5 15502.0
(byte) play_lock_current::i#3 i#3 zp ZP_BYTE:5 667.3333333333334
(byte~) play_lock_current::i#7 i#7 zp ZP_BYTE:5 2002.0
(byte~) play_lock_current::i#9 i#9 zp ZP_BYTE:5 20002.0
(byte) play_lock_current::l
(byte) play_lock_current::l#1 l zp ZP_BYTE:4 101.0
(byte) play_lock_current::l#6 l zp ZP_BYTE:4 16.833333333333332
(byte) play_lock_current::l#1 l zp ZP_BYTE:4 1001.0
(byte) play_lock_current::l#6 l zp ZP_BYTE:4 166.83333333333334
(byte*) play_lock_current::playfield_line
(byte*) play_lock_current::playfield_line#0 playfield_line zp ZP_WORD:7 110.19999999999999
(byte*) play_lock_current::playfield_line#0 playfield_line zp ZP_WORD:7 1100.2
(byte) play_lock_current::ypos2
(byte) play_lock_current::ypos2#0 ypos2 zp ZP_BYTE:14 4.0
(byte) play_lock_current::ypos2#1 ypos2 zp ZP_BYTE:14 50.5
(byte) play_lock_current::ypos2#2 ypos2 zp ZP_BYTE:14 27.727272727272727
(byte) play_lock_current::ypos2#1 ypos2 zp ZP_BYTE:14 500.5
(byte) play_lock_current::ypos2#2 ypos2 zp ZP_BYTE:14 273.1818181818182
(byte()) play_move_down((byte) play_move_down::key_event)
(byte~) play_move_down::$12 reg byte a 4.0
(byte~) play_move_down::$2 reg byte a 4.0
@ -658,7 +628,7 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) play_move_down::@9
(label) play_move_down::@return
(byte) play_move_down::key_event
(byte) play_move_down::key_event#0 reg byte a 6.5
(byte) play_move_down::key_event#0 reg byte a 51.5
(byte) play_move_down::movedown
(byte) play_move_down::movedown#10 reg byte x 1.0
(byte) play_move_down::movedown#2 reg byte x 4.0
@ -666,8 +636,8 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) play_move_down::movedown#6 reg byte x 6.0
(byte) play_move_down::movedown#7 reg byte x 5.0
(byte) play_move_down::return
(byte) play_move_down::return#2 reg byte x 3.6666666666666665
(byte) play_move_down::return#3 reg byte a 22.0
(byte) play_move_down::return#2 reg byte x 33.666666666666664
(byte) play_move_down::return#3 reg byte a 202.0
(byte()) play_move_leftright((byte) play_move_leftright::key_event)
(byte~) play_move_leftright::$4 reg byte a 4.0
(byte~) play_move_leftright::$8 reg byte a 4.0
@ -680,10 +650,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) play_move_leftright::@8
(label) play_move_leftright::@return
(byte) play_move_leftright::key_event
(byte) play_move_leftright::key_event#0 reg byte a 7.5
(byte) play_move_leftright::key_event#0 reg byte a 52.5
(byte) play_move_leftright::return
(byte) play_move_leftright::return#1 reg byte a 3.6666666666666665
(byte) play_move_leftright::return#4 reg byte a 22.0
(byte) play_move_leftright::return#1 reg byte a 33.666666666666664
(byte) play_move_leftright::return#4 reg byte a 202.0
(byte()) play_move_rotate((byte) play_move_rotate::key_event)
(byte/signed word/word/dword/signed dword~) play_move_rotate::$2 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$4 reg byte a 4.0
@ -696,14 +666,14 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) play_move_rotate::@6
(label) play_move_rotate::@return
(byte) play_move_rotate::key_event
(byte) play_move_rotate::key_event#0 reg byte a 7.5
(byte) play_move_rotate::key_event#0 reg byte a 52.5
(byte) play_move_rotate::orientation
(byte) play_move_rotate::orientation#1 orientation zp ZP_BYTE:5 4.0
(byte) play_move_rotate::orientation#2 orientation zp ZP_BYTE:5 4.0
(byte) play_move_rotate::orientation#3 orientation zp ZP_BYTE:5 0.8888888888888888
(byte) play_move_rotate::return
(byte) play_move_rotate::return#1 reg byte a 3.6666666666666665
(byte) play_move_rotate::return#4 reg byte a 22.0
(byte) play_move_rotate::return#1 reg byte a 33.666666666666664
(byte) play_move_rotate::return#4 reg byte a 202.0
(void()) play_remove_lines()
(label) play_remove_lines::@1
(label) play_remove_lines::@10
@ -716,30 +686,30 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) play_remove_lines::@9
(label) play_remove_lines::@return
(byte) play_remove_lines::c
(byte) play_remove_lines::c#0 c zp ZP_BYTE:9 600.5999999999999
(byte) play_remove_lines::c#0 c zp ZP_BYTE:9 6000.6
(byte) play_remove_lines::full
(byte) play_remove_lines::full#2 full zp ZP_BYTE:6 420.59999999999997
(byte) play_remove_lines::full#4 full zp ZP_BYTE:6 400.4
(byte) play_remove_lines::full#2 full zp ZP_BYTE:6 4200.6
(byte) play_remove_lines::full#4 full zp ZP_BYTE:6 4000.4
(byte) play_remove_lines::r
(byte) play_remove_lines::r#1 reg byte y 161.76923076923077
(byte) play_remove_lines::r#2 reg byte y 1552.0
(byte) play_remove_lines::r#3 reg byte y 202.0
(byte) play_remove_lines::r#1 reg byte y 1615.6153846153845
(byte) play_remove_lines::r#2 reg byte y 15502.0
(byte) play_remove_lines::r#3 reg byte y 2002.0
(byte) play_remove_lines::w
(byte) play_remove_lines::w#1 reg byte x 551.0
(byte) play_remove_lines::w#11 reg byte x 134.66666666666666
(byte) play_remove_lines::w#12 reg byte x 202.0
(byte) play_remove_lines::w#2 reg byte x 202.0
(byte) play_remove_lines::w#3 reg byte x 202.0
(byte) play_remove_lines::w#4 reg byte x 443.42857142857144
(byte) play_remove_lines::w#6 reg byte x 168.33333333333331
(byte) play_remove_lines::w#1 reg byte x 5501.0
(byte) play_remove_lines::w#11 reg byte x 1334.6666666666667
(byte) play_remove_lines::w#12 reg byte x 2002.0
(byte) play_remove_lines::w#2 reg byte x 2002.0
(byte) play_remove_lines::w#3 reg byte x 2002.0
(byte) play_remove_lines::w#4 reg byte x 4429.142857142857
(byte) play_remove_lines::w#6 reg byte x 1668.3333333333335
(byte) play_remove_lines::x
(byte) play_remove_lines::x#1 x zp ZP_BYTE:5 1501.5
(byte) play_remove_lines::x#2 x zp ZP_BYTE:5 250.25
(byte) play_remove_lines::x#1 x zp ZP_BYTE:5 15001.5
(byte) play_remove_lines::x#2 x zp ZP_BYTE:5 2500.25
(byte) play_remove_lines::y
(byte) play_remove_lines::y#1 y zp ZP_BYTE:4 151.5
(byte) play_remove_lines::y#8 y zp ZP_BYTE:4 14.428571428571429
(byte) play_remove_lines::y#1 y zp ZP_BYTE:4 1501.5
(byte) play_remove_lines::y#8 y zp ZP_BYTE:4 143.0
(void()) play_spawn_current()
(byte~) play_spawn_current::$1 reg byte a 202.0
(byte~) play_spawn_current::$1 reg byte a 2002.0
(byte~) play_spawn_current::$3 $3 zp ZP_BYTE:4 0.13333333333333333
(label) play_spawn_current::@1
(label) play_spawn_current::@2
@ -747,8 +717,8 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) play_spawn_current::@7
(label) play_spawn_current::@return
(byte) play_spawn_current::piece_idx
(byte) play_spawn_current::piece_idx#1 reg byte x 202.0
(byte) play_spawn_current::piece_idx#2 reg byte x 35.00000000000001
(byte) play_spawn_current::piece_idx#1 reg byte x 2002.0
(byte) play_spawn_current::piece_idx#2 reg byte x 334.99999999999994
(byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield
(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 playfield = { fill( PLAYFIELD_LINES#0*PLAYFIELD_COLS#0, 0) }
(byte*[PLAYFIELD_LINES#0]) playfield_lines
@ -768,29 +738,29 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) render_current::@9
(label) render_current::@return
(byte) render_current::c
(byte) render_current::c#1 reg byte x 1501.5
(byte) render_current::c#2 reg byte x 286.0
(byte) render_current::c#1 c zp ZP_BYTE:13 1501.5
(byte) render_current::c#2 c zp ZP_BYTE:13 286.0
(byte) render_current::current_cell
(byte) render_current::current_cell#0 reg byte a 1001.0
(byte) render_current::i
(byte) render_current::i#1 i zp ZP_BYTE:12 202.0
(byte) render_current::i#10 i zp ZP_BYTE:12 429.0
(byte) render_current::i#3 i zp ZP_BYTE:12 50.5
(byte) render_current::i#4 i zp ZP_BYTE:12 1552.0
(byte) render_current::i#8 i zp ZP_BYTE:12 300.75
(byte) render_current::i#1 i zp ZP_BYTE:11 202.0
(byte) render_current::i#10 i zp ZP_BYTE:11 429.0
(byte) render_current::i#3 i zp ZP_BYTE:11 50.5
(byte) render_current::i#4 i zp ZP_BYTE:11 1552.0
(byte) render_current::i#8 i zp ZP_BYTE:11 300.75
(byte) render_current::l
(byte) render_current::l#1 l zp ZP_BYTE:11 151.5
(byte) render_current::l#4 l zp ZP_BYTE:11 11.222222222222221
(byte) render_current::l#1 l zp ZP_BYTE:10 151.5
(byte) render_current::l#4 l zp ZP_BYTE:10 11.222222222222221
(byte*) render_current::screen_line
(byte*) render_current::screen_line#0 screen_line zp ZP_WORD:28 100.18181818181819
(byte*) render_current::screen_line#0 screen_line zp ZP_WORD:29 100.18181818181819
(byte) render_current::xpos
(byte) render_current::xpos#0 xpos zp ZP_BYTE:13 202.0
(byte) render_current::xpos#1 xpos zp ZP_BYTE:13 667.3333333333334
(byte) render_current::xpos#2 xpos zp ZP_BYTE:13 684.1666666666667
(byte) render_current::xpos#0 xpos zp ZP_BYTE:12 202.0
(byte) render_current::xpos#1 xpos zp ZP_BYTE:12 667.3333333333334
(byte) render_current::xpos#2 xpos zp ZP_BYTE:12 684.1666666666667
(byte) render_current::ypos2
(byte) render_current::ypos2#0 ypos2 zp ZP_BYTE:10 4.0
(byte) render_current::ypos2#1 ypos2 zp ZP_BYTE:10 67.33333333333333
(byte) render_current::ypos2#2 ypos2 zp ZP_BYTE:10 29.823529411764707
(byte) render_current::ypos2#0 ypos2 zp ZP_BYTE:9 4.0
(byte) render_current::ypos2#1 ypos2 zp ZP_BYTE:9 67.33333333333333
(byte) render_current::ypos2#2 ypos2 zp ZP_BYTE:9 29.823529411764707
(void()) render_init()
(byte*~) render_init::$12 $12 zp ZP_WORD:15 202.0
(byte~) render_init::$22 reg byte a 22.0
@ -894,17 +864,18 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) render_screen_original::y#1 y zp ZP_BYTE:2 16.5
(byte) render_screen_original::y#8 y zp ZP_BYTE:2 1.0
(byte) render_screen_render
(byte) render_screen_render#10 render_screen_render zp ZP_BYTE:3 3.25
(byte) render_screen_render#15 render_screen_render zp ZP_BYTE:3 1.277777777777778
(byte) render_screen_render#18 reg byte x 8.615384615384615
(byte) render_screen_render#27 render_screen_render#27 zp ZP_BYTE:5 5.090909090909091
(byte) render_screen_render#31 render_screen_render zp ZP_BYTE:3 16.5
(byte~) render_screen_render#68 render_screen_render#68 zp ZP_BYTE:5 5.5
(byte~) render_screen_render#69 reg byte x 22.0
(byte) render_screen_render#11 render_screen_render zp ZP_BYTE:3 3.25
(byte) render_screen_render#16 render_screen_render zp ZP_BYTE:3 1.0
(byte) render_screen_render#19 reg byte x 8.615384615384615
(byte) render_screen_render#28 render_screen_render#28 zp ZP_BYTE:5 5.090909090909091
(byte~) render_screen_render#62 render_screen_render#62 zp ZP_BYTE:5 5.5
(byte~) render_screen_render#63 reg byte x 22.0
(byte) render_screen_show
(byte) render_screen_show#11 render_screen_show zp ZP_BYTE:2 4.333333333333333
(byte) render_screen_show#15 render_screen_show zp ZP_BYTE:2 0.8604651162790697
(byte) render_screen_show#24 render_screen_show zp ZP_BYTE:2 16.5
(byte) render_screen_show#13 render_screen_show zp ZP_BYTE:2 4.333333333333333
(byte) render_screen_show#16 render_screen_show zp ZP_BYTE:2 0.39534883720930225
(byte) render_screen_showing
(byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:24 0.5714285714285714
(byte) render_screen_showing#1 render_screen_showing zp ZP_BYTE:24 20.0
(void()) render_screen_swap()
(label) render_screen_swap::@return
(void()) render_show()
@ -947,8 +918,8 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte()) sid_rnd()
(label) sid_rnd::@return
(byte) sid_rnd::return
(byte) sid_rnd::return#0 reg byte a 34.33333333333333
(byte) sid_rnd::return#2 reg byte a 202.0
(byte) sid_rnd::return#0 reg byte a 334.33333333333337
(byte) sid_rnd::return#2 reg byte a 2002.0
(void()) sid_rnd_init()
(label) sid_rnd_init::@return
(void()) sprites_init()
@ -962,6 +933,39 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) sprites_init::xpos
(byte) sprites_init::xpos#1 xpos zp ZP_BYTE:2 7.333333333333333
(byte) sprites_init::xpos#2 xpos zp ZP_BYTE:2 8.25
interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
(byte~) sprites_irq::$4 reg byte a 4.0
(label) sprites_irq::@1
(label) sprites_irq::@10
(label) sprites_irq::@12
(label) sprites_irq::@13
(label) sprites_irq::@2
(label) sprites_irq::@3
(label) sprites_irq::@4
(label) sprites_irq::@5
(label) sprites_irq::@6
(label) sprites_irq::@7
(label) sprites_irq::@8
(label) sprites_irq::@return
(byte) sprites_irq::ptr
(byte) sprites_irq::ptr#0 reg byte x 2.5
(byte) sprites_irq::ptr#1 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#2 reg byte a 4.0
(byte) sprites_irq::ptr#3 reg byte x 2.6666666666666665
(byte) sprites_irq::ptr#4 reg byte x 4.0
(byte) sprites_irq::raster_next
(byte) sprites_irq::raster_next#0 reg byte x 2.6666666666666665
(byte) sprites_irq::raster_next#1 reg byte x 4.0
(byte) sprites_irq::raster_next#2 reg byte x 6.0
(label) sprites_irq::toSpritePtr2
(word~) sprites_irq::toSpritePtr2_$0
(word~) sprites_irq::toSpritePtr2_$1
(byte~) sprites_irq::toSpritePtr2_$2
(byte) sprites_irq::toSpritePtr2_return
(const byte) sprites_irq::toSpritePtr2_return#0 toSpritePtr2_return = ((byte))((word))(const byte*) PLAYFIELD_SPRITES#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) sprites_irq::toSpritePtr2_sprite
(byte) sprites_irq::ypos
(byte) sprites_irq::ypos#0 reg byte a 2.5
(void()) sprites_irq_init()
(label) sprites_irq_init::@return
(label) toSpritePtr1
@ -972,20 +976,20 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(const byte) toSpritePtr1_return#0 toSpritePtr1_return = ((byte))((word))(const byte*) PLAYFIELD_SPRITES#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) toSpritePtr1_sprite
zp ZP_BYTE:2 [ render_screen_show#15 render_screen_show#24 render_screen_show#11 play_init::idx#2 play_init::idx#1 sprites_init::xpos#2 sprites_init::xpos#1 render_init::l#4 render_init::l#1 render_screen_original::y#8 render_screen_original::y#1 ]
zp ZP_BYTE:3 [ render_screen_render#15 render_screen_render#31 render_screen_render#10 ]
zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 play_init::idx#2 play_init::idx#1 sprites_init::xpos#2 sprites_init::xpos#1 render_init::l#4 render_init::l#1 render_screen_original::y#8 render_screen_original::y#1 ]
zp ZP_BYTE:3 [ render_screen_render#16 render_screen_render#11 ]
zp ZP_BYTE:4 [ current_movedown_counter#12 current_movedown_counter#10 current_movedown_counter#1 play_remove_lines::y#8 play_remove_lines::y#1 play_lock_current::l#6 play_lock_current::l#1 play_spawn_current::$3 ]
reg byte x [ current_ypos#9 current_ypos#83 current_ypos#84 ]
zp ZP_BYTE:5 [ render_screen_render#27 render_screen_render#68 render_playfield::l#2 render_playfield::l#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
zp ZP_BYTE:6 [ current_xpos#47 current_xpos#109 current_xpos#110 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_collision::xpos#5 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_remove_lines::full#4 play_remove_lines::full#2 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 keyboard_event_pressed::row_bits#0 ]
zp ZP_WORD:7 [ current_piece_gfx#52 current_piece_gfx#99 current_piece_gfx#100 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#12 current_piece#73 current_piece#74 current_piece#75 current_piece#76 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 render_init::line#4 render_init::line#1 render_init::li_1#2 render_init::li_1#1 fill::addr#2 fill::addr#1 render_screen_original::orig#2 render_screen_original::orig#5 render_screen_original::orig#1 play_lock_current::playfield_line#0 ]
zp ZP_BYTE:9 [ current_piece_char#62 current_piece_char#87 current_piece_char#88 render_playfield::c#2 render_playfield::c#1 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::c#0 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:10 [ render_current::ypos2#2 render_current::ypos2#0 render_current::ypos2#1 play_collision::l#6 play_collision::l#1 ]
zp ZP_BYTE:11 [ render_current::l#4 render_current::l#1 play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
zp ZP_BYTE:12 [ render_current::i#4 render_current::i#3 render_current::i#8 render_current::i#10 render_current::i#1 play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
zp ZP_BYTE:13 [ render_current::xpos#2 render_current::xpos#0 render_current::xpos#1 main::key_event#0 ]
reg byte x [ render_current::c#2 render_current::c#1 ]
reg byte x [ render_screen_render#18 render_screen_render#69 ]
reg byte y [ current_ypos#9 current_ypos#84 current_ypos#85 ]
zp ZP_BYTE:5 [ render_screen_render#28 render_screen_render#62 render_playfield::l#2 render_playfield::l#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
zp ZP_BYTE:6 [ current_xpos#47 current_xpos#110 current_xpos#111 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_collision::xpos#5 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_remove_lines::full#4 play_remove_lines::full#2 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 keyboard_event_pressed::row_bits#0 ]
zp ZP_WORD:7 [ current_piece_gfx#53 current_piece_gfx#100 current_piece_gfx#101 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#12 current_piece#74 current_piece#75 current_piece#76 current_piece#77 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 render_init::line#4 render_init::line#1 render_init::li_1#2 render_init::li_1#1 fill::addr#2 fill::addr#1 render_screen_original::orig#2 render_screen_original::orig#5 render_screen_original::orig#1 play_lock_current::playfield_line#0 ]
reg byte x [ current_piece_char#63 current_piece_char#88 current_piece_char#89 ]
zp ZP_BYTE:9 [ render_current::ypos2#2 render_current::ypos2#0 render_current::ypos2#1 render_playfield::c#2 render_playfield::c#1 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::c#0 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:10 [ render_current::l#4 render_current::l#1 play_collision::l#6 play_collision::l#1 ]
zp ZP_BYTE:11 [ render_current::i#4 render_current::i#3 render_current::i#8 render_current::i#10 render_current::i#1 play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
zp ZP_BYTE:12 [ render_current::xpos#2 render_current::xpos#0 render_current::xpos#1 play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
zp ZP_BYTE:13 [ render_current::c#2 render_current::c#1 main::key_event#0 ]
reg byte x [ render_screen_render#19 render_screen_render#63 ]
reg byte a [ play_move_rotate::return#1 ]
reg byte x [ play_collision::orientation#4 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
reg byte y [ play_collision::ypos#4 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 ]
@ -994,7 +998,7 @@ reg byte a [ play_collision::return#14 ]
reg byte a [ play_move_leftright::return#1 ]
reg byte x [ play_move_down::movedown#6 play_move_down::movedown#3 play_move_down::movedown#7 play_move_down::movedown#2 play_move_down::movedown#10 ]
zp ZP_BYTE:14 [ current_ypos#29 current_ypos#21 current_ypos#18 current_ypos#13 current_ypos#0 play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
zp ZP_WORD:15 [ current_piece#20 current_piece#77 current_piece#16 current_piece#71 current_piece#10 render_init::li_2#2 render_init::li_2#1 render_screen_original::screen#7 render_screen_original::screen#10 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#11 render_screen_original::screen#12 render_screen_original::screen#2 render_screen_original::screen#3 render_init::$12 ]
zp ZP_WORD:15 [ current_piece#20 current_piece#78 current_piece#16 current_piece#71 current_piece#10 render_init::li_2#2 render_init::li_2#1 render_screen_original::screen#7 render_screen_original::screen#10 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#11 render_screen_original::screen#12 render_screen_original::screen#2 render_screen_original::screen#3 render_init::$12 ]
zp ZP_BYTE:17 [ current_orientation#29 current_orientation#10 current_orientation#19 current_orientation#4 current_orientation#14 ]
zp ZP_WORD:18 [ current_piece_gfx#26 current_piece_gfx#20 current_piece_gfx#16 current_piece_gfx#14 current_piece_gfx#3 current_piece_gfx#1 ]
zp ZP_BYTE:20 [ current_xpos#33 current_xpos#10 current_xpos#23 current_xpos#19 current_xpos#4 current_xpos#1 current_xpos#2 ]
@ -1015,26 +1019,26 @@ reg byte x [ render_init::c#2 render_init::c#1 ]
reg byte x [ render_init::i#2 render_init::i#1 ]
reg byte y [ render_screen_original::c#2 render_screen_original::c#0 render_screen_original::c#1 ]
reg byte x [ render_screen_original::x#7 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
zp ZP_BYTE:23 [ irq_raster_next#12 irq_raster_next#2 irq_raster_next#1 irq_raster_next#0 ]
reg byte x [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ]
zp ZP_BYTE:24 [ irq_sprite_ypos#0 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
zp ZP_BYTE:25 [ irq_sprite_ptr#0 irq_sprite_ptr#2 irq_sprite_ptr#1 ]
zp ZP_BYTE:26 [ irq_cnt#0 irq_cnt#1 irq_cnt#13 ]
reg byte a [ main::$9 ]
zp ZP_BYTE:23 [ irq_raster_next#13 irq_raster_next#2 irq_raster_next#1 irq_raster_next#0 ]
reg byte x [ sprites_irq::raster_next#2 sprites_irq::raster_next#1 sprites_irq::raster_next#0 ]
zp ZP_BYTE:24 [ render_screen_showing#0 render_screen_showing#1 ]
zp ZP_BYTE:25 [ irq_sprite_ypos#0 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
zp ZP_BYTE:26 [ irq_sprite_ptr#0 irq_sprite_ptr#2 irq_sprite_ptr#1 ]
zp ZP_BYTE:27 [ irq_cnt#0 irq_cnt#1 irq_cnt#14 ]
reg byte a [ keyboard_event_get::return#3 ]
reg byte a [ play_move_down::key_event#0 ]
reg byte a [ play_move_down::return#3 ]
reg byte a [ main::$13 ]
zp ZP_BYTE:27 [ main::render#1 main::render#2 ]
reg byte a [ main::$12 ]
zp ZP_BYTE:28 [ main::render#1 main::render#2 ]
reg byte a [ play_move_leftright::key_event#0 ]
reg byte a [ play_move_leftright::return#4 ]
reg byte a [ main::$14 ]
reg byte a [ main::$13 ]
reg byte a [ play_move_rotate::key_event#0 ]
reg byte a [ play_move_rotate::return#4 ]
reg byte a [ main::$15 ]
reg byte a [ main::$14 ]
reg byte a [ main::render#3 ]
reg byte a [ render_current::$5 ]
zp ZP_WORD:28 [ render_current::screen_line#0 play_collision::playfield_line#0 ]
zp ZP_WORD:29 [ render_current::screen_line#0 play_collision::playfield_line#0 ]
reg byte a [ render_current::current_cell#0 ]
reg byte a [ render_playfield::$2 ]
reg byte a [ render_playfield::$3 ]
@ -1042,7 +1046,7 @@ reg byte a [ play_move_rotate::$2 ]
reg byte a [ play_collision::return#13 ]
reg byte a [ play_move_rotate::$6 ]
reg byte a [ play_move_rotate::$4 ]
zp ZP_BYTE:30 [ play_collision::i#1 ]
zp ZP_BYTE:31 [ play_collision::i#1 ]
reg byte a [ play_collision::$7 ]
reg byte a [ play_collision::return#12 ]
reg byte a [ play_move_leftright::$4 ]
@ -1078,8 +1082,10 @@ reg byte a [ play_init::$1 ]
reg byte a [ sprites_init::s2#0 ]
reg byte a [ render_init::$22 ]
reg byte a [ render_init::$23 ]
reg byte a [ irq::ypos#0 ]
reg byte a [ irq::ptr#0 ]
reg byte x [ irq::ptr#1 ]
reg byte x [ irq::ptr#2 ]
reg byte a [ irq::$3 ]
reg byte a [ sprites_irq::ypos#0 ]
reg byte x [ sprites_irq::ptr#0 ]
reg byte x [ sprites_irq::ptr#3 ]
reg byte x [ sprites_irq::ptr#4 ]
reg byte a [ sprites_irq::$4 ]
reg byte a [ sprites_irq::ptr#1 ]
reg byte a [ sprites_irq::ptr#2 ]