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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Xerox 4020 B&W 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. x4020bw:
  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    #PARALLEL+ASCENDING,device(a0)
  38. prtok:    moveq    #1,d0
  39.     rts
  40.  
  41. *
  42. * initialize the table of printer specific routines
  43. *
  44. p_init:
  45.     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.  
  50.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  51.  
  52. *
  53. *
  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. * going to begin printing a document
  96. *
  97. p_bgndoc:
  98.     lea    header,a0
  99.     jmp    sendline
  100.  
  101. *
  102. * about to start printing of a page
  103. *
  104. p_bgnpage:
  105.     bra    prtok
  106.  
  107. *
  108. * about to print a new tile for the page
  109. *
  110. p_bgntile:
  111.     bra    prtok
  112.  
  113. *
  114. * print a block to the printer
  115. *
  116. p_block:
  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. *
  126.     move.w    rows,loop
  127. pblck2:    move.l    v_base,lineptr
  128.     move.b    #"0",gcolor
  129.     bsr    putline
  130.     moveq    #0,d0
  131.     move.w    width,d0
  132.     add.l    d0,v_base
  133.     move.b    #ESC,d0
  134.     bsr    send
  135.     move.b    #"k",d0
  136.     bsr    send
  137.     move.b    #"2",d0
  138.     bsr    send
  139.     subq.w    #1,loop
  140.     bne    pblck2
  141. *
  142.     move.b    #ESC,d0
  143.     bsr    send
  144.     move.b    #"k",d0
  145.     bsr    send
  146.     move.b    #"1",d0
  147.     bra    send
  148.  
  149. **************************************
  150.  
  151. putline:
  152.     move.l    lineptr,a0
  153.     move.w    #0,twidth
  154.     move.w    #3,d1
  155. ptln0:    move.w    width,d0
  156. ptln1:    tst.b    -1(a0,d0.w)
  157.     bne    ptln2
  158.     subq.w    #1,d0
  159.     bne    ptln1
  160. ptln2:    cmp.w    twidth,d0
  161.     blt    ptln3
  162.     move.w    d0,twidth
  163. ptln3:    move.w    rows,d3
  164.     mulu    width,d3
  165.     add.l    d3,a0
  166.     dbf    d1,ptln0
  167. *
  168.     tst.w    twidth
  169.     beq    prtok
  170.  
  171.     move.w    #4,count
  172. print1:    move.b    #ESC,d0
  173.     bsr    send
  174.     move.b    #"g",d0
  175.     bsr    send
  176.     move.b    gcolor,d0
  177.     bsr    send
  178.     add.b    #1,gcolor
  179.  
  180.     moveq    #0,d0
  181.     move.w    twidth,d0        ;send number of graphic bytes to follow
  182.     tst.w    grmode
  183.     beq    prnt1
  184.     addq.w    #1,d0
  185.     lsr.w    #1,d0
  186. prnt1:    divu    #100,d0
  187.     or.b    #"0",d0
  188.     move.l    d0,-(sp)
  189.     bsr    send
  190.     move.l    (sp)+,d0
  191.     eor.w    d0,d0
  192.     swap    d0
  193.     divu    #10,d0
  194.     or.b    #"0",d0
  195.     move.l    d0,-(sp)
  196.     bsr    send
  197.     move.l    (sp)+,d0
  198.     swap    d0
  199.     or.b    #"0",d0
  200.     bsr    send
  201.     move.b    #",",d0
  202.     bsr    send
  203.  
  204. print2:    move.w    twidth,d7                 ;length of the data in byte
  205.     move.l    lineptr,a0
  206. print4:    tst.w    grmode
  207.     beq    prt1
  208.  
  209.     move.w    (a0)+,d1
  210.     move.w    #15,d2
  211.     move.w    #7,d3
  212.     moveq    #0,d0
  213. prt5:    btst    d2,d1
  214.     beq    prt6
  215.     bset    d3,d0
  216. prt6:    subq.w    #1,d2
  217.     btst    d2,d1
  218.     beq    prt7
  219.     bset    d3,d0
  220. prt7:    subq.w    #1,d2
  221.     dbf    d3,prt5
  222.     bra    prt2
  223.  
  224. prt1:    move.b    (a0)+,d0
  225.  
  226. prt2:    move.w    d7,-(sp)
  227.     move.l    a0,-(sp)
  228.     bsr    send
  229.     move.l    (sp)+,a0
  230.     move.w    (sp)+,d7
  231.     tst.w    grmode
  232.     beq    prt3
  233.     subq.w    #2,d7
  234.     bgt    print4
  235.     bra    prt4
  236. prt3:    subq.w    #1,d7
  237.     bgt    print4
  238.  
  239. prt4:    moveq    #0,d0
  240.     move.w    width,d0
  241.     add.l    d0,lineptr
  242.  
  243.     subq.w    #1,count
  244.     bne    print1
  245.     bra    prtok
  246.  
  247.  
  248. ************************************
  249. *
  250. * just finished describing current tile
  251. *
  252. p_endtile:
  253.     bra    prtok
  254.     
  255. *
  256. * just finished describing all tiles for this page
  257. *
  258. p_endpage:
  259.     bra    prtok
  260.  
  261. *
  262. * finished printing the document
  263. *
  264. p_enddoc:
  265.     bra    prtok
  266.  
  267. ***************************************************
  268. ***    these are the send routines for the    ***
  269. ***    dot matrix driver.            ***
  270. ***************************************************
  271. sendline:
  272.     move.b    (a0)+,d0
  273.     beq    prtok
  274.     move.l    a0,-(sp)
  275.     bsr    send
  276.     move.l    (sp)+,a0
  277.     bra    sendline
  278.  
  279. send:    jmp    $ffffff
  280.  
  281. ***********************************
  282. ***                ***
  283. ***********************************
  284.  SECTION printer,DATA,PUBLIC
  285.  
  286. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  287.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  288.     dc.l    p_block
  289.     dc.l    p_endtile,p_endpage,p_enddoc
  290.     dc.l    prtok,p_ident
  291.  
  292.  
  293. xdpi_tbl:    dc.w    120,120,240,240,240,240,240
  294. ydpi_tbl:    dc.w    120,240,240,240,240,240,240
  295. minl_tbl:    dc.w    30,30,60,60,60,60,60
  296. minr_tbl:    dc.w    30,30,60,60,60,60,60
  297. mint_tbl:    dc.w    0,0,0,0,0,0,0
  298. minb_tbl:    dc.w    0,0,0,0,0,0,0
  299. maxw_tbl:    dc.l    960,960,1920,1920,1920,1920,1920
  300. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  301. xover_tbl:    dc.w    0,0,50,50,50,50,50
  302. yover_tbl:    dc.w    0,50,50,50,50,50,50
  303. rowht_tbl:    dc.w    4,8,8,8,8,8,8
  304. rows_tbl:    dc.w    1,2,2,2,2,2,2
  305. grmode_tbl:    dc.w    0,0,1,1,1,1,1
  306.  
  307.  
  308. driver:        dc.b    "Xerox 4020 B&W v2.0",0
  309. header:        dc.b    ESC,"we",0
  310.  
  311.  SECTION printer,BSS,PUBLIC
  312. table:        ds.l    1
  313. twidth:        ds.w    1
  314. pixel:        ds.w    1
  315. v_base:        ds.l    1
  316. lineptr:    ds.l    1
  317. width:        ds.w    1
  318. count:        ds.w    1
  319. loop:        ds.w    1
  320. grmode:        ds.w    1
  321. rows:        ds.w    1
  322. rowht:        ds.w    1
  323. gcolor:        ds.w    1
  324.