home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / dtp / pgsmodst / atariprt / hppaintc.s < prev    next >
Text File  |  1991-08-29  |  9KB  |  435 lines

  1.  include "prtequ.h"
  2.  
  3. *
  4. * HP PaintJet 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. hplaser:
  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_CMYK,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    colorpal,a0
  100.     bsr    sendline
  101.     lea    bgnmode,a0
  102.     bra    sendline
  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    pblockw(a0),d0
  122.         move.w  d0,width
  123.     move.l    pblockplane(a0),pplane
  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. * YMCK
  130.     move.l    v_base,v_ptr        ;yellow
  131.     move.l    pplane,d0
  132.     lsl.l    #1,d0
  133.     add.l    d0,v_ptr
  134.     bsr    putline
  135.  
  136.     move.l    v_base,v_ptr        ;magenta
  137.     move.l    pplane,d0
  138.     add.l    d0,v_ptr
  139.     bsr    putline
  140.  
  141.     move.l    v_base,v_ptr        ;cyan
  142.     bsr    putline
  143.  
  144.     move.l    v_base,v_ptr        ;black
  145.     move.l    pplane,d0
  146.     lsl.l    #1,d0
  147.     add.l    pplane,d0
  148.     add.l    d0,v_ptr
  149.     bsr    putline
  150.  
  151.     lea    endline,a0
  152.     bra    sendline
  153.         
  154.         
  155. **********************************
  156. **                              **
  157. **********************************
  158. putline:
  159.     move.w    width,d0
  160.     move.l    v_ptr,a0
  161. putln1:    tst.b    -1(a0,d0.w)
  162.     bne    putln2
  163.     subq.w    #1,d0
  164.     bne    putln1
  165.     moveq    #1,d0
  166.  
  167. putln2: move.l  v_ptr,a0
  168.         bsr     compit
  169.         
  170.         move.w    d0,twidth
  171.         
  172.         lea     compress,a0             ;turn data compression on
  173.         bsr     sendline
  174.         
  175.     lea    grfstart,a0
  176.     bsr    sendline
  177.     move.w    twidth,d0
  178.     bsr    sendn
  179.     move.b    #"V",d0
  180.     bsr    send        
  181. *
  182.         move.w    twidth,d1
  183.         lea     buffer,a0
  184.         
  185. putln3:    move.b    (a0)+,d0
  186.     move.l    a0,-(sp)
  187.     move.w    d1,-(sp)
  188.     bsr    send
  189.     move.w    (sp)+,d1
  190.     move.l    (sp)+,a0
  191.     subq.w    #1,d1
  192.     bne    putln3
  193.     bra    prtok
  194.  
  195.  
  196. ******************************************
  197. * just finished describing current tile **
  198. ******************************************
  199. p_endtile:
  200.     bra    prtok
  201.  
  202. p_break:
  203.     bra    p_endtile
  204.  
  205. *****************************************************
  206. * just finished describing all tiles for this page **
  207. *****************************************************
  208. p_endpage:
  209.     bra    prtok
  210.  
  211.  
  212. ***********************************
  213. * finished printing the document **
  214. ***********************************
  215. p_enddoc:
  216.     lea    cleanup,a0
  217.     bra    sendline
  218.  
  219.  
  220. ***************************************************
  221. ***    these are the send routines for the    ***
  222. ***    dot matrix driver.            ***
  223. ***************************************************
  224. *
  225. sendline:
  226.     move.b    (a0)+,d0
  227.     beq    prtok
  228.     move.l    a0,-(sp)
  229.     bsr    send
  230.     move.l    (sp)+,a0
  231.     bra    sendline
  232. *
  233. *
  234. sendn:    cmp.w    #10,d0
  235.     bcs    sdn1
  236.     and.l    #$ffff,d0
  237.     divu    #10,d0
  238.     swap    d0
  239.     move.w    d0,-(sp)
  240.     swap    d0
  241.     bsr    sendn
  242.     move.w    (sp)+,d0
  243. sdn1:    or.b    #"0",d0
  244. *
  245. *    bra    send
  246. *
  247. *
  248. send:    jmp    $ffffff
  249. *
  250. *
  251.  
  252. ************************************************
  253. **   compress the data going to the printer   **
  254. ************************************************
  255. compit:
  256.         lea     buffer,a2       ;get address of buffer
  257.         moveq   #0,d1           ;zero out the length counter
  258.         moveq   #0,d3           ;zero out the total length counter
  259.         
  260. cmpt2:  move.b  (a0)+,d2        ;get pattern byte from string
  261.         subq.w  #1,d0           ;subtract 1 from the string length (twidth)
  262.         beq.s   cmpt3
  263.         
  264.         cmp.b   (a0),d2
  265.         bne.s   cmpt3
  266.         
  267.         add.b   #1,d1           ;add 1 to the length
  268.         cmp.b   #255,d1         ;have i done the max count yet?
  269.         bne.s   cmpt2
  270.  
  271. cmpt3:  move.b  d1,(a2)+        ;store the length
  272.         clr.b   d1              ;reset the length to 0
  273.         move.b  d2,(a2)+        ;store the pattern byte
  274.         addq.w  #2,d3           ;add two the the total length
  275.         tst.w   d0              ;have i done the whole row yet?
  276.         bne.s   cmpt2           ;no
  277.         
  278.         move.w  d3,d0
  279.         rts
  280.         
  281. ***********************************
  282. ***                ***
  283. ***********************************
  284.  SECTION printer,DATA,PUBLIC
  285.  
  286. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  287.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  288.     dc.l    p_block
  289.     dc.l    p_endtile,p_endpage,p_enddoc
  290.     dc.l    p_break,p_ident
  291.  
  292.  
  293. xdpi_tbl:    dc.w    90,180,180,180,180,180,180
  294. ydpi_tbl:    dc.w    90,180,180,180,180,180,180
  295. minl_tbl:    dc.w    45,90,90,90,90,90,90
  296. minr_tbl:    dc.w    45,90,90,90,90,90,90
  297. maxw_tbl:    dc.l    720,1440,1440,1440,1440,1440,1440
  298. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  299. mint_tbl:    dc.w    0,0,0,0,0,0,0
  300. minb_tbl:    dc.w    0,0,0,0,0,0,0
  301. xover_tbl:    dc.w    0,0,0,0,0,0,0
  302. yover_tbl:    dc.w    0,0,0,0,0,0,0
  303. rowht_tbl:    dc.w    1,1,1,1,1,1,1
  304. grmode_tbl:    dc.l    rez1,rez2,rez2,rez2,rez2,rez2,rez2
  305.  
  306.  
  307. driver:    dc.b    "HP PaintJet Color Comp. v2.0",0
  308.  
  309.  
  310. rez1:    dc.b    ESC,"E"
  311.     dc.b    ESC,"*t90R"        ;90 DPI
  312.     dc.b    ESC,"*r720S"        ;720 pixels wide max
  313.     dc.b    ESC,"*r4U"        ;4 bitplane mode
  314.     dc.b    ESC,"*b1M"        ;unencoded bitmap
  315.     dc.b    0
  316.  
  317. rez2:    dc.b    ESC,"E"
  318.     dc.b    ESC,"*t180R"        ;180 DPI
  319.     dc.b    ESC,"*r1440S"        ;1440 pixels wide max
  320.     dc.b    ESC,"*r4U"        ;4 bitplane mode
  321.     dc.b    ESC,"*b1M"        ;unencoded bitmap
  322.     dc.b    0
  323.  
  324.  
  325. bgnmode:    dc.b    ESC,"*r0A",0    ;graphics mode
  326. endline:    dc.b    ESC,"*b0W",0
  327. cleanup:    dc.b    ESC,"*r0B",0
  328. grfstart:    dc.b    ESC,"*b",0
  329. nocomp:         dc.b    ESC,"*b0M",0
  330. compress:       dc.b    ESC,"*b1M",0
  331.  
  332. *
  333. * Esc "*v",n,"I"
  334. * Esc "*v",red,"A"
  335. * Esc "*v",green,"B"
  336. * Esc "*v",blue,"C"
  337. *
  338. colorpal:
  339.     dc.b    ESC,"*v90A"
  340.     dc.b    ESC,"*v88B"
  341.     dc.b    ESC,"*v85C"
  342.     dc.b    ESC,"*v0I"        ;#0 white
  343.  
  344.     dc.b    ESC,"*v89A"
  345.     dc.b    ESC,"*v83B"
  346.     dc.b    ESC,"*v13C"
  347.     dc.b    ESC,"*v1I"        ;#1 yellow
  348.  
  349.     dc.b    ESC,"*v53A"
  350.     dc.b    ESC,"*v5B"
  351.     dc.b    ESC,"*v25C"
  352.     dc.b    ESC,"*v2I"        ;#2 magenta
  353.  
  354.     dc.b    ESC,"*v53A"
  355.     dc.b    ESC,"*v8B"
  356.     dc.b    ESC,"*v14C"
  357.     dc.b    ESC,"*v3I"        ;#3 red
  358.  
  359.     dc.b    ESC,"*v2A"
  360.     dc.b    ESC,"*v22B"
  361.     dc.b    ESC,"*v64C"
  362.     dc.b    ESC,"*v4I"        ;#4 cyan
  363.  
  364.     dc.b    ESC,"*v3A"
  365.     dc.b    ESC,"*v26B"
  366.     dc.b    ESC,"*v22C"
  367.     dc.b    ESC,"*v5I"        ;#5 green
  368.  
  369.     dc.b    ESC,"*v4A"
  370.     dc.b    ESC,"*v4B"
  371.     dc.b    ESC,"*v29C"
  372.     dc.b    ESC,"*v6I"        ;#6 blue
  373.  
  374.     dc.b    ESC,"*v4A"
  375.     dc.b    ESC,"*v4B"
  376.     dc.b    ESC,"*v6C"
  377.     dc.b    ESC,"*v7I"        ;#7 black
  378.  
  379.     dc.b    ESC,"*v4A"
  380.     dc.b    ESC,"*v4B"
  381.     dc.b    ESC,"*v6C"
  382.     dc.b    ESC,"*v8I"        ;#8 black
  383.  
  384.     dc.b    ESC,"*v4A"
  385.     dc.b    ESC,"*v4B"
  386.     dc.b    ESC,"*v6C"
  387.     dc.b    ESC,"*v9I"        ;#9 black
  388.  
  389.     dc.b    ESC,"*v4A"
  390.     dc.b    ESC,"*v4B"
  391.     dc.b    ESC,"*v6C"
  392.     dc.b    ESC,"*v10I"        ;#10 black
  393.  
  394.     dc.b    ESC,"*v4A"
  395.     dc.b    ESC,"*v4B"
  396.     dc.b    ESC,"*v6C"
  397.     dc.b    ESC,"*v11I"        ;#11 black
  398.  
  399.     dc.b    ESC,"*v4A"
  400.     dc.b    ESC,"*v4B"
  401.     dc.b    ESC,"*v6C"
  402.     dc.b    ESC,"*v12I"        ;#12 black
  403.  
  404.     dc.b    ESC,"*v4A"
  405.     dc.b    ESC,"*v4B"
  406.     dc.b    ESC,"*v6C"
  407.     dc.b    ESC,"*v13I"        ;#13 black
  408.  
  409.     dc.b    ESC,"*v4A"
  410.     dc.b    ESC,"*v4B"
  411.     dc.b    ESC,"*v6C"
  412.     dc.b    ESC,"*v14I"        ;#14 black
  413.  
  414.     dc.b    ESC,"*v4A"
  415.     dc.b    ESC,"*v4B"
  416.     dc.b    ESC,"*v6C"
  417.     dc.b    ESC,"*v15I"        ;#15 black
  418.  
  419.     dc.b    0
  420.  
  421.  
  422.  SECTION printer,BSS,PUBLIC
  423. table:        ds.l    1
  424. twidth:        ds.w    1
  425. v_base:        ds.l    1
  426. v_ptr:        ds.l    1
  427. width:        ds.w    1
  428. pplane:        ds.l    1
  429. count:        ds.w    1
  430. rows:        ds.w    1
  431. rowht:        ds.w    1
  432. grmode:        ds.l    1
  433. scroll:        ds.w    1
  434. buffer:         ds.b    1024
  435.