TITLE CONSOLE SUBSYSTEM FOR SYSTEM MONITOR ; CONSOLE I.0 ; CONSOLE SUBSYSTEM FOR THE SYSTEM MONITOR. ; ; ********Donated to the Pascal/Z Users Group,July 1980***** ; MODIFIED FOR C-MACRO ASSEMBLER MAY 1979 ; ; ; EXTERNAL LINKAGES TO CONSOLE I.0 ; ; CWBASE IS MONITOR VARIABLE RAM WORK AREA BASE ; CVBASE IS VIDEO RAM AREA BASE ; CBBASE IS CONSOLE INPUT BUFFER AREA ; ; VIDEO RAM DEFINITION ; VIDRAM DEFL CVBASE ; ; KEYBOARD DEFINITION ; KDPORT DEFL 0D4H KSPORT DEFL 0D5H KSMASK DEFL 080H ; ; LINE PRINTER DEFINITION ; LDPORT DEFL 0D6H LSPORT DEFL 0D7H LBPORT DEFL 0D0H LSMASK DEFL 080H LBMASK DEFL 080H ; ; DEFINED ASCII USED INTERNALLY IN PACKAGE ; ONCURS DEFL 0EH ;TURN ON CURSOR OFFCUR DEFL 0FH ;TURN OFF CURSOR LNFEED DEFL 0AH ;LINE FEED CARRET DEFL 0DH ;CARRIAGE RETURN ALTRET DEFL 12H ;ALTERNATE CARRIAGE RETURN SPGMD DEFL 11H ;SET PAGE MODE SSLMD DEFL 17H ;SET SCROLL MODE RPTCMD DEFL 12H ;REPEAT COMMAND .. BUFFOUT DCHARG DEFL 07H ;DELETE CHARACTER GLOBALLY ICHARG DEFL 06H ;INSERT SPACES GLOBALLY BACKSP DEFL 1CH ;BACK SPACE, CURSOR LEFT BKFEED DEFL 1DH ;BACK FEED , CURSOR UP DCHAR DEFL 7FH ;DELETE A CHARACTER NULL DEFL 00H ;END OF MESSAGE .. BUFFOUT ; ; ENTRIES TO CONSOLE I.0 ; CBASE EQU $ CNTRY1 JP CINIT ;INITIALIZE THE PACKAGE CNTRY2 JP KSTAT ;KEY ENTRY STATUS CNTRY3 JP KINP1 ;KEY ENTRY..WAIT FOR STOBE CNTRY4 JP KINP2 ;KEY ENTRY..IMMEDIATE RETURN CNRTY5 JP OUTPT3 ;PRINTER OUTPUT CNTRY6 JP BUFIN1 ;SCREEN EDITED; BUFFERED INPUT CNTRY7 JP BUFIN2 ;ALTERNATE BUFFERED INPUT. CNTRY8 JP CVADDR ;SCREEN CURSOR ADDRESSES CNTRY9 JP OUTPT1 ;LIMITED SCREEN OUTPUT [TTY MODE] CNTRYA JP OUTPT2 ;FULL CONTROL SCREEN OUTPUT CNTRYB JP OUTPT4 ;SOFTWARE CONTROLLED OUTPUT TO ; SCREEN AND/OR PRINTER CNTRYC JP OUTPT5 ;BUFFERED OUTPUT ; ; RAM WORK AREAS FOR PACKAGE ; CWORK DEFW CWBASE ;STARTING ADDRESS OF WORK AREA BUFFER DEFW CBBASE ;STARTING ADDRESS OF I/O BUFFER ; [BUFFER-3] IS ASSUMED TO BE STORAGE LOCATION OF ; SIGNIFICANT NO OF BYTES IN BUFFER. ; [BUFFER-2] IS ASSUMED TO BE STORAGE LOACTION OF ; FIRST SIGNIFICANT BYTE IN THE BUFFER. ; ;VIDEO RAM CONSTANTS TOP DEFW VIDRAM ;STARTING ADDRESS OF VIDEO RAM BOTLT DEFW 03C0H+VIDRAM ;ADDR. OF LAST LINE ON SCREEN BOTRT DEFW 03FFH+VIDRAM ;ENDING ADDRESS OF VIDEO RAM ; ; VIDEO CONTROL VECTOR TABLE ; TABLE DEFB 111B ;DEL DEFW RDEL ;DELETE CHARACTER COMMAND DEFB 000B ;^@ , NULL DEFW 0 ;STOP BYTE OF BUFFERED OUTPUT DEFB 000B ;^A , SOH DEFW 0 ;FLAG BYTE FOR MESSAGE MACRO DEFB 110B ;^B , STX DEFW BOT ;BOTTOM-OUT CURSOR COMMAND DEFB 000B ;^C , ETX DEFW 0 ;RESERVED DEFB 110B ;^D , E0T DEFW RINS ;INSERT A BLANK IN A LINE COMMAND DEFB 111B ;^E , ENG DEFW REVMD ;REVERSE VIDEO COMMAND DEFB 110B ;^F , ACK DEFW GINS ;INSERT A BLANK GLOBALLY COMMAND DEFB 110B ;^G , BEL DEFW GDEL ;DELETE A CHARACTER GLOBALLY COMMAND DEFB 111B ;^H , BS DEFW CRSLT ;SHIFT CURSOR LEFT COMMAND(BACK-SPACE) DEFB 111B ;^I , HT DEFW TABLT ;HORIZONTAL TAB COMMAND DEFB 011B ;^J , LF DEFW LINEFD ;LINE FEED COMMAND ; (BUFF I/O - LINE CLEAR) DEFB 110B ;^K , VT DEFW HOMEIT ;CURSOR HOME COMMAND DEFB 111B ;^L , FF DEFW CLRIT ;CLEAR SCREEN COMMAND DEFB 011B ;^M , CR DEFW CRGRT ;CARRAIGE RETURN COMMAND DEFB 110B ;^N , SO DEFW CRSON ;CURSOR ON COMMAND DEFB 110B ;^O , SI DEFW CRSOFF ;CURSOR OFF COMMAND DEFB 110B ;^P , DLE DEFW PRTOGL ;PRINTER ON/OFF TOGGLE COMMAND DEFB 011B ;^Q , DC1 DEFW PMODE ;PAGE MODE COMMAND DEFB 000B ;^R , DC2 DEFW 0 ;ALTERNATE CR - UNDER BUFF I/O ; REPEAT COMM IN VIDPROCESSOR DEFB 000B ;^S , DC3 DEFW 0 ;SPEED CONTROL - SCROLLING DEFB 110B ;^T , DC4 DEFW LINSRT ;INSERT A BLANK LINE COMMAND DEFB 000B ;^U , NAK DEFW 0 ;RESERVED DEFB 111B ;^V , SYN DEFW DIRMD ;DIRECT VIDEO COMMAND DEFB 011B ;^W , ETB DEFW SMODE ;SCROLL MODE COMMAND DEFB 000B ;^X , CAN DEFW 0 ;RESERVED DEFB 110B ;^Y , EM DEFW LDEL ;LINE DELETE COMMAND DEFB 000B ;^Z , SUB DEFW 0 ;RESERVED DEFB 000B ;^[ , ESC DEFW 0 ;RESERVED DEFB 110B ;^]-1 , FS DEFW CRSLT ;CURSOR LEFT COMMAND DEFB 110B ;^] , GS DEFW CRSUP ;CURSOR UP COMMAND DEFB 110B ;^^ , RS DEFW CRSRT ;CURSOR RIGHT COMMAND DEFB 110B ;^/ , VS DEFW CRSDN ;CURSOR DOWN COMMAND DEFB 111B ;5FH , TTY BACK SPACE DEFW BSDEL ;BACK-SPACE AND DELETE ; ; INITIALIZE THE PACKAGE ; CINIT PUSH IY ;EXTERNAL ENTRY LD IY,(CWORK) PUSH HL CALL CINIT1 POP HL POP IY RET ; CINIT1 LD HL,(TOP) ;HOME CURSOR CALL PUTC SUB A LD (IY+2),A ;SET TO SCROLL MODE LD (IY+3),A ;TURN ON CURSOR LD (IY+4),A ;SET VIDEO TO DIRECT MODE LD (IY+8),34H ;SET SCROLL SPEED (MED) LD (IY+9),A ;TURN OFF PRINTER LD (IY+10),A ;INDICATE BUFFER EMPTY OUT (0C8H),A ;INIT P-TECH VDM RET DEFB 0,0,0,0,0,0,0,0 ;PATCH AREA DEFB 0,0,0,0,0,0,0,0 ; ;CONSOL INPUT .. 3 DIFFERENT ENTRIES ; 1..status - of key entry ; 2..stobed key entry ; 3..unstrobed entry ; ; key data msb is masked off ; upon return the carry flag is: ; set if msb is high ; cleared if msb is low ; KSTAT IN A,(KSPORT) AND KSMASK NOP ;RESERVED FOR NEG POLARITY NOP ;USE XOR KSMASK RET Z LD A,0FFH RET ; KINP1 CALL KSTAT JR Z,KINP1 KINP2 IN A,(KDPORT) NOP ;RESERVED FOR NEG POL OR A RET P AND 7FH SCF RET ; ; LINE PRINTER OUTPUT ; {PRESENT CONFIGURATION IS COMPATABLE} ; {TO THE CENTRONICS 779 } ; OPT3A IN A,(LSPORT) AND LSMASK NOP ;RESERVED FOR NEG POL NOP JR Z,OPT3A RET ; OPT3B IN A,(LBPORT) AND LBMASK NOP ;RESERVED FOR NEG POL NOP JR Z,OPT3B RET ; OUTPT3 CALL OPT3A CALL OPT3B LD A,C NOP ;RESERVED FOR NEG POL OUT (LDPORT),A RET ; ; GET SCREEN CURSOR ADDRESSES ; CVADDR PUSH IY LD IY,(CWORK) CALL GETC CALL COL LD C,A CALL ROW LD B,A POP IY RET ; ; BUFFERED INPUT - SCREEN EDITED ; BUFIN1 CALL SVREG LD L,(IY+11) LD E,(IY+12) LD D,(IY+13) BF0 LD A,L OR A JR NZ,BF1 LD A,(IY+10) OR A JR Z,BF0A SUB A LD (IY+10),A LD A,0DH JR BF2 BF0A DEC A LD (IY+10),A CALL BLDIT LD HL,(BUFFER) EX DE,HL ADD HL,BC SBC HL,DE LD (IY+11),L LD (IY+12),E LD (IY+13),D JR BF0 BF1 LD A,(DE) DEC HL INC DE LD (IY+11),L LD (IY+12),E LD (IY+13),D BF2 POP HL ;POP OFF PRIOR AF TO SAVE PRES. AF JP EXIT3 ; ; LIMITED VIDEO OUTPUT - SCROLL MODE ; OUTPT1 CALL SVREG CALL VIDCK LD DE,EXIT1 PUSH DE LVIDEO LD B,1 SUB A JR JUMPTO ; ; FULL CONTROL VIDEO OUTPUT - PAGE MODE ; OUTPT2 CALL SVREG CALL VIDCK LD DE,EXIT1 PUSH DE FVIDEO LD B,2 LD A,0FFH ; ; ; VECTOR TO COMMAND ; JUMPTO LD (IY+2),A CALL CTRLCK CALL GETC JP NC,PRTCHR LD IX,TABLE LD E,A ADD A,A ADD A,E LD E,A LD D,00 ADD IX,DE LD A,(IX) AND B LD A,C JP Z,PRTCHR LD E,(IX+1) LD D,(IX+2) PUSH DE POP IX JP (IX) ; ; SOFTWARE CONTROLLED OUTPUT ; OUTPT4 CALL SVREG CALL VIDCK LD DE,EXIT1 PUSH DE JP VOUT ; ; BUFFERED OUTPUT ; OUTPT5 CALL SVREG PUSH HL CALL VIDCK POP HL LD DE,EXIT2 PUSH DE JP VPROCR ; ; COMMAND BUILDER ; BUFIN2 CALL SVREG CALL VIDCK LD DE,EXIT2 PUSH DE JP BLDIT ; ; VIDEO DISPLAY PROCESSOR ; VPROCR LD A,(HL) LD C,A OR A RET Z CP 01H ;MACRO FUNCTION? JR NZ,VIDPR1 CALL MACROM JR AGAIN VIDPR1 CP 12H ;REPEAT COMMAND? JR Z,REPMD CALL VCHOUT AGAIN INC HL JR VPROCR ; REPEAT MODE REPMD INC HL LD B,(HL) INC HL LD C,(HL) CP 01H ;MACRO FUNCTION? JR Z,MACMD RPM1 CALL VCHOUT DJNZ RPM1 JR AGAIN MACMD PUSH HL CALL MACROM POP HL DJNZ MACMD JR AGAIN ; MACRO FUNCTION MACROM INC HL LD B,(HL) MCR1 INC HL LD E,(HL) INC HL LD D,(HL) PUSH HL PUSH BC EX DE,HL CALL VPROCR POP BC POP HL DJNZ MCR1 RET ; ; OUTPUT TO VIDEO UNDER MODE CONTROL ; VCHOUT CALL SREG2 LD DE,EXIT5 PUSH DE VOUT LD A,(IY+4) OR A JR Z,VOUT1 LD A,C CP 5FH JR Z,VOUT1 CP 7FH JR Z,VOUT1 CP 20H JR C,VOUT1 OR 80H LD C,A VOUT1 LD A,(IY+2) INC A JP Z,FVIDEO LD A,(IY+9) OR A CALL NZ,OUTPT3 JP LVIDEO ; ; BUILD A LINE ON THE SCREEN ; THEN PUT IT AWAY INTO THE BUFFER ; ; exit upon sensing a carraige return ; BLDIT LD HL,CMSG0 CALL VPROCR BD0 LD HL,CMSG1 CALL VPROCR ;CLEAR LINE BD1 CALL KINP1 LD C,A CP LNFEED JR Z,BD0 CP CARRET JR Z,FIND1 CP ALTRET ;ALTERNATE CARRAIGE RETURN JR Z,FIND2 BD3 CALL VCHOUT JR BD1 ; ; FIND LINE LOCATION ON SCREEN ; FIND1 LD BC,64 JR FIND FIND2 LD BC,128 FIND PUSH BC LD C,OFFCUR CALL VCHOUT CALL CVADDR LD A,L SUB C LD L,A JR NC,FND1 DEC H ; ; STUFF IT INTO COMMAND BUFFER ; FND1 LD DE,(BUFFER) POP BC PUSH BC PUSH DE LDIR LD HL,CMSG2 CALL VPROCR ; ; GET GIST OF COMMAND MESSAGE ; POP DE POP BC PUSH DE LD H,B LD L,C ADD HL,DE DEC HL EX DE,HL LD A,(HL) CP ':' JR NZ,FND2 INC HL DEC BC FND2 LD A,20H FND3 CPI JP PO,BD6 JR Z,FND3 DEC HL INC BC EX DE,HL FND4 CPD JR Z,FND4 INC BC BD6 POP IX LD (IX-1),D LD (IX-2),E LD (IX-3),C RET ; ; GET ROW ADDRESS ; ROW: LD A,03H AND H LD B,A LD A,0C0H AND L ADD A,B RLCA RLCA CP 00H RET ; ; GET COLUMN ADDRESS ; COL: LD A,3FH AND L RET ; ; SAVE REGISTERS ON ENTRY ; SVREG: EX (SP),HL PUSH BC PUSH DE PUSH IX PUSH IY LD IY,(CWORK) PUSH AF PUSH HL LD HL,12 ADD HL,SP PUSH DE LD E,(HL) INC HL LD D,(HL) EX DE,HL POP DE RET SREG2 EX (SP),HL PUSH BC PUSH DE JP (HL) ; VIDCK CALL GETC LD A,(BOTRT+1) CP H JR C,VCK1 LD A,(TOP+1) DEC A CP H RET C VCK1 LD HL,(TOP) CALL PUTC CALL CINIT1 RET ; ; RESTORE REGISTERS AND EXIT ; EXIT1: CALL ON CALL PUTC EXIT2: POP AF EXIT3: POP IY POP IX EXIT4: POP DE POP BC POP HL RET EXIT5 CALL ON CALL PUTC JR EXIT4 ; ; CHECK ON CONTROL CHARACTERS ; CTRLCK LD A,C CP 7FH JR NZ,CTR1 SUB A JR CTR3 CTR1 CP 5FH JR NZ,CTR2 LD A,21H JR CTR3 CTR2 CP 20H RET NC INC A CTR3 SCF RET ; ; SAVE CURSOR LOCATION ; PUTC LD (IY),L LD (IY+1),H RET ; ; GET CURSOR LOCATION ; GETC LD L,(IY) LD H,(IY+1) RET ; ; SET/RESET PRINTER TOGGLE ; PRTOGL LD A,(IY+9) OR A JR Z,PTGL1 LD (IY+9),00H RET PTGL1 DEC A LD (IY+9),A RET ; ; INSERT A BLANK LINE ; LINSRT CALL CRGRT LD B,40H LINS1 PUSH BC CALL GINS1 POP BC DJNZ LINS1 RET ; ; DELETE A LINE ; LDEL CALL CRGRT CALL PUTC LD B,40H LDEL1 PUSH BC CALL GDEL POP BC DJNZ LDEL1 RET ; ; BACKSPACE AND DELETE ; BSDEL CALL COL RET Z CALL OFF DEC L CALL PUTC JP RDEL ; ; SET TO PAGE MODE ; PMODE LD (IY+2),0FFH LD A,(IY+9) OR A RET Z LD C,0DH CALL OUTPT3 LD (IY+9),00H RET ; ; SET TO SCROLL MODE ; SMODE LD (IY+2),00H RET ; ; SET TO DIRECT VIDEO MODE ; DIRMD LD (IY+4),00H RET ; ; SET TO REVERSE VIDEO MODE ; REVMD LD (IY+4),0FFH RET ; ; TURN CURSOR ON ; ON: LD A,(IY+2) OR A JR Z,ON1 LD A,(IY+3) OR A RET NZ ON1: LD A,(HL) OR 80H LD (HL),A RET NOP NOP NOP CRSON: SUB A LD (IY+3),A CALL ON RET ; ; TURN CURSOR OFF ; OFF: LD A,(HL) AND 7FH LD (HL),A RET NOP NOP NOP NOP NOP CRSOFF: LD A,0FFH LD (IY+3),A CALL OFF RET ; ; CURSOR RIGHT ; CRSRT CALL COL SUB 3FH RET Z CALL OFF INC L RET ; ; CURSOR LEFT ; CRSLT: CALL COL RET Z CALL OFF DEC L RET ; ; CURSOR UP ; CRSUP: CALL ROW RET Z CALL OFF LD A,L SUB 40H LD L,A RET NC DEC H RET ; ; CURSOR DOWN ; CRSDN CALL ROW CP 0FH RET Z CDN1 CALL OFF LD A,L ADD A,40H LD L,A RET NC INC H RET ; ; MOVE UP ONE BYTE IN MEMORY ; SFTUP: LD A,B OR C JR Z,S1 LD D,H LD E,L DEC HL LDDR S1: INC HL LD (HL),20H RET ; ; MOVE DOWN IN MEMORY ; SFTDN: LD A,B OR C JR Z,S2 LD D,H LD E,L INC HL LDIR DEC HL S2: LD (HL),20H CALL GETC RET ; ; GLOBAL SETUP ; GSU: LD D,H LD E,L LD HL,(BOTRT) SUB A SBC HL,DE LD B,H LD C,L RET ; ; ROW SETUP ; RSU: CALL COL NEG ADD A,3FH LD C,A LD B,00H RET ; ; GLOBAL INSERT ; GINS: CALL OFF GINS1 CALL GSU LD HL,(BOTRT) CALL SFTUP RET ; ; GLOBAL DELETE ; GDEL: CALL GSU CALL GETC CALL SFTDN RET ; ; ROW INSERT ; RINS: CALL OFF CALL RSU ADD A,L LD L,A CALL SFTUP RET ; ; ROW DELETE ; RDEL: CALL RSU CALL SFTDN RET ; ; HORIZONTAL TAB ; TABLT: CALL OFF LD BC,0008H ADD HL,BC LD A,L AND 0F8H LD L,A CALL COL LD C,A CALL ROW OR C CP 00H RET NZ LD HL,(BOTLT) CALL PUTC JP SCRLIT ; ; CURSOR HOME ; HOMEIT: CALL OFF LD HL,(TOP) RET ; ; CURSOR BOTTOM OUT ; BOT: CALL OFF LD HL,(BOTLT) RET ; ; CLEAR SCREEN ; CLRIT: LD HL,(BOTRT) LD D,H LD E,L DEC DE LD BC,03FFH LD (HL),20H LDDR LD A,0E0H LD (IY+8),A SUB A LD (IY+3),A RET ; ; CARRAGE RETURN ; CRGRT: CALL OFF LD A,L AND 0C0H LD L,A RET ; ; LINEFEED ; LINEFD: CALL OFF CALL ROW CP 0FH JP Z,SCRLIT JP CDN1 ; ; ENTER CHARACTER ON SCREEN ; PRTCHR: LD (HL),A INC HL CALL COL RET NZ CALL ROW RET NZ LD HL,(BOTLT) CALL PUTC JP SCRLIT ; ; SCROLL SCREEN IF ALLOWED ; SCRLIT: LD A,(IY+2) INC A JP Z,SCR4 CALL UPONE CALL KINP2 CP 13H CALL Z,KINP1 SCR0: CP 30H JP C,SCR1 CP 38H JP NC,SCR1 SUB 30H RRCA RRCA RRCA AND 0E0H LD (IY+8),A SCR1: LD A,(IY+8) CP 00H JP NZ,SCR2 CALL KINP1 CP 20H RET Z CP 30H RET Z JP SCR0 SCR2: LD D,A LD E,00H SCR3: INC E JP NZ,SCR3 INC D JP NZ,SCR3 RET SCR4: CALL COL LD HL,(TOP) ADD A,L LD L,A RET ; ; SCROLL UP ONE LINE ; UPONE: LD DE,(TOP) LD HL,40H ADD HL,DE LD BC,3C0H LDIR LD HL,(BOTRT) LD (HL),20H LD BC,03FH LD D,H LD E,L DEC DE LDDR CALL GETC RET ; ; MESSAGE MACROS FOR PACKAGE ; (USED IN BUFFIN-BUILD) ; ; CRLF,SET PAGE MODE EOM DEFL NULL CMSG0 DEFB CARRET,LNFEED,SPGMD,EOM ; CLEAR LINE CMSG1 DEFB CARRET,SSLMD,RPTCMD,40H,20H,SPGMD,BKFEED,EOM ; SET SCROLL MODE CMSG2 DEFB ONCURS,SSLMD,EOM