HOW TO PLAY
The HOW_TO_PLAY ($C00474) system ROM call builds and animates an "how to play" screen from a command list. Only a few games use this call.
The graphics are set up using the fix layer with hardcoded tile numbers (todo: get tilemaps).
Command list
The command list must be loaded at $10F300 (how many bytes reserved ?).
Each command is a longword (4 bytes):
- The rightmost byte is the command parameter
- The next byte is the command type (0~3)
- If the command type isn't recognized, the longword is processed as being a pointer to a MESS OUT data buffer
- The end command is $00000000
00000000 00000000 000000TT PPPPPPPP
Type 0: Loop control
- If the parameter byte is less than $FF: Set a loop counter to that value
- If the parameter byte is equal to $FF: Decrement the loop counter and loop back to the previous setup command until it reaches 0
Type 1: Joystick state
Sets the color of each joystick direction arrow.
- 1 is light blue (pressed)
- 0 is dark blue (released)
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Def | Up-Right | Right | Down-Right | Down | Down-Left | Left | Up-Left | Up |
If followed by a null command ($0.l) the next 16-bit word specifies a number of frames to wait before executing the next command.
Type 2: Buttons state
Sets the state of each button.
- 1 is pressed
- 0 is released
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Def | - | D | C | B | A |
If followed by a null command ($0.l) the next 16-bit word specifies a number of frames to wait before executing the next command.
Any other type: Text update
The longword value is a pointer to a MESS_OUT data buffer.
This command is always followed by a 16-bit word value which specifies a number of frames to wait before executing the next command.
Example
NAM-1975 sets up the following command list:
0000 0200 All buttons released 0000 01FF All arrows highlighted 0010 F3E2 MESS_OUT write "NAM 1975" "CONTROL HERO AND CURSOR" 0004 Wait 4 frames 0000 000C Init loop counter to 12 0000 0100 All arrows cleared <--------------, 0000 0000 Wait... | 0008 ...8 frames | 0000 01FF All arrows highlighted | 0000 0000 Wait... | 0008 ...8 frames | 0000 00FF Loop back (blink all arrows 12 times) --' 0000 0201 A button is pressed 0000 0100 All arrows cleared 0010 F418 MESS_OUT write "MACHINE GUN" 0004 Wait 4 frames 0000 000C Init loop counter to 12 0000 0200 All buttons released <--------------, 0000 0000 Wait... | 0008 ...8 frames | 0000 0201 A button is pressed | 0000 0000 Wait... | 0008 ...8 frames | 0000 00FF Loop back (blink A button 12 times) ----' ...