home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Assembler / dse-src3.dms / in.adf / Source / Fractals / Mand.lha / Mandelbrot.s
Encoding:
Text File  |  1993-01-06  |  6.0 KB  |  327 lines

  1.         section    TheCode,code
  2.  
  3.         bsr.w    TakeSystem
  4.  
  5.         lea    Bmap,a4
  6.         moveq    #0,d4
  7.         move.l    #-$8000000*2,a1
  8.         move.l    #100,a2
  9.         move.l    #8000,a3
  10.                     ;$1333333 each x
  11.                     ;$28f5c2 each y
  12.         move.l    #$199999,d1
  13.         move.l    #$28f5c2,d2
  14.         move.l    #319,d5
  15.         moveq    #$f,d6
  16.         moveq    #7,d7
  17.  
  18. yloop:        move.l    d5,d3
  19.         move.l    #$8000000*2,a0
  20.     
  21. xloop:        move.l    a2,d0
  22.  
  23.         movem.l    d1-d7/a2-a6,-(a7)
  24.         move.w    d0,d3
  25.         moveq    #0,d4        ; q1 = 0
  26.         moveq    #0,d5        ; q2 = 0
  27.         moveq    #0,d6        ; x  = 0
  28.         moveq    #0,d7        ; y  = 0
  29.         subq.w    #1,d3
  30.  
  31. mandelloop2:    move.l    d6,d1        ; D1 = oldx;
  32.         move.l    d4,d6
  33.         sub.l    d5,d6
  34.         add.l    a0,d6        ; x(D6) = q1(D4) - q2(D5) + acoo(A0);
  35.         move.l    d1,d2
  36.         bpl.b    Pos1
  37.         neg.l    d1
  38. Pos1:        eor.l    d7,d2
  39.         tst.l    d7
  40.         bpl.b    Pos2
  41.         neg.l    d7
  42. Pos2:        move.l    d1,d0
  43.         swap    d0
  44.         move.w    d0,d2
  45.         mulu    d7,d0
  46.         clr.w    d0
  47.         swap    d0
  48.         swap    d7
  49.         mulu    d7,d1
  50.         clr.w    d1
  51.         swap    d1
  52.         mulu    d2,d7
  53.         add.l    d0,d7
  54.         add.l    d1,d7
  55.         tst.l    d2
  56.         bpl.b    Pos3
  57.         neg.l    d7
  58. Pos3:        moveq    #6,d0
  59.         asl.l    d0,d7
  60.         add.l    a1,d7    ; y(D7) = 2 * oldx(D1) * y(D7) + bcoo(A1);
  61.         moveq    #5,d0
  62.         move.l    d7,d5
  63.         bpl.b    Pos4
  64.         neg.l    d5
  65. Pos4:        move.l    d5,d2
  66.         swap    d5
  67.         mulu    d5,d2
  68.         clr.w    d2
  69.         swap    d2
  70.         mulu    d5,d5
  71.         add.l    d2,d5
  72.         add.l    d2,d5
  73.         asl.l    d0,d5        ; q2(D4) = y(D7)^2;
  74.         bvs.b    mandelexit
  75.         move.l    d6,d4
  76.         bpl.b    Pos5
  77.         neg.l    d4
  78. Pos5:        move.l    d4,d2
  79.         swap    d4
  80.         mulu    d4,d2
  81.         clr.w    d2
  82.         swap    d2
  83.         mulu    d4,d4
  84.         add.l    d2,d4
  85.         add.l    d2,d4
  86.         asl.l    d0,d4        ; q1(D4) = x(D6)^2;
  87.         bvs.b    mandelexit
  88.         move.l    d4,d0
  89.         add.l    d5,d0
  90.         bvs.b    mandelexit
  91.         cmpi.l    #536870912,d0    ;$8000000 * 4
  92.         bgt.b    mandelexit
  93.         dbf    d3,mandelloop2
  94.  
  95.         moveq    #1,d3
  96. mandelexit:    subq.w    #1,d3
  97.         move.l    d3,d0
  98.         movem.l    (a7)+,d1-d7/a2-a6
  99.  
  100.         tst.w    d0
  101.         beq.b    nextx
  102.  
  103.         movem.l    d2-d4/a4,-(sp)    
  104.         move.l    d3,d2
  105.         lsr.w    #3,d3
  106.         add.w    d3,d4
  107.         and.w    d7,d2
  108.         eor.b    d6,d2
  109.         add.l    d4,a4
  110.  
  111.         lsr.w    d0
  112.         bcc.b    nobp0
  113.         bset.b    d2,(a4)
  114. nobp0:        add.w    a3,a4
  115.         lsr.w    d0
  116.         bcc.b    nobp1
  117.         bset.b    d2,(a4)
  118. nobp1:        add.w    a3,a4
  119.         lsr.w    d0
  120.         bcc.b    nobp2
  121.         bset.b    d2,(a4)
  122. nobp2:        add.w    a3,a4
  123.         lsr.w    d0
  124.         bcc.b    nobp3
  125.         bset.b    d2,(a4)
  126. nobp3:        add.w    a3,a4
  127.         lsr.w    d0
  128.         bcc.b    nobp4
  129.         bset.b    d2,(a4)
  130. nobp4:
  131. pix_err:    movem.l    (sp)+,d2-d4/a4
  132.  
  133. nextx:        sub.l    d1,a0
  134.         btst    #6,$bfe001
  135.         beq.b    Mousewait
  136.         dbra    d3,xloop
  137.  
  138. nexty:        add.l    d2,a1
  139.         add.w    #40,d4
  140.         cmpi.w    #(200*40),d4
  141.         blt.w    yloop
  142.     
  143. MouseWait:    btst    #6,$bfe001
  144.         bne.b    MouseWait
  145.  
  146.         bsr.b    RestoreSystem
  147.         rts                ; Done!
  148.  
  149. ***********************************************************
  150.  
  151. TakeSystem:    movea.l    4,a6            ; ExecBase
  152.         jsr    -$84(a6)        ; Forbid() multitasking
  153.  
  154.         lea    $dff000,a5        ; Custom chip base
  155.         bsr.b    InstallBmap
  156.         bsr.w    InstallSprites
  157.         bsr.w    InstallCopper
  158.         rts                ; Done
  159.  
  160. ***********************************************************
  161.  
  162. RestoreSystem:    lea    $dff000,a5
  163.  
  164.         movea.l    4,a6            ; ExecBase
  165.         lea    GraphicsName,a1        ; "graphics.library"
  166.         moveq.l    #0,d0            ; Any version
  167.         jsr    -$228(a6)        ; OpenLibrary()
  168.         move.l    d0,a1            ; Copy ptr to GfxBase
  169.         move.l    $26(a1),$80(a5)        ; Install old system copperlist
  170.         jsr    -$19e(a6)        ; CloseLibrary()
  171.         move.w     DMACONSave,$96(a5)    ; Activate old DMA channels
  172.         jsr    -$8a(a6)        ; Permit() multitasking
  173.         rts                ; Done
  174.  
  175. ***********************************************************
  176.  
  177. InstallBmap:    lea    bmapptrs,a0
  178.         move.l    #Bmap,d0        ; say our bmap address is $12345678
  179.         move.w    d0,6(a0)        ;   write $5678 to $e2 reg in copperlist
  180.         swap    d0
  181.         move.w    d0,2(a0)        ;   write $1234 to $e0
  182.         swap    d0
  183.     
  184.         add.l    #8000,d0
  185.         move.w    d0,14(a0)
  186.         swap    d0
  187.         move.w    d0,10(a0)
  188.         swap    d0
  189.     
  190.         add.l    #8000,d0
  191.         move.w    d0,22(a0)
  192.         swap    d0
  193.         move.w    d0,18(a0)
  194.         swap    d0
  195.     
  196.         add.l    #8000,d0
  197.         move.w    d0,30(a0)
  198.         swap    d0
  199.         move.w    d0,26(a0)
  200.         swap    d0
  201.     
  202.         add.l    #8000,d0
  203.         move.w    d0,38(a0)
  204.         swap    d0
  205.         move.w    d0,34(a0)
  206.  
  207.         rts
  208.  
  209. ***********************************************************
  210.  
  211. InstallCopper:    move.l    #Copper,$80(a5)        ; install copper
  212.         rts
  213.  
  214. *********************************************************** 
  215.  
  216. InstallSprites:    lea    sprptrs,a0
  217.         move.l    #NullSprite,d0      
  218.         move.w    d0,6(a0)    
  219.         move.w    d0,14(a0)
  220.         move.w    d0,22(a0)
  221.         move.w    d0,30(a0)
  222.         move.w    d0,38(a0)
  223.         move.w    d0,46(a0)
  224.         move.w    d0,54(a0)
  225.         move.w    d0,62(a0)
  226.         swap    d0  
  227.         move.w    d0,2(a0)    
  228.         move.w    d0,10(a0)
  229.         move.w    d0,18(a0)
  230.         move.w    d0,26(a0)
  231.         move.w    d0,34(a0)
  232.         move.w    d0,42(a0)
  233.         move.w    d0,50(a0)
  234.         move.w    d0,58(a0)
  235.         rts
  236.  
  237. ***********************************************************
  238.  
  239.         section    squid,data_c
  240.  
  241. GraphicsName:    dc.b    'graphics.library',0
  242.         EVEN
  243.  
  244. Copper:    dc.w    $0100,$5200         ; bit plane control reg.0
  245.     dc.w    $0102,$0000         ; scroll value
  246.     dc.w    $0104,$0000         ; blp/sprite priority reg.
  247.     dc.w    $0108,$0000         ; odd bitplane modulo value
  248.     dc.w    $010a,$0000         ; even bitplane modulo value
  249.     dc.w    $0180,$0000
  250.     dc.w    $0182,$0100
  251.     dc.w    $0184,$0200
  252.     dc.w    $0186,$0300
  253.     dc.w    $0188,$0400
  254.     dc.w    $018a,$0500
  255.     dc.w    $018c,$0600
  256.     dc.w    $018e,$0700
  257.     dc.w    $0190,$0800
  258.     dc.w    $0192,$0900
  259.     dc.w    $0194,$0a00
  260.     dc.w    $0196,$0b00
  261.     dc.w    $0198,$0c00
  262.     dc.w    $019a,$0d00
  263.     dc.w    $019c,$0e00
  264.     dc.w    $019e,$0f00
  265.     dc.w    $01a0,$0fb0
  266.     dc.w    $01a2,$0001
  267.     dc.w    $01a4,$0002
  268.     dc.w    $01a6,$0003
  269.     dc.w    $01a8,$0004
  270.     dc.w    $01aa,$0005
  271.     dc.w    $01ac,$0006
  272.     dc.w    $01ae,$0007
  273.     dc.w    $01b0,$0008
  274.     dc.w    $01b2,$0009
  275.     dc.w    $01b4,$000a
  276.     dc.w    $01b6,$000b
  277.     dc.w    $01b8,$000c
  278.     dc.w    $01ba,$000d
  279.     dc.w    $01bc,$000e
  280.     dc.w    $01be,$000f
  281.  
  282.     dc.w    $008e,$2c81         ; upper left corner of disp. window
  283.     dc.w    $0090,$f4c1         ; lower right corner of disp. window
  284.     dc.w    $0092,$0038         ; start of bpl. (horizontal)
  285.     dc.w    $0094,$00d0         ; endo of bpl. (horizontal)
  286. bmapptrs:
  287.     dc.w    $00e0,$0000         ; adr of bplane 1 (long - 2 words)
  288.     dc.w    $00e2,$0000         ; low word of bplane 1 adr
  289.     dc.w    $00e4,$0000
  290.     dc.w    $00e6,$0000
  291.     dc.w    $00e8,$0000
  292.     dc.w    $00ea,$0000
  293.     dc.w    $00ec,$0000
  294.     dc.w    $00ee,$0000
  295.     dc.w    $00f0,$0000
  296.     dc.w    $00f2,$0000
  297. sprptrs:
  298.     dc.w    $0120,$0000
  299.     dc.w    $0122,$0000
  300.     dc.w    $0124,$0000
  301.     dc.w    $0126,$0000
  302.     dc.w    $0128,$0000
  303.     dc.w    $012a,$0000
  304.     dc.w    $012c,$0000
  305.     dc.w    $012e,$0000
  306.     dc.w    $0130,$0000
  307.     dc.w    $0132,$0000
  308.     dc.w    $0134,$0000
  309.     dc.w    $0136,$0000
  310.     dc.w    $0138,$0000
  311.     dc.w    $013a,$0000
  312.     dc.w    $013c,$0000
  313.     dc.w    $013e,$0000
  314.  
  315.     dc.w    $ffff,$fffe
  316.  
  317. Bmap:    dcb.b    8000*5,0
  318.  
  319. ***********************************************************
  320.  
  321.     section farb,bss_c
  322.  
  323. NullSprite:    ds.l    3    ; 2 control words/2 data words/2 blank words
  324. DMACONSave:    ds.w    1
  325. INTENASave:    ds.w    1
  326. Level3Save:    ds.l    1
  327.