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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Canon PJ-1080A color 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 the the appropriate routines
  24. *
  25. pj1080a:
  26.     move.l    a0,table
  27.     lsl.w    #2,d0
  28.     lea    prntbl,a1
  29.     move.l    0(a1,d0.w),a1
  30.     jmp    (a1)
  31.  
  32. *
  33. * identify who I am, and set up who I like to speak to.
  34. *
  35. p_ident:
  36.     move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  37.     move.w    #PARALLEL+ASCENDING,device(a0)
  38. prtok:    moveq    #1,d0
  39.     rts
  40.  
  41. *
  42. * initialize the table of printer specific routines
  43. *
  44. p_init:    move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  45.     clr.b    pdl(a0)            ;no page description language
  46.     clr.b    pmult(a0)        ;automatically print mulitiple copies?
  47.     clr.b    pman(a0)        ;handle manual feed?
  48.     move.b    #PRT_CMY,ptype(a0)    ;printer type?
  49.  
  50.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  51.  
  52.  
  53. *
  54. * pminlft and pmaxw must be evenly divisible by 16
  55. * this is the part that should be worked out
  56. *
  57.  
  58.     move.w    pdensity(a0),d0
  59.     cmp.w    #7,d0
  60.     bcs    pint1
  61.     moveq    #6,d0
  62. pint1:    lsl.w    #1,d0
  63.  
  64.     lea    xdpi_tbl,a1
  65.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  66.     lea    ydpi_tbl,a1
  67.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  68.     lea    minl_tbl,a1
  69.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  70.     lea    minr_tbl,a1
  71.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  72.     lea    mint_tbl,a1
  73.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  74.     lea    minb_tbl,a1
  75.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  76.     lea    xover_tbl,a1
  77.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  78.     lea    yover_tbl,a1
  79.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  80.     lea    rowht_tbl,a1
  81.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  82.  
  83.     lsl.w    #1,d0
  84.     lea    maxw_tbl,a1
  85.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  86.     lea    maxh_tbl,a1
  87.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  88.     bra    prtok
  89.  
  90. *
  91. * going to begin printing a document
  92. *
  93. p_bgndoc:
  94.     bra    prtok
  95.  
  96. *
  97. * about to start printing of a page
  98. *
  99. p_bgnpage:
  100.     bra    prtok
  101.  
  102. *
  103. * about to print a new tile for the page
  104. *
  105. p_bgntile:
  106.     bra    prtok
  107.  
  108. *
  109. * print a block to the printer
  110. *
  111. p_block:
  112.     move.l    table,a0
  113.     move.l    pblockplane(a0),pplane
  114.     move.l    pblockw(a0),d0
  115.     move.w    d0,width
  116.     move.l    pblockptr(a0),a1
  117.     move.l    (a1),a1
  118.     add.l    pblockoff(a0),a1
  119.     move.l    a1,v_base
  120.  
  121.     move.b    #ESC,d0
  122.     bsr    send
  123.     move.b    #"X",d0
  124.     bsr    send
  125.     move.w    width,d0
  126.     bsr    send
  127. *
  128.     move.l    v_base,lineptr
  129.     bsr    putln                ;red
  130.     move.l    v_base,lineptr
  131.     move.l    pplane,d0
  132.     add.l    d0,lineptr
  133.     bsr    putln                ;green
  134.     move.l    v_base,lineptr
  135.     move.l    pplane,d0
  136.     lsl.l    #1,d0
  137.     add.l    d0,lineptr
  138.     bsr    putln                ;blue
  139.     bra    prtok
  140.  
  141. *
  142. putln:    move.w    width,d1
  143.     move.l    lineptr,a0
  144. putln1:    move.b    (a0)+,d0
  145.     move.l    a0,-(sp)
  146.     move.w    d1,-(sp)
  147.     eori.b    #$ff,d0
  148.     bsr    send
  149.     move.w    (sp)+,d1
  150.     move.l    (sp)+,a0
  151.     subq.w    #1,d1
  152.     bne    putln1
  153.     bra    prtok
  154.  
  155. *
  156. * just finished describing current tile
  157. *
  158. p_endtile:
  159.     bra    prtok
  160.  
  161. *
  162. * just finished describing all tiles for this page
  163. *
  164. p_endpage:
  165.     bra    prtok
  166.  
  167. *
  168. * finished printing the document
  169. *
  170. p_enddoc:
  171.     bra    prtok
  172.  
  173. ***************************************************
  174. ***    these are the send routines for the    ***
  175. ***    dot matrix driver.            ***
  176. ***************************************************
  177. sendline:
  178.     move.b    (a0)+,d0
  179.     beq    prtok
  180.     move.l    a0,-(sp)
  181.     bsr    send
  182.     move.l    (sp)+,a0
  183.     bra    sendline
  184.  
  185. sendn:    cmp.w    #10,d0
  186.     bcs    sdn1
  187.     and.l    #$ffff,d0
  188.     divu    #10,d0
  189.     swap    d0
  190.     move.w    d0,-(sp)
  191.     swap    d0
  192.     bsr    sendn
  193.     move.w    (sp)+,d0
  194. sdn1:    or.b    #"0",d0
  195.  
  196. send:    jmp    $ffffff
  197.  
  198. ***********************************
  199. ***                ***
  200. ***********************************
  201.  SECTION printer,DATA,PUBLIC
  202.  
  203. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  204.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  205.     dc.l    p_block
  206.     dc.l    p_endtile,p_endpage,p_enddoc
  207.     dc.l    prtok,p_ident
  208.  
  209.  
  210. xdpi_tbl:    dc.w    90,90,90,84,84,84,84
  211. ydpi_tbl:    dc.w    190,180,160,190,180,160,84
  212. minl_tbl:    dc.w    20,20,20,20,20,20,20
  213. minr_tbl:    dc.w    20,20,20,20,20,20,20
  214. mint_tbl:    dc.w    0,0,0,0,0,0,0
  215. minb_tbl:    dc.w    0,0,0,0,0,0,0
  216. maxw_tbl:    dc.l    640,640,640,640,640,640,640
  217. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  218. xover_tbl:    dc.w    0,0,0,0,0,0,0
  219. yover_tbl:    dc.w    0,0,0,0,0,0,0
  220. rowht_tbl:    dc.w    2,2,2,2,2,2,2
  221.  
  222.  
  223. driver:    dc.b    "Canon PJ-1080A v2.0 beta",0
  224.  
  225.  SECTION printer,BSS,PUBLIC
  226. table:        ds.l    1
  227. twidth:        ds.w    1
  228. v_base:        ds.l    1
  229. width:        ds.w    1
  230. pplane:        ds.l    1
  231. lineptr:    ds.l    1
  232. count:        ds.w    1
  233.