home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / dtp / pgsmodst / atariprt / t351c.s < prev    next >
Text File  |  1991-05-23  |  6KB  |  362 lines

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Toshiba P351 color print driver
  5. *
  6. * ESC r n for color selection
  7. *
  8. BLACK    equ    0
  9. CYAN    equ    2
  10. MAGENTA    equ    1
  11. YELLOW    equ    4
  12.  
  13. CR    equ    $d
  14. LF    equ    $a
  15. FF    equ    $c
  16. ESC    equ    $1b
  17.  
  18.  SECTION printer,CODE,PUBLIC
  19. ***************************************************************
  20. ***************************************************************
  21. ***************************************************************
  22. dumbentry:
  23.     clr.l    d0
  24.     rts
  25.  
  26.     dc.l    "PRNT"
  27.     dc.w    200
  28.  
  29. *
  30. * distribute the calls to the appropriate routines
  31. *
  32. t351c:    move.l    a0,table
  33.     lsl.w    #2,d0
  34.     lea    prntbl,a1
  35.     move.l    0(a1,d0.w),a1
  36.     jmp    (a1)
  37.  
  38. *
  39. * identify who I am, and set up who I like to speak to.
  40. *
  41. p_ident:
  42.     move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  43.     move.w    #PARALLEL+ASCENDING,device(a0)
  44. prtok:    moveq    #1,d0
  45.     rts
  46.  
  47. *
  48. * initialize the table of printer specific routines
  49. *
  50. p_init:    clr.b    pdl(a0)            ;no page description language
  51.     clr.b    pmult(a0)        ;automatically print mulitiple copies?
  52.     clr.b    pman(a0)        ;handle manual feed?
  53.     move.b    #PRT_CMYK,ptype(a0)    ;printer type?
  54.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  55.  
  56. *
  57. * pminlft and pmaxw must be evenly divisible by 16
  58. * this is the part that should be worked out
  59. *
  60.  
  61.     move.w    pdensity(a0),d0
  62.     cmp.w    #7,d0
  63.     bcs    pint1
  64.     moveq    #6,d0
  65. pint1:    lsl.w    #1,d0
  66.  
  67.     lea    xdpi_tbl,a1
  68.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  69.     lea    ydpi_tbl,a1
  70.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  71.     lea    minl_tbl,a1
  72.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  73.     lea    minr_tbl,a1
  74.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  75.     lea    mint_tbl,a1
  76.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  77.     lea    minb_tbl,a1
  78.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  79.     lea    xover_tbl,a1
  80.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  81.     lea    yover_tbl,a1
  82.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  83.     lea    rowht_tbl,a1
  84.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  85.  
  86.     lea    grmode_tbl,a1
  87.     move.w    0(a1,d0.w),grmode
  88.  
  89.     lsl.w    #1,d0
  90.     lea    maxw_tbl,a1
  91.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  92.     lea    maxh_tbl,a1
  93.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  94.  
  95.     bra    prtok
  96.  
  97. *
  98. * going to begin printing a document
  99. *
  100. p_bgndoc:
  101.     bra    prtok
  102.  
  103. *
  104. * about to start printing of a page
  105. *
  106. p_bgnpage:
  107.     bra    prtok
  108.  
  109. *
  110. * about to print a new tile for the page
  111. *
  112. p_bgntile:
  113.     bra    prtok
  114.  
  115. *
  116. * print a block to the printer
  117. *
  118. p_block:
  119.     lea    setspac,a0
  120.     bsr    sendline
  121.  
  122.     move.l    table,a0
  123.     move.l    pblockplane(a0),pplane
  124.     move.l    pblockw(a0),d0
  125.     move.l    d0,width
  126.     move.l    pblockptr(a0),a1
  127.     move.l    (a1),a1
  128.     add.l    pblockoff(a0),a1
  129.     move.l    a1,v_base
  130.  
  131. printl:    lea    setcolor,a0        ;yellow
  132.     bsr    sendline
  133.     move.b    #YELLOW,d0
  134.     bsr    send
  135.     move.l    v_base,lineptr
  136.     move.l    pplane,d0
  137.     lsl.l    #1,d0
  138.     add.l    d0,lineptr
  139.     bsr    putline
  140.  
  141.     lea    setcolor,a0        ;magenta
  142.     bsr    sendline
  143.     move.b    #MAGENTA,d0
  144.     bsr    send
  145.     move.l    v_base,lineptr
  146.     move.l    pplane,d0
  147.     add.l    d0,lineptr
  148.     bsr    putline
  149.  
  150.     lea    setcolor,a0        ;cyan
  151.     bsr    sendline
  152.     move.b    #CYAN,d0
  153.     bsr    send
  154.     move.l    v_base,lineptr
  155.     bsr    putline
  156.  
  157.     lea    setcolor,a0        ;black
  158.     bsr    sendline
  159.     move.b    #BLACK,d0
  160.     bsr    send
  161.     move.l    v_base,lineptr
  162.     move.l    pplane,d0
  163.     lsl.l    #1,d0
  164.     add.l    pplane,d0
  165.     add.l    d0,lineptr
  166.     bsr    putline
  167. *
  168.     move.b    #LF,d0
  169.     bra    send
  170.  
  171. **************************************
  172.  
  173. putline:
  174.     move.l    lineptr,a0
  175.     clr.w    twidth
  176.     move.w    #23,d1
  177. print0:    move.w    width,d0
  178. print1:    tst.b    -1(a0,d0.w)
  179.     bne    print2
  180.     subq.w    #1,d0
  181.     bne    print1
  182.  
  183. print2:    cmp.w    twidth,d0
  184.     blt    print3
  185.     move.w    d0,twidth
  186. print3:    add.w    width,a0
  187.     dbf    d1,print0
  188.  
  189.     tst.w    twidth
  190.     beq    wspace
  191.  
  192.     move.b    #ESC,d0
  193.     bsr    send
  194.     move.w    grmode,d0
  195.     bsr    send
  196.  
  197.     moveq    #0,d0
  198.     move.w    twidth,d0
  199.     lsl.l    #3,d0
  200.     divu    #1000,d0
  201.     move.l    d0,-(sp)
  202.     or.b    #"0",d0
  203.     bsr    send
  204.     move.l    (sp)+,d0
  205.     swap    d0
  206.     and.l    #$FFFF,d0
  207.     divu    #100,d0
  208.     move.l    d0,-(sp)
  209.     or.b    #"0",d0
  210.     bsr    send
  211.     move.l    (sp)+,d0
  212.     swap    d0
  213.     and.l    #$FFFF,d0
  214.     divu    #10,d0
  215.     move.l    d0,-(sp)
  216.     or.b    #"0",d0
  217.     bsr    send
  218.     move.l    (sp)+,d0
  219.     swap    d0
  220.     or.b    #"0",d0
  221.     bsr    send
  222.  
  223. print4:    move.w    #7,pixel
  224. print6:    move.w    #4,bytes
  225.     move.l    lineptr,a0
  226. print5:    move.w    pixel,d4
  227.     moveq    #5,d1
  228.     moveq    #0,d0
  229. s1:    btst    d4,(a0)
  230.     beq     s2
  231.     bset    d1,d0
  232. s2:    add.w    width,a0
  233.     dbf    d1,s1
  234.     move.l    a0,-(sp)
  235.     bsr    send
  236.     move.l    (sp)+,a0
  237.  
  238.     subq.w    #1,bytes
  239.     bne    print5
  240.     sub.w    #1,pixel
  241.     bcc    print6
  242.     add.l    #1,lineptr
  243.     subq.w    #1,twidth
  244.     bne    print4
  245. *
  246. wspace:    move.b    #CR,d0
  247.     bra    send
  248.  
  249. ************************************
  250. *
  251. * just finished describing current tile
  252. *
  253. p_endtile:
  254.     move.l    table,a0
  255.     move.l    pblockh(a0),d0
  256.     mulu    #120,d0
  257.     divu    #180,d0
  258.     add.w    #2,d0
  259.     mulu    #2,d0
  260.     divu    #5,d0
  261.     move.w    d0,scroll
  262.     beq    prtok
  263. pend1:    move.b    #ESC,d0
  264.     bsr    send
  265.     move.b    #"L",d0
  266.     bsr    send
  267.     moveq    #0,d0
  268.     move.w    scroll,d0
  269.     cmp.w    #81,d0
  270.     bcs    pend2
  271.     move.w    #80,d0
  272. pend2:    divu    #10,d0
  273.     move.l    d0,-(sp)
  274.     or.b    #"0",d0
  275.     bsr    send
  276.     move.l    (sp)+,d0
  277.     swap    d0
  278.     or.b    #"0",d0
  279.     bsr    send
  280.     move.b    #LF,d0
  281.     bsr    send
  282.     sub.w    #80,scroll
  283.     bgt    pend1
  284.     bra    prtok
  285.  
  286. *
  287. * just finished describing all tiles for this page
  288. *
  289. p_endpage:
  290.     bra    prtok
  291.  
  292. *
  293. * finished printing the document
  294. *
  295. p_enddoc:
  296.     bra    prtok
  297.  
  298. *
  299. * user requested stop
  300. *
  301. p_break:
  302.     bra    p_endtile
  303.  
  304. ***************************************************
  305. ***    these are the send routines for the    ***
  306. ***    dot matrix driver.            ***
  307. ***************************************************
  308. sendline:
  309.     move.b    (a0)+,d0
  310.     beq    prtok
  311.     move.l    a0,-(sp)
  312.     bsr    send
  313.     move.l    (sp)+,a0
  314.     bra    sendline
  315.  
  316. send:    jmp    $ffffff
  317.  
  318. ***********************************
  319. ***                ***
  320. ***********************************
  321.  SECTION printer,DATA,PUBLIC
  322.  
  323. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  324.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  325.     dc.l    p_block
  326.     dc.l    p_endtile,p_endpage,p_enddoc
  327.     dc.l    p_break,p_ident
  328.  
  329.  
  330. xdpi_tbl:    dc.w    180,360,360,360,360,360,360
  331. ydpi_tbl:    dc.w    180,180,180,180,180,180,180
  332. minl_tbl:    dc.w    45,90,90,90,90,90,90
  333. minr_tbl:    dc.w    45,90,90,90,90,90,90
  334. mint_tbl:    dc.w    0,0,0,0,0,0,0
  335. minb_tbl:    dc.w    0,0,0,0,0,0,0
  336. maxw_tbl:    dc.l    1440,2880,2880,2880,2880,2880,2880
  337. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  338. xover_tbl:    dc.w    0,50,50,50,50,50,50
  339. yover_tbl:    dc.w    0,0,0,0,0,0,0
  340. rowht_tbl:    dc.w    24,24,24,24,24,24,24
  341. grmode_tbl:    dc.w    $3b,$1d,$1d,$1d,$1d,$1d,$1d
  342.  
  343.  
  344. driver:        dc.b    "Toshiba P351C color v2.0 beta",0
  345. setspac:    dc.b    ESC,"L07",0
  346. setcolor:    dc.b    ESC,"r",0
  347.  
  348.  SECTION printer,BSS,PUBLIC
  349. table:        ds.l    1
  350. twidth:        ds.w    1
  351. pixel:        ds.w    1
  352. v_base:        ds.l    1
  353. bytes:        ds.w    1
  354. aaa:        ds.l    1
  355. keep:        ds.w    1
  356. lineptr:    ds.l    1
  357. width:        ds.w    1
  358. pplane:        ds.l    1
  359. grmode:        ds.w    1
  360. rowht:        ds.w    1
  361. scroll:        ds.w    1
  362.