home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / SQUARES2.SO < prev    next >
Text File  |  2003-01-01  |  11KB  |  604 lines

  1. ; Concentric squared rings: a delta screen requiring ufly..
  2.  
  3. ;======= OBJECT EQUATES ========
  4.  
  5. Squares.STEPS:        =    4
  6. Squares.RING_R:        =    100
  7.  
  8.             RSRESET
  9. Squares.ring1:        RS.W    2048
  10. Squares.ring2:        RS.W    2048
  11. Squares.ring3:        RS.W    2048
  12. Squares.ring4:        RS.W    2048
  13. Squares.BLOCK_SIZE:    RS.B    0
  14.  
  15. ;======= OBJECT TABLE ========
  16.  
  17. ; Must be first in object!!
  18. Squares.table:
  19.     DC.L    Squares.mainLoop
  20.     DC.L    Squares.init
  21.     DC.L    Squares.setRes
  22.     DC.L    Squares.incRot
  23.     DC.L    Squares.decRot
  24.     DC.L    Squares.setZoomOn
  25.     DC.L    Squares.setZoomOff
  26.     DC.L    Squares.setSpeedy
  27.     DC.L    Squares.setSlow
  28.     DC.L    0
  29.  
  30.     IFND    DEMO_SYSTEM
  31.     INCLUDE    SFLY_DSP.S
  32.     TEXT
  33.     ENDC
  34.  
  35. ;======= RESOLUTION SETTING ROUTINE ========
  36.  
  37. Squares.setRes:
  38.     IFEQ    testmode
  39.     move.w    monitormode,d0
  40.     cmpi.w    #vga60,d0
  41.     beq.s    .vga60
  42.     cmpi.w    #vga100,d0
  43.     beq.s    .vga100
  44.     cmpi.w    #rgb50,d0
  45.     beq.s    .rgb50
  46. ; Unknown monitormode..
  47.     rts
  48. .vga60:    bra.l    vga60_16bit_320_200
  49. .vga100:bra.l    vga100_16bit_320_200
  50. .rgb50:    bra.l    rgb50_16bit_320_200
  51.     ENDC
  52.     rts
  53.  
  54. ;======= INIT SUBROUTINE ========
  55.  
  56. ; OUTPUT:
  57. ; d0.l: =0 all clear, <0 error
  58. Squares.init:
  59.     move.l    #Squares.BLOCK_SIZE,d0
  60.     bsr.l    Mem.register
  61.  
  62.     lea    sine_tbl,a1
  63.     bsr.l    Matrix.init
  64.  
  65. .success:
  66.     moveq    #0,d0
  67.     rts
  68. .error:    moveq    #-1,d0
  69.     rts
  70.  
  71. ;======= REALTIME INIT SUBROUTINE ========
  72.  
  73. Squares.realtimeInit:
  74.     move.l    #rts,vbl_gfx
  75.  
  76.     bsr.l    HumanFly.init
  77.  
  78.     bsr.l    Mem.getBlock
  79.     move.l    d0,Squares.baseAdr
  80.  
  81.     move.w    $04BC.w,Squares.startTime
  82.  
  83.     lea    Viewport.settingsTable,a0
  84.     move.w    #320,Viewport.XSCREEN(a0)
  85.     move.w    #200,Viewport.YSCREEN(a0)
  86.     move.w    #0,Viewport.XSTART(a0)
  87.     move.w    #0,Viewport.YSTART(a0)
  88.     move.w    #320,Viewport.XEND(a0)
  89.     move.w    #200,Viewport.YEND(a0)
  90.     move.w    #160,Viewport.XCENTER(a0)
  91.     move.w    #100,Viewport.YCENTER(a0)
  92.     move.w    #256+32,Viewport.ASPECT(a0)
  93.     move.w    #$100,Viewport.FOCAL(a0)
  94.     bsr.l    Viewport.update
  95.  
  96.     lea    Squares.textureTable,a0
  97.     bsr.l    Polygon.init
  98.  
  99.     bsr.l    flushAndDisableICache
  100.     move.w    #Primitive.WORD|Primitive.MOVE,d0
  101.     moveq    #0,d1
  102.     bsr.l    Primitive.setPaintMode
  103.     move.w    d0,d1
  104.     bsr.l    restoreCache
  105.  
  106.     tst.w    d1
  107.     bmi.s    .error
  108.  
  109.     move.w    #$0100,d0
  110.     bsr    Squares.initObjhard
  111.  
  112.     clr.w    Squares.oldRot
  113.     clr.w    Squares.rotDir
  114.     clr.w    Squares.newZoomOn
  115.     move.w    #1,Squares.newMultiplier
  116.     move.w    #1,Squares.multiplier
  117.  
  118. .success:
  119.     moveq    #0,d0
  120.     rts
  121. .error:    moveq    #-1,d0
  122.     rts
  123.  
  124. ;======= SCREENINIT SUBROUTINE ========
  125.  
  126. Squares.initScreen:
  127.     rts
  128.  
  129. ;======= MAINLOOP SUBROUTINE ========
  130.  
  131. Squares.mainLoop:
  132.     move.w    $0468.w,.old468
  133.  
  134.     move.w    Squares.time,d1
  135.     move.w    $04BC.w,d0
  136.     sub.w    Squares.startTime,d0
  137. ;    sub.w    #$100,d0
  138.     move.w    d0,Squares.time
  139.     moveq    #10,d2
  140.     lsr.w    d2,d0
  141.     lsr.w    d2,d1
  142.     sub.w    d1,d0
  143.     beq.s    .no_zoom_refresh
  144.     move.w    Squares.newZoomOn,Squares.zoomOn
  145.     move.w    Squares.newMultiplier,Squares.multiplier
  146. .no_zoom_refresh:
  147.  
  148.     movea.l    scr,a0
  149.     bsr.l    Primitive.setScreenbuffer
  150.  
  151.     move.l    frmcnt,d0
  152.     sub.l    lastframecount,d0
  153.     bne.s    .end_realtime_init
  154.     move.l    d0,-(sp)
  155.     bsr    Squares.realtimeInit
  156.     tst.l    d0
  157.     bmi    .end
  158.     move.l    (sp)+,d0
  159. .end_realtime_init:
  160.     cmpi.l    #3,d0
  161.     bhs.s    .end_screeninit
  162.     bsr    Squares.initScreen
  163. .end_screeninit:
  164.  
  165.     bsr    Squares.initObjects
  166.  
  167.     tst.w    Squares.rotDir
  168.     beq.s    .end_rot
  169.     move.w    $04BC.w,d0
  170.     sub.w    Squares.rotStart,d0
  171.     lsl.w    #2,d0
  172.     cmpi.w    #sintbllen/8,d0
  173.     blt.s    .oki
  174.     move.w    #sintbllen/8,d0
  175.     muls.w    Squares.rotDir,d0
  176.     add.w    Squares.oldRot,d0
  177.     move.w    d0,Squares.yRot
  178.     clr.w    Squares.rotDir
  179.     bra.s    .end_rot
  180. .oki:    muls.w    Squares.rotDir,d0
  181.     add.w    Squares.oldRot,d0
  182.     move.w    d0,Squares.yRot
  183. .end_rot:
  184.  
  185.     bsr    Squares.paint
  186.  
  187.     IFEQ    testmode
  188.     lea    scr,a0
  189.     move.l    (a0)+,d0
  190.     move.l    (a0)+,d1
  191.     move.l    (a0),-4(a0)
  192.     move.l    d0,(a0)
  193.     move.l    d1,-8(a0)
  194.     move.l    d0,d1
  195.     lsr.w    #8,d0
  196.     move.l    d0,$ffff8200.w
  197.     move.b    d1,$ffff820d.w
  198.     ENDC
  199.  
  200.     move.w    .old468(pc),d0
  201. .wait:    cmp.w    $0468.w,d0
  202.     beq.s    .wait
  203.  
  204.     move.l    frmcnt,d0
  205.     sub.l    lastframecount,d0
  206.     bne.s    .res_done
  207.     bsr    Squares.setRes
  208. .res_done:
  209.  
  210.     clr.l    Squares.bgcol
  211.  
  212. .end:    rts
  213.  
  214. .old468:DC.W    0
  215.  
  216. ;======= OBJECT SUBROUTINES ========
  217.  
  218. Squares.incRot:
  219.     move.w    $04BC.w,Squares.rotStart
  220.     move.w    Squares.yRot,Squares.oldRot
  221.     move.w    #+1,Squares.rotDir
  222.     move.l    #$FFFFFFFF,Squares.bgcol
  223.     rts
  224.  
  225. Squares.decRot:
  226.     move.w    $04BC.w,Squares.rotStart
  227.     move.w    Squares.yRot,Squares.oldRot
  228.     move.w    #-1,Squares.rotDir
  229.     move.l    #$FFFFFFFF,Squares.bgcol
  230.     rts
  231.  
  232. Squares.setZoomOn:
  233.     move.w    #1,Squares.newZoomOn
  234.     move.l    #$FFFFFFFF,Squares.bgcol
  235.     rts
  236.  
  237. Squares.setZoomOff:
  238.     clr.w    Squares.newZoomOn
  239.     move.l    #$FFFFFFFF,Squares.bgcol
  240.     rts
  241.  
  242. Squares.setSpeedy:
  243.     move.w    #2,Squares.newMultiplier
  244.     move.l    #$FFFFFFFF,Squares.bgcol
  245.     rts
  246.  
  247. Squares.setSlow:
  248.     move.w    #1,Squares.newMultiplier
  249.     move.l    #$FFFFFFFF,Squares.bgcol
  250.     rts
  251.  
  252. Squares.initObjects:
  253.     tst.w    Squares.zoomOn
  254.     beq.s    .end
  255.     move.w    Squares.time,d0
  256.     lsr.w    #2,d0
  257.     bra.s    .ok
  258. .end:    rts
  259. .ok:    andi.w    #$00FF,d0
  260.     addi.w    #$0100,d0
  261.  
  262. Squares.initObjhard:
  263.     move.w    d0,.time
  264.     
  265.     bsr.l    ObjectRegistry.clear
  266.  
  267.     movea.l    Squares.baseAdr,a0
  268.     adda.l    #Squares.ring1,a0
  269.     move.w    #2400*2,d0
  270.     mulu.w    .time(pc),d0
  271.     lsr.l    #8,d0
  272.     bsr    Squares.generate
  273. ; d0.l=size of ring
  274.  
  275.     movea.l    Squares.baseAdr,a0
  276.     adda.l    #Squares.ring1,a0
  277.     bsr.l    ObjectRegistry.set
  278.     tst.w    d0
  279.     bmi    .error
  280.  
  281.     movea.l    Squares.baseAdr,a0
  282.     adda.l    #Squares.ring2,a0
  283.     move.w    #1200*2,d0
  284.     mulu.w    .time(pc),d0
  285.     lsr.l    #8,d0
  286.     bsr    Squares.generate
  287. ; d0.l=size of ring
  288.  
  289.     movea.l    Squares.baseAdr,a0
  290.     adda.l    #Squares.ring2,a0
  291.     bsr.l    ObjectRegistry.set
  292.     tst.w    d0
  293.     bmi.s    .error
  294.  
  295.     movea.l    Squares.baseAdr,a0
  296.     adda.l    #Squares.ring3,a0
  297.     move.w    #600*2,d0
  298.     mulu.w    .time(pc),d0
  299.     lsr.l    #8,d0
  300.     bsr    Squares.generate
  301. ; d0.l=size of ring
  302.  
  303.     movea.l    Squares.baseAdr,a0
  304.     adda.l    #Squares.ring3,a0
  305.     bsr.l    ObjectRegistry.set
  306.     tst.w    d0
  307.     bmi.s    .error
  308.  
  309.     movea.l    Squares.baseAdr,a0
  310.     adda.l    #Squares.ring4,a0
  311.     move.w    #300*2,d0
  312.     mulu.w    .time(pc),d0
  313.     lsr.l    #8,d0
  314.     bsr    Squares.generate
  315. ; d0.l=size of ring
  316.  
  317.     movea.l    Squares.baseAdr,a0
  318.     adda.l    #Squares.ring4,a0
  319.     bsr.l    ObjectRegistry.set
  320.     tst.w    d0
  321.     bmi.s    .error
  322.  
  323.     moveq    #0,d0
  324.     rts
  325. .error:    moveq    #-1,d0
  326.     rts
  327.  
  328. .time:    DC.W    0
  329.  
  330. ; INPUT:
  331. ; d0.w=r
  332. ; a0: objectbuffer
  333. ; OUTPUT:
  334. ; d0.l=size
  335. Squares.generate:
  336.     movea.l    a0,a6
  337.  
  338. ; Output vertices..
  339.     lea    sine_tbl,a1
  340.     movea.w    d0,a3
  341.  
  342.     move.w    #2*Squares.STEPS*4,(a0)+            ; #vertices+#normals
  343.     move.w    #Squares.STEPS*4,(a0)+            ; #normals
  344.  
  345.     lea    Squares.STEPS*4*Vertex.SIZE(a0),a2
  346.  
  347.     moveq    #4-1,d7
  348.  
  349. .ring_loop:
  350.     moveq    #Squares.STEPS-1,d6
  351.     move.w    #Squares.RING_R,d4
  352.     move.w    #90,d5
  353.     move.w    #90*2,d3
  354.  
  355.     cmpi.w    #3,d7
  356.     bne.s    .shit1
  357.     move.w    a3,d2
  358.     bra.s    .point_loop
  359. .shit1:    cmpi.w    #2,d7
  360.     bne.s    .shit2
  361.     neg.w    d4
  362.     neg.w    d5
  363.     move.w    a3,d2
  364.     bra.s    .point_loop
  365. .shit2:    cmpi.w    #1,d7
  366.     bne.s    .shit3
  367.     neg.w    d4
  368.     neg.w    d5
  369.     move.w    a3,d2
  370.     subi.w    #Squares.RING_R*4,d2
  371.     neg.w    d3
  372.     bra.s    .point_loop
  373. .shit3:    move.w    a3,d2
  374.     subi.w    #Squares.RING_R*4,d2
  375.     neg.w    d3
  376.  
  377. .point_loop:
  378.     move.w    d6,d0
  379.     mulu.w    #sintbllen/Squares.STEPS,d0
  380.     Get_SinCos    a1,d0,d0,d1
  381.     muls.w    d2,d0
  382.     muls.w    d2,d1
  383.     swap    d0
  384.     swap    d1
  385.     move.w    d0,(a0)+
  386.     move.w    d1,(a0)+
  387.     move.w    d4,(a0)+
  388.     move.w    d6,d0
  389.     mulu.w    #sintbllen/Squares.STEPS,d0
  390.     Get_SinCos    a1,d0,d0,d1
  391.     muls.w    d3,d0
  392.     muls.w    d3,d1
  393.     swap    d0
  394.     swap    d1
  395.     move.w    d0,(a2)+
  396.     move.w    d1,(a2)+
  397.     move.w    d5,(a2)+
  398.     dbra    d6,.point_loop
  399.  
  400.     dbra    d7,.ring_loop
  401.  
  402.     movea.l    a2,a0
  403.  
  404.     clr.w    (a0)+                ; #texels
  405.  
  406.     move.w    #Squares.STEPS*4,(a0)+        ; #primitives
  407.     moveq    #4-1,d7
  408.  
  409. .prim_ring_loop:
  410.     move.w    d7,d2
  411.     mulu.w    #Squares.STEPS,d2
  412.     move.w    d7,d3
  413.     addq.w    #1,d3
  414.     andi.w    #%11,d3
  415.     mulu.w    #Squares.STEPS,d3
  416.     moveq    #Squares.STEPS-1,d6
  417.     
  418. .primloop:
  419. ;    move.w    d6,d0
  420. ;    eor.w    d7,d0
  421. ;    andi.w    #1,d0
  422. ;    ori.w    #Polygon.QUAD|Polygon.ENVMAPPED|0,d0
  423.     move.w    #Polygon.QUAD|Polygon.ENVMAPPED|0,d0
  424.  
  425.     move.w    d0,(a0)+
  426.  
  427.     move.w    d6,d0
  428.     add.w    d3,d0
  429.     move.w    d0,(a0)+
  430.  
  431.     clr.l    d0
  432.     move.w    d6,d0
  433.     addq.w    #1,d0
  434.     divu.w    #Squares.STEPS,d0
  435.     swap    d0
  436.     move.w    d0,d1
  437.     add.w    d3,d0
  438.     move.w    d0,(a0)+
  439.  
  440.     add.w    d2,d1
  441.     move.w    d1,(a0)+
  442.  
  443.     move.w    d6,d0
  444.     add.w    d2,d0
  445.     move.w    d0,(a0)+
  446.  
  447.     REPT    4
  448.     move.w    -8(a0),d0
  449.     addi.w    #Squares.STEPS*4,d0
  450.     move.w    d0,(a0)+
  451.     ENDR
  452.  
  453.     dbra    d6,.primloop
  454.  
  455.     dbra    d7,.prim_ring_loop
  456.  
  457. .end:    suba.l    a6,a0
  458.     move.l    a0,d0
  459.     rts
  460.  
  461. Squares.paint:
  462.     bsr.l    PrimitiveMesh.new
  463.  
  464.     clr.w    d0
  465.     move.w    Squares.yRot,d1
  466.     clr.w    d2
  467.     bsr.l    Matrix.generate
  468.     clr.w    d0
  469.     clr.w    d1
  470.     move.w    #3000,d2
  471.     bsr.l    Matrix.translate
  472.     bsr.l    Matrix.push
  473.  
  474. ; Push sq1.
  475.     move.w    Squares.time,d0
  476.     mulu.w    Squares.multiplier,d0
  477.     mulu.w    #2,d0
  478.     addi.w    #sintbllen/4,d0
  479.     clr.w    d1
  480.     clr.w    d2
  481.     bsr.l    Matrix.generate
  482.     bsr.l    Matrix.push
  483.  
  484.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  485.     moveq    #0,d1
  486.     bsr.l    TransformObject.transform
  487.  
  488.     bsr.l    Matrix.pop
  489.  
  490. ; Push sq2.
  491.     move.w    Squares.time,d0
  492.     mulu.w    Squares.multiplier,d0
  493.     mulu.w    #3,d0
  494.     addi.w    #sintbllen/4,d0
  495.     clr.w    d1
  496.     clr.w    d2
  497.     bsr.l    Matrix.generate
  498.     bsr.l    Matrix.push
  499.  
  500.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  501.     moveq    #1,d1
  502.     bsr.l    TransformObject.transform
  503.  
  504.     bsr.l    Matrix.pop
  505.  
  506. ; Push sq3.
  507.     move.w    Squares.time,d0
  508.     mulu.w    Squares.multiplier,d0
  509.     mulu.w    #4,d0
  510.     addi.w    #sintbllen/4,d0
  511.     clr.w    d1
  512.     clr.w    d2
  513.     bsr.l    Matrix.generate
  514.     bsr.l    Matrix.push
  515.  
  516.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  517.     moveq    #2,d1
  518.     bsr.l    TransformObject.transform
  519.  
  520.     bsr.l    Matrix.pop
  521.  
  522. ; Push sq4.
  523.     move.w    Squares.time,d0
  524.     mulu.w    Squares.multiplier,d0
  525.     mulu.w    #5,d0
  526.     addi.w    #sintbllen/4,d0
  527.     clr.w    d1
  528.     clr.w    d2
  529.     bsr.l    Matrix.generate
  530.     bsr.l    Matrix.push
  531.  
  532.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  533.     moveq    #3,d1
  534.     bsr.l    TransformObject.transform
  535.  
  536.     bsr.l    Matrix.pop
  537.  
  538.     bsr.l    Matrix.pop
  539.  
  540.     bsr.l    PrimitiveMesh.sortZ
  541.     bsr.l    PrimitiveMesh.complete
  542.  
  543.     lea    Viewport.settingsTable,a0
  544.     movem.w    Viewport.XSTART(a0),d0/d6
  545.     movem.w    Viewport.YSTART(a0),d1/d7
  546.     move.l    Squares.bgcol,d4
  547.     bsr.l    Viewport.paintRectangle
  548.  
  549.     lea    Squares.rectTable,a0
  550.     bsr.l    PrimitiveMesh.paint
  551.  
  552.     moveq    #0,d0
  553.     rts
  554.  
  555. .error:    moveq    #-1,d0
  556.     rts
  557.  
  558. ;======= OBJECT DATA ========
  559.  
  560.     DATA
  561.  
  562. Squares.textureTable:
  563.     DC.L    FlareGen.goldBuffer
  564.     DC.L    0
  565.  
  566. ;======= OBJECT RESERVES ========
  567.  
  568.     BSS
  569.  
  570. Squares.rectTable:
  571.     DS.W    1+4*32
  572.  
  573. Squares.startTime:
  574.     DS.W    1
  575. Squares.time:
  576.     DS.W    1
  577.  
  578. Squares.yRot:
  579.     DS.W    1
  580. Squares.oldRot:
  581.     DS.W    1
  582. Squares.rotStart:
  583.     DS.W    1
  584. Squares.rotDir:
  585.     DS.W    1
  586. Squares.zoomOn:
  587.     DS.W    1
  588. Squares.newZoomOn:
  589.     DS.W    1
  590. Squares.oldTime:
  591.     DS.W    1
  592.  
  593. Squares.bgcol:
  594.     DS.L    1
  595.  
  596. Squares.baseAdr:
  597.     DS.L    1
  598.  
  599. Squares.multiplier:
  600.     DS.W    1
  601. Squares.newMultiplier
  602.     DS.W    1
  603.  
  604. ;======= END OF DEMO-EFFECT OBJECT ========