![]() |
Routines |
| Prev: A2DB | Up: Map | Next: A34D |
|
||||||||||
| A2E6 | PUSH IX | Save IX and BC | ||||||||
| A2E8 | PUSH BC | |||||||||
| A2E9 | LD A,$01 | Initialise the width of the popup at A22E | ||||||||
| A2EB | LD ($A22E),A | |||||||||
|
First compute the width of the windows based on the max length of all the lines of text plus 2 Special case: the first line of text computes a width of length of text plus 1
|
||||||||||
| A2EE | LD A,$01 | Initialise the temporal computed width of the windows at A22C | ||||||||
| A2F0 | LD ($A22C),A | |||||||||
| A2F3 | LD DE,$0003 | In the first iteration, point IX to the first character of the line. Subsequent iterations points to the vertical position | ||||||||
| A2F6 | ADD IX,DE | |||||||||
| A2F8 | LD A,(IX+$00) | Pick up the character at IX | ||||||||
| A2FB | OR A | Is the character an end of marker ($00)? | ||||||||
| A2FC | JP Z,$A308 | Jump if so | ||||||||
| A2FF | LD HL,$A22C | Increment the temporal computed width at A22C | ||||||||
| A302 | INC (HL) | |||||||||
| A303 | INC IX | Increment the address pointer to read the next character | ||||||||
| A305 | JP $A2F8 | Jump back and repeat the process | ||||||||
| A308 | LD A,($A22C) | Compare the width computed in the last iteration with the max width previously saved | ||||||||
| A30B | LD HL,$A22E | |||||||||
| A30E | CP (HL) | |||||||||
| A30F | JP C,$A315 | Jump if the max width is greater or equal than the current computed width | ||||||||
| A312 | LD ($A22E),A | Update the max width of the windows at A095 with the new computed value | ||||||||
| A315 | DJNZ $A2EE | Jump back while there are lines to process | ||||||||
|
The next section of code obtain the position and color attributes of the windows
|
||||||||||
| A317 | POP BC | Restore BC and IX | ||||||||
| A318 | POP IX | |||||||||
| A31A | PUSH IX | Save BC and IX | ||||||||
| A31C | PUSH BC | |||||||||
| A31D | LD A,B | Is there only one line of text? | ||||||||
| A31E | CP $01 | |||||||||
| A320 | JP NZ,$A327 | Jump if not | ||||||||
| A323 | LD HL,$A22E | Increment the width of the windows by one at A22E. This account for the special case described above | ||||||||
| A326 | INC (HL) | |||||||||
| A327 | LD A,(IX+$01) | Pick up the horizontal position of the first line of text | ||||||||
| A32A | SUB $03 | Substract 3 to obtain the horizontal position of the windows: one for the border and two for the left margin. | ||||||||
| A32C | LD H,A | Save the horizontal position of the windows at H | ||||||||
| A32D | LD A,(IX+$02) | Pick up the vertical position of the first line of text | ||||||||
| A330 | SRL A | The position is defined in bits 7-3 so move this value to bits 4-0 | ||||||||
| A332 | SRL A | |||||||||
| A334 | SRL A | |||||||||
| A336 | DEC A | Decrement by one to account for the top border | ||||||||
| A337 | LD L,A | Save the vertical position of the windows at L | ||||||||
| A338 | LD E,B | Save the number of lines of the windows in register E | ||||||||
| A339 | LD A,($A22E) | Pick up the width of the windows saved at A22E | ||||||||
| A33C | SUB $02 | Substract 2 for the borders | ||||||||
| A33E | LD D,A | Save the width of the windows (minus borders) at D | ||||||||
| A33F | LD A,$47 | Save at A the color attributes for the windows border | ||||||||
| A341 | LD C,$07 | Save at C the color attributes for the windows body | ||||||||
| A343 | CALL $BADC | Draws the windows borders in the display file | ||||||||
| A346 | POP BC | Save BC and IX | ||||||||
| A347 | POP IX | |||||||||
| A349 | CALL $A487 | Print the text content of the windows in the display file | ||||||||
| A34C | RET | |||||||||
| Prev: A2DB | Up: Map | Next: A34D |