Routines |
Prev: F6EA | Up: Map | Next: F7AC |
This routine is called from the main loop at F6EA when the lesson clock has counted down to zero. It sets each character up with the appropriate command list for the next lesson, and teleports some of the minor characters (specifically, little boys 1-8 and all the little girls) to their initial destinations if possible.
|
||||||||
F74D | LD (HL),$10 | Reset the MSB of the lesson clock to 0x10 | ||||||
F74F | CALL $F858 | Clear the flags at 7F80 and 7F81 | ||||||
F752 | LD L,$DF | HL=7FDF (which holds the current lesson number) | ||||||
F754 | LD A,(HL) | Pick this up in A (0xC0-0xFF) | ||||||
F755 | INC A | Next lesson | ||||||
F756 | OR $C0 | Roll over from 0xFF to 0xC0 if necessary | ||||||
F758 | LD (HL),A | Store the new lesson number | ||||||
F759 | LD E,A | Point DE at the main timetable entry for this lesson | ||||||
F75A | LD D,$B5 | |||||||
F75C | LD A,(DE) | Pick up the lesson identifier (0x25-0x3B) in A | ||||||
F75D | LD E,A | Copy this to E | ||||||
F75E | LD D,$D2 | The lesson descriptor table is at D225 | ||||||
F760 | LD A,(DE) | Pick up the lesson descriptor in A | ||||||
F761 | INC L | Store a copy of the lesson descriptor in 7FE0 | ||||||
F762 | LD (HL),A | |||||||
F763 | DEC D | D=0xD1 (HAYLEY) | ||||||
We now enter a loop to transfer the start address of a command list into bytes 0x1B and 0x1C of each character's buffer.
|
||||||||
F764 | LD H,D | |||||||
F765 | LD A,(DE) | A=command list number for this lesson from the character's personal timetable | ||||||
F766 | EXX | |||||||
F767 | LD H,$E8 | Page 0xE8 holds the start addresses of the command lists | ||||||
F769 | LD L,A | Pick up the LSB of the command list start address in A | ||||||
F76A | LD A,(HL) | |||||||
F76B | INC L | Point HL' at the MSB | ||||||
F76C | EXX | |||||||
F76D | LD L,$1B | The LSB of the command list start address goes into byte 0x1B of the character's buffer | ||||||
F76F | LD (HL),A | |||||||
F770 | INC L | Point HL at byte 0x1C of the character's buffer | ||||||
F771 | EXX | |||||||
F772 | LD A,(HL) | A=MSB of the command list start address | ||||||
F773 | EXX | |||||||
F774 | LD (HL),A | Place this into byte 0x1C of the character's buffer | ||||||
F775 | INC L | Set bit 0 of byte 0x1D of the character's buffer, which will trigger a command list restart at the next available opportunity (i.e. after any subcommand routine whose address is currently in bytes 0x11 and 0x12 or bytes 0x09 and 0x0A of the character's buffer has finished its job; see 62D0) | ||||||
F776 | SET 0,(HL) | |||||||
F778 | LD A,H | Copy the character number to A | ||||||
F779 | CP $C6 | Are we dealing with one of the characters 0xC6-0xD1 (little boys nos. 9 and 10, the adults and the main kids)? | ||||||
F77B | JR NC,$F7A3 | Jump if so | ||||||
We are dealing with one of the characters 0xB7-0xC5 (all the little girls, and little boys 1-8), who get special treatment at the start of a new lesson. Any of them who never venture into the area that's currently on-screen will be 'teleported' to the first destination in their new command list.
|
||||||||
F77D | SET 3,(HL) | Set bit 3 of byte 0x1D, signalling to the routine at 622E (called later) that this character may be teleported | ||||||
F77F | EXX | |||||||
F780 | LD B,$01 | We let the routine at 622E consider only one character at a time | ||||||
F782 | LD H,A | H'=character number (0xB7-0xC5) | ||||||
F783 | LD A,($7FFF) | A=X (leftmost column of the play area on screen) | ||||||
F786 | CP $50 | Is X at least 80 (the middle of the assembly hall stage)? | ||||||
F788 | JR NC,$F78F | Jump if so | ||||||
F78A | LD A,H | A=character number (0xB7-0xC5) | ||||||
F78B | CP $BE | Now X<80, so set the carry flag if we're dealing with a little girl (none of whom should be on-screen) | ||||||
F78D | JR $F79F | |||||||
F78F | CP $78 | Set the carry flag if X<120 | ||||||
F791 | LD A,H | A=character number (0xB7-0xC5) | ||||||
F792 | JR NC,$F79C | Jump if X>=120 (which means none of the little boys 1-8 should be on-screen) | ||||||
F794 | CP $C1 | Are we dealing with little boys 4-8? | ||||||
F796 | JR NC,$F7A2 | Jump if so (they do venture this far into the playground) | ||||||
F798 | CP $BA | Now 80<=X<=112, so reset the carry flag if we're dealing with little girls 4-7 (who never leave the girls' skool) or little boys 1-3 (who never venture beyond the assembly hall stage) | ||||||
F79A | JR $F79E | |||||||
F79C | CP $BE | Now X>=120, so reset the carry flag if we're dealing with a little boy | ||||||
F79E | CCF | Set the carry flag if this character should be considered for teleportation | ||||||
F79F | CALL C,$622E | Teleport this character if appropriate | ||||||
F7A2 | EXX | |||||||
The loop that prepares each character for the new lesson continues here.
|
||||||||
F7A3 | DEC D | Next character | ||||||
F7A4 | LD A,D | Copy this character's number to A | ||||||
F7A5 | CP $B6 | Have we done all the characters yet? | ||||||
F7A7 | JR NZ,$F764 | Jump back if not | ||||||
F7A9 | JP $7EB1 | Print the lesson and ring the bell |
Prev: F6EA | Up: Map | Next: F7AC |