Routines |
Prev: 64367 | Up: Map | Next: 64548 |
Used by the routine at 64361.
|
||||||||
64456 | LD (64546),HL | Modify jump (at 64546) destination to address stored in HL | ||||||
64459 | LD A,(23407) | Load y-coordinate of bottom of region to scroll (pixels) into A and C... | ||||||
64462 | LD C,A | ... | ||||||
64463 | LD DE,65140 | Point DE at table of display file addresses of start of each pixel row | ||||||
64466 | LD H,0 | Load HL with double y-coordinate of bottom of region to scroll... | ||||||
64468 | LD L,A | ...(as entries in table at 26240 are two bytes wide)... | ||||||
64469 | ADD HL,HL | ... | ||||||
64470 | ADD HL,DE | ...and add to DE as offset in HL | ||||||
64471 | LD E,(HL) | Load display file address of pixel row of interest into DE... | ||||||
64472 | INC HL | ... | ||||||
64473 | LD D,(HL) | ... | ||||||
64474 | EX DE,HL | Swap HL (now display file address of start of A-th pixel row) and DE (now points to entry in table at 65140) | ||||||
64475 | LD A,(23406) | Load y-coordinate of top of region to scroll (pixels) into B... | ||||||
64478 | LD B,A | ... | ||||||
64479 | LD A,C | Load y-coordinate of bottom of region to scroll into A... | ||||||
64480 | SUB B | ...and subtract B to get height of region to scroll (pixels) | ||||||
64481 | EX AF,AF' | Swap AF and AF' (A' now holds height of region to scroll in pixels) | ||||||
64482 | LD A,(23404) | Load C with x-coordinate of left edge of region to scroll (characters)... | ||||||
64485 | LD C,A | ... | ||||||
64486 | LD A,L | Add this x-coordinate value as offset (via OR) to HL... | ||||||
64487 | OR C | ... | ||||||
64488 | LD L,A | ... | ||||||
64489 | LD A,(23405) | Load A with x-coordinate of right edge of region to scroll (characters) | ||||||
64492 | SUB C | Subtract C... | ||||||
64493 | INC A | ...and add one to get width (characters) of region to scroll | ||||||
64494 | LD B,0 | Load BC with width of region to scroll (characters)... | ||||||
64496 | LD C,A | ... | ||||||
64497 | PUSH BC | Store BC (width of region to scroll in characters) | ||||||
64498 | PUSH HL | Store HL (current position in display file, at left edge of bottom pixel row in region to scroll) | ||||||
64499 | LD DE,23296 | Point DE at 23296 | ||||||
64502 | LDIR | Copy BC bytes of data from HL to DE | ||||||
64504 | POP HL | Restore HL (current position in display file, at left edge of bottom pixel row in region to scroll) | ||||||
64505 | POP BC | Restore BC (width of region to scroll in characters) | ||||||
64506 | EXX | Swap all registers (B' = width of region to scroll in characters) | ||||||
64507 | EX AF,AF' | Swap AF and AF' (A now holds height of region to scroll in pixels) | ||||||
64508 | JP Z,64544 | If height of region to scroll in pixels is zero then skip ahead to 64544 | ||||||
64511 | LD B,A | Load B with height of region to scroll in pixels | ||||||
64512 | EXX | Swap all registers (B = width of region to scroll, B' = remaining number of pixel rows to scroll) | ||||||
64513 | LD A,H | Load D and A with H minus 1 and E with L... | ||||||
64514 | DEC A | ... | ||||||
64515 | LD E,L | ... | ||||||
64516 | LD D,A | ... | ||||||
64517 | CPL | Invert all bits in A | ||||||
64518 | AND 7 | If any of three least significant bits in A are set (i.e. at least one of the three least significant bits in H were also set) then skip ahead to 64534 | ||||||
64520 | JP NZ,64534 | |||||||
At least one of the three least significant bits of H are set, meaning we could be at the top of a third of the display
|
||||||||
64523 | LD A,E | Move DE back by 32 bytes to move up one character row (eight rows of pixels)... | ||||||
64524 | SUB 32 | ... | ||||||
64526 | LD E,A | ... | ||||||
64527 | JP C,64534 | If E hasn't gone under zero (i.e. we haven't moved 32 bytes back from the top character row of a third) then skip ahead to 64534 else move down by a third | ||||||
64530 | LD A,D | |||||||
64531 | ADD A,8 | |||||||
64533 | LD D,A | |||||||
64534 | EX DE,HL | Swap DE (now points to start of lower pixel row) and HL (now points to start of upper pixel row) | ||||||
64535 | PUSH HL | Store HL (pointer to upper pixel row) | ||||||
64536 | PUSH BC | Store BC (B = width of region to scroll, in characters) | ||||||
64537 | LDIR | Copy row of bitmap data down a row from HL to DE | ||||||
64539 | POP BC | Restore BC (B = width of region to scroll, in characters) | ||||||
64540 | POP HL | Store HL (pointer to upper pixel row) | ||||||
64541 | EXX | Swap all registers (B = remaining number of pixel rows to scroll, B' = width of region to scroll) | ||||||
64542 | DJNZ 64512 | Loop back to 64512 to copy next row of pixels down | ||||||
64544 | EXX | Swap all registers | ||||||
64545 | JP 64360 | Jump to address that was in HL at start of this routine |
Prev: 64367 | Up: Map | Next: 64548 |