mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-08-07 06:30:04 +00:00
5630 lines
332 KiB
Plaintext
5630 lines
332 KiB
Plaintext
Resolved forward reference PALETTE to (const byte*) PALETTE
|
|
Resolved forward reference PALETTE to (const byte*) PALETTE
|
|
Resolved forward reference FLOOR to (const byte*) FLOOR
|
|
Resolved forward reference FLAG to (const byte*) FLAG
|
|
Resolved forward reference SPRITES to (const struct SpriteData*) SPRITES
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITES to (const struct SpriteData*) SPRITES
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Resolved forward reference SPRITE_BUFFER to (const struct SpriteData*) SPRITE_BUFFER
|
|
Inlined call call disableVideoOutput
|
|
Inlined call call disableAudioOutput
|
|
Inlined call call clearVBlankFlag
|
|
Inlined call call waitForVBlank
|
|
Inlined call call waitForVBlank
|
|
Inlined call call ppuDataPrepare (nomodify void*) ppuDataFill::ppuData
|
|
Inlined call call ppuDataPut (byte) ppuDataFill::val
|
|
Inlined call call ppuDataPrepare (nomodify void*) ppuDataTransfer::ppuData
|
|
Inlined call call ppuDataPut *((byte*) ppuDataTransfer::cpuSrc)
|
|
Inlined call call ppuDataPrepare (nomodify void*) ppuDataFetch::ppuData
|
|
Inlined call (byte~) ppuDataFetch::$2 ← call ppuDataRead
|
|
Inlined call call ppuDataPrepare (nomodify void*) ppuDataPutTile::ppuData
|
|
Inlined call call ppuDataPut *((byte*) ppuDataPutTile::tile + (number) 0)
|
|
Inlined call call ppuDataPut *((byte*) ppuDataPutTile::tile + (number) 1)
|
|
Inlined call call ppuDataPrepare (void*)(byte*~) ppuDataPutTile::$3
|
|
Inlined call call ppuDataPut *((byte*) ppuDataPutTile::tile + (number) 2)
|
|
Inlined call call ppuDataPut *((byte*) ppuDataPutTile::tile + (number) 3)
|
|
Inlined call call ppuDataPrepare (nomodify void*) ppuDataSet::ppuData
|
|
Inlined call call ppuDataPut (byte) ppuDataSet::val
|
|
Inlined call call ppuDataPrepare (nomodify void*) ppuDataGet::ppuData
|
|
Inlined call (byte~) ppuDataGet::$1 ← call ppuDataRead
|
|
Inlined call call initNES
|
|
Inlined call call enableVideoOutput
|
|
Inlined call call ppuSpriteBufferDmaTransfer (const struct SpriteData*) SPRITE_BUFFER
|
|
|
|
CONTROL FLOW GRAPH SSA
|
|
@begin: scope:[] from
|
|
to:@1
|
|
|
|
(byte()) readJoy1()
|
|
readJoy1: scope:[readJoy1] from vblank
|
|
(byte*~) readJoy1::$7 ← (byte*)(const struct RICOH_2A03*) APU
|
|
(byte*~) readJoy1::$4 ← (byte*~) readJoy1::$7 + (const byte) OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
*((byte*~) readJoy1::$4) ← (number) 1
|
|
(byte*~) readJoy1::$8 ← (byte*)(const struct RICOH_2A03*) APU
|
|
(byte*~) readJoy1::$5 ← (byte*~) readJoy1::$8 + (const byte) OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
*((byte*~) readJoy1::$5) ← (number) 0
|
|
(byte) readJoy1::joy#0 ← (byte) 0
|
|
(byte) readJoy1::i#0 ← (byte) 0
|
|
to:readJoy1::@1
|
|
readJoy1::@1: scope:[readJoy1] from readJoy1 readJoy1::@2
|
|
(byte) readJoy1::joy#4 ← phi( readJoy1/(byte) readJoy1::joy#0 readJoy1::@2/(byte) readJoy1::joy#1 )
|
|
(byte) readJoy1::i#2 ← phi( readJoy1/(byte) readJoy1::i#0 readJoy1::@2/(byte) readJoy1::i#1 )
|
|
(bool~) readJoy1::$0 ← (byte) readJoy1::i#2 < (number) 8
|
|
if((bool~) readJoy1::$0) goto readJoy1::@2
|
|
to:readJoy1::@3
|
|
readJoy1::@2: scope:[readJoy1] from readJoy1::@1
|
|
(byte) readJoy1::i#3 ← phi( readJoy1::@1/(byte) readJoy1::i#2 )
|
|
(byte) readJoy1::joy#2 ← phi( readJoy1::@1/(byte) readJoy1::joy#4 )
|
|
(byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (number) 1
|
|
(byte*~) readJoy1::$9 ← (byte*)(const struct RICOH_2A03*) APU
|
|
(byte*~) readJoy1::$6 ← (byte*~) readJoy1::$9 + (const byte) OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
(number~) readJoy1::$2 ← *((byte*~) readJoy1::$6) & (number) 1
|
|
(number~) readJoy1::$3 ← (byte~) readJoy1::$1 | (number~) readJoy1::$2
|
|
(byte) readJoy1::joy#1 ← (number~) readJoy1::$3
|
|
(byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#3
|
|
to:readJoy1::@1
|
|
readJoy1::@3: scope:[readJoy1] from readJoy1::@1
|
|
(byte) readJoy1::joy#3 ← phi( readJoy1::@1/(byte) readJoy1::joy#4 )
|
|
(byte) readJoy1::return#0 ← (byte) readJoy1::joy#3
|
|
to:readJoy1::@return
|
|
readJoy1::@return: scope:[readJoy1] from readJoy1::@3
|
|
(byte) readJoy1::return#3 ← phi( readJoy1::@3/(byte) readJoy1::return#0 )
|
|
(byte) readJoy1::return#1 ← (byte) readJoy1::return#3
|
|
return
|
|
to:@return
|
|
|
|
(void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size)
|
|
ppuDataFill: scope:[ppuDataFill] from main::@6 main::@7
|
|
(byte) ppuDataFill::val#8 ← phi( main::@6/(byte) ppuDataFill::val#0 main::@7/(byte) ppuDataFill::val#1 )
|
|
(word) ppuDataFill::size#7 ← phi( main::@6/(word) ppuDataFill::size#0 main::@7/(word) ppuDataFill::size#1 )
|
|
(nomodify void*) ppuDataFill::ppuData#2 ← phi( main::@6/(nomodify void*) ppuDataFill::ppuData#0 main::@7/(nomodify void*) ppuDataFill::ppuData#1 )
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ← (nomodify void*) ppuDataFill::ppuData#2
|
|
to:ppuDataFill::ppuDataPrepare1
|
|
ppuDataFill::ppuDataPrepare1: scope:[ppuDataFill] from ppuDataFill
|
|
(byte) ppuDataFill::val#6 ← phi( ppuDataFill/(byte) ppuDataFill::val#8 )
|
|
(word) ppuDataFill::size#5 ← phi( ppuDataFill/(word) ppuDataFill::size#7 )
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#1 ← phi( ppuDataFill/(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 )
|
|
(byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#1
|
|
(byte*~) ppuDataFill::ppuDataPrepare1_$4 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataFill::ppuDataPrepare1_$2 ← (byte*~) ppuDataFill::ppuDataPrepare1_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
*((byte*~) ppuDataFill::ppuDataPrepare1_$2) ← (byte~) ppuDataFill::ppuDataPrepare1_$0
|
|
(byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#1
|
|
(byte*~) ppuDataFill::ppuDataPrepare1_$5 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataFill::ppuDataPrepare1_$3 ← (byte*~) ppuDataFill::ppuDataPrepare1_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
*((byte*~) ppuDataFill::ppuDataPrepare1_$3) ← (byte~) ppuDataFill::ppuDataPrepare1_$1
|
|
to:ppuDataFill::@3
|
|
ppuDataFill::@3: scope:[ppuDataFill] from ppuDataFill::ppuDataPrepare1
|
|
(byte) ppuDataFill::val#4 ← phi( ppuDataFill::ppuDataPrepare1/(byte) ppuDataFill::val#6 )
|
|
(word) ppuDataFill::size#3 ← phi( ppuDataFill::ppuDataPrepare1/(word) ppuDataFill::size#5 )
|
|
(word) ppuDataFill::i#0 ← (word) 0
|
|
to:ppuDataFill::@1
|
|
ppuDataFill::@1: scope:[ppuDataFill] from ppuDataFill::@3 ppuDataFill::@4
|
|
(byte) ppuDataFill::val#3 ← phi( ppuDataFill::@3/(byte) ppuDataFill::val#4 ppuDataFill::@4/(byte) ppuDataFill::val#5 )
|
|
(word) ppuDataFill::size#2 ← phi( ppuDataFill::@3/(word) ppuDataFill::size#3 ppuDataFill::@4/(word) ppuDataFill::size#4 )
|
|
(word) ppuDataFill::i#2 ← phi( ppuDataFill::@3/(word) ppuDataFill::i#0 ppuDataFill::@4/(word) ppuDataFill::i#1 )
|
|
(bool~) ppuDataFill::$1 ← (word) ppuDataFill::i#2 < (word) ppuDataFill::size#2
|
|
if((bool~) ppuDataFill::$1) goto ppuDataFill::@2
|
|
to:ppuDataFill::@return
|
|
ppuDataFill::@2: scope:[ppuDataFill] from ppuDataFill::@1
|
|
(word) ppuDataFill::size#8 ← phi( ppuDataFill::@1/(word) ppuDataFill::size#2 )
|
|
(word) ppuDataFill::i#5 ← phi( ppuDataFill::@1/(word) ppuDataFill::i#2 )
|
|
(byte) ppuDataFill::val#2 ← phi( ppuDataFill::@1/(byte) ppuDataFill::val#3 )
|
|
(byte) ppuDataFill::ppuDataPut1_val#0 ← (byte) ppuDataFill::val#2
|
|
to:ppuDataFill::ppuDataPut1
|
|
ppuDataFill::ppuDataPut1: scope:[ppuDataFill] from ppuDataFill::@2
|
|
(byte) ppuDataFill::val#7 ← phi( ppuDataFill::@2/(byte) ppuDataFill::val#2 )
|
|
(word) ppuDataFill::size#6 ← phi( ppuDataFill::@2/(word) ppuDataFill::size#8 )
|
|
(word) ppuDataFill::i#4 ← phi( ppuDataFill::@2/(word) ppuDataFill::i#5 )
|
|
(byte) ppuDataFill::ppuDataPut1_val#1 ← phi( ppuDataFill::@2/(byte) ppuDataFill::ppuDataPut1_val#0 )
|
|
(byte*~) ppuDataFill::ppuDataPut1_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataFill::ppuDataPut1_$0 ← (byte*~) ppuDataFill::ppuDataPut1_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
*((byte*~) ppuDataFill::ppuDataPut1_$0) ← (byte) ppuDataFill::ppuDataPut1_val#1
|
|
to:ppuDataFill::@4
|
|
ppuDataFill::@4: scope:[ppuDataFill] from ppuDataFill::ppuDataPut1
|
|
(byte) ppuDataFill::val#5 ← phi( ppuDataFill::ppuDataPut1/(byte) ppuDataFill::val#7 )
|
|
(word) ppuDataFill::size#4 ← phi( ppuDataFill::ppuDataPut1/(word) ppuDataFill::size#6 )
|
|
(word) ppuDataFill::i#3 ← phi( ppuDataFill::ppuDataPut1/(word) ppuDataFill::i#4 )
|
|
(word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#3
|
|
to:ppuDataFill::@1
|
|
ppuDataFill::@return: scope:[ppuDataFill] from ppuDataFill::@1
|
|
return
|
|
to:@return
|
|
|
|
(void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size)
|
|
ppuDataTransfer: scope:[ppuDataTransfer] from main::@5
|
|
(word) ppuDataTransfer::size#6 ← phi( main::@5/(word) ppuDataTransfer::size#0 )
|
|
(nomodify void*) ppuDataTransfer::cpuData#3 ← phi( main::@5/(nomodify void*) ppuDataTransfer::cpuData#0 )
|
|
(nomodify void*) ppuDataTransfer::ppuData#1 ← phi( main::@5/(nomodify void*) ppuDataTransfer::ppuData#0 )
|
|
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ← (nomodify void*) ppuDataTransfer::ppuData#1
|
|
to:ppuDataTransfer::ppuDataPrepare1
|
|
ppuDataTransfer::ppuDataPrepare1: scope:[ppuDataTransfer] from ppuDataTransfer
|
|
(word) ppuDataTransfer::size#4 ← phi( ppuDataTransfer/(word) ppuDataTransfer::size#6 )
|
|
(nomodify void*) ppuDataTransfer::cpuData#2 ← phi( ppuDataTransfer/(nomodify void*) ppuDataTransfer::cpuData#3 )
|
|
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#1 ← phi( ppuDataTransfer/(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 )
|
|
(byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#1
|
|
(byte*~) ppuDataTransfer::ppuDataPrepare1_$4 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataTransfer::ppuDataPrepare1_$2 ← (byte*~) ppuDataTransfer::ppuDataPrepare1_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
*((byte*~) ppuDataTransfer::ppuDataPrepare1_$2) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0
|
|
(byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#1
|
|
(byte*~) ppuDataTransfer::ppuDataPrepare1_$5 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataTransfer::ppuDataPrepare1_$3 ← (byte*~) ppuDataTransfer::ppuDataPrepare1_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
*((byte*~) ppuDataTransfer::ppuDataPrepare1_$3) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1
|
|
to:ppuDataTransfer::@3
|
|
ppuDataTransfer::@3: scope:[ppuDataTransfer] from ppuDataTransfer::ppuDataPrepare1
|
|
(word) ppuDataTransfer::size#2 ← phi( ppuDataTransfer::ppuDataPrepare1/(word) ppuDataTransfer::size#4 )
|
|
(nomodify void*) ppuDataTransfer::cpuData#1 ← phi( ppuDataTransfer::ppuDataPrepare1/(nomodify void*) ppuDataTransfer::cpuData#2 )
|
|
(byte*) ppuDataTransfer::cpuSrc#0 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#1
|
|
(word) ppuDataTransfer::i#0 ← (word) 0
|
|
to:ppuDataTransfer::@1
|
|
ppuDataTransfer::@1: scope:[ppuDataTransfer] from ppuDataTransfer::@3 ppuDataTransfer::@4
|
|
(byte*) ppuDataTransfer::cpuSrc#4 ← phi( ppuDataTransfer::@3/(byte*) ppuDataTransfer::cpuSrc#0 ppuDataTransfer::@4/(byte*) ppuDataTransfer::cpuSrc#1 )
|
|
(word) ppuDataTransfer::size#1 ← phi( ppuDataTransfer::@3/(word) ppuDataTransfer::size#2 ppuDataTransfer::@4/(word) ppuDataTransfer::size#3 )
|
|
(word) ppuDataTransfer::i#2 ← phi( ppuDataTransfer::@3/(word) ppuDataTransfer::i#0 ppuDataTransfer::@4/(word) ppuDataTransfer::i#1 )
|
|
(bool~) ppuDataTransfer::$1 ← (word) ppuDataTransfer::i#2 < (word) ppuDataTransfer::size#1
|
|
if((bool~) ppuDataTransfer::$1) goto ppuDataTransfer::@2
|
|
to:ppuDataTransfer::@return
|
|
ppuDataTransfer::@2: scope:[ppuDataTransfer] from ppuDataTransfer::@1
|
|
(word) ppuDataTransfer::size#7 ← phi( ppuDataTransfer::@1/(word) ppuDataTransfer::size#1 )
|
|
(word) ppuDataTransfer::i#5 ← phi( ppuDataTransfer::@1/(word) ppuDataTransfer::i#2 )
|
|
(byte*) ppuDataTransfer::cpuSrc#2 ← phi( ppuDataTransfer::@1/(byte*) ppuDataTransfer::cpuSrc#4 )
|
|
(byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2)
|
|
to:ppuDataTransfer::ppuDataPut1
|
|
ppuDataTransfer::ppuDataPut1: scope:[ppuDataTransfer] from ppuDataTransfer::@2
|
|
(word) ppuDataTransfer::size#5 ← phi( ppuDataTransfer::@2/(word) ppuDataTransfer::size#7 )
|
|
(word) ppuDataTransfer::i#4 ← phi( ppuDataTransfer::@2/(word) ppuDataTransfer::i#5 )
|
|
(byte*) ppuDataTransfer::cpuSrc#5 ← phi( ppuDataTransfer::@2/(byte*) ppuDataTransfer::cpuSrc#2 )
|
|
(byte) ppuDataTransfer::ppuDataPut1_val#1 ← phi( ppuDataTransfer::@2/(byte) ppuDataTransfer::ppuDataPut1_val#0 )
|
|
(byte*~) ppuDataTransfer::ppuDataPut1_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataTransfer::ppuDataPut1_$0 ← (byte*~) ppuDataTransfer::ppuDataPut1_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
*((byte*~) ppuDataTransfer::ppuDataPut1_$0) ← (byte) ppuDataTransfer::ppuDataPut1_val#1
|
|
to:ppuDataTransfer::@4
|
|
ppuDataTransfer::@4: scope:[ppuDataTransfer] from ppuDataTransfer::ppuDataPut1
|
|
(word) ppuDataTransfer::size#3 ← phi( ppuDataTransfer::ppuDataPut1/(word) ppuDataTransfer::size#5 )
|
|
(word) ppuDataTransfer::i#3 ← phi( ppuDataTransfer::ppuDataPut1/(word) ppuDataTransfer::i#4 )
|
|
(byte*) ppuDataTransfer::cpuSrc#3 ← phi( ppuDataTransfer::ppuDataPut1/(byte*) ppuDataTransfer::cpuSrc#5 )
|
|
(byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#3
|
|
(word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#3
|
|
to:ppuDataTransfer::@1
|
|
ppuDataTransfer::@return: scope:[ppuDataTransfer] from ppuDataTransfer::@1
|
|
return
|
|
to:@return
|
|
|
|
(void()) ppuDataPutTile((nomodify void*) ppuDataPutTile::ppuData , (byte*) ppuDataPutTile::tile)
|
|
ppuDataPutTile: scope:[ppuDataPutTile] from main::@2 main::@3
|
|
(byte*) ppuDataPutTile::tile#10 ← phi( main::@2/(byte*) ppuDataPutTile::tile#0 main::@3/(byte*) ppuDataPutTile::tile#1 )
|
|
(nomodify void*) ppuDataPutTile::ppuData#2 ← phi( main::@2/(nomodify void*) ppuDataPutTile::ppuData#0 main::@3/(nomodify void*) ppuDataPutTile::ppuData#1 )
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData#0 ← (nomodify void*) ppuDataPutTile::ppuData#2
|
|
to:ppuDataPutTile::ppuDataPrepare1
|
|
ppuDataPutTile::ppuDataPrepare1: scope:[ppuDataPutTile] from ppuDataPutTile
|
|
(nomodify void*) ppuDataPutTile::ppuData#8 ← phi( ppuDataPutTile/(nomodify void*) ppuDataPutTile::ppuData#2 )
|
|
(byte*) ppuDataPutTile::tile#6 ← phi( ppuDataPutTile/(byte*) ppuDataPutTile::tile#10 )
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData#1 ← phi( ppuDataPutTile/(nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData#0 )
|
|
(byte~) ppuDataPutTile::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData#1
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare1_$4 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare1_$2 ← (byte*~) ppuDataPutTile::ppuDataPrepare1_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
*((byte*~) ppuDataPutTile::ppuDataPrepare1_$2) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData#1
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare1_$5 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare1_$3 ← (byte*~) ppuDataPutTile::ppuDataPrepare1_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
*((byte*~) ppuDataPutTile::ppuDataPrepare1_$3) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$1
|
|
to:ppuDataPutTile::@1
|
|
ppuDataPutTile::@1: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPrepare1
|
|
(nomodify void*) ppuDataPutTile::ppuData#7 ← phi( ppuDataPutTile::ppuDataPrepare1/(nomodify void*) ppuDataPutTile::ppuData#8 )
|
|
(byte*) ppuDataPutTile::tile#2 ← phi( ppuDataPutTile::ppuDataPrepare1/(byte*) ppuDataPutTile::tile#6 )
|
|
(byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#2 + (number) 0)
|
|
to:ppuDataPutTile::ppuDataPut1
|
|
ppuDataPutTile::ppuDataPut1: scope:[ppuDataPutTile] from ppuDataPutTile::@1
|
|
(nomodify void*) ppuDataPutTile::ppuData#6 ← phi( ppuDataPutTile::@1/(nomodify void*) ppuDataPutTile::ppuData#7 )
|
|
(byte*) ppuDataPutTile::tile#7 ← phi( ppuDataPutTile::@1/(byte*) ppuDataPutTile::tile#2 )
|
|
(byte) ppuDataPutTile::ppuDataPut1_val#1 ← phi( ppuDataPutTile::@1/(byte) ppuDataPutTile::ppuDataPut1_val#0 )
|
|
(byte*~) ppuDataPutTile::ppuDataPut1_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataPutTile::ppuDataPut1_$0 ← (byte*~) ppuDataPutTile::ppuDataPut1_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
*((byte*~) ppuDataPutTile::ppuDataPut1_$0) ← (byte) ppuDataPutTile::ppuDataPut1_val#1
|
|
to:ppuDataPutTile::@2
|
|
ppuDataPutTile::@2: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPut1
|
|
(nomodify void*) ppuDataPutTile::ppuData#5 ← phi( ppuDataPutTile::ppuDataPut1/(nomodify void*) ppuDataPutTile::ppuData#6 )
|
|
(byte*) ppuDataPutTile::tile#3 ← phi( ppuDataPutTile::ppuDataPut1/(byte*) ppuDataPutTile::tile#7 )
|
|
(byte) ppuDataPutTile::ppuDataPut2_val#0 ← *((byte*) ppuDataPutTile::tile#3 + (number) 1)
|
|
to:ppuDataPutTile::ppuDataPut2
|
|
ppuDataPutTile::ppuDataPut2: scope:[ppuDataPutTile] from ppuDataPutTile::@2
|
|
(byte*) ppuDataPutTile::tile#12 ← phi( ppuDataPutTile::@2/(byte*) ppuDataPutTile::tile#3 )
|
|
(nomodify void*) ppuDataPutTile::ppuData#4 ← phi( ppuDataPutTile::@2/(nomodify void*) ppuDataPutTile::ppuData#5 )
|
|
(byte) ppuDataPutTile::ppuDataPut2_val#1 ← phi( ppuDataPutTile::@2/(byte) ppuDataPutTile::ppuDataPut2_val#0 )
|
|
(byte*~) ppuDataPutTile::ppuDataPut2_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataPutTile::ppuDataPut2_$0 ← (byte*~) ppuDataPutTile::ppuDataPut2_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
*((byte*~) ppuDataPutTile::ppuDataPut2_$0) ← (byte) ppuDataPutTile::ppuDataPut2_val#1
|
|
to:ppuDataPutTile::@3
|
|
ppuDataPutTile::@3: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPut2
|
|
(byte*) ppuDataPutTile::tile#11 ← phi( ppuDataPutTile::ppuDataPut2/(byte*) ppuDataPutTile::tile#12 )
|
|
(nomodify void*) ppuDataPutTile::ppuData#3 ← phi( ppuDataPutTile::ppuDataPut2/(nomodify void*) ppuDataPutTile::ppuData#4 )
|
|
(byte*~) ppuDataPutTile::$7 ← (byte*)(nomodify void*) ppuDataPutTile::ppuData#3
|
|
(byte*~) ppuDataPutTile::$3 ← (byte*~) ppuDataPutTile::$7 + (number) $20
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ← (void*)(byte*~) ppuDataPutTile::$3
|
|
to:ppuDataPutTile::ppuDataPrepare2
|
|
ppuDataPutTile::ppuDataPrepare2: scope:[ppuDataPutTile] from ppuDataPutTile::@3
|
|
(byte*) ppuDataPutTile::tile#8 ← phi( ppuDataPutTile::@3/(byte*) ppuDataPutTile::tile#11 )
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData#1 ← phi( ppuDataPutTile::@3/(nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 )
|
|
(byte~) ppuDataPutTile::ppuDataPrepare2_$0 ← > (nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData#1
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare2_$4 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare2_$2 ← (byte*~) ppuDataPutTile::ppuDataPrepare2_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
*((byte*~) ppuDataPutTile::ppuDataPrepare2_$2) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare2_$1 ← < (nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData#1
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare2_$5 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare2_$3 ← (byte*~) ppuDataPutTile::ppuDataPrepare2_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
*((byte*~) ppuDataPutTile::ppuDataPrepare2_$3) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$1
|
|
to:ppuDataPutTile::@4
|
|
ppuDataPutTile::@4: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPrepare2
|
|
(byte*) ppuDataPutTile::tile#4 ← phi( ppuDataPutTile::ppuDataPrepare2/(byte*) ppuDataPutTile::tile#8 )
|
|
(byte) ppuDataPutTile::ppuDataPut3_val#0 ← *((byte*) ppuDataPutTile::tile#4 + (number) 2)
|
|
to:ppuDataPutTile::ppuDataPut3
|
|
ppuDataPutTile::ppuDataPut3: scope:[ppuDataPutTile] from ppuDataPutTile::@4
|
|
(byte*) ppuDataPutTile::tile#9 ← phi( ppuDataPutTile::@4/(byte*) ppuDataPutTile::tile#4 )
|
|
(byte) ppuDataPutTile::ppuDataPut3_val#1 ← phi( ppuDataPutTile::@4/(byte) ppuDataPutTile::ppuDataPut3_val#0 )
|
|
(byte*~) ppuDataPutTile::ppuDataPut3_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataPutTile::ppuDataPut3_$0 ← (byte*~) ppuDataPutTile::ppuDataPut3_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
*((byte*~) ppuDataPutTile::ppuDataPut3_$0) ← (byte) ppuDataPutTile::ppuDataPut3_val#1
|
|
to:ppuDataPutTile::@5
|
|
ppuDataPutTile::@5: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPut3
|
|
(byte*) ppuDataPutTile::tile#5 ← phi( ppuDataPutTile::ppuDataPut3/(byte*) ppuDataPutTile::tile#9 )
|
|
(byte) ppuDataPutTile::ppuDataPut4_val#0 ← *((byte*) ppuDataPutTile::tile#5 + (number) 3)
|
|
to:ppuDataPutTile::ppuDataPut4
|
|
ppuDataPutTile::ppuDataPut4: scope:[ppuDataPutTile] from ppuDataPutTile::@5
|
|
(byte) ppuDataPutTile::ppuDataPut4_val#1 ← phi( ppuDataPutTile::@5/(byte) ppuDataPutTile::ppuDataPut4_val#0 )
|
|
(byte*~) ppuDataPutTile::ppuDataPut4_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) ppuDataPutTile::ppuDataPut4_$0 ← (byte*~) ppuDataPutTile::ppuDataPut4_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
*((byte*~) ppuDataPutTile::ppuDataPut4_$0) ← (byte) ppuDataPutTile::ppuDataPut4_val#1
|
|
to:ppuDataPutTile::@return
|
|
ppuDataPutTile::@return: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPut4
|
|
return
|
|
to:@return
|
|
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
memcpy: scope:[memcpy] from main::@10
|
|
(word) memcpy::num#1 ← phi( main::@10/(word) memcpy::num#0 )
|
|
(void*) memcpy::destination#1 ← phi( main::@10/(void*) memcpy::destination#0 )
|
|
(void*) memcpy::source#1 ← phi( main::@10/(void*) memcpy::source#0 )
|
|
(byte*) memcpy::src#0 ← ((byte*)) (void*) memcpy::source#1
|
|
(byte*) memcpy::dst#0 ← ((byte*)) (void*) memcpy::destination#1
|
|
(byte*~) memcpy::$2 ← (byte*)(void*) memcpy::source#1
|
|
(byte*~) memcpy::$0 ← (byte*~) memcpy::$2 + (word) memcpy::num#1
|
|
(byte*) memcpy::src_end#0 ← (byte*~) memcpy::$0
|
|
to:memcpy::@1
|
|
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
|
(void*) memcpy::destination#3 ← phi( memcpy/(void*) memcpy::destination#1 memcpy::@2/(void*) memcpy::destination#4 )
|
|
(byte*) memcpy::dst#3 ← phi( memcpy/(byte*) memcpy::dst#0 memcpy::@2/(byte*) memcpy::dst#1 )
|
|
(byte*) memcpy::src_end#1 ← phi( memcpy/(byte*) memcpy::src_end#0 memcpy::@2/(byte*) memcpy::src_end#2 )
|
|
(byte*) memcpy::src#2 ← phi( memcpy/(byte*) memcpy::src#0 memcpy::@2/(byte*) memcpy::src#1 )
|
|
(bool~) memcpy::$1 ← (byte*) memcpy::src#2 != (byte*) memcpy::src_end#1
|
|
if((bool~) memcpy::$1) goto memcpy::@2
|
|
to:memcpy::@3
|
|
memcpy::@2: scope:[memcpy] from memcpy::@1
|
|
(void*) memcpy::destination#4 ← phi( memcpy::@1/(void*) memcpy::destination#3 )
|
|
(byte*) memcpy::src_end#2 ← phi( memcpy::@1/(byte*) memcpy::src_end#1 )
|
|
(byte*) memcpy::dst#2 ← phi( memcpy::@1/(byte*) memcpy::dst#3 )
|
|
(byte*) memcpy::src#3 ← phi( memcpy::@1/(byte*) memcpy::src#2 )
|
|
*((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#3)
|
|
(byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
|
(byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#3
|
|
to:memcpy::@1
|
|
memcpy::@3: scope:[memcpy] from memcpy::@1
|
|
(void*) memcpy::destination#2 ← phi( memcpy::@1/(void*) memcpy::destination#3 )
|
|
(void*) memcpy::return#0 ← (void*) memcpy::destination#2
|
|
to:memcpy::@return
|
|
memcpy::@return: scope:[memcpy] from memcpy::@3
|
|
(void*) memcpy::return#3 ← phi( memcpy::@3/(void*) memcpy::return#0 )
|
|
(void*) memcpy::return#1 ← (void*) memcpy::return#3
|
|
return
|
|
to:@return
|
|
|
|
(void()) main()
|
|
main: scope:[main] from @1
|
|
to:main::initNES1
|
|
main::initNES1: scope:[main] from main
|
|
asm { cld ldx#$ff txs }
|
|
to:main::initNES1_disableVideoOutput1
|
|
main::initNES1_disableVideoOutput1: scope:[main] from main::initNES1
|
|
(byte*~) main::initNES1_disableVideoOutput1_$2 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) main::initNES1_disableVideoOutput1_$0 ← (byte*~) main::initNES1_disableVideoOutput1_$2 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL
|
|
*((byte*~) main::initNES1_disableVideoOutput1_$0) ← (number) 0
|
|
(byte*~) main::initNES1_disableVideoOutput1_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) main::initNES1_disableVideoOutput1_$1 ← (byte*~) main::initNES1_disableVideoOutput1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
*((byte*~) main::initNES1_disableVideoOutput1_$1) ← (number) 0
|
|
to:main::initNES1_disableAudioOutput1
|
|
main::initNES1_disableAudioOutput1: scope:[main] from main::initNES1_disableVideoOutput1
|
|
*((const nomodify byte*) FR_COUNTER) ← (number) $40
|
|
(byte*~) main::initNES1_disableAudioOutput1_$1 ← (byte*)(const struct RICOH_2A03*) APU
|
|
(byte*~) main::initNES1_disableAudioOutput1_$0 ← (byte*~) main::initNES1_disableAudioOutput1_$1 + (const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ
|
|
*((byte*~) main::initNES1_disableAudioOutput1_$0) ← (number) $40
|
|
to:main::initNES1_clearVBlankFlag1
|
|
main::initNES1_clearVBlankFlag1: scope:[main] from main::initNES1_disableAudioOutput1
|
|
asm { ldaPPU_PPUSTATUS }
|
|
to:main::initNES1_waitForVBlank1
|
|
main::initNES1_waitForVBlank1: scope:[main] from main::initNES1_clearVBlankFlag1
|
|
to:main::initNES1_waitForVBlank1_@1
|
|
main::initNES1_waitForVBlank1_@1: scope:[main] from main::initNES1_waitForVBlank1 main::initNES1_waitForVBlank1_@1
|
|
(byte*~) main::initNES1_waitForVBlank1_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) main::initNES1_waitForVBlank1_$2 ← (byte*~) main::initNES1_waitForVBlank1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
(number~) main::initNES1_waitForVBlank1_$0 ← *((byte*~) main::initNES1_waitForVBlank1_$2) & (number) $80
|
|
(bool~) main::initNES1_waitForVBlank1_$4 ← (number) 0 != (number~) main::initNES1_waitForVBlank1_$0
|
|
(bool~) main::initNES1_waitForVBlank1_$1 ← ! (bool~) main::initNES1_waitForVBlank1_$4
|
|
if((bool~) main::initNES1_waitForVBlank1_$1) goto main::initNES1_waitForVBlank1_@1
|
|
to:main::initNES1_@6
|
|
main::initNES1_@6: scope:[main] from main::initNES1_waitForVBlank1_@1
|
|
(byte) main::initNES1_i#0 ← (byte) 0
|
|
to:main::initNES1_@1
|
|
main::initNES1_@1: scope:[main] from main::initNES1_@1 main::initNES1_@6
|
|
(byte) main::initNES1_i#2 ← phi( main::initNES1_@1/(byte) main::initNES1_i#1 main::initNES1_@6/(byte) main::initNES1_i#0 )
|
|
*((const nomodify byte*) MEMORY+(number) 0 + (byte) main::initNES1_i#2) ← (number) 0
|
|
*((const nomodify byte*) MEMORY+(number) $100 + (byte) main::initNES1_i#2) ← (number) 0
|
|
*((const nomodify byte*) MEMORY+(number) $200 + (byte) main::initNES1_i#2) ← (number) 0
|
|
*((const nomodify byte*) MEMORY+(number) $300 + (byte) main::initNES1_i#2) ← (number) 0
|
|
*((const nomodify byte*) MEMORY+(number) $400 + (byte) main::initNES1_i#2) ← (number) 0
|
|
*((const nomodify byte*) MEMORY+(number) $500 + (byte) main::initNES1_i#2) ← (number) 0
|
|
*((const nomodify byte*) MEMORY+(number) $600 + (byte) main::initNES1_i#2) ← (number) 0
|
|
*((const nomodify byte*) MEMORY+(number) $700 + (byte) main::initNES1_i#2) ← (number) 0
|
|
(byte) main::initNES1_i#1 ← ++ (byte) main::initNES1_i#2
|
|
(bool~) main::initNES1_$5 ← (number) 0 != (byte) main::initNES1_i#1
|
|
if((bool~) main::initNES1_$5) goto main::initNES1_@1
|
|
to:main::initNES1_waitForVBlank2
|
|
main::initNES1_waitForVBlank2: scope:[main] from main::initNES1_@1
|
|
to:main::initNES1_waitForVBlank2_@1
|
|
main::initNES1_waitForVBlank2_@1: scope:[main] from main::initNES1_waitForVBlank2 main::initNES1_waitForVBlank2_@1
|
|
(byte*~) main::initNES1_waitForVBlank2_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) main::initNES1_waitForVBlank2_$2 ← (byte*~) main::initNES1_waitForVBlank2_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
(number~) main::initNES1_waitForVBlank2_$0 ← *((byte*~) main::initNES1_waitForVBlank2_$2) & (number) $80
|
|
(bool~) main::initNES1_waitForVBlank2_$4 ← (number) 0 != (number~) main::initNES1_waitForVBlank2_$0
|
|
(bool~) main::initNES1_waitForVBlank2_$1 ← ! (bool~) main::initNES1_waitForVBlank2_$4
|
|
if((bool~) main::initNES1_waitForVBlank2_$1) goto main::initNES1_waitForVBlank2_@1
|
|
to:main::initNES1_@7
|
|
main::initNES1_@7: scope:[main] from main::initNES1_waitForVBlank2_@1
|
|
asm { ldaPPU_PPUSTATUS }
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::initNES1_@7
|
|
(byte~) main::$1 ← sizeof (const byte*) PALETTE
|
|
(nomodify void*) ppuDataTransfer::ppuData#0 ← (void*)(const nomodify byte*) PPU_PALETTE
|
|
(nomodify void*) ppuDataTransfer::cpuData#0 ← (void*)(const byte*) PALETTE
|
|
(word) ppuDataTransfer::size#0 ← (byte~) main::$1
|
|
call ppuDataTransfer
|
|
to:main::@6
|
|
main::@6: scope:[main] from main::@5
|
|
(nomodify void*) ppuDataFill::ppuData#0 ← (void*)(const nomodify byte*) PPU_NAME_TABLE_0
|
|
(byte) ppuDataFill::val#0 ← (number) $fc
|
|
(word) ppuDataFill::size#0 ← (number) $3c0
|
|
call ppuDataFill
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::@6
|
|
(nomodify void*) ppuDataFill::ppuData#1 ← (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0
|
|
(byte) ppuDataFill::val#1 ← (number) 0
|
|
(word) ppuDataFill::size#1 ← (number) $40
|
|
call ppuDataFill
|
|
to:main::@8
|
|
main::@8: scope:[main] from main::@7
|
|
(byte) main::x#0 ← (byte) 0
|
|
to:main::@1
|
|
main::@1: scope:[main] from main::@8 main::@9
|
|
(byte) main::x#2 ← phi( main::@8/(byte) main::x#0 main::@9/(byte) main::x#1 )
|
|
(bool~) main::$9 ← (byte) main::x#2 < (number) $20
|
|
if((bool~) main::$9) goto main::@2
|
|
to:main::@3
|
|
main::@2: scope:[main] from main::@1
|
|
(byte) main::x#3 ← phi( main::@1/(byte) main::x#2 )
|
|
(byte*~) main::$10 ← (const nomodify byte*) PPU_NAME_TABLE_0+(number) $14*(number) $20 + (byte) main::x#3
|
|
(nomodify void*) ppuDataPutTile::ppuData#0 ← (void*)(byte*~) main::$10
|
|
(byte*) ppuDataPutTile::tile#0 ← (const byte*) FLOOR
|
|
call ppuDataPutTile
|
|
to:main::@9
|
|
main::@9: scope:[main] from main::@2
|
|
(byte) main::x#4 ← phi( main::@2/(byte) main::x#3 )
|
|
(byte) main::x#1 ← (byte) main::x#4 + (number) 2
|
|
to:main::@1
|
|
main::@3: scope:[main] from main::@1
|
|
(nomodify void*) ppuDataPutTile::ppuData#1 ← (void*)(const nomodify byte*) PPU_NAME_TABLE_0+(number) $12*(number) $20+(number) $1c
|
|
(byte*) ppuDataPutTile::tile#1 ← (const byte*) FLAG
|
|
call ppuDataPutTile
|
|
to:main::@10
|
|
main::@10: scope:[main] from main::@3
|
|
(byte~) main::$6 ← sizeof (const struct SpriteData*) SPRITES
|
|
(void*) memcpy::destination#0 ← (void*)(const struct SpriteData*) SPRITE_BUFFER
|
|
(void*) memcpy::source#0 ← (void*)(const struct SpriteData*) SPRITES
|
|
(word) memcpy::num#0 ← (byte~) main::$6
|
|
call memcpy
|
|
(void*) memcpy::return#2 ← (void*) memcpy::return#1
|
|
to:main::@11
|
|
main::@11: scope:[main] from main::@10
|
|
to:main::enableVideoOutput1
|
|
main::enableVideoOutput1: scope:[main] from main::@11
|
|
(byte*~) main::enableVideoOutput1_$2 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) main::enableVideoOutput1_$0 ← (byte*~) main::enableVideoOutput1_$2 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL
|
|
*((byte*~) main::enableVideoOutput1_$0) ← (number) $80
|
|
(byte*~) main::enableVideoOutput1_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) main::enableVideoOutput1_$1 ← (byte*~) main::enableVideoOutput1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
*((byte*~) main::enableVideoOutput1_$1) ← (number) $1e
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@4 main::enableVideoOutput1
|
|
(bool~) main::$12 ← (number) 0 != (number) 1
|
|
if((bool~) main::$12) goto main::@4
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@4
|
|
return
|
|
to:@return
|
|
|
|
interrupt(HARDWARE_STACK)(void()) vblank()
|
|
vblank: scope:[vblank] from
|
|
call readJoy1
|
|
(byte) readJoy1::return#2 ← (byte) readJoy1::return#1
|
|
to:vblank::@10
|
|
vblank::@10: scope:[vblank] from vblank
|
|
(byte) readJoy1::return#4 ← phi( vblank/(byte) readJoy1::return#2 )
|
|
(byte~) vblank::$0 ← (byte) readJoy1::return#4
|
|
(byte) vblank::joy#0 ← (byte~) vblank::$0
|
|
(byte~) vblank::$1 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN
|
|
(bool~) vblank::$62 ← (number) 0 != (byte~) vblank::$1
|
|
(bool~) vblank::$2 ← ! (bool~) vblank::$62
|
|
if((bool~) vblank::$2) goto vblank::@1
|
|
to:vblank::@5
|
|
vblank::@1: scope:[vblank] from vblank::@10 vblank::@5
|
|
(byte) vblank::joy#1 ← phi( vblank::@10/(byte) vblank::joy#0 vblank::@5/(byte) vblank::joy#4 )
|
|
(byte~) vblank::$3 ← (byte) vblank::joy#1 & (const nomodify byte) JOY_UP
|
|
(bool~) vblank::$63 ← (number) 0 != (byte~) vblank::$3
|
|
(bool~) vblank::$4 ← ! (bool~) vblank::$63
|
|
if((bool~) vblank::$4) goto vblank::@2
|
|
to:vblank::@6
|
|
vblank::@5: scope:[vblank] from vblank::@10
|
|
(byte) vblank::joy#4 ← phi( vblank::@10/(byte) vblank::joy#0 )
|
|
(number~) vblank::$27 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$27) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$27)
|
|
(number~) vblank::$29 ← (number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$29) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$29)
|
|
(number~) vblank::$31 ← (number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$31) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$31)
|
|
(number~) vblank::$33 ← (number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$33) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$33)
|
|
to:vblank::@1
|
|
vblank::@2: scope:[vblank] from vblank::@1 vblank::@6
|
|
(byte) vblank::joy#2 ← phi( vblank::@1/(byte) vblank::joy#1 vblank::@6/(byte) vblank::joy#5 )
|
|
(byte~) vblank::$5 ← (byte) vblank::joy#2 & (const nomodify byte) JOY_LEFT
|
|
(bool~) vblank::$64 ← (number) 0 != (byte~) vblank::$5
|
|
(bool~) vblank::$6 ← ! (bool~) vblank::$64
|
|
if((bool~) vblank::$6) goto vblank::@3
|
|
to:vblank::@7
|
|
vblank::@6: scope:[vblank] from vblank::@1
|
|
(byte) vblank::joy#5 ← phi( vblank::@1/(byte) vblank::joy#1 )
|
|
(number~) vblank::$35 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$35) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$35)
|
|
(number~) vblank::$37 ← (number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$37) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$37)
|
|
(number~) vblank::$39 ← (number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$39) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$39)
|
|
(number~) vblank::$41 ← (number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$41) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (number~) vblank::$41)
|
|
to:vblank::@2
|
|
vblank::@3: scope:[vblank] from vblank::@2 vblank::@7
|
|
(byte) vblank::joy#3 ← phi( vblank::@2/(byte) vblank::joy#2 vblank::@7/(byte) vblank::joy#6 )
|
|
(byte~) vblank::$7 ← (byte) vblank::joy#3 & (const nomodify byte) JOY_RIGHT
|
|
(bool~) vblank::$65 ← (number) 0 != (byte~) vblank::$7
|
|
(bool~) vblank::$8 ← ! (bool~) vblank::$65
|
|
if((bool~) vblank::$8) goto vblank::@4
|
|
to:vblank::@8
|
|
vblank::@7: scope:[vblank] from vblank::@2
|
|
(byte) vblank::joy#6 ← phi( vblank::@2/(byte) vblank::joy#2 )
|
|
(number~) vblank::$43 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$43) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$43)
|
|
(number~) vblank::$45 ← (number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$45) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$45)
|
|
(number~) vblank::$47 ← (number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$47) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$47)
|
|
(number~) vblank::$49 ← (number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$49) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$49)
|
|
to:vblank::@3
|
|
vblank::@4: scope:[vblank] from vblank::@3 vblank::@8
|
|
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 ← (const struct SpriteData*) SPRITE_BUFFER
|
|
to:vblank::ppuSpriteBufferDmaTransfer1
|
|
vblank::ppuSpriteBufferDmaTransfer1: scope:[vblank] from vblank::@4
|
|
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#1 ← phi( vblank::@4/(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 )
|
|
(byte*~) vblank::ppuSpriteBufferDmaTransfer1_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1 ← (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR
|
|
*((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1) ← (number) 0
|
|
(byte~) vblank::ppuSpriteBufferDmaTransfer1_$0 ← > (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#1
|
|
(byte*~) vblank::ppuSpriteBufferDmaTransfer1_$4 ← (byte*)(const struct RICOH_2A03*) APU
|
|
(byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2 ← (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$4 + (const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA
|
|
*((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2) ← (byte~) vblank::ppuSpriteBufferDmaTransfer1_$0
|
|
to:vblank::@9
|
|
vblank::@9: scope:[vblank] from vblank::ppuSpriteBufferDmaTransfer1
|
|
(byte*~) vblank::$60 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) vblank::$58 ← (byte*~) vblank::$60 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
*((byte*~) vblank::$58) ← (number) 0
|
|
(byte*~) vblank::$61 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
(byte*~) vblank::$59 ← (byte*~) vblank::$61 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
*((byte*~) vblank::$59) ← (number) -8
|
|
to:vblank::@return
|
|
vblank::@8: scope:[vblank] from vblank::@3
|
|
(number~) vblank::$51 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$51) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$51)
|
|
(number~) vblank::$53 ← (number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$53) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$53)
|
|
(number~) vblank::$55 ← (number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$55) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$55)
|
|
(number~) vblank::$57 ← (number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
*((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$57) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (number~) vblank::$57)
|
|
to:vblank::@4
|
|
vblank::@return: scope:[vblank] from vblank::@9
|
|
return
|
|
to:@return
|
|
@1: scope:[] from @begin
|
|
call main
|
|
to:@2
|
|
@2: scope:[] from @1
|
|
to:@end
|
|
@end: scope:[] from @2
|
|
|
|
SYMBOL TABLE SSA
|
|
(label) @1
|
|
(label) @2
|
|
(label) @begin
|
|
(label) @end
|
|
(const struct RICOH_2A03*) APU = (struct RICOH_2A03*)(number) $4000
|
|
(const byte*) FLAG[] = { (byte) $54, (byte) $55, (byte) $56, (byte) $57 }
|
|
(const byte*) FLOOR[] = { (byte) $85, (byte) $85, (byte) $86, (byte) $86 }
|
|
(const nomodify byte*) FR_COUNTER = (byte*)(number) $4017
|
|
(const nomodify byte) JOY_DOWN = (byte) 4
|
|
(const nomodify byte) JOY_LEFT = (byte) 2
|
|
(const nomodify byte) JOY_RIGHT = (byte) 1
|
|
(const nomodify byte) JOY_UP = (byte) 8
|
|
(const nomodify byte*) MEMORY = (byte*)(number) 0
|
|
(const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = (byte) $10
|
|
(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1 = (byte) $16
|
|
(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA = (byte) $14
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR = (byte) 3
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR = (byte) 6
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL = (byte) 0
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA = (byte) 7
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK = (byte) 1
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL = (byte) 5
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS = (byte) 2
|
|
(const byte) OFFSET_STRUCT_SPRITEDATA_X = (byte) 3
|
|
(const byte) OFFSET_STRUCT_SPRITEDATA_Y = (byte) 0
|
|
(const byte*) PALETTE[(number) $20] = { (byte) $11, (byte) $2d, (byte) 8, (byte) $18, (byte) $11, (byte) 6, (byte) $15, (byte) $36, (byte) $11, (byte) $39, (byte) $4a, (byte) $5b, (byte) $f, (byte) $3d, (byte) $4e, (byte) $5f, (byte) $11, (byte) $f, (byte) $30, (byte) 8, (byte) $11, (byte) $f, (byte) $18, (byte) 8, (byte) $11, (byte) $30, (byte) $37, (byte) $1a, (byte) $f, (byte) $f, (byte) $f, (byte) $f }
|
|
(const struct RICOH_2C02*) PPU = (struct RICOH_2C02*)(number) $2000
|
|
(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 = (byte*)(number) $23c0
|
|
(const nomodify byte*) PPU_NAME_TABLE_0 = (byte*)(number) $2000
|
|
(const nomodify byte*) PPU_PALETTE = (byte*)(number) $3f00
|
|
(const nomodify to_volatile byte*) PPU_PPUSTATUS = (byte*)(number) $2002
|
|
(byte) RICOH_2A03::DMC_FREQ
|
|
(byte) RICOH_2A03::DMC_LEN
|
|
(byte) RICOH_2A03::DMC_RAW
|
|
(byte) RICOH_2A03::DMC_START
|
|
(byte) RICOH_2A03::JOY1
|
|
(byte) RICOH_2A03::JOY2
|
|
(byte) RICOH_2A03::NOISE_HI
|
|
(byte) RICOH_2A03::NOISE_LO
|
|
(byte) RICOH_2A03::NOISE_VOL
|
|
(byte) RICOH_2A03::OAMDMA
|
|
(byte) RICOH_2A03::SND_CHN
|
|
(byte) RICOH_2A03::SQ1_HI
|
|
(byte) RICOH_2A03::SQ1_LO
|
|
(byte) RICOH_2A03::SQ1_SWEEP
|
|
(byte) RICOH_2A03::SQ1_VOL
|
|
(byte) RICOH_2A03::SQ2_HI
|
|
(byte) RICOH_2A03::SQ2_LO
|
|
(byte) RICOH_2A03::SQ2_SWEEP
|
|
(byte) RICOH_2A03::SQ2_VOL
|
|
(byte) RICOH_2A03::TRI_HI
|
|
(byte) RICOH_2A03::TRI_LINEAR
|
|
(byte) RICOH_2A03::TRI_LO
|
|
(byte) RICOH_2A03::UNUSED1
|
|
(byte) RICOH_2A03::UNUSED2
|
|
(byte) RICOH_2C02::OAMADDR
|
|
(byte) RICOH_2C02::OAMDATA
|
|
(byte) RICOH_2C02::PPUADDR
|
|
(byte) RICOH_2C02::PPUCTRL
|
|
(byte) RICOH_2C02::PPUDATA
|
|
(byte) RICOH_2C02::PPUMASK
|
|
(byte) RICOH_2C02::PPUSCROLL
|
|
(volatile byte) RICOH_2C02::PPUSTATUS loadstore
|
|
(const byte) SIZEOF_STRUCT_SPRITEDATA = (byte) 4
|
|
(const struct SpriteData*) SPRITES[] = { { y: (byte) $96, tile: (byte) $36, attributes: (byte) 2, x: (byte) $c }, { y: (byte) $96, tile: (byte) $37, attributes: (byte) 2, x: (byte) $14 }, { y: (byte) $9e, tile: (byte) $38, attributes: (byte) 2, x: (byte) $c }, { y: (byte) $9e, tile: (byte) $39, attributes: (byte) 2, x: (byte) $14 }, { y: (byte) $96, tile: (byte) $70, attributes: (byte) 0, x: (byte) $48 }, { y: (byte) $96, tile: (byte) $71, attributes: (byte) 0, x: (byte) $50 }, { y: (byte) $9e, tile: (byte) $72, attributes: (byte) 1, x: (byte) $48 }, { y: (byte) $9e, tile: (byte) $73, attributes: (byte) 1, x: (byte) $50 } }
|
|
(const struct SpriteData*) SPRITE_BUFFER[(number) $40] = { fill( $40, 0) }
|
|
(byte) SpriteData::attributes
|
|
(byte) SpriteData::tile
|
|
(byte) SpriteData::x
|
|
(byte) SpriteData::y
|
|
(const byte*) TILES[] = kickasm {{ .import binary "smb1_chr.bin"
|
|
}}
|
|
(const to_nomodify void()**) VECTORS[] = { &interrupt(HARDWARE_STACK)(void()) vblank(), &(void()) main(), (void()*)(number) 0 }
|
|
(void()) main()
|
|
(byte~) main::$1
|
|
(byte*~) main::$10
|
|
(bool~) main::$12
|
|
(byte~) main::$6
|
|
(bool~) main::$9
|
|
(label) main::@1
|
|
(label) main::@10
|
|
(label) main::@11
|
|
(label) main::@2
|
|
(label) main::@3
|
|
(label) main::@4
|
|
(label) main::@5
|
|
(label) main::@6
|
|
(label) main::@7
|
|
(label) main::@8
|
|
(label) main::@9
|
|
(label) main::@return
|
|
(label) main::enableVideoOutput1
|
|
(byte*~) main::enableVideoOutput1_$0
|
|
(byte*~) main::enableVideoOutput1_$1
|
|
(byte*~) main::enableVideoOutput1_$2
|
|
(byte*~) main::enableVideoOutput1_$3
|
|
(label) main::initNES1
|
|
(bool~) main::initNES1_$5
|
|
(label) main::initNES1_@1
|
|
(label) main::initNES1_@6
|
|
(label) main::initNES1_@7
|
|
(label) main::initNES1_clearVBlankFlag1
|
|
(label) main::initNES1_disableAudioOutput1
|
|
(byte*~) main::initNES1_disableAudioOutput1_$0
|
|
(byte*~) main::initNES1_disableAudioOutput1_$1
|
|
(label) main::initNES1_disableVideoOutput1
|
|
(byte*~) main::initNES1_disableVideoOutput1_$0
|
|
(byte*~) main::initNES1_disableVideoOutput1_$1
|
|
(byte*~) main::initNES1_disableVideoOutput1_$2
|
|
(byte*~) main::initNES1_disableVideoOutput1_$3
|
|
(byte) main::initNES1_i
|
|
(byte) main::initNES1_i#0
|
|
(byte) main::initNES1_i#1
|
|
(byte) main::initNES1_i#2
|
|
(label) main::initNES1_waitForVBlank1
|
|
(number~) main::initNES1_waitForVBlank1_$0
|
|
(bool~) main::initNES1_waitForVBlank1_$1
|
|
(byte*~) main::initNES1_waitForVBlank1_$2
|
|
(byte*~) main::initNES1_waitForVBlank1_$3
|
|
(bool~) main::initNES1_waitForVBlank1_$4
|
|
(label) main::initNES1_waitForVBlank1_@1
|
|
(label) main::initNES1_waitForVBlank2
|
|
(number~) main::initNES1_waitForVBlank2_$0
|
|
(bool~) main::initNES1_waitForVBlank2_$1
|
|
(byte*~) main::initNES1_waitForVBlank2_$2
|
|
(byte*~) main::initNES1_waitForVBlank2_$3
|
|
(bool~) main::initNES1_waitForVBlank2_$4
|
|
(label) main::initNES1_waitForVBlank2_@1
|
|
(byte) main::x
|
|
(byte) main::x#0
|
|
(byte) main::x#1
|
|
(byte) main::x#2
|
|
(byte) main::x#3
|
|
(byte) main::x#4
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
(byte*~) memcpy::$0
|
|
(bool~) memcpy::$1
|
|
(byte*~) memcpy::$2
|
|
(label) memcpy::@1
|
|
(label) memcpy::@2
|
|
(label) memcpy::@3
|
|
(label) memcpy::@return
|
|
(void*) memcpy::destination
|
|
(void*) memcpy::destination#0
|
|
(void*) memcpy::destination#1
|
|
(void*) memcpy::destination#2
|
|
(void*) memcpy::destination#3
|
|
(void*) memcpy::destination#4
|
|
(byte*) memcpy::dst
|
|
(byte*) memcpy::dst#0
|
|
(byte*) memcpy::dst#1
|
|
(byte*) memcpy::dst#2
|
|
(byte*) memcpy::dst#3
|
|
(word) memcpy::num
|
|
(word) memcpy::num#0
|
|
(word) memcpy::num#1
|
|
(void*) memcpy::return
|
|
(void*) memcpy::return#0
|
|
(void*) memcpy::return#1
|
|
(void*) memcpy::return#2
|
|
(void*) memcpy::return#3
|
|
(void*) memcpy::source
|
|
(void*) memcpy::source#0
|
|
(void*) memcpy::source#1
|
|
(byte*) memcpy::src
|
|
(byte*) memcpy::src#0
|
|
(byte*) memcpy::src#1
|
|
(byte*) memcpy::src#2
|
|
(byte*) memcpy::src#3
|
|
(byte*) memcpy::src_end
|
|
(byte*) memcpy::src_end#0
|
|
(byte*) memcpy::src_end#1
|
|
(byte*) memcpy::src_end#2
|
|
(void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size)
|
|
(bool~) ppuDataFill::$1
|
|
(label) ppuDataFill::@1
|
|
(label) ppuDataFill::@2
|
|
(label) ppuDataFill::@3
|
|
(label) ppuDataFill::@4
|
|
(label) ppuDataFill::@return
|
|
(word) ppuDataFill::i
|
|
(word) ppuDataFill::i#0
|
|
(word) ppuDataFill::i#1
|
|
(word) ppuDataFill::i#2
|
|
(word) ppuDataFill::i#3
|
|
(word) ppuDataFill::i#4
|
|
(word) ppuDataFill::i#5
|
|
(nomodify void*) ppuDataFill::ppuData
|
|
(nomodify void*) ppuDataFill::ppuData#0
|
|
(nomodify void*) ppuDataFill::ppuData#1
|
|
(nomodify void*) ppuDataFill::ppuData#2
|
|
(label) ppuDataFill::ppuDataPrepare1
|
|
(byte~) ppuDataFill::ppuDataPrepare1_$0
|
|
(byte~) ppuDataFill::ppuDataPrepare1_$1
|
|
(byte*~) ppuDataFill::ppuDataPrepare1_$2
|
|
(byte*~) ppuDataFill::ppuDataPrepare1_$3
|
|
(byte*~) ppuDataFill::ppuDataPrepare1_$4
|
|
(byte*~) ppuDataFill::ppuDataPrepare1_$5
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#1
|
|
(label) ppuDataFill::ppuDataPut1
|
|
(byte*~) ppuDataFill::ppuDataPut1_$0
|
|
(byte*~) ppuDataFill::ppuDataPut1_$1
|
|
(byte) ppuDataFill::ppuDataPut1_val
|
|
(byte) ppuDataFill::ppuDataPut1_val#0
|
|
(byte) ppuDataFill::ppuDataPut1_val#1
|
|
(word) ppuDataFill::size
|
|
(word) ppuDataFill::size#0
|
|
(word) ppuDataFill::size#1
|
|
(word) ppuDataFill::size#2
|
|
(word) ppuDataFill::size#3
|
|
(word) ppuDataFill::size#4
|
|
(word) ppuDataFill::size#5
|
|
(word) ppuDataFill::size#6
|
|
(word) ppuDataFill::size#7
|
|
(word) ppuDataFill::size#8
|
|
(byte) ppuDataFill::val
|
|
(byte) ppuDataFill::val#0
|
|
(byte) ppuDataFill::val#1
|
|
(byte) ppuDataFill::val#2
|
|
(byte) ppuDataFill::val#3
|
|
(byte) ppuDataFill::val#4
|
|
(byte) ppuDataFill::val#5
|
|
(byte) ppuDataFill::val#6
|
|
(byte) ppuDataFill::val#7
|
|
(byte) ppuDataFill::val#8
|
|
(void()) ppuDataPutTile((nomodify void*) ppuDataPutTile::ppuData , (byte*) ppuDataPutTile::tile)
|
|
(byte*~) ppuDataPutTile::$3
|
|
(byte*~) ppuDataPutTile::$7
|
|
(label) ppuDataPutTile::@1
|
|
(label) ppuDataPutTile::@2
|
|
(label) ppuDataPutTile::@3
|
|
(label) ppuDataPutTile::@4
|
|
(label) ppuDataPutTile::@5
|
|
(label) ppuDataPutTile::@return
|
|
(nomodify void*) ppuDataPutTile::ppuData
|
|
(nomodify void*) ppuDataPutTile::ppuData#0
|
|
(nomodify void*) ppuDataPutTile::ppuData#1
|
|
(nomodify void*) ppuDataPutTile::ppuData#2
|
|
(nomodify void*) ppuDataPutTile::ppuData#3
|
|
(nomodify void*) ppuDataPutTile::ppuData#4
|
|
(nomodify void*) ppuDataPutTile::ppuData#5
|
|
(nomodify void*) ppuDataPutTile::ppuData#6
|
|
(nomodify void*) ppuDataPutTile::ppuData#7
|
|
(nomodify void*) ppuDataPutTile::ppuData#8
|
|
(label) ppuDataPutTile::ppuDataPrepare1
|
|
(byte~) ppuDataPutTile::ppuDataPrepare1_$0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare1_$1
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare1_$2
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare1_$3
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare1_$4
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare1_$5
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData#0
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData#1
|
|
(label) ppuDataPutTile::ppuDataPrepare2
|
|
(byte~) ppuDataPutTile::ppuDataPrepare2_$0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare2_$1
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare2_$2
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare2_$3
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare2_$4
|
|
(byte*~) ppuDataPutTile::ppuDataPrepare2_$5
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData#0
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData#1
|
|
(label) ppuDataPutTile::ppuDataPut1
|
|
(byte*~) ppuDataPutTile::ppuDataPut1_$0
|
|
(byte*~) ppuDataPutTile::ppuDataPut1_$1
|
|
(byte) ppuDataPutTile::ppuDataPut1_val
|
|
(byte) ppuDataPutTile::ppuDataPut1_val#0
|
|
(byte) ppuDataPutTile::ppuDataPut1_val#1
|
|
(label) ppuDataPutTile::ppuDataPut2
|
|
(byte*~) ppuDataPutTile::ppuDataPut2_$0
|
|
(byte*~) ppuDataPutTile::ppuDataPut2_$1
|
|
(byte) ppuDataPutTile::ppuDataPut2_val
|
|
(byte) ppuDataPutTile::ppuDataPut2_val#0
|
|
(byte) ppuDataPutTile::ppuDataPut2_val#1
|
|
(label) ppuDataPutTile::ppuDataPut3
|
|
(byte*~) ppuDataPutTile::ppuDataPut3_$0
|
|
(byte*~) ppuDataPutTile::ppuDataPut3_$1
|
|
(byte) ppuDataPutTile::ppuDataPut3_val
|
|
(byte) ppuDataPutTile::ppuDataPut3_val#0
|
|
(byte) ppuDataPutTile::ppuDataPut3_val#1
|
|
(label) ppuDataPutTile::ppuDataPut4
|
|
(byte*~) ppuDataPutTile::ppuDataPut4_$0
|
|
(byte*~) ppuDataPutTile::ppuDataPut4_$1
|
|
(byte) ppuDataPutTile::ppuDataPut4_val
|
|
(byte) ppuDataPutTile::ppuDataPut4_val#0
|
|
(byte) ppuDataPutTile::ppuDataPut4_val#1
|
|
(byte*) ppuDataPutTile::tile
|
|
(byte*) ppuDataPutTile::tile#0
|
|
(byte*) ppuDataPutTile::tile#1
|
|
(byte*) ppuDataPutTile::tile#10
|
|
(byte*) ppuDataPutTile::tile#11
|
|
(byte*) ppuDataPutTile::tile#12
|
|
(byte*) ppuDataPutTile::tile#2
|
|
(byte*) ppuDataPutTile::tile#3
|
|
(byte*) ppuDataPutTile::tile#4
|
|
(byte*) ppuDataPutTile::tile#5
|
|
(byte*) ppuDataPutTile::tile#6
|
|
(byte*) ppuDataPutTile::tile#7
|
|
(byte*) ppuDataPutTile::tile#8
|
|
(byte*) ppuDataPutTile::tile#9
|
|
(void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size)
|
|
(bool~) ppuDataTransfer::$1
|
|
(label) ppuDataTransfer::@1
|
|
(label) ppuDataTransfer::@2
|
|
(label) ppuDataTransfer::@3
|
|
(label) ppuDataTransfer::@4
|
|
(label) ppuDataTransfer::@return
|
|
(nomodify void*) ppuDataTransfer::cpuData
|
|
(nomodify void*) ppuDataTransfer::cpuData#0
|
|
(nomodify void*) ppuDataTransfer::cpuData#1
|
|
(nomodify void*) ppuDataTransfer::cpuData#2
|
|
(nomodify void*) ppuDataTransfer::cpuData#3
|
|
(byte*) ppuDataTransfer::cpuSrc
|
|
(byte*) ppuDataTransfer::cpuSrc#0
|
|
(byte*) ppuDataTransfer::cpuSrc#1
|
|
(byte*) ppuDataTransfer::cpuSrc#2
|
|
(byte*) ppuDataTransfer::cpuSrc#3
|
|
(byte*) ppuDataTransfer::cpuSrc#4
|
|
(byte*) ppuDataTransfer::cpuSrc#5
|
|
(word) ppuDataTransfer::i
|
|
(word) ppuDataTransfer::i#0
|
|
(word) ppuDataTransfer::i#1
|
|
(word) ppuDataTransfer::i#2
|
|
(word) ppuDataTransfer::i#3
|
|
(word) ppuDataTransfer::i#4
|
|
(word) ppuDataTransfer::i#5
|
|
(nomodify void*) ppuDataTransfer::ppuData
|
|
(nomodify void*) ppuDataTransfer::ppuData#0
|
|
(nomodify void*) ppuDataTransfer::ppuData#1
|
|
(label) ppuDataTransfer::ppuDataPrepare1
|
|
(byte~) ppuDataTransfer::ppuDataPrepare1_$0
|
|
(byte~) ppuDataTransfer::ppuDataPrepare1_$1
|
|
(byte*~) ppuDataTransfer::ppuDataPrepare1_$2
|
|
(byte*~) ppuDataTransfer::ppuDataPrepare1_$3
|
|
(byte*~) ppuDataTransfer::ppuDataPrepare1_$4
|
|
(byte*~) ppuDataTransfer::ppuDataPrepare1_$5
|
|
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData
|
|
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0
|
|
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#1
|
|
(label) ppuDataTransfer::ppuDataPut1
|
|
(byte*~) ppuDataTransfer::ppuDataPut1_$0
|
|
(byte*~) ppuDataTransfer::ppuDataPut1_$1
|
|
(byte) ppuDataTransfer::ppuDataPut1_val
|
|
(byte) ppuDataTransfer::ppuDataPut1_val#0
|
|
(byte) ppuDataTransfer::ppuDataPut1_val#1
|
|
(word) ppuDataTransfer::size
|
|
(word) ppuDataTransfer::size#0
|
|
(word) ppuDataTransfer::size#1
|
|
(word) ppuDataTransfer::size#2
|
|
(word) ppuDataTransfer::size#3
|
|
(word) ppuDataTransfer::size#4
|
|
(word) ppuDataTransfer::size#5
|
|
(word) ppuDataTransfer::size#6
|
|
(word) ppuDataTransfer::size#7
|
|
(byte()) readJoy1()
|
|
(bool~) readJoy1::$0
|
|
(byte~) readJoy1::$1
|
|
(number~) readJoy1::$2
|
|
(number~) readJoy1::$3
|
|
(byte*~) readJoy1::$4
|
|
(byte*~) readJoy1::$5
|
|
(byte*~) readJoy1::$6
|
|
(byte*~) readJoy1::$7
|
|
(byte*~) readJoy1::$8
|
|
(byte*~) readJoy1::$9
|
|
(label) readJoy1::@1
|
|
(label) readJoy1::@2
|
|
(label) readJoy1::@3
|
|
(label) readJoy1::@return
|
|
(byte) readJoy1::i
|
|
(byte) readJoy1::i#0
|
|
(byte) readJoy1::i#1
|
|
(byte) readJoy1::i#2
|
|
(byte) readJoy1::i#3
|
|
(byte) readJoy1::joy
|
|
(byte) readJoy1::joy#0
|
|
(byte) readJoy1::joy#1
|
|
(byte) readJoy1::joy#2
|
|
(byte) readJoy1::joy#3
|
|
(byte) readJoy1::joy#4
|
|
(byte) readJoy1::return
|
|
(byte) readJoy1::return#0
|
|
(byte) readJoy1::return#1
|
|
(byte) readJoy1::return#2
|
|
(byte) readJoy1::return#3
|
|
(byte) readJoy1::return#4
|
|
interrupt(HARDWARE_STACK)(void()) vblank()
|
|
(byte~) vblank::$0
|
|
(byte~) vblank::$1
|
|
(bool~) vblank::$2
|
|
(number~) vblank::$27
|
|
(number~) vblank::$29
|
|
(byte~) vblank::$3
|
|
(number~) vblank::$31
|
|
(number~) vblank::$33
|
|
(number~) vblank::$35
|
|
(number~) vblank::$37
|
|
(number~) vblank::$39
|
|
(bool~) vblank::$4
|
|
(number~) vblank::$41
|
|
(number~) vblank::$43
|
|
(number~) vblank::$45
|
|
(number~) vblank::$47
|
|
(number~) vblank::$49
|
|
(byte~) vblank::$5
|
|
(number~) vblank::$51
|
|
(number~) vblank::$53
|
|
(number~) vblank::$55
|
|
(number~) vblank::$57
|
|
(byte*~) vblank::$58
|
|
(byte*~) vblank::$59
|
|
(bool~) vblank::$6
|
|
(byte*~) vblank::$60
|
|
(byte*~) vblank::$61
|
|
(bool~) vblank::$62
|
|
(bool~) vblank::$63
|
|
(bool~) vblank::$64
|
|
(bool~) vblank::$65
|
|
(byte~) vblank::$7
|
|
(bool~) vblank::$8
|
|
(label) vblank::@1
|
|
(label) vblank::@10
|
|
(label) vblank::@2
|
|
(label) vblank::@3
|
|
(label) vblank::@4
|
|
(label) vblank::@5
|
|
(label) vblank::@6
|
|
(label) vblank::@7
|
|
(label) vblank::@8
|
|
(label) vblank::@9
|
|
(label) vblank::@return
|
|
(byte) vblank::joy
|
|
(byte) vblank::joy#0
|
|
(byte) vblank::joy#1
|
|
(byte) vblank::joy#2
|
|
(byte) vblank::joy#3
|
|
(byte) vblank::joy#4
|
|
(byte) vblank::joy#5
|
|
(byte) vblank::joy#6
|
|
(label) vblank::ppuSpriteBufferDmaTransfer1
|
|
(byte~) vblank::ppuSpriteBufferDmaTransfer1_$0
|
|
(byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1
|
|
(byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2
|
|
(byte*~) vblank::ppuSpriteBufferDmaTransfer1_$3
|
|
(byte*~) vblank::ppuSpriteBufferDmaTransfer1_$4
|
|
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer
|
|
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0
|
|
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#1
|
|
|
|
Adding number conversion cast (unumber) 1 in *((byte*~) readJoy1::$4) ← (number) 1
|
|
Adding number conversion cast (unumber) 0 in *((byte*~) readJoy1::$5) ← (number) 0
|
|
Adding number conversion cast (unumber) 8 in (bool~) readJoy1::$0 ← (byte) readJoy1::i#2 < (number) 8
|
|
Adding number conversion cast (unumber) 1 in (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (number) 1
|
|
Adding number conversion cast (unumber) 1 in (number~) readJoy1::$2 ← *((byte*~) readJoy1::$6) & (number) 1
|
|
Adding number conversion cast (unumber) readJoy1::$2 in (number~) readJoy1::$2 ← *((byte*~) readJoy1::$6) & (unumber)(number) 1
|
|
Adding number conversion cast (unumber) readJoy1::$3 in (number~) readJoy1::$3 ← (byte~) readJoy1::$1 | (unumber~) readJoy1::$2
|
|
Adding number conversion cast (unumber) 0 in (byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#2 + (number) 0)
|
|
Adding number conversion cast (unumber) 1 in (byte) ppuDataPutTile::ppuDataPut2_val#0 ← *((byte*) ppuDataPutTile::tile#3 + (number) 1)
|
|
Adding number conversion cast (unumber) $20 in (byte*~) ppuDataPutTile::$3 ← (byte*~) ppuDataPutTile::$7 + (number) $20
|
|
Adding number conversion cast (unumber) 2 in (byte) ppuDataPutTile::ppuDataPut3_val#0 ← *((byte*) ppuDataPutTile::tile#4 + (number) 2)
|
|
Adding number conversion cast (unumber) 3 in (byte) ppuDataPutTile::ppuDataPut4_val#0 ← *((byte*) ppuDataPutTile::tile#5 + (number) 3)
|
|
Adding number conversion cast (unumber) 0 in *((byte*~) main::initNES1_disableVideoOutput1_$0) ← (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((byte*~) main::initNES1_disableVideoOutput1_$1) ← (number) 0
|
|
Adding number conversion cast (unumber) $40 in *((const nomodify byte*) FR_COUNTER) ← (number) $40
|
|
Adding number conversion cast (unumber) $40 in *((byte*~) main::initNES1_disableAudioOutput1_$0) ← (number) $40
|
|
Adding number conversion cast (unumber) $80 in (number~) main::initNES1_waitForVBlank1_$0 ← *((byte*~) main::initNES1_waitForVBlank1_$2) & (number) $80
|
|
Adding number conversion cast (unumber) main::initNES1_waitForVBlank1_$0 in (number~) main::initNES1_waitForVBlank1_$0 ← *((byte*~) main::initNES1_waitForVBlank1_$2) & (unumber)(number) $80
|
|
Adding number conversion cast (unumber) 0 in (bool~) main::initNES1_waitForVBlank1_$4 ← (number) 0 != (unumber~) main::initNES1_waitForVBlank1_$0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) 0 + (byte) main::initNES1_i#2) ← (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) 0 + (byte) main::initNES1_i#2) ← ((unumber)) (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) $100 + (byte) main::initNES1_i#2) ← (number) 0
|
|
Adding number conversion cast (unumber) $100 in *((const nomodify byte*) MEMORY+(number) $100 + (byte) main::initNES1_i#2) ← ((unumber)) (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) $200 + (byte) main::initNES1_i#2) ← (number) 0
|
|
Adding number conversion cast (unumber) $200 in *((const nomodify byte*) MEMORY+(number) $200 + (byte) main::initNES1_i#2) ← ((unumber)) (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) $300 + (byte) main::initNES1_i#2) ← (number) 0
|
|
Adding number conversion cast (unumber) $300 in *((const nomodify byte*) MEMORY+(number) $300 + (byte) main::initNES1_i#2) ← ((unumber)) (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) $400 + (byte) main::initNES1_i#2) ← (number) 0
|
|
Adding number conversion cast (unumber) $400 in *((const nomodify byte*) MEMORY+(number) $400 + (byte) main::initNES1_i#2) ← ((unumber)) (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) $500 + (byte) main::initNES1_i#2) ← (number) 0
|
|
Adding number conversion cast (unumber) $500 in *((const nomodify byte*) MEMORY+(number) $500 + (byte) main::initNES1_i#2) ← ((unumber)) (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) $600 + (byte) main::initNES1_i#2) ← (number) 0
|
|
Adding number conversion cast (unumber) $600 in *((const nomodify byte*) MEMORY+(number) $600 + (byte) main::initNES1_i#2) ← ((unumber)) (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) MEMORY+(number) $700 + (byte) main::initNES1_i#2) ← (number) 0
|
|
Adding number conversion cast (unumber) $700 in *((const nomodify byte*) MEMORY+(number) $700 + (byte) main::initNES1_i#2) ← ((unumber)) (number) 0
|
|
Adding number conversion cast (unumber) 0 in (bool~) main::initNES1_$5 ← (number) 0 != (byte) main::initNES1_i#1
|
|
Adding number conversion cast (unumber) $80 in (number~) main::initNES1_waitForVBlank2_$0 ← *((byte*~) main::initNES1_waitForVBlank2_$2) & (number) $80
|
|
Adding number conversion cast (unumber) main::initNES1_waitForVBlank2_$0 in (number~) main::initNES1_waitForVBlank2_$0 ← *((byte*~) main::initNES1_waitForVBlank2_$2) & (unumber)(number) $80
|
|
Adding number conversion cast (unumber) 0 in (bool~) main::initNES1_waitForVBlank2_$4 ← (number) 0 != (unumber~) main::initNES1_waitForVBlank2_$0
|
|
Adding number conversion cast (unumber) $fc in (byte) ppuDataFill::val#0 ← (number) $fc
|
|
Adding number conversion cast (unumber) $3c0 in (word) ppuDataFill::size#0 ← (number) $3c0
|
|
Adding number conversion cast (unumber) 0 in (byte) ppuDataFill::val#1 ← (number) 0
|
|
Adding number conversion cast (unumber) $40 in (word) ppuDataFill::size#1 ← (number) $40
|
|
Adding number conversion cast (unumber) $20 in (bool~) main::$9 ← (byte) main::x#2 < (number) $20
|
|
Adding number conversion cast (unumber) $14*$20 in (byte*~) main::$10 ← (const nomodify byte*) PPU_NAME_TABLE_0+(number) $14*(number) $20 + (byte) main::x#3
|
|
Adding number conversion cast (unumber) 2 in (byte) main::x#1 ← (byte) main::x#4 + (number) 2
|
|
Adding number conversion cast (unumber) $1c in (nomodify void*) ppuDataPutTile::ppuData#1 ← (void*)(const nomodify byte*) PPU_NAME_TABLE_0+(number) $12*(number) $20+(number) $1c
|
|
Adding number conversion cast (unumber) $12*$20 in (nomodify void*) ppuDataPutTile::ppuData#1 ← (void*)(const nomodify byte*) PPU_NAME_TABLE_0+(number) $12*(number) $20+(unumber)(number) $1c
|
|
Adding number conversion cast (unumber) $80 in *((byte*~) main::enableVideoOutput1_$0) ← (number) $80
|
|
Adding number conversion cast (unumber) $1e in *((byte*~) main::enableVideoOutput1_$1) ← (number) $1e
|
|
Adding number conversion cast (unumber) 0 in (bool~) vblank::$62 ← (number) 0 != (byte~) vblank::$1
|
|
Adding number conversion cast (unumber) 0 in (bool~) vblank::$63 ← (number) 0 != (byte~) vblank::$3
|
|
Adding number conversion cast (unumber) 0 in (number~) vblank::$27 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$27 in (number~) vblank::$27 ← (unumber)(number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 1 in (number~) vblank::$29 ← (number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$29 in (number~) vblank::$29 ← (unumber)(number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 2 in (number~) vblank::$31 ← (number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$31 in (number~) vblank::$31 ← (unumber)(number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 3 in (number~) vblank::$33 ← (number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$33 in (number~) vblank::$33 ← (unumber)(number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 0 in (bool~) vblank::$64 ← (number) 0 != (byte~) vblank::$5
|
|
Adding number conversion cast (unumber) 0 in (number~) vblank::$35 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$35 in (number~) vblank::$35 ← (unumber)(number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 1 in (number~) vblank::$37 ← (number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$37 in (number~) vblank::$37 ← (unumber)(number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 2 in (number~) vblank::$39 ← (number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$39 in (number~) vblank::$39 ← (unumber)(number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 3 in (number~) vblank::$41 ← (number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$41 in (number~) vblank::$41 ← (unumber)(number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 0 in (bool~) vblank::$65 ← (number) 0 != (byte~) vblank::$7
|
|
Adding number conversion cast (unumber) 0 in (number~) vblank::$43 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$43 in (number~) vblank::$43 ← (unumber)(number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 1 in (number~) vblank::$45 ← (number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$45 in (number~) vblank::$45 ← (unumber)(number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 2 in (number~) vblank::$47 ← (number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$47 in (number~) vblank::$47 ← (unumber)(number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 3 in (number~) vblank::$49 ← (number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$49 in (number~) vblank::$49 ← (unumber)(number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 0 in *((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1) ← (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((byte*~) vblank::$58) ← (number) 0
|
|
Adding number conversion cast (unumber) -8 in *((byte*~) vblank::$59) ← (number) -8
|
|
Adding number conversion cast (unumber) 0 in (number~) vblank::$51 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$51 in (number~) vblank::$51 ← (unumber)(number) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 1 in (number~) vblank::$53 ← (number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$53 in (number~) vblank::$53 ← (unumber)(number) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 2 in (number~) vblank::$55 ← (number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$55 in (number~) vblank::$55 ← (unumber)(number) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) 3 in (number~) vblank::$57 ← (number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Adding number conversion cast (unumber) vblank::$57 in (number~) vblank::$57 ← (unumber)(number) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Inlining cast *((byte*~) readJoy1::$4) ← (unumber)(number) 1
|
|
Inlining cast *((byte*~) readJoy1::$5) ← (unumber)(number) 0
|
|
Inlining cast (byte*) memcpy::src#0 ← (byte*)(void*) memcpy::source#1
|
|
Inlining cast (byte*) memcpy::dst#0 ← (byte*)(void*) memcpy::destination#1
|
|
Inlining cast *((byte*~) main::initNES1_disableVideoOutput1_$0) ← (unumber)(number) 0
|
|
Inlining cast *((byte*~) main::initNES1_disableVideoOutput1_$1) ← (unumber)(number) 0
|
|
Inlining cast *((const nomodify byte*) FR_COUNTER) ← (unumber)(number) $40
|
|
Inlining cast *((byte*~) main::initNES1_disableAudioOutput1_$0) ← (unumber)(number) $40
|
|
Inlining cast *((const nomodify byte*) MEMORY+(unumber)(number) 0 + (byte) main::initNES1_i#2) ← (unumber)(number) 0
|
|
Inlining cast *((const nomodify byte*) MEMORY+(unumber)(number) $100 + (byte) main::initNES1_i#2) ← (unumber)(number) 0
|
|
Inlining cast *((const nomodify byte*) MEMORY+(unumber)(number) $200 + (byte) main::initNES1_i#2) ← (unumber)(number) 0
|
|
Inlining cast *((const nomodify byte*) MEMORY+(unumber)(number) $300 + (byte) main::initNES1_i#2) ← (unumber)(number) 0
|
|
Inlining cast *((const nomodify byte*) MEMORY+(unumber)(number) $400 + (byte) main::initNES1_i#2) ← (unumber)(number) 0
|
|
Inlining cast *((const nomodify byte*) MEMORY+(unumber)(number) $500 + (byte) main::initNES1_i#2) ← (unumber)(number) 0
|
|
Inlining cast *((const nomodify byte*) MEMORY+(unumber)(number) $600 + (byte) main::initNES1_i#2) ← (unumber)(number) 0
|
|
Inlining cast *((const nomodify byte*) MEMORY+(unumber)(number) $700 + (byte) main::initNES1_i#2) ← (unumber)(number) 0
|
|
Inlining cast (byte) ppuDataFill::val#0 ← (unumber)(number) $fc
|
|
Inlining cast (word) ppuDataFill::size#0 ← (unumber)(number) $3c0
|
|
Inlining cast (byte) ppuDataFill::val#1 ← (unumber)(number) 0
|
|
Inlining cast (word) ppuDataFill::size#1 ← (unumber)(number) $40
|
|
Inlining cast *((byte*~) main::enableVideoOutput1_$0) ← (unumber)(number) $80
|
|
Inlining cast *((byte*~) main::enableVideoOutput1_$1) ← (unumber)(number) $1e
|
|
Inlining cast *((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1) ← (unumber)(number) 0
|
|
Inlining cast *((byte*~) vblank::$58) ← (unumber)(number) 0
|
|
Inlining cast *((byte*~) vblank::$59) ← (unumber)(number) -8
|
|
Successful SSA optimization Pass2InlineCast
|
|
Simplifying constant pointer cast (byte*) 8192
|
|
Simplifying constant pointer cast (byte*) 9152
|
|
Simplifying constant pointer cast (byte*) 16128
|
|
Simplifying constant pointer cast (byte*) 8194
|
|
Simplifying constant pointer cast (byte*) 16407
|
|
Simplifying constant pointer cast (byte*) 0
|
|
Simplifying constant pointer cast (void()*) 0
|
|
Simplifying constant pointer cast (struct RICOH_2C02*) 8192
|
|
Simplifying constant pointer cast (struct RICOH_2A03*) 16384
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 8
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $20
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 3
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $40
|
|
Simplifying constant integer cast $40
|
|
Simplifying constant integer cast $80
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $100
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $200
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $300
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $400
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $500
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $600
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $700
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $80
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $fc
|
|
Simplifying constant integer cast $3c0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $40
|
|
Simplifying constant integer cast $20
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast $1c
|
|
Simplifying constant integer cast $80
|
|
Simplifying constant integer cast $1e
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 3
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 3
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 3
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast -8
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 3
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 8
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) $20
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 3
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) $40
|
|
Finalized unsigned number type (byte) $40
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (word) $100
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (word) $200
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (word) $300
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (word) $400
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (word) $500
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (word) $600
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (word) $700
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) $fc
|
|
Finalized unsigned number type (word) $3c0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) $40
|
|
Finalized unsigned number type (byte) $20
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) $1c
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) $1e
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 3
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 3
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 3
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) -8
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 3
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inferred type updated to byte in (unumber~) readJoy1::$2 ← *((byte*~) readJoy1::$6) & (byte) 1
|
|
Inferred type updated to byte in (unumber~) readJoy1::$3 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2
|
|
Inferred type updated to byte in (unumber~) main::initNES1_waitForVBlank1_$0 ← *((byte*~) main::initNES1_waitForVBlank1_$2) & (byte) $80
|
|
Inferred type updated to byte in (unumber~) main::initNES1_waitForVBlank2_$0 ← *((byte*~) main::initNES1_waitForVBlank2_$2) & (byte) $80
|
|
Inferred type updated to byte in (unumber~) vblank::$27 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$29 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$31 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$33 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$35 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$37 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$39 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$41 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$43 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$45 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$47 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$49 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$51 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$53 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$55 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inferred type updated to byte in (unumber~) vblank::$57 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Inversing boolean not [159] (bool~) main::initNES1_waitForVBlank1_$1 ← (byte) 0 == (byte~) main::initNES1_waitForVBlank1_$0 from [158] (bool~) main::initNES1_waitForVBlank1_$4 ← (byte) 0 != (byte~) main::initNES1_waitForVBlank1_$0
|
|
Inversing boolean not [178] (bool~) main::initNES1_waitForVBlank2_$1 ← (byte) 0 == (byte~) main::initNES1_waitForVBlank2_$0 from [177] (bool~) main::initNES1_waitForVBlank2_$4 ← (byte) 0 != (byte~) main::initNES1_waitForVBlank2_$0
|
|
Inversing boolean not [230] (bool~) vblank::$2 ← (byte) 0 == (byte~) vblank::$1 from [229] (bool~) vblank::$62 ← (byte) 0 != (byte~) vblank::$1
|
|
Inversing boolean not [235] (bool~) vblank::$4 ← (byte) 0 == (byte~) vblank::$3 from [234] (bool~) vblank::$63 ← (byte) 0 != (byte~) vblank::$3
|
|
Inversing boolean not [249] (bool~) vblank::$6 ← (byte) 0 == (byte~) vblank::$5 from [248] (bool~) vblank::$64 ← (byte) 0 != (byte~) vblank::$5
|
|
Inversing boolean not [263] (bool~) vblank::$8 ← (byte) 0 == (byte~) vblank::$7 from [262] (bool~) vblank::$65 ← (byte) 0 != (byte~) vblank::$7
|
|
Successful SSA optimization Pass2UnaryNotSimplification
|
|
Alias readJoy1::joy#2 = readJoy1::joy#4 readJoy1::joy#3 readJoy1::return#0 readJoy1::return#3 readJoy1::return#1
|
|
Alias readJoy1::i#2 = readJoy1::i#3
|
|
Alias readJoy1::joy#1 = readJoy1::$3
|
|
Alias ppuDataFill::ppuDataPrepare1_ppuData#0 = ppuDataFill::ppuData#2 ppuDataFill::ppuDataPrepare1_ppuData#1
|
|
Alias ppuDataFill::size#3 = ppuDataFill::size#5 ppuDataFill::size#7
|
|
Alias ppuDataFill::val#4 = ppuDataFill::val#6 ppuDataFill::val#8
|
|
Alias ppuDataFill::val#2 = ppuDataFill::val#3 ppuDataFill::ppuDataPut1_val#0 ppuDataFill::ppuDataPut1_val#1 ppuDataFill::val#7 ppuDataFill::val#5
|
|
Alias ppuDataFill::i#2 = ppuDataFill::i#5 ppuDataFill::i#4 ppuDataFill::i#3
|
|
Alias ppuDataFill::size#2 = ppuDataFill::size#8 ppuDataFill::size#6 ppuDataFill::size#4
|
|
Alias ppuDataTransfer::ppuDataPrepare1_ppuData#0 = ppuDataTransfer::ppuData#1 ppuDataTransfer::ppuDataPrepare1_ppuData#1
|
|
Alias ppuDataTransfer::cpuData#1 = ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuData#3
|
|
Alias ppuDataTransfer::size#2 = ppuDataTransfer::size#4 ppuDataTransfer::size#6
|
|
Alias ppuDataTransfer::cpuSrc#2 = ppuDataTransfer::cpuSrc#4 ppuDataTransfer::cpuSrc#5 ppuDataTransfer::cpuSrc#3
|
|
Alias ppuDataTransfer::i#2 = ppuDataTransfer::i#5 ppuDataTransfer::i#4 ppuDataTransfer::i#3
|
|
Alias ppuDataTransfer::size#1 = ppuDataTransfer::size#7 ppuDataTransfer::size#5 ppuDataTransfer::size#3
|
|
Alias ppuDataTransfer::ppuDataPut1_val#0 = ppuDataTransfer::ppuDataPut1_val#1
|
|
Alias ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuDataPrepare1_ppuData#0 ppuDataPutTile::ppuDataPrepare1_ppuData#1 ppuDataPutTile::ppuData#8 ppuDataPutTile::ppuData#7 ppuDataPutTile::ppuData#6 ppuDataPutTile::ppuData#5 ppuDataPutTile::ppuData#4 ppuDataPutTile::ppuData#3
|
|
Alias ppuDataPutTile::tile#10 = ppuDataPutTile::tile#6 ppuDataPutTile::tile#2 ppuDataPutTile::tile#7 ppuDataPutTile::tile#3 ppuDataPutTile::tile#12 ppuDataPutTile::tile#11 ppuDataPutTile::tile#8 ppuDataPutTile::tile#4 ppuDataPutTile::tile#9 ppuDataPutTile::tile#5
|
|
Alias ppuDataPutTile::ppuDataPut1_val#0 = ppuDataPutTile::ppuDataPut1_val#1
|
|
Alias ppuDataPutTile::ppuDataPut2_val#0 = ppuDataPutTile::ppuDataPut2_val#1
|
|
Alias ppuDataPutTile::ppuDataPrepare2_ppuData#0 = ppuDataPutTile::ppuDataPrepare2_ppuData#1
|
|
Alias ppuDataPutTile::ppuDataPut3_val#0 = ppuDataPutTile::ppuDataPut3_val#1
|
|
Alias ppuDataPutTile::ppuDataPut4_val#0 = ppuDataPutTile::ppuDataPut4_val#1
|
|
Alias memcpy::src_end#0 = memcpy::$0
|
|
Alias memcpy::src#2 = memcpy::src#3
|
|
Alias memcpy::dst#2 = memcpy::dst#3
|
|
Alias memcpy::src_end#1 = memcpy::src_end#2
|
|
Alias memcpy::destination#2 = memcpy::destination#4 memcpy::destination#3 memcpy::return#0 memcpy::return#3 memcpy::return#1
|
|
Alias ppuDataTransfer::size#0 = main::$1
|
|
Alias main::x#2 = main::x#3 main::x#4
|
|
Alias memcpy::num#0 = main::$6
|
|
Alias readJoy1::return#2 = readJoy1::return#4
|
|
Alias vblank::joy#0 = vblank::$0 vblank::joy#4
|
|
Alias vblank::joy#1 = vblank::joy#5
|
|
Alias vblank::joy#2 = vblank::joy#6
|
|
Alias vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 = vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#1
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias vblank::joy#0 = vblank::joy#1 vblank::joy#2 vblank::joy#3
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Identical Phi Values (word) ppuDataFill::size#2 (word) ppuDataFill::size#3
|
|
Identical Phi Values (byte) ppuDataFill::val#2 (byte) ppuDataFill::val#4
|
|
Identical Phi Values (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 (nomodify void*) ppuDataTransfer::ppuData#0
|
|
Identical Phi Values (nomodify void*) ppuDataTransfer::cpuData#1 (nomodify void*) ppuDataTransfer::cpuData#0
|
|
Identical Phi Values (word) ppuDataTransfer::size#2 (word) ppuDataTransfer::size#0
|
|
Identical Phi Values (word) ppuDataTransfer::size#1 (word) ppuDataTransfer::size#2
|
|
Identical Phi Values (void*) memcpy::source#1 (void*) memcpy::source#0
|
|
Identical Phi Values (void*) memcpy::destination#1 (void*) memcpy::destination#0
|
|
Identical Phi Values (word) memcpy::num#1 (word) memcpy::num#0
|
|
Identical Phi Values (byte*) memcpy::src_end#1 (byte*) memcpy::src_end#0
|
|
Identical Phi Values (void*) memcpy::destination#2 (void*) memcpy::destination#1
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Simple Condition (bool~) readJoy1::$0 [10] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2
|
|
Simple Condition (bool~) ppuDataFill::$1 [30] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::@2
|
|
Simple Condition (bool~) ppuDataTransfer::$1 [49] if((word) ppuDataTransfer::i#2<(word) ppuDataTransfer::size#0) goto ppuDataTransfer::@2
|
|
Simple Condition (bool~) memcpy::$1 [101] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2
|
|
Simple Condition (bool~) main::initNES1_waitForVBlank1_$1 [122] if((byte) 0==(byte~) main::initNES1_waitForVBlank1_$0) goto main::initNES1_waitForVBlank1_@1
|
|
Simple Condition (bool~) main::initNES1_$5 [135] if((byte) 0!=(byte) main::initNES1_i#1) goto main::initNES1_@1
|
|
Simple Condition (bool~) main::initNES1_waitForVBlank2_$1 [140] if((byte) 0==(byte~) main::initNES1_waitForVBlank2_$0) goto main::initNES1_waitForVBlank2_@1
|
|
Simple Condition (bool~) main::$9 [157] if((byte) main::x#2<(byte) $20) goto main::@2
|
|
Simple Condition (bool~) main::$12 [178] if((number) 0!=(number) 1) goto main::@4
|
|
Simple Condition (bool~) vblank::$2 [185] if((byte) 0==(byte~) vblank::$1) goto vblank::@1
|
|
Simple Condition (bool~) vblank::$4 [188] if((byte) 0==(byte~) vblank::$3) goto vblank::@2
|
|
Simple Condition (bool~) vblank::$6 [199] if((byte) 0==(byte~) vblank::$5) goto vblank::@3
|
|
Simple Condition (bool~) vblank::$8 [210] if((byte) 0==(byte~) vblank::$7) goto vblank::@4
|
|
Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
Constant right-side identified [0] (byte*~) readJoy1::$7 ← (byte*)(const struct RICOH_2A03*) APU
|
|
Constant right-side identified [3] (byte*~) readJoy1::$8 ← (byte*)(const struct RICOH_2A03*) APU
|
|
Constant right-side identified [12] (byte*~) readJoy1::$9 ← (byte*)(const struct RICOH_2A03*) APU
|
|
Constant right-side identified [20] (byte*~) ppuDataFill::ppuDataPrepare1_$4 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [24] (byte*~) ppuDataFill::ppuDataPrepare1_$5 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [31] (byte*~) ppuDataFill::ppuDataPut1_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [38] (byte*~) ppuDataTransfer::ppuDataPrepare1_$4 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [42] (byte*~) ppuDataTransfer::ppuDataPrepare1_$5 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [51] (byte*~) ppuDataTransfer::ppuDataPut1_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [59] (byte*~) ppuDataPutTile::ppuDataPrepare1_$4 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [63] (byte*~) ppuDataPutTile::ppuDataPrepare1_$5 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [67] (byte*~) ppuDataPutTile::ppuDataPut1_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [71] (byte*~) ppuDataPutTile::ppuDataPut2_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [78] (byte*~) ppuDataPutTile::ppuDataPrepare2_$4 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [82] (byte*~) ppuDataPutTile::ppuDataPrepare2_$5 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [86] (byte*~) ppuDataPutTile::ppuDataPut3_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [90] (byte*~) ppuDataPutTile::ppuDataPut4_$1 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [107] (byte*~) main::initNES1_disableVideoOutput1_$2 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [110] (byte*~) main::initNES1_disableVideoOutput1_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [114] (byte*~) main::initNES1_disableAudioOutput1_$1 ← (byte*)(const struct RICOH_2A03*) APU
|
|
Constant right-side identified [118] (byte*~) main::initNES1_waitForVBlank1_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [136] (byte*~) main::initNES1_waitForVBlank2_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [142] (word) ppuDataTransfer::size#0 ← sizeof (const byte*) PALETTE
|
|
Constant right-side identified [166] (word) memcpy::num#0 ← sizeof (const struct SpriteData*) SPRITES
|
|
Constant right-side identified [171] (byte*~) main::enableVideoOutput1_$2 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [174] (byte*~) main::enableVideoOutput1_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [189] (byte~) vblank::$27 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [191] (byte~) vblank::$29 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [193] (byte~) vblank::$31 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [195] (byte~) vblank::$33 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [200] (byte~) vblank::$35 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [202] (byte~) vblank::$37 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [204] (byte~) vblank::$39 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [206] (byte~) vblank::$41 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [211] (byte~) vblank::$43 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [213] (byte~) vblank::$45 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [215] (byte~) vblank::$47 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [217] (byte~) vblank::$49 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [220] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$3 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [224] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$4 ← (byte*)(const struct RICOH_2A03*) APU
|
|
Constant right-side identified [227] (byte*~) vblank::$60 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [230] (byte*~) vblank::$61 ← (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant right-side identified [233] (byte~) vblank::$51 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [235] (byte~) vblank::$53 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [237] (byte~) vblank::$55 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant right-side identified [239] (byte~) vblank::$57 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const byte*) readJoy1::$7 = (byte*)APU
|
|
Constant (const byte*) readJoy1::$8 = (byte*)APU
|
|
Constant (const byte) readJoy1::joy#0 = 0
|
|
Constant (const byte) readJoy1::i#0 = 0
|
|
Constant (const byte*) readJoy1::$9 = (byte*)APU
|
|
Constant (const byte*) ppuDataFill::ppuDataPrepare1_$4 = (byte*)PPU
|
|
Constant (const byte*) ppuDataFill::ppuDataPrepare1_$5 = (byte*)PPU
|
|
Constant (const word) ppuDataFill::i#0 = 0
|
|
Constant (const byte*) ppuDataFill::ppuDataPut1_$1 = (byte*)PPU
|
|
Constant (const byte*) ppuDataTransfer::ppuDataPrepare1_$4 = (byte*)PPU
|
|
Constant (const byte*) ppuDataTransfer::ppuDataPrepare1_$5 = (byte*)PPU
|
|
Constant (const word) ppuDataTransfer::i#0 = 0
|
|
Constant (const byte*) ppuDataTransfer::ppuDataPut1_$1 = (byte*)PPU
|
|
Constant (const byte*) ppuDataPutTile::ppuDataPrepare1_$4 = (byte*)PPU
|
|
Constant (const byte*) ppuDataPutTile::ppuDataPrepare1_$5 = (byte*)PPU
|
|
Constant (const byte*) ppuDataPutTile::ppuDataPut1_$1 = (byte*)PPU
|
|
Constant (const byte*) ppuDataPutTile::ppuDataPut2_$1 = (byte*)PPU
|
|
Constant (const byte*) ppuDataPutTile::ppuDataPrepare2_$4 = (byte*)PPU
|
|
Constant (const byte*) ppuDataPutTile::ppuDataPrepare2_$5 = (byte*)PPU
|
|
Constant (const byte*) ppuDataPutTile::ppuDataPut3_$1 = (byte*)PPU
|
|
Constant (const byte*) ppuDataPutTile::ppuDataPut4_$1 = (byte*)PPU
|
|
Constant (const byte*) main::initNES1_disableVideoOutput1_$2 = (byte*)PPU
|
|
Constant (const byte*) main::initNES1_disableVideoOutput1_$3 = (byte*)PPU
|
|
Constant (const byte*) main::initNES1_disableAudioOutput1_$1 = (byte*)APU
|
|
Constant (const byte*) main::initNES1_waitForVBlank1_$3 = (byte*)PPU
|
|
Constant (const byte) main::initNES1_i#0 = 0
|
|
Constant (const byte*) main::initNES1_waitForVBlank2_$3 = (byte*)PPU
|
|
Constant (const word) ppuDataTransfer::size#0 = sizeof PALETTE
|
|
Constant (const nomodify void*) ppuDataTransfer::ppuData#0 = (void*)PPU_PALETTE
|
|
Constant (const nomodify void*) ppuDataTransfer::cpuData#0 = (void*)PALETTE
|
|
Constant (const nomodify void*) ppuDataFill::ppuData#0 = (void*)PPU_NAME_TABLE_0
|
|
Constant (const byte) ppuDataFill::val#0 = $fc
|
|
Constant (const word) ppuDataFill::size#0 = $3c0
|
|
Constant (const nomodify void*) ppuDataFill::ppuData#1 = (void*)PPU_ATTRIBUTE_TABLE_0
|
|
Constant (const byte) ppuDataFill::val#1 = 0
|
|
Constant (const word) ppuDataFill::size#1 = $40
|
|
Constant (const byte) main::x#0 = 0
|
|
Constant (const byte*) ppuDataPutTile::tile#0 = FLOOR
|
|
Constant (const nomodify void*) ppuDataPutTile::ppuData#1 = (void*)PPU_NAME_TABLE_0+(word)$12*$20+$1c
|
|
Constant (const byte*) ppuDataPutTile::tile#1 = FLAG
|
|
Constant (const word) memcpy::num#0 = sizeof SPRITES
|
|
Constant (const void*) memcpy::destination#0 = (void*)SPRITE_BUFFER
|
|
Constant (const void*) memcpy::source#0 = (void*)SPRITES
|
|
Constant (const byte*) main::enableVideoOutput1_$2 = (byte*)PPU
|
|
Constant (const byte*) main::enableVideoOutput1_$3 = (byte*)PPU
|
|
Constant (const byte) vblank::$27 = 0*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$29 = 1*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$31 = 2*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$33 = 3*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$35 = 0*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$37 = 1*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$39 = 2*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$41 = 3*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$43 = 0*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$45 = 1*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$47 = 2*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$49 = 3*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 = SPRITE_BUFFER
|
|
Constant (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$3 = (byte*)PPU
|
|
Constant (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$4 = (byte*)APU
|
|
Constant (const byte*) vblank::$60 = (byte*)PPU
|
|
Constant (const byte*) vblank::$61 = (byte*)PPU
|
|
Constant (const byte) vblank::$51 = 0*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$53 = 1*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$55 = 2*SIZEOF_STRUCT_SPRITEDATA
|
|
Constant (const byte) vblank::$57 = 3*SIZEOF_STRUCT_SPRITEDATA
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant (const byte*) ppuDataTransfer::cpuSrc#0 = (byte*)ppuDataTransfer::cpuData#0
|
|
Constant (const byte*) memcpy::src#0 = (byte*)memcpy::source#0
|
|
Constant (const byte*) memcpy::dst#0 = (byte*)memcpy::destination#0
|
|
Constant (const byte*) memcpy::$2 = (byte*)memcpy::source#0
|
|
Constant (const void*) memcpy::return#2 = memcpy::destination#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
if() condition always true - replacing block destination [178] if((number) 0!=(number) 1) goto main::@4
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Converting *(pointer+n) to pointer[n] [2] *((byte*~) readJoy1::$4) ← (byte) 1 -- *(readJoy1::$7 + OFFSET_STRUCT_RICOH_2A03_JOY1)
|
|
Converting *(pointer+n) to pointer[n] [5] *((byte*~) readJoy1::$5) ← (byte) 0 -- *(readJoy1::$8 + OFFSET_STRUCT_RICOH_2A03_JOY1)
|
|
Converting *(pointer+n) to pointer[n] [14] (byte~) readJoy1::$2 ← *((byte*~) readJoy1::$6) & (byte) 1 -- *(readJoy1::$9 + OFFSET_STRUCT_RICOH_2A03_JOY1)
|
|
Converting *(pointer+n) to pointer[n] [22] *((byte*~) ppuDataFill::ppuDataPrepare1_$2) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- *(ppuDataFill::ppuDataPrepare1_$4 + OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Converting *(pointer+n) to pointer[n] [26] *((byte*~) ppuDataFill::ppuDataPrepare1_$3) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- *(ppuDataFill::ppuDataPrepare1_$5 + OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Converting *(pointer+n) to pointer[n] [33] *((byte*~) ppuDataFill::ppuDataPut1_$0) ← (byte) ppuDataFill::val#4 -- *(ppuDataFill::ppuDataPut1_$1 + OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Converting *(pointer+n) to pointer[n] [40] *((byte*~) ppuDataTransfer::ppuDataPrepare1_$2) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- *(ppuDataTransfer::ppuDataPrepare1_$4 + OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Converting *(pointer+n) to pointer[n] [44] *((byte*~) ppuDataTransfer::ppuDataPrepare1_$3) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 -- *(ppuDataTransfer::ppuDataPrepare1_$5 + OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Converting *(pointer+n) to pointer[n] [53] *((byte*~) ppuDataTransfer::ppuDataPut1_$0) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- *(ppuDataTransfer::ppuDataPut1_$1 + OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Converting *(pointer+n) to pointer[n] [61] *((byte*~) ppuDataPutTile::ppuDataPrepare1_$2) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$0 -- *(ppuDataPutTile::ppuDataPrepare1_$4 + OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Converting *(pointer+n) to pointer[n] [65] *((byte*~) ppuDataPutTile::ppuDataPrepare1_$3) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$1 -- *(ppuDataPutTile::ppuDataPrepare1_$5 + OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Converting *(pointer+n) to pointer[n] [69] *((byte*~) ppuDataPutTile::ppuDataPut1_$0) ← (byte) ppuDataPutTile::ppuDataPut1_val#0 -- *(ppuDataPutTile::ppuDataPut1_$1 + OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Converting *(pointer+n) to pointer[n] [73] *((byte*~) ppuDataPutTile::ppuDataPut2_$0) ← (byte) ppuDataPutTile::ppuDataPut2_val#0 -- *(ppuDataPutTile::ppuDataPut2_$1 + OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Converting *(pointer+n) to pointer[n] [80] *((byte*~) ppuDataPutTile::ppuDataPrepare2_$2) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$0 -- *(ppuDataPutTile::ppuDataPrepare2_$4 + OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Converting *(pointer+n) to pointer[n] [84] *((byte*~) ppuDataPutTile::ppuDataPrepare2_$3) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$1 -- *(ppuDataPutTile::ppuDataPrepare2_$5 + OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Converting *(pointer+n) to pointer[n] [88] *((byte*~) ppuDataPutTile::ppuDataPut3_$0) ← (byte) ppuDataPutTile::ppuDataPut3_val#0 -- *(ppuDataPutTile::ppuDataPut3_$1 + OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Converting *(pointer+n) to pointer[n] [92] *((byte*~) ppuDataPutTile::ppuDataPut4_$0) ← (byte) ppuDataPutTile::ppuDataPut4_val#0 -- *(ppuDataPutTile::ppuDataPut4_$1 + OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Converting *(pointer+n) to pointer[n] [109] *((byte*~) main::initNES1_disableVideoOutput1_$0) ← (byte) 0 -- *(main::initNES1_disableVideoOutput1_$2 + OFFSET_STRUCT_RICOH_2C02_PPUCTRL)
|
|
Converting *(pointer+n) to pointer[n] [112] *((byte*~) main::initNES1_disableVideoOutput1_$1) ← (byte) 0 -- *(main::initNES1_disableVideoOutput1_$3 + OFFSET_STRUCT_RICOH_2C02_PPUMASK)
|
|
Converting *(pointer+n) to pointer[n] [116] *((byte*~) main::initNES1_disableAudioOutput1_$0) ← (byte) $40 -- *(main::initNES1_disableAudioOutput1_$1 + OFFSET_STRUCT_RICOH_2A03_DMC_FREQ)
|
|
Converting *(pointer+n) to pointer[n] [120] (byte~) main::initNES1_waitForVBlank1_$0 ← *((byte*~) main::initNES1_waitForVBlank1_$2) & (byte) $80 -- *(main::initNES1_waitForVBlank1_$3 + OFFSET_STRUCT_RICOH_2C02_PPUSTATUS)
|
|
Converting *(pointer+n) to pointer[n] [138] (byte~) main::initNES1_waitForVBlank2_$0 ← *((byte*~) main::initNES1_waitForVBlank2_$2) & (byte) $80 -- *(main::initNES1_waitForVBlank2_$3 + OFFSET_STRUCT_RICOH_2C02_PPUSTATUS)
|
|
Converting *(pointer+n) to pointer[n] [173] *((byte*~) main::enableVideoOutput1_$0) ← (byte) $80 -- *(main::enableVideoOutput1_$2 + OFFSET_STRUCT_RICOH_2C02_PPUCTRL)
|
|
Converting *(pointer+n) to pointer[n] [176] *((byte*~) main::enableVideoOutput1_$1) ← (byte) $1e -- *(main::enableVideoOutput1_$3 + OFFSET_STRUCT_RICOH_2C02_PPUMASK)
|
|
Converting *(pointer+n) to pointer[n] [222] *((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1) ← (byte) 0 -- *(vblank::ppuSpriteBufferDmaTransfer1_$3 + OFFSET_STRUCT_RICOH_2C02_OAMADDR)
|
|
Converting *(pointer+n) to pointer[n] [226] *((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2) ← (byte~) vblank::ppuSpriteBufferDmaTransfer1_$0 -- *(vblank::ppuSpriteBufferDmaTransfer1_$4 + OFFSET_STRUCT_RICOH_2A03_OAMDMA)
|
|
Converting *(pointer+n) to pointer[n] [229] *((byte*~) vblank::$58) ← (byte) 0 -- *(vblank::$60 + OFFSET_STRUCT_RICOH_2C02_PPUSCROLL)
|
|
Converting *(pointer+n) to pointer[n] [232] *((byte*~) vblank::$59) ← (byte) -8 -- *(vblank::$61 + OFFSET_STRUCT_RICOH_2C02_PPUSCROLL)
|
|
Successful SSA optimization Pass2InlineDerefIdx
|
|
Simplifying constant evaluating to zero (byte) 0*(const byte) SIZEOF_STRUCT_SPRITEDATA in
|
|
Simplifying constant evaluating to zero (byte) 0*(const byte) SIZEOF_STRUCT_SPRITEDATA in
|
|
Simplifying constant evaluating to zero (byte) 0*(const byte) SIZEOF_STRUCT_SPRITEDATA in
|
|
Simplifying constant evaluating to zero (byte) 0*(const byte) SIZEOF_STRUCT_SPRITEDATA in
|
|
Successful SSA optimization PassNSimplifyConstantZero
|
|
Simplifying expression containing zero ppuDataPutTile::tile#10 in [66] (byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 0)
|
|
Simplifying expression containing zero main::initNES1_disableVideoOutput1_$2 in [108] (byte*~) main::initNES1_disableVideoOutput1_$0 ← (const byte*) main::initNES1_disableVideoOutput1_$2 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL
|
|
Simplifying expression containing zero main::initNES1_disableVideoOutput1_$2 in [109] *((const byte*) main::initNES1_disableVideoOutput1_$2 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL) ← (byte) 0
|
|
Simplifying expression containing zero MEMORY in [125] *((const nomodify byte*) MEMORY+(byte) 0 + (byte) main::initNES1_i#2) ← (byte) 0
|
|
Simplifying expression containing zero main::enableVideoOutput1_$2 in [172] (byte*~) main::enableVideoOutput1_$0 ← (const byte*) main::enableVideoOutput1_$2 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL
|
|
Simplifying expression containing zero main::enableVideoOutput1_$2 in [173] *((const byte*) main::enableVideoOutput1_$2 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL) ← (byte) $80
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_Y in [190] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$27) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$27)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [190] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$27) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_Y in [190] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$27) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [190] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [192] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$29) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$29)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [192] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$29) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (const byte) vblank::$29)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [194] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$31) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$31)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [194] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$31) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (const byte) vblank::$31)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [196] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$33) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$33)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [196] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$33) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (const byte) vblank::$33)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_Y in [201] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$35) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$35)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [201] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$35) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_Y in [201] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$35) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [201] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [203] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$37) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$37)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [203] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$37) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (const byte) vblank::$37)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [205] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$39) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$39)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [205] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$39) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (const byte) vblank::$39)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [207] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$41) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$41)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER in [207] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (const byte) vblank::$41) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (const byte) vblank::$41)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X in [212] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (const byte) vblank::$43) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (const byte) vblank::$43)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X in [212] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (const byte) vblank::$43) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X in [234] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (const byte) vblank::$51) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (const byte) vblank::$51)
|
|
Simplifying expression containing zero (byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X in [234] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (const byte) vblank::$51) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X)
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Eliminating unused variable (byte*~) readJoy1::$4 and assignment [0] (byte*~) readJoy1::$4 ← (const byte*) readJoy1::$7 + (const byte) OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
Eliminating unused variable (byte*~) readJoy1::$5 and assignment [2] (byte*~) readJoy1::$5 ← (const byte*) readJoy1::$8 + (const byte) OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
Eliminating unused variable (byte*~) readJoy1::$6 and assignment [7] (byte*~) readJoy1::$6 ← (const byte*) readJoy1::$9 + (const byte) OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
Eliminating unused variable (byte*~) ppuDataFill::ppuDataPrepare1_$2 and assignment [14] (byte*~) ppuDataFill::ppuDataPrepare1_$2 ← (const byte*) ppuDataFill::ppuDataPrepare1_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
Eliminating unused variable (byte*~) ppuDataFill::ppuDataPrepare1_$3 and assignment [17] (byte*~) ppuDataFill::ppuDataPrepare1_$3 ← (const byte*) ppuDataFill::ppuDataPrepare1_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
Eliminating unused variable (byte*~) ppuDataFill::ppuDataPut1_$0 and assignment [21] (byte*~) ppuDataFill::ppuDataPut1_$0 ← (const byte*) ppuDataFill::ppuDataPut1_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
Eliminating unused variable (byte*~) ppuDataTransfer::ppuDataPrepare1_$2 and assignment [26] (byte*~) ppuDataTransfer::ppuDataPrepare1_$2 ← (const byte*) ppuDataTransfer::ppuDataPrepare1_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
Eliminating unused variable (byte*~) ppuDataTransfer::ppuDataPrepare1_$3 and assignment [29] (byte*~) ppuDataTransfer::ppuDataPrepare1_$3 ← (const byte*) ppuDataTransfer::ppuDataPrepare1_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
Eliminating unused variable (byte*~) ppuDataTransfer::ppuDataPut1_$0 and assignment [34] (byte*~) ppuDataTransfer::ppuDataPut1_$0 ← (const byte*) ppuDataTransfer::ppuDataPut1_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
Eliminating unused variable (byte*~) ppuDataPutTile::ppuDataPrepare1_$2 and assignment [41] (byte*~) ppuDataPutTile::ppuDataPrepare1_$2 ← (const byte*) ppuDataPutTile::ppuDataPrepare1_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
Eliminating unused variable (byte*~) ppuDataPutTile::ppuDataPrepare1_$3 and assignment [44] (byte*~) ppuDataPutTile::ppuDataPrepare1_$3 ← (const byte*) ppuDataPutTile::ppuDataPrepare1_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
Eliminating unused variable (byte*~) ppuDataPutTile::ppuDataPut1_$0 and assignment [47] (byte*~) ppuDataPutTile::ppuDataPut1_$0 ← (const byte*) ppuDataPutTile::ppuDataPut1_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
Eliminating unused variable (byte*~) ppuDataPutTile::ppuDataPut2_$0 and assignment [50] (byte*~) ppuDataPutTile::ppuDataPut2_$0 ← (const byte*) ppuDataPutTile::ppuDataPut2_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
Eliminating unused variable (byte*~) ppuDataPutTile::ppuDataPrepare2_$2 and assignment [56] (byte*~) ppuDataPutTile::ppuDataPrepare2_$2 ← (const byte*) ppuDataPutTile::ppuDataPrepare2_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
Eliminating unused variable (byte*~) ppuDataPutTile::ppuDataPrepare2_$3 and assignment [59] (byte*~) ppuDataPutTile::ppuDataPrepare2_$3 ← (const byte*) ppuDataPutTile::ppuDataPrepare2_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
Eliminating unused variable (byte*~) ppuDataPutTile::ppuDataPut3_$0 and assignment [62] (byte*~) ppuDataPutTile::ppuDataPut3_$0 ← (const byte*) ppuDataPutTile::ppuDataPut3_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
Eliminating unused variable (byte*~) ppuDataPutTile::ppuDataPut4_$0 and assignment [65] (byte*~) ppuDataPutTile::ppuDataPut4_$0 ← (const byte*) ppuDataPutTile::ppuDataPut4_$1 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
Eliminating unused variable (byte*~) main::initNES1_disableVideoOutput1_$0 and assignment [76] (byte*~) main::initNES1_disableVideoOutput1_$0 ← (const byte*) main::initNES1_disableVideoOutput1_$2
|
|
Eliminating unused variable (byte*~) main::initNES1_disableVideoOutput1_$1 and assignment [78] (byte*~) main::initNES1_disableVideoOutput1_$1 ← (const byte*) main::initNES1_disableVideoOutput1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
Eliminating unused variable (byte*~) main::initNES1_disableAudioOutput1_$0 and assignment [81] (byte*~) main::initNES1_disableAudioOutput1_$0 ← (const byte*) main::initNES1_disableAudioOutput1_$1 + (const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ
|
|
Eliminating unused variable (byte*~) main::initNES1_waitForVBlank1_$2 and assignment [84] (byte*~) main::initNES1_waitForVBlank1_$2 ← (const byte*) main::initNES1_waitForVBlank1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
Eliminating unused variable (byte*~) main::initNES1_waitForVBlank2_$2 and assignment [98] (byte*~) main::initNES1_waitForVBlank2_$2 ← (const byte*) main::initNES1_waitForVBlank2_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
Eliminating unused variable (byte*~) main::enableVideoOutput1_$0 and assignment [113] (byte*~) main::enableVideoOutput1_$0 ← (const byte*) main::enableVideoOutput1_$2
|
|
Eliminating unused variable (byte*~) main::enableVideoOutput1_$1 and assignment [115] (byte*~) main::enableVideoOutput1_$1 ← (const byte*) main::enableVideoOutput1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
Eliminating unused variable (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1 and assignment [141] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1 ← (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR
|
|
Eliminating unused variable (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2 and assignment [144] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2 ← (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$4 + (const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA
|
|
Eliminating unused variable (byte*~) vblank::$58 and assignment [146] (byte*~) vblank::$58 ← (const byte*) vblank::$60 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
Eliminating unused variable (byte*~) vblank::$59 and assignment [148] (byte*~) vblank::$59 ← (const byte*) vblank::$61 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
Eliminating unused constant (const void*) memcpy::return#2
|
|
Eliminating unused constant (const byte) vblank::$27
|
|
Eliminating unused constant (const byte) vblank::$35
|
|
Eliminating unused constant (const byte) vblank::$43
|
|
Eliminating unused constant (const byte) vblank::$51
|
|
Eliminating unused constant (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL
|
|
Eliminating unused constant (const byte) OFFSET_STRUCT_SPRITEDATA_Y
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Removing unused block main::@return
|
|
Successful SSA optimization Pass2EliminateUnusedBlocks
|
|
Resolving array sizeof() sizeof (const byte*) PALETTE
|
|
Resolving array sizeof() sizeof (const struct SpriteData*) SPRITES
|
|
Successful SSA optimization PassNSizeOfSimplification
|
|
Constant right-side identified [19] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (const nomodify void*) ppuDataTransfer::ppuData#0
|
|
Constant right-side identified [21] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (const nomodify void*) ppuDataTransfer::ppuData#0
|
|
Constant right-side identified [51] (byte*) memcpy::src_end#0 ← (const byte*) memcpy::$2 + (const word) memcpy::num#0
|
|
Constant right-side identified [117] (byte~) vblank::ppuSpriteBufferDmaTransfer1_$0 ← > (const struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const byte) ppuDataTransfer::ppuDataPrepare1_$0 = >ppuDataTransfer::ppuData#0
|
|
Constant (const byte) ppuDataTransfer::ppuDataPrepare1_$1 = <ppuDataTransfer::ppuData#0
|
|
Constant (const byte*) memcpy::src_end#0 = memcpy::$2+memcpy::num#0
|
|
Constant (const byte) vblank::ppuSpriteBufferDmaTransfer1_$0 = >vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Simplifying constant evaluating to zero <(const nomodify void*) ppuDataTransfer::ppuData#0 in
|
|
Successful SSA optimization PassNSimplifyConstantZero
|
|
Adding number conversion cast (unumber) $20 in
|
|
Adding number conversion cast (unumber) 8 in
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Simplifying constant integer cast $20
|
|
Simplifying constant integer cast 8
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (byte) $20
|
|
Finalized unsigned number type (byte) 8
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inlining Noop Cast [37] (byte*~) ppuDataPutTile::$7 ← (byte*)(nomodify void*) ppuDataPutTile::ppuData#2 keeping ppuDataPutTile::ppuData#2
|
|
Successful SSA optimization Pass2NopCastInlining
|
|
Inlining Noop Cast [39] (nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ← (void*)(byte*~) ppuDataPutTile::$3 keeping ppuDataPutTile::ppuDataPrepare2_ppuData#0
|
|
Inlining Noop Cast [83] (nomodify void*) ppuDataPutTile::ppuData#0 ← (void*)(byte*~) main::$10 keeping ppuDataPutTile::ppuData#0
|
|
Successful SSA optimization Pass2NopCastInlining
|
|
Inlining constant with var siblings (const byte) readJoy1::joy#0
|
|
Inlining constant with var siblings (const byte) readJoy1::i#0
|
|
Inlining constant with var siblings (const word) ppuDataFill::i#0
|
|
Inlining constant with different constant siblings (const nomodify void*) ppuDataFill::ppuData#0
|
|
Inlining constant with var siblings (const byte) ppuDataFill::val#0
|
|
Inlining constant with var siblings (const word) ppuDataFill::size#0
|
|
Inlining constant with different constant siblings (const nomodify void*) ppuDataFill::ppuData#1
|
|
Inlining constant with var siblings (const byte) ppuDataFill::val#1
|
|
Inlining constant with var siblings (const word) ppuDataFill::size#1
|
|
Inlining constant with var siblings (const word) ppuDataTransfer::i#0
|
|
Inlining constant with var siblings (const byte*) ppuDataTransfer::cpuSrc#0
|
|
Inlining constant with var siblings (const byte*) ppuDataPutTile::tile#0
|
|
Inlining constant with var siblings (const nomodify void*) ppuDataPutTile::ppuData#1
|
|
Inlining constant with var siblings (const byte*) ppuDataPutTile::tile#1
|
|
Inlining constant with var siblings (const byte*) memcpy::src#0
|
|
Inlining constant with var siblings (const byte*) memcpy::dst#0
|
|
Inlining constant with var siblings (const byte) main::initNES1_i#0
|
|
Inlining constant with var siblings (const byte) main::x#0
|
|
Constant inlined ppuDataPutTile::ppuDataPut4_$1 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined vblank::$47 = (byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined vblank::$49 = (byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined ppuDataTransfer::i#0 = (word) 0
|
|
Constant inlined ppuDataTransfer::ppuDataPrepare1_$1 = (byte) 0
|
|
Constant inlined ppuDataTransfer::ppuDataPrepare1_$0 = >(const nomodify void*) ppuDataTransfer::ppuData#0
|
|
Constant inlined vblank::$41 = (byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined vblank::$45 = (byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined memcpy::$2 = (byte*)(const void*) memcpy::source#0
|
|
Constant inlined main::initNES1_waitForVBlank2_$3 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataFill::ppuDataPrepare1_$4 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataTransfer::ppuDataPrepare1_$5 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataFill::ppuDataPrepare1_$5 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataTransfer::ppuDataPrepare1_$4 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataFill::ppuData#1 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0
|
|
Constant inlined ppuDataFill::ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0
|
|
Constant inlined ppuDataTransfer::cpuSrc#0 = (byte*)(const nomodify void*) ppuDataTransfer::cpuData#0
|
|
Constant inlined vblank::$57 = (byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined main::initNES1_i#0 = (byte) 0
|
|
Constant inlined ppuDataPutTile::ppuDataPut1_$1 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined vblank::$53 = (byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined vblank::$55 = (byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined ppuDataPutTile::ppuDataPrepare2_$5 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataPutTile::ppuDataPrepare2_$4 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataFill::i#0 = (word) 0
|
|
Constant inlined memcpy::dst#0 = (byte*)(const void*) memcpy::destination#0
|
|
Constant inlined vblank::$29 = (byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined vblank::$60 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined vblank::$61 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined memcpy::src#0 = (byte*)(const void*) memcpy::source#0
|
|
Constant inlined main::enableVideoOutput1_$3 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined main::enableVideoOutput1_$2 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined readJoy1::i#0 = (byte) 0
|
|
Constant inlined ppuDataTransfer::ppuDataPut1_$1 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataPutTile::ppuDataPut2_$1 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataFill::val#1 = (byte) 0
|
|
Constant inlined ppuDataFill::ppuDataPut1_$1 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataFill::val#0 = (byte) $fc
|
|
Constant inlined ppuDataPutTile::ppuDataPrepare1_$5 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataPutTile::ppuDataPrepare1_$4 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined main::initNES1_disableVideoOutput1_$3 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined main::initNES1_disableVideoOutput1_$2 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined main::initNES1_disableAudioOutput1_$1 = (byte*)(const struct RICOH_2A03*) APU
|
|
Constant inlined readJoy1::joy#0 = (byte) 0
|
|
Constant inlined ppuDataPutTile::tile#0 = (const byte*) FLOOR
|
|
Constant inlined ppuDataPutTile::tile#1 = (const byte*) FLAG
|
|
Constant inlined ppuDataPutTile::ppuDataPut3_$1 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined vblank::$37 = (byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined vblank::$39 = (byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined main::x#0 = (byte) 0
|
|
Constant inlined vblank::$31 = (byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined vblank::$33 = (byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
Constant inlined readJoy1::$9 = (byte*)(const struct RICOH_2A03*) APU
|
|
Constant inlined vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 = (const struct SpriteData*) SPRITE_BUFFER
|
|
Constant inlined main::initNES1_waitForVBlank1_$3 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined ppuDataPutTile::ppuData#1 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $12*(number) $20+(byte) $1c
|
|
Constant inlined vblank::ppuSpriteBufferDmaTransfer1_$0 = >(const struct SpriteData*) SPRITE_BUFFER
|
|
Constant inlined ppuDataFill::size#1 = (byte) $40
|
|
Constant inlined ppuDataFill::size#0 = (word) $3c0
|
|
Constant inlined readJoy1::$7 = (byte*)(const struct RICOH_2A03*) APU
|
|
Constant inlined vblank::ppuSpriteBufferDmaTransfer1_$3 = (byte*)(const struct RICOH_2C02*) PPU
|
|
Constant inlined readJoy1::$8 = (byte*)(const struct RICOH_2A03*) APU
|
|
Constant inlined vblank::ppuSpriteBufferDmaTransfer1_$4 = (byte*)(const struct RICOH_2A03*) APU
|
|
Successful SSA optimization Pass2ConstantInlining
|
|
Consolidated array index constant in *((byte*)APU+OFFSET_STRUCT_RICOH_2A03_JOY1)
|
|
Consolidated array index constant in *((byte*)APU+OFFSET_STRUCT_RICOH_2A03_JOY1)
|
|
Consolidated array index constant in *((byte*)APU+OFFSET_STRUCT_RICOH_2A03_JOY1)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUMASK)
|
|
Consolidated array index constant in *((byte*)APU+OFFSET_STRUCT_RICOH_2A03_DMC_FREQ)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSTATUS)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSTATUS)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUMASK)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_OAMADDR)
|
|
Consolidated array index constant in *((byte*)APU+OFFSET_STRUCT_RICOH_2A03_OAMDMA)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL)
|
|
Consolidated array index constant in *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA)
|
|
Consolidated array index constant in *((byte*)SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA)
|
|
Successful SSA optimization Pass2ConstantAdditionElimination
|
|
Added new block during phi lifting main::@12(between main::initNES1_@1 and main::initNES1_@1)
|
|
Adding NOP phi() at start of @begin
|
|
Adding NOP phi() at start of @1
|
|
Adding NOP phi() at start of @2
|
|
Adding NOP phi() at start of @end
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of main::initNES1_waitForVBlank1
|
|
Adding NOP phi() at start of main::initNES1_@6
|
|
Adding NOP phi() at start of main::initNES1_waitForVBlank2
|
|
Adding NOP phi() at start of main::@5
|
|
Adding NOP phi() at start of main::@6
|
|
Adding NOP phi() at start of main::@7
|
|
Adding NOP phi() at start of main::@8
|
|
Adding NOP phi() at start of main::@3
|
|
Adding NOP phi() at start of main::@10
|
|
Adding NOP phi() at start of main::@11
|
|
Adding NOP phi() at start of main::@4
|
|
Adding NOP phi() at start of memcpy
|
|
Adding NOP phi() at start of memcpy::@3
|
|
Adding NOP phi() at start of ppuDataFill::@3
|
|
Adding NOP phi() at start of ppuDataFill::@2
|
|
Adding NOP phi() at start of ppuDataTransfer
|
|
Adding NOP phi() at start of ppuDataTransfer::@3
|
|
Adding NOP phi() at start of vblank
|
|
Adding NOP phi() at start of vblank::@4
|
|
Adding NOP phi() at start of readJoy1::@3
|
|
CALL GRAPH
|
|
Calls in [] to main:2
|
|
Calls in [main] to ppuDataTransfer:32 ppuDataFill:34 ppuDataFill:36 ppuDataPutTile:41 memcpy:43 ppuDataPutTile:50
|
|
Calls in [vblank] to readJoy1:110
|
|
|
|
Created 14 initial phi equivalence classes
|
|
Coalesced [52] main::x#5 ← main::x#1
|
|
Coalesced [53] main::initNES1_i#3 ← main::initNES1_i#1
|
|
Coalesced [81] memcpy::src#4 ← memcpy::src#1
|
|
Coalesced [82] memcpy::dst#4 ← memcpy::dst#1
|
|
Coalesced [95] ppuDataFill::i#6 ← ppuDataFill::i#1
|
|
Coalesced [107] ppuDataTransfer::i#6 ← ppuDataTransfer::i#1
|
|
Coalesced [108] ppuDataTransfer::cpuSrc#6 ← ppuDataTransfer::cpuSrc#1
|
|
Coalesced [153] readJoy1::i#4 ← readJoy1::i#1
|
|
Coalesced [154] readJoy1::joy#5 ← readJoy1::joy#1
|
|
Coalesced down to 14 phi equivalence classes
|
|
Culled Empty Block (label) @2
|
|
Culled Empty Block (label) main::initNES1_@6
|
|
Culled Empty Block (label) main::@8
|
|
Culled Empty Block (label) main::@11
|
|
Culled Empty Block (label) main::@12
|
|
Culled Empty Block (label) memcpy::@3
|
|
Culled Empty Block (label) ppuDataFill::@3
|
|
Culled Empty Block (label) ppuDataFill::@2
|
|
Culled Empty Block (label) ppuDataTransfer::@3
|
|
Culled Empty Block (label) vblank::@4
|
|
Culled Empty Block (label) readJoy1::@3
|
|
Renumbering block ppuDataFill::@4 to ppuDataFill::@2
|
|
Renumbering block ppuDataTransfer::@4 to ppuDataTransfer::@3
|
|
Renumbering block main::@9 to main::@8
|
|
Renumbering block main::@10 to main::@9
|
|
Renumbering block vblank::@5 to vblank::@4
|
|
Renumbering block vblank::@6 to vblank::@5
|
|
Renumbering block vblank::@7 to vblank::@6
|
|
Renumbering block vblank::@8 to vblank::@7
|
|
Renumbering block vblank::@9 to vblank::@8
|
|
Renumbering block vblank::@10 to vblank::@9
|
|
Adding NOP phi() at start of @begin
|
|
Adding NOP phi() at start of @1
|
|
Adding NOP phi() at start of @end
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of main::initNES1_waitForVBlank1
|
|
Adding NOP phi() at start of main::initNES1_waitForVBlank2
|
|
Adding NOP phi() at start of main::@5
|
|
Adding NOP phi() at start of main::@6
|
|
Adding NOP phi() at start of main::@7
|
|
Adding NOP phi() at start of main::@3
|
|
Adding NOP phi() at start of main::@9
|
|
Adding NOP phi() at start of main::@4
|
|
Adding NOP phi() at start of memcpy
|
|
Adding NOP phi() at start of ppuDataTransfer
|
|
Adding NOP phi() at start of vblank
|
|
|
|
FINAL CONTROL FLOW GRAPH
|
|
@begin: scope:[] from
|
|
[0] phi()
|
|
to:@1
|
|
@1: scope:[] from @begin
|
|
[1] phi()
|
|
[2] call main
|
|
to:@end
|
|
@end: scope:[] from @1
|
|
[3] phi()
|
|
|
|
(void()) main()
|
|
main: scope:[main] from @1
|
|
[4] phi()
|
|
to:main::initNES1
|
|
main::initNES1: scope:[main] from main
|
|
asm { cld ldx#$ff txs }
|
|
to:main::initNES1_disableVideoOutput1
|
|
main::initNES1_disableVideoOutput1: scope:[main] from main::initNES1
|
|
[6] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) 0
|
|
[7] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) 0
|
|
to:main::initNES1_disableAudioOutput1
|
|
main::initNES1_disableAudioOutput1: scope:[main] from main::initNES1_disableVideoOutput1
|
|
[8] *((const nomodify byte*) FR_COUNTER) ← (byte) $40
|
|
[9] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ) ← (byte) $40
|
|
to:main::initNES1_clearVBlankFlag1
|
|
main::initNES1_clearVBlankFlag1: scope:[main] from main::initNES1_disableAudioOutput1
|
|
asm { ldaPPU_PPUSTATUS }
|
|
to:main::initNES1_waitForVBlank1
|
|
main::initNES1_waitForVBlank1: scope:[main] from main::initNES1_clearVBlankFlag1
|
|
[11] phi()
|
|
to:main::initNES1_waitForVBlank1_@1
|
|
main::initNES1_waitForVBlank1_@1: scope:[main] from main::initNES1_waitForVBlank1 main::initNES1_waitForVBlank1_@1
|
|
[12] (byte~) main::initNES1_waitForVBlank1_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80
|
|
[13] if((byte) 0==(byte~) main::initNES1_waitForVBlank1_$0) goto main::initNES1_waitForVBlank1_@1
|
|
to:main::initNES1_@1
|
|
main::initNES1_@1: scope:[main] from main::initNES1_@1 main::initNES1_waitForVBlank1_@1
|
|
[14] (byte) main::initNES1_i#2 ← phi( main::initNES1_@1/(byte) main::initNES1_i#1 main::initNES1_waitForVBlank1_@1/(byte) 0 )
|
|
[15] *((const nomodify byte*) MEMORY + (byte) main::initNES1_i#2) ← (byte) 0
|
|
[16] *((const nomodify byte*) MEMORY+(word) $100 + (byte) main::initNES1_i#2) ← (byte) 0
|
|
[17] *((const nomodify byte*) MEMORY+(word) $200 + (byte) main::initNES1_i#2) ← (byte) 0
|
|
[18] *((const nomodify byte*) MEMORY+(word) $300 + (byte) main::initNES1_i#2) ← (byte) 0
|
|
[19] *((const nomodify byte*) MEMORY+(word) $400 + (byte) main::initNES1_i#2) ← (byte) 0
|
|
[20] *((const nomodify byte*) MEMORY+(word) $500 + (byte) main::initNES1_i#2) ← (byte) 0
|
|
[21] *((const nomodify byte*) MEMORY+(word) $600 + (byte) main::initNES1_i#2) ← (byte) 0
|
|
[22] *((const nomodify byte*) MEMORY+(word) $700 + (byte) main::initNES1_i#2) ← (byte) 0
|
|
[23] (byte) main::initNES1_i#1 ← ++ (byte) main::initNES1_i#2
|
|
[24] if((byte) 0!=(byte) main::initNES1_i#1) goto main::initNES1_@1
|
|
to:main::initNES1_waitForVBlank2
|
|
main::initNES1_waitForVBlank2: scope:[main] from main::initNES1_@1
|
|
[25] phi()
|
|
to:main::initNES1_waitForVBlank2_@1
|
|
main::initNES1_waitForVBlank2_@1: scope:[main] from main::initNES1_waitForVBlank2 main::initNES1_waitForVBlank2_@1
|
|
[26] (byte~) main::initNES1_waitForVBlank2_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80
|
|
[27] if((byte) 0==(byte~) main::initNES1_waitForVBlank2_$0) goto main::initNES1_waitForVBlank2_@1
|
|
to:main::initNES1_@7
|
|
main::initNES1_@7: scope:[main] from main::initNES1_waitForVBlank2_@1
|
|
asm { ldaPPU_PPUSTATUS }
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::initNES1_@7
|
|
[29] phi()
|
|
[30] call ppuDataTransfer
|
|
to:main::@6
|
|
main::@6: scope:[main] from main::@5
|
|
[31] phi()
|
|
[32] call ppuDataFill
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::@6
|
|
[33] phi()
|
|
[34] call ppuDataFill
|
|
to:main::@1
|
|
main::@1: scope:[main] from main::@7 main::@8
|
|
[35] (byte) main::x#2 ← phi( main::@7/(byte) 0 main::@8/(byte) main::x#1 )
|
|
[36] if((byte) main::x#2<(byte) $20) goto main::@2
|
|
to:main::@3
|
|
main::@3: scope:[main] from main::@1
|
|
[37] phi()
|
|
[38] call ppuDataPutTile
|
|
to:main::@9
|
|
main::@9: scope:[main] from main::@3
|
|
[39] phi()
|
|
[40] call memcpy
|
|
to:main::enableVideoOutput1
|
|
main::enableVideoOutput1: scope:[main] from main::@9
|
|
[41] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) $80
|
|
[42] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) $1e
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@4 main::enableVideoOutput1
|
|
[43] phi()
|
|
to:main::@4
|
|
main::@2: scope:[main] from main::@1
|
|
[44] (nomodify byte*) ppuDataPutTile::ppuData#0 ← (const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $14*(number) $20 + (byte) main::x#2
|
|
[45] (nomodify void*) ppuDataPutTile::ppuData#9 ← (void*)(nomodify byte*) ppuDataPutTile::ppuData#0
|
|
[46] call ppuDataPutTile
|
|
to:main::@8
|
|
main::@8: scope:[main] from main::@2
|
|
[47] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2
|
|
to:main::@1
|
|
|
|
(void()) ppuDataPutTile((nomodify void*) ppuDataPutTile::ppuData , (byte*) ppuDataPutTile::tile)
|
|
ppuDataPutTile: scope:[ppuDataPutTile] from main::@2 main::@3
|
|
[48] (byte*) ppuDataPutTile::tile#10 ← phi( main::@2/(const byte*) FLOOR main::@3/(const byte*) FLAG )
|
|
[48] (nomodify void*) ppuDataPutTile::ppuData#2 ← phi( main::@2/(nomodify void*) ppuDataPutTile::ppuData#9 main::@3/(void*)(const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $12*(number) $20+(byte) $1c )
|
|
to:ppuDataPutTile::ppuDataPrepare1
|
|
ppuDataPutTile::ppuDataPrepare1: scope:[ppuDataPutTile] from ppuDataPutTile
|
|
[49] (byte~) ppuDataPutTile::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataPutTile::ppuData#2
|
|
[50] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$0
|
|
[51] (byte~) ppuDataPutTile::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataPutTile::ppuData#2
|
|
[52] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$1
|
|
to:ppuDataPutTile::@1
|
|
ppuDataPutTile::@1: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPrepare1
|
|
[53] (byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#10)
|
|
to:ppuDataPutTile::ppuDataPut1
|
|
ppuDataPutTile::ppuDataPut1: scope:[ppuDataPutTile] from ppuDataPutTile::@1
|
|
[54] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut1_val#0
|
|
to:ppuDataPutTile::@2
|
|
ppuDataPutTile::@2: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPut1
|
|
[55] (byte) ppuDataPutTile::ppuDataPut2_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 1)
|
|
to:ppuDataPutTile::ppuDataPut2
|
|
ppuDataPutTile::ppuDataPut2: scope:[ppuDataPutTile] from ppuDataPutTile::@2
|
|
[56] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut2_val#0
|
|
to:ppuDataPutTile::@3
|
|
ppuDataPutTile::@3: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPut2
|
|
[57] (nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ← (byte*)(nomodify void*) ppuDataPutTile::ppuData#2 + (byte) $20
|
|
to:ppuDataPutTile::ppuDataPrepare2
|
|
ppuDataPutTile::ppuDataPrepare2: scope:[ppuDataPutTile] from ppuDataPutTile::@3
|
|
[58] (byte~) ppuDataPutTile::ppuDataPrepare2_$0 ← > (void*)(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0
|
|
[59] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$0
|
|
[60] (byte~) ppuDataPutTile::ppuDataPrepare2_$1 ← < (void*)(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0
|
|
[61] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$1
|
|
to:ppuDataPutTile::@4
|
|
ppuDataPutTile::@4: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPrepare2
|
|
[62] (byte) ppuDataPutTile::ppuDataPut3_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 2)
|
|
to:ppuDataPutTile::ppuDataPut3
|
|
ppuDataPutTile::ppuDataPut3: scope:[ppuDataPutTile] from ppuDataPutTile::@4
|
|
[63] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut3_val#0
|
|
to:ppuDataPutTile::@5
|
|
ppuDataPutTile::@5: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPut3
|
|
[64] (byte) ppuDataPutTile::ppuDataPut4_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 3)
|
|
to:ppuDataPutTile::ppuDataPut4
|
|
ppuDataPutTile::ppuDataPut4: scope:[ppuDataPutTile] from ppuDataPutTile::@5
|
|
[65] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut4_val#0
|
|
to:ppuDataPutTile::@return
|
|
ppuDataPutTile::@return: scope:[ppuDataPutTile] from ppuDataPutTile::ppuDataPut4
|
|
[66] return
|
|
to:@return
|
|
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
memcpy: scope:[memcpy] from main::@9
|
|
[67] phi()
|
|
to:memcpy::@1
|
|
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
|
[68] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 )
|
|
[68] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 )
|
|
[69] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2
|
|
to:memcpy::@return
|
|
memcpy::@return: scope:[memcpy] from memcpy::@1
|
|
[70] return
|
|
to:@return
|
|
memcpy::@2: scope:[memcpy] from memcpy::@1
|
|
[71] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2)
|
|
[72] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
|
[73] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2
|
|
to:memcpy::@1
|
|
|
|
(void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size)
|
|
ppuDataFill: scope:[ppuDataFill] from main::@6 main::@7
|
|
[74] (byte) ppuDataFill::val#4 ← phi( main::@6/(byte) $fc main::@7/(byte) 0 )
|
|
[74] (word) ppuDataFill::size#3 ← phi( main::@6/(word) $3c0 main::@7/(byte) $40 )
|
|
[74] (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ← phi( main::@6/(void*)(const nomodify byte*) PPU_NAME_TABLE_0 main::@7/(void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 )
|
|
to:ppuDataFill::ppuDataPrepare1
|
|
ppuDataFill::ppuDataPrepare1: scope:[ppuDataFill] from ppuDataFill
|
|
[75] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0
|
|
[76] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0
|
|
[77] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0
|
|
[78] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1
|
|
to:ppuDataFill::@1
|
|
ppuDataFill::@1: scope:[ppuDataFill] from ppuDataFill::@2 ppuDataFill::ppuDataPrepare1
|
|
[79] (word) ppuDataFill::i#2 ← phi( ppuDataFill::ppuDataPrepare1/(word) 0 ppuDataFill::@2/(word) ppuDataFill::i#1 )
|
|
[80] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1
|
|
to:ppuDataFill::@return
|
|
ppuDataFill::@return: scope:[ppuDataFill] from ppuDataFill::@1
|
|
[81] return
|
|
to:@return
|
|
ppuDataFill::ppuDataPut1: scope:[ppuDataFill] from ppuDataFill::@1
|
|
[82] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataFill::val#4
|
|
to:ppuDataFill::@2
|
|
ppuDataFill::@2: scope:[ppuDataFill] from ppuDataFill::ppuDataPut1
|
|
[83] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2
|
|
to:ppuDataFill::@1
|
|
|
|
(void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size)
|
|
ppuDataTransfer: scope:[ppuDataTransfer] from main::@5
|
|
[84] phi()
|
|
to:ppuDataTransfer::ppuDataPrepare1
|
|
ppuDataTransfer::ppuDataPrepare1: scope:[ppuDataTransfer] from ppuDataTransfer
|
|
[85] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← >(const nomodify void*) ppuDataTransfer::ppuData#0
|
|
[86] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte) 0
|
|
to:ppuDataTransfer::@1
|
|
ppuDataTransfer::@1: scope:[ppuDataTransfer] from ppuDataTransfer::@3 ppuDataTransfer::ppuDataPrepare1
|
|
[87] (byte*) ppuDataTransfer::cpuSrc#2 ← phi( ppuDataTransfer::ppuDataPrepare1/(byte*)(const nomodify void*) ppuDataTransfer::cpuData#0 ppuDataTransfer::@3/(byte*) ppuDataTransfer::cpuSrc#1 )
|
|
[87] (word) ppuDataTransfer::i#2 ← phi( ppuDataTransfer::ppuDataPrepare1/(word) 0 ppuDataTransfer::@3/(word) ppuDataTransfer::i#1 )
|
|
[88] if((word) ppuDataTransfer::i#2<(const word) ppuDataTransfer::size#0) goto ppuDataTransfer::@2
|
|
to:ppuDataTransfer::@return
|
|
ppuDataTransfer::@return: scope:[ppuDataTransfer] from ppuDataTransfer::@1
|
|
[89] return
|
|
to:@return
|
|
ppuDataTransfer::@2: scope:[ppuDataTransfer] from ppuDataTransfer::@1
|
|
[90] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2)
|
|
to:ppuDataTransfer::ppuDataPut1
|
|
ppuDataTransfer::ppuDataPut1: scope:[ppuDataTransfer] from ppuDataTransfer::@2
|
|
[91] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0
|
|
to:ppuDataTransfer::@3
|
|
ppuDataTransfer::@3: scope:[ppuDataTransfer] from ppuDataTransfer::ppuDataPut1
|
|
[92] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2
|
|
[93] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2
|
|
to:ppuDataTransfer::@1
|
|
|
|
interrupt(HARDWARE_STACK)(void()) vblank()
|
|
vblank: scope:[vblank] from
|
|
[94] phi()
|
|
[95] call readJoy1
|
|
[96] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2
|
|
to:vblank::@9
|
|
vblank::@9: scope:[vblank] from vblank
|
|
[97] (byte) vblank::joy#0 ← (byte) readJoy1::return#2
|
|
[98] (byte~) vblank::$1 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN
|
|
[99] if((byte) 0==(byte~) vblank::$1) goto vblank::@1
|
|
to:vblank::@4
|
|
vblank::@4: scope:[vblank] from vblank::@9
|
|
[100] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER)
|
|
[101] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
[102] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
[103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
to:vblank::@1
|
|
vblank::@1: scope:[vblank] from vblank::@4 vblank::@9
|
|
[104] (byte~) vblank::$3 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP
|
|
[105] if((byte) 0==(byte~) vblank::$3) goto vblank::@2
|
|
to:vblank::@5
|
|
vblank::@5: scope:[vblank] from vblank::@1
|
|
[106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER)
|
|
[107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
[108] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
[109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
to:vblank::@2
|
|
vblank::@2: scope:[vblank] from vblank::@1 vblank::@5
|
|
[110] (byte~) vblank::$5 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT
|
|
[111] if((byte) 0==(byte~) vblank::$5) goto vblank::@3
|
|
to:vblank::@6
|
|
vblank::@6: scope:[vblank] from vblank::@2
|
|
[112] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X)
|
|
[113] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
[114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
[115] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
to:vblank::@3
|
|
vblank::@3: scope:[vblank] from vblank::@2 vblank::@6
|
|
[116] (byte~) vblank::$7 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT
|
|
[117] if((byte) 0==(byte~) vblank::$7) goto vblank::ppuSpriteBufferDmaTransfer1
|
|
to:vblank::@7
|
|
vblank::@7: scope:[vblank] from vblank::@3
|
|
[118] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X)
|
|
[119] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
[120] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
[121] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA)
|
|
to:vblank::ppuSpriteBufferDmaTransfer1
|
|
vblank::ppuSpriteBufferDmaTransfer1: scope:[vblank] from vblank::@3 vblank::@7
|
|
[122] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0
|
|
[123] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER
|
|
to:vblank::@8
|
|
vblank::@8: scope:[vblank] from vblank::ppuSpriteBufferDmaTransfer1
|
|
[124] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0
|
|
[125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8
|
|
to:vblank::@return
|
|
vblank::@return: scope:[vblank] from vblank::@8
|
|
[126] return
|
|
to:@return
|
|
|
|
(byte()) readJoy1()
|
|
readJoy1: scope:[readJoy1] from vblank
|
|
[127] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1
|
|
[128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0
|
|
to:readJoy1::@1
|
|
readJoy1::@1: scope:[readJoy1] from readJoy1 readJoy1::@2
|
|
[129] (byte) readJoy1::joy#2 ← phi( readJoy1/(byte) 0 readJoy1::@2/(byte) readJoy1::joy#1 )
|
|
[129] (byte) readJoy1::i#2 ← phi( readJoy1/(byte) 0 readJoy1::@2/(byte) readJoy1::i#1 )
|
|
[130] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2
|
|
to:readJoy1::@return
|
|
readJoy1::@return: scope:[readJoy1] from readJoy1::@1
|
|
[131] return
|
|
to:@return
|
|
readJoy1::@2: scope:[readJoy1] from readJoy1::@1
|
|
[132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1
|
|
[133] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1
|
|
[134] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2
|
|
[135] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2
|
|
to:readJoy1::@1
|
|
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
(byte) RICOH_2A03::DMC_FREQ
|
|
(byte) RICOH_2A03::DMC_LEN
|
|
(byte) RICOH_2A03::DMC_RAW
|
|
(byte) RICOH_2A03::DMC_START
|
|
(byte) RICOH_2A03::JOY1
|
|
(byte) RICOH_2A03::JOY2
|
|
(byte) RICOH_2A03::NOISE_HI
|
|
(byte) RICOH_2A03::NOISE_LO
|
|
(byte) RICOH_2A03::NOISE_VOL
|
|
(byte) RICOH_2A03::OAMDMA
|
|
(byte) RICOH_2A03::SND_CHN
|
|
(byte) RICOH_2A03::SQ1_HI
|
|
(byte) RICOH_2A03::SQ1_LO
|
|
(byte) RICOH_2A03::SQ1_SWEEP
|
|
(byte) RICOH_2A03::SQ1_VOL
|
|
(byte) RICOH_2A03::SQ2_HI
|
|
(byte) RICOH_2A03::SQ2_LO
|
|
(byte) RICOH_2A03::SQ2_SWEEP
|
|
(byte) RICOH_2A03::SQ2_VOL
|
|
(byte) RICOH_2A03::TRI_HI
|
|
(byte) RICOH_2A03::TRI_LINEAR
|
|
(byte) RICOH_2A03::TRI_LO
|
|
(byte) RICOH_2A03::UNUSED1
|
|
(byte) RICOH_2A03::UNUSED2
|
|
(byte) RICOH_2C02::OAMADDR
|
|
(byte) RICOH_2C02::OAMDATA
|
|
(byte) RICOH_2C02::PPUADDR
|
|
(byte) RICOH_2C02::PPUCTRL
|
|
(byte) RICOH_2C02::PPUDATA
|
|
(byte) RICOH_2C02::PPUMASK
|
|
(byte) RICOH_2C02::PPUSCROLL
|
|
(volatile byte) RICOH_2C02::PPUSTATUS loadstore
|
|
(byte) SpriteData::attributes
|
|
(byte) SpriteData::tile
|
|
(byte) SpriteData::x
|
|
(byte) SpriteData::y
|
|
(void()) main()
|
|
(byte) main::initNES1_i
|
|
(byte) main::initNES1_i#1 151.5
|
|
(byte) main::initNES1_i#2 112.22222222222223
|
|
(byte~) main::initNES1_waitForVBlank1_$0 202.0
|
|
(byte~) main::initNES1_waitForVBlank2_$0 202.0
|
|
(byte) main::x
|
|
(byte) main::x#1 202.0
|
|
(byte) main::x#2 80.8
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
(void*) memcpy::destination
|
|
(byte*) memcpy::dst
|
|
(byte*) memcpy::dst#1 1001.0
|
|
(byte*) memcpy::dst#2 1001.0
|
|
(word) memcpy::num
|
|
(void*) memcpy::return
|
|
(void*) memcpy::source
|
|
(byte*) memcpy::src
|
|
(byte*) memcpy::src#1 2002.0
|
|
(byte*) memcpy::src#2 1001.0
|
|
(byte*) memcpy::src_end
|
|
(void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size)
|
|
(word) ppuDataFill::i
|
|
(word) ppuDataFill::i#1 2002.0
|
|
(word) ppuDataFill::i#2 1001.0
|
|
(nomodify void*) ppuDataFill::ppuData
|
|
(byte~) ppuDataFill::ppuDataPrepare1_$0 202.0
|
|
(byte~) ppuDataFill::ppuDataPrepare1_$1 202.0
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 67.33333333333333
|
|
(byte) ppuDataFill::ppuDataPut1_val
|
|
(word) ppuDataFill::size
|
|
(word) ppuDataFill::size#3 111.22222222222223
|
|
(byte) ppuDataFill::val
|
|
(byte) ppuDataFill::val#4 111.22222222222223
|
|
(void()) ppuDataPutTile((nomodify void*) ppuDataPutTile::ppuData , (byte*) ppuDataPutTile::tile)
|
|
(nomodify void*) ppuDataPutTile::ppuData
|
|
(nomodify byte*) ppuDataPutTile::ppuData#0 101.0
|
|
(nomodify void*) ppuDataPutTile::ppuData#2 233.66666666666669
|
|
(nomodify void*) ppuDataPutTile::ppuData#9 202.0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare1_$0 2002.0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare1_$1 2002.0
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData
|
|
(byte~) ppuDataPutTile::ppuDataPrepare2_$0 2002.0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare2_$1 2002.0
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData
|
|
(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 333.6666666666667
|
|
(byte) ppuDataPutTile::ppuDataPut1_val
|
|
(byte) ppuDataPutTile::ppuDataPut1_val#0 2002.0
|
|
(byte) ppuDataPutTile::ppuDataPut2_val
|
|
(byte) ppuDataPutTile::ppuDataPut2_val#0 2002.0
|
|
(byte) ppuDataPutTile::ppuDataPut3_val
|
|
(byte) ppuDataPutTile::ppuDataPut3_val#0 2002.0
|
|
(byte) ppuDataPutTile::ppuDataPut4_val
|
|
(byte) ppuDataPutTile::ppuDataPut4_val#0 2002.0
|
|
(byte*) ppuDataPutTile::tile
|
|
(byte*) ppuDataPutTile::tile#10 250.25
|
|
(void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size)
|
|
(nomodify void*) ppuDataTransfer::cpuData
|
|
(byte*) ppuDataTransfer::cpuSrc
|
|
(byte*) ppuDataTransfer::cpuSrc#1 1001.0
|
|
(byte*) ppuDataTransfer::cpuSrc#2 750.75
|
|
(word) ppuDataTransfer::i
|
|
(word) ppuDataTransfer::i#1 2002.0
|
|
(word) ppuDataTransfer::i#2 600.5999999999999
|
|
(nomodify void*) ppuDataTransfer::ppuData
|
|
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData
|
|
(byte) ppuDataTransfer::ppuDataPut1_val
|
|
(byte) ppuDataTransfer::ppuDataPut1_val#0 2002.0
|
|
(word) ppuDataTransfer::size
|
|
(byte()) readJoy1()
|
|
(byte~) readJoy1::$1 101.0
|
|
(byte~) readJoy1::$2 202.0
|
|
(byte) readJoy1::i
|
|
(byte) readJoy1::i#1 202.0
|
|
(byte) readJoy1::i#2 60.599999999999994
|
|
(byte) readJoy1::joy
|
|
(byte) readJoy1::joy#1 101.0
|
|
(byte) readJoy1::joy#2 51.0
|
|
(byte) readJoy1::return
|
|
(byte) readJoy1::return#2 4.0
|
|
interrupt(HARDWARE_STACK)(void()) vblank()
|
|
(byte~) vblank::$1 4.0
|
|
(byte~) vblank::$3 4.0
|
|
(byte~) vblank::$5 4.0
|
|
(byte~) vblank::$7 4.0
|
|
(byte) vblank::joy
|
|
(byte) vblank::joy#0 0.5263157894736842
|
|
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer
|
|
|
|
Initial phi equivalence classes
|
|
[ main::initNES1_i#2 main::initNES1_i#1 ]
|
|
[ main::x#2 main::x#1 ]
|
|
[ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ]
|
|
[ ppuDataPutTile::tile#10 ]
|
|
[ memcpy::src#2 memcpy::src#1 ]
|
|
[ memcpy::dst#2 memcpy::dst#1 ]
|
|
[ ppuDataFill::ppuDataPrepare1_ppuData#0 ]
|
|
[ ppuDataFill::size#3 ]
|
|
[ ppuDataFill::val#4 ]
|
|
[ ppuDataFill::i#2 ppuDataFill::i#1 ]
|
|
[ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
|
|
[ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ]
|
|
[ readJoy1::i#2 readJoy1::i#1 ]
|
|
[ readJoy1::joy#2 readJoy1::joy#1 ]
|
|
Added variable main::initNES1_waitForVBlank1_$0 to live range equivalence class [ main::initNES1_waitForVBlank1_$0 ]
|
|
Added variable main::initNES1_waitForVBlank2_$0 to live range equivalence class [ main::initNES1_waitForVBlank2_$0 ]
|
|
Added variable ppuDataPutTile::ppuData#0 to live range equivalence class [ ppuDataPutTile::ppuData#0 ]
|
|
Added variable ppuDataPutTile::ppuDataPrepare1_$0 to live range equivalence class [ ppuDataPutTile::ppuDataPrepare1_$0 ]
|
|
Added variable ppuDataPutTile::ppuDataPrepare1_$1 to live range equivalence class [ ppuDataPutTile::ppuDataPrepare1_$1 ]
|
|
Added variable ppuDataPutTile::ppuDataPut1_val#0 to live range equivalence class [ ppuDataPutTile::ppuDataPut1_val#0 ]
|
|
Added variable ppuDataPutTile::ppuDataPut2_val#0 to live range equivalence class [ ppuDataPutTile::ppuDataPut2_val#0 ]
|
|
Added variable ppuDataPutTile::ppuDataPrepare2_ppuData#0 to live range equivalence class [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ]
|
|
Added variable ppuDataPutTile::ppuDataPrepare2_$0 to live range equivalence class [ ppuDataPutTile::ppuDataPrepare2_$0 ]
|
|
Added variable ppuDataPutTile::ppuDataPrepare2_$1 to live range equivalence class [ ppuDataPutTile::ppuDataPrepare2_$1 ]
|
|
Added variable ppuDataPutTile::ppuDataPut3_val#0 to live range equivalence class [ ppuDataPutTile::ppuDataPut3_val#0 ]
|
|
Added variable ppuDataPutTile::ppuDataPut4_val#0 to live range equivalence class [ ppuDataPutTile::ppuDataPut4_val#0 ]
|
|
Added variable ppuDataFill::ppuDataPrepare1_$0 to live range equivalence class [ ppuDataFill::ppuDataPrepare1_$0 ]
|
|
Added variable ppuDataFill::ppuDataPrepare1_$1 to live range equivalence class [ ppuDataFill::ppuDataPrepare1_$1 ]
|
|
Added variable ppuDataTransfer::ppuDataPut1_val#0 to live range equivalence class [ ppuDataTransfer::ppuDataPut1_val#0 ]
|
|
Added variable readJoy1::return#2 to live range equivalence class [ readJoy1::return#2 ]
|
|
Added variable vblank::joy#0 to live range equivalence class [ vblank::joy#0 ]
|
|
Added variable vblank::$1 to live range equivalence class [ vblank::$1 ]
|
|
Added variable vblank::$3 to live range equivalence class [ vblank::$3 ]
|
|
Added variable vblank::$5 to live range equivalence class [ vblank::$5 ]
|
|
Added variable vblank::$7 to live range equivalence class [ vblank::$7 ]
|
|
Added variable readJoy1::$1 to live range equivalence class [ readJoy1::$1 ]
|
|
Added variable readJoy1::$2 to live range equivalence class [ readJoy1::$2 ]
|
|
Complete equivalence classes
|
|
[ main::initNES1_i#2 main::initNES1_i#1 ]
|
|
[ main::x#2 main::x#1 ]
|
|
[ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ]
|
|
[ ppuDataPutTile::tile#10 ]
|
|
[ memcpy::src#2 memcpy::src#1 ]
|
|
[ memcpy::dst#2 memcpy::dst#1 ]
|
|
[ ppuDataFill::ppuDataPrepare1_ppuData#0 ]
|
|
[ ppuDataFill::size#3 ]
|
|
[ ppuDataFill::val#4 ]
|
|
[ ppuDataFill::i#2 ppuDataFill::i#1 ]
|
|
[ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
|
|
[ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ]
|
|
[ readJoy1::i#2 readJoy1::i#1 ]
|
|
[ readJoy1::joy#2 readJoy1::joy#1 ]
|
|
[ main::initNES1_waitForVBlank1_$0 ]
|
|
[ main::initNES1_waitForVBlank2_$0 ]
|
|
[ ppuDataPutTile::ppuData#0 ]
|
|
[ ppuDataPutTile::ppuDataPrepare1_$0 ]
|
|
[ ppuDataPutTile::ppuDataPrepare1_$1 ]
|
|
[ ppuDataPutTile::ppuDataPut1_val#0 ]
|
|
[ ppuDataPutTile::ppuDataPut2_val#0 ]
|
|
[ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ]
|
|
[ ppuDataPutTile::ppuDataPrepare2_$0 ]
|
|
[ ppuDataPutTile::ppuDataPrepare2_$1 ]
|
|
[ ppuDataPutTile::ppuDataPut3_val#0 ]
|
|
[ ppuDataPutTile::ppuDataPut4_val#0 ]
|
|
[ ppuDataFill::ppuDataPrepare1_$0 ]
|
|
[ ppuDataFill::ppuDataPrepare1_$1 ]
|
|
[ ppuDataTransfer::ppuDataPut1_val#0 ]
|
|
[ readJoy1::return#2 ]
|
|
[ vblank::joy#0 ]
|
|
[ vblank::$1 ]
|
|
[ vblank::$3 ]
|
|
[ vblank::$5 ]
|
|
[ vblank::$7 ]
|
|
[ readJoy1::$1 ]
|
|
[ readJoy1::$2 ]
|
|
Allocated zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ]
|
|
Allocated zp[1]:3 [ main::x#2 main::x#1 ]
|
|
Allocated zp[2]:4 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ]
|
|
Allocated zp[2]:6 [ ppuDataPutTile::tile#10 ]
|
|
Allocated zp[2]:8 [ memcpy::src#2 memcpy::src#1 ]
|
|
Allocated zp[2]:10 [ memcpy::dst#2 memcpy::dst#1 ]
|
|
Allocated zp[2]:12 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ]
|
|
Allocated zp[2]:14 [ ppuDataFill::size#3 ]
|
|
Allocated zp[1]:16 [ ppuDataFill::val#4 ]
|
|
Allocated zp[2]:17 [ ppuDataFill::i#2 ppuDataFill::i#1 ]
|
|
Allocated zp[2]:19 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ]
|
|
Allocated zp[2]:21 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ]
|
|
Allocated zp[1]:23 [ readJoy1::i#2 readJoy1::i#1 ]
|
|
Allocated zp[1]:24 [ readJoy1::joy#2 readJoy1::joy#1 ]
|
|
Allocated zp[1]:25 [ main::initNES1_waitForVBlank1_$0 ]
|
|
Allocated zp[1]:26 [ main::initNES1_waitForVBlank2_$0 ]
|
|
Allocated zp[2]:27 [ ppuDataPutTile::ppuData#0 ]
|
|
Allocated zp[1]:29 [ ppuDataPutTile::ppuDataPrepare1_$0 ]
|
|
Allocated zp[1]:30 [ ppuDataPutTile::ppuDataPrepare1_$1 ]
|
|
Allocated zp[1]:31 [ ppuDataPutTile::ppuDataPut1_val#0 ]
|
|
Allocated zp[1]:32 [ ppuDataPutTile::ppuDataPut2_val#0 ]
|
|
Allocated zp[2]:33 [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ]
|
|
Allocated zp[1]:35 [ ppuDataPutTile::ppuDataPrepare2_$0 ]
|
|
Allocated zp[1]:36 [ ppuDataPutTile::ppuDataPrepare2_$1 ]
|
|
Allocated zp[1]:37 [ ppuDataPutTile::ppuDataPut3_val#0 ]
|
|
Allocated zp[1]:38 [ ppuDataPutTile::ppuDataPut4_val#0 ]
|
|
Allocated zp[1]:39 [ ppuDataFill::ppuDataPrepare1_$0 ]
|
|
Allocated zp[1]:40 [ ppuDataFill::ppuDataPrepare1_$1 ]
|
|
Allocated zp[1]:41 [ ppuDataTransfer::ppuDataPut1_val#0 ]
|
|
Allocated zp[1]:42 [ readJoy1::return#2 ]
|
|
Allocated zp[1]:43 [ vblank::joy#0 ]
|
|
Allocated zp[1]:44 [ vblank::$1 ]
|
|
Allocated zp[1]:45 [ vblank::$3 ]
|
|
Allocated zp[1]:46 [ vblank::$5 ]
|
|
Allocated zp[1]:47 [ vblank::$7 ]
|
|
Allocated zp[1]:48 [ readJoy1::$1 ]
|
|
Allocated zp[1]:49 [ readJoy1::$2 ]
|
|
|
|
INITIAL ASM
|
|
Target platform is nes / MOS6502X
|
|
// File Comments
|
|
// A minimal NES demo
|
|
// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018.
|
|
// Nintendo Entertainment System (NES
|
|
// https://en.wikipedia.org/wiki/Nintendo_Entertainment_System_(Model_NES-101)
|
|
// https://github.com/gregkrsak/first_nes
|
|
// Ricoh 2C02 - NES Picture Processing Unit (PPU)
|
|
// Ricoh RP2C02 (NTSC version) / RP2C07 (PAL version),
|
|
// https://en.wikipedia.org/wiki/Picture_Processing_Unit
|
|
// https://wiki.nesdev.com/w/index.php/PPU_registers
|
|
// http://nesdev.com/2C02%20technical%20reference.TXT
|
|
// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018.
|
|
// Upstart
|
|
// Nintendo Entertainment System (NES) ROM
|
|
// https://sadistech.com/nesromtool/romdoc.html
|
|
// https://forums.nesdev.com/viewtopic.php?f=2&t=9896
|
|
// https://github.com/gregkrsak/first_nes
|
|
.file [name="nes-demo.nes", type="bin", segments="NesRom"]
|
|
.file [name="nes-demo.nes_hdr", type="bin", segments="Header"]
|
|
.file [name="nes-demo.nes_prg", type="bin", segments="ProgramRom"]
|
|
.file [name="nes-demo.nes_chr", type="bin", segments="CharacterRom"]
|
|
.segmentdef Header [ start=$0000, min=$0000, max=$000f, fill ]
|
|
.segmentdef Tiles [ start=$0000, min=$0000, max=$1fff, fill ]
|
|
.segmentdef Code [ start=$c000, min=$c000, max=$fff9 ]
|
|
.segmentdef Data [ startAfter="Code", min=$c000, max=$fff9 ]
|
|
.segmentdef Vectors [ start=$fffa, min=$fffa, max=$ffff ]
|
|
.segmentdef GameRam [start=$200,max=$7ff, virtual]
|
|
.segmentdef ProgramRom [ segments="Code, Data, Vectors" ]
|
|
.segmentdef CharacterRom [ segments="Tiles" ]
|
|
.segmentdef NesRom
|
|
.segment NesRom
|
|
.segmentout [ segments="Header" ]
|
|
.segmentout [ segments="ProgramRom" ]
|
|
.segmentout [ segments="CharacterRom" ]
|
|
.segment Header
|
|
.text @"NES\$1a"
|
|
.byte $01 // 1x 16KB ROM (PRG)
|
|
.byte $01 // 1x 8KB VROM (CHR)
|
|
.byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game)
|
|
// Mirroring nibble 0001 == Vertical mirroring only
|
|
.segment Code
|
|
|
|
// Global Constants & labels
|
|
// Standard Controller Right Button
|
|
.const JOY_RIGHT = 1
|
|
// Standard Controller Left Button
|
|
.const JOY_LEFT = 2
|
|
// Standard Controller Down Button
|
|
.const JOY_DOWN = 4
|
|
// Standard Controller Up Button
|
|
.const JOY_UP = 8
|
|
.const SIZEOF_STRUCT_SPRITEDATA = 4
|
|
.const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUSTATUS = 2
|
|
.const OFFSET_STRUCT_RICOH_2C02_OAMADDR = 3
|
|
.const OFFSET_STRUCT_RICOH_2A03_OAMDMA = $14
|
|
.const OFFSET_STRUCT_RICOH_2A03_JOY1 = $16
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUADDR = 6
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUDATA = 7
|
|
.const OFFSET_STRUCT_SPRITEDATA_X = 3
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUSCROLL = 5
|
|
.const SIZEOF_BYTE = 1
|
|
// $2000-$23bf $03c0 Name table 0
|
|
.label PPU_NAME_TABLE_0 = $2000
|
|
// $23c0-$23ff $0040 Attribute table 0
|
|
.label PPU_ATTRIBUTE_TABLE_0 = $23c0
|
|
// $3000-$3eff $0f00 Mirrors of $2000-$2eff
|
|
// $3f00-$3f1f $0020 Palette RAM indexes
|
|
.label PPU_PALETTE = $3f00
|
|
// PPU Status Register for reading in ASM
|
|
.label PPU_PPUSTATUS = $2002
|
|
// APU Frame Counter
|
|
// generates low-frequency clocks for the channels and an optional 60 Hz interrupt.
|
|
// https://wiki.nesdev.com/w/index.php/APU_Frame_Counter
|
|
// ------+-----+---------------------------------------------------------------
|
|
// $4017 | W | FR_COUNTER Frame Counter Set mode and interrupt
|
|
// ------+-----+---------------------------------------------------------------
|
|
// | 7 | Sequencer mode: 0 selects 4-step sequence, 1 selects 5-step sequence
|
|
// | 6 | Interrupt inhibit flag. If set, the frame interrupt flag is cleared, otherwise it is unaffected.
|
|
// ------+-----+---------------------------------------------------------------
|
|
// Side effects After 3 or 4 CPU clock cycles*, the timer is reset.
|
|
// If the mode flag is set, then both "quarter frame" and "half frame" signals are also generated.
|
|
.label FR_COUNTER = $4017
|
|
// Pointer to the start of RAM memory
|
|
.label MEMORY = 0
|
|
// NES Picture Processing Unit (PPU)
|
|
.label PPU = $2000
|
|
// NES CPU and audion processing unit (APU)
|
|
.label APU = $4000
|
|
// @begin
|
|
__bbegin:
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
__b1_from___bbegin:
|
|
jmp __b1
|
|
// @1
|
|
__b1:
|
|
// [2] call main
|
|
// [4] phi from @1 to main [phi:@1->main]
|
|
main_from___b1:
|
|
jsr main
|
|
// [3] phi from @1 to @end [phi:@1->@end]
|
|
__bend_from___b1:
|
|
jmp __bend
|
|
// @end
|
|
__bend:
|
|
.segment Code
|
|
// main
|
|
// RESET Called when the NES is reset, including when it is turned on.
|
|
main: {
|
|
.label initNES1_waitForVBlank1___0 = $19
|
|
.label initNES1_waitForVBlank2___0 = $1a
|
|
.label initNES1_i = 2
|
|
.label x = 3
|
|
jmp initNES1
|
|
// main::initNES1
|
|
initNES1:
|
|
// asm { cld ldx#$ff txs }
|
|
cld
|
|
ldx #$ff
|
|
txs
|
|
jmp initNES1_disableVideoOutput1
|
|
// main::initNES1_disableVideoOutput1
|
|
initNES1_disableVideoOutput1:
|
|
// [6] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU
|
|
// [7] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
jmp initNES1_disableAudioOutput1
|
|
// main::initNES1_disableAudioOutput1
|
|
initNES1_disableAudioOutput1:
|
|
// [8] *((const nomodify byte*) FR_COUNTER) ← (byte) $40 -- _deref_pbuc1=vbuc2
|
|
lda #$40
|
|
sta FR_COUNTER
|
|
// [9] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ) ← (byte) $40 -- _deref_pbuc1=vbuc2
|
|
lda #$40
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_DMC_FREQ
|
|
jmp initNES1_clearVBlankFlag1
|
|
// main::initNES1_clearVBlankFlag1
|
|
initNES1_clearVBlankFlag1:
|
|
// asm { ldaPPU_PPUSTATUS }
|
|
lda PPU_PPUSTATUS
|
|
// [11] phi from main::initNES1_clearVBlankFlag1 to main::initNES1_waitForVBlank1 [phi:main::initNES1_clearVBlankFlag1->main::initNES1_waitForVBlank1]
|
|
initNES1_waitForVBlank1_from_initNES1_clearVBlankFlag1:
|
|
jmp initNES1_waitForVBlank1
|
|
// main::initNES1_waitForVBlank1
|
|
initNES1_waitForVBlank1:
|
|
jmp initNES1_waitForVBlank1___b1
|
|
// main::initNES1_waitForVBlank1_@1
|
|
initNES1_waitForVBlank1___b1:
|
|
// [12] (byte~) main::initNES1_waitForVBlank1_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 -- vbuz1=_deref_pbuc1_band_vbuc2
|
|
lda #$80
|
|
and PPU+OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
sta.z initNES1_waitForVBlank1___0
|
|
// [13] if((byte) 0==(byte~) main::initNES1_waitForVBlank1_$0) goto main::initNES1_waitForVBlank1_@1 -- vbuc1_eq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z initNES1_waitForVBlank1___0
|
|
beq initNES1_waitForVBlank1___b1
|
|
// [14] phi from main::initNES1_waitForVBlank1_@1 to main::initNES1_@1 [phi:main::initNES1_waitForVBlank1_@1->main::initNES1_@1]
|
|
initNES1___b1_from_initNES1_waitForVBlank1___b1:
|
|
// [14] phi (byte) main::initNES1_i#2 = (byte) 0 [phi:main::initNES1_waitForVBlank1_@1->main::initNES1_@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z initNES1_i
|
|
jmp initNES1___b1
|
|
// [14] phi from main::initNES1_@1 to main::initNES1_@1 [phi:main::initNES1_@1->main::initNES1_@1]
|
|
initNES1___b1_from_initNES1___b1:
|
|
// [14] phi (byte) main::initNES1_i#2 = (byte) main::initNES1_i#1 [phi:main::initNES1_@1->main::initNES1_@1#0] -- register_copy
|
|
jmp initNES1___b1
|
|
// main::initNES1_@1
|
|
initNES1___b1:
|
|
// [15] *((const nomodify byte*) MEMORY + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
|
|
lda #0
|
|
ldy.z initNES1_i
|
|
sta MEMORY,y
|
|
// [16] *((const nomodify byte*) MEMORY+(word) $100 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
|
|
lda #0
|
|
ldy.z initNES1_i
|
|
sta MEMORY+$100,y
|
|
// [17] *((const nomodify byte*) MEMORY+(word) $200 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
|
|
lda #0
|
|
ldy.z initNES1_i
|
|
sta MEMORY+$200,y
|
|
// [18] *((const nomodify byte*) MEMORY+(word) $300 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
|
|
lda #0
|
|
ldy.z initNES1_i
|
|
sta MEMORY+$300,y
|
|
// [19] *((const nomodify byte*) MEMORY+(word) $400 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
|
|
lda #0
|
|
ldy.z initNES1_i
|
|
sta MEMORY+$400,y
|
|
// [20] *((const nomodify byte*) MEMORY+(word) $500 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
|
|
lda #0
|
|
ldy.z initNES1_i
|
|
sta MEMORY+$500,y
|
|
// [21] *((const nomodify byte*) MEMORY+(word) $600 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
|
|
lda #0
|
|
ldy.z initNES1_i
|
|
sta MEMORY+$600,y
|
|
// [22] *((const nomodify byte*) MEMORY+(word) $700 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
|
|
lda #0
|
|
ldy.z initNES1_i
|
|
sta MEMORY+$700,y
|
|
// [23] (byte) main::initNES1_i#1 ← ++ (byte) main::initNES1_i#2 -- vbuz1=_inc_vbuz1
|
|
inc.z initNES1_i
|
|
// [24] if((byte) 0!=(byte) main::initNES1_i#1) goto main::initNES1_@1 -- vbuc1_neq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z initNES1_i
|
|
bne initNES1___b1_from_initNES1___b1
|
|
// [25] phi from main::initNES1_@1 to main::initNES1_waitForVBlank2 [phi:main::initNES1_@1->main::initNES1_waitForVBlank2]
|
|
initNES1_waitForVBlank2_from_initNES1___b1:
|
|
jmp initNES1_waitForVBlank2
|
|
// main::initNES1_waitForVBlank2
|
|
initNES1_waitForVBlank2:
|
|
jmp initNES1_waitForVBlank2___b1
|
|
// main::initNES1_waitForVBlank2_@1
|
|
initNES1_waitForVBlank2___b1:
|
|
// [26] (byte~) main::initNES1_waitForVBlank2_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 -- vbuz1=_deref_pbuc1_band_vbuc2
|
|
lda #$80
|
|
and PPU+OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
sta.z initNES1_waitForVBlank2___0
|
|
// [27] if((byte) 0==(byte~) main::initNES1_waitForVBlank2_$0) goto main::initNES1_waitForVBlank2_@1 -- vbuc1_eq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z initNES1_waitForVBlank2___0
|
|
beq initNES1_waitForVBlank2___b1
|
|
jmp initNES1___b7
|
|
// main::initNES1_@7
|
|
initNES1___b7:
|
|
// asm { ldaPPU_PPUSTATUS }
|
|
lda PPU_PPUSTATUS
|
|
// [29] phi from main::initNES1_@7 to main::@5 [phi:main::initNES1_@7->main::@5]
|
|
__b5_from_initNES1___b7:
|
|
jmp __b5
|
|
// main::@5
|
|
__b5:
|
|
// [30] call ppuDataTransfer
|
|
// Transfer the palette
|
|
// [84] phi from main::@5 to ppuDataTransfer [phi:main::@5->ppuDataTransfer]
|
|
ppuDataTransfer_from___b5:
|
|
jsr ppuDataTransfer
|
|
// [31] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
|
|
__b6_from___b5:
|
|
jmp __b6
|
|
// main::@6
|
|
__b6:
|
|
// [32] call ppuDataFill
|
|
// Clear the name table
|
|
// [74] phi from main::@6 to ppuDataFill [phi:main::@6->ppuDataFill]
|
|
ppuDataFill_from___b6:
|
|
// [74] phi (byte) ppuDataFill::val#4 = (byte) $fc [phi:main::@6->ppuDataFill#0] -- vbuz1=vbuc1
|
|
lda #$fc
|
|
sta.z ppuDataFill.val
|
|
// [74] phi (word) ppuDataFill::size#3 = (word) $3c0 [phi:main::@6->ppuDataFill#1] -- vwuz1=vwuc1
|
|
lda #<$3c0
|
|
sta.z ppuDataFill.size
|
|
lda #>$3c0
|
|
sta.z ppuDataFill.size+1
|
|
// [74] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1
|
|
lda #<PPU_NAME_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData
|
|
lda #>PPU_NAME_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData+1
|
|
jsr ppuDataFill
|
|
// [33] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
|
|
__b7_from___b6:
|
|
jmp __b7
|
|
// main::@7
|
|
__b7:
|
|
// [34] call ppuDataFill
|
|
// Fill the PPU attribute table
|
|
// [74] phi from main::@7 to ppuDataFill [phi:main::@7->ppuDataFill]
|
|
ppuDataFill_from___b7:
|
|
// [74] phi (byte) ppuDataFill::val#4 = (byte) 0 [phi:main::@7->ppuDataFill#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z ppuDataFill.val
|
|
// [74] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@7->ppuDataFill#1] -- vwuz1=vbuc1
|
|
lda #<$40
|
|
sta.z ppuDataFill.size
|
|
lda #>$40
|
|
sta.z ppuDataFill.size+1
|
|
// [74] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@7->ppuDataFill#2] -- pvoz1=pvoc1
|
|
lda #<PPU_ATTRIBUTE_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData
|
|
lda #>PPU_ATTRIBUTE_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData+1
|
|
jsr ppuDataFill
|
|
// [35] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
|
|
__b1_from___b7:
|
|
// [35] phi (byte) main::x#2 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z x
|
|
jmp __b1
|
|
// Show floor
|
|
// main::@1
|
|
__b1:
|
|
// [36] if((byte) main::x#2<(byte) $20) goto main::@2 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z x
|
|
cmp #$20
|
|
bcc __b2
|
|
// [37] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
|
|
__b3_from___b1:
|
|
jmp __b3
|
|
// main::@3
|
|
__b3:
|
|
// [38] call ppuDataPutTile
|
|
// Show flag
|
|
// [48] phi from main::@3 to ppuDataPutTile [phi:main::@3->ppuDataPutTile]
|
|
ppuDataPutTile_from___b3:
|
|
// [48] phi (byte*) ppuDataPutTile::tile#10 = (const byte*) FLAG [phi:main::@3->ppuDataPutTile#0] -- pbuz1=pbuc1
|
|
lda #<FLAG
|
|
sta.z ppuDataPutTile.tile
|
|
lda #>FLAG
|
|
sta.z ppuDataPutTile.tile+1
|
|
// [48] phi (nomodify void*) ppuDataPutTile::ppuData#2 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $12*(number) $20+(byte) $1c [phi:main::@3->ppuDataPutTile#1] -- pvoz1=pvoc1
|
|
lda #<PPU_NAME_TABLE_0+$12*$20+$1c
|
|
sta.z ppuDataPutTile.ppuData_1
|
|
lda #>PPU_NAME_TABLE_0+$12*$20+$1c
|
|
sta.z ppuDataPutTile.ppuData_1+1
|
|
jsr ppuDataPutTile
|
|
// [39] phi from main::@3 to main::@9 [phi:main::@3->main::@9]
|
|
__b9_from___b3:
|
|
jmp __b9
|
|
// main::@9
|
|
__b9:
|
|
// [40] call memcpy
|
|
// Initialize Sprite Buffer with the SPRITE data
|
|
// [67] phi from main::@9 to memcpy [phi:main::@9->memcpy]
|
|
memcpy_from___b9:
|
|
jsr memcpy
|
|
jmp enableVideoOutput1
|
|
// main::enableVideoOutput1
|
|
enableVideoOutput1:
|
|
// [41] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) $80 -- _deref_pbuc1=vbuc2
|
|
lda #$80
|
|
sta PPU
|
|
// [42] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) $1e -- _deref_pbuc1=vbuc2
|
|
lda #$1e
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
// [43] phi from main::@4 main::enableVideoOutput1 to main::@4 [phi:main::@4/main::enableVideoOutput1->main::@4]
|
|
__b4_from___b4:
|
|
__b4_from_enableVideoOutput1:
|
|
jmp __b4
|
|
// Infinite loop
|
|
// main::@4
|
|
__b4:
|
|
jmp __b4_from___b4
|
|
// main::@2
|
|
__b2:
|
|
// [44] (nomodify byte*) ppuDataPutTile::ppuData#0 ← (const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $14*(number) $20 + (byte) main::x#2 -- pbuz1=pbuc1_plus_vbuz2
|
|
lda.z x
|
|
clc
|
|
adc #<PPU_NAME_TABLE_0+$14*$20
|
|
sta.z ppuDataPutTile.ppuData
|
|
lda #>PPU_NAME_TABLE_0+$14*$20
|
|
adc #0
|
|
sta.z ppuDataPutTile.ppuData+1
|
|
// [45] (nomodify void*) ppuDataPutTile::ppuData#9 ← (void*)(nomodify byte*) ppuDataPutTile::ppuData#0 -- pvoz1=pvoz2
|
|
lda.z ppuDataPutTile.ppuData
|
|
sta.z ppuDataPutTile.ppuData_1
|
|
lda.z ppuDataPutTile.ppuData+1
|
|
sta.z ppuDataPutTile.ppuData_1+1
|
|
// [46] call ppuDataPutTile
|
|
// [48] phi from main::@2 to ppuDataPutTile [phi:main::@2->ppuDataPutTile]
|
|
ppuDataPutTile_from___b2:
|
|
// [48] phi (byte*) ppuDataPutTile::tile#10 = (const byte*) FLOOR [phi:main::@2->ppuDataPutTile#0] -- pbuz1=pbuc1
|
|
lda #<FLOOR
|
|
sta.z ppuDataPutTile.tile
|
|
lda #>FLOOR
|
|
sta.z ppuDataPutTile.tile+1
|
|
// [48] phi (nomodify void*) ppuDataPutTile::ppuData#2 = (nomodify void*) ppuDataPutTile::ppuData#9 [phi:main::@2->ppuDataPutTile#1] -- register_copy
|
|
jsr ppuDataPutTile
|
|
jmp __b8
|
|
// main::@8
|
|
__b8:
|
|
// [47] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 -- vbuz1=vbuz1_plus_2
|
|
lda.z x
|
|
clc
|
|
adc #2
|
|
sta.z x
|
|
// [35] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
|
|
__b1_from___b8:
|
|
// [35] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@8->main::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataPutTile
|
|
// Transfer a 2x2 tile into the PPU memory
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - tile : The tile to transfer
|
|
// ppuDataPutTile(byte* zp($1b) ppuData, byte* zp(6) tile)
|
|
ppuDataPutTile: {
|
|
.label ppuDataPrepare1___0 = $1d
|
|
.label ppuDataPrepare1___1 = $1e
|
|
.label ppuDataPrepare2___0 = $23
|
|
.label ppuDataPrepare2___1 = $24
|
|
.label ppuDataPut1_val = $1f
|
|
.label ppuDataPut2_val = $20
|
|
.label ppuDataPrepare2_ppuData = $21
|
|
.label ppuDataPut3_val = $25
|
|
.label ppuDataPut4_val = $26
|
|
.label ppuData = $1b
|
|
.label ppuData_1 = 4
|
|
.label tile = 6
|
|
jmp ppuDataPrepare1
|
|
// ppuDataPutTile::ppuDataPrepare1
|
|
ppuDataPrepare1:
|
|
// [49] (byte~) ppuDataPutTile::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataPutTile::ppuData#2 -- vbuz1=_hi_pvoz2
|
|
lda.z ppuData_1+1
|
|
sta.z ppuDataPrepare1___0
|
|
// [50] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPrepare1___0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [51] (byte~) ppuDataPutTile::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataPutTile::ppuData#2 -- vbuz1=_lo_pvoz2
|
|
lda.z ppuData_1
|
|
sta.z ppuDataPrepare1___1
|
|
// [52] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPrepare1___1
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
jmp __b1
|
|
// ppuDataPutTile::@1
|
|
__b1:
|
|
// [53] (byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#10) -- vbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (tile),y
|
|
sta.z ppuDataPut1_val
|
|
jmp ppuDataPut1
|
|
// ppuDataPutTile::ppuDataPut1
|
|
ppuDataPut1:
|
|
// [54] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut1_val#0 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPut1_val
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b2
|
|
// ppuDataPutTile::@2
|
|
__b2:
|
|
// [55] (byte) ppuDataPutTile::ppuDataPut2_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 1) -- vbuz1=pbuz2_derefidx_vbuc1
|
|
ldy #1
|
|
lda (tile),y
|
|
sta.z ppuDataPut2_val
|
|
jmp ppuDataPut2
|
|
// ppuDataPutTile::ppuDataPut2
|
|
ppuDataPut2:
|
|
// [56] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut2_val#0 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPut2_val
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b3
|
|
// ppuDataPutTile::@3
|
|
__b3:
|
|
// [57] (nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ← (byte*)(nomodify void*) ppuDataPutTile::ppuData#2 + (byte) $20 -- pbuz1=pbuz2_plus_vbuc1
|
|
lda #$20
|
|
clc
|
|
adc.z ppuData_1
|
|
sta.z ppuDataPrepare2_ppuData
|
|
lda #0
|
|
adc.z ppuData_1+1
|
|
sta.z ppuDataPrepare2_ppuData+1
|
|
jmp ppuDataPrepare2
|
|
// ppuDataPutTile::ppuDataPrepare2
|
|
ppuDataPrepare2:
|
|
// [58] (byte~) ppuDataPutTile::ppuDataPrepare2_$0 ← > (void*)(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 -- vbuz1=_hi_pvoz2
|
|
lda.z ppuDataPrepare2_ppuData+1
|
|
sta.z ppuDataPrepare2___0
|
|
// [59] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$0 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPrepare2___0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [60] (byte~) ppuDataPutTile::ppuDataPrepare2_$1 ← < (void*)(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 -- vbuz1=_lo_pvoz2
|
|
lda.z ppuDataPrepare2_ppuData
|
|
sta.z ppuDataPrepare2___1
|
|
// [61] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$1 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPrepare2___1
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
jmp __b4
|
|
// ppuDataPutTile::@4
|
|
__b4:
|
|
// [62] (byte) ppuDataPutTile::ppuDataPut3_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 2) -- vbuz1=pbuz2_derefidx_vbuc1
|
|
ldy #2
|
|
lda (tile),y
|
|
sta.z ppuDataPut3_val
|
|
jmp ppuDataPut3
|
|
// ppuDataPutTile::ppuDataPut3
|
|
ppuDataPut3:
|
|
// [63] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut3_val#0 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPut3_val
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b5
|
|
// ppuDataPutTile::@5
|
|
__b5:
|
|
// [64] (byte) ppuDataPutTile::ppuDataPut4_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 3) -- vbuz1=pbuz2_derefidx_vbuc1
|
|
ldy #3
|
|
lda (tile),y
|
|
sta.z ppuDataPut4_val
|
|
jmp ppuDataPut4
|
|
// ppuDataPutTile::ppuDataPut4
|
|
ppuDataPut4:
|
|
// [65] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut4_val#0 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPut4_val
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __breturn
|
|
// ppuDataPutTile::@return
|
|
__breturn:
|
|
// [66] return
|
|
rts
|
|
}
|
|
// memcpy
|
|
// Copy block of memory (forwards)
|
|
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
|
|
memcpy: {
|
|
.const num = 8*SIZEOF_STRUCT_SPRITEDATA
|
|
.label destination = SPRITE_BUFFER
|
|
.label source = SPRITES
|
|
.label src_end = source+num
|
|
.label dst = $a
|
|
.label src = 8
|
|
// [68] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1]
|
|
__b1_from_memcpy:
|
|
// [68] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1
|
|
lda #<destination
|
|
sta.z dst
|
|
lda #>destination
|
|
sta.z dst+1
|
|
// [68] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1
|
|
lda #<source
|
|
sta.z src
|
|
lda #>source
|
|
sta.z src+1
|
|
jmp __b1
|
|
// memcpy::@1
|
|
__b1:
|
|
// [69] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1
|
|
lda.z src+1
|
|
cmp #>src_end
|
|
bne __b2
|
|
lda.z src
|
|
cmp #<src_end
|
|
bne __b2
|
|
jmp __breturn
|
|
// memcpy::@return
|
|
__breturn:
|
|
// [70] return
|
|
rts
|
|
// memcpy::@2
|
|
__b2:
|
|
// [71] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (src),y
|
|
ldy #0
|
|
sta (dst),y
|
|
// [72] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
// [73] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1
|
|
inc.z src
|
|
bne !+
|
|
inc.z src+1
|
|
!:
|
|
// [68] phi from memcpy::@2 to memcpy::@1 [phi:memcpy::@2->memcpy::@1]
|
|
__b1_from___b2:
|
|
// [68] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy
|
|
// [68] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataFill
|
|
// Fill a number of bytes in the PPU memory
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - size : The number of bytes to transfer
|
|
// ppuDataFill(byte zp($10) val, word zp($e) size)
|
|
ppuDataFill: {
|
|
.label ppuDataPrepare1___0 = $27
|
|
.label ppuDataPrepare1___1 = $28
|
|
.label ppuDataPrepare1_ppuData = $c
|
|
.label i = $11
|
|
.label size = $e
|
|
.label val = $10
|
|
jmp ppuDataPrepare1
|
|
// ppuDataFill::ppuDataPrepare1
|
|
ppuDataPrepare1:
|
|
// [75] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2
|
|
lda.z ppuDataPrepare1_ppuData+1
|
|
sta.z ppuDataPrepare1___0
|
|
// [76] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPrepare1___0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [77] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2
|
|
lda.z ppuDataPrepare1_ppuData
|
|
sta.z ppuDataPrepare1___1
|
|
// [78] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPrepare1___1
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [79] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1]
|
|
__b1_from_ppuDataPrepare1:
|
|
// [79] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z i
|
|
lda #>0
|
|
sta.z i+1
|
|
jmp __b1
|
|
// Transfer to PPU
|
|
// ppuDataFill::@1
|
|
__b1:
|
|
// [80] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1
|
|
lda.z i+1
|
|
cmp.z size+1
|
|
bcc ppuDataPut1
|
|
bne !+
|
|
lda.z i
|
|
cmp.z size
|
|
bcc ppuDataPut1
|
|
!:
|
|
jmp __breturn
|
|
// ppuDataFill::@return
|
|
__breturn:
|
|
// [81] return
|
|
rts
|
|
// ppuDataFill::ppuDataPut1
|
|
ppuDataPut1:
|
|
// [82] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataFill::val#4 -- _deref_pbuc1=vbuz1
|
|
lda.z val
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b2
|
|
// ppuDataFill::@2
|
|
__b2:
|
|
// [83] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1
|
|
inc.z i
|
|
bne !+
|
|
inc.z i+1
|
|
!:
|
|
// [79] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1]
|
|
__b1_from___b2:
|
|
// [79] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataTransfer
|
|
// Transfer a number of bytes from the CPU memory to the PPU memory
|
|
// - cpuData : Pointer to the CPU memory (RAM of ROM)
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - size : The number of bytes to transfer
|
|
ppuDataTransfer: {
|
|
.const size = $20*SIZEOF_BYTE
|
|
.label ppuData = PPU_PALETTE
|
|
.label cpuData = PALETTE
|
|
.label ppuDataPut1_val = $29
|
|
// Transfer to PPU
|
|
.label cpuSrc = $15
|
|
.label i = $13
|
|
jmp ppuDataPrepare1
|
|
// ppuDataTransfer::ppuDataPrepare1
|
|
ppuDataPrepare1:
|
|
// [85] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← >(const nomodify void*) ppuDataTransfer::ppuData#0 -- _deref_pbuc1=vbuc2
|
|
lda #>ppuData
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [86] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [87] phi from ppuDataTransfer::ppuDataPrepare1 to ppuDataTransfer::@1 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1]
|
|
__b1_from_ppuDataPrepare1:
|
|
// [87] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*)(const nomodify void*) ppuDataTransfer::cpuData#0 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1#0] -- pbuz1=pbuc1
|
|
lda #<cpuData
|
|
sta.z cpuSrc
|
|
lda #>cpuData
|
|
sta.z cpuSrc+1
|
|
// [87] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z i
|
|
lda #>0
|
|
sta.z i+1
|
|
jmp __b1
|
|
// ppuDataTransfer::@1
|
|
__b1:
|
|
// [88] if((word) ppuDataTransfer::i#2<(const word) ppuDataTransfer::size#0) goto ppuDataTransfer::@2 -- vwuz1_lt_vwuc1_then_la1
|
|
lda.z i+1
|
|
cmp #>size
|
|
bcc __b2
|
|
bne !+
|
|
lda.z i
|
|
cmp #<size
|
|
bcc __b2
|
|
!:
|
|
jmp __breturn
|
|
// ppuDataTransfer::@return
|
|
__breturn:
|
|
// [89] return
|
|
rts
|
|
// ppuDataTransfer::@2
|
|
__b2:
|
|
// [90] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (cpuSrc),y
|
|
sta.z ppuDataPut1_val
|
|
jmp ppuDataPut1
|
|
// ppuDataTransfer::ppuDataPut1
|
|
ppuDataPut1:
|
|
// [91] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuz1
|
|
lda.z ppuDataPut1_val
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b3
|
|
// ppuDataTransfer::@3
|
|
__b3:
|
|
// [92] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1
|
|
inc.z cpuSrc
|
|
bne !+
|
|
inc.z cpuSrc+1
|
|
!:
|
|
// [93] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1
|
|
inc.z i
|
|
bne !+
|
|
inc.z i+1
|
|
!:
|
|
// [87] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1]
|
|
__b1_from___b3:
|
|
// [87] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy
|
|
// [87] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// vblank
|
|
// NMI Called when the PPU refreshes the screen (also known as the V-Blank period)
|
|
vblank: {
|
|
.label __1 = $2c
|
|
.label __3 = $2d
|
|
.label __5 = $2e
|
|
.label __7 = $2f
|
|
.label joy = $2b
|
|
// entry interrupt(HARDWARE_STACK)
|
|
pha
|
|
txa
|
|
pha
|
|
tya
|
|
pha
|
|
// [95] call readJoy1
|
|
jsr readJoy1
|
|
// [96] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 -- vbuz1=vbuz2
|
|
lda.z readJoy1.joy
|
|
sta.z readJoy1.return
|
|
jmp __b9
|
|
// vblank::@9
|
|
__b9:
|
|
// [97] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuz1=vbuz2
|
|
lda.z readJoy1.return
|
|
sta.z joy
|
|
// [98] (byte~) vblank::$1 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN -- vbuz1=vbuz2_band_vbuc1
|
|
lda #JOY_DOWN
|
|
and.z joy
|
|
sta.z __1
|
|
// [99] if((byte) 0==(byte~) vblank::$1) goto vblank::@1 -- vbuc1_eq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z __1
|
|
beq __b1
|
|
jmp __b4
|
|
// vblank::@4
|
|
__b4:
|
|
// [100] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER
|
|
// [101] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// [102] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// [103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA
|
|
jmp __b1
|
|
// vblank::@1
|
|
__b1:
|
|
// [104] (byte~) vblank::$3 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP -- vbuz1=vbuz2_band_vbuc1
|
|
lda #JOY_UP
|
|
and.z joy
|
|
sta.z __3
|
|
// [105] if((byte) 0==(byte~) vblank::$3) goto vblank::@2 -- vbuc1_eq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z __3
|
|
beq __b2
|
|
jmp __b5
|
|
// vblank::@5
|
|
__b5:
|
|
// [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER
|
|
// [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// [108] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA
|
|
jmp __b2
|
|
// vblank::@2
|
|
__b2:
|
|
// [110] (byte~) vblank::$5 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT -- vbuz1=vbuz2_band_vbuc1
|
|
lda #JOY_LEFT
|
|
and.z joy
|
|
sta.z __5
|
|
// [111] if((byte) 0==(byte~) vblank::$5) goto vblank::@3 -- vbuc1_eq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z __5
|
|
beq __b3
|
|
jmp __b6
|
|
// vblank::@6
|
|
__b6:
|
|
// [112] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X
|
|
// [113] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// [115] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA
|
|
jmp __b3
|
|
// vblank::@3
|
|
__b3:
|
|
// [116] (byte~) vblank::$7 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT -- vbuz1=vbuz2_band_vbuc1
|
|
lda #JOY_RIGHT
|
|
and.z joy
|
|
sta.z __7
|
|
// [117] if((byte) 0==(byte~) vblank::$7) goto vblank::ppuSpriteBufferDmaTransfer1 -- vbuc1_eq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z __7
|
|
beq ppuSpriteBufferDmaTransfer1
|
|
jmp __b7
|
|
// vblank::@7
|
|
__b7:
|
|
// [118] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X
|
|
// [119] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// [120] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// [121] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA
|
|
jmp ppuSpriteBufferDmaTransfer1
|
|
// vblank::ppuSpriteBufferDmaTransfer1
|
|
ppuSpriteBufferDmaTransfer1:
|
|
// [122] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_OAMADDR
|
|
// [123] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER -- _deref_pbuc1=vbuc2
|
|
lda #>SPRITE_BUFFER
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_OAMDMA
|
|
jmp __b8
|
|
// vblank::@8
|
|
__b8:
|
|
// [124] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
// Set scroll
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
// [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 -- _deref_pbuc1=vbuc2
|
|
lda #-8
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
jmp __breturn
|
|
// vblank::@return
|
|
__breturn:
|
|
// [126] return - exit interrupt(HARDWARE_STACK)
|
|
pla
|
|
tay
|
|
pla
|
|
tax
|
|
pla
|
|
rti
|
|
}
|
|
// readJoy1
|
|
// Read Standard Controller #1
|
|
// Returns a byte representing the pushed buttons
|
|
// - bit 0: right
|
|
// - bit 1: left
|
|
// - bit 2: down
|
|
// - bit 3: up
|
|
// - bit 4: start
|
|
// - bit 5: select
|
|
// - bit 6: B
|
|
// - bit 7: A
|
|
readJoy1: {
|
|
.label __1 = $30
|
|
.label __2 = $31
|
|
.label joy = $18
|
|
.label i = $17
|
|
.label return = $2a
|
|
// [127] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 -- _deref_pbuc1=vbuc2
|
|
// Latch the controller buttons
|
|
lda #1
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
// [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
// [129] phi from readJoy1 to readJoy1::@1 [phi:readJoy1->readJoy1::@1]
|
|
__b1_from_readJoy1:
|
|
// [129] phi (byte) readJoy1::joy#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z joy
|
|
// [129] phi (byte) readJoy1::i#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#1] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z i
|
|
jmp __b1
|
|
// readJoy1::@1
|
|
__b1:
|
|
// [130] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z i
|
|
cmp #8
|
|
bcc __b2
|
|
jmp __breturn
|
|
// readJoy1::@return
|
|
__breturn:
|
|
// [131] return
|
|
rts
|
|
// readJoy1::@2
|
|
__b2:
|
|
// [132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda.z joy
|
|
asl
|
|
sta.z __1
|
|
// [133] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 -- vbuz1=_deref_pbuc1_band_vbuc2
|
|
lda #1
|
|
and APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
sta.z __2
|
|
// [134] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 -- vbuz1=vbuz2_bor_vbuz3
|
|
lda.z __1
|
|
ora.z __2
|
|
sta.z joy
|
|
// [135] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuz1=_inc_vbuz1
|
|
inc.z i
|
|
// [129] phi from readJoy1::@2 to readJoy1::@1 [phi:readJoy1::@2->readJoy1::@1]
|
|
__b1_from___b2:
|
|
// [129] phi (byte) readJoy1::joy#2 = (byte) readJoy1::joy#1 [phi:readJoy1::@2->readJoy1::@1#0] -- register_copy
|
|
// [129] phi (byte) readJoy1::i#2 = (byte) readJoy1::i#1 [phi:readJoy1::@2->readJoy1::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// File Data
|
|
.segment Data
|
|
// Flag tile
|
|
FLAG: .byte $54, $55, $56, $57
|
|
// Floor tile
|
|
FLOOR: .byte $85, $85, $86, $86
|
|
// Sprite Data
|
|
SPRITES: .byte $96, $36, 2, $c, $96, $37, 2, $14, $9e, $38, 2, $c, $9e, $39, 2, $14, $96, $70, 0, $48, $96, $71, 0, $50, $9e, $72, 1, $48, $9e, $73, 1, $50
|
|
// Color Palette
|
|
PALETTE: .byte $11, $2d, 8, $18, $11, 6, $15, $36, $11, $39, $4a, $5b, $f, $3d, $4e, $5f, $11, $f, $30, 8, $11, $f, $18, 8, $11, $30, $37, $1a, $f, $f, $f, $f
|
|
.segment Tiles
|
|
TILES:
|
|
.import binary "smb1_chr.bin"
|
|
|
|
.segment GameRam
|
|
.align $100
|
|
SPRITE_BUFFER: .fill 4*$40, 0
|
|
.segment Vectors
|
|
VECTORS: .word vblank, main, 0
|
|
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
|
Statement asm { cld ldx#$ff txs } always clobbers reg byte x
|
|
Statement [6] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) 0 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [7] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) 0 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [8] *((const nomodify byte*) FR_COUNTER) ← (byte) $40 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [9] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ) ← (byte) $40 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement asm { ldaPPU_PPUSTATUS } always clobbers reg byte a
|
|
Statement [12] (byte~) main::initNES1_waitForVBlank1_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 [ main::initNES1_waitForVBlank1_$0 ] ( [ main::initNES1_waitForVBlank1_$0 ] { } main:2 [ main::initNES1_waitForVBlank1_$0 ] { } ) always clobbers reg byte a
|
|
Statement [15] *((const nomodify byte*) MEMORY + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ]
|
|
Statement [16] *((const nomodify byte*) MEMORY+(word) $100 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [17] *((const nomodify byte*) MEMORY+(word) $200 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [18] *((const nomodify byte*) MEMORY+(word) $300 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [19] *((const nomodify byte*) MEMORY+(word) $400 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [20] *((const nomodify byte*) MEMORY+(word) $500 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [21] *((const nomodify byte*) MEMORY+(word) $600 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [22] *((const nomodify byte*) MEMORY+(word) $700 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [26] (byte~) main::initNES1_waitForVBlank2_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 [ main::initNES1_waitForVBlank2_$0 ] ( [ main::initNES1_waitForVBlank2_$0 ] { } main:2 [ main::initNES1_waitForVBlank2_$0 ] { } ) always clobbers reg byte a
|
|
Statement asm { ldaPPU_PPUSTATUS } always clobbers reg byte a
|
|
Statement [41] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) $80 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [42] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) $1e [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [44] (nomodify byte*) ppuDataPutTile::ppuData#0 ← (const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $14*(number) $20 + (byte) main::x#2 [ main::x#2 ppuDataPutTile::ppuData#0 ] ( [ main::x#2 ppuDataPutTile::ppuData#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2 [ main::x#2 ppuDataPutTile::ppuData#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::x#2 main::x#1 ]
|
|
Statement [45] (nomodify void*) ppuDataPutTile::ppuData#9 ← (void*)(nomodify byte*) ppuDataPutTile::ppuData#0 [ main::x#2 ppuDataPutTile::ppuData#9 ] ( [ main::x#2 ppuDataPutTile::ppuData#9 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2 [ main::x#2 ppuDataPutTile::ppuData#9 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a
|
|
Statement [53] (byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#10) [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a reg byte y
|
|
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::x#2 main::x#1 ]
|
|
Statement [55] (byte) ppuDataPutTile::ppuDataPut2_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 1) [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a reg byte y
|
|
Statement [57] (nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ← (byte*)(nomodify void*) ppuDataPutTile::ppuData#2 + (byte) $20 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a
|
|
Statement [62] (byte) ppuDataPutTile::ppuDataPut3_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 2) [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a reg byte y
|
|
Statement [64] (byte) ppuDataPutTile::ppuDataPut4_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 3) [ ppuDataPutTile::ppuDataPut4_val#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::ppuDataPut4_val#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::ppuDataPut4_val#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuDataPut4_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuDataPut4_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a reg byte y
|
|
Statement [69] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src#2 memcpy::dst#2 ] ( memcpy:40 [ memcpy::src#2 memcpy::dst#2 ] { } main:2::memcpy:40 [ memcpy::src#2 memcpy::dst#2 ] { } ) always clobbers reg byte a
|
|
Statement [71] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src#2 memcpy::dst#2 ] ( memcpy:40 [ memcpy::src#2 memcpy::dst#2 ] { } main:2::memcpy:40 [ memcpy::src#2 memcpy::dst#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [80] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] ( ppuDataFill:32 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] { } main:2::ppuDataFill:32 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] { } ppuDataFill:34 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] { } main:2::ppuDataFill:34 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:16 [ ppuDataFill::val#4 ]
|
|
Statement [85] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← >(const nomodify void*) ppuDataTransfer::ppuData#0 [ ] ( ppuDataTransfer:30 [ ] { } main:2::ppuDataTransfer:30 [ ] { } ) always clobbers reg byte a
|
|
Statement [86] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte) 0 [ ] ( ppuDataTransfer:30 [ ] { } main:2::ppuDataTransfer:30 [ ] { } ) always clobbers reg byte a
|
|
Statement [88] if((word) ppuDataTransfer::i#2<(const word) ppuDataTransfer::size#0) goto ppuDataTransfer::@2 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] ( ppuDataTransfer:30 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:2::ppuDataTransfer:30 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ) always clobbers reg byte a
|
|
Statement [90] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] ( ppuDataTransfer:30 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:2::ppuDataTransfer:30 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [122] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [123] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [124] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [126] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y
|
|
Statement [127] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 [ ] ( readJoy1:95 [ ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a
|
|
Statement [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 [ ] ( readJoy1:95 [ ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a
|
|
Statement [132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 [ readJoy1::i#2 readJoy1::$1 ] ( readJoy1:95 [ readJoy1::i#2 readJoy1::$1 ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:23 [ readJoy1::i#2 readJoy1::i#1 ]
|
|
Statement [133] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 [ readJoy1::i#2 readJoy1::$1 readJoy1::$2 ] ( readJoy1:95 [ readJoy1::i#2 readJoy1::$1 readJoy1::$2 ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:48 [ readJoy1::$1 ]
|
|
Statement asm { cld ldx#$ff txs } always clobbers reg byte x
|
|
Statement [6] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) 0 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [7] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) 0 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [8] *((const nomodify byte*) FR_COUNTER) ← (byte) $40 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [9] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ) ← (byte) $40 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement asm { ldaPPU_PPUSTATUS } always clobbers reg byte a
|
|
Statement [12] (byte~) main::initNES1_waitForVBlank1_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 [ main::initNES1_waitForVBlank1_$0 ] ( [ main::initNES1_waitForVBlank1_$0 ] { } main:2 [ main::initNES1_waitForVBlank1_$0 ] { } ) always clobbers reg byte a
|
|
Statement [15] *((const nomodify byte*) MEMORY + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [16] *((const nomodify byte*) MEMORY+(word) $100 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [17] *((const nomodify byte*) MEMORY+(word) $200 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [18] *((const nomodify byte*) MEMORY+(word) $300 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [19] *((const nomodify byte*) MEMORY+(word) $400 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [20] *((const nomodify byte*) MEMORY+(word) $500 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [21] *((const nomodify byte*) MEMORY+(word) $600 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [22] *((const nomodify byte*) MEMORY+(word) $700 + (byte) main::initNES1_i#2) ← (byte) 0 [ main::initNES1_i#2 ] ( [ main::initNES1_i#2 ] { } main:2 [ main::initNES1_i#2 ] { } ) always clobbers reg byte a
|
|
Statement [26] (byte~) main::initNES1_waitForVBlank2_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 [ main::initNES1_waitForVBlank2_$0 ] ( [ main::initNES1_waitForVBlank2_$0 ] { } main:2 [ main::initNES1_waitForVBlank2_$0 ] { } ) always clobbers reg byte a
|
|
Statement asm { ldaPPU_PPUSTATUS } always clobbers reg byte a
|
|
Statement [41] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) $80 [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [42] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) $1e [ ] ( [ ] { } main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [44] (nomodify byte*) ppuDataPutTile::ppuData#0 ← (const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $14*(number) $20 + (byte) main::x#2 [ main::x#2 ppuDataPutTile::ppuData#0 ] ( [ main::x#2 ppuDataPutTile::ppuData#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2 [ main::x#2 ppuDataPutTile::ppuData#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a
|
|
Statement [45] (nomodify void*) ppuDataPutTile::ppuData#9 ← (void*)(nomodify byte*) ppuDataPutTile::ppuData#0 [ main::x#2 ppuDataPutTile::ppuData#9 ] ( [ main::x#2 ppuDataPutTile::ppuData#9 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2 [ main::x#2 ppuDataPutTile::ppuData#9 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a
|
|
Statement [53] (byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#10) [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut1_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a reg byte y
|
|
Statement [55] (byte) ppuDataPutTile::ppuDataPut2_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 1) [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuData#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut2_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a reg byte y
|
|
Statement [57] (nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ← (byte*)(nomodify void*) ppuDataPutTile::ppuData#2 + (byte) $20 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a
|
|
Statement [62] (byte) ppuDataPutTile::ppuDataPut3_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 2) [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::tile#10 ppuDataPutTile::ppuDataPut3_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a reg byte y
|
|
Statement [64] (byte) ppuDataPutTile::ppuDataPut4_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 3) [ ppuDataPutTile::ppuDataPut4_val#0 ] ( ppuDataPutTile:38 [ ppuDataPutTile::ppuDataPut4_val#0 ] { } main:2::ppuDataPutTile:38 [ ppuDataPutTile::ppuDataPut4_val#0 ] { } ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuDataPut4_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } main:2::ppuDataPutTile:46 [ main::x#2 ppuDataPutTile::ppuDataPut4_val#0 ] { { ppuDataPutTile::ppuData#2 = ppuDataPutTile::ppuData#9 } } ) always clobbers reg byte a reg byte y
|
|
Statement [69] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src#2 memcpy::dst#2 ] ( memcpy:40 [ memcpy::src#2 memcpy::dst#2 ] { } main:2::memcpy:40 [ memcpy::src#2 memcpy::dst#2 ] { } ) always clobbers reg byte a
|
|
Statement [71] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src#2 memcpy::dst#2 ] ( memcpy:40 [ memcpy::src#2 memcpy::dst#2 ] { } main:2::memcpy:40 [ memcpy::src#2 memcpy::dst#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [80] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] ( ppuDataFill:32 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] { } main:2::ppuDataFill:32 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] { } ppuDataFill:34 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] { } main:2::ppuDataFill:34 [ ppuDataFill::size#3 ppuDataFill::val#4 ppuDataFill::i#2 ] { } ) always clobbers reg byte a
|
|
Statement [85] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← >(const nomodify void*) ppuDataTransfer::ppuData#0 [ ] ( ppuDataTransfer:30 [ ] { } main:2::ppuDataTransfer:30 [ ] { } ) always clobbers reg byte a
|
|
Statement [86] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte) 0 [ ] ( ppuDataTransfer:30 [ ] { } main:2::ppuDataTransfer:30 [ ] { } ) always clobbers reg byte a
|
|
Statement [88] if((word) ppuDataTransfer::i#2<(const word) ppuDataTransfer::size#0) goto ppuDataTransfer::@2 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] ( ppuDataTransfer:30 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:2::ppuDataTransfer:30 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ) always clobbers reg byte a
|
|
Statement [90] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] ( ppuDataTransfer:30 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:2::ppuDataTransfer:30 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [122] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [123] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [124] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [126] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y
|
|
Statement [127] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 [ ] ( readJoy1:95 [ ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a
|
|
Statement [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 [ ] ( readJoy1:95 [ ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a
|
|
Statement [132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 [ readJoy1::i#2 readJoy1::$1 ] ( readJoy1:95 [ readJoy1::i#2 readJoy1::$1 ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a
|
|
Statement [133] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 [ readJoy1::i#2 readJoy1::$1 readJoy1::$2 ] ( readJoy1:95 [ readJoy1::i#2 readJoy1::$1 readJoy1::$2 ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a
|
|
Potential registers zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:3 [ main::x#2 main::x#1 ] : zp[1]:3 , reg byte x ,
|
|
Potential registers zp[2]:4 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ] : zp[2]:4 ,
|
|
Potential registers zp[2]:6 [ ppuDataPutTile::tile#10 ] : zp[2]:6 ,
|
|
Potential registers zp[2]:8 [ memcpy::src#2 memcpy::src#1 ] : zp[2]:8 ,
|
|
Potential registers zp[2]:10 [ memcpy::dst#2 memcpy::dst#1 ] : zp[2]:10 ,
|
|
Potential registers zp[2]:12 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] : zp[2]:12 ,
|
|
Potential registers zp[2]:14 [ ppuDataFill::size#3 ] : zp[2]:14 ,
|
|
Potential registers zp[1]:16 [ ppuDataFill::val#4 ] : zp[1]:16 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:17 [ ppuDataFill::i#2 ppuDataFill::i#1 ] : zp[2]:17 ,
|
|
Potential registers zp[2]:19 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] : zp[2]:19 ,
|
|
Potential registers zp[2]:21 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ] : zp[2]:21 ,
|
|
Potential registers zp[1]:23 [ readJoy1::i#2 readJoy1::i#1 ] : zp[1]:23 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:24 [ readJoy1::joy#2 readJoy1::joy#1 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:25 [ main::initNES1_waitForVBlank1_$0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:26 [ main::initNES1_waitForVBlank2_$0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:27 [ ppuDataPutTile::ppuData#0 ] : zp[2]:27 ,
|
|
Potential registers zp[1]:29 [ ppuDataPutTile::ppuDataPrepare1_$0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:30 [ ppuDataPutTile::ppuDataPrepare1_$1 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:31 [ ppuDataPutTile::ppuDataPut1_val#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:32 [ ppuDataPutTile::ppuDataPut2_val#0 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:33 [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] : zp[2]:33 ,
|
|
Potential registers zp[1]:35 [ ppuDataPutTile::ppuDataPrepare2_$0 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:36 [ ppuDataPutTile::ppuDataPrepare2_$1 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:37 [ ppuDataPutTile::ppuDataPut3_val#0 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:38 [ ppuDataPutTile::ppuDataPut4_val#0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:39 [ ppuDataFill::ppuDataPrepare1_$0 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:40 [ ppuDataFill::ppuDataPrepare1_$1 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:41 [ ppuDataTransfer::ppuDataPut1_val#0 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:42 [ readJoy1::return#2 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:43 [ vblank::joy#0 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:44 [ vblank::$1 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:45 [ vblank::$3 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:46 [ vblank::$5 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:47 [ vblank::$7 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:48 [ readJoy1::$1 ] : zp[1]:48 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:49 [ readJoy1::$2 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y ,
|
|
|
|
REGISTER UPLIFT SCOPES
|
|
Uplift Scope [ppuDataPutTile] 2,002: zp[1]:29 [ ppuDataPutTile::ppuDataPrepare1_$0 ] 2,002: zp[1]:30 [ ppuDataPutTile::ppuDataPrepare1_$1 ] 2,002: zp[1]:31 [ ppuDataPutTile::ppuDataPut1_val#0 ] 2,002: zp[1]:32 [ ppuDataPutTile::ppuDataPut2_val#0 ] 2,002: zp[1]:35 [ ppuDataPutTile::ppuDataPrepare2_$0 ] 2,002: zp[1]:36 [ ppuDataPutTile::ppuDataPrepare2_$1 ] 2,002: zp[1]:37 [ ppuDataPutTile::ppuDataPut3_val#0 ] 2,002: zp[1]:38 [ ppuDataPutTile::ppuDataPut4_val#0 ] 435.67: zp[2]:4 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ] 333.67: zp[2]:33 [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] 250.25: zp[2]:6 [ ppuDataPutTile::tile#10 ] 101: zp[2]:27 [ ppuDataPutTile::ppuData#0 ]
|
|
Uplift Scope [ppuDataTransfer] 2,602.6: zp[2]:19 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] 2,002: zp[1]:41 [ ppuDataTransfer::ppuDataPut1_val#0 ] 1,751.75: zp[2]:21 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ]
|
|
Uplift Scope [memcpy] 3,003: zp[2]:8 [ memcpy::src#2 memcpy::src#1 ] 2,002: zp[2]:10 [ memcpy::dst#2 memcpy::dst#1 ]
|
|
Uplift Scope [ppuDataFill] 3,003: zp[2]:17 [ ppuDataFill::i#2 ppuDataFill::i#1 ] 202: zp[1]:39 [ ppuDataFill::ppuDataPrepare1_$0 ] 202: zp[1]:40 [ ppuDataFill::ppuDataPrepare1_$1 ] 111.22: zp[2]:14 [ ppuDataFill::size#3 ] 111.22: zp[1]:16 [ ppuDataFill::val#4 ] 67.33: zp[2]:12 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ]
|
|
Uplift Scope [main] 282.8: zp[1]:3 [ main::x#2 main::x#1 ] 263.72: zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] 202: zp[1]:25 [ main::initNES1_waitForVBlank1_$0 ] 202: zp[1]:26 [ main::initNES1_waitForVBlank2_$0 ]
|
|
Uplift Scope [readJoy1] 262.6: zp[1]:23 [ readJoy1::i#2 readJoy1::i#1 ] 202: zp[1]:49 [ readJoy1::$2 ] 152: zp[1]:24 [ readJoy1::joy#2 readJoy1::joy#1 ] 101: zp[1]:48 [ readJoy1::$1 ] 4: zp[1]:42 [ readJoy1::return#2 ]
|
|
Uplift Scope [vblank] 4: zp[1]:44 [ vblank::$1 ] 4: zp[1]:45 [ vblank::$3 ] 4: zp[1]:46 [ vblank::$5 ] 4: zp[1]:47 [ vblank::$7 ] 0.53: zp[1]:43 [ vblank::joy#0 ]
|
|
Uplift Scope [RICOH_2C02]
|
|
Uplift Scope [RICOH_2A03]
|
|
Uplift Scope [SpriteData]
|
|
Uplift Scope []
|
|
|
|
Uplifting [ppuDataPutTile] best 6014 combination reg byte a [ ppuDataPutTile::ppuDataPrepare1_$0 ] reg byte a [ ppuDataPutTile::ppuDataPrepare1_$1 ] reg byte a [ ppuDataPutTile::ppuDataPut1_val#0 ] reg byte a [ ppuDataPutTile::ppuDataPut2_val#0 ] zp[1]:35 [ ppuDataPutTile::ppuDataPrepare2_$0 ] zp[1]:36 [ ppuDataPutTile::ppuDataPrepare2_$1 ] zp[1]:37 [ ppuDataPutTile::ppuDataPut3_val#0 ] zp[1]:38 [ ppuDataPutTile::ppuDataPut4_val#0 ] zp[2]:4 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ] zp[2]:33 [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] zp[2]:6 [ ppuDataPutTile::tile#10 ] zp[2]:27 [ ppuDataPutTile::ppuData#0 ]
|
|
Limited combination testing to 100 combinations of 65536 possible.
|
|
Uplifting [ppuDataTransfer] best 5954 combination zp[2]:19 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:21 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ]
|
|
Uplifting [memcpy] best 5954 combination zp[2]:8 [ memcpy::src#2 memcpy::src#1 ] zp[2]:10 [ memcpy::dst#2 memcpy::dst#1 ]
|
|
Uplifting [ppuDataFill] best 5906 combination zp[2]:17 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:14 [ ppuDataFill::size#3 ] reg byte x [ ppuDataFill::val#4 ] zp[2]:12 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ]
|
|
Uplifting [main] best 5326 combination reg byte x [ main::x#2 main::x#1 ] reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] reg byte a [ main::initNES1_waitForVBlank2_$0 ]
|
|
Uplifting [readJoy1] best 5083 combination reg byte x [ readJoy1::i#2 readJoy1::i#1 ] reg byte a [ readJoy1::$2 ] reg byte a [ readJoy1::joy#2 readJoy1::joy#1 ] zp[1]:48 [ readJoy1::$1 ] zp[1]:42 [ readJoy1::return#2 ]
|
|
Limited combination testing to 100 combinations of 576 possible.
|
|
Uplifting [vblank] best 5059 combination reg byte a [ vblank::$1 ] reg byte a [ vblank::$3 ] reg byte a [ vblank::$5 ] reg byte a [ vblank::$7 ] zp[1]:43 [ vblank::joy#0 ]
|
|
Limited combination testing to 100 combinations of 1024 possible.
|
|
Uplifting [RICOH_2C02] best 5059 combination
|
|
Uplifting [RICOH_2A03] best 5059 combination
|
|
Uplifting [SpriteData] best 5059 combination
|
|
Uplifting [] best 5059 combination
|
|
Attempting to uplift remaining variables inzp[1]:35 [ ppuDataPutTile::ppuDataPrepare2_$0 ]
|
|
Uplifting [ppuDataPutTile] best 5053 combination reg byte a [ ppuDataPutTile::ppuDataPrepare2_$0 ]
|
|
Attempting to uplift remaining variables inzp[1]:36 [ ppuDataPutTile::ppuDataPrepare2_$1 ]
|
|
Uplifting [ppuDataPutTile] best 5047 combination reg byte a [ ppuDataPutTile::ppuDataPrepare2_$1 ]
|
|
Attempting to uplift remaining variables inzp[1]:37 [ ppuDataPutTile::ppuDataPut3_val#0 ]
|
|
Uplifting [ppuDataPutTile] best 5041 combination reg byte a [ ppuDataPutTile::ppuDataPut3_val#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:38 [ ppuDataPutTile::ppuDataPut4_val#0 ]
|
|
Uplifting [ppuDataPutTile] best 5035 combination reg byte a [ ppuDataPutTile::ppuDataPut4_val#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:48 [ readJoy1::$1 ]
|
|
Uplifting [readJoy1] best 5035 combination zp[1]:48 [ readJoy1::$1 ]
|
|
Attempting to uplift remaining variables inzp[1]:42 [ readJoy1::return#2 ]
|
|
Uplifting [readJoy1] best 5029 combination reg byte a [ readJoy1::return#2 ]
|
|
Attempting to uplift remaining variables inzp[1]:43 [ vblank::joy#0 ]
|
|
Uplifting [vblank] best 5024 combination reg byte x [ vblank::joy#0 ]
|
|
Coalescing zero page register [ zp[2]:4 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ] ] with [ zp[2]:27 [ ppuDataPutTile::ppuData#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:4 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ppuDataPutTile::ppuData#0 ] ] with [ zp[2]:33 [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:8 [ memcpy::src#2 memcpy::src#1 ] ] with [ zp[2]:4 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ppuDataPutTile::ppuData#0 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] ]
|
|
Coalescing zero page register [ zp[2]:10 [ memcpy::dst#2 memcpy::dst#1 ] ] with [ zp[2]:6 [ ppuDataPutTile::tile#10 ] ]
|
|
Coalescing zero page register [ zp[2]:19 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] ] with [ zp[2]:12 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] ]
|
|
Coalescing zero page register [ zp[2]:21 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ] ] with [ zp[2]:14 [ ppuDataFill::size#3 ] ]
|
|
Coalescing zero page register [ zp[2]:17 [ ppuDataFill::i#2 ppuDataFill::i#1 ] ] with [ zp[2]:8 [ memcpy::src#2 memcpy::src#1 ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ppuDataPutTile::ppuData#0 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] ]
|
|
Coalescing zero page register [ zp[2]:19 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ppuDataFill::ppuDataPrepare1_ppuData#0 ] ] with [ zp[2]:10 [ memcpy::dst#2 memcpy::dst#1 ppuDataPutTile::tile#10 ] ]
|
|
Allocated (was zp[2]:17) zp[2]:2 [ ppuDataFill::i#2 ppuDataFill::i#1 memcpy::src#2 memcpy::src#1 ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ppuDataPutTile::ppuData#0 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ]
|
|
Allocated (was zp[2]:19) zp[2]:4 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ppuDataFill::ppuDataPrepare1_ppuData#0 memcpy::dst#2 memcpy::dst#1 ppuDataPutTile::tile#10 ]
|
|
Allocated (was zp[2]:21) zp[2]:6 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ppuDataFill::size#3 ]
|
|
Allocated (was zp[1]:48) zp[1]:8 [ readJoy1::$1 ]
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
// File Comments
|
|
// A minimal NES demo
|
|
// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018.
|
|
// Nintendo Entertainment System (NES
|
|
// https://en.wikipedia.org/wiki/Nintendo_Entertainment_System_(Model_NES-101)
|
|
// https://github.com/gregkrsak/first_nes
|
|
// Ricoh 2C02 - NES Picture Processing Unit (PPU)
|
|
// Ricoh RP2C02 (NTSC version) / RP2C07 (PAL version),
|
|
// https://en.wikipedia.org/wiki/Picture_Processing_Unit
|
|
// https://wiki.nesdev.com/w/index.php/PPU_registers
|
|
// http://nesdev.com/2C02%20technical%20reference.TXT
|
|
// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018.
|
|
// Upstart
|
|
// Nintendo Entertainment System (NES) ROM
|
|
// https://sadistech.com/nesromtool/romdoc.html
|
|
// https://forums.nesdev.com/viewtopic.php?f=2&t=9896
|
|
// https://github.com/gregkrsak/first_nes
|
|
.file [name="nes-demo.nes", type="bin", segments="NesRom"]
|
|
.file [name="nes-demo.nes_hdr", type="bin", segments="Header"]
|
|
.file [name="nes-demo.nes_prg", type="bin", segments="ProgramRom"]
|
|
.file [name="nes-demo.nes_chr", type="bin", segments="CharacterRom"]
|
|
.segmentdef Header [ start=$0000, min=$0000, max=$000f, fill ]
|
|
.segmentdef Tiles [ start=$0000, min=$0000, max=$1fff, fill ]
|
|
.segmentdef Code [ start=$c000, min=$c000, max=$fff9 ]
|
|
.segmentdef Data [ startAfter="Code", min=$c000, max=$fff9 ]
|
|
.segmentdef Vectors [ start=$fffa, min=$fffa, max=$ffff ]
|
|
.segmentdef GameRam [start=$200,max=$7ff, virtual]
|
|
.segmentdef ProgramRom [ segments="Code, Data, Vectors" ]
|
|
.segmentdef CharacterRom [ segments="Tiles" ]
|
|
.segmentdef NesRom
|
|
.segment NesRom
|
|
.segmentout [ segments="Header" ]
|
|
.segmentout [ segments="ProgramRom" ]
|
|
.segmentout [ segments="CharacterRom" ]
|
|
.segment Header
|
|
.text @"NES\$1a"
|
|
.byte $01 // 1x 16KB ROM (PRG)
|
|
.byte $01 // 1x 8KB VROM (CHR)
|
|
.byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game)
|
|
// Mirroring nibble 0001 == Vertical mirroring only
|
|
.segment Code
|
|
|
|
// Global Constants & labels
|
|
// Standard Controller Right Button
|
|
.const JOY_RIGHT = 1
|
|
// Standard Controller Left Button
|
|
.const JOY_LEFT = 2
|
|
// Standard Controller Down Button
|
|
.const JOY_DOWN = 4
|
|
// Standard Controller Up Button
|
|
.const JOY_UP = 8
|
|
.const SIZEOF_STRUCT_SPRITEDATA = 4
|
|
.const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUSTATUS = 2
|
|
.const OFFSET_STRUCT_RICOH_2C02_OAMADDR = 3
|
|
.const OFFSET_STRUCT_RICOH_2A03_OAMDMA = $14
|
|
.const OFFSET_STRUCT_RICOH_2A03_JOY1 = $16
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUADDR = 6
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUDATA = 7
|
|
.const OFFSET_STRUCT_SPRITEDATA_X = 3
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUSCROLL = 5
|
|
.const SIZEOF_BYTE = 1
|
|
// $2000-$23bf $03c0 Name table 0
|
|
.label PPU_NAME_TABLE_0 = $2000
|
|
// $23c0-$23ff $0040 Attribute table 0
|
|
.label PPU_ATTRIBUTE_TABLE_0 = $23c0
|
|
// $3000-$3eff $0f00 Mirrors of $2000-$2eff
|
|
// $3f00-$3f1f $0020 Palette RAM indexes
|
|
.label PPU_PALETTE = $3f00
|
|
// PPU Status Register for reading in ASM
|
|
.label PPU_PPUSTATUS = $2002
|
|
// APU Frame Counter
|
|
// generates low-frequency clocks for the channels and an optional 60 Hz interrupt.
|
|
// https://wiki.nesdev.com/w/index.php/APU_Frame_Counter
|
|
// ------+-----+---------------------------------------------------------------
|
|
// $4017 | W | FR_COUNTER Frame Counter Set mode and interrupt
|
|
// ------+-----+---------------------------------------------------------------
|
|
// | 7 | Sequencer mode: 0 selects 4-step sequence, 1 selects 5-step sequence
|
|
// | 6 | Interrupt inhibit flag. If set, the frame interrupt flag is cleared, otherwise it is unaffected.
|
|
// ------+-----+---------------------------------------------------------------
|
|
// Side effects After 3 or 4 CPU clock cycles*, the timer is reset.
|
|
// If the mode flag is set, then both "quarter frame" and "half frame" signals are also generated.
|
|
.label FR_COUNTER = $4017
|
|
// Pointer to the start of RAM memory
|
|
.label MEMORY = 0
|
|
// NES Picture Processing Unit (PPU)
|
|
.label PPU = $2000
|
|
// NES CPU and audion processing unit (APU)
|
|
.label APU = $4000
|
|
// @begin
|
|
__bbegin:
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
__b1_from___bbegin:
|
|
jmp __b1
|
|
// @1
|
|
__b1:
|
|
// [2] call main
|
|
// [4] phi from @1 to main [phi:@1->main]
|
|
main_from___b1:
|
|
jsr main
|
|
// [3] phi from @1 to @end [phi:@1->@end]
|
|
__bend_from___b1:
|
|
jmp __bend
|
|
// @end
|
|
__bend:
|
|
.segment Code
|
|
// main
|
|
// RESET Called when the NES is reset, including when it is turned on.
|
|
main: {
|
|
jmp initNES1
|
|
// main::initNES1
|
|
initNES1:
|
|
// asm { cld ldx#$ff txs }
|
|
cld
|
|
ldx #$ff
|
|
txs
|
|
jmp initNES1_disableVideoOutput1
|
|
// main::initNES1_disableVideoOutput1
|
|
initNES1_disableVideoOutput1:
|
|
// [6] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU
|
|
// [7] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
jmp initNES1_disableAudioOutput1
|
|
// main::initNES1_disableAudioOutput1
|
|
initNES1_disableAudioOutput1:
|
|
// [8] *((const nomodify byte*) FR_COUNTER) ← (byte) $40 -- _deref_pbuc1=vbuc2
|
|
lda #$40
|
|
sta FR_COUNTER
|
|
// [9] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ) ← (byte) $40 -- _deref_pbuc1=vbuc2
|
|
lda #$40
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_DMC_FREQ
|
|
jmp initNES1_clearVBlankFlag1
|
|
// main::initNES1_clearVBlankFlag1
|
|
initNES1_clearVBlankFlag1:
|
|
// asm { ldaPPU_PPUSTATUS }
|
|
lda PPU_PPUSTATUS
|
|
// [11] phi from main::initNES1_clearVBlankFlag1 to main::initNES1_waitForVBlank1 [phi:main::initNES1_clearVBlankFlag1->main::initNES1_waitForVBlank1]
|
|
initNES1_waitForVBlank1_from_initNES1_clearVBlankFlag1:
|
|
jmp initNES1_waitForVBlank1
|
|
// main::initNES1_waitForVBlank1
|
|
initNES1_waitForVBlank1:
|
|
jmp initNES1_waitForVBlank1___b1
|
|
// main::initNES1_waitForVBlank1_@1
|
|
initNES1_waitForVBlank1___b1:
|
|
// [12] (byte~) main::initNES1_waitForVBlank1_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 -- vbuaa=_deref_pbuc1_band_vbuc2
|
|
lda #$80
|
|
and PPU+OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
// [13] if((byte) 0==(byte~) main::initNES1_waitForVBlank1_$0) goto main::initNES1_waitForVBlank1_@1 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq initNES1_waitForVBlank1___b1
|
|
// [14] phi from main::initNES1_waitForVBlank1_@1 to main::initNES1_@1 [phi:main::initNES1_waitForVBlank1_@1->main::initNES1_@1]
|
|
initNES1___b1_from_initNES1_waitForVBlank1___b1:
|
|
// [14] phi (byte) main::initNES1_i#2 = (byte) 0 [phi:main::initNES1_waitForVBlank1_@1->main::initNES1_@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp initNES1___b1
|
|
// [14] phi from main::initNES1_@1 to main::initNES1_@1 [phi:main::initNES1_@1->main::initNES1_@1]
|
|
initNES1___b1_from_initNES1___b1:
|
|
// [14] phi (byte) main::initNES1_i#2 = (byte) main::initNES1_i#1 [phi:main::initNES1_@1->main::initNES1_@1#0] -- register_copy
|
|
jmp initNES1___b1
|
|
// main::initNES1_@1
|
|
initNES1___b1:
|
|
// [15] *((const nomodify byte*) MEMORY + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY,x
|
|
// [16] *((const nomodify byte*) MEMORY+(word) $100 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY+$100,x
|
|
// [17] *((const nomodify byte*) MEMORY+(word) $200 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY+$200,x
|
|
// [18] *((const nomodify byte*) MEMORY+(word) $300 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY+$300,x
|
|
// [19] *((const nomodify byte*) MEMORY+(word) $400 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY+$400,x
|
|
// [20] *((const nomodify byte*) MEMORY+(word) $500 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY+$500,x
|
|
// [21] *((const nomodify byte*) MEMORY+(word) $600 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY+$600,x
|
|
// [22] *((const nomodify byte*) MEMORY+(word) $700 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY+$700,x
|
|
// [23] (byte) main::initNES1_i#1 ← ++ (byte) main::initNES1_i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [24] if((byte) 0!=(byte) main::initNES1_i#1) goto main::initNES1_@1 -- vbuc1_neq_vbuxx_then_la1
|
|
cpx #0
|
|
bne initNES1___b1_from_initNES1___b1
|
|
// [25] phi from main::initNES1_@1 to main::initNES1_waitForVBlank2 [phi:main::initNES1_@1->main::initNES1_waitForVBlank2]
|
|
initNES1_waitForVBlank2_from_initNES1___b1:
|
|
jmp initNES1_waitForVBlank2
|
|
// main::initNES1_waitForVBlank2
|
|
initNES1_waitForVBlank2:
|
|
jmp initNES1_waitForVBlank2___b1
|
|
// main::initNES1_waitForVBlank2_@1
|
|
initNES1_waitForVBlank2___b1:
|
|
// [26] (byte~) main::initNES1_waitForVBlank2_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 -- vbuaa=_deref_pbuc1_band_vbuc2
|
|
lda #$80
|
|
and PPU+OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
// [27] if((byte) 0==(byte~) main::initNES1_waitForVBlank2_$0) goto main::initNES1_waitForVBlank2_@1 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq initNES1_waitForVBlank2___b1
|
|
jmp initNES1___b7
|
|
// main::initNES1_@7
|
|
initNES1___b7:
|
|
// asm { ldaPPU_PPUSTATUS }
|
|
lda PPU_PPUSTATUS
|
|
// [29] phi from main::initNES1_@7 to main::@5 [phi:main::initNES1_@7->main::@5]
|
|
__b5_from_initNES1___b7:
|
|
jmp __b5
|
|
// main::@5
|
|
__b5:
|
|
// [30] call ppuDataTransfer
|
|
// Transfer the palette
|
|
// [84] phi from main::@5 to ppuDataTransfer [phi:main::@5->ppuDataTransfer]
|
|
ppuDataTransfer_from___b5:
|
|
jsr ppuDataTransfer
|
|
// [31] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
|
|
__b6_from___b5:
|
|
jmp __b6
|
|
// main::@6
|
|
__b6:
|
|
// [32] call ppuDataFill
|
|
// Clear the name table
|
|
// [74] phi from main::@6 to ppuDataFill [phi:main::@6->ppuDataFill]
|
|
ppuDataFill_from___b6:
|
|
// [74] phi (byte) ppuDataFill::val#4 = (byte) $fc [phi:main::@6->ppuDataFill#0] -- vbuxx=vbuc1
|
|
ldx #$fc
|
|
// [74] phi (word) ppuDataFill::size#3 = (word) $3c0 [phi:main::@6->ppuDataFill#1] -- vwuz1=vwuc1
|
|
lda #<$3c0
|
|
sta.z ppuDataFill.size
|
|
lda #>$3c0
|
|
sta.z ppuDataFill.size+1
|
|
// [74] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1
|
|
lda #<PPU_NAME_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData
|
|
lda #>PPU_NAME_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData+1
|
|
jsr ppuDataFill
|
|
// [33] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
|
|
__b7_from___b6:
|
|
jmp __b7
|
|
// main::@7
|
|
__b7:
|
|
// [34] call ppuDataFill
|
|
// Fill the PPU attribute table
|
|
// [74] phi from main::@7 to ppuDataFill [phi:main::@7->ppuDataFill]
|
|
ppuDataFill_from___b7:
|
|
// [74] phi (byte) ppuDataFill::val#4 = (byte) 0 [phi:main::@7->ppuDataFill#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [74] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@7->ppuDataFill#1] -- vwuz1=vbuc1
|
|
lda #<$40
|
|
sta.z ppuDataFill.size
|
|
lda #>$40
|
|
sta.z ppuDataFill.size+1
|
|
// [74] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@7->ppuDataFill#2] -- pvoz1=pvoc1
|
|
lda #<PPU_ATTRIBUTE_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData
|
|
lda #>PPU_ATTRIBUTE_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData+1
|
|
jsr ppuDataFill
|
|
// [35] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
|
|
__b1_from___b7:
|
|
// [35] phi (byte) main::x#2 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b1
|
|
// Show floor
|
|
// main::@1
|
|
__b1:
|
|
// [36] if((byte) main::x#2<(byte) $20) goto main::@2 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$20
|
|
bcc __b2
|
|
// [37] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
|
|
__b3_from___b1:
|
|
jmp __b3
|
|
// main::@3
|
|
__b3:
|
|
// [38] call ppuDataPutTile
|
|
// Show flag
|
|
// [48] phi from main::@3 to ppuDataPutTile [phi:main::@3->ppuDataPutTile]
|
|
ppuDataPutTile_from___b3:
|
|
// [48] phi (byte*) ppuDataPutTile::tile#10 = (const byte*) FLAG [phi:main::@3->ppuDataPutTile#0] -- pbuz1=pbuc1
|
|
lda #<FLAG
|
|
sta.z ppuDataPutTile.tile
|
|
lda #>FLAG
|
|
sta.z ppuDataPutTile.tile+1
|
|
// [48] phi (nomodify void*) ppuDataPutTile::ppuData#2 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $12*(number) $20+(byte) $1c [phi:main::@3->ppuDataPutTile#1] -- pvoz1=pvoc1
|
|
lda #<PPU_NAME_TABLE_0+$12*$20+$1c
|
|
sta.z ppuDataPutTile.ppuData
|
|
lda #>PPU_NAME_TABLE_0+$12*$20+$1c
|
|
sta.z ppuDataPutTile.ppuData+1
|
|
jsr ppuDataPutTile
|
|
// [39] phi from main::@3 to main::@9 [phi:main::@3->main::@9]
|
|
__b9_from___b3:
|
|
jmp __b9
|
|
// main::@9
|
|
__b9:
|
|
// [40] call memcpy
|
|
// Initialize Sprite Buffer with the SPRITE data
|
|
// [67] phi from main::@9 to memcpy [phi:main::@9->memcpy]
|
|
memcpy_from___b9:
|
|
jsr memcpy
|
|
jmp enableVideoOutput1
|
|
// main::enableVideoOutput1
|
|
enableVideoOutput1:
|
|
// [41] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) $80 -- _deref_pbuc1=vbuc2
|
|
lda #$80
|
|
sta PPU
|
|
// [42] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) $1e -- _deref_pbuc1=vbuc2
|
|
lda #$1e
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
// [43] phi from main::@4 main::enableVideoOutput1 to main::@4 [phi:main::@4/main::enableVideoOutput1->main::@4]
|
|
__b4_from___b4:
|
|
__b4_from_enableVideoOutput1:
|
|
jmp __b4
|
|
// Infinite loop
|
|
// main::@4
|
|
__b4:
|
|
jmp __b4_from___b4
|
|
// main::@2
|
|
__b2:
|
|
// [44] (nomodify byte*) ppuDataPutTile::ppuData#0 ← (const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $14*(number) $20 + (byte) main::x#2 -- pbuz1=pbuc1_plus_vbuxx
|
|
txa
|
|
clc
|
|
adc #<PPU_NAME_TABLE_0+$14*$20
|
|
sta.z ppuDataPutTile.ppuData
|
|
lda #>PPU_NAME_TABLE_0+$14*$20
|
|
adc #0
|
|
sta.z ppuDataPutTile.ppuData+1
|
|
// [45] (nomodify void*) ppuDataPutTile::ppuData#9 ← (void*)(nomodify byte*) ppuDataPutTile::ppuData#0
|
|
// [46] call ppuDataPutTile
|
|
// [48] phi from main::@2 to ppuDataPutTile [phi:main::@2->ppuDataPutTile]
|
|
ppuDataPutTile_from___b2:
|
|
// [48] phi (byte*) ppuDataPutTile::tile#10 = (const byte*) FLOOR [phi:main::@2->ppuDataPutTile#0] -- pbuz1=pbuc1
|
|
lda #<FLOOR
|
|
sta.z ppuDataPutTile.tile
|
|
lda #>FLOOR
|
|
sta.z ppuDataPutTile.tile+1
|
|
// [48] phi (nomodify void*) ppuDataPutTile::ppuData#2 = (nomodify void*) ppuDataPutTile::ppuData#9 [phi:main::@2->ppuDataPutTile#1] -- register_copy
|
|
jsr ppuDataPutTile
|
|
jmp __b8
|
|
// main::@8
|
|
__b8:
|
|
// [47] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
|
|
inx
|
|
inx
|
|
// [35] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
|
|
__b1_from___b8:
|
|
// [35] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@8->main::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataPutTile
|
|
// Transfer a 2x2 tile into the PPU memory
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - tile : The tile to transfer
|
|
// ppuDataPutTile(byte* zp(2) ppuData, byte* zp(4) tile)
|
|
ppuDataPutTile: {
|
|
.label ppuDataPrepare2_ppuData = 2
|
|
.label ppuData = 2
|
|
.label tile = 4
|
|
jmp ppuDataPrepare1
|
|
// ppuDataPutTile::ppuDataPrepare1
|
|
ppuDataPrepare1:
|
|
// [49] (byte~) ppuDataPutTile::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataPutTile::ppuData#2 -- vbuaa=_hi_pvoz1
|
|
lda.z ppuData+1
|
|
// [50] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [51] (byte~) ppuDataPutTile::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataPutTile::ppuData#2 -- vbuaa=_lo_pvoz1
|
|
lda.z ppuData
|
|
// [52] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
jmp __b1
|
|
// ppuDataPutTile::@1
|
|
__b1:
|
|
// [53] (byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#10) -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (tile),y
|
|
jmp ppuDataPut1
|
|
// ppuDataPutTile::ppuDataPut1
|
|
ppuDataPut1:
|
|
// [54] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b2
|
|
// ppuDataPutTile::@2
|
|
__b2:
|
|
// [55] (byte) ppuDataPutTile::ppuDataPut2_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 1) -- vbuaa=pbuz1_derefidx_vbuc1
|
|
ldy #1
|
|
lda (tile),y
|
|
jmp ppuDataPut2
|
|
// ppuDataPutTile::ppuDataPut2
|
|
ppuDataPut2:
|
|
// [56] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut2_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b3
|
|
// ppuDataPutTile::@3
|
|
__b3:
|
|
// [57] (nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ← (byte*)(nomodify void*) ppuDataPutTile::ppuData#2 + (byte) $20 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #$20
|
|
clc
|
|
adc.z ppuDataPrepare2_ppuData
|
|
sta.z ppuDataPrepare2_ppuData
|
|
bcc !+
|
|
inc.z ppuDataPrepare2_ppuData+1
|
|
!:
|
|
jmp ppuDataPrepare2
|
|
// ppuDataPutTile::ppuDataPrepare2
|
|
ppuDataPrepare2:
|
|
// [58] (byte~) ppuDataPutTile::ppuDataPrepare2_$0 ← > (void*)(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 -- vbuaa=_hi_pvoz1
|
|
lda.z ppuDataPrepare2_ppuData+1
|
|
// [59] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [60] (byte~) ppuDataPutTile::ppuDataPrepare2_$1 ← < (void*)(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 -- vbuaa=_lo_pvoz1
|
|
lda.z ppuDataPrepare2_ppuData
|
|
// [61] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$1 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
jmp __b4
|
|
// ppuDataPutTile::@4
|
|
__b4:
|
|
// [62] (byte) ppuDataPutTile::ppuDataPut3_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 2) -- vbuaa=pbuz1_derefidx_vbuc1
|
|
ldy #2
|
|
lda (tile),y
|
|
jmp ppuDataPut3
|
|
// ppuDataPutTile::ppuDataPut3
|
|
ppuDataPut3:
|
|
// [63] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut3_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b5
|
|
// ppuDataPutTile::@5
|
|
__b5:
|
|
// [64] (byte) ppuDataPutTile::ppuDataPut4_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 3) -- vbuaa=pbuz1_derefidx_vbuc1
|
|
ldy #3
|
|
lda (tile),y
|
|
jmp ppuDataPut4
|
|
// ppuDataPutTile::ppuDataPut4
|
|
ppuDataPut4:
|
|
// [65] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut4_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __breturn
|
|
// ppuDataPutTile::@return
|
|
__breturn:
|
|
// [66] return
|
|
rts
|
|
}
|
|
// memcpy
|
|
// Copy block of memory (forwards)
|
|
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
|
|
memcpy: {
|
|
.const num = 8*SIZEOF_STRUCT_SPRITEDATA
|
|
.label destination = SPRITE_BUFFER
|
|
.label source = SPRITES
|
|
.label src_end = source+num
|
|
.label dst = 4
|
|
.label src = 2
|
|
// [68] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1]
|
|
__b1_from_memcpy:
|
|
// [68] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1
|
|
lda #<destination
|
|
sta.z dst
|
|
lda #>destination
|
|
sta.z dst+1
|
|
// [68] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1
|
|
lda #<source
|
|
sta.z src
|
|
lda #>source
|
|
sta.z src+1
|
|
jmp __b1
|
|
// memcpy::@1
|
|
__b1:
|
|
// [69] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1
|
|
lda.z src+1
|
|
cmp #>src_end
|
|
bne __b2
|
|
lda.z src
|
|
cmp #<src_end
|
|
bne __b2
|
|
jmp __breturn
|
|
// memcpy::@return
|
|
__breturn:
|
|
// [70] return
|
|
rts
|
|
// memcpy::@2
|
|
__b2:
|
|
// [71] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (src),y
|
|
ldy #0
|
|
sta (dst),y
|
|
// [72] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
// [73] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1
|
|
inc.z src
|
|
bne !+
|
|
inc.z src+1
|
|
!:
|
|
// [68] phi from memcpy::@2 to memcpy::@1 [phi:memcpy::@2->memcpy::@1]
|
|
__b1_from___b2:
|
|
// [68] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy
|
|
// [68] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataFill
|
|
// Fill a number of bytes in the PPU memory
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - size : The number of bytes to transfer
|
|
// ppuDataFill(byte register(X) val, word zp(6) size)
|
|
ppuDataFill: {
|
|
.label ppuDataPrepare1_ppuData = 4
|
|
.label i = 2
|
|
.label size = 6
|
|
jmp ppuDataPrepare1
|
|
// ppuDataFill::ppuDataPrepare1
|
|
ppuDataPrepare1:
|
|
// [75] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1
|
|
lda.z ppuDataPrepare1_ppuData+1
|
|
// [76] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [77] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1
|
|
lda.z ppuDataPrepare1_ppuData
|
|
// [78] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [79] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1]
|
|
__b1_from_ppuDataPrepare1:
|
|
// [79] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z i
|
|
lda #>0
|
|
sta.z i+1
|
|
jmp __b1
|
|
// Transfer to PPU
|
|
// ppuDataFill::@1
|
|
__b1:
|
|
// [80] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1
|
|
lda.z i+1
|
|
cmp.z size+1
|
|
bcc ppuDataPut1
|
|
bne !+
|
|
lda.z i
|
|
cmp.z size
|
|
bcc ppuDataPut1
|
|
!:
|
|
jmp __breturn
|
|
// ppuDataFill::@return
|
|
__breturn:
|
|
// [81] return
|
|
rts
|
|
// ppuDataFill::ppuDataPut1
|
|
ppuDataPut1:
|
|
// [82] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataFill::val#4 -- _deref_pbuc1=vbuxx
|
|
stx PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b2
|
|
// ppuDataFill::@2
|
|
__b2:
|
|
// [83] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1
|
|
inc.z i
|
|
bne !+
|
|
inc.z i+1
|
|
!:
|
|
// [79] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1]
|
|
__b1_from___b2:
|
|
// [79] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataTransfer
|
|
// Transfer a number of bytes from the CPU memory to the PPU memory
|
|
// - cpuData : Pointer to the CPU memory (RAM of ROM)
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - size : The number of bytes to transfer
|
|
ppuDataTransfer: {
|
|
.const size = $20*SIZEOF_BYTE
|
|
.label ppuData = PPU_PALETTE
|
|
.label cpuData = PALETTE
|
|
// Transfer to PPU
|
|
.label cpuSrc = 6
|
|
.label i = 4
|
|
jmp ppuDataPrepare1
|
|
// ppuDataTransfer::ppuDataPrepare1
|
|
ppuDataPrepare1:
|
|
// [85] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← >(const nomodify void*) ppuDataTransfer::ppuData#0 -- _deref_pbuc1=vbuc2
|
|
lda #>ppuData
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [86] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [87] phi from ppuDataTransfer::ppuDataPrepare1 to ppuDataTransfer::@1 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1]
|
|
__b1_from_ppuDataPrepare1:
|
|
// [87] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*)(const nomodify void*) ppuDataTransfer::cpuData#0 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1#0] -- pbuz1=pbuc1
|
|
lda #<cpuData
|
|
sta.z cpuSrc
|
|
lda #>cpuData
|
|
sta.z cpuSrc+1
|
|
// [87] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z i
|
|
lda #>0
|
|
sta.z i+1
|
|
jmp __b1
|
|
// ppuDataTransfer::@1
|
|
__b1:
|
|
// [88] if((word) ppuDataTransfer::i#2<(const word) ppuDataTransfer::size#0) goto ppuDataTransfer::@2 -- vwuz1_lt_vwuc1_then_la1
|
|
lda.z i+1
|
|
cmp #>size
|
|
bcc __b2
|
|
bne !+
|
|
lda.z i
|
|
cmp #<size
|
|
bcc __b2
|
|
!:
|
|
jmp __breturn
|
|
// ppuDataTransfer::@return
|
|
__breturn:
|
|
// [89] return
|
|
rts
|
|
// ppuDataTransfer::@2
|
|
__b2:
|
|
// [90] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (cpuSrc),y
|
|
jmp ppuDataPut1
|
|
// ppuDataTransfer::ppuDataPut1
|
|
ppuDataPut1:
|
|
// [91] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
jmp __b3
|
|
// ppuDataTransfer::@3
|
|
__b3:
|
|
// [92] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1
|
|
inc.z cpuSrc
|
|
bne !+
|
|
inc.z cpuSrc+1
|
|
!:
|
|
// [93] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1
|
|
inc.z i
|
|
bne !+
|
|
inc.z i+1
|
|
!:
|
|
// [87] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1]
|
|
__b1_from___b3:
|
|
// [87] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy
|
|
// [87] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// vblank
|
|
// NMI Called when the PPU refreshes the screen (also known as the V-Blank period)
|
|
vblank: {
|
|
// entry interrupt(HARDWARE_STACK)
|
|
pha
|
|
txa
|
|
pha
|
|
tya
|
|
pha
|
|
// [95] call readJoy1
|
|
jsr readJoy1
|
|
// [96] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2
|
|
jmp __b9
|
|
// vblank::@9
|
|
__b9:
|
|
// [97] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuxx=vbuaa
|
|
tax
|
|
// [98] (byte~) vblank::$1 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #JOY_DOWN
|
|
// [99] if((byte) 0==(byte~) vblank::$1) goto vblank::@1 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq __b1
|
|
jmp __b4
|
|
// vblank::@4
|
|
__b4:
|
|
// [100] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER
|
|
// [101] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// [102] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// [103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA
|
|
jmp __b1
|
|
// vblank::@1
|
|
__b1:
|
|
// [104] (byte~) vblank::$3 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #JOY_UP
|
|
// [105] if((byte) 0==(byte~) vblank::$3) goto vblank::@2 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq __b2
|
|
jmp __b5
|
|
// vblank::@5
|
|
__b5:
|
|
// [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER
|
|
// [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// [108] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA
|
|
jmp __b2
|
|
// vblank::@2
|
|
__b2:
|
|
// [110] (byte~) vblank::$5 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #JOY_LEFT
|
|
// [111] if((byte) 0==(byte~) vblank::$5) goto vblank::@3 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq __b3
|
|
jmp __b6
|
|
// vblank::@6
|
|
__b6:
|
|
// [112] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X
|
|
// [113] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// [115] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA
|
|
jmp __b3
|
|
// vblank::@3
|
|
__b3:
|
|
// [116] (byte~) vblank::$7 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #JOY_RIGHT
|
|
// [117] if((byte) 0==(byte~) vblank::$7) goto vblank::ppuSpriteBufferDmaTransfer1 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq ppuSpriteBufferDmaTransfer1
|
|
jmp __b7
|
|
// vblank::@7
|
|
__b7:
|
|
// [118] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X
|
|
// [119] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// [120] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// [121] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA
|
|
jmp ppuSpriteBufferDmaTransfer1
|
|
// vblank::ppuSpriteBufferDmaTransfer1
|
|
ppuSpriteBufferDmaTransfer1:
|
|
// [122] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_OAMADDR
|
|
// [123] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER -- _deref_pbuc1=vbuc2
|
|
lda #>SPRITE_BUFFER
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_OAMDMA
|
|
jmp __b8
|
|
// vblank::@8
|
|
__b8:
|
|
// [124] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
// Set scroll
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
// [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 -- _deref_pbuc1=vbuc2
|
|
lda #-8
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
jmp __breturn
|
|
// vblank::@return
|
|
__breturn:
|
|
// [126] return - exit interrupt(HARDWARE_STACK)
|
|
pla
|
|
tay
|
|
pla
|
|
tax
|
|
pla
|
|
rti
|
|
}
|
|
// readJoy1
|
|
// Read Standard Controller #1
|
|
// Returns a byte representing the pushed buttons
|
|
// - bit 0: right
|
|
// - bit 1: left
|
|
// - bit 2: down
|
|
// - bit 3: up
|
|
// - bit 4: start
|
|
// - bit 5: select
|
|
// - bit 6: B
|
|
// - bit 7: A
|
|
readJoy1: {
|
|
.label __1 = 8
|
|
// [127] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 -- _deref_pbuc1=vbuc2
|
|
// Latch the controller buttons
|
|
lda #1
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
// [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
// [129] phi from readJoy1 to readJoy1::@1 [phi:readJoy1->readJoy1::@1]
|
|
__b1_from_readJoy1:
|
|
// [129] phi (byte) readJoy1::joy#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#0] -- vbuaa=vbuc1
|
|
lda #0
|
|
// [129] phi (byte) readJoy1::i#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b1
|
|
// readJoy1::@1
|
|
__b1:
|
|
// [130] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #8
|
|
bcc __b2
|
|
jmp __breturn
|
|
// readJoy1::@return
|
|
__breturn:
|
|
// [131] return
|
|
rts
|
|
// readJoy1::@2
|
|
__b2:
|
|
// [132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuaa_rol_1
|
|
asl
|
|
sta.z __1
|
|
// [133] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 -- vbuaa=_deref_pbuc1_band_vbuc2
|
|
lda #1
|
|
and APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
// [134] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 -- vbuaa=vbuz1_bor_vbuaa
|
|
ora.z __1
|
|
// [135] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [129] phi from readJoy1::@2 to readJoy1::@1 [phi:readJoy1::@2->readJoy1::@1]
|
|
__b1_from___b2:
|
|
// [129] phi (byte) readJoy1::joy#2 = (byte) readJoy1::joy#1 [phi:readJoy1::@2->readJoy1::@1#0] -- register_copy
|
|
// [129] phi (byte) readJoy1::i#2 = (byte) readJoy1::i#1 [phi:readJoy1::@2->readJoy1::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// File Data
|
|
.segment Data
|
|
// Flag tile
|
|
FLAG: .byte $54, $55, $56, $57
|
|
// Floor tile
|
|
FLOOR: .byte $85, $85, $86, $86
|
|
// Sprite Data
|
|
SPRITES: .byte $96, $36, 2, $c, $96, $37, 2, $14, $9e, $38, 2, $c, $9e, $39, 2, $14, $96, $70, 0, $48, $96, $71, 0, $50, $9e, $72, 1, $48, $9e, $73, 1, $50
|
|
// Color Palette
|
|
PALETTE: .byte $11, $2d, 8, $18, $11, 6, $15, $36, $11, $39, $4a, $5b, $f, $3d, $4e, $5f, $11, $f, $30, 8, $11, $f, $18, 8, $11, $30, $37, $1a, $f, $f, $f, $f
|
|
.segment Tiles
|
|
TILES:
|
|
.import binary "smb1_chr.bin"
|
|
|
|
.segment GameRam
|
|
.align $100
|
|
SPRITE_BUFFER: .fill 4*$40, 0
|
|
.segment Vectors
|
|
VECTORS: .word vblank, main, 0
|
|
|
|
ASSEMBLER OPTIMIZATIONS
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __bend
|
|
Removing instruction jmp initNES1
|
|
Removing instruction jmp initNES1_disableVideoOutput1
|
|
Removing instruction jmp initNES1_disableAudioOutput1
|
|
Removing instruction jmp initNES1_clearVBlankFlag1
|
|
Removing instruction jmp initNES1_waitForVBlank1
|
|
Removing instruction jmp initNES1_waitForVBlank1___b1
|
|
Removing instruction jmp initNES1___b1
|
|
Removing instruction jmp initNES1_waitForVBlank2
|
|
Removing instruction jmp initNES1_waitForVBlank2___b1
|
|
Removing instruction jmp initNES1___b7
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __b6
|
|
Removing instruction jmp __b7
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b9
|
|
Removing instruction jmp enableVideoOutput1
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp ppuDataPrepare1
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp ppuDataPut1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp ppuDataPut2
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp ppuDataPrepare2
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp ppuDataPut3
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp ppuDataPut4
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp ppuDataPrepare1
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp ppuDataPrepare1
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp ppuDataPut1
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b9
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b6
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b7
|
|
Removing instruction jmp ppuSpriteBufferDmaTransfer1
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction lda #0
|
|
Removing instruction lda #$40
|
|
Removing instruction lda #0
|
|
Removing instruction lda #0
|
|
Removing instruction lda #0
|
|
Removing instruction lda #0
|
|
Removing instruction lda #0
|
|
Removing instruction lda #0
|
|
Removing instruction lda #0
|
|
Removing instruction ldy #0
|
|
Removing instruction lda #>0
|
|
Removing instruction lda #>0
|
|
Replacing instruction ldx #0 with TAX
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
Replacing label initNES1_waitForVBlank1___b1 with initNES1_waitForVBlank1
|
|
Replacing label initNES1___b1_from_initNES1___b1 with initNES1___b1
|
|
Replacing label initNES1_waitForVBlank2___b1 with initNES1_waitForVBlank2
|
|
Removing instruction __b1_from___bbegin:
|
|
Removing instruction __b1:
|
|
Removing instruction main_from___b1:
|
|
Removing instruction __bend_from___b1:
|
|
Removing instruction initNES1_waitForVBlank1_from_initNES1_clearVBlankFlag1:
|
|
Removing instruction initNES1_waitForVBlank1___b1:
|
|
Removing instruction initNES1___b1_from_initNES1___b1:
|
|
Removing instruction initNES1_waitForVBlank2_from_initNES1___b1:
|
|
Removing instruction initNES1_waitForVBlank2___b1:
|
|
Removing instruction __b5_from_initNES1___b7:
|
|
Removing instruction __b6_from___b5:
|
|
Removing instruction __b7_from___b6:
|
|
Removing instruction __b3_from___b1:
|
|
Removing instruction __b9_from___b3:
|
|
Removing instruction __b4_from_enableVideoOutput1:
|
|
Succesful ASM optimization Pass5RedundantLabelElimination
|
|
Removing instruction __bbegin:
|
|
Removing instruction __bend:
|
|
Removing instruction initNES1:
|
|
Removing instruction initNES1_disableVideoOutput1:
|
|
Removing instruction initNES1_disableAudioOutput1:
|
|
Removing instruction initNES1_clearVBlankFlag1:
|
|
Removing instruction initNES1___b1_from_initNES1_waitForVBlank1___b1:
|
|
Removing instruction initNES1___b7:
|
|
Removing instruction __b5:
|
|
Removing instruction ppuDataTransfer_from___b5:
|
|
Removing instruction __b6:
|
|
Removing instruction ppuDataFill_from___b6:
|
|
Removing instruction __b7:
|
|
Removing instruction ppuDataFill_from___b7:
|
|
Removing instruction __b1_from___b7:
|
|
Removing instruction __b3:
|
|
Removing instruction ppuDataPutTile_from___b3:
|
|
Removing instruction __b9:
|
|
Removing instruction memcpy_from___b9:
|
|
Removing instruction enableVideoOutput1:
|
|
Removing instruction __b4:
|
|
Removing instruction ppuDataPutTile_from___b2:
|
|
Removing instruction __b8:
|
|
Removing instruction __b1_from___b8:
|
|
Removing instruction ppuDataPrepare1:
|
|
Removing instruction __b1:
|
|
Removing instruction ppuDataPut1:
|
|
Removing instruction __b2:
|
|
Removing instruction ppuDataPut2:
|
|
Removing instruction __b3:
|
|
Removing instruction ppuDataPrepare2:
|
|
Removing instruction __b4:
|
|
Removing instruction ppuDataPut3:
|
|
Removing instruction __b5:
|
|
Removing instruction ppuDataPut4:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from_memcpy:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from___b2:
|
|
Removing instruction ppuDataPrepare1:
|
|
Removing instruction __b1_from_ppuDataPrepare1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b2:
|
|
Removing instruction __b1_from___b2:
|
|
Removing instruction ppuDataPrepare1:
|
|
Removing instruction __b1_from_ppuDataPrepare1:
|
|
Removing instruction __breturn:
|
|
Removing instruction ppuDataPut1:
|
|
Removing instruction __b3:
|
|
Removing instruction __b1_from___b3:
|
|
Removing instruction __b9:
|
|
Removing instruction __b4:
|
|
Removing instruction __b5:
|
|
Removing instruction __b6:
|
|
Removing instruction __b7:
|
|
Removing instruction __b8:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from_readJoy1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from___b2:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
Removing instruction jsr main
|
|
Succesful ASM optimization Pass5SkipBegin
|
|
Relabelling long label __b4_from___b4 to __b3
|
|
Succesful ASM optimization Pass5RelabelLongLabels
|
|
Removing instruction jmp initNES1___b1
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction lda #0
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
|
|
FINAL SYMBOL TABLE
|
|
(label) @1
|
|
(label) @begin
|
|
(label) @end
|
|
(const struct RICOH_2A03*) APU = (struct RICOH_2A03*) 16384
|
|
(const byte*) FLAG[] = { (byte) $54, (byte) $55, (byte) $56, (byte) $57 }
|
|
(const byte*) FLOOR[] = { (byte) $85, (byte) $85, (byte) $86, (byte) $86 }
|
|
(const nomodify byte*) FR_COUNTER = (byte*) 16407
|
|
(const nomodify byte) JOY_DOWN = (byte) 4
|
|
(const nomodify byte) JOY_LEFT = (byte) 2
|
|
(const nomodify byte) JOY_RIGHT = (byte) 1
|
|
(const nomodify byte) JOY_UP = (byte) 8
|
|
(const nomodify byte*) MEMORY = (byte*) 0
|
|
(const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = (byte) $10
|
|
(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1 = (byte) $16
|
|
(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA = (byte) $14
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR = (byte) 3
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR = (byte) 6
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA = (byte) 7
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK = (byte) 1
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL = (byte) 5
|
|
(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS = (byte) 2
|
|
(const byte) OFFSET_STRUCT_SPRITEDATA_X = (byte) 3
|
|
(const byte*) PALETTE[(number) $20] = { (byte) $11, (byte) $2d, (byte) 8, (byte) $18, (byte) $11, (byte) 6, (byte) $15, (byte) $36, (byte) $11, (byte) $39, (byte) $4a, (byte) $5b, (byte) $f, (byte) $3d, (byte) $4e, (byte) $5f, (byte) $11, (byte) $f, (byte) $30, (byte) 8, (byte) $11, (byte) $f, (byte) $18, (byte) 8, (byte) $11, (byte) $30, (byte) $37, (byte) $1a, (byte) $f, (byte) $f, (byte) $f, (byte) $f }
|
|
(const struct RICOH_2C02*) PPU = (struct RICOH_2C02*) 8192
|
|
(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 = (byte*) 9152
|
|
(const nomodify byte*) PPU_NAME_TABLE_0 = (byte*) 8192
|
|
(const nomodify byte*) PPU_PALETTE = (byte*) 16128
|
|
(const nomodify to_volatile byte*) PPU_PPUSTATUS = (byte*) 8194
|
|
(byte) RICOH_2A03::DMC_FREQ
|
|
(byte) RICOH_2A03::DMC_LEN
|
|
(byte) RICOH_2A03::DMC_RAW
|
|
(byte) RICOH_2A03::DMC_START
|
|
(byte) RICOH_2A03::JOY1
|
|
(byte) RICOH_2A03::JOY2
|
|
(byte) RICOH_2A03::NOISE_HI
|
|
(byte) RICOH_2A03::NOISE_LO
|
|
(byte) RICOH_2A03::NOISE_VOL
|
|
(byte) RICOH_2A03::OAMDMA
|
|
(byte) RICOH_2A03::SND_CHN
|
|
(byte) RICOH_2A03::SQ1_HI
|
|
(byte) RICOH_2A03::SQ1_LO
|
|
(byte) RICOH_2A03::SQ1_SWEEP
|
|
(byte) RICOH_2A03::SQ1_VOL
|
|
(byte) RICOH_2A03::SQ2_HI
|
|
(byte) RICOH_2A03::SQ2_LO
|
|
(byte) RICOH_2A03::SQ2_SWEEP
|
|
(byte) RICOH_2A03::SQ2_VOL
|
|
(byte) RICOH_2A03::TRI_HI
|
|
(byte) RICOH_2A03::TRI_LINEAR
|
|
(byte) RICOH_2A03::TRI_LO
|
|
(byte) RICOH_2A03::UNUSED1
|
|
(byte) RICOH_2A03::UNUSED2
|
|
(byte) RICOH_2C02::OAMADDR
|
|
(byte) RICOH_2C02::OAMDATA
|
|
(byte) RICOH_2C02::PPUADDR
|
|
(byte) RICOH_2C02::PPUCTRL
|
|
(byte) RICOH_2C02::PPUDATA
|
|
(byte) RICOH_2C02::PPUMASK
|
|
(byte) RICOH_2C02::PPUSCROLL
|
|
(volatile byte) RICOH_2C02::PPUSTATUS loadstore
|
|
(const byte) SIZEOF_BYTE = (byte) 1
|
|
(const byte) SIZEOF_STRUCT_SPRITEDATA = (byte) 4
|
|
(const struct SpriteData*) SPRITES[] = { { y: (byte) $96, tile: (byte) $36, attributes: (byte) 2, x: (byte) $c }, { y: (byte) $96, tile: (byte) $37, attributes: (byte) 2, x: (byte) $14 }, { y: (byte) $9e, tile: (byte) $38, attributes: (byte) 2, x: (byte) $c }, { y: (byte) $9e, tile: (byte) $39, attributes: (byte) 2, x: (byte) $14 }, { y: (byte) $96, tile: (byte) $70, attributes: (byte) 0, x: (byte) $48 }, { y: (byte) $96, tile: (byte) $71, attributes: (byte) 0, x: (byte) $50 }, { y: (byte) $9e, tile: (byte) $72, attributes: (byte) 1, x: (byte) $48 }, { y: (byte) $9e, tile: (byte) $73, attributes: (byte) 1, x: (byte) $50 } }
|
|
(const struct SpriteData*) SPRITE_BUFFER[(number) $40] = { fill( $40, 0) }
|
|
(byte) SpriteData::attributes
|
|
(byte) SpriteData::tile
|
|
(byte) SpriteData::x
|
|
(byte) SpriteData::y
|
|
(const byte*) TILES[] = kickasm {{ .import binary "smb1_chr.bin"
|
|
}}
|
|
(const to_nomodify void()**) VECTORS[] = { &interrupt(HARDWARE_STACK)(void()) vblank(), &(void()) main(), (void()*) 0 }
|
|
(void()) main()
|
|
(label) main::@1
|
|
(label) main::@2
|
|
(label) main::@3
|
|
(label) main::@4
|
|
(label) main::@5
|
|
(label) main::@6
|
|
(label) main::@7
|
|
(label) main::@8
|
|
(label) main::@9
|
|
(label) main::enableVideoOutput1
|
|
(label) main::initNES1
|
|
(label) main::initNES1_@1
|
|
(label) main::initNES1_@7
|
|
(label) main::initNES1_clearVBlankFlag1
|
|
(label) main::initNES1_disableAudioOutput1
|
|
(label) main::initNES1_disableVideoOutput1
|
|
(byte) main::initNES1_i
|
|
(byte) main::initNES1_i#1 reg byte x 151.5
|
|
(byte) main::initNES1_i#2 reg byte x 112.22222222222223
|
|
(label) main::initNES1_waitForVBlank1
|
|
(byte~) main::initNES1_waitForVBlank1_$0 reg byte a 202.0
|
|
(label) main::initNES1_waitForVBlank1_@1
|
|
(label) main::initNES1_waitForVBlank2
|
|
(byte~) main::initNES1_waitForVBlank2_$0 reg byte a 202.0
|
|
(label) main::initNES1_waitForVBlank2_@1
|
|
(byte) main::x
|
|
(byte) main::x#1 reg byte x 202.0
|
|
(byte) main::x#2 reg byte x 80.8
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
(label) memcpy::@1
|
|
(label) memcpy::@2
|
|
(label) memcpy::@return
|
|
(void*) memcpy::destination
|
|
(const void*) memcpy::destination#0 destination = (void*)(const struct SpriteData*) SPRITE_BUFFER
|
|
(byte*) memcpy::dst
|
|
(byte*) memcpy::dst#1 dst zp[2]:4 1001.0
|
|
(byte*) memcpy::dst#2 dst zp[2]:4 1001.0
|
|
(word) memcpy::num
|
|
(const word) memcpy::num#0 num = (byte) 8*(const byte) SIZEOF_STRUCT_SPRITEDATA
|
|
(void*) memcpy::return
|
|
(void*) memcpy::source
|
|
(const void*) memcpy::source#0 source = (void*)(const struct SpriteData*) SPRITES
|
|
(byte*) memcpy::src
|
|
(byte*) memcpy::src#1 src zp[2]:2 2002.0
|
|
(byte*) memcpy::src#2 src zp[2]:2 1001.0
|
|
(byte*) memcpy::src_end
|
|
(const byte*) memcpy::src_end#0 src_end = (byte*)(const void*) memcpy::source#0+(const word) memcpy::num#0
|
|
(void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size)
|
|
(label) ppuDataFill::@1
|
|
(label) ppuDataFill::@2
|
|
(label) ppuDataFill::@return
|
|
(word) ppuDataFill::i
|
|
(word) ppuDataFill::i#1 i zp[2]:2 2002.0
|
|
(word) ppuDataFill::i#2 i zp[2]:2 1001.0
|
|
(nomodify void*) ppuDataFill::ppuData
|
|
(label) ppuDataFill::ppuDataPrepare1
|
|
(byte~) ppuDataFill::ppuDataPrepare1_$0 reg byte a 202.0
|
|
(byte~) ppuDataFill::ppuDataPrepare1_$1 reg byte a 202.0
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData
|
|
(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:4 67.33333333333333
|
|
(label) ppuDataFill::ppuDataPut1
|
|
(byte) ppuDataFill::ppuDataPut1_val
|
|
(word) ppuDataFill::size
|
|
(word) ppuDataFill::size#3 size zp[2]:6 111.22222222222223
|
|
(byte) ppuDataFill::val
|
|
(byte) ppuDataFill::val#4 reg byte x 111.22222222222223
|
|
(void()) ppuDataPutTile((nomodify void*) ppuDataPutTile::ppuData , (byte*) ppuDataPutTile::tile)
|
|
(label) ppuDataPutTile::@1
|
|
(label) ppuDataPutTile::@2
|
|
(label) ppuDataPutTile::@3
|
|
(label) ppuDataPutTile::@4
|
|
(label) ppuDataPutTile::@5
|
|
(label) ppuDataPutTile::@return
|
|
(nomodify void*) ppuDataPutTile::ppuData
|
|
(nomodify byte*) ppuDataPutTile::ppuData#0 ppuData zp[2]:2 101.0
|
|
(nomodify void*) ppuDataPutTile::ppuData#2 ppuData zp[2]:2 233.66666666666669
|
|
(nomodify void*) ppuDataPutTile::ppuData#9 ppuData zp[2]:2 202.0
|
|
(label) ppuDataPutTile::ppuDataPrepare1
|
|
(byte~) ppuDataPutTile::ppuDataPrepare1_$0 reg byte a 2002.0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare1_$1 reg byte a 2002.0
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare1_ppuData
|
|
(label) ppuDataPutTile::ppuDataPrepare2
|
|
(byte~) ppuDataPutTile::ppuDataPrepare2_$0 reg byte a 2002.0
|
|
(byte~) ppuDataPutTile::ppuDataPrepare2_$1 reg byte a 2002.0
|
|
(nomodify void*) ppuDataPutTile::ppuDataPrepare2_ppuData
|
|
(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ppuDataPrepare2_ppuData zp[2]:2 333.6666666666667
|
|
(label) ppuDataPutTile::ppuDataPut1
|
|
(byte) ppuDataPutTile::ppuDataPut1_val
|
|
(byte) ppuDataPutTile::ppuDataPut1_val#0 reg byte a 2002.0
|
|
(label) ppuDataPutTile::ppuDataPut2
|
|
(byte) ppuDataPutTile::ppuDataPut2_val
|
|
(byte) ppuDataPutTile::ppuDataPut2_val#0 reg byte a 2002.0
|
|
(label) ppuDataPutTile::ppuDataPut3
|
|
(byte) ppuDataPutTile::ppuDataPut3_val
|
|
(byte) ppuDataPutTile::ppuDataPut3_val#0 reg byte a 2002.0
|
|
(label) ppuDataPutTile::ppuDataPut4
|
|
(byte) ppuDataPutTile::ppuDataPut4_val
|
|
(byte) ppuDataPutTile::ppuDataPut4_val#0 reg byte a 2002.0
|
|
(byte*) ppuDataPutTile::tile
|
|
(byte*) ppuDataPutTile::tile#10 tile zp[2]:4 250.25
|
|
(void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size)
|
|
(label) ppuDataTransfer::@1
|
|
(label) ppuDataTransfer::@2
|
|
(label) ppuDataTransfer::@3
|
|
(label) ppuDataTransfer::@return
|
|
(nomodify void*) ppuDataTransfer::cpuData
|
|
(const nomodify void*) ppuDataTransfer::cpuData#0 cpuData = (void*)(const byte*) PALETTE
|
|
(byte*) ppuDataTransfer::cpuSrc
|
|
(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:6 1001.0
|
|
(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:6 750.75
|
|
(word) ppuDataTransfer::i
|
|
(word) ppuDataTransfer::i#1 i zp[2]:4 2002.0
|
|
(word) ppuDataTransfer::i#2 i zp[2]:4 600.5999999999999
|
|
(nomodify void*) ppuDataTransfer::ppuData
|
|
(const nomodify void*) ppuDataTransfer::ppuData#0 ppuData = (void*)(const nomodify byte*) PPU_PALETTE
|
|
(label) ppuDataTransfer::ppuDataPrepare1
|
|
(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData
|
|
(label) ppuDataTransfer::ppuDataPut1
|
|
(byte) ppuDataTransfer::ppuDataPut1_val
|
|
(byte) ppuDataTransfer::ppuDataPut1_val#0 reg byte a 2002.0
|
|
(word) ppuDataTransfer::size
|
|
(const word) ppuDataTransfer::size#0 size = (byte) $20*(const byte) SIZEOF_BYTE
|
|
(byte()) readJoy1()
|
|
(byte~) readJoy1::$1 zp[1]:8 101.0
|
|
(byte~) readJoy1::$2 reg byte a 202.0
|
|
(label) readJoy1::@1
|
|
(label) readJoy1::@2
|
|
(label) readJoy1::@return
|
|
(byte) readJoy1::i
|
|
(byte) readJoy1::i#1 reg byte x 202.0
|
|
(byte) readJoy1::i#2 reg byte x 60.599999999999994
|
|
(byte) readJoy1::joy
|
|
(byte) readJoy1::joy#1 reg byte a 101.0
|
|
(byte) readJoy1::joy#2 reg byte a 51.0
|
|
(byte) readJoy1::return
|
|
(byte) readJoy1::return#2 reg byte a 4.0
|
|
interrupt(HARDWARE_STACK)(void()) vblank()
|
|
(byte~) vblank::$1 reg byte a 4.0
|
|
(byte~) vblank::$3 reg byte a 4.0
|
|
(byte~) vblank::$5 reg byte a 4.0
|
|
(byte~) vblank::$7 reg byte a 4.0
|
|
(label) vblank::@1
|
|
(label) vblank::@2
|
|
(label) vblank::@3
|
|
(label) vblank::@4
|
|
(label) vblank::@5
|
|
(label) vblank::@6
|
|
(label) vblank::@7
|
|
(label) vblank::@8
|
|
(label) vblank::@9
|
|
(label) vblank::@return
|
|
(byte) vblank::joy
|
|
(byte) vblank::joy#0 reg byte x 0.5263157894736842
|
|
(label) vblank::ppuSpriteBufferDmaTransfer1
|
|
(struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer
|
|
|
|
reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ]
|
|
reg byte x [ main::x#2 main::x#1 ]
|
|
reg byte x [ ppuDataFill::val#4 ]
|
|
zp[2]:2 [ ppuDataFill::i#2 ppuDataFill::i#1 memcpy::src#2 memcpy::src#1 ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ppuDataPutTile::ppuData#0 ppuDataPutTile::ppuDataPrepare2_ppuData#0 ]
|
|
zp[2]:4 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ppuDataFill::ppuDataPrepare1_ppuData#0 memcpy::dst#2 memcpy::dst#1 ppuDataPutTile::tile#10 ]
|
|
zp[2]:6 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ppuDataFill::size#3 ]
|
|
reg byte x [ readJoy1::i#2 readJoy1::i#1 ]
|
|
reg byte a [ readJoy1::joy#2 readJoy1::joy#1 ]
|
|
reg byte a [ main::initNES1_waitForVBlank1_$0 ]
|
|
reg byte a [ main::initNES1_waitForVBlank2_$0 ]
|
|
reg byte a [ ppuDataPutTile::ppuDataPrepare1_$0 ]
|
|
reg byte a [ ppuDataPutTile::ppuDataPrepare1_$1 ]
|
|
reg byte a [ ppuDataPutTile::ppuDataPut1_val#0 ]
|
|
reg byte a [ ppuDataPutTile::ppuDataPut2_val#0 ]
|
|
reg byte a [ ppuDataPutTile::ppuDataPrepare2_$0 ]
|
|
reg byte a [ ppuDataPutTile::ppuDataPrepare2_$1 ]
|
|
reg byte a [ ppuDataPutTile::ppuDataPut3_val#0 ]
|
|
reg byte a [ ppuDataPutTile::ppuDataPut4_val#0 ]
|
|
reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ]
|
|
reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ]
|
|
reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ]
|
|
reg byte a [ readJoy1::return#2 ]
|
|
reg byte x [ vblank::joy#0 ]
|
|
reg byte a [ vblank::$1 ]
|
|
reg byte a [ vblank::$3 ]
|
|
reg byte a [ vblank::$5 ]
|
|
reg byte a [ vblank::$7 ]
|
|
zp[1]:8 [ readJoy1::$1 ]
|
|
reg byte a [ readJoy1::$2 ]
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
Score: 3905
|
|
|
|
// File Comments
|
|
// A minimal NES demo
|
|
// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018.
|
|
// Nintendo Entertainment System (NES
|
|
// https://en.wikipedia.org/wiki/Nintendo_Entertainment_System_(Model_NES-101)
|
|
// https://github.com/gregkrsak/first_nes
|
|
// Ricoh 2C02 - NES Picture Processing Unit (PPU)
|
|
// Ricoh RP2C02 (NTSC version) / RP2C07 (PAL version),
|
|
// https://en.wikipedia.org/wiki/Picture_Processing_Unit
|
|
// https://wiki.nesdev.com/w/index.php/PPU_registers
|
|
// http://nesdev.com/2C02%20technical%20reference.TXT
|
|
// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018.
|
|
// Upstart
|
|
// Nintendo Entertainment System (NES) ROM
|
|
// https://sadistech.com/nesromtool/romdoc.html
|
|
// https://forums.nesdev.com/viewtopic.php?f=2&t=9896
|
|
// https://github.com/gregkrsak/first_nes
|
|
.file [name="nes-demo.nes", type="bin", segments="NesRom"]
|
|
.file [name="nes-demo.nes_hdr", type="bin", segments="Header"]
|
|
.file [name="nes-demo.nes_prg", type="bin", segments="ProgramRom"]
|
|
.file [name="nes-demo.nes_chr", type="bin", segments="CharacterRom"]
|
|
.segmentdef Header [ start=$0000, min=$0000, max=$000f, fill ]
|
|
.segmentdef Tiles [ start=$0000, min=$0000, max=$1fff, fill ]
|
|
.segmentdef Code [ start=$c000, min=$c000, max=$fff9 ]
|
|
.segmentdef Data [ startAfter="Code", min=$c000, max=$fff9 ]
|
|
.segmentdef Vectors [ start=$fffa, min=$fffa, max=$ffff ]
|
|
.segmentdef GameRam [start=$200,max=$7ff, virtual]
|
|
.segmentdef ProgramRom [ segments="Code, Data, Vectors" ]
|
|
.segmentdef CharacterRom [ segments="Tiles" ]
|
|
.segmentdef NesRom
|
|
.segment NesRom
|
|
.segmentout [ segments="Header" ]
|
|
.segmentout [ segments="ProgramRom" ]
|
|
.segmentout [ segments="CharacterRom" ]
|
|
.segment Header
|
|
.text @"NES\$1a"
|
|
.byte $01 // 1x 16KB ROM (PRG)
|
|
.byte $01 // 1x 8KB VROM (CHR)
|
|
.byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game)
|
|
// Mirroring nibble 0001 == Vertical mirroring only
|
|
.segment Code
|
|
|
|
// Global Constants & labels
|
|
// Standard Controller Right Button
|
|
.const JOY_RIGHT = 1
|
|
// Standard Controller Left Button
|
|
.const JOY_LEFT = 2
|
|
// Standard Controller Down Button
|
|
.const JOY_DOWN = 4
|
|
// Standard Controller Up Button
|
|
.const JOY_UP = 8
|
|
.const SIZEOF_STRUCT_SPRITEDATA = 4
|
|
.const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUSTATUS = 2
|
|
.const OFFSET_STRUCT_RICOH_2C02_OAMADDR = 3
|
|
.const OFFSET_STRUCT_RICOH_2A03_OAMDMA = $14
|
|
.const OFFSET_STRUCT_RICOH_2A03_JOY1 = $16
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUADDR = 6
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUDATA = 7
|
|
.const OFFSET_STRUCT_SPRITEDATA_X = 3
|
|
.const OFFSET_STRUCT_RICOH_2C02_PPUSCROLL = 5
|
|
.const SIZEOF_BYTE = 1
|
|
// $2000-$23bf $03c0 Name table 0
|
|
.label PPU_NAME_TABLE_0 = $2000
|
|
// $23c0-$23ff $0040 Attribute table 0
|
|
.label PPU_ATTRIBUTE_TABLE_0 = $23c0
|
|
// $3000-$3eff $0f00 Mirrors of $2000-$2eff
|
|
// $3f00-$3f1f $0020 Palette RAM indexes
|
|
.label PPU_PALETTE = $3f00
|
|
// PPU Status Register for reading in ASM
|
|
.label PPU_PPUSTATUS = $2002
|
|
// APU Frame Counter
|
|
// generates low-frequency clocks for the channels and an optional 60 Hz interrupt.
|
|
// https://wiki.nesdev.com/w/index.php/APU_Frame_Counter
|
|
// ------+-----+---------------------------------------------------------------
|
|
// $4017 | W | FR_COUNTER Frame Counter Set mode and interrupt
|
|
// ------+-----+---------------------------------------------------------------
|
|
// | 7 | Sequencer mode: 0 selects 4-step sequence, 1 selects 5-step sequence
|
|
// | 6 | Interrupt inhibit flag. If set, the frame interrupt flag is cleared, otherwise it is unaffected.
|
|
// ------+-----+---------------------------------------------------------------
|
|
// Side effects After 3 or 4 CPU clock cycles*, the timer is reset.
|
|
// If the mode flag is set, then both "quarter frame" and "half frame" signals are also generated.
|
|
.label FR_COUNTER = $4017
|
|
// Pointer to the start of RAM memory
|
|
.label MEMORY = 0
|
|
// NES Picture Processing Unit (PPU)
|
|
.label PPU = $2000
|
|
// NES CPU and audion processing unit (APU)
|
|
.label APU = $4000
|
|
// @begin
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
// @1
|
|
// [2] call main
|
|
// [4] phi from @1 to main [phi:@1->main]
|
|
// [3] phi from @1 to @end [phi:@1->@end]
|
|
// @end
|
|
.segment Code
|
|
// main
|
|
// RESET Called when the NES is reset, including when it is turned on.
|
|
main: {
|
|
// main::initNES1
|
|
// asm
|
|
// asm { cld ldx#$ff txs }
|
|
cld
|
|
ldx #$ff
|
|
txs
|
|
// main::initNES1_disableVideoOutput1
|
|
// PPU->PPUCTRL = 0
|
|
// [6] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU
|
|
// PPU->PPUMASK = 0
|
|
// [7] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
// main::initNES1_disableAudioOutput1
|
|
// *FR_COUNTER = 0b01000000
|
|
// [8] *((const nomodify byte*) FR_COUNTER) ← (byte) $40 -- _deref_pbuc1=vbuc2
|
|
lda #$40
|
|
sta FR_COUNTER
|
|
// APU->DMC_FREQ = 0b01000000
|
|
// [9] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_DMC_FREQ) ← (byte) $40 -- _deref_pbuc1=vbuc2
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_DMC_FREQ
|
|
// main::initNES1_clearVBlankFlag1
|
|
// asm
|
|
// asm { ldaPPU_PPUSTATUS }
|
|
lda PPU_PPUSTATUS
|
|
// [11] phi from main::initNES1_clearVBlankFlag1 to main::initNES1_waitForVBlank1 [phi:main::initNES1_clearVBlankFlag1->main::initNES1_waitForVBlank1]
|
|
// main::initNES1_waitForVBlank1
|
|
initNES1_waitForVBlank1:
|
|
// main::initNES1_waitForVBlank1_@1
|
|
// PPU->PPUSTATUS&0x80
|
|
// [12] (byte~) main::initNES1_waitForVBlank1_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 -- vbuaa=_deref_pbuc1_band_vbuc2
|
|
lda #$80
|
|
and PPU+OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
// while(!(PPU->PPUSTATUS&0x80))
|
|
// [13] if((byte) 0==(byte~) main::initNES1_waitForVBlank1_$0) goto main::initNES1_waitForVBlank1_@1 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq initNES1_waitForVBlank1
|
|
// [14] phi from main::initNES1_waitForVBlank1_@1 to main::initNES1_@1 [phi:main::initNES1_waitForVBlank1_@1->main::initNES1_@1]
|
|
// [14] phi (byte) main::initNES1_i#2 = (byte) 0 [phi:main::initNES1_waitForVBlank1_@1->main::initNES1_@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [14] phi from main::initNES1_@1 to main::initNES1_@1 [phi:main::initNES1_@1->main::initNES1_@1]
|
|
// [14] phi (byte) main::initNES1_i#2 = (byte) main::initNES1_i#1 [phi:main::initNES1_@1->main::initNES1_@1#0] -- register_copy
|
|
// main::initNES1_@1
|
|
initNES1___b1:
|
|
// (MEMORY+0x000)[i] = 0
|
|
// [15] *((const nomodify byte*) MEMORY + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #0
|
|
sta MEMORY,x
|
|
// (MEMORY+0x100)[i] = 0
|
|
// [16] *((const nomodify byte*) MEMORY+(word) $100 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
sta MEMORY+$100,x
|
|
// (MEMORY+0x200)[i] = 0
|
|
// [17] *((const nomodify byte*) MEMORY+(word) $200 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
sta MEMORY+$200,x
|
|
// (MEMORY+0x300)[i] = 0
|
|
// [18] *((const nomodify byte*) MEMORY+(word) $300 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
sta MEMORY+$300,x
|
|
// (MEMORY+0x400)[i] = 0
|
|
// [19] *((const nomodify byte*) MEMORY+(word) $400 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
sta MEMORY+$400,x
|
|
// (MEMORY+0x500)[i] = 0
|
|
// [20] *((const nomodify byte*) MEMORY+(word) $500 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
sta MEMORY+$500,x
|
|
// (MEMORY+0x600)[i] = 0
|
|
// [21] *((const nomodify byte*) MEMORY+(word) $600 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
sta MEMORY+$600,x
|
|
// (MEMORY+0x700)[i] = 0
|
|
// [22] *((const nomodify byte*) MEMORY+(word) $700 + (byte) main::initNES1_i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
|
|
sta MEMORY+$700,x
|
|
// while (++i)
|
|
// [23] (byte) main::initNES1_i#1 ← ++ (byte) main::initNES1_i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [24] if((byte) 0!=(byte) main::initNES1_i#1) goto main::initNES1_@1 -- vbuc1_neq_vbuxx_then_la1
|
|
cpx #0
|
|
bne initNES1___b1
|
|
// [25] phi from main::initNES1_@1 to main::initNES1_waitForVBlank2 [phi:main::initNES1_@1->main::initNES1_waitForVBlank2]
|
|
// main::initNES1_waitForVBlank2
|
|
initNES1_waitForVBlank2:
|
|
// main::initNES1_waitForVBlank2_@1
|
|
// PPU->PPUSTATUS&0x80
|
|
// [26] (byte~) main::initNES1_waitForVBlank2_$0 ← *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSTATUS) & (byte) $80 -- vbuaa=_deref_pbuc1_band_vbuc2
|
|
lda #$80
|
|
and PPU+OFFSET_STRUCT_RICOH_2C02_PPUSTATUS
|
|
// while(!(PPU->PPUSTATUS&0x80))
|
|
// [27] if((byte) 0==(byte~) main::initNES1_waitForVBlank2_$0) goto main::initNES1_waitForVBlank2_@1 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq initNES1_waitForVBlank2
|
|
// main::initNES1_@7
|
|
// asm
|
|
// asm { ldaPPU_PPUSTATUS }
|
|
lda PPU_PPUSTATUS
|
|
// [29] phi from main::initNES1_@7 to main::@5 [phi:main::initNES1_@7->main::@5]
|
|
// main::@5
|
|
// ppuDataTransfer(PPU_PALETTE, PALETTE, sizeof(PALETTE))
|
|
// [30] call ppuDataTransfer
|
|
// Transfer the palette
|
|
// [84] phi from main::@5 to ppuDataTransfer [phi:main::@5->ppuDataTransfer]
|
|
jsr ppuDataTransfer
|
|
// [31] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
|
|
// main::@6
|
|
// ppuDataFill(PPU_NAME_TABLE_0, 0xfc, 0x3c0)
|
|
// [32] call ppuDataFill
|
|
// Clear the name table
|
|
// [74] phi from main::@6 to ppuDataFill [phi:main::@6->ppuDataFill]
|
|
// [74] phi (byte) ppuDataFill::val#4 = (byte) $fc [phi:main::@6->ppuDataFill#0] -- vbuxx=vbuc1
|
|
ldx #$fc
|
|
// [74] phi (word) ppuDataFill::size#3 = (word) $3c0 [phi:main::@6->ppuDataFill#1] -- vwuz1=vwuc1
|
|
lda #<$3c0
|
|
sta.z ppuDataFill.size
|
|
lda #>$3c0
|
|
sta.z ppuDataFill.size+1
|
|
// [74] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1
|
|
lda #<PPU_NAME_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData
|
|
lda #>PPU_NAME_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData+1
|
|
jsr ppuDataFill
|
|
// [33] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
|
|
// main::@7
|
|
// ppuDataFill(PPU_ATTRIBUTE_TABLE_0, 0, 0x40)
|
|
// [34] call ppuDataFill
|
|
// Fill the PPU attribute table
|
|
// [74] phi from main::@7 to ppuDataFill [phi:main::@7->ppuDataFill]
|
|
// [74] phi (byte) ppuDataFill::val#4 = (byte) 0 [phi:main::@7->ppuDataFill#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [74] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@7->ppuDataFill#1] -- vwuz1=vbuc1
|
|
lda #<$40
|
|
sta.z ppuDataFill.size
|
|
lda #>$40
|
|
sta.z ppuDataFill.size+1
|
|
// [74] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@7->ppuDataFill#2] -- pvoz1=pvoc1
|
|
lda #<PPU_ATTRIBUTE_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData
|
|
lda #>PPU_ATTRIBUTE_TABLE_0
|
|
sta.z ppuDataFill.ppuDataPrepare1_ppuData+1
|
|
jsr ppuDataFill
|
|
// [35] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
|
|
// [35] phi (byte) main::x#2 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// Show floor
|
|
// main::@1
|
|
__b1:
|
|
// for(char x=0;x<32;x+=2)
|
|
// [36] if((byte) main::x#2<(byte) $20) goto main::@2 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #$20
|
|
bcc __b2
|
|
// [37] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
|
|
// main::@3
|
|
// ppuDataPutTile(PPU_NAME_TABLE_0+18*32+28, FLAG)
|
|
// [38] call ppuDataPutTile
|
|
// Show flag
|
|
// [48] phi from main::@3 to ppuDataPutTile [phi:main::@3->ppuDataPutTile]
|
|
// [48] phi (byte*) ppuDataPutTile::tile#10 = (const byte*) FLAG [phi:main::@3->ppuDataPutTile#0] -- pbuz1=pbuc1
|
|
lda #<FLAG
|
|
sta.z ppuDataPutTile.tile
|
|
lda #>FLAG
|
|
sta.z ppuDataPutTile.tile+1
|
|
// [48] phi (nomodify void*) ppuDataPutTile::ppuData#2 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $12*(number) $20+(byte) $1c [phi:main::@3->ppuDataPutTile#1] -- pvoz1=pvoc1
|
|
lda #<PPU_NAME_TABLE_0+$12*$20+$1c
|
|
sta.z ppuDataPutTile.ppuData
|
|
lda #>PPU_NAME_TABLE_0+$12*$20+$1c
|
|
sta.z ppuDataPutTile.ppuData+1
|
|
jsr ppuDataPutTile
|
|
// [39] phi from main::@3 to main::@9 [phi:main::@3->main::@9]
|
|
// main::@9
|
|
// memcpy(SPRITE_BUFFER, SPRITES, sizeof(SPRITES))
|
|
// [40] call memcpy
|
|
// Initialize Sprite Buffer with the SPRITE data
|
|
// [67] phi from main::@9 to memcpy [phi:main::@9->memcpy]
|
|
jsr memcpy
|
|
// main::enableVideoOutput1
|
|
// PPU->PPUCTRL = 0b10000000
|
|
// [41] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) $80 -- _deref_pbuc1=vbuc2
|
|
lda #$80
|
|
sta PPU
|
|
// PPU->PPUMASK = 0b00011110
|
|
// [42] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK) ← (byte) $1e -- _deref_pbuc1=vbuc2
|
|
lda #$1e
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUMASK
|
|
// [43] phi from main::@4 main::enableVideoOutput1 to main::@4 [phi:main::@4/main::enableVideoOutput1->main::@4]
|
|
__b3:
|
|
// Infinite loop
|
|
// main::@4
|
|
jmp __b3
|
|
// main::@2
|
|
__b2:
|
|
// PPU_NAME_TABLE_0+20*32+x
|
|
// [44] (nomodify byte*) ppuDataPutTile::ppuData#0 ← (const nomodify byte*) PPU_NAME_TABLE_0+(word)(number) $14*(number) $20 + (byte) main::x#2 -- pbuz1=pbuc1_plus_vbuxx
|
|
txa
|
|
clc
|
|
adc #<PPU_NAME_TABLE_0+$14*$20
|
|
sta.z ppuDataPutTile.ppuData
|
|
lda #>PPU_NAME_TABLE_0+$14*$20
|
|
adc #0
|
|
sta.z ppuDataPutTile.ppuData+1
|
|
// [45] (nomodify void*) ppuDataPutTile::ppuData#9 ← (void*)(nomodify byte*) ppuDataPutTile::ppuData#0
|
|
// ppuDataPutTile(PPU_NAME_TABLE_0+20*32+x, FLOOR)
|
|
// [46] call ppuDataPutTile
|
|
// [48] phi from main::@2 to ppuDataPutTile [phi:main::@2->ppuDataPutTile]
|
|
// [48] phi (byte*) ppuDataPutTile::tile#10 = (const byte*) FLOOR [phi:main::@2->ppuDataPutTile#0] -- pbuz1=pbuc1
|
|
lda #<FLOOR
|
|
sta.z ppuDataPutTile.tile
|
|
lda #>FLOOR
|
|
sta.z ppuDataPutTile.tile+1
|
|
// [48] phi (nomodify void*) ppuDataPutTile::ppuData#2 = (nomodify void*) ppuDataPutTile::ppuData#9 [phi:main::@2->ppuDataPutTile#1] -- register_copy
|
|
jsr ppuDataPutTile
|
|
// main::@8
|
|
// x+=2
|
|
// [47] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
|
|
inx
|
|
inx
|
|
// [35] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
|
|
// [35] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@8->main::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataPutTile
|
|
// Transfer a 2x2 tile into the PPU memory
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - tile : The tile to transfer
|
|
// ppuDataPutTile(byte* zp(2) ppuData, byte* zp(4) tile)
|
|
ppuDataPutTile: {
|
|
.label ppuDataPrepare2_ppuData = 2
|
|
.label ppuData = 2
|
|
.label tile = 4
|
|
// ppuDataPutTile::ppuDataPrepare1
|
|
// >ppuData
|
|
// [49] (byte~) ppuDataPutTile::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataPutTile::ppuData#2 -- vbuaa=_hi_pvoz1
|
|
lda.z ppuData+1
|
|
// PPU->PPUADDR = >ppuData
|
|
// [50] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// <ppuData
|
|
// [51] (byte~) ppuDataPutTile::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataPutTile::ppuData#2 -- vbuaa=_lo_pvoz1
|
|
lda.z ppuData
|
|
// PPU->PPUADDR = <ppuData
|
|
// [52] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// ppuDataPutTile::@1
|
|
// ppuDataPut(tile[0])
|
|
// [53] (byte) ppuDataPutTile::ppuDataPut1_val#0 ← *((byte*) ppuDataPutTile::tile#10) -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (tile),y
|
|
// ppuDataPutTile::ppuDataPut1
|
|
// PPU->PPUDATA = val
|
|
// [54] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
// ppuDataPutTile::@2
|
|
// ppuDataPut(tile[1])
|
|
// [55] (byte) ppuDataPutTile::ppuDataPut2_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 1) -- vbuaa=pbuz1_derefidx_vbuc1
|
|
ldy #1
|
|
lda (tile),y
|
|
// ppuDataPutTile::ppuDataPut2
|
|
// PPU->PPUDATA = val
|
|
// [56] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut2_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
// ppuDataPutTile::@3
|
|
// (char*)ppuData+32
|
|
// [57] (nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 ← (byte*)(nomodify void*) ppuDataPutTile::ppuData#2 + (byte) $20 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #$20
|
|
clc
|
|
adc.z ppuDataPrepare2_ppuData
|
|
sta.z ppuDataPrepare2_ppuData
|
|
bcc !+
|
|
inc.z ppuDataPrepare2_ppuData+1
|
|
!:
|
|
// ppuDataPutTile::ppuDataPrepare2
|
|
// >ppuData
|
|
// [58] (byte~) ppuDataPutTile::ppuDataPrepare2_$0 ← > (void*)(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 -- vbuaa=_hi_pvoz1
|
|
lda.z ppuDataPrepare2_ppuData+1
|
|
// PPU->PPUADDR = >ppuData
|
|
// [59] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// <ppuData
|
|
// [60] (byte~) ppuDataPutTile::ppuDataPrepare2_$1 ← < (void*)(nomodify byte*) ppuDataPutTile::ppuDataPrepare2_ppuData#0 -- vbuaa=_lo_pvoz1
|
|
lda.z ppuDataPrepare2_ppuData
|
|
// PPU->PPUADDR = <ppuData
|
|
// [61] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataPutTile::ppuDataPrepare2_$1 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// ppuDataPutTile::@4
|
|
// ppuDataPut(tile[2])
|
|
// [62] (byte) ppuDataPutTile::ppuDataPut3_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 2) -- vbuaa=pbuz1_derefidx_vbuc1
|
|
ldy #2
|
|
lda (tile),y
|
|
// ppuDataPutTile::ppuDataPut3
|
|
// PPU->PPUDATA = val
|
|
// [63] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut3_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
// ppuDataPutTile::@5
|
|
// ppuDataPut(tile[3])
|
|
// [64] (byte) ppuDataPutTile::ppuDataPut4_val#0 ← *((byte*) ppuDataPutTile::tile#10 + (byte) 3) -- vbuaa=pbuz1_derefidx_vbuc1
|
|
ldy #3
|
|
lda (tile),y
|
|
// ppuDataPutTile::ppuDataPut4
|
|
// PPU->PPUDATA = val
|
|
// [65] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataPutTile::ppuDataPut4_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
// ppuDataPutTile::@return
|
|
// }
|
|
// [66] return
|
|
rts
|
|
}
|
|
// memcpy
|
|
// Copy block of memory (forwards)
|
|
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
|
|
memcpy: {
|
|
.const num = 8*SIZEOF_STRUCT_SPRITEDATA
|
|
.label destination = SPRITE_BUFFER
|
|
.label source = SPRITES
|
|
.label src_end = source+num
|
|
.label dst = 4
|
|
.label src = 2
|
|
// [68] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1]
|
|
// [68] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1
|
|
lda #<destination
|
|
sta.z dst
|
|
lda #>destination
|
|
sta.z dst+1
|
|
// [68] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1
|
|
lda #<source
|
|
sta.z src
|
|
lda #>source
|
|
sta.z src+1
|
|
// memcpy::@1
|
|
__b1:
|
|
// while(src!=src_end)
|
|
// [69] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1
|
|
lda.z src+1
|
|
cmp #>src_end
|
|
bne __b2
|
|
lda.z src
|
|
cmp #<src_end
|
|
bne __b2
|
|
// memcpy::@return
|
|
// }
|
|
// [70] return
|
|
rts
|
|
// memcpy::@2
|
|
__b2:
|
|
// *dst++ = *src++
|
|
// [71] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (src),y
|
|
sta (dst),y
|
|
// *dst++ = *src++;
|
|
// [72] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
// [73] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1
|
|
inc.z src
|
|
bne !+
|
|
inc.z src+1
|
|
!:
|
|
// [68] phi from memcpy::@2 to memcpy::@1 [phi:memcpy::@2->memcpy::@1]
|
|
// [68] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy
|
|
// [68] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataFill
|
|
// Fill a number of bytes in the PPU memory
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - size : The number of bytes to transfer
|
|
// ppuDataFill(byte register(X) val, word zp(6) size)
|
|
ppuDataFill: {
|
|
.label ppuDataPrepare1_ppuData = 4
|
|
.label i = 2
|
|
.label size = 6
|
|
// ppuDataFill::ppuDataPrepare1
|
|
// >ppuData
|
|
// [75] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1
|
|
lda.z ppuDataPrepare1_ppuData+1
|
|
// PPU->PPUADDR = >ppuData
|
|
// [76] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// <ppuData
|
|
// [77] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1
|
|
lda.z ppuDataPrepare1_ppuData
|
|
// PPU->PPUADDR = <ppuData
|
|
// [78] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [79] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1]
|
|
// [79] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z i
|
|
sta.z i+1
|
|
// Transfer to PPU
|
|
// ppuDataFill::@1
|
|
__b1:
|
|
// for(unsigned int i=0;i<size;i++)
|
|
// [80] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1
|
|
lda.z i+1
|
|
cmp.z size+1
|
|
bcc ppuDataPut1
|
|
bne !+
|
|
lda.z i
|
|
cmp.z size
|
|
bcc ppuDataPut1
|
|
!:
|
|
// ppuDataFill::@return
|
|
// }
|
|
// [81] return
|
|
rts
|
|
// ppuDataFill::ppuDataPut1
|
|
ppuDataPut1:
|
|
// PPU->PPUDATA = val
|
|
// [82] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataFill::val#4 -- _deref_pbuc1=vbuxx
|
|
stx PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
// ppuDataFill::@2
|
|
// for(unsigned int i=0;i<size;i++)
|
|
// [83] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1
|
|
inc.z i
|
|
bne !+
|
|
inc.z i+1
|
|
!:
|
|
// [79] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1]
|
|
// [79] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// ppuDataTransfer
|
|
// Transfer a number of bytes from the CPU memory to the PPU memory
|
|
// - cpuData : Pointer to the CPU memory (RAM of ROM)
|
|
// - ppuData : Pointer in the PPU memory
|
|
// - size : The number of bytes to transfer
|
|
ppuDataTransfer: {
|
|
.const size = $20*SIZEOF_BYTE
|
|
.label ppuData = PPU_PALETTE
|
|
.label cpuData = PALETTE
|
|
// Transfer to PPU
|
|
.label cpuSrc = 6
|
|
.label i = 4
|
|
// ppuDataTransfer::ppuDataPrepare1
|
|
// PPU->PPUADDR = >ppuData
|
|
// [85] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← >(const nomodify void*) ppuDataTransfer::ppuData#0 -- _deref_pbuc1=vbuc2
|
|
lda #>ppuData
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// PPU->PPUADDR = <ppuData
|
|
// [86] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR
|
|
// [87] phi from ppuDataTransfer::ppuDataPrepare1 to ppuDataTransfer::@1 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1]
|
|
// [87] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*)(const nomodify void*) ppuDataTransfer::cpuData#0 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1#0] -- pbuz1=pbuc1
|
|
lda #<cpuData
|
|
sta.z cpuSrc
|
|
lda #>cpuData
|
|
sta.z cpuSrc+1
|
|
// [87] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::ppuDataPrepare1->ppuDataTransfer::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z i
|
|
sta.z i+1
|
|
// ppuDataTransfer::@1
|
|
__b1:
|
|
// for(unsigned int i=0;i<size;i++)
|
|
// [88] if((word) ppuDataTransfer::i#2<(const word) ppuDataTransfer::size#0) goto ppuDataTransfer::@2 -- vwuz1_lt_vwuc1_then_la1
|
|
lda.z i+1
|
|
cmp #>size
|
|
bcc __b2
|
|
bne !+
|
|
lda.z i
|
|
cmp #<size
|
|
bcc __b2
|
|
!:
|
|
// ppuDataTransfer::@return
|
|
// }
|
|
// [89] return
|
|
rts
|
|
// ppuDataTransfer::@2
|
|
__b2:
|
|
// ppuDataPut(*cpuSrc++)
|
|
// [90] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (cpuSrc),y
|
|
// ppuDataTransfer::ppuDataPut1
|
|
// PPU->PPUDATA = val
|
|
// [91] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA
|
|
// ppuDataTransfer::@3
|
|
// ppuDataPut(*cpuSrc++);
|
|
// [92] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1
|
|
inc.z cpuSrc
|
|
bne !+
|
|
inc.z cpuSrc+1
|
|
!:
|
|
// for(unsigned int i=0;i<size;i++)
|
|
// [93] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1
|
|
inc.z i
|
|
bne !+
|
|
inc.z i+1
|
|
!:
|
|
// [87] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1]
|
|
// [87] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy
|
|
// [87] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// vblank
|
|
// NMI Called when the PPU refreshes the screen (also known as the V-Blank period)
|
|
vblank: {
|
|
// entry interrupt(HARDWARE_STACK)
|
|
pha
|
|
txa
|
|
pha
|
|
tya
|
|
pha
|
|
// readJoy1()
|
|
// [95] call readJoy1
|
|
jsr readJoy1
|
|
// [96] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2
|
|
// vblank::@9
|
|
// joy = readJoy1()
|
|
// [97] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuxx=vbuaa
|
|
tax
|
|
// joy&JOY_DOWN
|
|
// [98] (byte~) vblank::$1 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #JOY_DOWN
|
|
// if(joy&JOY_DOWN)
|
|
// [99] if((byte) 0==(byte~) vblank::$1) goto vblank::@1 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq __b1
|
|
// vblank::@4
|
|
// SPRITE_BUFFER[0].y++;
|
|
// [100] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER
|
|
// SPRITE_BUFFER[1].y++;
|
|
// [101] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// SPRITE_BUFFER[2].y++;
|
|
// [102] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// SPRITE_BUFFER[3].y++;
|
|
// [103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA
|
|
// vblank::@1
|
|
__b1:
|
|
// joy&JOY_UP
|
|
// [104] (byte~) vblank::$3 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #JOY_UP
|
|
// if(joy&JOY_UP)
|
|
// [105] if((byte) 0==(byte~) vblank::$3) goto vblank::@2 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq __b2
|
|
// vblank::@5
|
|
// SPRITE_BUFFER[0].y--;
|
|
// [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER
|
|
// SPRITE_BUFFER[1].y--;
|
|
// [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// SPRITE_BUFFER[2].y--;
|
|
// [108] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// SPRITE_BUFFER[3].y--;
|
|
// [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+3*SIZEOF_STRUCT_SPRITEDATA
|
|
// vblank::@2
|
|
__b2:
|
|
// joy&JOY_LEFT
|
|
// [110] (byte~) vblank::$5 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #JOY_LEFT
|
|
// if(joy&JOY_LEFT)
|
|
// [111] if((byte) 0==(byte~) vblank::$5) goto vblank::@3 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq __b3
|
|
// vblank::@6
|
|
// SPRITE_BUFFER[0].x--;
|
|
// [112] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X
|
|
// SPRITE_BUFFER[1].x--;
|
|
// [113] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// SPRITE_BUFFER[2].x--;
|
|
// [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// SPRITE_BUFFER[3].x--;
|
|
// [115] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_dec__deref_pbuc1
|
|
dec SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA
|
|
// vblank::@3
|
|
__b3:
|
|
// joy&JOY_RIGHT
|
|
// [116] (byte~) vblank::$7 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #JOY_RIGHT
|
|
// if(joy&JOY_RIGHT)
|
|
// [117] if((byte) 0==(byte~) vblank::$7) goto vblank::ppuSpriteBufferDmaTransfer1 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq ppuSpriteBufferDmaTransfer1
|
|
// vblank::@7
|
|
// SPRITE_BUFFER[0].x++;
|
|
// [118] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X
|
|
// SPRITE_BUFFER[1].x++;
|
|
// [119] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 1*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+1*SIZEOF_STRUCT_SPRITEDATA
|
|
// SPRITE_BUFFER[2].x++;
|
|
// [120] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 2*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA
|
|
// SPRITE_BUFFER[3].x++;
|
|
// [121] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X+(byte) 3*(const byte) SIZEOF_STRUCT_SPRITEDATA) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA
|
|
// vblank::ppuSpriteBufferDmaTransfer1
|
|
ppuSpriteBufferDmaTransfer1:
|
|
// PPU->OAMADDR = 0
|
|
// [122] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_OAMADDR
|
|
// APU->OAMDMA = >spriteBuffer
|
|
// [123] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER -- _deref_pbuc1=vbuc2
|
|
lda #>SPRITE_BUFFER
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_OAMDMA
|
|
// vblank::@8
|
|
// PPU->PPUSCROLL = 0
|
|
// [124] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
// Set scroll
|
|
lda #0
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
// PPU->PPUSCROLL = -8
|
|
// [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 -- _deref_pbuc1=vbuc2
|
|
lda #-8
|
|
sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL
|
|
// vblank::@return
|
|
// }
|
|
// [126] return - exit interrupt(HARDWARE_STACK)
|
|
pla
|
|
tay
|
|
pla
|
|
tax
|
|
pla
|
|
rti
|
|
}
|
|
// readJoy1
|
|
// Read Standard Controller #1
|
|
// Returns a byte representing the pushed buttons
|
|
// - bit 0: right
|
|
// - bit 1: left
|
|
// - bit 2: down
|
|
// - bit 3: up
|
|
// - bit 4: start
|
|
// - bit 5: select
|
|
// - bit 6: B
|
|
// - bit 7: A
|
|
readJoy1: {
|
|
.label __1 = 8
|
|
// APU->JOY1 = 1
|
|
// [127] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 -- _deref_pbuc1=vbuc2
|
|
// Latch the controller buttons
|
|
lda #1
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
// APU->JOY1 = 0
|
|
// [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
lda #0
|
|
sta APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
// [129] phi from readJoy1 to readJoy1::@1 [phi:readJoy1->readJoy1::@1]
|
|
// [129] phi (byte) readJoy1::joy#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#0] -- vbuaa=vbuc1
|
|
// [129] phi (byte) readJoy1::i#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#1] -- vbuxx=vbuc1
|
|
tax
|
|
// readJoy1::@1
|
|
__b1:
|
|
// for(char i=0;i<8;i++)
|
|
// [130] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2 -- vbuxx_lt_vbuc1_then_la1
|
|
cpx #8
|
|
bcc __b2
|
|
// readJoy1::@return
|
|
// }
|
|
// [131] return
|
|
rts
|
|
// readJoy1::@2
|
|
__b2:
|
|
// joy<<1
|
|
// [132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuaa_rol_1
|
|
asl
|
|
sta.z __1
|
|
// APU->JOY1&1
|
|
// [133] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 -- vbuaa=_deref_pbuc1_band_vbuc2
|
|
lda #1
|
|
and APU+OFFSET_STRUCT_RICOH_2A03_JOY1
|
|
// joy = joy<<1 | APU->JOY1&1
|
|
// [134] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 -- vbuaa=vbuz1_bor_vbuaa
|
|
ora.z __1
|
|
// for(char i=0;i<8;i++)
|
|
// [135] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [129] phi from readJoy1::@2 to readJoy1::@1 [phi:readJoy1::@2->readJoy1::@1]
|
|
// [129] phi (byte) readJoy1::joy#2 = (byte) readJoy1::joy#1 [phi:readJoy1::@2->readJoy1::@1#0] -- register_copy
|
|
// [129] phi (byte) readJoy1::i#2 = (byte) readJoy1::i#1 [phi:readJoy1::@2->readJoy1::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// File Data
|
|
.segment Data
|
|
// Flag tile
|
|
FLAG: .byte $54, $55, $56, $57
|
|
// Floor tile
|
|
FLOOR: .byte $85, $85, $86, $86
|
|
// Sprite Data
|
|
SPRITES: .byte $96, $36, 2, $c, $96, $37, 2, $14, $9e, $38, 2, $c, $9e, $39, 2, $14, $96, $70, 0, $48, $96, $71, 0, $50, $9e, $72, 1, $48, $9e, $73, 1, $50
|
|
// Color Palette
|
|
PALETTE: .byte $11, $2d, 8, $18, $11, 6, $15, $36, $11, $39, $4a, $5b, $f, $3d, $4e, $5f, $11, $f, $30, 8, $11, $f, $18, 8, $11, $30, $37, $1a, $f, $f, $f, $f
|
|
.segment Tiles
|
|
TILES:
|
|
.import binary "smb1_chr.bin"
|
|
|
|
.segment GameRam
|
|
.align $100
|
|
SPRITE_BUFFER: .fill 4*$40, 0
|
|
.segment Vectors
|
|
VECTORS: .word vblank, main, 0
|
|
|