mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-19 08:31:01 +00:00
Dropped memory.kc and fill() - Instead added C stdlib memset() to string.kc.
Pointer math on void pointer now results in an error.
This commit is contained in:
parent
1150cf859f
commit
b461fcfa74
@ -1,6 +1,7 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.model.Comment;
|
||||
import dk.camelot64.kickc.model.CompileError;
|
||||
import dk.camelot64.kickc.model.ControlFlowBlock;
|
||||
import dk.camelot64.kickc.model.Program;
|
||||
import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
|
||||
@ -10,6 +11,7 @@ import dk.camelot64.kickc.model.statements.Statement;
|
||||
import dk.camelot64.kickc.model.statements.StatementAssignment;
|
||||
import dk.camelot64.kickc.model.symbols.Variable;
|
||||
import dk.camelot64.kickc.model.symbols.VariableIntermediate;
|
||||
import dk.camelot64.kickc.model.types.SymbolType;
|
||||
import dk.camelot64.kickc.model.types.SymbolTypeInference;
|
||||
import dk.camelot64.kickc.model.types.SymbolTypePointer;
|
||||
import dk.camelot64.kickc.model.values.ConstantRef;
|
||||
@ -94,6 +96,9 @@ public class Pass1PointerSizeofFix extends Pass1Base {
|
||||
Variable variable = getScope().getVariable(varRef);
|
||||
if(variable.getType() instanceof SymbolTypePointer) {
|
||||
SymbolTypePointer pointerType = (SymbolTypePointer) variable.getType();
|
||||
if(SymbolType.VOID.equals(pointerType.getElementType())) {
|
||||
throw new CompileError("Void pointer math not allowed. ", assignment);
|
||||
}
|
||||
if(pointerType.getElementType().getSizeBytes() > 1) {
|
||||
// Binary operation on a non-byte pointer - sizeof()-handling is probably needed!
|
||||
if(Operators.PLUS.equals(assignment.getOperator()) || Operators.MINUS.equals(assignment.getOperator())) {
|
||||
@ -122,6 +127,9 @@ public class Pass1PointerSizeofFix extends Pass1Base {
|
||||
Variable variable = getScope().getVariable(varRef);
|
||||
if(variable.getType() instanceof SymbolTypePointer) {
|
||||
SymbolTypePointer pointerType = (SymbolTypePointer) variable.getType();
|
||||
if(SymbolType.VOID.equals(pointerType.getElementType())) {
|
||||
throw new CompileError("Void pointer math not allowed. ", assignment);
|
||||
}
|
||||
if(pointerType.getElementType().getSizeBytes() > 1) {
|
||||
// Unary operation on non-byte pointer type - sizeof()-handling is needed!
|
||||
if(Operators.INCREMENT.equals(assignment.getOperator())) {
|
||||
|
@ -1,9 +0,0 @@
|
||||
// Simple routines for working with memory
|
||||
|
||||
// Fill some memory with a value
|
||||
void fill(byte* start, word size, byte val) {
|
||||
byte* end = start + size;
|
||||
for(byte* addr = start; addr!=end; addr++) {
|
||||
*addr = val;
|
||||
}
|
||||
}
|
@ -1,28 +1,38 @@
|
||||
// Standard C strings.h - functions to manipulate C strings and arrays.
|
||||
|
||||
typedef word size_t ;
|
||||
|
||||
// Copy block of memory (forwards)
|
||||
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
|
||||
void* memcpy( void* destination, void* source, word num ) {
|
||||
void* memcpy( void* destination, void* source, size_t num ) {
|
||||
byte* src = source;
|
||||
byte* dst = destination;
|
||||
for( word i=0; i<num; i++) *dst++ = *src++;
|
||||
for( size_t i=0; i<num; i++) *dst++ = *src++;
|
||||
return destination;
|
||||
}
|
||||
|
||||
// Move block of memory
|
||||
// Copies the values of num bytes from the location pointed by source to the memory block pointed by destination. Copying takes place as if an intermediate buffer were used, allowing the destination and source to overlap.
|
||||
void* memmove( void* destination, void* source, word num ) {
|
||||
void* memmove( void* destination, void* source, size_t num ) {
|
||||
if((word)destination<(word)source) {
|
||||
memcpy(destination, source, num);
|
||||
} else {
|
||||
// copy backwards
|
||||
byte* src = source+num;
|
||||
byte* dst = destination+num;
|
||||
for( word i=0; i<num; i++) *--dst = *--src;
|
||||
for( size_t i=0; i<num; i++) *--dst = *--src;
|
||||
}
|
||||
return destination;
|
||||
}
|
||||
|
||||
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
||||
void *memset(void *str, byte c, size_t num) {
|
||||
byte* end = str + num;
|
||||
for(byte* dst = str; dst!=end; dst++)
|
||||
*dst = c;
|
||||
return str;
|
||||
}
|
||||
|
||||
// Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
|
||||
byte* strcpy( byte* destination, byte* source ) {
|
||||
byte* src = source;
|
||||
|
@ -40,6 +40,11 @@ public class TestPrograms {
|
||||
compileAndCompare("call-parameter-autocast");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPointerVoidErr0() throws IOException, URISyntaxException {
|
||||
assertError("pointer-void-err-0", "Void pointer math not allowed.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPointerVoid2() throws IOException, URISyntaxException {
|
||||
compileAndCompare("pointer-void-2");
|
||||
|
@ -3,7 +3,6 @@
|
||||
// Source: https://meatfighter.com/nintendotetrisai/
|
||||
|
||||
import "c64"
|
||||
import "memory"
|
||||
import "keyboard"
|
||||
import "sid"
|
||||
import "tetris-data"
|
||||
|
@ -1,6 +1,6 @@
|
||||
import "c64.kc"
|
||||
import "sinus.kc"
|
||||
import "memory.kc"
|
||||
import "string.kc"
|
||||
|
||||
byte* SCREEN = $400;
|
||||
byte* LOGO = $2000;
|
||||
@ -23,8 +23,8 @@ void main() {
|
||||
*BGCOL3 = BLACK;
|
||||
*D018 = toD018(SCREEN, LOGO);
|
||||
*D016 = VIC_MCM;
|
||||
fill(SCREEN, 1000, BLACK);
|
||||
fill(COLS, 1000, WHITE|8);
|
||||
memset(SCREEN, BLACK, 1000);
|
||||
memset(COLS, WHITE|8, 1000);
|
||||
for(byte ch: 0..239) {
|
||||
SCREEN[ch] = ch;
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
import "c64.kc"
|
||||
import "string"
|
||||
|
||||
byte* SCREEN = $400;
|
||||
byte* LOGO = $2000;
|
||||
@ -17,8 +18,8 @@ void main() {
|
||||
*BGCOL3 = BLACK;
|
||||
*D018 = toD018(SCREEN, LOGO);
|
||||
*D016 = VIC_MCM | VIC_CSEL;
|
||||
fill(SCREEN, 40*25, BLACK);
|
||||
fill(COLS, 40*25, WHITE|8);
|
||||
memset(SCREEN, BLACK, 40*25);
|
||||
memset(COLS, WHITE|8, 40*25);
|
||||
for(byte ch: 0..239) {
|
||||
SCREEN[ch] = ch;
|
||||
}
|
||||
@ -27,12 +28,3 @@ void main() {
|
||||
kickasm {{ inc $d020 }}
|
||||
}
|
||||
}
|
||||
|
||||
// Fill some memory with a value
|
||||
void fill(byte* start, word size, byte val) {
|
||||
byte* end = start + size;
|
||||
for(byte* addr = start; addr!=end; addr++) {
|
||||
*addr = val;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
import "c64.kc"
|
||||
import "sinus.kc"
|
||||
import "memory.kc"
|
||||
import "string.kc"
|
||||
import "bitmap2.kc"
|
||||
|
||||
byte* SCREEN = $400;
|
||||
@ -30,7 +30,7 @@ void main() {
|
||||
*D016 = VIC_CSEL;
|
||||
*D018 = toD018(SCREEN, BITMAP);
|
||||
|
||||
fill(SCREEN, 1000, WHITE);
|
||||
memset(SCREEN, WHITE, 1000);
|
||||
bitmap_init(BITMAP);
|
||||
bitmap_clear();
|
||||
sin16s_gen2(sin, SIN_SIZE, -320, 320);
|
||||
|
11
src/test/kc/pointer-void-err-0.kc
Normal file
11
src/test/kc/pointer-void-err-0.kc
Normal file
@ -0,0 +1,11 @@
|
||||
// Test simple void pointer - void pointer addition should fail
|
||||
|
||||
void main() {
|
||||
void* SCREEN = 0x0400;
|
||||
byte idx = 0;
|
||||
*((byte*)SCREEN) = idx;
|
||||
SCREEN++;
|
||||
*((byte*)SCREEN) = idx;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
// Illustrates a problem with a missing fragment - pbuc1_derefidx_vwuz1=vbuz2
|
||||
import "c64.kc"
|
||||
import "keyboard.kc"
|
||||
import "memory.kc"
|
||||
import "string.kc"
|
||||
import "multiply.kc"
|
||||
|
||||
const byte* screen = $400;
|
||||
@ -25,8 +25,8 @@ void main() {
|
||||
|
||||
void init() {
|
||||
init_sprites();
|
||||
fill(screen,1000,0);
|
||||
fill(colors,1000,BLACK);
|
||||
memset(screen, 0, 1000);
|
||||
memset(colors, BLACK, 1000);
|
||||
*D018 = toD018(screen, charset);
|
||||
asm {
|
||||
lda #$5b // as there are more than 256 rasterlines, the topmost bit of $d011 serves as
|
||||
|
@ -46,6 +46,8 @@ Adding pointer type conversion cast to void pointer (byte*) memcpy::source in (b
|
||||
Adding pointer type conversion cast to void pointer (byte*) memcpy::destination in (byte*) memcpy::dst ← (void*) memcpy::destination
|
||||
Adding pointer type conversion cast to void pointer (byte*) memmove::$3 in (byte*) memmove::src ← (void*~) memmove::$3
|
||||
Adding pointer type conversion cast to void pointer (byte*) memmove::$4 in (byte*) memmove::dst ← (void*~) memmove::$4
|
||||
Adding pointer type conversion cast to void pointer (byte*) memset::$0 in (byte*) memset::end ← (void*~) memset::$0
|
||||
Adding pointer type conversion cast to void pointer (byte*) memset::str in (byte*) memset::dst ← (void*) memset::str
|
||||
Adding pointer type conversion cast (byte*) MEDUSA_SCREEN in (byte*) MEDUSA_SCREEN ← (number) $1000
|
||||
Adding pointer type conversion cast (byte*) MEDUSA_COLORS in (byte*) MEDUSA_COLORS ← (number) $1400
|
||||
Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $400
|
||||
@ -65,6 +67,7 @@ Culled Empty Block (label) @4
|
||||
Culled Empty Block (label) memcpy::@3
|
||||
Culled Empty Block (label) @5
|
||||
Culled Empty Block (label) @6
|
||||
Culled Empty Block (label) @7
|
||||
Culled Empty Block (label) main::@4
|
||||
Culled Empty Block (label) main::@3
|
||||
Culled Empty Block (label) main::@5
|
||||
@ -75,7 +78,7 @@ CONTROL FLOW GRAPH SSA
|
||||
(byte*) BGCOL#0 ← ((byte*)) (number) $d021
|
||||
(byte*) COLS#0 ← ((byte*)) (number) $d800
|
||||
(byte) BLACK#0 ← (number) 0
|
||||
to:@7
|
||||
to:@8
|
||||
memcpy: scope:[memcpy] from main main::@7
|
||||
(word) memcpy::num#3 ← phi( main/(word) memcpy::num#0 main::@7/(word) memcpy::num#1 )
|
||||
(void*) memcpy::destination#2 ← phi( main/(void*) memcpy::destination#0 main::@7/(void*) memcpy::destination#1 )
|
||||
@ -106,7 +109,7 @@ memcpy::@return: scope:[memcpy] from memcpy::@2
|
||||
(void*) memcpy::return#1 ← (void*) memcpy::return#4
|
||||
return
|
||||
to:@return
|
||||
@7: scope:[] from @begin
|
||||
@8: scope:[] from @begin
|
||||
(byte*) MEDUSA_SCREEN#0 ← ((byte*)) (number) $1000
|
||||
(byte*) MEDUSA_COLORS#0 ← ((byte*)) (number) $1400
|
||||
(byte*) SCREEN#0 ← ((byte*)) (number) $400
|
||||
@ -116,8 +119,8 @@ memcpy::@return: scope:[memcpy] from memcpy::@2
|
||||
kickasm(location (byte*) MEDUSA_COLORS#0) {{ .var fileCols = LoadBinary("medusac.prg", BF_C64FILE)
|
||||
.fill fileCols.getSize(), fileCols.get(i)
|
||||
}}
|
||||
to:@8
|
||||
main: scope:[main] from @8
|
||||
to:@9
|
||||
main: scope:[main] from @9
|
||||
*((byte*) BGCOL#0) ← (byte) BLACK#0
|
||||
(void*) memcpy::destination#0 ← (void*)(byte*) SCREEN#0
|
||||
(void*) memcpy::source#0 ← (void*)(byte*) MEDUSA_SCREEN#0
|
||||
@ -144,15 +147,15 @@ main::@2: scope:[main] from main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@8: scope:[] from @7
|
||||
call main
|
||||
to:@9
|
||||
@9: scope:[] from @8
|
||||
call main
|
||||
to:@10
|
||||
@10: scope:[] from @9
|
||||
to:@end
|
||||
@end: scope:[] from @9
|
||||
@end: scope:[] from @10
|
||||
|
||||
SYMBOL TABLE SSA
|
||||
(label) @7
|
||||
(label) @10
|
||||
(label) @8
|
||||
(label) @9
|
||||
(label) @begin
|
||||
@ -316,8 +319,8 @@ Identical Phi Values (word) memcpy::num#3 (word) $3e8
|
||||
Successful SSA optimization Pass2IdenticalPhiElimination
|
||||
Added new block during phi lifting memcpy::@4(between memcpy::@1 and memcpy::@1)
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @8
|
||||
Adding NOP phi() at start of @9
|
||||
Adding NOP phi() at start of @10
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main::@7
|
||||
Adding NOP phi() at start of main::@8
|
||||
@ -332,13 +335,13 @@ Coalesced [25] memcpy::src#4 ← memcpy::src#1
|
||||
Coalesced [26] memcpy::dst#4 ← memcpy::dst#1
|
||||
Coalesced [27] memcpy::i#3 ← memcpy::i#1
|
||||
Coalesced down to 5 phi equivalence classes
|
||||
Culled Empty Block (label) @9
|
||||
Culled Empty Block (label) @10
|
||||
Culled Empty Block (label) main::@8
|
||||
Culled Empty Block (label) main::@1
|
||||
Culled Empty Block (label) memcpy::@2
|
||||
Culled Empty Block (label) memcpy::@4
|
||||
Renumbering block @7 to @1
|
||||
Renumbering block @8 to @2
|
||||
Renumbering block @8 to @1
|
||||
Renumbering block @9 to @2
|
||||
Renumbering block main::@2 to main::@1
|
||||
Renumbering block main::@7 to main::@2
|
||||
Adding NOP phi() at start of @begin
|
||||
|
@ -96,66 +96,65 @@ Inlined call (byte~) play_spawn_current::$5 ← call sid_rnd
|
||||
Culled Empty Block (label) @1
|
||||
Culled Empty Block (label) @2
|
||||
Culled Empty Block (label) @3
|
||||
Culled Empty Block (label) @4
|
||||
Culled Empty Block (label) @6
|
||||
Culled Empty Block (label) @5
|
||||
Culled Empty Block (label) keyboard_matrix_read::@1
|
||||
Culled Empty Block (label) @6
|
||||
Culled Empty Block (label) @7
|
||||
Culled Empty Block (label) @8
|
||||
Culled Empty Block (label) keyboard_event_scan::@22
|
||||
Culled Empty Block (label) keyboard_event_scan::@13
|
||||
Culled Empty Block (label) keyboard_event_scan::@15
|
||||
Culled Empty Block (label) keyboard_event_scan::@19
|
||||
Culled Empty Block (label) keyboard_event_scan::@4
|
||||
Culled Empty Block (label) @10
|
||||
Culled Empty Block (label) @9
|
||||
Culled Empty Block (label) keyboard_event_pressed::@1
|
||||
Culled Empty Block (label) @11
|
||||
Culled Empty Block (label) @10
|
||||
Culled Empty Block (label) keyboard_event_get::@4
|
||||
Culled Empty Block (label) keyboard_event_get::@2
|
||||
Culled Empty Block (label) keyboard_event_get::@5
|
||||
Culled Empty Block (label) keyboard_event_get::@6
|
||||
Culled Empty Block (label) @13
|
||||
Culled Empty Block (label) @12
|
||||
Culled Empty Block (label) render_init::vicSelectGfxBank1_toDd001_@1
|
||||
Culled Empty Block (label) render_init::vicSelectGfxBank1_@return
|
||||
Culled Empty Block (label) @15
|
||||
Culled Empty Block (label) @14
|
||||
Culled Empty Block (label) render_show::toD0181_@1
|
||||
Culled Empty Block (label) render_show::toD0182_@1
|
||||
Culled Empty Block (label) render_show::@4
|
||||
Culled Empty Block (label) @15
|
||||
Culled Empty Block (label) @16
|
||||
Culled Empty Block (label) @17
|
||||
Culled Empty Block (label) render_score::@4
|
||||
Culled Empty Block (label) @17
|
||||
Culled Empty Block (label) @18
|
||||
Culled Empty Block (label) @19
|
||||
Culled Empty Block (label) render_screen_original::@3
|
||||
Culled Empty Block (label) render_screen_original::@5
|
||||
Culled Empty Block (label) render_screen_original::@8
|
||||
Culled Empty Block (label) @20
|
||||
Culled Empty Block (label) @19
|
||||
Culled Empty Block (label) render_playfield::@4
|
||||
Culled Empty Block (label) @21
|
||||
Culled Empty Block (label) @20
|
||||
Culled Empty Block (label) render_moving::@9
|
||||
Culled Empty Block (label) render_moving::@7
|
||||
Culled Empty Block (label) render_moving::@10
|
||||
Culled Empty Block (label) @22
|
||||
Culled Empty Block (label) @21
|
||||
Culled Empty Block (label) render_next::@4
|
||||
Culled Empty Block (label) render_next::@10
|
||||
Culled Empty Block (label) render_next::@12
|
||||
Culled Empty Block (label) sprites_init::@2
|
||||
Culled Empty Block (label) toSpritePtr1_@1
|
||||
Culled Empty Block (label) @25
|
||||
Culled Empty Block (label) @24
|
||||
Culled Empty Block (label) sprites_irq::@14
|
||||
Culled Empty Block (label) sprites_irq::toSpritePtr2_@1
|
||||
Culled Empty Block (label) sprites_irq::@5
|
||||
Culled Empty Block (label) sprites_irq::@9
|
||||
Culled Empty Block (label) sprites_irq::@10
|
||||
Culled Empty Block (label) play_init::@4
|
||||
Culled Empty Block (label) @27
|
||||
Culled Empty Block (label) @26
|
||||
Culled Empty Block (label) play_movement::@3
|
||||
Culled Empty Block (label) play_movement::@4
|
||||
Culled Empty Block (label) @28
|
||||
Culled Empty Block (label) @27
|
||||
Culled Empty Block (label) play_move_down::@13
|
||||
Culled Empty Block (label) play_move_down::@11
|
||||
Culled Empty Block (label) play_move_down::@16
|
||||
Culled Empty Block (label) play_move_down::@12
|
||||
Culled Empty Block (label) @29
|
||||
Culled Empty Block (label) @28
|
||||
Culled Empty Block (label) play_move_leftright::@2
|
||||
Culled Empty Block (label) play_move_leftright::@12
|
||||
Culled Empty Block (label) play_move_leftright::@7
|
||||
@ -163,7 +162,7 @@ Culled Empty Block (label) play_move_leftright::@8
|
||||
Culled Empty Block (label) play_move_leftright::@13
|
||||
Culled Empty Block (label) play_move_leftright::@10
|
||||
Culled Empty Block (label) play_move_leftright::@11
|
||||
Culled Empty Block (label) @30
|
||||
Culled Empty Block (label) @29
|
||||
Culled Empty Block (label) play_move_rotate::@8
|
||||
Culled Empty Block (label) play_move_rotate::@3
|
||||
Culled Empty Block (label) play_move_rotate::@9
|
||||
@ -176,26 +175,26 @@ Culled Empty Block (label) play_collision::@11
|
||||
Culled Empty Block (label) play_collision::@7
|
||||
Culled Empty Block (label) play_collision::@13
|
||||
Culled Empty Block (label) play_collision::@19
|
||||
Culled Empty Block (label) @32
|
||||
Culled Empty Block (label) @31
|
||||
Culled Empty Block (label) play_lock_current::@6
|
||||
Culled Empty Block (label) @33
|
||||
Culled Empty Block (label) @32
|
||||
Culled Empty Block (label) play_spawn_current::@4
|
||||
Culled Empty Block (label) play_spawn_current::sid_rnd1_@1
|
||||
Culled Empty Block (label) play_spawn_current::@6
|
||||
Culled Empty Block (label) play_spawn_current::@7
|
||||
Culled Empty Block (label) play_spawn_current::@8
|
||||
Culled Empty Block (label) @34
|
||||
Culled Empty Block (label) @33
|
||||
Culled Empty Block (label) play_remove_lines::@8
|
||||
Culled Empty Block (label) play_remove_lines::@12
|
||||
Culled Empty Block (label) play_remove_lines::@13
|
||||
Culled Empty Block (label) play_remove_lines::@14
|
||||
Culled Empty Block (label) play_remove_lines::@15
|
||||
Culled Empty Block (label) @35
|
||||
Culled Empty Block (label) @34
|
||||
Culled Empty Block (label) play_update_score::@1
|
||||
Culled Empty Block (label) play_update_score::@4
|
||||
Culled Empty Block (label) @36
|
||||
Culled Empty Block (label) @35
|
||||
Culled Empty Block (label) play_increase_level::@5
|
||||
Culled Empty Block (label) @37
|
||||
Culled Empty Block (label) @36
|
||||
Culled Empty Block (label) main::@2
|
||||
Culled Empty Block (label) main::@21
|
||||
Culled Empty Block (label) main::@3
|
||||
@ -262,8 +261,8 @@ CONTROL FLOW GRAPH SSA
|
||||
(byte) GREY#0 ← (number) $c
|
||||
(byte) LIGHT_GREEN#0 ← (number) $d
|
||||
(byte) LIGHT_BLUE#0 ← (number) $e
|
||||
to:@5
|
||||
@5: scope:[] from @begin
|
||||
to:@4
|
||||
@4: scope:[] from @begin
|
||||
(byte) KEY_Z#0 ← (number) $c
|
||||
(byte) KEY_LSHIFT#0 ← (number) $f
|
||||
(byte) KEY_X#0 ← (number) $17
|
||||
@ -275,7 +274,7 @@ CONTROL FLOW GRAPH SSA
|
||||
(byte) KEY_COMMODORE#0 ← (number) $3d
|
||||
(byte[8]) keyboard_matrix_row_bitmask#0 ← { (number) $fe, (number) $fd, (number) $fb, (number) $f7, (number) $ef, (number) $df, (number) $bf, (number) $7f }
|
||||
(byte[8]) keyboard_matrix_col_bitmask#0 ← { (number) 1, (number) 2, (number) 4, (number) 8, (number) $10, (number) $20, (number) $40, (number) $80 }
|
||||
to:@9
|
||||
to:@8
|
||||
keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@8
|
||||
(byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_event_scan::@8/(byte) keyboard_matrix_read::rowid#0 )
|
||||
*((byte*) CIA1_PORT_A#0) ← *((byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#1)
|
||||
@ -288,7 +287,7 @@ keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matri
|
||||
(byte) keyboard_matrix_read::return#1 ← (byte) keyboard_matrix_read::return#3
|
||||
return
|
||||
to:@return
|
||||
@9: scope:[] from @5
|
||||
@8: scope:[] from @4
|
||||
(byte[8]) keyboard_events#0 ← { fill( 8, 0) }
|
||||
(byte) keyboard_events_size#0 ← (number) 0
|
||||
(byte) keyboard_modifiers#0 ← (number) 0
|
||||
@ -297,7 +296,7 @@ keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matri
|
||||
(byte) KEY_MODIFIER_CTRL#0 ← (number) 4
|
||||
(byte) KEY_MODIFIER_COMMODORE#0 ← (number) 8
|
||||
(byte[8]) keyboard_scan_values#0 ← { fill( 8, 0) }
|
||||
to:@12
|
||||
to:@11
|
||||
keyboard_event_scan: scope:[keyboard_event_scan] from main::@35
|
||||
(byte) keyboard_events_size#53 ← phi( main::@35/(byte) keyboard_events_size#26 )
|
||||
(byte) keyboard_event_scan::keycode#0 ← (number) 0
|
||||
@ -542,14 +541,14 @@ keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get
|
||||
(byte) keyboard_events_size#5 ← (byte) keyboard_events_size#16
|
||||
return
|
||||
to:@return
|
||||
@12: scope:[] from @9
|
||||
(byte) keyboard_modifiers#58 ← phi( @9/(byte) keyboard_modifiers#0 )
|
||||
(byte) keyboard_events_size#76 ← phi( @9/(byte) keyboard_events_size#0 )
|
||||
@11: scope:[] from @8
|
||||
(byte) keyboard_modifiers#58 ← phi( @8/(byte) keyboard_modifiers#0 )
|
||||
(byte) keyboard_events_size#76 ← phi( @8/(byte) keyboard_events_size#0 )
|
||||
(word*) SID_VOICE3_FREQ#0 ← ((word*)) (number) $d40e
|
||||
(byte*) SID_VOICE3_CONTROL#0 ← ((byte*)) (number) $d412
|
||||
(byte) SID_CONTROL_NOISE#0 ← (number) $80
|
||||
(byte*) SID_VOICE3_OSC#0 ← ((byte*)) (number) $d41b
|
||||
to:@14
|
||||
to:@13
|
||||
sid_rnd_init: scope:[sid_rnd_init] from main
|
||||
*((word*) SID_VOICE3_FREQ#0) ← (number) $ffff
|
||||
*((byte*) SID_VOICE3_CONTROL#0) ← (byte) SID_CONTROL_NOISE#0
|
||||
@ -557,9 +556,9 @@ sid_rnd_init: scope:[sid_rnd_init] from main
|
||||
sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init
|
||||
return
|
||||
to:@return
|
||||
@14: scope:[] from @12
|
||||
(byte) keyboard_modifiers#56 ← phi( @12/(byte) keyboard_modifiers#58 )
|
||||
(byte) keyboard_events_size#74 ← phi( @12/(byte) keyboard_events_size#76 )
|
||||
@13: scope:[] from @11
|
||||
(byte) keyboard_modifiers#56 ← phi( @11/(byte) keyboard_modifiers#58 )
|
||||
(byte) keyboard_events_size#74 ← phi( @11/(byte) keyboard_events_size#76 )
|
||||
(byte*) PLAYFIELD_SCREEN_1#0 ← ((byte*)) (number) $400
|
||||
(byte*) PLAYFIELD_SCREEN_2#0 ← ((byte*)) (number) $2c00
|
||||
(byte*~) $1 ← (byte*) PLAYFIELD_SCREEN_1#0 + (word) SPRITE_PTRS#0
|
||||
@ -604,7 +603,7 @@ sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init
|
||||
(byte[]) PIECES_COLORS_2#0 ← { (byte) CYAN#0, (byte) LIGHT_GREEN#0, (byte) PINK#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_BLUE#0, (byte) DARK_GREY#0, (byte) PURPLE#0, (byte) RED#0, (byte) ORANGE#0, (byte) CYAN#0, (byte) LIGHT_GREEN#0, (byte) PINK#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_BLUE#0, (byte) DARK_GREY#0, (byte) PURPLE#0, (byte) RED#0, (byte) ORANGE#0, (byte) CYAN#0, (byte) LIGHT_GREEN#0, (byte) PINK#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_BLUE#0, (byte) DARK_GREY#0, (byte) PURPLE#0, (byte) RED#0, (byte) ORANGE#0 }
|
||||
(byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 ← { fill( PLAYFIELD_LINES#0, 0) }
|
||||
(byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 ← { fill( PLAYFIELD_LINES#0, 0) }
|
||||
to:@23
|
||||
to:@22
|
||||
render_init: scope:[render_init] from main::@25
|
||||
(byte*) render_init::vicSelectGfxBank1_gfx#0 ← (byte*) PLAYFIELD_CHARSET#0
|
||||
to:render_init::vicSelectGfxBank1
|
||||
@ -1226,21 +1225,21 @@ render_next::@11: scope:[render_next] from render_next::@8
|
||||
render_next::@return: scope:[render_next] from render_next::@11
|
||||
return
|
||||
to:@return
|
||||
@23: scope:[] from @14
|
||||
(byte) level_bcd#95 ← phi( @14/(byte) level_bcd#0 )
|
||||
(byte) level#103 ← phi( @14/(byte) level#0 )
|
||||
(dword) score_bcd#78 ← phi( @14/(dword) score_bcd#0 )
|
||||
(word) lines_bcd#82 ← phi( @14/(word) lines_bcd#0 )
|
||||
(byte) keyboard_modifiers#54 ← phi( @14/(byte) keyboard_modifiers#56 )
|
||||
(byte) keyboard_events_size#72 ← phi( @14/(byte) keyboard_events_size#74 )
|
||||
(byte) render_screen_showing#42 ← phi( @14/(byte) render_screen_showing#0 )
|
||||
(byte) game_over#85 ← phi( @14/(byte) game_over#0 )
|
||||
(byte) current_ypos#97 ← phi( @14/(byte) current_ypos#0 )
|
||||
(byte) current_xpos#118 ← phi( @14/(byte) current_xpos#0 )
|
||||
(byte*) current_piece_gfx#111 ← phi( @14/(byte*) current_piece_gfx#0 )
|
||||
(byte) current_piece_char#99 ← phi( @14/(byte) current_piece_char#0 )
|
||||
(byte) render_screen_render#62 ← phi( @14/(byte) render_screen_render#0 )
|
||||
(byte) render_screen_show#57 ← phi( @14/(byte) render_screen_show#0 )
|
||||
@22: scope:[] from @13
|
||||
(byte) level_bcd#95 ← phi( @13/(byte) level_bcd#0 )
|
||||
(byte) level#103 ← phi( @13/(byte) level#0 )
|
||||
(dword) score_bcd#78 ← phi( @13/(dword) score_bcd#0 )
|
||||
(word) lines_bcd#82 ← phi( @13/(word) lines_bcd#0 )
|
||||
(byte) keyboard_modifiers#54 ← phi( @13/(byte) keyboard_modifiers#56 )
|
||||
(byte) keyboard_events_size#72 ← phi( @13/(byte) keyboard_events_size#74 )
|
||||
(byte) render_screen_showing#42 ← phi( @13/(byte) render_screen_showing#0 )
|
||||
(byte) game_over#85 ← phi( @13/(byte) game_over#0 )
|
||||
(byte) current_ypos#97 ← phi( @13/(byte) current_ypos#0 )
|
||||
(byte) current_xpos#118 ← phi( @13/(byte) current_xpos#0 )
|
||||
(byte*) current_piece_gfx#111 ← phi( @13/(byte*) current_piece_gfx#0 )
|
||||
(byte) current_piece_char#99 ← phi( @13/(byte) current_piece_char#0 )
|
||||
(byte) render_screen_render#62 ← phi( @13/(byte) render_screen_render#0 )
|
||||
(byte) render_screen_show#57 ← phi( @13/(byte) render_screen_show#0 )
|
||||
kickasm(location (byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000))
|
||||
// Put the sprites into memory
|
||||
.for(var sy=0;sy<10;sy++) {
|
||||
@ -1256,7 +1255,7 @@ render_next::@return: scope:[render_next] from render_next::@11
|
||||
}
|
||||
}
|
||||
}}
|
||||
to:@24
|
||||
to:@23
|
||||
sprites_init: scope:[sprites_init] from main::@26
|
||||
*((byte*) SPRITES_ENABLE#0) ← (number) $f
|
||||
*((byte*) SPRITES_MC#0) ← (number) 0
|
||||
@ -1281,21 +1280,21 @@ sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1
|
||||
sprites_init::@return: scope:[sprites_init] from sprites_init::@1
|
||||
return
|
||||
to:@return
|
||||
@24: scope:[] from @23
|
||||
(byte) level_bcd#92 ← phi( @23/(byte) level_bcd#95 )
|
||||
(byte) level#99 ← phi( @23/(byte) level#103 )
|
||||
(dword) score_bcd#76 ← phi( @23/(dword) score_bcd#78 )
|
||||
(word) lines_bcd#79 ← phi( @23/(word) lines_bcd#82 )
|
||||
(byte) keyboard_modifiers#51 ← phi( @23/(byte) keyboard_modifiers#54 )
|
||||
(byte) keyboard_events_size#68 ← phi( @23/(byte) keyboard_events_size#72 )
|
||||
(byte) render_screen_showing#39 ← phi( @23/(byte) render_screen_showing#42 )
|
||||
(byte) game_over#83 ← phi( @23/(byte) game_over#85 )
|
||||
(byte) current_ypos#96 ← phi( @23/(byte) current_ypos#97 )
|
||||
(byte) current_xpos#117 ← phi( @23/(byte) current_xpos#118 )
|
||||
(byte*) current_piece_gfx#110 ← phi( @23/(byte*) current_piece_gfx#111 )
|
||||
(byte) current_piece_char#98 ← phi( @23/(byte) current_piece_char#99 )
|
||||
(byte) render_screen_render#60 ← phi( @23/(byte) render_screen_render#62 )
|
||||
(byte) render_screen_show#55 ← phi( @23/(byte) render_screen_show#57 )
|
||||
@23: scope:[] from @22
|
||||
(byte) level_bcd#92 ← phi( @22/(byte) level_bcd#95 )
|
||||
(byte) level#99 ← phi( @22/(byte) level#103 )
|
||||
(dword) score_bcd#76 ← phi( @22/(dword) score_bcd#78 )
|
||||
(word) lines_bcd#79 ← phi( @22/(word) lines_bcd#82 )
|
||||
(byte) keyboard_modifiers#51 ← phi( @22/(byte) keyboard_modifiers#54 )
|
||||
(byte) keyboard_events_size#68 ← phi( @22/(byte) keyboard_events_size#72 )
|
||||
(byte) render_screen_showing#39 ← phi( @22/(byte) render_screen_showing#42 )
|
||||
(byte) game_over#83 ← phi( @22/(byte) game_over#85 )
|
||||
(byte) current_ypos#96 ← phi( @22/(byte) current_ypos#97 )
|
||||
(byte) current_xpos#117 ← phi( @22/(byte) current_xpos#118 )
|
||||
(byte*) current_piece_gfx#110 ← phi( @22/(byte*) current_piece_gfx#111 )
|
||||
(byte) current_piece_char#98 ← phi( @22/(byte) current_piece_char#99 )
|
||||
(byte) render_screen_render#60 ← phi( @22/(byte) render_screen_render#62 )
|
||||
(byte) render_screen_show#55 ← phi( @22/(byte) render_screen_show#57 )
|
||||
(byte) SPRITES_FIRST_YPOS#0 ← (number) $31
|
||||
(number~) $4 ← (byte) SPRITES_FIRST_YPOS#0 + (number) $13
|
||||
(byte) IRQ_RASTER_FIRST#0 ← (number~) $4
|
||||
@ -1304,24 +1303,24 @@ sprites_init::@return: scope:[sprites_init] from sprites_init::@1
|
||||
(byte) irq_sprite_ypos#0 ← (number~) $5
|
||||
(byte*) toSpritePtr1_sprite#0 ← (byte*) PLAYFIELD_SPRITES#0
|
||||
to:toSpritePtr1
|
||||
toSpritePtr1: scope:[] from @24
|
||||
(byte) level_bcd#85 ← phi( @24/(byte) level_bcd#92 )
|
||||
(byte) level#92 ← phi( @24/(byte) level#99 )
|
||||
(dword) score_bcd#70 ← phi( @24/(dword) score_bcd#76 )
|
||||
(word) lines_bcd#73 ← phi( @24/(word) lines_bcd#79 )
|
||||
(byte) keyboard_modifiers#48 ← phi( @24/(byte) keyboard_modifiers#51 )
|
||||
(byte) keyboard_events_size#63 ← phi( @24/(byte) keyboard_events_size#68 )
|
||||
(byte) render_screen_showing#36 ← phi( @24/(byte) render_screen_showing#39 )
|
||||
(byte) game_over#78 ← phi( @24/(byte) game_over#83 )
|
||||
(byte) current_ypos#93 ← phi( @24/(byte) current_ypos#96 )
|
||||
(byte) current_xpos#114 ← phi( @24/(byte) current_xpos#117 )
|
||||
(byte*) current_piece_gfx#105 ← phi( @24/(byte*) current_piece_gfx#110 )
|
||||
(byte) current_piece_char#92 ← phi( @24/(byte) current_piece_char#98 )
|
||||
(byte) render_screen_render#57 ← phi( @24/(byte) render_screen_render#60 )
|
||||
(byte) render_screen_show#52 ← phi( @24/(byte) render_screen_show#55 )
|
||||
(byte) irq_raster_next#24 ← phi( @24/(byte) irq_raster_next#0 )
|
||||
(byte) irq_sprite_ypos#24 ← phi( @24/(byte) irq_sprite_ypos#0 )
|
||||
(byte*) toSpritePtr1_sprite#1 ← phi( @24/(byte*) toSpritePtr1_sprite#0 )
|
||||
toSpritePtr1: scope:[] from @23
|
||||
(byte) level_bcd#85 ← phi( @23/(byte) level_bcd#92 )
|
||||
(byte) level#92 ← phi( @23/(byte) level#99 )
|
||||
(dword) score_bcd#70 ← phi( @23/(dword) score_bcd#76 )
|
||||
(word) lines_bcd#73 ← phi( @23/(word) lines_bcd#79 )
|
||||
(byte) keyboard_modifiers#48 ← phi( @23/(byte) keyboard_modifiers#51 )
|
||||
(byte) keyboard_events_size#63 ← phi( @23/(byte) keyboard_events_size#68 )
|
||||
(byte) render_screen_showing#36 ← phi( @23/(byte) render_screen_showing#39 )
|
||||
(byte) game_over#78 ← phi( @23/(byte) game_over#83 )
|
||||
(byte) current_ypos#93 ← phi( @23/(byte) current_ypos#96 )
|
||||
(byte) current_xpos#114 ← phi( @23/(byte) current_xpos#117 )
|
||||
(byte*) current_piece_gfx#105 ← phi( @23/(byte*) current_piece_gfx#110 )
|
||||
(byte) current_piece_char#92 ← phi( @23/(byte) current_piece_char#98 )
|
||||
(byte) render_screen_render#57 ← phi( @23/(byte) render_screen_render#60 )
|
||||
(byte) render_screen_show#52 ← phi( @23/(byte) render_screen_show#55 )
|
||||
(byte) irq_raster_next#24 ← phi( @23/(byte) irq_raster_next#0 )
|
||||
(byte) irq_sprite_ypos#24 ← phi( @23/(byte) irq_sprite_ypos#0 )
|
||||
(byte*) toSpritePtr1_sprite#1 ← phi( @23/(byte*) toSpritePtr1_sprite#0 )
|
||||
(word~) toSpritePtr1_$0#0 ← ((word)) (byte*) toSpritePtr1_sprite#1
|
||||
(number~) toSpritePtr1_$1#0 ← (word~) toSpritePtr1_$0#0 / (number) $40
|
||||
(byte~) toSpritePtr1_$2#0 ← ((byte)) (number~) toSpritePtr1_$1#0
|
||||
@ -1346,8 +1345,8 @@ toSpritePtr1_@return: scope:[] from toSpritePtr1
|
||||
(byte) irq_sprite_ypos#22 ← phi( toSpritePtr1/(byte) irq_sprite_ypos#24 )
|
||||
(byte) toSpritePtr1_return#2 ← phi( toSpritePtr1/(byte) toSpritePtr1_return#0 )
|
||||
(byte) toSpritePtr1_return#1 ← (byte) toSpritePtr1_return#2
|
||||
to:@39
|
||||
@39: scope:[] from toSpritePtr1_@return
|
||||
to:@38
|
||||
@38: scope:[] from toSpritePtr1_@return
|
||||
(byte) level_bcd#68 ← phi( toSpritePtr1_@return/(byte) level_bcd#78 )
|
||||
(byte) level#72 ← phi( toSpritePtr1_@return/(byte) level#85 )
|
||||
(dword) score_bcd#56 ← phi( toSpritePtr1_@return/(dword) score_bcd#65 )
|
||||
@ -1369,7 +1368,7 @@ toSpritePtr1_@return: scope:[] from toSpritePtr1
|
||||
(number~) $7 ← (byte~) $6 + (number) 3
|
||||
(byte) irq_sprite_ptr#0 ← (number~) $7
|
||||
(byte) irq_cnt#0 ← (number) 0
|
||||
to:@26
|
||||
to:@25
|
||||
sprites_irq_init: scope:[sprites_irq_init] from main::@27
|
||||
asm { sei }
|
||||
*((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
|
||||
@ -1388,11 +1387,11 @@ sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init
|
||||
return
|
||||
to:@return
|
||||
sprites_irq: scope:[sprites_irq] from
|
||||
(byte) irq_cnt#15 ← phi( @38/(byte) irq_cnt#17 )
|
||||
(byte) render_screen_showing#15 ← phi( @38/(byte) render_screen_showing#14 )
|
||||
(byte) irq_sprite_ptr#12 ← phi( @38/(byte) irq_sprite_ptr#14 )
|
||||
(byte) irq_raster_next#5 ← phi( @38/(byte) irq_raster_next#10 )
|
||||
(byte) irq_sprite_ypos#5 ← phi( @38/(byte) irq_sprite_ypos#9 )
|
||||
(byte) irq_cnt#15 ← phi( @37/(byte) irq_cnt#17 )
|
||||
(byte) render_screen_showing#15 ← phi( @37/(byte) render_screen_showing#14 )
|
||||
(byte) irq_sprite_ptr#12 ← phi( @37/(byte) irq_sprite_ptr#14 )
|
||||
(byte) irq_raster_next#5 ← phi( @37/(byte) irq_raster_next#10 )
|
||||
(byte) irq_sprite_ypos#5 ← phi( @37/(byte) irq_sprite_ypos#9 )
|
||||
asm { cld }
|
||||
(byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#5
|
||||
*((byte*) SPRITES_YPOS#0 + (number) 0) ← (byte) sprites_irq::ypos#0
|
||||
@ -1533,25 +1532,25 @@ sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@6
|
||||
(byte) irq_sprite_ptr#4 ← (byte) irq_sprite_ptr#8
|
||||
return
|
||||
to:@return
|
||||
@26: scope:[] from @39
|
||||
(byte) irq_cnt#20 ← phi( @39/(byte) irq_cnt#0 )
|
||||
(byte) irq_sprite_ptr#18 ← phi( @39/(byte) irq_sprite_ptr#0 )
|
||||
(byte) level_bcd#61 ← phi( @39/(byte) level_bcd#68 )
|
||||
(byte) level#64 ← phi( @39/(byte) level#72 )
|
||||
(dword) score_bcd#51 ← phi( @39/(dword) score_bcd#56 )
|
||||
(word) lines_bcd#51 ← phi( @39/(word) lines_bcd#58 )
|
||||
(byte) keyboard_modifiers#33 ← phi( @39/(byte) keyboard_modifiers#39 )
|
||||
(byte) keyboard_events_size#40 ← phi( @39/(byte) keyboard_events_size#48 )
|
||||
(byte) render_screen_showing#21 ← phi( @39/(byte) render_screen_showing#26 )
|
||||
(byte) game_over#51 ← phi( @39/(byte) game_over#59 )
|
||||
(byte) current_ypos#69 ← phi( @39/(byte) current_ypos#77 )
|
||||
(byte) current_xpos#85 ← phi( @39/(byte) current_xpos#97 )
|
||||
(byte*) current_piece_gfx#72 ← phi( @39/(byte*) current_piece_gfx#84 )
|
||||
(byte) current_piece_char#58 ← phi( @39/(byte) current_piece_char#70 )
|
||||
(byte) render_screen_render#43 ← phi( @39/(byte) render_screen_render#49 )
|
||||
(byte) render_screen_show#35 ← phi( @39/(byte) render_screen_show#42 )
|
||||
(byte) irq_raster_next#20 ← phi( @39/(byte) irq_raster_next#22 )
|
||||
(byte) irq_sprite_ypos#18 ← phi( @39/(byte) irq_sprite_ypos#21 )
|
||||
@25: scope:[] from @38
|
||||
(byte) irq_cnt#20 ← phi( @38/(byte) irq_cnt#0 )
|
||||
(byte) irq_sprite_ptr#18 ← phi( @38/(byte) irq_sprite_ptr#0 )
|
||||
(byte) level_bcd#61 ← phi( @38/(byte) level_bcd#68 )
|
||||
(byte) level#64 ← phi( @38/(byte) level#72 )
|
||||
(dword) score_bcd#51 ← phi( @38/(dword) score_bcd#56 )
|
||||
(word) lines_bcd#51 ← phi( @38/(word) lines_bcd#58 )
|
||||
(byte) keyboard_modifiers#33 ← phi( @38/(byte) keyboard_modifiers#39 )
|
||||
(byte) keyboard_events_size#40 ← phi( @38/(byte) keyboard_events_size#48 )
|
||||
(byte) render_screen_showing#21 ← phi( @38/(byte) render_screen_showing#26 )
|
||||
(byte) game_over#51 ← phi( @38/(byte) game_over#59 )
|
||||
(byte) current_ypos#69 ← phi( @38/(byte) current_ypos#77 )
|
||||
(byte) current_xpos#85 ← phi( @38/(byte) current_xpos#97 )
|
||||
(byte*) current_piece_gfx#72 ← phi( @38/(byte*) current_piece_gfx#84 )
|
||||
(byte) current_piece_char#58 ← phi( @38/(byte) current_piece_char#70 )
|
||||
(byte) render_screen_render#43 ← phi( @38/(byte) render_screen_render#49 )
|
||||
(byte) render_screen_show#35 ← phi( @38/(byte) render_screen_show#42 )
|
||||
(byte) irq_raster_next#20 ← phi( @38/(byte) irq_raster_next#22 )
|
||||
(byte) irq_sprite_ypos#18 ← phi( @38/(byte) irq_sprite_ypos#21 )
|
||||
(byte[4*4*4]) PIECE_T#0 ← { (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 1, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 1, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0 }
|
||||
(byte[4*4*4]) PIECE_S#0 ← { (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0 }
|
||||
(byte[4*4*4]) PIECE_Z#0 ← { (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 1, (number) 1, (number) 0, (number) 0, (number) 1, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0, (number) 0 }
|
||||
@ -1583,7 +1582,7 @@ sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@6
|
||||
(byte) current_movedown_counter#0 ← (number) 0
|
||||
(dword[]) SCORE_BASE_BCD#0 ← { (number) 0, (number) $40, (number) $100, (number) $300, (number) $1200 }
|
||||
(dword[5]) score_add_bcd#0 ← { fill( 5, 0) }
|
||||
to:@31
|
||||
to:@30
|
||||
play_init: scope:[play_init] from main::@28
|
||||
(byte) level#44 ← phi( main::@28/(byte) level#58 )
|
||||
(byte) play_init::idx#0 ← (number) 0
|
||||
@ -2375,36 +2374,36 @@ play_move_rotate::@11: scope:[play_move_rotate] from play_move_rotate::@14
|
||||
(byte*) current_piece_gfx#7 ← (byte*~) play_move_rotate::$9
|
||||
(byte) play_move_rotate::return#4 ← (number) 1
|
||||
to:play_move_rotate::@return
|
||||
@31: scope:[] from @26
|
||||
(byte) irq_cnt#19 ← phi( @26/(byte) irq_cnt#20 )
|
||||
(byte) irq_sprite_ptr#17 ← phi( @26/(byte) irq_sprite_ptr#18 )
|
||||
(byte) level_bcd#54 ← phi( @26/(byte) level_bcd#61 )
|
||||
(byte) level#55 ← phi( @26/(byte) level#64 )
|
||||
(dword) score_bcd#44 ← phi( @26/(dword) score_bcd#51 )
|
||||
(word) lines_bcd#44 ← phi( @26/(word) lines_bcd#51 )
|
||||
(byte) current_movedown_counter#34 ← phi( @26/(byte) current_movedown_counter#0 )
|
||||
(byte) keyboard_modifiers#32 ← phi( @26/(byte) keyboard_modifiers#33 )
|
||||
(byte) keyboard_events_size#36 ← phi( @26/(byte) keyboard_events_size#40 )
|
||||
(byte) render_screen_showing#20 ← phi( @26/(byte) render_screen_showing#21 )
|
||||
(byte) next_piece_idx#46 ← phi( @26/(byte) next_piece_idx#0 )
|
||||
(byte) game_over#45 ← phi( @26/(byte) game_over#51 )
|
||||
(byte) current_ypos#64 ← phi( @26/(byte) current_ypos#69 )
|
||||
(byte) current_xpos#75 ← phi( @26/(byte) current_xpos#85 )
|
||||
(byte*) current_piece_gfx#63 ← phi( @26/(byte*) current_piece_gfx#72 )
|
||||
(byte) current_orientation#62 ← phi( @26/(byte) current_orientation#0 )
|
||||
(byte) current_piece_char#51 ← phi( @26/(byte) current_piece_char#58 )
|
||||
(byte*) current_piece#54 ← phi( @26/(byte*) current_piece#0 )
|
||||
(byte) current_movedown_slow#59 ← phi( @26/(byte) current_movedown_slow#0 )
|
||||
(byte) render_screen_render#40 ← phi( @26/(byte) render_screen_render#43 )
|
||||
(byte) render_screen_show#32 ← phi( @26/(byte) render_screen_show#35 )
|
||||
(byte) irq_raster_next#17 ← phi( @26/(byte) irq_raster_next#20 )
|
||||
(byte) irq_sprite_ypos#14 ← phi( @26/(byte) irq_sprite_ypos#18 )
|
||||
@30: scope:[] from @25
|
||||
(byte) irq_cnt#19 ← phi( @25/(byte) irq_cnt#20 )
|
||||
(byte) irq_sprite_ptr#17 ← phi( @25/(byte) irq_sprite_ptr#18 )
|
||||
(byte) level_bcd#54 ← phi( @25/(byte) level_bcd#61 )
|
||||
(byte) level#55 ← phi( @25/(byte) level#64 )
|
||||
(dword) score_bcd#44 ← phi( @25/(dword) score_bcd#51 )
|
||||
(word) lines_bcd#44 ← phi( @25/(word) lines_bcd#51 )
|
||||
(byte) current_movedown_counter#34 ← phi( @25/(byte) current_movedown_counter#0 )
|
||||
(byte) keyboard_modifiers#32 ← phi( @25/(byte) keyboard_modifiers#33 )
|
||||
(byte) keyboard_events_size#36 ← phi( @25/(byte) keyboard_events_size#40 )
|
||||
(byte) render_screen_showing#20 ← phi( @25/(byte) render_screen_showing#21 )
|
||||
(byte) next_piece_idx#46 ← phi( @25/(byte) next_piece_idx#0 )
|
||||
(byte) game_over#45 ← phi( @25/(byte) game_over#51 )
|
||||
(byte) current_ypos#64 ← phi( @25/(byte) current_ypos#69 )
|
||||
(byte) current_xpos#75 ← phi( @25/(byte) current_xpos#85 )
|
||||
(byte*) current_piece_gfx#63 ← phi( @25/(byte*) current_piece_gfx#72 )
|
||||
(byte) current_orientation#62 ← phi( @25/(byte) current_orientation#0 )
|
||||
(byte) current_piece_char#51 ← phi( @25/(byte) current_piece_char#58 )
|
||||
(byte*) current_piece#54 ← phi( @25/(byte*) current_piece#0 )
|
||||
(byte) current_movedown_slow#59 ← phi( @25/(byte) current_movedown_slow#0 )
|
||||
(byte) render_screen_render#40 ← phi( @25/(byte) render_screen_render#43 )
|
||||
(byte) render_screen_show#32 ← phi( @25/(byte) render_screen_show#35 )
|
||||
(byte) irq_raster_next#17 ← phi( @25/(byte) irq_raster_next#20 )
|
||||
(byte) irq_sprite_ypos#14 ← phi( @25/(byte) irq_sprite_ypos#18 )
|
||||
(byte) COLLISION_NONE#0 ← (number) 0
|
||||
(byte) COLLISION_PLAYFIELD#0 ← (number) 1
|
||||
(byte) COLLISION_BOTTOM#0 ← (number) 2
|
||||
(byte) COLLISION_LEFT#0 ← (number) 4
|
||||
(byte) COLLISION_RIGHT#0 ← (number) 8
|
||||
to:@38
|
||||
to:@37
|
||||
play_collision: scope:[play_collision] from play_move_down::@9 play_move_leftright::@1 play_move_leftright::@5 play_move_rotate::@4 play_spawn_current
|
||||
(byte) play_collision::xpos#6 ← phi( play_move_down::@9/(byte) play_collision::xpos#0 play_move_leftright::@1/(byte) play_collision::xpos#1 play_move_leftright::@5/(byte) play_collision::xpos#2 play_move_rotate::@4/(byte) play_collision::xpos#3 play_spawn_current/(byte) play_collision::xpos#4 )
|
||||
(byte) play_collision::ypos#5 ← phi( play_move_down::@9/(byte) play_collision::ypos#0 play_move_leftright::@1/(byte) play_collision::ypos#1 play_move_leftright::@5/(byte) play_collision::ypos#2 play_move_rotate::@4/(byte) play_collision::ypos#3 play_spawn_current/(byte) play_collision::ypos#4 )
|
||||
@ -2980,26 +2979,26 @@ play_increase_level::@return: scope:[play_increase_level] from play_increase_le
|
||||
(byte) level_bcd#9 ← (byte) level_bcd#22
|
||||
return
|
||||
to:@return
|
||||
main: scope:[main] from @38
|
||||
(byte) level_bcd#100 ← phi( @38/(byte) level_bcd#41 )
|
||||
(dword) score_bcd#83 ← phi( @38/(dword) score_bcd#32 )
|
||||
(word) lines_bcd#87 ← phi( @38/(word) lines_bcd#32 )
|
||||
(byte) current_movedown_counter#58 ← phi( @38/(byte) current_movedown_counter#26 )
|
||||
(byte) keyboard_modifiers#61 ← phi( @38/(byte) keyboard_modifiers#24 )
|
||||
(byte) keyboard_events_size#79 ← phi( @38/(byte) keyboard_events_size#28 )
|
||||
(byte) render_screen_showing#47 ← phi( @38/(byte) render_screen_showing#14 )
|
||||
(byte) level#100 ← phi( @38/(byte) level#41 )
|
||||
(byte) game_over#81 ← phi( @38/(byte) game_over#34 )
|
||||
(byte) current_ypos#94 ← phi( @38/(byte) current_ypos#49 )
|
||||
(byte) current_xpos#115 ← phi( @38/(byte) current_xpos#58 )
|
||||
(byte*) current_piece_gfx#108 ← phi( @38/(byte*) current_piece_gfx#45 )
|
||||
(byte) current_orientation#92 ← phi( @38/(byte) current_orientation#49 )
|
||||
(byte) current_piece_char#95 ← phi( @38/(byte) current_piece_char#36 )
|
||||
(byte*) current_piece#88 ← phi( @38/(byte*) current_piece#39 )
|
||||
(byte) next_piece_idx#75 ← phi( @38/(byte) next_piece_idx#35 )
|
||||
(byte) current_movedown_slow#80 ← phi( @38/(byte) current_movedown_slow#46 )
|
||||
(byte) render_screen_render#35 ← phi( @38/(byte) render_screen_render#29 )
|
||||
(byte) render_screen_show#27 ← phi( @38/(byte) render_screen_show#24 )
|
||||
main: scope:[main] from @37
|
||||
(byte) level_bcd#100 ← phi( @37/(byte) level_bcd#41 )
|
||||
(dword) score_bcd#83 ← phi( @37/(dword) score_bcd#32 )
|
||||
(word) lines_bcd#87 ← phi( @37/(word) lines_bcd#32 )
|
||||
(byte) current_movedown_counter#58 ← phi( @37/(byte) current_movedown_counter#26 )
|
||||
(byte) keyboard_modifiers#61 ← phi( @37/(byte) keyboard_modifiers#24 )
|
||||
(byte) keyboard_events_size#79 ← phi( @37/(byte) keyboard_events_size#28 )
|
||||
(byte) render_screen_showing#47 ← phi( @37/(byte) render_screen_showing#14 )
|
||||
(byte) level#100 ← phi( @37/(byte) level#41 )
|
||||
(byte) game_over#81 ← phi( @37/(byte) game_over#34 )
|
||||
(byte) current_ypos#94 ← phi( @37/(byte) current_ypos#49 )
|
||||
(byte) current_xpos#115 ← phi( @37/(byte) current_xpos#58 )
|
||||
(byte*) current_piece_gfx#108 ← phi( @37/(byte*) current_piece_gfx#45 )
|
||||
(byte) current_orientation#92 ← phi( @37/(byte) current_orientation#49 )
|
||||
(byte) current_piece_char#95 ← phi( @37/(byte) current_piece_char#36 )
|
||||
(byte*) current_piece#88 ← phi( @37/(byte*) current_piece#39 )
|
||||
(byte) next_piece_idx#75 ← phi( @37/(byte) next_piece_idx#35 )
|
||||
(byte) current_movedown_slow#80 ← phi( @37/(byte) current_movedown_slow#46 )
|
||||
(byte) render_screen_render#35 ← phi( @37/(byte) render_screen_render#29 )
|
||||
(byte) render_screen_show#27 ← phi( @37/(byte) render_screen_show#24 )
|
||||
call sid_rnd_init
|
||||
to:main::@25
|
||||
main::@25: scope:[main] from main
|
||||
@ -3692,52 +3691,52 @@ main::@return: scope:[main] from main::@1
|
||||
(byte) level_bcd#11 ← (byte) level_bcd#24
|
||||
return
|
||||
to:@return
|
||||
@38: scope:[] from @31
|
||||
(byte) irq_cnt#17 ← phi( @31/(byte) irq_cnt#19 )
|
||||
(byte) irq_sprite_ptr#14 ← phi( @31/(byte) irq_sprite_ptr#17 )
|
||||
(byte) level_bcd#41 ← phi( @31/(byte) level_bcd#54 )
|
||||
(byte) level#41 ← phi( @31/(byte) level#55 )
|
||||
(dword) score_bcd#32 ← phi( @31/(dword) score_bcd#44 )
|
||||
(word) lines_bcd#32 ← phi( @31/(word) lines_bcd#44 )
|
||||
(byte) current_movedown_counter#26 ← phi( @31/(byte) current_movedown_counter#34 )
|
||||
(byte) keyboard_modifiers#24 ← phi( @31/(byte) keyboard_modifiers#32 )
|
||||
(byte) keyboard_events_size#28 ← phi( @31/(byte) keyboard_events_size#36 )
|
||||
(byte) render_screen_showing#14 ← phi( @31/(byte) render_screen_showing#20 )
|
||||
(byte) next_piece_idx#35 ← phi( @31/(byte) next_piece_idx#46 )
|
||||
(byte) game_over#34 ← phi( @31/(byte) game_over#45 )
|
||||
(byte) current_ypos#49 ← phi( @31/(byte) current_ypos#64 )
|
||||
(byte) current_xpos#58 ← phi( @31/(byte) current_xpos#75 )
|
||||
(byte*) current_piece_gfx#45 ← phi( @31/(byte*) current_piece_gfx#63 )
|
||||
(byte) current_orientation#49 ← phi( @31/(byte) current_orientation#62 )
|
||||
(byte) current_piece_char#36 ← phi( @31/(byte) current_piece_char#51 )
|
||||
(byte*) current_piece#39 ← phi( @31/(byte*) current_piece#54 )
|
||||
(byte) current_movedown_slow#46 ← phi( @31/(byte) current_movedown_slow#59 )
|
||||
(byte) render_screen_render#29 ← phi( @31/(byte) render_screen_render#40 )
|
||||
(byte) render_screen_show#24 ← phi( @31/(byte) render_screen_show#32 )
|
||||
(byte) irq_raster_next#10 ← phi( @31/(byte) irq_raster_next#17 )
|
||||
(byte) irq_sprite_ypos#9 ← phi( @31/(byte) irq_sprite_ypos#14 )
|
||||
@37: scope:[] from @30
|
||||
(byte) irq_cnt#17 ← phi( @30/(byte) irq_cnt#19 )
|
||||
(byte) irq_sprite_ptr#14 ← phi( @30/(byte) irq_sprite_ptr#17 )
|
||||
(byte) level_bcd#41 ← phi( @30/(byte) level_bcd#54 )
|
||||
(byte) level#41 ← phi( @30/(byte) level#55 )
|
||||
(dword) score_bcd#32 ← phi( @30/(dword) score_bcd#44 )
|
||||
(word) lines_bcd#32 ← phi( @30/(word) lines_bcd#44 )
|
||||
(byte) current_movedown_counter#26 ← phi( @30/(byte) current_movedown_counter#34 )
|
||||
(byte) keyboard_modifiers#24 ← phi( @30/(byte) keyboard_modifiers#32 )
|
||||
(byte) keyboard_events_size#28 ← phi( @30/(byte) keyboard_events_size#36 )
|
||||
(byte) render_screen_showing#14 ← phi( @30/(byte) render_screen_showing#20 )
|
||||
(byte) next_piece_idx#35 ← phi( @30/(byte) next_piece_idx#46 )
|
||||
(byte) game_over#34 ← phi( @30/(byte) game_over#45 )
|
||||
(byte) current_ypos#49 ← phi( @30/(byte) current_ypos#64 )
|
||||
(byte) current_xpos#58 ← phi( @30/(byte) current_xpos#75 )
|
||||
(byte*) current_piece_gfx#45 ← phi( @30/(byte*) current_piece_gfx#63 )
|
||||
(byte) current_orientation#49 ← phi( @30/(byte) current_orientation#62 )
|
||||
(byte) current_piece_char#36 ← phi( @30/(byte) current_piece_char#51 )
|
||||
(byte*) current_piece#39 ← phi( @30/(byte*) current_piece#54 )
|
||||
(byte) current_movedown_slow#46 ← phi( @30/(byte) current_movedown_slow#59 )
|
||||
(byte) render_screen_render#29 ← phi( @30/(byte) render_screen_render#40 )
|
||||
(byte) render_screen_show#24 ← phi( @30/(byte) render_screen_show#32 )
|
||||
(byte) irq_raster_next#10 ← phi( @30/(byte) irq_raster_next#17 )
|
||||
(byte) irq_sprite_ypos#9 ← phi( @30/(byte) irq_sprite_ypos#14 )
|
||||
call main
|
||||
to:@40
|
||||
@40: scope:[] from @38
|
||||
(byte) level_bcd#25 ← phi( @38/(byte) level_bcd#11 )
|
||||
(byte) level#25 ← phi( @38/(byte) level#10 )
|
||||
(dword) score_bcd#19 ← phi( @38/(dword) score_bcd#8 )
|
||||
(word) lines_bcd#20 ← phi( @38/(word) lines_bcd#8 )
|
||||
(byte) current_movedown_counter#17 ← phi( @38/(byte) current_movedown_counter#7 )
|
||||
(byte) keyboard_modifiers#17 ← phi( @38/(byte) keyboard_modifiers#8 )
|
||||
(byte) keyboard_events_size#20 ← phi( @38/(byte) keyboard_events_size#8 )
|
||||
(byte) render_screen_showing#10 ← phi( @38/(byte) render_screen_showing#4 )
|
||||
(byte) next_piece_idx#23 ← phi( @38/(byte) next_piece_idx#10 )
|
||||
(byte) game_over#22 ← phi( @38/(byte) game_over#10 )
|
||||
(byte) current_ypos#29 ← phi( @38/(byte) current_ypos#11 )
|
||||
(byte) current_xpos#35 ← phi( @38/(byte) current_xpos#14 )
|
||||
(byte*) current_piece_gfx#28 ← phi( @38/(byte*) current_piece_gfx#13 )
|
||||
(byte) current_orientation#31 ← phi( @38/(byte) current_orientation#13 )
|
||||
(byte) current_piece_char#23 ← phi( @38/(byte) current_piece_char#10 )
|
||||
(byte*) current_piece#23 ← phi( @38/(byte*) current_piece#10 )
|
||||
(byte) current_movedown_slow#28 ← phi( @38/(byte) current_movedown_slow#14 )
|
||||
(byte) render_screen_render#19 ← phi( @38/(byte) render_screen_render#7 )
|
||||
(byte) render_screen_show#17 ← phi( @38/(byte) render_screen_show#7 )
|
||||
to:@39
|
||||
@39: scope:[] from @37
|
||||
(byte) level_bcd#25 ← phi( @37/(byte) level_bcd#11 )
|
||||
(byte) level#25 ← phi( @37/(byte) level#10 )
|
||||
(dword) score_bcd#19 ← phi( @37/(dword) score_bcd#8 )
|
||||
(word) lines_bcd#20 ← phi( @37/(word) lines_bcd#8 )
|
||||
(byte) current_movedown_counter#17 ← phi( @37/(byte) current_movedown_counter#7 )
|
||||
(byte) keyboard_modifiers#17 ← phi( @37/(byte) keyboard_modifiers#8 )
|
||||
(byte) keyboard_events_size#20 ← phi( @37/(byte) keyboard_events_size#8 )
|
||||
(byte) render_screen_showing#10 ← phi( @37/(byte) render_screen_showing#4 )
|
||||
(byte) next_piece_idx#23 ← phi( @37/(byte) next_piece_idx#10 )
|
||||
(byte) game_over#22 ← phi( @37/(byte) game_over#10 )
|
||||
(byte) current_ypos#29 ← phi( @37/(byte) current_ypos#11 )
|
||||
(byte) current_xpos#35 ← phi( @37/(byte) current_xpos#14 )
|
||||
(byte*) current_piece_gfx#28 ← phi( @37/(byte*) current_piece_gfx#13 )
|
||||
(byte) current_orientation#31 ← phi( @37/(byte) current_orientation#13 )
|
||||
(byte) current_piece_char#23 ← phi( @37/(byte) current_piece_char#10 )
|
||||
(byte*) current_piece#23 ← phi( @37/(byte*) current_piece#10 )
|
||||
(byte) current_movedown_slow#28 ← phi( @37/(byte) current_movedown_slow#14 )
|
||||
(byte) render_screen_render#19 ← phi( @37/(byte) render_screen_render#7 )
|
||||
(byte) render_screen_show#17 ← phi( @37/(byte) render_screen_show#7 )
|
||||
(byte) render_screen_show#8 ← (byte) render_screen_show#17
|
||||
(byte) render_screen_render#8 ← (byte) render_screen_render#19
|
||||
(byte) current_movedown_slow#15 ← (byte) current_movedown_slow#28
|
||||
@ -3758,7 +3757,7 @@ main::@return: scope:[main] from main::@1
|
||||
(byte) level#11 ← (byte) level#25
|
||||
(byte) level_bcd#12 ← (byte) level_bcd#25
|
||||
to:@end
|
||||
@end: scope:[] from @40
|
||||
@end: scope:[] from @39
|
||||
|
||||
SYMBOL TABLE SSA
|
||||
(byte*~) $1
|
||||
@ -3776,17 +3775,17 @@ SYMBOL TABLE SSA
|
||||
(number~) $7
|
||||
(word~) $8
|
||||
(word~) $9
|
||||
(label) @12
|
||||
(label) @14
|
||||
(label) @11
|
||||
(label) @13
|
||||
(label) @22
|
||||
(label) @23
|
||||
(label) @24
|
||||
(label) @26
|
||||
(label) @31
|
||||
(label) @25
|
||||
(label) @30
|
||||
(label) @37
|
||||
(label) @38
|
||||
(label) @39
|
||||
(label) @40
|
||||
(label) @5
|
||||
(label) @9
|
||||
(label) @4
|
||||
(label) @8
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) BGCOL1
|
||||
@ -10792,15 +10791,15 @@ Added new block during phi lifting play_increase_level::@9(between play_increase
|
||||
Added new block during phi lifting play_increase_level::@10(between play_increase_level::@7 and play_increase_level::@7)
|
||||
Added new block during phi lifting main::@44(between main::@19 and main::@1)
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @5
|
||||
Adding NOP phi() at start of @9
|
||||
Adding NOP phi() at start of @12
|
||||
Adding NOP phi() at start of @4
|
||||
Adding NOP phi() at start of @8
|
||||
Adding NOP phi() at start of @11
|
||||
Adding NOP phi() at start of toSpritePtr1
|
||||
Adding NOP phi() at start of toSpritePtr1_@return
|
||||
Adding NOP phi() at start of @26
|
||||
Adding NOP phi() at start of @31
|
||||
Adding NOP phi() at start of @38
|
||||
Adding NOP phi() at start of @40
|
||||
Adding NOP phi() at start of @25
|
||||
Adding NOP phi() at start of @30
|
||||
Adding NOP phi() at start of @37
|
||||
Adding NOP phi() at start of @39
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main
|
||||
Adding NOP phi() at start of main::@26
|
||||
@ -11191,13 +11190,13 @@ Coalesced (already) [904] irq_cnt#21 ← irq_cnt#1
|
||||
Coalesced [905] irq_sprite_ypos#25 ← irq_sprite_ypos#1
|
||||
Coalesced [906] irq_sprite_ptr#19 ← irq_sprite_ptr#1
|
||||
Coalesced down to 99 phi equivalence classes
|
||||
Culled Empty Block (label) @5
|
||||
Culled Empty Block (label) @9
|
||||
Culled Empty Block (label) @12
|
||||
Culled Empty Block (label) @4
|
||||
Culled Empty Block (label) @8
|
||||
Culled Empty Block (label) @11
|
||||
Culled Empty Block (label) toSpritePtr1_@return
|
||||
Culled Empty Block (label) @26
|
||||
Culled Empty Block (label) @31
|
||||
Culled Empty Block (label) @40
|
||||
Culled Empty Block (label) @25
|
||||
Culled Empty Block (label) @30
|
||||
Culled Empty Block (label) @39
|
||||
Culled Empty Block (label) main::@12
|
||||
Culled Empty Block (label) main::@43
|
||||
Culled Empty Block (label) main::@44
|
||||
@ -11266,11 +11265,11 @@ Culled Empty Block (label) render_screen_original::@14
|
||||
Culled Empty Block (label) render_screen_original::@12
|
||||
Culled Empty Block (label) render_screen_original::@10
|
||||
Culled Empty Block (label) sprites_irq::toSpritePtr2_@return
|
||||
Renumbering block @14 to @1
|
||||
Renumbering block @23 to @2
|
||||
Renumbering block @24 to @3
|
||||
Renumbering block @38 to @4
|
||||
Renumbering block @39 to @5
|
||||
Renumbering block @13 to @1
|
||||
Renumbering block @22 to @2
|
||||
Renumbering block @23 to @3
|
||||
Renumbering block @37 to @4
|
||||
Renumbering block @38 to @5
|
||||
Renumbering block keyboard_event_scan::@5 to keyboard_event_scan::@4
|
||||
Renumbering block keyboard_event_scan::@6 to keyboard_event_scan::@5
|
||||
Renumbering block keyboard_event_scan::@7 to keyboard_event_scan::@6
|
||||
|
@ -43,16 +43,16 @@ main: {
|
||||
sta D016
|
||||
ldx #BLACK
|
||||
lda #<SCREEN
|
||||
sta fill.addr
|
||||
sta memset.str
|
||||
lda #>SCREEN
|
||||
sta fill.addr+1
|
||||
jsr fill
|
||||
sta memset.str+1
|
||||
jsr memset
|
||||
ldx #WHITE|8
|
||||
lda #<COLS
|
||||
sta fill.addr
|
||||
sta memset.str
|
||||
lda #>COLS
|
||||
sta fill.addr+1
|
||||
jsr fill
|
||||
sta memset.str+1
|
||||
jsr memset
|
||||
ldx #0
|
||||
b1:
|
||||
txa
|
||||
@ -722,31 +722,32 @@ divr16u: {
|
||||
bne b1
|
||||
rts
|
||||
}
|
||||
// Fill some memory with a value
|
||||
// fill(byte register(X) val)
|
||||
fill: {
|
||||
.label end = $3e
|
||||
.label addr = $29
|
||||
lda addr
|
||||
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
||||
// memset(void* zeropage($29) str, byte register(X) c)
|
||||
memset: {
|
||||
.label _0 = $3e
|
||||
.label dst = $29
|
||||
.label str = $29
|
||||
lda str
|
||||
clc
|
||||
adc #<$3e8
|
||||
sta end
|
||||
lda addr+1
|
||||
sta _0
|
||||
lda str+1
|
||||
adc #>$3e8
|
||||
sta end+1
|
||||
sta _0+1
|
||||
b1:
|
||||
txa
|
||||
ldy #0
|
||||
sta (addr),y
|
||||
inc addr
|
||||
sta (dst),y
|
||||
inc dst
|
||||
bne !+
|
||||
inc addr+1
|
||||
inc dst+1
|
||||
!:
|
||||
lda addr+1
|
||||
cmp end+1
|
||||
lda dst+1
|
||||
cmp _0+1
|
||||
bne b1
|
||||
lda addr
|
||||
cmp end
|
||||
lda dst
|
||||
cmp _0
|
||||
bne b1
|
||||
rts
|
||||
}
|
||||
|
@ -28,11 +28,11 @@ main::toD0181: scope:[main] from main
|
||||
main::@3: scope:[main] from main::toD0181
|
||||
[11] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
|
||||
[12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0
|
||||
[13] call fill
|
||||
[13] call memset
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
[14] phi()
|
||||
[15] call fill
|
||||
[15] call memset
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main::@1 main::@4
|
||||
[16] (byte) main::ch#2 ← phi( main::@1/(byte) main::ch#1 main::@4/(byte) 0 )
|
||||
@ -433,17 +433,18 @@ divr16u::@6: scope:[divr16u] from divr16u::@3
|
||||
divr16u::@return: scope:[divr16u] from divr16u::@6
|
||||
[213] return
|
||||
to:@return
|
||||
fill: scope:[fill] from main::@3 main::@4
|
||||
[214] (byte) fill::val#3 ← phi( main::@3/(const byte) BLACK#0 main::@4/(const byte) WHITE#0|(byte) 8 )
|
||||
[214] (byte*) fill::addr#0 ← phi( main::@3/(const byte*) SCREEN#0 main::@4/(const byte*) COLS#0 )
|
||||
[215] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word) $3e8
|
||||
to:fill::@1
|
||||
fill::@1: scope:[fill] from fill fill::@1
|
||||
[216] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
|
||||
[217] *((byte*) fill::addr#2) ← (byte) fill::val#3
|
||||
[218] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
|
||||
[219] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
|
||||
to:fill::@return
|
||||
fill::@return: scope:[fill] from fill::@1
|
||||
[220] return
|
||||
memset: scope:[memset] from main::@3 main::@4
|
||||
[214] (byte) memset::c#3 ← phi( main::@3/(const byte) BLACK#0 main::@4/(const byte) WHITE#0|(byte) 8 )
|
||||
[214] (void*) memset::str#2 ← phi( main::@3/(void*)(const byte*) SCREEN#0 main::@4/(void*)(const byte*) COLS#0 )
|
||||
[215] (void*~) memset::$0 ← (void*) memset::str#2 + (word) $3e8
|
||||
[216] (byte*~) memset::dst#3 ← (byte*)(void*) memset::str#2
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset memset::@1
|
||||
[217] (byte*) memset::dst#2 ← phi( memset/(byte*~) memset::dst#3 memset::@1/(byte*) memset::dst#1 )
|
||||
[218] *((byte*) memset::dst#2) ← (byte) memset::c#3
|
||||
[219] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
[220] if((byte*) memset::dst#1!=(byte*)(void*~) memset::$0) goto memset::@1
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset::@1
|
||||
[221] return
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -88,19 +88,6 @@
|
||||
(word) divr16u::return#0 return zp ZP_WORD:39 5.285714285714286
|
||||
(word) divr16u::return#2 return zp ZP_WORD:39 4.0
|
||||
(word) divr16u::return#3 return zp ZP_WORD:39 4.0
|
||||
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
|
||||
(label) fill::@1
|
||||
(label) fill::@return
|
||||
(byte*) fill::addr
|
||||
(byte*) fill::addr#0 addr zp ZP_WORD:41 2.0
|
||||
(byte*) fill::addr#1 addr zp ZP_WORD:41 16.5
|
||||
(byte*) fill::addr#2 addr zp ZP_WORD:41 17.5
|
||||
(byte*) fill::end
|
||||
(byte*) fill::end#0 end zp ZP_WORD:62 2.6
|
||||
(word) fill::size
|
||||
(byte*) fill::start
|
||||
(byte) fill::val
|
||||
(byte) fill::val#3 reg byte x 1.8333333333333333
|
||||
(void()) loop()
|
||||
(signed word*~) loop::$1 $1 zp ZP_WORD:43 22.0
|
||||
(word~) loop::$5 $5 zp ZP_WORD:43 22.0
|
||||
@ -136,6 +123,21 @@
|
||||
(byte) main::toD0181_return
|
||||
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) LOGO#0/(byte) 4&(byte) $f
|
||||
(byte*) main::toD0181_screen
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
(void*~) memset::$0 $0 zp ZP_WORD:62 0.3333333333333333
|
||||
(label) memset::@1
|
||||
(label) memset::@return
|
||||
(byte) memset::c
|
||||
(byte) memset::c#3 reg byte x 1.5714285714285714
|
||||
(byte*) memset::dst
|
||||
(byte*) memset::dst#1 dst zp ZP_WORD:41 16.5
|
||||
(byte*) memset::dst#2 dst zp ZP_WORD:41 17.5
|
||||
(byte*~) memset::dst#3 dst zp ZP_WORD:41 4.0
|
||||
(byte*) memset::end
|
||||
(word) memset::num
|
||||
(void*) memset::return
|
||||
(void*) memset::str
|
||||
(void*) memset::str#2 str zp ZP_WORD:41 1.0
|
||||
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
|
||||
(word~) mul16s::$16 $16 zp ZP_WORD:54 4.0
|
||||
(word~) mul16s::$9 $9 zp ZP_WORD:54 4.0
|
||||
@ -382,8 +384,8 @@ zp ZP_WORD:35 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 di
|
||||
zp ZP_WORD:37 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
|
||||
zp ZP_WORD:39 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ]
|
||||
reg byte x [ divr16u::i#2 divr16u::i#1 ]
|
||||
reg byte x [ fill::val#3 ]
|
||||
zp ZP_WORD:41 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
|
||||
zp ZP_WORD:41 [ memset::str#2 memset::dst#2 memset::dst#3 memset::dst#1 ]
|
||||
reg byte x [ memset::c#3 ]
|
||||
zp ZP_WORD:43 [ loop::$5 loop::$1 loop::xpos#0 render_logo::xpos#0 ]
|
||||
reg byte a [ render_logo::$0 ]
|
||||
reg byte a [ render_logo::$1 ]
|
||||
@ -410,4 +412,4 @@ zp ZP_WORD:58 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2
|
||||
zp ZP_WORD:60 [ div32u16u::quotient_hi#0 ]
|
||||
reg byte a [ divr16u::$1 ]
|
||||
reg byte a [ divr16u::$2 ]
|
||||
zp ZP_WORD:62 [ fill::end#0 ]
|
||||
zp ZP_WORD:62 [ memset::$0 ]
|
||||
|
@ -32,24 +32,24 @@ main: {
|
||||
sta D016
|
||||
ldx #BLACK
|
||||
lda #<$28*$19
|
||||
sta fill.size
|
||||
sta memset.num
|
||||
lda #>$28*$19
|
||||
sta fill.size+1
|
||||
sta memset.num+1
|
||||
lda #<SCREEN
|
||||
sta fill.addr
|
||||
sta memset.str
|
||||
lda #>SCREEN
|
||||
sta fill.addr+1
|
||||
jsr fill
|
||||
sta memset.str+1
|
||||
jsr memset
|
||||
ldx #WHITE|8
|
||||
lda #<$28*$19
|
||||
sta fill.size
|
||||
sta memset.num
|
||||
lda #>$28*$19
|
||||
sta fill.size+1
|
||||
sta memset.num+1
|
||||
lda #<COLS
|
||||
sta fill.addr
|
||||
sta memset.str
|
||||
lda #>COLS
|
||||
sta fill.addr+1
|
||||
jsr fill
|
||||
sta memset.str+1
|
||||
jsr memset
|
||||
ldx #0
|
||||
b1:
|
||||
txa
|
||||
@ -62,31 +62,32 @@ main: {
|
||||
inc $d020
|
||||
jmp b2
|
||||
}
|
||||
// Fill some memory with a value
|
||||
// fill(word zeropage(2) size, byte register(X) val)
|
||||
fill: {
|
||||
.label end = 2
|
||||
.label addr = 4
|
||||
.label size = 2
|
||||
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
||||
// memset(void* zeropage(2) str, byte register(X) c, word zeropage(4) num)
|
||||
memset: {
|
||||
.label end = 4
|
||||
.label dst = 2
|
||||
.label str = 2
|
||||
.label num = 4
|
||||
lda end
|
||||
clc
|
||||
adc addr
|
||||
adc str
|
||||
sta end
|
||||
lda end+1
|
||||
adc addr+1
|
||||
adc str+1
|
||||
sta end+1
|
||||
b1:
|
||||
txa
|
||||
ldy #0
|
||||
sta (addr),y
|
||||
inc addr
|
||||
sta (dst),y
|
||||
inc dst
|
||||
bne !+
|
||||
inc addr+1
|
||||
inc dst+1
|
||||
!:
|
||||
lda addr+1
|
||||
lda dst+1
|
||||
cmp end+1
|
||||
bne b1
|
||||
lda addr
|
||||
lda dst
|
||||
cmp end
|
||||
bne b1
|
||||
rts
|
||||
|
@ -27,11 +27,11 @@ main::toD0181: scope:[main] from main
|
||||
main::@3: scope:[main] from main::toD0181
|
||||
[10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
|
||||
[11] *((const byte*) D016#0) ← (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0
|
||||
[12] call fill
|
||||
[12] call memset
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
[13] phi()
|
||||
[14] call fill
|
||||
[14] call memset
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main::@1 main::@4
|
||||
[15] (byte) main::ch#2 ← phi( main::@1/(byte) main::ch#1 main::@4/(byte) 0 )
|
||||
@ -43,18 +43,19 @@ main::@2: scope:[main] from main::@1 main::@2
|
||||
[19] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7)
|
||||
kickasm() {{ inc $d020 }}
|
||||
to:main::@2
|
||||
fill: scope:[fill] from main::@3 main::@4
|
||||
[21] (byte) fill::val#3 ← phi( main::@4/(const byte) WHITE#0|(byte) 8 main::@3/(const byte) BLACK#0 )
|
||||
[21] (word) fill::size#2 ← phi( main::@4/(word)(number) $28*(number) $19 main::@3/(word)(number) $28*(number) $19 )
|
||||
[21] (byte*) fill::addr#0 ← phi( main::@4/(const byte*) COLS#0 main::@3/(const byte*) SCREEN#0 )
|
||||
[22] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word) fill::size#2
|
||||
to:fill::@1
|
||||
fill::@1: scope:[fill] from fill fill::@1
|
||||
[23] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
|
||||
[24] *((byte*) fill::addr#2) ← (byte) fill::val#3
|
||||
[25] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
|
||||
[26] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
|
||||
to:fill::@return
|
||||
fill::@return: scope:[fill] from fill::@1
|
||||
[27] return
|
||||
memset: scope:[memset] from main::@3 main::@4
|
||||
[21] (byte) memset::c#3 ← phi( main::@4/(const byte) WHITE#0|(byte) 8 main::@3/(const byte) BLACK#0 )
|
||||
[21] (word) memset::num#2 ← phi( main::@4/(word)(number) $28*(number) $19 main::@3/(word)(number) $28*(number) $19 )
|
||||
[21] (void*) memset::str#2 ← phi( main::@4/(void*)(const byte*) COLS#0 main::@3/(void*)(const byte*) SCREEN#0 )
|
||||
[22] (void*) memset::end#0 ← (void*) memset::str#2 + (word) memset::num#2
|
||||
[23] (byte*~) memset::dst#3 ← (byte*)(void*) memset::str#2
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset memset::@1
|
||||
[24] (byte*) memset::dst#2 ← phi( memset/(byte*~) memset::dst#3 memset::@1/(byte*) memset::dst#1 )
|
||||
[25] *((byte*) memset::dst#2) ← (byte) memset::c#3
|
||||
[26] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
[27] if((byte*) memset::dst#1!=(byte*)(void*) memset::end#0) goto memset::@1
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset::@1
|
||||
[28] return
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -30,20 +30,6 @@
|
||||
(const byte) VIC_MCM#0 VIC_MCM = (byte) $10
|
||||
(byte) WHITE
|
||||
(const byte) WHITE#0 WHITE = (byte) 1
|
||||
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
|
||||
(label) fill::@1
|
||||
(label) fill::@return
|
||||
(byte*) fill::addr
|
||||
(byte*) fill::addr#0 addr zp ZP_WORD:4 2.0
|
||||
(byte*) fill::addr#1 addr zp ZP_WORD:4 16.5
|
||||
(byte*) fill::addr#2 addr zp ZP_WORD:4 17.5
|
||||
(byte*) fill::end
|
||||
(byte*) fill::end#0 end zp ZP_WORD:2 2.6
|
||||
(word) fill::size
|
||||
(word) fill::size#2 size zp ZP_WORD:2 2.0
|
||||
(byte*) fill::start
|
||||
(byte) fill::val
|
||||
(byte) fill::val#3 reg byte x 1.8333333333333333
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
@ -66,8 +52,24 @@
|
||||
(byte) main::toD0181_return
|
||||
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) LOGO#0/(byte) 4&(byte) $f
|
||||
(byte*) main::toD0181_screen
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
(label) memset::@1
|
||||
(label) memset::@return
|
||||
(byte) memset::c
|
||||
(byte) memset::c#3 reg byte x 1.5714285714285714
|
||||
(byte*) memset::dst
|
||||
(byte*) memset::dst#1 dst zp ZP_WORD:2 16.5
|
||||
(byte*) memset::dst#2 dst zp ZP_WORD:2 17.5
|
||||
(byte*~) memset::dst#3 dst zp ZP_WORD:2 4.0
|
||||
(byte*) memset::end
|
||||
(void*) memset::end#0 end zp ZP_WORD:4 0.3333333333333333
|
||||
(word) memset::num
|
||||
(word) memset::num#2 num zp ZP_WORD:4 2.0
|
||||
(void*) memset::return
|
||||
(void*) memset::str
|
||||
(void*) memset::str#2 str zp ZP_WORD:2 1.0
|
||||
|
||||
reg byte x [ main::ch#2 main::ch#1 ]
|
||||
zp ZP_WORD:2 [ fill::size#2 fill::end#0 ]
|
||||
reg byte x [ fill::val#3 ]
|
||||
zp ZP_WORD:4 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
|
||||
zp ZP_WORD:2 [ memset::str#2 memset::dst#2 memset::dst#3 memset::dst#1 ]
|
||||
zp ZP_WORD:4 [ memset::num#2 memset::end#0 ]
|
||||
reg byte x [ memset::c#3 ]
|
||||
|
@ -55,7 +55,7 @@ main: {
|
||||
sta D016
|
||||
lda #toD0181_return
|
||||
sta D018
|
||||
jsr fill
|
||||
jsr memset
|
||||
jsr bitmap_init
|
||||
jsr bitmap_clear
|
||||
jsr sin16s_gen2
|
||||
@ -790,27 +790,28 @@ bitmap_init: {
|
||||
bne b3
|
||||
rts
|
||||
}
|
||||
// Fill some memory with a value
|
||||
fill: {
|
||||
.const size = $3e8
|
||||
.label end = SCREEN+size
|
||||
.label addr = $30
|
||||
lda #<SCREEN
|
||||
sta addr
|
||||
lda #>SCREEN
|
||||
sta addr+1
|
||||
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
||||
memset: {
|
||||
.const num = $3e8
|
||||
.label str = SCREEN
|
||||
.label end = str+num
|
||||
.label dst = $30
|
||||
lda #<str
|
||||
sta dst
|
||||
lda #>str
|
||||
sta dst+1
|
||||
b1:
|
||||
lda #WHITE
|
||||
ldy #0
|
||||
sta (addr),y
|
||||
inc addr
|
||||
sta (dst),y
|
||||
inc dst
|
||||
bne !+
|
||||
inc addr+1
|
||||
inc dst+1
|
||||
!:
|
||||
lda addr+1
|
||||
lda dst+1
|
||||
cmp #>end
|
||||
bne b1
|
||||
lda addr
|
||||
lda dst
|
||||
cmp #<end
|
||||
bne b1
|
||||
rts
|
||||
|
@ -36,7 +36,7 @@ main::toD0181: scope:[main] from main::@2
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::toD0181
|
||||
[14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
|
||||
[15] call fill
|
||||
[15] call memset
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
[16] phi()
|
||||
@ -427,15 +427,15 @@ bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5
|
||||
bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4
|
||||
[219] return
|
||||
to:@return
|
||||
fill: scope:[fill] from main::@3
|
||||
memset: scope:[memset] from main::@3
|
||||
[220] phi()
|
||||
to:fill::@1
|
||||
fill::@1: scope:[fill] from fill fill::@1
|
||||
[221] (byte*) fill::addr#2 ← phi( fill/(const byte*) SCREEN#0 fill::@1/(byte*) fill::addr#1 )
|
||||
[222] *((byte*) fill::addr#2) ← (const byte) WHITE#0
|
||||
[223] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
|
||||
[224] if((byte*) fill::addr#1!=(const byte*) fill::end#0) goto fill::@1
|
||||
to:fill::@return
|
||||
fill::@return: scope:[fill] from fill::@1
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset memset::@1
|
||||
[221] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@1/(byte*) memset::dst#1 )
|
||||
[222] *((byte*) memset::dst#2) ← (const byte) WHITE#0
|
||||
[223] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
[224] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset::@1
|
||||
[225] return
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -159,18 +159,6 @@
|
||||
(word) divr16u::return#0 return zp ZP_WORD:41 5.285714285714286
|
||||
(word) divr16u::return#2 return zp ZP_WORD:41 4.0
|
||||
(word) divr16u::return#3 return zp ZP_WORD:41 4.0
|
||||
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
|
||||
(label) fill::@1
|
||||
(label) fill::@return
|
||||
(byte*) fill::addr
|
||||
(byte*) fill::addr#1 addr zp ZP_WORD:48 16.5
|
||||
(byte*) fill::addr#2 addr zp ZP_WORD:48 16.5
|
||||
(byte*) fill::end
|
||||
(const byte*) fill::end#0 end = (const byte*) SCREEN#0+(const word) fill::size#0
|
||||
(word) fill::size
|
||||
(const word) fill::size#0 size = (word) $3e8
|
||||
(byte*) fill::start
|
||||
(byte) fill::val
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
@ -205,6 +193,20 @@
|
||||
(byte*) main::vicSelectGfxBank1_toDd001_gfx
|
||||
(byte) main::vicSelectGfxBank1_toDd001_return
|
||||
(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte) 3
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
(label) memset::@1
|
||||
(label) memset::@return
|
||||
(byte) memset::c
|
||||
(byte*) memset::dst
|
||||
(byte*) memset::dst#1 dst zp ZP_WORD:48 16.5
|
||||
(byte*) memset::dst#2 dst zp ZP_WORD:48 16.5
|
||||
(byte*) memset::end
|
||||
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
|
||||
(word) memset::num
|
||||
(const word) memset::num#0 num = (word) $3e8
|
||||
(void*) memset::return
|
||||
(void*) memset::str
|
||||
(const void*) memset::str#0 str = (void*)(const byte*) SCREEN#0
|
||||
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
|
||||
(word~) mul16s::$16 $16 zp ZP_WORD:60 4.0
|
||||
(word~) mul16s::$9 $9 zp ZP_WORD:60 4.0
|
||||
@ -430,7 +432,7 @@ reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
|
||||
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
|
||||
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
|
||||
zp ZP_WORD:46 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
|
||||
zp ZP_WORD:48 [ fill::addr#2 fill::addr#1 ]
|
||||
zp ZP_WORD:48 [ memset::dst#2 memset::dst#1 ]
|
||||
reg byte a [ wrap_y::return#0 ]
|
||||
reg byte x [ render_sine::ypos#0 ]
|
||||
reg byte a [ wrap_y::return#1 ]
|
||||
|
@ -208,16 +208,16 @@ init: {
|
||||
jsr init_sprites
|
||||
ldx #0
|
||||
lda #<screen
|
||||
sta fill.addr
|
||||
sta memset.str
|
||||
lda #>screen
|
||||
sta fill.addr+1
|
||||
jsr fill
|
||||
sta memset.str+1
|
||||
jsr memset
|
||||
ldx #BLACK
|
||||
lda #<colors
|
||||
sta fill.addr
|
||||
sta memset.str
|
||||
lda #>colors
|
||||
sta fill.addr+1
|
||||
jsr fill
|
||||
sta memset.str+1
|
||||
jsr memset
|
||||
lda #toD0181_return
|
||||
sta D018
|
||||
lda #$5b
|
||||
@ -233,30 +233,31 @@ init: {
|
||||
sta BGCOL4
|
||||
rts
|
||||
}
|
||||
// Fill some memory with a value
|
||||
// fill(byte register(X) val)
|
||||
fill: {
|
||||
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
||||
// memset(void* zeropage(8) str, byte register(X) c)
|
||||
memset: {
|
||||
.label end = $1b
|
||||
.label addr = 8
|
||||
lda addr
|
||||
.label dst = 8
|
||||
.label str = 8
|
||||
lda str
|
||||
clc
|
||||
adc #<$3e8
|
||||
sta end
|
||||
lda addr+1
|
||||
lda str+1
|
||||
adc #>$3e8
|
||||
sta end+1
|
||||
b1:
|
||||
txa
|
||||
ldy #0
|
||||
sta (addr),y
|
||||
inc addr
|
||||
sta (dst),y
|
||||
inc dst
|
||||
bne !+
|
||||
inc addr+1
|
||||
inc dst+1
|
||||
!:
|
||||
lda addr+1
|
||||
lda dst+1
|
||||
cmp end+1
|
||||
bne b1
|
||||
lda addr
|
||||
lda dst
|
||||
cmp end
|
||||
bne b1
|
||||
rts
|
||||
|
@ -96,11 +96,11 @@ init: scope:[init] from main
|
||||
to:init::@2
|
||||
init::@2: scope:[init] from init
|
||||
[57] phi()
|
||||
[58] call fill
|
||||
[58] call memset
|
||||
to:init::@3
|
||||
init::@3: scope:[init] from init::@2
|
||||
[59] phi()
|
||||
[60] call fill
|
||||
[60] call memset
|
||||
to:init::toD0181
|
||||
init::toD0181: scope:[init] from init::@3
|
||||
[61] phi()
|
||||
@ -117,28 +117,29 @@ init::@1: scope:[init] from init::toD0181
|
||||
init::@return: scope:[init] from init::@1
|
||||
[69] return
|
||||
to:@return
|
||||
fill: scope:[fill] from init::@2 init::@3
|
||||
[70] (byte) fill::val#3 ← phi( init::@2/(byte) 0 init::@3/(const byte) BLACK#0 )
|
||||
[70] (byte*) fill::addr#0 ← phi( init::@2/(const byte*) screen#0 init::@3/(const byte*) colors#0 )
|
||||
[71] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word) $3e8
|
||||
to:fill::@1
|
||||
fill::@1: scope:[fill] from fill fill::@1
|
||||
[72] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
|
||||
[73] *((byte*) fill::addr#2) ← (byte) fill::val#3
|
||||
[74] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
|
||||
[75] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
|
||||
to:fill::@return
|
||||
fill::@return: scope:[fill] from fill::@1
|
||||
[76] return
|
||||
memset: scope:[memset] from init::@2 init::@3
|
||||
[70] (byte) memset::c#3 ← phi( init::@2/(byte) 0 init::@3/(const byte) BLACK#0 )
|
||||
[70] (void*) memset::str#2 ← phi( init::@2/(void*)(const byte*) screen#0 init::@3/(void*)(const byte*) colors#0 )
|
||||
[71] (void*) memset::end#0 ← (void*) memset::str#2 + (word) $3e8
|
||||
[72] (byte*~) memset::dst#3 ← (byte*)(void*) memset::str#2
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset memset::@1
|
||||
[73] (byte*) memset::dst#2 ← phi( memset/(byte*~) memset::dst#3 memset::@1/(byte*) memset::dst#1 )
|
||||
[74] *((byte*) memset::dst#2) ← (byte) memset::c#3
|
||||
[75] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
[76] if((byte*) memset::dst#1!=(byte*)(void*) memset::end#0) goto memset::@1
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset::@1
|
||||
[77] return
|
||||
to:@return
|
||||
init_sprites: scope:[init_sprites] from init
|
||||
[77] *((const byte*) SPRITES_ENABLE#0) ← (byte) 1
|
||||
[78] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0
|
||||
[79] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0
|
||||
[80] *((const byte*) SPRITES_XMSB#0) ← (byte) 0
|
||||
[81] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0
|
||||
[82] *((const byte*) SPRITES_MC#0) ← (byte) 0
|
||||
[78] *((const byte*) SPRITES_ENABLE#0) ← (byte) 1
|
||||
[79] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0
|
||||
[80] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0
|
||||
[81] *((const byte*) SPRITES_XMSB#0) ← (byte) 0
|
||||
[82] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0
|
||||
[83] *((const byte*) SPRITES_MC#0) ← (byte) 0
|
||||
to:init_sprites::@return
|
||||
init_sprites::@return: scope:[init_sprites] from init_sprites
|
||||
[83] return
|
||||
[84] return
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -68,19 +68,6 @@
|
||||
(word) draw_block::z
|
||||
(word) draw_block::z#0 z zp ZP_WORD:4 4.0
|
||||
(word) draw_block::z#1 z#1 zp ZP_WORD:11 1.125
|
||||
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
|
||||
(label) fill::@1
|
||||
(label) fill::@return
|
||||
(byte*) fill::addr
|
||||
(byte*) fill::addr#0 addr zp ZP_WORD:8 2.0
|
||||
(byte*) fill::addr#1 addr zp ZP_WORD:8 16.5
|
||||
(byte*) fill::addr#2 addr zp ZP_WORD:8 17.5
|
||||
(byte*) fill::end
|
||||
(byte*) fill::end#0 end zp ZP_WORD:27 2.6
|
||||
(word) fill::size
|
||||
(byte*) fill::start
|
||||
(byte) fill::val
|
||||
(byte) fill::val#3 reg byte x 1.8333333333333333
|
||||
(void()) init()
|
||||
(label) init::@1
|
||||
(label) init::@2
|
||||
@ -120,6 +107,21 @@
|
||||
(byte) main::y#2 y zp ZP_BYTE:3 57.714285714285715
|
||||
(byte) main::z
|
||||
(byte) main::z#0 reg byte a 202.0
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
(label) memset::@1
|
||||
(label) memset::@return
|
||||
(byte) memset::c
|
||||
(byte) memset::c#3 reg byte x 1.5714285714285714
|
||||
(byte*) memset::dst
|
||||
(byte*) memset::dst#1 dst zp ZP_WORD:8 16.5
|
||||
(byte*) memset::dst#2 dst zp ZP_WORD:8 17.5
|
||||
(byte*~) memset::dst#3 dst zp ZP_WORD:8 4.0
|
||||
(byte*) memset::end
|
||||
(void*) memset::end#0 end zp ZP_WORD:27 0.3333333333333333
|
||||
(word) memset::num
|
||||
(void*) memset::return
|
||||
(void*) memset::str
|
||||
(void*) memset::str#2 str zp ZP_WORD:8 1.0
|
||||
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
|
||||
(byte~) mul8u::$1 reg byte a 2002.0
|
||||
(label) mul8u::@1
|
||||
@ -152,8 +154,8 @@ zp ZP_BYTE:3 [ main::y#2 main::y#1 ]
|
||||
reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
|
||||
zp ZP_WORD:4 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 draw_block::z#0 ]
|
||||
zp ZP_WORD:6 [ mul8u::mb#2 mul8u::mb#1 ]
|
||||
reg byte x [ fill::val#3 ]
|
||||
zp ZP_WORD:8 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
|
||||
zp ZP_WORD:8 [ memset::str#2 memset::dst#2 memset::dst#3 memset::dst#1 ]
|
||||
reg byte x [ memset::c#3 ]
|
||||
reg byte a [ main::z#0 ]
|
||||
reg byte a [ main::tile#0 ]
|
||||
reg byte a [ draw_block::tileno#0 ]
|
||||
@ -171,4 +173,4 @@ zp ZP_WORD:21 [ draw_block::$15 ]
|
||||
zp ZP_WORD:23 [ draw_block::$16 ]
|
||||
zp ZP_WORD:25 [ draw_block::$17 ]
|
||||
reg byte a [ mul8u::$1 ]
|
||||
zp ZP_WORD:27 [ fill::end#0 ]
|
||||
zp ZP_WORD:27 [ memset::end#0 ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user