Advertisement
glokyfull

getMem1 working

Nov 22nd, 2023 (edited)
1,727
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     TEXT
  2. ;
  3. ;
  4. ; mem lib   THIS VERSION WORK, the return
  5.  
  6. ;
  7.  
  8. ;; exemple d'utilisation
  9. ;   move.l #buffer,d0
  10. ;   move.l #8*65536,d1 taille totale du buffer aligné sur 64k
  11. ;   jsr getmem1
  12. ;   lea -16*4(a0),a0
  13. ;   nop
  14. ;   nop
  15. ;   nop
  16. ;   nop
  17. ;   illegal
  18. ; format de memoire
  19. ;toto           ; le label toto est la pour verifier l'algo
  20. ;   ds.b 65536 
  21. ;buffer ds.l 65536*2    8*64k               ; buffer sera aligné sur 64k donc un peu avant
  22. ;fin                                            ; et apres un peu de memoire libre entre fin buffer et label fin
  23.  
  24. getmem1:
  25.  
  26. ; d0 = adresse segment 64k non aligné
  27. ; d1 = nombre de segment a la suite*64k
  28. ; retour: a0 = liste d'adresse
  29. ; (a0)+ = 32k buffer
  30. ; (a0)+ = 16k buffer
  31. ; (a0)+ = 8k buffer
  32. ; (a0)+ = 4k buffer
  33. ; (a0)+ = 2k
  34. ; (a0)+ = 1k
  35. ; (a0)+ = 512
  36. ; (a0)+ = 256
  37. ; (a0)+ = 128
  38. ; (a0)+ = 64 octet
  39. ;
  40. ; a0: 64 octet = 16 adresses
  41.  
  42.     ; metre le buffer start dans d4
  43.  
  44.     moveq.l #1,d5
  45.     swap d5
  46.     move.l d0,d4
  47.     sub.l d5,d4     ; start memoire basse
  48.     move.l d0,d3
  49.     clr.w d3        ;  debut multiple de 64k  fin memoire basse
  50.     ; d3 = start segment
  51.    
  52.    
  53.     move.l d4,d7
  54.     sub.l d3,d7     ; d7 = taille en bas
  55.                 ; d4 = start bas
  56.    
  57.     add.l d1,d3     ; d3+ 4*64k = adresse start haut
  58.  
  59.  
  60.    
  61.     lea ptrMem,a0
  62.     moveq #0,d6
  63.     move.w #$8000,d6
  64.    
  65. .loop
  66.     move.w d6,d1
  67.     and.w d7,d1
  68.  
  69.     ; bit 15 a 0 ?
  70.     tst.w d1
  71.     beq.s .before           ; was beq
  72.     move.l d3,(a0)+
  73.     add.l d6,d3
  74.    
  75.     bra.s .suite
  76. .before
  77.     move.l d4,(a0)+
  78.     add.l d6,d4
  79. .suite
  80.     lsr #1,d6
  81.     tst.w d6
  82.     bne.s .loop         ; ici ca s'arrete a un buffer de 1 octet il faudrai faire un meilleur test
  83.    
  84.     lea -64(a0),a0                  ; et s'arreter a un plus gros buffer
  85.     rts
  86.    
  87.     BSS
  88. ptrMem      ds.l 16         ; dans ram apres l'appel de getmem1 adresses contenant les bloc memoire utilisable comme on veut
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement