Routines |
Prev: 64361 | Up: Map | Next: 64456 |
Used by the routine at 64354.
|
||||||||
64367 | LD (64454),HL | Modify jump (at 64453) destination to address stored in HL | ||||||
64370 | LD A,(23406) | Load y-coordinate of top of region to scroll (pixels) into C... | ||||||
64373 | LD C,A | ... | ||||||
64374 | LD DE,65140 | Point DE at table of display file addresses of start of each pixel row | ||||||
64377 | LD H,0 | Load HL with double y-coordinate of top of region to scroll... | ||||||
64379 | LD L,A | ...(as entries in table at 26240 are two bytes wide)... | ||||||
64380 | ADD HL,HL | ... | ||||||
64381 | ADD HL,DE | ...and add to DE as offset in HL | ||||||
64382 | LD E,(HL) | Load display file address of pixel row of interest into DE... | ||||||
64383 | INC HL | ... | ||||||
64384 | LD D,(HL) | ... | ||||||
64385 | 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) | ||||||
64386 | LD A,(23407) | Load y-coordinate of bottom of region to scroll (pixels) into A... | ||||||
64389 | SUB C | ...and subtract C to get height of region to scroll (pixels) | ||||||
64390 | EX AF,AF' | Swap AF and AF' (A' now holds height of region to scroll in pixels) | ||||||
64391 | LD A,(23404) | Load C with x-coordinate of left edge of region to scroll (characters)... | ||||||
64394 | LD C,A | ... | ||||||
64395 | LD A,L | Add this x-coordinate value as offset (via OR) to HL... | ||||||
64396 | OR C | ... | ||||||
64397 | LD L,A | ... | ||||||
64398 | LD A,(23405) | Load A with x-coordinate of right edge of region to scroll (characters) | ||||||
64401 | SUB C | Subtract C... | ||||||
64402 | INC A | ...and add one to get width (characters) of region to scroll | ||||||
64403 | LD B,0 | Load BC with width of region to scroll (characters)... | ||||||
64405 | LD C,A | ... | ||||||
64406 | PUSH BC | Store BC (width of region to scroll in characters) | ||||||
64407 | PUSH HL | Store HL (current position in display file, at left edge of top pixel row in region to scroll) | ||||||
64408 | LD DE,23296 | Point DE at 23296 | ||||||
64411 | LDIR | Copy BC bytes of data from HL to DE | ||||||
64413 | POP HL | Restore HL (current position in display file, at left edge of top pixel row in region to scroll) | ||||||
64414 | POP BC | Restore BC (width of region to scroll in characters) | ||||||
64415 | EXX | Swap all registers (B' = width of region to scroll in characters) | ||||||
64416 | EX AF,AF' | Swap AF and AF' (A now holds height of region to scroll in pixels) | ||||||
64417 | JP Z,64452 | If height of region to scroll in pixels is zero then skip ahead to 64452 | ||||||
64420 | LD B,A | Load B with height of region to scroll in pixels | ||||||
64421 | EXX | Swap all registers (B = width of region to scroll, B' = remaining number of pixel rows to scroll) | ||||||
64422 | LD A,H | Load D and A with H plus 1 and E with L... | ||||||
64423 | INC A | ... | ||||||
64424 | LD D,A | ... | ||||||
64425 | LD E,L | ... | ||||||
64426 | 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 64442 | ||||||
64428 | JP NZ,64442 | |||||||
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
|
||||||||
64431 | LD A,E | Move DE on by 32 bytes to move up one character row (eight rows of pixels)... | ||||||
64432 | ADD A,32 | ... | ||||||
64434 | LD E,A | ... | ||||||
64435 | JP C,64442 | If L hasn't gone over 256 (i.e. we haven't moved 32 bytes on from the top pixel row of the bottom character row of a third) then skip ahead to 64442 else move up by a third | ||||||
64438 | LD A,D | |||||||
64439 | SUB 8 | |||||||
64441 | LD D,A | |||||||
64442 | EX DE,HL | Swap DE (now points to start of upper pixel row) and HL (now points to start of lower pixel row) | ||||||
64443 | PUSH HL | Store HL (pointer to lower pixel row) | ||||||
64444 | PUSH BC | Store BC (B = width of region to scroll, in characters) | ||||||
64445 | LDIR | Copy row of bitmap data up a row from HL to DE | ||||||
64447 | POP BC | Restore BC (B = width of region to scroll, in characters) | ||||||
64448 | POP HL | Store HL (pointer to upper pixel row) | ||||||
64449 | EXX | Swap all registers (B = remaining number of pixel rows to scroll, B' = width of region to scroll) | ||||||
64450 | DJNZ 64421 | Loop back to 64421 to copy next row of pixels up | ||||||
64452 | EXX | Swap all registers | ||||||
64453 | JP 64360 | Jump to address that was in HL at start of this routine |
Prev: 64361 | Up: Map | Next: 64456 |