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 / CPMUG001.ARK / DIABLO.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  134 lines

  1. ;THIS IS A DRIVER TO MAKE A DIABLO/QUME PRINTER
  2. ;SIMULATE A SERIAL PRINTER. IT WAS CODED FOR
  3. ;A SET OF PARALLEL PORTS STARTING AT 20H, AND
  4. ;USES 10 PITCH CARRIAGE MOVES. THE ROUTINE
  5. ;ACCUMULATES CARRIAGE POSITION TO PERMIT CR, BUT
  6. ;A TAB MOD/8 ROUTINE WAS NOT INCORPORATED, AS THIS
  7. ;ALREADY EXISTED IN THE MAIN PRINT PROGRAM BY
  8. ;JEFF KRAVITZ.
  9. ;BASED ON A ORIGINAL BY DON IMBIMBO, MODIFIED
  10. ;BY A.R.G 6/77
  11. ;************************************************************
  12. ;(HINT - A.R.G)
  13. ;ROUTINE CAN BE CONSIDERABLY SPEEDED IF A SUBROUTINE
  14. ;WERE TO BE ADDED WHICH ACCUMULATES SPACES (AND LINE FEEDS)
  15. ;UNTIL A PRINTING CHARACTER WAS REQUIRED, AND THEN MOTION(S)
  16. ;FOR THE TOTAL DISPLACEMENT(S) CALLED.
  17. ;************************************************************
  18. ;MODIFIED FOR ROM AT 0E120H
  19. ;WITH 2 BYTES RAM NEEDED AT 47H & 48H
  20. ;9/28/77 - A.R.G
  21. ;
  22. ;QUME OR DIABLO TTY SIMULATOR.
  23. ;
  24. ;FOR NON-STANDARD
  25. ;MOVES, ENTER WITH BC EQUAL TO DISPLACEMENT IN
  26. ;APPROPRIATE LSB VALUE (SEE EQU'S BELOW). THEN
  27. ;CALL THE 'NON-STANDARD' MOVE ENTRY POINT.
  28. ;FORMAT FOR CALL IS AS FOLLOWS:
  29. ;CARRIAGE MOTION:
  30. ;D4   D3   D2   D1   D0   D7   D6   D5   D4   D3   D2   D1   D0
  31. ;NU  DIR.  /--------------------DATA--------------------------/
  32. ;
  33. ;PRINT DATA:
  34. ;D4   D3   D2   D1   D0   D7   D6   D5   D4   D3   D2   D1   D0
  35. ;NU   NU   NU   NU   NU   NU   /----------ASCII DATA----------/
  36. ;
  37. ;PAPER FEED:
  38. ;D4   D3   D2   D1   D0   D7   D6   D5   D4   D3   D2   D1   D0
  39. ;NU   NU  DIR.  /--------------------DATA---------------------/
  40. ;
  41. ;************************************************************
  42. ;EQUATES
  43. STDSP    EQU    12    ;IN 1/120 INCH
  44. STDLF    EQU    8    ;IN 1/48 INCH
  45. CR    EQU    0DH
  46. LF    EQU    0AH
  47. SPACE    EQU    20H
  48. DEL    EQU    7FH
  49. LSB    EQU    20H    ;OUTPUT PORT # FOR LEAST SIGNIFICANT BITS OF DATA
  50. MSB    EQU    21H    ;OUTPUT PORT # FOR MOST SIGNIFICANT BITS OF DATA
  51. PSTAT    EQU    20H    ;INPUT PORT # FOR PRINTER STATUS
  52. CHST    EQU    22H    ;OUTPUT PORT # FOR CHARACTER STROBE
  53. CMST    EQU    23H    ;OUPUT PORT # FOR CARRIAGE MOTION STROBE
  54. PFST    EQU    24H    ;OUTPUT PORT # FOR PAPER FEED STROBE
  55. RESET    EQU    25H    ;OUTPUT PORT # FOR PRINTER RESET
  56. CMACC    EQU    47H    ;USE 47H & 48H FOR RAM SPACE
  57. ;************************************************************
  58.     ORG    0E120H
  59. ;ROUTINE:
  60. TTY:
  61.     PUSH    PSW
  62.     PUSH    B
  63.     PUSH    H
  64.     MOV    A,C    ;GET CHARACTER FROM CPM HAND-OFF
  65.     CPI    DEL    ;DELETE?
  66.     JZ    PDONE    ;DISCARD IT
  67.     CPI    LF    ;TRAP LF
  68.     JZ    STDPF
  69.     CPI    CR    ;TRAP    CR
  70.     JZ    PCRET
  71.     CPI    SPACE    ;TRAP    SPACES
  72.     JZ    STDCM
  73.     JC    PDONE    ;SOME OTHER CONTROL CHR. ?
  74. ;FOUND A CHARACTER
  75.     RLC
  76.     OUT    LSB
  77. PT1:    IN    PSTAT    ;PRINTER READY?
  78.     ANI    1
  79.     JNZ    PT1
  80.     OUT    CHST    ;YES. PRINT IT
  81.     JMP    STDCM    ;MOVE CARRIAGE ONE SPACE
  82. ;
  83. STDCM:    LXI    B,STDSP    ;STANDARD MOVE VALUE
  84. ;NON-STANDARD MOTION ENTRY
  85. OUT1:    MOV    A,C    ;LOAD UP DATA PORTS
  86.     OUT    LSB
  87.     MOV    A,B
  88.     OUT    MSB
  89. PT2:    IN    PSTAT    ;PRINTER READY?
  90.     ANI    2
  91.     JNZ    PT2
  92.     OUT    CMST    ;YES. OUT CARRIAGE MOTION STROBE
  93.     LHLD    CMACC    ;GET PRIOR CARRIAGE POSITION
  94.     MOV    A,B
  95.     ANI    8    ;MASK DIRECTION BIT
  96.     JNZ    LEFT    ;MOVE LEFT IF SET
  97.     DAD    B    ;ADD MOVE TO CMACC
  98.     JMP    STORE
  99. ;
  100. LEFT:    MOV    A,B    ;THIS IS A 16 BIT
  101.     ANI    7    ;SUBTRACT FOR LEFT
  102.     CMA        ;MOVE FROM CMACC
  103.     MOV    B,A
  104.     MOV    A,C
  105.     CMA
  106.     MOV    C,A
  107.     INX    B
  108.     DAD    B
  109. STORE:    SHLD    CMACC    ;AFTER SUB, SAVE
  110. ;
  111. PDONE:    POP    H
  112.     POP    B
  113.     POP    PSW
  114.     RET
  115. STDPF:    LXI    B,STDLF
  116. OUT2:    MOV    A,C
  117.     RLC        ;MOVE LEFT FOR
  118.     OUT    LSB    ;PRINTER ONE BIT
  119.     MOV    A,B
  120.     RAL
  121.     OUT    MSB
  122. PT3:    IN    PSTAT    ;PRINTER READY?
  123.     ANI    4
  124.     JNZ    PT3
  125.     OUT    PFST    ;YES, OUT STROBE
  126.     JMP    PDONE
  127. ;
  128. PCRET:    LHLD    CMACC    ;GET POSITION
  129.     MOV    C,L    ;MOVE LOW BYTE IN C
  130.     MOV    A,H    ;HIGH BYTE IN A
  131.     ORI    8    ;SET BIT 3
  132.     MOV    B,A    ;PUT INTO B
  133.     JMP    OUT1
  134.