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

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Nec P3 print driver
  5. *
  6. CR    equ    $d
  7. LF    equ    $a
  8. FF    equ    $c
  9. ESC    equ    $1b
  10. FS    equ    $1c
  11.  
  12.  SECTION printer,CODE,PUBLIC
  13. ***************************************************************
  14. ***************************************************************
  15. ***************************************************************
  16. dumbentry:
  17.     clr.l    d0
  18.     rts
  19.  
  20.     dc.l    "PRNT"
  21.     dc.w    200
  22.  
  23. *
  24. * distribute the calls to the appropriate routines
  25. *
  26. Necp3:    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_BW,ptype(a0)    ;printer type?
  48.  
  49.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  50. *
  51. * pminlft and pmaxw must be evenly divisible by 16
  52. * this is the part that should be worked out
  53. *
  54.  
  55.     move.w    pdensity(a0),d0
  56.     cmp.w    #7,d0
  57.     bcs    pint1
  58.     moveq    #6,d0
  59. pint1:    lsl.w    #1,d0
  60.  
  61.     lea    xdpi_tbl,a1
  62.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  63.     lea    ydpi_tbl,a1
  64.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  65.     lea    minl_tbl,a1
  66.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  67.     lea    minr_tbl,a1
  68.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  69.     lea    mint_tbl,a1
  70.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  71.     lea    minb_tbl,a1
  72.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  73.     lea    xover_tbl,a1
  74.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  75.     lea    yover_tbl,a1
  76.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  77.     lea    rowht_tbl,a1
  78.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  79.  
  80.     lea    grmode_tbl,a1
  81.     move.w    0(a1,d0.w),grmode
  82.  
  83.     lsl.w    #1,d0
  84.     lea    maxw_tbl,a1
  85.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  86.     lea    maxh_tbl,a1
  87.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  88.     bra    prtok
  89.  
  90.  
  91. *
  92. * going to begin printing a document
  93. *
  94. p_bgndoc:
  95.     move.b    #ESC,d0            ;unidirectional print
  96.     bsr    send
  97.     move.b    #"U",d0
  98.     bsr     send
  99.     move.b    #1,d0
  100.     bra     send
  101. *
  102. * about to start printing of a page
  103. *
  104. p_bgnpage:
  105.     bra    prtok
  106.  
  107. *
  108. * about to print a new tile for the page
  109. *
  110. p_bgntile:
  111.     bra    prtok
  112.  
  113. *
  114. * print a block to the printer
  115. *
  116. p_block:
  117.     move.l    table,a0
  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. *print the block
  127. *
  128.     move.l    v_base,lineptr
  129.     bsr    putline            ;first 8
  130. *
  131.     move.b    #FS,d0            ;set line spacing to 1/360"
  132.     bsr    send
  133.     move.b    #"3",d0
  134.     bsr    send
  135.     move.w    #48,d0
  136.     bsr    send
  137.  
  138.     move.b    #LF,d0
  139.     bra    send
  140.  
  141. **************************************
  142.  
  143. putline:
  144.     move.l    lineptr,a0
  145.     move.w    #0,twidth
  146.     move.w    #23,d1
  147. print0:    move.w    width,d0
  148. print1:    tst.b    -1(a0,d0.w)
  149.     bne    print2
  150.     subq.w    #1,d0
  151.     bne    print1
  152.     moveq    #1,d0
  153. print2:    cmp.w    twidth,d0
  154.     blt    print3
  155.     move.w    d0,twidth
  156. print3:    dbf    d1,print0
  157. *    
  158.     lea    setgr,a0
  159.     bsr    sendline
  160.     move.w    grmode,d0
  161.     bsr    send
  162.     move.w    twidth,d0        ;send number of graphic bytes to follow
  163.     lsl.w    #3,d0
  164.     bsr    send
  165.     move.w    twidth,d0    
  166.     lsr.w    #5,d0
  167.     bsr    send
  168.  
  169.     move.w    twidth,d2                 ;length of the data in byte
  170. print4:    move.w    d2,twidth
  171.     moveq    #7,d4
  172. print6:    move.w    d4,pixel
  173.     moveq    #2,d3
  174.     move.l    lineptr,a0
  175. print5:    move.w    d3,bytes
  176.     moveq    #7,d1
  177.     moveq    #0,d0
  178. *
  179. s1:    btst    d4,(a0)
  180.     beq     s2
  181.     bset    d1,d0
  182. s2:
  183. *
  184.     dbf    d1,s1
  185.     move.l    a0,-(sp)
  186.     bsr    send
  187.     move.l    (sp)+,a0
  188. *
  189.     move.w    pixel,d4
  190.     move.w    bytes,d3
  191.     dbf    d3,print5
  192. *
  193.     move.w    pixel,d4
  194.     dbf    d4,print6
  195. *
  196.     add.l    #1,lineptr
  197.     move.w    twidth,d2
  198.     subq.w    #1,d2
  199.     bgt    print4
  200. *
  201.     move.b    #FS,d0            ;set line spacing to 1/360"
  202.     bsr    send
  203.     move.b    #"3",d0
  204.     bsr    send
  205.     move.b    #1,d0
  206.     bsr    send
  207.  
  208.     move.w    #LF,d0
  209.     bsr    send
  210.     move.w    #CR,d0
  211.     bra    send
  212.  
  213. ************************************
  214. *
  215. * just finished describing current tile
  216. *
  217. p_endtile:
  218.     move.l    table,a0
  219.     move.l    pblockh(a0),d0
  220.     mulu    #360,d0
  221.     divu    pydpi(a0),d0
  222.     move.w    d0,scroll
  223. pend1:    tst.b    scroll
  224.     beq    pend2
  225.     move.b    #FS,d0
  226.     bsr    send
  227.     move.b    #"3",d0
  228.     bsr    send
  229.     move.b    #255,d0
  230.     bsr    send
  231.     move.w    #LF,d0
  232.     bsr    send
  233.     sub.w    #255,scroll
  234.     bra    pend1
  235. pend2:    tst.w    scroll
  236.     beq    prtok
  237.     move.b    #FS,d0
  238.     bsr    send
  239.     move.b    #"3",d0
  240.     bsr    send
  241.     move.w    scroll,d0
  242.     bsr    send
  243.     move.w    #LF,d0
  244.     bra    send
  245.     
  246. *
  247. * just finished describing all tiles for this page
  248. *
  249. p_endpage:
  250.     bra    prtok
  251.  
  252. *
  253. * finished printing the document
  254. *
  255. p_enddoc:
  256.     bra    prtok
  257.  
  258. *
  259. * user requested stop
  260. *
  261. p_break:
  262.     bra    p_endtile
  263.  
  264. ***************************************************
  265. ***    these are the send routines for the    ***
  266. ***    dot matrix driver.            ***
  267. ***************************************************
  268. sendline:
  269.     move.b    (a0)+,d0
  270.     beq    prtok
  271.     move.l    a0,-(sp)
  272.     bsr    send
  273.     move.l    (sp)+,a0
  274.     bra    sendline
  275.  
  276. send:    jmp    $ffffff
  277.  
  278. ***********************************
  279. ***                ***
  280. ***********************************
  281.  SECTION printer,DATA,PUBLIC
  282.  
  283. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  284.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  285.     dc.l    p_block
  286.     dc.l    p_endtile,p_endpage,p_enddoc
  287.     dc.l    p_break,p_ident
  288.  
  289. xdpi_tbl:    dc.w    60,90,120,180,180,360,360
  290. ydpi_tbl:    dc.w    180,180,180,180,180,180,180
  291. minl_tbl:    dc.w    10,20,30,45,45,90,90
  292. minr_tbl:    dc.w    10,20,30,45,45,90,90
  293. mint_tbl:    dc.w    0,0,0,0,0,0,0
  294. minb_tbl:    dc.w    0,0,0,0,0,0,0
  295. maxw_tbl:    dc.l    480,760,960,1440,1440,2880,2880
  296. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  297. xover_tbl:    dc.w    0,10,10,20,20,30,30
  298. yover_tbl:    dc.w    0,0,0,0,0,0,0
  299. rowht_tbl:    dc.w    24,24,24,24,24,24,24
  300. grmode_tbl:    dc.w    32,38,33,39,39,40,40
  301.  
  302.  
  303. driver:        dc.b    "Nec P3 v2.0.0",0
  304. setgr:        dc.b    ESC,"*",0
  305.  
  306.  SECTION printer,BSS,PUBLIC
  307. table:        ds.l    1
  308. twidth:        ds.w    1
  309. pixel:        ds.w    1
  310. v_base:        ds.l    1
  311. bytes:        ds.w    1
  312. lineptr:    ds.l    1
  313. width:        ds.w    1
  314. count:        ds.w    1
  315. grmode:        ds.w    1
  316. rows:        ds.w    1
  317. rowht:        ds.w    1
  318. scroll:        ds.w    1
  319.  
  320. ; v2.0.0 - first version. created from NecP6 driver. Removed 360 ydpi modes
  321.