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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * CItoh 8510S 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. *
  24. * distribute the calls to the appropriate routines
  25. *
  26. mx80:    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 down
  91.     bra    prtok
  92.  
  93. *
  94. * going to begin printing a document
  95. *
  96. p_bgndoc:
  97.     bra    prtok
  98.  
  99. *
  100. * about to start printing of a page
  101. *
  102. p_bgnpage:
  103.     bra    prtok
  104. *
  105. * about to print a new tile for the page
  106. *
  107. p_bgntile:
  108.     bra    prtok
  109. *
  110. * print a block to the printer
  111. *
  112. p_block:
  113.     move.l    table,a0
  114.     move.l    pblockw(a0),d0
  115.     move.w    d0,width
  116.     move.l    pblockptr(a0),a1
  117.     move.l    (a1),a1
  118.     add.l    pblockoff(a0),a1
  119.     move.l    a1,v_base
  120. *
  121. *
  122.     move.w    rows,count
  123. pblck2:    move.l    v_base,lineptr
  124.     bsr    putline
  125.     moveq    #0,d0
  126.     move.w    width,d0
  127.     add.l    d0,v_base
  128.     subq.w    #1,count
  129.     bne    pblck2
  130. *
  131.     move.b    #ESC,d0            ;already moved 1/216" down
  132.     bsr    send
  133.     move.b    #"J",d0
  134.     bsr    send
  135.     move.w    #24,d0
  136.     sub.w    rows,d0
  137.     bra    send
  138.  
  139. **************************************
  140.  
  141. putline:
  142.     move.l    lineptr,a0
  143.     move.w    #0,twidth
  144.     move.w    #7,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. print2:    cmp.w    twidth,d0
  151.     blt    print3
  152.     move.w    d0,twidth
  153. print3:    move.w    rows,d3
  154. pri1:    add.w    width,a0
  155.     sub.w    #1,d3
  156.     bgt    pri1
  157.     dbf    d1,print0
  158. *
  159.     tst.w    twidth
  160.     beq    endline
  161.  
  162.     move.b    #ESC,d0
  163.     bsr    send
  164.     move.w    grmode,d0
  165.     bsr    send
  166.  
  167.     move.w    twidth,d0        ;send number of graphic bytes to follow
  168.     lsl.w    #3,d0
  169.     bsr    send
  170.     move.w    twidth,d0    
  171.     lsr.w    #5,d0
  172.     bsr    send
  173.  
  174.     move.w    twidth,d2                 ;length of the data in byte
  175. print4:    move.w    d2,-(sp)
  176.     moveq    #7,d4
  177. print6:    move.w    d4,pixel
  178.     moveq    #7,d1
  179.     moveq    #0,d0
  180.     move.l    lineptr,a0
  181. s1:    btst    d4,(a0)
  182.     beq     s2
  183.     bset    d1,d0
  184. s2:
  185.     move.w    rows,d3
  186. pri2:
  187.     add.w    width,a0
  188.     sub.w    #1,d3
  189.     bgt    pri2
  190.  
  191.     dbf    d1,s1
  192.  
  193.     bsr    send
  194. *
  195.     move.w    pixel,d4
  196.     dbf    d4,print6
  197.  
  198.     add.l    #1,lineptr
  199.     move.w    (sp)+,d2
  200.     subq.w    #1,d2
  201.     bgt    print4
  202.  
  203. endline:
  204.     move.b    #ESC,d0            ;one-time paper feed of 1/216"
  205.     bsr    send
  206.     move.b    #"J",d0
  207.     bsr    send
  208.     move.b    #1,d0
  209.     bsr    send
  210.  
  211.     move.w    #CR,d0
  212.     bra    send
  213.  
  214. ************************************
  215. *
  216. * just finished describing current tile
  217. *
  218. p_endtile:
  219.     move.l    table,a0
  220.     move.l    pblockh(a0),d0
  221.     mulu    #160,d0
  222.     divu    pydpi(a0),d0
  223.     move.w    d0,scroll
  224. pend1:    tst.b    scroll
  225.     beq    pend2
  226.     move.b    #ESC,d0
  227.     bsr    send
  228.     move.b    #"J",d0
  229.     bsr    send
  230.     move.b    #255,d0
  231.     bsr    send
  232.     sub.w    #255,scroll
  233.     bra    pend1
  234. pend2:    tst.w    scroll
  235.     beq    prtok
  236.     move.b    #ESC,d0
  237.     bsr    send
  238.     move.b    #"J",d0
  239.     bsr    send
  240.     move.w    scroll,d0
  241.     bra    send
  242. *
  243. * just finished describing all tiles for this page
  244. *
  245. p_endpage:
  246.     bra    prtok
  247.  
  248. *
  249. * finished printing the document
  250. *
  251. p_enddoc:
  252.     bra    prtok
  253.  
  254. *
  255. * user requested break
  256. *
  257. p_break:
  258.     bra    p_endtile
  259.  
  260. ***************************************************
  261. ***    these are the send routines for the    ***
  262. ***    dot matrix driver.            ***
  263. ***************************************************
  264. *
  265. *
  266. sendline:
  267.     move.b    (a0)+,d0
  268.     beq    prtok
  269.     move.l    a0,-(sp)
  270.     bsr    send
  271.     move.l    (sp)+,a0
  272.     bra    sendline
  273. *
  274. *
  275. send:    jmp    $ffffff
  276. *
  277. *
  278. ***********************************
  279. ***                ***
  280. ***********************************
  281.  SECTION printer,DATA,PUBLIC
  282.  
  283. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  284.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  285.     dc.l    p_block
  286.     dc.l    p_endtile,p_endpage,p_enddoc
  287.     dc.l    p_break,p_ident
  288.  
  289.  
  290. xdpi_tbl:    dc.w    60,120,120,120,160,160,160
  291. ydpi_tbl:    dc.w    72,72,144,216,72,144,216
  292. minl_tbl:    dc.w    15,30,30,30,60,60,60
  293. minr_tbl:    dc.w    15,30,30,30,60,60,60
  294. mint_tbl:    dc.w    0,0,0,0,0,0,0
  295. minb_tbl:    dc.w    0,0,0,0,0,0,0
  296. maxw_tbl:    dc.l    480,960,960,960,1920,1920,1920
  297. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  298. xover_tbl:    dc.w    0,0,0,0,50,50,50
  299. yover_tbl:    dc.w    0,0,50,66,0,50,66
  300. rowht_tbl:    dc.w    8,8,16,24,8,16,24
  301. rows_tbl:    dc.w    1,1,2,3,1,2,3
  302. grmode_tbl:    dc.w    "K","L","L","L","Z","Z","Z"
  303.  
  304.  
  305. driver:    dc.b    "C-Itoh 8510S v2.0 beta",0
  306.  
  307.  SECTION printer,BSS,PUBLIC
  308. table:    ds.l    1
  309. twidth:    ds.w    1
  310. pixel:    ds.w    1
  311. v_base:    ds.l    1
  312. lineptr:ds.l    1
  313. width:    ds.w    1
  314. count:    ds.w    1
  315. grmode:    ds.w    1
  316. rows:    ds.w    1
  317. rowht:    ds.w    1
  318. scroll:    ds.w    1
  319.