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

  1.  include "pdlequ.h"
  2.  
  3. *
  4. * HP LaserJet 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    201
  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. rrts:    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    #1,pmult(a0)        ;automatically print mulitiple copies?
  48.     move.b    #1,pman(a0)        ;handle manual feed?
  49.     move.b    #PRT_BW,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.     move.w    0(a1,d0.w),rowht
  84.     lea    rows_tbl,a1
  85.     move.w    0(a1,d0.w),rows
  86.  
  87.     lsl.w    #1,d0
  88.     lea    maxw_tbl,a1
  89.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  90.     lea    maxh_tbl,a1
  91.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  92.     lea    grmode_tbl,a1
  93.     move.l    0(a1,d0.w),grmode
  94.     bra    prtok
  95.  
  96. *
  97. * going to begin printing a document
  98. *
  99. p_bgndoc:
  100.     move.l    table,a0
  101.     tst.b    pmanual(a0)        ;manual paper feed?
  102.     bne    pmanfeed
  103. *
  104.     lea    rstr8a,a0        ;paper tray feed
  105.     bsr    sendline
  106.     bra    psize
  107. *
  108. pmanfeed:
  109.     lea    rstr8b,a0        ;manual paper feed
  110.     bsr    sendline
  111.  
  112. psize:    clr.w    papertype
  113.     lea    papertbl,a0
  114. pbgn1:    move.w    (a0)+,d0
  115.     beq    pbgn3
  116.     move.l    (a0)+,a1
  117.     move.l    a0,-(sp)
  118.     move.w    d0,-(sp)
  119.     bsr    matchstr
  120.     bne    pbgn2
  121.     addq.l    #2,sp
  122.     move.l    (sp)+,a0
  123.     bra    pbgn1
  124.  
  125. pbgn2:    move.w    (sp)+,papertype
  126.     addq.l    #4,sp
  127.     lea    setpaper,a0
  128.     bsr    sendline
  129.     move.w    papertype,d0
  130.     bsr    sendn
  131.     move.b    #"A",d0
  132.     bsr    send
  133.  
  134. pbgn3:    bra    prtok
  135.  
  136. *
  137. *
  138. *
  139. matchstr:
  140.     move.l    table,a2
  141.     move.l    prtspcl(a2),a2
  142. mstr0:    move.l    a2,a0
  143.     move.l    a1,a3
  144.     tst.b    (a0)
  145.     beq    rrts        ;no match, return eq
  146. mstr1:    cmp.b    (a0)+,(a3)+
  147.     bne    mstr2
  148.     tst.b    (a3)
  149.     bne    mstr1
  150.     moveq    #1,d0
  151.     rts            ;return neq, a match
  152. mstr2:    addq.l    #1,a2
  153.     bra    mstr0
  154.  
  155. *
  156. * about to start printing of a page
  157. *
  158. p_bgnpage:
  159.     bra    prtok
  160.  
  161.  
  162. *
  163. * about to print a new tile for the page
  164. *
  165. p_bgntile:
  166.     move.l    grmode,a0        ;set the density
  167.     bsr    sendline
  168.  
  169.     move.l    table,a0
  170.     move.w    pcopies(a0),d0
  171.  
  172.     bsr    sendn
  173.     move.b    #"X",d0
  174.     bsr    send
  175.  
  176.     lea    rstr2,a0        ;set to top posistion & start graphics
  177.     bra    sendline
  178.  
  179. *
  180. * print a block to the printer
  181. *
  182. p_block:
  183.     move.l    table,a0
  184.     move.l    pblockw(a0),width
  185.     move.l    pblockptr(a0),a1
  186.     move.l    (a1),a1
  187.     add.l    pblockoff(a0),a1
  188.     move.l    a1,v_base
  189.  
  190.     move.l    width,d0
  191.     move.l    v_base,a0
  192. putln1:    tst.b    -1(a0,d0.l)
  193.     bne    putln2
  194.     subq.l    #1,d0
  195.     bne    putln1
  196.     moveq    #1,d0
  197. putln2:    move.l    d0,twidth
  198.  
  199.     lea    rstr5,a0        ;start raster graphics transfer
  200.     bsr    sendline        ; with # of bytes to follow
  201.     move.l    twidth,d0
  202.     bsr    sendn
  203.     move.b    #"W",d0
  204.     bsr    send
  205. *
  206.     move.l    twidth,d1
  207.     move.l    v_base,a0
  208. putln3:    move.b    (a0)+,d0
  209.     move.l    a0,-(sp)
  210.     move.l    d1,-(sp)
  211.     bsr    send
  212.     move.l    (sp)+,d1
  213.     move.l    (sp)+,a0
  214.     subq.l    #1,d1
  215.     bne    putln3
  216.     bra    prtok
  217.  
  218. *
  219. * just finished describing current tile
  220. *
  221. p_endtile:
  222.     lea    rstr6,a0        ;print the page (multiple copies)
  223.     bra    sendline
  224.  
  225. *
  226. * just finished describing all tiles for this page
  227. *
  228. p_endpage:
  229.     bra    prtok
  230.  
  231. *
  232. * finished printing the document
  233. *
  234. p_enddoc:
  235.     tst.w    papertype
  236.     beq    prtok
  237.     lea    defaultpaper,a0
  238.     bra    sendline
  239.  
  240. p_abort:
  241.     bra    p_enddoc
  242.  
  243. ***************************************************
  244. ***    these are the send routines for the    ***
  245. ***    dot matrix driver.            ***
  246. ***************************************************
  247. *
  248. sendline:
  249.     move.b    (a0)+,d0
  250.     beq    prtok
  251.     move.l    a0,-(sp)
  252.     bsr    send
  253.     move.l    (sp)+,a0
  254.     bra    sendline
  255. *
  256. *
  257. sendn:    cmp.w    #10,d0
  258.     bcs    sdn1
  259.     and.l    #$ffff,d0
  260.     divu    #10,d0
  261.     swap    d0
  262.     move.w    d0,-(sp)
  263.     swap    d0
  264.     bsr    sendn
  265.     move.w    (sp)+,d0
  266. sdn1:    or.b    #"0",d0
  267. *
  268. *    bra    send
  269. *
  270. *
  271. send:    jmp    $ffffff
  272. *
  273. *
  274. ***********************************
  275. ***                ***
  276. ***********************************
  277.  SECTION printer,DATA,PUBLIC
  278.  
  279. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  280.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  281.     dc.l    p_block
  282.     dc.l    p_endtile,p_endpage,p_enddoc
  283.     dc.l    p_abort,p_ident
  284.  
  285.  
  286. xdpi_tbl:    dc.w    75,100,150,300,300,300,300
  287. ydpi_tbl:    dc.w    75,100,150,300,300,300,300
  288. minl_tbl:    dc.w    20,26,40,80,80,80,80
  289. minr_tbl:    dc.w    20,26,40,80,80,80,80
  290. mint_tbl:    dc.w    14,19,28,56,56,56,56
  291. minb_tbl:    dc.w    14,19,28,56,56,56,56
  292. maxw_tbl:    dc.l    600,800,1200,2400,2400,2400,2400
  293. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  294. xover_tbl:    dc.w    0,0,0,0,0,0,0
  295. yover_tbl:    dc.w    0,0,0,0,0,0,0
  296. rowht_tbl:    dc.w    1,1,1,1,1,1,1
  297. rows_tbl:    dc.w    1,1,1,1,1,1,1
  298. grmode_tbl:    dc.l    rstr1d,rstr1c,rstr1b,rstr1a,rstr1a,rstr1a,rstr1a
  299.  
  300.  
  301. papertbl:
  302.     dc.w    1
  303.     dc.l    execstr
  304.     dc.w    2
  305.     dc.l    letterstr
  306.     dc.w    3
  307.     dc.l    legalstr
  308.     dc.w    26
  309.     dc.l    a4str
  310.     dc.w    80
  311.     dc.l    monarchstr
  312.     dc.w    81
  313.     dc.l    c10str
  314.     dc.w    90
  315.     dc.l    idlstr
  316.     dc.w    91
  317.     dc.l    ic5str
  318.     dc.w    0
  319.  
  320. setpaper:    dc.b    ESC,"&l",0
  321. defaultpaper:    dc.b    ESC,"&l0A",0
  322.  
  323. execstr:    dc.b    "executive",0
  324. letterstr:    dc.b    "letter",0
  325. legalstr:    dc.b    "legal",0
  326. a4str:        dc.b    "a4",0
  327. monarchstr:    dc.b    "monarch",0
  328. c10str:        dc.b    "commercial 10",0
  329. idlstr:        dc.b    "international dl",0
  330. ic5str:        dc.b    "international c5",0
  331.  
  332. driver:        dc.b    "HP LaserJet v2.1.0",0
  333.  
  334.  
  335. rstr1a:    dc.b    ESC,"*t300R",ESC,"&l0E",ESC,"&l",0    ;for 300 dpi
  336. rstr1b:    dc.b    ESC,"*t150R",ESC,"&l0E",ESC,"&l",0    ;for 150 dpi
  337. rstr1c:    dc.b    ESC,"*t100R",ESC,"&l0E",ESC,"&l",0    ;for 100 dpi
  338. rstr1d:    dc.b    ESC,"*t75R",ESC,"&l0E",ESC,"&l",0    ;for 75 dpi
  339.  
  340. rstr2:    dc.b    ESC,"&a135V",ESC,"&a45H"        ;posistion in upper left
  341.     dc.b    ESC,"*r1A",0                ;& start graphics
  342.  
  343. rstr5:    dc.b    ESC,"*b",0                ;begin raster line
  344.  
  345. rstr6:    dc.b    ESC,"*rB"                ;print page
  346.     dc.b    ESC,"E",0
  347.  
  348. rstr8a:    dc.b    ESC,"&l1H",0                ;paper tray feed
  349. rstr8b:    dc.b    ESC,"&l2H",0                ;manual paper feed
  350.  
  351.  
  352.  SECTION printer,BSS,PUBLIC
  353. table:        ds.l    1
  354. twidth:        ds.l    1
  355. v_base:        ds.l    1
  356. width:        ds.l    1
  357. rows:        ds.w    1
  358. rowht:        ds.w    1
  359. grmode:        ds.l    1
  360. papertype:    ds.w    1
  361.