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

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