; 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      (