![]() |
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 |