![]() |
Routines |
| Prev: 6980 | Up: Map | Next: 6A09 |
|
Used by the routine at CreateWindow.
|
||||
| DrawPlayArea | 69BC | LD HL,($5C36) | Stash CHARS on the stack. | |
| 69BF | PUSH HL | |||
| 69C0 | LD HL,$74B1 | Write UDG_Tiles to CHARS. | ||
| 69C3 | LD ($5C36),HL | |||
| 69C6 | LD HL,$7691 | HL=SidebarLayoutData. | ||
| 69C9 | LD DE,$7751 | DE=SidebarAttributes. | ||
| 69CC | EXX | Switch to the shadow registers. | ||
| 69CD | LD HL,$4000 | HL'=4000 (screen buffer). | ||
| 69D0 | LD DE,$5800 | DE'=5800 (attributes buffer). | ||
| 69D3 | LD C,$18 | C'=18 (height of the sidebar). | ||
| 69D5 | LD A,$08 | Write 08 (width of the sidebar) to WidthCounter. | ||
| 69D7 | LD ($5E2C),A | |||
| DrawPlayArea_Loop | 69DA | LD A,($5E2C) | B'=WidthCounter. | |
| 69DD | LD B,A | |||
| 69DE | PUSH HL | Stash HL and DE on the stack. | ||
| 69DF | PUSH DE | |||
| DrawPlayArea_LineLoop | 69E0 | EXX | Switch back to the normal registers. | |
| 69E1 | LD A,(HL) | A=fetch the sidebar layout data. | ||
| 69E2 | INC HL | Increment the sidebar layout data pointer by one. | ||
| 69E3 | EXX | Switch to the shadow registers. | ||
|
Now using the screen data held by the shadow registers.
|
||||
| 69E4 | CALL PrintScreen | Call PrintScreen. | ||
| 69E7 | EXX | Switch back to the normal registers. | ||
| 69E8 | LD A,(DE) | A=fetch the sidebar attribute data. | ||
| 69E9 | INC DE | Increment the sidebar attribute data pointer by one. | ||
| 69EA | EXX | Switch to the shadow registers. | ||
| 69EB | LD (DE),A | Write the sidebar attribute data to the attribute buffer. | ||
| 69EC | INC DE | Increment the attribute buffer pointer by one. | ||
| 69ED | DJNZ DrawPlayArea_LineLoop | Decrease counter by one and loop back to DrawPlayArea_LineLoop until counter is zero. | ||
|
Restore the attribute buffer address for the start of this line.
|
||||
| 69EF | POP HL | Restore HL from the stack. | ||
| 69F0 | CALL $6910 | Call 6910. | ||
| 69F3 | EX DE,HL | DE=HL (ignoring the exchange as HL is instantly overwritten below). | ||
|
Restore the screen buffer address for the start of this line.
|
||||
| 69F4 | POP HL | Restore HL from the stack. | ||
| 69F5 | CALL $6910 | Call 6910. | ||
|
Account for the Spectrum screen layout in memory.
|
||||
| 69F8 | LD A,L | A=L. | ||
| 69F9 | AND %11100000 | Keep only bits 5-7. | ||
| 69FB | JR NZ,DrawPlayArea_Skip | Jump to DrawPlayArea_Skip if we're not crossing a screen section. | ||
| 69FD | LD A,H | Else H=H+07. | ||
| 69FE | ADD A,$07 | |||
| 6A00 | LD H,A | |||
| DrawPlayArea_Skip | 6A01 | DEC C | Decrease the height counter by one. | |
| 6A02 | JR NZ,DrawPlayArea_Loop | Keep jumping back to DrawPlayArea_Loop until the height counter is zero. | ||
|
All done! Finish by reverting the change to CHARS and returning.
|
||||
| 6A04 | POP HL | Restore CHARSET from the stack and write it back to CHARS. | ||
| 6A05 | LD ($5C36),HL | |||
| 6A08 | RET | Return. | ||
| Prev: 6980 | Up: Map | Next: 6A09 |