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

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