Routines |
Prev: 7F77 | Up: Map | Next: 8251 |
Used by the routine at YouSeeEntry.
|
||||
Drawing | 7F78 | PUSH AF | Store AF on the stack. | |
7F79 | LD A,($B707) | If B707 is not $00 then jump to DrawingCheck. | ||
7F7C | AND A | |||
7F7D | JR NZ,DrawingCheck | |||
7F7F | LD A,$FF | Write $FF to LocationID. | ||
7F81 | LD ($7F77),A | |||
7F84 | POP AF | Restore AF from the stack. | ||
7F85 | RET | Return. | ||
Drawing Check
|
||||
DrawingCheck | 7F86 | POP AF | Retrieve the location ID from the stack. | |
7F87 | PUSH AF | Ensure that it's still on the stack for later. | ||
7F88 | PUSH HL | Store HL, BC, DE and IX on the stack for later. | ||
7F89 | PUSH BC | |||
7F8A | PUSH DE | |||
7F8B | PUSH IX | |||
7F8D | LD IX,$CC00 | IX=LocGFXTable. | ||
7F91 | CALL IndexIdTable | Call IndexIdTable - the Z flag is set if no data is found (A=$FF). | ||
7F94 | LD ($7F77),A | Store the location ID at LocationID. | ||
7F97 | LD L,(IX+$01) | HL=Location graphics data address. | ||
7F9A | LD H,(IX+$02) | |||
7F9D | CALL NZ,DrawingSetup | If there is graphics data for this location then call DrawingSetup. | ||
7FA0 | POP IX | Restore IX, DE, BC, HL and AF off the stack. | ||
7FA2 | POP DE | |||
7FA3 | POP BC | |||
7FA4 | POP HL | |||
7FA5 | POP AF | |||
7FA6 | RET | Return. | ||
Drawing routines.
|
||||
DrawingSetup | 7FA7 | PUSH IY | Store IY and HL on the stack. | |
7FA9 | PUSH HL | |||
7FAA | PUSH HL | IY=pointer to graphics data addresses. | ||
7FAB | POP IY | |||
7FAD | PUSH DE | Store DE and BC on the stack. | ||
7FAE | PUSH BC | |||
7FAF | CALL DrawingClear | Call DrawingClear. | ||
7FB2 | LD D,$7F | D=$7F. | ||
7FB4 | LD E,$3F | E=$3F. | ||
7FB6 | LD B,$01 | B=$01. | ||
7FB8 | LD C,$01 | C=$01. | ||
7FBA | LD L,$01 | L=$01. | ||
DrawingLoop | 7FBC | LD A,(IY+$00) | Fetch the next drawing instruction. | |
7FBF | AND A | If the value is zero, jump to DrawingEnd. | ||
7FC0 | JP Z,DrawingEnd | |||
7FC3 | INC IY | Increment the graphics data pointer by one. | ||
7FC5 | CP $08 | If the graphics data value which was fetched is not $08 (move to X/Y) jump to Drawing_0. | ||
7FC7 | JR NZ,Drawing_0 | |||
Moves the "pen" held in DE to a screen location.
|
||||
7FC9 | LD D,(IY+$00) | Populate DE with two values from the graphics data and increment the pointer by two. | ||
7FCC | INC IY | |||
7FCE | LD E,(IY+$00) | |||
7FD1 | INC IY | |||
7FD3 | JR DrawingLoop | Jump back to DrawingLoop to fetch the next drawing instruction. | ||
Drawing_0 | 7FD5 | BIT 7,A | If bit 7 is set, jump to Drawing_1. | |
7FD7 | JR Z,Drawing_1 | |||
7FD9 | LD B,A | Temporarily store A in B. | ||
7FDA | AND %00000111 | Keep only bits 0-2. | ||
7FDC | LD C,A | Store this in C. | ||
7FDD | LD A,B | Restore the old value of A (from B). | ||
7FDE | RRCA | Rotate A right one bit. | ||
7FDF | AND %00111100 | Keep only bits 2-5. | ||
7FE1 | LD B,A | Store this in B. | ||
7FE2 | LD A,(IY+$00) | Fetch the next drawing instruction. | ||
7FE5 | AND %00111111 | Keep only bits 0-5. | ||
7FE7 | LD L,A | Store this in L. | ||
7FE8 | INC L | Increment L by one. | ||
7FE9 | LD A,(IY+$00) | Fetch the previous drawing instruction again in A. | ||
7FEC | INC IY | Increment the graphics data pointer by one. | ||
7FEE | RLCA | Rotate A left two bits. | ||
7FEF | RLCA | |||
7FF0 | AND %00000011 | Keep only bits 0-1. | ||
7FF2 | OR B | |||
7FF3 | LD B,A | |||
7FF4 | INC B | |||
7FF5 | CALL Drawing_30 | Call Drawing_30. | ||
7FF8 | JR DrawingLoop | Jump back to DrawingLoop to fetch the next drawing instruction. | ||
Drawing_1 | 7FFA | BIT 6,A | ||
7FFC | JR Z,Drawing_2 | |||
7FFE | AND %00000111 | Keep only bits 0-2. | ||
8000 | PUSH DE | |||
8001 | LD D,(IY+$00) | |||
8004 | INC IY | |||
8006 | LD E,(IY+$00) | |||
8009 | INC IY | |||
800B | CALL Drawing_7 | |||
800E | POP DE | |||
800F | JP DrawingLoop | Jump back to DrawingLoop to fetch the next drawing instruction. | ||
Drawing_2 | 8012 | BIT 5,A | If bit 5 is set then jump back to DrawingLoop to fetch the next drawing instruction. | |
8014 | JP Z,DrawingLoop | |||
8017 | AND %00000111 | Keep only bits 0-2. | ||
8019 | RLCA | |||
801A | RLCA | |||
801B | RLCA | |||
801C | PUSH HL | |||
801D | PUSH DE | |||
801E | PUSH BC | |||
801F | LD C,A | |||
8020 | LD H,(IY+$00) | |||
8023 | INC IY | |||
8025 | LD L,(IY+$00) | |||
8028 | INC IY | |||
Drawing_3 | 802A | LD A,(IY+$00) | ||
802D | INC IY | |||
802F | CP $FF | |||
8031 | JR Z,Drawing_6 | |||
8033 | LD B,A | |||
8034 | AND %00000011 | Keep only bits 0-1. | ||
8036 | LD E,A | |||
8037 | LD A,B | |||
8038 | RRCA | |||
8039 | RRCA | |||
803A | AND %00111111 | Keep only bits 0-5. | ||
803C | INC A | |||
803D | LD B,A | |||
Drawing_4 | 803E | LD A,(HL) | ||
803F | AND %00000111 | Keep only bits 0-2. | ||
8041 | RLCA | |||
8042 | RLCA | |||
8043 | RLCA | |||
8044 | CP C | |||
8045 | JR NZ,Drawing_5 | |||
8047 | XOR $38 | |||
Drawing_5 | 8049 | RRCA | ||
804A | RRCA | |||
804B | RRCA | |||
804C | OR C | |||
804D | LD (HL),A | |||
804E | LD A,E | |||
804F | AND A | |||
8050 | CALL Z,Drawing_18 | |||
8053 | DEC A | |||
8054 | CALL Z,Drawing_23 | |||
8057 | DEC A | |||
8058 | CALL Z,Drawing_20 | |||
805B | DEC A | |||
805C | CALL Z,Drawing_21 | |||
805F | DJNZ Drawing_4 | |||
8061 | JR Drawing_3 | |||
Drawing_6 | 8063 | POP BC | ||
8064 | POP DE | |||
8065 | POP HL | |||
8066 | JP DrawingLoop | Jump back to DrawingLoop to fetch the next drawing instruction. | ||
DrawingEnd | 8069 | POP BC | Restore BC, DE, HL and IY from the stack. | |
806A | POP DE | |||
806B | POP HL | |||
806C | POP IY | |||
806E | RET | Return. | ||
806F | DEFB $00,$00 | |||
Drawing_7 | 8071 | LD ($824E),A | ||
8074 | PUSH DE | |||
8075 | PUSH HL | |||
8076 | LD HL,$0080 | |||
8079 | PUSH HL | |||
Drawing_8 | 807A | CALL Drawing_17 | ||
807D | JR NZ,Drawing_9 | |||
807F | CALL Drawing_29 | |||
8082 | JR NZ,Drawing_8 | |||
8084 | JR Drawing_10 | |||
Drawing_9 | 8086 | CALL Drawing_46 | ||
8089 | CALL Drawing_28 | |||
Drawing_10 | 808C | LD HL,$0000 | ||
808F | LD ($806F),HL | |||
Drawing_11 | 8092 | CALL Drawing_25 | ||
8095 | LD A,$00 | |||
8097 | JR Z,Drawing_13 | |||
8099 | CALL Drawing_17 | |||
809C | LD A,$00 | |||
809E | JR NZ,Drawing_12 | |||
80A0 | LD A,($806F) | |||
80A3 | AND A | |||
80A4 | JR NZ,Drawing_12 | |||
80A6 | PUSH DE | |||
80A7 | LD A,$01 | |||
Drawing_12 | 80A9 | PUSH AF | ||
80AA | CALL Drawing_27 | |||
80AD | POP AF | |||
Drawing_13 | 80AE | LD ($806F),A | ||
80B1 | CALL Drawing_27 | |||
80B4 | LD A,$00 | |||
80B6 | JR Z,Drawing_15 | |||
80B8 | CALL Drawing_17 | |||
80BB | LD A,$00 | |||
80BD | JR NZ,Drawing_14 | |||
80BF | LD A,($8070) | |||
80C2 | AND A | |||
80C3 | JR NZ,Drawing_14 | |||
80C5 | PUSH DE | |||
80C6 | LD A,$01 | |||
Drawing_14 | 80C8 | PUSH AF | ||
80C9 | CALL Drawing_25 | |||
80CC | POP AF | |||
Drawing_15 | 80CD | LD ($8070),A | ||
80D0 | CALL Drawing_46 | |||
80D3 | CALL Drawing_28 | |||
80D6 | JR Z,Drawing_16 | |||
80D8 | CALL Drawing_17 | |||
80DB | JR Z,Drawing_11 | |||
80DD | CALL Drawing_46 | |||
Drawing_16 | 80E0 | POP DE | ||
80E1 | LD A,E | |||
80E2 | CP $80 | |||
80E4 | JR NZ,Drawing_8 | |||
80E6 | LD A,$00 | |||
80E8 | LD ($824E),A | |||
80EB | POP HL | Restore HL and DE from the stack. | ||
80EC | POP DE | |||
80ED | RET | Return. | ||
Drawing_17 | 80EE | PUSH HL | Stash HL on the stack. | |
80EF | CALL Drawing_48 | Call Drawing_48. | ||
80F2 | AND (HL) | |||
80F3 | POP HL | Restore HL from the stack. | ||
80F4 | RET | Return. | ||
Drawing_18 | 80F5 | PUSH AF | Stash AF and DE on the stack. | |
80F6 | PUSH DE | |||
80F7 | LD DE,$0020 | |||
80FA | AND A | |||
80FB | SBC HL,DE | |||
80FD | LD A,H | |||
80FE | CP $57 | |||
8100 | JR NZ,Drawing_19 | |||
8102 | ADD HL,DE | |||
Drawing_19 | 8103 | POP DE | Restore DE and AF from the stack. | |
8104 | POP AF | |||
8105 | RET | Return. | ||
Drawing_20 | 8106 | PUSH AF | Stash AF and DE on the stack. | |
8107 | PUSH DE | |||
8108 | LD DE,$0020 | HL=HL+$0020. | ||
810B | ADD HL,DE | |||
810C | LD A,H | |||
810D | CP $5A | |||
810F | JR NZ,$8113 | |||
8111 | AND A | |||
8112 | SBC HL,DE | |||
8114 | POP DE | Restore DE and AF from the stack. | ||
8115 | POP AF | |||
8116 | RET | Return. | ||
Drawing_21 | 8117 | PUSH AF | ||
8118 | DEC HL | |||
8119 | LD A,H | |||
811A | CP $57 | |||
811C | JR NZ,Drawing_22 | |||
811E | INC HL | |||
Drawing_22 | 811F | POP AF | ||
8120 | RET | Return. | ||
Drawing_23 | 8121 | PUSH AF | ||
8122 | INC HL | |||
8123 | LD A,H | |||
8124 | CP $5A | |||
8126 | JR NZ,Drawing_24 | |||
8128 | DEC HL | |||
Drawing_24 | 8129 | POP AF | ||
812A | RET | Return. | ||
Drawing_25 | 812B | INC E | ||
812C | BIT 7,E | |||
812E | JR Z,Drawing_26 | |||
8130 | DEC E | |||
8131 | LD H,A | |||
8132 | XOR A | |||
8133 | LD A,H | |||
8134 | RET | Return. | ||
Drawing_26 | 8135 | LD H,A | Set bit 0 of A (using H). | |
8136 | OR $01 | |||
8138 | LD A,H | |||
8139 | RET | Return. | ||
Drawing_27 | 813A | DEC E | ||
813B | BIT 7,E | |||
813D | JR Z,Drawing_26 | |||
813F | INC E | |||
8140 | RET | Return. | ||
Drawing_28 | 8141 | INC D | ||
8142 | RET NZ | |||
8143 | DEC D | |||
8144 | LD H,A | |||
8145 | XOR A | |||
8146 | LD A,H | |||
8147 | RET | Return. | ||
Drawing_29 | 8148 | DEC D | ||
8149 | LD H,A | |||
814A | LD A,D | |||
814B | CP $FF | |||
814D | LD A,H | |||
814E | RET NZ | |||
814F | INC D | |||
8150 | RET | Return. | ||
Drawing_30 | 8151 | BIT 0,C | If bit 0 of C is not set then jump to Drawing_38. | |
8153 | JR NZ,Drawing_38 | |||
8155 | PUSH HL | Stash HL and BC on the stack. | ||
8156 | PUSH BC | |||
Drawing_31 | 8157 | CALL Drawing_46 | Call Drawing_46. | |
815A | BIT 2,C | If bit 2 of C is set then jump to Drawing_32. | ||
815C | JR Z,Drawing_32 | |||
815E | CALL Drawing_29 | Call Drawing_29. | ||
8161 | JR Z,Drawing_37 | |||
8163 | JR Drawing_33 | Jump to Drawing_33. | ||
Drawing_32 | 8165 | CALL Drawing_28 | Call Drawing_28. | |
8168 | JR Z,Drawing_37 | |||
Drawing_33 | 816A | DEC B | Decrease B by one. | |
816B | JR NZ,Drawing_36 | Jump to Drawing_36 if it is not zero. | ||
816D | BIT 1,C | If bit 1 of C is set then jump to Drawing_34. | ||
816F | JR Z,Drawing_34 | |||
8171 | CALL Drawing_27 | Call Drawing_27. | ||
8174 | JR Z,Drawing_37 | |||
8176 | JR Drawing_35 | |||
Drawing_34 | 8178 | CALL Drawing_25 | ||
817B | JR Z,Drawing_37 | |||
Drawing_35 | 817D | POP BC | ||
817E | PUSH BC | |||
Drawing_36 | 817F | DEC L | ||
8180 | JR NZ,Drawing_31 | |||
Drawing_37 | 8182 | POP BC | Restore BC and HL from the stack. | |
8183 | POP HL | |||
8184 | RET | Return. | ||
Drawing_38 | 8185 | PUSH HL | Stash HL and BC on the stack. | |
8186 | PUSH BC | |||
Drawing_39 | 8187 | CALL Drawing_46 | Call Drawing_46. | |
818A | BIT 1,C | |||
818C | JR Z,Drawing_40 | |||
818E | CALL Drawing_27 | |||
8191 | JR Z,Drawing_45 | |||
8193 | JR Drawing_41 | |||
Drawing_40 | 8195 | CALL Drawing_25 | ||
8198 | JR Z,Drawing_45 | |||
Drawing_41 | 819A | DEC B | ||
819B | JR NZ,Drawing_44 | |||
819D | BIT 2,C | |||
819F | JR Z,Drawing_42 | |||
81A1 | CALL Drawing_29 | |||
81A4 | JR Z,Drawing_45 | |||
81A6 | JR Drawing_43 | |||
Drawing_42 | 81A8 | CALL Drawing_28 | ||
81AB | JR Z,Drawing_45 | |||
Drawing_43 | 81AD | POP BC | ||
81AE | PUSH BC | |||
Drawing_44 | 81AF | DEC L | ||
81B0 | JR NZ,Drawing_39 | |||
Drawing_45 | 81B2 | POP BC | Restore BC and HL from the stack. | |
81B3 | POP HL | |||
81B4 | RET | Return. | ||
Drawing_46 | 81B5 | PUSH HL | ||
81B6 | CALL Drawing_48 | |||
81B9 | PUSH AF | |||
81BA | PUSH HL | |||
81BB | LD A,H | |||
81BC | AND %00011000 | Keep only bits 3-4. | ||
81BE | RRCA | |||
81BF | RRCA | |||
81C0 | RRCA | |||
81C1 | ADD A,$58 | |||
81C3 | LD H,A | |||
81C4 | LD A,(HL) | |||
81C5 | AND %00111000 | Keep only bits 3-5. | ||
81C7 | LD (HL),A | |||
81C8 | LD A,($824E) | |||
81CB | RLCA | |||
81CC | RLCA | |||
81CD | RLCA | |||
81CE | CP (HL) | |||
81CF | JR NZ,Drawing_47 | |||
81D1 | XOR $38 | |||
Drawing_47 | 81D3 | RRCA | ||
81D4 | RRCA | |||
81D5 | RRCA | |||
81D6 | OR (HL) | |||
81D7 | LD (HL),A | |||
81D8 | POP HL | |||
81D9 | POP AF | |||
81DA | OR (HL) | |||
81DB | LD (HL),A | |||
81DC | POP HL | |||
81DD | RET | Return. | ||
Drawing_48 | 81DE | LD A,$7F | ||
81E0 | SUB E | |||
81E1 | LD L,A | |||
81E2 | AND %00000111 | Keep only bits 0-2. | ||
81E4 | OR $40 | |||
81E6 | LD H,A | |||
81E7 | LD A,L | |||
81E8 | AND %11000000 | Keep only bits 6-7. | ||
81EA | RRCA | |||
81EB | RRCA | |||
81EC | RRCA | |||
81ED | OR H | |||
81EE | LD H,A | |||
81EF | LD A,L | |||
81F0 | AND %00111000 | Keep only bits 3-5. | ||
81F2 | RLCA | |||
81F3 | RLCA | |||
81F4 | LD L,A | |||
81F5 | LD A,D | |||
81F6 | RRCA | |||
81F7 | RRCA | |||
81F8 | RRCA | |||
81F9 | AND %00011111 | Keep only bits 0-4. | ||
81FB | OR L | |||
81FC | LD L,A | |||
81FD | LD A,D | |||
81FE | AND %00000111 | Keep only bits 0-2. | ||
8200 | PUSH BC | Stash BC on the stack temporarily. | ||
8201 | LD B,A | Copy A to B used as a counter for the rotate command. | ||
8202 | INC B | |||
8203 | LD A,$01 | A=00000001. | ||
Drawing_49 | 8205 | RRC A | Rotate A right once. | |
8207 | DJNZ Drawing_49 | Decrease counter by one and loop back to Drawing_49 until counter is zero. | ||
8209 | POP BC | Restore BC from the stack. | ||
820A | RET | Return. | ||
DrawingClear | 820B | CALL LocationLit | Call LocationLit. | |
820E | EX AF,AF' | Store the first byte of the graphic data in the shadow AF register. | ||
820F | LD A,(IY+$00) | |||
8212 | INC IY | Increment the graphic data pointer to the next byte. | ||
8214 | EX AF,AF' | Switch back to the "normal" AF register to check the result of the call to LocationLit. | ||
8215 | JR NC,DrawingBorder | Jump to DrawingBorder if LocationLit did not set the carry flag (so, it is LIGHT). | ||
8217 | EX AF,AF' | Overwrite the graphic data in the shadow AF register to $00 (black). | ||
8218 | XOR A | |||
8219 | EX AF,AF' | Switch back to the "normal" AF register simply to accomodate the jump from 8215. | ||
DrawingBorder | 821A | EX AF,AF' | Switch to the shadow AF register containing the first byte of the graphic data (or $00 if it's dark). | |
821B | OUT ($FE),A | Set the border colour to the value in A. | ||
821D | PUSH HL | Store HL, DE and BC on the stack. | ||
821E | PUSH DE | |||
821F | PUSH BC | |||
8220 | LD HL,$4000 | Write $00 to $4000-$4FFF (the screen buffer). | ||
8223 | LD DE,$4001 | |||
8226 | LD BC,$0FFF | |||
8229 | LD (HL),$00 | |||
822B | LDIR | |||
822D | LD HL,$5800 | Set up copying to the attribute buffer (start=$5800, length=$01FF). | ||
8230 | LD DE,$5801 | |||
8233 | LD BC,$01FF | |||
8236 | LD A,(IY+$00) | A=The next byte (second) of the graphic data. | ||
8239 | INC IY | Increment the graphic data pointer to the next byte. | ||
823B | EX AF,AF' | Switch back to the "normal" AF register which contains the LIGHT/ DARK carry flag. | ||
823C | JR NC,DrawingPaper | Jump to DrawingPaper if LocationLit did not set the carry flag (so, it is LIGHT). | ||
823E | EX AF,AF' | Overwrite the graphic data in the shadow AF register to $00 (black). | ||
823F | XOR A | |||
8240 | EX AF,AF' | Switch back to the "normal" AF register simply to accomodate the jump from 823C. | ||
DrawingPaper | 8241 | EX AF,AF' | Switch to the shadow AF register containing the second byte of the graphic data (or $00 if it's dark). | |
8242 | LD (HL),A | Write this to the attribute buffer using the target/ length specified previously. | ||
8243 | LDIR | |||
8245 | POP BC | Restore BC, DE and HL from the stack. | ||
8246 | POP DE | |||
8247 | POP HL | |||
8248 | EX AF,AF' | Switch back to the "normal" AF register which contains the LIGHT/ DARK carry flag. | ||
8249 | RET NC | Return if it is LIGHT. | ||
824A | POP HL | Else, restore HL from the stack and jump to DrawingEnd to finish. | ||
824B | JP DrawingEnd | |||
824E | DEFB $38,$00,$00 |
Prev: 7F77 | Up: Map | Next: 8251 |