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

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