mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-06-03 07:29:37 +00:00
4167 lines
203 KiB
Plaintext
4167 lines
203 KiB
Plaintext
Resolved forward reference SCROLL_TEXT to SCROLL_TEXT
|
|
Resolved forward reference MEGA_LOGO to MEGA_LOGO
|
|
Resolved forward reference MEGA_LOGO to MEGA_LOGO
|
|
Resolved forward reference PAL_RED to PAL_RED
|
|
Resolved forward reference PAL_GREEN to PAL_GREEN
|
|
Resolved forward reference PAL_BLUE to PAL_BLUE
|
|
Resolved forward reference irq to __interrupt(hardware_clobber) void irq()
|
|
Resolved forward reference GREET_COUNT to GREET_COUNT
|
|
Resolved forward reference PAL_GREEN to PAL_GREEN
|
|
Resolved forward reference GREETING to GREETING
|
|
Resolved forward reference SCROLL_TEXT to SCROLL_TEXT
|
|
Fixing struct type size struct F018_DMAGIC to 17
|
|
Fixing struct type SIZE_OF struct F018_DMAGIC to 17
|
|
Fixing struct type SIZE_OF struct F018_DMAGIC to 17
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap::aVal in asm { ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap::xVal in asm { ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap::yVal in asm { ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap::zVal in asm { ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::lMb in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::uMb in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::aVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::xVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::yVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::zVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
|
|
Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx)
|
|
Inlined call call __init
|
|
Eliminating unused variable with no statement memset::$2
|
|
Eliminating unused variable with no statement irq::$1
|
|
Eliminating unused variable with no statement irq::$17
|
|
Eliminating unused variable with no statement irq::$20
|
|
Calling convention STACK_CALL adding prepare/execute/finalize for call *songInit
|
|
Calling convention STACK_CALL adding prepare/execute/finalize for call *songPlay
|
|
|
|
CONTROL FLOW GRAPH SSA
|
|
|
|
void * memset(void *str , char c , unsigned int num)
|
|
memset: scope:[memset] from main::@1
|
|
memset::c#4 = phi( main::@1/memset::c#0 )
|
|
memset::str#3 = phi( main::@1/memset::str#0 )
|
|
memset::num#1 = phi( main::@1/memset::num#0 )
|
|
memset::$0 = memset::num#1 > 0
|
|
memset::$1 = ! memset::$0
|
|
if(memset::$1) goto memset::@1
|
|
to:memset::@2
|
|
memset::@1: scope:[memset] from memset memset::@3
|
|
memset::str#1 = phi( memset/memset::str#3, memset::@3/memset::str#4 )
|
|
memset::return#0 = memset::str#1
|
|
to:memset::@return
|
|
memset::@2: scope:[memset] from memset
|
|
memset::c#3 = phi( memset/memset::c#4 )
|
|
memset::num#2 = phi( memset/memset::num#1 )
|
|
memset::str#2 = phi( memset/memset::str#3 )
|
|
memset::$4 = (char *)memset::str#2
|
|
memset::end#0 = memset::$4 + memset::num#2
|
|
memset::dst#0 = ((char *)) memset::str#2
|
|
to:memset::@3
|
|
memset::@3: scope:[memset] from memset::@2 memset::@4
|
|
memset::c#2 = phi( memset::@2/memset::c#3, memset::@4/memset::c#1 )
|
|
memset::str#4 = phi( memset::@2/memset::str#2, memset::@4/memset::str#5 )
|
|
memset::end#1 = phi( memset::@2/memset::end#0, memset::@4/memset::end#2 )
|
|
memset::dst#2 = phi( memset::@2/memset::dst#0, memset::@4/memset::dst#1 )
|
|
memset::$3 = memset::dst#2 != memset::end#1
|
|
if(memset::$3) goto memset::@4
|
|
to:memset::@1
|
|
memset::@4: scope:[memset] from memset::@3
|
|
memset::str#5 = phi( memset::@3/memset::str#4 )
|
|
memset::end#2 = phi( memset::@3/memset::end#1 )
|
|
memset::dst#3 = phi( memset::@3/memset::dst#2 )
|
|
memset::c#1 = phi( memset::@3/memset::c#2 )
|
|
*memset::dst#3 = memset::c#1
|
|
memset::dst#1 = ++ memset::dst#3
|
|
to:memset::@3
|
|
memset::@return: scope:[memset] from memset::@1
|
|
memset::return#3 = phi( memset::@1/memset::return#0 )
|
|
memset::return#1 = memset::return#3
|
|
return
|
|
to:@return
|
|
|
|
void main()
|
|
main: scope:[main] from __start::@1
|
|
*((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47
|
|
*((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40
|
|
asm { lda#0 }
|
|
callexecute *songInit
|
|
to:main::@1
|
|
main::@1: scope:[main] from main
|
|
memset::str#0 = (void *)SCREEN
|
|
memset::c#0 = ' '
|
|
memset::num#0 = $28*$19
|
|
call memset
|
|
memset::return#2 = memset::return#1
|
|
to:main::@11
|
|
main::@11: scope:[main] from main::@1
|
|
main::i1#0 = 0
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@11 main::@3
|
|
main::i1#2 = phi( main::@11/main::i1#0, main::@3/main::i1#1 )
|
|
main::$2 = sizeof MEGA_LOGO
|
|
main::$3 = main::i1#2 < main::$2
|
|
if(main::$3) goto main::@3
|
|
to:main::@4
|
|
main::@3: scope:[main] from main::@2
|
|
main::i1#3 = phi( main::@2/main::i1#2 )
|
|
(SCREEN+LOGO_ROW*$28)[main::i1#3] = MEGA_LOGO[main::i1#3]
|
|
main::i1#1 = ++ main::i1#3
|
|
to:main::@2
|
|
main::@4: scope:[main] from main::@2
|
|
main::i2#0 = 0
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::@4 main::@6
|
|
main::i2#2 = phi( main::@4/main::i2#0, main::@6/main::i2#1 )
|
|
main::$4 = main::i2#2 < $28
|
|
if(main::$4) goto main::@6
|
|
to:main::@7
|
|
main::@6: scope:[main] from main::@5
|
|
main::i2#3 = phi( main::@5/main::i2#2 )
|
|
(SCREEN+GREET_ROW*$28)[main::i2#3] = '*'
|
|
main::i2#1 = ++ main::i2#3
|
|
to:main::@5
|
|
main::@7: scope:[main] from main::@5
|
|
main::i#0 = 0
|
|
to:main::@8
|
|
main::@8: scope:[main] from main::@7 main::@8
|
|
main::i#2 = phi( main::@7/main::i#0, main::@8/main::i#1 )
|
|
PALETTE_RED[main::i#2] = PAL_RED[main::i#2]
|
|
PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2]
|
|
PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2]
|
|
main::i#1 = ++ main::i#2
|
|
main::$5 = main::i#1 != 0
|
|
if(main::$5) goto main::@8
|
|
to:main::@9
|
|
main::@9: scope:[main] from main::@8
|
|
asm { sei }
|
|
*((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL
|
|
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y
|
|
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f
|
|
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER
|
|
*HARDWARE_IRQ = &irq
|
|
*PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
|
|
*PROCPORT = PROCPORT_RAM_IO
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1
|
|
asm { cli }
|
|
to:main::@10
|
|
main::@10: scope:[main] from main::@10 main::@9
|
|
to:main::@10
|
|
main::@return: scope:[main] from
|
|
return
|
|
to:@return
|
|
|
|
__interrupt(hardware_clobber) void irq()
|
|
irq: scope:[irq] from
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80
|
|
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER
|
|
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0
|
|
sin_idx = ++ sin_idx
|
|
irq::wobble_idx#0 = sin_idx
|
|
irq::line#0 = 0
|
|
to:irq::@2
|
|
irq::@2: scope:[irq] from irq irq::@10
|
|
irq::wobble_idx#4 = phi( irq/irq::wobble_idx#0, irq::@10/irq::wobble_idx#5 )
|
|
irq::line#2 = phi( irq/irq::line#0, irq::@10/irq::line#1 )
|
|
irq::$4 = irq::line#2 != RASTER_LINES
|
|
if(irq::$4) goto irq::@3
|
|
to:irq::@4
|
|
irq::@3: scope:[irq] from irq::@2
|
|
irq::wobble_idx#3 = phi( irq::@2/irq::wobble_idx#4 )
|
|
irq::line#3 = phi( irq::@2/irq::line#2 )
|
|
irq::col#0 = rasters[irq::line#3]
|
|
*((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) = irq::col#0
|
|
*((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) = irq::col#0
|
|
irq::$5 = irq::line#3 < SCROLL_Y
|
|
if(irq::$5) goto irq::@5
|
|
to:irq::@11
|
|
irq::@4: scope:[irq] from irq::@2
|
|
callexecute *songPlay
|
|
to:irq::@1
|
|
irq::@5: scope:[irq] from irq::@3
|
|
irq::line#13 = phi( irq::@3/irq::line#3 )
|
|
irq::wobble_idx#2 = phi( irq::@3/irq::wobble_idx#3 )
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#2]
|
|
irq::wobble_idx#1 = ++ irq::wobble_idx#2
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66
|
|
to:irq::@8
|
|
irq::@11: scope:[irq] from irq::@3
|
|
irq::wobble_idx#14 = phi( irq::@3/irq::wobble_idx#3 )
|
|
irq::line#4 = phi( irq::@3/irq::line#3 )
|
|
irq::$6 = irq::line#4 == SCROLL_Y
|
|
if(irq::$6) goto irq::@6
|
|
to:irq::@12
|
|
irq::@6: scope:[irq] from irq::@11
|
|
irq::wobble_idx#12 = phi( irq::@11/irq::wobble_idx#14 )
|
|
irq::line#14 = phi( irq::@11/irq::line#4 )
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
|
|
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft
|
|
to:irq::@8
|
|
irq::@12: scope:[irq] from irq::@11
|
|
irq::wobble_idx#15 = phi( irq::@11/irq::wobble_idx#14 )
|
|
irq::line#5 = phi( irq::@11/irq::line#4 )
|
|
irq::$7 = irq::line#5 == SCROLL_Y+SCROLL_BLACKBARS
|
|
if(irq::$7) goto irq::@7
|
|
to:irq::@13
|
|
irq::@7: scope:[irq] from irq::@12
|
|
irq::wobble_idx#13 = phi( irq::@12/irq::wobble_idx#15 )
|
|
irq::line#15 = phi( irq::@12/irq::line#5 )
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
|
|
to:irq::@8
|
|
irq::@13: scope:[irq] from irq::@12
|
|
irq::wobble_idx#8 = phi( irq::@12/irq::wobble_idx#15 )
|
|
irq::line#6 = phi( irq::@12/irq::line#5 )
|
|
irq::$8 = irq::line#6 == SCROLL_Y+SCROLL_BLACKBARS+1
|
|
irq::$9 = ! irq::$8
|
|
if(irq::$9) goto irq::@8
|
|
to:irq::@14
|
|
irq::@14: scope:[irq] from irq::@13
|
|
irq::wobble_idx#9 = phi( irq::@13/irq::wobble_idx#8 )
|
|
irq::line#10 = phi( irq::@13/irq::line#6 )
|
|
irq::zoomval#0 = SINE[greet_zoomx]
|
|
greet_zoomx = ++ greet_zoomx
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = irq::zoomval#0
|
|
irq::$10 = irq::zoomval#0 + 1
|
|
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = irq::$10
|
|
irq::$11 = greet_zoomx == 0
|
|
irq::$12 = ! irq::$11
|
|
if(irq::$12) goto irq::@8
|
|
to:irq::@15
|
|
irq::@15: scope:[irq] from irq::@14
|
|
irq::wobble_idx#10 = phi( irq::@14/irq::wobble_idx#9 )
|
|
irq::line#11 = phi( irq::@14/irq::line#10 )
|
|
greet_idx = ++ greet_idx
|
|
irq::$13 = greet_idx == GREET_COUNT
|
|
irq::$14 = ! irq::$13
|
|
if(irq::$14) goto irq::@8
|
|
to:irq::@16
|
|
irq::@16: scope:[irq] from irq::@15
|
|
irq::wobble_idx#11 = phi( irq::@15/irq::wobble_idx#10 )
|
|
irq::line#12 = phi( irq::@15/irq::line#11 )
|
|
greet_idx = 0
|
|
to:irq::@8
|
|
irq::@8: scope:[irq] from irq::@13 irq::@14 irq::@15 irq::@16 irq::@5 irq::@6 irq::@7
|
|
irq::wobble_idx#7 = phi( irq::@13/irq::wobble_idx#8, irq::@14/irq::wobble_idx#9, irq::@15/irq::wobble_idx#10, irq::@16/irq::wobble_idx#11, irq::@5/irq::wobble_idx#1, irq::@6/irq::wobble_idx#12, irq::@7/irq::wobble_idx#13 )
|
|
irq::line#9 = phi( irq::@13/irq::line#6, irq::@14/irq::line#10, irq::@15/irq::line#11, irq::@16/irq::line#12, irq::@5/irq::line#13, irq::@6/irq::line#14, irq::@7/irq::line#15 )
|
|
irq::raster#0 = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)
|
|
to:irq::@9
|
|
irq::@9: scope:[irq] from irq::@8 irq::@9
|
|
irq::wobble_idx#6 = phi( irq::@8/irq::wobble_idx#7, irq::@9/irq::wobble_idx#6 )
|
|
irq::line#8 = phi( irq::@8/irq::line#9, irq::@9/irq::line#8 )
|
|
irq::raster#1 = phi( irq::@8/irq::raster#0, irq::@9/irq::raster#1 )
|
|
irq::$15 = irq::raster#1 == *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)
|
|
if(irq::$15) goto irq::@9
|
|
to:irq::@10
|
|
irq::@10: scope:[irq] from irq::@9
|
|
irq::wobble_idx#5 = phi( irq::@9/irq::wobble_idx#6 )
|
|
irq::line#7 = phi( irq::@9/irq::line#8 )
|
|
irq::line#1 = ++ irq::line#7
|
|
to:irq::@2
|
|
irq::@1: scope:[irq] from irq::@4
|
|
irq::sin_col#0 = sin_idx
|
|
irq::i#0 = 0
|
|
to:irq::@17
|
|
irq::@17: scope:[irq] from irq::@1 irq::@18
|
|
irq::sin_col#3 = phi( irq::@1/irq::sin_col#0, irq::@18/irq::sin_col#1 )
|
|
irq::i#2 = phi( irq::@1/irq::i#0, irq::@18/irq::i#1 )
|
|
irq::$16 = irq::i#2 < $28
|
|
if(irq::$16) goto irq::@18
|
|
to:irq::@19
|
|
irq::@18: scope:[irq] from irq::@17
|
|
irq::i#3 = phi( irq::@17/irq::i#2 )
|
|
irq::sin_col#2 = phi( irq::@17/irq::sin_col#3 )
|
|
irq::col1#0 = SINE[irq::sin_col#2] / 4
|
|
(COLORRAM+GREET_ROW*$28)[irq::i#3] = irq::col1#0
|
|
irq::col1#1 = irq::col1#0 / 2
|
|
(COLORRAM+LOGO_ROW*$28+0*$28-1)[irq::i#3] = irq::col1#1
|
|
(COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#3] = irq::col1#1
|
|
(COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#3] = irq::col1#1
|
|
(COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#3] = irq::col1#1
|
|
(COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#3] = irq::col1#1
|
|
(COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#3] = irq::col1#1
|
|
(COLORRAM+SCROLL_ROW*$28)[irq::i#3] = PAL_GREEN[irq::sin_col#2]
|
|
irq::sin_col#1 = ++ irq::sin_col#2
|
|
irq::i#1 = ++ irq::i#3
|
|
to:irq::@17
|
|
irq::@19: scope:[irq] from irq::@17
|
|
irq::l#0 = 0
|
|
to:irq::@20
|
|
irq::@20: scope:[irq] from irq::@19 irq::@21
|
|
irq::l#2 = phi( irq::@19/irq::l#0, irq::@21/irq::l#1 )
|
|
irq::$18 = irq::l#2 != RASTER_LINES
|
|
if(irq::$18) goto irq::@21
|
|
to:irq::@22
|
|
irq::@21: scope:[irq] from irq::@20
|
|
irq::l#3 = phi( irq::@20/irq::l#2 )
|
|
rasters[irq::l#3] = 0
|
|
irq::l#1 = ++ irq::l#3
|
|
to:irq::@20
|
|
irq::@22: scope:[irq] from irq::@20
|
|
irq::sin_bar#0 = sin_idx
|
|
irq::barcnt#0 = 0
|
|
to:irq::@23
|
|
irq::@23: scope:[irq] from irq::@22 irq::@31
|
|
irq::sin_bar#4 = phi( irq::@22/irq::sin_bar#0, irq::@31/irq::sin_bar#1 )
|
|
irq::barcnt#2 = phi( irq::@22/irq::barcnt#0, irq::@31/irq::barcnt#1 )
|
|
irq::$19 = irq::barcnt#2 < $10
|
|
if(irq::$19) goto irq::@24
|
|
to:irq::@25
|
|
irq::@24: scope:[irq] from irq::@23
|
|
irq::barcnt#3 = phi( irq::@23/irq::barcnt#2 )
|
|
irq::sin_bar#2 = phi( irq::@23/irq::sin_bar#4 )
|
|
irq::idx#0 = SINE[irq::sin_bar#2]
|
|
irq::barcol#0 = irq::barcnt#3 * $10
|
|
irq::i1#0 = 0
|
|
to:irq::@26
|
|
irq::@25: scope:[irq] from irq::@23
|
|
irq::i3#0 = 0
|
|
to:irq::@32
|
|
irq::@26: scope:[irq] from irq::@24 irq::@27
|
|
irq::barcnt#8 = phi( irq::@24/irq::barcnt#3, irq::@27/irq::barcnt#9 )
|
|
irq::sin_bar#8 = phi( irq::@24/irq::sin_bar#2, irq::@27/irq::sin_bar#9 )
|
|
irq::idx#5 = phi( irq::@24/irq::idx#0, irq::@27/irq::idx#1 )
|
|
irq::barcol#5 = phi( irq::@24/irq::barcol#0, irq::@27/irq::barcol#1 )
|
|
irq::i1#2 = phi( irq::@24/irq::i1#0, irq::@27/irq::i1#1 )
|
|
irq::$21 = irq::i1#2 < $10
|
|
if(irq::$21) goto irq::@27
|
|
to:irq::@28
|
|
irq::@27: scope:[irq] from irq::@26
|
|
irq::barcnt#9 = phi( irq::@26/irq::barcnt#8 )
|
|
irq::sin_bar#9 = phi( irq::@26/irq::sin_bar#8 )
|
|
irq::i1#3 = phi( irq::@26/irq::i1#2 )
|
|
irq::idx#3 = phi( irq::@26/irq::idx#5 )
|
|
irq::barcol#3 = phi( irq::@26/irq::barcol#5 )
|
|
rasters[irq::idx#3] = irq::barcol#3
|
|
irq::idx#1 = ++ irq::idx#3
|
|
irq::barcol#1 = ++ irq::barcol#3
|
|
irq::i1#1 = ++ irq::i1#3
|
|
to:irq::@26
|
|
irq::@28: scope:[irq] from irq::@26
|
|
irq::barcnt#6 = phi( irq::@26/irq::barcnt#8 )
|
|
irq::sin_bar#6 = phi( irq::@26/irq::sin_bar#8 )
|
|
irq::idx#7 = phi( irq::@26/irq::idx#5 )
|
|
irq::barcol#7 = phi( irq::@26/irq::barcol#5 )
|
|
irq::i2#0 = 0
|
|
to:irq::@29
|
|
irq::@29: scope:[irq] from irq::@28 irq::@30
|
|
irq::barcnt#5 = phi( irq::@28/irq::barcnt#6, irq::@30/irq::barcnt#7 )
|
|
irq::sin_bar#5 = phi( irq::@28/irq::sin_bar#6, irq::@30/irq::sin_bar#7 )
|
|
irq::idx#6 = phi( irq::@28/irq::idx#7, irq::@30/irq::idx#2 )
|
|
irq::barcol#6 = phi( irq::@28/irq::barcol#7, irq::@30/irq::barcol#2 )
|
|
irq::i2#2 = phi( irq::@28/irq::i2#0, irq::@30/irq::i2#1 )
|
|
irq::$22 = irq::i2#2 < $f
|
|
if(irq::$22) goto irq::@30
|
|
to:irq::@31
|
|
irq::@30: scope:[irq] from irq::@29
|
|
irq::barcnt#7 = phi( irq::@29/irq::barcnt#5 )
|
|
irq::sin_bar#7 = phi( irq::@29/irq::sin_bar#5 )
|
|
irq::i2#3 = phi( irq::@29/irq::i2#2 )
|
|
irq::idx#4 = phi( irq::@29/irq::idx#6 )
|
|
irq::barcol#4 = phi( irq::@29/irq::barcol#6 )
|
|
irq::barcol#2 = -- irq::barcol#4
|
|
rasters[irq::idx#4] = irq::barcol#2
|
|
irq::idx#2 = ++ irq::idx#4
|
|
irq::i2#1 = ++ irq::i2#3
|
|
to:irq::@29
|
|
irq::@31: scope:[irq] from irq::@29
|
|
irq::barcnt#4 = phi( irq::@29/irq::barcnt#5 )
|
|
irq::sin_bar#3 = phi( irq::@29/irq::sin_bar#5 )
|
|
irq::sin_bar#1 = irq::sin_bar#3 + $a
|
|
irq::barcnt#1 = ++ irq::barcnt#4
|
|
to:irq::@23
|
|
irq::@32: scope:[irq] from irq::@25 irq::@33
|
|
irq::i3#2 = phi( irq::@25/irq::i3#0, irq::@33/irq::i3#1 )
|
|
irq::$23 = irq::i3#2 < $13
|
|
if(irq::$23) goto irq::@33
|
|
to:irq::@34
|
|
irq::@33: scope:[irq] from irq::@32
|
|
irq::i3#3 = phi( irq::@32/irq::i3#2 )
|
|
irq::$24 = SCROLL_Y + irq::i3#3
|
|
irq::$25 = SCROLL_Y + irq::i3#3
|
|
irq::$26 = rasters[irq::$25] / 2
|
|
irq::$27 = irq::$26 & 7
|
|
rasters[irq::$24] = irq::$27
|
|
irq::i3#1 = ++ irq::i3#3
|
|
to:irq::@32
|
|
irq::@34: scope:[irq] from irq::@32
|
|
irq::greet_offset#0 = greet_idx * $10
|
|
irq::i4#0 = 0
|
|
to:irq::@35
|
|
irq::@35: scope:[irq] from irq::@34 irq::@36
|
|
irq::greet_offset#3 = phi( irq::@34/irq::greet_offset#0, irq::@36/irq::greet_offset#1 )
|
|
irq::i4#2 = phi( irq::@34/irq::i4#0, irq::@36/irq::i4#1 )
|
|
irq::$28 = irq::i4#2 < $10
|
|
if(irq::$28) goto irq::@36
|
|
to:irq::@37
|
|
irq::@36: scope:[irq] from irq::@35
|
|
irq::i4#3 = phi( irq::@35/irq::i4#2 )
|
|
irq::greet_offset#2 = phi( irq::@35/irq::greet_offset#3 )
|
|
irq::$29 = GREETING[irq::greet_offset#2] & $bf
|
|
(SCREEN+GREET_ROW*$28+$d)[irq::i4#3] = irq::$29
|
|
irq::greet_offset#1 = ++ irq::greet_offset#2
|
|
irq::i4#1 = ++ irq::i4#3
|
|
to:irq::@35
|
|
irq::@37: scope:[irq] from irq::@35
|
|
scroll_soft = -- scroll_soft
|
|
irq::$2 = scroll_soft == $ff
|
|
irq::$3 = ! irq::$2
|
|
if(irq::$3) goto irq::@return
|
|
to:irq::@38
|
|
irq::@38: scope:[irq] from irq::@37
|
|
scroll_soft = 7
|
|
irq::i5#0 = 0
|
|
to:irq::@39
|
|
irq::@39: scope:[irq] from irq::@38 irq::@40
|
|
irq::i5#2 = phi( irq::@38/irq::i5#0, irq::@40/irq::i5#1 )
|
|
irq::$30 = irq::i5#2 < $27
|
|
if(irq::$30) goto irq::@40
|
|
to:irq::@41
|
|
irq::@40: scope:[irq] from irq::@39
|
|
irq::i5#3 = phi( irq::@39/irq::i5#2 )
|
|
(SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+SCROLL_ROW*$28+1)[irq::i5#3]
|
|
irq::i5#1 = ++ irq::i5#3
|
|
to:irq::@39
|
|
irq::@41: scope:[irq] from irq::@39
|
|
irq::nxt#0 = *scroll_ptr
|
|
scroll_ptr = ++ scroll_ptr
|
|
irq::$31 = irq::nxt#0 == 0
|
|
irq::$32 = ! irq::$31
|
|
if(irq::$32) goto irq::@43
|
|
to:irq::@42
|
|
irq::@43: scope:[irq] from irq::@41 irq::@42
|
|
irq::nxt#2 = phi( irq::@41/irq::nxt#0, irq::@42/irq::nxt#1 )
|
|
irq::$33 = irq::nxt#2 & $bf
|
|
*(SCREEN+SCROLL_ROW*$28+$27) = irq::$33
|
|
to:irq::@return
|
|
irq::@42: scope:[irq] from irq::@41
|
|
scroll_ptr = SCROLL_TEXT
|
|
irq::nxt#1 = *scroll_ptr
|
|
to:irq::@43
|
|
irq::@return: scope:[irq] from irq::@37 irq::@43
|
|
return
|
|
to:@return
|
|
|
|
void __start()
|
|
__start: scope:[__start] from
|
|
to:__start::__init1
|
|
__start::__init1: scope:[__start] from __start
|
|
sin_idx = 0
|
|
scroll_soft = 7
|
|
scroll_ptr = SCROLL_TEXT
|
|
greet_zoomx = 0
|
|
greet_idx = 0
|
|
to:__start::@1
|
|
__start::@1: scope:[__start] from __start::__init1
|
|
call main
|
|
to:__start::@2
|
|
__start::@2: scope:[__start] from __start::@1
|
|
to:__start::@return
|
|
__start::@return: scope:[__start] from __start::@2
|
|
return
|
|
to:@return
|
|
|
|
SYMBOL TABLE SSA
|
|
__constant struct MOS6526_CIA * const CIA1 = (struct MOS6526_CIA *)$dc00
|
|
__constant const char CIA_INTERRUPT_CLEAR_ALL = $7f
|
|
__constant char * const COLORRAM = (char *)$d800
|
|
__constant char * const DEFAULT_SCREEN = (char *)$400
|
|
__constant char GREETING[] = " DOUBLEFLASH ADTBM SY2002 TAYGER SERIOUSLY LIBI IN PARADIZE LGB BLUEWAYSW SAUSAGE BIT SHIFTER INDIOCOLIFA GRUMPYNINJA 0-LIMITS CHEVERON DR. COMMODORE "
|
|
__constant const char GREET_COUNT = $f
|
|
__constant const char GREET_ROW = $14
|
|
__constant void (** const HARDWARE_IRQ)() = (void (**)())$fffe
|
|
__constant const char IRQ_RASTER = 1
|
|
__constant const char IRQ_Y = $16
|
|
__constant const char LOGO_ROW = 3
|
|
__constant char MEGA_LOGO[] = { $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf }
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_RASLINE0 = $6f
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO = $5c
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c
|
|
__constant char OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21
|
|
__constant char OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20
|
|
__constant char OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f
|
|
__constant char OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = $11
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
|
|
__constant char * const PALETTE_BLUE = (char *)$d300
|
|
__constant char * const PALETTE_GREEN = (char *)$d200
|
|
__constant char * const PALETTE_RED = (char *)$d100
|
|
__constant char PAL_BLUE[] = { 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, 0, 0, 0, 0, $c0, $b1, $a2, $a3, $34, $35, $26, $27, $f7, $f8, $f9, $ea, 0, 0, $30, $11, $22, $13, $14, 5, $b5, $96, $97, $98, $79, $6a, $5b, $4c, $81, $42, $43, $34, 5, 6, $f6, $f7, $78, $69, $5a, $5b, $4c, $3d, $1e, $f, $17, $c7, $a8, $89, $5a, $5b, $3c, $1d, $ad, $9e, $7f, $ff, $ff, $ff, $ff, $ff, $78, 9, $e9, $ca, $ab, $7c, $5d, $5e, $de, $cf, $ff, $ff, $ff, $ff, $ff, $ff, $59, $a, $ca, $bb, $8c, $6d, $3e, $2f, $bf, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $49, $f9, $da, $ab, $7c, $5d, $2e, $2f, $af, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $48, $d8, $b9, $aa, $7b, $5c, $2d, $2e, $be, $9f, $ff, $ff, $ff, $ff, $ff, $ff, 7, $97, $88, $69, $4a, $2b, $1c, $2d, $9d, $7e, $6f, $ff, $ff, $ff, $ff, $ff, $81, $62, $53, $44, 5, 6, $f6, $e7, $78, $69, $5a, $5b, $3c, $2d, $2e, $1f, 0, 0, 0, 0, $b0, $b1, $a2, $b3, $44, $35, $36, $37, 8, $f8, $a, $b, 0, 0, 0, 0, 0, $70, $61, $62, $f2, $e3, $d4, $c5, $b6, $b7, $b8, $99, 0, 0, 0, 0, 0, 0, $f0, $f1, $82, $83, $84, $85, $66, $57, $58, $59, 0, 0, 0, 0, 0, $70, $61, $62, $e2, $e3, $d4, $d5, $b6, $a7, $b8, $a9, 0, 0, 0, 0, $a0, $b1, $a2, $a3, $44, $35, $26, $37, $f7, $19, $f9, $fa }
|
|
__constant char PAL_GREEN[] = { 0, $e3, $c4, $b5, $96, $87, $78, $79, $a, $fa, $eb, $dc, $bd, $ae, $af, $ff, $e2, $b3, $a4, $85, $76, $67, $48, $49, $d9, $da, $bb, $bc, $8d, $8e, $7f, $ff, $42, 3, 4, $e4, $d5, $c6, $b7, $a8, $39, $3a, $1b, $2c, $fc, $fd, $de, $df, $61, $32, $13, 4, $e4, $e5, $d6, $d7, $78, $59, $4a, $4b, $2c, $1d, $e, $fe, $e0, $b1, $a2, $93, $74, $75, $56, $57, $e7, $d8, $79, $ca, $ab, $9c, $9d, $8e, $f0, $d1, $c2, $a3, $84, $85, $76, $77, 8, 9, $f9, $fa, $db, $cc, $bd, $ae, $61, $22, $23, $14, $f4, $e5, $d6, $c7, $58, $59, $3a, $3b, $1c, $d, $fd, $fe, $92, $53, $44, $35, $16, $f6, $e7, $e8, $79, $6a, $5b, $4c, $2d, $3e, $1f, $ef, $53, $14, 5, $e5, $c6, $b7, $a8, $99, $2a, $2b, $c, $d, $dd, $ce, $cf, $ff, $f3, $b4, $95, $86, $57, $38, $29, $1a, $ba, $ab, $9c, $8d, $6e, $5f, $ff, $ff, $95, $56, $27, $18, $e8, $d9, $ca, $bb, $4c, $3d, $2e, $1f, $ef, $ff, $ff, $ff, $c5, $86, $57, $38, $19, $a, $ea, $db, $6c, $5d, $3e, $3f, $ef, $ff, $ff, $ff, $65, $26, 7, $e7, $c8, $b9, $9a, $9b, $2c, $1d, $fd, $fe, $cf, $ff, $ff, $ff, $b4, $75, $56, $37, $28, $19, $e9, $ea, $7b, $6c, $5d, $4e, $2f, $ff, $ff, $ff, $c3, $94, $75, $56, $47, $38, $19, $1a, $aa, $ab, $7c, $7d, $5e, $4f, $ff, $ff, $e2, $a3, $94, $85, $76, $67, $38, $49, $d9, $ca, $ab, $bc, $7d, $7e, $6f, $ff }
|
|
__constant char PAL_RED[] = { 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff }
|
|
__constant char * const PROCPORT = (char *)1
|
|
__constant char * const PROCPORT_DDR = (char *)0
|
|
__constant const char PROCPORT_DDR_MEMORY_MASK = 7
|
|
__constant const char PROCPORT_RAM_IO = 5
|
|
__constant const char RASTER_LINES = $d8
|
|
__constant char * const SCREEN = DEFAULT_SCREEN
|
|
__constant const char SCROLL_BLACKBARS = $13
|
|
__constant const char SCROLL_ROW = $d
|
|
__constant char SCROLL_TEXT[] = " THIS SMALL MEGA65 RASTER INTRO ... WAS MADE BY DEFT IN 2015 ... AND BROUGHT BACK TO LIFE 5 YEARS LATER IN 2020 ... BECAUSE THE MEGA65 HARDWARE CHANGED SO MUCH IN THE PAST 5 YEARS ... UNFORTUNATELY MY ASSEMBLER SKILLS DID NOT SO THIS IS THE FIRST APPROACH TO GET BETTER ... HOPEFULLY DR.MUTTI WILL HAVE TO SCOLD ME LESS ... THE PAST 5 YEARS HAVE BEEN AN UNFORGETTABLE & UNIQUE RIDE ... IF YOU DO WATCH THIS DEMO ON YOUR VERY OWN MEGA65 THERE IS ENOUGH EVIDENCE OF WHAT WE ACTUALLY ACHIEVED ... BELOW ARE THE GREETINGS TO DEAR AND VERY SPECIAL PEOPLE WHO HELPED TO GET THERE ... THANK YOU SO MUCH FOR YOUR SUPPORT AND FOR NOT GIVING UP ... DUAL SID TUNE BY RAYDEN OF ALPHA FLIGHT ... THIS SCROLLY WILL NOW RESTART *WRAP* "
|
|
__constant const char SCROLL_Y = $66
|
|
__constant char SINE[$100] = kickasm {{ .fill 256, 91.5 + 91.5*sin(i*2*PI/256)
|
|
}}
|
|
__constant char SONG[] = kickasm {{ .import c64 "DiscoZak_2SID_patched.prg"
|
|
}}
|
|
__constant struct MOS6569_VICII * const VICII = (struct MOS6569_VICII *)$d000
|
|
__constant struct MOS4569_VICIII * const VICIII = (struct MOS4569_VICIII *)$d000
|
|
__constant struct MEGA65_VICIV * const VICIV = (struct MEGA65_VICIV *)$d000
|
|
void __start()
|
|
__loadstore volatile char greet_idx
|
|
__loadstore volatile char greet_zoomx
|
|
__interrupt(hardware_clobber) void irq()
|
|
number irq::$10
|
|
bool irq::$11
|
|
bool irq::$12
|
|
bool irq::$13
|
|
bool irq::$14
|
|
bool irq::$15
|
|
bool irq::$16
|
|
bool irq::$18
|
|
bool irq::$19
|
|
bool irq::$2
|
|
bool irq::$21
|
|
bool irq::$22
|
|
bool irq::$23
|
|
char irq::$24
|
|
char irq::$25
|
|
number irq::$26
|
|
number irq::$27
|
|
bool irq::$28
|
|
number irq::$29
|
|
bool irq::$3
|
|
bool irq::$30
|
|
bool irq::$31
|
|
bool irq::$32
|
|
number irq::$33
|
|
bool irq::$4
|
|
bool irq::$5
|
|
bool irq::$6
|
|
bool irq::$7
|
|
bool irq::$8
|
|
bool irq::$9
|
|
char irq::barcnt
|
|
char irq::barcnt#0
|
|
char irq::barcnt#1
|
|
char irq::barcnt#2
|
|
char irq::barcnt#3
|
|
char irq::barcnt#4
|
|
char irq::barcnt#5
|
|
char irq::barcnt#6
|
|
char irq::barcnt#7
|
|
char irq::barcnt#8
|
|
char irq::barcnt#9
|
|
char irq::barcol
|
|
char irq::barcol#0
|
|
char irq::barcol#1
|
|
char irq::barcol#2
|
|
char irq::barcol#3
|
|
char irq::barcol#4
|
|
char irq::barcol#5
|
|
char irq::barcol#6
|
|
char irq::barcol#7
|
|
char irq::col
|
|
char irq::col#0
|
|
char irq::col1
|
|
char irq::col1#0
|
|
char irq::col1#1
|
|
char irq::greet_offset
|
|
char irq::greet_offset#0
|
|
char irq::greet_offset#1
|
|
char irq::greet_offset#2
|
|
char irq::greet_offset#3
|
|
char irq::i
|
|
char irq::i#0
|
|
char irq::i#1
|
|
char irq::i#2
|
|
char irq::i#3
|
|
char irq::i1
|
|
char irq::i1#0
|
|
char irq::i1#1
|
|
char irq::i1#2
|
|
char irq::i1#3
|
|
char irq::i2
|
|
char irq::i2#0
|
|
char irq::i2#1
|
|
char irq::i2#2
|
|
char irq::i2#3
|
|
char irq::i3
|
|
char irq::i3#0
|
|
char irq::i3#1
|
|
char irq::i3#2
|
|
char irq::i3#3
|
|
char irq::i4
|
|
char irq::i4#0
|
|
char irq::i4#1
|
|
char irq::i4#2
|
|
char irq::i4#3
|
|
char irq::i5
|
|
char irq::i5#0
|
|
char irq::i5#1
|
|
char irq::i5#2
|
|
char irq::i5#3
|
|
char irq::idx
|
|
char irq::idx#0
|
|
char irq::idx#1
|
|
char irq::idx#2
|
|
char irq::idx#3
|
|
char irq::idx#4
|
|
char irq::idx#5
|
|
char irq::idx#6
|
|
char irq::idx#7
|
|
char irq::l
|
|
char irq::l#0
|
|
char irq::l#1
|
|
char irq::l#2
|
|
char irq::l#3
|
|
char irq::line
|
|
char irq::line#0
|
|
char irq::line#1
|
|
char irq::line#10
|
|
char irq::line#11
|
|
char irq::line#12
|
|
char irq::line#13
|
|
char irq::line#14
|
|
char irq::line#15
|
|
char irq::line#2
|
|
char irq::line#3
|
|
char irq::line#4
|
|
char irq::line#5
|
|
char irq::line#6
|
|
char irq::line#7
|
|
char irq::line#8
|
|
char irq::line#9
|
|
char irq::nxt
|
|
char irq::nxt#0
|
|
char irq::nxt#1
|
|
char irq::nxt#2
|
|
char irq::raster
|
|
char irq::raster#0
|
|
char irq::raster#1
|
|
char irq::sin_bar
|
|
char irq::sin_bar#0
|
|
char irq::sin_bar#1
|
|
char irq::sin_bar#2
|
|
char irq::sin_bar#3
|
|
char irq::sin_bar#4
|
|
char irq::sin_bar#5
|
|
char irq::sin_bar#6
|
|
char irq::sin_bar#7
|
|
char irq::sin_bar#8
|
|
char irq::sin_bar#9
|
|
char irq::sin_col
|
|
char irq::sin_col#0
|
|
char irq::sin_col#1
|
|
char irq::sin_col#2
|
|
char irq::sin_col#3
|
|
char irq::wobble_idx
|
|
char irq::wobble_idx#0
|
|
char irq::wobble_idx#1
|
|
char irq::wobble_idx#10
|
|
char irq::wobble_idx#11
|
|
char irq::wobble_idx#12
|
|
char irq::wobble_idx#13
|
|
char irq::wobble_idx#14
|
|
char irq::wobble_idx#15
|
|
char irq::wobble_idx#2
|
|
char irq::wobble_idx#3
|
|
char irq::wobble_idx#4
|
|
char irq::wobble_idx#5
|
|
char irq::wobble_idx#6
|
|
char irq::wobble_idx#7
|
|
char irq::wobble_idx#8
|
|
char irq::wobble_idx#9
|
|
char irq::zoomval
|
|
char irq::zoomval#0
|
|
void main()
|
|
unsigned int main::$2
|
|
bool main::$3
|
|
bool main::$4
|
|
bool main::$5
|
|
char main::i
|
|
char main::i#0
|
|
char main::i#1
|
|
char main::i#2
|
|
char main::i1
|
|
char main::i1#0
|
|
char main::i1#1
|
|
char main::i1#2
|
|
char main::i1#3
|
|
char main::i2
|
|
char main::i2#0
|
|
char main::i2#1
|
|
char main::i2#2
|
|
char main::i2#3
|
|
void * memset(void *str , char c , unsigned int num)
|
|
bool memset::$0
|
|
bool memset::$1
|
|
bool memset::$3
|
|
char *memset::$4
|
|
char memset::c
|
|
char memset::c#0
|
|
char memset::c#1
|
|
char memset::c#2
|
|
char memset::c#3
|
|
char memset::c#4
|
|
char *memset::dst
|
|
char *memset::dst#0
|
|
char *memset::dst#1
|
|
char *memset::dst#2
|
|
char *memset::dst#3
|
|
char *memset::end
|
|
char *memset::end#0
|
|
char *memset::end#1
|
|
char *memset::end#2
|
|
unsigned int memset::num
|
|
unsigned int memset::num#0
|
|
unsigned int memset::num#1
|
|
unsigned int memset::num#2
|
|
void *memset::return
|
|
void *memset::return#0
|
|
void *memset::return#1
|
|
void *memset::return#2
|
|
void *memset::return#3
|
|
void *memset::str
|
|
void *memset::str#0
|
|
void *memset::str#1
|
|
void *memset::str#2
|
|
void *memset::str#3
|
|
void *memset::str#4
|
|
void *memset::str#5
|
|
__constant char rasters[RASTER_LINES] = { fill( RASTER_LINES, 0) }
|
|
__loadstore char * volatile scroll_ptr
|
|
__loadstore volatile char scroll_soft
|
|
__loadstore volatile char sin_idx
|
|
__constant void (*songInit)() = (void (*)())SONG
|
|
__constant void (*songPlay)() = (void (*)())SONG+3
|
|
|
|
Adding number conversion cast (unumber) 3 in
|
|
Adding number conversion cast (unumber) 0 in memset::$0 = memset::num#1 > 0
|
|
Adding number conversion cast (unumber) $47 in *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47
|
|
Adding number conversion cast (unumber) $53 in *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53
|
|
Adding number conversion cast (unumber) $40 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40
|
|
Adding number conversion cast (unumber) $40 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40
|
|
Adding number conversion cast (unumber) $28*$19 in memset::num#0 = $28*$19
|
|
Adding number conversion cast (unumber) LOGO_ROW*$28 in (SCREEN+LOGO_ROW*$28)[main::i1#3] = MEGA_LOGO[main::i1#3]
|
|
Adding number conversion cast (unumber) $28 in (SCREEN+(unumber)LOGO_ROW*$28)[main::i1#3] = MEGA_LOGO[main::i1#3]
|
|
Adding number conversion cast (unumber) $28 in main::$4 = main::i2#2 < $28
|
|
Adding number conversion cast (unumber) GREET_ROW*$28 in (SCREEN+GREET_ROW*$28)[main::i2#3] = '*'
|
|
Adding number conversion cast (unumber) $28 in (SCREEN+(unumber)GREET_ROW*$28)[main::i2#3] = '*'
|
|
Adding number conversion cast (unumber) 0 in main::$5 = main::i#1 != 0
|
|
Adding number conversion cast (unumber) $7f in *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f
|
|
Adding number conversion cast (unumber) 1 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1
|
|
Adding number conversion cast (unumber) $80 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80
|
|
Adding number conversion cast (unumber) 0 in *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0
|
|
Adding number conversion cast (unumber) $66 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66
|
|
Adding number conversion cast (unumber) $50 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
|
|
Adding number conversion cast (unumber) $50 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
|
|
Adding number conversion cast (unumber) SCROLL_Y+SCROLL_BLACKBARS+1 in irq::$8 = irq::line#6 == SCROLL_Y+SCROLL_BLACKBARS+1
|
|
Adding number conversion cast (unumber) 1 in irq::$8 = irq::line#6 == (unumber)SCROLL_Y+SCROLL_BLACKBARS+1
|
|
Adding number conversion cast (unumber) 1 in irq::$10 = irq::zoomval#0 + 1
|
|
Adding number conversion cast (unumber) irq::$10 in irq::$10 = irq::zoomval#0 + (unumber)1
|
|
Adding number conversion cast (unumber) 0 in irq::$11 = greet_zoomx == 0
|
|
Adding number conversion cast (unumber) 0 in greet_idx = 0
|
|
Adding number conversion cast (unumber) $28 in irq::$16 = irq::i#2 < $28
|
|
Adding number conversion cast (unumber) 4 in irq::col1#0 = SINE[irq::sin_col#2] / 4
|
|
Adding number conversion cast (unumber) GREET_ROW*$28 in (COLORRAM+GREET_ROW*$28)[irq::i#3] = irq::col1#0
|
|
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)GREET_ROW*$28)[irq::i#3] = irq::col1#0
|
|
Adding number conversion cast (unumber) 2 in irq::col1#1 = irq::col1#0 / 2
|
|
Adding number conversion cast (unumber) 1 in (COLORRAM+LOGO_ROW*$28+0*$28-1)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 0*$28 in (COLORRAM+LOGO_ROW*$28+0*$28-(unumber)1)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)0*$28-(unumber)1)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)0*$28-(unumber)1)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 2 in (COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 1*$28 in (COLORRAM+LOGO_ROW*$28+1*$28-(unumber)2)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)1*$28-(unumber)2)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)1*$28-(unumber)2)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 3 in (COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 2*$28 in (COLORRAM+LOGO_ROW*$28+2*$28-(unumber)3)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)2*$28-(unumber)3)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)2*$28-(unumber)3)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 4 in (COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 3*$28 in (COLORRAM+LOGO_ROW*$28+3*$28-(unumber)4)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)3*$28-(unumber)4)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)3*$28-(unumber)4)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 5 in (COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 4*$28 in (COLORRAM+LOGO_ROW*$28+4*$28-(unumber)5)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)4*$28-(unumber)5)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)4*$28-(unumber)5)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 6 in (COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) 5*$28 in (COLORRAM+LOGO_ROW*$28+5*$28-(unumber)6)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)5*$28-(unumber)6)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)5*$28-(unumber)6)[irq::i#3] = irq::col1#1
|
|
Adding number conversion cast (unumber) SCROLL_ROW*$28 in (COLORRAM+SCROLL_ROW*$28)[irq::i#3] = PAL_GREEN[irq::sin_col#2]
|
|
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)SCROLL_ROW*$28)[irq::i#3] = PAL_GREEN[irq::sin_col#2]
|
|
Adding number conversion cast (unumber) 0 in rasters[irq::l#3] = 0
|
|
Adding number conversion cast (unumber) $10 in irq::$19 = irq::barcnt#2 < $10
|
|
Adding number conversion cast (unumber) $10 in irq::barcol#0 = irq::barcnt#3 * $10
|
|
Adding number conversion cast (unumber) $10 in irq::$21 = irq::i1#2 < $10
|
|
Adding number conversion cast (unumber) $f in irq::$22 = irq::i2#2 < $f
|
|
Adding number conversion cast (unumber) $a in irq::sin_bar#1 = irq::sin_bar#3 + $a
|
|
Adding number conversion cast (unumber) $13 in irq::$23 = irq::i3#2 < $13
|
|
Adding number conversion cast (unumber) 2 in irq::$26 = rasters[irq::$25] / 2
|
|
Adding number conversion cast (unumber) irq::$26 in irq::$26 = rasters[irq::$25] / (unumber)2
|
|
Adding number conversion cast (unumber) 7 in irq::$27 = irq::$26 & 7
|
|
Adding number conversion cast (unumber) irq::$27 in irq::$27 = irq::$26 & (unumber)7
|
|
Adding number conversion cast (unumber) $10 in irq::greet_offset#0 = greet_idx * $10
|
|
Adding number conversion cast (unumber) $10 in irq::$28 = irq::i4#2 < $10
|
|
Adding number conversion cast (unumber) $bf in irq::$29 = GREETING[irq::greet_offset#2] & $bf
|
|
Adding number conversion cast (unumber) irq::$29 in irq::$29 = GREETING[irq::greet_offset#2] & (unumber)$bf
|
|
Adding number conversion cast (unumber) $d in (SCREEN+GREET_ROW*$28+$d)[irq::i4#3] = irq::$29
|
|
Adding number conversion cast (unumber) GREET_ROW*$28 in (SCREEN+GREET_ROW*$28+(unumber)$d)[irq::i4#3] = irq::$29
|
|
Adding number conversion cast (unumber) $28 in (SCREEN+(unumber)GREET_ROW*$28+(unumber)$d)[irq::i4#3] = irq::$29
|
|
Adding number conversion cast (unumber) $ff in irq::$2 = scroll_soft == $ff
|
|
Adding number conversion cast (unumber) 7 in scroll_soft = 7
|
|
Adding number conversion cast (unumber) $27 in irq::$30 = irq::i5#2 < $27
|
|
Adding number conversion cast (unumber) 1 in (SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+SCROLL_ROW*$28+1)[irq::i5#3]
|
|
Adding number conversion cast (unumber) SCROLL_ROW*$28 in (SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+SCROLL_ROW*$28+(unumber)1)[irq::i5#3]
|
|
Adding number conversion cast (unumber) $28 in (SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+(unumber)SCROLL_ROW*$28+(unumber)1)[irq::i5#3]
|
|
Adding number conversion cast (unumber) SCROLL_ROW*$28 in (SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+(unumber)SCROLL_ROW*(unumber)$28+(unumber)1)[irq::i5#3]
|
|
Adding number conversion cast (unumber) $28 in (SCREEN+(unumber)SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+(unumber)SCROLL_ROW*(unumber)$28+(unumber)1)[irq::i5#3]
|
|
Adding number conversion cast (unumber) 0 in irq::$31 = irq::nxt#0 == 0
|
|
Adding number conversion cast (unumber) $bf in irq::$33 = irq::nxt#2 & $bf
|
|
Adding number conversion cast (unumber) irq::$33 in irq::$33 = irq::nxt#2 & (unumber)$bf
|
|
Adding number conversion cast (unumber) $27 in *(SCREEN+SCROLL_ROW*$28+$27) = irq::$33
|
|
Adding number conversion cast (unumber) SCROLL_ROW*$28 in *(SCREEN+SCROLL_ROW*$28+(unumber)$27) = irq::$33
|
|
Adding number conversion cast (unumber) $28 in *(SCREEN+(unumber)SCROLL_ROW*$28+(unumber)$27) = irq::$33
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Inlining cast memset::dst#0 = (char *)memset::str#2
|
|
Inlining cast *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = (unumber)$47
|
|
Inlining cast *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = (unumber)$53
|
|
Inlining cast memset::num#0 = (unumber)$28*$19
|
|
Inlining cast *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = (unumber)1
|
|
Inlining cast *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = (unumber)0
|
|
Inlining cast *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = (unumber)$66
|
|
Inlining cast *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = (unumber)$50
|
|
Inlining cast *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = (unumber)$50
|
|
Inlining cast greet_idx = (unumber)0
|
|
Inlining cast rasters[irq::l#3] = (unumber)0
|
|
Inlining cast scroll_soft = (unumber)7
|
|
Successful SSA optimization Pass2InlineCast
|
|
Simplifying constant pointer cast (char *) 0
|
|
Simplifying constant pointer cast (char *) 1
|
|
Simplifying constant pointer cast (struct MOS6569_VICII *) 53248
|
|
Simplifying constant pointer cast (struct MOS4569_VICIII *) 53248
|
|
Simplifying constant pointer cast (struct MEGA65_VICIV *) 53248
|
|
Simplifying constant pointer cast (char *) 53504
|
|
Simplifying constant pointer cast (char *) 53760
|
|
Simplifying constant pointer cast (char *) 54016
|
|
Simplifying constant pointer cast (char *) 55296
|
|
Simplifying constant pointer cast (char *) 1024
|
|
Simplifying constant pointer cast (struct MOS6526_CIA *) 56320
|
|
Simplifying constant pointer cast (void (**)()) 65534
|
|
Simplifying constant integer cast 3
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $47
|
|
Simplifying constant integer cast $53
|
|
Simplifying constant integer cast $40
|
|
Simplifying constant integer cast $40
|
|
Simplifying constant integer cast LOGO_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast GREET_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $7f
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $80
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $66
|
|
Simplifying constant integer cast $50
|
|
Simplifying constant integer cast $50
|
|
Simplifying constant integer cast SCROLL_Y+SCROLL_BLACKBARS+(unumber)1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast GREET_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast LOGO_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast LOGO_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast LOGO_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 3
|
|
Simplifying constant integer cast LOGO_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast LOGO_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 5
|
|
Simplifying constant integer cast LOGO_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 6
|
|
Simplifying constant integer cast SCROLL_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $10
|
|
Simplifying constant integer cast $10
|
|
Simplifying constant integer cast $10
|
|
Simplifying constant integer cast $f
|
|
Simplifying constant integer cast $a
|
|
Simplifying constant integer cast $13
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 7
|
|
Simplifying constant integer cast $10
|
|
Simplifying constant integer cast $10
|
|
Simplifying constant integer cast $bf
|
|
Simplifying constant integer cast GREET_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast $d
|
|
Simplifying constant integer cast $ff
|
|
Simplifying constant integer cast 7
|
|
Simplifying constant integer cast $27
|
|
Simplifying constant integer cast SCROLL_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast SCROLL_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $bf
|
|
Simplifying constant integer cast SCROLL_ROW*(unumber)$28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast $27
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (char) 3
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) $47
|
|
Finalized unsigned number type (char) $53
|
|
Finalized unsigned number type (char) $40
|
|
Finalized unsigned number type (char) $40
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) $7f
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (char) $80
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) $66
|
|
Finalized unsigned number type (char) $50
|
|
Finalized unsigned number type (char) $50
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 4
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 2
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 2
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 3
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 4
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 5
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 6
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) $10
|
|
Finalized unsigned number type (char) $10
|
|
Finalized unsigned number type (char) $10
|
|
Finalized unsigned number type (char) $f
|
|
Finalized unsigned number type (char) $a
|
|
Finalized unsigned number type (char) $13
|
|
Finalized unsigned number type (char) 2
|
|
Finalized unsigned number type (char) 7
|
|
Finalized unsigned number type (char) $10
|
|
Finalized unsigned number type (char) $10
|
|
Finalized unsigned number type (char) $bf
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) $d
|
|
Finalized unsigned number type (char) $ff
|
|
Finalized unsigned number type (char) 7
|
|
Finalized unsigned number type (char) $27
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) $bf
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) $27
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inferred type updated to char in irq::$10 = irq::zoomval#0 + 1
|
|
Inferred type updated to char in irq::$26 = rasters[irq::$25] / 2
|
|
Inferred type updated to char in irq::$27 = irq::$26 & 7
|
|
Inferred type updated to char in irq::$29 = GREETING[irq::greet_offset#2] & $bf
|
|
Inferred type updated to char in irq::$33 = irq::nxt#2 & $bf
|
|
Inversing boolean not [2] memset::$1 = memset::num#1 <= 0 from [1] memset::$0 = memset::num#1 > 0
|
|
Inversing boolean not [97] irq::$9 = irq::line#6 != SCROLL_Y+SCROLL_BLACKBARS+1 from [96] irq::$8 = irq::line#6 == SCROLL_Y+SCROLL_BLACKBARS+1
|
|
Inversing boolean not [106] irq::$12 = greet_zoomx != 0 from [105] irq::$11 = greet_zoomx == 0
|
|
Inversing boolean not [111] irq::$14 = greet_idx != GREET_COUNT from [110] irq::$13 = greet_idx == GREET_COUNT
|
|
Inversing boolean not [200] irq::$3 = scroll_soft != $ff from [199] irq::$2 = scroll_soft == $ff
|
|
Inversing boolean not [213] irq::$32 = irq::nxt#0 != 0 from [212] irq::$31 = irq::nxt#0 == 0
|
|
Successful SSA optimization Pass2UnaryNotSimplification
|
|
Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1
|
|
Alias memset::str#2 = memset::str#3
|
|
Alias memset::num#1 = memset::num#2
|
|
Alias memset::c#3 = memset::c#4
|
|
Alias memset::c#1 = memset::c#2
|
|
Alias memset::dst#2 = memset::dst#3
|
|
Alias memset::end#1 = memset::end#2
|
|
Alias memset::str#4 = memset::str#5
|
|
Alias main::i1#2 = main::i1#3
|
|
Alias main::i2#2 = main::i2#3
|
|
Alias irq::line#10 = irq::line#3 irq::line#2 irq::line#13 irq::line#4 irq::line#14 irq::line#5 irq::line#15 irq::line#6 irq::line#11 irq::line#12
|
|
Alias irq::wobble_idx#10 = irq::wobble_idx#3 irq::wobble_idx#4 irq::wobble_idx#2 irq::wobble_idx#14 irq::wobble_idx#12 irq::wobble_idx#15 irq::wobble_idx#13 irq::wobble_idx#8 irq::wobble_idx#9 irq::wobble_idx#11
|
|
Alias irq::line#7 = irq::line#8
|
|
Alias irq::wobble_idx#5 = irq::wobble_idx#6
|
|
Alias irq::sin_col#2 = irq::sin_col#3
|
|
Alias irq::i#2 = irq::i#3
|
|
Alias irq::l#2 = irq::l#3
|
|
Alias irq::sin_bar#2 = irq::sin_bar#4
|
|
Alias irq::barcnt#2 = irq::barcnt#3
|
|
Alias irq::barcol#3 = irq::barcol#5 irq::barcol#7
|
|
Alias irq::idx#3 = irq::idx#5 irq::idx#7
|
|
Alias irq::i1#2 = irq::i1#3
|
|
Alias irq::sin_bar#6 = irq::sin_bar#9 irq::sin_bar#8
|
|
Alias irq::barcnt#6 = irq::barcnt#9 irq::barcnt#8
|
|
Alias irq::barcol#4 = irq::barcol#6
|
|
Alias irq::idx#4 = irq::idx#6
|
|
Alias irq::i2#2 = irq::i2#3
|
|
Alias irq::sin_bar#3 = irq::sin_bar#7 irq::sin_bar#5
|
|
Alias irq::barcnt#4 = irq::barcnt#7 irq::barcnt#5
|
|
Alias irq::i3#2 = irq::i3#3
|
|
Alias irq::greet_offset#2 = irq::greet_offset#3
|
|
Alias irq::i4#2 = irq::i4#3
|
|
Alias irq::i5#2 = irq::i5#3
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias irq::line#10 = irq::line#9
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Identical Phi Values memset::num#1 memset::num#0
|
|
Identical Phi Values memset::str#2 memset::str#0
|
|
Identical Phi Values memset::c#3 memset::c#0
|
|
Identical Phi Values memset::end#1 memset::end#0
|
|
Identical Phi Values memset::str#4 memset::str#2
|
|
Identical Phi Values memset::c#1 memset::c#3
|
|
Identical Phi Values irq::raster#1 irq::raster#0
|
|
Identical Phi Values irq::line#7 irq::line#10
|
|
Identical Phi Values irq::wobble_idx#5 irq::wobble_idx#7
|
|
Identical Phi Values irq::sin_bar#6 irq::sin_bar#2
|
|
Identical Phi Values irq::barcnt#6 irq::barcnt#2
|
|
Identical Phi Values irq::sin_bar#3 irq::sin_bar#6
|
|
Identical Phi Values irq::barcnt#4 irq::barcnt#6
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Identical Phi Values memset::return#0 memset::str#0
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Simple Condition memset::$1 [2] if(memset::num#0<=0) goto memset::@1
|
|
Simple Condition memset::$3 [9] if(memset::dst#2!=memset::end#0) goto memset::@4
|
|
Simple Condition main::$3 [28] if(main::i1#2<main::$2) goto main::@3
|
|
Simple Condition main::$4 [34] if(main::i2#2<$28) goto main::@6
|
|
Simple Condition main::$5 [44] if(main::i#1!=0) goto main::@8
|
|
Simple Condition irq::$4 [64] if(irq::line#10!=RASTER_LINES) goto irq::@3
|
|
Simple Condition irq::$5 [69] if(irq::line#10<SCROLL_Y) goto irq::@5
|
|
Simple Condition irq::$6 [75] if(irq::line#10==SCROLL_Y) goto irq::@6
|
|
Simple Condition irq::$7 [79] if(irq::line#10==SCROLL_Y+SCROLL_BLACKBARS) goto irq::@7
|
|
Simple Condition irq::$9 [82] if(irq::line#10!=SCROLL_Y+SCROLL_BLACKBARS+1) goto irq::@8
|
|
Simple Condition irq::$12 [89] if(greet_zoomx!=0) goto irq::@8
|
|
Simple Condition irq::$14 [92] if(greet_idx!=GREET_COUNT) goto irq::@8
|
|
Simple Condition irq::$15 [98] if(irq::raster#0==*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq::@9
|
|
Simple Condition irq::$16 [104] if(irq::i#2<$28) goto irq::@18
|
|
Simple Condition irq::$18 [120] if(irq::l#2!=RASTER_LINES) goto irq::@21
|
|
Simple Condition irq::$19 [127] if(irq::barcnt#2<$10) goto irq::@24
|
|
Simple Condition irq::$21 [134] if(irq::i1#2<$10) goto irq::@27
|
|
Simple Condition irq::$22 [142] if(irq::i2#2<$f) goto irq::@30
|
|
Simple Condition irq::$23 [151] if(irq::i3#2<$13) goto irq::@33
|
|
Simple Condition irq::$28 [162] if(irq::i4#2<$10) goto irq::@36
|
|
Simple Condition irq::$3 [169] if(scroll_soft!=$ff) goto irq::@return
|
|
Simple Condition irq::$30 [174] if(irq::i5#2<$27) goto irq::@40
|
|
Simple Condition irq::$32 [180] if(irq::nxt#0!=0) goto irq::@43
|
|
Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
Constant right-side identified [21] memset::num#0 = (unumber)$28*$19
|
|
Constant right-side identified [26] main::$2 = sizeof MEGA_LOGO
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant memset::str#0 = (void *)SCREEN
|
|
Constant memset::c#0 = ' '
|
|
Constant memset::num#0 = (unumber)$28*$19
|
|
Constant main::i1#0 = 0
|
|
Constant main::$2 = sizeof MEGA_LOGO
|
|
Constant main::i2#0 = 0
|
|
Constant main::i#0 = 0
|
|
Constant irq::line#0 = 0
|
|
Constant irq::i#0 = 0
|
|
Constant irq::l#0 = 0
|
|
Constant irq::barcnt#0 = 0
|
|
Constant irq::i1#0 = 0
|
|
Constant irq::i3#0 = 0
|
|
Constant irq::i2#0 = 0
|
|
Constant irq::i4#0 = 0
|
|
Constant irq::i5#0 = 0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant memset::$4 = (char *)memset::str#0
|
|
Constant memset::dst#0 = (char *)memset::str#0
|
|
Constant memset::return#2 = memset::str#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
if() condition always false - eliminating [2] if(memset::num#0<=0) goto memset::@1
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Simplifying constant evaluating to zero (char)0*$28 in [108] (COLORRAM+LOGO_ROW*$28+(char)0*$28-1)[irq::i#2] = irq::col1#1
|
|
Successful SSA optimization PassNSimplifyConstantZero
|
|
Simplifying expression containing zero COLORRAM+LOGO_ROW*$28 in [108] (COLORRAM+LOGO_ROW*$28+0-1)[irq::i#2] = irq::col1#1
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Removing unused block main::@return
|
|
Successful SSA optimization Pass2EliminateUnusedBlocks
|
|
Eliminating unused constant memset::return#2
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Resolving array sizeof() sizeof MEGA_LOGO
|
|
Successful SSA optimization PassNSizeOfSimplification
|
|
Constant right-side identified [0] memset::end#0 = memset::$4 + memset::num#0
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant memset::end#0 = memset::$4+memset::num#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Adding number conversion cast (unumber) $bc in
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Simplifying constant integer cast $bc
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (char) $bc
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Rewriting division to use shift [73] irq::col1#0 = SINE[irq::sin_col#2] / 4
|
|
Rewriting division to use shift [75] irq::col1#1 = irq::col1#0 / 2
|
|
Rewriting multiplication to use shift [93] irq::barcol#0 = irq::barcnt#2 * $10
|
|
Rewriting division to use shift [112] irq::$26 = rasters[irq::$25] / 2
|
|
Rewriting multiplication to use shift [116] irq::greet_offset#0 = greet_idx * $10
|
|
Successful SSA optimization Pass2MultiplyToShiftRewriting
|
|
Inlining constant with var siblings memset::dst#0
|
|
Inlining constant with var siblings main::i1#0
|
|
Inlining constant with var siblings main::i2#0
|
|
Inlining constant with var siblings main::i#0
|
|
Inlining constant with var siblings irq::line#0
|
|
Inlining constant with var siblings irq::i#0
|
|
Inlining constant with var siblings irq::l#0
|
|
Inlining constant with var siblings irq::barcnt#0
|
|
Inlining constant with var siblings irq::i1#0
|
|
Inlining constant with var siblings irq::i3#0
|
|
Inlining constant with var siblings irq::i2#0
|
|
Inlining constant with var siblings irq::i4#0
|
|
Inlining constant with var siblings irq::i5#0
|
|
Constant inlined irq::line#0 = 0
|
|
Constant inlined irq::barcnt#0 = 0
|
|
Constant inlined irq::i#0 = 0
|
|
Constant inlined irq::i2#0 = 0
|
|
Constant inlined irq::i3#0 = 0
|
|
Constant inlined irq::i1#0 = 0
|
|
Constant inlined irq::i4#0 = 0
|
|
Constant inlined irq::l#0 = 0
|
|
Constant inlined irq::i5#0 = 0
|
|
Constant inlined SCREEN = DEFAULT_SCREEN
|
|
Constant inlined memset::$4 = (char *)memset::str#0
|
|
Constant inlined main::$2 = $bc*SIZEOF_CHAR
|
|
Constant inlined main::i1#0 = 0
|
|
Constant inlined main::i#0 = 0
|
|
Constant inlined main::i2#0 = 0
|
|
Constant inlined memset::dst#0 = (char *)memset::str#0
|
|
Successful SSA optimization Pass2ConstantInlining
|
|
Consolidated array index constant in assignment (rasters+SCROLL_Y)[irq::$25]
|
|
Consolidated array index constant in assignment (rasters+SCROLL_Y)[irq::$24]
|
|
Successful SSA optimization Pass2ConstantAdditionElimination
|
|
Alias irq::i3#2 = irq::$24 irq::$25
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Finalized unsigned number type (char) 8
|
|
Finalized unsigned number type (char) 8
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) $19
|
|
Finalized unsigned number type (unsigned int) $fc0
|
|
Finalized unsigned number type (unsigned int) $100
|
|
Finalized unsigned number type (unsigned int) $2c00
|
|
Finalized unsigned number type (unsigned int) $3000
|
|
Finalized unsigned number type (unsigned int) $2d00
|
|
Finalized unsigned number type (unsigned int) $2e00
|
|
Finalized unsigned number type (unsigned int) $2f00
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 2
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 3
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 4
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 5
|
|
Finalized unsigned number type (char) $28
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Simplifying constant integer cast 1*$28
|
|
Simplifying constant integer cast 2*$28
|
|
Simplifying constant integer cast 3*$28
|
|
Simplifying constant integer cast 4*$28
|
|
Simplifying constant integer cast 5*$28
|
|
Successful SSA optimization PassNCastSimplification
|
|
Added new block during phi lifting main::@12(between main::@8 and main::@8)
|
|
Added new block during phi lifting irq::@44(between irq::@13 and irq::@8)
|
|
Added new block during phi lifting irq::@45(between irq::@14 and irq::@8)
|
|
Added new block during phi lifting irq::@46(between irq::@15 and irq::@8)
|
|
Added new block during phi lifting irq::@47(between irq::@41 and irq::@43)
|
|
Adding NOP phi() at start of __start
|
|
Adding NOP phi() at start of __start::@1
|
|
Adding NOP phi() at start of __start::@2
|
|
Adding NOP phi() at start of irq::@4
|
|
Adding NOP phi() at start of irq::@19
|
|
Adding NOP phi() at start of irq::@25
|
|
Adding NOP phi() at start of main::@1
|
|
Adding NOP phi() at start of main::@11
|
|
Adding NOP phi() at start of main::@4
|
|
Adding NOP phi() at start of main::@7
|
|
Adding NOP phi() at start of main::@10
|
|
Adding NOP phi() at start of memset
|
|
Adding NOP phi() at start of memset::@2
|
|
Adding NOP phi() at start of memset::@1
|
|
CALL GRAPH
|
|
Calls in [__start] to main:7
|
|
Calls in [irq] to null:19
|
|
Calls in [main] to null:153 memset:155
|
|
|
|
Created 23 initial phi equivalence classes
|
|
Coalesced [15] irq::wobble_idx#16 = irq::wobble_idx#0
|
|
Coalesced [21] irq::sin_col#4 = irq::sin_col#0
|
|
Coalesced [28] irq::sin_bar#10 = irq::sin_bar#0
|
|
Coalesced [35] irq::greet_offset#4 = irq::greet_offset#0
|
|
Coalesced [48] irq::nxt#4 = irq::nxt#1
|
|
Coalesced [53] irq::nxt#3 = irq::nxt#0
|
|
Coalesced [56] irq::i5#4 = irq::i5#1
|
|
Coalesced [61] irq::i4#4 = irq::i4#1
|
|
Coalesced [62] irq::greet_offset#5 = irq::greet_offset#1
|
|
Coalesced [67] irq::i3#4 = irq::i3#1
|
|
Coalesced [70] irq::barcol#8 = irq::barcol#0
|
|
Coalesced [71] irq::idx#8 = irq::idx#0
|
|
Coalesced [74] irq::barcol#10 = irq::barcol#3
|
|
Coalesced [75] irq::idx#10 = irq::idx#3
|
|
Coalesced [80] irq::barcnt#10 = irq::barcnt#1
|
|
Coalesced [81] irq::sin_bar#11 = irq::sin_bar#1
|
|
Coalesced [86] irq::i2#4 = irq::i2#1
|
|
Coalesced [87] irq::barcol#11 = irq::barcol#2
|
|
Coalesced [88] irq::idx#11 = irq::idx#2
|
|
Coalesced [93] irq::i1#4 = irq::i1#1
|
|
Coalesced [94] irq::barcol#9 = irq::barcol#1
|
|
Coalesced [95] irq::idx#9 = irq::idx#1
|
|
Coalesced [98] irq::l#4 = irq::l#1
|
|
Coalesced [111] irq::i#4 = irq::i#1
|
|
Coalesced [112] irq::sin_col#5 = irq::sin_col#1
|
|
Coalesced [129] irq::wobble_idx#21 = irq::wobble_idx#10
|
|
Coalesced [134] irq::line#16 = irq::line#1
|
|
Coalesced (already) [135] irq::wobble_idx#17 = irq::wobble_idx#7
|
|
Coalesced (already) [136] irq::wobble_idx#20 = irq::wobble_idx#10
|
|
Coalesced (already) [137] irq::wobble_idx#19 = irq::wobble_idx#10
|
|
Coalesced (already) [138] irq::wobble_idx#18 = irq::wobble_idx#10
|
|
Coalesced (already) [140] irq::wobble_idx#24 = irq::wobble_idx#10
|
|
Coalesced (already) [143] irq::wobble_idx#23 = irq::wobble_idx#10
|
|
Coalesced [147] irq::wobble_idx#22 = irq::wobble_idx#1
|
|
Coalesced [180] main::i#3 = main::i#1
|
|
Coalesced [183] main::i2#4 = main::i2#1
|
|
Coalesced [186] main::i1#4 = main::i1#1
|
|
Coalesced [195] memset::dst#4 = memset::dst#1
|
|
Coalesced down to 20 phi equivalence classes
|
|
Culled Empty Block label __start::@2
|
|
Culled Empty Block label irq::@19
|
|
Culled Empty Block label irq::@25
|
|
Culled Empty Block label irq::@47
|
|
Culled Empty Block label irq::@28
|
|
Culled Empty Block label irq::@46
|
|
Culled Empty Block label irq::@45
|
|
Culled Empty Block label irq::@44
|
|
Culled Empty Block label main::@11
|
|
Culled Empty Block label main::@4
|
|
Culled Empty Block label main::@7
|
|
Culled Empty Block label main::@12
|
|
Culled Empty Block label memset::@2
|
|
Culled Empty Block label memset::@1
|
|
Renumbering block memset::@3 to memset::@1
|
|
Renumbering block memset::@4 to memset::@2
|
|
Renumbering block main::@5 to main::@4
|
|
Renumbering block main::@6 to main::@5
|
|
Renumbering block main::@8 to main::@6
|
|
Renumbering block main::@9 to main::@7
|
|
Renumbering block main::@10 to main::@8
|
|
Renumbering block irq::@20 to irq::@19
|
|
Renumbering block irq::@21 to irq::@20
|
|
Renumbering block irq::@22 to irq::@21
|
|
Renumbering block irq::@23 to irq::@22
|
|
Renumbering block irq::@24 to irq::@23
|
|
Renumbering block irq::@26 to irq::@24
|
|
Renumbering block irq::@27 to irq::@25
|
|
Renumbering block irq::@29 to irq::@26
|
|
Renumbering block irq::@30 to irq::@27
|
|
Renumbering block irq::@31 to irq::@28
|
|
Renumbering block irq::@32 to irq::@29
|
|
Renumbering block irq::@33 to irq::@30
|
|
Renumbering block irq::@34 to irq::@31
|
|
Renumbering block irq::@35 to irq::@32
|
|
Renumbering block irq::@36 to irq::@33
|
|
Renumbering block irq::@37 to irq::@34
|
|
Renumbering block irq::@38 to irq::@35
|
|
Renumbering block irq::@39 to irq::@36
|
|
Renumbering block irq::@40 to irq::@37
|
|
Renumbering block irq::@41 to irq::@38
|
|
Renumbering block irq::@42 to irq::@39
|
|
Renumbering block irq::@43 to irq::@40
|
|
Adding NOP phi() at start of __start
|
|
Adding NOP phi() at start of __start::@1
|
|
Adding NOP phi() at start of irq::@4
|
|
Adding NOP phi() at start of main::@1
|
|
Adding NOP phi() at start of main::@8
|
|
Adding NOP phi() at start of memset
|
|
|
|
FINAL CONTROL FLOW GRAPH
|
|
|
|
void __start()
|
|
__start: scope:[__start] from
|
|
[0] phi()
|
|
to:__start::__init1
|
|
__start::__init1: scope:[__start] from __start
|
|
[1] sin_idx = 0
|
|
[2] scroll_soft = 7
|
|
[3] scroll_ptr = SCROLL_TEXT
|
|
[4] greet_zoomx = 0
|
|
[5] greet_idx = 0
|
|
to:__start::@1
|
|
__start::@1: scope:[__start] from __start::__init1
|
|
[6] phi()
|
|
[7] call main
|
|
to:__start::@return
|
|
__start::@return: scope:[__start] from __start::@1
|
|
[8] return
|
|
to:@return
|
|
|
|
__interrupt(hardware_clobber) void irq()
|
|
irq: scope:[irq] from
|
|
[9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80
|
|
[10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER
|
|
[11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0
|
|
[12] sin_idx = ++ sin_idx
|
|
[13] irq::wobble_idx#0 = sin_idx
|
|
to:irq::@2
|
|
irq::@2: scope:[irq] from irq irq::@10
|
|
[14] irq::wobble_idx#10 = phi( irq/irq::wobble_idx#0, irq::@10/irq::wobble_idx#7 )
|
|
[14] irq::line#10 = phi( irq/0, irq::@10/irq::line#1 )
|
|
[15] if(irq::line#10!=RASTER_LINES) goto irq::@3
|
|
to:irq::@4
|
|
irq::@4: scope:[irq] from irq::@2
|
|
[16] phi()
|
|
[17] callexecute *songPlay
|
|
to:irq::@1
|
|
irq::@1: scope:[irq] from irq::@4
|
|
[18] irq::sin_col#0 = sin_idx
|
|
to:irq::@17
|
|
irq::@17: scope:[irq] from irq::@1 irq::@18
|
|
[19] irq::sin_col#2 = phi( irq::@1/irq::sin_col#0, irq::@18/irq::sin_col#1 )
|
|
[19] irq::i#2 = phi( irq::@1/0, irq::@18/irq::i#1 )
|
|
[20] if(irq::i#2<$28) goto irq::@18
|
|
to:irq::@19
|
|
irq::@19: scope:[irq] from irq::@17 irq::@20
|
|
[21] irq::l#2 = phi( irq::@17/0, irq::@20/irq::l#1 )
|
|
[22] if(irq::l#2!=RASTER_LINES) goto irq::@20
|
|
to:irq::@21
|
|
irq::@21: scope:[irq] from irq::@19
|
|
[23] irq::sin_bar#0 = sin_idx
|
|
to:irq::@22
|
|
irq::@22: scope:[irq] from irq::@21 irq::@28
|
|
[24] irq::sin_bar#2 = phi( irq::@21/irq::sin_bar#0, irq::@28/irq::sin_bar#1 )
|
|
[24] irq::barcnt#2 = phi( irq::@21/0, irq::@28/irq::barcnt#1 )
|
|
[25] if(irq::barcnt#2<$10) goto irq::@23
|
|
to:irq::@29
|
|
irq::@29: scope:[irq] from irq::@22 irq::@30
|
|
[26] irq::i3#2 = phi( irq::@22/0, irq::@30/irq::i3#1 )
|
|
[27] if(irq::i3#2<$13) goto irq::@30
|
|
to:irq::@31
|
|
irq::@31: scope:[irq] from irq::@29
|
|
[28] irq::greet_offset#0 = greet_idx << 4
|
|
to:irq::@32
|
|
irq::@32: scope:[irq] from irq::@31 irq::@33
|
|
[29] irq::greet_offset#2 = phi( irq::@31/irq::greet_offset#0, irq::@33/irq::greet_offset#1 )
|
|
[29] irq::i4#2 = phi( irq::@31/0, irq::@33/irq::i4#1 )
|
|
[30] if(irq::i4#2<$10) goto irq::@33
|
|
to:irq::@34
|
|
irq::@34: scope:[irq] from irq::@32
|
|
[31] scroll_soft = -- scroll_soft
|
|
[32] if(scroll_soft!=$ff) goto irq::@return
|
|
to:irq::@35
|
|
irq::@35: scope:[irq] from irq::@34
|
|
[33] scroll_soft = 7
|
|
to:irq::@36
|
|
irq::@36: scope:[irq] from irq::@35 irq::@37
|
|
[34] irq::i5#2 = phi( irq::@35/0, irq::@37/irq::i5#1 )
|
|
[35] if(irq::i5#2<$27) goto irq::@37
|
|
to:irq::@38
|
|
irq::@38: scope:[irq] from irq::@36
|
|
[36] irq::nxt#0 = *scroll_ptr
|
|
[37] scroll_ptr = ++ scroll_ptr
|
|
[38] if(irq::nxt#0!=0) goto irq::@40
|
|
to:irq::@39
|
|
irq::@39: scope:[irq] from irq::@38
|
|
[39] scroll_ptr = SCROLL_TEXT
|
|
[40] irq::nxt#1 = *scroll_ptr
|
|
to:irq::@40
|
|
irq::@40: scope:[irq] from irq::@38 irq::@39
|
|
[41] irq::nxt#2 = phi( irq::@38/irq::nxt#0, irq::@39/irq::nxt#1 )
|
|
[42] irq::$33 = irq::nxt#2 & $bf
|
|
[43] *(DEFAULT_SCREEN+SCROLL_ROW*$28+$27) = irq::$33
|
|
to:irq::@return
|
|
irq::@return: scope:[irq] from irq::@34 irq::@40
|
|
[44] return
|
|
to:@return
|
|
irq::@37: scope:[irq] from irq::@36
|
|
[45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2]
|
|
[46] irq::i5#1 = ++ irq::i5#2
|
|
to:irq::@36
|
|
irq::@33: scope:[irq] from irq::@32
|
|
[47] irq::$29 = GREETING[irq::greet_offset#2] & $bf
|
|
[48] (DEFAULT_SCREEN+GREET_ROW*$28+$d)[irq::i4#2] = irq::$29
|
|
[49] irq::greet_offset#1 = ++ irq::greet_offset#2
|
|
[50] irq::i4#1 = ++ irq::i4#2
|
|
to:irq::@32
|
|
irq::@30: scope:[irq] from irq::@29
|
|
[51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1
|
|
[52] irq::$27 = irq::$26 & 7
|
|
[53] (rasters+SCROLL_Y)[irq::i3#2] = irq::$27
|
|
[54] irq::i3#1 = ++ irq::i3#2
|
|
to:irq::@29
|
|
irq::@23: scope:[irq] from irq::@22
|
|
[55] irq::idx#0 = SINE[irq::sin_bar#2]
|
|
[56] irq::barcol#0 = irq::barcnt#2 << 4
|
|
to:irq::@24
|
|
irq::@24: scope:[irq] from irq::@23 irq::@25
|
|
[57] irq::idx#3 = phi( irq::@23/irq::idx#0, irq::@25/irq::idx#1 )
|
|
[57] irq::barcol#3 = phi( irq::@23/irq::barcol#0, irq::@25/irq::barcol#1 )
|
|
[57] irq::i1#2 = phi( irq::@23/0, irq::@25/irq::i1#1 )
|
|
[58] if(irq::i1#2<$10) goto irq::@25
|
|
to:irq::@26
|
|
irq::@26: scope:[irq] from irq::@24 irq::@27
|
|
[59] irq::idx#4 = phi( irq::@24/irq::idx#3, irq::@27/irq::idx#2 )
|
|
[59] irq::barcol#4 = phi( irq::@24/irq::barcol#3, irq::@27/irq::barcol#2 )
|
|
[59] irq::i2#2 = phi( irq::@24/0, irq::@27/irq::i2#1 )
|
|
[60] if(irq::i2#2<$f) goto irq::@27
|
|
to:irq::@28
|
|
irq::@28: scope:[irq] from irq::@26
|
|
[61] irq::sin_bar#1 = irq::sin_bar#2 + $a
|
|
[62] irq::barcnt#1 = ++ irq::barcnt#2
|
|
to:irq::@22
|
|
irq::@27: scope:[irq] from irq::@26
|
|
[63] irq::barcol#2 = -- irq::barcol#4
|
|
[64] rasters[irq::idx#4] = irq::barcol#2
|
|
[65] irq::idx#2 = ++ irq::idx#4
|
|
[66] irq::i2#1 = ++ irq::i2#2
|
|
to:irq::@26
|
|
irq::@25: scope:[irq] from irq::@24
|
|
[67] rasters[irq::idx#3] = irq::barcol#3
|
|
[68] irq::idx#1 = ++ irq::idx#3
|
|
[69] irq::barcol#1 = ++ irq::barcol#3
|
|
[70] irq::i1#1 = ++ irq::i1#2
|
|
to:irq::@24
|
|
irq::@20: scope:[irq] from irq::@19
|
|
[71] rasters[irq::l#2] = 0
|
|
[72] irq::l#1 = ++ irq::l#2
|
|
to:irq::@19
|
|
irq::@18: scope:[irq] from irq::@17
|
|
[73] irq::col1#0 = SINE[irq::sin_col#2] >> 2
|
|
[74] (COLORRAM+GREET_ROW*$28)[irq::i#2] = irq::col1#0
|
|
[75] irq::col1#1 = irq::col1#0 >> 1
|
|
[76] (COLORRAM+LOGO_ROW*$28-1)[irq::i#2] = irq::col1#1
|
|
[77] (COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#2] = irq::col1#1
|
|
[78] (COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#2] = irq::col1#1
|
|
[79] (COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#2] = irq::col1#1
|
|
[80] (COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#2] = irq::col1#1
|
|
[81] (COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#2] = irq::col1#1
|
|
[82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2]
|
|
[83] irq::sin_col#1 = ++ irq::sin_col#2
|
|
[84] irq::i#1 = ++ irq::i#2
|
|
to:irq::@17
|
|
irq::@3: scope:[irq] from irq::@2
|
|
[85] irq::col#0 = rasters[irq::line#10]
|
|
[86] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) = irq::col#0
|
|
[87] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) = irq::col#0
|
|
[88] if(irq::line#10<SCROLL_Y) goto irq::@5
|
|
to:irq::@11
|
|
irq::@11: scope:[irq] from irq::@3
|
|
[89] if(irq::line#10==SCROLL_Y) goto irq::@6
|
|
to:irq::@12
|
|
irq::@12: scope:[irq] from irq::@11
|
|
[90] if(irq::line#10==SCROLL_Y+SCROLL_BLACKBARS) goto irq::@7
|
|
to:irq::@13
|
|
irq::@13: scope:[irq] from irq::@12
|
|
[91] if(irq::line#10!=SCROLL_Y+SCROLL_BLACKBARS+1) goto irq::@8
|
|
to:irq::@14
|
|
irq::@14: scope:[irq] from irq::@13
|
|
[92] irq::zoomval#0 = SINE[greet_zoomx]
|
|
[93] greet_zoomx = ++ greet_zoomx
|
|
[94] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = irq::zoomval#0
|
|
[95] irq::$10 = irq::zoomval#0 + 1
|
|
[96] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = irq::$10
|
|
[97] if(greet_zoomx!=0) goto irq::@8
|
|
to:irq::@15
|
|
irq::@15: scope:[irq] from irq::@14
|
|
[98] greet_idx = ++ greet_idx
|
|
[99] if(greet_idx!=GREET_COUNT) goto irq::@8
|
|
to:irq::@16
|
|
irq::@16: scope:[irq] from irq::@15
|
|
[100] greet_idx = 0
|
|
to:irq::@8
|
|
irq::@8: scope:[irq] from irq::@13 irq::@14 irq::@15 irq::@16 irq::@5 irq::@6 irq::@7
|
|
[101] irq::wobble_idx#7 = phi( irq::@13/irq::wobble_idx#10, irq::@14/irq::wobble_idx#10, irq::@15/irq::wobble_idx#10, irq::@16/irq::wobble_idx#10, irq::@5/irq::wobble_idx#1, irq::@6/irq::wobble_idx#10, irq::@7/irq::wobble_idx#10 )
|
|
[102] irq::raster#0 = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)
|
|
to:irq::@9
|
|
irq::@9: scope:[irq] from irq::@8 irq::@9
|
|
[103] if(irq::raster#0==*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq::@9
|
|
to:irq::@10
|
|
irq::@10: scope:[irq] from irq::@9
|
|
[104] irq::line#1 = ++ irq::line#10
|
|
to:irq::@2
|
|
irq::@7: scope:[irq] from irq::@12
|
|
[105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
|
|
to:irq::@8
|
|
irq::@6: scope:[irq] from irq::@11
|
|
[106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
|
|
[107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft
|
|
to:irq::@8
|
|
irq::@5: scope:[irq] from irq::@3
|
|
[108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10]
|
|
[109] irq::wobble_idx#1 = ++ irq::wobble_idx#10
|
|
[110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66
|
|
to:irq::@8
|
|
|
|
void main()
|
|
main: scope:[main] from __start::@1
|
|
[111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47
|
|
[112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53
|
|
[113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40
|
|
[114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40
|
|
asm { lda#0 }
|
|
[116] callexecute *songInit
|
|
to:main::@1
|
|
main::@1: scope:[main] from main
|
|
[117] phi()
|
|
[118] call memset
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@1 main::@3
|
|
[119] main::i1#2 = phi( main::@1/0, main::@3/main::i1#1 )
|
|
[120] if(main::i1#2<$bc*SIZEOF_CHAR) goto main::@3
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@2 main::@5
|
|
[121] main::i2#2 = phi( main::@2/0, main::@5/main::i2#1 )
|
|
[122] if(main::i2#2<$28) goto main::@5
|
|
to:main::@6
|
|
main::@6: scope:[main] from main::@4 main::@6
|
|
[123] main::i#2 = phi( main::@4/0, main::@6/main::i#1 )
|
|
[124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2]
|
|
[125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2]
|
|
[126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2]
|
|
[127] main::i#1 = ++ main::i#2
|
|
[128] if(main::i#1!=0) goto main::@6
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::@6
|
|
asm { sei }
|
|
[130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL
|
|
[131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y
|
|
[132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f
|
|
[133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER
|
|
[134] *HARDWARE_IRQ = &irq
|
|
[135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
|
|
[136] *PROCPORT = PROCPORT_RAM_IO
|
|
[137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1
|
|
asm { cli }
|
|
to:main::@8
|
|
main::@8: scope:[main] from main::@7 main::@8
|
|
[139] phi()
|
|
to:main::@8
|
|
main::@5: scope:[main] from main::@4
|
|
[140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*'
|
|
[141] main::i2#1 = ++ main::i2#2
|
|
to:main::@4
|
|
main::@3: scope:[main] from main::@2
|
|
[142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2]
|
|
[143] main::i1#1 = ++ main::i1#2
|
|
to:main::@2
|
|
|
|
void * memset(void *str , char c , unsigned int num)
|
|
memset: scope:[memset] from main::@1
|
|
[144] phi()
|
|
to:memset::@1
|
|
memset::@1: scope:[memset] from memset memset::@2
|
|
[145] memset::dst#2 = phi( memset/(char *)memset::str#0, memset::@2/memset::dst#1 )
|
|
[146] if(memset::dst#2!=memset::end#0) goto memset::@2
|
|
to:memset::@return
|
|
memset::@return: scope:[memset] from memset::@1
|
|
[147] return
|
|
to:@return
|
|
memset::@2: scope:[memset] from memset::@1
|
|
[148] *memset::dst#2 = memset::c#0
|
|
[149] memset::dst#1 = ++ memset::dst#2
|
|
to:memset::@1
|
|
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
void __start()
|
|
__loadstore volatile char greet_idx // 0.6153846153846154
|
|
__loadstore volatile char greet_zoomx // 1.3939393939393938
|
|
__interrupt(hardware_clobber) void irq()
|
|
char irq::$10 // 22.0
|
|
char irq::$26 // 22.0
|
|
char irq::$27 // 22.0
|
|
char irq::$29 // 22.0
|
|
char irq::$33 // 4.0
|
|
char irq::barcnt
|
|
char irq::barcnt#1 // 22.0
|
|
char irq::barcnt#2 // 2.588235294117647
|
|
char irq::barcol
|
|
char irq::barcol#0 // 22.0
|
|
char irq::barcol#1 // 101.0
|
|
char irq::barcol#2 // 75.75
|
|
char irq::barcol#3 // 103.75
|
|
char irq::barcol#4 // 151.5
|
|
char irq::col
|
|
char irq::col#0 // 16.5
|
|
char irq::col1
|
|
char irq::col1#0 // 16.5
|
|
char irq::col1#1 // 12.833333333333334
|
|
char irq::greet_offset
|
|
char irq::greet_offset#0 // 4.0
|
|
char irq::greet_offset#1 // 11.0
|
|
char irq::greet_offset#2 // 8.75
|
|
char irq::i
|
|
char irq::i#1 // 22.0
|
|
char irq::i#2 // 9.307692307692307
|
|
char irq::i1
|
|
char irq::i1#1 // 202.0
|
|
char irq::i1#2 // 60.599999999999994
|
|
char irq::i2
|
|
char irq::i2#1 // 202.0
|
|
char irq::i2#2 // 60.599999999999994
|
|
char irq::i3
|
|
char irq::i3#1 // 22.0
|
|
char irq::i3#2 // 11.0
|
|
char irq::i4
|
|
char irq::i4#1 // 22.0
|
|
char irq::i4#2 // 8.8
|
|
char irq::i5
|
|
char irq::i5#1 // 22.0
|
|
char irq::i5#2 // 18.333333333333332
|
|
char irq::idx
|
|
char irq::idx#0 // 11.0
|
|
char irq::idx#1 // 67.33333333333333
|
|
char irq::idx#2 // 101.0
|
|
char irq::idx#3 // 138.33333333333331
|
|
char irq::idx#4 // 101.0
|
|
char irq::l
|
|
char irq::l#1 // 22.0
|
|
char irq::l#2 // 14.666666666666666
|
|
char irq::line
|
|
char irq::line#1 // 22.0
|
|
char irq::line#10 // 3.259259259259259
|
|
char irq::nxt
|
|
char irq::nxt#0 // 2.0
|
|
char irq::nxt#1 // 4.0
|
|
char irq::nxt#2 // 6.0
|
|
char irq::raster
|
|
char irq::raster#0 // 56.0
|
|
char irq::sin_bar
|
|
char irq::sin_bar#0 // 4.0
|
|
char irq::sin_bar#1 // 11.0
|
|
char irq::sin_bar#2 // 2.1875
|
|
char irq::sin_col
|
|
char irq::sin_col#0 // 4.0
|
|
char irq::sin_col#1 // 11.0
|
|
char irq::sin_col#2 // 3.833333333333333
|
|
char irq::wobble_idx
|
|
char irq::wobble_idx#0 // 4.0
|
|
char irq::wobble_idx#1 // 11.0
|
|
char irq::wobble_idx#10 // 4.590909090909091
|
|
char irq::wobble_idx#7 // 22.0
|
|
char irq::zoomval
|
|
char irq::zoomval#0 // 11.0
|
|
void main()
|
|
char main::i
|
|
char main::i#1 // 151.5
|
|
char main::i#2 // 202.0
|
|
char main::i1
|
|
char main::i1#1 // 202.0
|
|
char main::i1#2 // 168.33333333333331
|
|
char main::i2
|
|
char main::i2#1 // 202.0
|
|
char main::i2#2 // 134.66666666666666
|
|
void * memset(void *str , char c , unsigned int num)
|
|
char memset::c
|
|
char *memset::dst
|
|
char *memset::dst#1 // 2002.0
|
|
char *memset::dst#2 // 1334.6666666666667
|
|
char *memset::end
|
|
unsigned int memset::num
|
|
void *memset::return
|
|
void *memset::str
|
|
__loadstore char * volatile scroll_ptr // 0.19672131147540986
|
|
__loadstore volatile char scroll_soft // 0.2441860465116279
|
|
__loadstore volatile char sin_idx // 0.49999999999999994
|
|
|
|
Initial phi equivalence classes
|
|
[ irq::line#10 irq::line#1 ]
|
|
[ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
|
|
[ irq::i#2 irq::i#1 ]
|
|
[ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
|
|
[ irq::l#2 irq::l#1 ]
|
|
[ irq::barcnt#2 irq::barcnt#1 ]
|
|
[ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
|
|
[ irq::i3#2 irq::i3#1 ]
|
|
[ irq::i4#2 irq::i4#1 ]
|
|
[ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
|
|
[ irq::i5#2 irq::i5#1 ]
|
|
[ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
|
|
[ irq::i1#2 irq::i1#1 ]
|
|
[ irq::i2#2 irq::i2#1 ]
|
|
[ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ]
|
|
[ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
|
|
[ main::i1#2 main::i1#1 ]
|
|
[ main::i2#2 main::i2#1 ]
|
|
[ main::i#2 main::i#1 ]
|
|
[ memset::dst#2 memset::dst#1 ]
|
|
Added variable sin_idx to live range equivalence class [ sin_idx ]
|
|
Added variable scroll_soft to live range equivalence class [ scroll_soft ]
|
|
Added variable scroll_ptr to live range equivalence class [ scroll_ptr ]
|
|
Added variable greet_zoomx to live range equivalence class [ greet_zoomx ]
|
|
Added variable greet_idx to live range equivalence class [ greet_idx ]
|
|
Added variable irq::$33 to live range equivalence class [ irq::$33 ]
|
|
Added variable irq::$29 to live range equivalence class [ irq::$29 ]
|
|
Added variable irq::$26 to live range equivalence class [ irq::$26 ]
|
|
Added variable irq::$27 to live range equivalence class [ irq::$27 ]
|
|
Added variable irq::col1#0 to live range equivalence class [ irq::col1#0 ]
|
|
Added variable irq::col1#1 to live range equivalence class [ irq::col1#1 ]
|
|
Added variable irq::col#0 to live range equivalence class [ irq::col#0 ]
|
|
Added variable irq::zoomval#0 to live range equivalence class [ irq::zoomval#0 ]
|
|
Added variable irq::$10 to live range equivalence class [ irq::$10 ]
|
|
Added variable irq::raster#0 to live range equivalence class [ irq::raster#0 ]
|
|
Complete equivalence classes
|
|
[ irq::line#10 irq::line#1 ]
|
|
[ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
|
|
[ irq::i#2 irq::i#1 ]
|
|
[ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
|
|
[ irq::l#2 irq::l#1 ]
|
|
[ irq::barcnt#2 irq::barcnt#1 ]
|
|
[ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
|
|
[ irq::i3#2 irq::i3#1 ]
|
|
[ irq::i4#2 irq::i4#1 ]
|
|
[ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
|
|
[ irq::i5#2 irq::i5#1 ]
|
|
[ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
|
|
[ irq::i1#2 irq::i1#1 ]
|
|
[ irq::i2#2 irq::i2#1 ]
|
|
[ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ]
|
|
[ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
|
|
[ main::i1#2 main::i1#1 ]
|
|
[ main::i2#2 main::i2#1 ]
|
|
[ main::i#2 main::i#1 ]
|
|
[ memset::dst#2 memset::dst#1 ]
|
|
[ sin_idx ]
|
|
[ scroll_soft ]
|
|
[ scroll_ptr ]
|
|
[ greet_zoomx ]
|
|
[ greet_idx ]
|
|
[ irq::$33 ]
|
|
[ irq::$29 ]
|
|
[ irq::$26 ]
|
|
[ irq::$27 ]
|
|
[ irq::col1#0 ]
|
|
[ irq::col1#1 ]
|
|
[ irq::col#0 ]
|
|
[ irq::zoomval#0 ]
|
|
[ irq::$10 ]
|
|
[ irq::raster#0 ]
|
|
Allocated zp[2]:2 [ memset::dst#2 memset::dst#1 ]
|
|
Allocated zp[1]:4 [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ]
|
|
Allocated zp[1]:5 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
|
|
Allocated zp[1]:6 [ main::i1#2 main::i1#1 ]
|
|
Allocated zp[1]:7 [ main::i#2 main::i#1 ]
|
|
Allocated zp[1]:8 [ main::i2#2 main::i2#1 ]
|
|
Allocated zp[1]:9 [ irq::i1#2 irq::i1#1 ]
|
|
Allocated zp[1]:10 [ irq::i2#2 irq::i2#1 ]
|
|
Allocated zp[1]:11 [ irq::raster#0 ]
|
|
Allocated zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
|
|
Allocated zp[1]:13 [ irq::i5#2 irq::i5#1 ]
|
|
Allocated zp[1]:14 [ irq::l#2 irq::l#1 ]
|
|
Allocated zp[1]:15 [ irq::i3#2 irq::i3#1 ]
|
|
Allocated zp[1]:16 [ irq::i#2 irq::i#1 ]
|
|
Allocated zp[1]:17 [ irq::i4#2 irq::i4#1 ]
|
|
Allocated zp[1]:18 [ irq::line#10 irq::line#1 ]
|
|
Allocated zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ]
|
|
Allocated zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
|
|
Allocated zp[1]:21 [ irq::$29 ]
|
|
Allocated zp[1]:22 [ irq::$26 ]
|
|
Allocated zp[1]:23 [ irq::$27 ]
|
|
Allocated zp[1]:24 [ irq::$10 ]
|
|
Allocated zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
|
|
Allocated zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
|
|
Allocated zp[1]:27 [ irq::col1#0 ]
|
|
Allocated zp[1]:28 [ irq::col#0 ]
|
|
Allocated zp[1]:29 [ irq::col1#1 ]
|
|
Allocated zp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
|
|
Allocated zp[1]:31 [ irq::zoomval#0 ]
|
|
Allocated zp[1]:32 [ irq::$33 ]
|
|
Allocated zp[1]:33 [ greet_zoomx ]
|
|
Allocated zp[1]:34 [ greet_idx ]
|
|
Allocated zp[1]:35 [ sin_idx ]
|
|
Allocated zp[1]:36 [ scroll_soft ]
|
|
Allocated zp[2]:37 [ scroll_ptr ]
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
|
Statement [1] sin_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
|
|
Statement [2] scroll_soft = 7 [ ] ( [ ] { } ) always clobbers reg byte z
|
|
Statement [3] scroll_ptr = SCROLL_TEXT [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [4] greet_zoomx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
|
|
Statement [5] greet_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
|
|
Statement [9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte a
|
|
Statement [10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte z
|
|
Statement [11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0 [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte z
|
|
Statement [17] callexecute *songPlay [ sin_idx scroll_soft scroll_ptr greet_idx ] ( [ sin_idx scroll_soft scroll_ptr greet_idx ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
|
|
Statement [28] irq::greet_offset#0 = greet_idx << 4 [ scroll_soft scroll_ptr irq::greet_offset#0 ] ( [ scroll_soft scroll_ptr irq::greet_offset#0 ] { } ) always clobbers reg byte a
|
|
Statement [32] if(scroll_soft!=$ff) goto irq::@return [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte z
|
|
Statement [33] scroll_soft = 7 [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte z
|
|
Statement [36] irq::nxt#0 = *scroll_ptr [ scroll_ptr irq::nxt#0 ] ( [ scroll_ptr irq::nxt#0 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [39] scroll_ptr = SCROLL_TEXT [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte a
|
|
Statement [40] irq::nxt#1 = *scroll_ptr [ irq::nxt#1 ] ( [ irq::nxt#1 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [42] irq::$33 = irq::nxt#2 & $bf [ irq::$33 ] ( [ irq::$33 ] { } ) always clobbers reg byte a
|
|
Statement [44] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
|
|
Statement [45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] [ scroll_ptr irq::i5#2 ] ( [ scroll_ptr irq::i5#2 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:13 [ irq::i5#2 irq::i5#1 ]
|
|
Statement [47] irq::$29 = GREETING[irq::greet_offset#2] & $bf [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] ( [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:17 [ irq::i4#2 irq::i4#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
|
|
Statement [51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:15 [ irq::i3#2 irq::i3#1 ]
|
|
Statement [52] irq::$27 = irq::$26 & 7 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$27 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$27 ] { } ) always clobbers reg byte a
|
|
Statement [56] irq::barcol#0 = irq::barcnt#2 << 4 [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#2 irq::idx#0 irq::barcol#0 ] ( [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#2 irq::idx#0 irq::barcol#0 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:5 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
|
|
Statement [61] irq::sin_bar#1 = irq::sin_bar#2 + $a [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#1 ] ( [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#1 ] { } ) always clobbers reg byte a
|
|
Statement [71] rasters[irq::l#2] = 0 [ sin_idx scroll_soft scroll_ptr greet_idx irq::l#2 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::l#2 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:14 [ irq::l#2 irq::l#1 ]
|
|
Statement [73] irq::col1#0 = SINE[irq::sin_col#2] >> 2 [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#0 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#0 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:16 [ irq::i#2 irq::i#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
|
|
Statement [75] irq::col1#1 = irq::col1#0 >> 1 [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#1 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#1 ] { } ) always clobbers reg byte a
|
|
Statement [82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2] [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 ] { } ) always clobbers reg byte a
|
|
Statement [97] if(greet_zoomx!=0) goto irq::@8 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:18 [ irq::line#10 irq::line#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
|
|
Statement [99] if(greet_idx!=GREET_COUNT) goto irq::@8 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
|
|
Removing always clobbered register reg byte z as potential for zp[1]:18 [ irq::line#10 irq::line#1 ]
|
|
Removing always clobbered register reg byte z as potential for zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
|
|
Statement [100] greet_idx = 0 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
|
|
Statement [105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
|
|
Statement [106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
|
|
Statement [107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
|
|
Statement [108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10] [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
|
|
Statement [110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#1 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#1 ] { } ) always clobbers reg byte z
|
|
Statement [111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 [ ] ( main:7 [ ] { } ) always clobbers reg byte a
|
|
Statement [114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40 [ ] ( main:7 [ ] { } ) always clobbers reg byte a
|
|
Statement asm { lda#0 } always clobbers reg byte a
|
|
Statement [116] callexecute *songInit [ ] ( main:7 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
|
|
Statement [124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ]
|
|
Statement [125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
|
|
Statement [126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
|
|
Statement [130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f [ ] ( main:7 [ ] { } ) always clobbers reg byte a
|
|
Statement [133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [134] *HARDWARE_IRQ = &irq [ ] ( main:7 [ ] { } ) always clobbers reg byte a
|
|
Statement [135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [136] *PROCPORT = PROCPORT_RAM_IO [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*' [ main::i2#2 ] ( main:7 [ main::i2#2 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::i2#2 main::i2#1 ]
|
|
Statement [142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2] [ main::i1#2 ] ( main:7 [ main::i1#2 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::i1#2 main::i1#1 ]
|
|
Statement [146] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:7::memset:118 [ memset::dst#2 ] { } ) always clobbers reg byte a
|
|
Statement [148] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:7::memset:118 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [1] sin_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
|
|
Statement [2] scroll_soft = 7 [ ] ( [ ] { } ) always clobbers reg byte z
|
|
Statement [3] scroll_ptr = SCROLL_TEXT [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [4] greet_zoomx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
|
|
Statement [5] greet_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
|
|
Statement [9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte a
|
|
Statement [10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte z
|
|
Statement [11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0 [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte z
|
|
Statement [17] callexecute *songPlay [ sin_idx scroll_soft scroll_ptr greet_idx ] ( [ sin_idx scroll_soft scroll_ptr greet_idx ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
|
|
Statement [28] irq::greet_offset#0 = greet_idx << 4 [ scroll_soft scroll_ptr irq::greet_offset#0 ] ( [ scroll_soft scroll_ptr irq::greet_offset#0 ] { } ) always clobbers reg byte a
|
|
Statement [32] if(scroll_soft!=$ff) goto irq::@return [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte z
|
|
Statement [33] scroll_soft = 7 [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte z
|
|
Statement [36] irq::nxt#0 = *scroll_ptr [ scroll_ptr irq::nxt#0 ] ( [ scroll_ptr irq::nxt#0 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [39] scroll_ptr = SCROLL_TEXT [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte a
|
|
Statement [40] irq::nxt#1 = *scroll_ptr [ irq::nxt#1 ] ( [ irq::nxt#1 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [42] irq::$33 = irq::nxt#2 & $bf [ irq::$33 ] ( [ irq::$33 ] { } ) always clobbers reg byte a
|
|
Statement [44] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
|
|
Statement [45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] [ scroll_ptr irq::i5#2 ] ( [ scroll_ptr irq::i5#2 ] { } ) always clobbers reg byte a
|
|
Statement [47] irq::$29 = GREETING[irq::greet_offset#2] & $bf [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] ( [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] { } ) always clobbers reg byte a
|
|
Statement [51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] { } ) always clobbers reg byte a
|
|
Statement [52] irq::$27 = irq::$26 & 7 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$27 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$27 ] { } ) always clobbers reg byte a
|
|
Statement [56] irq::barcol#0 = irq::barcnt#2 << 4 [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#2 irq::idx#0 irq::barcol#0 ] ( [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#2 irq::idx#0 irq::barcol#0 ] { } ) always clobbers reg byte a
|
|
Statement [61] irq::sin_bar#1 = irq::sin_bar#2 + $a [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#1 ] ( [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#1 ] { } ) always clobbers reg byte a
|
|
Statement [71] rasters[irq::l#2] = 0 [ sin_idx scroll_soft scroll_ptr greet_idx irq::l#2 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::l#2 ] { } ) always clobbers reg byte a
|
|
Statement [73] irq::col1#0 = SINE[irq::sin_col#2] >> 2 [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#0 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#0 ] { } ) always clobbers reg byte a
|
|
Statement [75] irq::col1#1 = irq::col1#0 >> 1 [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#1 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#1 ] { } ) always clobbers reg byte a
|
|
Statement [82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2] [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 ] { } ) always clobbers reg byte a
|
|
Statement [97] if(greet_zoomx!=0) goto irq::@8 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
|
|
Statement [99] if(greet_idx!=GREET_COUNT) goto irq::@8 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
|
|
Statement [100] greet_idx = 0 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
|
|
Statement [105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
|
|
Statement [106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
|
|
Statement [107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
|
|
Statement [108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10] [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
|
|
Statement [110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#1 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#1 ] { } ) always clobbers reg byte z
|
|
Statement [111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 [ ] ( main:7 [ ] { } ) always clobbers reg byte a
|
|
Statement [114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40 [ ] ( main:7 [ ] { } ) always clobbers reg byte a
|
|
Statement asm { lda#0 } always clobbers reg byte a
|
|
Statement [116] callexecute *songInit [ ] ( main:7 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
|
|
Statement [124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
|
|
Statement [125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
|
|
Statement [126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
|
|
Statement [130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f [ ] ( main:7 [ ] { } ) always clobbers reg byte a
|
|
Statement [133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [134] *HARDWARE_IRQ = &irq [ ] ( main:7 [ ] { } ) always clobbers reg byte a
|
|
Statement [135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [136] *PROCPORT = PROCPORT_RAM_IO [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
|
|
Statement [140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*' [ main::i2#2 ] ( main:7 [ main::i2#2 ] { } ) always clobbers reg byte a
|
|
Statement [142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2] [ main::i1#2 ] ( main:7 [ main::i1#2 ] { } ) always clobbers reg byte a
|
|
Statement [146] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:7::memset:118 [ memset::dst#2 ] { } ) always clobbers reg byte a
|
|
Statement [148] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:7::memset:118 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Potential registers zp[1]:18 [ irq::line#10 irq::line#1 ] : zp[1]:18 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] : zp[1]:12 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:16 [ irq::i#2 irq::i#1 ] : zp[1]:16 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ] : zp[1]:25 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:14 [ irq::l#2 irq::l#1 ] : zp[1]:14 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ] : zp[1]:19 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] : zp[1]:26 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:15 [ irq::i3#2 irq::i3#1 ] : zp[1]:15 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:17 [ irq::i4#2 irq::i4#1 ] : zp[1]:17 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] : zp[1]:20 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:13 [ irq::i5#2 irq::i5#1 ] : zp[1]:13 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:9 [ irq::i1#2 irq::i1#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:10 [ irq::i2#2 irq::i2#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:4 [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:5 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] : zp[1]:5 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:6 [ main::i1#2 main::i1#1 ] : zp[1]:6 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:8 [ main::i2#2 main::i2#1 ] : zp[1]:8 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[2]:2 [ memset::dst#2 memset::dst#1 ] : zp[2]:2 ,
|
|
Potential registers zp[1]:35 [ sin_idx ] : zp[1]:35 ,
|
|
Potential registers zp[1]:36 [ scroll_soft ] : zp[1]:36 ,
|
|
Potential registers zp[2]:37 [ scroll_ptr ] : zp[2]:37 ,
|
|
Potential registers zp[1]:33 [ greet_zoomx ] : zp[1]:33 ,
|
|
Potential registers zp[1]:34 [ greet_idx ] : zp[1]:34 ,
|
|
Potential registers zp[1]:32 [ irq::$33 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:21 [ irq::$29 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:22 [ irq::$26 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:23 [ irq::$27 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:27 [ irq::col1#0 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:29 [ irq::col1#1 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:28 [ irq::col#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:31 [ irq::zoomval#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:24 [ irq::$10 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
Potential registers zp[1]:11 [ irq::raster#0 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , reg byte z ,
|
|
|
|
REGISTER UPLIFT SCOPES
|
|
Uplift Scope [memset] 3,336.67: zp[2]:2 [ memset::dst#2 memset::dst#1 ]
|
|
Uplift Scope [irq] 454: zp[1]:4 [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] 418.67: zp[1]:5 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] 262.6: zp[1]:9 [ irq::i1#2 irq::i1#1 ] 262.6: zp[1]:10 [ irq::i2#2 irq::i2#1 ] 56: zp[1]:11 [ irq::raster#0 ] 41.59: zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] 40.33: zp[1]:13 [ irq::i5#2 irq::i5#1 ] 36.67: zp[1]:14 [ irq::l#2 irq::l#1 ] 33: zp[1]:15 [ irq::i3#2 irq::i3#1 ] 31.31: zp[1]:16 [ irq::i#2 irq::i#1 ] 30.8: zp[1]:17 [ irq::i4#2 irq::i4#1 ] 25.26: zp[1]:18 [ irq::line#10 irq::line#1 ] 24.59: zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ] 23.75: zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] 22: zp[1]:21 [ irq::$29 ] 22: zp[1]:22 [ irq::$26 ] 22: zp[1]:23 [ irq::$27 ] 22: zp[1]:24 [ irq::$10 ] 18.83: zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ] 17.19: zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] 16.5: zp[1]:27 [ irq::col1#0 ] 16.5: zp[1]:28 [ irq::col#0 ] 12.83: zp[1]:29 [ irq::col1#1 ] 12: zp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] 11: zp[1]:31 [ irq::zoomval#0 ] 4: zp[1]:32 [ irq::$33 ]
|
|
Uplift Scope [main] 370.33: zp[1]:6 [ main::i1#2 main::i1#1 ] 353.5: zp[1]:7 [ main::i#2 main::i#1 ] 336.67: zp[1]:8 [ main::i2#2 main::i2#1 ]
|
|
Uplift Scope [] 1.39: zp[1]:33 [ greet_zoomx ] 0.62: zp[1]:34 [ greet_idx ] 0.5: zp[1]:35 [ sin_idx ] 0.24: zp[1]:36 [ scroll_soft ] 0.2: zp[2]:37 [ scroll_ptr ]
|
|
Uplift Scope [MOS6526_CIA]
|
|
Uplift Scope [MOS6569_VICII]
|
|
Uplift Scope [MOS6581_SID]
|
|
Uplift Scope [MOS4569_VICIII]
|
|
Uplift Scope [MEGA65_VICIV]
|
|
Uplift Scope [F018_DMAGIC]
|
|
Uplift Scope [DMA_LIST_F018A]
|
|
Uplift Scope [DMA_LIST_F018B]
|
|
Uplift Scope [__start]
|
|
|
|
Uplifting [memset] best 19093 combination zp[2]:2 [ memset::dst#2 memset::dst#1 ]
|
|
Uplifting [irq] best 16053 combination reg byte y [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] reg byte x [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] reg byte z [ irq::i1#2 irq::i1#1 ] zp[1]:10 [ irq::i2#2 irq::i2#1 ] zp[1]:11 [ irq::raster#0 ] zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] zp[1]:13 [ irq::i5#2 irq::i5#1 ] zp[1]:14 [ irq::l#2 irq::l#1 ] zp[1]:15 [ irq::i3#2 irq::i3#1 ] zp[1]:16 [ irq::i#2 irq::i#1 ] zp[1]:17 [ irq::i4#2 irq::i4#1 ] zp[1]:18 [ irq::line#10 irq::line#1 ] zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ] zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] zp[1]:21 [ irq::$29 ] zp[1]:22 [ irq::$26 ] zp[1]:23 [ irq::$27 ] zp[1]:24 [ irq::$10 ] zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ] zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] zp[1]:27 [ irq::col1#0 ] zp[1]:28 [ irq::col#0 ] zp[1]:29 [ irq::col1#1 ] zp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] zp[1]:31 [ irq::zoomval#0 ] zp[1]:32 [ irq::$33 ]
|
|
Limited combination testing to 100 combinations of 319815680 possible.
|
|
Uplifting [main] best 15653 combination reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i2#2 main::i2#1 ]
|
|
Uplifting [] best 15653 combination zp[1]:33 [ greet_zoomx ] zp[1]:34 [ greet_idx ] zp[1]:35 [ sin_idx ] zp[1]:36 [ scroll_soft ] zp[2]:37 [ scroll_ptr ]
|
|
Uplifting [MOS6526_CIA] best 15653 combination
|
|
Uplifting [MOS6569_VICII] best 15653 combination
|
|
Uplifting [MOS6581_SID] best 15653 combination
|
|
Uplifting [MOS4569_VICIII] best 15653 combination
|
|
Uplifting [MEGA65_VICIV] best 15653 combination
|
|
Uplifting [F018_DMAGIC] best 15653 combination
|
|
Uplifting [DMA_LIST_F018A] best 15653 combination
|
|
Uplifting [DMA_LIST_F018B] best 15653 combination
|
|
Uplifting [__start] best 15653 combination
|
|
Attempting to uplift remaining variables inzp[1]:10 [ irq::i2#2 irq::i2#1 ]
|
|
Uplifting [irq] best 14653 combination reg byte z [ irq::i2#2 irq::i2#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:11 [ irq::raster#0 ]
|
|
Uplifting [irq] best 14323 combination reg byte a [ irq::raster#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
|
|
Uplifting [irq] best 14260 combination reg byte x [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:13 [ irq::i5#2 irq::i5#1 ]
|
|
Uplifting [irq] best 14140 combination reg byte x [ irq::i5#2 irq::i5#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:14 [ irq::l#2 irq::l#1 ]
|
|
Uplifting [irq] best 14020 combination reg byte x [ irq::l#2 irq::l#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:15 [ irq::i3#2 irq::i3#1 ]
|
|
Uplifting [irq] best 13870 combination reg byte x [ irq::i3#2 irq::i3#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:16 [ irq::i#2 irq::i#1 ]
|
|
Uplifting [irq] best 13540 combination reg byte x [ irq::i#2 irq::i#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:17 [ irq::i4#2 irq::i4#1 ]
|
|
Uplifting [irq] best 13420 combination reg byte x [ irq::i4#2 irq::i4#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:18 [ irq::line#10 irq::line#1 ]
|
|
Uplifting [irq] best 13420 combination zp[1]:18 [ irq::line#10 irq::line#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ]
|
|
Uplifting [irq] best 13420 combination zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
|
|
Uplifting [irq] best 13359 combination reg byte y [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:21 [ irq::$29 ]
|
|
Uplifting [irq] best 13299 combination reg byte a [ irq::$29 ]
|
|
Attempting to uplift remaining variables inzp[1]:22 [ irq::$26 ]
|
|
Uplifting [irq] best 13239 combination reg byte a [ irq::$26 ]
|
|
Attempting to uplift remaining variables inzp[1]:23 [ irq::$27 ]
|
|
Uplifting [irq] best 13179 combination reg byte a [ irq::$27 ]
|
|
Attempting to uplift remaining variables inzp[1]:24 [ irq::$10 ]
|
|
Uplifting [irq] best 13119 combination reg byte a [ irq::$10 ]
|
|
Attempting to uplift remaining variables inzp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
|
|
Uplifting [irq] best 13026 combination reg byte y [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
|
|
Uplifting [irq] best 13026 combination zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:27 [ irq::col1#0 ]
|
|
Uplifting [irq] best 12936 combination reg byte a [ irq::col1#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:28 [ irq::col#0 ]
|
|
Uplifting [irq] best 12846 combination reg byte a [ irq::col#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:29 [ irq::col1#1 ]
|
|
Uplifting [irq] best 12636 combination reg byte a [ irq::col1#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
|
|
Uplifting [irq] best 12626 combination reg byte a [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:31 [ irq::zoomval#0 ]
|
|
Uplifting [irq] best 12536 combination reg byte a [ irq::zoomval#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:32 [ irq::$33 ]
|
|
Uplifting [irq] best 12530 combination reg byte a [ irq::$33 ]
|
|
Attempting to uplift remaining variables inzp[1]:33 [ greet_zoomx ]
|
|
Uplifting [] best 12530 combination zp[1]:33 [ greet_zoomx ]
|
|
Attempting to uplift remaining variables inzp[1]:34 [ greet_idx ]
|
|
Uplifting [] best 12530 combination zp[1]:34 [ greet_idx ]
|
|
Attempting to uplift remaining variables inzp[1]:35 [ sin_idx ]
|
|
Uplifting [] best 12530 combination zp[1]:35 [ sin_idx ]
|
|
Attempting to uplift remaining variables inzp[1]:36 [ scroll_soft ]
|
|
Uplifting [] best 12530 combination zp[1]:36 [ scroll_soft ]
|
|
Allocated (was zp[1]:18) zp[1]:4 [ irq::line#10 irq::line#1 ]
|
|
Allocated (was zp[1]:19) zp[1]:5 [ irq::barcnt#2 irq::barcnt#1 ]
|
|
Allocated (was zp[1]:26) zp[1]:6 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
|
|
Allocated (was zp[1]:33) zp[1]:7 [ greet_zoomx ]
|
|
Allocated (was zp[1]:34) zp[1]:8 [ greet_idx ]
|
|
Allocated (was zp[1]:35) zp[1]:9 [ sin_idx ]
|
|
Allocated (was zp[1]:36) zp[1]:10 [ scroll_soft ]
|
|
Allocated (was zp[2]:37) zp[2]:11 [ scroll_ptr ]
|
|
Interrupt procedure irq clobbers AXYZcnzvidePSB
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
// File Comments
|
|
// Raster65 Demo re-implementation in C by Jesper Gravgaard
|
|
// Based on RASTER65 assembler demo made in 2015 and updated in 2020 by DEFT
|
|
// https://mega.scryptos.com/sharefolder/MEGA/MEGA65+filehost
|
|
// https://www.forum64.de/index.php?thread/104591-xemu-vic-iv-implementation-update/&postID=1560511#post1560511
|
|
/// @file
|
|
/// MEGA65 Registers and Constants
|
|
/// @file
|
|
/// The MOS 6526 Complex Interface Adapter (CIA)
|
|
///
|
|
/// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
|
|
// Upstart
|
|
.cpu _45gs02
|
|
// MEGA65 platform executable starting in C64 mode.
|
|
.file [name="raster65.prg", type="prg", segments="Program"]
|
|
.segmentdef Program [segments="Basic, Code, Data"]
|
|
.segmentdef Basic [start=$0801]
|
|
.segmentdef Code [start=$80d]
|
|
.segmentdef Data [startAfter="Code"]
|
|
.segment Basic
|
|
:BasicUpstart(__start)
|
|
// Global Constants & labels
|
|
/// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
|
|
.const CIA_INTERRUPT_CLEAR_ALL = $7f
|
|
/// VICII IRQ Status/Enable Raster
|
|
// @see #IRQ_ENABLE #IRQ_STATUS
|
|
/// 0 | RST| Reaching a certain raster line. The line is specified by writing
|
|
/// | | to register 0xd012 and bit 7 of $d011 and internally stored by
|
|
/// | | the VIC for the raster compare. The test for reaching the
|
|
/// | | interrupt raster line is done in cycle 0 of every line (for line
|
|
/// | | 0, in cycle 1).
|
|
.const IRQ_RASTER = 1
|
|
/// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
|
|
.const PROCPORT_DDR_MEMORY_MASK = 7
|
|
/// RAM in 0xA000, 0xE000 I/O in 0xD000
|
|
.const PROCPORT_RAM_IO = 5
|
|
// Logo start screen row
|
|
.const LOGO_ROW = 3
|
|
// Scroll screen row
|
|
.const SCROLL_ROW = $d
|
|
// Greeting screen row
|
|
.const GREET_ROW = $14
|
|
// y rasterline where IRQ starts
|
|
.const IRQ_Y = $16
|
|
// y rasterline where scrolly starts
|
|
.const SCROLL_Y = $66
|
|
// size of raster behind scrolly
|
|
.const SCROLL_BLACKBARS = $13
|
|
// The number of raster lines
|
|
.const RASTER_LINES = $d8
|
|
// The number of greetings
|
|
.const GREET_COUNT = $f
|
|
.const OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54
|
|
.const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
|
|
.const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
|
|
.const OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = $11
|
|
.const OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO = $5c
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_RASLINE0 = $6f
|
|
.const OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19
|
|
.const OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16
|
|
.const OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20
|
|
.const OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a
|
|
.const SIZEOF_CHAR = 1
|
|
/// Processor port data direction register
|
|
.label PROCPORT_DDR = 0
|
|
/// Processor Port Register controlling RAM/ROM configuration and the datasette
|
|
.label PROCPORT = 1
|
|
/// The VIC-II MOS 6567/6569
|
|
.label VICII = $d000
|
|
/// The VIC III MOS 4567/4569
|
|
.label VICIII = $d000
|
|
/// The VIC IV
|
|
.label VICIV = $d000
|
|
/// Palette RED
|
|
.label PALETTE_RED = $d100
|
|
/// Palette GREEN
|
|
.label PALETTE_GREEN = $d200
|
|
/// Palette BLUE
|
|
.label PALETTE_BLUE = $d300
|
|
/// Color Ram
|
|
.label COLORRAM = $d800
|
|
/// Default address of screen character matrix
|
|
.label DEFAULT_SCREEN = $400
|
|
/// The CIA#1: keyboard matrix, joystick #1/#2
|
|
.label CIA1 = $dc00
|
|
/// The vector used when the HARDWARE serves IRQ interrupts
|
|
.label HARDWARE_IRQ = $fffe
|
|
// Pointer to the song init routine
|
|
.label songInit = SONG
|
|
// Pointer to the song play routine
|
|
.label songPlay = SONG+3
|
|
// Sine Position (used across effects)
|
|
.label sin_idx = 9
|
|
// scroll soft position of text scrolly (0-7)
|
|
.label scroll_soft = $a
|
|
// scroll text pointer to next char
|
|
.label scroll_ptr = $b
|
|
// Zoom Position
|
|
.label greet_zoomx = 7
|
|
// The greeting currently being shown
|
|
.label greet_idx = 8
|
|
.segment Code
|
|
// __start
|
|
__start: {
|
|
jmp __init1
|
|
// __start::__init1
|
|
__init1:
|
|
// [1] sin_idx = 0 -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z sin_idx
|
|
// [2] scroll_soft = 7 -- vbuz1=vbuc1
|
|
ldz #7
|
|
stz.z scroll_soft
|
|
// [3] scroll_ptr = SCROLL_TEXT -- pbuz1=pbuc1
|
|
lda #<SCROLL_TEXT
|
|
sta.z scroll_ptr
|
|
lda #>SCROLL_TEXT
|
|
sta.z scroll_ptr+1
|
|
// [4] greet_zoomx = 0 -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z greet_zoomx
|
|
// [5] greet_idx = 0 -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z greet_idx
|
|
// [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1]
|
|
__b1_from___init1:
|
|
jmp __b1
|
|
// __start::@1
|
|
__b1:
|
|
// [7] call main
|
|
jsr main
|
|
jmp __breturn
|
|
// __start::@return
|
|
__breturn:
|
|
// [8] return
|
|
rts
|
|
}
|
|
// irq
|
|
// BIG INTERRUPT LOOP
|
|
irq: {
|
|
.label line = 4
|
|
.label sin_bar = 6
|
|
.label barcnt = 5
|
|
// interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry
|
|
pha
|
|
phx
|
|
phy
|
|
phz
|
|
// [9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
|
|
// force NTSC every frame (hehe)
|
|
lda #$80
|
|
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0
|
|
// [10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER -- _deref_pbuc1=vbuc2
|
|
// Acknowledge the IRQ
|
|
ldz #IRQ_RASTER
|
|
stz VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS
|
|
// [11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0 -- _deref_pbuc1=vbuc2
|
|
// reset x scroll
|
|
ldz #0
|
|
stz VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2
|
|
// [12] sin_idx = ++ sin_idx -- vbuz1=_inc_vbuz1
|
|
inc.z sin_idx
|
|
// [13] irq::wobble_idx#0 = sin_idx -- vbuxx=vbuz1
|
|
// Generate Raster Bars and more
|
|
ldx.z sin_idx
|
|
// [14] phi from irq to irq::@2 [phi:irq->irq::@2]
|
|
__b2_from_irq:
|
|
// [14] phi irq::wobble_idx#10 = irq::wobble_idx#0 [phi:irq->irq::@2#0] -- register_copy
|
|
// [14] phi irq::line#10 = 0 [phi:irq->irq::@2#1] -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z line
|
|
jmp __b2
|
|
// irq::@2
|
|
__b2:
|
|
// [15] if(irq::line#10!=RASTER_LINES) goto irq::@3 -- vbuz1_neq_vbuc1_then_la1
|
|
ldz #RASTER_LINES
|
|
cpz.z line
|
|
bne __b3
|
|
// [16] phi from irq::@2 to irq::@4 [phi:irq::@2->irq::@4]
|
|
__b4_from___b2:
|
|
jmp __b4
|
|
// irq::@4
|
|
__b4:
|
|
// [17] callexecute *songPlay -- call__deref_pprc1
|
|
// play music
|
|
jsr songPlay
|
|
jmp __b1
|
|
// irq::@1
|
|
__b1:
|
|
// [18] irq::sin_col#0 = sin_idx -- vbuyy=vbuz1
|
|
// Set up colors behind logo, scroll and greets
|
|
ldy.z sin_idx
|
|
// [19] phi from irq::@1 to irq::@17 [phi:irq::@1->irq::@17]
|
|
__b17_from___b1:
|
|
// [19] phi irq::sin_col#2 = irq::sin_col#0 [phi:irq::@1->irq::@17#0] -- register_copy
|
|
// [19] phi irq::i#2 = 0 [phi:irq::@1->irq::@17#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b17
|
|
// irq::@17
|
|
__b17:
|
|
// [20] if(irq::i#2<$28) goto irq::@18 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$28
|
|
bcc __b18
|
|
// [21] phi from irq::@17 to irq::@19 [phi:irq::@17->irq::@19]
|
|
__b19_from___b17:
|
|
// [21] phi irq::l#2 = 0 [phi:irq::@17->irq::@19#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b19
|
|
// Set all raster bars to black
|
|
// irq::@19
|
|
__b19:
|
|
// [22] if(irq::l#2!=RASTER_LINES) goto irq::@20 -- vbuxx_neq_vbuc1_then_la1
|
|
cpx #RASTER_LINES
|
|
bne __b20
|
|
jmp __b21
|
|
// irq::@21
|
|
__b21:
|
|
// [23] irq::sin_bar#0 = sin_idx -- vbuz1=vbuz2
|
|
// Big block of bars (16)
|
|
lda.z sin_idx
|
|
sta.z sin_bar
|
|
// [24] phi from irq::@21 to irq::@22 [phi:irq::@21->irq::@22]
|
|
__b22_from___b21:
|
|
// [24] phi irq::sin_bar#2 = irq::sin_bar#0 [phi:irq::@21->irq::@22#0] -- register_copy
|
|
// [24] phi irq::barcnt#2 = 0 [phi:irq::@21->irq::@22#1] -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z barcnt
|
|
jmp __b22
|
|
// irq::@22
|
|
__b22:
|
|
// [25] if(irq::barcnt#2<$10) goto irq::@23 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z barcnt
|
|
cmp #$10
|
|
bcc __b23
|
|
// [26] phi from irq::@22 to irq::@29 [phi:irq::@22->irq::@29]
|
|
__b29_from___b22:
|
|
// [26] phi irq::i3#2 = 0 [phi:irq::@22->irq::@29#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b29
|
|
// Produce dark area behind text
|
|
// irq::@29
|
|
__b29:
|
|
// [27] if(irq::i3#2<$13) goto irq::@30 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$13
|
|
bcc __b30
|
|
jmp __b31
|
|
// irq::@31
|
|
__b31:
|
|
// [28] irq::greet_offset#0 = greet_idx << 4 -- vbuyy=vbuz1_rol_4
|
|
// Set up greetings
|
|
lda.z greet_idx
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
tay
|
|
// [29] phi from irq::@31 to irq::@32 [phi:irq::@31->irq::@32]
|
|
__b32_from___b31:
|
|
// [29] phi irq::greet_offset#2 = irq::greet_offset#0 [phi:irq::@31->irq::@32#0] -- register_copy
|
|
// [29] phi irq::i4#2 = 0 [phi:irq::@31->irq::@32#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b32
|
|
// irq::@32
|
|
__b32:
|
|
// [30] if(irq::i4#2<$10) goto irq::@33 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$10
|
|
bcc __b33
|
|
jmp __b34
|
|
// irq::@34
|
|
__b34:
|
|
// [31] scroll_soft = -- scroll_soft -- vbuz1=_dec_vbuz1
|
|
dec.z scroll_soft
|
|
// [32] if(scroll_soft!=$ff) goto irq::@return -- vbuz1_neq_vbuc1_then_la1
|
|
ldz #$ff
|
|
cpz.z scroll_soft
|
|
bne __breturn
|
|
jmp __b35
|
|
// irq::@35
|
|
__b35:
|
|
// [33] scroll_soft = 7 -- vbuz1=vbuc1
|
|
ldz #7
|
|
stz.z scroll_soft
|
|
// [34] phi from irq::@35 to irq::@36 [phi:irq::@35->irq::@36]
|
|
__b36_from___b35:
|
|
// [34] phi irq::i5#2 = 0 [phi:irq::@35->irq::@36#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b36
|
|
// Move scroll on screen
|
|
// irq::@36
|
|
__b36:
|
|
// [35] if(irq::i5#2<$27) goto irq::@37 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$27
|
|
bcc __b37
|
|
jmp __b38
|
|
// irq::@38
|
|
__b38:
|
|
// [36] irq::nxt#0 = *scroll_ptr -- vbuaa=_deref_pbuz1
|
|
// Show next char
|
|
ldy #0
|
|
lda (scroll_ptr),y
|
|
// [37] scroll_ptr = ++ scroll_ptr -- pbuz1=_inc_pbuz1
|
|
inw.z scroll_ptr
|
|
// [38] if(irq::nxt#0!=0) goto irq::@40 -- vbuaa_neq_0_then_la1
|
|
cmp #0
|
|
bne __b40_from___b38
|
|
jmp __b39
|
|
// irq::@39
|
|
__b39:
|
|
// [39] scroll_ptr = SCROLL_TEXT -- pbuz1=pbuc1
|
|
lda #<SCROLL_TEXT
|
|
sta.z scroll_ptr
|
|
lda #>SCROLL_TEXT
|
|
sta.z scroll_ptr+1
|
|
// [40] irq::nxt#1 = *scroll_ptr -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (scroll_ptr),y
|
|
// [41] phi from irq::@38 irq::@39 to irq::@40 [phi:irq::@38/irq::@39->irq::@40]
|
|
__b40_from___b38:
|
|
__b40_from___b39:
|
|
// [41] phi irq::nxt#2 = irq::nxt#0 [phi:irq::@38/irq::@39->irq::@40#0] -- register_copy
|
|
jmp __b40
|
|
// irq::@40
|
|
__b40:
|
|
// [42] irq::$33 = irq::nxt#2 & $bf -- vbuaa=vbuaa_band_vbuc1
|
|
and #$bf
|
|
// [43] *(DEFAULT_SCREEN+SCROLL_ROW*$28+$27) = irq::$33 -- _deref_pbuc1=vbuaa
|
|
sta DEFAULT_SCREEN+SCROLL_ROW*$28+$27
|
|
jmp __breturn
|
|
// irq::@return
|
|
__breturn:
|
|
// [44] return
|
|
// interrupt(isr_hardware_clobber_exit) -- isr_hardware_all_exit
|
|
plz
|
|
ply
|
|
plx
|
|
pla
|
|
rti
|
|
// irq::@37
|
|
__b37:
|
|
// [45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda DEFAULT_SCREEN+SCROLL_ROW*$28+1,x
|
|
sta DEFAULT_SCREEN+SCROLL_ROW*$28,x
|
|
// [46] irq::i5#1 = ++ irq::i5#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [34] phi from irq::@37 to irq::@36 [phi:irq::@37->irq::@36]
|
|
__b36_from___b37:
|
|
// [34] phi irq::i5#2 = irq::i5#1 [phi:irq::@37->irq::@36#0] -- register_copy
|
|
jmp __b36
|
|
// irq::@33
|
|
__b33:
|
|
// [47] irq::$29 = GREETING[irq::greet_offset#2] & $bf -- vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2
|
|
lda #$bf
|
|
and GREETING,y
|
|
// [48] (DEFAULT_SCREEN+GREET_ROW*$28+$d)[irq::i4#2] = irq::$29 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta DEFAULT_SCREEN+GREET_ROW*$28+$d,x
|
|
// [49] irq::greet_offset#1 = ++ irq::greet_offset#2 -- vbuyy=_inc_vbuyy
|
|
iny
|
|
// [50] irq::i4#1 = ++ irq::i4#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [29] phi from irq::@33 to irq::@32 [phi:irq::@33->irq::@32]
|
|
__b32_from___b33:
|
|
// [29] phi irq::greet_offset#2 = irq::greet_offset#1 [phi:irq::@33->irq::@32#0] -- register_copy
|
|
// [29] phi irq::i4#2 = irq::i4#1 [phi:irq::@33->irq::@32#1] -- register_copy
|
|
jmp __b32
|
|
// irq::@30
|
|
__b30:
|
|
// [51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1
|
|
lda rasters+SCROLL_Y,x
|
|
lsr
|
|
// [52] irq::$27 = irq::$26 & 7 -- vbuaa=vbuaa_band_vbuc1
|
|
and #7
|
|
// [53] (rasters+SCROLL_Y)[irq::i3#2] = irq::$27 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta rasters+SCROLL_Y,x
|
|
// [54] irq::i3#1 = ++ irq::i3#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [26] phi from irq::@30 to irq::@29 [phi:irq::@30->irq::@29]
|
|
__b29_from___b30:
|
|
// [26] phi irq::i3#2 = irq::i3#1 [phi:irq::@30->irq::@29#0] -- register_copy
|
|
jmp __b29
|
|
// irq::@23
|
|
__b23:
|
|
// [55] irq::idx#0 = SINE[irq::sin_bar#2] -- vbuxx=pbuc1_derefidx_vbuz1
|
|
ldy.z sin_bar
|
|
ldx SINE,y
|
|
// [56] irq::barcol#0 = irq::barcnt#2 << 4 -- vbuyy=vbuz1_rol_4
|
|
lda.z barcnt
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
tay
|
|
// [57] phi from irq::@23 to irq::@24 [phi:irq::@23->irq::@24]
|
|
__b24_from___b23:
|
|
// [57] phi irq::idx#3 = irq::idx#0 [phi:irq::@23->irq::@24#0] -- register_copy
|
|
// [57] phi irq::barcol#3 = irq::barcol#0 [phi:irq::@23->irq::@24#1] -- register_copy
|
|
// [57] phi irq::i1#2 = 0 [phi:irq::@23->irq::@24#2] -- vbuzz=vbuc1
|
|
ldz #0
|
|
jmp __b24
|
|
// irq::@24
|
|
__b24:
|
|
// [58] if(irq::i1#2<$10) goto irq::@25 -- vbuzz_lt_vbuc1_then_la1
|
|
cpz #$10
|
|
bcc __b25
|
|
// [59] phi from irq::@24 to irq::@26 [phi:irq::@24->irq::@26]
|
|
__b26_from___b24:
|
|
// [59] phi irq::idx#4 = irq::idx#3 [phi:irq::@24->irq::@26#0] -- register_copy
|
|
// [59] phi irq::barcol#4 = irq::barcol#3 [phi:irq::@24->irq::@26#1] -- register_copy
|
|
// [59] phi irq::i2#2 = 0 [phi:irq::@24->irq::@26#2] -- vbuzz=vbuc1
|
|
ldz #0
|
|
jmp __b26
|
|
// irq::@26
|
|
__b26:
|
|
// [60] if(irq::i2#2<$f) goto irq::@27 -- vbuzz_lt_vbuc1_then_la1
|
|
cpz #$f
|
|
bcc __b27
|
|
jmp __b28
|
|
// irq::@28
|
|
__b28:
|
|
// [61] irq::sin_bar#1 = irq::sin_bar#2 + $a -- vbuz1=vbuz1_plus_vbuc1
|
|
lda #$a
|
|
clc
|
|
adc.z sin_bar
|
|
sta.z sin_bar
|
|
// [62] irq::barcnt#1 = ++ irq::barcnt#2 -- vbuz1=_inc_vbuz1
|
|
inc.z barcnt
|
|
// [24] phi from irq::@28 to irq::@22 [phi:irq::@28->irq::@22]
|
|
__b22_from___b28:
|
|
// [24] phi irq::sin_bar#2 = irq::sin_bar#1 [phi:irq::@28->irq::@22#0] -- register_copy
|
|
// [24] phi irq::barcnt#2 = irq::barcnt#1 [phi:irq::@28->irq::@22#1] -- register_copy
|
|
jmp __b22
|
|
// irq::@27
|
|
__b27:
|
|
// [63] irq::barcol#2 = -- irq::barcol#4 -- vbuyy=_dec_vbuyy
|
|
dey
|
|
// [64] rasters[irq::idx#4] = irq::barcol#2 -- pbuc1_derefidx_vbuxx=vbuyy
|
|
tya
|
|
sta rasters,x
|
|
// [65] irq::idx#2 = ++ irq::idx#4 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [66] irq::i2#1 = ++ irq::i2#2 -- vbuzz=_inc_vbuzz
|
|
inz
|
|
// [59] phi from irq::@27 to irq::@26 [phi:irq::@27->irq::@26]
|
|
__b26_from___b27:
|
|
// [59] phi irq::idx#4 = irq::idx#2 [phi:irq::@27->irq::@26#0] -- register_copy
|
|
// [59] phi irq::barcol#4 = irq::barcol#2 [phi:irq::@27->irq::@26#1] -- register_copy
|
|
// [59] phi irq::i2#2 = irq::i2#1 [phi:irq::@27->irq::@26#2] -- register_copy
|
|
jmp __b26
|
|
// irq::@25
|
|
__b25:
|
|
// [67] rasters[irq::idx#3] = irq::barcol#3 -- pbuc1_derefidx_vbuxx=vbuyy
|
|
tya
|
|
sta rasters,x
|
|
// [68] irq::idx#1 = ++ irq::idx#3 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [69] irq::barcol#1 = ++ irq::barcol#3 -- vbuyy=_inc_vbuyy
|
|
iny
|
|
// [70] irq::i1#1 = ++ irq::i1#2 -- vbuzz=_inc_vbuzz
|
|
inz
|
|
// [57] phi from irq::@25 to irq::@24 [phi:irq::@25->irq::@24]
|
|
__b24_from___b25:
|
|
// [57] phi irq::idx#3 = irq::idx#1 [phi:irq::@25->irq::@24#0] -- register_copy
|
|
// [57] phi irq::barcol#3 = irq::barcol#1 [phi:irq::@25->irq::@24#1] -- register_copy
|
|
// [57] phi irq::i1#2 = irq::i1#1 [phi:irq::@25->irq::@24#2] -- register_copy
|
|
jmp __b24
|
|
// irq::@20
|
|
__b20:
|
|
// [71] rasters[irq::l#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta rasters,x
|
|
// [72] irq::l#1 = ++ irq::l#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [21] phi from irq::@20 to irq::@19 [phi:irq::@20->irq::@19]
|
|
__b19_from___b20:
|
|
// [21] phi irq::l#2 = irq::l#1 [phi:irq::@20->irq::@19#0] -- register_copy
|
|
jmp __b19
|
|
// irq::@18
|
|
__b18:
|
|
// [73] irq::col1#0 = SINE[irq::sin_col#2] >> 2 -- vbuaa=pbuc1_derefidx_vbuyy_ror_2
|
|
// Greeting colors
|
|
lda SINE,y
|
|
lsr
|
|
lsr
|
|
// [74] (COLORRAM+GREET_ROW*$28)[irq::i#2] = irq::col1#0 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+GREET_ROW*$28,x
|
|
// [75] irq::col1#1 = irq::col1#0 >> 1 -- vbuaa=vbuaa_ror_1
|
|
// Logo colors
|
|
lsr
|
|
// [76] (COLORRAM+LOGO_ROW*$28-1)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28-1,x
|
|
// [77] (COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+1*$28-2,x
|
|
// [78] (COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+2*$28-3,x
|
|
// [79] (COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+3*$28-4,x
|
|
// [80] (COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+4*$28-5,x
|
|
// [81] (COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+5*$28-6,x
|
|
// [82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
|
|
// Scroll colors
|
|
lda PAL_GREEN,y
|
|
sta COLORRAM+SCROLL_ROW*$28,x
|
|
// [83] irq::sin_col#1 = ++ irq::sin_col#2 -- vbuyy=_inc_vbuyy
|
|
iny
|
|
// [84] irq::i#1 = ++ irq::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [19] phi from irq::@18 to irq::@17 [phi:irq::@18->irq::@17]
|
|
__b17_from___b18:
|
|
// [19] phi irq::sin_col#2 = irq::sin_col#1 [phi:irq::@18->irq::@17#0] -- register_copy
|
|
// [19] phi irq::i#2 = irq::i#1 [phi:irq::@18->irq::@17#1] -- register_copy
|
|
jmp __b17
|
|
// irq::@3
|
|
__b3:
|
|
// [85] irq::col#0 = rasters[irq::line#10] -- vbuaa=pbuc1_derefidx_vbuz1
|
|
ldy.z line
|
|
lda rasters,y
|
|
// [86] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) = irq::col#0 -- _deref_pbuc1=vbuaa
|
|
sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR
|
|
// [87] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) = irq::col#0 -- _deref_pbuc1=vbuaa
|
|
sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR
|
|
// [88] if(irq::line#10<SCROLL_Y) goto irq::@5 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z line
|
|
cmp #SCROLL_Y
|
|
bcc __b5
|
|
jmp __b11
|
|
// irq::@11
|
|
__b11:
|
|
// [89] if(irq::line#10==SCROLL_Y) goto irq::@6 -- vbuz1_eq_vbuc1_then_la1
|
|
ldz #SCROLL_Y
|
|
cpz.z line
|
|
beq __b6
|
|
jmp __b12
|
|
// irq::@12
|
|
__b12:
|
|
// [90] if(irq::line#10==SCROLL_Y+SCROLL_BLACKBARS) goto irq::@7 -- vbuz1_eq_vbuc1_then_la1
|
|
ldz #SCROLL_Y+SCROLL_BLACKBARS
|
|
cpz.z line
|
|
beq __b7
|
|
jmp __b13
|
|
// irq::@13
|
|
__b13:
|
|
// [91] if(irq::line#10!=SCROLL_Y+SCROLL_BLACKBARS+1) goto irq::@8 -- vbuz1_neq_vbuc1_then_la1
|
|
ldz #SCROLL_Y+SCROLL_BLACKBARS+1
|
|
cpz.z line
|
|
bne __b8_from___b13
|
|
jmp __b14
|
|
// irq::@14
|
|
__b14:
|
|
// [92] irq::zoomval#0 = SINE[greet_zoomx] -- vbuaa=pbuc1_derefidx_vbuz1
|
|
// if raster position > SCROLL_Y pos do zoom
|
|
ldy.z greet_zoomx
|
|
lda SINE,y
|
|
// [93] greet_zoomx = ++ greet_zoomx -- vbuz1=_inc_vbuz1
|
|
inc.z greet_zoomx
|
|
// [94] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = irq::zoomval#0 -- _deref_pbuc1=vbuaa
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL
|
|
// [95] irq::$10 = irq::zoomval#0 + 1 -- vbuaa=vbuaa_plus_1
|
|
inc
|
|
// [96] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = irq::$10 -- _deref_pbuc1=vbuaa
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
|
|
// [97] if(greet_zoomx!=0) goto irq::@8 -- vbuz1_neq_0_then_la1
|
|
lda.z greet_zoomx
|
|
bne __b8_from___b14
|
|
jmp __b15
|
|
// irq::@15
|
|
__b15:
|
|
// [98] greet_idx = ++ greet_idx -- vbuz1=_inc_vbuz1
|
|
inc.z greet_idx
|
|
// [99] if(greet_idx!=GREET_COUNT) goto irq::@8 -- vbuz1_neq_vbuc1_then_la1
|
|
ldz #GREET_COUNT
|
|
cpz.z greet_idx
|
|
bne __b8_from___b15
|
|
jmp __b16
|
|
// irq::@16
|
|
__b16:
|
|
// [100] greet_idx = 0 -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z greet_idx
|
|
// [101] phi from irq::@13 irq::@14 irq::@15 irq::@16 irq::@5 irq::@6 irq::@7 to irq::@8 [phi:irq::@13/irq::@14/irq::@15/irq::@16/irq::@5/irq::@6/irq::@7->irq::@8]
|
|
__b8_from___b13:
|
|
__b8_from___b14:
|
|
__b8_from___b15:
|
|
__b8_from___b16:
|
|
__b8_from___b5:
|
|
__b8_from___b6:
|
|
__b8_from___b7:
|
|
// [101] phi irq::wobble_idx#7 = irq::wobble_idx#10 [phi:irq::@13/irq::@14/irq::@15/irq::@16/irq::@5/irq::@6/irq::@7->irq::@8#0] -- register_copy
|
|
jmp __b8
|
|
// irq::@8
|
|
__b8:
|
|
// [102] irq::raster#0 = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuaa=_deref_pbuc1
|
|
// Wait for the next raster line
|
|
lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
jmp __b9
|
|
// irq::@9
|
|
__b9:
|
|
// [103] if(irq::raster#0==*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq::@9 -- vbuaa_eq__deref_pbuc1_then_la1
|
|
cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
beq __b9
|
|
jmp __b10
|
|
// irq::@10
|
|
__b10:
|
|
// [104] irq::line#1 = ++ irq::line#10 -- vbuz1=_inc_vbuz1
|
|
inc.z line
|
|
// [14] phi from irq::@10 to irq::@2 [phi:irq::@10->irq::@2]
|
|
__b2_from___b10:
|
|
// [14] phi irq::wobble_idx#10 = irq::wobble_idx#7 [phi:irq::@10->irq::@2#0] -- register_copy
|
|
// [14] phi irq::line#10 = irq::line#1 [phi:irq::@10->irq::@2#1] -- register_copy
|
|
jmp __b2
|
|
// irq::@7
|
|
__b7:
|
|
// [105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 -- _deref_pbuc1=vbuc2
|
|
// if raster position > SCROLL_Y pos do nozoom
|
|
// default value
|
|
ldz #$50
|
|
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
|
|
jmp __b8_from___b7
|
|
// irq::@6
|
|
__b6:
|
|
// [106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 -- _deref_pbuc1=vbuc2
|
|
// if raster position = SCROLL_Y pos do scroll
|
|
// no wobbling from this point
|
|
ldz #$50
|
|
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
|
|
// [107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft -- _deref_pbuc1=vbuz1
|
|
// set softscroll
|
|
lda.z scroll_soft
|
|
sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2
|
|
jmp __b8_from___b6
|
|
// irq::@5
|
|
__b5:
|
|
// [108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10] -- _deref_pbuc1=pbuc2_derefidx_vbuxx
|
|
// if raster position < SCROLL_Y pos do wobble Logo!
|
|
lda SINE,x
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
|
|
// [109] irq::wobble_idx#1 = ++ irq::wobble_idx#10 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66 -- _deref_pbuc1=vbuc2
|
|
// No zooming
|
|
ldz #$66
|
|
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL
|
|
jmp __b8_from___b5
|
|
}
|
|
// main
|
|
main: {
|
|
// [111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 -- _deref_pbuc1=vbuc2
|
|
// Enable MEGA65 features
|
|
ldz #$47
|
|
stz VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY
|
|
// [112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 -- _deref_pbuc1=vbuc2
|
|
ldz #$53
|
|
stz VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY
|
|
// [113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
|
|
// Enable 48MHz fast mode
|
|
lda #$40
|
|
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB
|
|
// [114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
|
|
lda #$40
|
|
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC
|
|
// asm { lda#0 }
|
|
// Initialize music
|
|
lda #0
|
|
// [116] callexecute *songInit -- call__deref_pprc1
|
|
jsr songInit
|
|
// [117] phi from main to main::@1 [phi:main->main::@1]
|
|
__b1_from_main:
|
|
jmp __b1
|
|
// main::@1
|
|
__b1:
|
|
// [118] call memset
|
|
// Clear screen
|
|
// [144] phi from main::@1 to memset [phi:main::@1->memset]
|
|
memset_from___b1:
|
|
jsr memset
|
|
// [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
__b2_from___b1:
|
|
// [119] phi main::i1#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b2
|
|
// Put MEGA logo on screen
|
|
// main::@2
|
|
__b2:
|
|
// [120] if(main::i1#2<$bc*SIZEOF_CHAR) goto main::@3 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$bc*SIZEOF_CHAR
|
|
bcc __b3
|
|
// [121] phi from main::@2 to main::@4 [phi:main::@2->main::@4]
|
|
__b4_from___b2:
|
|
// [121] phi main::i2#2 = 0 [phi:main::@2->main::@4#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b4
|
|
// Put '*' as default greeting
|
|
// main::@4
|
|
__b4:
|
|
// [122] if(main::i2#2<$28) goto main::@5 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$28
|
|
bcc __b5
|
|
// [123] phi from main::@4 to main::@6 [phi:main::@4->main::@6]
|
|
__b6_from___b4:
|
|
// [123] phi main::i#2 = 0 [phi:main::@4->main::@6#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b6
|
|
// [123] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
|
|
__b6_from___b6:
|
|
// [123] phi main::i#2 = main::i#1 [phi:main::@6->main::@6#0] -- register_copy
|
|
jmp __b6
|
|
// main::@6
|
|
__b6:
|
|
// [124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda PAL_RED,x
|
|
sta PALETTE_RED,x
|
|
// [125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda PAL_GREEN,x
|
|
sta PALETTE_GREEN,x
|
|
// [126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda PAL_BLUE,x
|
|
sta PALETTE_BLUE,x
|
|
// [127] main::i#1 = ++ main::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [128] if(main::i#1!=0) goto main::@6 -- vbuxx_neq_0_then_la1
|
|
cpx #0
|
|
bne __b6_from___b6
|
|
jmp __b7
|
|
// main::@7
|
|
__b7:
|
|
// asm { sei }
|
|
// Set up raster interrupts C64 style
|
|
sei
|
|
// [130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL -- _deref_pbuc1=vbuc2
|
|
// Disable CIA 1 Timer IRQ
|
|
ldz #CIA_INTERRUPT_CLEAR_ALL
|
|
stz CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT
|
|
// [131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y -- _deref_pbuc1=vbuc2
|
|
// Set raster line to 0x16
|
|
ldz #IRQ_Y
|
|
stz VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
// [132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
|
|
lda #$7f
|
|
and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1
|
|
sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1
|
|
// [133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER -- _deref_pbuc1=vbuc2
|
|
// Enable Raster Interrupt
|
|
ldz #IRQ_RASTER
|
|
stz VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE
|
|
// [134] *HARDWARE_IRQ = &irq -- _deref_qprc1=pprc2
|
|
// Set the IRQ routine
|
|
lda #<irq
|
|
sta HARDWARE_IRQ
|
|
lda #>irq
|
|
sta HARDWARE_IRQ+1
|
|
// [135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2
|
|
// no kernal or BASIC rom visible
|
|
ldz #PROCPORT_DDR_MEMORY_MASK
|
|
stz.z PROCPORT_DDR
|
|
// [136] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2
|
|
ldz #PROCPORT_RAM_IO
|
|
stz.z PROCPORT
|
|
// [137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1 -- _deref_pbuc1=vbuc2
|
|
// open sideborder
|
|
ldz #1
|
|
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO
|
|
// asm { cli }
|
|
// Enable IRQ
|
|
cli
|
|
// [139] phi from main::@7 main::@8 to main::@8 [phi:main::@7/main::@8->main::@8]
|
|
__b8_from___b7:
|
|
__b8_from___b8:
|
|
jmp __b8
|
|
// main::@8
|
|
__b8:
|
|
jmp __b8_from___b8
|
|
// main::@5
|
|
__b5:
|
|
// [140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*' -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #'*'
|
|
sta DEFAULT_SCREEN+GREET_ROW*$28,x
|
|
// [141] main::i2#1 = ++ main::i2#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [121] phi from main::@5 to main::@4 [phi:main::@5->main::@4]
|
|
__b4_from___b5:
|
|
// [121] phi main::i2#2 = main::i2#1 [phi:main::@5->main::@4#0] -- register_copy
|
|
jmp __b4
|
|
// main::@3
|
|
__b3:
|
|
// [142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda MEGA_LOGO,x
|
|
sta DEFAULT_SCREEN+LOGO_ROW*$28,x
|
|
// [143] main::i1#1 = ++ main::i1#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [119] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
|
|
__b2_from___b3:
|
|
// [119] phi main::i1#2 = main::i1#1 [phi:main::@3->main::@2#0] -- register_copy
|
|
jmp __b2
|
|
}
|
|
// memset
|
|
// 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, char c, unsigned int num)
|
|
memset: {
|
|
.const c = ' '
|
|
.const num = $28*$19
|
|
.label str = DEFAULT_SCREEN
|
|
.label end = str+num
|
|
.label dst = 2
|
|
// [145] phi from memset to memset::@1 [phi:memset->memset::@1]
|
|
__b1_from_memset:
|
|
// [145] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
|
|
lda #<str
|
|
sta.z dst
|
|
lda #>str
|
|
sta.z dst+1
|
|
jmp __b1
|
|
// memset::@1
|
|
__b1:
|
|
// [146] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1
|
|
lda.z dst+1
|
|
cmp #>end
|
|
bne __b2
|
|
lda.z dst
|
|
cmp #<end
|
|
bne __b2
|
|
jmp __breturn
|
|
// memset::@return
|
|
__breturn:
|
|
// [147] return
|
|
rts
|
|
// memset::@2
|
|
__b2:
|
|
// [148] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1
|
|
lda #c
|
|
ldy #0
|
|
sta (dst),y
|
|
// [149] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
|
|
inw.z dst
|
|
// [145] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
|
|
__b1_from___b2:
|
|
// [145] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// File Data
|
|
.segment Data
|
|
// A MEGA logo
|
|
MEGA_LOGO: .byte $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf
|
|
// Greetings
|
|
GREETING: .text " DOUBLEFLASH ADTBM SY2002 TAYGER SERIOUSLY LIBI IN PARADIZE LGB BLUEWAYSW SAUSAGE BIT SHIFTER INDIOCOLIFA GRUMPYNINJA 0-LIMITS CHEVERON DR. COMMODORE "
|
|
.byte 0
|
|
// Scroll text
|
|
SCROLL_TEXT: .text " THIS SMALL MEGA65 RASTER INTRO ... WAS MADE BY DEFT IN 2015 ... AND BROUGHT BACK TO LIFE 5 YEARS LATER IN 2020 ... BECAUSE THE MEGA65 HARDWARE CHANGED SO MUCH IN THE PAST 5 YEARS ... UNFORTUNATELY MY ASSEMBLER SKILLS DID NOT SO THIS IS THE FIRST APPROACH TO GET BETTER ... HOPEFULLY DR.MUTTI WILL HAVE TO SCOLD ME LESS ... THE PAST 5 YEARS HAVE BEEN AN UNFORGETTABLE & UNIQUE RIDE ... IF YOU DO WATCH THIS DEMO ON YOUR VERY OWN MEGA65 THERE IS ENOUGH EVIDENCE OF WHAT WE ACTUALLY ACHIEVED ... BELOW ARE THE GREETINGS TO DEAR AND VERY SPECIAL PEOPLE WHO HELPED TO GET THERE ... THANK YOU SO MUCH FOR YOUR SUPPORT AND FOR NOT GIVING UP ... DUAL SID TUNE BY RAYDEN OF ALPHA FLIGHT ... THIS SCROLLY WILL NOW RESTART *WRAP* "
|
|
.byte 0
|
|
.pc = $fc0 "SONG"
|
|
// Music at an absolute address
|
|
SONG:
|
|
.import c64 "DiscoZak_2SID_patched.prg"
|
|
|
|
.pc = $2c00 "SINE"
|
|
// Sine Values 0-183
|
|
SINE:
|
|
.fill 256, 91.5 + 91.5*sin(i*2*PI/256)
|
|
|
|
.pc = $3000 "rasters"
|
|
// Moving Raster Bars
|
|
rasters: .fill RASTER_LINES, 0
|
|
.pc = $2d00 "PAL_RED"
|
|
PAL_RED: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff
|
|
.pc = $2e00 "PAL_GREEN"
|
|
PAL_GREEN: .byte 0, $e3, $c4, $b5, $96, $87, $78, $79, $a, $fa, $eb, $dc, $bd, $ae, $af, $ff, $e2, $b3, $a4, $85, $76, $67, $48, $49, $d9, $da, $bb, $bc, $8d, $8e, $7f, $ff, $42, 3, 4, $e4, $d5, $c6, $b7, $a8, $39, $3a, $1b, $2c, $fc, $fd, $de, $df, $61, $32, $13, 4, $e4, $e5, $d6, $d7, $78, $59, $4a, $4b, $2c, $1d, $e, $fe, $e0, $b1, $a2, $93, $74, $75, $56, $57, $e7, $d8, $79, $ca, $ab, $9c, $9d, $8e, $f0, $d1, $c2, $a3, $84, $85, $76, $77, 8, 9, $f9, $fa, $db, $cc, $bd, $ae, $61, $22, $23, $14, $f4, $e5, $d6, $c7, $58, $59, $3a, $3b, $1c, $d, $fd, $fe, $92, $53, $44, $35, $16, $f6, $e7, $e8, $79, $6a, $5b, $4c, $2d, $3e, $1f, $ef, $53, $14, 5, $e5, $c6, $b7, $a8, $99, $2a, $2b, $c, $d, $dd, $ce, $cf, $ff, $f3, $b4, $95, $86, $57, $38, $29, $1a, $ba, $ab, $9c, $8d, $6e, $5f, $ff, $ff, $95, $56, $27, $18, $e8, $d9, $ca, $bb, $4c, $3d, $2e, $1f, $ef, $ff, $ff, $ff, $c5, $86, $57, $38, $19, $a, $ea, $db, $6c, $5d, $3e, $3f, $ef, $ff, $ff, $ff, $65, $26, 7, $e7, $c8, $b9, $9a, $9b, $2c, $1d, $fd, $fe, $cf, $ff, $ff, $ff, $b4, $75, $56, $37, $28, $19, $e9, $ea, $7b, $6c, $5d, $4e, $2f, $ff, $ff, $ff, $c3, $94, $75, $56, $47, $38, $19, $1a, $aa, $ab, $7c, $7d, $5e, $4f, $ff, $ff, $e2, $a3, $94, $85, $76, $67, $38, $49, $d9, $ca, $ab, $bc, $7d, $7e, $6f, $ff
|
|
.pc = $2f00 "PAL_BLUE"
|
|
PAL_BLUE: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, 0, 0, 0, 0, $c0, $b1, $a2, $a3, $34, $35, $26, $27, $f7, $f8, $f9, $ea, 0, 0, $30, $11, $22, $13, $14, 5, $b5, $96, $97, $98, $79, $6a, $5b, $4c, $81, $42, $43, $34, 5, 6, $f6, $f7, $78, $69, $5a, $5b, $4c, $3d, $1e, $f, $17, $c7, $a8, $89, $5a, $5b, $3c, $1d, $ad, $9e, $7f, $ff, $ff, $ff, $ff, $ff, $78, 9, $e9, $ca, $ab, $7c, $5d, $5e, $de, $cf, $ff, $ff, $ff, $ff, $ff, $ff, $59, $a, $ca, $bb, $8c, $6d, $3e, $2f, $bf, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $49, $f9, $da, $ab, $7c, $5d, $2e, $2f, $af, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $48, $d8, $b9, $aa, $7b, $5c, $2d, $2e, $be, $9f, $ff, $ff, $ff, $ff, $ff, $ff, 7, $97, $88, $69, $4a, $2b, $1c, $2d, $9d, $7e, $6f, $ff, $ff, $ff, $ff, $ff, $81, $62, $53, $44, 5, 6, $f6, $e7, $78, $69, $5a, $5b, $3c, $2d, $2e, $1f, 0, 0, 0, 0, $b0, $b1, $a2, $b3, $44, $35, $36, $37, 8, $f8, $a, $b, 0, 0, 0, 0, 0, $70, $61, $62, $f2, $e3, $d4, $c5, $b6, $b7, $b8, $99, 0, 0, 0, 0, 0, 0, $f0, $f1, $82, $83, $84, $85, $66, $57, $58, $59, 0, 0, 0, 0, 0, $70, $61, $62, $e2, $e3, $d4, $d5, $b6, $a7, $b8, $a9, 0, 0, 0, 0, $a0, $b1, $a2, $a3, $44, $35, $26, $37, $f7, $19, $f9, $fa
|
|
|
|
ASSEMBLER OPTIMIZATIONS
|
|
Removing instruction jmp __init1
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b17
|
|
Removing instruction jmp __b19
|
|
Removing instruction jmp __b21
|
|
Removing instruction jmp __b22
|
|
Removing instruction jmp __b29
|
|
Removing instruction jmp __b31
|
|
Removing instruction jmp __b32
|
|
Removing instruction jmp __b34
|
|
Removing instruction jmp __b35
|
|
Removing instruction jmp __b36
|
|
Removing instruction jmp __b38
|
|
Removing instruction jmp __b39
|
|
Removing instruction jmp __b40
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b24
|
|
Removing instruction jmp __b26
|
|
Removing instruction jmp __b28
|
|
Removing instruction jmp __b11
|
|
Removing instruction jmp __b12
|
|
Removing instruction jmp __b13
|
|
Removing instruction jmp __b14
|
|
Removing instruction jmp __b15
|
|
Removing instruction jmp __b16
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp __b9
|
|
Removing instruction jmp __b10
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b6
|
|
Removing instruction jmp __b7
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction ldz #0
|
|
Replacing instruction lda.z line with TYA
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
Replacing label __b40_from___b38 with __b40
|
|
Replacing label __b8_from___b13 with __b8
|
|
Replacing label __b8_from___b14 with __b8
|
|
Replacing label __b8_from___b15 with __b8
|
|
Replacing label __b8_from___b7 with __b8
|
|
Replacing label __b8_from___b6 with __b8
|
|
Replacing label __b8_from___b5 with __b8
|
|
Replacing label __b6_from___b6 with __b6
|
|
Replacing label __b8_from___b8 with __b8
|
|
Removing instruction __b1_from___init1:
|
|
Removing instruction __b4_from___b2:
|
|
Removing instruction __b40_from___b38:
|
|
Removing instruction __b40_from___b39:
|
|
Removing instruction __b8_from___b13:
|
|
Removing instruction __b8_from___b14:
|
|
Removing instruction __b8_from___b15:
|
|
Removing instruction __b8_from___b16:
|
|
Removing instruction __b8_from___b5:
|
|
Removing instruction __b8_from___b6:
|
|
Removing instruction __b8_from___b7:
|
|
Removing instruction __b1_from_main:
|
|
Removing instruction __b6_from___b6:
|
|
Removing instruction __b8_from___b7:
|
|
Removing instruction __b8_from___b8:
|
|
Succesful ASM optimization Pass5RedundantLabelElimination
|
|
Removing instruction __init1:
|
|
Removing instruction __b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b2_from_irq:
|
|
Removing instruction __b4:
|
|
Removing instruction __b1:
|
|
Removing instruction __b17_from___b1:
|
|
Removing instruction __b19_from___b17:
|
|
Removing instruction __b21:
|
|
Removing instruction __b22_from___b21:
|
|
Removing instruction __b29_from___b22:
|
|
Removing instruction __b31:
|
|
Removing instruction __b32_from___b31:
|
|
Removing instruction __b34:
|
|
Removing instruction __b35:
|
|
Removing instruction __b36_from___b35:
|
|
Removing instruction __b38:
|
|
Removing instruction __b39:
|
|
Removing instruction __b36_from___b37:
|
|
Removing instruction __b32_from___b33:
|
|
Removing instruction __b29_from___b30:
|
|
Removing instruction __b24_from___b23:
|
|
Removing instruction __b26_from___b24:
|
|
Removing instruction __b28:
|
|
Removing instruction __b22_from___b28:
|
|
Removing instruction __b26_from___b27:
|
|
Removing instruction __b24_from___b25:
|
|
Removing instruction __b19_from___b20:
|
|
Removing instruction __b17_from___b18:
|
|
Removing instruction __b11:
|
|
Removing instruction __b12:
|
|
Removing instruction __b13:
|
|
Removing instruction __b14:
|
|
Removing instruction __b15:
|
|
Removing instruction __b16:
|
|
Removing instruction __b10:
|
|
Removing instruction __b2_from___b10:
|
|
Removing instruction __b1:
|
|
Removing instruction memset_from___b1:
|
|
Removing instruction __b2_from___b1:
|
|
Removing instruction __b4_from___b2:
|
|
Removing instruction __b6_from___b4:
|
|
Removing instruction __b7:
|
|
Removing instruction __b4_from___b5:
|
|
Removing instruction __b2_from___b3:
|
|
Removing instruction __b1_from_memset:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from___b2:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
Removing instruction jmp __b6
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction ldz #0
|
|
Removing instruction ldy #0
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
Fixing long branch [145] bne __b3 to beq
|
|
Fixing long branch [155] bcc __b18 to bcs
|
|
Fixing long branch [162] bne __b20 to beq
|
|
|
|
FINAL SYMBOL TABLE
|
|
__constant struct MOS6526_CIA * const CIA1 = (struct MOS6526_CIA *) 56320
|
|
__constant const char CIA_INTERRUPT_CLEAR_ALL = $7f
|
|
__constant char * const COLORRAM = (char *) 55296
|
|
__constant char * const DEFAULT_SCREEN = (char *) 1024
|
|
__constant char GREETING[] = " DOUBLEFLASH ADTBM SY2002 TAYGER SERIOUSLY LIBI IN PARADIZE LGB BLUEWAYSW SAUSAGE BIT SHIFTER INDIOCOLIFA GRUMPYNINJA 0-LIMITS CHEVERON DR. COMMODORE "
|
|
__constant const char GREET_COUNT = $f
|
|
__constant const char GREET_ROW = $14
|
|
__constant void (** const HARDWARE_IRQ)() = (void (**)()) 65534
|
|
__constant const char IRQ_RASTER = 1
|
|
__constant const char IRQ_Y = $16
|
|
__constant const char LOGO_ROW = 3
|
|
__constant char MEGA_LOGO[] = { $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf }
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_RASLINE0 = $6f
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO = $5c
|
|
__constant char OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c
|
|
__constant char OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21
|
|
__constant char OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20
|
|
__constant char OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f
|
|
__constant char OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = $11
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19
|
|
__constant char OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
|
|
__constant char * const PALETTE_BLUE = (char *) 54016
|
|
__constant char * const PALETTE_GREEN = (char *) 53760
|
|
__constant char * const PALETTE_RED = (char *) 53504
|
|
__constant char PAL_BLUE[] = { 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, 0, 0, 0, 0, $c0, $b1, $a2, $a3, $34, $35, $26, $27, $f7, $f8, $f9, $ea, 0, 0, $30, $11, $22, $13, $14, 5, $b5, $96, $97, $98, $79, $6a, $5b, $4c, $81, $42, $43, $34, 5, 6, $f6, $f7, $78, $69, $5a, $5b, $4c, $3d, $1e, $f, $17, $c7, $a8, $89, $5a, $5b, $3c, $1d, $ad, $9e, $7f, $ff, $ff, $ff, $ff, $ff, $78, 9, $e9, $ca, $ab, $7c, $5d, $5e, $de, $cf, $ff, $ff, $ff, $ff, $ff, $ff, $59, $a, $ca, $bb, $8c, $6d, $3e, $2f, $bf, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $49, $f9, $da, $ab, $7c, $5d, $2e, $2f, $af, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $48, $d8, $b9, $aa, $7b, $5c, $2d, $2e, $be, $9f, $ff, $ff, $ff, $ff, $ff, $ff, 7, $97, $88, $69, $4a, $2b, $1c, $2d, $9d, $7e, $6f, $ff, $ff, $ff, $ff, $ff, $81, $62, $53, $44, 5, 6, $f6, $e7, $78, $69, $5a, $5b, $3c, $2d, $2e, $1f, 0, 0, 0, 0, $b0, $b1, $a2, $b3, $44, $35, $36, $37, 8, $f8, $a, $b, 0, 0, 0, 0, 0, $70, $61, $62, $f2, $e3, $d4, $c5, $b6, $b7, $b8, $99, 0, 0, 0, 0, 0, 0, $f0, $f1, $82, $83, $84, $85, $66, $57, $58, $59, 0, 0, 0, 0, 0, $70, $61, $62, $e2, $e3, $d4, $d5, $b6, $a7, $b8, $a9, 0, 0, 0, 0, $a0, $b1, $a2, $a3, $44, $35, $26, $37, $f7, $19, $f9, $fa }
|
|
__constant char PAL_GREEN[] = { 0, $e3, $c4, $b5, $96, $87, $78, $79, $a, $fa, $eb, $dc, $bd, $ae, $af, $ff, $e2, $b3, $a4, $85, $76, $67, $48, $49, $d9, $da, $bb, $bc, $8d, $8e, $7f, $ff, $42, 3, 4, $e4, $d5, $c6, $b7, $a8, $39, $3a, $1b, $2c, $fc, $fd, $de, $df, $61, $32, $13, 4, $e4, $e5, $d6, $d7, $78, $59, $4a, $4b, $2c, $1d, $e, $fe, $e0, $b1, $a2, $93, $74, $75, $56, $57, $e7, $d8, $79, $ca, $ab, $9c, $9d, $8e, $f0, $d1, $c2, $a3, $84, $85, $76, $77, 8, 9, $f9, $fa, $db, $cc, $bd, $ae, $61, $22, $23, $14, $f4, $e5, $d6, $c7, $58, $59, $3a, $3b, $1c, $d, $fd, $fe, $92, $53, $44, $35, $16, $f6, $e7, $e8, $79, $6a, $5b, $4c, $2d, $3e, $1f, $ef, $53, $14, 5, $e5, $c6, $b7, $a8, $99, $2a, $2b, $c, $d, $dd, $ce, $cf, $ff, $f3, $b4, $95, $86, $57, $38, $29, $1a, $ba, $ab, $9c, $8d, $6e, $5f, $ff, $ff, $95, $56, $27, $18, $e8, $d9, $ca, $bb, $4c, $3d, $2e, $1f, $ef, $ff, $ff, $ff, $c5, $86, $57, $38, $19, $a, $ea, $db, $6c, $5d, $3e, $3f, $ef, $ff, $ff, $ff, $65, $26, 7, $e7, $c8, $b9, $9a, $9b, $2c, $1d, $fd, $fe, $cf, $ff, $ff, $ff, $b4, $75, $56, $37, $28, $19, $e9, $ea, $7b, $6c, $5d, $4e, $2f, $ff, $ff, $ff, $c3, $94, $75, $56, $47, $38, $19, $1a, $aa, $ab, $7c, $7d, $5e, $4f, $ff, $ff, $e2, $a3, $94, $85, $76, $67, $38, $49, $d9, $ca, $ab, $bc, $7d, $7e, $6f, $ff }
|
|
__constant char PAL_RED[] = { 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff }
|
|
__constant char * const PROCPORT = (char *) 1
|
|
__constant char * const PROCPORT_DDR = (char *) 0
|
|
__constant const char PROCPORT_DDR_MEMORY_MASK = 7
|
|
__constant const char PROCPORT_RAM_IO = 5
|
|
__constant const char RASTER_LINES = $d8
|
|
__constant const char SCROLL_BLACKBARS = $13
|
|
__constant const char SCROLL_ROW = $d
|
|
__constant char SCROLL_TEXT[] = " THIS SMALL MEGA65 RASTER INTRO ... WAS MADE BY DEFT IN 2015 ... AND BROUGHT BACK TO LIFE 5 YEARS LATER IN 2020 ... BECAUSE THE MEGA65 HARDWARE CHANGED SO MUCH IN THE PAST 5 YEARS ... UNFORTUNATELY MY ASSEMBLER SKILLS DID NOT SO THIS IS THE FIRST APPROACH TO GET BETTER ... HOPEFULLY DR.MUTTI WILL HAVE TO SCOLD ME LESS ... THE PAST 5 YEARS HAVE BEEN AN UNFORGETTABLE & UNIQUE RIDE ... IF YOU DO WATCH THIS DEMO ON YOUR VERY OWN MEGA65 THERE IS ENOUGH EVIDENCE OF WHAT WE ACTUALLY ACHIEVED ... BELOW ARE THE GREETINGS TO DEAR AND VERY SPECIAL PEOPLE WHO HELPED TO GET THERE ... THANK YOU SO MUCH FOR YOUR SUPPORT AND FOR NOT GIVING UP ... DUAL SID TUNE BY RAYDEN OF ALPHA FLIGHT ... THIS SCROLLY WILL NOW RESTART *WRAP* "
|
|
__constant const char SCROLL_Y = $66
|
|
__constant char SINE[$100] = kickasm {{ .fill 256, 91.5 + 91.5*sin(i*2*PI/256)
|
|
}}
|
|
__constant char SIZEOF_CHAR = 1
|
|
__constant char SONG[] = kickasm {{ .import c64 "DiscoZak_2SID_patched.prg"
|
|
}}
|
|
__constant struct MOS6569_VICII * const VICII = (struct MOS6569_VICII *) 53248
|
|
__constant struct MOS4569_VICIII * const VICIII = (struct MOS4569_VICIII *) 53248
|
|
__constant struct MEGA65_VICIV * const VICIV = (struct MEGA65_VICIV *) 53248
|
|
void __start()
|
|
__loadstore volatile char greet_idx // zp[1]:8 0.6153846153846154
|
|
__loadstore volatile char greet_zoomx // zp[1]:7 1.3939393939393938
|
|
__interrupt(hardware_clobber) void irq()
|
|
char irq::$10 // reg byte a 22.0
|
|
char irq::$26 // reg byte a 22.0
|
|
char irq::$27 // reg byte a 22.0
|
|
char irq::$29 // reg byte a 22.0
|
|
char irq::$33 // reg byte a 4.0
|
|
char irq::barcnt
|
|
char irq::barcnt#1 // barcnt zp[1]:5 22.0
|
|
char irq::barcnt#2 // barcnt zp[1]:5 2.588235294117647
|
|
char irq::barcol
|
|
char irq::barcol#0 // reg byte y 22.0
|
|
char irq::barcol#1 // reg byte y 101.0
|
|
char irq::barcol#2 // reg byte y 75.75
|
|
char irq::barcol#3 // reg byte y 103.75
|
|
char irq::barcol#4 // reg byte y 151.5
|
|
char irq::col
|
|
char irq::col#0 // reg byte a 16.5
|
|
char irq::col1
|
|
char irq::col1#0 // reg byte a 16.5
|
|
char irq::col1#1 // reg byte a 12.833333333333334
|
|
char irq::greet_offset
|
|
char irq::greet_offset#0 // reg byte y 4.0
|
|
char irq::greet_offset#1 // reg byte y 11.0
|
|
char irq::greet_offset#2 // reg byte y 8.75
|
|
char irq::i
|
|
char irq::i#1 // reg byte x 22.0
|
|
char irq::i#2 // reg byte x 9.307692307692307
|
|
char irq::i1
|
|
char irq::i1#1 // reg byte z 202.0
|
|
char irq::i1#2 // reg byte z 60.599999999999994
|
|
char irq::i2
|
|
char irq::i2#1 // reg byte z 202.0
|
|
char irq::i2#2 // reg byte z 60.599999999999994
|
|
char irq::i3
|
|
char irq::i3#1 // reg byte x 22.0
|
|
char irq::i3#2 // reg byte x 11.0
|
|
char irq::i4
|
|
char irq::i4#1 // reg byte x 22.0
|
|
char irq::i4#2 // reg byte x 8.8
|
|
char irq::i5
|
|
char irq::i5#1 // reg byte x 22.0
|
|
char irq::i5#2 // reg byte x 18.333333333333332
|
|
char irq::idx
|
|
char irq::idx#0 // reg byte x 11.0
|
|
char irq::idx#1 // reg byte x 67.33333333333333
|
|
char irq::idx#2 // reg byte x 101.0
|
|
char irq::idx#3 // reg byte x 138.33333333333331
|
|
char irq::idx#4 // reg byte x 101.0
|
|
char irq::l
|
|
char irq::l#1 // reg byte x 22.0
|
|
char irq::l#2 // reg byte x 14.666666666666666
|
|
char irq::line
|
|
char irq::line#1 // line zp[1]:4 22.0
|
|
char irq::line#10 // line zp[1]:4 3.259259259259259
|
|
char irq::nxt
|
|
char irq::nxt#0 // reg byte a 2.0
|
|
char irq::nxt#1 // reg byte a 4.0
|
|
char irq::nxt#2 // reg byte a 6.0
|
|
char irq::raster
|
|
char irq::raster#0 // reg byte a 56.0
|
|
char irq::sin_bar
|
|
char irq::sin_bar#0 // sin_bar zp[1]:6 4.0
|
|
char irq::sin_bar#1 // sin_bar zp[1]:6 11.0
|
|
char irq::sin_bar#2 // sin_bar zp[1]:6 2.1875
|
|
char irq::sin_col
|
|
char irq::sin_col#0 // reg byte y 4.0
|
|
char irq::sin_col#1 // reg byte y 11.0
|
|
char irq::sin_col#2 // reg byte y 3.833333333333333
|
|
char irq::wobble_idx
|
|
char irq::wobble_idx#0 // reg byte x 4.0
|
|
char irq::wobble_idx#1 // reg byte x 11.0
|
|
char irq::wobble_idx#10 // reg byte x 4.590909090909091
|
|
char irq::wobble_idx#7 // reg byte x 22.0
|
|
char irq::zoomval
|
|
char irq::zoomval#0 // reg byte a 11.0
|
|
void main()
|
|
char main::i
|
|
char main::i#1 // reg byte x 151.5
|
|
char main::i#2 // reg byte x 202.0
|
|
char main::i1
|
|
char main::i1#1 // reg byte x 202.0
|
|
char main::i1#2 // reg byte x 168.33333333333331
|
|
char main::i2
|
|
char main::i2#1 // reg byte x 202.0
|
|
char main::i2#2 // reg byte x 134.66666666666666
|
|
void * memset(void *str , char c , unsigned int num)
|
|
char memset::c
|
|
__constant char memset::c#0 = ' ' // c
|
|
char *memset::dst
|
|
char *memset::dst#1 // dst zp[2]:2 2002.0
|
|
char *memset::dst#2 // dst zp[2]:2 1334.6666666666667
|
|
char *memset::end
|
|
__constant char *memset::end#0 = (char *)memset::str#0+memset::num#0 // end
|
|
unsigned int memset::num
|
|
__constant unsigned int memset::num#0 = (unsigned int)$28*$19 // num
|
|
void *memset::return
|
|
void *memset::str
|
|
__constant void *memset::str#0 = (void *)DEFAULT_SCREEN // str
|
|
__constant char rasters[RASTER_LINES] = { fill( RASTER_LINES, 0) }
|
|
__loadstore char * volatile scroll_ptr // zp[2]:11 0.19672131147540986
|
|
__loadstore volatile char scroll_soft // zp[1]:10 0.2441860465116279
|
|
__loadstore volatile char sin_idx // zp[1]:9 0.49999999999999994
|
|
__constant void (*songInit)() = (void (*)())SONG
|
|
__constant void (*songPlay)() = (void (*)())SONG+3
|
|
|
|
zp[1]:4 [ irq::line#10 irq::line#1 ]
|
|
reg byte x [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
|
|
reg byte x [ irq::i#2 irq::i#1 ]
|
|
reg byte y [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
|
|
reg byte x [ irq::l#2 irq::l#1 ]
|
|
zp[1]:5 [ irq::barcnt#2 irq::barcnt#1 ]
|
|
zp[1]:6 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
|
|
reg byte x [ irq::i3#2 irq::i3#1 ]
|
|
reg byte x [ irq::i4#2 irq::i4#1 ]
|
|
reg byte y [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
|
|
reg byte x [ irq::i5#2 irq::i5#1 ]
|
|
reg byte a [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
|
|
reg byte z [ irq::i1#2 irq::i1#1 ]
|
|
reg byte z [ irq::i2#2 irq::i2#1 ]
|
|
reg byte y [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ]
|
|
reg byte x [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
|
|
reg byte x [ main::i1#2 main::i1#1 ]
|
|
reg byte x [ main::i2#2 main::i2#1 ]
|
|
reg byte x [ main::i#2 main::i#1 ]
|
|
zp[2]:2 [ memset::dst#2 memset::dst#1 ]
|
|
zp[1]:9 [ sin_idx ]
|
|
zp[1]:10 [ scroll_soft ]
|
|
zp[2]:11 [ scroll_ptr ]
|
|
zp[1]:7 [ greet_zoomx ]
|
|
zp[1]:8 [ greet_idx ]
|
|
reg byte a [ irq::$33 ]
|
|
reg byte a [ irq::$29 ]
|
|
reg byte a [ irq::$26 ]
|
|
reg byte a [ irq::$27 ]
|
|
reg byte a [ irq::col1#0 ]
|
|
reg byte a [ irq::col1#1 ]
|
|
reg byte a [ irq::col#0 ]
|
|
reg byte a [ irq::zoomval#0 ]
|
|
reg byte a [ irq::$10 ]
|
|
reg byte a [ irq::raster#0 ]
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
Score: 10519
|
|
|
|
// File Comments
|
|
// Raster65 Demo re-implementation in C by Jesper Gravgaard
|
|
// Based on RASTER65 assembler demo made in 2015 and updated in 2020 by DEFT
|
|
// https://mega.scryptos.com/sharefolder/MEGA/MEGA65+filehost
|
|
// https://www.forum64.de/index.php?thread/104591-xemu-vic-iv-implementation-update/&postID=1560511#post1560511
|
|
/// @file
|
|
/// MEGA65 Registers and Constants
|
|
/// @file
|
|
/// The MOS 6526 Complex Interface Adapter (CIA)
|
|
///
|
|
/// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
|
|
// Upstart
|
|
.cpu _45gs02
|
|
// MEGA65 platform executable starting in C64 mode.
|
|
.file [name="raster65.prg", type="prg", segments="Program"]
|
|
.segmentdef Program [segments="Basic, Code, Data"]
|
|
.segmentdef Basic [start=$0801]
|
|
.segmentdef Code [start=$80d]
|
|
.segmentdef Data [startAfter="Code"]
|
|
.segment Basic
|
|
:BasicUpstart(__start)
|
|
// Global Constants & labels
|
|
/// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
|
|
.const CIA_INTERRUPT_CLEAR_ALL = $7f
|
|
/// VICII IRQ Status/Enable Raster
|
|
// @see #IRQ_ENABLE #IRQ_STATUS
|
|
/// 0 | RST| Reaching a certain raster line. The line is specified by writing
|
|
/// | | to register 0xd012 and bit 7 of $d011 and internally stored by
|
|
/// | | the VIC for the raster compare. The test for reaching the
|
|
/// | | interrupt raster line is done in cycle 0 of every line (for line
|
|
/// | | 0, in cycle 1).
|
|
.const IRQ_RASTER = 1
|
|
/// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
|
|
.const PROCPORT_DDR_MEMORY_MASK = 7
|
|
/// RAM in 0xA000, 0xE000 I/O in 0xD000
|
|
.const PROCPORT_RAM_IO = 5
|
|
// Logo start screen row
|
|
.const LOGO_ROW = 3
|
|
// Scroll screen row
|
|
.const SCROLL_ROW = $d
|
|
// Greeting screen row
|
|
.const GREET_ROW = $14
|
|
// y rasterline where IRQ starts
|
|
.const IRQ_Y = $16
|
|
// y rasterline where scrolly starts
|
|
.const SCROLL_Y = $66
|
|
// size of raster behind scrolly
|
|
.const SCROLL_BLACKBARS = $13
|
|
// The number of raster lines
|
|
.const RASTER_LINES = $d8
|
|
// The number of greetings
|
|
.const GREET_COUNT = $f
|
|
.const OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54
|
|
.const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
|
|
.const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
|
|
.const OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = $11
|
|
.const OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO = $5c
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_RASLINE0 = $6f
|
|
.const OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19
|
|
.const OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16
|
|
.const OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20
|
|
.const OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c
|
|
.const OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a
|
|
.const SIZEOF_CHAR = 1
|
|
/// Processor port data direction register
|
|
.label PROCPORT_DDR = 0
|
|
/// Processor Port Register controlling RAM/ROM configuration and the datasette
|
|
.label PROCPORT = 1
|
|
/// The VIC-II MOS 6567/6569
|
|
.label VICII = $d000
|
|
/// The VIC III MOS 4567/4569
|
|
.label VICIII = $d000
|
|
/// The VIC IV
|
|
.label VICIV = $d000
|
|
/// Palette RED
|
|
.label PALETTE_RED = $d100
|
|
/// Palette GREEN
|
|
.label PALETTE_GREEN = $d200
|
|
/// Palette BLUE
|
|
.label PALETTE_BLUE = $d300
|
|
/// Color Ram
|
|
.label COLORRAM = $d800
|
|
/// Default address of screen character matrix
|
|
.label DEFAULT_SCREEN = $400
|
|
/// The CIA#1: keyboard matrix, joystick #1/#2
|
|
.label CIA1 = $dc00
|
|
/// The vector used when the HARDWARE serves IRQ interrupts
|
|
.label HARDWARE_IRQ = $fffe
|
|
// Pointer to the song init routine
|
|
.label songInit = SONG
|
|
// Pointer to the song play routine
|
|
.label songPlay = SONG+3
|
|
// Sine Position (used across effects)
|
|
.label sin_idx = 9
|
|
// scroll soft position of text scrolly (0-7)
|
|
.label scroll_soft = $a
|
|
// scroll text pointer to next char
|
|
.label scroll_ptr = $b
|
|
// Zoom Position
|
|
.label greet_zoomx = 7
|
|
// The greeting currently being shown
|
|
.label greet_idx = 8
|
|
.segment Code
|
|
// __start
|
|
__start: {
|
|
// __start::__init1
|
|
// volatile char sin_idx
|
|
// [1] sin_idx = 0 -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z sin_idx
|
|
// volatile char scroll_soft = 7
|
|
// [2] scroll_soft = 7 -- vbuz1=vbuc1
|
|
ldz #7
|
|
stz.z scroll_soft
|
|
// char * volatile scroll_ptr = SCROLL_TEXT
|
|
// [3] scroll_ptr = SCROLL_TEXT -- pbuz1=pbuc1
|
|
lda #<SCROLL_TEXT
|
|
sta.z scroll_ptr
|
|
lda #>SCROLL_TEXT
|
|
sta.z scroll_ptr+1
|
|
// volatile char greet_zoomx
|
|
// [4] greet_zoomx = 0 -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z greet_zoomx
|
|
// volatile char greet_idx
|
|
// [5] greet_idx = 0 -- vbuz1=vbuc1
|
|
stz.z greet_idx
|
|
// [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1]
|
|
// __start::@1
|
|
// [7] call main
|
|
jsr main
|
|
// __start::@return
|
|
// [8] return
|
|
rts
|
|
}
|
|
// irq
|
|
// BIG INTERRUPT LOOP
|
|
irq: {
|
|
.label line = 4
|
|
.label sin_bar = 6
|
|
.label barcnt = 5
|
|
// interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry
|
|
pha
|
|
phx
|
|
phy
|
|
phz
|
|
// VICIV->RASLINE0 |= 0x80
|
|
// [9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
|
|
// force NTSC every frame (hehe)
|
|
lda #$80
|
|
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0
|
|
// VICII->IRQ_STATUS = IRQ_RASTER
|
|
// [10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER -- _deref_pbuc1=vbuc2
|
|
// Acknowledge the IRQ
|
|
ldz #IRQ_RASTER
|
|
stz VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS
|
|
// VICII->CONTROL2 = 0
|
|
// [11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0 -- _deref_pbuc1=vbuc2
|
|
// reset x scroll
|
|
ldz #0
|
|
stz VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2
|
|
// char wobble_idx = ++sin_idx
|
|
// [12] sin_idx = ++ sin_idx -- vbuz1=_inc_vbuz1
|
|
inc.z sin_idx
|
|
// [13] irq::wobble_idx#0 = sin_idx -- vbuxx=vbuz1
|
|
// Generate Raster Bars and more
|
|
ldx.z sin_idx
|
|
// [14] phi from irq to irq::@2 [phi:irq->irq::@2]
|
|
// [14] phi irq::wobble_idx#10 = irq::wobble_idx#0 [phi:irq->irq::@2#0] -- register_copy
|
|
// [14] phi irq::line#10 = 0 [phi:irq->irq::@2#1] -- vbuz1=vbuc1
|
|
stz.z line
|
|
// irq::@2
|
|
__b2:
|
|
// for(char line=0;line!=RASTER_LINES;line++)
|
|
// [15] if(irq::line#10!=RASTER_LINES) goto irq::@3 -- vbuz1_neq_vbuc1_then_la1
|
|
ldz #RASTER_LINES
|
|
cpz.z line
|
|
beq !__b3+
|
|
jmp __b3
|
|
!__b3:
|
|
// [16] phi from irq::@2 to irq::@4 [phi:irq::@2->irq::@4]
|
|
// irq::@4
|
|
// (*songPlay)()
|
|
// [17] callexecute *songPlay -- call__deref_pprc1
|
|
// play music
|
|
jsr songPlay
|
|
// irq::@1
|
|
// char sin_col = sin_idx
|
|
// [18] irq::sin_col#0 = sin_idx -- vbuyy=vbuz1
|
|
// Set up colors behind logo, scroll and greets
|
|
ldy.z sin_idx
|
|
// [19] phi from irq::@1 to irq::@17 [phi:irq::@1->irq::@17]
|
|
// [19] phi irq::sin_col#2 = irq::sin_col#0 [phi:irq::@1->irq::@17#0] -- register_copy
|
|
// [19] phi irq::i#2 = 0 [phi:irq::@1->irq::@17#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// irq::@17
|
|
__b17:
|
|
// for(char i=0;i<40;i++)
|
|
// [20] if(irq::i#2<$28) goto irq::@18 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$28
|
|
bcs !__b18+
|
|
jmp __b18
|
|
!__b18:
|
|
// [21] phi from irq::@17 to irq::@19 [phi:irq::@17->irq::@19]
|
|
// [21] phi irq::l#2 = 0 [phi:irq::@17->irq::@19#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// Set all raster bars to black
|
|
// irq::@19
|
|
__b19:
|
|
// for(char l=0;l!=RASTER_LINES;l++)
|
|
// [22] if(irq::l#2!=RASTER_LINES) goto irq::@20 -- vbuxx_neq_vbuc1_then_la1
|
|
cpx #RASTER_LINES
|
|
beq !__b20+
|
|
jmp __b20
|
|
!__b20:
|
|
// irq::@21
|
|
// char sin_bar = sin_idx
|
|
// [23] irq::sin_bar#0 = sin_idx -- vbuz1=vbuz2
|
|
// Big block of bars (16)
|
|
lda.z sin_idx
|
|
sta.z sin_bar
|
|
// [24] phi from irq::@21 to irq::@22 [phi:irq::@21->irq::@22]
|
|
// [24] phi irq::sin_bar#2 = irq::sin_bar#0 [phi:irq::@21->irq::@22#0] -- register_copy
|
|
// [24] phi irq::barcnt#2 = 0 [phi:irq::@21->irq::@22#1] -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z barcnt
|
|
// irq::@22
|
|
__b22:
|
|
// for(char barcnt=0; barcnt<16; barcnt++)
|
|
// [25] if(irq::barcnt#2<$10) goto irq::@23 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z barcnt
|
|
cmp #$10
|
|
bcc __b23
|
|
// [26] phi from irq::@22 to irq::@29 [phi:irq::@22->irq::@29]
|
|
// [26] phi irq::i3#2 = 0 [phi:irq::@22->irq::@29#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// Produce dark area behind text
|
|
// irq::@29
|
|
__b29:
|
|
// for(char i=0;i<19;i++)
|
|
// [27] if(irq::i3#2<$13) goto irq::@30 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$13
|
|
bcc __b30
|
|
// irq::@31
|
|
// char greet_offset = greet_idx*16
|
|
// [28] irq::greet_offset#0 = greet_idx << 4 -- vbuyy=vbuz1_rol_4
|
|
// Set up greetings
|
|
lda.z greet_idx
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
tay
|
|
// [29] phi from irq::@31 to irq::@32 [phi:irq::@31->irq::@32]
|
|
// [29] phi irq::greet_offset#2 = irq::greet_offset#0 [phi:irq::@31->irq::@32#0] -- register_copy
|
|
// [29] phi irq::i4#2 = 0 [phi:irq::@31->irq::@32#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// irq::@32
|
|
__b32:
|
|
// for(char i=0;i<16;i++)
|
|
// [30] if(irq::i4#2<$10) goto irq::@33 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$10
|
|
bcc __b33
|
|
// irq::@34
|
|
// if(--scroll_soft == 0xff)
|
|
// [31] scroll_soft = -- scroll_soft -- vbuz1=_dec_vbuz1
|
|
dec.z scroll_soft
|
|
// [32] if(scroll_soft!=$ff) goto irq::@return -- vbuz1_neq_vbuc1_then_la1
|
|
ldz #$ff
|
|
cpz.z scroll_soft
|
|
bne __breturn
|
|
// irq::@35
|
|
// scroll_soft = 7
|
|
// [33] scroll_soft = 7 -- vbuz1=vbuc1
|
|
ldz #7
|
|
stz.z scroll_soft
|
|
// [34] phi from irq::@35 to irq::@36 [phi:irq::@35->irq::@36]
|
|
// [34] phi irq::i5#2 = 0 [phi:irq::@35->irq::@36#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// Move scroll on screen
|
|
// irq::@36
|
|
__b36:
|
|
// for(char i=0;i<39;i++)
|
|
// [35] if(irq::i5#2<$27) goto irq::@37 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$27
|
|
bcc __b37
|
|
// irq::@38
|
|
// char nxt = *(scroll_ptr++)
|
|
// [36] irq::nxt#0 = *scroll_ptr -- vbuaa=_deref_pbuz1
|
|
// Show next char
|
|
ldy #0
|
|
lda (scroll_ptr),y
|
|
// [37] scroll_ptr = ++ scroll_ptr -- pbuz1=_inc_pbuz1
|
|
inw.z scroll_ptr
|
|
// if(nxt == 0)
|
|
// [38] if(irq::nxt#0!=0) goto irq::@40 -- vbuaa_neq_0_then_la1
|
|
cmp #0
|
|
bne __b40
|
|
// irq::@39
|
|
// scroll_ptr = SCROLL_TEXT
|
|
// [39] scroll_ptr = SCROLL_TEXT -- pbuz1=pbuc1
|
|
lda #<SCROLL_TEXT
|
|
sta.z scroll_ptr
|
|
lda #>SCROLL_TEXT
|
|
sta.z scroll_ptr+1
|
|
// nxt = *scroll_ptr
|
|
// [40] irq::nxt#1 = *scroll_ptr -- vbuaa=_deref_pbuz1
|
|
lda (scroll_ptr),y
|
|
// [41] phi from irq::@38 irq::@39 to irq::@40 [phi:irq::@38/irq::@39->irq::@40]
|
|
// [41] phi irq::nxt#2 = irq::nxt#0 [phi:irq::@38/irq::@39->irq::@40#0] -- register_copy
|
|
// irq::@40
|
|
__b40:
|
|
// nxt & 0xbf
|
|
// [42] irq::$33 = irq::nxt#2 & $bf -- vbuaa=vbuaa_band_vbuc1
|
|
and #$bf
|
|
// *(SCREEN + SCROLL_ROW*40 + 39) = nxt & 0xbf
|
|
// [43] *(DEFAULT_SCREEN+SCROLL_ROW*$28+$27) = irq::$33 -- _deref_pbuc1=vbuaa
|
|
sta DEFAULT_SCREEN+SCROLL_ROW*$28+$27
|
|
// irq::@return
|
|
__breturn:
|
|
// }
|
|
// [44] return
|
|
// interrupt(isr_hardware_clobber_exit) -- isr_hardware_all_exit
|
|
plz
|
|
ply
|
|
plx
|
|
pla
|
|
rti
|
|
// irq::@37
|
|
__b37:
|
|
// (SCREEN + SCROLL_ROW*40)[i] = (SCREEN + SCROLL_ROW*40 + 1)[i]
|
|
// [45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda DEFAULT_SCREEN+SCROLL_ROW*$28+1,x
|
|
sta DEFAULT_SCREEN+SCROLL_ROW*$28,x
|
|
// for(char i=0;i<39;i++)
|
|
// [46] irq::i5#1 = ++ irq::i5#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [34] phi from irq::@37 to irq::@36 [phi:irq::@37->irq::@36]
|
|
// [34] phi irq::i5#2 = irq::i5#1 [phi:irq::@37->irq::@36#0] -- register_copy
|
|
jmp __b36
|
|
// irq::@33
|
|
__b33:
|
|
// GREETING[greet_offset++] & 0xbf
|
|
// [47] irq::$29 = GREETING[irq::greet_offset#2] & $bf -- vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2
|
|
lda #$bf
|
|
and GREETING,y
|
|
// (SCREEN + GREET_ROW*40 + 13)[i] = GREETING[greet_offset++] & 0xbf
|
|
// [48] (DEFAULT_SCREEN+GREET_ROW*$28+$d)[irq::i4#2] = irq::$29 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta DEFAULT_SCREEN+GREET_ROW*$28+$d,x
|
|
// (SCREEN + GREET_ROW*40 + 13)[i] = GREETING[greet_offset++] & 0xbf;
|
|
// [49] irq::greet_offset#1 = ++ irq::greet_offset#2 -- vbuyy=_inc_vbuyy
|
|
iny
|
|
// for(char i=0;i<16;i++)
|
|
// [50] irq::i4#1 = ++ irq::i4#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [29] phi from irq::@33 to irq::@32 [phi:irq::@33->irq::@32]
|
|
// [29] phi irq::greet_offset#2 = irq::greet_offset#1 [phi:irq::@33->irq::@32#0] -- register_copy
|
|
// [29] phi irq::i4#2 = irq::i4#1 [phi:irq::@33->irq::@32#1] -- register_copy
|
|
jmp __b32
|
|
// irq::@30
|
|
__b30:
|
|
// rasters[SCROLL_Y+i] /2
|
|
// [51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1
|
|
lda rasters+SCROLL_Y,x
|
|
lsr
|
|
// rasters[SCROLL_Y+i] /2 & 7
|
|
// [52] irq::$27 = irq::$26 & 7 -- vbuaa=vbuaa_band_vbuc1
|
|
and #7
|
|
// rasters[SCROLL_Y+i] = rasters[SCROLL_Y+i] /2 & 7
|
|
// [53] (rasters+SCROLL_Y)[irq::i3#2] = irq::$27 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta rasters+SCROLL_Y,x
|
|
// for(char i=0;i<19;i++)
|
|
// [54] irq::i3#1 = ++ irq::i3#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [26] phi from irq::@30 to irq::@29 [phi:irq::@30->irq::@29]
|
|
// [26] phi irq::i3#2 = irq::i3#1 [phi:irq::@30->irq::@29#0] -- register_copy
|
|
jmp __b29
|
|
// irq::@23
|
|
__b23:
|
|
// char idx = SINE[sin_bar]
|
|
// [55] irq::idx#0 = SINE[irq::sin_bar#2] -- vbuxx=pbuc1_derefidx_vbuz1
|
|
ldy.z sin_bar
|
|
ldx SINE,y
|
|
// char barcol = barcnt*16
|
|
// [56] irq::barcol#0 = irq::barcnt#2 << 4 -- vbuyy=vbuz1_rol_4
|
|
lda.z barcnt
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
tay
|
|
// [57] phi from irq::@23 to irq::@24 [phi:irq::@23->irq::@24]
|
|
// [57] phi irq::idx#3 = irq::idx#0 [phi:irq::@23->irq::@24#0] -- register_copy
|
|
// [57] phi irq::barcol#3 = irq::barcol#0 [phi:irq::@23->irq::@24#1] -- register_copy
|
|
// [57] phi irq::i1#2 = 0 [phi:irq::@23->irq::@24#2] -- vbuzz=vbuc1
|
|
ldz #0
|
|
// irq::@24
|
|
__b24:
|
|
// for(char i=0;i<16;i++)
|
|
// [58] if(irq::i1#2<$10) goto irq::@25 -- vbuzz_lt_vbuc1_then_la1
|
|
cpz #$10
|
|
bcc __b25
|
|
// [59] phi from irq::@24 to irq::@26 [phi:irq::@24->irq::@26]
|
|
// [59] phi irq::idx#4 = irq::idx#3 [phi:irq::@24->irq::@26#0] -- register_copy
|
|
// [59] phi irq::barcol#4 = irq::barcol#3 [phi:irq::@24->irq::@26#1] -- register_copy
|
|
// [59] phi irq::i2#2 = 0 [phi:irq::@24->irq::@26#2] -- vbuzz=vbuc1
|
|
ldz #0
|
|
// irq::@26
|
|
__b26:
|
|
// for(char i=0;i<15;i++)
|
|
// [60] if(irq::i2#2<$f) goto irq::@27 -- vbuzz_lt_vbuc1_then_la1
|
|
cpz #$f
|
|
bcc __b27
|
|
// irq::@28
|
|
// sin_bar += 10
|
|
// [61] irq::sin_bar#1 = irq::sin_bar#2 + $a -- vbuz1=vbuz1_plus_vbuc1
|
|
lda #$a
|
|
clc
|
|
adc.z sin_bar
|
|
sta.z sin_bar
|
|
// for(char barcnt=0; barcnt<16; barcnt++)
|
|
// [62] irq::barcnt#1 = ++ irq::barcnt#2 -- vbuz1=_inc_vbuz1
|
|
inc.z barcnt
|
|
// [24] phi from irq::@28 to irq::@22 [phi:irq::@28->irq::@22]
|
|
// [24] phi irq::sin_bar#2 = irq::sin_bar#1 [phi:irq::@28->irq::@22#0] -- register_copy
|
|
// [24] phi irq::barcnt#2 = irq::barcnt#1 [phi:irq::@28->irq::@22#1] -- register_copy
|
|
jmp __b22
|
|
// irq::@27
|
|
__b27:
|
|
// rasters[idx++] = --barcol;
|
|
// [63] irq::barcol#2 = -- irq::barcol#4 -- vbuyy=_dec_vbuyy
|
|
dey
|
|
// rasters[idx++] = --barcol
|
|
// [64] rasters[irq::idx#4] = irq::barcol#2 -- pbuc1_derefidx_vbuxx=vbuyy
|
|
tya
|
|
sta rasters,x
|
|
// rasters[idx++] = --barcol;
|
|
// [65] irq::idx#2 = ++ irq::idx#4 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// for(char i=0;i<15;i++)
|
|
// [66] irq::i2#1 = ++ irq::i2#2 -- vbuzz=_inc_vbuzz
|
|
inz
|
|
// [59] phi from irq::@27 to irq::@26 [phi:irq::@27->irq::@26]
|
|
// [59] phi irq::idx#4 = irq::idx#2 [phi:irq::@27->irq::@26#0] -- register_copy
|
|
// [59] phi irq::barcol#4 = irq::barcol#2 [phi:irq::@27->irq::@26#1] -- register_copy
|
|
// [59] phi irq::i2#2 = irq::i2#1 [phi:irq::@27->irq::@26#2] -- register_copy
|
|
jmp __b26
|
|
// irq::@25
|
|
__b25:
|
|
// rasters[idx++] = barcol++
|
|
// [67] rasters[irq::idx#3] = irq::barcol#3 -- pbuc1_derefidx_vbuxx=vbuyy
|
|
tya
|
|
sta rasters,x
|
|
// rasters[idx++] = barcol++;
|
|
// [68] irq::idx#1 = ++ irq::idx#3 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [69] irq::barcol#1 = ++ irq::barcol#3 -- vbuyy=_inc_vbuyy
|
|
iny
|
|
// for(char i=0;i<16;i++)
|
|
// [70] irq::i1#1 = ++ irq::i1#2 -- vbuzz=_inc_vbuzz
|
|
inz
|
|
// [57] phi from irq::@25 to irq::@24 [phi:irq::@25->irq::@24]
|
|
// [57] phi irq::idx#3 = irq::idx#1 [phi:irq::@25->irq::@24#0] -- register_copy
|
|
// [57] phi irq::barcol#3 = irq::barcol#1 [phi:irq::@25->irq::@24#1] -- register_copy
|
|
// [57] phi irq::i1#2 = irq::i1#1 [phi:irq::@25->irq::@24#2] -- register_copy
|
|
jmp __b24
|
|
// irq::@20
|
|
__b20:
|
|
// rasters[l] = 0
|
|
// [71] rasters[irq::l#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta rasters,x
|
|
// for(char l=0;l!=RASTER_LINES;l++)
|
|
// [72] irq::l#1 = ++ irq::l#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [21] phi from irq::@20 to irq::@19 [phi:irq::@20->irq::@19]
|
|
// [21] phi irq::l#2 = irq::l#1 [phi:irq::@20->irq::@19#0] -- register_copy
|
|
jmp __b19
|
|
// irq::@18
|
|
__b18:
|
|
// char col = SINE[sin_col]/4
|
|
// [73] irq::col1#0 = SINE[irq::sin_col#2] >> 2 -- vbuaa=pbuc1_derefidx_vbuyy_ror_2
|
|
// Greeting colors
|
|
lda SINE,y
|
|
lsr
|
|
lsr
|
|
// (COLORRAM + GREET_ROW*40)[i] = col
|
|
// [74] (COLORRAM+GREET_ROW*$28)[irq::i#2] = irq::col1#0 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+GREET_ROW*$28,x
|
|
// col /= 2
|
|
// [75] irq::col1#1 = irq::col1#0 >> 1 -- vbuaa=vbuaa_ror_1
|
|
// Logo colors
|
|
lsr
|
|
// (COLORRAM + LOGO_ROW*40 + 0*40 - 1)[i] = col
|
|
// [76] (COLORRAM+LOGO_ROW*$28-1)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28-1,x
|
|
// (COLORRAM + LOGO_ROW*40 + 1*40 - 2)[i] = col
|
|
// [77] (COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+1*$28-2,x
|
|
// (COLORRAM + LOGO_ROW*40 + 2*40 - 3)[i] = col
|
|
// [78] (COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+2*$28-3,x
|
|
// (COLORRAM + LOGO_ROW*40 + 3*40 - 4)[i] = col
|
|
// [79] (COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+3*$28-4,x
|
|
// (COLORRAM + LOGO_ROW*40 + 4*40 - 5)[i] = col
|
|
// [80] (COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+4*$28-5,x
|
|
// (COLORRAM + LOGO_ROW*40 + 5*40 - 6)[i] = col
|
|
// [81] (COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
|
|
sta COLORRAM+LOGO_ROW*$28+5*$28-6,x
|
|
// (COLORRAM + SCROLL_ROW*40)[i] = PAL_GREEN[sin_col]
|
|
// [82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
|
|
// Scroll colors
|
|
lda PAL_GREEN,y
|
|
sta COLORRAM+SCROLL_ROW*$28,x
|
|
// sin_col++;
|
|
// [83] irq::sin_col#1 = ++ irq::sin_col#2 -- vbuyy=_inc_vbuyy
|
|
iny
|
|
// for(char i=0;i<40;i++)
|
|
// [84] irq::i#1 = ++ irq::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [19] phi from irq::@18 to irq::@17 [phi:irq::@18->irq::@17]
|
|
// [19] phi irq::sin_col#2 = irq::sin_col#1 [phi:irq::@18->irq::@17#0] -- register_copy
|
|
// [19] phi irq::i#2 = irq::i#1 [phi:irq::@18->irq::@17#1] -- register_copy
|
|
jmp __b17
|
|
// irq::@3
|
|
__b3:
|
|
// char col = rasters[line]
|
|
// [85] irq::col#0 = rasters[irq::line#10] -- vbuaa=pbuc1_derefidx_vbuz1
|
|
ldy.z line
|
|
lda rasters,y
|
|
// VICIII->BORDER_COLOR = col
|
|
// [86] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) = irq::col#0 -- _deref_pbuc1=vbuaa
|
|
sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR
|
|
// VICIII->BG_COLOR = col
|
|
// [87] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) = irq::col#0 -- _deref_pbuc1=vbuaa
|
|
sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR
|
|
// if(line < SCROLL_Y)
|
|
// [88] if(irq::line#10<SCROLL_Y) goto irq::@5 -- vbuz1_lt_vbuc1_then_la1
|
|
tya
|
|
cmp #SCROLL_Y
|
|
bcc __b5
|
|
// irq::@11
|
|
// if(line == SCROLL_Y)
|
|
// [89] if(irq::line#10==SCROLL_Y) goto irq::@6 -- vbuz1_eq_vbuc1_then_la1
|
|
ldz #SCROLL_Y
|
|
cpz.z line
|
|
beq __b6
|
|
// irq::@12
|
|
// if(line == SCROLL_Y+SCROLL_BLACKBARS)
|
|
// [90] if(irq::line#10==SCROLL_Y+SCROLL_BLACKBARS) goto irq::@7 -- vbuz1_eq_vbuc1_then_la1
|
|
ldz #SCROLL_Y+SCROLL_BLACKBARS
|
|
cpz.z line
|
|
beq __b7
|
|
// irq::@13
|
|
// if(line == SCROLL_Y+SCROLL_BLACKBARS+1)
|
|
// [91] if(irq::line#10!=SCROLL_Y+SCROLL_BLACKBARS+1) goto irq::@8 -- vbuz1_neq_vbuc1_then_la1
|
|
ldz #SCROLL_Y+SCROLL_BLACKBARS+1
|
|
cpz.z line
|
|
bne __b8
|
|
// irq::@14
|
|
// char zoomval = SINE[greet_zoomx++]
|
|
// [92] irq::zoomval#0 = SINE[greet_zoomx] -- vbuaa=pbuc1_derefidx_vbuz1
|
|
// if raster position > SCROLL_Y pos do zoom
|
|
ldy.z greet_zoomx
|
|
lda SINE,y
|
|
// [93] greet_zoomx = ++ greet_zoomx -- vbuz1=_inc_vbuz1
|
|
inc.z greet_zoomx
|
|
// VICIV->CHRXSCL = zoomval
|
|
// [94] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = irq::zoomval#0 -- _deref_pbuc1=vbuaa
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL
|
|
// zoomval+1
|
|
// [95] irq::$10 = irq::zoomval#0 + 1 -- vbuaa=vbuaa_plus_1
|
|
inc
|
|
// VICIV->TEXTXPOS_LO = zoomval+1
|
|
// [96] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = irq::$10 -- _deref_pbuc1=vbuaa
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
|
|
// if(greet_zoomx==0)
|
|
// [97] if(greet_zoomx!=0) goto irq::@8 -- vbuz1_neq_0_then_la1
|
|
lda.z greet_zoomx
|
|
bne __b8
|
|
// irq::@15
|
|
// if(++greet_idx == GREET_COUNT)
|
|
// [98] greet_idx = ++ greet_idx -- vbuz1=_inc_vbuz1
|
|
inc.z greet_idx
|
|
// [99] if(greet_idx!=GREET_COUNT) goto irq::@8 -- vbuz1_neq_vbuc1_then_la1
|
|
ldz #GREET_COUNT
|
|
cpz.z greet_idx
|
|
bne __b8
|
|
// irq::@16
|
|
// greet_idx = 0
|
|
// [100] greet_idx = 0 -- vbuz1=vbuc1
|
|
ldz #0
|
|
stz.z greet_idx
|
|
// [101] phi from irq::@13 irq::@14 irq::@15 irq::@16 irq::@5 irq::@6 irq::@7 to irq::@8 [phi:irq::@13/irq::@14/irq::@15/irq::@16/irq::@5/irq::@6/irq::@7->irq::@8]
|
|
// [101] phi irq::wobble_idx#7 = irq::wobble_idx#10 [phi:irq::@13/irq::@14/irq::@15/irq::@16/irq::@5/irq::@6/irq::@7->irq::@8#0] -- register_copy
|
|
// irq::@8
|
|
__b8:
|
|
// char raster = VICII->RASTER
|
|
// [102] irq::raster#0 = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuaa=_deref_pbuc1
|
|
// Wait for the next raster line
|
|
lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
// irq::@9
|
|
__b9:
|
|
// while(raster == VICII->RASTER)
|
|
// [103] if(irq::raster#0==*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq::@9 -- vbuaa_eq__deref_pbuc1_then_la1
|
|
cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
beq __b9
|
|
// irq::@10
|
|
// for(char line=0;line!=RASTER_LINES;line++)
|
|
// [104] irq::line#1 = ++ irq::line#10 -- vbuz1=_inc_vbuz1
|
|
inc.z line
|
|
// [14] phi from irq::@10 to irq::@2 [phi:irq::@10->irq::@2]
|
|
// [14] phi irq::wobble_idx#10 = irq::wobble_idx#7 [phi:irq::@10->irq::@2#0] -- register_copy
|
|
// [14] phi irq::line#10 = irq::line#1 [phi:irq::@10->irq::@2#1] -- register_copy
|
|
jmp __b2
|
|
// irq::@7
|
|
__b7:
|
|
// VICIV->TEXTXPOS_LO = 0x50
|
|
// [105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 -- _deref_pbuc1=vbuc2
|
|
// if raster position > SCROLL_Y pos do nozoom
|
|
// default value
|
|
ldz #$50
|
|
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
|
|
jmp __b8
|
|
// irq::@6
|
|
__b6:
|
|
// [106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 -- _deref_pbuc1=vbuc2
|
|
// if raster position = SCROLL_Y pos do scroll
|
|
// no wobbling from this point
|
|
ldz #$50
|
|
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
|
|
// VICII->CONTROL2 = scroll_soft
|
|
// [107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft -- _deref_pbuc1=vbuz1
|
|
// set softscroll
|
|
lda.z scroll_soft
|
|
sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2
|
|
jmp __b8
|
|
// irq::@5
|
|
__b5:
|
|
// VICIV->TEXTXPOS_LO = SINE[wobble_idx++]
|
|
// [108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10] -- _deref_pbuc1=pbuc2_derefidx_vbuxx
|
|
// if raster position < SCROLL_Y pos do wobble Logo!
|
|
lda SINE,x
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
|
|
// VICIV->TEXTXPOS_LO = SINE[wobble_idx++];
|
|
// [109] irq::wobble_idx#1 = ++ irq::wobble_idx#10 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// VICIV->CHRXSCL = 0x66
|
|
// [110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66 -- _deref_pbuc1=vbuc2
|
|
// No zooming
|
|
ldz #$66
|
|
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL
|
|
jmp __b8
|
|
}
|
|
// main
|
|
main: {
|
|
// VICIII->KEY = 0x47
|
|
// [111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 -- _deref_pbuc1=vbuc2
|
|
// Enable MEGA65 features
|
|
ldz #$47
|
|
stz VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY
|
|
// VICIII->KEY = 0x53
|
|
// [112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 -- _deref_pbuc1=vbuc2
|
|
ldz #$53
|
|
stz VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY
|
|
// VICIV->CONTROLB |= 0x40
|
|
// [113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
|
|
// Enable 48MHz fast mode
|
|
lda #$40
|
|
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB
|
|
// VICIV->CONTROLC |= 0x40
|
|
// [114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
|
|
lda #$40
|
|
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC
|
|
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC
|
|
// asm
|
|
// asm { lda#0 }
|
|
// Initialize music
|
|
lda #0
|
|
// (*songInit)()
|
|
// [116] callexecute *songInit -- call__deref_pprc1
|
|
jsr songInit
|
|
// [117] phi from main to main::@1 [phi:main->main::@1]
|
|
// main::@1
|
|
// memset(SCREEN, ' ', 40*25)
|
|
// [118] call memset
|
|
// Clear screen
|
|
// [144] phi from main::@1 to memset [phi:main::@1->memset]
|
|
jsr memset
|
|
// [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
// [119] phi main::i1#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// Put MEGA logo on screen
|
|
// main::@2
|
|
__b2:
|
|
// for( char i=0; i<sizeof(MEGA_LOGO); i++)
|
|
// [120] if(main::i1#2<$bc*SIZEOF_CHAR) goto main::@3 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$bc*SIZEOF_CHAR
|
|
bcc __b3
|
|
// [121] phi from main::@2 to main::@4 [phi:main::@2->main::@4]
|
|
// [121] phi main::i2#2 = 0 [phi:main::@2->main::@4#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// Put '*' as default greeting
|
|
// main::@4
|
|
__b4:
|
|
// for( char i=0;i<40;i++)
|
|
// [122] if(main::i2#2<$28) goto main::@5 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$28
|
|
bcc __b5
|
|
// [123] phi from main::@4 to main::@6 [phi:main::@4->main::@6]
|
|
// [123] phi main::i#2 = 0 [phi:main::@4->main::@6#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [123] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
|
|
// [123] phi main::i#2 = main::i#1 [phi:main::@6->main::@6#0] -- register_copy
|
|
// main::@6
|
|
__b6:
|
|
// PALETTE_RED[i] = PAL_RED[i]
|
|
// [124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda PAL_RED,x
|
|
sta PALETTE_RED,x
|
|
// PALETTE_GREEN[i] = PAL_GREEN[i]
|
|
// [125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda PAL_GREEN,x
|
|
sta PALETTE_GREEN,x
|
|
// PALETTE_BLUE[i] = PAL_BLUE[i]
|
|
// [126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda PAL_BLUE,x
|
|
sta PALETTE_BLUE,x
|
|
// while(++i!=0)
|
|
// [127] main::i#1 = ++ main::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [128] if(main::i#1!=0) goto main::@6 -- vbuxx_neq_0_then_la1
|
|
cpx #0
|
|
bne __b6
|
|
// main::@7
|
|
// asm
|
|
// asm { sei }
|
|
// Set up raster interrupts C64 style
|
|
sei
|
|
// CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR_ALL
|
|
// [130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL -- _deref_pbuc1=vbuc2
|
|
// Disable CIA 1 Timer IRQ
|
|
ldz #CIA_INTERRUPT_CLEAR_ALL
|
|
stz CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT
|
|
// VICII->RASTER = IRQ_Y
|
|
// [131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y -- _deref_pbuc1=vbuc2
|
|
// Set raster line to 0x16
|
|
ldz #IRQ_Y
|
|
stz VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
// VICII->CONTROL1 &= 0x7f
|
|
// [132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
|
|
lda #$7f
|
|
and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1
|
|
sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1
|
|
// VICII->IRQ_ENABLE = IRQ_RASTER
|
|
// [133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER -- _deref_pbuc1=vbuc2
|
|
// Enable Raster Interrupt
|
|
ldz #IRQ_RASTER
|
|
stz VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE
|
|
// *HARDWARE_IRQ = &irq
|
|
// [134] *HARDWARE_IRQ = &irq -- _deref_qprc1=pprc2
|
|
// Set the IRQ routine
|
|
lda #<irq
|
|
sta HARDWARE_IRQ
|
|
lda #>irq
|
|
sta HARDWARE_IRQ+1
|
|
// *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
|
|
// [135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2
|
|
// no kernal or BASIC rom visible
|
|
ldz #PROCPORT_DDR_MEMORY_MASK
|
|
stz.z PROCPORT_DDR
|
|
// *PROCPORT = PROCPORT_RAM_IO
|
|
// [136] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2
|
|
ldz #PROCPORT_RAM_IO
|
|
stz.z PROCPORT
|
|
// VICIV->SIDBDRWD_LO = 1
|
|
// [137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1 -- _deref_pbuc1=vbuc2
|
|
// open sideborder
|
|
ldz #1
|
|
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO
|
|
// asm
|
|
// asm { cli }
|
|
// Enable IRQ
|
|
cli
|
|
// [139] phi from main::@7 main::@8 to main::@8 [phi:main::@7/main::@8->main::@8]
|
|
// main::@8
|
|
__b8:
|
|
jmp __b8
|
|
// main::@5
|
|
__b5:
|
|
// (SCREEN + GREET_ROW*40)[i] = '*'
|
|
// [140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*' -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #'*'
|
|
sta DEFAULT_SCREEN+GREET_ROW*$28,x
|
|
// for( char i=0;i<40;i++)
|
|
// [141] main::i2#1 = ++ main::i2#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [121] phi from main::@5 to main::@4 [phi:main::@5->main::@4]
|
|
// [121] phi main::i2#2 = main::i2#1 [phi:main::@5->main::@4#0] -- register_copy
|
|
jmp __b4
|
|
// main::@3
|
|
__b3:
|
|
// (SCREEN + LOGO_ROW*40)[i] = MEGA_LOGO[i]
|
|
// [142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
|
lda MEGA_LOGO,x
|
|
sta DEFAULT_SCREEN+LOGO_ROW*$28,x
|
|
// for( char i=0; i<sizeof(MEGA_LOGO); i++)
|
|
// [143] main::i1#1 = ++ main::i1#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [119] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
|
|
// [119] phi main::i1#2 = main::i1#1 [phi:main::@3->main::@2#0] -- register_copy
|
|
jmp __b2
|
|
}
|
|
// memset
|
|
// 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, char c, unsigned int num)
|
|
memset: {
|
|
.const c = ' '
|
|
.const num = $28*$19
|
|
.label str = DEFAULT_SCREEN
|
|
.label end = str+num
|
|
.label dst = 2
|
|
// [145] phi from memset to memset::@1 [phi:memset->memset::@1]
|
|
// [145] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
|
|
lda #<str
|
|
sta.z dst
|
|
lda #>str
|
|
sta.z dst+1
|
|
// memset::@1
|
|
__b1:
|
|
// for(char* dst = str; dst!=end; dst++)
|
|
// [146] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1
|
|
lda.z dst+1
|
|
cmp #>end
|
|
bne __b2
|
|
lda.z dst
|
|
cmp #<end
|
|
bne __b2
|
|
// memset::@return
|
|
// }
|
|
// [147] return
|
|
rts
|
|
// memset::@2
|
|
__b2:
|
|
// *dst = c
|
|
// [148] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1
|
|
lda #c
|
|
ldy #0
|
|
sta (dst),y
|
|
// for(char* dst = str; dst!=end; dst++)
|
|
// [149] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
|
|
inw.z dst
|
|
// [145] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
|
|
// [145] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// File Data
|
|
.segment Data
|
|
// A MEGA logo
|
|
MEGA_LOGO: .byte $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf
|
|
// Greetings
|
|
GREETING: .text " DOUBLEFLASH ADTBM SY2002 TAYGER SERIOUSLY LIBI IN PARADIZE LGB BLUEWAYSW SAUSAGE BIT SHIFTER INDIOCOLIFA GRUMPYNINJA 0-LIMITS CHEVERON DR. COMMODORE "
|
|
.byte 0
|
|
// Scroll text
|
|
SCROLL_TEXT: .text " THIS SMALL MEGA65 RASTER INTRO ... WAS MADE BY DEFT IN 2015 ... AND BROUGHT BACK TO LIFE 5 YEARS LATER IN 2020 ... BECAUSE THE MEGA65 HARDWARE CHANGED SO MUCH IN THE PAST 5 YEARS ... UNFORTUNATELY MY ASSEMBLER SKILLS DID NOT SO THIS IS THE FIRST APPROACH TO GET BETTER ... HOPEFULLY DR.MUTTI WILL HAVE TO SCOLD ME LESS ... THE PAST 5 YEARS HAVE BEEN AN UNFORGETTABLE & UNIQUE RIDE ... IF YOU DO WATCH THIS DEMO ON YOUR VERY OWN MEGA65 THERE IS ENOUGH EVIDENCE OF WHAT WE ACTUALLY ACHIEVED ... BELOW ARE THE GREETINGS TO DEAR AND VERY SPECIAL PEOPLE WHO HELPED TO GET THERE ... THANK YOU SO MUCH FOR YOUR SUPPORT AND FOR NOT GIVING UP ... DUAL SID TUNE BY RAYDEN OF ALPHA FLIGHT ... THIS SCROLLY WILL NOW RESTART *WRAP* "
|
|
.byte 0
|
|
.pc = $fc0 "SONG"
|
|
// Music at an absolute address
|
|
SONG:
|
|
.import c64 "DiscoZak_2SID_patched.prg"
|
|
|
|
.pc = $2c00 "SINE"
|
|
// Sine Values 0-183
|
|
SINE:
|
|
.fill 256, 91.5 + 91.5*sin(i*2*PI/256)
|
|
|
|
.pc = $3000 "rasters"
|
|
// Moving Raster Bars
|
|
rasters: .fill RASTER_LINES, 0
|
|
.pc = $2d00 "PAL_RED"
|
|
PAL_RED: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff
|
|
.pc = $2e00 "PAL_GREEN"
|
|
PAL_GREEN: .byte 0, $e3, $c4, $b5, $96, $87, $78, $79, $a, $fa, $eb, $dc, $bd, $ae, $af, $ff, $e2, $b3, $a4, $85, $76, $67, $48, $49, $d9, $da, $bb, $bc, $8d, $8e, $7f, $ff, $42, 3, 4, $e4, $d5, $c6, $b7, $a8, $39, $3a, $1b, $2c, $fc, $fd, $de, $df, $61, $32, $13, 4, $e4, $e5, $d6, $d7, $78, $59, $4a, $4b, $2c, $1d, $e, $fe, $e0, $b1, $a2, $93, $74, $75, $56, $57, $e7, $d8, $79, $ca, $ab, $9c, $9d, $8e, $f0, $d1, $c2, $a3, $84, $85, $76, $77, 8, 9, $f9, $fa, $db, $cc, $bd, $ae, $61, $22, $23, $14, $f4, $e5, $d6, $c7, $58, $59, $3a, $3b, $1c, $d, $fd, $fe, $92, $53, $44, $35, $16, $f6, $e7, $e8, $79, $6a, $5b, $4c, $2d, $3e, $1f, $ef, $53, $14, 5, $e5, $c6, $b7, $a8, $99, $2a, $2b, $c, $d, $dd, $ce, $cf, $ff, $f3, $b4, $95, $86, $57, $38, $29, $1a, $ba, $ab, $9c, $8d, $6e, $5f, $ff, $ff, $95, $56, $27, $18, $e8, $d9, $ca, $bb, $4c, $3d, $2e, $1f, $ef, $ff, $ff, $ff, $c5, $86, $57, $38, $19, $a, $ea, $db, $6c, $5d, $3e, $3f, $ef, $ff, $ff, $ff, $65, $26, 7, $e7, $c8, $b9, $9a, $9b, $2c, $1d, $fd, $fe, $cf, $ff, $ff, $ff, $b4, $75, $56, $37, $28, $19, $e9, $ea, $7b, $6c, $5d, $4e, $2f, $ff, $ff, $ff, $c3, $94, $75, $56, $47, $38, $19, $1a, $aa, $ab, $7c, $7d, $5e, $4f, $ff, $ff, $e2, $a3, $94, $85, $76, $67, $38, $49, $d9, $ca, $ab, $bc, $7d, $7e, $6f, $ff
|
|
.pc = $2f00 "PAL_BLUE"
|
|
PAL_BLUE: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, 0, 0, 0, 0, $c0, $b1, $a2, $a3, $34, $35, $26, $27, $f7, $f8, $f9, $ea, 0, 0, $30, $11, $22, $13, $14, 5, $b5, $96, $97, $98, $79, $6a, $5b, $4c, $81, $42, $43, $34, 5, 6, $f6, $f7, $78, $69, $5a, $5b, $4c, $3d, $1e, $f, $17, $c7, $a8, $89, $5a, $5b, $3c, $1d, $ad, $9e, $7f, $ff, $ff, $ff, $ff, $ff, $78, 9, $e9, $ca, $ab, $7c, $5d, $5e, $de, $cf, $ff, $ff, $ff, $ff, $ff, $ff, $59, $a, $ca, $bb, $8c, $6d, $3e, $2f, $bf, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $49, $f9, $da, $ab, $7c, $5d, $2e, $2f, $af, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $48, $d8, $b9, $aa, $7b, $5c, $2d, $2e, $be, $9f, $ff, $ff, $ff, $ff, $ff, $ff, 7, $97, $88, $69, $4a, $2b, $1c, $2d, $9d, $7e, $6f, $ff, $ff, $ff, $ff, $ff, $81, $62, $53, $44, 5, 6, $f6, $e7, $78, $69, $5a, $5b, $3c, $2d, $2e, $1f, 0, 0, 0, 0, $b0, $b1, $a2, $b3, $44, $35, $36, $37, 8, $f8, $a, $b, 0, 0, 0, 0, 0, $70, $61, $62, $f2, $e3, $d4, $c5, $b6, $b7, $b8, $99, 0, 0, 0, 0, 0, 0, $f0, $f1, $82, $83, $84, $85, $66, $57, $58, $59, 0, 0, 0, 0, 0, $70, $61, $62, $e2, $e3, $d4, $d5, $b6, $a7, $b8, $a9, 0, 0, 0, 0, $a0, $b1, $a2, $a3, $44, $35, $26, $37, $f7, $19, $f9, $fa
|
|
|