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 / HYS15.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  227 lines

  1. .title 'Diablo Hytype I Printer Routine   8080 VERSION'
  2. .sbttl 'Copyright 1976 by Technical Design Labs, inc.'
  3. .I8080    ; 8080 version trap
  4. ;    VERSION 2.0 (8080)
  5. ;           DIABLO HYTYPE I PRINTER ROUTINE        
  6. ;
  7. ;COPYRIGHT 1976 BY TECHNICAL DESIGN LABS, INC.
  8. ;       WRITTEN BY TOM KIRK        
  9. ;
  10. ;    SO LONG AS THE ORIGINATOR AND THE LIST
  11. ;    OF MODIFIERS IS INSERTED INTO THE SOURCE
  12. ;    CODE, AND KEPT INTACT, PERMISSION IS
  13. ;    HEREBY GIVEN TO COPY, MODIFY, AND
  14. ;    DISTRIBUTE FOR NON-COMMERCIAL PURPOSES.
  15. ;
  16. ;    MODIFIED BY:
  17. ;      Gary W. Hvizdak     (on the first day of SPRING!)
  18. ;
  19. ;    MAR 20, 1977
  20. ;
  21. ;  LIMITS ON TYPING AREA
  22. WIDTH    =    132    ; WIDTH IN TENTHS OF AN INCH
  23. ;
  24. ;  TYPE SIZE PARAMETERS
  25. LPINCH    =    6    ;  LINES PER INCH
  26. CPINCH    =    10    ;  CHARACTERS PER INCH
  27. ;
  28. ;  CALCULATION OF PROGRAM CONSTANTS
  29. LSTEP    =    48/LPINCH     ; STEPS PER LINE
  30. ;
  31. WIDE    =    WIDTH*6     ; STEPS WIDE
  32. WIDXX    =    WIDE/256*256
  33. WIDHR    =    WIDE/256    ;  RESET CARRAGE
  34. WIDLR    =    WIDE-WIDXX    ;  COUNTERS
  35. CSTEP    =    60/CPINCH    ;  STEPS PER CHARACTER
  36. LMARGN    =    60*2        ;LEFT HAND MARGIN
  37. ;
  38. ;  INTERFACE PORTS
  39. HTPD1    =    06H    ; FIRST DATA PORT
  40. HTPD2    =    07H    ; SECOND DATA PORT
  41. HTPS    =    06H    ; STATUS PORT
  42. BS    =    008H
  43. LF    =    00AH
  44. CR    =    00DH
  45. CRBIT    =    004H
  46. LFBIT    =    008H
  47. PWBIT    =    001H
  48. CKBIT    =    002H
  49. LFSTB    =    008H
  50. CRSTB    =    020H
  51. PWSTB    =    010H
  52. RESTR    =    080H
  53. ;
  54. RAM    =    0    ;PLACE STORAGE
  55. ; AT OTHER THAN END OF PROGRAM
  56. HERE    =    .
  57. ;
  58. ;    PLUG IN MONITOR PATCH
  59.     .LOC    0F812H    ;LINE PRINTER VECTOR
  60.     JMP    HYTYPE    ;AL=L
  61. ;
  62.     .LOC    HERE    ;RELOCATABLE
  63. ;
  64. HYTYPE:    PUSH    H    ; SAVE EVERYTHING
  65.     PUSH    D
  66.     PUSH    B
  67.     PUSH    PSW
  68.     LDA    BHB
  69.     ORA    A
  70.     CZ    FIRST
  71. ;
  72.     NOP    ; MOV C,B FOR ALS8
  73. ;
  74.     MOV    A,C    ;TEST CHARACTER
  75.     ANI    7FH
  76.     CPI    ' '+1    ;  FOR CONTROL
  77.     JM    CNTRL
  78.     CPI    7FH
  79.     JZ    HYTP1
  80. ;
  81.     CALL    TYPE    ; SO PRINT IT
  82.     JMP    STEP
  83. ;
  84. HYTP1:    POP    PSW    ; RESTORE EVEYTHING
  85.     POP    B
  86.     POP    D
  87.     POP    H
  88.     MOV    A,C    ;NOP FOR ALS-8
  89.     RET
  90. ;
  91. TYPE:    LHLD    CRPOS    ; MOVE
  92.     XCHG        ; CARRAGE
  93.     LHLD    CRCNT    ; IF
  94.     SHLD    CRPOS    ; NEEDED
  95.     CALL    DSPLCE
  96.     MOV    A,H
  97.     ORA    L
  98.     CNZ    SPACE
  99. ;
  100. TYPE1:    MOV    L,C    ;TYPE
  101.     CALL    PRINT    ; CHARACTER
  102.     RET
  103. ;
  104. DSPLCE:    MOV    A,D    ; ONE'S COMPLEMENT
  105.     CMA        ; DE
  106.     MOV    D,A
  107.     MOV    A,E
  108.     CMA
  109.     MOV    E,A
  110.     INX    D    ; TWO'S COMPLEMENT DE
  111.     DAD    D    ; DE IS NOW -DE
  112.     MOV    A,H    ; SET SIGN BIT
  113.     ORA    A    ; AS A RESULT
  114.     RP
  115.     MOV    A,L    ; BACKWARD
  116.     CMA        ; DISPLACEMENT
  117.     INR    A    ; IS
  118.     MOV    L,A    ; POSITIVE
  119.     MOV    A,H    ; NUMBER
  120.     CMA        ; WITH
  121.     ACI    0    ; SET
  122.     ORI    0FCH    ; SIGN
  123.     MOV    H,A    ; BIT
  124.     RET
  125. ;
  126. SPACE:    CALL    CHECK    ; IS
  127.     IN    HTPS    ; CARRAGE
  128.     ANI    CRBIT    ; BUZY?
  129.     JNZ    SPACE
  130.     MVI    A,CRSTB    ; MOVE
  131.     JMP    HTPCRL    ; CARRAGE
  132. ;
  133. LNFEED:            ; IS
  134.     IN    HTPS    ; PLATTEN
  135.     ANI    LFBIT    ; BUZY?
  136.     JNZ    LNFEED
  137.     MVI    A,LFSTB    ; ROLL
  138.     JMP    HTPCRL    ; PLATTEN
  139. ;
  140. PRINT:            ; IS
  141.     IN    HTPS    ; PRINT WHEEL
  142.     ANI    PWBIT    ; BUZY?
  143.     JNZ    PRINT
  144.     MVI    A,PWSTB    ; SPIN
  145.     JMP    HTPCRL    ; PRINT WHEEL
  146. ;
  147. CHECK:    IN    HTPS    ; IS
  148.     ANI    CKBIT    ; PRINTER
  149.     RNZ        ; OK?
  150. FIRST:    MVI    A,RESTR    ; RESTORE
  151.     STA    BHB
  152.     LXI    H,0    ; PRINTER
  153.     SHLD    CRPOS    ; TO
  154.     LXI    H,LMARGN
  155.     SHLD    CRCNT    ; LEFT
  156.     CALL    HTPCRL
  157.     LXI    H,LSTEP
  158.     CALL    LNFEED
  159.     RET
  160. ;
  161. HTPCRL:    PUSH    PSW
  162.     MOV    A,L    ; SEND
  163.     CMA        ; LOW BYTE
  164.     OUT    HTPD1    ; OF DATA
  165. ;
  166.     MOV    A,H    ; SEND
  167.     ANI    7    ; HIGH 3
  168.     MOV    H,A    ; BITS
  169.     CMA        ; OF
  170.     OUT    HTPD2    ; DATA
  171. ;
  172.     POP    PSW    ; SET UP
  173.     ANI    0F8H    ; AND
  174.     ORA    H    ; ACTIVATE
  175.     CMA        ; CONTROL
  176.     OUT    HTPD2    ; STROBE
  177. ;
  178.     MOV    A,H    ; REMOVE
  179.     CMA        ; CONTROL
  180.     OUT    HTPD2    ; STROBE
  181.     RET
  182. CNTRL:    CPI    ' '    ; MOVE DESIRED CARRAGE
  183.     JNZ    CNTR1    ; POSITION
  184. STEP:    LXI    D,CSTEP    ; 1 CHARACTER
  185.     LHLD    CRCNT    ; TO
  186.     DAD    D    ; THE
  187.     SHLD    CRCNT    ; RIGHT.
  188.     MOV    A,H    ; RESET CARRAGE
  189.     CPI    WIDHR    ; COUNTER AFTER
  190.     JC    HYTP1    ; RIGHT HAND LIMIT
  191.     MOV    A,L    ; IS REACHED
  192.     CPI    WIDLR
  193.     JC    HYTP1    ; DON'T RUN INTO
  194.     LXI    H,LMARGN ;END STOP.
  195.     SHLD    CRCNT    ; NEW LINE
  196.     LXI    H,LSTEP    ; TOO.
  197.     CALL    LNFEED
  198.     JMP    HYTP1
  199. ;
  200. CNTR1:    CPI    CR    ; SET DESIRED
  201.     JNZ    CNTR2    ; CARRAGE
  202.     LXI    H,LMARGN ;POSITION
  203.     SHLD    CRCNT    ; TO
  204.     JMP    HYTP1    ; LEFT MARGIN.
  205. ;
  206. CNTR2:    CPI    LF    ; MOVE DESIRED
  207.     JNZ    CNTR3    ; PLATTEN POSITION
  208.     LXI    H,LSTEP    ; UP BY
  209.     CALL    LNFEED    ; ONE LINE.
  210.     JMP    HYTP1
  211. ;
  212. CNTR3:    CPI    BS    ;BACK
  213.     JNZ    HYTP1    ;SPACE
  214.     LHLD    CRCNT    ;ONE
  215.     LXI    D,-CSTEP
  216.     DAD    D    ;CHARACTER
  217.     SHLD    CRCNT
  218.     JMP    HYTP1
  219. ;
  220.     .IFN    RAM,[    ;LOCATION OF STORAGE
  221.     .LOC    RAM    ;IF NON-ZERO]
  222. CRPOS:    .WORD    0    ; SPACE POS NOW
  223. CRCNT:    .WORD    0    ; SPACE POS FUTURE
  224. BHB:    .BYTE    0    ; Been Here Before????
  225. ;
  226.     .end
  227.