![]() |
Routines |
Prev: 68D4 | Up: Map |
This section of code is entered at various points. The main entry point below is used by the startup routine at 5EE0.
|
||||||||
6900 | LD SP,$5CFE | Put the stack pointer somewhere safe | ||||||
6903 | CALL $7E86 | Play the theme tune | ||||||
6906 | JR $6916 | Enter demo mode | ||||||
This entry point is used by the routine at F9F6 when ERIC has been sent home (either for having mumps or for having over 10000 lines).
|
||||||||
6908 | CALL $7ED6 | Remove the speech bubble | ||||||
690B | LD DE,($7FC4) | DE=score | ||||||
690F | AND A | Reset the carry flag ready for a subtraction | ||||||
6910 | SBC HL,DE | Subtract the score from the high score... | ||||||
6912 | ADD HL,DE | ...and add it back again | ||||||
6913 | JR NC,$6916 | Jump unless we have a new high score | ||||||
6915 | EX DE,HL | HL=new high score | ||||||
6916 | LD A,$FF | 0xFF: demo mode | ||||||
6918 | JR $6921 | |||||||
This entry point is used by the routine at 7DFA when exiting demo mode.
|
||||||||
691A | CALL $EDE0 | Ask for the input method, and change the character names (if desired) | ||||||
691D | LD HL,($7FC2) | HL=high score | ||||||
6920 | XOR A | 0x00: game mode (as opposed to demo mode) | ||||||
6921 | LD SP,$5CFE | Put the stack pointer somewhere safe | ||||||
6924 | PUSH HL | Save the high score | ||||||
6925 | LD E,A | E=0xFF (demo mode) or 0x00 | ||||||
6926 | LD A,($7FF9) | Collect the current lesson number (0x00-0x3F) from 7FF9 | ||||||
6929 | AND $30 | Set A to 0x0F, 0x1F, 0x2F or 0x3F (lessons 0x00, 0x10, 0x20, and 0x30 are PLAYTIME) | ||||||
692B | ADD A,$0F | |||||||
692D | LD D,A | D=new lesson number minus one | ||||||
692E | PUSH DE | Save this for now | ||||||
692F | CALL $F70A | Unflash the safe and all shields | ||||||
6932 | LD HL,$7FFD | 7FFD holds the number (0x98-0xAB) of the last character moved | ||||||
6935 | LD (HL),$97 | Reset this number so 0x98 (little boy no. 1) is moved next | ||||||
6937 | DEC L | Blank out the rest of the game status buffer (except for the random number seed at 7FFE) | ||||||
6938 | LD (HL),$00 | |||||||
693A | JR NZ,$6937 | |||||||
693C | LD L,$E8 | Initialise ERIC's main action timer at 7FE8 | ||||||
693E | LD (HL),$11 | |||||||
6940 | LD L,$F9 | HL=7FF9 (which holds the lesson number, 0x00-0x3F) | ||||||
6942 | POP DE | Restore the lesson number to D and game mode indicator (0x00 or 0xFF) to E | ||||||
6943 | LD (HL),D | Set the lesson number | ||||||
6944 | LD L,$F7 | Set the lesson clock (at 7FF7) to 1 | ||||||
6946 | INC (HL) | |||||||
6947 | INC E | If a new game is starting, prepare the shields and safe, and play the theme tune | ||||||
6948 | CALL NZ,$F8B4 | |||||||
694B | POP HL | Restore the high score to HL, and save it in 7FC2 | ||||||
694C | LD ($7FC2),HL | |||||||
The following loop sets the initial animatory state, location and character flags (byte 0x7A of the buffer) for each character (including ERIC).
|
||||||||
694F | LD H,$98 | 0x98=little boy no. 1 | ||||||
6951 | LD DE,$DB00 | The data table at DB00 holds the initial animatory states of the characters | ||||||
6954 | LD L,$60 | Point HL at byte 0x60 of the character buffer | ||||||
6956 | LD A,(DE) | Set the initial animatory state of the character | ||||||
6957 | LD (HL),A | |||||||
6958 | INC L | L=0x61 | ||||||
6959 | INC D | The data table at DC00 holds the initial x-coordinates of the characters | ||||||
695A | LD (HL),$A9 | All characters start on the bottom floor (y=169) | ||||||
695C | INC L | L=0x62 | ||||||
695D | LD A,(DE) | Pick up the character's initial x-coordinate | ||||||
695E | INC D | The data table at DD00 holds the character flags | ||||||
695F | LD (HL),A | Set the character's initial x-coordinate | ||||||
6960 | LD A,(DE) | Pick up the character flags (0x00=kid; 0x10=adult; 0x20=pellet) | ||||||
6961 | DEC D | Point DE back at the table of initial animatory states | ||||||
6962 | DEC D | |||||||
6963 | INC E | Next character | ||||||
6964 | LD B,$1D | Blank out the remaining 29 bytes of the character's buffer | ||||||
6966 | INC L | |||||||
6967 | LD (HL),$00 | |||||||
6969 | DJNZ $6966 | |||||||
696B | LD L,$7A | Place the character flags into byte 0x7A of the character's buffer | ||||||
696D | LD (HL),A | |||||||
696E | INC L | |||||||
696F | INC L | L=0x7C | ||||||
6970 | LD (HL),$9F | Place the address of the continual subcommand routine at 629F (RET) into bytes 0x7C and 0x7D of the character's buffer | ||||||
6972 | INC L | |||||||
6973 | LD (HL),$62 | |||||||
6975 | INC H | Next character | ||||||
6976 | INC A | Have we done all the non-player characters? | ||||||
6977 | JR NZ,$6954 | Jump back to do the next one if not | ||||||
All that remains now is to print the logo, lesson box and score box, and bring the skool into view.
|
||||||||
6979 | CALL $6B0E | Print the bottom 3 lines of the screen | ||||||
697C | JP $F918 | Scroll the skool into view and enter the main loop |
Prev: 68D4 | Up: Map |