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 (07); 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=07)  
26566  INC D  D=4 or 9 (ycoordinate of the bottom line of the board)  
26567  AND 7  A=07  
26569  ADD A,E  E=xcoordinate 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 bitwidth 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=bitwidth 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 ycoordinate  
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 n1,(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 