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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Toshiba P341 wide carriage 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. LQ800:    move.l    a0,table
  26.     lsl.w    #2,d0
  27.     lea    prntbl,a1
  28.     move.l    0(a1,d0.w),a1
  29.     jmp    (a1)
  30.  
  31. *
  32. * identify who I am, and set up who I like to speak to.
  33. *
  34. p_ident:
  35.     move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  36.     move.w    #PARALLEL+ASCENDING,device(a0)
  37. prtok:    moveq    #1,d0
  38.     rts
  39.  
  40. *
  41. * initialize the table of printer specific routines
  42. *
  43. p_init:    clr.b    pdl(a0)            ;no page description language
  44.     clr.b    pmult(a0)        ;automatically print mulitiple copies?
  45.     clr.b    pman(a0)        ;handle manual feed?
  46.     move.b    #PRT_BW,ptype(a0)    ;printer type?
  47.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  48.  
  49. *
  50. * pminlft and pmaxw must be evenly divisible by 16
  51. * this is the part that should be worked out
  52. *
  53.  
  54.     move.w    pdensity(a0),d0
  55.     cmp.w    #7,d0
  56.     bcs    pint1
  57.     moveq    #6,d0
  58. pint1:    lsl.w    #1,d0
  59.  
  60.     lea    xdpi_tbl,a1
  61.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  62.     lea    ydpi_tbl,a1
  63.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  64.     lea    minl_tbl,a1
  65.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  66.     lea    minr_tbl,a1
  67.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  68.     lea    mint_tbl,a1
  69.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  70.     lea    minb_tbl,a1
  71.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  72.     lea    xover_tbl,a1
  73.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  74.     lea    yover_tbl,a1
  75.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  76.     lea    rowht_tbl,a1
  77.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  78.  
  79.     move.w    0(a1,d0.w),rowht
  80.     lea    rows_tbl,a1
  81.     move.w    0(a1,d0.w),rows
  82.     lea    grmode_tbl,a1
  83.     move.w    0(a1,d0.w),grmode
  84.  
  85.     lsl.w    #1,d0
  86.     lea    maxw_tbl,a1
  87.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  88.     lea    maxh_tbl,a1
  89.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  90.     bra    prtok
  91.  
  92. *
  93. * going to begin printing a document
  94. *
  95. p_bgndoc:
  96.     bra    prtok
  97.  
  98. *
  99. * about to start printing of a page
  100. *
  101. p_bgnpage:
  102.     bra    prtok
  103.  
  104. *
  105. * about to print a new tile for the page
  106. *
  107. p_bgntile:
  108.     bra    prtok
  109.  
  110. *
  111. * print a block to the printer
  112. *
  113. p_block:
  114.     lea    setspac,a0
  115.     bsr    sendline
  116.  
  117.     move.l    table,a0
  118.     move.l    pblockw(a0),d0
  119.     move.w    d0,width
  120.     move.l    pblockptr(a0),a1
  121.     move.l    (a1),a1
  122.     add.l    pblockoff(a0),a1
  123.     move.l    a1,v_base
  124.  
  125.     move.w    rows,count
  126. printl:    move.l    v_base,lineptr
  127.     bsr    putline            ;24 lines
  128.     moveq    #0,d0
  129.     move.w    width,d0
  130.     add.l    d0,v_base
  131.     subq.w    #1,count
  132.     bne    printl
  133. *
  134.     move.b    #CR,d0
  135.     bsr    send
  136.     move.b    #LF,d0
  137.     bra    send
  138.  
  139. **************************************
  140.  
  141. putline:
  142.     move.l    lineptr,a0
  143.     clr.w    twidth
  144.     move.w    #23,d1
  145. print0:    move.w    width,d0
  146. print1:    tst.b    -1(a0,d0.w)
  147.     bne    print2
  148.     subq.w    #1,d0
  149.     bne    print1
  150.  
  151. print2:    cmp.w    twidth,d0
  152.     blt    print3
  153.     move.w    d0,twidth
  154. print3:    add.w    width,a0
  155.     dbf    d1,print0
  156.  
  157.     tst.w    twidth
  158.     beq    wspace
  159.  
  160.     move.b    #ESC,d0
  161.     bsr    send
  162.     move.w    grmode,d0
  163.     bsr    send
  164.  
  165.     moveq    #0,d0
  166.     move.w    twidth,d0
  167.     lsl.l    #3,d0
  168.     divu    #1000,d0
  169.     move.l    d0,-(sp)
  170.     or.b    #"0",d0
  171.     bsr    send
  172.     move.l    (sp)+,d0
  173.     swap    d0
  174.     and.l    #$FFFF,d0
  175.     divu    #100,d0
  176.     move.l    d0,-(sp)
  177.     or.b    #"0",d0
  178.     bsr    send
  179.     move.l    (sp)+,d0
  180.     swap    d0
  181.     and.l    #$FFFF,d0
  182.     divu    #10,d0
  183.     move.l    d0,-(sp)
  184.     or.b    #"0",d0
  185.     bsr    send
  186.     move.l    (sp)+,d0
  187.     swap    d0
  188.     or.b    #"0",d0
  189.     bsr    send
  190.  
  191. print4:    move.w    #7,pixel
  192. print6:    move.w    #4,bytes
  193.     move.l    lineptr,a0
  194. print5:    move.w    pixel,d4
  195.     moveq    #5,d1
  196.     moveq    #0,d0
  197. s1:    btst    d4,(a0)
  198.     beq     s2
  199.     bset    d1,d0
  200. s2:    add.w    width,a0
  201.     dbf    d1,s1
  202.     move.l    a0,-(sp)
  203.     bsr    send
  204.     move.l    (sp)+,a0
  205.  
  206.     subq.w    #1,bytes
  207.     bne    print5
  208.     sub.w    #1,pixel
  209.     bcc    print6
  210.     add.l    #1,lineptr
  211.     subq.w    #1,twidth
  212.     bne    print4
  213. *
  214. wspace:    bra    prtok
  215.  
  216. ************************************
  217. *
  218. * just finished describing current tile
  219. *
  220. p_endtile:
  221.     move.l    table,a0
  222.     move.l    pblockh(a0),d0
  223.     mulu    #120,d0
  224.     divu    #180,d0
  225.     add.w    #2,d0
  226.     mulu    #2,d0
  227.     divu    #5,d0
  228.     move.w    d0,scroll
  229.     beq    prtok
  230. pend1:    move.b    #ESC,d0
  231.     bsr    send
  232.     move.b    #"L",d0
  233.     bsr    send
  234.     moveq    #0,d0
  235.     move.w    scroll,d0
  236.     cmp.w    #81,d0
  237.     bcs    pend2
  238.     move.w    #80,d0
  239. pend2:    divu    #10,d0
  240.     move.l    d0,-(sp)
  241.     or.b    #"0",d0
  242.     bsr    send
  243.     move.l    (sp)+,d0
  244.     swap    d0
  245.     or.b    #"0",d0
  246.     bsr    send
  247.     move.b    #LF,d0
  248.     bsr    send
  249.     sub.w    #80,scroll
  250.     bgt    pend1
  251.     bra    prtok
  252.  
  253. *
  254. * just finished describing all tiles for this page
  255. *
  256. p_endpage:
  257.     bra    prtok
  258.  
  259. *
  260. * finished printing the document
  261. *
  262. p_enddoc:
  263.     bra    prtok
  264.  
  265. *
  266. * user requested stop
  267. *
  268. p_break:
  269.     bra    p_endtile
  270.  
  271. ***************************************************
  272. ***    these are the send routines for the    ***
  273. ***    dot matrix driver.            ***
  274. ***************************************************
  275. sendline:
  276.     move.b    (a0)+,d0
  277.     beq    prtok
  278.     move.l    a0,-(sp)
  279.     bsr    send
  280.     move.l    (sp)+,a0
  281.     bra    sendline
  282.  
  283. send:    jmp    $ffffff
  284.  
  285. ***********************************
  286. ***                ***
  287. ***********************************
  288.  SECTION printer,DATA,PUBLIC
  289.  
  290. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  291.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  292.     dc.l    p_block
  293.     dc.l    p_endtile,p_endpage,p_enddoc
  294.     dc.l    p_break,p_ident
  295.  
  296.  
  297. xdpi_tbl:    dc.w    180,360,360,360,360,360,360
  298. ydpi_tbl:    dc.w    180,180,180,180,180,180,180
  299. minl_tbl:    dc.w    45,90,90,90,90,90,90
  300. minr_tbl:    dc.w    45,90,90,90,90,90,90
  301. mint_tbl:    dc.w    0,0,0,0,0,0,0
  302. minb_tbl:    dc.w    0,0,0,0,0,0,0
  303. maxw_tbl:    dc.l    2448,4896,4896,4896,4896,4896,4896
  304. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  305. xover_tbl:    dc.w    0,50,50,50,50,50,50
  306. yover_tbl:    dc.w    0,0,0,0,0,0,0
  307. rowht_tbl:    dc.w    24,24,24,24,24,24,24
  308. rows_tbl:    dc.w    1,1,1,1,1,1,1
  309. grmode_tbl:    dc.w    $3b,$1d,$1d,$1d,$1d,$1d,$1d
  310.  
  311.  
  312. driver:        dc.b    "Toshiba P341 wide carriage v2.0 beta",0
  313. setspac:    dc.b    ESC,"L07",0
  314.  
  315.  SECTION printer,BSS,PUBLIC
  316. table:        ds.l    1
  317. twidth:        ds.w    1
  318. pixel:        ds.w    1
  319. v_base:        ds.l    1
  320. bytes:        ds.w    1
  321. aaa:        ds.l    1
  322. keep:        ds.w    1
  323. lineptr:    ds.l    1
  324. width:        ds.w    1
  325. count:        ds.w    1
  326. grmode:        ds.w    1
  327. rows:        ds.w    1
  328. rowht:        ds.w    1
  329. scroll:        ds.w    1
  330.