Prev: $00FF Up: Map Next: $09E8
$0800: Main loop
We start here after the game has loaded.
$0800 JSR $2CD9 Initialise interrupts, screen memory and page 0.
This entry point is used by the routine at $2757 to enter demo mode after a game has ended.
$0803 LDA $46 Pick up the game mode indicator from $46.
$0805 BEQ $080A Branch if we're in demo mode.
$0807 JSR $BE09 Change the characters' names if required.
$080A JSR $3AD5 Change the lesson.
$080D JSR $BA00 Play the theme tune.
$0810 JSR $3012 Bring the skool into view.
The main loop proper starts here.
$0813 LDA #$01 Initialise the timing counter at $2E to 1.
$0815 STA $2E
$0817 DEC $FD Decrement the LSB of the lesson clock at $FD.
$0819 BNE $0822 Branch unless it's zero.
$081B DEC $40 Decrement the MSB of the lesson clock at $40.
$081D BNE $0822 Branch unless it's zero.
$081F JSR $3AD5 Change the lesson.
$0822 JSR $149F Make any nearby teacher give ERIC lines if necessary.
$0825 JSR $BD00 Manage any sound effect that is currently playing.
$0828 LDA $2B Pick up ERIC's status flags from $2B.
$082A BEQ $083E Branch if ERIC is walking or standing still.
$082C JSR $15B3 Deal with ERIC if he's doing something other than walking or standing still.
$082F JSR $3AB4 Move four characters.
$0832 JSR $3AB4
$0835 JSR $3AB4
$0838 JSR $3AB4
$083B JMP $0916 Jump forward.
$083E JSR $3AB4 Move four characters.
$0841 JSR $3AB4
$0844 JSR $3AB4
$0847 JSR $3AB4
$084A LDA #$80 Set voice #3 control register: voice off, noise enabled.
$084C STA $D412
$084F DEC $E5 Decrement ERIC's midstride and input timer at $E5.
$0851 BEQ $0856 Branch if it's zero now.
$0853 JMP $0916 Otherwise jump forward to update the display before returning to the start of the main loop.
The timer at $E5 has reached zero. Time to either move ERIC from the midstride position or check for input from the keyboard or joystick.
$0856 LDA $46 Pick up the game mode indicator from $46.
$0858 BNE $0870 Branch unless we're in demo mode.
$085A LDA $4C Copy the keyboard/joystick reading from $4C to $C5 and reset $4C to zero.
$085C STA $C5
$085E LDY #$00
$0860 STY $4C
$0862 LDA $C5 Pick up the keyboard/joystick reading from $C5.
$0864 BEQ $086D Branch if there was no keyboard or joystick input.
$0866 LDA #$01 Set the game mode indicator at $46 to 1.
$0868 STA $46
$086A JMP $0803 Jump back to start a new game.
$086D JMP $0920 Jump forward to continue with demo mode.
$0870 LDA $60 Pick up the current character number from $60.
$0872 PHA Save it temporarily.
$0873 LDA #$14 Character number $14 is ERIC.
$0875 STA $60 Update the current character number at $60.
$0877 JSR $3279 Copy ERIC's character buffer into page 0.
$087A LDA $4B Pick up ERIC's midstride indicator from $4B.
$087C BEQ $0881 Branch if it's zero (ERIC is not midstride).
$087E JMP $08FF Otherwise jump forward to move ERIC from the midstride position.
Now we check for input from the keyboard or joystick.
$0881 LDA $4C Copy the keyboard/joystick reading from $4C to $C5 and then reset $4C to zero.
$0883 STA $C5
$0885 LDY #$00
$0887 STY $4C
$0889 LDA $C5 Pick up the keyboard/joystick reading from $C5.
$088B BNE $0890 Branch if there was any input.
$088D JMP $08FA Otherwise jump forward.
$0890 LDA #$04 Reset ERIC's midstride and input timer at $E5 to 4.
$0892 STA $E5
$0894 LDA $C5 Pick up the keyboard/joystick reading from $C5.
$0896 AND #$7F Clear bit 7 (which is set for joystick input).
$0898 CMP #$4F Was 'O' pressed or the joystick moved left?
$089A BNE $08A2 Branch if not.
$089C JSR $3558 Handle this keypress ('O', left).
$089F JMP $0910 Jump forward.
$08A2 CMP #$50 Was 'P' pressed or the joystick moved right?
$08A4 BNE $08AC Branch if not.
$08A6 JSR $359E Handle this keypress ('P', right).
$08A9 JMP $0910 Jump forward.
$08AC CMP #$51 Was 'Q' pressed or the joystick moved up?
$08AE BNE $08B6 Branch if not.
$08B0 JSR $350B Handle this keypress ('Q', up).
$08B3 JMP $0910 Jump forward.
$08B6 CMP #$41 Was 'A' pressed or the joystick moved down?
$08B8 BNE $08C0 Branch if not.
$08BA JSR $34B5 Handle this keypress ('A', down).
$08BD JMP $0910 Jump forward.
$08C0 CMP #$53 Was 'S' (sit/stand) pressed?
$08C2 BNE $08CA Branch if not.
$08C4 JSR $3687 Handle this keypress ('S', sit/stand).
$08C7 JMP $0910 Jump forward.
$08CA CMP #$48 Was 'H' (hit) pressed?
$08CC BNE $08D4 Branch if not.
$08CE JSR $16DF Handle this keypress ('H', hit).
$08D1 JMP $0910 Jump forward.
$08D4 CMP #$57 Was 'W' (write) pressed?
$08D6 BNE $08DE Branch if not.
$08D8 JSR $19A5 Handle this keypress ('W', write).
$08DB JMP $0910 Jump forward.
$08DE CMP #$4A Was 'J' (jump) pressed?
$08E0 BEQ $08E6 Branch if so.
$08E2 CMP #$4C Was 'L' (jump) pressed?
$08E4 BNE $08EC Branch if not.
$08E6 JSR $16D0 Handle this keypress ('J' or 'L', jump).
$08E9 JMP $0910 Jump forward.
$08EC CMP #$46 Was 'F' or the joystick fire button pressed?
$08EE BEQ $08F4 Branch if so.
$08F0 CMP #$20 Was SPACE (fire catapult) pressed?
$08F2 BNE $08F7 Branch if not.
$08F4 JSR $169B Handle this keypress ('F' or SPACE, fire).
$08F7 JMP $0910 Jump forward.
There was no keyboard input or joystick movement.
$08FA INC $E5 Increment ERIC's midstride and input timer at $E5 to 1.
$08FC JMP $0910 Jump forward.
ERIC is midstride.
$08FF LDA #$04 Reset ERIC's midstride and input timer at $E5 to 4.
$0901 STA $E5
$0903 LDA #$00 Clear ERIC's midstride indicator at $4B.
$0905 STA $4B
$0907 JSR $35EF Move ERIC from the midstride position.
$090A PLA Restore the current character number to $60.
$090B STA $60
$090D JMP $0919 Jump forward.
$0910 JSR $33BF Restore ERIC's character buffer from page 0.
$0913 PLA Restore the current character number to $60.
$0914 STA $60
$0916 JSR $31EA Update the display.
$0919 LDA $2E Wait until the interrupt routine at $39C7 has decremented the timing counter at $2E below 0.
$091B BPL $0919
$091D JMP $0813 Jump back to the start of the main loop.
We're in demo mode and there was no keyboard or joystick input.
$0920 LDA #$00 Set the score at $7C to zero.
$0922 STA $7D
$0924 STA $7C
$0926 STA $7F Set the lines total at $7E to zero.
$0928 STA $7E
$092A LDA $60 Pick up the current character number from $60 and save it temporarily.
$092C PHA
$092D LDA #$14 Set the current character number at $60 to $14 (ERIC).
$092F STA $60
$0931 JSR $3279 Copy ERIC's character buffer to page 0.
$0934 LDA $4B Pick up ERIC's midstride indicator from $4B.
$0936 BEQ $093A Branch if it's zero (ERIC is not midstride).
$0938 BNE $08FF Otherwise branch back to move ERIC from the midstride position.
$093A LDA $26 Pick up ERIC's animatory state from $26.
$093C CMP #$05 Is ERIC sitting on a chair?
$093E BEQ $094C Branch if so.
$0940 LDA $14 Pick up ERIC's posture indicator from $14.
$0942 BEQ $095C Branch if ERIC is not standing up.
$0944 LDA $2B Pick up ERIC's status flags from $2B.
$0946 AND #$10 Has ERIC just been knocked down or unseated?
$0948 BNE $095C Branch if so.
$094A BEQ $0972 Otherwise branch forward.
$094C LDA #$0A Set the current character number at $60 to $0A (little boy no. 11).
$094E STA $60
$0950 JSR $3279 Copy little boy no. 11's character buffer to page 0.
$0953 LDA $26 Pick up little boy no. 11's animatory state from $26.
$0955 CMP #$45 Is he sitting on a chair?
$0957 BNE $095C Branch if not.
$0959 JMP $09DE Jump forward.
ERIC is sitting in a chair, but little boy no. 11 isn't. ERIC should stand up now or soon.
$095C LDA $81 Pick up ERIC's stand-up delay counter from $81.
$095E BNE $0967 Branch unless it's zero at the moment.
$0960 LDA #$40 Initialise ERIC's stand-up delay counter at $81 to $40 (little boy no. 11 has only just stood up).
$0962 STA $81
$0964 JMP $09DE Jump forward.
$0967 DEC $81 Decrement ERIC's stand-up delay counter at $81.
$0969 BNE $0959 Branch unless it's time for ERIC to stand up.
$096B LDA #$53 Store the code for 'S' (sit/stand) at $C5.
$096D STA $C5
$096F JMP $09D4 Jump forward.
$0972 LDA #$0A Character number $0A is little boy no. 11. Store this character number at $4D for the following subroutine call.
$0974 STA $4D
$0976 JSR $1B2E Determine ERIC's next move in his pursuit of little boy no. 11.
$0979 BEQ $09AD Branch if ERIC will stay where he is.
$097B CMP #$01 Should ERIC go (or continue going) upstairs?
$097D BNE $0984 Branch if not.
$097F LDA #$51 This is the code for 'Q' (up).
$0981 JMP $0998 Jump forward to store this code at $C5.
$0984 CMP #$02 Should ERIC go (or continue going) downstairs?
$0986 BNE $098D Branch if not.
$0988 LDA #$41 This is the code for 'A' (down).
$098A JMP $0998 Jump forward to store this code at $C5.
$098D CMP #$03 Should ERIC go left?
$098F BNE $0996 Branch if not.
$0991 LDA #$4F This is the code for 'O' (left).
$0993 JMP $0998 Jump forward to store this code at $C5.
$0996 LDA #$50 This is the code for 'P' (right).
$0998 STA $C5 Store the code for the simulated keypress at $C5.
$099A LDA $82 Pick up the value of the interrupt counter from $82.
$099C CMP #$81 Is it $81 or more?
$099E BCS $09A3 Branch if so.
$09A0 JMP $09D4 Otherwise jump forward.
$09A3 LDA #$80 Set bit 7 of the simulated keyboard/joystick reading at $C5. This makes ERIC move faster.
$09A5 CLC
$09A6 ADC $C5
$09A8 STA $C5
$09AA JMP $09D4 Jump forward.
$09AD LDA #$0A Set the current character number at $60 to $0A (little boy no. 11).
$09AF STA $60
$09B1 JSR $3279 Copy little boy no. 11's character buffer to page 0.
$09B4 LDA $26 Pick up little boy no. 11's animatory state from $26.
$09B6 CMP #$45 Is little boy no. 11 sitting on a chair?
$09B8 BEQ $09BD Branch if so.
$09BA JMP $09DE Otherwise jump forward.
$09BD LDA #$14 Set the current character number at $60 to $14 (ERIC).
$09BF STA $60
$09C1 JSR $3279 Copy ERIC's character buffer to page 0.
$09C4 LDA $26 Pick up ERIC's animatory state from $26.
$09C6 ASL A Is ERIC facing left?
$09C7 BCC $09D0 Branch if so.
$09C9 LDA #$4F Store the code for 'O' (left) at $C5. This will make ERIC turn round and face left.
$09CB STA $C5
$09CD JMP $09D4 Jump forward.
$09D0 LDA #$53 Store the code for 'S' (sit/stand) at $C5.
$09D2 STA $C5
$09D4 LDA #$14 Set the current character number at $60 to $14 (ERIC).
$09D6 STA $60
$09D8 JSR $3279 Copy ERIC's character buffer to page 0.
$09DB JMP $0890 Jump back.
$09DE LDA #$14 Set the current character number at $60 to $14 (ERIC).
$09E0 STA $60
$09E2 JSR $3279 Copy ERIC's character buffer to page 0.
$09E5 JMP $08FA Jump back.
Prev: $00FF Up: Map Next: $09E8