![]() |
Routines |
Byte | Contents | 1 | y-coordinate | 2 | x-coordinate | 3 | UDG reference | 4 (bits 0-3) | BRIGHT/PAPER attributes | 4 (bits 6 & 7) | UDG base page identifier |
---|
Address | Object | 56637 | Left study door (closed) | 56893 | Left study door (open) | 57088 | Right study door (closed) | 57344 | Right study door (open) | 56576 | Science lab storeroom door (closed) | 56832 | Science lab storeroom door (open) | 57149 | Boys' skool door (closed) | 57405 | Boys' skool door (open) | 63744 | Skool gate (closed) | 64000 | Skool gate (open) | 56064 | Drinks cabinet door (closed) | 56320 | Drinks cabinet door (open) | 55040 | Top floor window (closed) | 55296 | Top floor window (open) | 55552 | Middle floor window (closed) | 55808 | Middle floor window (open) | 56081 | Cups in boys' skool (empty) | 56694 | Leftmost cup in boys' skool (containing water) | 56699 | Leftmost cup in boys' skool (containing sherry) | 56950 | Middle cup in boys' skool (containing water) | 56955 | Middle cup in boys' skool (containing sherry) | 57206 | Rightmost cup in boys' skool (containing water) | 57211 | Rightmost cup in boys' skool (containing sherry) | 56337 | Cup in girls' skool (empty) | 57462 | Cup in girls' skool (containing water) | 57467 | Cup in girls' skool (containing sherry) | 57600 | Tree (with no bike) | 57856 | Tree (with bike chained to it) |
---|
HL | Start address of table corresponding to door/window/cup/bike |
27672 | LD A,(HL) | Pick up the y-coordinate (Y) in D |
27673 | LD D,A | |
27674 | INC A | Return if we found the end-of-table marker (255) |
27675 | RET Z | |
27676 | INC HL | Point HL at byte 2 of this table entry |
27677 | LD E,(HL) | Pick up the x-coordinate (X) in E |
27678 | INC HL | Point HL at byte 3 of this table entry |
27679 | PUSH HL | |
27680 | LD A,(32767) | C=leftmost column of play area on screen |
27683 | LD C,A | |
27684 | LD A,E | Jump if (X,Y) is off-screen (no need to update the screen refresh buffer) |
27685 | SUB C | |
27686 | JR C,27717 | |
27688 | CP 32 | |
27690 | JR NC,27717 |
27692 | LD C,A | 0<=C<=31 (column of screen) |
27693 | AND 7 | Point HL at an entry in the 8-byte table at 57720, whose contents are (128, 64, 32, 16, 8, 4, 2, 1) |
27695 | ADD A,120 | |
27697 | LD L,A | |
27698 | LD H,225 | |
27700 | LD B,(HL) | Pick up this entry in B |
27701 | LD A,C | 0<=A<=31 (column of screen) |
27702 | RRCA | Point HL at the byte of the SRB corresponding to (X,Y) |
27703 | RRCA | |
27704 | RRCA | |
27705 | AND 3 | |
27707 | ADD A,D | |
27708 | ADD A,D | |
27709 | ADD A,D | |
27710 | ADD A,D | |
27711 | LD L,A | |
27712 | LD H,127 | |
27714 | LD A,(HL) | Set the appropriate bit in the SRB byte |
27715 | OR B | |
27716 | LD (HL),A |
27717 | LD L,E | Point HL at the Q value (0<=Q<=143) in page 181 for the x-coordinate X (see 24684) |
27718 | LD H,181 | |
27720 | LD E,(HL) | Pick up the Q value in E |
27721 | LD A,D | Set DE to the address where the UDG reference for (X,Y) is stored |
27722 | ADD A,160 | |
27724 | LD D,A | |
27725 | POP HL | Point HL at byte 3 of the table entry |
27726 | LD A,(HL) | Pick up the replacement UDG reference in A |
27727 | INC HL | Point HL at byte 4 of the table entry |
27728 | LD (DE),A | Replace the UDG reference for the skool location (X,Y) with the one collected from the table entry |
27729 | LD A,(HL) | Pick up byte 4 of the table entry in A |
27730 | AND 15 | Keep only bits 0-3 (the BRIGHT and PAPER attributes) |
27732 | LD B,A | Copy them to B |
27733 | LD A,E | A=Q (0<=Q<=143) |
27734 | LD C,A | Save the Q value in C for later |
27735 | ADD A,104 | Point DE at byte 180+INT(Q/2) of page Y+160, where the BRIGHT and PAPER attributes for the skool location (X,Y) are stored |
27737 | SCF | |
27738 | RRA | |
27739 | LD E,A | |
27740 | JR C,27753 | Jump if Q is odd (BRIGHT and PAPER in bits 0-3) |
27742 | LD A,B | Shift the BRIGHT and PAPER attributes from bits 0-3 to bits 4-7 of B |
27743 | RRCA | |
27744 | RRCA | |
27745 | RRCA | |
27746 | RRCA | |
27747 | LD B,A | |
27748 | LD A,(DE) | Pick up the current attribute byte for the skool location (X,Y), keeping bits 0-3 as they are |
27749 | AND 15 | |
27751 | JR 27756 | Jump forward to adjust bits 4-7 appropriately |
27753 | LD A,(DE) | Pick up the current attribute byte for the skool location (X,Y), keeping bits 4-7 as they are |
27754 | AND 240 | |
27756 | OR B | Adjust bits 0-3 (if Q is odd) or bits 4-7 (Q is even) of the attribute byte for the skool location (X,Y) |
27757 | LD (DE),A |
27758 | LD A,(HL) | Pick up byte 4 of the table entry in A again |
27759 | AND 192 | Keep only bits 6 and 7 |
27761 | BIT 6,A | Set B=10001000 if these bits are 11, 10000000 (10), 00001000 (01) or 00000000 (00) |
27763 | JR Z,27767 | |
27765 | SUB 56 | |
27767 | LD B,A | |
27768 | LD A,C | A=Q |
27769 | LD C,136 | C=10001000 |
27771 | SRL A | Set A=INT(Q/4), and shift B and C right (Q AND 3) times |
27773 | JR NC,27779 | |
27775 | RRC B | |
27777 | RRC C | |
27779 | SRL A | |
27781 | JR NC,27791 | |
27783 | RRC B | |
27785 | RRC C | |
27787 | RRC B | |
27789 | RRC C | |
27791 | ADD A,144 | Point DE at byte 144+INT(Q/4) of page Y+160, where the UDG MSB identifier bit-pair for skool location (X,Y) is held (see 24684) |
27793 | LD E,A | |
27794 | LD A,(DE) | Pick up the current MSB identifier byte in A |
27795 | OR C | Replace bits (0,4), (1,5), (2,6) or (3,7) in this byte with the corresponding bits in B |
27796 | XOR C | |
27797 | OR B | |
27798 | LD (DE),A | Store the new MSB identifier byte |
27799 | INC HL | Point HL at the first byte of the next entry in the table |
27800 | JP 27672 | Jump back to process it |