1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-29 18:49:42 +00:00

Working on sprite scroller.

This commit is contained in:
Jesper Gravgaard 2020-03-31 19:20:33 +02:00
parent a977e6d9f0
commit 96779a5f24
5 changed files with 3538 additions and 2756 deletions

View File

@ -3,22 +3,32 @@ import "c64"
import "multiplexer"
char * const CHARSET_DEFAULT = 0x1000;
char * const FONT = 0x2000;
char * const SPRITES = 0x3000;
char * const SCREEN = 0x0400;
// Address of sprite pointers on screen
char * const SCREEN_SPRITES = SCREEN + SPRITE_PTRS;
// Show raster time used
const char DEBUG = 0;
// Sprite pointer for sprite 0
char SPRITE_0 = toSpritePtr(SPRITES);
//kickasm(pc FONT, resource "elefont.bin") {{
//char FONT[0x0800] = kickasm(resource "elefont.bin") {{
// .import binary "elefont.bin"
//}}
//}};
char FONT[0x0800];
char align(0x100) YSIN[0x100] = kickasm {{
.fill $100, round(142+89.5*sin(toRadians(360*i/256)))
}};
char align(0x100) XMOVEMENT[0x200] = kickasm {{
.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
}};
// The high-value table
char * const XMOVEMENT_HI = XMOVEMENT+0x100;
void main() {
// Create 2x2 font from CHARGEN
@ -38,12 +48,9 @@ void main() {
*D018 = toD018(SCREEN, CHARSET_DEFAULT);
// Set the x-positions & pointers
unsigned int xp = 24;
char sprite = toSpritePtr(SPRITES);
for(char s: 0..PLEX_COUNT-1) {
PLEX_PTR[s] = sprite++;
PLEX_XPOS[s] = xp;
xp += 10;
for(char s=0, x=0;s<PLEX_COUNT;s++,x+=8) {
PLEX_PTR[s] = SPRITE_0+s;
PLEX_XPOS[s] = { XMOVEMENT_HI[x], XMOVEMENT[x] };
}
// Enable & initialize sprites
*SPRITES_ENABLE = 0xff;
@ -52,7 +59,7 @@ void main() {
}
// Move the sprites
plexSine();
plex_move();
// Sort the sprites by y-position
plexSort();
@ -73,33 +80,53 @@ void main() {
// Move & Sort - when needed!
while(true) {
while(!framedone) {
while(!frame_done) {
}
frame_done = false;
//*BORDERCOL = RED;
// Move the sprites
plexSine();
plex_move();
// Sort the sprites by y-position
plexSort();
//*BORDERCOL = GREEN;
framedone = false;
//*BORDERCOL = BLACK;
}
}
// The scroll text
char SCROLL_TEXT[] = "camelot presents a spanking new contribution to the always hungry c64 scene. "
"in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
" ";
// The next char to use from the scroll text
char* scroll_text_next = SCROLL_TEXT;
// Y-sine index
char sin_idx = 0;
// Move the plex sprites in an Y-sine
void plexSine() {
// Assign sinus positions
// Move the plex sprites in an Y-sine and scroll them to the left.
void plex_move() {
char y_idx = sin_idx;
for(char sy: 0..PLEX_COUNT-1) {
PLEX_YPOS[sy] = YSIN[y_idx];
for(char s: 0..PLEX_COUNT-1) {
// Assign sine value
PLEX_YPOS[s] = YSIN[y_idx];
y_idx += 8;
if(PLEX_XPOS[s]==0) {
// Move sprite to far right
PLEX_XPOS[s] = 11*32;
// Restart scroll text of needed
if(*scroll_text_next==0)
scroll_text_next = SCROLL_TEXT;
// Read next char from the scroll text
PLEX_PTR[s] = SPRITE_0+*scroll_text_next++;
}
//PLEX_XPOS[s]--;
}
sin_idx +=1;
}
volatile bool framedone = false;
// Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites.
volatile bool frame_done = false;
// Show sprites from the multiplexer, rescheduling the IRQ as many times as needed
interrupt(kernel_min) void plex_irq() {
@ -118,7 +145,8 @@ interrupt(kernel_min) void plex_irq() {
} else {
// Reset the raster IRQ to the top of the screen
*RASTER = 0x28;
framedone = true;
// Signal that the IRQ is done showing sprites
frame_done = true;
}
// Acknowledge the IRQ
*IRQ_STATUS = IRQ_RASTER;

View File

@ -34,18 +34,22 @@
// The number of sprites in the multiplexer
.const PLEX_COUNT = $20
.label CHARSET_DEFAULT = $1000
.label FONT = $2000
.label SPRITES = $3000
.label SCREEN = $400
// The high-value table
.label XMOVEMENT_HI = XMOVEMENT+$100
// The address of the sprite pointers on the current screen (screen+0x3f8).
.label PLEX_SCREEN_PTR = $400+$3f8
.label plex_show_idx = $11
.label plex_sprite_idx = $12
.label plex_sprite_msb = $13
.label plex_free_next = $14
.label framedone = $15
.const toSpritePtr1_return = SPRITES/$40
.label plex_show_idx = $f
.label plex_sprite_idx = $10
.label plex_sprite_msb = $11
.label plex_free_next = $12
.label frame_done = $13
// The next char to use from the scroll text
.label scroll_text_next = 3
// Y-sine index
.label sin_idx = 4
.label sin_idx = 2
__bbegin:
// plex_show_idx=0
// The index in the PLEX tables of the next sprite to show
@ -62,16 +66,15 @@ __bbegin:
// The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown.
lda #0
sta.z plex_free_next
// framedone = false
sta.z framedone
// frame_done = false
// Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites.
sta.z frame_done
jsr main
rts
main: {
.const toSpritePtr1_return = SPRITES/$40
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f
.label sprite = 4
// Set the x-positions & pointers
.label xp = 2
.label s = 2
.label __13 = $14
// asm
// Create 2x2 font from CHARGEN
sei
@ -95,57 +98,37 @@ main: {
// Show screen
lda #toD0181_return
sta D018
lda #<$18
sta.z xp
lda #>$18
sta.z xp+1
ldx #0
lda #toSpritePtr1_return
sta.z sprite
__b1:
// PLEX_PTR[s] = sprite++
lda.z sprite
sta PLEX_PTR,x
// PLEX_PTR[s] = sprite++;
inc.z sprite
// PLEX_XPOS[s] = xp
txa
asl
tay
lda.z xp
sta PLEX_XPOS,y
lda.z xp+1
sta PLEX_XPOS+1,y
// xp += 10
lda #$a
clc
adc.z xp
sta.z xp
bcc !+
inc.z xp+1
!:
// for(char s: 0..PLEX_COUNT-1)
inx
cpx #PLEX_COUNT-1+1
bne __b1
sta.z s
// Set the x-positions & pointers
__b1:
// for(char s=0, x=0;s<PLEX_COUNT;s++,x+=8)
lda.z s
cmp #PLEX_COUNT
bcc __b2
// *SPRITES_ENABLE = 0xff
// Enable & initialize sprites
lda #$ff
sta SPRITES_ENABLE
ldx #0
__b3:
__b4:
// SPRITES_COLS[s] = WHITE
lda #WHITE
sta SPRITES_COLS,x
// for(char s: 0..7)
inx
cpx #8
bne __b3
// plexSine()
bne __b4
// plex_move()
// Move the sprites
lda #<SCROLL_TEXT
sta.z scroll_text_next
lda #>SCROLL_TEXT
sta.z scroll_text_next+1
lda #0
sta.z sin_idx
jsr plexSine
jsr plex_move
// plexSort()
// Sort the sprites by y-position
jsr plexSort
@ -179,25 +162,49 @@ main: {
sta KERNEL_IRQ+1
// asm
cli
__b5:
// while(!framedone)
lda.z framedone
cmp #0
bne __b6
jmp __b5
__b6:
// plexSine()
// while(!frame_done)
lda.z frame_done
cmp #0
bne __b7
jmp __b6
__b7:
// frame_done = false
lda #0
sta.z frame_done
// plex_move()
//*BORDERCOL = RED;
// Move the sprites
jsr plexSine
jsr plex_move
// plexSort()
// Sort the sprites by y-position
jsr plexSort
// framedone = false
//*BORDERCOL = GREEN;
lda #0
sta.z framedone
jmp __b5
jmp __b6
__b2:
// SPRITE_0+s
lda #toSpritePtr1_return
clc
adc.z s
// PLEX_PTR[s] = SPRITE_0+s
ldy.z s
sta PLEX_PTR,y
// PLEX_XPOS[s] = { XMOVEMENT_HI[x], XMOVEMENT[x] }
tya
asl
tay
lda XMOVEMENT_HI,x
sta.z __13+1
lda XMOVEMENT,x
sta.z __13
sta PLEX_XPOS,y
lda.z __13+1
sta PLEX_XPOS+1,y
// x+=8
txa
axs #-[8]
// for(char s=0, x=0;s<PLEX_COUNT;s++,x+=8)
inc.z s
jmp __b1
}
// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS
// Assumes that the positions are nearly sorted already (as each sprite just moves a bit)
@ -209,9 +216,9 @@ main: {
// elements before the marker are shifted right one at a time until encountering one smaller than the current one.
// It is then inserted at the spot. Now the marker can move forward.
plexSort: {
.label nxt_idx = $16
.label nxt_y = $17
.label m = 5
.label nxt_idx = $17
.label nxt_y = $16
.label m = 9
lda #0
sta.z m
__b1:
@ -276,22 +283,69 @@ plexSort: {
// }
rts
}
// Move the plex sprites in an Y-sine
plexSine: {
// Move the plex sprites in an Y-sine and scroll them to the left.
plex_move: {
.label s = 9
// y_idx = sin_idx
// Assign sinus positions
ldx.z sin_idx
ldy #0
lda #0
sta.z s
__b1:
// PLEX_YPOS[sy] = YSIN[y_idx]
// PLEX_YPOS[s] = YSIN[y_idx]
// Assign sine value
lda YSIN,x
ldy.z s
sta PLEX_YPOS,y
// y_idx += 8
txa
axs #-[8]
// for(char sy: 0..PLEX_COUNT-1)
iny
cpy #PLEX_COUNT-1+1
// PLEX_XPOS[s]==0
tya
asl
// if(PLEX_XPOS[s]==0)
tay
lda PLEX_XPOS+1,y
bne __b2
lda PLEX_XPOS,y
bne __b2
// PLEX_XPOS[s] = 11*32
lda.z s
asl
// Move sprite to far right
tay
lda #<$b*$20
sta PLEX_XPOS,y
lda #>$b*$20
sta PLEX_XPOS+1,y
// if(*scroll_text_next==0)
ldy #0
lda (scroll_text_next),y
cmp #0
bne __b3
lda #<SCROLL_TEXT
sta.z scroll_text_next
lda #>SCROLL_TEXT
sta.z scroll_text_next+1
__b3:
// SPRITE_0+*scroll_text_next++
lda #toSpritePtr1_return
clc
ldy #0
adc (scroll_text_next),y
// PLEX_PTR[s] = SPRITE_0+*scroll_text_next++
// Read next char from the scroll text
ldy.z s
sta PLEX_PTR,y
// PLEX_PTR[s] = SPRITE_0+*scroll_text_next++;
inc.z scroll_text_next
bne !+
inc.z scroll_text_next+1
!:
__b2:
// for(char s: 0..PLEX_COUNT-1)
inc.z s
lda #PLEX_COUNT-1+1
cmp.z s
bne __b1
// sin_idx +=1
inc.z sin_idx
@ -318,13 +372,13 @@ plexInit: {
// - num_chars The number of chars to convert
font_2x2_to_sprites: {
.const num_chars = $40
.label __3 = $18
.label __3 = $17
.label char_right = $d
.label sprite_idx = $a
.label char_left = $b
.label char_current = 6
.label sprite = 8
.label c = 5
.label char_current = 5
.label sprite = 7
.label c = 9
lda #<SPRITES
sta.z sprite
lda #>SPRITES
@ -446,18 +500,18 @@ font_2x2_to_sprites: {
// - 0x80 - 0xbf Lower left glyphs
// - 0xc0 - 0xff Lower right glyphs
font_2x2: {
.label __5 = $f
.label __7 = $f
.label next_2x2_left = 6
.label __5 = $14
.label __7 = $14
.label next_2x2_left = 5
.label next_2x2_right = $d
.label glyph_bits = $18
.label glyph_bits_2x2 = $f
.label glyph_bits = $16
.label glyph_bits_2x2 = $14
.label l2 = $17
.label l = $16
.label l = $a
.label next_2x2_left_1 = $b
.label next_2x2 = 6
.label next_original = 8
.label c = $a
.label next_2x2 = 5
.label next_original = 7
.label c = 9
lda #0
sta.z c
lda #<CHARGEN
@ -606,7 +660,7 @@ font_2x2: {
}
// Show sprites from the multiplexer, rescheduling the IRQ as many times as needed
plex_irq: {
.label __4 = $19
.label __4 = $18
// asm
sei
__b3:
@ -635,9 +689,10 @@ plex_irq: {
// Reset the raster IRQ to the top of the screen
lda #$28
sta RASTER
// framedone = true
// frame_done = true
// Signal that the IRQ is done showing sprites
lda #1
sta.z framedone
sta.z frame_done
__b2:
// *IRQ_STATUS = IRQ_RASTER
// Acknowledge the IRQ
@ -657,7 +712,7 @@ plex_irq: {
// Show the next sprite.
// plexSort() prepares showing the sprites
plexShowSprite: {
.label plex_sprite_idx2 = $1a
.label plex_sprite_idx2 = $19
// plex_sprite_idx2 = plex_sprite_idx*2
lda.z plex_sprite_idx
asl
@ -749,10 +804,18 @@ plexShowSprite: {
PLEX_SORTED_IDX: .fill PLEX_COUNT, 0
// Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again.
PLEX_FREE_YPOS: .fill 8, 0
//kickasm(pc FONT, resource "elefont.bin") {{
//char FONT[0x0800] = kickasm(resource "elefont.bin") {{
// .import binary "elefont.bin"
//}}
//}};
FONT: .fill $800, 0
.align $100
YSIN:
.fill $100, round(142+89.5*sin(toRadians(360*i/256)))
.align $100
XMOVEMENT:
.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
// The scroll text
SCROLL_TEXT: .text "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
.byte 0

View File

@ -8,97 +8,96 @@
to:@2
@2: scope:[] from @1
[4] (volatile byte) plex_free_next ← (byte) 0
to:toSpritePtr1
toSpritePtr1: scope:[] from @2
[5] phi()
to:@3
@3: scope:[] from @2
[5] (volatile bool) framedone ← false
@3: scope:[] from toSpritePtr1
[6] (volatile bool) frame_done ← false
to:@4
@4: scope:[] from @3
[6] phi()
[7] call main
[7] phi()
[8] call main
to:@end
@end: scope:[] from @4
[8] phi()
[9] phi()
(void()) main()
main: scope:[main] from @4
asm { sei }
[10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM
[11] call font_2x2
to:main::@8
main::@8: scope:[main] from main
[12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO
asm { cli }
[14] call font_2x2_to_sprites
[11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM
[12] call font_2x2
to:main::@9
main::@9: scope:[main] from main::@8
[15] phi()
[16] call plexInit
to:main::toD0181
main::toD0181: scope:[main] from main::@9
[17] phi()
to:main::@7
main::@7: scope:[main] from main::toD0181
[18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0
to:main::toSpritePtr1
main::toSpritePtr1: scope:[main] from main::@7
[19] phi()
to:main::@1
main::@1: scope:[main] from main::@1 main::toSpritePtr1
[20] (word) main::xp#2 ← phi( main::@1/(word) main::xp#1 main::toSpritePtr1/(word) $18 )
[20] (byte) main::s#2 ← phi( main::@1/(byte) main::s#1 main::toSpritePtr1/(byte) 0 )
[20] (byte) main::sprite#2 ← phi( main::@1/(byte) main::sprite#1 main::toSpritePtr1/(const byte) main::toSpritePtr1_return#0 )
[21] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2
[22] (byte) main::sprite#1 ← ++ (byte) main::sprite#2
[23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1
[24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2
[25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a
[26] (byte) main::s#1 ← ++ (byte) main::s#2
[27] if((byte) main::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1
[28] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff
to:main::@3
main::@3: scope:[main] from main::@2 main::@3
[29] (byte) main::s1#2 ← phi( main::@2/(byte) 0 main::@3/(byte) main::s1#1 )
[30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE
[31] (byte) main::s1#1 ← ++ (byte) main::s1#2
[32] if((byte) main::s1#1!=(byte) 8) goto main::@3
to:main::@4
main::@4: scope:[main] from main::@3
[33] phi()
[34] call plexSine
to:main::@10
main::@10: scope:[main] from main::@4
[35] phi()
[36] call plexSort
to:main::@11
main::@11: scope:[main] from main::@10
asm { sei }
[38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR
[39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f
[40] *((const nomodify byte*) RASTER) ← (byte) $28
[41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER
[42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq()
main::@9: scope:[main] from main
[13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO
asm { cli }
[15] call font_2x2_to_sprites
to:main::@10
main::@10: scope:[main] from main::@9
[16] phi()
[17] call plexInit
to:main::toD0181
main::toD0181: scope:[main] from main::@10
[18] phi()
to:main::@8
main::@8: scope:[main] from main::toD0181
[19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0
to:main::@1
main::@1: scope:[main] from main::@2 main::@8
[20] (byte) main::x#2 ← phi( main::@2/(byte) main::x#1 main::@8/(byte) 0 )
[20] (byte) main::s#2 ← phi( main::@2/(byte) main::s#1 main::@8/(byte) 0 )
[21] if((byte) main::s#2<(const nomodify byte) PLEX_COUNT) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@1
[22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
[23] (byte) main::s1#2 ← phi( main::@3/(byte) 0 main::@4/(byte) main::s1#1 )
[24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE
[25] (byte) main::s1#1 ← ++ (byte) main::s1#2
[26] if((byte) main::s1#1!=(byte) 8) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@11 main::@13 main::@5
[45] if((volatile bool) framedone) goto main::@6
to:main::@5
main::@6: scope:[main] from main::@5
[46] phi()
[47] call plexSine
main::@5: scope:[main] from main::@4
[27] phi()
[28] call plex_move
to:main::@11
main::@11: scope:[main] from main::@5
[29] phi()
[30] call plexSort
to:main::@12
main::@12: scope:[main] from main::@6
[48] phi()
[49] call plexSort
main::@12: scope:[main] from main::@11
asm { sei }
[32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR
[33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f
[34] *((const nomodify byte*) RASTER) ← (byte) $28
[35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER
[36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq()
asm { cli }
to:main::@6
main::@6: scope:[main] from main::@12 main::@13 main::@6
[39] if((volatile bool) frame_done) goto main::@7
to:main::@6
main::@7: scope:[main] from main::@6
[40] (volatile bool) frame_done ← false
[41] call plex_move
to:main::@13
main::@13: scope:[main] from main::@12
[50] (volatile bool) framedone ← false
to:main::@5
main::@13: scope:[main] from main::@7
[42] phi()
[43] call plexSort
to:main::@6
main::@2: scope:[main] from main::@1
[44] (byte~) main::$7 ← (const byte) toSpritePtr1_return#0 + (byte) main::s#2
[45] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte~) main::$7
[46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1
[47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2)
[48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13
[49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8
[50] (byte) main::s#1 ← ++ (byte) main::s#2
to:main::@1
(void()) plexSort()
plexSort: scope:[plexSort] from main::@10 main::@12
plexSort: scope:[plexSort] from main::@11 main::@13
[51] phi()
to:plexSort::@1
plexSort::@1: scope:[plexSort] from plexSort plexSort::@2
@ -148,165 +147,186 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2
[75] return
to:@return
(void()) plexSine()
plexSine: scope:[plexSine] from main::@4 main::@6
[76] (byte) sin_idx#10 ← phi( main::@6/(byte) sin_idx#12 main::@4/(byte) 0 )
[77] (byte) plexSine::y_idx#0 ← (byte) sin_idx#10
to:plexSine::@1
plexSine::@1: scope:[plexSine] from plexSine plexSine::@1
[78] (byte) plexSine::sy#2 ← phi( plexSine/(byte) 0 plexSine::@1/(byte) plexSine::sy#1 )
[78] (byte) plexSine::y_idx#2 ← phi( plexSine/(byte) plexSine::y_idx#0 plexSine::@1/(byte) plexSine::y_idx#1 )
[79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2)
[80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8
[81] (byte) plexSine::sy#1 ← ++ (byte) plexSine::sy#2
[82] if((byte) plexSine::sy#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexSine::@1
to:plexSine::@2
plexSine::@2: scope:[plexSine] from plexSine::@1
[83] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1
to:plexSine::@return
plexSine::@return: scope:[plexSine] from plexSine::@2
[84] return
(void()) plex_move()
plex_move: scope:[plex_move] from main::@5 main::@7
[76] (byte*) scroll_text_next#25 ← phi( main::@7/(byte*) scroll_text_next#13 main::@5/(const byte*) SCROLL_TEXT )
[76] (byte) sin_idx#10 ← phi( main::@7/(byte) sin_idx#12 main::@5/(byte) 0 )
[77] (byte) plex_move::y_idx#0 ← (byte) sin_idx#10
to:plex_move::@1
plex_move::@1: scope:[plex_move] from plex_move plex_move::@2
[78] (byte*) scroll_text_next#11 ← phi( plex_move/(byte*) scroll_text_next#25 plex_move::@2/(byte*) scroll_text_next#13 )
[78] (byte) plex_move::s#2 ← phi( plex_move/(byte) 0 plex_move::@2/(byte) plex_move::s#1 )
[78] (byte) plex_move::y_idx#2 ← phi( plex_move/(byte) plex_move::y_idx#0 plex_move::@2/(byte) plex_move::y_idx#1 )
[79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2)
[80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8
[81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1
[82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2
to:plex_move::@4
plex_move::@4: scope:[plex_move] from plex_move::@1
[83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1
[84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20
[85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6
to:plex_move::@3
plex_move::@6: scope:[plex_move] from plex_move::@4
[86] phi()
to:plex_move::@3
plex_move::@3: scope:[plex_move] from plex_move::@4 plex_move::@6
[87] (byte*) scroll_text_next#12 ← phi( plex_move::@6/(byte*) scroll_text_next#11 plex_move::@4/(const byte*) SCROLL_TEXT )
[88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12)
[89] *((const byte*) PLEX_PTR + (byte) plex_move::s#2) ← (byte~) plex_move::$4
[90] (byte*) scroll_text_next#4 ← ++ (byte*) scroll_text_next#12
to:plex_move::@2
plex_move::@2: scope:[plex_move] from plex_move::@1 plex_move::@3
[91] (byte*) scroll_text_next#13 ← phi( plex_move::@1/(byte*) scroll_text_next#11 plex_move::@3/(byte*) scroll_text_next#4 )
[92] (byte) plex_move::s#1 ← ++ (byte) plex_move::s#2
[93] if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plex_move::@1
to:plex_move::@5
plex_move::@5: scope:[plex_move] from plex_move::@2
[94] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1
to:plex_move::@return
plex_move::@return: scope:[plex_move] from plex_move::@5
[95] return
to:@return
(void()) plexInit((byte*) plexInit::screen)
plexInit: scope:[plexInit] from main::@9
[85] phi()
plexInit: scope:[plexInit] from main::@10
[96] phi()
to:plexInit::plexSetScreen1
plexInit::plexSetScreen1: scope:[plexInit] from plexInit
[86] phi()
[97] phi()
to:plexInit::@1
plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1
[87] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 )
[88] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2
[89] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2
[90] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1
[98] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 )
[99] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2
[100] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2
[101] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1
to:plexInit::@return
plexInit::@return: scope:[plexInit] from plexInit::@1
[91] return
[102] return
to:@return
(void()) font_2x2_to_sprites((byte*) font_2x2_to_sprites::font_2x2 , (byte*) font_2x2_to_sprites::sprites , (byte) font_2x2_to_sprites::num_chars)
font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@8
[92] phi()
font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@9
[103] phi()
to:font_2x2_to_sprites::@1
font_2x2_to_sprites::@1: scope:[font_2x2_to_sprites] from font_2x2_to_sprites font_2x2_to_sprites::@7
[93] (byte*) font_2x2_to_sprites::sprite#4 ← phi( font_2x2_to_sprites/(const nomodify byte*) SPRITES font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::sprite#1 )
[93] (byte*) font_2x2_to_sprites::char_current#2 ← phi( font_2x2_to_sprites/(const nomodify byte*) FONT font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::char_current#1 )
[93] (byte) font_2x2_to_sprites::c#2 ← phi( font_2x2_to_sprites/(byte) 0 font_2x2_to_sprites::@7/(byte) font_2x2_to_sprites::c#1 )
[94] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2
[104] (byte*) font_2x2_to_sprites::sprite#4 ← phi( font_2x2_to_sprites/(const nomodify byte*) SPRITES font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::sprite#1 )
[104] (byte*) font_2x2_to_sprites::char_current#2 ← phi( font_2x2_to_sprites/(const byte*) FONT font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::char_current#1 )
[104] (byte) font_2x2_to_sprites::c#2 ← phi( font_2x2_to_sprites/(byte) 0 font_2x2_to_sprites::@7/(byte) font_2x2_to_sprites::c#1 )
[105] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2
to:font_2x2_to_sprites::@return
font_2x2_to_sprites::@return: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1
[95] return
[106] return
to:@return
font_2x2_to_sprites::@2: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1
[96] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8
[97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2
[107] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8
[108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2
to:font_2x2_to_sprites::@3
font_2x2_to_sprites::@3: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@2 font_2x2_to_sprites::@5
[98] (byte*) font_2x2_to_sprites::char_right#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_right#4 )
[98] (byte) font_2x2_to_sprites::sprite_idx#4 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::sprite_idx#3 )
[98] (byte*) font_2x2_to_sprites::char_left#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_left#4 )
[98] (byte) font_2x2_to_sprites::i#2 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::i#1 )
[99] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7
[100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3)
[101] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4
[102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3)
[103] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1
[104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0
[105] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2
[106] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4
[109] (byte*) font_2x2_to_sprites::char_right#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_right#4 )
[109] (byte) font_2x2_to_sprites::sprite_idx#4 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::sprite_idx#3 )
[109] (byte*) font_2x2_to_sprites::char_left#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_left#4 )
[109] (byte) font_2x2_to_sprites::i#2 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::i#1 )
[110] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7
[111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3)
[112] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4
[113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3)
[114] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1
[115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0
[116] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2
[117] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4
to:font_2x2_to_sprites::@6
font_2x2_to_sprites::@6: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3
[107] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8
[118] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8
to:font_2x2_to_sprites::@5
font_2x2_to_sprites::@8: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@6
[108] phi()
[119] phi()
to:font_2x2_to_sprites::@5
font_2x2_to_sprites::@5: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@4 font_2x2_to_sprites::@6 font_2x2_to_sprites::@8
[109] (byte*) font_2x2_to_sprites::char_right#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_right#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::@6/(const nomodify byte*) FONT+(byte) ' '*(byte) 8 )
[109] (byte*) font_2x2_to_sprites::char_left#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::@6/(const nomodify byte*) FONT+(byte) ' '*(byte) 8 )
[110] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2
[111] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3
[120] (byte*) font_2x2_to_sprites::char_right#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_right#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::@6/(const byte*) FONT+(byte) ' '*(byte) 8 )
[120] (byte*) font_2x2_to_sprites::char_left#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::@6/(const byte*) FONT+(byte) ' '*(byte) 8 )
[121] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2
[122] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3
to:font_2x2_to_sprites::@7
font_2x2_to_sprites::@7: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@5
[112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8
[113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40
[114] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2
[123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8
[124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40
[125] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2
to:font_2x2_to_sprites::@1
font_2x2_to_sprites::@4: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3
[115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8
[116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8
[126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8
[127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8
to:font_2x2_to_sprites::@5
(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
font_2x2: scope:[font_2x2] from main
[117] phi()
[128] phi()
to:font_2x2::@1
font_2x2::@1: scope:[font_2x2] from font_2x2 font_2x2::@9
[118] (byte) font_2x2::c#11 ← phi( font_2x2/(byte) 0 font_2x2::@9/(byte) font_2x2::c#1 )
[118] (byte*) font_2x2::next_original#4 ← phi( font_2x2/(const nomodify byte*) CHARGEN font_2x2::@9/(byte*) font_2x2::next_original#1 )
[118] (byte*) font_2x2::next_2x2_left#0 ← phi( font_2x2/(const nomodify byte*) FONT font_2x2::@9/(byte*) font_2x2::next_2x2#1 )
[119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8
[120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0
[129] (byte) font_2x2::c#11 ← phi( font_2x2/(byte) 0 font_2x2::@9/(byte) font_2x2::c#1 )
[129] (byte*) font_2x2::next_original#4 ← phi( font_2x2/(const nomodify byte*) CHARGEN font_2x2::@9/(byte*) font_2x2::next_original#1 )
[129] (byte*) font_2x2::next_2x2_left#0 ← phi( font_2x2/(const byte*) FONT font_2x2::@9/(byte*) font_2x2::next_2x2#1 )
[130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8
[131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0
to:font_2x2::@2
font_2x2::@2: scope:[font_2x2] from font_2x2::@1 font_2x2::@8
[121] (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@8/(byte*) font_2x2::next_2x2_right#8 )
[121] (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l2#9 )
[121] (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#10 font_2x2::@8/(byte*) font_2x2::next_2x2_left#8 )
[121] (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l#1 )
[122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2)
[132] (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@8/(byte*) font_2x2::next_2x2_right#8 )
[132] (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l2#9 )
[132] (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#10 font_2x2::@8/(byte*) font_2x2::next_2x2_left#8 )
[132] (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l#1 )
[133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2)
to:font_2x2::@3
font_2x2::@3: scope:[font_2x2] from font_2x2::@2 font_2x2::@5
[123] (byte) font_2x2::b#2 ← phi( font_2x2::@2/(byte) 0 font_2x2::@5/(byte) font_2x2::b#1 )
[123] (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@2/(word) 0 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#2 )
[123] (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@5/(byte) font_2x2::glyph_bits#1 )
[124] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80
[125] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4
[134] (byte) font_2x2::b#2 ← phi( font_2x2::@2/(byte) 0 font_2x2::@5/(byte) font_2x2::b#1 )
[134] (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@2/(word) 0 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#2 )
[134] (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@5/(byte) font_2x2::glyph_bits#1 )
[135] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80
[136] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4
to:font_2x2::@5
font_2x2::@4: scope:[font_2x2] from font_2x2::@3
[126] phi()
[137] phi()
to:font_2x2::@5
font_2x2::@5: scope:[font_2x2] from font_2x2::@3 font_2x2::@4
[127] (byte) font_2x2::glyph_bit#0 ← phi( font_2x2::@4/(byte) 1 font_2x2::@3/(byte) 0 )
[128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1
[129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0
[130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1
[131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0
[132] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1
[133] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2
[134] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3
[138] (byte) font_2x2::glyph_bit#0 ← phi( font_2x2::@4/(byte) 1 font_2x2::@3/(byte) 0 )
[139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1
[140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0
[141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1
[142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0
[143] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1
[144] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2
[145] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3
to:font_2x2::@6
font_2x2::@6: scope:[font_2x2] from font_2x2::@5
[135] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2
[136] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12
[137] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1
[138] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12
[139] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2
[140] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15
[141] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1
[142] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15
[143] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2
[144] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8
[146] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2
[147] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12
[148] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1
[149] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12
[150] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2
[151] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15
[152] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1
[153] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15
[154] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2
[155] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8
to:font_2x2::@7
font_2x2::@7: scope:[font_2x2] from font_2x2::@6
[145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8
[146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8
[156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8
[157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8
to:font_2x2::@8
font_2x2::@8: scope:[font_2x2] from font_2x2::@6 font_2x2::@7
[147] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 )
[147] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 )
[147] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 )
[148] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2
[149] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2
[158] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 )
[158] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 )
[158] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 )
[159] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2
[160] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2
to:font_2x2::@9
font_2x2::@9: scope:[font_2x2] from font_2x2::@8
[150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8
[151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8
[152] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11
[153] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1
[161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8
[162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8
[163] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11
[164] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1
to:font_2x2::@return
font_2x2::@return: scope:[font_2x2] from font_2x2::@9
[154] return
[165] return
to:@return
interrupt(KERNEL_MIN)(void()) plex_irq()
@ -314,77 +334,77 @@ plex_irq: scope:[plex_irq] from
asm { sei }
to:plex_irq::@3
plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7
[156] phi()
[157] call plexShowSprite
[167] phi()
[168] call plexShowSprite
to:plex_irq::plexFreeNextYpos1
plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@3
[158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next)
[169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next)
to:plex_irq::@6
plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1
[159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3
[160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4
[170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3
[171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4
to:plex_irq::@7
plex_irq::@7: scope:[plex_irq] from plex_irq::@6
[161] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3
[172] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3
to:plex_irq::@4
plex_irq::@4: scope:[plex_irq] from plex_irq::@6 plex_irq::@7
[162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1
[173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1
to:plex_irq::@5
plex_irq::@5: scope:[plex_irq] from plex_irq::@4
[163] *((const nomodify byte*) RASTER) ← (byte) $28
[164] (volatile bool) framedone ← true
[174] *((const nomodify byte*) RASTER) ← (byte) $28
[175] (volatile bool) frame_done ← true
to:plex_irq::@2
plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5
[165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
asm { cli }
to:plex_irq::@return
plex_irq::@return: scope:[plex_irq] from plex_irq::@2
[167] return
[178] return
to:@return
plex_irq::@1: scope:[plex_irq] from plex_irq::@4
[168] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0
[179] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0
to:plex_irq::@2
(void()) plexShowSprite()
plexShowSprite: scope:[plexShowSprite] from plex_irq::@3
[169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1
[170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx))
[171] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0
[180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1
[181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx))
[182] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0
to:plexShowSprite::plexFreeAdd1
plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite
[172] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15
[173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0
[174] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1
[175] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7
[176] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2
[183] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15
[184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0
[185] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1
[186] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7
[187] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2
to:plexShowSprite::@5
plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1
[177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx))
[178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)
[179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1
[180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11)
[181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2
[182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11)
[183] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1
[188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx))
[189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)
[190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1
[191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11)
[192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2
[193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11)
[194] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1
to:plexShowSprite::@3
plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5
[184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb
[185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9
[195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb
[196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9
to:plexShowSprite::@2
plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3
[186] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1
[187] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7
[188] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6
[189] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx
[190] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1
[191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return
[197] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1
[198] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7
[199] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6
[200] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx
[201] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1
[202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return
to:plexShowSprite::@4
plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2
[192] (volatile byte) plex_sprite_msb ← (byte) 1
[203] (volatile byte) plex_sprite_msb ← (byte) 1
to:plexShowSprite::@return
plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4
[193] return
[204] return
to:@return
plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5
[194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb
[205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb
to:plexShowSprite::@2

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333
(const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f
(const nomodify byte*) D018 = (byte*) 53272
(const nomodify byte*) FONT = (byte*) 8192
(const byte*) FONT[(number) $800] = { fill( $800, 0) }
(const nomodify byte*) IRQ_ENABLE = (byte*) 53274
(const nomodify byte) IRQ_RASTER = (byte) 1
(const nomodify byte*) IRQ_STATUS = (byte*) 53273
@ -27,14 +27,19 @@
(const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1
(const nomodify byte*) RASTER = (byte*) 53266
(const nomodify byte*) SCREEN = (byte*) 1024
(const byte*) SCROLL_TEXT[] = (byte*) "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
(const nomodify byte*) SPRITES = (byte*) 12288
(const nomodify byte*) SPRITES_COLS = (byte*) 53287
(const nomodify byte*) SPRITES_ENABLE = (byte*) 53269
(const nomodify byte*) SPRITES_XMSB = (byte*) 53264
(const nomodify byte*) SPRITES_XPOS = (byte*) 53248
(const nomodify byte*) SPRITES_YPOS = (byte*) 53249
(byte) SPRITE_0
(const nomodify byte*) VIC_CONTROL = (byte*) 53265
(const nomodify byte) WHITE = (byte) 1
(const byte*) XMOVEMENT[(number) $200] = kickasm {{ .lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
}}
(const nomodify byte*) XMOVEMENT_HI = (const byte*) XMOVEMENT+(word) $100
(const byte*) YSIN[(number) $100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256)))
}}
(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
@ -43,8 +48,8 @@
(byte~) font_2x2::$12 reg byte a 10001.0
(byte~) font_2x2::$14 reg byte y 20002.0
(byte~) font_2x2::$15 reg byte a 10001.0
(word~) font_2x2::$5 zp[2]:15 200002.0
(word~) font_2x2::$7 zp[2]:15 200002.0
(word~) font_2x2::$5 zp[2]:20 200002.0
(word~) font_2x2::$7 zp[2]:20 200002.0
(label) font_2x2::@1
(label) font_2x2::@2
(label) font_2x2::@3
@ -59,31 +64,31 @@
(byte) font_2x2::b#1 reg byte y 150001.5
(byte) font_2x2::b#2 reg byte y 20000.2
(byte) font_2x2::c
(byte) font_2x2::c#1 c zp[1]:10 1501.5
(byte) font_2x2::c#11 c zp[1]:10 58.88235294117647
(byte) font_2x2::c#1 c zp[1]:9 1501.5
(byte) font_2x2::c#11 c zp[1]:9 58.88235294117647
(byte*) font_2x2::font_2x2
(byte*) font_2x2::font_original
(byte) font_2x2::glyph_bit
(byte) font_2x2::glyph_bit#0 reg byte x 50000.5
(byte) font_2x2::glyph_bits
(byte) font_2x2::glyph_bits#0 glyph_bits zp[1]:24 20002.0
(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:24 66667.33333333333
(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:24 34444.88888888889
(byte) font_2x2::glyph_bits#0 glyph_bits zp[1]:22 20002.0
(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:22 66667.33333333333
(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:22 34444.88888888889
(word) font_2x2::glyph_bits_2x2
(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:15 200002.0
(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:15 27500.5
(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:15 40000.4
(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:20 200002.0
(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:20 27500.5
(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:20 40000.4
(byte) font_2x2::l
(byte) font_2x2::l#1 l zp[1]:22 15001.5
(byte) font_2x2::l#2 l zp[1]:22 1111.2222222222222
(byte) font_2x2::l#1 l zp[1]:10 15001.5
(byte) font_2x2::l#2 l zp[1]:10 1111.2222222222222
(byte) font_2x2::l2
(byte) font_2x2::l2#1 l2 zp[1]:23 15001.5
(byte) font_2x2::l2#8 l2 zp[1]:23 2727.5454545454545
(byte) font_2x2::l2#9 l2 zp[1]:23 6667.333333333333
(byte*) font_2x2::next_2x2
(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:6 500.5
(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:5 500.5
(byte*) font_2x2::next_2x2_left
(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:6 750.1875
(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:5 750.1875
(byte*) font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:11 10001.0
(byte*) font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:11 2002.0
(byte*) font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:11 1708.5416666666665
@ -94,10 +99,10 @@
(byte*) font_2x2::next_2x2_right#7 next_2x2_right zp[2]:13 1708.5416666666665
(byte*) font_2x2::next_2x2_right#8 next_2x2_right zp[2]:13 10001.0
(byte*) font_2x2::next_original
(byte*) font_2x2::next_original#1 next_original zp[2]:8 667.3333333333334
(byte*) font_2x2::next_original#4 next_original zp[2]:8 363.7272727272727
(byte*) font_2x2::next_original#1 next_original zp[2]:7 667.3333333333334
(byte*) font_2x2::next_original#4 next_original zp[2]:7 363.7272727272727
(void()) font_2x2_to_sprites((byte*) font_2x2_to_sprites::font_2x2 , (byte*) font_2x2_to_sprites::sprites , (byte) font_2x2_to_sprites::num_chars)
(byte~) font_2x2_to_sprites::$3 zp[1]:24 10001.0
(byte~) font_2x2_to_sprites::$3 zp[1]:23 10001.0
(label) font_2x2_to_sprites::@1
(label) font_2x2_to_sprites::@2
(label) font_2x2_to_sprites::@3
@ -108,11 +113,11 @@
(label) font_2x2_to_sprites::@8
(label) font_2x2_to_sprites::@return
(byte) font_2x2_to_sprites::c
(byte) font_2x2_to_sprites::c#1 c zp[1]:5 2002.0
(byte) font_2x2_to_sprites::c#2 c zp[1]:5 136.5
(byte) font_2x2_to_sprites::c#1 c zp[1]:9 2002.0
(byte) font_2x2_to_sprites::c#2 c zp[1]:9 136.5
(byte*) font_2x2_to_sprites::char_current
(byte*) font_2x2_to_sprites::char_current#1 char_current zp[2]:6 667.3333333333334
(byte*) font_2x2_to_sprites::char_current#2 char_current zp[2]:6 1200.3
(byte*) font_2x2_to_sprites::char_current#1 char_current zp[2]:5 667.3333333333334
(byte*) font_2x2_to_sprites::char_current#2 char_current zp[2]:5 1200.3
(byte*) font_2x2_to_sprites::char_left
(byte*) font_2x2_to_sprites::char_left#1 char_left zp[2]:11 10001.0
(byte*) font_2x2_to_sprites::char_left#3 char_left zp[2]:11 2818.5454545454545
@ -130,17 +135,19 @@
(byte) font_2x2_to_sprites::num_chars
(const byte) font_2x2_to_sprites::num_chars#0 num_chars = (byte) $40
(byte*) font_2x2_to_sprites::sprite
(byte*) font_2x2_to_sprites::sprite#1 sprite zp[2]:8 1001.0
(byte*) font_2x2_to_sprites::sprite#4 sprite zp[2]:8 1524.047619047619
(byte*) font_2x2_to_sprites::sprite#1 sprite zp[2]:7 1001.0
(byte*) font_2x2_to_sprites::sprite#4 sprite zp[2]:7 1524.047619047619
(byte) font_2x2_to_sprites::sprite_idx
(byte) font_2x2_to_sprites::sprite_idx#1 sprite_idx zp[1]:10 15001.5
(byte) font_2x2_to_sprites::sprite_idx#2 reg byte y 15001.5
(byte) font_2x2_to_sprites::sprite_idx#3 sprite_idx zp[1]:10 2222.4444444444443
(byte) font_2x2_to_sprites::sprite_idx#4 sprite_idx zp[1]:10 10001.0
(byte*) font_2x2_to_sprites::sprites
(volatile bool) framedone loadstore zp[1]:21 27.65
(volatile bool) frame_done loadstore zp[1]:19 25.72093023255814
(void()) main()
(byte~) main::$12 reg byte a 202.0
(byte~) main::$12 reg byte y 101.0
(word~) main::$13 zp[2]:20 202.0
(byte~) main::$7 reg byte a 202.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -155,26 +162,19 @@
(label) main::@8
(label) main::@9
(byte) main::s
(byte) main::s#1 reg byte x 151.5
(byte) main::s#2 reg byte x 67.33333333333333
(byte) main::s#1 s zp[1]:2 202.0
(byte) main::s#2 s zp[1]:2 75.75
(byte) main::s1
(byte) main::s1#1 reg byte x 151.5
(byte) main::s1#2 reg byte x 151.5
(byte) main::sprite
(byte) main::sprite#1 sprite zp[1]:4 33.666666666666664
(byte) main::sprite#2 sprite zp[1]:4 151.5
(label) main::toD0181
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) CHARSET_DEFAULT/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(label) main::toSpritePtr1
(byte) main::toSpritePtr1_return
(const byte) main::toSpritePtr1_return#0 toSpritePtr1_return = (byte)(word)(const nomodify byte*) SPRITES/(byte) $40
(byte*) main::toSpritePtr1_sprite
(word) main::xp
(word) main::xp#1 xp zp[2]:2 67.33333333333333
(word) main::xp#2 xp zp[2]:2 60.599999999999994
(byte) main::x
(byte) main::x#1 reg byte x 101.0
(byte) main::x#2 reg byte x 57.714285714285715
(void()) plexInit((byte*) plexInit::screen)
(label) plexInit::@1
(label) plexInit::@return
@ -204,21 +204,10 @@
(byte) plexShowSprite::plexFreeAdd1_ypos
(byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 151.5
(byte) plexShowSprite::plex_sprite_idx2
(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:26 25.25
(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:25 25.25
(byte) plexShowSprite::xpos_idx
(byte) plexShowSprite::xpos_idx#0 reg byte a 202.0
(byte) plexShowSprite::ypos
(void()) plexSine()
(label) plexSine::@1
(label) plexSine::@2
(label) plexSine::@return
(byte) plexSine::sy
(byte) plexSine::sy#1 reg byte y 150001.5
(byte) plexSine::sy#2 reg byte y 100001.0
(byte) plexSine::y_idx
(byte) plexSine::y_idx#0 reg byte x 2002.0
(byte) plexSine::y_idx#1 reg byte x 66667.33333333333
(byte) plexSine::y_idx#2 reg byte x 150502.0
(void()) plexSort()
(label) plexSort::@1
(label) plexSort::@2
@ -229,12 +218,12 @@
(label) plexSort::@7
(label) plexSort::@return
(byte) plexSort::m
(byte) plexSort::m#1 m zp[1]:5 150001.5
(byte) plexSort::m#2 m zp[1]:5 41667.08333333333
(byte) plexSort::m#1 m zp[1]:9 150001.5
(byte) plexSort::m#2 m zp[1]:9 41667.08333333333
(byte) plexSort::nxt_idx
(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:22 30000.300000000003
(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:23 30000.300000000003
(byte) plexSort::nxt_y
(byte) plexSort::nxt_y#0 nxt_y zp[1]:23 150000.375
(byte) plexSort::nxt_y#0 nxt_y zp[1]:22 150000.375
(label) plexSort::plexFreePrepare1
(label) plexSort::plexFreePrepare1_@1
(label) plexSort::plexFreePrepare1_@2
@ -246,9 +235,9 @@
(byte) plexSort::s#2 reg byte x 200002.0
(byte) plexSort::s#3 reg byte x 2050002.5
(byte) plexSort::s#6 reg byte x 200002.0
(volatile byte) plex_free_next loadstore zp[1]:20 42.48387096774193
(volatile byte) plex_free_next loadstore zp[1]:18 42.48387096774193
interrupt(KERNEL_MIN)(void()) plex_irq()
(byte~) plex_irq::$4 zp[1]:25 11.0
(byte~) plex_irq::$4 zp[1]:24 11.0
(label) plex_irq::@1
(label) plex_irq::@2
(label) plex_irq::@3
@ -261,42 +250,72 @@ interrupt(KERNEL_MIN)(void()) plex_irq()
(byte) plex_irq::plexFreeNextYpos1_return
(byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.800000000000001
(byte) plex_irq::rasterY
(volatile byte) plex_show_idx loadstore zp[1]:17 46.0909090909091
(volatile byte) plex_sprite_idx loadstore zp[1]:18 45.387096774193544
(volatile byte) plex_sprite_msb loadstore zp[1]:19 48.757575757575765
(void()) plex_move()
(byte~) plex_move::$4 reg byte a 200002.0
(byte~) plex_move::$6 reg byte a 200002.0
(byte~) plex_move::$7 reg byte a 200002.0
(label) plex_move::@1
(label) plex_move::@2
(label) plex_move::@3
(label) plex_move::@4
(label) plex_move::@5
(label) plex_move::@6
(label) plex_move::@return
(byte) plex_move::s
(byte) plex_move::s#1 s zp[1]:9 150001.5
(byte) plex_move::s#2 s zp[1]:9 42857.57142857143
(byte) plex_move::y_idx
(byte) plex_move::y_idx#0 reg byte x 2002.0
(byte) plex_move::y_idx#1 reg byte x 14285.857142857143
(byte) plex_move::y_idx#2 reg byte x 150502.0
(volatile byte) plex_show_idx loadstore zp[1]:15 46.0909090909091
(volatile byte) plex_sprite_idx loadstore zp[1]:16 45.387096774193544
(volatile byte) plex_sprite_msb loadstore zp[1]:17 48.757575757575765
(byte*) scroll_text_next
(byte*) scroll_text_next#11 scroll_text_next zp[2]:3 44556.11111111111
(byte*) scroll_text_next#12 scroll_text_next zp[2]:3 100001.0
(byte*) scroll_text_next#13 scroll_text_next zp[2]:3 14290.666666666668
(byte*) scroll_text_next#25 scroll_text_next zp[2]:3 551.0
(byte*) scroll_text_next#4 scroll_text_next zp[2]:3 200002.0
(byte) sin_idx
(byte) sin_idx#10 sin_idx zp[1]:4 300.42857142857144
(byte) sin_idx#12 sin_idx zp[1]:4 58.0
(byte) sin_idx#10 sin_idx zp[1]:2 116.83333333333334
(byte) sin_idx#12 sin_idx zp[1]:2 61.22222222222223
(label) toSpritePtr1
(byte) toSpritePtr1_return
(const byte) toSpritePtr1_return#0 toSpritePtr1_return = (byte)(word)(const nomodify byte*) SPRITES/(byte) $40
(byte*) toSpritePtr1_sprite
reg byte x [ main::s#2 main::s#1 ]
zp[2]:2 [ main::xp#2 main::xp#1 ]
reg byte x [ main::x#2 main::x#1 ]
reg byte x [ main::s1#2 main::s1#1 ]
reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ]
reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ]
zp[1]:4 [ sin_idx#10 sin_idx#12 main::sprite#2 main::sprite#1 ]
reg byte x [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ]
reg byte y [ plexSine::sy#2 plexSine::sy#1 ]
zp[1]:2 [ sin_idx#10 sin_idx#12 main::s#2 main::s#1 ]
reg byte x [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
zp[2]:3 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ]
reg byte x [ plexInit::i#2 plexInit::i#1 ]
zp[1]:5 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plexSort::m#2 plexSort::m#1 ]
reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ]
zp[2]:6 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ]
zp[2]:8 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ]
zp[1]:10 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ]
zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ]
zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ]
zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plex_move::s#2 plex_move::s#1 plexSort::m#2 plexSort::m#1 ]
zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ]
zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ]
zp[2]:13 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ]
zp[2]:15 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ]
reg byte y [ font_2x2::b#2 font_2x2::b#1 ]
reg byte x [ font_2x2::glyph_bit#0 ]
zp[1]:17 [ plex_show_idx ]
zp[1]:18 [ plex_sprite_idx ]
zp[1]:19 [ plex_sprite_msb ]
zp[1]:20 [ plex_free_next ]
zp[1]:21 [ framedone ]
reg byte a [ main::$12 ]
zp[1]:22 [ plexSort::nxt_idx#0 font_2x2::l#2 font_2x2::l#1 ]
zp[1]:23 [ plexSort::nxt_y#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
zp[1]:15 [ plex_show_idx ]
zp[1]:16 [ plex_sprite_idx ]
zp[1]:17 [ plex_sprite_msb ]
zp[1]:18 [ plex_free_next ]
zp[1]:19 [ frame_done ]
reg byte a [ main::$7 ]
reg byte y [ main::$12 ]
zp[2]:20 [ main::$13 font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ]
zp[1]:22 [ plexSort::nxt_y#0 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
reg byte x [ plexSort::s#2 ]
zp[1]:24 [ font_2x2_to_sprites::$3 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
reg byte a [ plex_move::$6 ]
reg byte a [ plex_move::$7 ]
reg byte a [ plex_move::$4 ]
zp[1]:23 [ font_2x2_to_sprites::$3 plexSort::nxt_idx#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
reg byte y [ font_2x2_to_sprites::sprite_idx#2 ]
reg byte a [ font_2x2::$1 ]
reg byte a [ font_2x2::$12 ]
@ -304,8 +323,8 @@ reg byte y [ font_2x2::$11 ]
reg byte a [ font_2x2::$15 ]
reg byte y [ font_2x2::$14 ]
reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ]
zp[1]:25 [ plex_irq::$4 ]
zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ]
zp[1]:24 [ plex_irq::$4 ]
zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$1 ]