home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / dtp / pgsmodst / atariprt / slm804.s < prev    next >
Text File  |  1991-08-14  |  15KB  |  662 lines

  1. .include "pdlequ.h"
  2.  
  3. *
  4. *       DEFINITIONS
  5. *
  6. dmadata equ     $ffff8604       ; /* dma control and status register */
  7. dmahigh equ     $ffff8609       ; /* dma counter high */
  8. dmamid  equ     $ffff860b       ; /* dma counter mid */
  9. dmalow  equ     $ffff860d       ; /* dma counter low */
  10. gpip    equ     $fffffa01       ; /* mfp general purpose i/o */
  11. flock   equ     $43e            ; /* dma lock semaphore */
  12. _hz_200 equ     $4ba            ; /* 200 hz timer */
  13.  
  14. *
  15. * SLM804 print driver
  16. *
  17. CR    equ    $d
  18. LF    equ    $a
  19. FF    equ    $c
  20. ESC    equ    $1b
  21. DC2    equ    $12
  22.  
  23.     .text
  24. ***************************************************************
  25. ***************************************************************
  26. ***************************************************************
  27. dumbentry:
  28.     clr.l    d0
  29.     rts
  30.  
  31.     dc.l    "PRNT"
  32.     dc.w    201
  33.  
  34. *
  35. * distribute the calls to the appropriate routines
  36. *
  37. slm804:    move.l    a0,table
  38.     lsl.w    #2,d0
  39.     lea    prntbl,a1
  40.     move.l    0(a1,d0.w),a1
  41.     jmp    (a1)
  42.  
  43.  
  44. *
  45. * identify who I am, and set up who I like to speak to.
  46. *
  47. p_ident:
  48.     move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  49.     move.w    #$8000+PRT+ASCENDING,device(a0)
  50. prtok:    moveq    #1,d0
  51. rrts:    rts
  52. rterr:    moveq    #0,d1
  53.     rts
  54. *
  55. * initialize the table of printer specific routines
  56. *
  57. p_init:    clr.b    pdl(a0)            ;not a page description language driver
  58.     move.b    #1,pmult(a0)        ;automatically print mulitiple copies?
  59.     clr.b    pman(a0)        ;handle manual feed?
  60.     move.b    #PRT_BW,ptype(a0)    ;printer type?
  61.  
  62. *
  63. * pminlft and pmaxw must be evenly divisible by 16
  64. *
  65.  
  66.     move.w    pdensity(a0),d0
  67.     cmp.w    #7,d0
  68.     bcs    pint1
  69.     moveq    #6,d0
  70. pint1:    lsl.w    #1,d0
  71.  
  72.     lea    scl_tbl,a1
  73.     move.w    0(a1,d0.w),scale
  74.     lea    xdpi_tbl,a1
  75.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  76.     lea    ydpi_tbl,a1
  77.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  78.     lea    minl_tbl,a1
  79.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  80.     lea    minr_tbl,a1
  81.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  82.     lea    mint_tbl,a1
  83.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  84.     lea    minb_tbl,a1
  85.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  86.     lea    xover_tbl,a1
  87.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  88.     lea    yover_tbl,a1
  89.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  90.     lea    rowht_tbl,a1
  91.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  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    m_alloc(a0),a0
  123.     move.l    #40000,d0
  124.     moveq    #0,d1
  125.     jsr    (a0)
  126.     beq    rrts
  127.     move.l    a0,p1handle
  128.  
  129.     move.l    table,a0
  130.     move.l    m_alloc(a0),a0
  131.     move.l    #40000,d0
  132.     moveq    #0,d1
  133.     jsr    (a0)
  134.     beq    rrts
  135.     move.l    a0,p2handle
  136.  
  137.     move.l    (a0),p2ptr
  138.     move.l    p1handle,a0
  139.     move.l    (a0),p1ptr
  140.  
  141.     move.l    table,a0
  142.     move.l    pblockptr(a0),a1
  143.     move.l    (a1),_page_image
  144.     move.l    pblockw(a0),d0
  145.     move.w    d0,width        ;width in bytes
  146.     lsl.w    #3,d0
  147.     move.w    d0,wbits        ;width in bits
  148.     move.l    pblockh(a0),d0
  149.     move.w    d0,height        ;height
  150.     clr.l    pblockh(a0)
  151.  
  152.     move.w    pcopies(a0),tcopy
  153.  
  154. block1:    clr.l    -(sp)
  155.     move.w    #$20,-(sp)        ;set supervisor mode
  156.     trap    #1
  157.     addq.l    #6,sp
  158.     move.l    d0,stack
  159.  
  160.     jsr    _print_page
  161.  
  162.     move.l    stack,-(sp)
  163.     move.w    #$20,-(sp)        ;return to user mode
  164.     trap    #1
  165.     addq.l    #6,sp
  166.  
  167.     subq.w    #1,tcopy
  168.     bhi    block1
  169.  
  170.     move.l    table,a1
  171.     move.l    m_delete(a1),a1
  172.     move.l    p1handle,a0
  173.     jsr    (a1)
  174.  
  175.     move.l    table,a1
  176.     move.l    m_delete(a1),a1
  177.     move.l    p2handle,a0
  178.     jsr    (a1)
  179.     bra    prtok
  180.  
  181. *
  182. * just finished describing current tile
  183. *
  184. p_endtile:
  185.     bra    prtok
  186.  
  187. *
  188. * just finished describing all tiles for this page
  189. *
  190. p_endpage:
  191.     bra    prtok
  192.  
  193. *
  194. * finished printing the document
  195. *
  196. p_enddoc:
  197.     bra    prtok
  198.  
  199.  
  200. ***************************************************
  201. ***    original assumed 300x3180        ***
  202. ***                        ***
  203. ***************************************************
  204. *
  205. _print_page:
  206.     move.l    p1ptr,a0
  207.     move.w    #9999,d0
  208. pp1:    clr.l    (a0)+
  209.     dbf    d0,pp1
  210.  
  211.     move.l    p2ptr,a0
  212.     move.w    #9999,d0
  213. pp2:    clr.l    (a0)+
  214.     dbf    d0,pp2
  215.  
  216. *
  217. *
  218. *
  219.     lea    dmadata,a0    ;
  220.     tas.b    flock        ; DMA channel currently in use?
  221.     bne    rterr        ; --> yes, don't use it right now
  222.  
  223.     move.l    #$e00000,cntrl
  224.  
  225. *
  226. * INQUIRY - determine if the printer is happy, and what the controller # is
  227. *
  228. inquiry:
  229.     move.w    #$198,2(a0)    ;DMA select?
  230.     move.w    #$88,2(a0)    ;assert command signal
  231.     move.l    #$12008a,d0    ;MODE SENSE command byte 0
  232.     or.l    cntrl,d0
  233.     jsr    writcmnd    ;to controller number (cntrl)
  234.     bne    badinq        ;
  235.     move.l    #$00008a,d0    ;command byte 1
  236.     jsr    writcmnd    ;
  237.     bne    badinq
  238.     move.l    #$00008a,d0    ;command byte 2
  239.     jsr    writcmnd    ;
  240.     bne    badinq
  241.     move.l    #$00008a,d0    ;command byte 3
  242.     jsr    writcmnd    ;
  243.     bne    badinq
  244.     move.l    #$00008a,d0    ;command byte 4
  245.     jsr    writcmnd    ;
  246.     bne    badinq
  247.     move.l    #$800082,d0    ;command byte 5
  248.     move.l    d0,(a0)        ;no acknowledge for byte 5
  249.  
  250.     moveq.l    #2,d1        ;~ 5 millisecond delay
  251.     add.l    _hz_200,d1    ;NB MINIMUM DELAY IS 20 MICROSECONDS
  252. indel:    cmp.l    _hz_200,d1    ;
  253.     bge    indel        ;
  254.  
  255.     bsr    getstatus    ;status byte- is everybody in?
  256.     bne    badinq
  257.  
  258.     lea    identlist,a3    ;the parade is about to begin...
  259.     bsr    getstatus    ;byte 0 - Device Type
  260.     bne    badinq
  261.     move.b    d0,(a3)+
  262.     bsr    getstatus    ;byte 1
  263.     bne    badinq
  264.     move.b    d0,(a3)+
  265.     bsr    getstatus    ;byte 2
  266.     bne    badinq
  267.     move.b    d0,(a3)+
  268.     bsr    getstatus    ;byte 3
  269.     bne    badinq
  270.     move.b    d0,(a3)+
  271.     bsr    getstatus    ;byte 4 - String Length
  272.     bne    badinq
  273.     move.b    d0,(a3)+
  274.  
  275.     moveq    #0,d7
  276.     move.b    d0,d7
  277.     bra    inidl2
  278. inidl1:    bsr    getstatus    ;get the next indentification list byte
  279.     bne    badinq
  280.     move.b    d0,(a3)+    ;save it in the table
  281. inidl2:    dbf    d7,inidl1    ;loop ListLength times
  282.  
  283.     lea    identlist+5,a3
  284.     cmp.b    #"P",(a3)+
  285.     bne    badinq
  286.     cmp.b    #"A",(a3)+
  287.     bne    badinq
  288.     cmp.b    #"G",(a3)+
  289.     bne    badinq
  290.     cmp.b    #"E",(a3)+
  291.     beq    okinq
  292.  
  293. badinq:    move.w    #$80,2(a0)
  294.     sub.l    #$200000,cntrl
  295.     bcc    inquiry
  296.     bra    prabrt
  297. *
  298. *  MODE SENSE - get the current print parameters
  299. *
  300. okinq:
  301.     move.w    #$198,2(a0)    ;DMA select?
  302.     move.w    #$88,2(a0)    ;assert command signal
  303.     move.l    #$1a008a,d0    ;MODE SENSE command byte 0
  304.     or.l    cntrl,d0
  305.     jsr    writcmnd    ;to controller number n
  306.     bne    prabrt        ;
  307.     move.l    #$00008a,d0    ;command byte 1
  308.     jsr    writcmnd    ;
  309.     bne    prabrt        ;
  310.     move.l    #$00008a,d0    ;command byte 2
  311.     jsr    writcmnd    ;
  312.     bne    prabrt        ;
  313.     move.l    #$00008a,d0    ;command byte 3
  314.     jsr    writcmnd    ;
  315.     bne    prabrt        ;
  316.     move.l    #$00008a,d0    ;command byte 4
  317.     jsr    writcmnd    ;
  318.     bne    prabrt        ;
  319.     move.l    #$000082,d0    ;command byte 5
  320.     move.l    d0,(a0)        ;no acknowledge for byte 5
  321.  
  322.     moveq.l    #2,d1        ;~ 5 millisecond delay
  323.     add.l    _hz_200,d1    ;NB MINIMUM DELAY IS 20 MICROSECONDS
  324. msdel:    cmp.l    _hz_200,d1    ;
  325.     bge    msdel        ;
  326.  
  327.     bsr    getstatus    ;status byte- is everybody in?
  328.  
  329.     lea    paramlist,a3    ;the parade is about to begin...
  330.     bsr    getstatus    ;List Length- num of bytes to follow
  331.     move.b    d0,(a3)+
  332.     moveq    #0,d7
  333.     move.b    d0,d7
  334.     bra    gtpml2
  335. gtpml1:    bsr    getstatus    ;get the next parameter list byte
  336.     move.b    d0,(a3)+    ;save it in the table
  337. gtpml2:    dbf    d7,gtpml1    ;loop ListLength times
  338.     move.w    #$80,2(a0)
  339.  
  340.     move.b    paramlist+3,owidth
  341.     move.b    paramlist+4,owidth+1
  342.     move.w    owidth,d0
  343.     lsr.w    #3,d0
  344.     move.w    d0,owidth
  345.     mulu    #128,d0
  346.     move.l    d0,olength
  347.     add.l    #32,olength
  348.     divu    #512,d0
  349.     addq.w    #1,d0
  350.     swap    d0
  351.     move.w    #$112,d0
  352.     move.l    d0,ocount
  353.  
  354. *
  355. * setup the new parameters in paramlist to be sent
  356. *
  357. ;    move.b    wbits,paramlist+3
  358. ;    move.b    wbits+1,paramlist+4
  359.     move.b    height,paramlist+1
  360.     move.b    height+1,paramlist+2
  361.  
  362.     bclr    #0,paramlist+9
  363.     move.l    table,a1
  364.     tst.b    pmanual(a1)        ;handle manual feed?
  365.     beq    notmanual
  366.     bset    #0,paramlist+9        ;set manual feed bit
  367. notmanual:
  368.  
  369.  IF 0
  370. *
  371. *  MODE SELECT - set the print parameters for the printer
  372. *
  373.     move.w    #$198,2(a0)    ;DMA select?
  374.     move.w    #$88,2(a0)    ;assert command signal
  375.     move.l    #$15008a,d0    ;MODE SELECT command byte 0
  376.     or.l    cntrl,d0
  377.     jsr    writcmnd    ;to controller number n
  378.     bne    prabrt        ;
  379.     move.l    #$00008a,d0    ;command byte 1
  380.     jsr    writcmnd    ;
  381.     bne    prabrt        ;
  382.     move.l    #$00008a,d0    ;command byte 2
  383.     jsr    writcmnd    ;
  384.     bne    prabrt        ;
  385.     move.l    #$00008a,d0    ;command byte 3
  386.     jsr    writcmnd    ;
  387.     bne    prabrt        ;
  388.     move.l    #$00008a,d0    ;command byte 4
  389.     jsr    writcmnd    ;
  390.     bne    prabrt        ;
  391.     move.l    #$00008a,d0    ;command byte 5 (was $8a, might be $80 or $82)
  392.     jsr    writcmnd    ;
  393.     bne    prabrt        ;
  394.  
  395.     lea    paramlist,a3    ;the parade is about to leave...
  396.     moveq    #0,d7
  397.     move.b    (a3)+,d7
  398.     move.w    d7,d0
  399.     bra    ptpml2
  400. ptpml1:    bsr    putstatus    ;put the next parameter list byte
  401.     bne    prabrt        ;
  402.     move.b    (a3)+,d0    ;get next byte from the table
  403. ptpml2:    dbf    d7,ptpml1    ;loop ListLength times
  404.  
  405.     bsr    putstatus
  406. ;    swap    d0
  407. ;    move.w    #$0082,d0    ;was 82-last byte in extended command
  408. ;    move.l    d0,(a0)        ;no acknowledge for last byte
  409. ;    moveq.l    #2,d1        ;~ 5 millisecond delay
  410. ;    add.l    _hz_200,d1    ;NB MINIMUM DELAY IS 20 MICROSECONDS
  411. ;sedel:    cmp.l    _hz_200,d1    ;
  412. ;    bge    sedel        ;
  413.  
  414.     bsr    getstatus    ;status byte- is everybody in?
  415.     move.w    #$80,2(a0)
  416.  
  417.  ENDIF
  418.  
  419. *
  420. * setup for first DMA cycle
  421. *
  422.     move.w    width,d0    ;copy width
  423.     lsr.w    #1,d0
  424.     subq.w    #1,d0
  425.     move.w    d0,cpwdth
  426.  
  427.     move.l    _page_image,a2    ; /* load initial band base */
  428.  
  429.     move.l    p1ptr,a5
  430.     move.w    #128,d4
  431. cpd1:    move.l    a2,a3        ;don't want to advance on second row
  432.     move.l    a5,a4
  433.     move.w    cpwdth,d3
  434. cpd2:    move.w    (a2)+,(a4)+
  435.     dbf    d3,cpd2
  436.     add.w    owidth,a5
  437. ;    lea    300(a5),a5    ;skip white space (could precalc this)
  438.     dbf    d4,cpd1
  439.     move.l    a3,a2
  440.  
  441. *
  442. *  COMMAND PHASE
  443. *
  444.     move.w    #$198,2(a0)    ;DMA select?
  445.     move.w    #$88,2(a0)    ;assert command signal
  446.     move.l    #$0a008a,d0    ;PRINT command byte 0
  447.     or.l    cntrl,d0
  448.     jsr    writcmnd    ;to controller number n
  449.     bne    prabrt        ;
  450.     move.l    #$00008a,d0    ;command byte 1
  451.     jsr    writcmnd    ;
  452.     bne    prabrt        ;
  453.     move.l    #$00008a,d0    ;command byte 2
  454.     jsr    writcmnd    ;
  455.     bne    prabrt        ;
  456.     move.l    #$00008a,d0    ;command byte 3
  457.     jsr    writcmnd    ;
  458.     bne    prabrt        ;
  459.     move.l    #$00008a,d0    ;command byte 4
  460.     jsr    writcmnd    ;
  461.     bne    prabrt        ;
  462.     move.l    #$000082,d0    ;command byte 5
  463.     move.l    d0,(a0)        ;no acknowledge for byte 5
  464.     moveq.l    #2,d1        ;~ 5 millisecond delay
  465.     add.l    _hz_200,d1    ;NB MINIMUM DELAY IS 20 MICROSECONDS
  466. codel:    cmp.l    _hz_200,d1    ;
  467.     bge    codel        ;
  468.  
  469. *
  470. *  DATA OUT PHASE
  471. *
  472.     move.l    p1ptr,d0
  473.     move.l    d0,-(sp)
  474.     move.b    3(sp),dmalow    ;initialize dma base address
  475.     move.b    2(sp),dmamid
  476.     move.b    1(sp),dmahigh
  477.     addq.l    #4,sp
  478.  
  479.     move.w    #$192,2(a0)    ;select sector count register
  480.     move.l    ocount,(a0)    ;write sector count, start dma
  481.  
  482.     moveq    #0,d7
  483.     move.w    height,d7
  484.     add.w    #127,d7
  485.     divu    #128,d7
  486.     subq.w    #1,d7
  487.     bra    bottom
  488.  
  489. bdloop:    add.l    olength,d0    ;get final address to stop at
  490.     move.w    sr,d1        ; /* save status register */
  491.     ori.w    #$700,sr    ; /* no interrupts, please */
  492.  
  493.     move.l    p2ptr,a5    ; swap p1ptr <-> p2ptr
  494.     move.l    p1ptr,p2ptr
  495.     move.l    a5,p1ptr
  496.  
  497.     move.w    #128,d4
  498. cpd3:    move.l    a2,a3        ;don't want to advance on second row
  499.     move.l    a5,a4
  500.     move.w    cpwdth,d3
  501. cpd4:    move.w    (a2)+,(a4)+
  502.     dbf    d3,cpd4
  503.     add.w    owidth,a5
  504. ;    lea    300(a5),a5    ;skip white space (could precalc this)
  505.     dbf    d4,cpd3
  506.     move.l    a3,a2
  507.  
  508. bdwait:    btst.b    #5,gpip        ;check for premature status phase
  509.     beq    fuckoff        ;stwait        ;abort and get status byte
  510.     movep.w    7(a0),d2    ;get current DMA mid and low
  511.     cmp.w    d2,d0        ;compare to final address
  512.     bne    bdwait        ;not there yet?
  513.  
  514.     move.l    p1ptr,d0
  515.     addq.l    #2,d0        ;compensate for FIFO
  516.     move.l    d0,-(sp)
  517.     move.b    3(sp),dmalow    ;reinitialize DMA base address
  518.     move.b    2(sp),dmamid    ;
  519.     move.b    1(sp),dmahigh    ;
  520.     addq.l    #4,sp        ;
  521.     move.w    #$92,2(a0)    ;reset FIFO
  522.     move.w    #$192,2(a0)    ;
  523.     move.l    ocount,(a0)    ;reload sector count register
  524.  
  525.     move.w    d1,sr        ;restore status register
  526. bottom:    dbra    d7,bdloop    ;more bands?
  527.  
  528. *
  529. *  STATUS PHASE
  530. *
  531. fuckoff:
  532.  
  533. stwait:    btst.b    #5,gpip        ;wait for status byte
  534.     bne    stwait        ;
  535. stbyte:    move.w    d1,sr        ;restore status register
  536.     move.w    #$8a,2(a0)    ;select status register
  537.     move.w    (a0),d0        ;read status byte
  538.     moveq.l    #2,d1        ;~ 5 millisecond delay
  539.     add.l    _hz_200,d1    ;NB MINIMUM DELAY IS 20 MICROSECONDS
  540. stdel:    cmp.l    _hz_200,d1    ;
  541.     bge    stdel        ;
  542.     bra    prexit        ;return status byte
  543. prabrt:    moveq.l    #-1,d0        ;return error flag
  544. prexit:    move.w    #$80,2(a0)
  545.     sf    flock        ;unlock dma channel
  546.     rts            ;
  547.  
  548.  
  549.  
  550. ***************************************************
  551. ***                        ***
  552. ***************************************************
  553. getstatus:
  554.     moveq.l    #100,d1        ;500 millisecond timeout
  555.     add.l    _hz_200,d1    ;
  556. gstime:    btst.b    #5,gpip        ;
  557.     beq    gsbyte        ;command byte acknowledged
  558.     cmp.l    _hz_200,d1    ;
  559.     bge    gstime        ;
  560.     moveq.l    #-1,d1        ;timeout - set error flag
  561.     rts            ;
  562.  
  563. gsbyte:    move.w    #$8a,2(a0)    ;select status register
  564.     move.w    (a0),d0        ;read status byte
  565.     moveq.l    #2,d1        ;~ 5 millisecond delay
  566.     add.l    _hz_200,d1    ;NB MINIMUM DELAY IS 20 MICROSECONDS
  567. gsdel:    cmp.l    _hz_200,d1    ;
  568.     bge    gsdel        ;
  569.     moveq    #0,d1
  570.     rts
  571.  
  572.  
  573. ***************************************************
  574. ***                        ***
  575. ***************************************************
  576. *
  577. *       WRITCMND
  578. *       Write command byte to DMA controller.
  579. *
  580. *       Inputs:         d0.L = Data/control words
  581. *                       a0   = Pointer to DMA controller (ff8604)
  582. *       Outputs:        EQ = Successful command write
  583. *                       NE = Error occurred
  584. *       Modified:       d1
  585. *
  586. putstatus:
  587.     swap    d0
  588.     move.w    #$8a,d0
  589.  
  590. writcmnd:
  591.     move.l    d0,(a0)        ;write command byte
  592.     moveq.l    #2,d1        ;~ 5 millisecond delay
  593.     add.l    _hz_200,d1    ;NB MINIMUM DELAY IS 20 MICROSECONDS
  594. wrdel:    cmp.l    _hz_200,d1    ;
  595.     bge    wrdel        ;
  596.     moveq.l    #40,d1        ;200 millisecond timeout
  597.     add.l    _hz_200,d1    ;
  598. writlp:    btst.b    #5,gpip        ;
  599.     beq    writok        ;command byte acknowledged
  600.     cmp.l    _hz_200,d1    ;
  601.     bge    writlp        ;
  602.     moveq.l    #-1,d1        ;timeout - set error flag
  603. writok:    rts            ;
  604.  
  605.  
  606. ***********************************
  607. ***                ***
  608. ***********************************
  609.     .data
  610.  
  611. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  612.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  613.     dc.l    p_block
  614.     dc.l    p_endtile,p_endpage,p_enddoc
  615.     dc.l    prtok,p_ident
  616.  
  617. scl_tbl:    dc.w    1,1,1,1,1,1,1
  618. xdpi_tbl:    dc.w    300,300,300,300,300,300,300
  619. ydpi_tbl:    dc.w    300,300,300,300,300,300,300
  620. minl_tbl:    dc.w    75,75,75,75,75,75,75
  621. minr_tbl:    dc.w    75,75,75,75,75,75,75
  622. mint_tbl:    dc.w    56,56,56,56,56,56,56
  623. minb_tbl:    dc.w    56,56,56,56,56,56,56
  624. maxw_tbl:    dc.l    2400,2400,2400,2400,2400,2400,2400
  625. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  626. xover_tbl:    dc.w    0,0,0,0,0,0,0
  627. yover_tbl:    dc.w    0,0,0,0,0,0,0
  628. rowht_tbl:    dc.w    1,1,1,1,1,1,1
  629.  
  630. driver:    dc.b    "Atari SLM804 v2.0.3-3",0
  631.  
  632.     .bss
  633. temp:        ds.l    1
  634. tcopy:        ds.w    1
  635. scale:        ds.w    1
  636. _page_image:    ds.l    1
  637. stack:        ds.l    1
  638. height:        ds.w    1
  639. width:        ds.w    1
  640. wbits:        ds.w    1
  641. owidth:        ds.w    1
  642. olength:    ds.l    1
  643. ocount:        ds.l    1
  644.  
  645. table:        ds.l    1
  646. cpwdth:        ds.w    1
  647. cntrl:        ds.l    1
  648.  
  649. paramlist:    ds.b    50
  650. identlist:    ds.b    50
  651.  
  652. p1handle:    ds.l    1
  653. p1ptr:        ds.l    1
  654. p2handle:    ds.l    1
  655. p2ptr:        ds.l    1
  656.  
  657. ;
  658. ; 2.0.1 - added support for manual feed
  659. ; 2.0.2 - changed timing
  660. ;         added support for variable length bitmaps
  661. ;         removed 75,100,& 150 dpi options (they didn't do anything)
  662.