Prev: 49654 Up: Map Next: 49716
49667: Screen Calculation
Used by the routines at 37376, Yin_Yang_Copy, Print_String, 48915 and 49409.
This routine works out which area of the screen we are in. Here are a few examples of usage; A=34 HL=16384 A=34 (restored from E) AND 7 == A=2 BC=512 HL=16896 A=34 (restored from E) AND 56 == A=32 BC=32 BC=128 HL=17024
Screen_Calc 49667 LD E,A Stash the accumulator in E for later.
49668 AND 192 Mask off low bits d6-d7.
49670 JP Z,Screen_Top If the result is now zero, jump to Screen_Top.
49673 CP 64 If A is 64 then jump to Screen_Middle.
49675 JP Z,Screen_Middle
Screen_Bottom 49678 LD HL,20480 Sets HL to 20480 (the bottom of the screen buffer).
49681 JP Screen_Calc_Minor Jump to Screen_Calc_Minor.
Screen_Middle 49684 LD HL,18432 Sets HL to 18432 (the middle of the screen buffer).
49687 JP Screen_Calc_Minor Jump to Screen_Calc_Minor.
Screen_Top 49690 LD HL,16384 Sets HL to 16384 (the top of the screen buffer) and continue on...
Now we have the base screen address; work out the exact address to return.
Screen_Calc_Minor 49693 LD A,E Restore the accumulator from E.
49694 AND 7 Mask bits d0-d2.
49696 LD B,A Push the accumulator into BC as the high-order byte (low is 0).
49697 LD C,0
49699 ADD HL,BC Adds BC to HL.
49700 LD A,E Again, restore the accumulator from E.
49701 AND 56 Mask bits d3-d5.
49703 LD C,A Push the accumulator into BC as the low-order byte (high is 0).
49704 LD B,0
49706 SLA C * 2 * 2.
49708 RL B
49710 SLA C
49712 RL B
49714 ADD HL,BC Adds BC to HL.
49715 RET Return.
Prev: 49654 Up: Map Next: 49716