home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol084 / xstamp.asm < prev    next >
Assembly Source File  |  1984-04-29  |  28KB  |  2,004 lines

  1.     TITLE    'XSTAM transmit module vers 1.304'
  2. ;
  3. ;********************************
  4. ;*                *
  5. ;*       BSTAM v4.3        *
  6. ;*        TRANSMIT        *
  7. ;*      LOCAL REV 04        *
  8. ;*                *
  9. ;********************************
  10. ;
  11. ; MODIFICATION HISTORY
  12. ;=====================
  13. ; 10/Jun/82 Added error count to abort after a number
  14. ;      of error messages.
  15. ; 06/Aug/81 INCORPORATED K'S FIX TO BUG IN LOCPRT,
  16. ;      MADE CONSOLE ABORT ASSEMBLE SIMPLE
  17. ;      RETURN IF QUIET MODE IS TRUE, BROUGHT
  18. ;      LOCAL REV NUMBER UP TO 3 (R)
  19. ; 04/Aug/81 FIXED BUFFER EQUATES    (R)
  20. ; 31/Jul/81 ADDED QUIET MODE,CONDITIONALS FOR NOT SENDING
  21. ;      COM FILES, SYS FILES, TAGGED FILES, AND FILES
  22. ;      WITH NAMES ENDING IN "#"    (R)
  23. ;
  24.     ORG    0100H
  25. ;
  26. FALSE    EQU    0
  27. TRUE    EQU    NOT FALSE
  28. ;
  29. QUIET    EQU    TRUE     ;TRUE ASSEMBLES TQ.COM
  30. NOCOMS    EQU    TRUE    ;TRUE SUPPRESSES COM FILES
  31. NOTAGS    EQU    TRUE    ;TRUE SUPPRESSES TAG2 FILES
  32. NOSYS    EQU    TRUE    ;TRUE SUPPRESSES SYS FILES
  33. NOPNDS    EQU    TRUE    ;TRUE SUPPRESSES FILES
  34.             ;ENDING IN "#"
  35. ;
  36. BDOS    EQU    5
  37. DBUF    EQU    80H
  38. DFCB    EQU    5CH
  39. EXT    EQU    0CH
  40. SPEED    EQU    6    ;CPU Speed in MHz
  41. MAXDROP    EQU    10    ;Maximum number of line dropouts
  42. CARSEC    EQU    5    ;Carrier timeout in seconds
  43. MAXERR    EQU    20    ;Number of error messages before
  44.             ; quiting, reset after each good block
  45. ;
  46. CR    EQU    13
  47. LF    EQU    10
  48. ;
  49. VDP80    EQU    TRUE    ;True for RCPM system
  50. VDATA    EQU    81H
  51. VSTAT    EQU    80H
  52. VMASK    EQU    04H
  53. ;
  54.     PAGE
  55. ;
  56. ; PRINT MACRO FOR MESSAGES
  57. ; TO BE SUPPRESSED IN QUIET MODE
  58. ;
  59. $-MACRO         ;TURN ON SUPPRESSION
  60. ;
  61. PRINT    MACRO    STRING
  62.     LOCAL    OVRSTR,MARK
  63.     JMP    OVRSTR
  64. MARK:    DB    CR,LF,STRING
  65. OVRSTR: LXI    D,MARK
  66. ;
  67.     IF    QUIET
  68.     CALL    LOCPRT    ;MAYBE PRINT LOCAL ONLY
  69.     ELSE
  70.     MVI    C,9    ;NON-QUIET, USE BDOS
  71.     CALL    BDOS
  72.     ENDIF
  73. ;
  74.     ENDM
  75. ;
  76. ; PRINT MACRO FOR MESSAGES ALWAYS PRINTED
  77. ;
  78. APRINT    MACRO    STRING
  79.     LOCAL    OVRSTR,MARK
  80.     JMP    OVRSTR
  81. MARK:    DB    CR,LF,STRING
  82. OVRSTR: LXI    D,MARK
  83.     MVI    C,9
  84.     CALL    BDOS
  85.     ENDM
  86. ;
  87. ;
  88.     PAGE
  89. ;
  90. ; USER AREA
  91. ; NOTE: THE USER AREA SHOULD BE SILENT
  92. ; WHEN ASSEMBLED FOR TQ.COM
  93. ;
  94. ;
  95. USER    EQU    $    ;DEFINE USER AREA
  96. ;
  97.     JMP    ENTRY
  98. ;****************************************************************
  99. ;*                                *
  100. ;*       XSTAM Interface routines for 2651 UART.        *
  101. ;*        on Godbout System Support 1 Board        *
  102. ;*                                *
  103. ;****************************************************************
  104. ;************************************************
  105. ;*                        *
  106. ;*         2651 Baud Rate Table        *
  107. ;*                        *
  108. ;************************************************
  109. ;
  110. B50    EQU    0000B            ;50 bps
  111. B75    EQU    0001B            ;75 bps
  112. B110    EQU    0010B            ;110 bps
  113. B134    EQU    0011B            ;134.5 bps
  114. B150    EQU    0100B            ;150 bps
  115. B300    EQU    0101B            ;300 bps
  116. B600    EQU    0110B            ;600 bps
  117. B1200    EQU    0111B            ;1200 bps
  118. B1800    EQU    1000B            ;1800 bps
  119. B2000    EQU    1001B            ;2000 bps
  120. B2400    EQU    1010B            ;2400 bps
  121. B3600    EQU    1011B            ;3600 bps
  122. B4800    EQU    1100B            ;4800 bps
  123. B7200    EQU    1101B            ;7200 bps
  124. B9600    EQU    1110B            ;9600 bps
  125. B19200    EQU    1111B            ;19200 bps
  126. ;
  127. ;************************************************
  128. ;*                        *
  129. ;*        2651 Equates            *
  130. ;*                        *
  131. ;************************************************
  132. ;
  133. BASE    EQU    5CH            ;UART base register
  134. DATA    EQU    BASE+0            ;Data port
  135. MSTATUS    EQU    BASE+1            ;Status port
  136. MODE    EQU    BASE+2            ;Mode register
  137. CMMD    EQU    BASE+3            ;Command register
  138. USERP    EQU    BASE+7            ;User select port
  139. UNUM    EQU    6            ;Modem user number
  140. MODE1    EQU    01101110B        ;Asynch,16x,8 data bits,
  141.                     ; no parity, even, 1 stop bit
  142. MODE2    EQU    01110000B + B300    ;Baud rate
  143. CMMDB    EQU    00100111B        ;Tx enabled, RX enabled, no break
  144.                     ; DTR high, RTS high
  145. ERESET    EQU    CMMDB+10H        ;Error reset
  146. GBDTR    EQU    10000000B        ;CCITT 108
  147. GBCD    EQU    01000000B        ;Carrier detect
  148. ;
  149. SYSSPT    EQU    TRUE            ;True for Godbout system support
  150. INTER3    EQU    NOT SYSSPT        ;True for Godbout Interfacer 3
  151. ;
  152. UINITV:
  153.     JMP    INITIU        ;UART/USART INITIALATION ENTRY POINT
  154. MSTSV:
  155.     JMP    INSPRU        ;STATUS PORT READ ENTRY POINT
  156. ERRSET:
  157.     JMP    ERRSTU        ;UART/USART ERROR RESET ENTRY POINT
  158. INPORT:
  159.     JMP    INPRTU        ;READ DATA PORT ENTRY POINT
  160. OUTPORT:
  161.     JMP    OUTPRU        ;WRITE DATA PORT ENTRY POINT
  162. ;
  163. ; NEW VECTOR FOR LOCAL CONSOLE
  164. ; OUTPUT: PRINT CHAR IN C, CAN
  165. ; MODIFY ANY REGISTERS
  166. ;
  167. LCOV:    JMP    LCO
  168. ;
  169. INITIU:
  170.     CALL    SIGNON        ;Announce version
  171.  
  172.     if    inter3
  173.     MVI    A,UNUM
  174.     OUT    USERP        ;Select UART
  175.     endif    ;inter3
  176.  
  177.     MVI    A,MODE1        ;Get first mode word
  178.     OUT    MODE
  179.     MVI    A,MODE2        ;Get second mode word
  180.     OUT    MODE
  181.     MVI    A,CMMDB        ;Get command byte
  182.     OUT    CMMD
  183.     RET            ;Retuen to XSTAM
  184. ;
  185. INSPRU:
  186. RDMSTS:
  187.  
  188.     if    inter3
  189.     MVI    A,UNUM
  190.     OUT    USERP        ;Select UART
  191.     endif    ;inter3
  192.  
  193.     IN    MSTATUS        ;GET MODEM STATUS
  194.     ANI    GBCD        ;GOT A CARRIER?
  195.     JNZ    CARROK        ;YES, GO ON WITH TESTS
  196.     LDA    DROPOUT        ;Get dropout count
  197.     ADI    1        ;Increment it
  198.     CPI    MAXDROP        ;Bad line?
  199.     JZ    NOCAR        ;Yes, reset system
  200.     STA    DROPOUT        ;Save for later
  201.     PUSH    B        ;PRESERVE BC SO WE CAN USE IT
  202.     MVI    B,CARSEC*10    ;SETUP TIMEOUT
  203. CARLP:
  204.     CALL    DELAY        ;WAIT .1 SECONDS
  205.     IN    MSTATUS        ;GET MODEM STATUS
  206.     ANI    GBCD        ;HAS CARRIER RETURNED?
  207.     MOV    A,B        ;PRESERVE COUNTDOWN VALUE
  208.     POP    B        ;FIX STACK IN CASE ALL IS OK
  209.     JNZ    CARROK        ;GOT CARRIER, CONTINUE ON
  210.     DCR    A        ;COUNT TIME DOWN
  211.     STC            ;IN CASE THIS IS THE END OF TIME
  212.     PUSH    B        ;PRESERVE B
  213.     MOV    B,A        ;GET COUNTER VALUE IN B
  214.     JNZ    CARLP        ;KEEP CHECKING
  215.     POP    B
  216. NOCAR:
  217.     LXI    D,LOST        ;Sending anything to conosle
  218.     MVI    C,9        ; will let BYE grab control if
  219.     CALL    5        ; carrier lost totally else
  220.     JMP    0        ; back to CP/M if dropout max
  221.                 ; was reached.
  222. ;
  223. LOST:
  224.     DB    CR,LF,'    ++CARRIER LOST++'
  225.     DB    CR,LF,'The modem is now '
  226.     DB    'DISCONNECTED',CR,LF,'$'
  227. ;
  228. CARROK:
  229.     if    inter3
  230.     MVI    A,UNUM
  231.     OUT    USERP        ;Select UART
  232.     endif    ;inter3
  233.  
  234.     IN    MSTATUS        ;Get status
  235.     ORI    4        ;Force Tx empty high
  236.     RET
  237. ;
  238. DELAY:
  239.     PUSH    B        ;Delay 0.1 second
  240.     LXI    B,SPEED*4167     ;TIMING CONSTANT
  241. DELAY1:
  242.     DCX    B
  243.     MOV    A,B
  244.     ORA    C
  245.     JNZ    DELAY1
  246.     POP    B
  247.     RET
  248. ;
  249. ERRSTU:
  250.     if    inter3
  251.     MVI    A,UNUM
  252.     OUT    USERP        ;Select UART
  253.     endif    ;inter3
  254.  
  255.     MVI    A,ERESET    ;Reset error flags in 2651
  256.     OUT    CMMD
  257.     MVI    A,CMMDB        ;Restore normal operation
  258.     OUT    CMMD
  259.     RET
  260. ;
  261. INPRTU:
  262.     if    inter3
  263.     MVI    A,UNUM
  264.     OUT    USERP        ;Select UART
  265.     endif    ;inter3
  266.  
  267.     IN    DATA        ;Get data
  268.     RET
  269. ;
  270. OUTPRU:
  271.     if    inter3
  272.     PUSH    PSW
  273.     MVI    A,UNUM
  274.     OUT    USERP        ;Select UART
  275.     POP    PSW
  276.     endif    ;inter3
  277.  
  278.     OUT    DATA        ;Send data
  279.     RET
  280. ;
  281. ;
  282. SIGNON:
  283.     PUSH    B        ;Save  the environment
  284.     PUSH    D
  285.     PUSH    H
  286.     LXI    D,MESSGE
  287.     MVI    C,9        ;BDOS display string command
  288.     CALL    BDOS        ;Announce version to user
  289.     POP    H        ;Restore the enviroment
  290.     POP    D
  291.     POP    B
  292.     RET
  293. ;
  294. hexnum    macro    num
  295.     if    (num/16) > 9     
  296.     db    (num/16 and 0fh) + 'A' - 10
  297.     else
  298.     db    (num/16 and 0fh) + '0'
  299.     endif
  300.     if    (num and 0fh) > 9
  301.     db    (num and 0fh) + 'A' - 10
  302.     else
  303.     db    (num and 0fh) + '0'
  304.     endif
  305.     endm
  306.  
  307. MESSGE:
  308.     if    not quiet
  309.     DB    CR,LF,LF
  310.     DB    'Version 1.304, March 29, 1982 by Software Tools',CR,LF
  311.     DB    '2651 UART on '
  312.  
  313.     if    sysspt
  314.     DB    'Godbout System Support 1 Board'
  315.     endif    ;sysspt
  316.  
  317.     if    inter3
  318.     DB    'Godbout Interfacer 3 Board'
  319.     endif    ;sysspt
  320.  
  321.     DB    CR,LF
  322.     DB    'UART Addressed at ' 
  323.     hexnum    %BASE
  324.     DB    'H, 300 bps, no parity.',CR,LF
  325.  
  326.     if    inter3
  327.     DB    'UART Relative User '
  328.     hexnum    %UNUM
  329.     DB    ',',CR,LF
  330.     endif    ;inter3
  331.     endif    ;not quite
  332.  
  333.     DB    '$'
  334. ;
  335. ; NEW HANDLER FOR LOCAL-CONSOLE
  336. ; ONLY.  PRINT REG C, CAN USE
  337. ; ANY REGISTER
  338. ;
  339. LCO:
  340.     if    vdp80
  341.     IN    VSTAT
  342.     ANI    VMASK
  343.     JZ    LCO
  344.     MOV    A,C
  345.     OUT    VDATA
  346.     else
  347.     LHLD    1
  348.     LXI    D,9    ;Offset to COUT
  349.     DAD    D
  350.     PCHL
  351.     endif    ;vdp80
  352.  
  353.     RET        ;NULL FOR NOW
  354. ;
  355. ; END OF USER AREA
  356. ;
  357.     PAGE
  358.     ORG    USER+300    ;ALLOW 300 BYTES USER AREA
  359. ;
  360. ; BSTAM INITIAL ENTRY POINT
  361. ;
  362. ENTRY:
  363.     LXI    H,0
  364.     DAD    SP
  365.     SHLD    STACK
  366.     LXI    SP,STACK
  367.     JMP    BYSTAK
  368. ;
  369.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  370.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  371.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  372.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  373.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  374.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  375.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  376.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  377.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  378.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  379.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  380.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  381.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  382.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  383.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  384.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  385.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  386.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  387.     DB    0,0,0,0,0,0,0,0,0
  388.     LXI    H,0
  389.     DAD    SP
  390.     SHLD    STACK
  391.     LXI    SP,STACK
  392.     JMP    BYSTAK
  393. ;
  394. STACK:    DW    0
  395. ;
  396. BYSTAK:
  397.     APRINT    'XSTAM rev 1.304$'
  398.     APRINT    'Transmit Ready$'
  399.     APRINT    '$'
  400. ;
  401. PASTMS:
  402.     LDA    DBUF
  403.     CPI    0
  404.     JNZ    GOTFIL
  405.     APRINT    '**** NO FILE NAME - PROGRAM ABORTING ****$'
  406.     JMP    EXIT
  407. ;
  408. GOTFIL:
  409.     JMP    START
  410. ;
  411. BLDMAP:
  412.     SHLD    NAMSTO
  413.     LXI    H,DBUF
  414.     MVI    C,11H
  415.     LXI    D,DFCB
  416.     LDAX    D
  417.     STA    SDRIVE
  418.     JMP    SRCH2
  419. ;
  420. SRCHLP:
  421.     LXI    H,DBUF
  422.     MVI    C,12H
  423.     LXI    D,DFCB
  424. SRCH2:
  425.     CALL    5
  426.     LXI    H,DBUF
  427.     CPI    0FFH
  428.     RZ
  429.     ANI    3
  430.     RLC
  431.     RLC
  432.     RLC
  433.     RLC
  434.     RLC
  435.     ADD    L
  436.     MOV    L,A
  437. ;
  438.     IF    NOTAGS    ;CODE TO SKIP TAGGED FILES
  439.     INX    H
  440.     INX    H    ;POINT TO F2 BYTE
  441.     MOV    A,M    ;LOAD IT
  442.     DCX    H    ;POINT BACK
  443.     DCX    H
  444.     ORA    A    ;SET FLAGS ON A
  445.     JM    SRCHLP    ;AND SKIP IF ATR SET
  446.     ENDIF        ;NOTAGS
  447. ;
  448.     IF    NOSYS    ;CODE TO SKIP SYS FILES
  449.     XCHG        ;PUT NAME PTR IN DE
  450.     LXI    H,10    ;OFFSET TO T2 BYTE
  451.     DAD    D
  452.     MOV    A,M    ;PICK UP T2
  453.     XCHG        ;RESTORE POINTER
  454.     ORA    A    ;SET FLAGS ON A
  455.     JM    SRCHLP    ;SKIP IF SYS ATR SET
  456.     ENDIF        ;NOSYS
  457. ;
  458.     IF    NOPNDS    ;CODE TO SKIP "#" FILES
  459.     XCHG        ;MOVE PTR TO DE
  460.     LXI    H,11    ;OFFSET TO LAST FT CHAR
  461.     DAD    D
  462.     MOV    A,M    ;LOAD IT
  463.     ANI    7FH    ;KILL ANY ATR BIT
  464.     XCHG        ;RESTORE POINTER
  465.     CPI    '#'    ;GOT A # FILE?
  466.     JZ    SRCHLP    ;SKIP IT IF SO
  467.     ENDIF        ;NOPNDS
  468. ;
  469.     IF    NOCOMS    ;CODE TO SKIP COM FILES
  470.     XCHG        ;MOVE POINTER TO DE
  471.     LXI    H,9    ;OFFSET TO FIRST FT CHAR
  472.     DAD    D
  473.     MOV    A,M    ;PICK UP FIRST
  474.     ANI    7FH    ;KILL ATR BIT
  475.     CPI    'C'    ;CHAR 1 OF 'COM'
  476.     JNZ    FILOK    ;JMP, NOT COM
  477.     INX    H    ;GOT C, CHECK FOR 'O'
  478.     MOV    A,M    ;PICK UP 2ND FILETYPE CHAR
  479.     ANI    7FH    ;KILL ATTRIBUTE
  480.     CPI    'O'
  481.     JNZ    FILOK    ;NO COM, FILE OK TO SEND
  482.     INX    H    ;GOT 'CO', CHECK FOR 'M'
  483.     MOV    A,M
  484.     ANI    7FH    ;STRIP ATR
  485.     CPI    'M'    ;NOW...HAVE WE GOT 'COM'?
  486.     JZ    SRCHLP    ;SKIP IF SO
  487. FILOK:
  488.     XCHG        ;NOPE, RESTORE NAME PTR
  489.     ENDIF        ;NOCOMS
  490. ;
  491.     LDA    SDRIVE
  492.     MOV    M,A
  493.     CALL    MOVNAM
  494.     JMP    SRCHLP
  495. MOVNAM:
  496.     MVI    B,12
  497.     XCHG
  498.     LHLD    NAMSTO
  499.     XCHG
  500. MOVLP:
  501.     MOV    A,M
  502.     ANI    7FH    ;KILL ANY ATTRIBUTES
  503.     STAX    D
  504.     INX    H
  505.     INX    D
  506.     DCR    B
  507.     JNZ    MOVLP
  508.     XCHG
  509.     SHLD    NAMSTO
  510.     RET
  511. ;
  512. SDRIVE: DB    0
  513. NAMSTO: DW    0
  514. ;
  515. START:
  516.     LXI    H,BUFFER
  517.     CALL    BLDMAP
  518.     LXI    H,BUFFER
  519.     SHLD    NAMPTR
  520. MORCHK:
  521.     MVI    A,0
  522.     STA    FILFLG
  523.     CALL    INI
  524.     LDA    FILFLG
  525.     CPI    1
  526.     JZ    NOMORE
  527. MAIN:
  528.     LDA    FILFLG
  529.     SUI    0
  530.     JNZ    NOMORE
  531.     CALL    SNDFIL
  532.     JMP    MAIN
  533. ;
  534. NOMORE:
  535.     CALL    CLNUP
  536. EXIT:
  537.     LDA    FILFLG
  538.     SUI    2
  539.     JZ    MORCHK
  540.     LHLD    STACK
  541.     SPHL
  542.     RET
  543. ;
  544. ; LOCAL PRINT SUBROUTINE...EMULATES BDOS
  545. ; FUNCTION 9 ON LOCAL CONSOLE WHEN 'QUIET'
  546. ; CONDITIONAL TRUE...USES LOCAL CO VECTOR
  547. ; IN USER AREA (WHICH CAN SIMPLY DO RET
  548. ; TO BE TRULY QUIET).
  549. ;
  550.     IF    QUIET
  551. LOCPRT:
  552.     LDAX    D    ;PICK UP CHAR
  553.     INX    D    ;POINT PAST IT
  554.     CPI    '$'    ;GOT TERMINATOR?
  555.     RZ        ;WE'RE DONE IF SO
  556.     MOV    C,A    ;NOT TERM, OUTPUT IT
  557.     PUSH    D    ;SAVE STRING PTR
  558.     CALL    LCOV    ;SEND IT
  559.     POP    D    ;GET STR PTR BACK
  560.     JMP    LOCPRT    ;PRINT REST OF STRING
  561.     ENDIF        ;QUIET
  562. ;
  563. INI:
  564.     MVI    A,0
  565.     STA    L12A9
  566.     STA    L1522
  567.     STA    FILFLG
  568.     STA    ERRCNT    ;Reset error count
  569.     STA    L12B7
  570.     STA    ERRHIT    ;Reset error count
  571.     MVI    A,1
  572.     STA    L1510
  573.     CALL    UINITV
  574.     PRINT    '**** CONNECTING TO REMOTE CPU ****$'
  575.     JMP    L079A
  576. ;
  577. L050E:
  578.     SHLD    L0781
  579.     SHLD    L0785
  580.     XCHG
  581.     SHLD    L0789
  582.     MOV    H,B
  583.     MOV    L,C
  584.     SHLD    L0787
  585.     STA    L078B
  586.     MVI    A,0
  587.     LHLD    L0789
  588.     MOV    M,A
  589.     INX    H
  590.     INX    H
  591.     INX    H
  592.     MOV    M,A
  593.     DCX    H
  594.     MVI    A,0FFH
  595.     MOV    M,A
  596.     DCX    H
  597.     MVI    A,0
  598.     MOV    M,A
  599.     INX    H
  600.     INX    H
  601.     INX    H
  602.     MOV    M,A
  603.     INX    H
  604.     MVI    A,0FFH
  605.     MOV    M,A
  606.     MVI    A,1
  607.     STA    L0784
  608.     STA    L0783
  609.     CALL    ERRSET        ;Reset UART errors
  610. L0545:
  611.     LDA    L0784
  612.     SUI    1
  613.     JNZ    L0780
  614.     LHLD    L0787
  615.     MOV    A,M
  616.     LHLD    L0789
  617.     INX    H
  618.     INX    H
  619.     INX    H
  620.     CMP    M
  621.     JNZ    L0697
  622.     MVI    A,0
  623.     STA    L0784
  624.     JMP    L05DB
  625. MODOUT:
  626.     STA    L05DA
  627.     SHLD    L05D5
  628.     XCHG
  629.     SHLD    L05D7
  630. MODLP:
  631.     CALL    MSTSV
  632.     STA    STATUS
  633.     ANI    1
  634.     JZ    MODLP
  635.     LDA    STATUS
  636.     ANI    4
  637.     JZ    MODLP
  638.     LHLD    L05D7
  639.     MOV    A,M
  640.     CALL    OUTPORT
  641. L0587:
  642.     CALL    MSTSV
  643.     ANI    4
  644.     JZ    L0587
  645.     LDA    L05DA
  646.     CPI    1
  647.     RNZ
  648.     LHLD    L05D5
  649.     INX    H
  650.     INX    H
  651.     MOV    D,M
  652.     INX    H
  653.     INX    H
  654.     INX    H
  655.     MOV    E,M
  656.     LHLD    L05D7
  657.     MOV    A,M
  658.     XCHG
  659.     JMP    L05C6
  660. ;
  661. CRCADD:
  662.     XRA    H
  663.     MOV    B,A
  664.     RLC
  665.     RLC
  666.     RLC
  667.     RLC
  668.     XRA    B
  669.     MOV    C,A
  670.     ANI    0F0H
  671.     MOV    D,A
  672.     ADD    C
  673.     MOV    E,A
  674.     MOV    A,D
  675.     ACI    0
  676.     XRA    L
  677.     MOV    H,A
  678.     MOV    A,B
  679.     ANI    0F0H
  680.     MOV    B,A
  681.     XRA    E
  682.     MOV    L,A
  683.     MOV    A,B
  684.     RRC
  685.     RRC
  686.     RRC
  687.     XRA    H
  688.     MOV    H,A
  689.     RET
  690. ;
  691. L05C6:
  692.     CALL    CRCADD
  693.     XCHG
  694.     LHLD    L05D5
  695.     INX    H
  696.     INX    H
  697.     MOV    M,D
  698.     INX    H
  699.     INX    H
  700.     INX    H
  701.     MOV    M,E
  702.     RET
  703. ;
  704. L05D5:    DW    0
  705. L05D7:    DW    0
  706. STATUS: DB    0
  707. L05DA:    DB    0
  708. ;
  709. L05DB:
  710.     LHLD    L0789
  711.     XCHG
  712.     LHLD    L078F
  713.     XCHG
  714.     MVI    A,1
  715.     CALL    MODOUT
  716.     CALL    MSTSV
  717.     ANI    2
  718.     JZ    L05FA
  719.     LHLD    L0789
  720.     MVI    A,2
  721.     ORA    M
  722.     MOV    M,A
  723.     JMP    L077D
  724. ;
  725. L05FA:
  726.     LDA    L078B
  727.     CPI    1
  728.     JZ    L0612
  729.     LHLD    L0789
  730.     XCHG
  731.     LHLD    L0792
  732.     XCHG
  733.     MVI    A,1
  734.     CALL    MODOUT
  735.     JMP    L063E
  736. ;
  737. L0612:
  738.     LHLD    NAMPTR
  739.     INX    H
  740.     MOV    A,M
  741.     CPI    0
  742.     JZ    NONAMS
  743.     MVI    A,2
  744.     STA    FILFLG
  745.     LHLD    L0789
  746.     XCHG
  747.     LHLD    L078C
  748.     XCHG
  749.     MVI    A,1
  750.     CALL    MODOUT
  751.     JMP    L063E
  752. ;
  753. NONAMS:
  754.     LHLD    L0789
  755.     XCHG
  756.     LHLD    L0795
  757.     XCHG
  758.     MVI    A,1
  759.     CALL    MODOUT
  760. L063E:
  761.     CALL    MSTSV
  762.     ANI    2
  763.     JZ    L0650
  764.     LHLD    L0789
  765.     MVI    A,2
  766.     ORA    M
  767.     MOV    M,A
  768.     JMP    L077D
  769. ;
  770. L0650:
  771.     LHLD    L0789
  772.     INX    H
  773.     INX    H
  774.     SHLD    L0798
  775.     LHLD    L0789
  776.     XCHG
  777.     LHLD    L0798
  778.     XCHG
  779.     MVI    A,0
  780.     CALL    MODOUT
  781.     CALL    MSTSV
  782.     ANI    2
  783.     JNZ    L068D
  784.     LHLD    L0789
  785.     INX    H
  786.     INX    H
  787.     INX    H
  788.     INX    H
  789.     INX    H
  790.     SHLD    L0798
  791.     LHLD    L0789
  792.     XCHG
  793.     LHLD    L0798
  794.     XCHG
  795.     MVI    A,0
  796.     CALL    MODOUT
  797.     CALL    MSTSV
  798.     ANI    2
  799.     JZ    L077D
  800. L068D:
  801.     LHLD    L0789
  802.     MVI    A,2
  803.     ORA    M
  804.     MOV    M,A
  805.     JMP    L077D
  806. ;
  807. L0697:
  808.     CALL    MSTSV
  809.     ANI    2
  810.     JZ    L06AE
  811.     LHLD    L0789
  812.     MVI    A,2
  813.     ORA    M
  814.     MOV    M,A
  815.     MVI    A,0
  816.     STA    L0784
  817.     JMP    L077D
  818. ;
  819. L06AE:
  820.     LDA    L0783
  821.     SUI    1
  822.     JNZ    L071E
  823.     LHLD    L0789
  824.     INX    H
  825.     INX    H
  826.     INX    H
  827.     MOV    A,M
  828.     INR    A
  829.     MOV    M,A
  830.     LHLD    L0789
  831.     XCHG
  832.     LHLD    L0785
  833.     XCHG
  834.     MVI    A,1
  835.     CALL    MODOUT
  836.     LHLD    L0785
  837.     INX    H
  838.     SHLD    L0785
  839.     CALL    MSTSV
  840.     ANI    2
  841.     JZ    L06EA
  842.     LHLD    L0789
  843.     MVI    A,2
  844.     ORA    M
  845.     MOV    M,A
  846.     MVI    A,0
  847.     STA    L0784
  848.     JMP    L077D
  849. ;
  850. L06EA:
  851.     LHLD    L0789
  852.     INX    H
  853.     INX    H
  854.     INX    H
  855.     MOV    A,M
  856.     INR    A
  857.     MOV    M,A
  858.     LHLD    L0789
  859.     XCHG
  860.     LHLD    L0785
  861.     XCHG
  862.     MVI    A,1
  863.     CALL    MODOUT
  864.     LHLD    L0785
  865.     INX    H
  866.     SHLD    L0785
  867.     DCX    H
  868.     MVI    A,2
  869.     CMP    M
  870.     JNZ    L0716
  871.     MVI    A,0
  872.     STA    L0783
  873.     JMP    L077D
  874. ;
  875. L0716:
  876.     MVI    A,0
  877.     STA    L0784
  878.     JMP    L077D
  879. ;
  880. L071E:
  881.     LHLD    L0789
  882.     INX    H
  883.     INX    H
  884.     INX    H
  885.     MOV    A,M
  886.     INR    A
  887.     MOV    M,A
  888.     LHLD    L0789
  889.     XCHG
  890.     LHLD    L0785
  891.     XCHG
  892.     MVI    A,1
  893.     CALL    MODOUT
  894.     LHLD    L0785
  895.     INX    H
  896.     SHLD    L0785
  897.     CALL    MSTSV
  898.     ANI    2
  899.     JZ    L0752
  900.     LHLD    L0789
  901.     MVI    A,2
  902.     ORA    M
  903.     MOV    M,A
  904.     MVI    A,0
  905.     STA    L0784
  906.     JMP    L077D
  907. ;
  908. L0752:
  909.     LHLD    L0785
  910.     DCX    H
  911.     MVI    A,10H
  912.     CMP    M
  913.     JNZ    L077D
  914.     LHLD    L0789
  915.     XCHG
  916.     LHLD    L078F
  917.     XCHG
  918.     MVI    A,1
  919.     CALL    MODOUT
  920.     CALL    MSTSV
  921.     ANI    2
  922.     JZ    L077D
  923.     LHLD    L0789
  924.     MVI    A,2
  925.     ORA    M
  926.     MOV    M,A
  927.     MVI    A,0
  928.     STA    L0784
  929. L077D:
  930.     JMP    L0545
  931. ;
  932. L0780:
  933.     RET
  934. ;
  935. L0781:    DW    0
  936. L0783:    DB    0
  937. L0784:    DB    0
  938. L0785:    DW    0
  939. L0787:    DW    0
  940. L0789:    DW    0
  941. L078B:    DB    0
  942. L078C:    DW    L078E
  943. L078E:    DB    1BH
  944. L078F:    DW    L0791
  945. L0791:    DB    10H
  946. L0792:    DW    L0794
  947. L0794:    DB    3
  948. L0795:    DW    L0797
  949. L0797:    DB    17H
  950. L0798:    DW    0
  951. ;
  952. L079A:
  953.     LXI    H,L1511
  954.     LXI    D,STSTOR
  955.     LXI    B,L12B4
  956.     MVI    A,0
  957.     CALL    L050E
  958. L07A8:
  959.     LDA    L1510
  960.     SUI    1
  961.     JNZ    L0CC8
  962.     LDA    STSTOR
  963.     CPI    0
  964.     JZ    L0989
  965.     JMP    ERRORS
  966. ;
  967. ERRCHK:
  968.     SHLD    STSPTR
  969.     MVI    A,80H
  970.     ANA    M
  971.     JZ    PARCHK
  972.     PRINT    '**** FRAMING ERROR ****$'
  973. PARCHK:
  974.     LHLD    STSPTR
  975.     MVI    A,40H
  976.     ANA    M
  977.     JZ    OVRCHK
  978.     PRINT    '**** PARITY ERROR ****$'
  979. OVRCHK:
  980.     LHLD    STSPTR
  981.     MVI    A,20H
  982.     ANA    M
  983.     JZ    BCCHCK
  984.     PRINT    '**** OVERRUN ERROR ****$'
  985. BCCHCK:
  986.     LHLD    STSPTR
  987.     MVI    A,10H
  988.     ANA    M
  989.     JZ    LOSCHK
  990.     PRINT    '**** BCC ERROR ****$'
  991. LOSCHK:
  992.     LHLD    STSPTR
  993.     MVI    A,8
  994.     ANA    M
  995.     JZ    TIMCHK
  996.     PRINT    '**** LOST DATA ERROR ****$'
  997. TIMCHK:
  998.     LHLD    STSPTR
  999.     MVI    A,4
  1000.     ANA    M
  1001.     JZ    EXCHEK
  1002.     PRINT    '**** TIME OUT ERROR ****$'
  1003. EXCHEK:
  1004.     LHLD    STSPTR
  1005.     MVI    A,2
  1006.     ANA    M
  1007.     JZ    LENCHK
  1008.     PRINT    '**** EXCEPTION ERROR ****$'
  1009. LENCHK:
  1010.     LHLD    STSPTR
  1011.     MVI    A,1
  1012.     ANA    M
  1013.     JZ    HITS
  1014.     PRINT    '**** LENGTH ERROR ****$'
  1015. ;
  1016. HITS:
  1017.     LDA    ERRHIT
  1018.     INR    A
  1019.     STA    ERRHIT
  1020.     CPI    MAXERR
  1021.     RNZ
  1022.     PRINT    '**** ABORTED, TOO MANY ERRORS ****$'
  1023.     XRA    A
  1024.     STA    L12A8
  1025.     JMP    EXIT
  1026. ;
  1027. STSPTR: DW    0
  1028. ;
  1029. ERRORS:
  1030.     LXI    H,STSTOR
  1031.     CALL    ERRCHK
  1032.     JMP    L0986
  1033. ;
  1034. STOPCK: 
  1035.     MVI    C,11
  1036.     CALL    5
  1037.     ORA    A    ;Character at console?
  1038.     RZ        ;No
  1039.     MVI    C,1    ;Yes
  1040.     CALL    5
  1041.     CPI    3    ;Abort (control-c)?
  1042.     RNZ        ;No
  1043.     PRINT    '**** ABORTED BY USER ****$'
  1044.     XRA    A
  1045.     STA    L12A8
  1046.     JMP    EXIT
  1047. ;
  1048. L0986:
  1049.     CALL    STOPCK
  1050. L0989:
  1051.     JMP    L0C38
  1052. ;
  1053. L098C:
  1054.     SHLD    L0C33
  1055.     XCHG
  1056.     SHLD    L0C36
  1057.     STA    L0C35
  1058.     LHLD    L0C33
  1059.     SHLD    L0C31
  1060.     MVI    A,1
  1061.     STA    L0C2C
  1062.     STA    L0C2D
  1063.     STA    L0C2F
  1064.     MVI    A,0
  1065.     STA    L0C2E
  1066.     LHLD    L0C36
  1067.     MOV    M,A
  1068.     INX    H
  1069.     MOV    M,A
  1070.     INX    H
  1071.     MVI    A,0FFH
  1072.     MOV    M,A
  1073.     INX    H
  1074.     MVI    A,0
  1075.     MOV    M,A
  1076.     INX    H
  1077.     MOV    M,A
  1078.     INX    H
  1079.     MVI    A,0FFH
  1080.     MOV    M,A
  1081. L09C0:
  1082.     LDA    L0C2F
  1083.     SUI    1
  1084.     JNZ    L0C2B
  1085.     LHLD    L0C36
  1086.     INX    H
  1087.     INX    H
  1088.     INX    H
  1089.     LDA    L0C35
  1090.     CMP    M
  1091.     JNZ    L0A0A
  1092.     MVI    A,0
  1093.     STA    L0C2F
  1094.     LHLD    L0C31
  1095.     DCX    H
  1096.     DCX    H
  1097.     MOV    A,M
  1098.     CPI    10H
  1099.     JNZ    L0A00
  1100.     INX    H
  1101.     MOV    A,M
  1102.     CPI    6
  1103.     JZ    L0C28
  1104.     CPI    15H
  1105.     JZ    L0C28
  1106.     CPI    5
  1107.     JZ    L0C28
  1108.     CPI    3
  1109.     JZ    L0C28
  1110.     CPI    17H
  1111.     JZ    L0C28
  1112. L0A00:
  1113.     LHLD    L0C36
  1114.     MVI    A,1
  1115.     ORA    M
  1116.     MOV    M,A
  1117.     JMP    L0C28
  1118. ;
  1119. L0A0A:
  1120.     LHLD    L0C36
  1121.     MVI    A,0
  1122.     MOV    M,A
  1123.     JMP    L0AAF
  1124. ;
  1125. GFMODM:
  1126.     SHLD    HLSAVE
  1127.     STA    ASAVE
  1128.     LHLD    L0AAB
  1129.     SHLD    L0AA9
  1130. L0A1F:
  1131.     CALL    MSTSV
  1132.     STA    L0AAE
  1133.     LDA    L0AAE
  1134.     ANI    10H
  1135.     JZ    L0A38
  1136.     CALL    ERRSET
  1137.     LHLD    HLSAVE
  1138.     MVI    A,20H
  1139.     ORA    M
  1140.     MOV    M,A
  1141.     RET
  1142. ;
  1143. L0A38:
  1144.     LDA    L0AAE
  1145.     ANI    8
  1146.     JZ    L0A4B
  1147.     CALL    ERRSET
  1148.     LHLD    HLSAVE
  1149.     MVI    A,40H
  1150.     ORA    M
  1151.     MOV    M,A
  1152.     RET
  1153. ;
  1154. L0A4B:
  1155.     LDA    L0AAE
  1156.     ANI    2
  1157.     JZ    L0A85
  1158.     CALL    INPORT
  1159.     STA    L0AAE
  1160.     LDA    ASAVE
  1161.     CPI    1
  1162.     JZ    L0A65
  1163.     LDA    L0AAE
  1164.     RET
  1165. ;
  1166. L0A65:
  1167.     LHLD    HLSAVE
  1168.     INX    H
  1169.     INX    H
  1170.     MOV    D,M
  1171.     INX    H
  1172.     INX    H
  1173.     INX    H
  1174.     MOV    E,M
  1175.     LDA    L0AAE
  1176.     XCHG
  1177.     CALL    CRCADD
  1178.     XCHG
  1179.     LHLD    HLSAVE
  1180.     INX    H
  1181.     INX    H
  1182.     MOV    M,D
  1183.     INX    H
  1184.     INX    H
  1185.     INX    H
  1186.     MOV    M,E
  1187.     LDA    L0AAE
  1188.     RET
  1189. ;
  1190. L0A85:
  1191.     LHLD    L0AA9
  1192.     DCX    H
  1193.     MVI    A,0
  1194.     CMP    H
  1195.     JZ    L0A95
  1196.     SHLD    L0AA9
  1197.     JMP    L0A1F
  1198. ;
  1199. L0A95:
  1200.     CMP    L
  1201.     JZ    L0A9F
  1202.     SHLD    L0AA9
  1203.     JMP    L0A1F
  1204. ;
  1205. L0A9F:
  1206.     LHLD    HLSAVE
  1207.     MVI    A,4
  1208.     ORA    M
  1209.     MOV    M,A
  1210.     RET
  1211. ;
  1212. HLSAVE: DW    0
  1213. L0AA9:    DW    0
  1214. L0AAB:    DW    0
  1215. ASAVE:    DB    0
  1216. L0AAE:    DB    0
  1217. ;
  1218. L0AAF:
  1219.     LHLD    L0C36
  1220.     MVI    A,1
  1221.     CALL    GFMODM
  1222.     STA    L0C30
  1223.     LHLD    L0C36
  1224.     MVI    A,0
  1225.     CMP    M
  1226.     JZ    L0ACB
  1227.     MVI    A,0
  1228.     STA    L0C2F
  1229.     JMP    L0C28
  1230. ;
  1231. L0ACB:
  1232.     LDA    L0C2C
  1233.     SUI    1
  1234.     JNZ    L0B43
  1235.     LDA    L0C2D
  1236.     SUI    1
  1237.     JNZ    L0AFB
  1238.     LDA    L0C30
  1239.     CPI    10H
  1240.     JNZ    L0AEB
  1241.     MVI    A,0
  1242.     STA    L0C2D
  1243.     JMP    L0B2A
  1244. L0AEB:
  1245.     LHLD    L0C36
  1246.     MVI    A,8
  1247.     ORA    M
  1248.     XCHG
  1249.     STAX    D
  1250.     MVI    A,0
  1251.     STA    L0C2F
  1252.     JMP    L0B2A
  1253. ;
  1254. L0AFB:
  1255.     LDA    L0C30
  1256.     CPI    2
  1257.     JNZ    L0B0B
  1258.     MVI    A,0
  1259.     STA    L0C2C
  1260.     JMP    L0B2A
  1261. ;
  1262. L0B0B:
  1263.     LDA    L0C30
  1264.     CPI    6
  1265.     JZ    L0B25
  1266.     CPI    15H
  1267.     JZ    L0B25
  1268.     CPI    5
  1269.     JZ    L0B25
  1270.     MVI    A,8
  1271.     LHLD    L0C36
  1272.     ORA    M
  1273.     XCHG
  1274.     STAX    D
  1275. L0B25:
  1276.     MVI    A,0
  1277.     STA    L0C2F
  1278. L0B2A:
  1279.     LDA    L0C30
  1280.     LHLD    L0C31
  1281.     XCHG
  1282.     STAX    D
  1283.     INX    D
  1284.     XCHG
  1285.     SHLD    L0C31
  1286.     LHLD    L0C36
  1287.     INX    H
  1288.     INX    H
  1289.     INX    H
  1290.     MOV    A,M
  1291.     INR    A
  1292.     MOV    M,A
  1293.     JMP    L0C28
  1294. ;
  1295. L0B43:
  1296.     LDA    L0C2E
  1297.     SUI    1
  1298.     JNZ    L0C07
  1299.     LDA    L0C30
  1300.     CPI    10H
  1301.     JNZ    L0B6F
  1302.     MVI    A,0
  1303.     STA    L0C2E
  1304.     LDA    L0C30
  1305.     LHLD    L0C31
  1306.     MOV    M,A
  1307.     INX    H
  1308.     SHLD    L0C31
  1309.     LHLD    L0C36
  1310.     INX    H
  1311.     INX    H
  1312.     INX    H
  1313.     MOV    A,M
  1314.     INR    A
  1315.     MOV    M,A
  1316.     JMP    L0C28
  1317. ;
  1318. L0B6F:
  1319.     LDA    L0C30
  1320.     CPI    17H
  1321.     JZ    L0B9F
  1322.     CPI    3
  1323.     JZ    L0B9F
  1324.     CPI    1BH
  1325.     JZ    L0B9F
  1326.     LHLD    L0C36
  1327.     MVI    A,8
  1328.     ORA    M
  1329.     MOV    M,A
  1330.     LDA    L0C30
  1331.     LHLD    L0C31
  1332.     MOV    M,A
  1333.     INX    H
  1334.     SHLD    L0C31
  1335.     LHLD    L0C36
  1336.     INX    H
  1337.     INX    H
  1338.     INX    H
  1339.     MOV    A,M
  1340.     INR    A
  1341.     MOV    M,A
  1342.     JMP    L0BFF
  1343. ;
  1344. L0B9F:
  1345.     MVI    A,10H
  1346.     LHLD    L0C31
  1347.     MOV    M,A
  1348.     INX    H
  1349.     LDA    L0C30
  1350.     MOV    M,A
  1351.     LHLD    L0C36
  1352.     INX    H
  1353.     INX    H
  1354.     INX    H
  1355.     MOV    A,M
  1356.     INR    A
  1357.     INR    A
  1358.     MOV    M,A
  1359.     LHLD    L0C36
  1360.     MVI    A,0
  1361.     CALL    GFMODM
  1362.     STA    L0C30
  1363.     LHLD    L0C36
  1364.     MVI    A,0
  1365.     CMP    M
  1366.     JNZ    L0BFF
  1367.     INX    H
  1368.     LDA    L0C30
  1369.     MOV    M,A
  1370.     LHLD    L0C36
  1371.     MVI    A,0
  1372.     CALL    GFMODM
  1373.     STA    L0C30
  1374.     LHLD    L0C36
  1375.     MVI    A,0
  1376.     CMP    M
  1377.     JNZ    L0BFF
  1378.     INX    H
  1379.     INX    H
  1380.     INX    H
  1381.     INX    H
  1382.     LDA    L0C30
  1383.     MOV    M,A
  1384.     INX    H
  1385.     CMP    M
  1386.     JNZ    L0BF8
  1387.     LHLD    L0C36
  1388.     INX    H
  1389.     MOV    A,M
  1390.     INX    H
  1391.     CMP    M
  1392.     JZ    L0BFF
  1393. L0BF8:
  1394.     MVI    A,10H
  1395.     LHLD    L0C36
  1396.     ORA    M
  1397.     MOV    M,A
  1398. L0BFF:
  1399.     MVI    A,0
  1400.     STA    L0C2F
  1401.     JMP    L0C28
  1402. ;
  1403. L0C07:
  1404.     LDA    L0C30
  1405.     CPI    10H
  1406.     JNZ    L0C17
  1407.     MVI    A,1
  1408.     STA    L0C2E
  1409.     JMP    L0C28
  1410. ;
  1411. L0C17:
  1412.     LHLD    L0C31
  1413.     MOV    M,A
  1414.     INX    H
  1415.     SHLD    L0C31
  1416.     LHLD    L0C36
  1417.     INX    H
  1418.     INX    H
  1419.     INX    H
  1420.     MOV    A,M
  1421.     INR    A
  1422.     MOV    M,A
  1423. L0C28:
  1424.     JMP    L09C0
  1425. L0C2B:
  1426.     RET
  1427. ;
  1428. L0C2C:    DB    0
  1429. L0C2D:    DB    0
  1430. L0C2E:    DB    0
  1431. L0C2F:    DB    0
  1432. L0C30:    DB    0
  1433. L0C31:    DW    0
  1434. L0C33:    DW    0
  1435. L0C35:    DB    0
  1436. L0C36:    DW    0
  1437. ;
  1438. L0C38:
  1439.     LXI    H,L1380
  1440.     LXI    D,L1519
  1441.     MVI    A,2
  1442.     CALL    L098C
  1443.     LDA    L1519
  1444.     CPI    0
  1445.     JZ    L0C65
  1446.     LXI    H,L1519
  1447.     CALL    ERRCHK
  1448.     CALL    STOPCK
  1449.     LXI    H,L1511
  1450.     LXI    D,STSTOR
  1451.     LXI    B,L12B4
  1452.     MVI    A,0
  1453.     CALL    L050E
  1454.     JMP    L0CC5
  1455. ;
  1456. L0C65:
  1457.     LDA    L1380
  1458.     CPI    10H
  1459.     JNZ    L0C7D
  1460.     LDA    SYNCB
  1461.     CPI    6
  1462.     JNZ    L0C7D
  1463.     MVI    A,0
  1464.     STA    L1510
  1465.     JMP    L0CC5
  1466. L0C7D:
  1467.     PRINT    '**** CONNECTION IS STILL IN PROGRESS ****$'
  1468.     CALL    STOPCK
  1469.     LXI    H,L1511
  1470.     LXI    D,STSTOR
  1471.     LXI    B,L12B4
  1472.     MVI    A,0
  1473.     CALL    L050E
  1474. L0CC5:
  1475.     JMP    L07A8
  1476. ;
  1477. L0CC8:
  1478.     XRA    A
  1479.     STA    ERRHIT    ;Reset error count
  1480.     PRINT    '**** REMOTE CPU IS NOW CONNECTED ****$'
  1481.     RET
  1482. ;
  1483. SNDFIL:
  1484.     MVI    A,1
  1485.     STA    L151F
  1486.     STA    L1520
  1487.     MVI    A,0
  1488.     STA    ERRCNT
  1489.     STA    ERRSFL
  1490.     LDA    L1522
  1491.     SUI    1
  1492.     JZ    OPENOK
  1493.     LHLD    NAMPTR
  1494.     LXI    D,DFCB
  1495.     MVI    C,0CH
  1496. MV1:
  1497.     MOV    A,M
  1498.     STAX    D
  1499.     INX    H
  1500.     INX    D
  1501.     DCR    C
  1502.     JNZ    MV1
  1503.     LXI    D,L12B8
  1504.     LHLD    NAMPTR
  1505.     INX    H
  1506.     MVI    C,0BH
  1507. MV2:
  1508.     MOV    A,M
  1509.     STAX    D
  1510.     INX    H
  1511.     INX    D
  1512.     DCR    C
  1513.     JNZ    MV2
  1514.     SHLD    NAMPTR
  1515.     MVI    A,1
  1516.     STA    L1522
  1517.     MVI    B,8
  1518.     LXI    H,DFCB+1
  1519.     LXI    D,FILNAM
  1520. MV3:
  1521.     MOV    A,M
  1522.     STAX    D
  1523.     INX    H
  1524.     INX    D
  1525.     DCR    B
  1526.     JNZ    MV3
  1527.     INX    D
  1528.     MVI    B,3
  1529. MV4:
  1530.     MOV    A,M
  1531.     STAX    D
  1532.     INX    H
  1533.     INX    D
  1534.     DCR    B
  1535.     JNZ    MV4
  1536. FILNAM    EQU    $+24+3
  1537.     PRINT    '---- TRANSMITING FILE --------.--- ----$'
  1538.     JMP    BLDFCB
  1539. ;
  1540. MOVE:
  1541.     MOV    A,M
  1542.     STAX    D
  1543.     INX    H
  1544.     INX    D
  1545.     DCR    C
  1546.     JNZ    MOVE
  1547.     RET
  1548. ;
  1549. BLDFCB:
  1550.     LXI    H,DFCB
  1551.     LXI    D,MYFCB
  1552.     MVI    C,0CH
  1553.     CALL    MOVE
  1554.     JMP    PSTFCB
  1555. ;
  1556. MYFCB:    DB    '****$',0EH,9,11H,80H,0CH
  1557.     DB    0CDH,5
  1558.     DB    0,0CDH,'4',9,'!',11H,15H,11H
  1559.     DB    13H,15H,1,0B4H,12H,'>',0,0CDH
  1560.     DB    0EH,5,0C3H,0A8H
  1561. FILREC: DB    7
  1562. FILBAS: DW    L1B25
  1563. BUFLEN: DW    L1380
  1564. BUFPTR: DW    L2A0A
  1565. ;
  1566. PSTFCB:
  1567.     JMP    OPNFCB
  1568. ;
  1569. RDFILE:
  1570.     LHLD    BUFLEN
  1571.     XCHG
  1572.     LHLD    BUFPTR
  1573.     MOV    A,L
  1574.     SUB    E
  1575.     MOV    A,H
  1576.     SBB    D
  1577.     JC    NOREAD
  1578.     LXI    H,0
  1579.     SHLD    BUFPTR
  1580. RDLOOP:
  1581.     XCHG
  1582.     LHLD    BUFLEN
  1583.     MOV    A,E
  1584.     SUB    L
  1585.     MOV    A,D
  1586.     SBB    H
  1587.     JNC    L0E19
  1588.     LHLD    FILBAS
  1589.     DAD    D
  1590.     XCHG
  1591.     MVI    C,1AH
  1592.     CALL    5
  1593.     LXI    D,MYFCB
  1594.     MVI    C,14H
  1595.     CALL    5
  1596.     ORA    A
  1597.     JNZ    BADRD
  1598.     LXI    D,DBUF
  1599.     LHLD    BUFPTR
  1600.     DAD    D
  1601.     SHLD    BUFPTR
  1602.     JMP    RDLOOP
  1603. ;
  1604. BADRD:
  1605.     LHLD    BUFPTR
  1606.     SHLD    BUFLEN
  1607. L0E19:
  1608.     LXI    D,DBUF
  1609.     MVI    C,1AH
  1610.     CALL    5
  1611.     LXI    H,0
  1612.     SHLD    BUFPTR
  1613. NOREAD:
  1614.     XCHG
  1615.     LHLD    FILBAS
  1616.     DAD    D
  1617.     XCHG
  1618.     LHLD    BUFLEN
  1619.     MOV    A,L
  1620.     ORA    H
  1621.     MVI    A,1AH
  1622.     RZ
  1623.     LDAX    D
  1624.     LHLD    BUFPTR
  1625.     INX    H
  1626.     SHLD    BUFPTR
  1627.     RET
  1628. ;
  1629. OPNFCB:
  1630.     XRA    A
  1631.     STA    MYFCB+EXT
  1632.     STA    FILREC
  1633.     LXI    H,1380H ;LENGTH OF BUFFER
  1634.     SHLD    BUFLEN
  1635.     SHLD    BUFPTR
  1636.     MVI    C,0FH
  1637.     LXI    D,MYFCB
  1638.     CALL    5
  1639.     INR    A
  1640.     JNZ    OPENOK
  1641.     MVI    C,9
  1642.     LXI    D,NOFEMS
  1643.     CALL    5
  1644.     JMP    0
  1645. ;
  1646. NOFEMS: DB    CR,LF,'NO SOURCE FILE$'
  1647. ;
  1648. OPENOK:
  1649.     CALL    RDFILE
  1650.     JNZ    L0E84
  1651.     MVI    A,1
  1652.     STA    FILFLG
  1653.     JMP    L0EF4
  1654. ;
  1655. L0E84:
  1656.     MVI    C,80H
  1657.     LXI    H,L1448
  1658. L0E89:
  1659.     MOV    M,A
  1660.     INX    H
  1661.     SHLD    L12AE
  1662.     DCR    C
  1663.     JZ    L0EF4
  1664.     MOV    A,C
  1665.     STA    L12B2
  1666.     CALL    RDFILE
  1667.     JNZ    OKRD
  1668.     PRINT    '**** BUG 2 IN PROGRAM CONTACT SOFTWARE TOOLS ****$'
  1669.     MVI    A,1
  1670.     STA    FILFLG
  1671.     STA    ERRSFL
  1672.     RET
  1673. ;
  1674. OKRD:
  1675.     STA    L12B3
  1676.     LDA    L12B2
  1677.     MOV    C,A
  1678.     LHLD    L12AE
  1679.     LDA    L12B3
  1680.     JMP    L0E89
  1681. ;
  1682. L0EF4:
  1683.     LDA    L151F
  1684.     SUI    1
  1685.     JNZ    BLOKCK
  1686.     LDA    FILFLG
  1687.     CPI    0
  1688.     JZ    L0F2E
  1689.     LDA    L12A9
  1690.     SUI    0
  1691.     JNZ    L0F1D
  1692.     LXI    H,L12B5
  1693.     LXI    D,STSTOR
  1694.     LXI    B,L12AC
  1695.     MVI    A,1
  1696.     CALL    L050E
  1697.     JMP    L0F55
  1698. ;
  1699. L0F1D:
  1700.     LXI    H,L12B5
  1701.     LXI    D,STSTOR
  1702.     LXI    B,L12AD
  1703.     MVI    A,1
  1704.     CALL    L050E
  1705.     JMP    L0F55
  1706. ;
  1707. L0F2E:
  1708.     LDA    L12A9
  1709.     SUI    0
  1710.     JNZ    L0F47
  1711.     LXI    H,L12B5
  1712.     LXI    D,STSTOR
  1713.     LXI    B,L12AC
  1714.     MVI    A,0
  1715.     CALL    L050E
  1716.     JMP    L0F55
  1717. ;
  1718. L0F47:
  1719.     LXI    H,L12B5
  1720.     LXI    D,STSTOR
  1721.     LXI    B,L12AD
  1722.     MVI    A,0
  1723.     CALL    L050E
  1724. L0F55:
  1725.     LDA    STSTOR
  1726.     CPI    0
  1727.     JZ    L1009
  1728. L0F5D:
  1729.     LDA    L1520
  1730.     SUI    1
  1731.     JNZ    L1006
  1732.     LXI    H,STSTOR
  1733.     CALL    ERRCHK
  1734.     LDA    ERRCNT
  1735.     INR    A
  1736.     STA    ERRCNT
  1737.     LDA    ERRCNT
  1738.     SUI    0C8H
  1739.     JC    RETRY
  1740.     JZ    RETRY
  1741.     APRINT    '**** PERMANENT TRANSMISSION ERROR - PROGRAM ABORTING ****$'
  1742.     MVI    A,1
  1743.     STA    FILFLG
  1744.     STA    ERRSFL
  1745.     MVI    A,0
  1746.     STA    L151F
  1747.     STA    L1520
  1748. RETRY:
  1749.     LXI    H,L1380
  1750.     LXI    D,L1519
  1751.     MVI    A,2
  1752.     CALL    L098C
  1753.     LDA    L1519
  1754.     SUI    0
  1755.     JZ    L0FFE
  1756.     LXI    H,L1519
  1757.     CALL    ERRCHK
  1758.     LXI    H,L1523
  1759.     LXI    D,STSTOR
  1760.     LXI    B,L12B4
  1761.     MVI    A,0
  1762.     CALL    L050E
  1763.     JMP    L1003
  1764. ;
  1765. L0FFE:
  1766.     MVI    A,0
  1767.     STA    L1520
  1768. L1003:
  1769.     JMP    L0F5D
  1770. ;
  1771. L1006:
  1772.     JMP    L11E5
  1773. ;
  1774. L1009:
  1775.     LDA    L1520
  1776.     SUI    1
  1777.     JNZ    L11E5
  1778.     LXI    H,L1380
  1779.     LXI    D,L1519
  1780.     MVI    A,2
  1781.     CALL    L098C
  1782.     LDA    L1519
  1783.     SUI    0
  1784.     JZ    L10B7
  1785.     LDA    FILFLG
  1786.     SUI    0
  1787.     JZ    L1034
  1788.     LDA    L1519
  1789.     SUI    4
  1790.     JZ    L10C7
  1791. L1034:
  1792.     LXI    H,L1519
  1793.     CALL    ERRCHK
  1794.     LDA    ERRCNT
  1795.     INR    A
  1796.     STA    ERRCNT
  1797.     LDA    ERRCNT
  1798.     SUI    0C8H
  1799.     JC    RETRY2
  1800.     JZ    RETRY2
  1801.     APRINT    '**** PERMANENT TRANSMISSION ERROR - PROGRAM ABORTING ****$'
  1802.     MVI    A,1
  1803.     STA    FILFLG
  1804.     STA    ERRSFL
  1805.     MVI    A,0
  1806.     STA    L151F
  1807.     STA    L1520
  1808.     JMP    L10B4
  1809. ;
  1810. RETRY2:
  1811.     LXI    H,L1523
  1812.     LXI    D,STSTOR
  1813.     LXI    B,L12B4
  1814.     MVI    A,0
  1815.     CALL    L050E
  1816. L10B4:
  1817.     JMP    RETRY3
  1818. ;
  1819. L10B7:
  1820.     LDA    L1380
  1821.     CPI    10H
  1822.     JNZ    L10E9
  1823.     LDA    SYNCB
  1824.     CPI    6
  1825.     JNZ    L10E9
  1826. L10C7:
  1827.     LDA    L12B7
  1828.     INR    A
  1829.     STA    L12B7
  1830.     LXI    H,L1448
  1831.     LXI    D,L12B8
  1832.     MVI    C,80H
  1833. L10D6:
  1834.     MOV    A,M
  1835.     STAX    D
  1836.     INX    H
  1837.     INX    D
  1838.     DCR    C
  1839.     JNZ    L10D6
  1840.     MVI    A,0
  1841.     STA    L151F
  1842.     STA    L1520
  1843.     JMP    RETRY3
  1844. ;
  1845. L10E9:
  1846.     LDA    SYNCB
  1847.     CPI    5
  1848.     JNZ    SYNCOK
  1849.     PRINT    '**** SYNCHRONIZATION ERROR ****$'
  1850.     PRINT    '**** WILL ATTEMPT TO RE-TRANSMIT FILE ****$'
  1851.     XRA    A
  1852.     STA    ERRHIT
  1853.     INR    A
  1854.     STA    ERRSFL
  1855.     INR    A
  1856.     STA    FILFLG
  1857.     LHLD    NAMPTR
  1858.     DCX    H
  1859.     DCX    H
  1860.     DCX    H
  1861.     DCX    H
  1862.     DCX    H
  1863.     DCX    H
  1864.     DCX    H
  1865.     DCX    H
  1866.     DCX    H
  1867.     DCX    H
  1868.     DCX    H
  1869.     DCX    H
  1870.     SHLD    NAMPTR
  1871.     JMP    L11DA
  1872. SYNCOK:
  1873.     MVI    A,0
  1874.     STA    L1520
  1875.     LDA    ERRCNT
  1876.     INR    A
  1877.     STA    ERRCNT
  1878.     LDA    ERRCNT
  1879.     SUI    0C8H
  1880.     JC    RETRY3
  1881.     JZ    RETRY3
  1882.     PRINT    '**** PERMANENT TRANSMISSION ERROR - PROGRAM ABORTING ****$'
  1883.     MVI    A,1
  1884.     STA    FILFLG
  1885.     STA    ERRSFL
  1886. L11DA:
  1887.     MVI    A,0
  1888.     STA    L151F
  1889.     STA    L1520
  1890. RETRY3:
  1891.     JMP    L1009
  1892. ;
  1893. L11E5:
  1894.     MVI    A,1
  1895.     STA    L1520
  1896.     JMP    L0EF4
  1897. BLOKCK:
  1898.     LDA    ERRSFL
  1899.     SUI    1
  1900.     JZ    BKBACK
  1901.     PRINT    '**** BLOCK TRANSMITTED CORRECTLY ****$'
  1902.     XRA    A
  1903.     STA    ERRHIT    ;Reset error count
  1904.     INR    A
  1905.     STA    L12A9
  1906. BKBACK:
  1907.     RET
  1908. ;
  1909. CLNUP:
  1910.     LDA    ERRSFL
  1911.     CPI    0
  1912.     JNZ    CLBACK
  1913.     PRINT    '---- FILE HAS BEEN COMPLETELY TRANSMITTED ----$'
  1914.     PRINT    '**** DISCONNECTING FROM REMOTE CPU ****$'
  1915. CLBACK:
  1916.     RET
  1917. ;
  1918. L12A8:    DB    0
  1919. L12A9:    DB    0
  1920. FILFLG: DB    0
  1921. ERRCNT: DB    0
  1922. L12AC:    DB    0EH
  1923. L12AD:    DB    83H
  1924. L12AE:    DB    0,0
  1925. NAMPTR: DB    0,0
  1926. L12B2:    DB    0
  1927. L12B3:    DB    0
  1928. L12B4:    DB    2
  1929. L12B5:    DB    10H,2
  1930. L12B7:    DB    0
  1931. L12B8:    DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1932.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1933.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1934.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1935.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1936.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1937.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1938.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1939.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1940.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1941.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1942.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1943.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1944.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1945.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1946.     DB    0,0,0,0,0
  1947. L1380:    DB    0
  1948. SYNCB:    DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1949.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1950.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1951.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1952.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1953.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1954.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1955.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1956.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1957.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1958.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1959.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1960.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1961.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1962.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1963.     DB    0,0,0,0
  1964. L1448:    DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1965.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1966.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1967.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1968.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1969.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1970.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1971.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1972.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1973.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1974.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1975.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1976.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1977.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1978.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0
  1979.     DB    0,0,0,0,0
  1980. L1510:    DB    0
  1981. L1511:    DB    10H,5
  1982. STSTOR: DB    0,0,0,0,0,0
  1983. L1519:    DB    0,0,0,0,0,0
  1984. L151F:    DB    0
  1985. L1520:    DB    0
  1986. ERRSFL: DB    0
  1987. L1522:    DB    0
  1988. L1523:    DB    10H,15H
  1989. DROPOUT:
  1990.     DB    0    ;Carrier dropout count
  1991. ERRHIT:    DB    0    ;Error count    
  1992. BUFFER: DB    0
  1993. ;
  1994.     REPT    256    ;GET 2K OF ZEROES
  1995.     DW    0,0,0,0,0,0,0,0
  1996.     ENDM
  1997. ;
  1998. L1B25    EQU    BUFFER+600H
  1999. L2A0A    EQU    BUFFER + (2A0AH-1525H)
  2000. ;
  2001.     END
  2002.