home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / DASTD.S < prev    next >
Text File  |  2003-01-04  |  8KB  |  455 lines

  1. ;                      [=/\===/\===/\===/\===/\===/\=]
  2. ;                     /:  FX testing skeleton v2.0   :\
  3. ;                     \: 03-05-1999 by |EarX|->fUn<- :/
  4. ;                      [=\/===\/===\/===\/===\/===\/=]
  5.  
  6. ******** GLOBAL CONSTANTS ********
  7.  
  8. MOD_ON:        =    0
  9.  
  10. testmode:    =    0            * handy debug mode
  11. objectmode:    =    0            * demo-os inclusion mode (dummy)
  12. * monitormode-equ's
  13. autodetect:    =    0
  14. rgb50:        =    1            * RGB/TV, 50Hz
  15. vga100:        =    2            * VGA, 100Hz, interlaced
  16. vga60:        =    3            * VGA, 60Hz, noninterlaced
  17. * screendimension-equ's
  18. scrxbytes:    =    640            * number of bytes per scanline
  19. scrlines:    =    200            * number of scanlines
  20. maxscrsize:    =    scrxbytes*scrlines    * max. size of screen
  21.  
  22. monitorequ:    =    autodetect        * current monitormode
  23.  
  24. ******** ASM OPTIONS ********
  25.  
  26.     COMMENT    HEAD=%111
  27.     IFEQ    testmode
  28.     OPT    D-
  29.     ENDC
  30.  
  31. ******** LIBRARIES ********
  32.  
  33.     bra    START
  34.  
  35.     INCLUDE    SYS.I
  36.     TEXT
  37.     INCLUDE    MEM.I
  38.     TEXT
  39.     INCLUDE    FSCR2.I
  40.     TEXT
  41.     INCLUDE    MATH.I
  42.     TEXT
  43. ;    INCLUDE    DSP.I
  44.     INCLUDE    DSP_FIX.S
  45.     INCLUDE    TEXTURE.I
  46.     TEXT
  47.     INCLUDE    TUNNEL.I
  48.     TEXT
  49.     INCLUDE    FONT.I
  50.     TEXT
  51.  
  52. ******** INITIALISING CODE ********
  53.  
  54. START:    move.l    4(sp),a5            * mshrink
  55.     move.l    $0c(a5),d0
  56.     add.l    $14(a5),d0
  57.     add.l    $1c(a5),d0
  58.     addi.l    #$1000,d0
  59.     move.l    a5,d1
  60.     add.l    d0,d1
  61.     andi.b    #%11111110,d1            * even address
  62.     move.l    d1,sp
  63.     move.l    d0,-(sp)
  64.      move.l    a5,-(sp)
  65.     clr.w    -(sp)
  66.     move.w    #$4a,-(sp)
  67.     trap    #1
  68.     lea    12(sp),sp
  69.  
  70. * mxalloc - Reserve stram ONLY for screens.
  71.     clr.w    -(sp)                * ST-RAM only!
  72.     move.l    #maxscrsize*4+256,-(sp)        * size of screens..
  73.     move.w    #$44,-(sp)            * Code $44: Mxalloc()
  74.     trap    #1
  75.     addq    #8,sp
  76.     tst.l    d0                * Check if there is ST-RAM enough.
  77.     bgt.s    .ramok
  78. * Not enough ST-RAM free :(
  79.     clr.w    -(sp)
  80.     trap    #1
  81.  
  82. * Initialize screenaddresses..
  83. .ramok:    lea    scr,a0
  84.     move.l    #maxscrsize,d1
  85.     addq.l    #3,d0                * / long even
  86.     andi.b    #%11111100,d0            * \ address..
  87.     move.l    d0,(a0)+
  88.     add.l    d1,d0
  89.     move.l    d0,(a0)+
  90.     add.l    d1,d0
  91.     move.l    d0,(a0)+
  92.     add.l    d1,d0
  93.     move.l    d0,(a0)+
  94.  
  95. * Check if the demo-object table has all necessary entries..
  96.     lea    demoobj_tbl,a0
  97.     moveq    #3-1,d7
  98. .chklp:    tst.l    (a0)+
  99.     beq.l    EXIT                * On premature NULL > go out!
  100.     dbra    d7,.chklp
  101.  
  102. ; Calculate sine table.
  103.     lea    sine_tbl,a0
  104.     Init_SineTable
  105.  
  106. ; Set supervisormode and save old stackpointer..
  107.     clr.l    -(sp)
  108.     move.w    #32,-(sp)
  109.     trap    #1
  110.     addq    #6,sp
  111.     move.l    #ustk,sp            * Install own stack..
  112.  
  113.     IFEQ    testmode
  114.  
  115. * Save old screenaddress..
  116.     move.w    #2,-(sp)
  117.     trap    #14
  118.     addq    #2,sp
  119.     move.l    d0,oldscr
  120.  
  121. * Falcon check..
  122.     movea.l    $05A0.w,a0
  123.     tst.l    a0
  124.     beq.l    EXIT
  125. .fndmch:
  126.     cmpi.l    #"_MCH",(a0)
  127.     beq.s    .found
  128.     addq    #8,a0
  129.     bra.s    .fndmch
  130. .found:    cmpi.w    #3,4(a0)
  131.     bne.l    EXIT
  132.  
  133. ; Set monitormode..
  134.     IFNE    monitorequ-autodetect
  135.     move.w    #monitorequ,monitormode
  136.     ELSE
  137.     move.w    $FFFF8006.w,d0
  138.     lsr.w    #8,d0
  139.     lsr.w    #6,d0
  140.     beq.l    EXIT                * Arg! mono monitor!
  141.     btst    #0,d0
  142.     beq.s    .vga
  143.     move.w    #rgb50,monitormode
  144.     bra.s    .endmonitorcheck
  145. .vga:    ;move.w    #vga100,monitormode
  146.     move.w    #vga60,monitormode
  147. .endmonitorcheck:
  148.     ENDC
  149.  
  150. ; Install own vbl-routine..
  151. .installvbl:
  152.     move.l    $70.w,oldvbl
  153.     move.l    #NEWVBL,$70.w
  154. ; Save falcon-pallette..
  155.     bsr    SAVE_FALCPAL
  156. * Save resolution..
  157.     bsr    SAVE_FV
  158.  
  159.     ENDC
  160.  
  161. ; Init libs.
  162.     bsr    System.init
  163.     bsr    Mem.init
  164.     bsr    Tunnel.genOffsetMap
  165.     bsr    Tunnel.calcFlareOctant
  166.     bsr    FlareGen.init
  167.     bsr    Texture.makeDefaults
  168.     bsr    Font.init
  169.  
  170. ; Initialize fx.
  171.     movea.l    demoobj_tbl+4,a0
  172.     jsr    (a0)
  173.     tst.l    d0
  174.     bmi.l    EXIT
  175.  
  176.     lea    demoobj_tbl+8,a0
  177.     moveq    #-1,d0
  178. .countloop:
  179.     addq.b    #1,d0
  180.     tst.l    (a0)+
  181.     bne.s    .countloop
  182.     move.b    d0,subeffectsnum
  183.  
  184. ; Reserve enough mem for fx.
  185.     bsr    Mem.take
  186.  
  187.     move.l    $04BA.w,starttime
  188.     IFEQ    testmode
  189.     clr.l    $FFFF9800.w
  190.     ENDC
  191.  
  192.     move.l    #1,lastframecount
  193.  
  194. triggerloopcycle:
  195.     addq.l    #1,frmcnt
  196.     moveq    #0,d0
  197.     move.b    $fffffc02.w,d0
  198.     cmp.w    .oldkey(pc),d0
  199.     seq.b    d1
  200.     move.w    d0,.oldkey
  201.     cmpi.b    #$39,d0
  202.     beq.l    OUT
  203.     cmpi.w    #.subeffects-.key2object_tbl,d0
  204.     bhs.s    .do_subeffect
  205. .do_old:
  206.     movea.l    demoobj_tbl,a0
  207.     jsr    (a0)                * Jump to fx-mainloop.
  208.     bra.s    triggerloopcycle
  209. .do_subeffect:
  210.     move.b    (.key2object_tbl.w,pc,d0.l),d0
  211.     beq.s    .do_old
  212.     move.b    d1,d1
  213.     bne.s    .do_old
  214.     lea    demoobj_tbl,a0
  215.     cmp.b    subeffectsnum,d0
  216.     bhs.s    .do_old
  217.     movea.l    8(a0,d0.l*4),a0
  218.     jsr    (a0)
  219.     bra.s    .do_old
  220.  
  221. .oldkey:
  222.     DC.W    0
  223.  
  224. .key2object_tbl:
  225.     DC.B    0,0
  226.     DC.B    $01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$0c
  227.     DC.B    0,0,0
  228.     DC.B    $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b
  229.     DC.B    0,0
  230.     DC.B    $1e,$1f,$20,$21,$22,$23,$24,$25,$26,$27,$28
  231.     DC.B    0,0,0
  232.     DC.B    $2c,$2d,$2e,$2f,$30,$31,$32,$33,$34,$35
  233.     DS.B    19
  234. .subeffects:
  235.     DC.B    8                * numpad "-": $4a
  236.     DS.B    3
  237.     DC.B    12                * numpad "+": $4e
  238.     DS.B    $14
  239.     DC.B    1                * numpad "(": $63
  240.     DC.B    2                * numpad ")": $64
  241.     DC.B    3                * numpad "/": $65
  242.     DC.B    4                * numpad "*": $66
  243.     DC.B    5                * numpad "7": $67
  244.     DC.B    6                * numpad "8": $68
  245.     DC.B    7                * numpad "9": $69
  246.     DC.B    9                * numpad "4": $6a
  247.     DC.B    10                * numpad "5": $6b
  248.     DC.B    11                * numpad "6": $6c
  249.     DC.B    13                * numpad "1": $6d
  250.     DC.B    14                * numpad "2": $6e
  251.     DC.B    15                * numpad "3": $6f
  252.     DC.B    16                * numpad "0": $70
  253.     DC.B    17                * numpad ".": $71
  254.     DC.B    18                * numpad "ENTER": $72
  255.     DS.B    $8e
  256.     EVEN
  257.  
  258. ;******* BEGIN OF DEMO-EFFECT OBJECT ********
  259.  
  260. ; Include demo-object in here..
  261. demoobj_tbl:
  262. ;    INCLUDE    BUMPMAP2.SO
  263. ;    INCLUDE    DSPMARCH.SO
  264. ;    INCLUDE    GALAXY2.SO
  265. ;    INCLUDE    INTRO.SO
  266. ;    INCLUDE    JULIA.SO
  267.     INCLUDE    MENU2.SO
  268. ;    INCLUDE    LENSES.SO
  269. ;    INCLUDE    MINIBLBS.SO
  270. ;    INCLUDE    TWIRL.SO
  271. ;    INCLUDE    ZWATER.SO
  272. ;    INCLUDE    ZWATER2.SO
  273.  
  274. ;******* RESTORING CODE ********
  275.  
  276.     TEXT
  277.  
  278. OUT:
  279.     IFEQ    testmode
  280.  
  281.     move.l    oldvbl,$70.w
  282.  
  283.     move.l    oldscr,d0
  284.     move.l    d0,d1
  285.     lsr.w    #8,d0
  286.     move.l    d0,$ffff8200.w
  287.     move.b    d1,$ffff820d.w
  288.  
  289.     lea    save_fv,a0
  290.     bsr.l    CHANGE_FVFAST
  291.     bsr.l    RESTORE_FALCPAL
  292.  
  293.     bsr.l    DISPLAY_FRMSPERSEC
  294.  
  295.     bsr.l    dsp_load_bootstrap
  296.     ENDC
  297.  
  298. EXIT:    clr.w    -(sp)
  299.     trap    #1
  300.  
  301. ******** SUBROUTINE CODE ********
  302.  
  303. ; INPUT:
  304. ; d0.w= size in dspwords
  305. ; a0: p56 program
  306. Dsp.loadProgram:
  307.     clr.w    -(sp)
  308.     clr.l    d1
  309.     move.w    d0,d1
  310.     move.l    d1,-(sp)
  311.     move.l    a0,-(sp)
  312.     move    #$6d,-(sp)    ; Dsp_ExecProg
  313.     trap    #14
  314.     lea    12(sp),sp
  315.     rts
  316.  
  317. * Displays a dialogbox with average framerate.
  318. DISPLAY_FRMSPERSEC:
  319.     move.l    frmcnt,d1
  320.     clr.l    d2
  321.     move.l    $04BA.w,d0
  322.     sub.l    starttime,d0
  323.     mulu.l    #200,d1
  324.     divu.l    d0,d2:d1
  325.     swap    d2
  326.     divu.l    d0,d2
  327.     move.l    d1,d0
  328.     moveq    #-1,d7
  329. .loop1    divu.w    #10,d0
  330.     swap    d0
  331.     addi.b    #'0',d0
  332.     move.b    d0,-(sp)
  333.     clr.w    d0
  334.     swap    d0
  335.     addq.w    #1,d7
  336.     tst.w    d0
  337.     bne.s    .loop1
  338.  
  339.     lea    .alertpre_txt(pc),a1
  340.     lea    .temp_txt(pc),a0
  341.     lea    (a1),a6
  342. .bloop1    move.b    (a1),(a0)+
  343.     cmpi.b    #"]",(a1)+
  344.     bne.s    .bloop1
  345. .bloop2    move.b    (a1),(a0)+
  346.     cmpi.b    #"]",(a1)+
  347.     bne.s    .bloop2
  348.     subq    #1,a0
  349.     subq    #1,a1
  350.  
  351. .plop1    move.b    (sp)+,(a0)+
  352.     dbra    d7,.plop1
  353. .pre2    move.b    #'.',(a0)+
  354.     moveq    #5-1,d7
  355.     mulu.l    #$000186a0,d0:d2        
  356.     move.w    d0,d2
  357.     swap    d2
  358.     move.l    d2,d0
  359. .loop2    divu.w    #10,d0
  360.     swap    d0
  361.     addi.b    #'0',d0
  362.     move.b    d0,-(sp)
  363.     clr.w    d0
  364.     swap    d0
  365.     dbra    d7,.loop2
  366.     moveq    #5-1,d7
  367. .plop2    move.b    (sp)+,(a0)+
  368.     dbra    d7,.plop2
  369.  
  370.     move.l    #" fps",(a0)+
  371.     move.b    #".",(a0)+
  372.  
  373. .0loop    move.b    (a1)+,(a0)+
  374.     bne.s    .0loop
  375.  
  376.     move.w    #1,intin
  377.     move.l    #.temp_txt,addrin
  378.     move.l    #.alert_tbl,aespb
  379.     move.l    #aespb,d1
  380.     clr.l    d0
  381.     move.b    #$c8,d0
  382.     trap    #2
  383.     rts
  384.  
  385. .temp_txt:
  386.     DS.B    256
  387. .alertpre_txt:
  388.     DC.B    "[1][ Average framerate: | ][ OK ]",0
  389.     EVEN
  390.  
  391. .alert_tbl:
  392.     DC.W    $0034,$0001,$0001,$0001,$0000
  393.  
  394. ******** INTERRUPT ROUTINE CODE ********
  395.  
  396. NEWVBL:    addq.l    #1,$466.w
  397.     movem.l    d0-a6,-(sp)
  398.     bsr.l    Screen.update
  399.     move.l    vbl_gfx(pc),a0
  400.     jsr    (a0)
  401.     movem.l    (sp)+,d0-a6
  402.     rte
  403.  
  404. vbl_gfx:
  405.     DC.L    rts
  406.  
  407. rts:    rts
  408.  
  409. ******** GLOBAL DATA + INCLUDES ********
  410.  
  411.     DATA
  412.  
  413. * AES parameter block
  414. aespb:    DC.L    contrl,global,intin,intout,addrin,addrout
  415.  
  416. ******** GLOBAL RESERVES ********
  417.  
  418.     BSS
  419.  
  420.     EVEN
  421. * Init data
  422.     DS.L    256
  423. ustk:    DS.L    1
  424. oldscr:    DS.L    1
  425. oldvbl:    DS.L    1
  426.  
  427. * Falcon system stats
  428. monitormode:
  429.     DS.W    1
  430. detail:    DS.W    1
  431.  
  432. * Math
  433. sine_tbl:
  434.     DS.L    sintbllen
  435.  
  436. * GEM-shit
  437. contrl:    DS.W    12
  438. intin:    DS.W    128
  439. intout:    DS.W    128
  440. global:    DS.W    16
  441. addrin:    DS.W    128
  442. addrout:DS.W    128
  443.  
  444. * Counter and timer shit
  445. frmcnt:    DS.L    1
  446. lastframecount:
  447.     DS.L    1
  448. starttime:
  449.     DS.L    1
  450. subeffectsnum:
  451.     DS.W    1
  452. old468:    DS.W    1
  453.  
  454. * Screen stuffs
  455. scr:    DS.L    4