This page contains notes for the game Viewpoint (Genesis).
Controller Test?#
When controller buttons are pressed, the corresponding bits are set in RAM address $FF1154. This memory address gets cleared when the game is paused (see $00F4B0 in the pause debug section) but otherwise appears unused.
...
00:0FB2 33 C0 MOVE.w D0,($00FF1152)
00:0FB8 81 79 OR.W D0;($00FF1154)
00:0FBE 4E 75 RTS
Pause Debug#
The debug programming is located at offset $00F4D0-00F527.
...
00:F4A8 3F 3C MOVE.w #$0001,-(A7)
00:F4AC 4E 4F TRAP #$F
00:F4B0 42 79 CLR.W ($00FF1154) //why?
00:F4B6 08 39 BTST #7,($00FF1152) //P1 controller Start
00:F4BE 66 00 BNE #$0068 [00:F528] //branch to $00F528 if P1 Start was pressed
00:F4C2 08 39 BTST #7,($00FF1153) //P2 controller Start
00:F4CA 66 00 BNE #$005C [00:F528] //branch to $00F528 if P2 Start was pressed
00:F4CE 60 D8 BRA #$D8 [00:F4A8] //pause loop (NOP this operation to access debug)
debug programming
00:F4D0 30 39 MOVE.w ($00FF1150),D0 //controller presses
00:F4D6 02 40 ANDI.W #$4040,D0 //A button
00:F4DA 67 CC BEQ #$CC [00:F4A8] //branch to $00F4A8 if A button not pressed on P1 or P2 controller
00:F4DC 30 39 MOVE.w ($00FF1152),D0 //controller presses
00:F4E2 02 40 ANDI.W #$1010,D0 //B button
00:F4E6 67 00 BEQ #$002E [00:F516] //branch to $00F516 if B button not pressed on P1 or P2 controller
00:F4EA 08 2E BTST #0,$0253(A6) //check if player 1 or player 2 is currently playing (RAM $FF4115: 01=player 1 playing, 02=player 2 playing)
00:F4F0 67 00 BEQ #$000A [00:F4FC] //branch to $00F4FC if player 2 is playing
player 1
00:F4F4 30 3C MOVE.w #$0001,D0
00:F4F8 60 00 BRA #$0006 [00:F500]
player 2
00:F4FC 30 3C MOVE.w #$FFFF,D0
00:F500 48 E7 MOVEM.L {d0-a7}[80 00],-(A7)
00:F504 4E B9 JSR ($000E2BF0)
00:F50A 4C DF MOVEM.L (A7)+,{a7-d0}[00 01]
00:F50E 4E B9 JSR ($000E32F6)
00:F514 60 92 BRA #$92 [00:F4A8] //end of A+B debug
00:F516 30 39 MOVE.w ($00FF1152),D0 //controller presses
00:F51C 02 40 ANDI.W #$2020,D0 //C button
00:F520 67 86 BEQ #$86 [00:F4A8] //branch to $00F4A8 (ie, exit debug) if C button not pressed on P1 or P2 controller
00:F522 42 2E CLR.B $0005(A6) //changes RAM address $FF3EC7 from $01 to $00 to clear stage
00:F526 60 80 BRA #$80 [00:F4A8] //end of A+C debug
resume game
00:F528 33 FC MOVE.w #$0100,($00A11100)
00:F530 08 39 BTST #0,($00A11100)
00:F538 66 F6 BNE #$F6 [00:F530]
00:F53A 13 FC MOVE.b #$80,($00A01C10)
00:F542 33 FC MOVE.w #$0000,($00A11100)
00:F54A 3F 3C MOVE.w #$0001,-(A7)
00:F54E 4E 4F TRAP #$F
00:F550 54 8F ADDQ.L #2,A7
00:F552 33 FC MOVE.w #$0000,($00FF0D6A)
00:F55A 4E 75 RTS