![]()  | 
Routines | 
| Prev: B82B | Up: Map | Next: B8C4 | 
  | 
||||||||||||
| B84B | LD A,(HL) | Get the next byte. | ||||||||||
| B84C | INC HL | Move to the next position in the buffer. | ||||||||||
| B84D | CP $80 | Is the byte less than 80? | ||||||||||
| B84F | JR C,$B8BD | Jump forward if so. | ||||||||||
| B851 | CP $FF | Is the byte the end marker FF? | ||||||||||
| B853 | RET Z | Return if so. | ||||||||||
| B854 | CP $FE | Is this a change attribute marker FE? | ||||||||||
| B856 | JR NZ,$B85C | Jump forward if not. | ||||||||||
| B858 | LD C,(HL) | Put the next byte in C. | ||||||||||
| B859 | INC HL | Move to the next position in the buffer. | ||||||||||
| B85A | JR $B84B | Jump back to look at the rest of the data. | ||||||||||
| B85C | CP $A8 | Is the byte less than A8? | ||||||||||
| B85E | JR C,$B8BD | Jump forward if so. | ||||||||||
| B860 | CP $E8 | Is the byte greater than E8? | ||||||||||
| B862 | JR NC,$B86E | Jump forward if so. | ||||||||||
| 
 
Move to a new position.
 
 | 
||||||||||||
| B864 | SUB $C8 | Subtract C8 to get the actual x co-ordinate. | ||||||||||
| B866 | ADD A,E | |||||||||||
| B867 | LD E,A | |||||||||||
| B868 | LD A,D | Add the next byte to the current y co-ordinate. | ||||||||||
| B869 | ADD A,(HL) | |||||||||||
| B86A | LD D,A | |||||||||||
| B86B | INC HL | Move to the next position in the buffer. | ||||||||||
| B86C | JR $B84B | Jump back to draw some more. | ||||||||||
| 
 
Check to see if this is an address marker.
 
 | 
||||||||||||
| B86E | CP $FB | Is the byte an address marker? (FB) | ||||||||||
| B870 | JR NZ,$B87E | Jump forward if not. | ||||||||||
| 
 
Change the base address.
 
 | 
||||||||||||
| B872 | LD A,(HL) | Get the low byte. | ||||||||||
| B873 | LD ($B7E9),A | Set this in the printing routine. | ||||||||||
| B876 | INC HL | Move to the next position in the buffer. | ||||||||||
| B877 | LD A,(HL) | Get the high byte. | ||||||||||
| B878 | LD ($B7EA),A | Set this in the printing routine. | ||||||||||
| B87B | INC HL | Move to the next position in the buffer. | ||||||||||
| B87C | JR $B84B | Jump back to draw some more. | ||||||||||
| 
 
Check some more control bytes.
 
 | 
||||||||||||
| B87E | CP $F1 | Is the a "move a column" marker? (F1) | ||||||||||
| B880 | JR Z,$B8C0 | Jump if so. | ||||||||||
| B882 | CP $F3 | Is this a "sub block" marker? (F3) | ||||||||||
| B884 | JR NZ,$B88C | Jump if not. | ||||||||||
| 
 
Chain to block data at another address.
 
 | 
||||||||||||
| B886 | LD A,(HL) | Put the new block marker in HL. | ||||||||||
| B887 | INC HL | |||||||||||
| B888 | LD H,(HL) | |||||||||||
| B889 | LD L,A | |||||||||||
| B88A | JR $B84B | Jump back to draw some more. | ||||||||||
| 
 
Check some more control bytes.
 
 | 
||||||||||||
| B88C | LD B,(HL) | Get the number of rows or columns in B. | ||||||||||
| B88D | INC HL | Move to the next position in the buffer. | ||||||||||
| B88E | CP $F0 | Is this a "row repeat" instruction? (F0) | ||||||||||
| B890 | JR NZ,$B89C | Move forward if not. | ||||||||||
| 
 
Repeat this graphic for a number of rows.
 
 | 
||||||||||||
| B892 | LD A,(HL) | Get the next byte. | ||||||||||
| B893 | INC HL | Move to the next position in the buffer. | ||||||||||
| B894 | CALL $B7BA | Put the graphic on screen. | ||||||||||
| B897 | INC D | Move to the next row. | ||||||||||
| B898 | DJNZ $B894 | Repeat while there are more rows. | ||||||||||
| B89A | JR $B84B | Jump back to draw some more. | ||||||||||
| 
 
Check some more control bytes.
 
 | 
||||||||||||
| B89C | CP $F2 | Is this a "block column repeat" instruction? (F2) | ||||||||||
| B89E | JR NZ,$B8B2 | Jump foward if not. | ||||||||||
| 
 
Repeat this graphic for a number of pairs of columns.
 
 | 
||||||||||||
| B8A0 | LD A,(HL) | Get the next byte. | ||||||||||
| B8A1 | INC HL | Move to the next position in the buffer. | ||||||||||
| B8A2 | CALL $B7BA | Put the graphic on screen. | ||||||||||
| B8A5 | LD A,(HL) | Get the next byte. | ||||||||||
| B8A6 | INC E | Move to the next column. | ||||||||||
| B8A7 | CALL $B7BA | Put the graphic on screen. | ||||||||||
| B8AA | INC E | Move to the next column. | ||||||||||
| B8AB | DEC HL | Move back in the buffer. | ||||||||||
| B8AC | DJNZ $B8A0 | Repeat until all columns are drawn. | ||||||||||
| B8AE | INC HL | Move forward to the correct position in the buffer. | ||||||||||
| B8AF | INC HL | |||||||||||
| B8B0 | JR $B84B | Jump back to draw some more. | ||||||||||
| 
 
Otherwise, the instruction must be "column repeat" (FD), so repeat this graphic for a number of columns.
 
 | 
||||||||||||
| B8B2 | LD A,(HL) | Get the next byte. | ||||||||||
| B8B3 | INC HL | Move to the next position in the buffer. | ||||||||||
| B8B4 | CALL $B7BA | Put the graphic on screen. | ||||||||||
| B8B7 | INC E | Move forward a column. | ||||||||||
| B8B8 | DJNZ $B8B4 | Loop while there is more to draw. | ||||||||||
| B8BA | JP $B84B | Otherwise jump back to draw some more. | ||||||||||
| 
 
Simple instruction - display a graphic
 
 | 
||||||||||||
| B8BD | CALL $B7BA | Put the graphic on screen. | ||||||||||
| B8C0 | INC E | Move forward a column. | ||||||||||
| B8C1 | JP $B84B | Jump back to draw some more. | ||||||||||
| Prev: B82B | Up: Map | Next: B8C4 |