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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Okidate Microline 192 print driver
  5. *
  6. CR    equ    $d
  7. LF    equ    $a
  8. FF    equ    $c
  9. ESC    equ    $1b
  10. FS    equ    $1c
  11.  
  12.  SECTION printer,CODE,PUBLIC
  13. ***************************************************************
  14. ***************************************************************
  15. ***************************************************************
  16. dumbentry:
  17.     clr.l    d0
  18.     rts
  19.  
  20.     dc.l    "PRNT"
  21.     dc.w    200
  22.  
  23. *
  24. * distribute the calls to the appropriate routines
  25. *
  26. oki182:    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:    clr.b    pdl(a0)            ;no page description language
  45.     clr.b    pmult(a0)        ;automatically print mulitiple copies?
  46.     clr.b    pman(a0)        ;handle manual feed?
  47.     move.b    #PRT_BW,ptype(a0)    ;printer type?
  48.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  49.  
  50. *
  51. * pminlft and pmaxw must be evenly divisible by 16
  52. * this is the part that should be worked out
  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 across
  91.  
  92.     bra    prtok
  93.  
  94. *
  95. * going to begin printing a document
  96. *
  97. p_bgndoc:
  98.     move.b    #ESC,d0
  99.     bsr    send
  100.     move.b    #"-",d0
  101.     bsr    send
  102.     move.b    #FS,d0
  103.     bra    send
  104.  
  105. *
  106. * about to start printing of a page
  107. *
  108. p_bgnpage:
  109.     bra    prtok
  110.  
  111. *
  112. * about to print a new tile for the page
  113. *
  114. p_bgntile:
  115.     bra    prtok
  116.  
  117. *
  118. * print a block to the printer
  119. *
  120. p_block:
  121.     move.l    table,a0
  122.     move.l    pblockw(a0),d0
  123.     move.w    d0,width
  124.     move.l    pblockptr(a0),a1
  125.     move.l    (a1),a1
  126.     add.l    pblockoff(a0),a1
  127.     move.l    a1,v_base
  128. *
  129. *
  130.     move.w    rows,count
  131. pblck2:    move.l    v_base,lineptr
  132.     bsr    putline
  133.     moveq    #0,d0
  134.     move.w    width,d0
  135.     add.l    d0,v_base
  136.     subq.w    #1,count
  137.     bne    pblck2
  138. *
  139.     move.b    #ESC,d0
  140.     bsr    send
  141.     move.b    #"%",d0
  142.     bsr    send
  143.     move.b    #"5",d0
  144.     bsr    send
  145.     move.w    #14,d0
  146.     sub.w    rows,d0
  147.     bra    send
  148.  
  149. **************************************
  150.  
  151. putline:
  152.     move.l    lineptr,a0
  153.     move.w    #0,twidth
  154.     move.w    #6,d1
  155. print0:    move.w    width,d0
  156. print1:    tst.b    -1(a0,d0.w)
  157.     bne    print2
  158.     subq.w    #1,d0
  159.     bne    print1
  160. print2:    cmp.w    twidth,d0
  161.     blt    print3
  162.     move.w    d0,twidth
  163. print3:    move.w    rows,d3
  164. pri1:    add.w    width,a0
  165.     sub.w    #1,d3
  166.     bgt    pri1
  167.     dbf    d1,print0
  168. *
  169.     tst.w    twidth
  170.     beq    endline
  171.  
  172.     move.b    #ESC,d0
  173.     bsr    send
  174.     move.b    #"*",d0
  175.     bsr    send
  176.     move.w    grmode,d0
  177.     bsr    send
  178.     move.b    #80,d0
  179.     bsr    send
  180.     move.b    #58,d0
  181.     bsr    send
  182.     move.b    #3,d0
  183.     bsr    send
  184.  
  185.     move.w    twidth,d2                 ;length of the data in byte
  186. print4:    move.w    d2,-(sp)
  187.     moveq    #7,d4
  188. print6:    move.w    d4,pixel
  189.     moveq    #0,d1
  190.     moveq    #0,d0
  191.     move.l    lineptr,a0
  192. s1:    btst    d4,(a0)
  193.     beq     s2
  194.     bset    d1,d0
  195. s2:
  196.     move.w    rows,d3
  197. pri2:    add.w    width,a0
  198.     sub.w    #1,d3
  199.     bgt    pri2
  200.  
  201.     addq.w    #1,d1
  202.     cmp.w    #7,d1
  203.     bcs    s1
  204.  
  205.     cmp.b    #3,d0
  206.     bne    .1
  207.     bsr    send
  208.     move.b    #3,d0
  209. .1:    bsr    send
  210. *
  211.     move.w    pixel,d4
  212.     dbf    d4,print6
  213.  
  214.     add.l    #1,lineptr
  215.     move.w    (sp)+,d2
  216.     subq.w    #1,d2
  217.     bgt    print4
  218.  
  219.     move.b    #3,d0
  220.     bsr    send
  221.     move.b    #2,d0
  222.     bsr    send
  223.  
  224. endline:
  225.     move.b    #CR,d0
  226.     bsr    send
  227.     move.b    #ESC,d0
  228.     bsr    send
  229.     move.b    #"%",d0
  230.     bsr    send
  231.     move.b    #"5",d0
  232.     bsr    send
  233.     move.b    #1,d0
  234.     bra    send
  235.  
  236. ************************************
  237. *
  238. * just finished describing current tile
  239. *
  240. p_endtile:
  241.     move.l    table,a0
  242.     move.l    pblockh(a0),d0
  243.     mulu    #144,d0
  244.     divu    pydpi(a0),d0
  245.     move.w    d0,scroll
  246. pend1:    tst.b    scroll
  247.     beq    pend2
  248.     move.b    #ESC,d0
  249.     bsr    send
  250.     move.b    #"%",d0
  251.     bsr    send
  252.     move.b    #"5",d0
  253.     bsr    send
  254.     move.b    #255,d0
  255.     bsr    send
  256.     sub.w    #255,scroll
  257.     bra    pend1
  258. pend2:    tst.w    scroll
  259.     beq    prtok
  260.     move.b    #ESC,d0
  261.     bsr    send
  262.     move.b    #"%",d0
  263.     bsr    send
  264.     move.b    #"5",d0
  265.     bsr    send
  266.     move.w    scroll,d0
  267.     bra    send
  268.  
  269. *
  270. * just finished describing all tiles for this page
  271. *
  272. p_endpage:
  273.     bra    prtok
  274.  
  275. *
  276. * finished printing the document
  277. *
  278. p_enddoc:
  279.     bra    prtok
  280.  
  281. *
  282. * user requested stop
  283. *
  284. p_break:
  285.     bra    p_endtile
  286.  
  287. ***************************************************
  288. ***    these are the send routines for the    ***
  289. ***    dot matrix driver.            ***
  290. ***************************************************
  291. sendline:
  292.     move.b    (a0)+,d0
  293.     beq    prtok
  294.     move.l    a0,-(sp)
  295.     bsr    send
  296.     move.l    (sp)+,a0
  297.     bra    sendline
  298.  
  299. send:    jmp    $ffffff
  300.  
  301. ***********************************
  302. ***                ***
  303. ***********************************
  304.  SECTION printer,DATA,PUBLIC
  305.  
  306. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  307.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  308.     dc.l    p_block
  309.     dc.l    p_endtile,p_endpage,p_enddoc
  310.     dc.l    p_break,p_ident
  311.  
  312.  
  313. xdpi_tbl:    dc.w    72,72,144,144,288,288,288
  314. ydpi_tbl:    dc.w    72,144,72,144,72,144,144
  315. minl_tbl:    dc.w    18,18,36,36,72,72,72
  316. minr_tbl:    dc.w    18,18,36,36,72,72,72
  317. mint_tbl:    dc.w    0,0,0,0,0,0,0
  318. minb_tbl:    dc.w    0,0,0,0,0,0,0
  319. maxw_tbl:    dc.w    576,576,1152,1152,2304,2304,2304
  320. maxh_tbl:    dc.w    0,0,0,0,0,0,0
  321. xover_tbl:    dc.w    0,0,50,50,80,80,80
  322. yover_tbl:    dc.w    0,50,0,50,0,50,50
  323. rowht_tbl:    dc.w    7,14,7,14,7,14,14
  324. rows_tbl:    dc.w    1,2,1,2,1,2,2
  325. grmode_tbl:    dc.w    102,102,106,106,114,114,114
  326.  
  327.  
  328. driver:        dc.b    "Okidate ML-192 v2.0 beta",0
  329.  
  330.  SECTION printer,BSS,PUBLIC
  331. table:        ds.l    1
  332. twidth:        ds.w    1
  333. pixel:        ds.w    1
  334. v_base:        ds.l    1
  335. lineptr:    ds.l    1
  336. width:        ds.w    1
  337. count:        ds.w    1
  338. grmode:        ds.w    1
  339. rows:        ds.w    1
  340. rowht:        ds.w    1
  341. scroll:        ds.w    1
  342.