home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG025.ARK / TTYDRV.MAC < prev    next >
Text File  |  1984-04-29  |  2KB  |  106 lines

  1. ;    ====================
  2. ;    :   T T Y D R V    :
  3. ;    ====================
  4. ;
  5. ; DISASSEMBLED AND ANNOTATED TELETYPE DRIVER FROM THE
  6. ; MICROSOFT FORTRAN PACKAGE.
  7. ;    R.C. Minnick - Box 306  -  Ouray, CO 81427
  8. ;
  9. ;
  10. ; VERSION 1.0    6/22/78
  11. ;
  12.     ENTRY    $DRV3
  13.     EXT    $IOERR,$BL,$BF,$ERR,$TTYIN,$TTYOT
  14. ;
  15. ; INDEX TABLE
  16. ;
  17. $DRV3:    DW    FREAD    ;FORMATTED READ
  18.     DW    FWRITE    ;FORMATTED WRITE
  19.     DW    IOERR    ;BINARY READ
  20.     DW    IOERR    ;BINARY WRITE
  21.     DW    EOF    ;REWIND
  22.     DW    EOF    ;BACKSPACE
  23.     DW    EOF    ;ENDFILE
  24. ;
  25. ; EOF DETECTED - RETURN CY=0, ZF=0
  26. ;
  27. EOF:    XRA    A
  28.     RET
  29. ;
  30. ; I/O ERROR DETECTED
  31. ;
  32. IOERR:    JMP    $IOERR
  33. ;
  34. ; FORMATTED READ
  35. ;
  36. FREAD:    XRA    A
  37.     STA    $BL    ;SET BUF LENGTH=0
  38. FILL:    CALL    $TTYIN    ;GET DATUM
  39.     ANI    X'7F'    ;MASK
  40.     CPI    X'0A'    ;BUFFER EMPTY?
  41.     JZ    FILL    ;YES, TRY AGAIN
  42.     PUSH    PSW    ;SAVE DATUM
  43.     LHLD    $BL    ;BUFFER LENGTH
  44.     MVI    H,0    ;HL=BUF LENGTH AS 16 BITS
  45.     XCHG
  46.     LHLD    $BF    ;BUFFER PTR
  47.     DAD    D    ;HL=INDEXED BUF PTR, DE=LENGTH
  48.     POP    PSW    ;DATUM
  49.     MOV    M,A    ;PUT IT IN BUF
  50.     INX    D
  51.     XCHG        ;DE=BUF PTR, HL=NEW LENGTH
  52.     SHLD    $BL    ;SAVE NEW LENGTH
  53.     CPI    X'0D'    ;CRET?
  54.     RZ        ;YES - BUFFER FULL
  55.     MOV    A,L
  56.     CPI    X'80'    ;TOO MANY DATA IN BUF?
  57.     JC    FILL    ;NO
  58.     CALL    $ERR    ;YES - ERROR & RETURN
  59.     STAX    D
  60.     XRA    A
  61.     RET
  62. ;
  63. ; FORMATTED WRITE
  64. ;
  65. FWRITE:    LDA    $BL    ;BUFFER LENGTH
  66.     ORA    A
  67.     RZ        ;RETURN IF BUF EMPTY
  68.     LHLD    $BF    ;BUFFER BASE POINTER
  69.     DCR    A    ;DECREMENT LENGTH
  70.     PUSH    PSW    ;SAVE LENGTH
  71.     MVI    A,X'0D'
  72.     CALL    $TTYOT    ;SEND CRET TO CON:
  73.     MOV    A,M    ;1ST BUF DATUM (CARR CONTROL)
  74.     CPI    "+"    ;CONTROL FOR NO LINE FEED
  75.     JZ    CONFW2
  76.     CPI    "1"    ;CONTROL FOR FORM FEED
  77.     JNZ    CONFW1    ;1 OR 2 LINE FEEDS
  78.     MVI    A,X'0C'
  79.     CALL    $TTYOT    ;DO FORM FEED
  80.     JMP    CONFW2
  81. ; 1 OR 2 LINE FEEDS
  82. CONFW1:    MVI    A,X'0A'    ;FIRST LINE FEED
  83.     CALL    $TTYOT
  84.     MOV    A,M
  85.     CPI    " "    ;CARR CONTROL=SPACE?
  86.     JZ    CONFW2    ;YES, SKIP 2ND LINE FEED
  87.     CPI    "0"    ;0 IS 2 LINE FEEDS
  88.     JNZ    CONFW2
  89.     MVI    A,X'0A'
  90.     CALL    $TTYOT    ;SECOND LINE FEED
  91. ; NO LINE FEED
  92. CONFW2:    POP    PSW    ;CURRENT BUF LENGTH
  93.     INX    H    ;BUF PTR
  94. ; LOOP THROUGH BUFFER
  95. CONLOP:    RZ        ;IF BUF LENGTH=0
  96.     PUSH    PSW    ;SAVE LENGTH
  97.     MOV    A,M    ;DATUM
  98.     INX    H
  99.     CALL    $TTYOT
  100.     POP    PSW
  101.     DCR    A
  102.     JMP    CONLOP
  103. ;
  104. ;
  105.     END
  106.