Routines |
Prev: 32631 | Up: Map | Next: 33361 |
Used by the routine at YouSeeEntry.
|
||||
Drawing | 32632 | PUSH AF | Store AF on the stack. | |
32633 | LD A,(46855) | If 46855 is not $00 then jump to DrawingCheck. | ||
32636 | AND A | |||
32637 | JR NZ,DrawingCheck | |||
32639 | LD A,255 | Write $FF to LocationID. | ||
32641 | LD (32631),A | |||
32644 | POP AF | Restore AF from the stack. | ||
32645 | RET | Return. | ||
Drawing Check
|
||||
DrawingCheck | 32646 | POP AF | Retrieve the location ID from the stack. | |
32647 | PUSH AF | Ensure that it's still on the stack for later. | ||
32648 | PUSH HL | Store HL, BC, DE and IX on the stack for later. | ||
32649 | PUSH BC | |||
32650 | PUSH DE | |||
32651 | PUSH IX | |||
32653 | LD IX,52224 | IX=LocGFXTable. | ||
32657 | CALL IndexIdTable | Call IndexIdTable - the Z flag is set if no data is found (A=$FF). | ||
32660 | LD (32631),A | Store the location ID at LocationID. | ||
32663 | LD L,(IX+1) | HL=Location graphics data address. | ||
32666 | LD H,(IX+2) | |||
32669 | CALL NZ,DrawingSetup | If there is graphics data for this location then call DrawingSetup. | ||
32672 | POP IX | Restore IX, DE, BC, HL and AF off the stack. | ||
32674 | POP DE | |||
32675 | POP BC | |||
32676 | POP HL | |||
32677 | POP AF | |||
32678 | RET | Return. | ||
Drawing routines.
|
||||
DrawingSetup | 32679 | PUSH IY | Store IY and HL on the stack. | |
32681 | PUSH HL | |||
32682 | PUSH HL | IY=pointer to graphics data addresses. | ||
32683 | POP IY | |||
32685 | PUSH DE | Store DE and BC on the stack. | ||
32686 | PUSH BC | |||
32687 | CALL DrawingClear | Call DrawingClear. | ||
32690 | LD D,127 | D=$7F. | ||
32692 | LD E,63 | E=$3F. | ||
32694 | LD B,1 | B=$01. | ||
32696 | LD C,1 | C=$01. | ||
32698 | LD L,1 | L=$01. | ||
DrawingLoop | 32700 | LD A,(IY+0) | Fetch the next drawing instruction. | |
32703 | AND A | If the value is zero, jump to DrawingEnd. | ||
32704 | JP Z,DrawingEnd | |||
32707 | INC IY | Increment the graphics data pointer by one. | ||
32709 | CP 8 | If the graphics data value which was fetched is not $08 (move to X/Y) jump to Drawing_0. | ||
32711 | JR NZ,Drawing_0 | |||
Moves the "pen" held in DE to a screen location.
|
||||
32713 | LD D,(IY+0) | Populate DE with two values from the graphics data and increment the pointer by two. | ||
32716 | INC IY | |||
32718 | LD E,(IY+0) | |||
32721 | INC IY | |||
32723 | JR DrawingLoop | Jump back to DrawingLoop to fetch the next drawing instruction. | ||
Drawing_0 | 32725 | BIT 7,A | If bit 7 is set, jump to Drawing_1. | |
32727 | JR Z,Drawing_1 | |||
32729 | LD B,A | Temporarily store A in B. | ||
32730 | AND %00000111 | Keep only bits 0-2. | ||
32732 | LD C,A | Store this in C. | ||
32733 | LD A,B | Restore the old value of A (from B). | ||
32734 | RRCA | Rotate A right one bit. | ||
32735 | AND %00111100 | Keep only bits 2-5. | ||
32737 | LD B,A | Store this in B. | ||
32738 | LD A,(IY+0) | Fetch the next drawing instruction. | ||
32741 | AND %00111111 | Keep only bits 0-5. | ||
32743 | LD L,A | Store this in L. | ||
32744 | INC L | Increment L by one. | ||
32745 | LD A,(IY+0) | Fetch the previous drawing instruction again in A. | ||
32748 | INC IY | Increment the graphics data pointer by one. | ||
32750 | RLCA | Rotate A left two bits. | ||
32751 | RLCA | |||
32752 | AND %00000011 | Keep only bits 0-1. | ||
32754 | OR B | |||
32755 | LD B,A | |||
32756 | INC B | |||
32757 | CALL Drawing_30 | Call Drawing_30. | ||
32760 | JR DrawingLoop | Jump back to DrawingLoop to fetch the next drawing instruction. | ||
Drawing_1 | 32762 | BIT 6,A | ||
32764 | JR Z,Drawing_2 | |||
32766 | AND %00000111 | Keep only bits 0-2. | ||
32768 | PUSH DE | |||
32769 | LD D,(IY+0) | |||
32772 | INC IY | |||
32774 | LD E,(IY+0) | |||
32777 | INC IY | |||
32779 | CALL Drawing_7 | |||
32782 | POP DE | |||
32783 | JP DrawingLoop | Jump back to DrawingLoop to fetch the next drawing instruction. | ||
Drawing_2 | 32786 | BIT 5,A | If bit 5 is set then jump back to DrawingLoop to fetch the next drawing instruction. | |
32788 | JP Z,DrawingLoop | |||
32791 | AND %00000111 | Keep only bits 0-2. | ||
32793 | RLCA | |||
32794 | RLCA | |||
32795 | RLCA | |||
32796 | PUSH HL | |||
32797 | PUSH DE | |||
32798 | PUSH BC | |||
32799 | LD C,A | |||
32800 | LD H,(IY+0) | |||
32803 | INC IY | |||
32805 | LD L,(IY+0) | |||
32808 | INC IY | |||
Drawing_3 | 32810 | LD A,(IY+0) | ||
32813 | INC IY | |||
32815 | CP 255 | |||
32817 | JR Z,Drawing_6 | |||
32819 | LD B,A | |||
32820 | AND %00000011 | Keep only bits 0-1. | ||
32822 | LD E,A | |||
32823 | LD A,B | |||
32824 | RRCA | |||
32825 | RRCA | |||
32826 | AND %00111111 | Keep only bits 0-5. | ||
32828 | INC A | |||
32829 | LD B,A | |||
Drawing_4 | 32830 | LD A,(HL) | ||
32831 | AND %00000111 | Keep only bits 0-2. | ||
32833 | RLCA | |||
32834 | RLCA | |||
32835 | RLCA | |||
32836 | CP C | |||
32837 | JR NZ,Drawing_5 | |||
32839 | XOR 56 | |||
Drawing_5 | 32841 | RRCA | ||
32842 | RRCA | |||
32843 | RRCA | |||
32844 | OR C | |||
32845 | LD (HL),A | |||
32846 | LD A,E | |||
32847 | AND A | |||
32848 | CALL Z,Drawing_18 | |||
32851 | DEC A | |||
32852 | CALL Z,Drawing_23 | |||
32855 | DEC A | |||
32856 | CALL Z,Drawing_20 | |||
32859 | DEC A | |||
32860 | CALL Z,Drawing_21 | |||
32863 | DJNZ Drawing_4 | |||
32865 | JR Drawing_3 | |||
Drawing_6 | 32867 | POP BC | ||
32868 | POP DE | |||
32869 | POP HL | |||
32870 | JP DrawingLoop | Jump back to DrawingLoop to fetch the next drawing instruction. | ||
DrawingEnd | 32873 | POP BC | Restore BC, DE, HL and IY from the stack. | |
32874 | POP DE | |||
32875 | POP HL | |||
32876 | POP IY | |||
32878 | RET | Return. | ||
32879 | DEFB 0,0 | |||
Drawing_7 | 32881 | LD (33358),A | ||
32884 | PUSH DE | |||
32885 | PUSH HL | |||
32886 | LD HL,128 | |||
32889 | PUSH HL | |||
Drawing_8 | 32890 | CALL Drawing_17 | ||
32893 | JR NZ,Drawing_9 | |||
32895 | CALL Drawing_29 | |||
32898 | JR NZ,Drawing_8 | |||
32900 | JR Drawing_10 | |||
Drawing_9 | 32902 | CALL Drawing_46 | ||
32905 | CALL Drawing_28 | |||
Drawing_10 | 32908 | LD HL,0 | ||
32911 | LD (32879),HL | |||
Drawing_11 | 32914 | CALL Drawing_25 | ||
32917 | LD A,0 | |||
32919 | JR Z,Drawing_13 | |||
32921 | CALL Drawing_17 | |||
32924 | LD A,0 | |||
32926 | JR NZ,Drawing_12 | |||
32928 | LD A,(32879) | |||
32931 | AND A | |||
32932 | JR NZ,Drawing_12 | |||
32934 | PUSH DE | |||
32935 | LD A,1 | |||
Drawing_12 | 32937 | PUSH AF | ||
32938 | CALL Drawing_27 | |||
32941 | POP AF | |||
Drawing_13 | 32942 | LD (32879),A | ||
32945 | CALL Drawing_27 | |||
32948 | LD A,0 | |||
32950 | JR Z,Drawing_15 | |||
32952 | CALL Drawing_17 | |||
32955 | LD A,0 | |||
32957 | JR NZ,Drawing_14 | |||
32959 | LD A,(32880) | |||
32962 | AND A | |||
32963 | JR NZ,Drawing_14 | |||
32965 | PUSH DE | |||
32966 | LD A,1 | |||
Drawing_14 | 32968 | PUSH AF | ||
32969 | CALL Drawing_25 | |||
32972 | POP AF | |||
Drawing_15 | 32973 | LD (32880),A | ||
32976 | CALL Drawing_46 | |||
32979 | CALL Drawing_28 | |||
32982 | JR Z,Drawing_16 | |||
32984 | CALL Drawing_17 | |||
32987 | JR Z,Drawing_11 | |||
32989 | CALL Drawing_46 | |||
Drawing_16 | 32992 | POP DE | ||
32993 | LD A,E | |||
32994 | CP 128 | |||
32996 | JR NZ,Drawing_8 | |||
32998 | LD A,0 | |||
33000 | LD (33358),A | |||
33003 | POP HL | Restore HL and DE from the stack. | ||
33004 | POP DE | |||
33005 | RET | Return. | ||
Drawing_17 | 33006 | PUSH HL | Stash HL on the stack. | |
33007 | CALL Drawing_48 | Call Drawing_48. | ||
33010 | AND (HL) | |||
33011 | POP HL | Restore HL from the stack. | ||
33012 | RET | Return. | ||
Drawing_18 | 33013 | PUSH AF | Stash AF and DE on the stack. | |
33014 | PUSH DE | |||
33015 | LD DE,32 | |||
33018 | AND A | |||
33019 | SBC HL,DE | |||
33021 | LD A,H | |||
33022 | CP 87 | |||
33024 | JR NZ,Drawing_19 | |||
33026 | ADD HL,DE | |||
Drawing_19 | 33027 | POP DE | Restore DE and AF from the stack. | |
33028 | POP AF | |||
33029 | RET | Return. | ||
Drawing_20 | 33030 | PUSH AF | Stash AF and DE on the stack. | |
33031 | PUSH DE | |||
33032 | LD DE,32 | HL=HL+$0020. | ||
33035 | ADD HL,DE | |||
33036 | LD A,H | |||
33037 | CP 90 | |||
33039 | JR NZ,33043 | |||
33041 | AND A | |||
33042 | SBC HL,DE | |||
33044 | POP DE | Restore DE and AF from the stack. | ||
33045 | POP AF | |||
33046 | RET | Return. | ||
Drawing_21 | 33047 | PUSH AF | ||
33048 | DEC HL | |||
33049 | LD A,H | |||
33050 | CP 87 | |||
33052 | JR NZ,Drawing_22 | |||
33054 | INC HL | |||
Drawing_22 | 33055 | POP AF | ||
33056 | RET | Return. | ||
Drawing_23 | 33057 | PUSH AF | ||
33058 | INC HL | |||
33059 | LD A,H | |||
33060 | CP 90 | |||
33062 | JR NZ,Drawing_24 | |||
33064 | DEC HL | |||
Drawing_24 | 33065 | POP AF | ||
33066 | RET | Return. | ||
Drawing_25 | 33067 | INC E | ||
33068 | BIT 7,E | |||
33070 | JR Z,Drawing_26 | |||
33072 | DEC E | |||
33073 | LD H,A | |||
33074 | XOR A | |||
33075 | LD A,H | |||
33076 | RET | Return. | ||
Drawing_26 | 33077 | LD H,A | Set bit 0 of A (using H). | |
33078 | OR 1 | |||
33080 | LD A,H | |||
33081 | RET | Return. | ||
Drawing_27 | 33082 | DEC E | ||
33083 | BIT 7,E | |||
33085 | JR Z,Drawing_26 | |||
33087 | INC E | |||
33088 | RET | Return. | ||
Drawing_28 | 33089 | INC D | ||
33090 | RET NZ | |||
33091 | DEC D | |||
33092 | LD H,A | |||
33093 | XOR A | |||
33094 | LD A,H | |||
33095 | RET | Return. | ||
Drawing_29 | 33096 | DEC D | ||
33097 | LD H,A | |||
33098 | LD A,D | |||
33099 | CP 255 | |||
33101 | LD A,H | |||
33102 | RET NZ | |||
33103 | INC D | |||
33104 | RET | Return. | ||
Drawing_30 | 33105 | BIT 0,C | If bit 0 of C is not set then jump to Drawing_38. | |
33107 | JR NZ,Drawing_38 | |||
33109 | PUSH HL | Stash HL and BC on the stack. | ||
33110 | PUSH BC | |||
Drawing_31 | 33111 | CALL Drawing_46 | Call Drawing_46. | |
33114 | BIT 2,C | If bit 2 of C is set then jump to Drawing_32. | ||
33116 | JR Z,Drawing_32 | |||
33118 | CALL Drawing_29 | Call Drawing_29. | ||
33121 | JR Z,Drawing_37 | |||
33123 | JR Drawing_33 | Jump to Drawing_33. | ||
Drawing_32 | 33125 | CALL Drawing_28 | Call Drawing_28. | |
33128 | JR Z,Drawing_37 | |||
Drawing_33 | 33130 | DEC B | Decrease B by one. | |
33131 | JR NZ,Drawing_36 | Jump to Drawing_36 if it is not zero. | ||
33133 | BIT 1,C | If bit 1 of C is set then jump to Drawing_34. | ||
33135 | JR Z,Drawing_34 | |||
33137 | CALL Drawing_27 | Call Drawing_27. | ||
33140 | JR Z,Drawing_37 | |||
33142 | JR Drawing_35 | |||
Drawing_34 | 33144 | CALL Drawing_25 | ||
33147 | JR Z,Drawing_37 | |||
Drawing_35 | 33149 | POP BC | ||
33150 | PUSH BC | |||
Drawing_36 | 33151 | DEC L | ||
33152 | JR NZ,Drawing_31 | |||
Drawing_37 | 33154 | POP BC | Restore BC and HL from the stack. | |
33155 | POP HL | |||
33156 | RET | Return. | ||
Drawing_38 | 33157 | PUSH HL | Stash HL and BC on the stack. | |
33158 | PUSH BC | |||
Drawing_39 | 33159 | CALL Drawing_46 | Call Drawing_46. | |
33162 | BIT 1,C | |||
33164 | JR Z,Drawing_40 | |||
33166 | CALL Drawing_27 | |||
33169 | JR Z,Drawing_45 | |||
33171 | JR Drawing_41 | |||
Drawing_40 | 33173 | CALL Drawing_25 | ||
33176 | JR Z,Drawing_45 | |||
Drawing_41 | 33178 | DEC B | ||
33179 | JR NZ,Drawing_44 | |||
33181 | BIT 2,C | |||
33183 | JR Z,Drawing_42 | |||
33185 | CALL Drawing_29 | |||
33188 | JR Z,Drawing_45 | |||
33190 | JR Drawing_43 | |||
Drawing_42 | 33192 | CALL Drawing_28 | ||
33195 | JR Z,Drawing_45 | |||
Drawing_43 | 33197 | POP BC | ||
33198 | PUSH BC | |||
Drawing_44 | 33199 | DEC L | ||
33200 | JR NZ,Drawing_39 | |||
Drawing_45 | 33202 | POP BC | Restore BC and HL from the stack. | |
33203 | POP HL | |||
33204 | RET | Return. | ||
Drawing_46 | 33205 | PUSH HL | ||
33206 | CALL Drawing_48 | |||
33209 | PUSH AF | |||
33210 | PUSH HL | |||
33211 | LD A,H | |||
33212 | AND %00011000 | Keep only bits 3-4. | ||
33214 | RRCA | |||
33215 | RRCA | |||
33216 | RRCA | |||
33217 | ADD A,88 | |||
33219 | LD H,A | |||
33220 | LD A,(HL) | |||
33221 | AND %00111000 | Keep only bits 3-5. | ||
33223 | LD (HL),A | |||
33224 | LD A,(33358) | |||
33227 | RLCA | |||
33228 | RLCA | |||
33229 | RLCA | |||
33230 | CP (HL) | |||
33231 | JR NZ,Drawing_47 | |||
33233 | XOR 56 | |||
Drawing_47 | 33235 | RRCA | ||
33236 | RRCA | |||
33237 | RRCA | |||
33238 | OR (HL) | |||
33239 | LD (HL),A | |||
33240 | POP HL | |||
33241 | POP AF | |||
33242 | OR (HL) | |||
33243 | LD (HL),A | |||
33244 | POP HL | |||
33245 | RET | Return. | ||
Drawing_48 | 33246 | LD A,127 | ||
33248 | SUB E | |||
33249 | LD L,A | |||
33250 | AND %00000111 | Keep only bits 0-2. | ||
33252 | OR 64 | |||
33254 | LD H,A | |||
33255 | LD A,L | |||
33256 | AND %11000000 | Keep only bits 6-7. | ||
33258 | RRCA | |||
33259 | RRCA | |||
33260 | RRCA | |||
33261 | OR H | |||
33262 | LD H,A | |||
33263 | LD A,L | |||
33264 | AND %00111000 | Keep only bits 3-5. | ||
33266 | RLCA | |||
33267 | RLCA | |||
33268 | LD L,A | |||
33269 | LD A,D | |||
33270 | RRCA | |||
33271 | RRCA | |||
33272 | RRCA | |||
33273 | AND %00011111 | Keep only bits 0-4. | ||
33275 | OR L | |||
33276 | LD L,A | |||
33277 | LD A,D | |||
33278 | AND %00000111 | Keep only bits 0-2. | ||
33280 | PUSH BC | Stash BC on the stack temporarily. | ||
33281 | LD B,A | Copy A to B used as a counter for the rotate command. | ||
33282 | INC B | |||
33283 | LD A,1 | A=00000001. | ||
Drawing_49 | 33285 | RRC A | Rotate A right once. | |
33287 | DJNZ Drawing_49 | Decrease counter by one and loop back to Drawing_49 until counter is zero. | ||
33289 | POP BC | Restore BC from the stack. | ||
33290 | RET | Return. | ||
DrawingClear | 33291 | CALL LocationLit | Call LocationLit. | |
33294 | EX AF,AF' | Store the first byte of the graphic data in the shadow AF register. | ||
33295 | LD A,(IY+0) | |||
33298 | INC IY | Increment the graphic data pointer to the next byte. | ||
33300 | EX AF,AF' | Switch back to the "normal" AF register to check the result of the call to LocationLit. | ||
33301 | JR NC,DrawingBorder | Jump to DrawingBorder if LocationLit did not set the carry flag (so, it is LIGHT). | ||
33303 | EX AF,AF' | Overwrite the graphic data in the shadow AF register to $00 (black). | ||
33304 | XOR A | |||
33305 | EX AF,AF' | Switch back to the "normal" AF register simply to accomodate the jump from 33301. | ||
DrawingBorder | 33306 | EX AF,AF' | Switch to the shadow AF register containing the first byte of the graphic data (or $00 if it's dark). | |
33307 | OUT (254),A | Set the border colour to the value in A. | ||
33309 | PUSH HL | Store HL, DE and BC on the stack. | ||
33310 | PUSH DE | |||
33311 | PUSH BC | |||
33312 | LD HL,16384 | Write $00 to $4000-$4FFF (the screen buffer). | ||
33315 | LD DE,16385 | |||
33318 | LD BC,4095 | |||
33321 | LD (HL),0 | |||
33323 | LDIR | |||
33325 | LD HL,22528 | Set up copying to the attribute buffer (start=$5800, length=$01FF). | ||
33328 | LD DE,22529 | |||
33331 | LD BC,511 | |||
33334 | LD A,(IY+0) | A=The next byte (second) of the graphic data. | ||
33337 | INC IY | Increment the graphic data pointer to the next byte. | ||
33339 | EX AF,AF' | Switch back to the "normal" AF register which contains the LIGHT/ DARK carry flag. | ||
33340 | JR NC,DrawingPaper | Jump to DrawingPaper if LocationLit did not set the carry flag (so, it is LIGHT). | ||
33342 | EX AF,AF' | Overwrite the graphic data in the shadow AF register to $00 (black). | ||
33343 | XOR A | |||
33344 | EX AF,AF' | Switch back to the "normal" AF register simply to accomodate the jump from 33340. | ||
DrawingPaper | 33345 | EX AF,AF' | Switch to the shadow AF register containing the second byte of the graphic data (or $00 if it's dark). | |
33346 | LD (HL),A | Write this to the attribute buffer using the target/ length specified previously. | ||
33347 | LDIR | |||
33349 | POP BC | Restore BC, DE and HL from the stack. | ||
33350 | POP DE | |||
33351 | POP HL | |||
33352 | EX AF,AF' | Switch back to the "normal" AF register which contains the LIGHT/ DARK carry flag. | ||
33353 | RET NC | Return if it is LIGHT. | ||
33354 | POP HL | Else, restore HL from the stack and jump to DrawingEnd to finish. | ||
33355 | JP DrawingEnd | |||
33358 | DEFB 56,0,0 |
Prev: 32631 | Up: Map | Next: 33361 |