diff --git a/src/test/kc/examples/nes/nes-demo.c b/src/test/kc/examples/nes/nes-demo.c index ba5e50518..e64269e96 100644 --- a/src/test/kc/examples/nes/nes-demo.c +++ b/src/test/kc/examples/nes/nes-demo.c @@ -32,33 +32,26 @@ void main() { // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) interrupt(hardware_stack) void vblank() { - // DMA transfer the entire sprite buffer to the PPU - ppuSpriteBufferDmaTransfer(SPRITE_BUFFER); - // Read controller 1 char joy = readJoy1(); - if(joy&JOY_DOWN) { SPRITE_BUFFER[0].y++; SPRITE_BUFFER[1].y++; SPRITE_BUFFER[2].y++; SPRITE_BUFFER[3].y++; } - if(joy&JOY_UP) { SPRITE_BUFFER[0].y--; SPRITE_BUFFER[1].y--; SPRITE_BUFFER[2].y--; SPRITE_BUFFER[3].y--; } - if(joy&JOY_LEFT) { SPRITE_BUFFER[0].x--; SPRITE_BUFFER[1].x--; SPRITE_BUFFER[2].x--; SPRITE_BUFFER[3].x--; } - if(joy&JOY_RIGHT) { SPRITE_BUFFER[0].x++; SPRITE_BUFFER[1].x++; @@ -66,6 +59,9 @@ interrupt(hardware_stack) void vblank() { SPRITE_BUFFER[3].x++; } + // DMA transfer the entire sprite buffer to the PPU + ppuSpriteBufferDmaTransfer(SPRITE_BUFFER); + // Set scroll PPU->PPUSCROLL = 0; PPU->PPUSCROLL = -8; @@ -82,13 +78,14 @@ char FLOOR[] = { 0x85, 0x85, 0x86, 0x86}; // Sprite Data struct SpriteData SPRITES[] = { -// Y , TILE, ATTR , X - // Small Luigi + // Small Luigi + // Y , TILE, ATTR , X { 150, 0x36, 0b00000010, 12 }, // Sprite 0 { 150, 0x37, 0b00000010, 20 }, // Sprite 1 { 158, 0x38, 0b00000010, 12 }, // Sprite 2 { 158, 0x39, 0b00000010, 20 }, // Sprite 3 // Small Goomba + // Y , TILE, ATTR , X { 150, 0x70, 0b00000000, 72 }, // Sprite 0 { 150, 0x71, 0b00000000, 80 }, // Sprite 1 { 158, 0x72, 0b00000001, 72 }, // Sprite 2 @@ -116,7 +113,7 @@ export char TILES[] = kickasm(resource "smb1_chr.bin") {{ }}; // Sprite Buffer (in GAME RAM) -// Will be transfered to the PPU via DMA during vblank +// Will be transferred to the PPU via DMA during vblank #pragma data_seg(GameRam) struct SpriteData align(0x100) SPRITE_BUFFER[0x40]; diff --git a/src/test/ref/examples/nes/nes-demo.asm b/src/test/ref/examples/nes/nes-demo.asm index 11b65feb1..f7fd6efd3 100644 --- a/src/test/ref/examples/nes/nes-demo.asm +++ b/src/test/ref/examples/nes/nes-demo.asm @@ -411,12 +411,6 @@ vblank: { pha tya pha - // PPU->OAMADDR = 0 - lda #0 - sta PPU+OFFSET_STRUCT_RICOH_2C02_OAMADDR - // APU->OAMDMA = >spriteBuffer - lda #>SPRITE_BUFFER - sta APU+OFFSET_STRUCT_RICOH_2A03_OAMDMA // readJoy1() jsr readJoy1 // joy = readJoy1() @@ -471,7 +465,7 @@ vblank: { and #JOY_RIGHT // if(joy&JOY_RIGHT) cmp #0 - beq __b4 + beq ppuSpriteBufferDmaTransfer1 // SPRITE_BUFFER[0].x++; inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X // SPRITE_BUFFER[1].x++; @@ -480,7 +474,13 @@ vblank: { inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+2*SIZEOF_STRUCT_SPRITEDATA // SPRITE_BUFFER[3].x++; inc SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X+3*SIZEOF_STRUCT_SPRITEDATA - __b4: + ppuSpriteBufferDmaTransfer1: + // PPU->OAMADDR = 0 + lda #0 + sta PPU+OFFSET_STRUCT_RICOH_2C02_OAMADDR + // APU->OAMDMA = >spriteBuffer + lda #>SPRITE_BUFFER + sta APU+OFFSET_STRUCT_RICOH_2A03_OAMDMA // PPU->PPUSCROLL = 0 // Set scroll lda #0 diff --git a/src/test/ref/examples/nes/nes-demo.cfg b/src/test/ref/examples/nes/nes-demo.cfg index 924e784fb..a0f03dc15 100644 --- a/src/test/ref/examples/nes/nes-demo.cfg +++ b/src/test/ref/examples/nes/nes-demo.cfg @@ -218,81 +218,78 @@ ppuDataTransfer::@3: scope:[ppuDataTransfer] from ppuDataTransfer::ppuDataPut1 interrupt(HARDWARE_STACK)(void()) vblank() vblank: scope:[vblank] from [94] phi() - to:vblank::ppuSpriteBufferDmaTransfer1 -vblank::ppuSpriteBufferDmaTransfer1: scope:[vblank] from vblank - [95] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0 - [96] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER + [95] call readJoy1 + [96] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 to:vblank::@9 -vblank::@9: scope:[vblank] from vblank::ppuSpriteBufferDmaTransfer1 - [97] phi() - [98] call readJoy1 - [99] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 - to:vblank::@10 -vblank::@10: scope:[vblank] from vblank::@9 - [100] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 - [101] (byte~) vblank::$2 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN - [102] if((byte) 0==(byte~) vblank::$2) goto vblank::@1 - to:vblank::@5 -vblank::@5: scope:[vblank] from vblank::@10 - [103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER) - [104] *((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) - [105] *((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) - [106] *((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::@10 vblank::@5 - [107] (byte~) vblank::$4 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP - [108] if((byte) 0==(byte~) vblank::$4) goto vblank::@2 - to:vblank::@6 -vblank::@6: scope:[vblank] from vblank::@1 - [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER) - [110] *((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) - [111] *((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) - [112] *((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::@6 - [113] (byte~) vblank::$6 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT - [114] if((byte) 0==(byte~) vblank::$6) goto vblank::@3 - to:vblank::@7 -vblank::@7: scope:[vblank] from vblank::@2 - [115] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) - [116] *((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) - [117] *((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) - [118] *((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::@7 - [119] (byte~) vblank::$8 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT - [120] if((byte) 0==(byte~) vblank::$8) goto vblank::@4 - to:vblank::@8 -vblank::@8: scope:[vblank] from vblank::@3 - [121] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) - [122] *((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) - [123] *((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) - [124] *((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) +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::@3 vblank::@8 - [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 - [126] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 +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::@4 - [127] return +vblank::@return: scope:[vblank] from vblank::@8 + [126] return to:@return (byte()) readJoy1() -readJoy1: scope:[readJoy1] from vblank::@9 - [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 - [129] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 +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 - [130] (byte) readJoy1::joy#2 ← phi( readJoy1/(byte) 0 readJoy1::@2/(byte) readJoy1::joy#1 ) - [130] (byte) readJoy1::i#2 ← phi( readJoy1/(byte) 0 readJoy1::@2/(byte) readJoy1::i#1 ) - [131] if((byte) readJoy1::i#2<(byte) 8) goto 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 - [132] return + [131] return to:@return readJoy1::@2: scope:[readJoy1] from readJoy1::@1 - [133] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 - [134] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 - [135] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 - [136] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 + [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 diff --git a/src/test/ref/examples/nes/nes-demo.log b/src/test/ref/examples/nes/nes-demo.log index 0e7d541d6..3afd19af2 100644 --- a/src/test/ref/examples/nes/nes-demo.log +++ b/src/test/ref/examples/nes/nes-demo.log @@ -80,7 +80,7 @@ CONTROL FLOW GRAPH SSA to:@1 (byte()) readJoy1() -readJoy1: scope:[readJoy1] from vblank::@9 +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 @@ -494,37 +494,24 @@ main::@return: scope:[main] from main::@4 interrupt(HARDWARE_STACK)(void()) vblank() vblank: scope:[vblank] from - (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 ← (const struct SpriteData*) SPRITE_BUFFER - to:vblank::ppuSpriteBufferDmaTransfer1 -vblank::ppuSpriteBufferDmaTransfer1: scope:[vblank] from vblank - (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#1 ← phi( vblank/(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 call readJoy1 (byte) readJoy1::return#2 ← (byte) readJoy1::return#1 to:vblank::@10 -vblank::@10: scope:[vblank] from vblank::@9 - (byte) readJoy1::return#4 ← phi( vblank::@9/(byte) readJoy1::return#2 ) - (byte~) vblank::$1 ← (byte) readJoy1::return#4 - (byte) vblank::joy#0 ← (byte~) vblank::$1 - (byte~) vblank::$2 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN - (bool~) vblank::$62 ← (number) 0 != (byte~) vblank::$2 - (bool~) vblank::$3 ← ! (bool~) vblank::$62 - if((bool~) vblank::$3) goto vblank::@1 +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::$4 ← (byte) vblank::joy#1 & (const nomodify byte) JOY_UP - (bool~) vblank::$63 ← (number) 0 != (byte~) vblank::$4 - (bool~) vblank::$5 ← ! (bool~) vblank::$63 - if((bool~) vblank::$5) goto vblank::@2 + (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 ) @@ -539,10 +526,10 @@ vblank::@5: scope:[vblank] from vblank::@10 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::$6 ← (byte) vblank::joy#2 & (const nomodify byte) JOY_LEFT - (bool~) vblank::$64 ← (number) 0 != (byte~) vblank::$6 - (bool~) vblank::$7 ← ! (bool~) vblank::$64 - if((bool~) vblank::$7) goto vblank::@3 + (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 ) @@ -557,10 +544,10 @@ vblank::@6: scope:[vblank] from vblank::@1 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::$8 ← (byte) vblank::joy#3 & (const nomodify byte) JOY_RIGHT - (bool~) vblank::$65 ← (number) 0 != (byte~) vblank::$8 - (bool~) vblank::$9 ← ! (bool~) vblank::$65 - if((bool~) vblank::$9) goto vblank::@4 + (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 ) @@ -574,6 +561,19 @@ vblank::@7: scope:[vblank] from vblank::@2 *((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 @@ -591,7 +591,7 @@ vblank::@8: scope:[vblank] from vblank::@3 (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::@4 +vblank::@return: scope:[vblank] from vblank::@9 return to:@return @1: scope:[] from @begin @@ -993,39 +993,39 @@ SYMBOL TABLE SSA (byte) readJoy1::return#3 (byte) readJoy1::return#4 interrupt(HARDWARE_STACK)(void()) vblank() +(byte~) vblank::$0 (byte~) vblank::$1 -(byte~) vblank::$2 +(bool~) vblank::$2 (number~) vblank::$27 (number~) vblank::$29 -(bool~) vblank::$3 +(byte~) vblank::$3 (number~) vblank::$31 (number~) vblank::$33 (number~) vblank::$35 (number~) vblank::$37 (number~) vblank::$39 -(byte~) vblank::$4 +(bool~) vblank::$4 (number~) vblank::$41 (number~) vblank::$43 (number~) vblank::$45 (number~) vblank::$47 (number~) vblank::$49 -(bool~) vblank::$5 +(byte~) vblank::$5 (number~) vblank::$51 (number~) vblank::$53 (number~) vblank::$55 (number~) vblank::$57 (byte*~) vblank::$58 (byte*~) vblank::$59 -(byte~) vblank::$6 +(bool~) vblank::$6 (byte*~) vblank::$60 (byte*~) vblank::$61 (bool~) vblank::$62 (bool~) vblank::$63 (bool~) vblank::$64 (bool~) vblank::$65 -(bool~) vblank::$7 -(byte~) vblank::$8 -(bool~) vblank::$9 +(byte~) vblank::$7 +(bool~) vblank::$8 (label) vblank::@1 (label) vblank::@10 (label) vblank::@2 @@ -1105,9 +1105,8 @@ Adding number conversion cast (unumber) $1c in (nomodify void*) ppuDataPutTile:: 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) $18 in *((byte*~) main::enableVideoOutput1_$1) ← (number) $18 -Adding number conversion cast (unumber) 0 in *((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1) ← (number) 0 -Adding number conversion cast (unumber) 0 in (bool~) vblank::$62 ← (number) 0 != (byte~) vblank::$2 -Adding number conversion cast (unumber) 0 in (bool~) vblank::$63 ← (number) 0 != (byte~) vblank::$4 +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 @@ -1116,7 +1115,7 @@ Adding number conversion cast (unumber) 2 in (number~) vblank::$31 ← (number) 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::$6 +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 @@ -1125,7 +1124,7 @@ Adding number conversion cast (unumber) 2 in (number~) vblank::$39 ← (number) 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::$8 +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 @@ -1134,6 +1133,7 @@ Adding number conversion cast (unumber) 2 in (number~) vblank::$47 ← (number) 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 @@ -1227,7 +1227,6 @@ Simplifying constant integer cast $18 Simplifying constant integer cast 0 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 @@ -1242,6 +1241,7 @@ 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 @@ -1295,7 +1295,6 @@ Finalized unsigned number type (byte) $18 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 (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 @@ -1310,6 +1309,7 @@ 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 @@ -1338,10 +1338,10 @@ Inferred type updated to byte in (unumber~) vblank::$55 ← (byte) 2 * (const by 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 [239] (bool~) vblank::$3 ← (byte) 0 == (byte~) vblank::$2 from [238] (bool~) vblank::$62 ← (byte) 0 != (byte~) vblank::$2 -Inversing boolean not [244] (bool~) vblank::$5 ← (byte) 0 == (byte~) vblank::$4 from [243] (bool~) vblank::$63 ← (byte) 0 != (byte~) vblank::$4 -Inversing boolean not [258] (bool~) vblank::$7 ← (byte) 0 == (byte~) vblank::$6 from [257] (bool~) vblank::$64 ← (byte) 0 != (byte~) vblank::$6 -Inversing boolean not [272] (bool~) vblank::$9 ← (byte) 0 == (byte~) vblank::$8 from [271] (bool~) vblank::$65 ← (byte) 0 != (byte~) vblank::$8 +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 @@ -1374,11 +1374,11 @@ Alias memcpy::destination#2 = memcpy::destination#4 memcpy::destination#3 memcpy Alias ppuDataTransfer::size#0 = main::$1 Alias main::x#2 = main::x#3 main::x#4 Alias memcpy::num#0 = main::$6 -Alias vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 = vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#1 Alias readJoy1::return#2 = readJoy1::return#4 -Alias vblank::joy#0 = vblank::$1 vblank::joy#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 @@ -1403,10 +1403,10 @@ Simple Condition (bool~) main::initNES1_$5 [135] if((byte) 0!=(byte) main::initN 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::$3 [193] if((byte) 0==(byte~) vblank::$2) goto vblank::@1 -Simple Condition (bool~) vblank::$5 [196] if((byte) 0==(byte~) vblank::$4) goto vblank::@2 -Simple Condition (bool~) vblank::$7 [207] if((byte) 0==(byte~) vblank::$6) goto vblank::@3 -Simple Condition (bool~) vblank::$9 [218] if((byte) 0==(byte~) vblank::$8) goto vblank::@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 @@ -1434,20 +1434,20 @@ Constant right-side identified [142] (word) ppuDataTransfer::size#0 ← sizeof 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 [181] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$3 ← (byte*)(const struct RICOH_2C02*) PPU -Constant right-side identified [185] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$4 ← (byte*)(const struct RICOH_2A03*) APU -Constant right-side identified [197] (byte~) vblank::$27 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [199] (byte~) vblank::$29 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [201] (byte~) vblank::$31 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [203] (byte~) vblank::$33 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [208] (byte~) vblank::$35 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [210] (byte~) vblank::$37 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [212] (byte~) vblank::$39 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [214] (byte~) vblank::$41 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [219] (byte~) vblank::$43 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [221] (byte~) vblank::$45 ← (byte) 1 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [223] (byte~) vblank::$47 ← (byte) 2 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Constant right-side identified [225] (byte~) vblank::$49 ← (byte) 3 * (const byte) SIZEOF_STRUCT_SPRITEDATA +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 @@ -1500,9 +1500,6 @@ 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 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::$27 = 0*SIZEOF_STRUCT_SPRITEDATA Constant (const byte) vblank::$29 = 1*SIZEOF_STRUCT_SPRITEDATA Constant (const byte) vblank::$31 = 2*SIZEOF_STRUCT_SPRITEDATA @@ -1515,6 +1512,9 @@ 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 @@ -1554,8 +1554,8 @@ Converting *(pointer+n) to pointer[n] [120] (byte~) main::initNES1_waitForVBlank 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) $18 -- *(main::enableVideoOutput1_$3 + OFFSET_STRUCT_RICOH_2C02_PPUMASK) -Converting *(pointer+n) to pointer[n] [183] *((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1) ← (byte) 0 -- *(vblank::ppuSpriteBufferDmaTransfer1_$3 + OFFSET_STRUCT_RICOH_2C02_OAMADDR) -Converting *(pointer+n) to pointer[n] [187] *((byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2) ← (byte~) vblank::ppuSpriteBufferDmaTransfer1_$0 -- *(vblank::ppuSpriteBufferDmaTransfer1_$4 + OFFSET_STRUCT_RICOH_2A03_OAMDMA) +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 @@ -1570,28 +1570,28 @@ Simplifying expression containing zero main::initNES1_disableVideoOutput1_$2 in 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 [198] *((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 [198] *((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 [198] *((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 [198] *((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 [200] *((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 [200] *((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 [202] *((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 [202] *((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 [204] *((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 [204] *((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 [209] *((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 [209] *((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 [209] *((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 [209] *((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 [211] *((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 [211] *((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 [213] *((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 [213] *((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 [215] *((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 [215] *((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 [220] *((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 [220] *((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_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 @@ -1619,8 +1619,8 @@ Eliminating unused variable (byte*~) main::initNES1_waitForVBlank1_$2 and assign 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 [118] (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 [121] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2 ← (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$4 + (const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA +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 @@ -1639,7 +1639,7 @@ 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 [94] (byte~) vblank::ppuSpriteBufferDmaTransfer1_$0 ← > (const struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#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 = (const struct SpriteData*) SPRITE_BUFFER + [95] call readJoy1 + [96] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 to:vblank::@9 -vblank::@9: scope:[vblank] from vblank::ppuSpriteBufferDmaTransfer1 - [97] phi() - [98] call readJoy1 - [99] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 - to:vblank::@10 -vblank::@10: scope:[vblank] from vblank::@9 - [100] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 - [101] (byte~) vblank::$2 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN - [102] if((byte) 0==(byte~) vblank::$2) goto vblank::@1 - to:vblank::@5 -vblank::@5: scope:[vblank] from vblank::@10 - [103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER) - [104] *((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) - [105] *((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) - [106] *((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::@10 vblank::@5 - [107] (byte~) vblank::$4 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP - [108] if((byte) 0==(byte~) vblank::$4) goto vblank::@2 - to:vblank::@6 -vblank::@6: scope:[vblank] from vblank::@1 - [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER) - [110] *((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) - [111] *((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) - [112] *((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::@6 - [113] (byte~) vblank::$6 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT - [114] if((byte) 0==(byte~) vblank::$6) goto vblank::@3 - to:vblank::@7 -vblank::@7: scope:[vblank] from vblank::@2 - [115] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) - [116] *((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) - [117] *((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) - [118] *((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::@7 - [119] (byte~) vblank::$8 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT - [120] if((byte) 0==(byte~) vblank::$8) goto vblank::@4 - to:vblank::@8 -vblank::@8: scope:[vblank] from vblank::@3 - [121] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X) - [122] *((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) - [123] *((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) - [124] *((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) +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::@3 vblank::@8 - [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 - [126] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 +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::@4 - [127] return +vblank::@return: scope:[vblank] from vblank::@8 + [126] return to:@return (byte()) readJoy1() -readJoy1: scope:[readJoy1] from vblank::@9 - [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 - [129] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 +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 - [130] (byte) readJoy1::joy#2 ← phi( readJoy1/(byte) 0 readJoy1::@2/(byte) readJoy1::joy#1 ) - [130] (byte) readJoy1::i#2 ← phi( readJoy1/(byte) 0 readJoy1::@2/(byte) readJoy1::i#1 ) - [131] if((byte) readJoy1::i#2<(byte) 8) goto 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 - [132] return + [131] return to:@return readJoy1::@2: scope:[readJoy1] from readJoy1::@1 - [133] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 - [134] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 - [135] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 - [136] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 + [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 @@ -2288,10 +2291,10 @@ VARIABLE REGISTER WEIGHTS (byte) readJoy1::return (byte) readJoy1::return#2 4.0 interrupt(HARDWARE_STACK)(void()) vblank() -(byte~) vblank::$2 4.0 -(byte~) vblank::$4 4.0 -(byte~) vblank::$6 4.0 -(byte~) vblank::$8 4.0 +(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 @@ -2328,10 +2331,10 @@ Added variable ppuDataFill::ppuDataPrepare1_$1 to live range equivalence class [ 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::$2 to live range equivalence class [ vblank::$2 ] -Added variable vblank::$4 to live range equivalence class [ vblank::$4 ] -Added variable vblank::$6 to live range equivalence class [ vblank::$6 ] -Added variable vblank::$8 to live range equivalence class [ vblank::$8 ] +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 @@ -2366,10 +2369,10 @@ Complete equivalence classes [ ppuDataTransfer::ppuDataPut1_val#0 ] [ readJoy1::return#2 ] [ vblank::joy#0 ] -[ vblank::$2 ] -[ vblank::$4 ] -[ vblank::$6 ] -[ vblank::$8 ] +[ vblank::$1 ] +[ vblank::$3 ] +[ vblank::$5 ] +[ vblank::$7 ] [ readJoy1::$1 ] [ readJoy1::$2 ] Allocated zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] @@ -2403,10 +2406,10 @@ 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::$2 ] -Allocated zp[1]:45 [ vblank::$4 ] -Allocated zp[1]:46 [ vblank::$6 ] -Allocated zp[1]:47 [ vblank::$8 ] +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 ] @@ -3120,10 +3123,10 @@ ppuDataTransfer: { // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - .label __2 = $2c - .label __4 = $2d - .label __6 = $2e - .label __8 = $2f + .label __1 = $2c + .label __3 = $2d + .label __5 = $2e + .label __7 = $2f .label joy = $2b // entry interrupt(HARDWARE_STACK) pha @@ -3131,130 +3134,125 @@ vblank: { pha tya pha - jmp ppuSpriteBufferDmaTransfer1 - // vblank::ppuSpriteBufferDmaTransfer1 - ppuSpriteBufferDmaTransfer1: - // [95] *((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 - // [96] *((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 - // [97] phi from vblank::ppuSpriteBufferDmaTransfer1 to vblank::@9 [phi:vblank::ppuSpriteBufferDmaTransfer1->vblank::@9] - __b9_from_ppuSpriteBufferDmaTransfer1: + // [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: - // [98] call readJoy1 - jsr readJoy1 - // [99] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 -- vbuz1=vbuz2 - lda.z readJoy1.joy - sta.z readJoy1.return - jmp __b10 - // vblank::@10 - __b10: - // [100] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuz1=vbuz2 + // [97] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuz1=vbuz2 lda.z readJoy1.return sta.z joy - // [101] (byte~) vblank::$2 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN -- vbuz1=vbuz2_band_vbuc1 + // [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 __2 - // [102] if((byte) 0==(byte~) vblank::$2) goto vblank::@1 -- vbuc1_eq_vbuz1_then_la1 + sta.z __1 + // [99] if((byte) 0==(byte~) vblank::$1) goto vblank::@1 -- vbuc1_eq_vbuz1_then_la1 lda #0 - cmp.z __2 + cmp.z __1 beq __b1 - jmp __b5 - // vblank::@5 - __b5: - // [103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_inc__deref_pbuc1 + 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 - // [104] *((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 + // [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 - // [105] *((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 + // [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 - // [106] *((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 + // [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: - // [107] (byte~) vblank::$4 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP -- vbuz1=vbuz2_band_vbuc1 + // [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 __4 - // [108] if((byte) 0==(byte~) vblank::$4) goto vblank::@2 -- vbuc1_eq_vbuz1_then_la1 + sta.z __3 + // [105] if((byte) 0==(byte~) vblank::$3) goto vblank::@2 -- vbuc1_eq_vbuz1_then_la1 lda #0 - cmp.z __4 + cmp.z __3 beq __b2 - jmp __b6 - // vblank::@6 - __b6: - // [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_dec__deref_pbuc1 + 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 - // [110] *((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 + // [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 - // [111] *((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 + // [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 - // [112] *((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 + // [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: - // [113] (byte~) vblank::$6 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT -- vbuz1=vbuz2_band_vbuc1 + // [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 __6 - // [114] if((byte) 0==(byte~) vblank::$6) goto vblank::@3 -- vbuc1_eq_vbuz1_then_la1 + sta.z __5 + // [111] if((byte) 0==(byte~) vblank::$5) goto vblank::@3 -- vbuc1_eq_vbuz1_then_la1 lda #0 - cmp.z __6 + cmp.z __5 beq __b3 - jmp __b7 - // vblank::@7 - __b7: - // [115] *((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 + 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 - // [116] *((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 + // [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 - // [117] *((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 + // [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 - // [118] *((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 + // [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: - // [119] (byte~) vblank::$8 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT -- vbuz1=vbuz2_band_vbuc1 + // [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 __8 - // [120] if((byte) 0==(byte~) vblank::$8) goto vblank::@4 -- vbuc1_eq_vbuz1_then_la1 + sta.z __7 + // [117] if((byte) 0==(byte~) vblank::$7) goto vblank::ppuSpriteBufferDmaTransfer1 -- vbuc1_eq_vbuz1_then_la1 lda #0 - cmp.z __8 - beq __b4 + 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: - // [121] *((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 - // [122] *((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 - // [123] *((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 - // [124] *((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 __b4 - // vblank::@4 - __b4: - // [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [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 - // [126] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 -- _deref_pbuc1=vbuc2 + // [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: - // [127] return - exit interrupt(HARDWARE_STACK) + // [126] return - exit interrupt(HARDWARE_STACK) pla tay pla @@ -3279,53 +3277,53 @@ readJoy1: { .label joy = $18 .label i = $17 .label return = $2a - // [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [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 - // [129] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [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 - // [130] phi from readJoy1 to readJoy1::@1 [phi:readJoy1->readJoy1::@1] + // [129] phi from readJoy1 to readJoy1::@1 [phi:readJoy1->readJoy1::@1] __b1_from_readJoy1: - // [130] phi (byte) readJoy1::joy#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#0] -- vbuz1=vbuc1 + // [129] phi (byte) readJoy1::joy#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#0] -- vbuz1=vbuc1 lda #0 sta.z joy - // [130] phi (byte) readJoy1::i#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#1] -- vbuz1=vbuc1 + // [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: - // [131] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2 -- vbuz1_lt_vbuc1_then_la1 + // [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: - // [132] return + // [131] return rts // readJoy1::@2 __b2: - // [133] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z joy asl sta.z __1 - // [134] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 -- vbuz1=_deref_pbuc1_band_vbuc2 + // [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 - // [135] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 -- vbuz1=vbuz2_bor_vbuz3 + // [134] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 -- vbuz1=vbuz2_bor_vbuz3 lda.z __1 ora.z __2 sta.z joy - // [136] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuz1=_inc_vbuz1 + // [135] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [130] phi from readJoy1::@2 to readJoy1::@1 [phi:readJoy1::@2->readJoy1::@1] + // [129] phi from readJoy1::@2 to readJoy1::@1 [phi:readJoy1::@2->readJoy1::@1] __b1_from___b2: - // [130] phi (byte) readJoy1::joy#2 = (byte) readJoy1::joy#1 [phi:readJoy1::@2->readJoy1::@1#0] -- register_copy - // [130] phi (byte) readJoy1::i#2 = (byte) readJoy1::i#1 [phi:readJoy1::@2->readJoy1::@1#1] -- register_copy + // [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 @@ -3392,21 +3390,21 @@ Statement [85] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUC 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 [95] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [96] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER [ ] ( [ ] { } ) always clobbers reg byte a -Statement [101] (byte~) vblank::$2 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN [ vblank::joy#0 vblank::$2 ] ( [ vblank::joy#0 vblank::$2 ] { } ) always clobbers reg byte a +Statement [98] (byte~) vblank::$1 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN [ vblank::joy#0 vblank::$1 ] ( [ vblank::joy#0 vblank::$1 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:43 [ vblank::joy#0 ] -Statement [107] (byte~) vblank::$4 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP [ vblank::joy#0 vblank::$4 ] ( [ vblank::joy#0 vblank::$4 ] { } ) always clobbers reg byte a -Statement [113] (byte~) vblank::$6 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT [ vblank::joy#0 vblank::$6 ] ( [ vblank::joy#0 vblank::$6 ] { } ) always clobbers reg byte a -Statement [119] (byte~) vblank::$8 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT [ vblank::$8 ] ( [ vblank::$8 ] { } ) always clobbers reg byte a -Statement [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [126] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [127] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 [ ] ( readJoy1:98 [ ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a -Statement [129] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 [ ] ( readJoy1:98 [ ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a -Statement [133] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 [ readJoy1::i#2 readJoy1::$1 ] ( readJoy1:98 [ readJoy1::i#2 readJoy1::$1 ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a +Statement [104] (byte~) vblank::$3 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP [ vblank::joy#0 vblank::$3 ] ( [ vblank::joy#0 vblank::$3 ] { } ) always clobbers reg byte a +Statement [110] (byte~) vblank::$5 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT [ vblank::joy#0 vblank::$5 ] ( [ vblank::joy#0 vblank::$5 ] { } ) always clobbers reg byte a +Statement [116] (byte~) vblank::$7 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT [ vblank::$7 ] ( [ vblank::$7 ] { } ) always clobbers reg byte a +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 [134] (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:98 [ readJoy1::i#2 readJoy1::$1 readJoy1::$2 ] { { 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 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 @@ -3447,19 +3445,19 @@ Statement [85] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUC 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 [95] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [96] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA) ← >(const struct SpriteData*) SPRITE_BUFFER [ ] ( [ ] { } ) always clobbers reg byte a -Statement [101] (byte~) vblank::$2 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN [ vblank::joy#0 vblank::$2 ] ( [ vblank::joy#0 vblank::$2 ] { } ) always clobbers reg byte a -Statement [107] (byte~) vblank::$4 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP [ vblank::joy#0 vblank::$4 ] ( [ vblank::joy#0 vblank::$4 ] { } ) always clobbers reg byte a -Statement [113] (byte~) vblank::$6 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT [ vblank::joy#0 vblank::$6 ] ( [ vblank::joy#0 vblank::$6 ] { } ) always clobbers reg byte a -Statement [119] (byte~) vblank::$8 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT [ vblank::$8 ] ( [ vblank::$8 ] { } ) always clobbers reg byte a -Statement [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [126] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [127] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 [ ] ( readJoy1:98 [ ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a -Statement [129] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 [ ] ( readJoy1:98 [ ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a -Statement [133] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 [ readJoy1::i#2 readJoy1::$1 ] ( readJoy1:98 [ readJoy1::i#2 readJoy1::$1 ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a -Statement [134] (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:98 [ readJoy1::i#2 readJoy1::$1 readJoy1::$2 ] { { readJoy1::return#2 = readJoy1::joy#2 } } ) always clobbers reg byte a +Statement [98] (byte~) vblank::$1 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN [ vblank::joy#0 vblank::$1 ] ( [ vblank::joy#0 vblank::$1 ] { } ) always clobbers reg byte a +Statement [104] (byte~) vblank::$3 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP [ vblank::joy#0 vblank::$3 ] ( [ vblank::joy#0 vblank::$3 ] { } ) always clobbers reg byte a +Statement [110] (byte~) vblank::$5 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT [ vblank::joy#0 vblank::$5 ] ( [ vblank::joy#0 vblank::$5 ] { } ) always clobbers reg byte a +Statement [116] (byte~) vblank::$7 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT [ vblank::$7 ] ( [ vblank::$7 ] { } ) always clobbers reg byte a +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 , @@ -3491,10 +3489,10 @@ Potential registers zp[1]:40 [ ppuDataFill::ppuDataPrepare1_$1 ] : zp[1]:40 , re 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 x , reg byte y , -Potential registers zp[1]:44 [ vblank::$2 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:45 [ vblank::$4 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:46 [ vblank::$6 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ vblank::$8 ] : zp[1]:47 , 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 , @@ -3505,40 +3503,40 @@ Uplift Scope [memcpy] 3,003: zp[2]:8 [ memcpy::src#2 memcpy::src#1 ] 2,002: zp[2 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::$2 ] 4: zp[1]:45 [ vblank::$4 ] 4: zp[1]:46 [ vblank::$6 ] 4: zp[1]:47 [ vblank::$8 ] 0.53: zp[1]:43 [ vblank::joy#0 ] +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 6044 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 ] +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 5984 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 5984 combination zp[2]:8 [ memcpy::src#2 memcpy::src#1 ] zp[2]:10 [ memcpy::dst#2 memcpy::dst#1 ] -Uplifting [ppuDataFill] best 5936 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 5356 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 5113 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 ] +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 5089 combination reg byte a [ vblank::$2 ] reg byte a [ vblank::$4 ] reg byte a [ vblank::$6 ] reg byte a [ vblank::$8 ] zp[1]:43 [ vblank::joy#0 ] +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 768 possible. -Uplifting [RICOH_2C02] best 5089 combination -Uplifting [RICOH_2A03] best 5089 combination -Uplifting [SpriteData] best 5089 combination -Uplifting [] best 5089 combination +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 5083 combination reg byte a [ 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 5077 combination reg byte a [ 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 5071 combination reg byte a [ 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 5065 combination reg byte a [ 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 5065 combination zp[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 5059 combination reg byte a [ 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 5054 combination reg byte x [ 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 ] ] @@ -4203,119 +4201,114 @@ vblank: { pha tya pha - jmp ppuSpriteBufferDmaTransfer1 - // vblank::ppuSpriteBufferDmaTransfer1 - ppuSpriteBufferDmaTransfer1: - // [95] *((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 - // [96] *((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 - // [97] phi from vblank::ppuSpriteBufferDmaTransfer1 to vblank::@9 [phi:vblank::ppuSpriteBufferDmaTransfer1->vblank::@9] - __b9_from_ppuSpriteBufferDmaTransfer1: + // [95] call readJoy1 + jsr readJoy1 + // [96] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 jmp __b9 // vblank::@9 __b9: - // [98] call readJoy1 - jsr readJoy1 - // [99] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 - jmp __b10 - // vblank::@10 - __b10: - // [100] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuxx=vbuaa + // [97] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuxx=vbuaa tax - // [101] (byte~) vblank::$2 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN -- vbuaa=vbuxx_band_vbuc1 + // [98] (byte~) vblank::$1 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN -- vbuaa=vbuxx_band_vbuc1 txa and #JOY_DOWN - // [102] if((byte) 0==(byte~) vblank::$2) goto vblank::@1 -- vbuc1_eq_vbuaa_then_la1 + // [99] if((byte) 0==(byte~) vblank::$1) goto vblank::@1 -- vbuc1_eq_vbuaa_then_la1 cmp #0 beq __b1 - jmp __b5 - // vblank::@5 - __b5: - // [103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_inc__deref_pbuc1 + 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 - // [104] *((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 + // [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 - // [105] *((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 + // [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 - // [106] *((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 + // [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: - // [107] (byte~) vblank::$4 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP -- vbuaa=vbuxx_band_vbuc1 + // [104] (byte~) vblank::$3 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP -- vbuaa=vbuxx_band_vbuc1 txa and #JOY_UP - // [108] if((byte) 0==(byte~) vblank::$4) goto vblank::@2 -- vbuc1_eq_vbuaa_then_la1 + // [105] if((byte) 0==(byte~) vblank::$3) goto vblank::@2 -- vbuc1_eq_vbuaa_then_la1 cmp #0 beq __b2 - jmp __b6 - // vblank::@6 - __b6: - // [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_dec__deref_pbuc1 + 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 - // [110] *((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 + // [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 - // [111] *((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 + // [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 - // [112] *((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 + // [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: - // [113] (byte~) vblank::$6 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT -- vbuaa=vbuxx_band_vbuc1 + // [110] (byte~) vblank::$5 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT -- vbuaa=vbuxx_band_vbuc1 txa and #JOY_LEFT - // [114] if((byte) 0==(byte~) vblank::$6) goto vblank::@3 -- vbuc1_eq_vbuaa_then_la1 + // [111] if((byte) 0==(byte~) vblank::$5) goto vblank::@3 -- vbuc1_eq_vbuaa_then_la1 cmp #0 beq __b3 - jmp __b7 - // vblank::@7 - __b7: - // [115] *((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 + 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 - // [116] *((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 + // [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 - // [117] *((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 + // [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 - // [118] *((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 + // [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: - // [119] (byte~) vblank::$8 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT -- vbuaa=vbuxx_band_vbuc1 + // [116] (byte~) vblank::$7 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT -- vbuaa=vbuxx_band_vbuc1 txa and #JOY_RIGHT - // [120] if((byte) 0==(byte~) vblank::$8) goto vblank::@4 -- vbuc1_eq_vbuaa_then_la1 + // [117] if((byte) 0==(byte~) vblank::$7) goto vblank::ppuSpriteBufferDmaTransfer1 -- vbuc1_eq_vbuaa_then_la1 cmp #0 - beq __b4 + 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: - // [121] *((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 - // [122] *((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 - // [123] *((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 - // [124] *((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 __b4 - // vblank::@4 - __b4: - // [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [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 - // [126] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 -- _deref_pbuc1=vbuc2 + // [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: - // [127] return - exit interrupt(HARDWARE_STACK) + // [126] return - exit interrupt(HARDWARE_STACK) pla tay pla @@ -4336,46 +4329,46 @@ vblank: { // - bit 7: A readJoy1: { .label __1 = 8 - // [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [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 - // [129] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [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 - // [130] phi from readJoy1 to readJoy1::@1 [phi:readJoy1->readJoy1::@1] + // [129] phi from readJoy1 to readJoy1::@1 [phi:readJoy1->readJoy1::@1] __b1_from_readJoy1: - // [130] phi (byte) readJoy1::joy#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#0] -- vbuaa=vbuc1 + // [129] phi (byte) readJoy1::joy#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#0] -- vbuaa=vbuc1 lda #0 - // [130] phi (byte) readJoy1::i#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#1] -- vbuxx=vbuc1 + // [129] phi (byte) readJoy1::i#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#1] -- vbuxx=vbuc1 ldx #0 jmp __b1 // readJoy1::@1 __b1: - // [131] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2 -- vbuxx_lt_vbuc1_then_la1 + // [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: - // [132] return + // [131] return rts // readJoy1::@2 __b2: - // [133] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuaa_rol_1 + // [132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuaa_rol_1 asl sta.z __1 - // [134] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 -- vbuaa=_deref_pbuc1_band_vbuc2 + // [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 - // [135] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 -- vbuaa=vbuz1_bor_vbuaa + // [134] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 -- vbuaa=vbuz1_bor_vbuaa ora.z __1 - // [136] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuxx=_inc_vbuxx + // [135] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuxx=_inc_vbuxx inx - // [130] phi from readJoy1::@2 to readJoy1::@1 [phi:readJoy1::@2->readJoy1::@1] + // [129] phi from readJoy1::@2 to readJoy1::@1 [phi:readJoy1::@2->readJoy1::@1] __b1_from___b2: - // [130] phi (byte) readJoy1::joy#2 = (byte) readJoy1::joy#1 [phi:readJoy1::@2->readJoy1::@1#0] -- register_copy - // [130] phi (byte) readJoy1::i#2 = (byte) readJoy1::i#1 [phi:readJoy1::@2->readJoy1::@1#1] -- register_copy + // [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 @@ -4443,17 +4436,16 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp ppuDataPut1 Removing instruction jmp __b3 -Removing instruction jmp ppuSpriteBufferDmaTransfer1 Removing instruction jmp __b9 -Removing instruction jmp __b10 -Removing instruction jmp __b5 -Removing instruction jmp __b1 -Removing instruction jmp __b6 -Removing instruction jmp __b2 -Removing instruction jmp __b7 -Removing instruction jmp __b3 -Removing instruction jmp __b8 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 @@ -4490,7 +4482,6 @@ Removing instruction __b7_from___b6: Removing instruction __b3_from___b1: Removing instruction __b9_from___b3: Removing instruction __b4_from_enableVideoOutput1: -Removing instruction __b9_from_ppuSpriteBufferDmaTransfer1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __bbegin: Removing instruction __bend: @@ -4542,9 +4533,8 @@ Removing instruction __breturn: Removing instruction ppuDataPut1: Removing instruction __b3: Removing instruction __b1_from___b3: -Removing instruction ppuSpriteBufferDmaTransfer1: Removing instruction __b9: -Removing instruction __b10: +Removing instruction __b4: Removing instruction __b5: Removing instruction __b6: Removing instruction __b7: @@ -4773,12 +4763,11 @@ FINAL SYMBOL TABLE (byte) readJoy1::return (byte) readJoy1::return#2 reg byte a 4.0 interrupt(HARDWARE_STACK)(void()) vblank() -(byte~) vblank::$2 reg byte a 4.0 -(byte~) vblank::$4 reg byte a 4.0 -(byte~) vblank::$6 reg byte a 4.0 -(byte~) vblank::$8 reg byte a 4.0 +(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::@10 (label) vblank::@2 (label) vblank::@3 (label) vblank::@4 @@ -4816,10 +4805,10 @@ 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::$2 ] -reg byte a [ vblank::$4 ] -reg byte a [ vblank::$6 ] -reg byte a [ vblank::$8 ] +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 ] @@ -5423,129 +5412,127 @@ vblank: { pha tya pha - // vblank::ppuSpriteBufferDmaTransfer1 - // PPU->OAMADDR = 0 - // [95] *((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 - // [96] *((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 - // [97] phi from vblank::ppuSpriteBufferDmaTransfer1 to vblank::@9 [phi:vblank::ppuSpriteBufferDmaTransfer1->vblank::@9] - // vblank::@9 // readJoy1() - // [98] call readJoy1 + // [95] call readJoy1 jsr readJoy1 - // [99] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 - // vblank::@10 + // [96] (byte) readJoy1::return#2 ← (byte) readJoy1::joy#2 + // vblank::@9 // joy = readJoy1() - // [100] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuxx=vbuaa + // [97] (byte) vblank::joy#0 ← (byte) readJoy1::return#2 -- vbuxx=vbuaa tax // joy&JOY_DOWN - // [101] (byte~) vblank::$2 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_DOWN -- vbuaa=vbuxx_band_vbuc1 + // [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) - // [102] if((byte) 0==(byte~) vblank::$2) goto vblank::@1 -- vbuc1_eq_vbuaa_then_la1 + // [99] if((byte) 0==(byte~) vblank::$1) goto vblank::@1 -- vbuc1_eq_vbuaa_then_la1 cmp #0 beq __b1 - // vblank::@5 + // vblank::@4 // SPRITE_BUFFER[0].y++; - // [103] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← ++ *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_inc__deref_pbuc1 + // [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++; - // [104] *((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 + // [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++; - // [105] *((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 + // [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++; - // [106] *((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 + // [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 - // [107] (byte~) vblank::$4 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_UP -- vbuaa=vbuxx_band_vbuc1 + // [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) - // [108] if((byte) 0==(byte~) vblank::$4) goto vblank::@2 -- vbuc1_eq_vbuaa_then_la1 + // [105] if((byte) 0==(byte~) vblank::$3) goto vblank::@2 -- vbuc1_eq_vbuaa_then_la1 cmp #0 beq __b2 - // vblank::@6 + // vblank::@5 // SPRITE_BUFFER[0].y--; - // [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER) ← -- *((byte*)(const struct SpriteData*) SPRITE_BUFFER) -- _deref_pbuc1=_dec__deref_pbuc1 + // [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--; - // [110] *((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 + // [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--; - // [111] *((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 + // [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--; - // [112] *((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 + // [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 - // [113] (byte~) vblank::$6 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_LEFT -- vbuaa=vbuxx_band_vbuc1 + // [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) - // [114] if((byte) 0==(byte~) vblank::$6) goto vblank::@3 -- vbuc1_eq_vbuaa_then_la1 + // [111] if((byte) 0==(byte~) vblank::$5) goto vblank::@3 -- vbuc1_eq_vbuaa_then_la1 cmp #0 beq __b3 - // vblank::@7 + // vblank::@6 // SPRITE_BUFFER[0].x--; - // [115] *((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 + // [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--; - // [116] *((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 + // [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--; - // [117] *((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 + // [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--; - // [118] *((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 + // [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 - // [119] (byte~) vblank::$8 ← (byte) vblank::joy#0 & (const nomodify byte) JOY_RIGHT -- vbuaa=vbuxx_band_vbuc1 + // [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) - // [120] if((byte) 0==(byte~) vblank::$8) goto vblank::@4 -- vbuc1_eq_vbuaa_then_la1 + // [117] if((byte) 0==(byte~) vblank::$7) goto vblank::ppuSpriteBufferDmaTransfer1 -- vbuc1_eq_vbuaa_then_la1 cmp #0 - beq __b4 - // vblank::@8 + beq ppuSpriteBufferDmaTransfer1 + // vblank::@7 // SPRITE_BUFFER[0].x++; - // [121] *((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 + // [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++; - // [122] *((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 + // [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++; - // [123] *((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 + // [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++; - // [124] *((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 + // [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::@4 - __b4: + // 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 - // [125] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [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 - // [126] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) -8 -- _deref_pbuc1=vbuc2 + // [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 // } - // [127] return - exit interrupt(HARDWARE_STACK) + // [126] return - exit interrupt(HARDWARE_STACK) pla tay pla @@ -5567,47 +5554,47 @@ vblank: { readJoy1: { .label __1 = 8 // APU->JOY1 = 1 - // [128] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [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 - // [129] *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [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 - // [130] phi from readJoy1 to readJoy1::@1 [phi:readJoy1->readJoy1::@1] - // [130] phi (byte) readJoy1::joy#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#0] -- vbuaa=vbuc1 - // [130] phi (byte) readJoy1::i#2 = (byte) 0 [phi:readJoy1->readJoy1::@1#1] -- vbuxx=vbuc1 + // [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++) - // [131] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2 -- vbuxx_lt_vbuc1_then_la1 + // [130] if((byte) readJoy1::i#2<(byte) 8) goto readJoy1::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #8 bcc __b2 // readJoy1::@return // } - // [132] return + // [131] return rts // readJoy1::@2 __b2: // joy<<1 - // [133] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuaa_rol_1 + // [132] (byte~) readJoy1::$1 ← (byte) readJoy1::joy#2 << (byte) 1 -- vbuz1=vbuaa_rol_1 asl sta.z __1 // APU->JOY1&1 - // [134] (byte~) readJoy1::$2 ← *((byte*)(const struct RICOH_2A03*) APU+(const byte) OFFSET_STRUCT_RICOH_2A03_JOY1) & (byte) 1 -- vbuaa=_deref_pbuc1_band_vbuc2 + // [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 - // [135] (byte) readJoy1::joy#1 ← (byte~) readJoy1::$1 | (byte~) readJoy1::$2 -- vbuaa=vbuz1_bor_vbuaa + // [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++) - // [136] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuxx=_inc_vbuxx + // [135] (byte) readJoy1::i#1 ← ++ (byte) readJoy1::i#2 -- vbuxx=_inc_vbuxx inx - // [130] phi from readJoy1::@2 to readJoy1::@1 [phi:readJoy1::@2->readJoy1::@1] - // [130] phi (byte) readJoy1::joy#2 = (byte) readJoy1::joy#1 [phi:readJoy1::@2->readJoy1::@1#0] -- register_copy - // [130] phi (byte) readJoy1::i#2 = (byte) readJoy1::i#1 [phi:readJoy1::@2->readJoy1::@1#1] -- register_copy + // [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 diff --git a/src/test/ref/examples/nes/nes-demo.sym b/src/test/ref/examples/nes/nes-demo.sym index cf24a577f..ef64da553 100644 --- a/src/test/ref/examples/nes/nes-demo.sym +++ b/src/test/ref/examples/nes/nes-demo.sym @@ -207,12 +207,11 @@ (byte) readJoy1::return (byte) readJoy1::return#2 reg byte a 4.0 interrupt(HARDWARE_STACK)(void()) vblank() -(byte~) vblank::$2 reg byte a 4.0 -(byte~) vblank::$4 reg byte a 4.0 -(byte~) vblank::$6 reg byte a 4.0 -(byte~) vblank::$8 reg byte a 4.0 +(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::@10 (label) vblank::@2 (label) vblank::@3 (label) vblank::@4 @@ -250,9 +249,9 @@ 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::$2 ] -reg byte a [ vblank::$4 ] -reg byte a [ vblank::$6 ] -reg byte a [ vblank::$8 ] +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 ]