![]() |
Routines |
| Prev: 680D | Up: Map | Next: 687E |
|
The address of this interruptible subcommand routine is placed into bytes 0x09 and 0x0A of the teacher's buffer by the routine at F100.
|
||||||||
| 680F | CALL $6FF2 | Collect information about the board | ||||||
| 6812 | LD L,$0B | 32 distinct actions are needed to wipe the board; store this counter in byte 0x0B of the teacher's buffer | ||||||
| 6814 | LD (HL),$20 | |||||||
| 6816 | INC L | L=0x0C | ||||||
| 6817 | LD A,E | A=x-coordinate of the left edge of the board | ||||||
| 6818 | ADD A,$07 | A=x-coordinate of the right edge of the board | ||||||
| 681A | LD (HL),A | Store this in byte 0x0C of the teacher's buffer | ||||||
| 681B | INC L | Place the y-coordinate of the top line of the board into byte 0x0D of the teacher's buffer | ||||||
| 681C | LD (HL),D | |||||||
| 681D | INC L | And the board identifier (LSB of 7F54, 7F5A, 7F60, 7F66 or 7F6C) into byte 0x0E | ||||||
| 681E | LD (HL),B | |||||||
| 681F | LD L,$09 | Change the routine address in bytes 0x09 and 0x0A of the teacher's buffer to 6823 (below) | ||||||
| 6821 | LD (HL),$23 | |||||||
| 6823 | LD L,$0B | Byte 0x0B holds the board-wiping action counter | ||||||
| 6825 | DEC (HL) | Decrement the counter | ||||||
| 6826 | JP P,$6836 | Jump if the board has not yet been fully wiped | ||||||
|
The teacher has finished wiping the board. Mark the board as clean, and move the teacher on to his next task.
|
||||||||
| 6829 | LD L,$0E | Collect the board identifier in L | ||||||
| 682B | LD L,(HL) | |||||||
| 682C | LD H,$7F | HL now points to the board's buffer | ||||||
| 682E | LD (HL),$00 | Signal that the board has been wiped by zeroing the first two bytes of the blackboard's buffer | ||||||
| 6830 | INC L | |||||||
| 6831 | LD (HL),$00 | |||||||
| 6833 | JP $6390 | Now the job's been done, terminate this interruptible subcommand | ||||||
|
The board's not clean yet. Work out what the teacher has to do next: wipe, or move down the board to the next spot.
|
||||||||
| 6836 | CALL $61B4 | Update the SRB for the teacher's current animatory state and location | ||||||
| 6839 | AND $78 | A=teacher's base animatory state | ||||||
| 683B | LD L,$0B | Point HL at the board-wiping action counter | ||||||
| 683D | BIT 0,(HL) | Is the teacher midstride or wiping (arm up)? | ||||||
| 683F | JR Z,$6876 | Jump if so | ||||||
| 6841 | BIT 1,(HL) | Are we ready for a wipe action? | ||||||
| 6843 | JR Z,$6849 | Jump if so | ||||||
| 6845 | INC A | A=animatory state of the teacher midstride | ||||||
| 6846 | JP $6130 | Update the teacher's animatory state and update the SRB | ||||||
|
The teacher's next action will be a wipe, so raise his arm.
|
||||||||
| 6849 | ADD A,$07 | A=animatory state of the teacher with his arm up | ||||||
| 684B | CALL $6130 | Update the teacher's animatory state and update the SRB | ||||||
| 684E | LD L,$0C | Collect the x-coordinate of the part of the board to be wiped into E | ||||||
| 6850 | LD E,(HL) | |||||||
| 6851 | DEC (HL) | Decrease this x-coordinate ready for the next wipe | ||||||
| 6852 | INC L | Collect the y-coordinate of the top line of the blackboard into D | ||||||
| 6853 | LD D,(HL) | |||||||
| 6854 | CALL $670C | Update the SRB for the top line of the blackboard | ||||||
| 6857 | INC D | D=y-coordinate of the bottom line of the blackboard | ||||||
| 6858 | CALL $670C | Update the SRB for the bottom line of the blackboard | ||||||
| 685B | LD A,D | Prepare H for picking up skool UDG base address LSBs later | ||||||
| 685C | ADD A,$A0 | |||||||
| 685E | LD H,A | |||||||
| 685F | LD D,$B5 | Pick up the Q value (0x00<=Q<=0x8F) for the lower blackboard tile being wiped from page 0xB5 in L | ||||||
| 6861 | LD A,(DE) | |||||||
| 6862 | LD L,A | |||||||
| 6863 | LD A,(HL) | Collect the LSB of the base address of the skool UDG for this blackboard tile in L | ||||||
| 6864 | LD L,A | |||||||
| 6865 | SUB $08 | Set E to the LSB of the base address of the skool UDG for the upper blackboard tile | ||||||
| 6867 | LD E,A | |||||||
| 6868 | LD H,$80 | The base page for all blackboard tile UDGs is 0x80 | ||||||
| 686A | LD D,H | |||||||
| 686B | LD B,$08 | 8 lines per character square | ||||||
| 686D | LD A,$FF | 0xFF=blank blackboard byte | ||||||
| 686F | LD (HL),A | Clear a pixel line in the skool UDG for the lower blackboard tile | ||||||
| 6870 | LD (DE),A | Clear a pixel line in the skool UDG for the upper blackboard tile | ||||||
| 6871 | INC H | Next pixel row of the lower blackboard tile UDG | ||||||
| 6872 | INC D | Next pixel row of the upper blackboard tile UDG | ||||||
| 6873 | DJNZ $686F | Jump back until the two blackboard tile UDGs have been cleared | ||||||
| 6875 | RET | |||||||
|
The teacher is either wiping or midstride while on his way to the next spot along the board. At this point, A holds the teacher's base animatory state.
|
||||||||
| 6876 | BIT 1,(HL) | Is the teacher wiping? | ||||||
| 6878 | JR Z,$687B | Jump if so | ||||||
| 687A | DEC E | The teacher is midstride, so now move him one space to the left | ||||||
| 687B | JP $6130 | Update the teacher's animatory state and location and update the SRB | ||||||
| Prev: 680D | Up: Map | Next: 687E |