home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / AGGRESSN / MOTION.ZIP / MOTION / ROMEO86.S < prev    next >
Text File  |  1999-01-03  |  10KB  |  511 lines

  1. ;      /| __    _    /  __      
  2. ;     / |/ _ __| \  <  <    _   
  3. ;    /__|\ // _| / / \  \ |/ \  |
  4. ;   <   | \ \ /|< <_  >  >|\_/|\|
  5. ;    \  |    \ | \ \ / _/ |   | | 
  6. ;     \        |    /
  7. ;
  8. ; DSP booter,dsp time test
  9. ; Motion, color shader
  10. ; DSP feed C value format: 
  11. ; Cx,Cy  * 256*256*64, signed
  12. ; walkpaths with destinations (no more sin curves)
  13.  
  14.     TEXT
  15.  
  16. romeo.run    = 1
  17.  
  18. rslidespeed    equ    500
  19. rwalkspeed    equ    2000
  20.  
  21.     IFNE    romeo.run
  22.  
  23. memory    = 1536*1024
  24.  
  25. Overdose_Beyond_Braindamage
  26.     include    freeintx.s
  27.     even
  28.  
  29. DEMO:
  30.     move.w    activepoint,d0
  31.     move.l    (activelist,pc,d0.w*4),a0
  32.     jsr    (a0)
  33.     rts
  34.  
  35. viimeinen
  36.     st     Space_Pressed
  37.     rts
  38.  
  39. activepoint    dc.w    0    
  40. activelist    
  41.     dc.l    romeo.dsp_load
  42.     DC.L    romeoinit
  43.     dc.l    romeo
  44.     dc.l    viimeinen
  45.     ENDC
  46.  
  47. ;-----------------------------------------------------
  48. ; ROMEO-DSP
  49. ;-----------------------------------------------------
  50. romeoinit:
  51.     move.l    address.freemem,d0
  52.     add.l    #romeo.ruutu+256,d0
  53.     clr.b    d0
  54.     move.l    d0,adr_screen1
  55.     bsr    .wipe
  56.     add.l    #768*256,d0
  57.     move.l    d0,adr_screen2
  58.     bsr    .wipe
  59.     clr.w    romeo.time
  60.     addq.w    #1,activepoint
  61.  
  62.     lea    romeo.col.listat,a0
  63.     move.l    a0,romeoslidepointer
  64.     
  65.     lea    romeo.walk,a0
  66.     move.l    a0,romeo.walk.pointer
  67.  
  68.     bsr    romeo_write2
  69.     bsr    romeo_read
  70.  
  71.     move.l    address.freemem,a0
  72.     move.l    a0,a1
  73.     add.l    #X_old,a0
  74.     add.l    #X_buf,a1
  75.     move.l    #$00020002,d1
  76.     move.w    #(1024*2)-1,d7
  77. .ww2    move.l    d1,(a0)+
  78.     move.l    d1,(a0)+
  79.     move.l    d1,(a1)+
  80.     move.l    d1,(a1)+
  81.     dbf    d7,.ww2
  82.  
  83.     lea    Xcolor,a0
  84.     moveq    #0,d0
  85.     move.w    #255,d7
  86. .test2    move.l    d0,(a0)+
  87.     move.l    d0,(a0)+
  88.     dbf    d7,.test2    
  89.  
  90.     bsr    romeo_write2
  91.  
  92.     rts
  93. ;----
  94. .wipe
  95.     move.l    d0,a0
  96.     moveq    #0,d1
  97.     move.w    #384*256/8,d7
  98. .ww
  99.     move.l    d1,(a0)+
  100.     move.l    d1,(a0)+
  101.     move.l    d1,(a0)+
  102.     move.l    d1,(a0)+
  103.     dbf    d7,.ww
  104.     rts
  105. ;------------------------------------
  106. romeo
  107.     bsr    romeo_read
  108.     bsr    romeo_write2
  109.     bsr    romeo.gen_color
  110.     bsr    romeo_render
  111.  
  112.     lea    adr_screen1,a0
  113.     movem.l    (a0),d0-d1
  114.     move.l    d1,(a0)+
  115.     move.l    d0,(a0)
  116.  
  117.  
  118.     rts
  119.  
  120. romeo.time:
  121.     DC.W    0
  122.  
  123. ;---------------------------------------------
  124. romeo_read
  125.     lea    $ffffa202.w,a1    
  126.     lea    $ffffa206.w,a0        ;read words..
  127.     move.l    address.freemem,a4
  128.     lea    x_buf(a4),a4
  129.     move.w    #(128*64)-1,d0
  130.  
  131. .lp2    btst    #0,(a1)        
  132.     beq.s    .lp2
  133.  
  134. .www    move.w    (a0),(a4)+
  135.     dbf    d0,.www
  136.     rts
  137. ;---------------------------------------------
  138. romeo_write2
  139.     lea    $ffffa202.w,a1    
  140.     lea    $ffffa204.w,a2
  141.  
  142. .lp    btst    #1,(a1)        
  143.     beq.s    .lp        
  144.  
  145.     move.l    romeo.walk.pointer,a0
  146.     moveq    #0,d7
  147.     move.w    romeo.walk.slide,d7
  148.     add.w    #rwalkspeed,d7
  149.     bcc.s    .nonextr
  150.     lea    8(a0),a0
  151.     tst.l    8(a0)
  152.     bne.s    .nonextr
  153.     lea    romeo.walk,a0            
  154. .nonextr
  155.     move.w    d7,romeo.walk.slide
  156.     move.l    a0,romeo.walk.pointer
  157.  
  158.     move.w    d7,d0
  159.     lsr.w    d0
  160.     add.w    #$7fff,d0
  161.     jsr    Xcos
  162.  
  163.     moveq    #0,d7
  164.     move.w    d1,d7
  165.     add.w    #$8000,d7
  166.  
  167. ;    lsr.w    #8,d7
  168. ;    move.l    adr_screen2,a3
  169. ;    lea    (a3,d7.l*2),a3
  170. ;    move.l    #0,(a3)+
  171. ;    move.l    #0,(a3)+
  172. ;    move.l    #-1,(a3)+
  173. ;    move.l    #0,(a3)+
  174. ;    move.l    #0,(a3)+
  175.  
  176. ; slide d7 mukaan 0-ffff (start-dest)
  177.     move.l    #$ffff,d6
  178.     sub.l    d7,d6
  179.     move.l    (a0),d0
  180.     move.l    8(a0),d2
  181.     muls.l    d6,d1:d0
  182.     muls.l    d7,d3:d2
  183.     move.w    d1,d0
  184.     move.w    d3,d2
  185.     swap    d0
  186.     swap    d2
  187.     add.l    d2,d0
  188.     move.l    d0,(a2)        ;Cx
  189.  
  190.     move.l    4(a0),d0
  191.     move.l    12(a0),d2
  192.     muls.l    d6,d1:d0
  193.     muls.l    d7,d3:d2
  194.     move.w    d1,d0
  195.     move.w    d3,d2
  196.     swap    d0
  197.     swap    d2
  198.     add.l    d2,d0
  199.     move.l    d0,(a2)        ;Cy
  200.  
  201.     rts
  202.  
  203. romeo.walk.slide    dc.w    0
  204. romeo.walk.pointer    dc.l    0
  205. ;---------------------------------------------
  206. romeo_render
  207.  
  208.     move.l    adr_screen2,a2
  209.     move.l    a2,a3
  210.     add.l    #(768*64)+128,a2
  211.     add.l    #(768*63)+512+128,a3
  212.     move.l    address.freemem,a4
  213.     lea    x_buf(a4),a4
  214.     lea    x_old(a4),a5
  215.     
  216.     movec    cacr,d0
  217.     bclr    #13,d0
  218.     bclr    #8,d0
  219.     bset    #0,d0
  220.     movec    d0,cacr
  221.  
  222.     move.w    #63,d0            ;render_2_screen
  223. .hi
  224.     move.w    #128/4-1,d1
  225. .lo
  226.     rept    4
  227.     move.w    (a4)+,d2
  228.     add.w    (a5),d2
  229.     move.l    xcolor(pc,d2.w*4),d7
  230.     move.l    d7,(a2)+        
  231.     lsr    d2
  232.     move.w    d2,(a5)+
  233.     move.l    d7,-(a3)        
  234.     endr
  235.     dbf    d1,.lo
  236.         
  237.     lea    768-512(a2),a2
  238.     lea    512-768(a3),a3
  239.     dbf    d0,.hi
  240.  
  241.     lea    Xcolor,a0
  242.     move.l    adr_screen2,a1
  243.     move.w    #128,d7
  244. .test    move.l    (a0)+,(a1)
  245.     move.l    (a0)+,4(a1)
  246.     lea    768(a1),a1
  247.     dbf    d7,.test    
  248.     rts
  249. ;---------------
  250. xcolor
  251.     ds.w    128*4            ;convaus colorlookuptable
  252.     ds.w    128*4            ;varaa yli-iteroille
  253. ;------------------------------------------------------------------------
  254. romeo.gen_color
  255. rpalat        equ    3
  256.     
  257.     move.l    romeoslidepointer,a6
  258.     lea    .slidevalue,a0
  259.     move.w    (a0),d6
  260.     add.w    #rslidespeed,d6
  261.     bcc.s    .noslidejump
  262.     lea    16(a6),a6
  263.     tst.l    16(a6)
  264.     bge.s    .nowapr
  265.     lea    romeo.col.listat,a6
  266. .nowapr
  267.     move.l    a6,romeoslidepointer    
  268. .noslidejump
  269.     move.w    d6,(a0)
  270.     move.w    #$ffff,d5
  271.     sub.w    d6,d5
  272.     movem.w    d5-d6,-(sp)
  273.     
  274.     moveq    #rpalat-1,d7            ;partit
  275.     lea    xcolor(pc),a5
  276. .slideone
  277.     movem.w    (sp),d5-d6
  278.     move.w    #$00ff,d4    ;Blue
  279.     move.l    (a6),d0
  280.     and.w    d4,d0
  281.     move.l    16(a6),d1
  282.     and.w    d4,d1
  283.     mulu.w    d5,d0
  284.     mulu.w    d6,d1                ;slide d0 > d1
  285.     add.l    d1,d0
  286.  
  287.     move.l    4(a6),d1
  288.     and.w    d4,d1
  289.     move.l    20(a6),d2
  290.     and.w    d4,d2
  291.     mulu.w    d5,d1
  292.     mulu.w    d6,d2
  293.     add.l    d2,d1        ;shade B d0 -> d1, 256/4 steps
  294.  
  295.     sub.l    d0,d1
  296.     divs.l    #256/rpalat,d1
  297.     asr.l    #3,d1
  298.     asr.l    #3,d0
  299.     move.l    d1,a0
  300.  
  301.     move.l    (a6),d1            ;Green
  302.     lsr.l    #8,d1
  303.     and.w    d4,d1
  304.     move.l    16(a6),d2
  305.     lsr.l    #8,d2
  306.     and.w    d4,d2
  307.     mulu.w    d5,d1
  308.     mulu.w    d6,d2                ;slide d0 > d1
  309.     add.l    d2,d1
  310.  
  311.     move.l    4(a6),d2
  312.     lsr.l    #8,d2
  313.     and.w    d4,d2
  314.     move.l    20(a6),d3
  315.     lsr.l    #8,d3
  316.     and.w    d4,d3
  317.     mulu.w    d5,d2
  318.     mulu.w    d6,d3
  319.     add.l    d3,d2        ;shade G d0 -> d1, 256/4 steps
  320.  
  321.     sub.l    d1,d2
  322.     divs.l    #256/rpalat,d2
  323.     asl.l    #3,d2
  324.     asl.l    #3,d1
  325.     move.l    d2,a1
  326.  
  327.     move.l    (a6),d2        ;RED
  328.     swap    d2
  329.     and.w    d4,d2
  330.     move.l    16(a6),d3
  331.     swap    d3
  332.     and.w    d4,d3
  333.     mulu.w    d5,d2
  334.     mulu.w    d6,d3                ;slide d0 > d1
  335.     add.l    d3,d2
  336.  
  337.     move.l    d7,a2
  338.     move.l    4(a6),d3
  339.     swap    d3
  340.     and.w    d4,d3
  341.     move.l    20(a6),d7
  342.     swap    d7
  343.     and.w    d4,d7
  344.     mulu.w    d5,d3
  345.     mulu.w    d6,d7
  346.     add.l    d7,d3        ;shade R d0 -> d1, 256/4 steps
  347.     move.l    a2,d7
  348.  
  349.     sub.l    d2,d3
  350.     divs.l    #256/rpalat,d3
  351.     asr.l    #8,d3
  352.     move.l    d3,a2
  353.     lsr.l    #8,d2
  354.  
  355.     moveq    #(255/rpalat)-1,d6
  356. .shader
  357.     add.l    a0,d0        ;steppaa rpalan shade
  358.     add.l    a1,d1
  359.     add.l    a2,d2
  360.  
  361.     move.l    d0,d3        ;B
  362.     move.l    d1,d4        ;G
  363.     move.l    d2,d5        ;R
  364.     swap    d3
  365.     swap    d4
  366.     and.w    #$f800,d5
  367.     or.w    d4,d5
  368.     and.w    #$ffe0,d5
  369.     or.w    d3,d5
  370.     move.w    d5,(a5)+
  371.     move.w    d5,(a5)+
  372.     dbf    d6,.shader
  373.  
  374.     add.l    #4,a6
  375.     dbf    d7,.slideone
  376.     addq.l    #4,sp
  377.     move.w    d5,d6
  378.     swap    d6
  379.     move.w    d5,d6
  380.     move.l    d6,(a5)+
  381.     move.l    d6,(a5)+
  382.     move.l    d6,(a5)+
  383.     move.l    d6,(a5)+
  384.     rts
  385. ;---
  386. .slidevalue    dc.w    0
  387. romeoslidepointer    dc.l    0
  388. ;------------------------------------------------------------------------
  389. ;  DSP ROUTINES..
  390. ;------------------------------------------------------------------------
  391. romeo.DSP_LOAD:
  392.     move.l    #romeotv,pointertv
  393.     jsr    middlesetscreen
  394.     move.w    #$2300,sr
  395.  
  396.  
  397.     MOVE.W    #1,-(SP)
  398.     move.l    #(romeo.dsp_ende-romeo.dsp_code)/3,-(sp)
  399.     move.l    #romeo.dsp_code+9,-(sp)        ;devpac56:n headereita
  400.     MOVE.W    #$6e,-(SP)
  401.     TRAP    #14
  402.     LEA    12(SP),SP
  403.     tst.l    d0
  404.     bmi.l    reset            ;dsp melted beyond braindamage..
  405.     tst.l    d1
  406.     bmi.l    reset            ;dsp melted beyond braindamage..
  407.  
  408.     lea    $ffffa202.w,a1    
  409.     lea    $ffffa204.w,a0
  410.  
  411.     move.l    #$babe,d0        ;testaa varmuuden vuoksi dsp rutiini..
  412. .lp    btst    #1,(a1)        
  413.     beq.s    .lp        
  414.     move.l    d0,(a0)    
  415. .lp2    btst    #0,(a1)        
  416.     beq.s    .lp2        
  417.     move.l    (a0),d1
  418.     lsl.l    #1,d0
  419.     cmp.l    d0,d1
  420.     bne.l    reset
  421.  
  422.     addq.w    #1,activepoint
  423.     rts
  424.  
  425. romeo.dsp_code
  426.     incbin    dsp\romeo.p56
  427. romeo.dsp_ende
  428.     even
  429. ;-------------
  430. romeoTV:
  431. .HHT    SET     $fe        ; Horizontal Hold Timer
  432. .HBB    SET     $c0        ; Horizontal Border Begin
  433. .HBE    SET     $30        ; Horizontal Border End
  434. .HDB    SET     $18        ; Horizontal Display Begin
  435. .HDE    SET     $b8        ; Horizontal Display End
  436. .HSS    SET     $d8        ; Horizontal Synchro Start
  437.  
  438. .VFT    SET     $271        ; (31250/Hz!1) ; V FREQUENCY
  439. .VBB    SET     $265        ; V BORDER BLANK
  440. .VBE    SET     $49        ; ($265-$02f)/2 = 283 LINES
  441. .VDB    SET     $49        ; V DISPLAY SIZE (256 lines..)
  442. .VDE    SET     $249        ; ($237-$057)/2 = 240 LINES
  443. .VSS    SET     $26b        ; V SYNCHRO START (<FREQUENCY!)
  444. .VCLK    SET    $182        ; Video Clock
  445. .VCO    SET    $001        ; Video Control
  446. .WIDE    set    384        ;screen wide (words)
  447. .modulo    set    0        ;screen modulo
  448. .VMODE    set    $100        ;screen mode (true)
  449. ; Video Control TV Bits                3 2 1 0
  450. ;    Horizontal Resolution-------------------+-+ + +
  451. ;        00: LORES (320 Pixels)            | |
  452. ;        01: HIRES (640 Pixels)            | |
  453. ;        10: SUPER HIRES (1280 Pixels)        | |
  454. ;            (shires seems to work with        | |
  455. ;             16 colors only (???))        | |
  456. ;    Interlace-----------------------------------' |
  457. ;        To enable interlacing, set VFT          |
  458. ;        bit 0 to logic 0.              |
  459. ;    Vertical Resolution---------------------------'
  460. ;        0: 200 lines
  461. ;        1: 100 lines
  462.  
  463.     dc.w    .HHT&$1ff,.HBB&$1ff,.HBE&$1ff,.HDB&$1ff,.HDE&$1ff,.HSS&$1ff
  464.     dc.w    .VFT&$3ff,.VBB&$3ff,.VBE&$3ff,.VDB&$3ff,.VDE&$3ff,.VSS&$3ff
  465.     dc.w    .VCLK&$1ff,.VCO&$00f
  466.     dc.l    .wide,.modulo,.vmode
  467.  
  468. ;---------------------------------------------------
  469.  
  470.         DATA
  471.  
  472. romeo.col.listat
  473.     dc.l    $000040,$0140ff,$ff80ff,$ffffff
  474.     dc.l    $0000ff,$00ffff,$ffffff,$ff0000
  475.     dc.l    $ff0000,$00ff00,$ffffff,$ffffff
  476.     dc.l    $800000,$ff8000,$ffff00,$ffffff
  477.     dc.l    $000040,$0140ff,$ff80ff,$ffffff
  478.  
  479.     dc.l    -1
  480.  
  481. romeo.walk
  482. ; Cr: 64*256*256 sign, Ci: -64*256*256  (6 first desimals floty) 
  483.     dc.l    $00000001,$00000001
  484.     dc.l    -3269602,-382839
  485.     dc.l    2123456,1231456
  486.     dc.l    1243345,-564352
  487.     dc.l    -123456,12
  488.     dc.l    2121212,6661234
  489.     dc.l    -123456,-1234
  490.     dc.l    2000000,0
  491.     dc.l    -6000000,0
  492.     dc.l    1200,123456
  493.     dc.l    -5000,-234567
  494.     dc.l    6523676,-123456
  495.     dc.l    -123245,5465472
  496.  
  497.     dc.l    $00000001,$00000001
  498.     dc.l    0
  499.  
  500.         RSRESET
  501.  
  502. x_buf        RS.W    128*64
  503. x_old        RS.W    128*64
  504. romeo.ruutu:    RS.W    (384*256*2)+256
  505. romeo.memend:    RS.W    0
  506.  
  507.         IFGE    romeo.memend-memory
  508.         FAIL
  509.         ENDC
  510.  
  511. ***********************************************************