; the 24x4 character LCD has on each position 6x8 pixels ; the left 12 columns (0-11) are addressed from left to right ; but the right 12 column are logical the rows 4-7 and these ; columns are addressed by 0-11 from right to left! ; 843E: CP e8H JR NC,+44 [846E] LD B,A LD A,(7932H) BIT 7,A JR NZ,+3 [844D] LD A,B JR +33 [846E] 844D: LD A,B CP 4cH 8450: JR NZ,+4 [8456] LD A,4cH JR +24 [846E] 8456: CP 90H JR C,+20 [846E] CP d0H JR C,+16 [846E] CP e1H 8460: JR C,+12 [846E] JR +10 [846E] 8464: ADD 16 JR -42 [843E] ; ; ENTRY point of 'char out' character to display is in A ; character values < 32 are all mapped to 10H ; row position to display on LCD in D: valid range 0-3 ; column position to display on LCD in E: valid range 0-23 ; 8468: SUB 32 JR NC,-8 [8464] LD A,16 846E: LD C,A IN A,(19) PUSH AF LD A,4 OUT (19),A LD A,E ; column CP 12 JR NC,+73 847B: IN A,(59) AND 80H JR NZ,-6 LD A,(790D) ADD A,D ; row OR b8H OUT (58),A LD A,E ADD A,A ADD A,A ADD E ; 5*column OR 40H LD B,A 8490: IN A,(59) AND 80H JR NZ,-6 [8490] LD A,B OUT (58),A LD B,0 LD H,B LD L,C ADD HL,HL ADD HL,HL ADD HL,BC ; HL = 5*BC = 5 * char LD BC,(ffd4h) ; font table offset ADD HL,BC BIT 2,D JR Z,+1 DEC HL LD B,5 84AC: IN A,(59) AND 80H JR NZ,-6 LD A,(HL) OUT (5A),A BIT 2,D JR NZ,+8 [84C1] INC HL 84BA: DJNZ -16 [84AC] POP AF OUT (19),A NOP RET 84C1: DEC HL JR -10 [84BA] 84C4: LD A,17H SUB E SET 2,D INC C JR -82 [847B] ; ; Entry Point for "String out" with wrap lines and scrolling if necessary ; in HL ist start address of string and in B the length of the string ; in D the start row (0-3) and in E the start column (0-23) of the string ; 84CD: LD C,0 84CF: PUSH HL PUSH DE PUSH BC LD A,(HL) CALL 8468 POP BC POP DE POP HL DEC B RET Z INC HL INC E LD A,E CP 24 84E0: JR NZ,-19 [84CF] LD E,0 INC D LD A,D CP 4 JR NZ,-27 [84CF] INC C PUSH HL PUSH BC CALL 84F7 84F0: POP BC POP HL LD DE,300H JR -40 [84CF] ; Entry point to scroll up display one line 84F7: LD HL,8528H CALL 8550 ; clear the symbols in the display INC A ; increase logical display offset AND 7 8500: LD (790D),A ; now display scrolls one line up CALL 8712 CALL 854D ; set the symbols in the display LD L,3 850B: CALL 8543 ADD A,L CALL 852C LD A,40H OUT (58),A LD B,60 8518: CALL 8530 XOR A OUT (5A),A DJNZ -8 [8518] 8520: LD A,L LD L,7 CP 3 JR Z,-28 [850B] RET 8528: 00 00 00 00 852C: OR b8H 852E: OUT (58),A 8530: IN A,(59) AND 80H JR NZ,-6 RET 8537: CALL 852C LD A,7cH ; 01111100 CALL 852E LD A,(HL) OUT (5A),A INC HL 8543: IN A,(59) AND 80H JR NZ,-6 [8543] LD A,(790D) RET 854D: LD HL,7901 8550: CALL 8543 CALL 8537 ADD A,3 CALL 8537 ADD A,4 CALL 8537 ADD A,7 JR -45 [8537] ; Entry Point for B-times character in A output (line wrapping, but no scroll) ; in D the start row (0-3) and in E the start column (0-23) of the string ; 86B3: LD C,A 86B4: PUSH DE PUSH BC LD A,C CALL 8468 POP BC POP DE DEC B RET Z INC E LD A,E CP 24 JR NZ,-16 [86B4] LD E,0 INC D LD A,D CP 4 JR NZ,-24 [86B4] RET 8712: ADD A,A ADD A,A ADD A,A OR c0h ; 11000000 + 8*row OUT (58),A RET