; Disassembly of the file "C:\lab\if1-1.rom"
;
; CPU Type: Z80
;
; Created with dZ80 1.50
;
; on Sunday, 28 of April 2002 at 12:33 PM
;
; ---
;
; Last Updated: 14-JAN-2004
;
; Credits: John Hutcheson Documentation.
; Geoff Wearmouth Current Maintainer
#define DEFB .BYTE
#define DEFW .WORD
#define DEFM .TEXT
#define EQU .EQU
#define ORG .ORG
ORG $0000
; --------------------------------
; THE 'RETURN TO MAIN ROM' ROUTINE
; --------------------------------
;
;; MAIN-ROM
L0000: POP HL
LD (IY+$7C),$00 ; sv FLAGS_3
JP L0700 ; jump forward to UNPAGE
; -------------------
; THE 'START' ROUTINE
; -------------------
;
;; ST-SHADOW
L0008: LD HL,($5C5D) ; sv CH_ADD
POP HL
PUSH HL
JP L009A ; jump forward to START-2
; -----------------------------
; THE 'CALL A MAIN ROM' ROUTINE
; -----------------------------
;
;; CALBAS
L0010: LD ($5CBA),HL ; sv SBRT
POP HL
PUSH DE
JR L0081 ; forward to CALBAS-2
DEFB $FF ; unused
; ---------------------------------------------
; THE 'TEST IF SYNTAX IS BEING CHECKED' ROUTINE
; ---------------------------------------------
;
;; CHKSYNTAX
L0018: BIT 7,(IY+$01) ; sv FLAGS
RET
DEFB $FF ; unused
DEFB $FF ; unused
DEFB $FF ; unused
; --------------------------
; THE 'SHADOW-ERROR' ROUTINE
; --------------------------
;
;; SH-ERR
L0020: RST 18H
JR Z,L0068 ; forward to ST-ERROR
JR L003A ; forward to TEST-SP
DEFB $FF ; unused
DEFB $FF ; unused
DEFB $FF ; unused
; ------------------------------------
; THE 'MAIN ROM ERROR RESTART' ROUTINE
; ------------------------------------
;
;; ROMERR
L0028: RES 3,(IY+$02) ; sv TV_FLAG
JR L0040 ; forward to RMERR-2
DEFB $FF ; unused
DEFB $FF ; unused
; -------------------------------------------------
; THE 'CREATE NEW SYSTEM VARIABLES RESTART' ROUTINE
; -------------------------------------------------
; This restart is used twice to create the new system variables.
;; NEWVARS
L0030: JP L01F7 ; jump forward to CRT-VARS
DEFB $FF ; unused
DEFB $FF ; unused
DEFB $FF ; unused
DEFB $FF ; unused
DEFB $FF ; unused
; --------------------------------
; THE 'MASKABLE INTERRUPT' ROUTINE
; --------------------------------
;
;; INT-SERV
L0038: EI
RET
; ---------------------
; THE 'TEST-SP' ROUTINE
; ---------------------
;
;; TEST-SP
L003A: CALL L0077 ; routine CHECK-SP
JP L0258 ; jump forward to REP-MSG
; ----------------------------
; THE 'MAIN ROM ERROR' ROUTINE
; ----------------------------
;
;; RMERR-2
L0040: RST 18H
JR Z,L0068 ; forward to ST-ERROR
CALL L0077 ; routine CHECK-SP
CALL L17B9 ; routine RCL-T-CH
BIT 1,(IY+$7C) ; sv FLAGS_3
JR Z,L0068 ; forward to ST-ERROR
BIT 4,(IY+$7C) ; sv FLAGS_3
JR Z,L0068 ; forward to ST-ERROR
LD A,(IY+$00) ; sv ERR_NR
CP $14
JR NZ,L0068 ; forward to ST-ERROR
LD HL,L0000
PUSH HL
RST 00H
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
; ------------------------------------
; THE 'NON-MASKABLE INTERRUPT' ROUTINE
; ------------------------------------
;
;; NMINT-SRV
L0066: RETN
; ----------------------
; THE 'ST-ERROR' ROUTINE
; ----------------------
;
;; ST-ERROR
L0068: LD HL,($5C5D) ; sv CH_ADD
LD ($5C5F),HL ; sv X_PTR
LD SP,($5C3D) ; sv ERR_SP
LD HL,$16C5
PUSH HL
RST 00H
; ----------------------
; THE 'CHECK-SP' ROUTINE
; ----------------------
;
;; CHECK-SP
L0077: BIT 2,(IY+$7C) ; sv FLAGS_3
RET Z ;
LD SP,($5C3D) ; sv ERR_SP
RST 00H ;
; ----------------------
; THE 'CALBAS-2' ROUTINE
; ----------------------
;
;; CALBAS-2
L0081: LD E,(HL) ;
INC HL ;
LD D,(HL) ;
LD ($5CBD),DE ; sv SBRT
INC HL ;
EX (SP),HL ;
EX DE,HL ;
LD HL,L0000 ;
PUSH HL ;
LD HL,L0008 ;
PUSH HL ;
LD HL,$5CB9 ; sv SBRT
PUSH HL ;
JP L0700 ; jump forward to UNPAGE
; ---------------------
; THE 'CONTROL' ROUTINE
; ---------------------
;
;; START-2
L009A: PUSH AF
LD A,H
OR L
JR NZ,L00A5 ; forward to START-3
POP AF
POP HL
LD HL,($5CBA) ; sv SBRT
RET
; ---
;; START-3
L00A5: PUSH DE
LD DE,$15FE
SBC HL,DE
POP DE
JR NZ,L00BC ; forward to START-4
POP AF
LD HL,L0700
PUSH HL
LD HL,$0004
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
JP (HL)
; ---
;; START-4
L00BC: RST 30H ; NEWVARS
LD A,$01
OUT ($F7),A
LD A,$EE
OUT ($EF),A
POP AF
POP HL
PUSH AF
RST 10H ; CALBAS
DEFW $007B ; main TEMP-PTR3
LD ($5C3A),A ; sv ERR_NR
CP $FF
JR NZ,L00E9 ; forward to TEST-CODE
BIT 1,(IY+$7C) ; sv FLAGS_3
JR Z,L00E7 ; forward to NREPORT-0
BIT 7,(IY+$0C) ; sv PPC_hi
JR Z,L00E7 ; forward to NREPORT-0
LD HL,($5C59) ; sv E_LINE
LD A,(HL)
CP $F7
JP Z,L0A95 ; jump forward to LOAD-RUN
;; NREPORT-0
L00E7: RST 20H ; sh_err
DEFB $FF ; 'Program finished'
; ---
;; TEST-CODE
L00E9: SUB $1B
JP NC,L1981 ; jump forward to HOOK-CODE
CP $F0
JR Z,L00FB ; forward to COPYCHADD
CP $F3
JR Z,L00FB ; forward to COPYCHADD
CP $FC
JP NZ,L0028 ; jump to ROMERR
;; COPYCHADD
L00FB: LD HL,($5C5D) ; sv CH_ADD
LD ($5CCB),HL ; sv CHADD_
POP AF
BIT 5,(IY+$37) ; sv FLAGX
JP NZ,L0028 ; jump to ROMERR
BIT 0,(IY+$7C) ; sv FLAGS_3
JP NZ,L0028 ; jump to ROMERR
SET 0,(IY+$7C) ; sv FLAGS_3
RST 18H
JR NZ,L011B ; forward to RUNTIME
LD (IY+$0C),$FF ; sv PPC_hi
;; RUNTIME
L011B: LD B,(IY+$0D) ; sv SUBPPC
LD C,$00
BIT 7,(IY+$0C) ; sv PPC_hi
JR Z,L0130 ; forward to PROG-LINE
PUSH BC
RST 10H ; CALBAS
DEFW $19FB ; main E-LINE-NO
POP BC
RST 10H ; CALBAS
DEFW $0018 ; main GET-CHAR
JR L016F ; forward to S-STAT
; ---
;; PROG-LINE
L0130: LD HL,($5C53) ; sv PROG
;; SC-L-LOOP
L0133: LD A,($5C46) ; sv PPC_hi
CP (HL)
JR NC,L013B ; forward to TEST-LOW
;; NREPORT-1
L0139: RST 20H ; sh_err
DEFB $00 ; 'Nonsense in BASIC'
; ---
;; TEST-LOW
L013B: INC HL
JR NZ,L0144 ; forward to LINE-LEN
LD A,($5C45) ; sv PPC
CP (HL)
JR C,L0139 ; back to NREPORT-1
;; LINE-LEN
L0144: INC HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
JR Z,L016F ; forward to S-STAT
ADD HL,DE
JR L0133 ; back to SC-L-LOOP
; ---
;; SKIP-NUM
L014E: LD DE,$0006
ADD HL,DE
;; EACH-ST
L0152: LD A,(HL)
CP $0E
JR Z,L014E ; back to SKIP-NUM
INC HL
CP $22
JR NZ,L015D ; forward to CHKEND
DEC C
;; CHKEND
L015D: CP $3A
JR Z,L0165 ; forward to CHKEVEN
CP $CB
JR NZ,L0169 ; forward to CHKEND-L
;; CHKEVEN
L0165: BIT 0,C
JR Z,L016F ; forward to S-STAT
;; CHKEND-L
L0169: CP $0D
JR NZ,L0152 ; back to EACH-ST
JR L0139 ; back to NREPORT-1
; ---
;; S-STAT
L016F: DJNZ L0152 ; back to EACH-ST
DEC HL
LD ($5C5D),HL ; sv CH_ADD
RST 18H
JR NZ,L01AA ; forward to CL-WORK
BIT 7,(IY+$0C) ; sv PPC_hi
JP Z,L01F0 ; jump forward to ERR-6
DEC HL
LD C,$00
;; RCLM-NUM
L0182: INC HL
LD A,(HL)
CP $0E
JR NZ,L01A5 ; forward to NEXTNUM
PUSH BC
LD BC,$0006
RST 10H ; CALBAS
DEFW $19E8 ; main RECLAIM-2
PUSH HL
LD DE,($5CCB) ; sv CHADD_
AND A
SBC HL,DE
JR NC,L01A3 ; forward to NXT-1
EX DE,HL
LD BC,$0006
AND A
SBC HL,BC
LD ($5CCB),HL ; sv CHADD_
;; NXT-1
L01A3: POP HL
POP BC
;; NEXTNUM
L01A5: LD A,(HL)
CP $0D
JR NZ,L0182 ; back to RCLM-NUM
;; CL-WORK
L01AA: RST 10H ; CALBAS
DEFW $16BF ; main SET-WORK
CALL $024D
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
SUB $CE
CP $01
JP Z,L0486 ; jump forward to CAT-SYN
CP $02
JP Z,L04B4 ; jump forward to FRTM-SYN
CP $03
JP Z,L053D ; jump forward to MOVE-SYN
CP $04
JP Z,L0531 ; jump forward to ERASE-SYN
CP $05
JP Z,L04ED ; jump forward to OPEN-SYN
CP $2A
JP Z,L082F ; jump forward to SAVE-SYN
CP $21
JP Z,L0894 ; jump forward to LOAD-SYN
CP $08
JP Z,L089E ; jump forward to VERIF-SYN
CP $07
JP Z,L08A8 ; jump forward to MRG-SYN
CP $2D
JP Z,L0559 ; jump forward to CLS#-SYN
CP $2F
JP Z,L057F ; jump forward to CLR#-SYN
; finally if none of these,
LD HL,($5CB7) ; sv VECTOR
JP (HL)
; ---
;; ERR-6
L01F0: LD HL,($5CCB) ; sv CHADD_
LD ($5C5D),HL ; sv CH_ADD
RST 28H ; main romerr
; -----------------------------------------
; THE 'CREATE NEW SYSTEM VARIABLES' ROUTINE
; -----------------------------------------
;
;; CRT-VARS
L01F7: LD HL,($5C4F) ; sv CHANS
LD DE,$A349
ADD HL,DE
JR C,L0235 ; forward to VAR-EXIST
LD HL,L0224 ; Address DEFAULT below
PUSH HL
LD HL,($5C63) ; sv STKBOT
LD ($5C65),HL ; sv STKEND
LD HL,$5C92 ; sv MEM_0
LD ($5C68),HL ; sv MEM
LD HL,$5CB5 ; sv P_RAMT_hi
LD BC,L003A
LD DE,L0000
PUSH DE
LD E,$08
PUSH DE
LD DE,$1655
PUSH DE
JP L0700 ; jump forward to UNPAGE
; and then back here
;; DEFAULT
L0224: LD HL,L023A
LD BC,$0013
LD DE,$5CB6 ; sv FLAGS_3
LDIR
; Note. Accumulator may hold stream to close.
LD A,$01 ;
LD ($5CEF),A ; sv COPIES
RET ;
;; VAR-EXIST
L0235: RES 1,(IY+$7C) ; sv FLAGS_3
RET
; ---------------------------------------------
; THE 'SYSTEM VARIABLES DEFAULT VALUES' ROUTINE
; ---------------------------------------------
;
;; SV_DEFVAL
L023A: DEFB $02
DEFW $01F0 ;
LD HL,$0000
CALL $0000
LD ($5CBA),HL ; sv SBRT
RET
DEFW $000C ;
DEFB $01
DEFB $00
DEFW $0000 ;
; ----------------------------------------
; THE 'RESET NEW SYSTEM VARIABLES' ROUTINE
; ----------------------------------------
;
;; RES-VARS
L024D: LD HL,$5CCD ; sv NTRESP
LD B,$22
;; EACH-VAR
L0252: LD (HL),$FF
INC HL
DJNZ L0252 ; back to EACH-VAR
RET
; ------------------------------------
; THE 'SHADOW REPORT PRINTING' ROUTINE
; ------------------------------------
;
;; REP-MSG
L0258: LD (IY+$7C),$00 ; sv FLAGS_3
EI
HALT
CALL L17B9 ; routine RCL-T-CH
RES 5,(IY+$01) ; sv FLAGS
BIT 1,(IY+$30) ; sv FLAGS2
JR Z,L026E ; forward to FETCH-ERR
RST 10H ; CALBAS
DEFW $0ECD ; main COPY-BUFF
;; FETCH-ERR
L026E: POP HL
LD A,(HL)
LD (IY+$00),A ; sv ERR_NR
INC A
PUSH AF
LD HL,$0000
LD (IY+$37),H ; sv FLAGX
LD (IY+$26),H ; sv X_PTR_hi
LD ($5C0B),HL ; sv DEFADD
INC L
LD ($5C16),HL ; sv STRMS_00
RST 10H ; CALBAS
DEFW $16B0 ; main SET-MIN
RES 5,(IY+$37) ; sv FLAGX
RST 10H ; CALBAS
DEFW $0D6E ; main CLS-LOWER
SET 5,(IY+$02) ; sv TV_FLAG
RES 3,(IY+$02) ; sv TV_FLAG
POP AF
LD HL,$02B7
LD B,$04
CPIR
;; PR-REP-LP
L029F: LD A,(HL)
CP $20
JR C,L02AC ; forward to END-PR-MS
PUSH HL
RST 10H ; CALBAS
DEFW $0010 ; main PRINT-A
POP HL
INC HL
JR L029F ; back to PR-REP-LP
;; END-PR-MS
L02AC: LD SP,($5C3D) ; sv ERR_SP
INC SP
INC SP
LD HL,L1349
PUSH HL
RST 00H
; ------------------------------------
; THE 'SHADOW REPORT MESSAGES' ROUTINE
; ------------------------------------
;
;;
L02B7: DEFB $00
DEFM "Program finished"
DEFB $01
DEFM "Nonsense in BASIC"
DEFB $02
DEFM "Invalid stream number"
DEFB $03
DEFM "Invalid device expression"
DEFB $04
DEFM "Invalid name"
DEFB $05
DEFM "Invalid drive number"
DEFB $06
DEFM "Invalid station number"
DEFB $07
DEFM "Missing name"
DEFB $08
DEFM "Missing station number"
DEFB $09
DEFM "Missing drive number"
DEFB $0A
DEFM "Missing baud rate"
DEFB $0B
DEFM "Header mismatch error" ; not used.
DEFB $0C
DEFM "Stream already open"
DEFB $0D
DEFM "Writing to a 'read' file"
DEFB $0E
DEFM "Reading a 'write' file"
DEFB $0F
DEFM "Drive 'write' protected"
DEFB $10
DEFM "Microdrive full"
DEFB $11
DEFM "Microdrive not present"
DEFB $12
DEFM "File not found"
DEFB $13
DEFM "Hook code error"
DEFB $14
DEFM "CODE error"
DEFB $15
DEFM "MERGE error"
DEFB $16
DEFM "Verification has failed"
DEFB $17
DEFM "Wrong file type"
DEFB $18
; --------------------------------
; THE 'CAT COMMAND SYNTAX' ROUTINE
; --------------------------------
;
;; CAT-SYN
L0486: LD HL,$5CD8 ; sv D_STR1
LD (HL),$02
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CP $0D
JR Z,L0494 ; forward to MISSING-D
CP $3A
;; MISSING-D
L0494: JP Z,L0683 ; jump forward to NREPORT-9
CP $23
JR NZ,L04A6 ; forward to CAT-SCRN
CALL L064E ; routine EXPT-STRM
CALL L05B1 ; routine SEPARATOR
JR NZ,L04B2 ; forward to OREPORT-1
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
;; CAT-SCRN
L04A6: CALL L061E ; routine EXPT-NUM
CALL L05B7 ; routine ST-END
CALL L066D ; routine CHECK-M-2
JP L1E70 ; jump forward to CAT-RUN
;; OREPORT-1
L04B2: RST 20H ; sh_err
DEFB $00 ; 'Nonsense in BASIC'
; -----------------------------------
; THE 'FORMAT COMMAND SYNTAX' ROUTINE
; -----------------------------------
;
;; FRTM-SYN
L04B4: CALL L05F2 ; routine EXPT-SPEC
CALL L05B1 ; routine SEPARATOR
JR NZ,L04BF ; forward to NO-FOR-M
CALL L062F ; routine EXPT-NAME
;; NO-FOR-M
L04BF: CALL L05B7 ; routine ST-END
LD A,($5CD9) ; sv D_STR1
CP $54
JR Z,L04CD ; forward to FOR-B-T
CP $42
JR NZ,L04D3 ; forward to NOT-FOR-B
;; FOR-B-T
L04CD: CALL L06B0 ; routine TEST-BAUD
JP L0AC9 ; jump forward to SET-BAUD
;; NOT-FOR-B
L04D3: CP $4E
JR NZ,L04E7 ; forward to FOR-M
CALL L068F ; routine TEST-STAT
LD A,($5CD6) ; sv D_STR1
AND A
JP Z,L069F ; jump forward to NREPORT-6
LD ($5CC5),A ; sv NTSTAT
JP L05C1 ; jump forward to END1
;; FOR-M
L04E7: CALL L0685 ; routine TEST-MNAM
JP L1E75 ; jump forward to IFOR-RUN
; ---------------------------------
; THE 'OPEN COMMAND SYNTAX' ROUTINE
; ---------------------------------
;
;; OPEN-SYN
L04ED: CALL L064E ; routine EXPT-STRM
CALL L05B1 ; routine SEPARATOR
JR NZ,L04B2 ; back to OREPORT-1
CALL L05F2 ; routine EXPT-SPEC
CALL L05B1 ; routine SEPARATOR
JR NZ,L0500 ; forward to NOT-OP-M
CALL L062F ; routine EXPT-NAME
;; NOT-OP-M
L0500: CALL L05B7 ; routine ST-END
LD A,($5CD8) ; sv D_STR1
RST 10H ; CALBAS
DEFW $1727 ; main STR-DATA1
LD HL,$0011
AND A
SBC HL,BC
JR C,L052F ; forward to NREPORT-C
LD A,($5CD9) ; sv D_STR1
CP $54
JR Z,L051C ; forward to OPEN-RS
CP $42
JR NZ,L051F ; forward to NOT-OP-B
;; OPEN-RS
L051C: JP L0B47 ; jump forward to OP-RSCHAN
;; NOT-OP-B
L051F: CP $4E
JR NZ,L0529 ; forward to OP-M-C
CALL L068F ; routine TEST-STAT
JP L0EA3 ; jump forward to OPEN-N-ST
;; OP-M-C
L0529: CALL L0685 ; routine TEST-MNAM
JP L1E7A ; jump forward to OP-RUN
;; NREPORT-C
L052F: RST 20H ; sh_err
DEFB $0B ; 'Stream already open'
; ----------------------------------
; THE 'ERASE COMMAND SYNTAX' ROUTINE
; ----------------------------------
;
;; ERASE-SYN
L0531: CALL L06A3 ; routine EXOT-EXPR
CALL L05B7 ; routine ST-END
CALL L0685 ; routine TEST-MNAM
JP L1E66 ; jump forward to ERASE-RUN
; ---------------------------------
; THE 'MOVE COMMAND SYNTAX' ROUTINE
; ---------------------------------
;
;; MOVE-SYN
L053D: CALL L06B9 ; routine EXPT-EXP1
CALL L059F ; routine EX-D-STR
RST 10H ; CALBAS
DEFW $0018 ; main GET-CHAR
CP $CC
JR NZ,L0584 ; forward to NONSENSE
CALL L06B9 ; routine EXPT-EXP1
CALL L059F ; routine EX-D-STR
RST 10H ; CALBAS
DEFW $0018 ; main GET-CHAR
CALL L05B7 ; routine ST-END
JP L1E6B ; jump forward to MOVE-RUN
; --------------------------
; THE 'CLS# COMMAND' ROUTINE
; --------------------------
;
;; CLS#-SYN
L0559: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CP $23
JR NZ,L0584 ; forward to NONSENSE
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CALL L05B7 ; routine ST-END
LD HL,L0038
LD ($5C8D),HL ; sv ATTR_P
LD ($5C8F),HL ; sv ATTR_T
LD (IY+$0E),L ; sv BORDCR
LD (IY+$57),H ; sv P_FLAG
LD A,$07
OUT ($FE),A
RST 10H ; CALBAS
DEFW $0D6B ; main CLS
JP L05C1 ; jump forward to END1
; ----------------------------
; THE 'CLEAR# COMMAND' ROUTINE
; ----------------------------
;
;; CLR#-SYN
L057F: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CP $23
;; NONSENSE
L0584: JP NZ,L04B2 ; jump to OREPORT-1
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CALL L05B7 ; routine ST-END
XOR A
;; ALL-STRMS
L058E: PUSH AF
SET 1,(IY+$7C) ; sv FLAGS_3
CALL L1718 ; routine CLOSE
POP AF
INC A
CP $10
JR C,L058E ; back to ALL-STRMS
JP L05C1 ; jump forward to END1
; --------------------------------------
; THE 'EXCHANGE FILE SPECIFIERS' ROUTINE
; --------------------------------------
;
;; EX-D-STR
L059F: LD HL,$5CD6 ; sv D_STR1
LD DE,$5CDE ; sv D_STR2
LD B,$08
;; ALL-BYTES
L05A7: LD A,(DE)
LD C,(HL)
LD (HL),A
LD A,C
LD (DE),A
INC HL
INC DE
DJNZ L05A7 ; back to ALL-BYTES
RET
; -----------------------
; THE 'SEPARATOR' ROUTINE
; -----------------------
;
;; SEPARATOR
L05B1: CP $2C ; the ',' character
RET Z
CP $3B ; the ';' character
RET
; ------------------------------
; THE 'END OF STATEMENT' ROUTINE
; ------------------------------
;
;; ST-END
L05B7: CP $0D
JR Z,L05BF ; forward to TEST-RET
CP $3A
JR NZ,L0584 ; back to NONSENSE
;; TEST-RET
L05BF: RST 18H
RET NZ
; --------------------------------------------
; THE 'RETURN TO THE MAIN INTERPRETER' ROUTINE
; --------------------------------------------
;
;; END1
L05C1: LD SP,($5C3D) ; sv
LD (IY+$00),$FF ; sv ERR_NR
LD HL,$1BF4
RST 18H
JR Z,L05E0 ; forward to RETAD-SYN
LD A,$7F
IN A,($FE)
RRA
JR C,L05DD ; forward to RETAD-RUN
LD A,$FE
IN A,($FE)
RRA
JR NC,L05E2 ; forward to BREAK-PGM
;; RETAD-RUN
L05DD: LD HL,$1B7D
;; RETAD-SYN
L05E0: PUSH HL
RST 00H
;; BREAK-PGM
L05E2: LD (IY+$00),$14 ; sv ERR_NR
RST 28H ; romerr
; ----------------------------------------
; THE 'EVALUATE STRING EXPRESSION' ROUTINE
; ----------------------------------------
;
;; EXPT-STR
L05E7: RST 10H ; CALBAS
DEFW $1C8C ; main EXPT-EXP
RST 18H
RET Z
PUSH AF
RST 10H ; CALBAS
DEFW $2BF1 ; main STK-FETCH
POP AF
RET
; -----------------------------------------
; THE 'EVALUATE CHANNEL EXPRESSION' ROUTINE
; -----------------------------------------
;
;; EXPT-SPEC
L05F2: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
;; EXP-SPEC2
L05F5: CALL L05E7 ; routine EXPT-STR
JR Z,L060C ; forward to TEST-NEXT
PUSH AF
LD A,C
DEC A
OR B
JR NZ,L062D ; forward to NREPORT-3
LD A,(DE)
RST 10H ; CALBAS
DEFW $2C8D ; main ALPHA
JR NC,L062D ; forward to NREPORT-3
AND $DF
LD ($5CD9),A ; sv D_STR1
POP AF
;; TEST-NEXT
L060C: CP $0D
RET Z
CP $3A
RET Z
CP $A5
RET NC
CALL L05B1 ; routine SEPARATOR
JP NZ,L04B2 ; jump to OREPORT-1
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
; -----------------------------------------
; THE 'EVALUATE NUMERIC EXPRESSION' ROUTINE
; -----------------------------------------
;
;; EXPT-NUM
L061E: RST 10H ; CALBAS
DEFW $1C82 ; main EXPT-1NUM
RST 18H
RET Z
PUSH AF
RST 10H ; CALBAS
DEFW $1E99 ; main FIND-INT2
LD ($5CD6),BC ; sv D_STR1
POP AF
RET
;; NREPORT-3
L062D: RST 20H ; sh_err
DEFB $02 ; 'Invalid device expression'
; -------------------------------
; THE 'EVALUATE FILENAME' ROUTINE
; -------------------------------
;
;; EXPT-NAME
L062F: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CALL L05E7 ; routine EXPT-STR
RET Z
PUSH AF
LD A,C
OR B
JR Z,L064C ; forward to NREPORT-4
LD HL,$000A
SBC HL,BC
JR C,L064C ; forward to NREPORT-4
LD ($5CDA),BC ; sv D_STR1
LD ($5CDC),DE ; sv D_STR1
POP AF
RET
;; NREPORT-4
L064C: RST 20H ; sh_err
DEFB $03 ;
; ------------------------------------
; THE 'EVALUATE STREAM NUMBER' ROUTINE
; ------------------------------------
;
;; EXPT-STRM
L064E: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
RST 10H ; CALBAS
DEFW $1C82 ; main EXPT-1NUM
RST 18H
RET Z
PUSH AF
RST 10H ; CALBAS
DEFW $1E94 ; main FIND-INT1
CP $10
JR NC,$0663
LD ($5CD8),A ; sv D_STR1
POP AF
RET
RST 20H ; sh_err
DEFB $01 ;
; ----------------------------------
; THE 'CHECK "M" PARAMETERS' ROUTINE
; ----------------------------------
;
;; CHECK-M
L0665: LD A,($5CD9) ; sv D_STR1
CP $4D
JP NZ,L062D ; jump to NREPORT-3
;; CHECK-M-2
L066D: LD DE,($5CD6) ; sv D_STR1
LD A,E
OR D
JR Z,L0681 ; forward to NREPORT-5
INC DE
LD A,E
OR D
JR Z,L0683 ; forward to NREPORT-9
DEC DE
LD HL,L0008
SBC HL,DE
RET NC
;; NREPORT-5
L0681: RST 20H ; sh_err
DEFB $04
;; NREPORT-9
L0683: RST 20H ; sh_err
DEFB $08
; -----------------------------------------------
; THE 'CHECK "M" PARAMETERS AND FILENAME' ROUTINE
; -----------------------------------------------
;
;; TEST-MNAM
L0685: CALL L0665 ; routine CHECK-M
LD A,($5CDB) ; sv D_STR1
AND A
RET Z
RST 20H ; sh_err
DEFB $06
; ----------------------------------
; THE 'CHECK STATION NUMBER' ROUTINE
; ----------------------------------
;
;; TEST-STAT
L068F: LD DE,($5CD6) ; sv D_STR1
INC DE
LD A,E
OR D
JR Z,L06A1 ; forward to NREPORT-8
DEC DE
LD HL,L0040
SBC HL,DE
RET NC
;; NREPORT-6
L069F: RST 20H ; sh_err
DEFB $05
;; NREPORT-8
L06A1: RST 20H ; sh_err
DEFB $07
; -----------------------------------
; THE 'EVALUATE "X";N;"NAME"' ROUTINE
; -----------------------------------
;
;; EXOT-EXPR
L06A3: CALL L05F2 ; routine EXPT-SPEC
CALL L05B1 ; routine SEPARATOR
JP NZ,L04B2 ; jump to OREPORT-1
CALL L062F ; routine EXPT-NAME
RET
; -----------------------------
; THE 'CHECK BAUD RATE' ROUTINE
; -----------------------------
;
;; TEST-BAUD
L06B0: LD HL,($5CD6) ; sv D_STR1
INC HL
LD A,L
OR H
RET NZ
RST 20H ; sh_err
DEFB $09
; -------------------------------------------
; THE 'EVALUATE STREAM OR EXPRESSION' ROUTINE
; -------------------------------------------
;
;; EXPT-EXP1
L06B9: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CP $23
JP Z,L064E ; jump to EXPT-STRM
CALL L05F5 ; routine EXP-SPEC2
CALL L05B1 ; routine SEPARATOR
JR NZ,L06CC ; forward to ENDHERE
CALL L062F ; routine EXPT-NAME
;; ENDHERE
L06CC: RST 18H
RET Z
LD A,($5CD9) ; sv D_STR1
CP $54
RET Z
CP $42
RET Z
CP $4E
JP Z,L068F ; jump to TEST-STAT
JP L0685 ; jump to TEST-MNAM
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
DEFB $FF
; --------------------
; THE 'UNPAGE' ROUTINE
; --------------------
;
;; UNPAGE
L0700: RET
; ---------------------------------
; THE 'EVALUATE PARAMETERS' ROUTINE
; ---------------------------------
;
;; EXPT-PRMS
L0701: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CP $2A
JR NZ,L073C ; forward to OREP-1-2
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CALL L05F5 ; routine EXP-SPEC2
CALL L05B1 ; routine SEPARATOR
JR NZ,L0716 ; forward to NO-NAME
CALL L062F ; routine EXPT-NAME
;; NO-NAME
L0716: PUSH AF
LD A,($5CD9) ; sv D_STR1
CP $4E
JR NZ,L0722 ; forward to NOT-NET
SET 3,(IY+$7C) ; sv FLAGS_3
;; NOT-NET
L0722: POP AF
CP $0D
JR Z,L0750 ; forward to END-EXPT
CP $3A
JR Z,L0750 ; forward to END-EXPT
CP $AA
JR Z,L0771 ; forward to SCREEN$
CP $AF
JR Z,L0789 ; forward to CODE
CP $CA
JR Z,L073E ; forward to LINE
CP $E4
JP Z,L07D2 ; jump forward to DATA
;; OREP-1-2
L073C: RST 20H ; sh_err
DEFB $00
;; LINE
L073E: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
RST 10H ; CALBAS
DEFW $1C82 ; main EXPT-1NUM
CALL L05B7 ; routine ST-END
RST 10H ; CALBAS
DEFW $1E99 ; main FIND-INT2
LD ($5CED),BC ; sv HD_11
JR L0753 ; forward to PROG
;; END-EXPT
L0750: CALL L05B7 ; routine ST-END
;; PROG
L0753: XOR A
LD ($5CE6),A ; sv HD_00
LD HL,($5C59) ; sv E_LINE
LD DE,($5C53) ; sv PROG
LD ($5CE9),DE ; sv HD_0D
SCF
SBC HL,DE
LD ($5CE7),HL ; sv HD_0B
LD HL,($5C4B) ; sv VARS
SBC HL,DE
LD ($5CEB),HL ; sv HD_0F
RET
;; SCREEN$
L0771: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CALL L05B7 ; routine ST-END
LD HL,$1B00
LD ($5CE7),HL ; sv HD_0B
LD HL,$4000
LD ($5CE9),HL ; sv HD_0D
LD A,$03
LD ($5CE6),A ; sv HD_00
RET
;; CODE
L0789: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CP $0D
JR Z,L079A ; forward to DEFLT-0
CP $3A
JR NZ,L079F ; forward to PAR-1
BIT 5,(IY+$7C) ; sv FLAGS_3
JR NZ,L073C ; back to OREP-1-2
;; DEFLT-0
L079A: RST 10H ; CALBAS
DEFW $1CE6 ; main USE-ZERO
JR L07A7 ; forward to TEST-SAVE
;; PAR-1
L079F: RST 10H ; CALBAS
DEFW $1C82 ; main EXPT-1NUM
CALL L05B1 ; routine SEPARATOR
JR Z,L07B2 ; forward to PAR-2
;; TEST-SAVE
L07A7: BIT 5,(IY+$7C) ; sv FLAGS_3
JR NZ,L073C ; back to OREP-1-2
RST 10H ; CALBAS
DEFW $1CE6 ; main USE-ZERO
JR L07B8 ; forward to END-CODE
;; PAR-2
L07B2: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
RST 10H ; CALBAS
DEFW $1C82 ; main EXPT-1NUM
;; END-CODE
L07B8: RST 10H ; CALBAS
DEFW $0018 ; main GET-CHAR
CALL L05B7 ; routine ST-END
RST 10H ; CALBAS
DEFW $1E99 ; main FIND-INT2
LD ($5CE7),BC ; sv HD_0B
RST 10H ; CALBAS
DEFW $1E99 ; main FIND-INT2
LD ($5CE9),BC ; sv HD_0D
LD A,$03
LD ($5CE6),A ; sv HD_00
RET
;; DATA
L07D2: BIT 6,(IY+$7C) ; sv FLAGS_3
JR Z,L07DA ; forward to NO-M-ARR
RST 20H ; sh_err
DEFB $14
;; NO-M-ARR
L07DA: RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
RST 10H ; CALBAS
DEFW $28B2 ; main LOOK-VARS
SET 7,C
JR NC,L07F2 ; forward to EXISTING
LD HL,L0000
BIT 4,(IY+$7C) ; sv FLAGS_3
JR NZ,L080E ; forward to LD-DATA
LD (IY+$00),$01 ; sv ERR_NR
RST 28H ; romerr
;; EXISTING
L07F2: JR Z,L07F6 ; forward to G-TYPE
;; NONS-BSC
L07F4: RST 20H ; sh_err
DEFB $00
;; G-TYPE
L07F6: RST 18H
JR Z,L081C ; forward to END-DATA
BIT 5,(IY+$7C) ; sv FLAGS_3
JR Z,L0803 ; forward to VR-DATA
BIT 7,(HL)
JR Z,L07F4 ; back to NONS-BSC
;; VR-DATA
L0803: INC HL
LD A,(HL)
LD ($5CE7),A ; sv HD_0B
INC HL
LD A,(HL)
LD ($5CE8),A ; sv HD_0B_hi
INC HL
;; LD-DATA
L080E: LD A,C
LD ($5CEB),A ; sv HD_0F
LD A,$01
BIT 6,C
JR Z,L0819 ; forward to NUM-ARR
INC A
;; NUM-ARR
L0819: LD ($5CE6),A ; sv HD_00
;; END-DATA
L081C: EX DE,HL
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CP $29
JR NZ,L07F4 ; back to NONS-BSC
RST 10H ; CALBAS
DEFW $0020 ; main NEXT-CHAR
CALL L05B7 ; routine ST-END
LD ($5CE9),DE ; sv HD_0D
RET
; ---------------------------------
; THE 'SAVE COMMAND SYNTAX' ROUTINE
; ---------------------------------
;
;; SAVE-SYN
L082F: SET 5,(IY+$7C) ; sv FLAGS_3
CALL L0701 ; routine EXPT-PRMS
LD A,($5CD9) ; sv D_STR1
CP $42
JR Z,L084F ; forward to SA-HEADER
CP $4E
JR NZ,L0849 ; forward to SAVE-M
CALL L068F ; routine TEST-STAT
CALL L0EA9 ; routine OP-TEMP-N
JR L084F ; forward to SA-HEADER
;; SAVE-M
L0849: CALL L0685 ; routine TEST-MNAM
JP L1E7F ; jump forward to SAVE-RUN
;; SA-HEADER
L084F: LD B,$09
LD HL,$5CE6 ; sv HD_00
;; HD-LOOP
L0854: CALL L0880 ; routine SA-BYTE
INC HL
DJNZ L0854 ; back to HD-LOOP
LD HL,($5CE9) ; sv HD_0D
BIT 3,(IY+$7C) ; sv FLAGS_3
JR Z,L086E ; forward to SA-BLOCK
LD A,($5CE6) ; sv HD_00
CP $03
JR NC,L086E ; forward to SA-BLOCK
LD DE,$0114
ADD HL,DE
;; SA-BLOCK
L086E: LD BC,($5CE7) ; sv HD_0B
;; SA-BLK-LP
L0872: LD A,C
OR B
JR Z,L087D ; forward to S-BLK-END
CALL L0880 ; routine SA-BYTE
DEC BC
INC HL
JR L0872 ; back to SA-BLK-LP
;; S-BLK-END
L087D: JP L0988 ; jump forward to TST-MR-M
; --------------------------------------------------
; THE 'SAVE A BYTE TO NETWORK OR RS232 LINK' ROUTINE
; --------------------------------------------------
;
;; SA-BYTE
L0880: PUSH HL
PUSH BC
BIT 3,(IY+$7C) ; sv FLAGS_3
LD A,(HL)
JR NZ,L088E ; forward to SA-NET
CALL L0C5A ; routine BCHAN-OUT
JR L0891 ; forward to SA-B-END
;; SA-NET
L088E: CALL L0D6C ; routine NCHAN-OUT
;; SA-B-END
L0891: POP BC
POP HL
RET
; ---------------------------------
; THE 'LOAD COMMAND SYNTAX' ROUTINE
; ---------------------------------
;
;; LOAD-SYN
L0894: SET 4,(IY+$7C) ; sv FLAGS_3
CALL L0701 ; routine EXPT-PRMS
JP L08AF ; jump forward to LD-VF-MR
; -----------------------------------
; THE 'VERIFY COMMAND SYNTAX' ROUTINE
; -----------------------------------
;
;; VERIF-SYN
L089E: SET 7,(IY+$7C) ; sv FLAGS_3
CALL L0701 ; routine EXPT-PRMS
JP L08AF ; jump forward to LD-VF-MR
; ----------------------------------
; THE 'MERGE COMMAND SYNTAX' ROUTINE
; ----------------------------------
;
;; MRG-SYN
L08A8: SET 6,(IY+$7C) ; sv FLAGS_3
CALL L0701 ; routine EXPT-PRMS
; ----------------------------------------
; THE 'LOAD-VERIFY-MERGE COMMANDS' ROUTINE
; ----------------------------------------
;
;; LD-VF-MR
L08AF: LD HL,$5CE6 ; sv HD_00
LD DE,$5CDE ; sv D_STR2
LD BC,$0007
LDIR
LD A,($5CD9) ; sv D_STR1
CP $4E
JR Z,L08CD ; forward to TS-L-NET
CP $42
JR Z,L08D3 ; forward to TS-L-RS
CALL L0685 ; routine TEST-MNAM
CALL L1580 ; routine F-M-HM
JR L08F2 ; forward to TEST-TYPE
;; TS-L-NET
L08CD: CALL L068F ; routine TEST-STAT
CALL L0EA9 ; routine OP-TEMP-N
;; TS-L-RS
L08D3: LD HL,$5CE6 ; sv HD_00
LD B,$09
;; LD-HEADER
L08D8: PUSH HL
PUSH BC
BIT 3,(IY+$7C) ; sv FLAGS_3
JR Z,L08E7 ; forward to LD-HD-RS
;; LD-HD-NET
L08E0: CALL L0D12 ; routine NCHAN-IN
JR NC,L08E0 ; back to LD-HD-NET
JR L08EC ; forward to LD-HDR-2
;; LD-HD-RS
L08E7: CALL L0B81 ; routine BCHAN-IN
JR NC,L08E7 ; back to LD-HD-RS
;; LD-HDR-2
L08EC: POP BC
POP HL
LD (HL),A
INC HL
DJNZ L08D8 ; back to LD-HEADER
;; TEST-TYPE
L08F2: LD A,($5CDE) ; sv D_STR2
LD B,A
LD A,($5CE6) ; sv HD_00
CP B
JR NZ,L0902 ; forward to NREPORT-N
CP $03
JR Z,L0911 ; forward to T-H-CODE
JR C,L0904 ; forward to TST-MERGE
;; NREPORT-N
L0902: RST 20H ; sh_err
DEFB $16
;; TST-MERGE
L0904: BIT 6,(IY+$7C) ; sv FLAGS_3
JR NZ,L0967 ; forward to MERGE-BLK
BIT 7,(IY+$7C) ; sv FLAGS_3
JP Z,L09A3 ; jump to LD-PR-AR
;; T-H-CODE
L0911: BIT 6,(IY+$7C) ; sv FLAGS_3
JR Z,L0919 ; forward to LD-BLOCK
RST 20H ; sh_err
DEFB $14
;; LD-BLOCK
L0919: LD HL,($5CDF) ; sv D_STR2
LD DE,($5CE7) ; sv HD_0B
LD A,H
OR L
JR Z,L0932 ; forward to LD-BLK-2
SBC HL,DE
JR NC,L0932 ; forward to LD-BLK-2
BIT 4,(IY+$7C) ; sv FLAGS_3
JR Z,L0930 ; forward to NREPORT-L
RST 20H ; sh_err
DEFB $13
;; NREPORT-L
L0930: RST 20H ; sh_err
DEFB $15
;; LD-BLK-2
L0932: LD HL,($5CE1) ; sv D_STR2
LD A,(IX+$04)
CP $CD
JR NZ,L0941 ; forward to LD-BLK-3
LD HL,($5CE4) ; sv D_STR2
JR L0952 ; forward to LD-BLK-4
;; LD-BLK-3
L0941: BIT 3,(IY+$7C) ; sv FLAGS_3
JR Z,L0952 ; forward to LD-BLK-4
LD A,($5CE6) ; sv HD_00
CP $03
JR Z,L0952 ; forward to LD-BLK-4
LD BC,$0114
ADD HL,BC
;; LD-BLK-4
L0952: LD A,H
OR L
JR NZ,L0959 ; forward to LD-BLK-5
LD HL,($5CE9) ; sv HD_0D
;; LD-BLK-5
L0959: LD A,($5CE6) ; sv HD_00
AND A
JR NZ,L0962 ; forward to LD-NO-PGM
LD HL,($5C53) ; sv PROG
;; LD-NO-PGM
L0962: CALL L0A5C ; routine LV-ANY
JR L0988 ; forward to TST-MR-M
;; MERGE-BLK
L0967: LD A,($5CEE) ; sv HD_11_hi
AND $C0
JR NZ,L0973 ; forward to NO-AUTOST
CALL L17B9 ; routine RCL-T-CH
RST 20H ; sh_err
DEFB $14
;; NO-AUTOST
L0973: LD BC,($5CE7) ; sv HD_0B
PUSH BC
INC BC
RST 10H ; CALBAS
DEFW $0030 ; main BC-SPACES
LD (HL),$80
EX DE,HL
POP DE
PUSH HL
CALL L0A5C ; routine LV-ANY
POP HL
RST 10H ; CALBAS
DEFW $08CE ; main ME-CTRLX
;; TST-MR-M
L0988: LD A,(IX+$04)
CP $CD
JR NZ,L0994 ; forward to TST-MR-N
CALL L12A9 ; routine CLOSE-M2
JR L09A0 ; forward to MERGE-END
;; TST-MR-N
L0994: BIT 3,(IY+$7C) ; sv FLAGS_3
JR Z,L09A0 ; forward to MERGE-END
CALL L0EF5 ; routine SEND-NEOF
CALL L17B9 ; routine RCL-T-CH
;; MERGE-END
L09A0: JP L05C1 ; jump to END1
;; LD-PR-AR
L09A3: LD DE,($5CE7) ; sv HD_0B
LD HL,($5CE1) ; sv D_STR2
PUSH HL
LD A,H
OR L
JR NZ,L09B5 ; forward to LD-PROG
INC DE
INC DE
INC DE
EX DE,HL
JR L09BE ; forward to TST-SPACE
;; LD-PROG
L09B5: LD HL,($5CDF) ; sv D_STR2
EX DE,HL
SCF
SBC HL,DE
JR C,L09C7 ; forward to TST-TYPE
;; TST-SPACE
L09BE: LD DE,$0005
ADD HL,DE
LD B,H
LD C,L
RST 10H ; CALBAS
DEFW $1F05 ; main TEST-ROOM
;; TST-TYPE
L09C7: POP HL
LD A,($5CE6) ; sv HD_00
AND A
JR Z,L0A15 ; forward to SET-PROG
LD A,H
OR L
JR Z,L09F3 ; forward to CRT-NEW
LD A,(IX+$04)
CP $CD
JR NZ,L09DE ; forward to T-LD-NET
LD HL,($5CE4) ; sv D_STR2
JR L09E8 ; forward to RCLM-OLD
;; T-LD-NET
L09DE: BIT 3,(IY+$7C) ; sv FLAGS_3
JR Z,L09E8 ; forward to RCLM-OLD
LD DE,$0114
ADD HL,DE
;; RCLM-OLD
L09E8: DEC HL
LD B,(HL)
DEC HL
LD C,(HL)
DEC HL
INC BC
INC BC
INC BC
RST 10H ; CALBAS
DEFW $19E8 ; main RECLAIM-2
;; CRT-NEW
L09F3: LD HL,($5C59) ; sv E_LINE
DEC HL
LD BC,($5CE7) ; sv HD_0B
PUSH BC
INC BC
INC BC
INC BC
LD A,($5CE3) ; sv D_STR2
PUSH AF
RST 10H ; CALBAS
DEFW $1655 ; main MAKE-ROOM
INC HL
POP AF
LD (HL),A
POP DE
INC HL
LD (HL),E
INC HL
LD (HL),D
INC HL
;; END-LD-PR
L0A0F: CALL L0A5C ; routine LV-ANY
JP L0988 ; jump to TST-MR-M
;; SET-PROG
L0A15: RES 1,(IY+$7C) ; sv FLAGS_3
LD DE,($5C53) ; sv PROG
LD HL,($5C59) ; sv E_LINE
DEC HL
RST 10H ; CALBAS
DEFW $19E5 ; main RECLAIM-1
LD BC,($5CE7) ; sv HD_0B
LD HL,($5C53) ; sv PROG
RST 10H ; CALBAS
DEFW $1655 ; main MAKE-ROOM
INC HL
LD BC,($5CEB) ; sv HD_0F
ADD HL,BC
LD ($5C4B),HL ; sv VARS
LD A,($5CEE) ; sv HD_11_hi
LD H,A
AND $C0
JR NZ,L0A4E ; forward to NO-AUTO
SET 1,(IY+$7C) ; sv FLAGS_3
LD A,($5CED) ; sv HD_11
LD L,A
LD ($5C42),HL ; sv NEWPPC
LD (IY+$0A),$00 ; sv NSPPC
;; NO-AUTO
L0A4E: LD HL,($5C53) ; sv PROG
LD DE,($5CE7) ; sv HD_0B
DEC HL
LD ($5C57),HL ; sv DATADD
INC HL
JR L0A0F ; back to END-LD-PR
; ----------------------------
; THE 'LOAD OR VERIFY' ROUTINE
; ----------------------------
;
;; LV-ANY
L0A5C: LD A,D
OR E
RET Z
LD A,(IX+$04)
CP $CD
JR NZ,L0A6A ; forward to LV-BN
CALL L15A9 ; routine LV-MCH
RET
;; LV-BN
L0A6A: PUSH HL
PUSH DE
BIT 3,(IY+$7C) ; sv FLAGS_3
JR Z,L0A79 ; forward to LV-B
;; LV-N
L0A72: CALL L0D12 ; routine NCHAN-IN
JR NC,L0A72 ; back to LV-N
JR L0A7E ; forward to LV-BN-E
;; LV-B
L0A79: CALL L0B81 ; routine BCHAN-IN
JR NC,L0A79 ; back to LV-B
;; LV-BN-E
L0A7E: POP DE
DEC DE
POP HL
BIT 7,(IY+$7C) ; sv FLAGS_3
JR NZ,L0A8A ; forward to VR-BN
LD (HL),A
JR L0A8F ; forward to LVBN-END
;; VR-BN
L0A8A: CP (HL)
JR Z,L0A8F ; forward to LVBN-END
RST 20H ; sh_err
DEFB $15
;; LVBN-END
L0A8F: INC HL
LD A,E
OR D
JR NZ,L0A6A ; back to LV-BN
RET
; --------------------------------
; THE 'LOAD "RUN" PROGRAM' ROUTINE
; --------------------------------
;
;; LOAD-RUN
L0A95: LD BC,$0001
LD ($5CD6),BC ; sv D_STR1
LD BC,$0003
LD ($5CDA),BC ; sv D_STR1
LD BC,$0AC6
LD ($5CDC),BC ; sv D_STR1
SET 4,(IY+$7C) ; sv FLAGS_3
CALL L0753 ; routine PROG
LD HL,$5CE6 ; sv HD_00
LD DE,$5CDE ; sv D_STR2
LD BC,$0009
LDIR
SET 7,(IY+$0A) ; sv NSPPC
CALL L1580 ; routine F-M-HM
JP L08F2 ; jump to TEST-TYPE
LD (HL),D
LD (HL),L
LD L,(HL)
; -----------------------------------------
; THE 'SET "BAUD"- SYSTEM VARIABLE' ROUTINE
; -----------------------------------------
;
;; SET-BAUD
L0AC9: LD BC,($5CD6) ; sv D_STR1
LD HL,$0AEF
;; NXT-ENTRY
L0AD0: LD E,(HL)
INC HL
LD D,(HL)
INC HL
EX DE,HL
LD A,H
CP $4B
JR NC,L0AE4 ; forward to END-SET
AND A
SBC HL,BC
JR NC,L0AE4 ; forward to END-SET
EX DE,HL
INC HL
INC HL
JR L0AD0 ; back to NXT-ENTRY
;; END-SET
L0AE4: EX DE,HL
LD E,(HL)
INC HL
LD D,(HL)
LD ($5CC3),DE ; sv BAUD
JP L05C1 ; jump to END1
; ------------------------------------
; THE 'RS232 TIMING CONSTANTS' ROUTINE
; ------------------------------------
;
;;
L0AEF: DEFW $0032 ;
DEFW $0A82 ;
DEFW $006E ;
DEFW $04C5 ;
DEFW $012C ;
DEFW $01BE ;
DEFW $0258 ;
DEFW $00DE ;
DEFW $04B0 ;
DEFW $006E ;
DEFW $0960 ;
DEFW $0036 ;
DEFW $12C0 ;
DEFW $001A ;
DEFW $2580 ;
DEFW $000C ;
DEFW $4B00 ;
DEFW $0005 ;
; ----------------------------------------------
; THE 'OPEN RS232 CHANNEL IN CHANS AREA' ROUTINE
; ----------------------------------------------
;
;; OP-RS-CH
L0B13: LD HL,($5C53) ; sv PROG
DEC HL
LD BC,$000B
PUSH BC
RST 10H ; CALBAS
DEFW $1655 ; main MAKE-ROOM
POP BC
PUSH DE
CALL L1691 ; routine REST-N-AD
POP DE
LD HL,$0B6E
LD BC,$000B
LDDR
INC DE
LD A,($5CD9) ; sv D_STR1
CP $42
RET NZ
PUSH DE
LD HL,$0005
ADD HL,DE
LD DE,L0C5A
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,$0B75
LD (HL),E
INC HL
LD (HL),D
POP DE
RET
; ----------------------------------------
; THE 'ATTACH CHANNEL TO A STREAM' ROUTINE
; ----------------------------------------
;
;; OP-RSCHAN
L0B47: CALL L0B13 ; routine OP-RS-CH
;; OP-STREAM
L0B4A: LD HL,($5C4F) ; sv CHANS
DEC HL
EX DE,HL
AND A
SBC HL,DE
EX DE,HL
LD HL,$5C16 ; sv STRMS_00
LD A,($5CD8) ; sv D_STR1
RLCA
LD C,A
LD B,$00
ADD HL,BC
LD (HL),E
INC HL
LD (HL),D
JP L05C1 ; jump to END1
; ------------------------------
; THE '"T" CHANNEL DATA' ROUTINE
; ------------------------------
;
;;
L0B64: DEFW $0008 ; main ERROR-1
DEFW $0008 ; main ERROR-1
DEFB $54
DEFW $0C3C ;
DEFW $0B6F ;
DEFW $000B ;
; -------------------------------
; THE '"T" CHANNEL INPUT' ROUTINE
; -------------------------------
;
;; T-INPUT
L0B6F: LD HL,$0B7B
JP L0CBD ; jump to CALL-INP
; -------------------------------
; THE '"B" CHANNEL INPUT' ROUTINE
; -------------------------------
;
;; B-INPUT
L0B75: LD HL,L0B81
JP L0CBD ; jump to CALL-INP
; ---------------------------------------
; THE '"T" CHANNEL INPUT SERVICE' ROUTINE
; ---------------------------------------
;
;; TCHAN-IN
L0B7B: CALL L0B81 ; routine BCHAN-IN
RES 7,A
RET
; ---------------------------------------
; THE '"B" CHANNEL INPUT SERVICE' ROUTINE
; ---------------------------------------
;
;; BCHAN-IN
L0B81: LD HL,$5CC7 ; sv SER_FL
LD A,(HL)
AND A
JR Z,L0B8E ; forward to REC-BYTE
LD (HL),$00
INC HL
LD A,(HL)
SCF
RET
;; REC-BYTE
L0B8E: LD A,$7F
IN A,($FE)
RRCA
JR C,L0B9A ; forward to REC-PROC
LD (IY+$00),$14 ; sv ERR_NR
RST 28H ; romerr
;; REC-PROC
L0B9A: DI
LD A,($5CC6) ; sv IOBORD
OUT ($FE),A
LD DE,($5CC3) ; sv BAUD
LD HL,$0320
LD B,D
LD C,E
SRL B
RR C
LD A,$FE
OUT ($EF),A
;; READ-RS
L0BB1: IN A,($F7)
RLCA
JR NC,L0BC5 ; forward to TST-AGAIN
IN A,($F7)
RLCA
JR NC,L0BC5 ; forward to TST-AGAIN
IN A,($F7)
RLCA
JR NC,L0BC5 ; forward to TST-AGAIN
IN A,($F7)
RLCA
JR C,L0BD1 ; forward to START-BIT
;; TST-AGAIN
L0BC5: DEC HL
LD A,H
OR L
JR NZ,L0BB1 ; back to READ-RS
PUSH AF
LD A,$EE
OUT ($EF),A
JR L0BF0 ; forward to WAIT-1
;; START-BIT
L0BD1: LD H,B
LD L,C
LD B,$80
DEC HL
DEC HL
DEC HL
;; SERIAL-IN
L0BD8: ADD HL,DE
NOP
;; BD-DELAY
L0BDA: DEC HL
LD A,H
OR L
JR NZ,L0BDA ; back to BD-DELAY
ADD A,$00
IN A,($F7)
RLCA
RR B
JR NC,L0BD8 ; back to SERIAL-IN
LD A,$EE
OUT ($EF),A
LD A,B
CPL
SCF
PUSH AF
;; WAIT-1
L0BF0: ADD HL,DE
;; WAIT-2
L0BF1: DEC HL
LD A,L
OR H
JR NZ,L0BF1 ; back to WAIT-2
ADD HL,DE
ADD HL,DE
ADD HL,DE
;; T-FURTHER
L0BF9: DEC HL
LD A,L
OR H
JR Z,L0C36 ; forward to END-RS-IN
IN A,($F7)
RLCA
JR NC,L0BF9 ; back to T-FURTHER
IN A,($F7)
RLCA
JR NC,L0BF9 ; back to T-FURTHER
IN A,($F7)
RLCA
JR NC,L0BF9 ; back to T-FURTHER
IN A,($F7)
RLCA
JR NC,L0BF9 ; back to T-FURTHER
LD H,D
LD L,E
SRL H
RR L
LD B,$80
DEC HL
DEC HL
DEC HL
;; SER-IN-2
L0C1D: ADD HL,DE
NOP
;; BD-DELAY2
L0C1F: DEC HL
LD A,H
OR L
JR NZ,L0C1F ; back to BD-DELAY2
ADD A,$00
IN A,($F7)
RLCA
RR B
JR NC,L0C1D ; back to SER-IN-2
LD HL,$5CC7 ; sv SER_FL
LD (HL),$01
INC HL
LD A,B
CPL
LD (HL),A
;; END-RS-IN
L0C36: CALL L0CA9 ; routine BORD-REST
POP AF
EI
RET
; --------------------------------
; THE '"T" CHANNEL OUTPUT' ROUTINE
; --------------------------------
;
;; TCHAN-OUT
L0C3C: CP $A5
JR C,L0C46 ; forward to NOT-TOKEN
SUB $A5
RST 10H ; CALBAS
DEFW $0C10 ; main PO-TOKENS
RET
;; NOT-TOKEN
L0C46: CP $7F
JR C,L0C4C ; forward to NOT-GRAPH
LD A,$3F
;; NOT-GRAPH
L0C4C: CP $0D
JR NZ,L0C57 ; forward to NOT-CR
CALL L0C5A ; routine BCHAN-OUT
LD A,$0A
JR L0C5A ; forward to BCHAN-OUT
;; NOT-CR
L0C57: CP $20
RET C
; --------------------------------
; THE '"B" CHANNEL OUTPUT' ROUTINE
; --------------------------------
;
;; BCHAN-OUT
L0C5A: LD B,$0B
CPL
LD C,A
LD A,($5CC6) ; sv IOBORD
OUT ($FE),A
LD A,$EF
OUT ($EF),A
CPL
OUT ($F7),A
LD HL,($5CC3) ; sv BAUD
LD D,H
LD E,L
;; BD-DEL-1
L0C6F: DEC DE
LD A,D
OR E
JR NZ,L0C6F ; back to BD-DEL-1
;; TEST-DTR
L0C74: LD A,$7F
IN A,($FE)
OR $FE
IN A,($FE)
RRA
JP NC,L0CB4 ; jump to BRK-INOUT
IN A,($EF)
AND $08
JR Z,L0C74 ; back to TEST-DTR
SCF
DI
;; SER-OUT-L
L0C88: ADC A,$00
OUT ($F7),A
LD D,H
LD E,L
;; BD-DEL-2
L0C8E: DEC DE
LD A,D
OR E
JR NZ,L0C8E ; back to BD-DEL-2
DEC DE
XOR A
SRL C
DJNZ L0C88 ; back to SER-OUT-L
EI
LD A,$01
LD C,$EF
LD B,$EE
OUT ($F7),A
OUT (C),B
;; BD-DEL-3
L0CA4: DEC HL
LD A,L
OR H
JR NZ,L0CA4 ; back to BD-DEL-3
; -----------------------------------
; THE 'BORDER COLOUR RESTORE' ROUTINE
; -----------------------------------
;
;; BORD-REST
L0CA9: LD A,($5C48) ; sv BORDCR
AND $38
RRCA
RRCA
RRCA
OUT ($FE),A
RET
; --------------------------------------
; THE 'BREAK INTO I/O OPERATION' ROUTINE
; --------------------------------------
;
;; BRK-INOUT
L0CB4: EI
CALL L0CA9 ; routine BORD-REST
LD (IY+$00),$14 ; sv ERR_NR
RST 28H ; romerr
; ----------------------
; THE 'CALL-INP' ROUTINE
; ----------------------
;
;; CALL-INP
L0CBD: RES 3,(IY+$02) ; sv TV_FLAG
PUSH HL
LD HL,($5C3D) ; sv ERR_SP
LD E,(HL)
INC HL
LD D,(HL)
AND A
LD HL,$107F
SBC HL,DE
JR NZ,L0CFB ; forward to INKEY$
POP HL
LD SP,($5C3D) ; sv ERR_SP
POP DE
POP DE
LD ($5C3D),DE ; sv ERR_SP
;; IN-AGAIN
L0CDB: PUSH HL
LD DE,$0CE1
PUSH DE
JP (HL)
JR C,L0CED ; forward to ACC-CODE
JR Z,L0CEA ; forward to NO-READ
;; OREPORT-8
L0CE5: LD (IY+$00),$07 ; sv ERR_NR
RST 28H ; romerr
;; NO-READ
L0CEA: POP HL
JR L0CDB ; back to IN-AGAIN
;; ACC-CODE
L0CED: CP $0D
JR Z,L0CF7 ; forward to END-INPUT
RST 10H ; CALBAS
DEFW $0F85 ; main ADD-CHRX
POP HL
JR L0CDB ; back to IN-AGAIN
;; END-INPUT
L0CF7: POP HL
JP L0700 ; jump to UNPAGE
;; INKEY$
L0CFB: POP HL
LD DE,$0D01
PUSH DE
JP (HL)
RET C
RET Z
BIT 4,(IY+$7C) ; sv FLAGS_3
JR Z,L0CE5 ; back to OREPORT-8
OR $01
RET
; -------------------------------
; THE '"N" CHANNEL INPUT' ROUTINE
; -------------------------------
;
;; N-INPUT
L0D0C: LD HL,L0D12
JP L0CBD ; jump to CALL-INP
; ---------------------------------------
; THE '"N" CHANNEL INPUT SERVICE' ROUTINE
; ---------------------------------------
;
;; NCHAN-IN
L0D12: LD IX,($5C51) ; sv CURCHL
LD A,(IX+$10)
AND A
JR Z,L0D1E ; forward to TEST-BUFF
RST 20H ; sh_err
DEFB $0D
;; TEST-BUFF
L0D1E: LD A,(IX+$14)
AND A
JR Z,L0D38 ; forward to TST-N-EOF
LD E,(IX+$13)
DEC A
SUB E
JR C,L0D38 ; forward to TST-N-EOF
LD D,$00
INC E
LD (IX+$13),E
ADD IX,DE
LD A,(IX+$14)
SCF
RET
;; TST-N-EOF
L0D38: LD A,(IX+$0F)
AND A
JR Z,L0D3F ; forward to GET-N-BUF
RET
;; GET-N-BUF
L0D3F: LD A,($5CC6) ; sv IOBORD
OUT ($FE),A
DI
;; TRY-AGAIN
L0D45: CALL L0F1E ; routine WT-SCOUT
JR NC,L0D5F ; forward to TIME-OUT
CALL L0E18 ; routine GET-NBLK
JR NZ,L0D5F ; forward to TIME-OUT
EI
CALL L0CA9 ; routine BORD-REST
LD (IX+$13),$00
LD A,($5CD2) ; sv NTTYPE
LD (IX+$0F),A
JR L0D1E ; back to TEST-BUFF
;; TIME-OUT
L0D5F: LD A,(IX+$0B)
AND A
JR Z,L0D45 ; back to TRY-AGAIN
EI
CALL L0CA9 ; routine BORD-REST
AND $00
RET
; --------------------------------
; THE '"N" CHANNEL OUTPUT' ROUTINE
; --------------------------------
;
;; NCHAN-OUT
L0D6C: LD IX,($5C51) ; sv CURCHL
LD B,A
LD A,(IX+$14)
AND A
LD A,B
JR Z,L0D7A ; forward to TEST-OUT
RST 20H ; sh_err
DEFB $0C
;; TEST-OUT
L0D7A: LD E,(IX+$10)
INC E
JR NZ,L0D88 ; forward to ST-BF-LEN
PUSH AF
XOR A
CALL L0DAB ; routine S-PACK-1
POP AF
LD E,$01
;; ST-BF-LEN
L0D88: LD (IX+$10),E
LD D,$00
ADD IX,DE
LD (IX+$14),A
RET
; -----------------------
; THE 'OUT-BLK-N' ROUTINE
; -----------------------
;
;; OUT-BLK-N
L0D93: CALL L0FC5 ; routine OUTPAK
LD A,(IX+$0B)
AND A
RET Z
LD HL,$5CCD ; sv NTRESP
LD (HL),$00
LD E,$01
CALL L0F92 ; routine INPAK
RET NZ
LD A,($5CCD) ; sv NTRESP
DEC A
RET
; ----------------------
; THE 'S-PACK-1' ROUTINE
; ----------------------
;
;; S-PACK-1
L0DAB: CALL L0DB2 ; routine SEND-PACK
RET NZ
JP L0E0F ; jump to BR-DELAY
; -----------------------
; THE 'SEND-PACK' ROUTINE
; -----------------------
;
;; SEND-PACK
L0DB2: LD (IX+$0F),A
LD B,(IX+$10)
LD A,($5CC6) ; sv IOBORD
OUT ($FE),A
PUSH IX
POP DE
LD HL,$0015
ADD HL,DE
XOR A
;; CHKS1
L0DC5: ADD A,(HL)
INC HL
DJNZ L0DC5 ; back to CHKS1
LD (IX+$11),A
LD HL,$000B
ADD HL,DE
PUSH HL
LD B,$07
XOR A
;; CHKS2
L0DD4: ADD A,(HL)
INC HL
DJNZ L0DD4 ; back to CHKS2
LD (HL),A
DI
;; SENDSCOUT
L0DDA: CALL L0F61 ; routine SEND-SC
POP HL
PUSH HL
LD E,$08
CALL L0D93 ; routine OUT-BLK-N
JR NZ,L0DDA ; back to SENDSCOUT
PUSH IX
POP HL
LD DE,$0015
ADD HL,DE
LD E,(IX+$10)
LD A,E
AND A
JR Z,L0DFD ; forward to INC-BLKN
LD B,$20
;; SP-DL-1
L0DF6: DJNZ L0DF6 ; back to SP-DL-1
CALL L0D93 ; routine OUT-BLK-N
JR NZ,L0DDA ; back to SENDSCOUT
;; INC-BLKN
L0DFD: INC (IX+$0D)
JR NZ,L0E05 ; forward to SP-N-END
INC (IX+$0E)
;; SP-N-END
L0E05: POP HL
CALL L0CA9 ; routine BORD-REST
EI
LD A,(IX+$0B)
AND A
RET
; ----------------------
; THE 'BR-DELAY' ROUTINE
; ----------------------
;
;; BR-DELAY
L0E0F: LD DE,$1500
;; DL-LOOP
L0E12: DEC DE
LD A,E
OR D
JR NZ,L0E12 ; back to DL-LOOP
RET
; ---------------------------------------------
; THE 'HEADER AND DATA BLOCK RECEIVING' ROUTINE
; ---------------------------------------------
;
;; GET-NBLK
L0E18: LD HL,$5CCE ; sv NTDEST
LD E,$08
CALL L0F92 ; routine INPAK
RET NZ
LD HL,$5CCE ; sv NTDEST
XOR A
LD B,$07
;; CHKS3
L0E27: ADD A,(HL)
INC HL
DJNZ L0E27 ; back to CHKS3
CP (HL)
RET NZ
LD A,($5CCE) ; sv NTDEST
AND A
JR Z,L0E40 ; forward to BRCAST
CP (IX+$0C)
RET NZ
LD A,($5CCF) ; sv NTSRCE
CP (IX+$0B)
RET NZ
JR L0E45 ; forward to TEST-BLKN
;; BRCAST
L0E40: LD A,(IX+$0B)
OR A
RET NZ
;; TEST-BLKN
L0E45: LD HL,($5CD0) ; sv NTNUMB
LD E,(IX+$0D)
LD D,(IX+$0E)
AND A
SBC HL,DE
JR Z,L0E65 ; forward to GET-NBUFF
DEC HL
LD A,H
OR L
RET NZ
CALL L0E65 ; routine GET-NBUFF
; Note. The DEC instruction does not affect the carry flag.
DEC (IX+$0D)
JR NC,L0E62 ; forward, with no carry, to GETNB-END !!
DEC (IX+$0E)
;; GETNB-END
L0E62: OR $01
RET
;; GET-NBUFF
L0E65: LD A,($5CCE) ; sv NTDEST
OR A
CALL NZ,L0FBE ; routine SEND-RESP
LD A,($5CD3) ; sv NTLEN
AND A
JR Z,L0E93 ; forward to STORE-LEN
PUSH IX
POP HL
LD DE,$0015
ADD HL,DE
PUSH HL
LD E,A
CALL L0F92 ; routine INPAK
POP HL
RET NZ
LD A,($5CD3) ; sv NTLEN
LD B,A
LD A,($5CD4) ; sv NTDCS
;; CHKS4
L0E87: SUB (HL)
INC HL
DJNZ L0E87 ; back to CHKS4
RET NZ
LD A,($5CCE) ; sv NTDEST
AND A
CALL NZ,L0FBE ; routine SEND-RESP
;; STORE-LEN
L0E93: LD A,($5CD3) ; sv NTLEN
LD (IX+$14),A
INC (IX+$0D)
JR NZ,L0EA1 ; forward to GETNBF-END
INC (IX+$0E)
;; GETNBF-END
L0EA1: CP A
RET
; --------------------------------------
; THE 'OPEN "N" CHANNEL COMMAND' ROUTINE
; --------------------------------------
;
;; OPEN-N-ST
L0EA3: CALL L0EB5 ; routine OP-PERM-N
JP L0B4A ; jump to OP-STREAM
; ----------------------------------------
; THE 'OPEN TEMPORARY "N" CHANNEL' ROUTINE
; ----------------------------------------
;
;; OP-TEMP-N
L0EA9: CALL L0EB5 ; routine OP-PERM-N
LD IX,($5C51) ; sv CURCHL
SET 7,(IX+$04)
RET
; ----------------------------------------
; THE 'OPEN PERMANENT "N" CHANNEL' ROUTINE
; ----------------------------------------
;
;; OP-PERM-N
L0EB5: LD HL,($5C53) ; sv PROG
DEC HL
LD BC,$0114
PUSH BC
RST 10H ; CALBAS
DEFW $1655 ; main MAKE-ROOM
INC HL
POP BC
CALL L1691 ; routine REST-N-AD
LD ($5C51),HL ; sv CURCHL
EX DE,HL
LD HL,$0EEA
LD BC,$000B
LDIR
LD A,($5CD6) ; sv D_STR1
LD (DE),A
INC DE
LD A,($5CC5) ; sv NTSTAT
LD (DE),A
INC DE
XOR A
LD (DE),A
LD H,D
LD L,E
INC DE
LD BC,$0106
LDIR
LD DE,($5C51) ; sv CURCHL
RET
; ------------------------------
; THE '"N" CHANNEL DATA' ROUTINE
; ------------------------------
;
;;
L0EEA: DEFW $0008 ; main ERROR-1
DEFW $0008 ; main ERROR-1
DEFB $4E
DEFW $0D6C ;
DEFW $0D0C ;
DEFW $0114 ;
; ---------------------------------------
; THE 'SEND EOF BLOCK TO NETWORK' ROUTINE
; ---------------------------------------
;
;; SEND-NEOF
L0EF5 LD IX,($5C51) ; sv CURCHL
LD A,(IX+$10)
AND A
RET Z
LD A,$01
JP L0DAB ; jump to S-PACK-1
; ---------------------------
; THE 'NETWORK STATE' ROUTINE
; ---------------------------
;
;; NET-STATE
L0F03: LD A,R
OR $C0
LD B,A
CALL L0F0E ; routine CHK-REST
JR C,L0F03 ; back to NET-STATE
RET
; ---------------------------
; THE 'CHECK-RESTING' ROUTINE
; ---------------------------
;
;; CHK-REST
L0F0E: LD A,$7F
IN A,($FE)
RRCA
JR NC,L0F4D ; forward to E-READ-N
;; MAKESURE
L0F15: PUSH BC
POP BC
IN A,($F7)
RRCA
RET C
DJNZ L0F15 ; back to MAKESURE
RET
; ------------------------
; THE 'WAIT-SCOUT' ROUTINE
; ------------------------
;
;; WT-SCOUT
L0F1E: LD HL,$01C2
;; CLAIMED
L0F21: LD B,$80
CALL L0F0E ; routine CHK-REST
JR NC,L0F35 ; forward to WT-SYNC
DEC HL
DEC HL
LD A,H
OR L
JR NZ,L0F21 ; back to CLAIMED
LD A,(IX+$0B)
AND A
JR Z,L0F21 ; back to CLAIMED
RET
;; WT-SYNC
L0F35: IN A,($F7)
RRCA
JR C,L0F56 ; forward to SCOUT-END
LD A,$7F
IN A,($FE)
RRCA
JR NC,L0F4D ; forward to E-READ-N
DEC HL
LD A,H
OR L
JR NZ,L0F35 ; back to WT-SYNC
LD A,(IX+$0B)
AND A
JR Z,L0F35 ; back to WT-SYNC
RET
;; E-READ-N
L0F4D: EI
CALL L0CA9 ; routine BORD-REST
LD (IY+$00),$14 ; sv ERR_NR
RST 28H ; romerr
;; SCOUT-END
L0F56: LD L,$09
;; LP-SCOUT
L0F58: DEC L
SCF
RET Z
LD B,$0E
;; DELAY-SC
L0F5D: DJNZ L0F5D ; back to DELAY-SC
JR L0F58 ; back to LP-SCOUT
; ------------------------
; THE 'SEND-SCOUT' ROUTINE
; ------------------------
;
;; SEND-SC
L0F61: CALL L0F03 ; routine NET-STATE
LD C,$F7
LD HL,$0009
LD A,($5CC5) ; sv NTSTAT
LD E,A
IN A,($F7)
RRCA
JR C,L0F61 ; back to SEND-SC
;; ALL-BITS
L0F72: OUT (C),H
LD D,H
LD H,$00
RLC E
RL H
LD B,$08
;; S-SC-DEL
L0F7D: DJNZ L0F7D ; back to S-SC-DEL
IN A,($F7)
AND $01
CP D
JR Z,L0F61 ; back to SEND-SC
DEC L
JR NZ,L0F72 ; back to ALL-BITS
LD A,$01
OUT ($F7),A
LD B,$0E
;; END-S-DEL
L0F8F: DJNZ L0F8F ; back to END-S-DEL
RET
; -------------------
; THE 'INPAK' ROUTINE
; -------------------
;
;; INPAK
L0F92: LD B,$FF
;; N-ACTIVE
L0F94: IN A,($F7)
RRA
JR C,L0F9D ; forward to INPAK-2
DJNZ L0F94 ; back to N-ACTIVE
INC B
RET
;; INPAK-2
L0F9D: LD B,E
;; INPAK-L
L0F9E: LD E,$80
LD A,$CE
OUT ($EF),A
NOP
NOP
INC IX
DEC IX
INC IX
DEC IX
;; UNTIL-MK
L0FAE: LD A,$00
IN A,($F7)
RRA
RR E
JP NC,L0FAE ; jump to UNTIL-MK
LD (HL),E
INC HL
DJNZ L0F9E ; back to INPAK-L
CP A
RET
; --------------------------------
; THE 'SEND RESPONSE BYTE' ROUTINE
; --------------------------------
;
;; SEND-RESP
L0FBE: LD A,$01
LD HL,$5CCD ; sv NTRESP
LD (HL),A
LD E,A
; --------------------
; THE 'OUTPAK' ROUTINE
; --------------------
;
;; OUTPAK
L0FC5: XOR A
OUT ($F7),A
LD B,$04
;; DEL-D-1
L0FCA: DJNZ L0FCA ; back to DEL-D-1
;; OUTPAK-L
L0FCC: LD A,(HL)
CPL
SCF
RLA
LD B,$0A
;; UNT-MARK
L0FD2: OUT ($F7),A
RRA
AND A
DEC B
LD D,$00
JP NZ,L0FD2 ; jump to UNT-MARK
INC HL
DEC E
PUSH HL
POP HL
JP NZ,L0FCC ; jump to OUTPAK-L
LD A,$01
OUT ($F7),A
RET
; -----------------------------------------
; THE 'SET A TEMPORARY "M" CHANNEL' ROUTINE
; -----------------------------------------
;
;; SET-T-MCH
L0FE8: EXX
LD HL,L0000
EXX
LD IX,($5C4F) ; sv CHANS
LD DE,$0014
ADD IX,DE
;; CHK-LOOP
L0FF6: LD A,(IX+$00)
CP $80
JR Z,L1034 ; forward to CHAN-SPC
LD A,(IX+$04)
AND $7F
CP $4D
JR NZ,L102A ; forward to NEXT-CHAN
LD A,($5CD6) ; sv D_STR1
CP (IX+$19)
JR NZ,L102A ; forward to NEXT-CHAN
EXX
LD L,(IX+$1A)
LD H,(IX+$1B)
EXX
LD BC,($5CDA) ; sv D_STR1
LD HL,($5CDC) ; sv D_STR1
CALL L131E ; routine CHK-NAME
JR NZ,L102A ; forward to NEXT-CHAN
BIT 0,(IX+$18)
JR Z,L102A ; forward to NEXT-CHAN
RST 20H ; sh_err
DEFB $0D
;; NEXT-CHAN
L102A: LD E,(IX+$09)
LD D,(IX+$0A)
ADD IX,DE
JR L0FF6 ; back to CHK-LOOP
;; CHAN-SPC
L1034: LD HL,($5C53) ; sv PROG
DEC HL
PUSH HL
LD BC,$0253
RST 10H ; CALBAS
DEFW $1655 ; main MAKE-ROOM
POP DE
PUSH DE
LD HL,$13CC
LD BC,$0019
LDIR
LD A,($5CD6) ; sv D_STR1
LD (IX+$19),A
LD BC,$0253
PUSH IX
POP HL
CALL L1691 ; routine REST-N-AD
EX DE,HL
LD BC,($5CDA) ; sv D_STR1
BIT 7,B
JR NZ,L106F ; forward to TEST-MAP
;; T-CH-NAME
L1061: LD A,B
OR C
JR Z,L106F ; forward to TEST-MAP
LD A,(HL)
LD (IX+$0E),A
INC HL
INC IX
DEC BC
JR L1061 ; back to T-CH-NAME
;; TEST-MAP
L106F: POP IX
EXX
LD A,H
OR L
JR NZ,L108A ; forward to ST-MAP-AD
LD HL,($5C4F) ; sv CHANS
PUSH HL
DEC HL
LD BC,L0020
RST 10H ; CALBAS
DEFW $1655 ; main MAKE-ROOM
POP HL
LD BC,L0020
ADD IX,BC
CALL L1691 ; routine REST-N-AD
;; ST-MAP-AD
L108A: LD (IX+$1A),L
LD (IX+$1B),H
LD A,$FF
LD B,$20
;; FILL-14AP
L1094: LD (HL),A
INC HL
DJNZ L1094 ; back to FILL-14AP
PUSH IX
POP HL
LD DE,$001C
ADD HL,DE
EX DE,HL
LD HL,$13E5
LD BC,$000C
LDIR
PUSH IX
POP HL
LD DE,$0037
LD BC,$000C
ADD HL,DE
EX DE,HL
LD HL,$13E5
LDIR
PUSH IX
POP HL
LD DE,($5C4F) ; sv CHANS
OR A
SBC HL,DE
INC HL
RET
; ---------------------------------
; THE 'RECLAIM "M" CHANNEL' ROUTINE
; ---------------------------------
;
;; DEL-M-BUF
L10C4: LD L,(IX+$1A)
LD H,(IX+$1B)
PUSH HL
LD A,(IX+$19)
PUSH AF
PUSH IX
POP HL
LD BC,$0253
RST 10H ; CALBAS
DEFW $19E8 ; main RECLAIM-2
PUSH IX
POP HL
LD DE,($5C4F) ; sv CHANS
OR A
SBC HL,DE
INC HL
LD BC,$0253
CALL L135F ; routine RE-ST-STRM
POP AF
POP HL
LD B,A
LD IX,($5C4F) ; sv CHANS
LD DE,$0014
ADD IX,DE
;; TEST-MCHL
L10F5: LD A,(IX+$00)
CP $80
JR Z,L1114 ; forward to RCLM-MAP
LD A,(IX+$04)
AND $7F
CP $4D
JR NZ,L110A ; forward to NXTCHAN
LD A,(IX+$19)
CP B
RET Z
;; NXTCHAN
L110A: LD E,(IX+$09)
LD D,(IX+$0A)
ADD IX,DE
JR L10F5 ; back to TEST-MCHL
;; RCLM-MAP
L1114: LD BC,L0020
PUSH HL
PUSH BC
RST 10H ; CALBAS
DEFW $19E8 ; main RECLAIM-2
POP BC
POP HL
CALL L1391 ; routine REST-MAP
RET
; -------------------------------
; THE '"M" CHANNEL INPUT' ROUTINE
; -------------------------------
;
;; M-INPUT
L1122: LD IX,($5C51) ; sv CURCHL
LD HL,$112C
JP L0CBD ; jump to CALL-INP
; ---------------------------------------
; THE '"M" CHANNEL INPUT SERVICE' ROUTINE
; ---------------------------------------
;
;; MCHAN-IN
L112C: BIT 0,(IX+$18)
JR Z,L1134 ; forward to TEST-M-BF
RST 20H ; sh_err
DEFB $0D
;; TEST-M-BF
L1134: LD E,(IX+$0B)
LD D,(IX+$0C)
LD L,(IX+$45)
LD H,(IX+$46)
SCF
SBC HL,DE
JR C,L1158 ; forward to CHK-M-EOF
INC DE
LD (IX+$0B),E
LD (IX+$0C),D
DEC DE
PUSH IX
ADD IX,DE
LD A,(IX+$52)
POP IX
SCF
RET
;; CHK-M-EOF
L1158: BIT 1,(IX+$43)
JR Z,L1162 ; forward to NEW-BUFF
XOR A
ADD A,$0D
RET
;; NEW-BUFF
L1162: LD DE,L0000
LD (IX+$0B),E
LD (IX+$0C),D
INC (IX+$0D)
CALL L1177 ; routine GET-RECD
XOR A
CALL L17F7 ; routine SEL-DRIVE
JR L1134 ; back to TEST-M-BF
; --------------------------
; THE 'GET A RECORD' ROUTINE
; --------------------------
;
;; GET-RECD
L1177: LD A,(IX+$19)
CALL L17F7 ; routine SEL-DRIVE
;; GET-R-2
L117D: LD BC,$04FB
LD ($5CC9),BC ; sv SECTOR
;; GET-R-LP
L1184: CALL L11A5 ; routine G-RD-RC
JR C,L119E ; forward to NXT-SCT
JR Z,L119E ; forward to NXT-SCT
LD A,(IX+$44)
CP (IX+$0D)
JR NZ,L119E ; forward to NXT-SCT
PUSH IX
POP HL
LD DE,$0052
ADD HL,DE
CALL L1346 ; routine CHKS-BUFF
RET Z
;; NXT-SCT
L119E: CALL L1312 ; routine DEC-SECT
JR NZ,L1184 ; back to GET-R-LP
RST 20H ; sh_err
DEFB $11
; ---------------------------------------
; THE 'GET HEADER AND DATA BLOCK' ROUTINE
; ---------------------------------------
;
;; G-RD-RC
L11A5: CALL $12C4
LD DE,$001B
ADD HL,DE
CALL L18A9 ; routine GET-M-BUF
CALL L1341 ; routine CHKS-HD-R
JR NZ,L11D6 ; forward to G-REC-ERR
BIT 0,(IX+$43)
JR NZ,L11D6 ; forward to G-REC-ERR
LD A,(IX+$43)
OR (IX+$46)
AND $02
RET Z
PUSH IX
POP HL
LD DE,$0047
ADD HL,DE
LD BC,$000A
CALL L131E ; routine CHK-NAME
JR NZ,L11D6 ; forward to G-REC-ERR
LD A,$FF
OR A
RET
;; G-REC-ERR
L11D6: SCF
RET
; --------------------------------
; THE '"M" CHANNEL OUTPUT' ROUTINE
; --------------------------------
;
;; MCHAN-OUT
L11D8: LD IX,$FFFA
ADD IX,DE
BIT 0,(IX+$18)
JR NZ,L11E6 ; forward to NOREAD
RST 20H ; sh_err
DEFB $0C
;; NOREAD
L11E6: LD E,(IX+$0B)
LD D,(IX+$0C)
PUSH IX
ADD IX,DE
LD (IX+$52),A
POP IX
INC DE
LD (IX+$0B),E
LD (IX+$0C),D
BIT 1,D
RET Z
; ------------------------------------------
; THE 'WRITE RECORD ONTO MICRODRIVE' ROUTINE
; ------------------------------------------
;
;; WR-RECD
L11FF: LD A,(IX+$19)
CALL L17F7 ; routine SEL-DRIVE
CALL L120D ; routine WRITE-PRC
XOR A
CALL L17F7 ; routine SEL-DRIVE
RET
;; WRITE-PRC
L120D: CALL L1264 ; routine CHK-FULL
JR NZ,L121B ; forward to NOFULL
CALL L10C4 ; routine DEL-M-BUF
XOR A
CALL L17F7 ; routine SEL-DRIVE
RST 20H ; sh_err
DEFB $0F
;; NOFULL
L121B: PUSH IX
LD B,$0A
;; CP-NAME
L121F: LD A,(IX+$0E)
LD (IX+$47),A
INC IX
DJNZ L121F ; back to CP-NAME
POP IX
LD C,(IX+$0B)
LD (IX+$45),C
LD A,(IX+$0C)
LD (IX+$46),A
LD A,(IX+$0D)
LD (IX+$44),A
PUSH IX
POP HL
LD DE,$0043
ADD HL,DE
CALL L1341 ; routine CHKS-HD-R
LD DE,$000F
ADD HL,DE
CALL L1346 ; routine CHKS-BUFF
PUSH IX
POP HL
LD DE,$0047
CALL L1275 ; routine SEND-BLK
LD DE,L0000
LD (IX+$0B),E
LD (IX+$0C),D
INC (IX+$0D)
RET
; ----------------------
; THE 'CHK-FULL' ROUTINE
; ----------------------
;
;; CHK-FULL
L1264: LD L,(IX+$1A)
LD H,(IX+$1B)
LD B,$20
;; NXT-B-MAP
L126C: LD A,(HL)
CP $FF
RET NZ
INC HL
DJNZ L126C ; back to NXT-B-MAP
XOR A
RET
; ----------------------
; THE 'SEND-BLK' ROUTINE
; ----------------------
;
;; SEND-BLK
L1275: PUSH IX
POP HL
LD DE,$0037
ADD HL,DE
PUSH HL
;; FAILED
L127D: CALL L12C4 ; routine GET-M-RD2
CALL L12DF ; routine CHECK-MAP
JR NZ,L127D ; back to FAILED
EX (SP),HL
PUSH BC
IN A,($EF)
AND $01
JR NZ,L128F ; forward to NO-PRT
RST 20H ; sh_err
DEFB $0E
;; NO-PRT
L128F: LD A,$E6
OUT ($EF),A
LD BC,$0168
CALL L18FA ; routine DELAY-BC
CALL L1878 ; routine OUT-H-BUF
LD A,$EE
OUT ($EF),A
POP BC
POP HL
LD A,B
OR (HL)
LD (HL),A
RET
; ------------------------
; THE 'CLOSE FILE' ROUTINE
; ------------------------
;
;; CLOSE-M
L12A6: PUSH HL
POP IX
;; CLOSE-M2
L12A9: BIT 0,(IX+$18)
JR Z,L12B6 ; forward to NOEMP
SET 1,(IX+$43)
CALL L11FF ; routine WR-RECD
;; NOEMP
L12B6: XOR A
CALL L17F7 ; routine SEL-DRIVE
CALL L10C4 ; routine DEL-M-BUF
RET
; --------------------
; THE 'ERR-RS' ROUTINE
; --------------------
;
;; ERR-RS
L12BE: POP HL
LD A,(HL)
LD ($5C3A),A ; sv ERR_NR
RST 28H ; romerr
; ------------------------------------------
; THE 'FETCH HEADER FROM MICRODRIVE' ROUTINE
; ------------------------------------------
;
;; GET-M-RD2
L12C4: PUSH IX
POP HL
LD DE,L0028
ADD HL,DE
CALL L18A3 ; routine GET-M-HD
CALL L1341 ; routine CHKS-HD-R
JR NZ,L12C4 ; back to GET-M-RD2
BIT 0,(IX+$28)
JR Z,L12C4 ; back to GET-M-RD2
RET
; ---------------------------------
; THE 'CHECK MAP BIT STATE' ROUTINE
; ---------------------------------
;
;; CHK-MAP-2
L12DA: LD E,(IX+$44)
JR L12E2 ; forward to ENTRY
;; CHECK-MAP
L12DF: LD E,(IX+$29)
;; ENTRY
L12E2: LD L,(IX+$1A)
LD H,(IX+$1B)
;; ENTRY-2
L12E8: XOR A
LD D,A
LD A,E
AND $07
SRL E
SRL E
SRL E
ADD HL,DE
LD B,A
INC B
XOR A
SCF
;; ROTATE
L12F8: RLA
DJNZ L12F8 ; back to ROTATE
LD B,A
AND (HL)
RET
; -----------------------------------
; THE 'RESET BIT IN MAP AREA' ROUTINE
; -----------------------------------
;
;; RES-B-HAP
L12FE: CALL L12DF ; routine CHECK-MAP
LD A,B
CPL
AND (HL)
LD (HL),A
RET
; ------------------------------------------
; THE 'CHECK 'PSEUDO-MAP' BIT STATE' ROUTINE
; ------------------------------------------
;
;; TEST-PHAP
L1306: PUSH IX
POP HL
LD DE,$0052
ADD HL,DE
LD E,(IX+$29)
JR L12E8 ; back to ENTRY-2
; -------------------------------------
; THE 'DECREASE SECTOR COUNTER' ROUTINE
; -------------------------------------
;
;; DEC-SECT
L1312: LD BC,($5CC9) ; sv SECTOR
DEC BC
LD ($5CC9),BC ; sv SECTOR
LD A,B
OR C
RET
; ------------------------
; THE 'CHECK-NAME' ROUTINE
; ------------------------
;
;; CHK-NAME
L131E: PUSH IX
LD B,$0A
;; ALL-CHARS
L1322: LD A,(HL)
CP (IX+$0E)
JR NZ,L133E ; forward to CHKNAM-END
INC HL
INC IX
DEC B
DEC C
JR NZ,L1322 ; back to ALL-CHARS
LD A,B
OR A
JR Z,L133E ; forward to CHKNAM-END
;; ALLCHR-2
L1333: LD A,(IX+$0E)
CP $20
JR NZ,L133E ; forward to CHKNAM-END
INC IX
DJNZ L1333 ; back to ALLCHR-2
;; CHKNAM-END
L133E: POP IX
RET
; -----------------------------------------
; THE 'CALCULATE/COMPARE CHECKSUMS' ROUTINE
; -----------------------------------------
;
;; CHKS-HD-R
L1341: LD BC,$000E
JR L1349 ; forward to CNKS-ALL
;; CHKS-BUFF
L1346: LD BC,$0200
;; CNKS-ALL
L1349: PUSH HL
LD E,$00
;; NXT-BYTE
L134C: LD A,E
ADD A,(HL)
INC HL
ADC A,$01
JR Z,L1354 ; forward to STCHK
DEC A
;; STCHK
L1354: LD E,A
DEC BC
LD A,B
OR C
JR NZ,L134C ; back to NXT-BYTE
LD A,E
CP (HL)
LD (HL),A
POP HL
RET
; ---------------------------------
; THE 'RESTORE STREAM DATA' ROUTINE
; ---------------------------------
;
;; RE-ST-STRM
L135F: PUSH HL
LD A,$10
LD HL,$5C16 ; sv STRMS_00
;; NXT-STRM
L1365: LD ($5C5F),HL ; sv X_PTR
LD E,(HL)
INC HL
LD D,(HL)
POP HL
PUSH HL
OR A
SBC HL,DE
JR NZ,L1377 ; forward to NOTRIGHT
LD DE,L0000
JR L137E ; forward to STO-DISP
;; NOTRIGHT
L1377: JR NC,L1384 ; forward to UPD-POINT
EX DE,HL
OR A
SBC HL,BC
EX DE,HL
;; STO-DISP
L137E: LD HL,($5C5F) ; sv X_PTR
LD (HL),E
INC HL
LD (HL),D
;; UPD-POINT
L1384: LD HL,($5C5F) ; sv X_PTR
INC HL
INC HL
DEC A
JR NZ,L1365 ; back to NXT-STRM
LD ($5C5F),A ; sv X_PTR
POP HL
RET
; -----------------------------------
; THE 'RESTORE MAP ADDRESSES' ROUTINE
; -----------------------------------
;
;; REST-MAP
L1391: LD BC,L0020
LD IX,($5C4F) ; sv CHANS
LD DE,$0014
ADD IX,DE
;; LCHAN
L139D: LD A,(IX+$00)
CP $80
RET Z
PUSH HL
LD A,(IX+$04)
AND $7F
CP $4D
JR NZ,L13C1 ; forward to LPEND
LD E,(IX+$1A)
LD D,(IX+$1B)
SBC HL,DE
JR NC,L13C1 ; forward to LPEND
EX DE,HL
OR A
SBC HL,BC
LD (IX+$1A),L
LD (IX+$1B),H
;; LPEND
L13C1: POP HL
LD E,(IX+$09)
LD D,(IX+$0A)
ADD IX,DE
JR L139D ; back to LCHAN
; ------------------------------
; THE '"M" CHANNEL DATA' ROUTINE
; ------------------------------
;
;;
L13CC: DEFW $0008 ; main ERROR-1
DEFW $0008 ; main ERROR-1
DEFB $CD
DEFW $11D8 ;
DEFW $1122 ;
DEFW $0253 ;
DEFW $0000 ;
DEFB $00
DEFM " " ; 10 spaces
DEFB $FF
; ---------------------------
; THE 'PREAMBLE DATA' ROUTINE
; ---------------------------
;
;;
L13E5: DEFB $00, $00, $00
DEFB $00, $00, $00
DEFB $00, $00, $00
DEFB $00, $FF, $FF
; --------------------------
; THE 'MOVE COMMAND' ROUTINE
; --------------------------
;
;; MOVE
L13F1: SET 4,(IY+$7C) ; sv FLAGS_3
CALL L1455 ; routine OP-STRM
LD HL,($5C4F) ; sv CHANS
PUSH HL
CALL L14C7 ; routine EX-DSTR2
CALL L1455 ; routine OP-STRM
CALL L14C7 ; routine EX-DSTR2
POP DE
LD HL,($5C4F) ; sv CHANS
OR A
SBC HL,DE
LD DE,($5CDA) ; sv D_STR1
ADD HL,DE
LD ($5CDA),HL ; sv D_STR1
;; M-AGAIN
L1414: LD HL,($5CDA) ; sv D_STR1
LD ($5C51),HL ; sv CURCHL
;; I-AGAIN
L141A: RST 10H ; CALBAS
DEFW $15E6 ; main INPUT-AD
JR C,L1423 ; forward to MOVE-OUT
JR Z,L141A ; back to I-AGAIN
JR L142E ; forward to MOVE-EOF
;; MOVE-OUT
L1423: LD HL,($5CE2) ; sv D_STR2
LD ($5C51),HL ; sv CURCHL
RST 10H ; CALBAS
DEFW $0010 ; main PRINT-A
JR L1414 ; back to M-AGAIN
;; MOVE-EOF
L142E: RES 4,(IY+$7C) ; sv FLAGS_3
LD HL,($5C4F) ; sv CHANS
PUSH HL
CALL L14C7 ; routine EX-DSTR2
CALL L14A4 ; routine CL-CHAN
CALL L14C7 ; routine EX-DSTR2
POP DE
LD HL,($5C4F) ; sv CHANS
OR A
SBC HL,DE
LD DE,($5CDA) ; sv D_STR1
ADD HL,DE
LD ($5CDA),HL ; sv D_STR1
CALL L14A4 ; routine CL-CHAN
CALL L17B9 ; routine RCL-T-CH
RET
; ---------------------------------------------
; THE 'USE STREAM OR TEMPORARY CHANNEL' ROUTINE
; ---------------------------------------------
;
;; OP-STRM
L1455: LD A,($5CD8) ; sv D_STR1
INC A
JR Z,L1466 ; forward to OP-CHAN
DEC A
RST 10H ; CALBAS
DEFW $1601 ; main CHAN-OPEN
LD HL,($5C51) ; sv CURCHL
LD ($5CDA),HL ; sv D_STR1
RET
;; OP-CHAN
L1466: LD A,($5CD9) ; sv D_STR1
CP $4D
JR NZ,L147F ; forward to CHECK-N
CALL L1B29 ; routine OP-TEMP-M
XOR A
CALL L17F7 ; routine SEL-DRIVE
LD ($5CDA),IX ; sv D_STR1
BIT 2,(IX+$43)
RET Z
RST 20H ; sh_err
DEFB $16
;; CHECK-N
L147F: CP $4E
JR NZ,L148B ; forward to CHECK-R
CALL L0EA9 ; routine OP-TEMP-N
LD ($5CDA),IX ; sv D_STR1
RET
;; CHECK-R
L148B: CP $54
JR Z,L1495 ; forward to USE-R
CP $42
JR Z,L1495 ; forward to USE-R
RST 20H ; sh_err
DEFB $00
;; USE-R
L1495: CALL L0B13 ; routine OP-RS-CH
LD ($5CDA),DE ; sv D_STR1
PUSH DE
POP IX
SET 7,(IX+$04)
RET
; ----------------------------------
; THE 'CLOSE 'MOVE' CHANNEL' ROUTINE
; ----------------------------------
;
;; CL-CHAN
L14A4: LD A,($5CD8) ; sv D_STR1
INC A
RET NZ
LD A,($5CD9) ; sv D_STR1
CP $4D
JR NZ,L14B8 ; forward to CL-CHK-N
LD IX,($5CDA) ; sv D_STR1
CALL L12A9 ; routine CLOSE-M2
RET
;; CL-CHK-N
L14B8: CP $4E
RET NZ
LD IX,($5CDA) ; sv D_STR1
LD ($5C51),IX ; sv CURCHL
CALL L0EF5 ; routine SEND-NEOF
RET
; ----------------------------------------------
; THE 'EXCHANGE DSTRI AND STR2 CONTENTS' ROUTINE
; ----------------------------------------------
;
;; EX-DSTR2
L14C7: LD DE,$5CD6 ; sv D_STR1
LD HL,$5CDE ; sv D_STR2
LD B,$08
;; ALL-BYT-2
L14CF: LD A,(DE)
LD C,(HL)
EX DE,HL
LD (HL),C
LD (DE),A
EX DE,HL
INC HL
INC DE
DJNZ L14CF ; back to ALL-BYT-2
RET
; ---------------------------------------------
; THE 'SAVE DATA BLOCK INTO MICRODRIVE' ROUTINE
; ---------------------------------------------
;
;; SA-DRIVE
L14DA: LD A,($5CD6) ; sv D_STR1
CALL L17F7 ; routine SEL-DRIVE
IN A,($EF)
AND $01
JR NZ,L14E8 ; forward to START-SA
RST 20H ; sh_err
DEFB $0E
;; START-SA
L14E8: LD HL,($5CE9) ; sv HD_0D
LD ($5CE4),HL ; sv D_STR2
CALL L1B29 ; routine OP-TEMP-M
BIT 0,(IX+$18)
JR NZ,L14FC ; forward to NEW-NAME
CALL L12A9 ; routine CLOSE-M2
RST 20H ; sh_err
DEFB $0C
;; NEW-NAME
L14FC: SET 2,(IX+$43)
LD A,(IX+$19)
CALL L17F7 ; routine SEL-DRIVE
PUSH IX
POP HL
LD DE,$0052
ADD HL,DE
EX DE,HL
LD HL,$5CE6 ; sv HD_00
LD BC,$0009
LD (IX+$0B),C
LDIR
PUSH DE
LD HL,$0009
LD BC,($5CE7) ; sv HD_0B
ADD HL,BC
SRL H
INC H
PUSH HL
CALL L1D38 ; routine FREESECT
POP HL
LD A,E
CP H
JR NC,L1530 ; forward to SA-DRI-2
RST 20H ; sh_err
DEFB $0F
;; SA-DRI-2
L1530: POP DE
LD HL,($5CE4) ; sv D_STR2
LD BC,($5CE7) ; sv HD_0B
;; SA-DRI-3
L1538: LD A,B
OR C
JR Z,L155E ; forward to SA-DRI-4
LD A,(IX+$0C)
CP $02
JR NZ,L1552 ; forward to SA-DRI-WR
PUSH HL
PUSH BC
CALL L120D ; routine WRITE-PRC
POP BC
PUSH IX
POP HL
LD DE,$0052
ADD HL,DE
EX DE,HL
POP HL
;; SA-DRI-WR
L1552: LDI
INC (IX+$0B)
JR NZ,L1538 ; back to SA-DRI-3
INC (IX+$0C)
JR L1538 ; back to SA-DRI-3
;; SA-DRI-4
L155E: SET 1,(IX+$43)
CALL L120D ; routine WRITE-PRC
LD A,($5CEF) ; sv COPIES
DEC A
JR Z,L1579 ; forward to END-SA-DR
LD ($5CEF),A ; sv COPIES
RES 1,(IX+$43)
LD A,$00
LD (IX+$0D),A
JR L14FC ; back to NEW-NAME
;; END-SA-DR
L1579: XOR A
CALL L17F7 ; routine SEL-DRIVE
JP L10C4 ; jump to DEL-M-BUF
; ----------------------------------------------------
; THE 'GET HEADER INFORMATION FROM MICRODRIVE' ROUTINE
; ----------------------------------------------------
;
;; F-M-HM
L1580: LD HL,($5CE1) ; sv D_STR2
LD ($5CE4),HL ; sv D_STR2
CALL L1B29 ; routine OP-TEMP-M
BIT 0,(IX+$18)
JR Z,L1591 ; forward to F-HD-2
RST 20H ; sh_err
DEFB $11
;; F-HD-2
L1591: BIT 2,(IX+$43) ;
JR NZ,L1599 ; forward to F-HD-3
RST 20H ; sh_err
DEFB $16
;; F-HD-3
L1599: PUSH IX
POP HL
LD DE,$0052
ADD HL,DE
LD DE,$5CE6 ; sv HD_00
LD BC,$0009
LDIR
RET
; --------------------------------------------------
; THE 'LOAD OR VERIFY BLOCK FROM MICRODRIVE' ROUTINE
; --------------------------------------------------
;
;; LV-MCH
L15A9: LD (