1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Added movedown speed-up based on level.

This commit is contained in:
jespergravgaard 2018-12-30 23:36:05 +01:00
parent 621c1e19e0
commit 40a2a7b1eb
12 changed files with 7170 additions and 6314 deletions

View File

@ -1,3 +1,4 @@
// Tetris Game for the Commodore 64
// Memory Layout and Shared Data
// Address of the first screen
@ -47,5 +48,7 @@ dword score_bcd = 0;
// Current number of cleared lines in BCD-format
word lines_bcd = 0;
// Current level BCD-format
byte level_bcd = 1;
byte level_bcd = 0;
// Current level in normal numeric format
byte level = 0;

View File

@ -1,3 +1,4 @@
// Tetris Game for the Commodore 64
// The tetris pieces
// The T-piece
@ -172,6 +173,7 @@ word[] PIECES = { (word)PIECE_T, (word)PIECE_S, (word)PIECE_Z, (word)PIECE_J, (w
// The chars to use for the different pieces
byte[] PIECES_CHARS = { $64, $65, $a5, $65, $64, $64, $a5 };
// The initial X/Y for each piece
byte[] PIECES_START_X = { 4, 4, 4, 4, 4, 4, 4 };
byte[] PIECES_START_Y = { 1, 1, 1, 1, 1, 0, 1 };

View File

@ -1,4 +1,6 @@
// Implementation of the games play logic
// Tetris Game for the Commodore 64
// Implementation of the tetris game play logic. Most of the logic is modelled after NES tetris
// Source: https://meatfighter.com/nintendotetrisai/
import "tetris-data"
import "tetris-pieces"
@ -17,10 +19,10 @@ byte* current_piece = 0;
byte current_orientation = 0;
// The rate of moving down the current piece (number of frames between moves if movedown is not forced)
const byte current_movedown_slow = 50;
byte current_movedown_slow = 48;
// The rate of moving down the current piece fast (number of frames between moves if movedown is not forced)
const byte current_movedown_fast = 5;
const byte current_movedown_fast = 2;
// Counts up to the next movedown of current piece
byte current_movedown_counter = 0;
@ -28,6 +30,10 @@ byte current_movedown_counter = 0;
// Score values for removing 0-4 lines (in BCD)
dword[] score_add_bcd = { $0000, $0040, $0100, $0300, $1200 };
// The speed of moving down the piece when soft-drop is not activated
// This array holds the number of frames per move by level (0-29). For all levels 29+ the value is 1.
const byte[] MOVEDOWN_SLOW_SPEEDS = { 48, 43, 38, 33, 28, 23, 18, 13, 8, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 };
// Initialize play data tables
void play_init() {
// Initialize the playfield line pointers;
@ -40,6 +46,9 @@ void play_init() {
idx += PLAYFIELD_COLS;
}
playfield_lines_idx[PLAYFIELD_LINES] = PLAYFIELD_COLS*PLAYFIELD_LINES;
// Set initial speed of moving down a tetromino
current_movedown_slow = MOVEDOWN_SLOW_SPEEDS[level];
}
// Move down the current piece
@ -248,12 +257,26 @@ void play_update_score(byte removed) {
// If line 10-part updated increase the level
byte lines_after = <lines_bcd&$f0;
if(lines_before!=lines_after) {
level_bcd++;
if((level_bcd&$f)==$a) {
// If level low nybble hits $a change to $10
level_bcd += 6;
}
play_increase_level();
}
}
}
// Increase the level
void play_increase_level() {
// Increase level
level++;
// Update speed of moving tetrominos down
if(level>29) {
current_movedown_slow = 1;
} else {
current_movedown_slow = MOVEDOWN_SLOW_SPEEDS[level];
}
// Increase BCD-format level
level_bcd++;
if((level_bcd&$f)==$a) {
// If level low nybble hits $a change to $10
level_bcd += 6;
}
}

View File

@ -1,3 +1,7 @@
// Tetris Game for the Commodore 64
// All rendering logic for showing the playfield, the pieces and the scores
// Also handles double buffering
import "tetris-data"
kickasm(pc PLAYFIELD_CHARSET, resource "playfield-screen.imap") {{
@ -137,7 +141,7 @@ void render_screen_original(byte* screen) {
}
}
// Render the static playfield on the screen
// Render the static playfield on the screen (all pieces already locked into place)
void render_playfield() {
// Do not render the top 2 lines.
byte i = PLAYFIELD_COLS*2;
@ -150,7 +154,7 @@ void render_playfield() {
}
// Render the current moving piece at position (current_xpos, current_ypos)
void render_current() {
void render_moving() {
byte i = 0;
byte ypos2 = current_ypos<<1;
for(byte l:0..3) {

View File

@ -1,4 +1,5 @@
// A sprite multiplexer covering the playfield with a black layer to give the pixel perfect 3-single-color NES playfield
// Tetris Game for the Commodore 64
// A sprite multiplexer covering the playfield with a black layer to allow for 3 single-pixel colors
import "c64"
import "tetris-data"

View File

@ -1,4 +1,7 @@
// Tetris Game Implementation
// Tetris Game for the Commodore 64
// The tetris game tries to match NES tetris gameplay pretty closely
// Source: https://meatfighter.com/nintendotetrisai/
import "c64"
import "memory"
import "keyboard"
@ -17,7 +20,7 @@ void main() {
play_init();
play_spawn_current();
render_playfield();
render_current();
render_moving();
while(true) {
// Wait for a frame to pass
while(*RASTER!=$ff) {}
@ -33,7 +36,7 @@ void main() {
render += play_move_rotate(key_event);
if(render!=0) {
render_playfield();
render_current();
render_moving();
render_score();
render_screen_swap();
}

View File

@ -107,7 +107,8 @@ CONTROL FLOW GRAPH SSA
(byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(dword) score_bcd#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(word) lines_bcd#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) level_bcd#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) level_bcd#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) level#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
kickasm(location (byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000))
.for(var sy=0;sy<10;sy++) {
.for(var sx=0;sx<3;sx++) {
@ -701,6 +702,8 @@ SYMBOL TABLE SSA
(byte) irq_sprite_ypos#7
(byte) irq_sprite_ypos#8
(byte) irq_sprite_ypos#9
(byte) level
(byte) level#0
(byte) level_bcd
(byte) level_bcd#0
(word) lines_bcd
@ -1061,7 +1064,8 @@ Constant (const byte) render_screen_render#0 = 64
Constant (const byte) render_screen_show#0 = 0
Constant (const dword) score_bcd#0 = 0
Constant (const word) lines_bcd#0 = 0
Constant (const byte) level_bcd#0 = 1
Constant (const byte) level_bcd#0 = 0
Constant (const byte) level#0 = 0
Constant (const byte/signed byte/word/signed word/dword/signed dword) sprites_init::$0 = 15*8
Constant (const byte) sprites_init::s#0 = 0
Constant (const byte) IRQ_RASTER_FIRST#0 = 49
@ -1487,6 +1491,7 @@ VARIABLE REGISTER WEIGHTS
(byte) irq_sprite_ypos#0 0.7083333333333334
(byte) irq_sprite_ypos#1 20.0
(byte) irq_sprite_ypos#2 20.0
(byte) level
(byte) level_bcd
(word) lines_bcd
(void()) main()
@ -2890,6 +2895,7 @@ FINAL SYMBOL TABLE
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:5 0.7083333333333334
(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
(byte) level
(byte) level_bcd
(word) lines_bcd
(void()) main()

View File

@ -148,6 +148,7 @@
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:5 0.7083333333333334
(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
(byte) level
(byte) level_bcd
(word) lines_bcd
(void()) main()

View File

@ -66,8 +66,7 @@
.const PLAYFIELD_LINES = $16
.const PLAYFIELD_COLS = $a
.const IRQ_RASTER_FIRST = $31
.const current_movedown_slow = $32
.const current_movedown_fast = 5
.const current_movedown_fast = 2
.const COLLISION_NONE = 0
.const COLLISION_PLAYFIELD = 1
.const COLLISION_BOTTOM = 2
@ -76,24 +75,26 @@
.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 keyboard_events_size = $1f
.label render_screen_showing = $21
.label irq_raster_next = $20
.label irq_sprite_ypos = $22
.label irq_sprite_ptr = $23
.label irq_cnt = $24
.label keyboard_events_size = $21
.label render_screen_showing = $23
.label irq_raster_next = $22
.label irq_sprite_ypos = $24
.label irq_sprite_ptr = $25
.label irq_cnt = $26
.label current_movedown_slow = $18
.label current_movedown_counter = 4
.label current_ypos = $10
.label current_piece_gfx = $1b
.label current_xpos = $1d
.label current_piece_char = $1e
.label current_orientation = $1a
.label level_bcd = $17
.label current_piece_gfx = $1d
.label current_xpos = $1f
.label current_piece_char = $20
.label current_orientation = $1c
.label level_bcd = $19
.label render_screen_render = 3
.label render_screen_show = 2
.label lines_bcd = $11
.label score_bcd = $13
.label current_piece = $18
.label level = $17
.label current_piece = $1a
.label current_piece_12 = 5
.label render_screen_render_30 = 9
.label current_xpos_47 = $a
@ -121,7 +122,7 @@ bbegin:
jsr main
main: {
.label key_event = $f
.label render = $25
.label render = $27
jsr sid_rnd_init
sei
jsr render_init
@ -141,15 +142,15 @@ main: {
ldx current_piece_char
lda #$40
sta render_screen_render_30
jsr render_current
jsr render_moving
ldy play_spawn_current._3
lda PIECES,y
sta current_piece
lda PIECES+1,y
sta current_piece+1
lda #1
sta level_bcd
lda #0
sta level_bcd
sta level
sta score_bcd
sta score_bcd+1
sta score_bcd+2
@ -199,7 +200,7 @@ main: {
lda current_piece_gfx+1
sta current_piece_gfx_103+1
ldx current_piece_char
jsr render_current
jsr render_moving
jsr render_score
jsr render_screen_swap
jmp b4
@ -319,7 +320,7 @@ render_bcd: {
!:
rts
}
render_current: {
render_moving: {
.label ypos2 = $b
.label screen_line = 7
.label xpos = $e
@ -484,7 +485,7 @@ play_collision: {
.label piece_gfx = 5
.label ypos2 = $b
.label playfield_line = 7
.label i = $26
.label i = $28
.label col = $e
.label l = $c
.label i_2 = $d
@ -632,7 +633,7 @@ play_move_down: {
inx
b2:
lda current_movedown_counter
cmp #current_movedown_slow
cmp current_movedown_slow
bcc b4
inx
b4:
@ -709,7 +710,7 @@ sid_rnd: {
}
play_update_score: {
.label lines_before = 4
.label add_bcd = $27
.label add_bcd = $29
cpx #0
beq breturn
lda lines_bcd
@ -753,6 +754,25 @@ play_update_score: {
and #$f0
cmp lines_before
beq breturn
jsr play_increase_level
breturn:
rts
}
play_increase_level: {
inc level
lda level
cmp #$1d
beq !+
bcs b1
!:
ldy level
lda MOVEDOWN_SLOW_SPEEDS,y
sta current_movedown_slow
jmp b2
b1:
lda #1
sta current_movedown_slow
b2:
inc level_bcd
lda #$f
and level_bcd
@ -1063,6 +1083,8 @@ play_init: {
bne b1
lda #PLAYFIELD_COLS*PLAYFIELD_LINES
sta playfield_lines_idx+PLAYFIELD_LINES
lda MOVEDOWN_SLOW_SPEEDS
sta current_movedown_slow
rts
}
sprites_irq_init: {
@ -1193,7 +1215,7 @@ render_init: {
render_screen_original: {
.const SPACE = 0
.label screen = $11
.label cols = $18
.label cols = $1a
.label oscr = 5
.label ocols = 7
.label y = 2
@ -1391,6 +1413,7 @@ sprites_irq: {
PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4
PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1
score_add_bcd: .dword 0, $40, $100, $300, $1200
MOVEDOWN_SLOW_SPEEDS: .byte $30, $2b, $26, $21, $1c, $17, $12, $d, 8, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
.align $80
screen_lines_1: .fill 2*PLAYFIELD_LINES, 0
.align $40

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
(label) @14
(label) @22
(label) @23
(label) @35
(label) @36
(label) @37
(label) @begin
(label) @end
(byte*) BGCOL
@ -163,6 +163,8 @@
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte[]) MOVEDOWN_SLOW_SPEEDS
(const byte[]) MOVEDOWN_SLOW_SPEEDS#0 MOVEDOWN_SLOW_SPEEDS = { (byte/signed byte/word/signed word/dword/signed dword) 48, (byte/signed byte/word/signed word/dword/signed dword) 43, (byte/signed byte/word/signed word/dword/signed dword) 38, (byte/signed byte/word/signed word/dword/signed dword) 33, (byte/signed byte/word/signed word/dword/signed dword) 28, (byte/signed byte/word/signed word/dword/signed dword) 23, (byte/signed byte/word/signed word/dword/signed dword) 18, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 6, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 1 }
(byte) ORANGE
(word[]) PIECES
(const word[]) PIECES#0 PIECES = { ((word))(const byte[4*4*4]) PIECE_T#0, ((word))(const byte[4*4*4]) PIECE_S#0, ((word))(const byte[4*4*4]) PIECE_Z#0, ((word))(const byte[4*4*4]) PIECE_J#0, ((word))(const byte[4*4*4]) PIECE_O#0, ((word))(const byte[4*4*4]) PIECE_I#0, ((word))(const byte[4*4*4]) PIECE_L#0 }
@ -282,54 +284,60 @@
(byte) current_movedown_counter#10 current_movedown_counter zp ZP_BYTE:4 3.931034482758621
(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
(const byte) current_movedown_fast#0 current_movedown_fast = (byte/signed byte/word/signed word/dword/signed dword) 2
(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_movedown_slow#1 current_movedown_slow zp ZP_BYTE:24 0.3076923076923077
(byte) current_movedown_slow#12 current_movedown_slow zp ZP_BYTE:24 2.296296296296297
(byte) current_movedown_slow#17 current_movedown_slow zp ZP_BYTE:24 4.0
(byte) current_movedown_slow#19 current_movedown_slow zp ZP_BYTE:24 1.3333333333333333
(byte) current_movedown_slow#20 current_movedown_slow zp ZP_BYTE:24 0.5
(byte) current_movedown_slow#30 current_movedown_slow zp ZP_BYTE:24 6.0
(byte) current_movedown_slow#8 current_movedown_slow zp ZP_BYTE:24 4.0
(byte) current_orientation
(byte) current_orientation#10 current_orientation zp ZP_BYTE:26 3.371428571428571
(byte) current_orientation#14 current_orientation zp ZP_BYTE:26 0.32653061224489793
(byte) current_orientation#19 current_orientation zp ZP_BYTE:26 6.210526315789475
(byte) current_orientation#29 current_orientation zp ZP_BYTE:26 4.0
(byte) current_orientation#4 current_orientation zp ZP_BYTE:26 3.0
(byte) current_orientation#10 current_orientation zp ZP_BYTE:28 3.371428571428571
(byte) current_orientation#14 current_orientation zp ZP_BYTE:28 0.32653061224489793
(byte) current_orientation#19 current_orientation zp ZP_BYTE:28 6.210526315789475
(byte) current_orientation#29 current_orientation zp ZP_BYTE:28 4.0
(byte) current_orientation#4 current_orientation zp ZP_BYTE:28 3.0
(byte*) current_piece
(byte*) current_piece#10 current_piece zp ZP_WORD:24 1.771428571428571
(byte*) current_piece#10 current_piece zp ZP_WORD:26 1.771428571428571
(byte*) current_piece#12 current_piece#12 zp ZP_WORD:5 10.0
(byte*) current_piece#16 current_piece zp ZP_WORD:24 3.428571428571428
(byte*) current_piece#20 current_piece zp ZP_WORD:24 6.0
(byte*~) current_piece#73 current_piece zp ZP_WORD:24 4.0
(byte*) current_piece#16 current_piece zp ZP_WORD:26 3.428571428571428
(byte*) current_piece#20 current_piece zp ZP_WORD:26 6.0
(byte*~) current_piece#73 current_piece zp ZP_WORD:26 4.0
(byte*~) current_piece#76 current_piece#76 zp ZP_WORD:5 4.0
(byte*~) current_piece#77 current_piece#77 zp ZP_WORD:5 4.0
(byte*~) current_piece#78 current_piece#78 zp ZP_WORD:5 4.0
(byte*~) current_piece#79 current_piece#79 zp ZP_WORD:5 4.0
(byte*~) current_piece#80 current_piece zp ZP_WORD:24 4.0
(byte*~) current_piece#80 current_piece zp ZP_WORD:26 4.0
(byte) current_piece_char
(byte) current_piece_char#1 current_piece_char zp ZP_BYTE:30 4.379310344827585
(byte) current_piece_char#12 current_piece_char zp ZP_BYTE:30 0.6153846153846154
(byte) current_piece_char#15 current_piece_char zp ZP_BYTE:30 194.59615384615384
(byte) current_piece_char#20 current_piece_char zp ZP_BYTE:30 6.0
(byte) current_piece_char#1 current_piece_char zp ZP_BYTE:32 4.379310344827585
(byte) current_piece_char#12 current_piece_char zp ZP_BYTE:32 0.6153846153846154
(byte) current_piece_char#15 current_piece_char zp ZP_BYTE:32 194.59615384615384
(byte) current_piece_char#20 current_piece_char zp ZP_BYTE:32 6.0
(byte) current_piece_char#64 reg byte x 46.09090909090909
(byte~) current_piece_char#90 reg byte x 4.0
(byte~) current_piece_char#91 reg byte x 22.0
(byte*) current_piece_gfx
(byte*) current_piece_gfx#1 current_piece_gfx zp ZP_WORD:27 0.2962962962962963
(byte*) current_piece_gfx#1 current_piece_gfx zp ZP_WORD:29 0.2962962962962963
(byte*~) current_piece_gfx#102 current_piece_gfx#102 zp ZP_WORD:5 2.0
(byte*~) current_piece_gfx#103 current_piece_gfx#103 zp ZP_WORD:5 11.0
(byte*) current_piece_gfx#14 current_piece_gfx zp ZP_WORD:27 6.789473684210528
(byte*) current_piece_gfx#16 current_piece_gfx zp ZP_WORD:27 0.5
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:27 194.59615384615384
(byte*) current_piece_gfx#26 current_piece_gfx zp ZP_WORD:27 6.0
(byte*) current_piece_gfx#3 current_piece_gfx zp ZP_WORD:27 4.0
(byte*) current_piece_gfx#14 current_piece_gfx zp ZP_WORD:29 6.789473684210528
(byte*) current_piece_gfx#16 current_piece_gfx zp ZP_WORD:29 0.5
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:29 194.59615384615384
(byte*) current_piece_gfx#26 current_piece_gfx zp ZP_WORD:29 6.0
(byte*) current_piece_gfx#3 current_piece_gfx zp ZP_WORD:29 4.0
(byte*) current_piece_gfx#53 current_piece_gfx#53 zp ZP_WORD:5 46.09090909090909
(byte) current_xpos
(byte) current_xpos#1 current_xpos zp ZP_BYTE:29 0.72
(byte) current_xpos#10 current_xpos zp ZP_BYTE:29 21.557692307692307
(byte) current_xpos#1 current_xpos zp ZP_BYTE:31 0.72
(byte) current_xpos#10 current_xpos zp ZP_BYTE:31 21.557692307692307
(byte~) current_xpos#112 current_xpos#112 zp ZP_BYTE:10 1.3333333333333333
(byte~) current_xpos#113 current_xpos#113 zp ZP_BYTE:10 7.333333333333333
(byte) current_xpos#19 current_xpos zp ZP_BYTE:29 3.139534883720931
(byte) current_xpos#2 current_xpos zp ZP_BYTE:29 4.0
(byte) current_xpos#23 current_xpos zp ZP_BYTE:29 0.5333333333333333
(byte) current_xpos#33 current_xpos zp ZP_BYTE:29 6.0
(byte) current_xpos#4 current_xpos zp ZP_BYTE:29 4.0
(byte) current_xpos#19 current_xpos zp ZP_BYTE:31 3.139534883720931
(byte) current_xpos#2 current_xpos zp ZP_BYTE:31 4.0
(byte) current_xpos#23 current_xpos zp ZP_BYTE:31 0.5333333333333333
(byte) current_xpos#33 current_xpos zp ZP_BYTE:31 6.0
(byte) current_xpos#4 current_xpos zp ZP_BYTE:31 4.0
(byte) current_xpos#47 current_xpos#47 zp ZP_BYTE:10 5.181818181818182
(byte) current_ypos
(byte) current_ypos#0 current_ypos zp ZP_BYTE:16 4.0
@ -341,22 +349,22 @@
(byte~) current_ypos#87 reg byte y 4.4
(byte) current_ypos#9 reg byte y 15.0
(byte) irq_cnt
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:36 0.19047619047619047
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:36 4.0
(byte) irq_cnt#14 irq_cnt zp ZP_BYTE:36 20.0
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:38 0.19047619047619047
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:38 4.0
(byte) irq_cnt#14 irq_cnt zp ZP_BYTE:38 20.0
(byte) irq_raster_next
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:32 0.17391304347826086
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:32 1.0
(byte) irq_raster_next#13 irq_raster_next zp ZP_BYTE:32 6.0
(byte) irq_raster_next#2 irq_raster_next zp ZP_BYTE:32 1.3333333333333333
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:34 0.17391304347826086
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:34 1.0
(byte) irq_raster_next#13 irq_raster_next zp ZP_BYTE:34 6.0
(byte) irq_raster_next#2 irq_raster_next zp ZP_BYTE:34 1.3333333333333333
(byte) irq_sprite_ptr
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:35 0.24
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:35 20.0
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:35 20.0
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:37 0.24
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:37 20.0
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:37 20.0
(byte) irq_sprite_ypos
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:34 0.7083333333333334
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:34 20.0
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:34 20.0
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:36 0.7083333333333334
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:36 20.0
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:36 20.0
(byte[]) keyboard_char_keycodes
(byte()) keyboard_event_get()
(label) keyboard_event_get::@3
@ -431,15 +439,15 @@
(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:31 20002.0
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:31 8100.9000000000015
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:31 97.06451612903226
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:31 3.515151515151515
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:31 18.999999999999996
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:31 20002.0
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:31 429.2857142857143
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:31 10201.2
(byte) keyboard_events_size#4 keyboard_events_size zp ZP_BYTE:31 3.0
(byte) keyboard_events_size#1 keyboard_events_size zp ZP_BYTE:33 20002.0
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:33 8100.9000000000015
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:33 97.06451612903226
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:33 3.515151515151515
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:33 18.999999999999996
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:33 20002.0
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:33 429.2857142857143
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:33 10201.2
(byte) keyboard_events_size#4 keyboard_events_size zp ZP_BYTE:33 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)
@ -461,16 +469,23 @@
(byte) keyboard_modifiers#5 reg byte a 20.0
(byte[8]) keyboard_scan_values
(const byte[8]) keyboard_scan_values#0 keyboard_scan_values = { fill( 8, 0) }
(byte) level
(byte) level#12 level zp ZP_BYTE:23 4.0
(byte) level#14 level zp ZP_BYTE:23 1.3333333333333333
(byte) level#16 level zp ZP_BYTE:23 0.7272727272727273
(byte) level#19 level zp ZP_BYTE:23 2.2181818181818174
(byte) level#24 level zp ZP_BYTE:23 6.0
(byte) level_bcd
(byte) level_bcd#11 level_bcd zp ZP_BYTE:23 2.313725490196078
(byte) level_bcd#13 level_bcd zp ZP_BYTE:23 2.6666666666666665
(byte) level_bcd#14 level_bcd zp ZP_BYTE:23 1.6666666666666665
(byte) level_bcd#16 level_bcd zp ZP_BYTE:23 2.25925925925926
(byte) level_bcd#21 level_bcd zp ZP_BYTE:23 6.0
(byte) level_bcd#4 level_bcd zp ZP_BYTE:23 4.0
(byte) level_bcd#13 level_bcd zp ZP_BYTE:25 2.313725490196078
(byte) level_bcd#15 level_bcd zp ZP_BYTE:25 1.3333333333333333
(byte) level_bcd#17 level_bcd zp ZP_BYTE:25 2.6666666666666665
(byte) level_bcd#18 level_bcd zp ZP_BYTE:25 2.0
(byte) level_bcd#20 level_bcd zp ZP_BYTE:25 2.0677966101694913
(byte) level_bcd#25 level_bcd zp ZP_BYTE:25 6.0
(byte) level_bcd#6 level_bcd zp ZP_BYTE:25 4.0
(word) lines_bcd
(word) lines_bcd#11 lines_bcd zp ZP_WORD:17 2.352941176470588
(word) lines_bcd#13 lines_bcd zp ZP_WORD:17 1.6666666666666665
(word) lines_bcd#13 lines_bcd zp ZP_WORD:17 1.3333333333333333
(word) lines_bcd#15 lines_bcd zp ZP_WORD:17 2.5416666666666656
(word) lines_bcd#20 lines_bcd zp ZP_WORD:17 6.0
(word) lines_bcd#23 lines_bcd zp ZP_WORD:17 1.0
@ -501,8 +516,8 @@
(byte) main::key_event
(byte) main::key_event#0 key_event zp ZP_BYTE:15 36.72727272727273
(byte) main::render
(byte) main::render#1 render zp ZP_BYTE:37 40.4
(byte) main::render#2 render zp ZP_BYTE:37 40.4
(byte) main::render#1 render zp ZP_BYTE:39 40.4
(byte) main::render#2 render zp ZP_BYTE:39 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 20002.0
@ -525,7 +540,7 @@
(byte) play_collision::col#2 col zp ZP_BYTE:14 6375.75
(byte~) play_collision::col#9 col zp ZP_BYTE:14 2002.0
(byte) play_collision::i
(byte) play_collision::i#1 i zp ZP_BYTE:38 1615.6153846153845
(byte) play_collision::i#1 i zp ZP_BYTE:40 1615.6153846153845
(byte~) play_collision::i#11 i#11 zp ZP_BYTE:13 2002.0
(byte~) play_collision::i#13 i#13 zp ZP_BYTE:13 20002.0
(byte) play_collision::i#2 i#2 zp ZP_BYTE:13 15502.0
@ -565,6 +580,12 @@
(byte) play_collision::ypos2#0 ypos2 zp ZP_BYTE:11 4.0
(byte) play_collision::ypos2#1 ypos2 zp ZP_BYTE:11 500.5
(byte) play_collision::ypos2#2 ypos2 zp ZP_BYTE:11 867.0666666666667
(void()) play_increase_level()
(byte~) play_increase_level::$1 reg byte a 4.0
(label) play_increase_level::@2
(label) play_increase_level::@4
(label) play_increase_level::@6
(label) play_increase_level::@return
(void()) play_init()
(byte~) play_init::$1 reg byte a 22.0
(label) play_init::@1
@ -734,13 +755,11 @@
(byte~) play_update_score::$2 reg byte a 4.0
(byte~) play_update_score::$4 reg byte a 4.0
(byte~) play_update_score::$5 reg byte a 4.0
(byte~) play_update_score::$9 reg byte a 4.0
(label) play_update_score::@3
(label) play_update_score::@4
(label) play_update_score::@5
(label) play_update_score::@6
(label) play_update_score::@return
(dword) play_update_score::add_bcd
(dword) play_update_score::add_bcd#0 add_bcd zp ZP_DWORD:39 1.3333333333333333
(dword) play_update_score::add_bcd#0 add_bcd zp ZP_DWORD:41 1.3333333333333333
(byte) play_update_score::lines_after
(byte) play_update_score::lines_after#0 reg byte a 4.0
(byte) play_update_score::lines_before
@ -788,42 +807,6 @@
(byte*) render_bcd::screen_pos#1 screen_pos zp ZP_WORD:7 20.0
(byte*) render_bcd::screen_pos#2 screen_pos zp ZP_WORD:7 4.0
(byte*) render_bcd::screen_pos#3 screen_pos zp ZP_WORD:7 2.0
(void()) render_current()
(byte~) render_current::$5 reg byte a 202.0
(label) render_current::@1
(label) render_current::@10
(label) render_current::@13
(label) render_current::@2
(label) render_current::@3
(label) render_current::@4
(label) render_current::@5
(label) render_current::@7
(label) render_current::@9
(label) render_current::@return
(byte) render_current::c
(byte) render_current::c#1 c zp ZP_BYTE:15 1501.5
(byte) render_current::c#2 c zp ZP_BYTE:15 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:13 202.0
(byte) render_current::i#10 i zp ZP_BYTE:13 429.0
(byte) render_current::i#3 i zp ZP_BYTE:13 50.5
(byte) render_current::i#4 i zp ZP_BYTE:13 1552.0
(byte) render_current::i#8 i zp ZP_BYTE:13 300.75
(byte) render_current::l
(byte) render_current::l#1 l zp ZP_BYTE:12 151.5
(byte) render_current::l#4 l zp ZP_BYTE:12 11.222222222222221
(byte*) render_current::screen_line
(byte*) render_current::screen_line#0 screen_line zp ZP_WORD:7 100.18181818181819
(byte) render_current::xpos
(byte) render_current::xpos#0 xpos zp ZP_BYTE:14 202.0
(byte) render_current::xpos#1 xpos zp ZP_BYTE:14 667.3333333333334
(byte) render_current::xpos#2 xpos zp ZP_BYTE:14 684.1666666666667
(byte) render_current::ypos2
(byte) render_current::ypos2#0 ypos2 zp ZP_BYTE:11 4.0
(byte) render_current::ypos2#1 ypos2 zp ZP_BYTE:11 67.33333333333333
(byte) render_current::ypos2#2 ypos2 zp ZP_BYTE:11 29.823529411764707
(void()) render_init()
(byte~) render_init::$13 reg byte a 22.0
(byte~) render_init::$14 reg byte a 22.0
@ -852,6 +835,42 @@
(byte*) render_init::vicSelectGfxBank1_toDd001_gfx
(byte) render_init::vicSelectGfxBank1_toDd001_return
(const byte) render_init::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte/signed byte/word/signed word/dword/signed dword) 3^>((word))(const byte*) PLAYFIELD_CHARSET#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(void()) render_moving()
(byte~) render_moving::$5 reg byte a 202.0
(label) render_moving::@1
(label) render_moving::@10
(label) render_moving::@13
(label) render_moving::@2
(label) render_moving::@3
(label) render_moving::@4
(label) render_moving::@5
(label) render_moving::@7
(label) render_moving::@9
(label) render_moving::@return
(byte) render_moving::c
(byte) render_moving::c#1 c zp ZP_BYTE:15 1501.5
(byte) render_moving::c#2 c zp ZP_BYTE:15 286.0
(byte) render_moving::current_cell
(byte) render_moving::current_cell#0 reg byte a 1001.0
(byte) render_moving::i
(byte) render_moving::i#1 i zp ZP_BYTE:13 202.0
(byte) render_moving::i#10 i zp ZP_BYTE:13 429.0
(byte) render_moving::i#3 i zp ZP_BYTE:13 50.5
(byte) render_moving::i#4 i zp ZP_BYTE:13 1552.0
(byte) render_moving::i#8 i zp ZP_BYTE:13 300.75
(byte) render_moving::l
(byte) render_moving::l#1 l zp ZP_BYTE:12 151.5
(byte) render_moving::l#4 l zp ZP_BYTE:12 11.222222222222221
(byte*) render_moving::screen_line
(byte*) render_moving::screen_line#0 screen_line zp ZP_WORD:7 100.18181818181819
(byte) render_moving::xpos
(byte) render_moving::xpos#0 xpos zp ZP_BYTE:14 202.0
(byte) render_moving::xpos#1 xpos zp ZP_BYTE:14 667.3333333333334
(byte) render_moving::xpos#2 xpos zp ZP_BYTE:14 684.1666666666667
(byte) render_moving::ypos2
(byte) render_moving::ypos2#0 ypos2 zp ZP_BYTE:11 4.0
(byte) render_moving::ypos2#1 ypos2 zp ZP_BYTE:11 67.33333333333333
(byte) render_moving::ypos2#2 ypos2 zp ZP_BYTE:11 29.823529411764707
(void()) render_playfield()
(byte~) render_playfield::$2 reg byte a 202.0
(byte~) render_playfield::$3 reg byte a 202.0
@ -902,13 +921,13 @@
(byte) render_screen_original::SPACE
(const byte) render_screen_original::SPACE#0 SPACE = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte*) render_screen_original::cols
(byte*) render_screen_original::cols#1 cols zp ZP_WORD:24 101.0
(byte*) render_screen_original::cols#2 cols zp ZP_WORD:24 75.75
(byte*) render_screen_original::cols#3 cols zp ZP_WORD:24 42.599999999999994
(byte*) render_screen_original::cols#4 cols zp ZP_WORD:24 78.5
(byte*) render_screen_original::cols#5 cols zp ZP_WORD:24 80.8
(byte*) render_screen_original::cols#6 cols zp ZP_WORD:24 101.0
(byte*) render_screen_original::cols#7 cols zp ZP_WORD:24 22.0
(byte*) render_screen_original::cols#1 cols zp ZP_WORD:26 101.0
(byte*) render_screen_original::cols#2 cols zp ZP_WORD:26 75.75
(byte*) render_screen_original::cols#3 cols zp ZP_WORD:26 42.599999999999994
(byte*) render_screen_original::cols#4 cols zp ZP_WORD:26 78.5
(byte*) render_screen_original::cols#5 cols zp ZP_WORD:26 80.8
(byte*) render_screen_original::cols#6 cols zp ZP_WORD:26 101.0
(byte*) render_screen_original::cols#7 cols zp ZP_WORD:26 22.0
(byte*) render_screen_original::ocols
(byte*) render_screen_original::ocols#1 ocols zp ZP_WORD:7 17.75
(byte*) render_screen_original::ocols#2 ocols zp ZP_WORD:7 67.33333333333333
@ -947,8 +966,8 @@
(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.37777777777777777
(byte) render_screen_showing
(byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:33 0.5
(byte) render_screen_showing#1 render_screen_showing zp ZP_BYTE:33 20.0
(byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:35 0.5
(byte) render_screen_showing#1 render_screen_showing zp ZP_BYTE:35 20.0
(void()) render_screen_swap()
(label) render_screen_swap::@return
(void()) render_show()
@ -988,10 +1007,10 @@
(const dword[]) score_add_bcd#0 score_add_bcd = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 64, (word/signed word/dword/signed dword) 256, (word/signed word/dword/signed dword) 768, (word/signed word/dword/signed dword) 4608 }
(dword) score_bcd
(dword) score_bcd#10 score_bcd zp ZP_DWORD:19 4.0
(dword) score_bcd#12 score_bcd zp ZP_DWORD:19 1.6666666666666665
(dword) score_bcd#12 score_bcd zp ZP_DWORD:19 1.3333333333333333
(dword) score_bcd#14 score_bcd zp ZP_DWORD:19 2.4489795918367347
(dword) score_bcd#20 score_bcd zp ZP_DWORD:19 6.0
(dword) score_bcd#23 score_bcd zp ZP_DWORD:19 0.8888888888888888
(dword) score_bcd#23 score_bcd zp ZP_DWORD:19 0.8571428571428571
(byte*[PLAYFIELD_LINES#0]) screen_lines_1
(const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 screen_lines_1 = { fill( PLAYFIELD_LINES#0, 0) }
(byte*[PLAYFIELD_LINES#0]) screen_lines_2
@ -1061,18 +1080,18 @@ zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 play_init::idx#2 play
zp ZP_BYTE:3 [ render_screen_render#17 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 play_update_score::lines_before#0 ]
zp ZP_WORD:5 [ render_score::screen#2 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 current_piece_gfx#53 current_piece_gfx#102 current_piece_gfx#103 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#12 current_piece#76 current_piece#77 current_piece#78 current_piece#79 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 render_init::li_1#2 render_init::li_1#1 render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 play_lock_current::playfield_line#0 ]
zp ZP_WORD:7 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_bcd::screen_pos#1 render_init::li_2#2 render_init::li_2#1 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 render_current::screen_line#0 play_collision::playfield_line#0 ]
zp ZP_WORD:7 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_bcd::screen_pos#1 render_init::li_2#2 render_init::li_2#1 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 render_moving::screen_line#0 play_collision::playfield_line#0 ]
reg byte y [ render_bcd::only_low#6 ]
reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
reg byte y [ current_ypos#9 current_ypos#86 current_ypos#87 ]
zp ZP_BYTE:9 [ render_screen_render#30 render_screen_render#64 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::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#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:10 [ current_xpos#47 current_xpos#112 current_xpos#113 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::x#2 play_remove_lines::x#1 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 ]
reg byte x [ current_piece_char#64 current_piece_char#90 current_piece_char#91 ]
zp ZP_BYTE:11 [ 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::full#4 play_remove_lines::full#2 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:12 [ render_current::l#4 render_current::l#1 play_collision::l#6 play_collision::l#1 play_remove_lines::c#0 ]
zp ZP_BYTE:13 [ 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:14 [ 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:15 [ render_current::c#2 render_current::c#1 main::key_event#0 ]
zp ZP_BYTE:11 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::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::full#4 play_remove_lines::full#2 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:12 [ render_moving::l#4 render_moving::l#1 play_collision::l#6 play_collision::l#1 play_remove_lines::c#0 ]
zp ZP_BYTE:13 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#10 render_moving::i#1 play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
zp ZP_BYTE:14 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
zp ZP_BYTE:15 [ render_moving::c#2 render_moving::c#1 main::key_event#0 ]
reg byte x [ render_screen_render#21 render_screen_render#65 ]
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 ]
@ -1084,12 +1103,14 @@ reg byte x [ play_move_down::movedown#6 play_move_down::movedown#3 play_move_dow
zp ZP_BYTE:16 [ 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:17 [ lines_bcd#20 lines_bcd#13 lines_bcd#15 lines_bcd#11 lines_bcd#23 render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
zp ZP_DWORD:19 [ score_bcd#20 score_bcd#12 score_bcd#14 score_bcd#10 score_bcd#23 ]
zp ZP_BYTE:23 [ level_bcd#21 level_bcd#14 level_bcd#16 level_bcd#11 level_bcd#13 level_bcd#4 ]
zp ZP_WORD:24 [ current_piece#20 current_piece#80 current_piece#16 current_piece#73 current_piece#10 render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
zp ZP_BYTE:26 [ current_orientation#29 current_orientation#10 current_orientation#19 current_orientation#4 current_orientation#14 ]
zp ZP_WORD:27 [ 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:29 [ current_xpos#33 current_xpos#10 current_xpos#23 current_xpos#19 current_xpos#4 current_xpos#1 current_xpos#2 ]
zp ZP_BYTE:30 [ current_piece_char#20 current_piece_char#15 current_piece_char#12 current_piece_char#1 ]
zp ZP_BYTE:23 [ level#24 level#14 level#19 level#12 level#16 ]
zp ZP_BYTE:24 [ current_movedown_slow#30 current_movedown_slow#19 current_movedown_slow#12 current_movedown_slow#1 current_movedown_slow#17 current_movedown_slow#20 current_movedown_slow#8 ]
zp ZP_BYTE:25 [ level_bcd#25 level_bcd#15 level_bcd#20 level_bcd#13 level_bcd#18 level_bcd#17 level_bcd#6 ]
zp ZP_WORD:26 [ current_piece#20 current_piece#80 current_piece#16 current_piece#73 current_piece#10 render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
zp ZP_BYTE:28 [ current_orientation#29 current_orientation#10 current_orientation#19 current_orientation#4 current_orientation#14 ]
zp ZP_WORD:29 [ 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:31 [ current_xpos#33 current_xpos#10 current_xpos#23 current_xpos#19 current_xpos#4 current_xpos#1 current_xpos#2 ]
zp ZP_BYTE:32 [ current_piece_char#20 current_piece_char#15 current_piece_char#12 current_piece_char#1 ]
reg byte x [ play_move_down::return#2 ]
reg byte x [ play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ]
@ -1098,23 +1119,23 @@ reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ]
reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
reg byte x [ keyboard_modifiers#13 keyboard_modifiers#4 keyboard_modifiers#12 keyboard_modifiers#3 keyboard_modifiers#11 ]
reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
zp ZP_BYTE:31 [ keyboard_events_size#10 keyboard_events_size#29 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#30 keyboard_events_size#2 keyboard_events_size#1 ]
zp ZP_BYTE:33 [ keyboard_events_size#10 keyboard_events_size#29 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#30 keyboard_events_size#2 keyboard_events_size#1 ]
reg byte a [ render_show::d018val#3 ]
reg byte x [ play_init::j#2 play_init::j#1 ]
reg byte x [ sprites_init::s#2 sprites_init::s#1 ]
reg byte x [ render_init::i#2 render_init::i#1 ]
reg byte x [ render_screen_original::x#6 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:32 [ irq_raster_next#13 irq_raster_next#2 irq_raster_next#1 irq_raster_next#0 ]
zp ZP_BYTE:34 [ 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:33 [ render_screen_showing#0 render_screen_showing#1 ]
zp ZP_BYTE:34 [ irq_sprite_ypos#0 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
zp ZP_BYTE:35 [ irq_sprite_ptr#0 irq_sprite_ptr#2 irq_sprite_ptr#1 ]
zp ZP_BYTE:36 [ irq_cnt#0 irq_cnt#1 irq_cnt#14 ]
zp ZP_BYTE:35 [ render_screen_showing#0 render_screen_showing#1 ]
zp ZP_BYTE:36 [ irq_sprite_ypos#0 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
zp ZP_BYTE:37 [ irq_sprite_ptr#0 irq_sprite_ptr#2 irq_sprite_ptr#1 ]
zp ZP_BYTE:38 [ 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::$12 ]
zp ZP_BYTE:37 [ main::render#1 main::render#2 ]
zp ZP_BYTE:39 [ 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::$13 ]
@ -1126,15 +1147,15 @@ reg byte a [ render_bcd::$3 ]
reg byte a [ render_bcd::$4 ]
reg byte a [ render_bcd::$5 ]
reg byte a [ render_bcd::$6 ]
reg byte a [ render_current::$5 ]
reg byte a [ render_current::current_cell#0 ]
reg byte a [ render_moving::$5 ]
reg byte a [ render_moving::current_cell#0 ]
reg byte a [ render_playfield::$2 ]
reg byte a [ render_playfield::$3 ]
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:38 [ play_collision::i#1 ]
zp ZP_BYTE:40 [ play_collision::i#1 ]
reg byte a [ play_collision::$7 ]
reg byte a [ play_collision::return#12 ]
reg byte a [ play_move_leftright::$4 ]
@ -1152,10 +1173,10 @@ reg byte a [ play_spawn_current::$1 ]
reg byte a [ sid_rnd::return#0 ]
reg byte a [ play_update_score::$2 ]
reg byte a [ play_update_score::$4 ]
zp ZP_DWORD:39 [ play_update_score::add_bcd#0 ]
zp ZP_DWORD:41 [ play_update_score::add_bcd#0 ]
reg byte a [ play_update_score::$5 ]
reg byte a [ play_update_score::lines_after#0 ]
reg byte a [ play_update_score::$9 ]
reg byte a [ play_increase_level::$1 ]
reg byte a [ keyboard_event_pressed::$0 ]
reg byte a [ keyboard_event_pressed::$1 ]
reg byte a [ keyboard_event_pressed::return#11 ]