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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Howtek Pixelmaster color print driver
  5. *
  6. CR    equ    $d
  7. LF    equ    $a
  8. FF    equ    $c
  9. ESC    equ    $1b
  10. DC2    equ    $12
  11.  
  12.  SECTION printer,CODE,PUBLIC
  13. ***************************************************************
  14. ***************************************************************
  15. ***************************************************************
  16. dumbentry:
  17.     clr.l    d0
  18.     rts
  19.  
  20.     dc.l    "PRNT"
  21.     dc.w    200
  22.  
  23. *
  24. * distribute the calls the the appropriate routines
  25. *
  26. pxlmstr:
  27.     move.l    a0,table
  28.     lsl.w    #2,d0
  29.     lea    prntbl,a1
  30.     move.l    0(a1,d0.w),a1
  31.     jmp    (a1)
  32.  
  33. *
  34. * identify who I am, and set up who I like to speak to.
  35. *
  36. p_ident:
  37.     move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  38.     move.w    #PARALLEL+ASCENDING,device(a0)
  39. prtok:    moveq    #1,d0
  40.     rts
  41.  
  42. *
  43. * initialize the table of printer specific routines
  44. *
  45. p_init:    move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  46.     clr.b    pdl(a0)            ;no page description language
  47.     move.b    #0,pmult(a0)        ;automatically print mulitiple copies?
  48.     move.b    #0,pman(a0)        ;handle manual feed?
  49.     move.b    #PRT_CMY,ptype(a0)    ;printer type?
  50.  
  51.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  52.  
  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.     lsl.w    #1,d0
  85.     lea    grmode_tbl,a1
  86.     move.l    0(a1,d0.w),grmode
  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.     bra    prtok
  92.  
  93. *
  94. * going to begin printing a document
  95. *
  96. p_bgndoc:
  97.     move.l    grmode,a0
  98.     bsr    sendline
  99.     lea    bgnmode,a0
  100.     bra    sendline
  101. *
  102. * about to start printing of a page
  103. *
  104. p_bgnpage:
  105.     bra    prtok
  106.  
  107. *
  108. * about to print a new tile for the page
  109. *
  110. p_bgntile:
  111.     bra    prtok
  112.  
  113. *
  114. * print a block to the printer
  115. *
  116. p_block:
  117.     move.l    table,a0
  118.     move.l    pblockw(a0),d0
  119.     move.w    d0,width
  120.     move.l    pblockplane(a0),pplane
  121.     move.l    pblockptr(a0),a1
  122.     move.l    (a1),a1
  123.     add.l    pblockoff(a0),a1
  124.     move.l    a1,v_base
  125. *
  126. * RGB
  127. *
  128.     move.l    v_base,v_ptr        ;Red
  129.     bsr    putline
  130.  
  131.     move.l    v_base,v_ptr        ;Green
  132.     move.l    pplane,d0
  133.     add.l    d0,v_ptr
  134.     bsr    putline
  135.  
  136.     move.l    v_base,v_ptr        ;Blue
  137.     move.l    pplane,d0
  138.     lsl.l    #1,d0
  139.     add.l    d0,v_ptr
  140.     bsr    putline
  141.  
  142.     lea    endline,a0
  143.     bra    sendline
  144.  
  145. putline:
  146.     move.w    width,d0
  147.     move.l    v_ptr,a0
  148. putln1:    tst.b    -1(a0,d0.w)
  149.     bne    putln2
  150.     subq.w    #1,d0
  151.     bne    putln1
  152.     moveq    #1,d0
  153. putln2:    move.w    d0,twidth
  154.  
  155.     lea    bgnline,a0
  156.     bsr    sendline
  157.     move.w    twidth,d0
  158.     bsr    sendn
  159.     move.b    #"V",d0
  160.     bsr    send
  161. *
  162.     move.w    twidth,d1
  163.     move.l    v_ptr,a0
  164. putln3:    move.b    (a0)+,d0
  165.     neg.b    d0
  166.     move.l    a0,-(sp)
  167.     move.w    d1,-(sp)
  168.     bsr    send
  169.     move.w    (sp)+,d1
  170.     move.l    (sp)+,a0
  171.     subq.w    #1,d1
  172.     bne    putln3
  173.     bra    prtok
  174.  
  175. *
  176. * just finished describing current tile
  177. *
  178. p_endtile:
  179.     bra    prtok
  180.  
  181. *
  182. * just finished describing all tiles for this page
  183. *
  184. p_endpage:
  185.     bra    prtok
  186.  
  187. *
  188. * finished printing the document
  189. *
  190. p_enddoc:
  191.     lea    endmode,a0
  192.     bra    sendline
  193.  
  194. ***************************************************
  195. ***    these are the send routines for the    ***
  196. ***    dot matrix driver.            ***
  197. ***************************************************
  198. *
  199. sendline:
  200.     move.b    (a0)+,d0
  201.     beq    prtok
  202.     move.l    a0,-(sp)
  203.     bsr    send
  204.     move.l    (sp)+,a0
  205.     bra    sendline
  206. *
  207. *
  208. sendn:    cmp.w    #10,d0
  209.     bcs    sdn1
  210.     and.l    #$ffff,d0
  211.     divu    #10,d0
  212.     swap    d0
  213.     move.w    d0,-(sp)
  214.     swap    d0
  215.     bsr    sendn
  216.     move.w    (sp)+,d0
  217. sdn1:    or.b    #"0",d0
  218. *
  219. *    bra    send
  220. *
  221. *
  222. send:    jmp    $ffffff
  223. *
  224. *
  225. ***********************************
  226. ***                ***
  227. ***********************************
  228.  SECTION printer,DATA,PUBLIC
  229.  
  230. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  231.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  232.     dc.l    p_block
  233.     dc.l    p_endtile,p_endpage,p_enddoc
  234.     dc.l    prtok,p_ident
  235.  
  236.  
  237. xdpi_tbl:    dc.w    120,240,240,240,240,240,240
  238. ydpi_tbl:    dc.w    120,240,240,240,240,240,240
  239. minl_tbl:    dc.w    30,60,60,60,60,60,60
  240. minr_tbl:    dc.w    30,60,60,60,60,60,60
  241. mint_tbl:    dc.w    0,0,0,0,0,0,0
  242. minb_tbl:    dc.w    0,0,0,0,0,0,0
  243. maxw_tbl:    dc.l    960,1920,1920,1920,1920,1920,1920
  244. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  245. xover_tbl:    dc.w    0,0,0,0,0,0,0
  246. yover_tbl:    dc.w    0,0,0,0,0,0,0
  247. rowht_tbl:    dc.w    1,1,1,1,1,1,1
  248. grmode_tbl:    dc.l    rez1,rez2,rez2,rez2,rez2,rez2,rez2
  249.  
  250.  
  251. driver:    dc.b    "Howtek Pixelmaster v2.0 beta",0
  252.  
  253.  
  254. rez1:    dc.b    ESC,"*t120W"        ;120 DPI
  255.     dc.b    0
  256.  
  257. rez2:    dc.b    ESC,"*t240W"        ;240 DPI
  258.     dc.b    0
  259.  
  260.  
  261. bgnmode:    dc.b    ESC,"*r0A",0    ;graphics mode
  262. bgnline:    dc.b    ESC,"*b",0
  263. endline:    dc.b    ESC,"*b0W",0
  264. endmode:    dc.b    ESC,"*rB",0
  265.  
  266. *
  267.  
  268.  
  269.  SECTION printer,BSS,PUBLIC
  270. table:        ds.l    1
  271. twidth:        ds.w    1
  272. v_base:        ds.l    1
  273. v_ptr:        ds.l    1
  274. width:        ds.w    1
  275. pplane:        ds.l    1
  276. count:        ds.w    1
  277. rows:        ds.w    1
  278. rowht:        ds.w    1
  279. grmode:        ds.l    1
  280.