home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol040 / qumedrv.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.2 KB  |  174 lines

  1. ;****************************************************************
  2. ;    PROM BASED QUME LINE PRINTER CHARACTER PRINT ROUTINE
  3. ;****************************************************************
  4. ;
  5. ;    THIS ROUTINE IS PUT IN PROM AT 0FA00H BECAUSE THERE
  6. ;    WAS NO ROOM FOR IT IN THE BIOS AREA IN TRACK 1 OF
  7. ;    A SYSTEM DISK.
  8. ;
  9. ;    MICHAEL J. KARAS
  10. ;    MICRO RESOURCES
  11. ;    2468 HANSEN CT.
  12. ;    SIMI VALLEY, CA 93065
  13. ;    (805) 527-7922
  14. ;
  15. ;****************************************************************
  16. ;
  17. ; WRITE A CHARACTER TO QUME PRINTER DEVICE.
  18. ;
  19. ;
  20. ;
  21. ;
  22. ;SET PARAMETERS FOR ASSEMBLY
  23. ;
  24. LENHGT    EQU    132        ;PRINTER LINE LENGTH
  25. QUME1    EQU    31H        ;FIRST DATA PORT
  26. QUME2    EQU    QUME1+2        ;SECOND DATA PORT
  27. ;
  28. ;
  29. ;SET TO BASE OF PROM
  30. ;
  31.     ORG    0FA00H
  32. ;
  33. ;
  34. LIST:
  35.     MOV    A,C    ;GET CHAR PASSED FROM BDOS
  36.     PUSH    H
  37.     PUSH    D
  38.     PUSH    PSW
  39.     CPI    20H    ;IS CHAR A SPACE
  40.     LDA    LPTPOS    ;GET CHAR POS
  41.     JM    CONTCH    ;IF IT'S A CONTROL CHAR, GO
  42.     JZ    QSPACE    ;IF IT'S A SPACE, GO DO IT
  43.     CALL    QMOVE    ;IT'S PRINTABLE, MOVE CARRIAGE
  44.     POP    PSW    ;GET CHAR BACK
  45.     PUSH    PSW
  46.     ADD    A    ;SHIFT CHAR LEFT ONE BIT
  47.     CMA        ;ADJUST FOR ACTIVE LOW DATA
  48.     OUT    QUME1    ;SEND TO LATCH
  49.     CALL    WAIT
  50.     MVI    A,0DFH    ;SET CHAR STROBE
  51.     OUT    QUME2
  52.     ORI    20H
  53.     OUT    QUME2    ;RESET CHAR STROBE
  54.     LDA    LPTPOS    ;GET CURR CHAR POS
  55.     LXI    H,LPTLEN    ;GET ADDR OF LENHGT
  56.     CMP    M    ;END OF CARRIAGE?
  57.     JNZ    ENDQME    ;NO, RETURN
  58. QELN:    MVI    C,0DH    ;YES, DO CR
  59.     CALL    LIST    ;PRINT IT (SORT OF)
  60.     JMP    QLF    ;DO LF
  61. ;
  62. CONTCH:    POP    PSW    ;GET CHAR
  63.     PUSH    PSW
  64.     CPI    09H    ;IS IT A TAB?
  65.     CZ    QTAB    ;YES, GO
  66.     CPI    0DH    ;IS IT A CR?
  67.     JZ    QCR    ;YES, GO
  68.     CPI    0AH    ;IS IT A LF?
  69.     JZ    QLF    ;YES, GO
  70.     CPI    0CH    ;IS IT A FF?
  71.     JZ    QFF    ;YES, GO
  72. ENDQME:    POP    PSW    ;ELSE CLEAR STACK
  73.     POP    D
  74.     POP    H
  75.     RET        ;RETURN TO BDOS
  76. ;
  77. QSPACE:    INR    A    ;INC CHAR POS
  78.     LXI    H,LPTLEN    ;CHK FOR END OF LINE
  79.     CMP    M
  80.     JZ    QELN    ;IF SO,DO CRLF
  81.     STA    LPTPOS    ;ELSE STORE NEW POS
  82.     LXI    D,000CH    ;GET CHAR INCREMENT
  83.     LHLD    QMOV    ;GET MOVE VALUE
  84.     DAD    D    ;ADD CHAR INC TO MOVE VAL
  85.     SHLD    QMOV    ;STORE NEW MOVE VALUE
  86.     JMP    ENDQME
  87. ;
  88. QMOVE:    INR    A    ;INC CHAR POS
  89.     STA    LPTPOS    ;STORE IT
  90.     LXI    D,000CH    ;GET CHAR INCREMENT
  91.     LHLD    QMOV    ;GET CURRENT MOVE DISTANCE
  92.     DAD    D    ;ADD INC TO MOVE
  93.     XCHG
  94.     LHLD    QPOS    ;GET CURR QUME POS
  95.     DAD    D    ;ADD THIS MOVE TO POSITION
  96.     SHLD    QPOS    ;SAVE IT
  97. QBAK:    CALL    WAIT    ;WAIT FOR BUFFER READY
  98.     MOV    A,E    ;OUTPUT MOVE COMMAND
  99.     CMA
  100.     OUT    QUME1
  101.     MOV    A,D
  102.     CMA
  103.     OUT    QUME2
  104.     XRI    40H    ;SET CARRIAGE STROBE BIT
  105.     OUT    QUME2
  106.     ORI    40H    ;RESET CAR. STROBE BIT
  107.     OUT    QUME2
  108.     LXI    H,0000
  109.     SHLD    QMOV    ;ZERO MOVE COUNTER
  110.     RET
  111. ;
  112. QCR:    ;QUME CARRIAGE RETURN
  113.     LHLD    QPOS
  114.     MOV    A,H
  115.     ORI    08H
  116.     MOV    H,A
  117.     XCHG
  118.     CALL    QBAK
  119.     SHLD    QPOS
  120.     MOV    A,H
  121.     STA    LPTPOS
  122.     JMP    ENDQME
  123. ;
  124. QLF:    ;QUME LINEFEED
  125.     LXI    H,0010H
  126.     CALL    WAIT
  127.     MOV    A,L
  128.     CMA
  129.     OUT    QUME1
  130.     MOV    A,H
  131.     CMA
  132.     OUT    QUME2
  133.     XRI    80H
  134.     OUT    QUME2
  135.     ORI    80H
  136.     OUT    QUME2
  137.     JMP    ENDQME
  138. ;
  139. QFF:    ;QUME FORMFEED
  140.     CALL    WAIT
  141.     MVI    A,0DAH
  142.     OUT    37H
  143.     MVI    A,0FAH
  144.     OUT    37H
  145.     JMP    ENDQME
  146. ;
  147. QTAB:    ;QUME TAB
  148.     MVI    C,20H
  149.     CALL    LIST
  150.     LDA    LPTPOS
  151.     ANI    07H
  152.     JNZ    QTAB
  153.     RET
  154. ;
  155. WAIT:    ;WAIT FOR QUME BUFFER READY
  156.     IN    35H
  157.     XRI    80H
  158.     ANI    90H
  159.     JZ    WAIT
  160.     RET
  161. ;
  162. ;
  163. ;SETUP BUFFER AREA FOR PLACEMENT OF PRINTER PARAMETERS
  164. ;IN TOP OF RAM
  165. ;
  166.     ORG    0BFF0H
  167. ;
  168. LPTPOS:    DB    00    ;CURRENT PRINT POS
  169. LPTLEN:    DB    LENHGT    ;CURRENT LINE LENGTH
  170. QMOV:    DW    00    ;CARRIAGE MOVE INCREMENT
  171. QPOS:    DW    00    ;CURRENT CARRIAGE COUNT
  172. ;
  173. ;    END
  174.