;C80X24 ;80X24 CHAR SCREEN PROGRAM ;RELOCATES ITSELF TO HIMEM ;BY R.M.STILES 08/30/81 ;REVISED FOR CURSOR AFTER CLEAR AND 32 CHAR OPER ;10/18/81 RMS HIMEM EQU 4049H VIDCTL EQU 403DH ORG 5200H INITA EQU $ ;FROM HERE TO C24 (4790) IS DI ;INITIATION AND RELOCATOR. IN A,(254) OR 10 OUT (254),A CALL CLRSCN LD HL,CHRNR LD B,80 INIAL1 PUSH HL LD A,0AH PUSH BC CALL WRITE POP BC POP HL INC (HL) DJNZ INIAL1 INC HL LD B,22 INIAL2 INC (HL) DEC HL LD (HL),0 LD A,0AH PUSH HL PUSH BC CALL WRITE POP BC POP HL LD (HL),79 LD A,0AH PUSH HL PUSH BC CALL WRITE POP BC POP HL INC HL DJNZ INIAL2 DEC HL LD B,80 LD (HL),0 INIAL3 PUSH HL LD A,0AH PUSH BC CALL WRITE POP BC POP HL INC (HL) DJNZ INIAL3 IN A,(254) AND 0F7H OUT (254),A INIL5 LD HL,3C00H LD (4020H),HL LD A,0 LD (CHRNR),A LD (LINENR),A LD HL,MSG1 CALL WRT CALL 0049H CALL 0033H CP 0DH JP Z,INITB LD HL,MEMLDA LD B,4 JR INIL1 INIL4 CALL 0049H CALL 0033H INIL1 CP 30H JR C,ERR CP 3AH JR NC,INIL2 SUB 30H JR INIL3 INIL2 CP 41H JR C,ERR CP 47H JR NC,ERR SUB 37H INIL3 LD (HL),A INC HL DJNZ INIL4 CALL 0049H CALL 0033H CP 0DH JR NZ,ERR LD HL,MEMLDB+1 LD A,(HL) DEC HL RLD LD E,(HL) DEC HL LD A,(HL) DEC HL RLD LD D,(HL) LD (MEMLDA),DE OR A LD DE,PRINT@ LD HL,ENDP SBC HL,DE PUSH HL LD DE,(HIMEM) EX DE,HL OR A SBC HL,DE LD DE,(MEMLDA) RST 18H JR C,ERR LD HL,5FFFH RST 18H JR NC,ERR POP HL ADD HL,DE LD (MEMLDA),HL JP INITC ERR LD HL,MSG2 CALL WRT JP INIL5 WRT LD A,(HL) CP 0 RET Z CALL 0033H INC HL JR WRT MEMLDA DW 0 MEMLDB DW 0 MSG1 DM 0DH,0DH,0DH,' 80 X 24 SCREEN FOR',0DH DM ' *** L N W - 8 0 ***',0DH,0DH DM ' BY R.M.STILES 08/28/81',0DH,0DH DM ' CAN BE LOADED FROM 6000H TO HIMEM',0DH DM ' WILL RESET HIMEM ON DEFAULT',0DH DM ' ENTER LOAD POINT (HEX) DEFAULT IS HIMEM',0DH,' ',3FH,0 MSG2 DM 0DH,' *** ENTRY TOO HIGH, TOO LOW, OR ILLEGAL ***',0 INITC DI OR A LD HL,ENDP LD BC,PRINT@ SBC HL,BC LD DE,(MEMLDA) EX DE,HL OR A SBC HL,DE JR INITD INITB DI OR A LD HL,ENDP LD BC,PRINT@ SBC HL,BC LD DE,(HIMEM) EX DE,HL OR A SBC HL,DE DEC HL LD (HIMEM),HL INC HL INITD LD (LP@1+1),HL EX DE,HL LD BC,PRINT@ LD HL,WRITE CALL SUBT LD (CW1+1),HL LD (CW2+1),HL LD (CW3+1),HL LD (CW4+1),HL LD (CW6+1),HL LD (CW7+1),HL LD (CW8+1),HL LD (CW9+1),HL LD (CW10+1),HL LD (SPCMP1+1),HL LD (GRAL1+1),HL LD HL,CHRNR CALL SUBT LD (LCN1+1),HL LD (LCN2+1),HL LD (LCN3+1),HL LD (LCN4+1),HL LD (LCN5+1),HL LD (LCN6+1),HL LD (LCN7+1),HL LD (LCN8+1),HL LD (LCN10+1),HL LD (LCN11+1),HL LD (LCN12+1),HL LD (LCN13+1),HL LD (LCN14+1),HL LD (LCN15+1),HL LD (LCN16+1),HL LD (LCN17+1),HL LD (LCN18+1),HL LD (LCN19+1),HL LD (LCN20+1),HL LD (LCN21+1),HL LD (ERAEOF+1),HL LD (PCML1+1),HL LD (CLREOL+1),HL LD (CEOLL1+1),HL LD HL,LINENR CALL SUBT LD (LLN1+1),HL LD (LLN2+1),HL LD (LLN3+1),HL LD (LLN4+1),HL LD (LLN5+1),HL LD HL,CURSOR CALL SUBT LD (LCU1+1),HL LD (LCU2+1),HL LD (BCKL2+1),HL LD (CADVL2+1),HL LD HL,CURADV CALL SUBT LD (CC1+1),HL LD (CC3+1),HL LD (CC4+1),HL LD HL,PRT@EX CALL SUBT INC HL LD (LPEX+1),HL LD HL,PRTCMA CALL SUBT INC HL LD (LPCM1+1),HL LD HL,PRTCOM CALL SUBT LD (LPCM2+1),HL LD HL,PR@FLG CALL SUBT LD (LPF1+1),HL LD (LPF2+1),HL LD (LDR1+1),HL LD HL,CLRSCN CALL SUBT LD (CS1+1),HL LD (CS2+1),HL LD HL,CADVL3 CALL SUBT LD (CCD3+1),HL LD HL,CADVL4 CALL SUBT LD (CCD4+1),HL LD HL,PRERTN CALL SUBT LD (PWRTL1+1),HL LD (JP1+1),HL LD (JP2+1),HL LD (JP3+1),HL LD (JP4+1),HL LD (JP6+1),HL LD (JP7+1),HL LD (JP8+1),HL LD HL,BCKSP CALL SUBT LD (JB1+1),HL LD HL,ENTR CALL SUBT LD (JE1+1),HL LD HL,CURON CALL SUBT LD (JCON1+1),HL LD HL,CUROFF CALL SUBT LD (JCOFF1+1),HL LD HL,CHR32 CALL SUBT LD (J32A+1),HL LD HL,LTARRW CALL SUBT LD (JLA1+1),HL LD HL,RTARRW CALL SUBT LD (JRA1+1),HL LD HL,DNARRW CALL SUBT LD (JDA1+1),HL LD HL,UPARRW CALL SUBT LD (JUA1+1),HL LD HL,HMECUR CALL SUBT LD (JHM1+1),HL LD HL,BEGLNE CALL SUBT LD (JBG1+1),HL LD HL,CLREOL CALL SUBT LD (JEOL1+1),HL LD HL,ERAEOF CALL SUBT LD (JEOF1+1),HL LD HL,CTLCHR CALL SUBT LD (JCTL1+1),HL LD HL,SPCOMP CALL SUBT LD (JSPC1+1),HL LD HL,LOADER CALL SUBT LD (401EH),HL LD HL,PR@L1C CALL SUBT INC HL LD (LPR@1+1),HL LD (LPR@2+1),HL LD HL,GRAPIC CALL SUBT LD (LSPC+1),HL LD HL,CHRGEN CALL SUBT LD (LCGN+2),HL LD HL,TABLED CALL SUBT LD (LTD+1),HL LD HL,TABLEC CALL SUBT LD (WRTL1+1),HL LD HL,CHRPOS CALL SUBT LD (WRTL2+1),HL LD (LCPOS+1),HL LD HL,ENDP OR A SBC HL,BC LD B,H LD C,L LD HL,PRINT@ LDIR IN A,(254) OR 10 OUT (254),A CS1 CALL CLRSCN IN A,(254) AND 0F7H OUT (254),A EI RET SUBT OR A SBC HL,BC ADD HL,DE RET ;******************************************************** PRINT@ EQU $ ;USES DOS EXIT 41CAH POP IY ;CLEAR STACK PRT@EX CALL 0 ;DOS EXIT CP 40H ;TEST FOR @ JR NZ,PRTTAB CALL 2B01H ;EVAUL @ EXP. PUSH HL LD H,D LD L,E CP 6 JR NC,EXT@ ; GO TO EXT IF >1536 LD A,64 LPR@1 LD (PR@L1C+1),A LD BC,64 PR@L1A XOR A PUSH DE LD D,A LD E,L SBC HL,BC JR NC,PR@L1B JR PR@L1C PR@L1 SBC HL,BC ;DEVIDE BY 64 PR@L1B INC D JR NC,PR@L1 DEC D PR@L1C LD A,64 ADD A,L LCN1 LD (CHRNR),A LD A,D LLN1 LD (LINENR),A POP DE LCN2 LD A,(CHRNR) JP 2089H ;ON TO ROM EXT@ CP 7 JR C,PR@L2 LD A,L CP 80H JR C,PR@L2 POP HL JP 1E4AH ;ERROR IF >1920 PR@L2 LD A,80 LPR@2 LD (PR@L1C+1),A XOR A LD BC,1536 SBC HL,BC ;CONV TO EXT AREA LD BC,16 JR PR@L1A PR@FLG DB 0 ;******************************************************** PRTTAB EQU $ ;FROM ROM 208FH TO 20AAH CP 23H JR NZ,PRTBL1 CALL 0284H LD A,80H LD (409CH),A PRTBL1 DEC HL RST 10H CALL Z,20FEH JP Z,2169H CP 0BFH JP Z,2CBDH CP 0BCH JP NZ,20ADH CALL 2B1BH ;FROM 2137H ROM CP 80 JP C,213CH SUB 80 JP 213CH ;******************************************************** PRTCOM EQU $ EX AF,AF' EX (SP),HL LD A,L CP 44H EX (SP),HL JR NZ,PCML1 PUSH HL PUSH AF PCML2 DEC HL LD A,(HL) CP 30H JR C,PCML3 CP 40H JR C,PCML2 PCML3 POP AF CALL 2B1BH LD E,A POP HL PCML1 LD A,(CHRNR) LD (40A6H),A EX AF,AF' PRTCMA JP 0000H ;FROM 41D3H ;******************************************************** LOADER EQU $ DI EX AF,AF' EXX LD A,(41CAH) CP 0C3H JR Z,LDR1 XOR A LPF1 LD (PR@FLG),A JR LDR2 LDR1 LD A,(PR@FLG) OR A JR NZ,LDR2 LD A,80 LD (409DH),A ;MAX LINE LEN. LD A,64 LD (409EH),A ;LINE SIZE FOR COMA LPF2 LD (PR@FLG),A LD HL,(41CBH) LPEX LD (PRT@EX+1),HL LP@1 LD HL,PRINT@ LD (41CBH),HL LD HL,(41D4H) LPCM1 LD (PRTCMA+1),HL LPCM2 LD HL,PRTCOM LD (41D4H),HL LDR2 EX AF,AF' EXX EI ;******************************************************** C24 EQU $ LD A,C ;GET CHAR TO PRINT PUSH AF ;SAVE IT AND PUSH DE ;THE OTHER REGISTERS PUSH BC C24A DI IN A,(254) ;ENABLES HI-RES OR 8 ;SCREEN AREA OUT (254),A LD A,C ;GET CHAR AGAIN CP 20H ;CHECK IF CTL CHAR JCTL1 JP C,CTLCHR ;GO IF IT IS CP 80H ;IS IT SPACE COMP OR GRA JSPC1 JP NC,SPCOMP ;GO IS IT IS SUB 20H ;SUB FOR R/S GEN. ;***************************************************** PREWRT EQU $ CW1 CALL WRITE ;GO PUT IT ON SCN CC1 CALL CURADV ;ADJUST CURSOR PWRTL1 JP PRERTN ;RTN ;**************************************************** WRITE EQU $ OR A ;CLEAR C FLAG LD B,0 ;ZERO B REG RLA ;MULT THE CHAR RL B ;BY 8 TO GET RLA ;IT'S POSITION RL B ;IN THE CHAR. GEN. RLA ;TABLE... RL B LD C,A ;BC NOW HAS LOC OFFSET LCGN LD IY,CHRGEN ;START OF CHAR GEN TABLE ADD IY,BC ;IY NOW HAS CHAR POS. LCN3 LD A,(CHRNR) ;GET CHAR SCNLOC, SEE IF CP 64 ;IT IN NORMAL OR EXT AREA JR C,WRTL1 ;GO IF IN NORMAL AREA SUB 64 ;SUB IF EXT AREA LTD LD HL,TABLED ;GET EXT AREA LINE JR WRTL2 ;NUMBERS AND GO. WRTL1 LD HL,TABLEC ;GET NOR AREA LINE #'S WRTL2 LD (CHRPOS),A ;CHAR POS IN NOR OR EXT LLN2 LD A,(LINENR) ;GET SCN LINE # RLCA ;POS IT FOR CORRECT ADDR LD E,A ;LOAD DE WITH ADJACENT LD D,0 ;LINE NUMBER. ADD HL,DE ;ADD IT TO TABLE LOC. LD E,(HL) ;GET THE ROW 0 ADDR INC HL ;FOR SCREEN LINE LD D,(HL) ;NUMBER INTO DE LCPOS LD A,(CHRPOS) ;GET CHAR POS ADD A,E ;ADD IT TO LINE NMBR. LD E,A ;DE NOW HAS SCREEN POS. LCN4 LD A,(CHRNR) ;GET CHARNR TO DETR NOR CP 64 ;OR EXT AREA JR NC,WRTEXT ;GO IF EXT WRTNOR LD B,8 ;GONNA PRINT 8 ROWS NWRTL1 LD A,(IY+0) ;GET FIRST ROW DATA LD (DE),A ;PUTON SCREEN INC IY ;GOTO NEXT ROW INFO LD A,4 ;ADJ SCRN ADDR FOR ADD A,D ;NEXT ROW. FROM CP 30H ;HERE TO END OF JR NC,NWRTL3 ;ROUTINE. LD D,A NWRTL2 DJNZ NWRTL1 RET NWRTL3 SUB 30H LD D,A LD A,40H ADD A,E LD E,A JR NWRTL2 ;END OF ROUTINE WRTEXT LD B,8 ;EXT AREA ROUTINE. SAME LD H,D ;GENERAL DISCRIPTION AS EWRTL1 LD A,(IY+0) ;NORMAL AREA LD (DE),A INC IY LD A,4 ADD A,D CP 40H JR NC,EWRTL3 LD D,A EWRTL2 DJNZ EWRTL1 RET EWRTL3 LD D,H LD A,10H ADD A,E AND 30H CP 30H LD A,E JR NZ,EWRTL4 ADD A,10H EWRTL4 ADD A,10H LD E,A JR EWRTL2 ;END OF EXT ROUTINE ;********************************************** CURON EQU $ LD A,3FH ;LD CUR CHAR LCU1 LD (CURSOR),A ;STORE IT CW2 CALL WRITE ;PRINT IT JP1 JP PRERTN ;RTN ;********************************************** CUROFF EQU $ LD A,0 ;LD 0 LCU2 LD (CURSOR),A ;STORE IT CW3 CALL WRITE ;PRINT IT JP2 JP PRERTN ;RTN ;*********************************************** SPCOMP EQU $ CP 0C0H ;SEE IF GRAPHICS LSPC JP C,GRAPIC ;GO IF IT IS SUB 0C0H ;SUB OFFSET JR Z,PRERTN ;RTN IF 0 SPACE CMP LD B,A ;# OF SPACES TO PRINT LD A,20H ;ASCII SPACE SPCMP1 CALL WRITE ;PRINT SPACE CC3 CALL CURADV ;ADJUST CUR DJNZ SPCMP1 ;"B" TIMES JR PRERTN ;*********************************************** CHR32 EQU $ LD A,(VIDCTL) ;GET 32 CHAR REG OR 8 ;SET 32 CHAR LD (VIDCTL),A ;PUT BACK TO REG OUT (0FFH),A ;OUTPUT IT LCN5 LD A,(CHRNR) ;GET CHAR NR INC A ;INC IT AND 0FEH ;MAKE IT AN EVEN # LCN6 LD (CHRNR),A ;PUT CHAR NR BACK JR PRERTN ;*********************************************** ERAEOF EQU $ LD HL,(CHRNR) ;HL HAS CHRNR AND LINENR LD A,H ;PUT CHRNR INTO A ADD A,L ;ADD IT TO LINENR OR A ;CHECK IF BOTH ARE 0 JR NZ,EOFL1 ;GO IF NOT CS2 CALL CLRSCN ;QUICK CLEAR IF CALLED JR CURON ;FROM HOME CURSOR POS. EOFL1 PUSH HL ;SAVE CHRNR AND LINENR LCN7 LD HL,CHRNR ;GET CHARNR ADDR EOFL2 LD A,79 ;COMPARE IT TO MAXIMUM CP (HL) ;NUMBER OF CHAR'S JR NC,EOFL4 ;GO IF MORE THEN 79 LD (HL),0 ;LOAD CHARNR W/0 INC HL ;MOVE TO LINENR ADDR INC (HL) ;INC LINE NR LD A,23 ;SEE IF MORE THEN MAXIMUM CP (HL) ;NUMBER OF LINES (24) JR NC,EOFL3 ;GO IF IT IS JR EOFL5 ;ELSE GO HERE EOFL3 DEC HL ;MOVE BACK TO CHAR NR ADDR EOFL4 PUSH HL ;SAVIT LD A,0 ;GET 0 (SPACE R/S GEN) CW4 CALL WRITE ;PRINT IT POP HL ;GET CHAR NR ADDR BACK INC (HL) ;INC CHAR NR JR EOFL2 ;GO DO IT SOME MORE EOFL5 POP HL ;GET ORIG CHRNR & LINENR LCN8 LD (CHRNR),HL ;BACK AND STORE IT. JR PRERTN ;********************************************** LTARRW EQU $ LCN10 LD A,(CHRNR) ;GET CHAR POS DEC A ;DEC IT OR A ;SEE IF IT IS 0 JR Z,PRERTN ;GO IF IT IS LCN11 LD (CHRNR),A ;SAVE DEC CHRNR JR PRERTN ;********************************************** RTARRW EQU $ LCN12 LD A,(CHRNR) ;GET CHAR NR INC A ;INC IT CP 80 ;SEE IF IT IS AT END JR Z,PRERTN ;OF LINE. GO IF IT IS LCN13 LD (CHRNR),A ;STORE INC CHRNR JR PRERTN ;********************************************** UPARRW EQU $ LLN3 LD A,(LINENR) ;GET LINE COUNT OR A ;SEE IF IT IS 0 JR Z,PRERTN ;GO IF IT IS DEC A ;BACKUP ONE LINE LLN4 LD (LINENR),A ;SAVE NEW LINE NR JR PRERTN ;******************************************************* PRERTN IN A,(254) ;RESET GRAPHICS PORT AND 0F7H OUT (254),A LCN14 LD A,(CHRNR) ;GET CHAR NR LD (40A6H),A ;THIS IS FOR A ROM ACTION CP 64 ;MAKE SURE NR IS NOT >24 JR C,PRTNL1 ;THIS IS TO SATISFY SUB 20 ;A ROM CONDITION PRTNL1 LD (4020H),A EI POP BC POP DE POP AF RET ;BACK TO CALLER ;********************************************** BEGLNE EQU $ ;JUMP TO BEG OF LINE XOR A ;ZERO A REGISTER LCN15 LD (CHRNR),A ;PUT CHAR NR TO 0 JR PRERTN ;********************************************** CLREOL EQU $ ;CLEAR TO END OF LINE LD HL,(CHRNR) ;HL HAS CHRNR & LINENR PUSH HL ;SAVEIT CEOLL1 LD A,(CHRNR) ;LD A WITH CHAR NR CP 80 ;SEE IF AT END OF LINE JR NC,CEOLL2 ;GO IF IT IS PUSH AF ;SAVE CHAR NR LD A,0 ;LOAD SPACE (R/S GEN) CW10 CALL WRITE ;PRINT IT POP AF ;GET CHAR NR BACK INC A ;INC IT LCN20 LD (CHRNR),A ;SAVE IT JR CEOLL1 ;GO DOIT AGAIN TIL EOL CEOLL2 POP HL ;GET ORIG CHRNR & LINENR LCN21 LD (CHRNR),HL ;RESTORE IT JR PRERTN ;*********************************************** HMECUR EQU $ ;HOMES CURSOR TO UPPER LEFT LCN16 LD HL,CHRNR ;GET CHAR POS LD (HL),0 ;PUT IT TO 0 INC HL ;MOVE TO LINE POS LD (HL),0 ;PUT IT TO 0 LD A,(VIDCTL) ;GET 32 CHAR WORD AND 0F7H ;MAKE SURE IN 62 CHR MODE LD (VIDCTL),A ;PUT WORD BACK OUT (0FFH),A ;SPIT IT OUT JR PRERTN ;*********************************************** BCKSP EQU $ ;BACKSPACES CURSOR LD A,0 ;SPACE (R/S GEN) CW6 CALL WRITE ;PRINT IT LCN17 LD HL,CHRNR ;GET CHARNR AND LINENR DEC (HL) ;DEC CHARNR LD A,(VIDCTL) ;CHECK TO SEE AND 8 ;IF IN 32 CHAR MODE. JR Z,BCKL1 ;JP IF NOT. DEC (HL) ;DEC AGAIN IF IS BCKL1 LD A,0FFH ;CHK IF CHARNR CP (HL) ;IS -1. JR NZ,BCKL2 ;LOOP BACK IF NOT LD (HL),79 ;LD CHAR CT W/EOL INC HL ;MOVE TO LINENR XOR A ;0 A REG CP (HL) ;IS LINENR 0 JR Z,BCKL3 ;JP IF IT IS DEC (HL) ;DEC LINENR BCKL2 LD A,(CURSOR) ;GET CURSOR CHAR CW7 CALL WRITE ;PRINT IT JP3 JP PRERTN BCKL3 LD (HL),0 ;IF AT LINENR 0 THEN DEC HL ;0 BOTH LINENR AND LD (HL),0 ;CHARNR THEN JR BCKL2 ;GO PRINT IT AND RET ;*********************************************** DNARRW EQU $ LLN5 LD HL,LINENR ;GET LINENR, GO CCD3 CALL CADVL3 ;INC IT & CK TO SEE JP4 JP PRERTN ;IF NEED TO SCROLL & RET ;*********************************************** ENTR EQU $ ;CARRAIGE RTN LD A,0 ;LOAD SPACE (R/S) CW8 CALL WRITE ;PRINT IT LCN18 LD HL,CHRNR ;GET CHARNR CCD4 CALL CADVL4 ;LOADS CHARNR W/0 AND CKS JR CLREOL ;IF SCROLL IS NEEDED. ;*********************************************** CURADV EQU $ LCN19 LD HL,CHRNR ;GET CHARNR INC (HL) ;INC IT LD A,(VIDCTL) ;SEE IF 32 CHAR AND 8 ;MODE. JR Z,CADVL1 ;JP IF NOT INC (HL) ;INC AGAIN CADVL1 LD A,79 ;SEE IF CHARNR CP (HL) ;AT EOL JR NC,CADVL2 ;GO IF NOT CADVL4 LD (HL),0 ;0 CHARNR INC HL ;GET LINENR CADVL3 LD A,23 ;SEE IF AT CP (HL) ;LINE 23. JR Z,SCROLL ;GO IF IT IS INC (HL) ;INC IT CADVL2 LD A,(CURSOR) ;GET CURSOR CW9 CALL WRITE ;PRINT IT RET ;**************************************************** CLRSCN EQU $ LD BC,3FFEH ;ZERO'S THE HI RES LD HL,0 ;SCREEN LD (HL),0 LD DE,1 LDIR IN A,(254) ;BANK SW TO LII ROM AND 0F7H OUT (254),A LD BC,1023 ;ZERO'S THE LO RES LD HL,3C00H ;SCREEN LD (HL),20H LD DE,3C01H LDIR IN A,(254) ;BANK SW BACK OR 8 OUT (254),A RET ;******************************************** CTLCHR EQU $ ;CHK FOR FUNCTION OF CTLCHR CP 8 ;BACKSPACE JB1 JP Z,BCKSP CP 0AH ;SEE IF LESS THEN 0AH JP7 JP C,PRERTN ;RET IF IT IS CP 0EH ;IS IT 0AH OR 0DH JE1 JP C,ENTR ;GO IF IT IS JCON1 JP Z,CURON ;TURN ON CURSOR IF 0EH CP 0FH ;TURN OFF CUR. JCOFF1 JP Z,CUROFF CP 17H ;32 CHAR J32A JP Z,CHR32 CP 18H ;LEFT ARROW JLA1 JP Z,LTARRW CP 19H ;RIGHT ARROW JRA1 JP Z,RTARRW CP 1AH ;DOWN ARROW JDA1 JP Z,DNARRW CP 1BH ;UP ARROW JUA1 JP Z,UPARRW ;UP ARROW CP 1CH ;HOME CURSOR JHM1 JP Z,HMECUR CP 1DH ;BEGIN OF LINE JBG1 JP Z,BEGLNE CP 1EH ;ERASE TO END OF LINE JEOL1 JP Z,CLREOL CP 1FH ;CLEAR TO END OF FRAME JEOF1 JP Z,ERAEOF JP6 JP PRERTN ;IGNORE ALL OTHERS ;******************************************************* SCROLL EQU $ LD A,21 ;START OF NORMAL AREA LD (HL),A ;SCROLL LD B,12 LD DE,0 ;SCROLLS THREE LINES LD HL,80H ;AT A TIME. SCLL1 LD A,B LD BC,896 LDIR EX DE,HL INC H LD B,A DJNZ SCLL1 ;END OF NORM AREA SCROLL LD DE,3000H ;BEG OF EXT AREA SCROLL LD HL,3080H LD B,4 SCLL3 PUSH BC LD B,14 SCLL4 LD A,B LD BC,48 LDIR LD BC,10H ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL LD B,A DJNZ SCLL4 EX DE,HL LD BC,0100H ADD HL,BC POP BC DJNZ SCLL3 ;END EXT AREA SCROLL LD B,12 ;0 LAST 3 NORM AREA LINES LD HL,0380H LD DE,0381H SCLL2 LD A,B LD BC,127 LD (HL),0 LDIR LD B,A LD E,81H LD L,80H LD A,4 ADD A,H LD H,A LD D,A DJNZ SCLL2 ;END NORM AREA 0 LD HL,3380H ;0 LAST 3 EXT AREA LINES LD DE,3381H LD B,4 SCLL5 PUSH BC LD BC,48 LD (HL),0 LDIR LD A,10H ADD A,L LD L,A LD E,L INC E LD BC,48 LD (HL),0 LDIR LD BC,390H ADD HL,BC LD D,H LD E,L INC E POP BC DJNZ SCLL5 ;END EXT AREA 0 RET ;****************************************************** GRAPIC EQU $ SUB 20H ;COMPRESSES ALL OF NORMAL GRAL2 CP 70H ;MOD i GRAPHIC COMMANDS JR C,GRAL1 ;TO THE ABREV. COMMANDS SUB 10H JR GRAL2 GRAL1 CALL WRITE ;GO PRINT IT CC4 CALL CURADV JP8 JP PRERTN ;****************************************************** CHRNR DB 0 ;CHAR POS COUNTER LINENR DB 0 ;LINE NUMBER COUNTER CHRPOS DB 0 ;CHAR POS CNTR WITHIN THE ;NORM OR EXT AREA CURSOR DB 20H ;STORES CURRENT CURSOR CHR ;**************************************************** TABLEC EQU $ ;ADDR FOR 24 LINES OF NORM AREA DW 0 DW 2000H DW 1040H DW 0080H DW 2080H DW 10C0H DW 0100H DW 2100H DW 1140H DW 0180H DW 2180H DW 11C0H DW 0200H DW 2200H DW 1240H DW 0280H DW 2280H DW 12C0H DW 0300H DW 2300H DW 1340H DW 0380H DW 2380H DW 13C0H ;****************************************************** TABLED EQU $ ;ADDR OF 24 LINES OF EXT AREA DW 3000H DW 3020H DW 3050H DW 3080H DW 30A0H DW 30D0H DW 3100H DW 3120H DW 3150H DW 3180H DW 31A0H DW 31D0H DW 3200H DW 3220H DW 3250H DW 3280H DW 32A0H DW 32D0H DW 3300H DW 3320H DW 3350H DW 3380H DW 33A0H DW 33D0H ;******************************************************** CHRGEN EQU $ ;R/S 6X8 MATRIX LCBLK DM 0,0,0,0,0,0,0,0 LCEXC DM 8,8,8,8,8,0,8,0 LCQUTE DM 14H,14H,14H,0,0,0,0,0 LCNBR DM 14H,14H,3EH,14H,3EH,14H,14H,0 LC$ DM 8,3CH,0AH,1CH,28H,1EH,8,0 LCPCT DM 6,26H,10H,8,6,32H,30H,0 LCAMB DM 4,0AH,0AH,4,0AH,12H,2CH,0 LCAPOS DM 0CH,0CH,4,2,0,0,0,0 LCOPER DM 10H,8,4,4,4,8,10H,0 LCCPER DM 4,8,10H,10H,10H,8,4,0 LCAST DM 8,2AH,1CH,3EH,1CH,2AH,8,0 LCPLUS DM 0,8,8,3EH,8,8,0,0 LCCOMA DM 0,0,0,0,18H,18H,8,4 LCMIN DM 0,0,0,3EH,0,0,0,0 LC. DM 0,0,0,0,0,0CH,0CH,0 LCSLA DM 0,20H,10H,8,4,2,0,0 LC0 DM 1CH,22H,32H,2AH,26H,22H,1CH,0 LC1 DM 8,0CH,8,8,8,8,1CH,0 LC2 DM 1CH,22H,20H,1CH,2,2,3EH,0 LC3 DM 1CH,22H,20H,18H,20H,22H,1CH,0 LC4 DM 10H,18H,14H,12H,3EH,10H,10H,0 LC5 DM 3EH,2,1EH,20H,20H,22H,1CH,0 LC6 DM 18H,4,2,1EH,22H,22H,1CH,0 LC7 DM 3EH,20H,10H,8,4,2,2,0 LC8 DM 1CH,22H,22H,1CH,22H,22H,1CH,0 LC9 DM 1CH,22H,22H,3CH,20H,10H,0CH,0 LCCOL DM 0,0CH,0CH,0,0CH,0CH,0,0 LCSCOL DM 0,0CH,0CH,0,0CH,0CH,4,2 LCLTHN DM 10H,8,4,2,4,8,10H,0 LCEQU DM 0,0,3EH,0,3EH,0,0,0 LCGTHN DM 4,8,10H,20H,10H,8,4,0 LCQUES DM 1CH,22H,20H,10H,8,0,8,0 LC@ DM 1CH,22H,20H,2CH,2AH,2AH,1CH,0 LCAA DM 8,14H,22H,22H,3EH,22H,22H,0 LCBB DM 1EH,24H,24H,1CH,24H,24H,1EH,0 LCCC DM 1CH,22H,2,2,2,22H,1CH,0 LCDD DM 1EH,24H,24H,24H,24H,24H,1EH,0 LCEE DM 3EH,2,2,0EH,2,2,3EH,0 LCFF DM 3EH,2,2,0EH,2,2,2,0 LCGG DM 3CH,2,2,32H,22H,22H,1CH,0 LCHH DM 22H,22H,22H,3EH,22H,22H,22H,0 LCII DM 1CH,8,8,8,8,8,1CH,0 LCJJ DM 20H,20H,20H,20H,20H,22H,1CH,0 LCKK DM 22H,12H,0AH,6,0AH,12H,22H,0 LCLL DM 2,2,2,2,2,2,3EH,0 LCMM DM 22H,36H,2AH,2AH,22H,22H,22H,0 LCNN DM 22H,26H,2AH,32H,22H,22H,22H,0 LCOO DM 1CH,22H,22H,22H,22H,22H,1CH,0 LCPP DM 1EH,22H,22H,1EH,2,2,2,0 LCQQ DM 1CH,22H,22H,22H,2AH,12H,2CH,0 LCRR DM 1EH,22H,22H,1EH,0AH,12H,22H,0 LCSS DM 1CH,22H,2,1CH,20H,22H,1CH,0 LCTT DM 3EH,8,8,8,8,8,8,0 LCUU DM 22H,22H,22H,22H,22H,22H,1CH,0 LCVV DM 22H,22H,22H,14H,14H,8,8,0 LCWW DM 22H,22H,22H,22H,2AH,36H,22H,0 LCXX DM 22H,22H,14H,8,14H,22H,22H,0 LCYY DM 22H,22H,14H,8,8,8,8,0 LCZZ DM 3EH,20H,10H,8,4,2,3EH,0 LCOBRK DM 1CH,4,4,4,4,4,1CH,0 LCRSLA DM 0,2,4,8,10H,20H,0,0 LCCBRK DM 1CH,10H,10H,10H,10H,10H,1CH,0 LCCRT DM 8,14H,22H,0,0,0,0,0 LCUND DM 0,0,0,0,0,0,3EH,0 LCLB DM 8,14H,4,0EH,4,24H,1EH,0 LCA DM 0,0,1CH,20H,3CH,22H,3CH,0 LCB DM 2,2,1AH,26H,22H,26H,1AH,0 LCC DM 0,0,1CH,22H,2,22H,1CH,0 LCD DM 20H,20H,2CH,32H,22H,32H,2CH,0 LCE DM 0,0,1CH,22H,3EH,2,1CH,0 LCF DM 10H,28H,8,1CH,8,8,8,0 LCG DM 0,0,1CH,22H,22H,3CH,20H,1CH LCH DM 2,2,1AH,26H,22H,22H,22H,0 LCI DM 8,0,0CH,8,8,8,1CH,0 LCJ DM 20H,0,30H,20H,20H,20H,24H,18H LCK DM 4,4,24H,14H,0CH,14H,24H,0 LCL DM 0CH,8,8,8,8,8,1CH,0 LCM DM 0,0,14H,2AH,2AH,2AH,2AH,0 LCN DM 0,0,1AH,26H,22H,22H,22H,0 LCO DM 0,0,1CH,22H,22H,22H,1CH,0 LCP DM 0,0,1AH,26H,26H,1AH,2,2 LCQ DM 0,0,2CH,32H,32H,2CH,20H,20H LCR DM 0,0,1AH,26H,2,2,2,0 LCS DM 0,0,3CH,2,1CH,20H,1EH,0 LCT DM 8,8,1CH,8,8,28H,10H,0 LCU DM 0,0,22H,22H,22H,32H,2CH,0 LCV DM 0,0,22H,22H,22H,14H,8,0 LCW DM 0,0,22H,22H,2AH,2AH,14H,0 LCX DM 0,0,22H,14H,8,14H,22H,0 LCY DM 0,0,22H,22H,22H,3CH,20H,1CH LCZ DM 0,0,3EH,10H,8,4,3EH,0 OPBCE DM 10H,8,8,4,8,8,10H,0 HBAR DM 8,8,8,0,8,8,8,0 CLBCE DM 4,8,8,10H,8,8,4,0 KANA DM 22H,14H,8,3EH,8,3EH,8,0 XHTCH DM 2AH,14H,2AH,14H,2AH,14H,2AH,14H G128 DM 0,0,0,0,0,0,0,0 ;GRAPHICS CHAR G129 DM 7,7,7,7,0,0,0,0 G130 DM 38H,38H,38H,38H,0,0,0,0 G131 DM 3FH,3FH,3FH,3FH,0,0,0,0 G132 DM 0,0,0,0,7,7,7,7 G133 DM 7,7,7,7,7,7,7,7 G134 DM 38H,38H,38H,38H,7,7,7,7 G135 DM 3FH,3FH,3FH,3FH,7,7,7,7 G136 DM 0,0,0,0,38H,38H,38H,38H G137 DM 7,7,7,7,38H,38H,38H,38H G138 DM 38H,38H,38H,38H,38H,38H,38H,38H G139 DM 3FH,3FH,3FH,3FH,38H,38H,38H,38H G140 DM 0,0,0,0,3FH,3FH,3FH,3FH G141 DM 7,7,7,7,3FH,3FH,3FH,3FH G142 DM 38H,38H,38H,38H,3FH,3FH,3FH,3FH G143 DM 3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH ENDP EQU $ END INITA 8H,38H G139 DM 3FH,3FH,3FH,3FH,38H,38H,38H,38H G140 DM 0,0,0,0,3FH,3FH,3FH,3FH G141 DM 7,7,7,7,3FH,3FH,3FH,3FH G142 DM 38H,38H,38H,38H,3FH,3FH,3FH,3FH G143 DM 3FH,3FH,3FH,3FH,3