![]() |
Routines |
| Prev: 5B00 | Up: Map | Next: 607B |
|
Used by the routine at 64D2.
|
||||
| 6000 | EXX | |||
| 6001 | LD HL,$581E | Point HL' and DE' at the rightmost end of the top row of attribute bytes on the screen | ||
| 6004 | LD DE,$581F | |||
| 6007 | LD BC,$001F | We need to scroll 31 attribute bytes at a time | ||
| 600A | EXX | |||
| 600B | LD HL,$401E | Point HL and DE at the rightmost end of the top row of pixels on the screen | ||
| 600E | LD DE,$401F | |||
| 6011 | LD BC,$001F | We need to scroll 31 display file bytes at a time | ||
| 6014 | LD A,$15 | There are 21 rows of character squares to scroll | ||
| 6016 | EX AF,AF' | |||
| 6017 | LD A,$08 | Each row of character squares contains 8 rows of pixels | ||
| 6019 | PUSH HL | |||
| 601A | PUSH DE | |||
| 601B | LDDR | Scroll a row of pixels right one column | ||
| 601D | POP DE | |||
| 601E | POP HL | |||
| 601F | LD C,$1F | BC=001F | ||
| 6021 | INC H | Point HL and DE at the next row of pixels | ||
| 6022 | INC D | |||
| 6023 | DEC A | Next row in this block of 8x32 | ||
| 6024 | JR NZ,$6019 | Jump back until this 8x32 pixel block has been scrolled | ||
| 6026 | EXX | |||
| 6027 | LDDR | Scroll a row of attribute bytes right one column | ||
| 6029 | LD C,$3F | Point HL' and DE' at the rightmost end of the next row of attribute bytes on the screen | ||
| 602B | ADD HL,BC | |||
| 602C | EX DE,HL | |||
| 602D | ADD HL,BC | |||
| 602E | EX DE,HL | |||
| 602F | LD C,$1F | BC'=001F | ||
| 6031 | EXX | |||
| 6032 | LD A,$20 | Point HL and DE at the rightmost end of the top row of the next 8x32 block of pixels | ||
| 6034 | ADD A,E | |||
| 6035 | LD E,A | |||
| 6036 | LD A,$20 | |||
| 6038 | ADD A,L | |||
| 6039 | LD L,A | |||
| 603A | EX AF,AF' | |||
| 603B | DEC A | Next row of character squares | ||
| 603C | JR Z,$604E | Exit this loop if all 21 rows have been scrolled right | ||
| 603E | CP $0D | Have we reached the middle third of the screen? | ||
| 6040 | JR Z,$6016 | Jump if so | ||
| 6042 | CP $05 | Have we reached the bottom third of the screen? | ||
| 6044 | JR Z,$6016 | Jump if so | ||
| 6046 | EX AF,AF' | |||
| 6047 | LD A,H | Point HL and DE at the rightmost end of the top row of the next 8x32 block of pixels | ||
| 6048 | SUB $08 | |||
| 604A | LD H,A | |||
| 604B | LD D,A | |||
| 604C | JR $6017 | Jump back to deal with the next row of character squares | ||
|
The 21 rows of character squares have been scrolled one place to the right. Now the leftmost column needs to be filled.
|
||||
| 604E | EXX | |||
| 604F | LD HL,$5800 | Point HL' and DE' at the attribute file and display file addresses for the top left of the screen, and set BC'=0020; however, these values are not used | ||
| 6052 | LD DE,$4000 | |||
| 6055 | INC C | |||
| 6056 | EXX | |||
| 6057 | LD A,($7F00) | A=leftmost column of the skool on-screen (0-64) | ||
| 605A | DEC A | We are scrolling one column right | ||
| 605B | LD ($7F00),A | |||
|
This entry point is used by the routine at 609B with A holding the x-coordinate of the rightmost column of the skool on-screen (31-95).
|
||||
| 605E | LD E,A | E=X (x-coordinate of the far left or far right column of the skool currently on-screen) | ||
| 605F | LD D,$98 | D=Y (this is the y-coordinate of the top row of the screen) | ||
| 6061 | LD B,$15 | There are 21 rows on the screen | ||
| 6063 | PUSH DE | |||
| 6064 | PUSH BC | |||
| 6065 | CALL $610B | Print the character square at (X,Y) | ||
| 6068 | POP BC | |||
| 6069 | POP DE | |||
| 606A | LD A,H | Point HL at the attribute file address corresponding to the skool coordinates (X,Y) | ||
| 606B | RRCA | |||
| 606C | RRCA | |||
| 606D | RRCA | |||
| 606E | ADD A,$4F | |||
| 6070 | LD H,A | |||
| 6071 | SET 7,E | Point DE at the attribute byte for the skool coordinates (X,Y) | ||
| 6073 | LD A,(DE) | Pick the attribute byte up in A | ||
| 6074 | RES 7,E | Restore the skool coordinates (X,Y) to DE | ||
| 6076 | LD (HL),A | Poke the attribute byte onto the screen | ||
| 6077 | INC D | Next row (Y) of the screen | ||
| 6078 | DJNZ $6063 | Jump back until all 21 rows are done | ||
| 607A | RET | |||
| Prev: 5B00 | Up: Map | Next: 607B |