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

  1.  Include "equ.h"
  2.  Include "impequ.h"
  3.  
  4.  SECTION tny,CODE,PUBLIC
  5. ***************************************************
  6. ***                        ***
  7. ***************************************************
  8. dumbentry:
  9.     clr.l    d0
  10.     rts
  11.  
  12.     dc.l    "IMPP"
  13.     dc.w    200
  14.     dc.l    0
  15.  
  16. table:    dc.l    0
  17.     dc.l    name,special,check,tny
  18.  
  19.  
  20. * tny format
  21. *
  22. * the first 32k of the picture is in buff1
  23. *
  24. check:    move.l    table,a0
  25.     move.l    buff1(a0),a1
  26.     move.l    (a1),a1
  27.     moveq    #5,d2
  28.     move.b    (a1)+,d0
  29.     cmp.b    #6,d0
  30.     bcc    never
  31.     cmp.b    #3,d0
  32.     bcs    chk1
  33.     addq.l    #4,a1
  34.     addq.l    #4,d2
  35. chk1:    move.w    #15,d1
  36. chk2:    move.b    (a1)+,d0
  37.     and.b    #%11111000,d0
  38.     bne    never
  39.     move.b    (a1)+,d0
  40.     and.b    #%10001000,d0
  41.     bne    never
  42.     addq.l    #2,d2
  43.     dbf    d1,chk2
  44.     move.b    (a1)+,d0
  45.     lsl.w    #8,d0
  46.     move.b    (a1)+,d0
  47.     add.w    d0,d2
  48.     move.b    (a1)+,d0
  49.     lsl.w    #8,d0
  50.     move.b    (a1)+,d0
  51.     add.w    d0,d2
  52.     add.w    d0,d2
  53.     move.l    flen(a0),a1
  54.     cmp.l    (a1),d2
  55.     bne    never
  56.  
  57. ;    move.l    fname(a0),a1
  58. ;ctny2:    move.b    (a1)+,d0
  59. ;    beq    maybe
  60. ;    cmp.b    #".",d0
  61. ;    bne    ctny2
  62. ;    cmp.b    #"T",(a1)+
  63. ;    bne    maybe
  64. ;    cmp.b    #"N",(a1)+
  65. ;    bne    maybe
  66. ;    cmp.b    #"Y",(a1)
  67. ;    bne    maybe
  68.     moveq    #2,d0
  69. irts:    rts
  70. *
  71. *
  72. *
  73. tny:    move.l    table,a0
  74.     move.l    f_openr(a0),a0
  75.     jsr    (a0)
  76.     beq    irts
  77.  
  78.     move.l    table,a0
  79.     move.l    spclnum(a0),a0
  80.     cmp.w    #1,(a0)
  81.     beq    impobj
  82. *
  83. *
  84. *
  85. imppic:    move.l    table,a0
  86.     move.l    p_open(a0),a0
  87.     jsr    (a0)
  88.     beq    irts
  89.  
  90.     bsr    getpicinfo
  91.  
  92.     move.l    table,a4
  93.     move.l    cwptr(a4),a4        ;ptr to window handle
  94.     move.l    (a4),a4            ;window handle
  95.     move.l    (a4),a4            ;ptr to window structure
  96.  
  97.     lea    pic,a0
  98.     move.w    pc_Type(a0),pi_Type(a4)
  99.     move.w    pc_SFreq(a0),pi_SFreq(a4)
  100.     move.w    pc_SAngle(a0),pi_SAngle(a4)
  101.     move.w    pc_SSpot(a0),pi_SSpot(a4)
  102.     move.l    pc_SMap(a0),pi_SMap(a4)
  103.     move.l    pc_SMap+4(a0),pi_SMap+4(a4)
  104.     move.w    pc_XDpi(a0),pi_XDpi(a4)
  105.     move.w    pc_YDpi(a0),pi_YDpi(a4)
  106.     move.w    pc_W(a0),pi_W(a4)
  107.     move.w    pc_H(a0),pi_H(a4)
  108.     move.w    pc_Width(a0),pi_Width(a4)
  109.     move.w    pc_BitPln(a0),pi_BitPln(a4)
  110.     move.w    pc_Palet(a0),pi_Palet(a4)
  111.  
  112.     move.w    pi_Palet(a4),d1
  113.     mulu    #pl_Sizeof,d1
  114.     move.w    pi_Width(a4),d0
  115.     mulu    pi_BitPln(a4),d0
  116.     mulu    pi_H(a4),d0
  117.     add.l    d1,d0
  118.  
  119.     clr.w    d1
  120.     clr.w    d2
  121.     move.l    table,a0
  122.     move.l    m_alloc(a0),a0
  123.     jsr    (a0)
  124.     beq    abortpic
  125.  
  126.     move.l    table,a3
  127.     move.l    cwptr(a3),a3
  128.     move.l    (a3),a3
  129.     move.l    (a3),a3
  130.     move.l    a0,pi_Ptr(a3)
  131.     move.l    (a0),a4
  132.     move.l    a4,picptr
  133.  
  134.     bsr    putcolor
  135.     bsr    putpic
  136.  
  137.     move.l    table,a0
  138.     move.l    p_close(a0),a0
  139.     jsr    (a0)
  140.  
  141.     move.l    table,a0
  142.     move.l    f_closer(a0),a0
  143.     jmp    (a0)
  144.  
  145.  
  146. abortpic:
  147.     move.l    table,a0
  148.     move.l    p_abort(a0),a0
  149.     jsr    (a0)
  150.  
  151.     move.l    table,a0
  152.     move.l    f_closer(a0),a0
  153.     jmp    (a0)
  154.  
  155.  
  156. *
  157. *
  158. *
  159. impobj:    move.l    table,a0
  160.     move.l    o_open(a0),a0
  161.     jsr    (a0)
  162.     beq    irts
  163.  
  164.     bsr    getpicinfo
  165.  
  166.     move.b    #tpic,object+ob_Type
  167.     clr.l    object+ob_Left
  168.     clr.l    object+ob_Top
  169.  
  170.     move.w    pic+pc_W,d1
  171.     move.l    #7200,d0
  172.     bsr    Mulu1632
  173.     move.w    pic+pc_XDpi,d2
  174.     bsr    Divu1648
  175.     move.l    d0,object+ob_Right
  176.  
  177.     move.w    pic+pc_H,d1
  178.     move.l    #7200,d0
  179.     bsr    Mulu1632
  180.     move.w    pic+pc_YDpi,d2
  181.     bsr    Divu1648
  182.     move.l    d0,object+ob_Bottom
  183.  
  184.     clr.b    object+ob_Flag
  185.     clr.w    object+ob_Slant
  186.     clr.w    object+ob_Twist
  187.     move.w    #50,object+ob_LWidth        ;1 point line
  188.     clr.b    object+ob_LType            ;no line
  189.     move.b    #1,object+ob_LColor        ;black line
  190.     clr.b    object+ob_FType            ;no fill
  191.     move.b    #1,object+ob_FColor        ;black fill
  192.     clr.b    object+ob_LBegin
  193.     clr.b    object+ob_LEnd
  194.     move.w    #900,object+ob_HStandOff    ;1/8 inch
  195.     move.w    #900,object+ob_VStandOff    ;1/8 inch
  196. *
  197. *
  198.     move.l    table,a1
  199.     move.l    o_obj(a1),a1
  200.     lea    object,a0
  201.     jsr    (a1)
  202.     beq    abortobj
  203.  
  204.     move.w    pic+pc_Width,d0
  205.     mulu    pic+pc_BitPln,d0
  206.     mulu    pic+pc_H,d0
  207.     move.w    pic+pc_Palet,d1
  208.     mulu    #pl_Sizeof,d1
  209.     add.l    d1,d0
  210.     add.l    #pc_Sizeof,d0
  211.  
  212.     move.l    table,a0
  213.     move.l    o_malloc(a0),a0
  214.     jsr    (a0)
  215.     beq    abortobj
  216.  
  217.     lea    pic,a1
  218.     clr.l    pc_DPtr(a1)
  219.     clr.w    pc_DScale(a1)
  220.     move.w    pc_Palet(a1),d0
  221.     mulu    #pl_Sizeof,d0
  222.     add.l    #pc_Sizeof,d0
  223.     move.l    d0,pc_Ptr(a1)
  224.  
  225.     move.w    #pc_Sizeof/2-1,d0
  226. oppic1:    move.w    (a1)+,(a0)+
  227.     dbf    d0,oppic1
  228.     move.l    a0,picptr
  229.  
  230.     bsr    putcolor
  231.     bsr    putpic
  232.  
  233.     move.l    table,a0        ;end of input file.
  234.     move.l    o_close(a0),a0        ; close and flush buffer
  235.     jsr    (a0)
  236.  
  237.     move.l    table,a0
  238.     move.l    f_closer(a0),a0
  239.     jmp    (a0)
  240.  
  241.  
  242. abortobj:
  243.     move.l    table,a0        ;end of input file.
  244.     move.l    o_abort(a0),a0        ; close and flush buffer
  245.     jsr    (a0)
  246.  
  247.     move.l    table,a0
  248.     move.l    f_closer(a0),a0
  249.     jmp    (a0)
  250.  
  251. *
  252. *
  253. *
  254. getpicinfo:
  255.     move.l    table,a0
  256.     move.l    f_get(a0),a0
  257.     jsr    (a0)
  258.  
  259.     cmp.b    #3,d0
  260.     bcs    gpi1
  261.     subq.b    #3,d0
  262.     move.w    d0,-(sp)
  263.     moveq    #4,d0
  264.     move.l    table,a0
  265.     move.l    f_skip(a0),a0
  266.     jsr    (a0)
  267.     move.w    (sp)+,d0
  268. gpi1:    lea    tnytbl,a0
  269.     and.w    #$ff,d0
  270.     lsl.w    #2,d0
  271.     move.l    0(a0,d0.w),a0
  272.  
  273.     lea    pic,a4
  274.  
  275.     move.w    (a0)+,pc_Palet(a4)    ;number of color pallet entries
  276.     move.w    (a0)+,pc_BitPln(a4)
  277.     move.w    (a0)+,pc_W(a4)
  278.     move.w    (a0)+,pc_H(a4)
  279.     move.w    (a0)+,pc_Width(a4)
  280.     move.w    (a0)+,pc_XDpi(a4)
  281.     move.w    (a0),pc_YDpi(a4)
  282.  
  283.     clr.w    pc_Type(a4)
  284.     move.w    #-1,pc_SFreq(a4)
  285.     move.w    #-1,pc_SAngle(a4)
  286.     clr.w    pc_SSpot(a4)
  287.     clr.l    pc_SMap(a4)
  288.     clr.l    pc_SMap+4(a4)
  289.     rts
  290.  
  291.  
  292. putcolor:
  293.     move.w    pic+pc_Palet,temp1        ;# of colors in bit map
  294. tnyc2:    move.l    table,a0
  295.     move.l    f_getw(a0),a0
  296.     jsr    (a0)
  297.  
  298.     move.w    d0,d1
  299.     move.w    d0,d2
  300.     lsr.w    #8,d0
  301.     lsr.w    #4,d1
  302.     and.w    #%111,d0        ;red
  303.     and.w    #%111,d1        ;green
  304.     and.w    #%111,d2        ;blue
  305.     mulu    #65535,d0
  306.     mulu    #65535,d1
  307.     mulu    #65535,d2
  308.     divu    #7,d0
  309.     divu    #7,d1
  310.     divu    #7,d2
  311.  
  312.     move.l    picptr,a4
  313.     move.w    d0,(a4)+        ;red
  314.     move.w    d1,(a4)+        ;green
  315.     move.w    d2,(a4)+        ;blue
  316.  
  317.     mulu    #19661,d0
  318.     mulu    #38666,d1
  319.     mulu    #7209,d2
  320.     add.l    d1,d0
  321.     add.l    d2,d0
  322.     swap    d0
  323.     cmp.w    #$8000,d0
  324.     bcc    pcwhite
  325.     moveq    #1,d0
  326.     bra    pcblack
  327. pcwhite:
  328.     moveq    #0,d0
  329. pcblack:
  330.     move.w    d0,(a4)+
  331.     move.l    a4,picptr
  332.  
  333.     subq.w    #1,temp1
  334.     bne    tnyc2
  335.  
  336.     move.l    #16,d0            ;skip over unused color pallete entries
  337.     sub.w    pic+pc_Palet,d0
  338.     lsl.w    #1,d0
  339.     move.l    table,a0
  340.     move.l    f_skip(a0),a0
  341.     jmp    (a0)
  342. *
  343. *
  344.  
  345. putpic:
  346.     move.l    table,a0
  347.     move.l    f_getw(a0),a0
  348.     jsr    (a0)
  349.     move.w    d0,cmdsize
  350.     move.l    table,a0
  351.     move.l    f_getw(a0),a0
  352.     jsr    (a0)
  353.     move.w    d0,datasize
  354.  
  355.     move.l    table,a0
  356.     move.l    buff2(a0),a1
  357.     move.l    (a1),a1
  358.     move.l    a1,t1ptr
  359.     move.l    a1,cmdptr
  360.     move.w    cmdsize,temp1
  361. ppic1:    move.l    table,a0
  362.     move.l    f_get(a0),a0
  363.     jsr    (a0)
  364.     move.l    t1ptr,a0
  365.     move.b    d0,(a0)+
  366.     move.l    a0,t1ptr
  367.     subq.w    #1,temp1
  368.     bne    ppic1
  369.  
  370.     move.w    pic+pc_Width,d0
  371.     mulu    pic+pc_H,d0
  372.     move.l    d0,plane
  373.     clr.w    rlecmd
  374.  
  375.     cmp.w    #4,pic+pc_BitPln
  376.     beq    lores
  377.     cmp.w    #2,pic+pc_BitPln
  378.     beq    medres
  379. *
  380. *
  381. hires:    move.w    #4,temp1
  382.     move.l    picptr,t1ptr
  383. hi1:    move.w    #20,temp2
  384.     move.l    t1ptr,t2ptr
  385. hi2:    move.w    #200,temp3
  386.     move.l    t2ptr,t3ptr
  387. hi3:    bsr    getnext
  388.     move.l    t3ptr,a0
  389.     move.w    d0,(a0)
  390.     add.l    #160,a0
  391.     move.l    a0,t3ptr
  392.     subq.w    #1,temp3
  393.     bne    hi3
  394.     add.l    #8,t2ptr
  395.     subq.w    #1,temp2
  396.     bne    hi2
  397.     add.l    #2,t1ptr
  398.     subq.w    #1,temp1
  399.     bne    hi1
  400.     rts
  401. *
  402. *
  403. medres:    move.w    #2,temp0
  404. med0:    move.w    #2,temp1
  405.     move.l    picptr,t1ptr
  406. med1:    move.w    #20,temp2
  407.     move.l    t1ptr,t2ptr
  408. med2:    move.w    #200,temp3
  409.     move.l    t2ptr,t3ptr
  410. med3:    bsr    getnext
  411.     move.l    t3ptr,a0
  412.     move.w    d0,(a0)
  413.     add.l    #80,a0
  414.     move.l    a0,t3ptr
  415.     subq.w    #1,temp3
  416.     bne    med3
  417.     add.l    #4,t2ptr
  418.     subq.w    #1,temp2
  419.     bne    med2
  420.     add.l    #2,t1ptr
  421.     subq.w    #1,temp1
  422.     bne    med1
  423.     move.l    plane,d0
  424.     add.l    d0,picptr
  425.     subq.w    #1,temp0
  426.     bne    med0
  427.     rts
  428. *
  429. *
  430. lores:    move.w    #4,temp1
  431.     move.l    picptr,t1ptr
  432. lo1:    move.w    #20,temp2
  433.     move.l    t1ptr,t2ptr
  434. lo2:    move.w    #200,temp3
  435.     move.l    t2ptr,t3ptr
  436. lo3:    bsr    getnext
  437.     move.l    t3ptr,a0
  438.     move.w    d0,(a0)
  439.     add.l    #40,a0
  440.     move.l    a0,t3ptr
  441.     subq.w    #1,temp3
  442.     bne    lo3
  443.     add.l    #2,t2ptr
  444.     subq.w    #1,temp2
  445.     bne    lo2
  446.     move.l    plane,d0
  447.     add.l    d0,t1ptr
  448.     subq.w    #1,temp1
  449.     bne    lo1
  450.     rts
  451. *
  452. *
  453. *
  454. * TNY Compressed getnext byte from run length encoded? picture
  455. *
  456. *
  457. getnext:
  458.     tst.w    rlecmd
  459.     beq    nextcmd
  460.     cmp.w    #1,rlecmd
  461.     bne    gnxt1
  462.     move.w    rledata,d0
  463.     subq.w    #1,rlecount
  464.     bcc    irts
  465. gnxt2:    clr.w    rlecmd
  466.     bra    getnext
  467. gnxt1:    subq.w    #1,rlecount
  468.     bcs    gnxt2
  469.     move.l    table,a0
  470.     move.l    f_getw(a0),a0
  471.     jsr    (a0)
  472.     rts
  473.  
  474. nextcmd:
  475.     move.l    cmdptr,a0
  476.     moveq    #0,d7
  477.     move.b    (a0)+,d7
  478.     move.l    a0,cmdptr
  479.  
  480.     tst.b    d7
  481.     beq    many_r
  482.     bmi    few_u
  483.     cmp.b    #1,d7
  484.     beq    many_u
  485.     move.w    d7,rlecount
  486.     move.l    table,a0
  487.     move.l    f_getw(a0),a0
  488.     jsr    (a0)
  489.     move.w    d0,rledata
  490.     move.w    #1,rlecmd
  491.     bra    getnext
  492.  
  493. many_r:    move.l    cmdptr,a0
  494.     move.b    (a0)+,d7
  495.     lsl.w    #8,d7
  496.     move.b    (a0)+,d7
  497.     move.l    a0,cmdptr
  498.     move.w    d7,rlecount
  499.     move.l    table,a0
  500.     move.l    f_getw(a0),a0
  501.     jsr    (a0)
  502.     move.w    d0,rledata
  503.     move.w    #1,rlecmd
  504.     bra    getnext
  505.  
  506. few_u:    neg.b    d7
  507.     and.w    #$7f,d7
  508.     move.w    d7,rlecount
  509.     move.w    #2,rlecmd
  510.     bra    getnext
  511.  
  512. many_u:    move.l    cmdptr,a0
  513.     move.b    (a0)+,d7
  514.     lsl.w    #8,d7
  515.     move.b    (a0)+,d7
  516.     move.l    a0,cmdptr
  517.     move.w    d7,rlecount
  518.     move.w    #2,rlecmd
  519.     bra    getnext
  520.  
  521. Mulu1632:
  522.     move.l    table,a0
  523.     move.l    mulu1632(a0),a0
  524.     jmp    (a0)
  525.  
  526. Divu1648:
  527.     move.l    table,a0
  528.     move.l    divu1648(a0),a0
  529.     jmp    (a0)
  530.  
  531. *******************************************************************
  532. ***    called when the import routine choosen finds something    ***
  533. ***    wrong with the file loaded.                ***
  534. *******************************************************************
  535. notright:
  536.     rts
  537.  
  538. never:    moveq    #0,d0
  539.     rts
  540.  
  541. maybe:    moveq    #1,d0
  542.     rts
  543.  
  544. right:    moveq    #2,d0
  545.     rts
  546.  
  547. *************************************************************
  548. *************************************************************
  549.  SECTION tny,DATA,PUBLIC
  550. *
  551. tnytbl:    dc.l    tnylow,tnymed,tnyhi
  552. tnylow:    dc.w    16,4,320,200,40,36,36
  553. tnymed:    dc.w    4,2,640,200,80,72,36
  554. tnyhi:    dc.w    2,1,640,400,80,77,77
  555.  
  556.  
  557. special:
  558.     dc.w    2
  559.     dc.l    spcl1,spcl2
  560.  
  561. *
  562. *
  563. *
  564. name:    dc.b    "TNY Compressed v2.1.0",0
  565.  
  566. spcl1:    dc.b    "Picture Window",0
  567. spcl2:    dc.b    "Object",0
  568. *
  569. *
  570. *
  571.  
  572.  SECTION tny,BSS,PUBLIC
  573.  
  574. temp0:    ds.w    1
  575. temp1:    ds.w    1
  576. temp2:    ds.w    1
  577. temp3:    ds.w    1
  578.  
  579. rlecmd:        ds.w    1
  580. rlecount:    ds.w    1
  581. rledata:    ds.w    1
  582.  
  583. plane:    ds.l    1
  584. t1ptr:    ds.l    1
  585. t2ptr:    ds.l    1
  586. t3ptr:    ds.l    1
  587. picptr:    ds.l    1
  588.  
  589. object:    ds.w    ob_SizeOf/2
  590. pic:    ds.w    pc_Sizeof/2
  591.  
  592. cmdptr:        ds.l    1
  593. cmdsize:    ds.w    1
  594. datasize:    ds.w    1
  595.