![]() |
Routines |
| Prev: 81BA | Up: Map | Next: 8227 |
|
||||||||||
|
Number of character columns to draw stored at 8BAF. Number of character rows at 8BB0.
|
||||||||||
| 81F3 | LD C,H | Copy high byte of display address position to C register | ||||||||
| 81F4 | LD A,($8BAF) | Copy counter for number of columns to draw into working buffer | ||||||||
| 81F7 | LD ($8BB1),A | |||||||||
| 81FA | LD H,C | Get high byte of display address | ||||||||
|
Screen drawing loop for a row of graphics (1 character row, multiple columns):
|
||||||||||
| 81FB | LD B,$08 | 8 pixel rows to draw | ||||||||
| 81FD | LD A,(DE) | Get graphics byte | ||||||||
| 81FE | LD (HL),A | ...copy it to the screeen | ||||||||
| 81FF | INC H | Increment high byte of display address to move down one pixel | ||||||||
| 8200 | INC DE | Increment graphics address pointer ready for next graphics byte | ||||||||
| 8201 | DJNZ $81FD | Repeat for 8 pixel rows | ||||||||
| 8203 | INC L | Move right one character position on screen | ||||||||
| 8204 | LD A,($8BB1) | Retrieve, decrement and re-store the column counter | ||||||||
| 8207 | DEC A | |||||||||
| 8208 | LD ($8BB1),A | |||||||||
| 820B | JR NZ,$81FA | Keep drawing until all columns are done | ||||||||
|
Calculate the screen display address for the next (character) row:
|
||||||||||
| 820D | LD A,($8BAF) | Get the total number of columns drawn | ||||||||
| 8210 | LD B,A | Store in B register | ||||||||
| 8211 | LD A,$21 | Subtract from 33 - this gives us the offset for the low byte screen display position for the next row down | ||||||||
| 8213 | SUB B | |||||||||
| 8214 | DEC L | L was incremented earlier before the 'column finished check', so move it back to its previous position. | ||||||||
| 8215 | ADD A,L | ...and add it so it's in the correct column position to draw the next row. | ||||||||
| 8216 | LD L,A | |||||||||
| 8217 | JR NC,$821D | Check to see if this has caused us to go past a 'third-of-screen' boundary | ||||||||
| 8219 | LD A,C | If so, modify the high byte of the stored screen address accordingly | ||||||||
| 821A | ADD A,$08 | |||||||||
| 821C | LD C,A | |||||||||
|
Continue to draw rows of graphics:
|
||||||||||
| 821D | LD A,($8BB0) | Get the number of rows to draw | ||||||||
| 8220 | DEC A | Reduce by one | ||||||||
| 8221 | LD ($8BB0),A | ...and re-store | ||||||||
| 8224 | JR NZ,$81F4 | All rows finished? If not, continue to draw the graphics. | ||||||||
| 8226 | RET | |||||||||
| Prev: 81BA | Up: Map | Next: 8227 |