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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Star SB-10 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. SB10:    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.     lsl.w    #1,d0
  80.     lea    maxw_tbl,a1
  81.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  82.     lea    maxh_tbl,a1
  83.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  84.  
  85.     bra    prtok
  86.  
  87. *
  88. * going to begin printing a document
  89. *
  90. p_bgndoc:
  91.     bra    prtok
  92.  
  93. *
  94. * about to start printing of a page
  95. *
  96. p_bgnpage:
  97.     bra    prtok
  98.  
  99. *
  100. * about to print a new tile for the page
  101. *
  102. p_bgntile:
  103.     bra    prtok
  104.  
  105. *
  106. * print a block to the printer
  107. *
  108. p_block:
  109.     move.l    table,a0
  110.     move.l    pblockw(a0),d0
  111.     move.w    d0,width
  112.     move.l    pblockptr(a0),a1
  113.     move.l    (a1),a1
  114.     add.l    pblockoff(a0),a1
  115.     move.l    a1,lineptr
  116. *
  117.     bsr    putline            ;24 lines
  118. *
  119.     move.b    #ESC,d0            ;line spacing to 1/180"
  120.     bsr    send
  121.     move.b    #"J",d0
  122.     bsr    send
  123.     move.b    #8,d0
  124.     bra    send
  125.  
  126.  
  127. **************************************
  128.  
  129. putline:
  130.     move.l    lineptr,a0
  131.     clr.w    twidth
  132.     move.w    #23,d1
  133. print0:    move.w    width,d0
  134. print1:    tst.b    -1(a0,d0.w)
  135.     bne    print2
  136.     subq.w    #1,d0
  137.     bne    print1
  138.  
  139. print2:    cmp.w    twidth,d0
  140.     blt    print3
  141.     move.w    d0,twidth
  142. print3:    add.w    width,a0
  143.     dbf    d1,print0
  144.  
  145.     tst.w    twidth
  146.     beq    wspace
  147.  
  148.     lea    setgr,a0
  149.     bsr    sendline
  150.     move.w    twidth,d0        ;send number of graphic rows to follow
  151.     lsl.w    #3,d0
  152.     bsr    send
  153.     move.w    twidth,d0
  154.     lsr.w    #5,d0
  155.     bsr    send
  156.  
  157. print4:    move.w    #7,pixel
  158. print6:    move.w    #3,bytes
  159.     move.l    lineptr,a0
  160. print5:    move.w    pixel,d4
  161.     moveq    #7,d1
  162.     moveq    #0,d0
  163. s1:    btst    d4,(a0)
  164.     beq     s2
  165.     bset    d1,d0
  166. s2:    add.w    width,a0
  167.     dbf    d1,s1
  168.     move.l    a0,-(sp)
  169.     bsr    send
  170.     move.l    (sp)+,a0
  171.  
  172.     subq.w    #1,bytes
  173.     bne    print5
  174.     sub.w    #1,pixel
  175.     bcc    print6
  176.     add.l    #1,lineptr
  177.     subq.w    #1,twidth
  178.     bne    print4
  179. *
  180. wspace:    move.w    #CR,d0
  181.     bra    send
  182.  
  183. ************************************
  184. *
  185. * just finished describing current tile
  186. *
  187. p_endtile:
  188.     move.l    table,a0
  189.     move.l    pblockh(a0),d0
  190.     mulu    #180,d0
  191.     divu    pydpi(a0),d0
  192.     move.w    d0,scroll
  193. pend1:    tst.b    scroll
  194.     beq    pend2
  195.     move.b    #ESC,d0
  196.     bsr    send
  197.     move.b    #"J",d0
  198.     bsr    send
  199.     move.b    #255,d0
  200.     bsr    send
  201.     sub.w    #255,scroll
  202.     bra    pend1
  203. pend2:    tst.w    scroll
  204.     beq    prtok
  205.     move.b    #ESC,d0
  206.     bsr    send
  207.     move.b    #"J",d0
  208.     bsr    send
  209.     move.w    scroll,d0
  210.     bra    send
  211.     
  212. *
  213. * just finished describing all tiles for this page
  214. *
  215. p_endpage:
  216.     bra    prtok
  217.  
  218. *
  219. * finished printing the document
  220. *
  221. p_enddoc:
  222.     bra    prtok
  223.  
  224. *
  225. * user requested scroll
  226. *
  227. p_break:
  228.     bra    p_endtile
  229.  
  230. ***************************************************
  231. ***    these are the send routines for the    ***
  232. ***    dot matrix driver.            ***
  233. ***************************************************
  234. *
  235. *
  236. sendline:
  237.     move.b    (a0)+,d0
  238.     beq    prtok
  239.     move.l    a0,-(sp)
  240.     bsr    send
  241.     move.l    (sp)+,a0
  242.     bra    sendline
  243. *
  244. *
  245. send:    jmp    $ffffff
  246. *
  247. *
  248. ***********************************
  249. ***                ***
  250. ***********************************
  251.  SECTION printer,DATA,PUBLIC
  252.  
  253. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  254.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  255.     dc.l    p_block
  256.     dc.l    p_endtile,p_endpage,p_enddoc
  257.     dc.l    p_break,p_ident
  258.  
  259.  
  260. xdpi_tbl:    dc.w    180,180,180,180,180,180,180
  261. ydpi_tbl:    dc.w    120,120,120,120,120,120,120
  262. minl_tbl:    dc.w    45,45,45,45,45,45,45
  263. minr_tbl:    dc.w    45,45,45,45,45,45,45
  264. mint_tbl:    dc.w    0,0,0,0,0,0,0
  265. minb_tbl:    dc.w    0,0,0,0,0,0,0
  266. maxw_tbl:    dc.l    1440,1440,1440,1440,1440,1440,1440
  267. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  268. xover_tbl:    dc.w    0,0,0,0,0,0,0
  269. yover_tbl:    dc.w    0,0,0,0,0,0,0
  270. rowht_tbl:    dc.w    24,24,24,24,24,24,24
  271.  
  272.  
  273. driver:        dc.b    "Star SB-10 v2.0 beta",0
  274. setgr:        dc.b    ESC,"*",0
  275.  
  276.  SECTION printer,BSS,PUBLIC
  277. table:        ds.l    1
  278. twidth:        ds.w    1
  279. pixel:        ds.w    1
  280. v_base:        ds.l    1
  281. bytes:        ds.w    1
  282. aaa:        ds.l    1
  283. keep:        ds.w    1
  284. lineptr:    ds.l    1
  285. width:        ds.w    1
  286. count:        ds.w    1
  287. grmode:        ds.w    1
  288. rows:        ds.w    1
  289. rowht:        ds.w    1
  290. scroll:        ds.w    1
  291.