glokyfull

code11c.s work but some part will be deprecated

Dec 23rd, 2023
135
0
234 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. subpixel equ 4
  2. subpixel2 equ 6
  3. nbbob   equ 64
  4. spr_pi1 equ 0 1
  5. tempmachine equ 1
  6. start:
  7.  
  8. ;   clr.l -(sp)
  9. ;   move.w #$20,-(sp)
  10. ;   trap #1
  11. ;   addq.l #6,sp
  12.  
  13.  
  14.     jsr mjj_sys_init
  15.  
  16.     jsr prepare_segments
  17.  
  18.  
  19.  
  20.     lea sin1pack,a0
  21.     move.l sin512,a1
  22.     jsr depackperiod       
  23.  
  24.  
  25.     lea spritedeca,a0
  26.     move.w #16*2*16-1,d0
  27. .toto   clr.w (a0)+
  28.     dbf d0,.toto
  29.  
  30.     jsr extractsprite
  31.  
  32.  
  33. ; creation convx et convy
  34. ;   move.l #$8000,d0    ;     offset,motif or
  35. ;   lea convx,a0
  36. ;.loopconvx
  37. ;   rept subpixel
  38. ;     move.l d0,(a0)+
  39. ;   endr
  40. ;   lsr.w #1,d0
  41. ;   bne.s .loopconvx
  42. ;   add.l #$00088000,d0
  43. ;   cmp.l #$00a08000,d0
  44. ;   bne.s .loopconvx
  45. ;
  46. ;   move.w #0,d0
  47. ;   move.w #199,d1
  48. ;   lea convy,a0
  49. ;.loopconvy
  50. ;   rept subpixel
  51. ;   move.w d0,(a0)+
  52. ;   endr
  53. ;   add #160,d0
  54. ;   dbf d1,.loopconvy
  55. ;
  56.  
  57.     move.l ptrConvX,a0
  58.     lea codegenliste,a1
  59.     move.w #19,d0
  60.     moveq #0,d2
  61. .loop3
  62.     lea codegenliste,a1
  63.     lea codeeffliste,a3
  64.     moveq #15,d3
  65. .loop2
  66.     move.l (a3)+,d5
  67.     move.l (a1)+,d1
  68.     rept subpixel2
  69.     move.w d2,(a0)+     ; offset
  70.     move.l d5,(a0)+     ; code effacement
  71.     move.l d1,(a0)+     ; code affichage
  72.  
  73.     endr
  74.  
  75.     dbf d3,.loop2
  76.     addq.w #8,d2
  77.     dbf d0,.loop3
  78.  
  79.     move.l ptrConvY,a0
  80.     moveq #0,d2
  81.     move.w #160,d1
  82.     move.w #199,d0      ; pas de cliping pour l'instant
  83.     move.w #200*subpixel2,d7
  84.  
  85. .1  move.w d2,(a0)+
  86.     dbf d7,.1
  87.  
  88. .loop4
  89.     rept subpixel2
  90.     move.w d2,(a0)+
  91.     endr
  92.     add d1,d2
  93.     dbf d0,.loop4
  94.     jsr initcleartozerozero
  95.     jsr waitvbl
  96.     jsr swap_screen
  97.  
  98.     move.l #efface1lst,codecurefface
  99.     move.l log,d0
  100.     move.l d0,codelog
  101.     jsr convsinus
  102.     jmp main
  103. effaceallbob
  104.     move.l codelog,d1
  105.     move.l codecurefface,a4
  106.     move.w #nbbob-1,d6
  107.     moveq #0,d0
  108. .clear
  109.     move.w (a4)+,d1
  110.     move.l d1,a0
  111.     move.l (a4)+,a5
  112.     jsr (a5)
  113.     dbf d6,.clear
  114.     rts
  115.  
  116.     jsr waitvbl
  117. main
  118.     tst.w flagtransition
  119.     beq.s .11
  120.     jsr transfo1
  121. .11
  122.     move.l ptrscr1,d0
  123.  
  124.     add.l #160*16,d0
  125.  
  126.     lsr.w #8,d0
  127.     move.l d0,$ffff8200.w
  128.  
  129.     move.l #efface1lst,codecurefface
  130.     move.l ptrscr1,d0
  131.     move.l d0,codelog
  132.     move.l ptrscr1,log
  133.     jsr effaceallbob
  134.     jsr majAngle
  135.     jsr calcAllPos
  136.    
  137.     jsr waitvbl
  138.     tst.w flagtransition
  139.     beq.s .12
  140.     jsr transfo1
  141. .12
  142.  
  143.     move.l ptrscr2,d0
  144.  
  145.     add.l #160*16,d0
  146.     lsr.w #8,d0
  147.     move.l d0,$ffff8200.w
  148.  
  149.     move.l #efface2lst,codecurefface
  150.     move.l ptrscr2,d0
  151.     move.l d0,codelog
  152.     move.l ptrscr2,log
  153.  
  154.    
  155.     jsr effaceallbob
  156.     jsr majAngle
  157.     jsr calcAllPos
  158.     jsr waitvbl
  159.  
  160.     cmp.b #$b9,$fffffc02.w
  161.     beq.s .fin
  162.     jmp main
  163. .fin
  164.  
  165.     bsr waitvbl
  166.     move.l $44e.w,d0
  167.     lsr.w #8,d0
  168.     move.l d0,$ffff8200.w
  169.     bsr waitvbl
  170.     move.l $44e.w,d0  
  171.     move.w #1,-(sp)
  172.     move.l d0,-(sp)
  173.     move.l d0,-(sp)
  174.    move.w #5,-(sp)
  175.     trap #14
  176. ;
  177.     lea 12(sp),sp
  178.  
  179.    
  180.     jsr mjj_sys_fini   
  181.  
  182.     clr.w -(sp)
  183.     trap #1
  184.  
  185. initcleartozerozero
  186.     moveq #0,d0
  187.     move.l codeeffliste,d4
  188.     lea ptrlsteff,a2
  189.     moveq #2-1,d7
  190. xx4
  191.     move.w #nbbob-1,d6
  192.     move.l (a2)+,a3
  193. .clearall
  194.     move.w d0,(a3)+
  195.     move.l d4,(a3)+
  196.     dbf d6,.clearall
  197.  
  198.     dbf d7,xx4
  199.     rts
  200.  
  201.  
  202. majangle
  203.     lea ajoutangle,a0
  204.     lea angles,a1
  205.     moveq #3,d7
  206. .loop
  207.     move.w (a0)+,d0
  208.     move.w (a1),d1
  209.     add d0,d1
  210.     and.w #511,d1
  211.     move.w d1,(a1)+
  212.     dbf d7,.loop
  213.  
  214.     rts
  215.  
  216. convsinus
  217.     move.l sinx1,a1
  218.     move.l sinx2,a2
  219.     move.l sin512,a0
  220.     move.w #511,d0
  221.     move.w ptrconvX+2,d4
  222. .loop
  223.     moveq #0,d1
  224.     move.w (a0)+,d1
  225.     add.w #32767,d1
  226.  
  227.     move.l d1,d2
  228.     mulu #(160-8)*subpixel2,d1
  229.     mulu #(140-8)*subpixel2,d2   ; 8 subpixel
  230.     ;asl #1,d1
  231.     ;asl #1,d2
  232.     swap d1
  233.     add.w #5*subpixel2,d1   ; additionner 5 pixel a x
  234.     swap d2
  235. ; *10 = *8+*2 = *2(*4+1)
  236.  
  237.     add d1,d1
  238.     move.w d1,d3
  239.     add.w d3,d3 *4
  240.     add.w d3,d3
  241.     add d3,d1   ; d1 = d1 * 10
  242. ;   and.w #-4,d1
  243.  
  244. ;   and.w #-4,d2
  245.  
  246.     add d2,d2
  247.     move.w d2,d3
  248.     add d3,d3
  249.     add d3,d3
  250.     add d3,d2
  251.  
  252.     add d4,d1               ; premiere table de sinus, on ajoute l'offset de convX
  253.     move.w d1,(a1)+
  254.     move.w d2,(a2)+
  255.     dbf d0,.loop
  256.    
  257.  
  258.     move.w ptrConvY+2,d4
  259.     add.w #216*subpixel2*2,d4
  260.     move.l siny1,a1
  261.     move.l siny2,a2
  262.     move.l sin512,a0
  263.     move.w #511,d0
  264. .loopy
  265.     moveq #0,d1
  266.     move.w (a0)+,d1
  267.     add.w #32767,d1
  268.     move.l d1,d2
  269.     mulu #(80-8)*subpixel2*2,d1
  270.     mulu #(119-8)*subpixel2*2,d2
  271. ;   asl #1,d1
  272. ;   asl #1,d2
  273.     swap d1
  274.     swap d2
  275.     and.w #-2,d1
  276.     and.w #-2,d2
  277.     add d4,d1           ; ajoute l'offset segment
  278.     move.w d1,(a1)+
  279.     move.w d2,(a2)+
  280.     dbf d0,.loopy
  281.  
  282.  
  283. ; createContigustable
  284. ;
  285. ; a0 = ram
  286. ; d0 = nombre d'element de la table sinus
  287. ; d1 = pas interne
  288. ; d2 = nombre de copie de valeurs
  289. ; a3 = table de sinus d'amplitude final
  290. ;
  291. ; pendant le fonctionnement:
  292. ; constante  d3,d4,d5 = pas interne,*2,*4
  293. ;
  294. ;
  295. ;
  296.  
  297. ; retour:
  298. ; a0 = ram
  299. ; a1 = adresse table de d0 adresses  reftable pris a partir de la ram
  300. ;  
  301.  
  302. totoisback
  303.     move.l parametreInternStep,a6       ; le seul registre dispo
  304. .automodif
  305.     lea ram3,a0
  306.     move.w #512,d0
  307.     move.w #nbbob,d2 ; nombre de copie de valeur
  308.     move.w (a6)+,d1
  309.     ;move.w #512-13,d1      ; pas interne 5 /512
  310.     move.l sinx1,a3
  311.     jsr createContigustable
  312. .auto1  move.l a1,ptrref1
  313.  
  314.     move.w #512,d0
  315.     move.w (a6)+,d1
  316.     ;move.w #14,d1
  317.     move.w #nbbob,d2
  318.     move.l sinx2,a3
  319.     jsr createContigustable
  320. .auto2  move.l a1,ptrref2
  321.  
  322.     move.w #512,d0
  323.     move.w (a6)+,d1
  324.     ;move.w #512-16,d1
  325.     move.w #nbbob,d2
  326.     move.l siny1,a3
  327.     jsr createContigustable
  328. .auto3  move.l a1,ptrref3
  329.  
  330.     move.w #512,d0
  331.     ;   move.w #19,d1
  332.     move.w (a6)+,d1
  333.     move.w #nbbob,d2
  334.     move.l siny2,a3
  335.     jsr createContigustable
  336. .auto4  move.l a1,ptrref4
  337.  
  338.  
  339.     lea ajoutangle,a5
  340.     move.w (a6)+,(a5)+
  341.     move.w (a6)+,(a5)+
  342.     move.w (a6)+,(a5)+
  343.     move.w (a6)+,(a5)+
  344.     lea angles,a5
  345.     move.w #128,(a5)+
  346.     move.w #128,(a5)+
  347.     move.w #0,(a5)+
  348.     move.w #0,(a5)
  349.  
  350.     move.l a6,parametreInternStep
  351.     move.l (a6),d0
  352. tstt    cmp.l #$31415926,d0
  353.     bne.s .nolooop
  354.     move.l #fct,d0
  355.     move.l d0,parametreInternStep
  356. .nolooop
  357.  
  358. ;   lea .automodif+2,a0
  359. ;   move.l (a0),d0
  360. ;   cmp.l #ram3,d0
  361. ;   beq.s .modif1
  362. ;   move.l #ram3,(a0)
  363. ;   move.l #ptrref1,d1
  364. ;   move.l d1,.auto1+2
  365. ;   move.l #ptrref2,d1
  366. ;   move.l d1,.auto2+2
  367. ;   move.l #ptrref3,d1
  368. ;   move.l d1,.auto3+2
  369. ;   move.l #ptrref4,d1
  370. ;   move.l d1,.auto4+2
  371. ;
  372.     rts
  373. ;.modif1
  374. ;   move.l ptrscr3,d1   64k libre
  375. ;;  move.l d1,(a0)
  376. ;
  377. ;   move.l #ptrref5,d1
  378. ;   move.l d1,.auto1+2
  379. ;   move.l #ptrref6,d1
  380. ;   move.l d1,.auto2+2
  381. ;   move.l #ptrref7,d1
  382. ;   move.l d1,.auto3+2
  383. ;   move.l #ptrref8,d1
  384. ;   move.l d1,.auto4+2
  385. ;  
  386. ;   rts
  387.  
  388. parametreInternStep dc.l fct
  389.  
  390. fct dc.w 512-13,14,512-16,11
  391.        dc.w 3,4,7,6
  392.     dc.w 4,11,512-12,3
  393.        dc.w 9,512-13,17,6
  394.     dc.w 10,512-19,5,512-15
  395.        dc.w 2,4,1,3
  396.     dc.w 10,2,30,4
  397.        dc.w 4,9,5,8
  398.     dc.w 5,15,10,512-6
  399.        dc.w 10,9,11,7
  400.     dc.w 50,512-45,42,43
  401.     dc.w 3,5,2,1
  402.  
  403.     dc.w 10,9,8,11
  404.     dc.w 7,15,9,13
  405.  
  406.     dc.w 5,6,7,8
  407.     dc.w 9,10,11,12
  408.  
  409.     dc.w 50,512-59,512-47,43
  410.     dc.w 10,20,15,16
  411.    
  412.     dc.w 100,2,99,3
  413.     dc.w 2,13,3,15
  414.    
  415.     dc.w 200,5,207,512-6
  416.     dc.w 10,4,512-13,12
  417.  
  418.  
  419.  
  420.     dc.l $31415926
  421.  
  422.  
  423.  
  424. changefct
  425.     jmp totoisback
  426.     ; swap ptrref1..4 to ptrref5..8
  427. ;   lea ptrref1,a0
  428. ;   movem.l (a0),d0-d3
  429. ;   lea ptrref5,a1
  430. ;   movem.l (a1),d4-d7
  431. ;   movem.l d0-d3,(a1)
  432. ;   movem.l d4-d7,(a0)
  433. ;  
  434.     ;; to be continued
  435.        
  436.     ;rts
  437.  
  438.  
  439. ;superhackitVBL:            ; remplace it 70.w
  440. ;   addq.l #1,$466.w
  441. ;   movem.l d0-d7/a0-a6,-(sp)
  442. ;   lea (8+7)*4+2(sp),a0
  443. ;   move.l (a0),d0      ; adresse de retour de l'interuption
  444. ;   cmp.l #waitvbl,d0    d0-waitvbl>0   d0>waitvbl
  445. ;   bge.s .suitedutest
  446. ;  
  447. ;   jsr savejob
  448. ;
  449. ;   jmp .noprecalc
  450. ;.suitedutest
  451. ;   cmp.l #finwaitvbl,d0  d0-fin<0 d0<fin   ; en fait metre toute les routine
  452. ;                       ; qui calcul entre 2 adresse
  453. ;   bge.s .noprecalc   
  454. ;          
  455. ;   jsr savejob
  456. ;
  457. ;.noprecalc
  458. ;   movem.l (sp)+,d0-d7/a0-a6
  459. ;   rte
  460. ;savejob    move.l (a0),actualjob
  461. ;  
  462. ;
  463. calcAllpos
  464.     move.l ptrref1,a5
  465.     move.l ptrref2,a1
  466.     move.w ang1,d0
  467.     add d0,d0
  468.     add d0,d0
  469.     add.w d0,a5
  470.     move.w ang2,d0
  471.     add d0,d0
  472.     add.w d0,d0
  473.     add.w d0,a1
  474.  
  475.     move.l ptrref3,a2
  476.     move.l ptrref4,a3
  477.     move.w ang3,d0
  478.     add d0,d0
  479.     add d0,d0
  480.     add d0,a2
  481.     move.w ang4,d0
  482.     add d0,d0
  483.     add d0,d0
  484.     add d0,a3
  485.  
  486.     move.l (a5),a5
  487.     move.l (a1),a1
  488.     move.l (a2),a2
  489.     move.l (a3),a3
  490.  
  491.     move.l codecurefface,a4
  492.  
  493.     move.l ptrConvX,d0
  494.     move.l ptrConvY,d1
  495.     move.l log,d3
  496.  
  497.     move.w #nbbob-1,d2
  498.    
  499.     moveq #0,d4
  500.     move.w seuil,d5
  501. .loopcalcul
  502.  
  503.     move.w d5,d0
  504.     add.w (a2)+,d0
  505.     add.w (a3)+,d0
  506.  
  507.     move.l d0,a6
  508.     move.w (a6),d3          ;  y*160
  509.  
  510.     move.w (a5)+,d0
  511.     add.w (a1)+,d0
  512.  
  513.     move.l d0,a6
  514.     add.w (a6)+,d3
  515.     move.w d3,(a4)+         ; effacement offset
  516.     move.l (a6)+,(a4)+      ; routine d'effacement
  517.  
  518.     move.l (a6),a6          ; routine d'affichage
  519.     move.l d3,a0
  520.  
  521.     jsr (a6)
  522. ;   move.w d5,d0
  523. ;   add.w (a2)+,d0
  524. ;   add.w (a3)+,d0
  525. ;
  526. ;   move.l d0,a6
  527. ;   move.w (a6),d3          ;  y*160
  528. ;
  529. ;   move.w (a5)+,d0
  530. ;   add.w (a1)+,d0
  531. ;
  532. ;   move.l d0,a6
  533. ;   add.w (a6)+,d3
  534. ;   addq.w #4,d3
  535. ;   move.w d3,(a4)+         ; effacement offset
  536. ;   move.l (a6)+,(a4)+      ; routine d'effacement
  537. ;
  538. ;   move.l (a6),a6          ; routine d'affichage
  539. ;   move.l d3,a0
  540. ;
  541. ;   jsr (a6)
  542.     dbf d2,.loopcalcul
  543.  
  544.    
  545.     lea ang1,a0
  546.     lea 8(a0),a1
  547.     movem.w (a1),d0-d3
  548.  
  549.     move.w (a0),d4
  550.     add.w d0,d4
  551.     move.w #511,d5
  552.     and d5,d4
  553.     move.w d4,(a0)+
  554.  
  555.     move.w (a0),d4
  556.     add.w d1,d4
  557.     and d5,d4
  558.     move.w d4,(a0)+
  559.  
  560.     move.w (a0),d4
  561.     add.w d2,d4
  562.     and d5,d4
  563.     move.w d4,(a0)+
  564.  
  565.     move.w (a0),d4
  566.     add.w d3,d4
  567.     and d5,d4
  568.     move.w d4,(a0)+
  569. ; maj angle fait
  570.  
  571.     rts
  572.  
  573. prepare_segments
  574.    
  575.     move.l #screenbuf,d0
  576.     moveq #2,d1
  577.     swap d1
  578.     jsr getmem1                 ; prepare 16 zone memoire allant de 32768 a 1 octet (puissance de 2)
  579.  
  580.     lea ptrMem,a0
  581.     movem.l (a0)+,d0-d3         ; 1 buffer de 32k un de 16k un de 8k un de 4k  pas aligné mais contigu au meme segment  
  582.  
  583. ;   move.l d3,sinX1         ; sinx1 x2 y1 y2 devenu des pointeur sur
  584.                             ; 512 word
  585. ;   move.l #1024,d5
  586. ;   add.l d5,d3
  587. ;   move.l d3,sinX2
  588. ;   add.l d5,d3
  589. ;   move.l d3,sinY1
  590. ;   add.l d5,d3
  591. ;   move.l d3,sinY2                 ; place pour 4k = 4 table de 512 word
  592.  
  593.  
  594.                                 ; cad poid fort de l'adresse du buffer est toujours a la meme valeur
  595.     move.l d0,ptrConvY          ; 32k alloué pour convy: 1856*2 en comptant cliping haut bas de 16 pixel de hauteur et 4 subpixel
  596.     add.l #2*subpixel2*400,d0
  597.     ; 30912 octet libre
  598.     move.l d0,ptrConvX  ; 12800 octet pour 320 pixel 4 subpixel 10 octet (adresseEFF,adresseAFF,offset)
  599.     add.l #320*subpixel2*10,d0      ; pile poil 4 subpixel  convy 232*8 subpixel*2 + 352*8 subpixel*10 octet
  600.     moveq #0,d4                 ; 31872 octet sur 32768
  601.     move.w #1024,d4
  602.     lea sinx1,a1
  603.     move.l d0,(a1)+
  604.     add.l d4,d0
  605.     move.l d0,(a1)+
  606.     add.l d4,d0
  607.     move.l d0,(a1)+
  608.     add.l d4,d0
  609.     move.l d0,(a1)+
  610.     add.l d4,d0
  611.     move.l d0,flagtab  
  612.  
  613.     move.l d1,ptr16k
  614.     move.l d2,ptrFlag           ; 8k max pour les flag, sinus dont le nombre d'element ne depasse pas 8192
  615.     move.l d3,ptr4k
  616.  
  617.     lea ptrMem+4*4,a0
  618.     movem.l (a0)+,d0-d3
  619.     move.l d0,ptrvariable
  620.     move.l d1,sin512
  621.    
  622.    
  623.  
  624.     move.l #screenbuf,d0
  625.     moveq #1,d1
  626.     swap d1
  627.     clr.w d0
  628.     move.l d0,log
  629.     move.l d0,ptrscr1
  630.     add.l d1,d0
  631.     move.l d0,phys
  632.     move.l d0,ptrscr2
  633.     add.l d1,d0
  634.     move.l d0,ptrscr3
  635.     add.l d1,d0
  636.     move.l d0,ptrscr4
  637.  
  638. ;   add.l d1,d0
  639. ;   move.l d0,convX
  640. ;   add.l #320*subpixel*8,d0
  641. ;   add.l d1,d0
  642. ;   move.l d0,convY
  643.  
  644.     rts
  645. timer1  dc.w 700
  646. waitvbl
  647.     subq.w #1,timer1
  648.     tst.w timer1
  649.     bne.s .titi
  650.     move.w #700,timer1
  651.     move.w #1,flagtransition
  652.    
  653.    
  654. .titi
  655.     ifne tempmachine
  656.     not.w $ffff8240.w
  657.     rept 60
  658.     nop
  659.     endr
  660.     not.w $ffff8240.w
  661.     endc
  662.  
  663.     move.w $468.w,d0
  664. .loop   cmp.w $468.w,d0
  665.     beq.s .loop
  666.     rts
  667. nowaitvbl
  668. swap_screen
  669.     move.l log,d0
  670.     move.l phys,d1
  671.     move.l d0,phys
  672.     move.l d1,log
  673.  
  674.     add.l #16*160,d1
  675.    
  676.     lsr.w #8,d1
  677.     move.l d1,$ffff8200.w
  678.     rts
  679.  
  680. extractsprite
  681.  
  682.     ifne spr_pi1
  683.  
  684.         lea pi1+2,a0
  685.         movem.w (a0),d0-d3
  686.         movem.w d0-d3,$ffff8240.w
  687.         lea pi1+34,a0  
  688.    
  689.         lea spritedeca,a1
  690.         moveq #0,d1
  691.         moveq #15,d7
  692. .loop0
  693.         move.l (a0),d0
  694.         lea 160(a0),a0
  695.         move.l d0,(a1)+
  696.         move.l d1,(a1)+
  697.         dbf d7,.loop0
  698.     endc
  699.  
  700.     ifeq spr_pi1
  701.         lea pal_and_sprite,a0
  702.         movem.w (a0)+,d0-d3
  703.         movem.w d0-d3,$ffff8240.w
  704.         ;addq.w #2,d0
  705.         ;addq.w #2,d1
  706.         ;addq.w #2,d2
  707.         ;addq.w #2,d3
  708.         ;movem.w d0-d3,$ffff8248.w
  709.         lea spritedeca,a1
  710.         moveq #0,d1
  711.         moveq #15,d7
  712. .loop000
  713.         move.l (a0)+,d0
  714.         move.l d0,(a1)+
  715.         move.l d1,(a1)+
  716.         dbf d7,.loop000
  717.     endc
  718.    
  719.  
  720.     moveq #14,d7
  721.     lea spritedeca,a1
  722.     move.l a1,a3
  723.     lea 128(a1),a2
  724.     move.l a2,a4
  725. .copyandshift
  726.     move.w #15,d6
  727. .ligne
  728.     MOVE.L (A1)+,(A2)+
  729.     MOVE.L (A1)+,(A2)+
  730.     LEA -8(A2),A2
  731.     MOVE.B #0,CCR
  732.     ROXR (A2)
  733.     ROXR 4(A2)
  734.     MOVE.B #0,CCR
  735.     ROXR 2(A2)
  736.     ROXR 6(a2)
  737.  
  738.     lea 8(a2),a2
  739.     dbf d6,.ligne
  740.     lea 128(a3),a3
  741.     lea 128(a4),a4
  742.     move.l a3,a1
  743.     move.l a4,a2
  744.  
  745. ;   lea 4(a2),a2
  746. ;   lea 4(a1),a1
  747.     dbf d7,.copyandshift
  748.    
  749. makecodegen
  750.     lea spritedeca,a0
  751.     lea ram,a1
  752.     lea codegenliste,a2
  753.     lea codeeffliste,a3
  754.     lea ram2,a4
  755.     moveq #15,d0
  756. .loopSprite
  757.     move.l a4,(a3)+
  758.     move.l a1,(a2)+
  759.     moveq #15,d1
  760.     moveq #0,d6     ; offset
  761. .loopligne
  762.     move.w (a0)+,d2
  763.     move.w (a0)+,d3
  764.     move.w (a0)+,d4
  765.     move.w (a0)+,d5
  766.     tst.w d2
  767.     bne.s .1
  768.     tst.w d3
  769.     beq.s .nerienfaire
  770.     ; or.w #d3,offset+2(a0)
  771.     move.w d3,d7
  772.     addq #2,d6
  773.     bsr orwd7d6_2
  774.     subq #2,d6
  775.    
  776.  
  777.  
  778.     bra.s .suite
  779. .1  ; d2 contient kekchose
  780.     tst.w d3
  781.     beq.s .wordd2
  782.     ; or.l #d2d3,offset(a0)
  783.     move.w d2,d7
  784.     swap d7
  785.     move.w d3,d7
  786.     bsr orld7d6
  787.     bra.s .suite
  788. .wordd2
  789.     ; or.w #d2,offset(a0)
  790.     move.w d2,d7
  791.     bsr orwd7d6
  792.     bra.s .suite
  793. .nerienfaire
  794.     nop
  795. .suite
  796.     tst.w d4
  797.     bne.s .2
  798.     tst.w d5
  799.     beq.s .nerienfaire2
  800.     ; or.w #d5,offset+8+2(a0)
  801.     move.w d5,d7
  802.     add.w #10,d6
  803.     bsr orwd7d6
  804.     sub.w #10,d6
  805.  
  806.  
  807.     bra.s .suite2  
  808. .2  tst.w d5
  809.     beq.s .wordd4
  810.     ; or.l #d4d5,offset+8(a0)
  811.     move.w d4,d7
  812.     swap d7
  813.     move.w d5,d7
  814.     addq.w #8,d6
  815.     bsr orld7d6
  816.     subq #8,d6
  817.  
  818.     bra.s .suite2
  819. .wordd4
  820.     ; or.w #d4,offset+8(a0)
  821.     move.w d4,d7
  822.     addq #8,d6
  823.     bsr orwd7d6
  824.     subq #8,d6
  825.     bra.s .suite2
  826. .nerienfaire2
  827.     nop
  828. .suite2
  829.     add #160,d6
  830.     dbf d1,.loopligne
  831.     move.w #$4e75,(a1)+
  832.     move.w #$4e75,(a4)+
  833.     dbf d0,.loopSprite
  834.     rts
  835. orwd7d6
  836. ;   move.l d2,-(sp)
  837.     move.w d7,d2   ; plus besoin de d2
  838.     swap d2
  839.     move.w d7,d2
  840.     not.l d2
  841.  
  842.     tst.w d2
  843.     beq.s .move
  844.  
  845.     ; and.l d2,d6(a0)   02a8
  846.  
  847.     move.w #$02a8,(a1)+     ; + 8 octet au code genere
  848.     move.l d2,(a1)+
  849.     move.w d6,(a1)+
  850.     bra.s .aa
  851. .move   move.w #$2144,(a1)+
  852.     move.w d6,(a1)+
  853. .aa
  854.     move.w #$68,(a1)+
  855.     move.w d7,(a1)+
  856.     move.w d6,(a1)+
  857.  
  858.     move.w #$2140,(a4)+     ; since it's masked on 2 plan, the clearing is long instead of word
  859.  
  860.     move.w d6,(A4)+         ; ($2140 instead of $3140) (move.l d0,d6(a0) instead of move.w d0,d6(a0))
  861.  
  862. ;   move.l (sp)+,d2
  863.     rts
  864. orwd7d6_2                   ; cas ou orwd7d6 mais sur le deuxieme plan, l'effacement se fait naturellement sur le premier plan
  865. ;   move.l d2,-(sp)
  866.     move.w d7,d2   ; plus besoin de d2
  867.     swap d2
  868.     move.w d7,d2
  869.     not.l d2
  870.     tst.w d2
  871.     beq.s .move
  872.     ; and.l d2,d6(a0)   02a8
  873.  
  874.     move.w #$02a8,(a1)+     ; + 8 octet au code genere
  875.     move.l d2,(a1)+
  876.     move.w d6,(a1)
  877.     subq.w #2,(a1)+
  878.     bra.s .aa
  879.  
  880. .move   move.w #$2144,(a1)+
  881.     move.w d6,(a1)
  882.     subq.w #2,(a1)+
  883.  
  884.  
  885. .aa
  886.     move.w #$68,(a1)+
  887.     move.w d7,(a1)+
  888.     move.w d6,(a1)+
  889.  
  890.     move.w #$2140,(a4)+     ; since it's masked on 2 plan, the clearing is long instead of word
  891.  
  892.     move.w d6,(A4)          ; ($2140 instead of $3140) (move.l d0,d6(a0) instead of move.w d0,d6(a0))
  893.     subq.w #2,(a4)+         ; on and.l sur le plan 0 et 1 et pas 1 et 2
  894. ;   move.l (sp)+,d2
  895.     rts
  896. orld7d6
  897.     ; d7 = le data sur 2 plan
  898.     ;
  899.  
  900. ;   move.l d2,-(sp)
  901. ;   move.l d3,-(sp)
  902.     move.w d7,d2
  903.     swap d7
  904.     or.w d7,d2
  905.     swap d7     ; remet d7 a la bonne valeur
  906.     not.w d2
  907.     move.w d2,d3
  908.     swap d2
  909.     move.w d3,d2
  910.     ; d2.l = masque a partir des 2 valeur poid fort poid faible de d7
  911.  
  912.     tst.l d2
  913.     bne.s .aa
  914.  
  915.     ; and.l #0 remplacer par un move.l d4,dep(a0)
  916.     move.w #$2144,(a1)+
  917.     move.w d6,(a1)+
  918.  
  919.     bra.s .bb
  920. .aa
  921.     move.w #$02a8,(a1)+
  922.     move.l d2,(a1)+
  923.     move.w d6,(a1)+
  924.                     ; + 8 octets
  925. .bb
  926.     move.w #$A8,(a1)+
  927.     move.l d7,(a1)+
  928.     move.w d6,(a1)+
  929.  
  930.     move.w #$2140,(a4)+
  931.     move.w d6,(a4)+
  932.  
  933. ;   ;move.l (sp)+,d3
  934. ;   move.l (sp)+,d2
  935.  
  936.     rts
  937.  
  938. cpttransfo  dc.w 200/2-1
  939. steptransfo dc.w -subpixel2*2*2
  940. transfo1
  941.     move.w steptransfo,d0
  942.     add.w d0,seuil
  943.     subq.w #1,cpttransfo
  944.     tst cpttransfo
  945.     bne.s .ok
  946.     tst.w steptransfo
  947.     bpl.s .stoptransition
  948.     move.w #200/2-1,cpttransfo
  949.     neg.w steptransfo
  950.     jsr changefct
  951.     rts
  952.    
  953. .stoptransition
  954.     neg.w steptransfo
  955.     move.w #200/2-1,cpttransfo
  956.     move.w #700,timer1
  957.     move.w #0,flagtransition
  958. .ok rts
  959.  
  960. flagtransition  dc.w 0
  961. createContigustable
  962. ;
  963. ; a0 = ram
  964. ; d0 = nombre d'element de la table sinus
  965. ; d1 = pas interne
  966. ; d2 = nombre de copie de valeurs
  967. ; a3 = table de sinus d'amplitude final
  968. ;
  969. ; pendant le fonctionnement:
  970. ; constante  d3,d4,d5 = pas interne,*2,*4
  971. ;
  972. ;
  973. ;
  974.  
  975. ; retour:
  976. ; a0 = ram
  977. ; a1 = adresse table de d0 adresses  reftable pris a partir de la ram
  978. ;  
  979.  
  980.     ;movem.l d0-d3/a0-a6,-(sp)
  981.    
  982.     move.l flagtab,a2
  983.     moveq #0,d3
  984.     move.l d3,(a2)+
  985.     move.l d3,(a2)+
  986.     lea 512-8(a2),a2
  987.     move.l d3,a4
  988.     move.l d3,a5
  989.     move.l d3,d4
  990.     move.l d3,d5
  991.     move.l d3,d6
  992.     move.l d3,d7
  993.  
  994.     rept 18
  995.     movem.l d3-d7/a4/a5,-(a2)   7 registre *4 = 28 octet 512/36=12 reste 8 octet
  996.     endr
  997.     SUBQ #8,a2          ; 36*14=504  512-504=8
  998.  
  999.  
  1000.     move.l a0,a1        ; a1 = table refsin
  1001.     move.l a1,-(sp)
  1002.     move.w d0,d3
  1003.     add.w d3,d3     ; *2
  1004.     move.l a3,a4
  1005.     add.w d3,a4
  1006.     add.w d3,d3     ; *4
  1007.     add.w d3,a0         ; a0 =ram
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.     ;move.l flagtab,a2
  1020.     move.l a2,a5
  1021.     add.w d0,a5
  1022.    
  1023.  
  1024.  
  1025.     moveq #0,d5         ; angle
  1026.    
  1027.     move.w d1,d3        ; pas interne<>0
  1028.     move.w d3,d4
  1029.     add d4,d4           ; pas interne*2
  1030.     move.w d4,d5
  1031.     add.w d5,d5         ; pas interne*4
  1032.     neg.w d0
  1033.     move.w d0,.auto1+2          ; nombre d'elements
  1034.     move.w d0,.auto1b+2
  1035.     add.w d0,d0
  1036.     move.w d0,.auto2+2
  1037.     move.w d0,.auto2b+2
  1038.     move.w d0,.auto2c+2
  1039.     add.w d0,d0
  1040.     move.w d0,.auto3+2
  1041.     move.w d0,.auto3b+2
  1042. ;----------------------------------------
  1043.     bra.s .loop
  1044. .loopaddq
  1045.     addq.w #2,a3
  1046.     addq.w #4,a1
  1047.     ; ps le tst.b (a2) deux ligne plus loin est redondant quand on sort de la boucle dans le code flaga1
  1048.     move.w (a3),d7
  1049.     bra.s .11
  1050. .loop
  1051.     move.w (a3),d7
  1052.     tst.b (a2)
  1053.     bne.s .flaga1
  1054. .11 st.b (a2)
  1055.     move.l a0,(a1)      ; on stoque l'adresse de la valeur dans table refsin
  1056.     move.w d7,(a0)+
  1057.     ; on met a jour a3 avec le pas interne*2
  1058.     ; on met a jour a2 avec le pas interne (flags)
  1059.     add.w d3,a2
  1060.     add.w d4,a3
  1061.     add.w d5,a1
  1062.  
  1063.     cmp.l a2,a5
  1064.     bgt.s .loop
  1065. .auto1
  1066.     lea 0(a2),a2
  1067. .auto2
  1068.     lea 0(a3),a3
  1069. .auto3
  1070.     lea 0(a1),a1
  1071.     bra.s .loop
  1072. .flaga1
  1073.     move.w d2,d6        ; nombre de coPIE
  1074.     subq.w #1,d6
  1075.     ;addq.w #1,d6
  1076.  
  1077.     move.l a3,-(sp)
  1078. .cpy
  1079.     move.w d7,(a0)+
  1080.     add.w d4,a3
  1081.     cmp.l a3,a4
  1082.     bgt.s .1
  1083. .auto2b
  1084.     lea 0(a3),a3
  1085.  
  1086. .1
  1087.     move.w (a3),d7
  1088.     dbf d6,.cpy
  1089.     move.l (sp)+,a3
  1090.  
  1091.     addq.w #1,a2
  1092.     cmp.l a2,a5
  1093.     bgt.s .2
  1094. .auto1b
  1095.     lea 0(a2),a2
  1096. .auto2c
  1097.     lea 0(a3),a3
  1098. .auto3b
  1099.     lea 0(a1),a1
  1100. .2
  1101.     ; s'assurer qu'on est pas en fin de tableau:
  1102.     ;
  1103.     ;
  1104.  
  1105.     tst.b (a2)
  1106.     beq.s .loopaddq
  1107. .fin
  1108.     move.l (sp)+,a1
  1109.  
  1110.     rts
  1111.  
  1112. ; depack periodictable
  1113. ; a0 = packed data
  1114. ; a1 = unpacked data
  1115. depackperiod
  1116.     lea extnibble,a2
  1117.  
  1118.     move.w (a0)+,d0     ; nombre d'element de la table finale
  1119.     move.w (a0)+,d1     ; tab[0]
  1120.     move.w (a0)+,d2     ; delta[0]=tab[1]-tab[0]
  1121.     move.w d0,d3
  1122.     subq #2,d3      ; nombre de delta de delta: delta2[0]=delta[1]-delta[0]
  1123.     lsr #1,d3
  1124. .ok
  1125.     subq #1,d3
  1126.     ;bset #0,d3         ; si paire = nb impair d'element on set a +1
  1127.                         ; si impair  nb pair d'lement on ne change rien
  1128.     move.w d1,(a1)+     ; tab[0]
  1129.    
  1130. .loop
  1131.     add d2,d1           ; tab[0]+delta[0]=tab[1]
  1132.     move.w d1,(a1)+
  1133.    
  1134.     move.b (a0)+,d4      lire 2 valeur
  1135.     move.w d4,d5
  1136.     and.w #$F0,d4
  1137.     lsr #4,d4
  1138.     move.b (a2,d4.w),d4
  1139.     ext.w d4
  1140.     add d4,d2           : delta2[0]=delta[1]-delta[0]  d2= delta[1]=tab[2]-tab[1]
  1141.    
  1142.     add d2,d1
  1143.     move.w d1,(a1)+
  1144.     and.w #$F,d5
  1145.     move.b (a2,d5.w),d5
  1146.     ext.w d5
  1147.     add d5,d2
  1148.  
  1149.     dbf d3,.loop
  1150.     add d2,d1
  1151.     move.w d1,(a1)+
  1152.     rts
  1153.  
  1154. ;
  1155. ;
  1156. ;
  1157. ; mem lib
  1158. ;
  1159.  
  1160. ;; exemple d'utilisation
  1161. ;   move.l #buffer,d0
  1162. ;   move.l #8*65536,d1 taille totale du buffer aligné sur 64k
  1163. ;   jsr getmem1
  1164. ;   lea -16*4(a0),a0
  1165. ;   nop
  1166. ;   nop
  1167. ;   nop
  1168. ;   nop
  1169. ;   illegal
  1170. ; format de memoire
  1171. ;toto           ; le label toto est la pour verifier l'algo
  1172. ;   ds.b 65536 
  1173. ;buffer ds.l 65536*2    8*64k               ; buffer sera aligné sur 64k donc un peu avant
  1174. ;fin                                            ; et apres un peu de memoire libre entre fin buffer et label fin
  1175.  
  1176. ; warning ! extremely bugged edition of getmem1 ! (i must add 128k of unused ram)
  1177. ;
  1178. getmem1:
  1179.  
  1180. ; d0 = adresse segment 64k non aligné
  1181. ; d1 = nombre de segment a la suite*64k
  1182. ; retour: a0 = liste d'adresse
  1183. ; (a0)+ = 32k buffer
  1184. ; (a0)+ = 16k buffer
  1185. ; (a0)+ = 8k buffer
  1186. ; (a0)+ = 4k buffer
  1187. ; (a0)+ = 2k
  1188. ; (a0)+ = 1k
  1189. ; (a0)+ = 512
  1190. ; (a0)+ = 256
  1191. ; (a0)+ = 128
  1192. ; (a0)+ = 64 octet
  1193. ;
  1194. ; a0: 64 octet = 16 adresses
  1195.  
  1196.     ; metre le buffer start dans d4
  1197.  
  1198.     moveq.w #1,d5
  1199.     swap d5
  1200.     move.l d0,d4
  1201.     sub.l d5,d4     ; start memoire basse
  1202.    
  1203.     move.l d0,d3
  1204.     clr.w d3        ;  debut multiple de 64k  fin memoire basse
  1205.     ; d3 = start segment
  1206.    
  1207.    
  1208.     move.l d4,d7
  1209.     sub.l d3,d7     ; d7 = taille en bas
  1210.    
  1211.    
  1212.     add.l d1,d3     ; d3+ 4*64k = adresse start haut
  1213.  
  1214.  
  1215.    
  1216.     lea ptrMem,a0
  1217.     moveq #0,d6
  1218.     move.w #$8000,d6
  1219.    
  1220. .loop
  1221.     move.w d6,d1
  1222.     and.w d7,d1
  1223.  
  1224.     ; bit 15 a 0 ?
  1225.     tst.w d1
  1226.     beq.s .before           ; was beq
  1227.     move.l d3,(a0)+
  1228.     add.l d6,d3
  1229.    
  1230.     bra.s .suite
  1231. .before
  1232.     move.l d4,(a0)+
  1233.     add.l d6,d4
  1234. .suite
  1235.     lsr.w #1,d6
  1236.     tst.w d6
  1237.     bne.s .loop         ; ici ca s'arrete a un buffer de 1 octet il faudrai faire un meilleur test
  1238.    
  1239.     lea -64(a0),a0                  ; et s'arreter a un plus gros buffer
  1240.     rts
  1241.        
  1242. extnibble   dc.b 0,1,2,3,4,5,6,7,$F8,$f9,$fa,$fb,$fc,$fd,$fe,$ff
  1243.     even
  1244.  
  1245.     include 'BASEROU2.S'
  1246.    
  1247.  
  1248.  
  1249.     DATA
  1250. codelog dc.l 0
  1251. cptdeca dc.w 0
  1252. angles  dc.w 128,128,50,70
  1253. ajoutangle  dc.w 6+256,23,512-12,7+256
  1254. ptrlsteff   dc.l efface1lst
  1255.             dc.l efface2lst
  1256.             ;dc.l efface3lst
  1257.             ;dc.l efface4lst
  1258.  
  1259. ang1    dc.w 128
  1260. ang2    dc.w 128
  1261. ang3    dc.w 10
  1262. ang4    dc.w 0
  1263. ajoutang1   dc.w 4
  1264. ajoutang2   dc.w 1
  1265. ajoutang3   dc.w 512-3
  1266. ajoutang4  dc.w 1
  1267.    
  1268. packed_sinus_table:
  1269.    
  1270. sin1pack
  1271.    dc.w 512  ; nombre d'element depack
  1272.     dc.w 0
  1273.     dc.w 402
  1274.  
  1275.     dc.b      0,241,240,240,240,240,224,255,254,14,13,14,254,239,238,253
  1276.     dc.b      253,253,239,207,221,252,238,206,222,206,206,205,221,220,220,235
  1277.     dc.b      221,204,205,204,205,189,189,189,188,203,219,203,203,218,204,188
  1278.     dc.b      187,203,203,187,202,218,188,187,187,202,203,187,187,187,202,202
  1279.     dc.b      202,203,187,187,187,202,203,187,188,186,218,203,187,203,203,188
  1280.     dc.b      188,202,219,203,203,219,204,189,189,189,189,204,205,204,205,219
  1281.     dc.b      236,220,221,221,206,206,206,222,206,236,253,223,207,237,253,253
  1282.     dc.b      254,239,238,254,13,14,14,255,240,224,240,240,240,241,240,0
  1283.     dc.b      0,31,16,16,16,16,32,17,18,2,3,2,18,33,34,19
  1284.     dc.b      19,19,33,65,51,20,34,66,50,66,66,67,51,52,52,37
  1285.     dc.b      51,68,67,68,67,83,83,83,84,69,53,69,69,54,68,84
  1286.     dc.b      85,69,69,85,70,54,84,85,85,70,69,85,85,85,70,70
  1287.     dc.b      70,69,85,85,85,70,69,85,84,86,54,69,85,69,69,84
  1288.     dc.b      84,70,53,69,69,53,68,83,83,83,83,68,67,68,67,53
  1289.     dc.b      36,52,51,51,66,66,66,50,66,36,19,49,65,35,19,19
  1290.     dc.b      18,33,34,18,3,2,2,17,16,32,16,16,16,31,16,0
  1291.     even
  1292.  
  1293.  
  1294.     ifne spr_pi1
  1295. pi1 incbin 'SPRITE3.PI1'
  1296.     endc
  1297.  
  1298. pal_and_sprite
  1299.     ifeq spr_pi1
  1300.       incbin 'PAS4.SPR'
  1301.    
  1302.     endc
  1303. ;   even
  1304.     DATA
  1305. seuil   dc.w segmenty
  1306.    
  1307.     BSS
  1308.         rsreset
  1309. segmentX    rs.w 1
  1310. segmentY    rs.w 1 
  1311. codecurefface   ds.l 1
  1312. ;tempbuffer ds.w 2048
  1313.  
  1314. sin512 ds.l 1
  1315.  
  1316. ptrMem      ds.l 16         ; dans ram apres l'appel de getmem1 adresses contenant les bloc memoire utilisable comme on veut
  1317.  
  1318. ;;;             ; les label entour? de ;;; doivent etre dans l'ordre et contigu (ne pas deplacer l'un des label)
  1319. ;ptrtabsin1 ds.l 1
  1320. ;ptrtabsin2 ds.l 1
  1321. ;ptrtabsin3 ds.l 1
  1322. ;ptrtabsin4 ds.l 1
  1323. ptr16k  ds.l 1
  1324. ptr4k   ds.l 1
  1325. ptrflag ds.l 1
  1326. ;;;
  1327.  
  1328.    
  1329.     ds.b 65536
  1330. screenbuf
  1331.     ds.w 65536
  1332.     ;ds.w 65536
  1333.    
  1334. log     ds.l 1
  1335. phys    ds.l 1
  1336. ptrscr1 ds.l 1
  1337. ptrscr2 ds.l 1
  1338. ptrscr3 ds.l 1
  1339. ptrscr4 ds.l 1
  1340.  
  1341.  
  1342. ;convx  ds.l 320*subpixel
  1343. ;convy  ds.w 200*subpixel
  1344. ptrvariable ds.l 1
  1345. ptrconvX ds.l 1
  1346. ptrconvY ds.l 1
  1347.  
  1348. sinx1   ds.l 1   *ds.w 512
  1349. sinx2   ds.l 1   *ds.w 512
  1350. siny1   ds.l 1   *ds.w 512
  1351. siny2   ds.l 1   *ds.w 512
  1352.  
  1353. flagtab ds.l 1
  1354.  
  1355. ptrref1 ds.l 1
  1356. ptrref2 ds.l 1
  1357. ptrref3 ds.l 1
  1358. ptrref4 ds.l 1
  1359.  
  1360. ptrref5 ds.l 1
  1361. ptrref6 ds.l 1
  1362. ptrref7 ds.l 1
  1363. ptrref8 ds.l 1
  1364.  
  1365.  
  1366. efface1lst
  1367.         ds.w nbbob*6
  1368. efface2lst
  1369.         ds.w nbbob*6
  1370. ;efface3lst
  1371. ;       ds.w nbbob*6
  1372. ;efface4lst
  1373. ;       ds.w nbbob*6
  1374.  
  1375.  
  1376. codegenliste    ds.l 16
  1377. codeeffliste    ds.l 16
  1378. ram ds.b ($b24dA-$b19f2)+2000
  1379.     ds.b 3000
  1380. ram2    ds.b 5000
  1381. ;   ds.l 5000
  1382. ram3    ds.b 16000
  1383.    
  1384. ;convxSprite    ds.l 320*2*subpixel
  1385.    
  1386.  
  1387. sprite  ds.w 32
  1388.  
  1389. spritedeca
  1390.     ds.w 128*16
  1391.  
  1392.  
Add Comment
Please, Sign In to add comment