home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser-CD 2001 January / LCD_01_2001.iso / develop / ttdigger / eas.s < prev    next >
Encoding:
Text File  |  1999-07-27  |  7.8 KB  |  388 lines

  1.         xref    tabx,tab2x,labx
  2.         xdef    N2345678,tab2
  3.         bss
  4. tabel:    ds        10
  5. tabel2:    ds        5
  6. save:    ds.l    24
  7. savefpsr:
  8.         ds.l    3
  9. tab:    ds        2
  10. tab2:    ds        2
  11.         data
  12. N1234567:
  13.         dc.l    tabel
  14. M1234567:
  15.         dc.l    tabel2
  16. N2345678:
  17.         dc.l    tab
  18. M2345678:
  19.         dc.l    tab2
  20.         text
  21. testea:
  22.         link.l    a6,#-0xfffff
  23.         move    5(a1,d0),d0
  24.  
  25.         move    8.w,d0                ; test namW
  26.         move    8.l,d0
  27.         move.b    0x8901.w,d0
  28.         move.b    0xffff8901.w,d0        ; must be same as above
  29.         move.b    0xff8901.l,d0
  30.         move.b    0xffff8901.l,d0
  31.         move.b    0x8901.l,d0
  32.  
  33. z0:        ; test multiple lables
  34. z1:
  35. z2:
  36. z:        move    x(pc,d1),d0
  37.         move    8(a1,d0*2),d0
  38.         move    18(pc,d1*4),d0
  39.         move    14(pc,d1),d0
  40. x:        move    (tab.w,a0,d2.l*8),d0
  41.         move    (tab2.w,d3.l*4),d0
  42.         move    (d3.w*1),d0            ; move (d3),d0
  43. /* test 4 8ch namen in move; dit is tevens een 20 byte instructie */
  44.         move    ([N1234567,a5,d2.l],M1234567),([N2345678,a5,d2.l],M2345678)
  45. /* memory indirect preindexd */
  46.         move    ([labx+4,pc,d2.l],tab2x),d0
  47.         move    ([tabx+8,a0,d2*2],tab2x),d0
  48.         move    ([tabx,d3.l*4],tab2x+6),d0
  49.         move    ([d3.w*8],tabel2+10),d0
  50.         move    ([a1,d3.w],tabel2),d0
  51.  
  52.         move    ([y,pc,d2.l*4]),d0
  53.         move    ([tabel,a0,d2*2]),d0
  54.         move    ([tabel,d3.l]),d0
  55.         move    ([d3.w*2]),d0
  56.         move    ([a1,d3.w*4]),d0
  57.  
  58.         jsr        ([M2345678])
  59.  
  60. /* memory indirect postindexed */
  61.         move    ([tabel,pc],d2.l*2,tabel2),d0
  62. /* de combinatie bss-name met pc wordt door PASM niet geflagd.
  63.     Het zou ook eigenlijk moeten kunnen.
  64.       Het relatief maken is dan een taak voor de linker.
  65.         Het lijkt erop dat PASM geen goede object genereert.
  66.  
  67. P.S.    in Pure_C format is alles prima in orde.
  68. */
  69. ddd:    move    ([tabel,a0],d2,tabel2),d0
  70.         move    ([tabel],d3.l*8,tabel2),d0
  71.         move    ([a0],d3.w*4,tabel2),d0
  72.  
  73.         move    ([ddd,pc],d2.l),d0
  74.         move    ([tabel,a0],d2*2),d0
  75.         move    ([tabel],d3.l*4),d0
  76.         move    ([a0],d3.w*8),d0
  77.  
  78. /* memory indirect */
  79.         move    ([ddd.w+4,pc],tabel2),d0
  80.         move    ([tabel,a0],tabel2),d0
  81.         move    ([tabel],tabel2),d0
  82.         move    ([a1],tabel2),d0
  83.  
  84.         move    ([tabel,pc]),d0
  85. y:        move    ([tabel,a0]),d0
  86.         move    ([tabel]),d0
  87.         move    ([a1]),d0
  88.  
  89. /* without Xn postindexed and preindexed become the same */
  90. /* No outer displacement without memory indirection */
  91.  
  92.         fmovecr    #1,fp0
  93.         movem.l    d3-d5,-(sp)        ; ter vergelijk
  94.         fmovem    fp3-fp5,-(sp)
  95.         fmove.l    fpsr,savefpsr
  96. ;        fmovem    fpiar/fpcr,(a0)    ; PASM doesnt set B14
  97.         dc         $F210,$F400        ; this one does
  98. l1:        fnop
  99.         fsave    save
  100.         frestore save
  101.         fmove.x    #1.125,fp4
  102.         fmove.l fp4,([tabel,a4],d4*4,tabel2)
  103.         fble.l    lf
  104. ;        fmovem    (a0),fpiar/fpcr    ; PASM doesnt set B14
  105.         dc         $F210,$D400        ; this one does
  106.         fmove.l    savefpsr,fpsr
  107.         fsgt    -4(a6)
  108.         fdble    d4,lf1
  109.         ftrapeq
  110. lf:        ftrapne.w #0xfff
  111. lf1:    ftraple.l #0xffffff
  112.         fmovem    (sp)+,fp5-fp3
  113.         movem.l    (sp)+,d5-d3
  114.  
  115.         tst.l    a0            ; pasm vertaalt naar cmpa.w #0,a0
  116. l2:        dc.w    0x4a88        ; deze niet
  117.         tst.w    l2
  118.         bkpt    #5
  119.         trapeq
  120.         traple.w #0xfff
  121.         trapgt.l #0xfffff
  122.  
  123.         pack    -(a1),-(a2),#0x1111
  124.         pack    d3,d4,#0x8888
  125.         unpk    -(a1),-(a2),#0x1111
  126.         unpk    d3,d4,#0x8888
  127.  
  128.         move    tab.w,d0;        basis voor ahex.w
  129.         move    tab2.w,d0
  130.         blt.l    l1
  131.         bgt.l    heelverweg
  132.         bge.l    lang
  133.         ble.l    langer
  134.  
  135.         ploadr    d0,8(a6)
  136.         ploadw    #7,10(a5)
  137.         ploadr    sfc,12(a4)
  138.         ploadw    dfc,14(a3)
  139.  
  140. lang:    pflusha
  141.         pflush    #7,#2,10(a5)
  142.         pflush    sfc,#3,12(a4)
  143.         pflush    dfc,#4,14(a3)
  144.  
  145. langer:    ptestr    d0,8(a6),#1
  146.         ptestw    #7,10(a5),#2
  147.         ptestr    sfc,12(a4),#3,a1
  148.         ptestw    dfc,14(a3),#4,a2
  149.  
  150.         pmove    TT0,(a1)
  151.         pmove    TT1,(a2)
  152.         pmove    (a2),TT0
  153.         pmovefd    (a2),TT1
  154.  
  155.         pmove    (a1),TC
  156.         pmovefd    (a1),SRP
  157.         pmove    (a2),CRP
  158.         pmove    (a2),MMUSR
  159.  
  160.         pmove    TC,(a1)
  161.         pmove    srp,(a1)
  162.         pmove    crp,(a2)
  163.         pmove    mmusr,(a2)
  164.  
  165.         moves    a1,(a0)
  166.         moves    (a2),d0
  167.  
  168.         movec    sfc,d0
  169.         movec    dfc,d0
  170.         movec    cacr,d0
  171.         movec    msp,d0
  172.         movec    isp,d0
  173. ; 68040 -->
  174. ;        cinvl    IC,(a3)
  175.         dc.w    %1111010010001011
  176. ;        cpushl    DC,(a4)
  177.         dc.w    %1111010001101100
  178. ;        cinvp    DC,(a5)
  179.         dc.w    %1111010001010101
  180. ;        cpushp    BC,(a6)
  181.         dc.w    %1111010011110110
  182. ;        cinva    DC
  183.         dc.w    %1111010001011000
  184. ;        cpusha    BC
  185.         dc.w    %1111010011111000
  186. ;        cpusha    BC
  187.         dc.w    %1111010011111001   ; fail
  188. ;        pflushn    (a1)
  189.         dc.w    %1111010100000001
  190. ;        pflush    (a2)
  191.         dc.w    %1111010100001010
  192. ;        pflushan
  193.         dc.w    %1111010100010000
  194. ;        pflusha
  195.         dc.w    %1111010100011000
  196. ;        ptestw    (a1)
  197.         dc.w    %1111010101001001
  198. ;        ptestr    (a2)
  199.         dc.w    %1111010101101010
  200. ;        move16    (a3)+,tabel
  201.         dc.w    %1111011000000011
  202.         dc.l    tabel
  203. ;        move16    tabel2,(a4)+
  204.         dc.w    %1111011000001100
  205.         dc.l    tabel2
  206. ;        move16    (a5),tabel2
  207.         dc.w    %1111011000010101
  208.         dc.l    tabel2
  209. ;        move16    tabel,(a6)
  210.         dc.w    %1111011000011110
  211.         dc.l    tabel
  212.         move16    (a2)+,(a4)+
  213.         dc.w    %1111011000100010
  214.         dc.w    %1100000000000000
  215. ;        movec    mmusr,d0
  216.         dc.w    %0100111001111010
  217.         dc.w    $0805
  218. ;        movec    urp,d0
  219.         dc.w    %0100111001111010
  220.         dc.w    $0806
  221. ;        movec    srp,d0
  222.         dc.w    %0100111001111010
  223.         dc.w    $0807
  224. ;        movec    tc,d0
  225.         dc.w    %0100111001111010
  226.         dc.w    3
  227. ;        movec    itt0,d0
  228.         dc.w    %0100111001111010
  229.         dc.w    4
  230. ;        movec    dtt0,d0
  231.         dc.w    %0100111001111010
  232.         dc.w    6
  233. ;        movec    itt1,d0
  234.         dc.w    %0100111001111010
  235.         dc.w    5
  236. ;        movec    dtt1,d0
  237.         dc.w    %0100111001111010
  238.         dc.w    7
  239. ; <-- 68040
  240. ; 68060 -->
  241. ;        plpaw    (a4)
  242.         dc.w    %1111010110001100
  243. ;        plpar    (a5)
  244.         dc.w    %1111010111001101
  245. ;        lpstop    #$100
  246.         dc.w    %1111100000000000
  247.         dc.w    $01c0
  248.         dc.w    $100
  249. ;        movec    buscr,d0
  250.         dc.w    %0100111001111010
  251.         dc.w    8
  252. ;        movec    pcr,d0
  253.         dc.w    %0100111001111010
  254.         dc.w    $0808
  255. ; <-- 68060
  256.         cas.b    d1,d2,-12(sp)
  257.         cas     d1,d2,-12(sp)
  258.         cas.l    d1,d2,-12(sp)
  259.         cas2.w    d1:d2,d3:d4,(a1):(a2)
  260.         cas2.l    d1:d2,d3:d4,(a1):(a2)
  261.         callm    #24,ergens
  262.         chk2.b    8(a3,d2),a1
  263.         chk2.l    16(a4,d3),a2
  264.         cmp2.b    8(a3,d2),a1
  265.         cmp2.l    16(a4,d3),a2
  266.         
  267.         muls.l    -8(a6),d1
  268.         mulu.l    -10(a5),d2:d3
  269.         divs.l    -12(a6),d4
  270.         divu.l    -14(a6),d5:d6
  271.         divul.l    -16(a6),d7:d0
  272.  
  273.         unlk    a6
  274.         rts
  275. ergens:
  276.         bftst    d6{d5:d4}
  277.         bfextu    tabel{15:8},d3
  278.         bfchg    8(a6){1:2}
  279.         bfexts    12(a4){31:1},d4
  280.         bfclr    10(a5){d0:d1}
  281.         bfffo    14(a3){d2:32},d5
  282.         bfset    (a4){d1:8}
  283.         bfins    d6,(tabel2,d7){6:d3}
  284.  
  285.         chk     -4(a6),d4
  286.         chk.l    -8(a6),d5
  287.         rtd      #24
  288.  
  289.         globl    mandelbrot
  290. * int cdecl
  291. * mandelbrot(double re,double im,double rec,double imc,int iter,int threshold)
  292. * d0         complex a           complex c             d0       d1
  293.  
  294. * re en im = 0 : mandelbrot set; anders juliaset
  295.  
  296.         offset;        parameter stack frame 
  297. a6plus:
  298. rpc:    ds.l    1
  299. ;ra6:    ds.l    1
  300. re:        ds.x    1;            NB 12 bytes
  301. im:        ds.x    1
  302. rec:    ds.x    1
  303. imc:    ds.x    1
  304. it:        ds.w    1
  305. thr:    ds.w    1
  306.  
  307.         text
  308. mandelbrot:
  309.         fmove.x rec(sp),fp1
  310.         fmove.x imc(sp),fp7
  311.         fmove.x re(sp),fp2
  312.         fmove.x im(sp),fp3
  313.  
  314.         fmove.w    d1,fp6;            thres
  315.  
  316.         clr.l    d2;                num
  317. l0:
  318.         fmove.x    fp3,fp0;        im
  319.         fmul.x    fp0,fp0;        *im
  320.         fmove.x    fp2,fp5
  321.         fmul.x    fp5,fp5;           re2=re*re
  322.         fmove.x    fp5,fp4
  323.         fadd.x    fp0,fp4;        magn
  324.  
  325.         fcmp.x    fp6,fp4;        magn-thres
  326.         fbgt.w    lx;                magn > thres
  327.         cmp        d2,d0
  328.         ble.w        lx;                it<=num
  329.  
  330.         fsub.x    fp0,fp5;        re*re-im*im
  331.         fadd.x    fp1,fp5;        +rec
  332.         fmul.x    fp2,fp3;        re*im
  333.         fadd.x    fp3,fp3;        *2
  334.         fadd.x    fp7,fp3;        +imc = im
  335.         fmove.x    fp5,fp2;        re2 -> re
  336.  
  337.         addq    #1,d2;            num++
  338.         bra.w        l0
  339.  
  340. lx:        move    d2,d0;            return num
  341.         rts
  342.  
  343. /* shifts names testen */
  344.         asl        2(a0)
  345.         asr        2(a0)
  346.         lsl        2(a0)
  347.         ror        2(a0)
  348.         lsr        2(a0)
  349.         roxl    2(a0)
  350. lbt:    roxr    2(a0)
  351. lbd:    rol        2(a0)
  352. lbc:    asl        #2,d1
  353. lbf:    asr        #2,d1
  354.         lsl        #2,d1
  355.         ror        #2,d1
  356.         lsr        #2,d1
  357.         roxl    #2,d1
  358.         roxr    #2,d1
  359.         rol        #2,d1
  360. * maskx testen
  361.         btst    #1,lbt(pc)
  362.         btst    #2,([lbd.l,pc,a0],tab)
  363. ;        movem.l    lmv(pc),d3-d0            pasm geeft error
  364.         dc.w    0x4cfa,0x000f,0xffe8 ;    zo niet (ook voorbeeld van locale label niet in symbol table)
  365.         btst    #3,([pc],a1)         ;  randeffect
  366.         frestore lbf(pc)
  367.         fabs    (lbc,pc,a2),fp0
  368.         fabs    (tab,a0,d2*4),fp0
  369.         fadd    fp1,fp0
  370. ; 040 060 check the new opcodes (round to single, cq double precision) */
  371.         fsabs    fp0
  372.         fdabs    fp0
  373.         fsadd    fp1,fp0
  374.         fdadd    fp1,fp0
  375.         fsdiv    fp1,fp0
  376.         fddiv    fp1,fp0
  377.         fsmove    fp1,fp0
  378.         fdmove    fp1,fp0
  379.         fsmul    fp1,fp0
  380.         fdmul    fp1,fp0
  381.         fsneg    fp0
  382.         fdneg    fp0
  383.         fssqrt    fp0
  384.         fdsqrt    fp0
  385.         fssub    fp1,fp0
  386.         fdsub    fp1,fp0
  387.         end
  388.