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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Nec P7 color print 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. FS    equ    $1c
  16.  
  17.  SECTION printer,CODE,PUBLIC
  18. ***************************************************************
  19. ***************************************************************
  20. ***************************************************************
  21. dumbentry:
  22.     clr.l    d0
  23.     rts
  24.  
  25.     dc.l    "PRNT"
  26.     dc.w    200
  27.  
  28. *
  29. * distribute the calls to the appropriate routines
  30. *
  31. NeccP7:    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.  
  54.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  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.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  94.     lea    maxh_tbl,a1
  95.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  96.  
  97.     bra    prtok
  98.  
  99.  
  100. *
  101. * going to begin printing a document
  102. *
  103. p_bgndoc:
  104.     move.b    #ESC,d0            ;unidirectional print
  105.     bsr    send
  106.     move.b    #"U",d0
  107.     bsr     send
  108.     move.b    #1,d0
  109.     bra     send
  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.     move.w    rows,count
  139. printt:    move.l    v_base,a0        ;yellow
  140.     add.l    pplane,a0
  141.     add.l    pplane,a0
  142.     move.b    #YELLOW,d0
  143.     bsr    putline
  144.  
  145.     move.l    v_base,a0        ;magenta
  146.     add.l    pplane,a0
  147.     move.b    #MAGENTA,d0
  148.     bsr    putline
  149.  
  150.     move.l    v_base,a0        ;cyan
  151.     move.b    #CYAN,d0
  152.     bsr    putline
  153.  
  154.     move.l    v_base,a0        ;black
  155.     add.l    pplane,a0
  156.     add.l    pplane,a0
  157.     add.l    pplane,a0
  158.     move.b    #BLACK,d0
  159.     bsr    putline
  160.  
  161.  
  162.     move.b    #FS,d0            ;set line spacing to 1/360"
  163.     bsr    send
  164.     move.b    #"3",d0
  165.     bsr    send
  166.     move.b    #1,d0
  167.     bsr    send
  168.     move.w    #LF,d0
  169.     bsr    send
  170.  
  171.     moveq    #0,d0
  172.     move.w    width,d0
  173.     add.l    d0,v_base
  174.     subq.w    #1,count
  175.     bne    printt
  176. *
  177.     move.b    #FS,d0            ;set line spacing to 1/360"
  178.     bsr    send
  179.     move.b    #"3",d0
  180.     bsr    send
  181.     move.w    #48,d0
  182.     sub.w    rows,d0
  183.     bsr    send
  184.  
  185.     move.b    #LF,d0
  186.     bra    send
  187.  
  188. **************************************
  189.  
  190. putline:
  191.     move.l    a0,lineptr
  192.     move.w    d0,-(sp)
  193.     lea    setcolor,a0
  194.     bsr    sendline
  195.     move.w    (sp)+,d0
  196.     bsr    send
  197.  
  198.     move.l    lineptr,a0
  199.     move.w    #0,twidth
  200.     move.w    #23,d1
  201. print0:    move.w    width,d0
  202. print1:    tst.b    -1(a0,d0.w)
  203.     bne    print2
  204.     subq.w    #1,d0
  205.     bne    print1
  206.     moveq    #1,d0
  207. print2:    cmp.w    twidth,d0
  208.     blt    print3
  209.     move.w    d0,twidth
  210. print3:    
  211.     move.w    rows,d3
  212. pri1:
  213.     add.w    width,a0
  214.     sub.w    #1,d3
  215.     bgt    pri1
  216. *
  217.     dbf    d1,print0
  218. *    
  219.     lea    setgr,a0
  220.     bsr    sendline
  221.     move.w    grmode,d0
  222.     bsr    send
  223.     move.w    twidth,d0        ;send number of graphic bytes to follow
  224.     lsl.w    #3,d0
  225.     bsr    send
  226.     move.w    twidth,d0    
  227.     lsr.w    #5,d0
  228.     bsr    send
  229.  
  230.     move.w    twidth,d2                 ;length of the data in byte
  231. print4:    move.w    d2,twidth
  232.     moveq    #7,d4
  233. print6:    move.w    d4,pixel
  234.     moveq    #2,d3
  235.     move.l    lineptr,a0
  236. print5:    move.w    d3,bytes
  237.     moveq    #7,d1
  238.     moveq    #0,d0
  239. *
  240. s1:    btst    d4,(a0)
  241.     beq     s2
  242.     bset    d1,d0
  243. s2:
  244.     move.w    rows,d3
  245. pri2:
  246.     add.w    width,a0
  247.     sub.w    #1,d3
  248.     bgt    pri2
  249. *
  250.     dbf    d1,s1
  251.     move.l    a0,-(sp)
  252.     bsr    send
  253.     move.l    (sp)+,a0
  254. *
  255.     move.w    pixel,d4
  256.     move.w    bytes,d3
  257.     dbf    d3,print5
  258. *
  259.     move.w    pixel,d4
  260.     dbf    d4,print6
  261. *
  262.     add.l    #1,lineptr
  263.     move.w    twidth,d2
  264.     subq.w    #1,d2
  265.     bgt    print4
  266. *
  267.     move.w    #CR,d0
  268.     bra    send
  269.  
  270. ************************************
  271. *
  272. * just finished describing current tile
  273. *
  274. p_endtile:
  275.     move.l    table,a0
  276.     move.l    pblockh(a0),d0
  277.     mulu    #360,d0
  278.     divu    pydpi(a0),d0
  279.     move.w    d0,scroll
  280. pend1:    tst.b    scroll
  281.     beq    pend2
  282.     move.b    #FS,d0
  283.     bsr    send
  284.     move.b    #"3",d0
  285.     bsr    send
  286.     move.b    #255,d0
  287.     bsr    send
  288.     move.b    #LF,d0
  289.     bsr    send
  290.     sub.w    #255,scroll
  291.     bra    pend1
  292. pend2:    tst.w    scroll
  293.     beq    prtok
  294.     move.b    #FS,d0
  295.     bsr    send
  296.     move.b    #"3",d0
  297.     bsr    send
  298.     move.w    scroll,d0
  299.     bsr    send
  300.     move.b    #LF,d0
  301.     bra    send
  302.  
  303. *
  304. * just finished describing all tiles for this page
  305. *
  306. p_endpage:
  307.     bra    prtok
  308.  
  309. *
  310. * finished printing the document
  311. *
  312. p_enddoc:
  313.     bra    prtok
  314.  
  315. *
  316. * user requested stop
  317. *
  318. p_break:
  319.     bra    p_endtile
  320.  
  321. ***************************************************
  322. ***    these are the send routines for the    ***
  323. ***    dot matrix driver.            ***
  324. ***************************************************
  325. sendline:
  326.     move.b    (a0)+,d0
  327.     beq    prtok
  328.     move.l    a0,-(sp)
  329.     bsr    send
  330.     move.l    (sp)+,a0
  331.     bra    sendline
  332.  
  333. send:    jmp    $ffffff
  334.  
  335. ***********************************
  336. ***                ***
  337. ***********************************
  338.  SECTION printer,DATA,PUBLIC
  339.  
  340. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  341.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  342.     dc.l    p_block
  343.     dc.l    p_endtile,p_endpage,p_enddoc
  344.     dc.l    p_break,p_ident
  345.  
  346. xdpi_tbl:    dc.w    60,90,120,180,180,360,360
  347. ydpi_tbl:    dc.w    180,180,180,180,360,180,360
  348. minl_tbl:    dc.w    10,20,30,45,45,90,90
  349. minr_tbl:    dc.w    10,20,30,45,45,90,90
  350. mint_tbl:    dc.w    0,0,0,0,0,0,0
  351. minb_tbl:    dc.w    0,0,0,0,0,0,0
  352. maxw_tbl:    dc.l    816,1232,1632,2464,2464,4928,4928
  353. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  354. xover_tbl:    dc.w    0,10,10,20,20,30,30
  355. yover_tbl:    dc.w    0,0,0,0,50,0,50
  356. rowht_tbl:    dc.w    24,24,24,24,48,24,48
  357. rows_tbl:    dc.w    1,1,1,1,2,1,2
  358. grmode_tbl:    dc.w    32,38,33,39,39,40,40
  359.  
  360.  
  361. driver:        dc.b    "NecP7 color v2.0.1 Beta",0
  362. setcolor:    dc.b    ESC,"r",0
  363. setgr:        dc.b    ESC,"*",0
  364.  
  365.  SECTION printer,BSS,PUBLIC
  366. table:        ds.l    1
  367. twidth:        ds.w    1
  368. pixel:        ds.w    1
  369. v_base:        ds.l    1
  370. bytes:        ds.w    1
  371. lineptr:    ds.l    1
  372. width:        ds.w    1
  373. pplane:        ds.l    1
  374. count:        ds.w    1
  375. grmode:        ds.w    1
  376. rows:        ds.w    1
  377. rowht:        ds.w    1
  378. scroll:        ds.w    1
  379.  
  380. ; v2.0.1 - didn't send lf to scroll to top of next page in endtile
  381.