home *** CD-ROM | disk | FTP | other *** search
/ M.u.C.S. Disc 2000 / MUCS2000.iso / falcon / modules / sparkle / source / sparkle.s < prev    next >
Text File  |  1999-06-26  |  7KB  |  540 lines

  1.    ; Copyright 1999 Tomas Berndtsson <tomas@nocrew.org>
  2.  
  3.       include    macros.s
  4.  
  5. VLM_MODULE    =    1
  6. GFXMODE    =    %100110100
  7. SHOWVBL    =    0
  8.  
  9. XRES    =    320
  10. YRES    =    256
  11. SCRXRES    =    320
  12. SCRYRES    =    240
  13.  
  14. ; estimated values
  15. MAXDOTSPERLINE =    500
  16. NRLINES    =    256
  17.  
  18. DEFAULT_ROT    =    1
  19. DEFAULT_LINES    =    1
  20. DEFAULT_LEFT_TYPE  =    0
  21. DEFAULT_RIGHT_TYPE =    0
  22.  
  23.     ifne    VLM_MODULE
  24.     opt    nodebug,atari
  25.     output    d:\sound\whip!\vlm\sparkle.vlm
  26.     include    vlmserv.s
  27.     endc
  28.  
  29.     text
  30.  
  31.     ifne    VLM_MODULE
  32.  
  33.     dc.b    "VLM2"
  34.     dc.l    infotext
  35.     dc.l    settings
  36.     dc.l    init
  37.     dc.l    deinit
  38.     dc.l    main
  39.  
  40.     else
  41.     
  42.     bsr.w    init
  43.     vsync
  44.  
  45.     endc
  46.  
  47.     nop
  48. main
  49.     bsr    scrswap
  50.  
  51.     ifne    SHOWVBL
  52.     move.l    scrp,a3
  53.     move.w    $468.w,d7
  54.     subq.w    #1,d7
  55. .vsl
  56.     move.l    #$ffffffff,(a3)+
  57.     move.l    #$00000000,(a3)+
  58.     dbra    d7,.vsl
  59.  
  60.     move.l    #$00000000,(a3)+
  61.     move.l    #$00000000,(a3)+
  62.     move.l    #$00000000,(a3)+
  63.     move.l    #$00000000,(a3)+
  64.     endc
  65.  
  66.     ifne    VLM_MODULE
  67.     vlm_wait_vbl
  68.     else
  69.     vsync
  70.     endc
  71.  
  72.     bsr    clrlines
  73.  
  74.     move.l    scrp,a0
  75.     move.l    savedp,a1
  76.     lea    sincos,a2
  77.     lea    pal,a4
  78.  
  79.     move.l    option_rot,d1
  80.     move.l    rotate_sin,d0
  81.     lea    (a2,d0.l*4),a2
  82.     add.l    d1,d0
  83.     and.l    #255,d0
  84.     move.l    d0,rotate_sin
  85.  
  86. left
  87.     ifne    VLM_MODULE
  88.     tst.l    option_left_type
  89.     bne.w    .not_spectrum
  90.     vlm_get_left_spec a5
  91.     sub.w    #12042,2(a5)
  92.     bpl.s    .nonegspec
  93.     clr.w    2(a5)
  94. .nonegspec
  95.     bra.s    .go_on
  96. .not_spectrum
  97.     vlm_get_left_osci a5
  98.     lea    fake_left_spec,a3
  99.     bsr    fixosci
  100.     lea    fake_left_spec,a5
  101. .go_on
  102.     else
  103.     lea    fake_left_spec,a5
  104.     endc
  105.  
  106.     move.w    #128,d7
  107.     move.l    option_lines,d2
  108.     asr.w    d2,d7
  109.     subq.w    #1,d7
  110.     moveq    #1,d3
  111.     asl.w    d2,d3
  112.     subq.w    #1,d3
  113.     add.w    d3,d3
  114. .ll
  115.     move.w    (a5)+,d2
  116.     add.w    d3,a5
  117.     lsr.w    #8,d2
  118.     move.w    (a2)+,d1
  119.     muls.w    d2,d1
  120.     swap    d1
  121.     move.w    (a2)+,d0
  122.     muls.w    d2,d0
  123.     swap    d0
  124.     add.w    d3,a2
  125.     add.w    d3,a2
  126.     add.w    x1,d0
  127.     add.w    y1,d1
  128.     move.w    d0,x2
  129.     move.w    d1,y2
  130.     move.w    (a4,d2.w*2),a3
  131.     bsr    drawline
  132.     dbra    d7,.ll
  133.  
  134. right
  135.     ifne    VLM_MODULE
  136.     tst.l    option_right_type
  137.     bne.w    .not_spectrum
  138.     vlm_get_right_spec a5
  139.     bra.s    .go_on
  140. .not_spectrum
  141.     vlm_get_right_osci a5
  142.     lea    fake_right_spec,a3
  143.     bsr    fixosci
  144.     lea    fake_right_spec,a5
  145. .go_on
  146.     else
  147.     lea    fake_right_spec,a5
  148.     endc
  149.  
  150.     
  151.     move.w    #128,d7
  152.     move.l    option_lines,d2
  153.     asr.w    d2,d7
  154.     subq.w    #1,d7
  155.     moveq    #1,d3
  156.     asl.w    d2,d3
  157.     subq.w    #1,d3
  158.     add.w    d3,d3
  159. .rl
  160.     move.w    (a5)+,d2
  161.     add.w    d3,a5
  162.     lsr.w    #8,d2
  163.     move.w    (a2)+,d1
  164.     muls.w    d2,d1
  165.     swap    d1
  166.     move.w    (a2)+,d0
  167.     muls.w    d2,d0
  168.     swap    d0
  169.     add.w    d3,a2
  170.     add.w    d3,a2
  171.     add.w    x1,d0
  172.     add.w    y1,d1
  173.     move.w    d0,x2
  174.     move.w    d1,y2
  175.     move.w    (a4,d2.w*2),a3
  176.     bsr    drawline
  177.     dbra    d7,.rl
  178.  
  179.     move.l    #-1,(a1)+
  180.  
  181.  
  182.     ifne    VLM_MODULE
  183.  
  184.     rts
  185.     
  186.     else
  187.  
  188.     cmp.b    #$3b,$fffffc02.w
  189.     bne    main
  190.  
  191. slu
  192.     stdexit
  193.     pea    0.w
  194.     trap    #1
  195.  
  196.     endc
  197.  
  198. init    
  199.     ifne    VLM_MODULE
  200.  
  201.     move.l    a0,service_struct
  202.     vlm_set_resolution #VLM_320x240x16
  203.     
  204.     else
  205.  
  206.     super
  207.     stdinit    #-1,#-1,#GFXMODE
  208.  
  209.     lea    fake_left_spec,a0
  210.     lea    fake_right_spec,a1
  211.     move.w    #128-1,d7
  212. .cfsl
  213.     move.w    d7,d0
  214.     addq.w    #1,d0
  215.     asl.w    #7,d0
  216.     move.w    d0,(a0)+
  217.     asl.w    #1,d0
  218.     move.w    d0,(a1)+
  219.     dbra    d7,.cfsl
  220.  
  221.     endc
  222.  
  223.     move.l    #scr1,a0
  224.     bsr    clrscr
  225.     move.l    #scr2,a0
  226.     bsr    clrscr
  227.  
  228.     move.l    #-1,saved1
  229.     move.l    #-1,saved2
  230.  
  231.     rts
  232.  
  233. deinit
  234.     rts
  235.  
  236. scrswap
  237.     ifeq    VLM_MODULE
  238.     move.l    scrp,-(sp)
  239.     move.l    scrp+4,scrp
  240.     move.b    1(sp),$ffff8201.w
  241.     move.b    2(sp),$ffff8203.w
  242.     move.b    3(sp),$ffff820d.w
  243.     move.l    (sp)+,scrp+4
  244.  
  245.     else
  246.  
  247.     move.l    scrp,tmpscrp
  248.     move.l    scrp+4,scrp
  249.     move.l    tmpscrp,scrp+4
  250.     vlm_set_scradr    tmpscrp
  251.  
  252.     endc
  253.  
  254.     move.l    savedp,-(sp)
  255.     move.l    savedp+4,savedp
  256.     move.l    (sp)+,savedp+4
  257.  
  258.     rts
  259.  
  260.  
  261. drawline
  262.     movem.l    d0-7/a2,-(sp)
  263.  
  264.     move.w    x1,d0
  265.     cmp.w    x2,d0
  266.     bgt.s    .x1min
  267.     move.w    x2,d1
  268.     bra.s    .go1
  269. .x1min
  270.     move.w    x2,d0
  271.     move.w    x1,d1
  272. .go1
  273.     move.w    y1,d2
  274.     cmp.w    y2,d2
  275.     bgt.s    .y1min
  276.     move.w    y2,d3
  277.     bra.s    .go2
  278. .y1min
  279.     move.w    y2,d2
  280.     move.w    y1,d3
  281. .go2
  282.  
  283. ;; d0=minx, d1=maxx, d2=miny, d3=maxy
  284.  
  285.     move.w    d1,d4
  286.     sub.w    d0,d4    ; dx
  287.     move.w    d3,d5
  288.     sub.w    d2,d5    ; dy
  289.     
  290.     cmp.w    d4,d5
  291.     bgt    yslope
  292. xslope
  293.     move.l    #640,d6
  294.     cmp.w    x1,d0
  295.     bne.s    .x1notmin
  296.     move.w    y1,d1
  297.     cmp.w    y2,d1
  298.     blt.s    .nonegstep1
  299.     neg.l    d6
  300. .nonegstep1
  301.     bra.s    .consts
  302. .x1notmin
  303.     move.w    y2,d1
  304.     cmp.w    y1,d1
  305.     blt.s    .nonegstep2
  306.     neg.l    d6
  307. .nonegstep2
  308.  
  309. .consts
  310.     add.w    d5,d5    ; d5 = c1=2*dy
  311.     move.w    d5,d3
  312.     sub.w    d4,d3    ; d3 = p=2*dy-dx
  313.     move.w    d4,d7
  314.     add.w    d7,d7    ; d7 = 2*dx
  315.  
  316.     mulu.w    #640,d1
  317.     ext.l    d0
  318.     add.l    d0,d1
  319.     add.l    d0,d1
  320.     lea    (a0,d1.l),a2
  321.  
  322.     move.w    a3,d0
  323.     
  324.     tst.w    d3
  325. .linel
  326.     bpl.s    .pneg
  327.     
  328.     move.l    a2,(a1)+
  329.     or.w    d0,(a2)+
  330.     add.w    d5,d3
  331.     dbra    d4,.linel
  332.  
  333.     bra    linedone
  334. .pneg
  335.     move.l    a2,(a1)+
  336.     or.w    d0,(a2)+
  337.     add.l    d6,a2
  338.     sub.w    d7,d3
  339.     add.w    d5,d3
  340.     dbra    d4,.linel
  341.  
  342.  
  343.     bra    linedone
  344.  
  345. yslope
  346.     moveq    #2,d6
  347.     cmp.w    y1,d2
  348.     bne.s    .x1notmin
  349.     move.w    x1,d0
  350.     cmp.w    x2,d0
  351.     blt.s    .nonegstep1
  352.     neg.l    d6
  353. .nonegstep1
  354.     bra.s    .consts
  355. .x1notmin
  356.     move.w    x2,d0
  357.     cmp.w    x1,d0
  358.     blt.s    .nonegstep2
  359.     neg.l    d6
  360. .nonegstep2
  361.  
  362. .consts
  363.     add.w    d4,d4    ; d4 = c1=2*dx
  364.     move.w    d4,d3
  365.     sub.w    d5,d3    ; d3 = p=2*dx-dy
  366.     move.w    d5,d7
  367.     add.w    d7,d7    ; d7 = 2*dy
  368.  
  369.     move.w    d2,d1
  370.     mulu.w    #640,d1
  371.     ext.l    d0
  372.     add.l    d0,d1
  373.     add.l    d0,d1
  374.     lea    (a0,d1.l),a2
  375.  
  376.     move.w    a3,d0
  377.     
  378.     tst.w    d3
  379. .linel
  380.     bpl.s    .pneg
  381.  
  382.     move.l    a2,(a1)+
  383.     or.w    d0,(a2)
  384.     add.w    #640,a2
  385.     add.w    d4,d3
  386.     dbra    d5,.linel
  387.  
  388.     bra    linedone
  389. .pneg
  390.     move.l    a2,(a1)+
  391.     or.w    d0,(a2)
  392.     add.w    #640,a2
  393.     add.l    d6,a2
  394.     sub.w    d7,d3
  395.     add.w    d4,d3
  396.     dbra    d5,.linel
  397.  
  398.  
  399. linedone    
  400.     movem.l    (sp)+,d0-7/a2
  401.     rts
  402.  
  403. fixosci
  404.     move.w    #128-1,d7
  405. .fol
  406.     move.w    (a5)+,d0
  407.     ext.l    d0
  408.     move.w    (a5)+,d1
  409.     ext.l    d1
  410.     add.l    d0,d1
  411.     asr.l    #2,d1
  412.     add.l    #$8000,d1
  413.     move.w    d1,(a3)+
  414.     dbra    d7,.fol
  415.  
  416.     rts
  417.  
  418. clrscr
  419.     moveq    #0,d0
  420.     moveq    #0,d1
  421.     moveq    #0,d2
  422.     moveq    #0,d3
  423.     moveq    #0,d4
  424.     moveq    #0,d5
  425.     moveq    #0,d6
  426.     sub.l    a1,a1
  427.     sub.l    a2,a2
  428.     sub.l    a3,a3
  429.     sub.l    a4,a4
  430.     sub.l    a5,a5
  431.     add.l    #SCRXRES*SCRYRES*2+24*2,a0
  432.     move.w    #SCRXRES*SCRYRES/24-1,d7
  433. .cl
  434.     movem.l    d0-6/a1-5,-(a0)
  435.     dbra    d7,.cl
  436.     rts
  437.         
  438.  
  439. clrlines
  440.     move.l    savedp,a1
  441. .cll
  442.     move.l    (a1)+,a2
  443.     tst.l    a2
  444.     bmi.s    .done
  445.     clr.w    (a2)
  446.     bra.s    .cll        
  447. .done
  448.     rts
  449.  
  450.  
  451.  
  452.  
  453.     data
  454.  
  455. scrp    dc.l    scr1+16*SCRXRES,scr2+16*SCRXRES
  456. savedp    dc.l    saved1,saved2
  457.  
  458.  
  459.     ifne    VLM_MODULE
  460. infotext    dc.b    'SPARKLING LINES',0
  461.     dc.b    'Author:  NoBrain/NoCrew',0
  462.     dc.b    'Version: 0.42',0
  463.     dc.b    'Date:    1999-06-20',0
  464.     dc.b    0
  465.     even
  466.     
  467. settings    dc.l    4
  468.  
  469.     dc.l    parrotname
  470.     dc.l    3
  471. option_rot    dc.l    DEFAULT_ROT
  472.     dc.l    parrotstruct
  473.  
  474.     dc.l    parlinesname
  475.     dc.l    3
  476. option_lines    dc.l    DEFAULT_LINES
  477.     dc.l    parlinesstruct
  478.  
  479.     dc.l    parltypename
  480.     dc.l    2
  481. option_left_type    dc.l    DEFAULT_LEFT_TYPE
  482.     dc.l    type_struct
  483.  
  484.     dc.l    parrtypename
  485.     dc.l    2
  486. option_right_type    dc.l    DEFAULT_RIGHT_TYPE
  487.     dc.l    type_struct
  488.  
  489. parrotname    dc.b    'ROTATION SPEED',0
  490. parlinesname    dc.b    'GRANULARITY',0
  491. parltypename    dc.b    'LEFT CHANNEL TYPE',0
  492. parrtypename    dc.b    'RIGHT CHANNEL TYPE',0
  493.     even
  494.  
  495. parrotstruct    dc.l    0,257
  496. parlinesstruct dc.l    0,3
  497. type_struct    dc.l    2
  498.     dc.b    'SPECTRUM',0
  499.     dc.b    'OSCILLOSCOPE',0
  500.     even
  501.         
  502.     else
  503.  
  504. option_rot    dc.l    DEFAULT_ROT
  505. option_lines    dc.l    DEFAULT_LINES
  506. option_left_type    dc.l    DEFAULT_LEFT_TYPE
  507. option_right_type    dc.l    DEFAULT_RIGHT_TYPE
  508.  
  509.     endc
  510.  
  511. rotate_sin    dc.l    0
  512.  
  513. x1    dc.w    160
  514. y1    dc.w    120
  515. x2    dc.w    319
  516. y2    dc.w    199
  517.  
  518.  
  519. sincos    incbin    sico256.tab
  520.     incbin    sico256.tab
  521. pal    incbin    line256.pal
  522.  
  523.     bss
  524.  
  525.     ifne    VLM_MODULE
  526. tmpscrp    ds.l    1
  527. service_struct ds.l    1
  528.     endc
  529.     
  530.     ifeq    VLM_MODULE
  531.     stdbss
  532.     endc
  533. fake_left_spec    ds.w    128
  534. fake_right_spec    ds.w    128
  535. saved1    ds.l    NRLINES*MAXDOTSPERLINE
  536. saved2    ds.l    NRLINES*MAXDOTSPERLINE
  537.  
  538. scr1    ds.w    XRES*YRES
  539. scr2    ds.w    XRES*YRES
  540.