home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / OUT.ZIP / SOURCE.ZIP / TESTER.S < prev    next >
Text File  |  2004-01-18  |  9KB  |  465 lines

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