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

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