![]() |
Routines |
| H | Character number of teacher (201-204) |
| 61696 | LD A,(32736) | 32736 holds the current lesson identifier |
| 61699 | AND 240 | Keep only the teacher-identifying bits and shift them into bits 0-3 |
| 61701 | RLCA | |
| 61702 | RLCA | |
| 61703 | RLCA | |
| 61704 | RLCA | |
| 61705 | ADD A,199 | Now A=character number of the teacher taking ERIC's class (201-203) |
| 61707 | CP H | Is this teacher conducting ERIC's class? |
| 61708 | JR Z,61760 | Jump if so |
| 61710 | LD BC,26639 | Redirect control to the routine at 26639 (wipe board) and return to 61716 (below) when done |
| 61713 | CALL 25503 | |
| 61716 | LD L,1 | Point HL at byte 1 of the teacher's buffer |
| 61718 | LD A,(HL) | A=teacher's x-coordinate |
| 61719 | ADD A,3 | A=x-coordinate of the middle of the blackboard |
| 61721 | LD L,11 | Place this in byte 11 ready for the routine at 25581 |
| 61723 | LD (HL),A | |
| 61724 | LD BC,25581 | Redirect control to the routine at 25581 (walk to a location) and return to 61730 (below) when done |
| 61727 | CALL 25503 | |
| 61730 | CALL 25233 | A=random number |
| 61733 | LD BC,26752 | Routine at 26752: write on board |
| 61736 | CP 160 | Should the teacher write on the board? |
| 61738 | CALL NC,25503 | If so, redirect control to the routine at 26752 and return to 61741 (below) when done |
| 61741 | CALL 61533 | Tell the class what to do |
| 61744 | LD L,1 | Point HL at byte 1 of the teacher's buffer |
| 61746 | LD A,(HL) | A=teacher's x-coordinate |
| 61747 | XOR 3 | Now A=x-coordinate of position 3 paces behind the teacher |
| 61749 | LD L,11 | Place this in byte 11 of the teacher's buffer, ready for the routine at 25581 |
| 61751 | LD (HL),A | |
| 61752 | LD BC,25581 | Redirect control to the routine at 25581 (walk to a location) and return to 61758 (below) when done |
| 61755 | CALL 25503 | |
| 61758 | JR 61744 | Make the teacher pace up (or down) again |
| 61760 | LD A,(32640) | Set bit 6 at 32640, indicating that ERIC should be in class now |
| 61763 | SET 6,A | |
| 61765 | LD (32640),A | |
| 61768 | CALL 61512 | Are ERIC and EINSTEIN both in class? |
| 61771 | JR Z,61813 | Jump if so |
| 61773 | LD BC,61463 | Routine at 61463: make EINSTEIN talk |
| 61776 | LD E,18 | 18: Please Sir...ERIC is not here |
| 61778 | CALL 25503 | Make EINSTEIN grass on ERIC, and return to 61781 (below) when done |
| 61781 | LD C,208 | 208=EINSTEIN |
| 61783 | CALL 61487 | Give lines to EINSTEIN (maybe) |
| 61786 | CALL 32021 | Set the zero flag if ERIC is in class |
| 61789 | LD A,(32640) | 32640 holds various game status flags |
| 61792 | JR Z,61802 | Jump if ERIC is in class |
| 61794 | SET 7,A | Set bit 7 at 32640: the teacher's next absence reprimand should be 'STAY TILL I DISMISS YOU' |
| 61796 | LD (32640),A | |
| 61799 | JP 61648 | Go and find ERIC |
| 61802 | RLCA | Push bit 7 of 32640 into the carry flag |
| 61803 | LD B,20 | 20: STAY TILL I DISMISS YOU |
| 61805 | LD A,210 | 210=ERIC |
| 61807 | JR C,61810 | Jump if the teacher's already had to chase or give lines to ERIC for being late or leaving early |
| 61809 | DEC B | B=19: DON'T BE LATE AGAIN |
| 61810 | CALL 61504 | Give ERIC lines |
| 61813 | LD A,(32640) | Set bits 6 (ERIC should be in class) and 7 (the teacher's next absence reprimand should be 'STAY TILL I DISMISS YOU') at 32640 |
| 61816 | OR 192 | |
| 61818 | LD (32640),A | |
| 61821 | CALL 61512 | Is ERIC in class? |
| 61824 | JR NZ,61773 | Jump if not |
| 61826 | CALL 25233 | A=random number |
| 61829 | CP 220 | Should EINSTEIN tell tales? |
| 61831 | JR C,61852 | Jump if not |
| 61833 | LD E,87 | 87: Please Sir...ERIC hit me |
| 61835 | LD BC,61463 | Redirect control to the routine at 61463 (make EINSTEIN talk) and return to 61841 (below) when done |
| 61838 | CALL 25503 | |
| 61841 | LD BC,25042 | B=97: DON'T HIT YOUR MATES; C=210 (ERIC) |
| 61844 | CALL 61487 | Give ERIC lines |
| 61847 | CALL 61512 | Is ERIC in class? |
| 61850 | JR NZ,61773 | Jump if not |
| 61852 | CALL 26453 | Collect information about the blackboard |
| 61855 | INC B | Point BC at the second byte of the blackboard's buffer, which holds the character number of the person who last wrote on it |
| 61856 | LD C,B | |
| 61857 | LD B,127 | |
| 61859 | LD A,(BC) | Pick this up in A |
| 61860 | CP 210 | Did ERIC write on the board? |
| 61862 | JR Z,61879 | Jump if so |
| 61864 | CP 206 | Or did BOY WANDER? |
| 61866 | JR NZ,61899 | Jump if not |
| 61868 | CALL 25233 | A=random number |
| 61871 | CP 195 | Should EINSTEIN blame BOY WANDER for writing on the board? |
| 61873 | LD A,206 | 206=BOY WANDER |
| 61875 | JR C,61879 | Jump if so |
| 61877 | LD A,210 | Blame ERIC instead |
| 61879 | LD (32656),A | Place the character number of the scapegoat into 32656, so that message 7 resolves to the scapegoat's name |
| 61882 | LD BC,61463 | Routine at 61463: make EINSTEIN talk |
| 61885 | LD E,88 | 88: Please Sir...[7] wrote on the board |
| 61887 | CALL 25503 | Redirect control to the routine at 61463 and return to 61890 (below) when done |
| 61890 | LD A,(32656) | A=206 (BOY WANDER) or 210 (ERIC) |
| 61893 | LD C,A | Copy the scapegoat's character number to C |
| 61894 | LD B,86 | 86: DON'T TOUCH BLACKBOARDS |
| 61896 | CALL 61487 | Give lines to ERIC or BOY WANDER |
| 61899 | LD BC,26639 | Redirect control to the routine at 26639 (wipe board) and return to 61905 (below) when done |
| 61902 | CALL 25503 | |
| 61905 | LD L,1 | Point HL at byte 1 of the teacher's buffer |
| 61907 | LD A,(HL) | A=teacher's x-coordinate |
| 61908 | ADD A,3 | A=x-coordinate of the middle of the blackboard |
| 61910 | LD L,11 | Place this in byte 11 of the teacher's buffer, ready for the routine at 25581 |
| 61912 | LD (HL),A | |
| 61913 | LD BC,25581 | Redirect control to the routine at 25581 (walk to location) and return to 61919 (below) when done |
| 61916 | CALL 25503 |
| 61919 | CALL 61512 | Is ERIC in class? |
| 61922 | JP NZ,61773 | Jump if not |
| 61925 | CALL 25233 | A=random number |
| 61928 | LD BC,26752 | Routine at 26752: write on board |
| 61931 | CP 184 | Should the teacher write on the board? |
| 61933 | CALL NC,25503 | Redirect control to 26752 if so, and return to 61936 (below) when done |
| 61936 | CALL 61512 | Is ERIC in class? |
| 61939 | JR NZ,61922 | Jump if not |
| 61941 | CALL 25233 | A=random number |
| 61944 | CP 232 | Should this be a questions-and-answers lesson? |
| 61946 | JR C,61972 | Jump if so |
| 61948 | CALL 61533 | Tell the class what to do |
| 61951 | CALL 61512 | Is ERIC in class? |
| 61954 | JR NZ,61922 | Jump if not |
| 61956 | LD L,1 | Point HL at byte 1 of the teacher's buffer |
| 61958 | LD A,(HL) | A=teacher's x-coordinate |
| 61959 | XOR 3 | Now A=x-coordinate of location three paces behind the teacher |
| 61961 | LD L,11 | Place this in byte 11 of the teacher's buffer ready for the routine at 25581 |
| 61963 | LD (HL),A | |
| 61964 | LD BC,25581 | Redirect control to the routine at 25581 (walk to location) and return to 61970 (below) when done |
| 61967 | CALL 25503 | |
| 61970 | JR 61951 | Check whether ERIC's in class, then pace up (or down) again |
| 61972 | CALL 25233 | A=random number |
| 61975 | AND 135 | Keep only bits 0-2 (the word pair identifier) and bit 7 (indicates which word will be in the question) |
| 61977 | PUSH AF | Save bit 7 for now |
| 61978 | LD C,A | |
| 61979 | LD DE,32652 | Point DE at the first byte of message 10 |
| 61982 | LD A,H | Set A=160 (if the teacher is MR WITHIT), 176 (MR ROCKITT), or 192 (MR CREAK) |
| 61983 | SUB D | |
| 61984 | ADD A,A | |
| 61985 | ADD A,A | |
| 61986 | ADD A,A | |
| 61987 | ADD A,A | |
| 61988 | OR C | Now A holds the message number of a random mountain, animal or king |
| 61989 | LD (DE),A | Place this in 32652 (message 10) |
| 61990 | ADD A,8 | Set A to the message number of the corresponding country, habitat or date |
| 61992 | LD E,142 | Place this in 32654 (the first byte of message 11) |
| 61994 | LD (DE),A | |
| 61995 | POP AF | Restore the random bit 7 to A |
| 61996 | RLCA | Push it into the carry flag |
| 61997 | SBC A,A | Set A to 73 or 75 (MR WITHIT), 77 or 79 (MR ROCKITT), 81 or 83 (MR CREAK); this is the message number for EINSTEIN's reply |
| 61998 | ADD A,H | |
| 61999 | ADD A,H | |
| 62000 | ADD A,A | |
| 62001 | ADD A,39 | |
| 62003 | LD (53259),A | Store it in byte 11 of EINSTEIN's buffer, ready for the routine at 61467 |
| 62006 | INC A | Set E to the message number for the teacher's question |
| 62007 | LD E,A | |
| 62008 | LD BC,27144 | Redirect control to the routine at 27144 (make character speak) and return to 62014 (below) when done |
| 62011 | CALL 25503 | |
| 62014 | LD BC,61467 | Redirect control to the routine at 61467 (make EINSTEIN give answer) and return to 62020 (below) when done |
| 62017 | CALL 25503 | |
| 62020 | CALL 61512 | Is ERIC in class? |
| 62023 | JR Z,61972 | Jump if so |
| 62025 | JP 61773 | Otherwise make EINSTEIN grass on the absent ERIC |