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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * ImageWriter II color print driver
  5. *
  6. CR    equ    $d
  7. LF    equ    $a
  8. FF    equ    $c
  9. ESC    equ    $1b
  10.  
  11. BLACK    equ    48
  12. CYAN    equ    51
  13. MAGENTA    equ    50
  14. YELLOW    equ    49
  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. C8510A:    
  31.     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    #SERIAL+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.  
  54.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  55.  
  56.  
  57. *
  58. * pminlft and pmaxw must be evenly divisible by 16
  59. * this is the part that should be worked out
  60. *
  61.     move.w    pdensity(a0),d0
  62.     cmp.w    #7,d0
  63.     bcs    pint1
  64.     moveq    #6,d0
  65. pint1:    lsl.w    #1,d0
  66.  
  67.     lea    xdpi_tbl,a1
  68.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  69.     lea    ydpi_tbl,a1
  70.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  71.     lea    minl_tbl,a1
  72.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  73.     lea    minr_tbl,a1
  74.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  75.     lea    mint_tbl,a1
  76.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  77.     lea    minb_tbl,a1
  78.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  79.     lea    xover_tbl,a1
  80.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  81.     lea    yover_tbl,a1
  82.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  83.     lea    rowht_tbl,a1
  84.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  85.  
  86.     move.w    0(a1,d0.w),rowht
  87.     lea    rows_tbl,a1
  88.     move.w    0(a1,d0.w),rows
  89.     lea    grmode_tbl,a1
  90.     move.w    0(a1,d0.w),grmode
  91.  
  92.     lsl.w    #1,d0
  93.     lea    maxw_tbl,a1
  94.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  95.     lea    maxh_tbl,a1
  96.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  97.  
  98.     bra    prtok
  99.  
  100.  
  101. *
  102. * going to begin printing a document
  103. *
  104. p_bgndoc:
  105.     move.b    #ESC,d0            ;unidirectional print
  106.     bsr    send
  107.     move.b    #">",d0
  108.     bra     send
  109.  
  110. *
  111. * about to start printing of a page
  112. *
  113. p_bgnpage:
  114.     bra    prtok
  115.  
  116. *
  117. * about to print a new tile for the page
  118. *
  119. p_bgntile:
  120.     bra    prtok
  121.  
  122. *
  123. * print a block to the printer
  124. *
  125. p_block:
  126.     move.l    table,a0
  127.     move.l    pblockplane(a0),pplane
  128.     move.l    pblockw(a0),d0
  129.     move.w    d0,width
  130.     move.l    pblockptr(a0),a1
  131.     move.l    (a1),a1
  132.     add.l    pblockoff(a0),a1
  133.     move.l    a1,v_base
  134.  
  135. *
  136. *print the block
  137. *
  138.  
  139.     move.w    rows,count
  140. printt:    lea    setcolor,a0        ;yellow
  141.     bsr    sendline
  142.     move.b    #YELLOW,d0
  143.     bsr    send
  144.     move.l    v_base,lineptr
  145.     move.l    pplane,d0
  146.     lsl.l    #1,d0
  147.     add.l    d0,lineptr
  148.     bsr    putline
  149.  
  150.     lea    setcolor,a0        ;magenta
  151.     bsr    sendline
  152.     move.b    #MAGENTA,d0
  153.     bsr    send
  154.     move.l    v_base,lineptr
  155.     move.l    pplane,d0
  156.     add.l    d0,lineptr
  157.     bsr    putline
  158.  
  159.     lea    setcolor,a0        ;cyan
  160.     bsr    sendline
  161.     move.b    #CYAN,d0
  162.     bsr    send
  163.     move.l    v_base,lineptr
  164.     bsr    putline
  165.  
  166.     lea    setcolor,a0        ;black
  167.     bsr    sendline
  168.     move.b    #BLACK,d0
  169.     bsr    send
  170.     move.l    v_base,lineptr
  171.     move.l    pplane,d0
  172.     lsl.l    #1,d0
  173.     add.l    pplane,d0
  174.     add.l    d0,lineptr
  175.     bsr    putline
  176.  
  177.     move.b    #ESC,d0            ;sets the line spacing to 1/144"
  178.     bsr    send
  179.     move.b    #"T",d0
  180.     bsr    send
  181.     move.b    #"0",d0
  182.     bsr    send
  183.     move.b    #"1",d0
  184.     bsr    send
  185.     move.b    #LF,d0
  186.     bsr    send
  187.  
  188.     moveq    #0,d0
  189.     move.w    width,d0
  190.     add.l    d0,v_base
  191.     subq.w    #1,count
  192.     bne    printt
  193. *
  194.     move.b    #ESC,d0            ;sets the line spacing to 1/144"
  195.     bsr    send
  196.     move.b    #"T",d0
  197.     bsr    send
  198.     moveq    #0,d0
  199.     move.w    #16,d0
  200.     sub.w    rows,d0
  201.     divu    #10,d0
  202.     move.l    d0,-(sp)
  203.     or.b    #"0",d0
  204.     bsr    send
  205.     move.l    (sp)+,d0
  206.     swap    d0
  207.     or.b    #"0",d0
  208.     bsr    send
  209.     move.b    #LF,d0
  210.     bra    send
  211.  
  212.  
  213.  
  214. **************************************
  215. putline:
  216.     move.l    lineptr,a0
  217.     move.w    #0,twidth
  218.     move.w    #7,d1
  219. print0:    move.w    width,d0
  220. print1:    tst.b    -1(a0,d0.w)
  221.     bne    print2
  222.     subq.w    #1,d0
  223.     bne    print1
  224.  
  225.     moveq    #1,d0
  226. print2:    cmp.w    twidth,d0
  227.     blt    print3
  228.     move.w    d0,twidth
  229. print3:    move.w    rows,d3
  230. pri1:    add.w    width,a0
  231.     sub.w    #1,d3
  232.     bgt    pri1
  233.     dbf    d1,print0
  234. *
  235.     move.b    #ESC,d0
  236.     bsr    send
  237.     move.w    grmode,d0
  238.     bsr    send            ;"p" or "P"
  239. *
  240.     move.b    #ESC,d0            ;sends the # of graphic bytes
  241.     bsr    send    
  242.     move.b    #"G",d0
  243.     bsr    send
  244.  
  245.     moveq    #0,d0
  246.     move.w    twidth,d0
  247.     lsl.l    #3,d0
  248.     divu    #1000,d0
  249.     move.l    d0,-(sp)
  250.     or.b    #"0",d0
  251.     bsr    send
  252.     move.l    (sp)+,d0
  253.     swap    d0
  254.     and.l    #$FFFF,d0
  255.     divu    #100,d0
  256.     move.l    d0,-(sp)
  257.     or.b    #"0",d0
  258.     bsr    send
  259.     move.l    (sp)+,d0
  260.     swap    d0
  261.     and.l    #$FFFF,d0
  262.     divu    #10,d0
  263.     move.l    d0,-(sp)
  264.     or.b    #"0",d0
  265.     bsr    send
  266.     move.l    (sp)+,d0
  267.     swap    d0
  268.     or.b    #"0",d0
  269.     bsr    send
  270.  
  271.     move.w    twidth,d2                 ;length of the data in byte
  272. print4:    move.w    d2,-(sp)
  273.     moveq    #7,d4
  274. print6:    move.w    d4,pixel
  275.     moveq    #0,d1
  276.     moveq    #0,d0
  277.     move.l    lineptr,a0
  278. s1:    btst    d4,(a0)
  279.     beq     s2
  280.     bset    d1,d0
  281. s2:    move.w    rows,d3
  282. pri2:    add.w    width,a0
  283.     sub.w    #1,d3
  284.     bgt    pri2
  285. *
  286.     addq.w    #1,d1
  287.     cmpi    #8,d1
  288.     bne    s1
  289.  
  290.     bsr    send
  291. *
  292.     move.w    pixel,d4
  293.     dbf    d4,print6
  294.  
  295.     add.l    #1,lineptr
  296.     move.w    (sp)+,d2
  297.     subq.w    #1,d2
  298.     bgt    print4
  299.  
  300.     move.b    #CR,d0
  301.     bra    send
  302.  
  303.  
  304. ************************************
  305. *
  306. * just finished describing current tile
  307. *
  308. p_endtile:
  309.     move.l    table,a0
  310.     move.l    pblockh(a0),d0
  311.     mulu    #144,d0
  312.     divu    pydpi(a0),d0
  313.     move.w    d0,scroll
  314.     beq    prtok
  315.  
  316. pend1:    move.b    #ESC,d0            ;sets the line spacing to 1/144"
  317.     bsr    send
  318.     move.b    #"T",d0
  319.     bsr    send
  320.     moveq    #0,d0
  321.     move.w    scroll,d0
  322.     cmp.w    #81,d0
  323.     bcs    pend2
  324.     move.w    #80,d0
  325. pend2:    divu    #10,d0
  326.     move.l    d0,-(sp)
  327.     or.b    #"0",d0
  328.     bsr    send
  329.     move.l    (sp)+,d0
  330.     swap    d0
  331.     or.b    #"0",d0
  332.     bsr    send
  333.     move.b    #LF,d0
  334.     bsr    send
  335.     sub.w    #80,scroll
  336.     bgt    pend1
  337.     bra    prtok
  338.     
  339. *
  340. * just finished describing all tiles for this page
  341. *
  342. p_endpage:
  343.     bra    prtok
  344.  
  345. *
  346. * finished printing the document
  347. *
  348. p_enddoc:
  349.     bra    prtok
  350.  
  351. *
  352. * requested user stop
  353. *
  354. p_break:
  355.     bra    p_endtile
  356.  
  357. ***************************************************
  358. ***    these are the send routines for the    ***
  359. ***    dot matrix driver.            ***
  360. ***************************************************
  361. *
  362. *
  363. sendline:
  364.     move.b    (a0)+,d0
  365.     beq    prtok
  366.     move.l    a0,-(sp)
  367.     bsr    send
  368.     move.l    (sp)+,a0
  369.     bra    sendline
  370. *
  371. *
  372. send:    jmp    $ffffff
  373. *
  374. *
  375. ***********************************
  376. ***                ***
  377. ***********************************
  378.  SECTION printer,DATA,PUBLIC
  379.  
  380. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  381.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  382.     dc.l    p_block
  383.     dc.l    p_endtile,p_endpage,p_enddoc
  384.     dc.l    p_break,p_ident
  385.  
  386.  
  387. xdpi_tbl:    dc.w    144,144,160,160,160,160,160
  388. ydpi_tbl:    dc.w    72,144,72,144,144,144,144
  389. minl_tbl:    dc.w    36,36,40,40,40,40,40
  390. minr_tbl:    dc.w    36,36,40,40,40,40,40
  391. mint_tbl:    dc.w    0,0,0,0,0,0,0
  392. minb_tbl:    dc.w    0,0,0,0,0,0,0
  393. maxw_tbl:    dc.l    1152,1152,1280,1280,1280,1280,1280
  394. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  395. xover_tbl:    dc.w    0,0,0,0,0,0,0
  396. yover_tbl:    dc.w    0,0,0,0,0,0,0
  397. rowht_tbl:    dc.w    8,16,8,16,16,16,16
  398. rows_tbl:    dc.w    1,2,1,2,2,2,2
  399. grmode_tbl:    dc.w    "p","p","P","P","P","P"
  400.  
  401. setcolor:    dc.b    ESC,"K",0
  402.  
  403. driver:        dc.b    "ImageWriter II color v2.0 beta",0
  404.  
  405.  SECTION printer,BSS,PUBLIC
  406. table:        ds.l    1
  407. twidth:        ds.w    1
  408. pixel:        ds.w    1
  409. v_base:        ds.l    1
  410. lineptr:    ds.l    1
  411. pplane:        ds.l    1
  412. width:        ds.w    1
  413. count:        ds.w    1
  414. grmode:        ds.w    1
  415. rows:        ds.w    1
  416. rowht:        ds.w    1
  417. scroll:        ds.w    1
  418.