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

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