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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Okidate MicroLine 292 color print driver
  5. *
  6. BLACK    equ    0
  7. CYAN    equ    2
  8. MAGENTA    equ    1
  9. YELLOW    equ    4
  10.  
  11. CR    equ    $d
  12. LF    equ    $a
  13. FF    equ    $c
  14. ESC    equ    $1b
  15.  
  16.  SECTION printer,CODE,PUBLIC
  17. ***************************************************************
  18. ***************************************************************
  19. ***************************************************************
  20. dumbentry:
  21.     clr.l    d0
  22.     rts
  23.  
  24.     dc.l    "PRNT"
  25.     dc.w    200
  26.  
  27. *
  28. * distribute the calls to the appropriate routines
  29. *
  30. ml292c:    move.l    a0,table
  31.     lsl.w    #2,d0
  32.     lea    prntbl,a1
  33.     move.l    0(a1,d0.w),a1
  34.     jmp    (a1)
  35.  
  36. *
  37. * identify who I am, and set up who I like to speak to.
  38. *
  39. p_ident:
  40.     move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  41.     move.w    #PARALLEL+ASCENDING,device(a0)
  42. prtok:    moveq    #1,d0
  43.     rts
  44.  
  45. *
  46. * initialize the table of printer specific routines
  47. *
  48. p_init:    clr.b    pdl(a0)            ;no page description language
  49.     clr.b    pmult(a0)        ;automatically print mulitiple copies?
  50.     clr.b    pman(a0)        ;handle manual feed?
  51.     move.b    #PRT_CMYK,ptype(a0)    ;printer type?
  52.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  53. *
  54. * pminlft and pmaxw must be evenly divisible by 16
  55. * this is the part that should be worked out
  56. *
  57.  
  58.     move.w    pdensity(a0),d0
  59.     cmp.w    #7,d0
  60.     bcs    pint1
  61.     moveq    #6,d0
  62. pint1:    lsl.w    #1,d0
  63.  
  64.     lea    xdpi_tbl,a1
  65.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  66.     lea    ydpi_tbl,a1
  67.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  68.     lea    minl_tbl,a1
  69.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  70.     lea    minr_tbl,a1
  71.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  72.     lea    mint_tbl,a1
  73.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  74.     lea    minb_tbl,a1
  75.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  76.     lea    xover_tbl,a1
  77.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  78.     lea    yover_tbl,a1
  79.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  80.     lea    rowht_tbl,a1
  81.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  82.  
  83.     move.w    0(a1,d0.w),rowht
  84.     lea    rows_tbl,a1
  85.     move.w    0(a1,d0.w),rows
  86.     lea    grmode_tbl,a1
  87.     move.w    0(a1,d0.w),grmode
  88.  
  89.     lsl.w    #1,d0
  90.     lea    maxw_tbl,a1
  91.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  92.     lea    maxh_tbl,a1
  93.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  94.     bra    prtok
  95.  
  96.  
  97. *
  98. * going to begin printing a document
  99. *
  100. p_bgndoc:
  101.     bra    prtok
  102.  
  103. *
  104. * about to start printing of a page
  105. *
  106. p_bgnpage:
  107.     bra    prtok
  108.  
  109. *
  110. * about to print a new tile for the page
  111. *
  112. p_bgntile:
  113.     lea    prtstr1,a0
  114.     bra    sendline
  115.  
  116.  
  117. *
  118. * print a block to the printer
  119. *
  120. p_block:
  121.     move.l    table,a0
  122.     move.l    pblockplane(a0),pplane
  123.     move.l    pblockw(a0),d0
  124.     move.w    d0,width
  125.     move.l    pblockptr(a0),a1
  126.     move.l    (a1),a1
  127.     add.l    pblockoff(a0),a1
  128.     move.l    a1,v_base
  129.  
  130. *
  131. *print the block
  132. *
  133.     move.w    rows,count
  134. printt:    lea    setcolor,a0        ;yellow
  135.     bsr    sendline
  136.     move.b    #YELLOW,d0
  137.     bsr    send
  138.     move.l    v_base,lineptr
  139.     move.l    pplane,d0
  140.     lsl.l    #1,d0
  141.     add.l    d0,lineptr
  142.     bsr    putline
  143.     lea    setcolor,a0        ;magenta
  144.     bsr    sendline
  145.     move.b    #MAGENTA,d0
  146.     bsr    send
  147.     move.l    v_base,lineptr
  148.     move.l    pplane,d0
  149.     add.l    d0,lineptr
  150.     bsr    putline
  151.     lea    setcolor,a0        ;cyan
  152.     bsr    sendline
  153.     move.b    #CYAN,d0
  154.     bsr    send
  155.     move.l    v_base,lineptr
  156.     bsr    putline
  157.     lea    setcolor,a0        ;black
  158.     bsr    sendline
  159.     move.b    #BLACK,d0
  160.     bsr    send
  161.     move.l    v_base,lineptr
  162.     move.l    pplane,d0
  163.     lsl.l    #1,d0
  164.     add.l    pplane,d0
  165.     add.l    d0,lineptr
  166.     bsr    putline
  167.  
  168.     lea    prtstr2,a0        ;line spacing of n/288"
  169.     bsr    sendline
  170.     moveq    #1,d0
  171.     bsr    send
  172.  
  173.     moveq    #0,d0
  174.     move.w    width,d0
  175.     add.l    d0,v_base
  176.     subq.w    #1,count
  177.     bne    printt
  178. *
  179.     move.b    #CR,d0
  180.     bsr    send
  181.  
  182.     lea    prtstr2,a0        ;line spacing of n/288"
  183.     bsr    sendline
  184.     move.w    #32,d0
  185.     sub.w    rows,d0
  186.     bra    send
  187.  
  188. **************************************
  189.  
  190. putline:
  191.     move.l    lineptr,a0
  192.     move.w    #0,twidth
  193.     move.w    #15,d1
  194. print0:    move.w    width,d0
  195. print1:    tst.b    -1(a0,d0.w)
  196.     bne    print2
  197.     subq.w    #1,d0
  198.     bne    print1
  199. print2:    cmp.w    twidth,d0
  200.     blt    print3
  201.     move.w    d0,twidth
  202. print3:    move.w    rows,d3
  203. pri1:    add.w    width,a0
  204.     sub.w    #1,d3
  205.     bgt    pri1
  206. *
  207.     dbf    d1,print0
  208. *
  209.     tst.w    twidth
  210.     beq    wspace
  211.  
  212.     move.b    #ESC,d0
  213.     bsr    send
  214.     move.w    grmode,d0
  215.     bsr    send
  216.     move.w    twidth,d0        ;send number of graphic bytes to follow
  217.     lsl.w    #3,d0
  218.     bsr    send
  219.     move.w    twidth,d0    
  220.     lsr.w    #5,d0
  221.     bsr    send
  222.  
  223.     move.w    twidth,d2                 ;length of the data in byte
  224. print4:    move.w    d2,twidth
  225.     moveq    #7,d4
  226. print6:    move.w    d4,pixel
  227.     moveq    #1,d3
  228.     move.l    lineptr,a0
  229. print5:    move.w    d3,bytes
  230.     moveq    #7,d1
  231.     moveq    #0,d0
  232. *
  233. s1:    btst    d4,(a0)
  234.     beq     s2
  235.     bset    d1,d0
  236. s2:    move.w    rows,d3
  237. pri2:    add.w    width,a0
  238.     sub.w    #1,d3
  239.     bgt    pri2
  240. *
  241.     dbf    d1,s1
  242.     move.l    a0,-(sp)
  243.     bsr    send
  244.     move.l    (sp)+,a0
  245. *
  246.     move.w    pixel,d4
  247.     move.w    bytes,d3
  248.     dbf    d3,print5
  249. *
  250.     move.w    pixel,d4
  251.     dbf    d4,print6
  252. *
  253.     add.l    #1,lineptr
  254.     move.w    twidth,d2
  255.     subq.w    #1,d2
  256.     bgt    print4
  257. *
  258. wspace:    move.b    #CR,d0
  259.     bra    send
  260.  
  261. ************************************
  262. *
  263. * just finished describing current tile
  264. *
  265. p_endtile:
  266.     move.l    table,a0
  267.     move.l    pblockh(a0),d0
  268.     mulu    #288,d0
  269.     divu    pydpi(a0),d0
  270.     move.w    d0,scroll
  271. pend1:    tst.b    scroll
  272.     beq    pend2
  273.  
  274.     lea    prtstr2,a0        ;line spacing of n/288"
  275.     bsr    sendline
  276.     move.b    #255,d0
  277.     bsr    send
  278.     sub.w    #255,scroll
  279.     bra    pend1
  280. pend2:    tst.w    scroll
  281.     beq    prtok
  282.     lea    prtstr2,a0        ;line spacing of n/288"
  283.     bsr    sendline
  284.     move.w    scroll,d0
  285.     bra    send
  286.     
  287. *
  288. * just finished describing all tiles for this page
  289. *
  290. p_endpage:
  291.     bra    prtok
  292.  
  293. *
  294. * finished printing the document
  295. *
  296. p_enddoc:
  297.     bra    prtok
  298.  
  299. *
  300. * user requested break
  301. *
  302. p_break:
  303.     bra    p_endtile
  304.  
  305. ***************************************************
  306. ***    these are the send routines for the    ***
  307. ***    dot matrix driver.            ***
  308. ***************************************************
  309. sendline:
  310.     move.b    (a0)+,d0
  311.     beq    prtok
  312.     move.l    a0,-(sp)
  313.     bsr    send
  314.     move.l    (sp)+,a0
  315.     bra    sendline
  316.  
  317. send:    jmp    $ffffff
  318.  
  319. ***********************************
  320. ***                ***
  321. ***********************************
  322.  SECTION printer,DATA,PUBLIC
  323.  
  324. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  325.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  326.     dc.l    p_block
  327.     dc.l    p_endtile,p_endpage,p_enddoc
  328.     dc.l    p_break,p_ident
  329.  
  330. xdpi_tbl:    dc.w    60,60,120,120,240,240,240
  331. ydpi_tbl:    dc.w    144,288,144,288,144,288,288
  332. minl_tbl:    dc.w    15,15,30,30,60,60,60
  333. minr_tbl:    dc.w    15,15,30,30,60,60,60
  334. mint_tbl:    dc.w    0,0,0,0,0,0,0
  335. minb_tbl:    dc.w    0,0,0,0,0,0,0
  336. maxw_tbl:    dc.l    480,480,960,960,1920,1920,1920
  337. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  338. xover_tbl:    dc.w    0,0,25,25,50,50,50
  339. yover_tbl:    dc.w    0,50,0,50,0,50,50
  340. rowht_tbl:    dc.w    16,32,16,32,16,32,32
  341. rows_tbl:    dc.w    1,2,1,2,1,2,2
  342. grmode_tbl:    dc.w    "K","K","Y","Y","Z","Z","Z"
  343.  
  344.  
  345. driver:        dc.b    "Okidata ML-292 Color v2.0.2 Beta",0
  346.  
  347. prtstr1:    dc.b    ESC,"#B",0
  348. prtstr2:    dc.b    ESC,"%4",0
  349. setcolor:    dc.b    ESC,"r",0
  350.  
  351.  SECTION printer,BSS,PUBLIC
  352. table:        ds.l    1
  353. twidth:        ds.w    1
  354. pixel:        ds.w    1
  355. v_base:        ds.l    1
  356. bytes:        ds.w    1
  357. lineptr:    ds.l    1
  358. width:        ds.w    1
  359. count:        ds.w    1
  360. grmode:        ds.w    1
  361. rows:        ds.w    1
  362. rowht:        ds.w    1
  363. scroll:        ds.w    1
  364. pplane:        ds.l    1
  365.  
  366. ; 2.0.2- tried to fix problem with it not scrolling down between lines
  367.  
  368.