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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * ImageWriter II black and white 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. C8510A:    
  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    #SERIAL+ASCENDING,device(a0)
  38. prtok:    moveq    #1,d0
  39.     rts
  40.  
  41. *
  42. * initialize the table of printer specific routines
  43. *
  44. p_init:    clr.b    pdl(a0)            ;no page description language
  45.     clr.b    pmult(a0)        ;automatically print mulitiple copies?
  46.     clr.b    pman(a0)        ;handle manual feed?
  47.     move.b    #PRT_BW,ptype(a0)    ;printer type?
  48.  
  49.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  50.  
  51.  
  52. *
  53. * pminlft and pmaxw must be evenly divisible by 16
  54. * this is the part that should be worked out
  55. *
  56.     move.w    pdensity(a0),d0
  57.     cmp.w    #7,d0
  58.     bcs    pint1
  59.     moveq    #6,d0
  60. pint1:    lsl.w    #1,d0
  61.  
  62.     lea    xdpi_tbl,a1
  63.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  64.     lea    ydpi_tbl,a1
  65.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  66.     lea    minl_tbl,a1
  67.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  68.     lea    minr_tbl,a1
  69.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  70.     lea    mint_tbl,a1
  71.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  72.     lea    minb_tbl,a1
  73.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  74.     lea    xover_tbl,a1
  75.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  76.     lea    yover_tbl,a1
  77.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  78.     lea    rowht_tbl,a1
  79.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  80.  
  81.     move.w    0(a1,d0.w),rowht
  82.     lea    rows_tbl,a1
  83.     move.w    0(a1,d0.w),rows
  84.     lea    grmode_tbl,a1
  85.     move.w    0(a1,d0.w),grmode
  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.  
  93.     bra    prtok
  94.  
  95.  
  96. *
  97. * going to begin printing a document
  98. *
  99. p_bgndoc:
  100.     move.b    #ESC,d0            ;unidirectional print
  101.     bsr    send
  102.     move.b    #">",d0
  103.     bra     send
  104.  
  105. *
  106. * about to start printing of a page
  107. *
  108. p_bgnpage:
  109.     bra    prtok
  110.  
  111. *
  112. * about to print a new tile for the page
  113. *
  114. p_bgntile:
  115.     bra    prtok
  116.  
  117. *
  118. * print a block to the printer
  119. *
  120. p_block:
  121.     move.l    table,a0
  122.     move.l    pblockw(a0),d0
  123.     move.w    d0,width
  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. *
  130. *print the block
  131. *
  132.  
  133.     move.w    rows,count
  134. printt:    move.l    v_base,lineptr
  135.     bsr    putline            ;first 8
  136.     moveq    #0,d0
  137.     move.w    width,d0
  138.     add.l    d0,v_base
  139.     subq.w    #1,count
  140.     bne    printt
  141. *
  142.     move.b    #ESC,d0            ;sets the line spacing to 1/144"
  143.     bsr    send
  144.     move.b    #"T",d0
  145.     bsr    send
  146.     moveq    #0,d0
  147.     move.w    #16,d0
  148.     sub.w    rows,d0
  149.     divu    #10,d0
  150.     move.l    d0,-(sp)
  151.     or.b    #"0",d0
  152.     bsr    send
  153.     move.l    (sp)+,d0
  154.     swap    d0
  155.     or.b    #"0",d0
  156.     bsr    send
  157.     move.b    #LF,d0
  158.     bra    send
  159.  
  160. **************************************
  161.  
  162. putline:
  163.     move.l    lineptr,a0
  164.     move.w    #0,twidth
  165.     move.w    #7,d1
  166. print0:    move.w    width,d0
  167. print1:    tst.b    -1(a0,d0.w)
  168.     bne    print2
  169.     subq.w    #1,d0
  170.     bne    print1
  171.  
  172.     moveq    #1,d0
  173. print2:    cmp.w    twidth,d0
  174.     blt    print3
  175.     move.w    d0,twidth
  176. print3:    move.w    rows,d3
  177. pri1:    add.w    width,a0
  178.     sub.w    #1,d3
  179.     bgt    pri1
  180.     dbf    d1,print0
  181. *
  182.     move.b    #ESC,d0
  183.     bsr    send
  184.     move.w    grmode,d0
  185.     bsr    send            ;"Q" or "P"
  186. *
  187.     move.b    #ESC,d0            ;sends the # of graphic bytes
  188.     bsr    send    
  189.     move.b    #"G",d0
  190.     bsr    send
  191.  
  192.     moveq    #0,d0
  193.     move.w    twidth,d0
  194.     lsl.l    #3,d0
  195.     divu    #1000,d0
  196.     move.l    d0,-(sp)
  197.     or.b    #"0",d0
  198.     bsr    send
  199.     move.l    (sp)+,d0
  200.     swap    d0
  201.     and.l    #$FFFF,d0
  202.     divu    #100,d0
  203.     move.l    d0,-(sp)
  204.     or.b    #"0",d0
  205.     bsr    send
  206.     move.l    (sp)+,d0
  207.     swap    d0
  208.     and.l    #$FFFF,d0
  209.     divu    #10,d0
  210.     move.l    d0,-(sp)
  211.     or.b    #"0",d0
  212.     bsr    send
  213.     move.l    (sp)+,d0
  214.     swap    d0
  215.     or.b    #"0",d0
  216.     bsr    send
  217.  
  218.     move.w    twidth,d2                 ;length of the data in byte
  219. print4:    move.w    d2,-(sp)
  220.     moveq    #7,d4
  221. print6:    move.w    d4,pixel
  222.     moveq    #0,d1
  223.     moveq    #0,d0
  224.     move.l    lineptr,a0
  225. s1:    btst    d4,(a0)
  226.     beq     s2
  227.     bset    d1,d0
  228. s2:    move.w    rows,d3
  229. pri2:    add.w    width,a0
  230.     sub.w    #1,d3
  231.     bgt    pri2
  232. *
  233.     addq.w    #1,d1
  234.     cmpi    #8,d1
  235.     bne    s1
  236.  
  237.     bsr    send
  238. *
  239.     move.w    pixel,d4
  240.     dbf    d4,print6
  241.  
  242.     add.l    #1,lineptr
  243.     move.w    (sp)+,d2
  244.     subq.w    #1,d2
  245.     bgt    print4
  246.  
  247.     move.b    #ESC,d0            ;sets the line spacing to 1/144"
  248.     bsr    send
  249.     move.b    #"T",d0
  250.     bsr    send
  251.     move.b    #"0",d0
  252.     bsr    send
  253.     move.b    #"1",d0
  254.     bsr    send
  255.  
  256.     move.b    #LF,d0
  257.     bsr    send
  258.  
  259.     move.b    #CR,d0
  260.     bra    send
  261.  
  262.  
  263. ************************************
  264. *
  265. * just finished describing current tile
  266. *
  267. p_endtile:
  268.     move.l    table,a0
  269.     move.l    pblockh(a0),d0
  270.     mulu    #144,d0
  271.     divu    pydpi(a0),d0
  272.     move.w    d0,scroll
  273.     beq    prtok
  274.  
  275. pend1:    move.b    #ESC,d0            ;sets the line spacing to 1/144"
  276.     bsr    send
  277.     move.b    #"T",d0
  278.     bsr    send
  279.     moveq    #0,d0
  280.     move.w    scroll,d0
  281.     cmp.w    #81,d0
  282.     bcs    pend2
  283.     move.w    #80,d0
  284. pend2:    divu    #10,d0
  285.     move.l    d0,-(sp)
  286.     or.b    #"0",d0
  287.     bsr    send
  288.     move.l    (sp)+,d0
  289.     swap    d0
  290.     or.b    #"0",d0
  291.     bsr    send
  292.     move.b    #LF,d0
  293.     bsr    send
  294.     sub.w    #80,scroll
  295.     bgt    pend1
  296.     bra    prtok
  297.  
  298. *
  299. * just finished describing all tiles for this page
  300. *
  301. p_endpage:
  302.     bra    prtok
  303.  
  304. *
  305. * finished printing the document
  306. *
  307. p_enddoc:
  308.     bra    prtok
  309.  
  310. *
  311. * user requested stop
  312. *
  313. p_break:
  314.     bra    p_endtile
  315.  
  316. ***************************************************
  317. ***    these are the send routines for the    ***
  318. ***    dot matrix driver.            ***
  319. ***************************************************
  320. *
  321. *
  322. sendline:
  323.     move.b    (a0)+,d0
  324.     beq    prtok
  325.     move.l    a0,-(sp)
  326.     bsr    send
  327.     move.l    (sp)+,a0
  328.     bra    sendline
  329. *
  330. *
  331. send:    jmp    $ffffff
  332. *
  333. *
  334. ***********************************
  335. ***                ***
  336. ***********************************
  337.  SECTION printer,DATA,PUBLIC
  338.  
  339. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  340.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  341.     dc.l    p_block
  342.     dc.l    p_endtile,p_endpage,p_enddoc
  343.     dc.l    p_break,p_ident
  344.  
  345.  
  346. xdpi_tbl:    dc.w    144,144,160,160,160,160,160
  347. ydpi_tbl:    dc.w    72,144,72,144,144,144,144
  348. minl_tbl:    dc.w    36,36,40,40,40,40,40
  349. minr_tbl:    dc.w    36,36,40,40,40,40,40
  350. mint_tbl:    dc.w    0,0,0,0,0,0,0
  351. minb_tbl:    dc.w    0,0,0,0,0,0,0
  352. maxw_tbl:    dc.l    1152,1152,1280,1280,1280,1280,1280
  353. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  354. xover_tbl:    dc.w    0,0,0,0,0,0,0
  355. yover_tbl:    dc.w    0,0,0,0,0,0,0
  356. rowht_tbl:    dc.w    8,16,8,16,16,16,16
  357. rows_tbl:    dc.w    1,2,1,2,2,2,2
  358. grmode_tbl:    dc.w    "p","p","P","P","P","P"
  359.  
  360.  
  361. driver:        dc.b    "ImageWriter II v2.0 beta",0
  362.  
  363.  SECTION printer,BSS,PUBLIC
  364. table:        ds.l    1
  365. twidth:        ds.w    1
  366. pixel:        ds.w    1
  367. v_base:        ds.l    1
  368. lineptr:    ds.l    1
  369. width:        ds.w    1
  370. count:        ds.w    1
  371. grmode:        ds.w    1
  372. rows:        ds.w    1
  373. rowht:        ds.w    1
  374. scroll:        ds.w    1
  375.