Routines |
Prev: 26512 | Up: Map | Next: 26637 |
Used by the routine at 26752. Returns with the zero flag set if the end of the message has been reached.
|
||||||||
26513 | CALL 26318 | A=ASCII code of the next character from the message being written | ||||||
This entry point is used by the routine at 24175 when ERIC's writing on a board.
|
||||||||
26516 | LD C,A | C=ASCII code of the next character from the message being written | ||||||
26517 | CALL 26453 | Collect information about the blackboard | ||||||
26520 | LD A,C | |||||||
26521 | LD C,B | Point BC at the blackboard's buffer (32596, 32602, 32608, 32614 or 32620) | ||||||
26522 | LD B,127 | |||||||
26524 | AND A | Have we reached the end of the message? | ||||||
26525 | JR NZ,26531 | Jump if not | ||||||
26527 | DEC A | A=255 | ||||||
26528 | LD (BC),A | Set the first byte of the blackboard's buffer to 255 if the message is finished, or the the pixel column number for the next letter to be written otherwise | ||||||
26529 | INC A | Set the zero flag if the end of the message has been reached | ||||||
26530 | RET | |||||||
We haven't reached the end of the message yet. Examine the next character to be written.
|
||||||||
26531 | CP 2 | Character code 2 is newline | ||||||
26533 | JR NZ,26539 | Jump unless we're starting a new line | ||||||
26535 | LD A,64 | This is the pixel column number of the start of the bottom line of the blackboard | ||||||
26537 | JR 26528 | |||||||
The next character to be written is printable (as opposed to newline).
|
||||||||
26539 | PUSH HL | Save the character number (in H) for now | ||||||
26540 | LD L,A | Place the ASCII code of the character to be written in L | ||||||
26541 | LD H,215 | Now (HL)=bit width of this character | ||||||
26543 | LD A,(BC) | A=current pixel column number on the blackboard | ||||||
26544 | AND 63 | Set the carry flag if there's not enough room on the current line to print the next character (plus one blank pixel column) | ||||||
26546 | ADD A,192 | |||||||
26548 | SCF | |||||||
26549 | ADC A,(HL) | |||||||
26550 | LD A,(BC) | A=current pixel column number on the blackboard | ||||||
26551 | JR NC,26557 | Jump if there's enough room on the current line for the character | ||||||
26553 | CPL | Otherwise move to the other line of the blackboard by setting the current pixel column number to 0 or 64 as appropriate | ||||||
26554 | AND 64 | |||||||
26556 | LD (BC),A | |||||||
26557 | RRCA | Divide the pixel column number by 8 to get the corresponding character square number (0-7); also keep bit 3 for now to check which line of the board we're on | ||||||
26558 | RRCA | |||||||
26559 | RRCA | |||||||
26560 | AND 15 | |||||||
26562 | CP 8 | Are we on the top line of the board? | ||||||
26564 | JR C,26569 | Jump if so (A=0-7) | ||||||
26566 | INC D | D=4 or 9 (y-coordinate of the bottom line of the board) | ||||||
26567 | AND 7 | A=0-7 | ||||||
26569 | ADD A,E | E=x-coordinate of the blackboard tile on which the next character will be written | ||||||
26570 | LD E,A | |||||||
26571 | CALL 26380 | Update the SRB for this blackboard | ||||||
26574 | LD A,(BC) | A=current pixel column number on the blackboard | ||||||
26575 | AND 7 | Modify the RES n,(HL) instruction at 26609 below to reset the appropriate bit for the current pixel column | ||||||
26577 | ADD A,A | |||||||
26578 | ADD A,A | |||||||
26579 | ADD A,A | |||||||
26580 | CPL | |||||||
26581 | SUB 65 | |||||||
26583 | LD (26610),A | |||||||
26586 | LD A,(BC) | A=current pixel column number on the blackboard | ||||||
26587 | ADD A,(HL) | Add the bit-width of character to be written | ||||||
26588 | INC A | Add 1 to make a blank vertical pixel line after the character to be written | ||||||
26589 | LD (BC),A | Set the pixel column number for the next character to be written | ||||||
26590 | LD C,(HL) | C=bit-width of the character to be written | ||||||
26591 | EX DE,HL | Now DE points at the bitmap data for the character to be written on the board, and HL holds the coordinates of the blackboard tile on which the character will be written | ||||||
26592 | LD A,H | A=blackboard tile y-coordinate | ||||||
26593 | LD H,181 | Pick up the Q value (0<=Q<=143) for the blackboard tile from page 181 in L (see 24684) | ||||||
26595 | LD L,(HL) | |||||||
26596 | ADD A,160 | Collect the LSB of the base address of the skool UDG for the blackboard tile in L | ||||||
26598 | LD H,A | |||||||
26599 | LD L,(HL) | |||||||
26600 | LD H,128 | The base page for all blackboard tile UDGs is 128 | ||||||
26602 | INC D | Point DE at the next pixel column of bitmap data for the character to be written | ||||||
26603 | LD A,(DE) | Pick this up in A | ||||||
26604 | LD B,8 | 8 horizontal pixel lines in each character square | ||||||
26606 | RLCA | Should a bit of chalk appear here? | ||||||
26607 | JR NC,26611 | Jump if not | ||||||
26609 | RES 7,(HL) | Reset the appropriate bit in the skool UDG for the blackboard tile, thus making a bit of chalk appear; this instruction is modified by this routine to reset the required bit | ||||||
26611 | INC H | Next row of the blackboard tile UDG | ||||||
26612 | DJNZ 26606 | Jump back until all 8 rows are done | ||||||
26614 | LD A,(26610) | Change the RES n,(HL) instruction at 26609 above to RES n-1,(HL) if n>0, or RES 7,(HL) if n=0 | ||||||
26617 | OR 64 | |||||||
26619 | SUB 8 | |||||||
26621 | AND 191 | |||||||
26623 | LD (26610),A | |||||||
26626 | CP 190 | Did we just draw the rightmost vertical pixel line in the current blackboard tile? | ||||||
26628 | JR NZ,26631 | Jump if so | ||||||
26630 | INC L | Set L to the LSB of the base address of the skool UDG for the next blackboard tile to the right | ||||||
26631 | DEC C | Next pixel column of the character bitmap | ||||||
26632 | JR NZ,26600 | Jump back to do the remaining pixel columns | ||||||
26634 | INC C | Reset the zero flag (the message is not finished yet) | ||||||
26635 | POP HL | Restore the character number to H | ||||||
26636 | RET |
Prev: 26512 | Up: Map | Next: 26637 |