home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol020
/
consol.z80
< prev
next >
Wrap
Text File
|
1984-04-29
|
14KB
|
959 lines
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