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

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