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

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