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

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