home *** CD-ROM | disk | FTP | other *** search
- TITLE COMMAND SUBSYSTEM-MODULE 2 OF SYSTEM MONITOR * Release A
- ; ******Donated to the Pascal/Z Users Group,July 1980***********
- ; COMMAND SUBSYSTEM - MODULE TWO
- ;
- ; FILL MEMORY.
- ;
- FILL CALL GET2AD
- PUSH DE
- PUSH HL
- CALL CKBLK
- JR NC,FLL1
- LD E,00H
- JR FLL2
- FLL1 CALL DCDAD2
- JP C,ERR05
- FLL2 LD C,E
- POP HL
- POP DE
- FLL3 LD (HL),C
- INC HL
- DEC DE
- LD A,D
- OR E
- JR NZ,FLL3
- JP COMPLT
- ;
- ; JUMP ROUTINE...TWO ENTRIES
- ; JUMP LOADS RESTART VECTOR AT [0000H]
- ; GOTO LOADS RESTART ONTO STACK FOR RETURN
- ;
- JUMP CALL GETADD
- JP C,ERR01
- LD HL,RESTRT
- LD (0001H),HL
- LD A,0C3H
- LD (00H),A
- JR GT1
- GOTO CALL GETADD
- JP C,ERR01
- LD HL,RESTRT
- PUSH HL
- GT1 CALL HLAD1
- JP (HL)
- ;
- ; DISPLAY OR LIST MEMORY COMMAND .. Four options.
- ; 1. combined ASCII and HEX display.
- ; 2. HEX display
- ; 3. ASCII diplay.
- ; 4. Text display.
- ;
- LIST LD HL,DMESS1
- CALL VIDPRO
- DSPLAY CALL GETOPT
- JP C,ERR01
- CP SPACE
- JP Z,DSHEX
- CP 'C'
- JP Z,DSCOM
- CP 'H'
- JP Z,DSHEX
- CP 'A'
- JP Z,DSASC
- CP 'T'
- JP Z,DSTXT
- JP ERR06
- ;
- ; DISPLAY COMBINED ASCII AND HEX
- ;
- DSCOM CALL GET2AD
- DSC1 CALL ESCAPE
- JP C,DEXIT
- CALL CRLF
- CALL OUTHAD
- CALL OUT3SP
- CALL OUT3SP
- PUSH HL
- PUSH DE
- CALL OUT8HB
- PUSH AF
- INC B
- POP AF
- JR Z,DSC3
- DSC2 CALL OUT3SP
- DJNZ DSC2
- DSC3 POP DE
- POP HL
- CALL OUT8AB
- JR C,DSC1
- JP DCMPLT
- ;
- ; DISPLAY HEX
- ;
- DSHEX CALL GET2AD
- DSH1 CALL ESCAPE
- JP C,DEXIT
- CALL CRLF
- CALL OUTHAD
- CALL OUT3SP
- CALL OUT8HB
- JP NC,DCMPLT
- CALL OUTSPC
- CALL OUTEXP
- CALL OUTSPC
- CALL OUTSPC
- CALL OUT8HB
- JP NC,DCMPLT
- JR DSH1
- ;
- ; DISPLAY ASCII
- ;
- DSASC CALL GET2AD
- DSA1 CALL ESCAPE
- JP C,DEXIT
- CALL CRLF
- CALL OUTHAD
- CALL OUT3SP
- CALL OUT8AB
- JP NC,DCMPLT
- CALL DS8AB
- JP NC,DCMPLT
- CALL DS8AB
- JP NC,DCMPLT
- CALL DS8AB
- JP NC,DCMPLT
- JR DSA1
- DS8AB CALL OUT3SP
- CALL OUTEXP
- CALL OUT3SP
- CALL OUT8AB
- RET
- ;
- DCMPLT CALL CRLFP
- JP COMPLT
- ;
- DEXIT CALL CRLFP
- JP EXIT
- ;
- ; DISPLAY TEXT .. THIS IS A DANGEROUS ROUTINE
- ; SHOULD ONLY BE USED FOR MEMORY CONTAINING ONLY
- ; ASCII TEXT.
- ;
- DSTXT CALL GET2AD
- CALL CRLF
- DST1 LD C,(HL)
- CALL VIDOUT
- INC HL
- CALL ESCAPE
- JP C,DEXIT
- DEC DE
- LD A,E
- OR D
- JR NZ,DST1
- JP DCMPLT
- ;
- ; HEXIDECIMAL ARITHMETIC
- ;
- ;
- HEX CALL GETADD
- JP C,ERR07
- LD A,(IY-06H)
- CP 2
- JP NZ,ERR07
- CALL HLAD1
- EX DE,HL
- CALL HLAD2
- ADD HL,DE
- CALL CRLFP
- LD C,'+'
- CALL VIDOUT
- CALL OUTSPC
- CALL OUTHAD
- CALL OUT3SP
- CALL OUTDSH
- CALL OUTSPC
- CALL HLAD2
- SUB A
- EX DE,HL
- SBC HL,DE
- CALL OUTHAD
- JP RECOMM
- ;
- ; MOVE MEMORY COMMAND
- ;
- ;
- MOVE CALL GET2AD
- LD B,D
- LD C,E
- EX DE,HL
- CALL HLAD3
- EX DE,HL
- SBC HL,DE
- JR C,MV1
- CALL HLAD1
- LDIR
- JP COMPLT
- MV1 EX DE,HL
- ADD HL,BC
- EX DE,HL
- CALL HLAD2
- DEC DE
- LDDR
- JP COMPLT
- ;
- ; TEST MEMORY .. THREE OPTIONS.
- ; 1. [F] GET FIRST BLOCK OF RAM.
- ; 2. [Q] QUICK TEST A BLOCK OF RAM.
- ; 3. [C] COMPLETELY TEST A BLOCK OF RAM.
- ;
- ; TESTS [Q] AND [C] ARE DISTRUCTINE
- ;
- TEST CALL CRLFP
- CALL GETOPT
- CP SPACE
- JP Z,FTEST
- JP C,ERR01
- CP 'F'
- JP Z,FTEST
- CP 'Q'
- JP Z,QTEST
- CP 'C'
- JP NZ,ERR06
- ;
- ; COMPLETE TEST
- ;
- CALL CRLFP
- CALL GET2AD
- SUB A
- TC1 PUSH AF
- CALL TLOOP
- JR C,TC2
- POP AF
- INC A
- JR NZ,TC1
- JP COMPLT
- TC2 POP AF
- JP EXIT
- ;TEST LOOP
- TLOOP CALL HLAD1
- LD B,D
- LD C,E
- TL0 PUSH AF
- CALL ESCAPE
- JR C,TL1
- POP AF
- LD (HL),A
- CPI
- CALL NZ,TERR
- RET PO
- JR TL0
- TL1 POP AF
- SCF
- RET
- ;
- ; TEST ERR OUTPUT
- ;
- TERR PUSH HL
- PUSH AF
- DEC HL
- PUSH HL
- LD HL,TMESS1
- CALL VIDPRO
- POP HL
- CALL OUTHAD
- CALL OUT3SP
- POP AF
- PUSH AF
- CALL OUTHBT
- CALL OUTDSH
- LD A,(HL)
- CALL OUTHBT
- POP AF
- POP HL
- RET
- TMESS1 DEFB CR,LF,'RAM ERROR ',EOM
- ;
- ; QUICK MEMORY TEST
- ;
- QTEST CALL GET2AD
- LD A,0AAH
- CALL TLOOP
- JP C,EXIT
- LD A,055H
- CALL TLOOP
- JP C,EXIT
- JP COMPLT
- ;
- ; FIND FIRST BLOCK OF RAM
- ;
- FTEST CALL FMEM
- JP COMPLT
- FMEM LD HL,00
- LD A,0AAH
- FT1 LD B,(HL)
- LD (HL),A
- CP (HL)
- JR Z,FT2
- INC HL
- JR FT1
- FT2 LD (IY-0CH),L
- LD (IY-0BH),H
- FT3 LD (HL),B
- INC HL
- LD B,(HL)
- LD (HL),A
- CP (HL)
- JR Z,FT3
- DEC HL
- LD (IY-0AH),L
- LD (IY-09H),H
- LD HL,TMESS2
- CALL VIDPRO
- CALL HLAD1
- CALL OUTHAD
- CALL OUTDSH
- CALL HLAD2
- CALL OUTHAD
- RET
- ;
- TMESS2 DEFB CR,LF,'FIRST CONTIGUOUS RAM MEMORY IS ',EOM
- ;
- ; PROGRAM PROM ROUTINE
- ; CROMEMCO BYTE-SAVER
- ;
- LOADUP CALL CRLFP
- CALL GET2AD
- LD B,D
- LD C,E
- EX DE,HL
- CALL HLAD3
- EX DE,HL
- RET
- ;
- PROGRM CALL LOADUP
- LD A,128
- PROM1 PUSH HL
- PUSH BC
- PUSH DE
- LDIR
- POP DE
- POP BC
- POP HL
- PUSH AF
- CALL ESCAPE
- JR C,PROM2
- POP AF
- DEC A
- JR NZ,PROM1
- JP VMOVE0
- PROM2 POP AF
- JP EXIT
- ;
- ; LOCK UP THE SYSTEM
- ;
- LOCKUP CALL GETADD
- JP C,ERR05
- LKUP LD HL,LMESS2
- CALL VIDPRO
- CALL HLAD1
- CALL SKEY
- CALL VHEX
- JR C,LKUP
- RLCA
- RLCA
- RLCA
- RLCA
- LD B,A
- CALL SKEY
- CALL VHEX
- JR C,LKUP
- ADD A,B
- CALL HLAD1
- CP L
- JR NZ,LKUP
- LD HL,LMESS1
- CALL VIDPRO
- JP RESTRT
- ;
- ;
- ; VERIFY MEMORY
- ;
- VMOVE CALL LOADUP
- VMOVE0 CALL VMOVE1
- JP C,EXIT
- JP COMPLT
- ;
- VMOVE1 CALL ESCAPE
- RET C
- LD A,(DE)
- CPI
- CALL NZ,VERR
- RET PO
- INC DE
- JR VMOVE1
- ;
- VERR PUSH BC
- PUSH DE
- PUSH HL
- PUSH AF
- DEC HL
- PUSH HL
- LD HL,VMESS1
- CALL VIDPRO
- EX DE,HL
- CALL OUTAB
- POP HL
- CALL OUTAB
- POP AF
- POP HL
- POP DE
- POP BC
- RET
- ;
- OUTAB CALL OUT3SP
- CALL OUTHAD
- CALL OUTDSH
- LD A,(HL)
- CALL OUTHBT
- RET
- ;
- ; ENTER HEXIDECIMAL OR TEXT
- ;
- ENTER CALL GETOPT
- JP C,ERR01
- CP SPACE
- JP Z,ENHEX
- CP 'T'
- JP Z,ENTXT
- CP 'H'
- JP Z,ENHEX
- JP ERR06
- ;
- ENTXT CALL GETADD
- JP C,ERR03
- CALL HLAD1
- CALL CRLF
- ENT1 CALL SKEY
- CP STX
- LD (HL),A
- JP Z,COMPLT
- CP (HL)
- JP NZ,ERR10
- INC HL
- LD C,A
- CALL VIDOUT
- JR ENT1
- ENHEX CALL GETADD
- JP C,ERR03
- CALL HLAD1
- ENH1 CALL EHADD
- JR ENH3
- ENH2 LD A,L
- AND 7
- CALL Z,EHADD
- ENH3 CALL EHBT1
- CALL EHBT2
- CP SPACE
- JR NZ,ENH3A
- INC HL
- JR ENH2
- ENH3A CP 08H ;CK BACK SPACE
- JR NZ,ENH3B
- DEC HL
- JR ENH1
- ENH3B CP ESC
- JP Z,COMM
- CP CR
- JP Z,COMM
- CALL VHEX
- JR C,ENH1
- ADD A,A
- ADD A,A
- ADD A,A
- ADD A,A
- LD B,A
- CALL EHBT2
- CALL VHEX
- JR C,ENH1
- ADD A,B
- LD (HL),A
- CP (HL)
- JP NZ,ERR10
- CALL OUTSPC
- INC HL
- JR ENH2
- ;
- EHADD CALL CRLF
- CALL OUTHAD
- CALL OUT3SP
- RET
- ;
- EHBT1 LD A,(HL)
- CALL OUTHBT
- CALL OUTDSH
- RET
- ;
- EHBT2 CALL SKEY
- PUSH AF
- LD C,A
- CALL VIDOUT
- POP AF
- RET
- ;
- ; ASSIGN I/O VECTOR BYTE FLAG.
- ;
- ASSIGN CALL GETADD
- JP C,ERR05
- CALL HLAD1
- LD A,L
- LD (IY-4DH),A
- JP COMPLT
- ;
- ; INPUT FROM A PORT
- ;
- INPUT CALL GETADD
- JP C,ERR05
- CALL HLAD1
- EX DE,HL
- CALL HLAD2
- LD A,(IY-06H)
- CP 1
- JP NZ,ERR05
- INP1 CALL CRLFP
- LD C,E
- LD A,L
- IN A,(C)
- CALL OUTHBT
- CALL SKEY
- CP SPACE
- JR Z,INP1
- JP COMPLT
- ;
- ; OUTPUT TO A PORT
- ;
- OUTPUT CALL GETADD
- JP C,ERR05
- CALL HLAD1
- EX DE,HL
- CALL HLAD2
- LD A,(IY-06H)
- CP 2
- JP NZ,ERR05
- OUT1 LD C,E
- LD A,L
- OUT (C),A
- CALL CRLFP
- CALL SKEY
- CP SPACE
- JR Z,OUT1
- JP COMPLT
- ;
- ; SEARCH MEMORY FOR A HEX OR ASCII STRING
- ;
- SEARCH CALL CRLFP
- CALL GET2AD
- LD A,(IX+3)
- OR A
- JP Z,ERR08
- LD B,D
- LD C,E
- EXX
- CALL HLIX
- LD A,(HL)
- CP QUOTE
- JR NZ,SHEX
- INC HL
- CALL SCHSU
- EX DE,HL
- SCH0 LD (IY-0CH),0FFH
- LD A,(DE)
- EXX
- SCH1 PUSH AF
- CALL ESCAPE
- JR NZ,SCH1A
- POP AF
- JP EXIT
- SCH1A POP AF
- CPI
- JP PO,COMPLT
- JR NZ,SCH1
- PUSH HL
- EX AF,AF'
- EXX
- POP HL
- PUSH BC
- PUSH DE
- PUSH HL
- SCH2 INC DE
- LD A,(DE)
- CPI
- JP PO,SCH3
- JR Z,SCH2
- POP HL
- JR SCH3B
- SCH3 LD A,(IY-0CH)
- INC A
- LD (IY-0CH),A
- AND 07H
- JR NZ,SCH3A
- CALL CRLFP
- SCH3A CALL OUT3SP
- POP HL
- DEC HL
- CALL OUTHAD
- SCH3B POP DE
- POP BC
- EX AF,AF'
- EXX
- JR SCH1
- SCHSU PUSH HL
- LD E,(IY-02H)
- LD D,(IY-01H)
- SBC HL,DE
- LD A,(IY-03H)
- SUB L
- LD C,A
- LD B,00H
- POP HL
- RET
- SHEX CALL SCHSU
- PUSH HL
- PUSH HL
- SCH5 LD E,00H
- SCH6 LD A,(HL)
- CP SPACE
- JR Z,SCH7
- CP MINUS
- JR Z,SCH7
- CALL VHEX
- JP C,ERR09
- SLA E
- SLA E
- SLA E
- SLA E
- ADD A,E
- LD E,A
- INC HL
- DEC C
- JR Z,SCH8
- JR SCH6
- SCH7 INC HL
- DEC C
- SCH8 LD A,E
- POP DE
- LD (DE),A
- INC DE
- PUSH DE
- INC B
- LD A,C
- OR A
- JR NZ,SCH5
- POP DE
- LD C,B
- LD B,00H
- POP DE
- JP SCH0
- ;
- ; WRITE TO CASSETTE. DAJEN/TELETEK FORMAT
- ;
- WRITE CALL CRLFP
- CALL GET2AD
- CALL SWRITE
- JP COMM
- ;
- ; READ FROM CASSETTE. DAJEN/TELETEK FORMAT.
- ;
- READ CALL CRLFP
- CALL GETADD
- OR A
- ; ABSOLUTE LOAD
- JR Z,RE1
- DEC A
- ; BIASED LOAD
- JR Z,RE2
- DEC A
- JP NZ,ERR03
- ; SPECIFIC LOAD
- JR RE3
- RE1 LD HL,00H
- JR RE2A
- RE2 CALL HLAD1
- RE2A SUB A
- JR RE4
- ;
- ; SPECIFIC LOAD
- ;
- RE3 CALL CALCAD
- SUB A
- DEC A
- ; ABSOLUTE/BIAS LOAD
- RE4 CALL SREAD
- JP COMM
- ;
- ; COMPLETION VECTOR
- ;
- COMPLT LD HL,CMESS1
- CMPT1 CALL VIDPRO
- JP RESTRT
- EXIT LD HL,CMESS2
- JR CMPT1
- ;
- ; Not Available message; jump to restart
- ;
- NAVAIL LD HL,NMESS1
- CALL VIDPRO
- JP RECOMM
- ;
- ; CPM FILE VECTOR
- ;
- CPM LD HL,NMESS2
- CALL VIDPRO
- JP DISK1
- ;
- ; ERROR VECTORS
- ;
- ERR01 LD HL,EMAC01
- EV1 CALL VIDPRO
- JP RECOMM
- ERR02 LD HL,EMAC02
- JR EV1
- ERR03 LD HL,EMAC03
- JR EV1
- ERR04 LD HL,EMAC04
- JR EV1
- ERR05 LD HL,EMAC05
- JR EV1
- ERR06 LD HL,EMAC06
- JR EV1
- ERR07 LD HL,EMAC07
- JR EV1
- ERR08 LD HL,EMAC08
- JR EV1
- ERR09 LD HL,EMAC09
- JR EV1
- ERR10 LD HL,EMAC10
- JR EV1
- ;
- ; MONITOR TABLES
- ;
- CTBLE DEFB 'UCPMDT'
- VTBLE DEFB 'UMDT'
- DELCHR DEFB ' .,;:-+*/='
- ;
- ; WORD LIST FOR MACRO-MESSAGES
- ;
- WD00 DEFB CR,LF,PROMP,EOM
- WD01 DEFB 'COMMAND ',EOM
- WD02 DEFB 'ERROR ',EOM
- WD03 DEFB '; REENTER ',EOM
- WD04 DEFB 'ENTER ',EOM
- WD05 DEFB 'SOURCE/DESINATION ',EOM
- WD06 DEFB 'ADDRESS ',EOM
- WD07 DEFB 'NOT AVAILABLE ',EOM
- WD08 DEFB 'HEXIDECIMAL ',EOM
- WD09 DEFB 'REVERSED ',EOM
- WD10 DEFB 'BYTE ',EOM
- WD11 DEFB 'COMPLETE ',EOM
- WD12 DEFB 'CP/M FILE ',EOM
- WD13 DEFB 'ESCAPE ',EOM
- WD14 DEFB 'OPTION ',EOM
- WD15 DEFB 'VERIFY ',EOM
- WD16 DEFB 'SEARCH FIELD ',EOM
- ;
- ; MESSAGE MACROS
- ;
- SMESS1 DEFB CLEAR,SCROLL
- DEFB '***SPHINX MONITOR ..Version I.1***',EOM
- SMESS2 DEFB SCROLL,DIR,CR,LF,PROMP,EOM
- SMESS3 DEFB STX,3
- DEFW SMESS2,WD04,WD01
- DEFB EOM
- CMESS1 DEFB STX,2
- DEFW MAC2,WD11
- DEFB EOM
- CMESS2 DEFB STX,2
- DEFW MAC2,WD13
- DEFB EOM
- DMESS1 DEFB PAGE,PTGL,SCROLL,EOM
- NMESS1 DEFB STX,5
- DEFW MAC2,WD01,WD07,WD03,WD01
- DEFB EOM
- NMESS2 DEFB STX,2
- DEFW MAC2,WD12
- DEFB EOM
- LMESS1 DEFB STX,2
- DEFW SMESS1,WD00
- DEFB '***UNLOCKED***',EOM
- LMESS2 DEFB STX,3
- DEFW SMESS1,WD00,WD00
- DEFB '***LOCKED***',STX,2
- DEFW WD00,WD00
- DEFB 'TO UNLOCK '
- DEFB STX,3
- DEFW WD04,WD08,WD10
- DEFB 'KEY',EOM
- VMESS1 DEFB STX,3
- DEFW WD00,WD15,WD02
- DEFB EOM
- ; MACRO: CR LF CLEAR LINE
- MAC2 DEFB LF
- MAC3 DEFB SCROLL,CR,REPT,40H,SPACE,PAGE,CUP,SCROLL,EOM
- ; MACRO: ERROR ; REENTER COMMAND
- MAC1 DEFB STX,3
- DEFW WD02,WD03,WD01
- DEFB EOM
- ;COMMAND ERROR ;REENTER COMMAND
- EMAC01 DEFB STX,3
- DEFW MAC2,WD01,MAC1
- DEFB EOM
- ;SOURCE/DESTINATION ERROR ; REENTER COMMAND
- EMAC02 DEFB STX,3
- DEFW MAC2,WD05,MAC1
- DEFB EOM
- ;HEXIDECIMAL ADDRESS ERROR ; REENTER COMMAND
- EMAC03 DEFB STX,4
- DEFW MAC2,WD08,WD06,MAC1
- DEFB EOM
- ;REVERSED ADDRESS ERROR ; REENTER COMMAND
- EMAC04 DEFB STX,4
- DEFW MAC2,WD09,WD06,MAC1
- DEFB EOM
- ;HEXIDECIMAL BYTE ERROR ; REENTER COMMAND
- EMAC05 DEFB STX,4
- DEFW MAC2,WD08,WD10,MAC1
- DEFB EOM
- EMAC06 DEFB STX,3
- DEFW MAC2,WD14,MAC1
- DEFB EOM
- EMAC07 DEFB STX,3
- DEFW MAC2,WD08,MAC1
- DEFB EOM
- EMAC08 DEFB STX,1
- DEFW MAC2
- DEFB 'NO '
- DEFB STX,2
- DEFW WD16,MAC1
- DEFB EOM
- EMAC09 DEFB STX,4
- DEFW MAC2,WD16,WD08,MAC1
- DEFB EOM
- EMAC10 DEFB STX,5
- DEFW MAC2,WD04,WD10,WD15,MAC1
- DEFB EOM
-