home *** CD-ROM | disk | FTP | other *** search
/ Syzygy Magazine 6 / Syzygy_Magazine_6_1999___pl_Disk_2_of_3_Side_B.atr / sparta1.arc / SPARTA07.DOC < prev    next >
Text File  |  1999-02-20  |  4KB  |  1 lines

  1.   Bardzo waən⇧ funkcj⇧ systemu jest procedura przydzielaj⇧ca pami❎⇨. Jest to¢  skomplikowane zadanie zwaəywszy na fakt əe pami❎⇨ ta nie jest adresowana w¢  sposb liniowy, a podzielona jest na banki. Podzia  fizyczny to pami❎⇨ g wna¢  (main) i rozszerzona (extended) w obszarze $D800-$FFBF czyli 'pod' ATARI OS¢  lub w RAMDYSKU $4000-$7FFF. Z logicznego punktu widzenia pami❎⇨ podzielona¢  przez spart❎ jest na : 0-poziom systemu operacyjnego, 1-poziom sterownikw¢  urz⇧dze, 2-poziom aplikacji. Daje to w efekcie 6 kombinacji. Takie¢  kombinacje zapami❎tane s⇧ w tablicy H_FENCE :¢¢      Budowa tablicy H_FENCE equ $C67¢¢  SYSLEVEL     MAIN    EXT¢  poziom¢  systemu¢¢  0            $C67    $C69¢  1            $C6B    $C6D¢  2            $C6F    $C71¢¢      Wska♪niki aktualnego ustawienia pami❎ci znajduj⇧ si❎ w tablicach¢  SDXMEMLO i SDXMEMHI, kaəda po dwa wska♪niki dla main i ext.¢¢      Procedura portzebuje nast❎puj⇧cych parametrw¢¢      faux4 - liczba bajtw rezerwowanej pami❎ci,¢      x     - indeks preferowanej pami❎ci (main=0, ext=2). Gdy w ext nie¢                starczy miejsca sprawdzona b❎dzie pami❎⇨ main.¢      Y     - numer bloku programu, dla innych zastosowa rwne 0.¢¢      Uwaga procedura zmienia warto③ci faux1 (2), sdxmemlo,memlo i H_FENCE.¢      Wynik niesiony w F, gdy nieprawid owy N=1.¢¢           org $AF54 Memory ALLOCation.¢¢  faux1    equ $782¢  faux4    equ $785¢  syscall  equ $787¢  sdxmemlo equ $C5F¢  sdxmemhi equ $C63¢  H_FENCE  equ $C67¢¢  MALLOC   stx syscall     Procedura pobiera indeks pami❎ci w ktrej ma zosta⇨¢           txa             ustalona pami❎⇨.¢           sta blkext_t,y  Zapami❎tuje indeks w tabeli ktrej indeksem jest¢                           numer bloku programu.¢¢           clc             Teraz procedura zapami❎tuje memlo w rejestrach¢           lda sdxmemlo,x  faux1 i tabeli blkmll/h_t.¢           sta faux1¢           sta blkmll_t,y¢           adc faux4       Nast❎pnie ustalane jest nowe memlo przez dodanie¢           sta sdxmemlo,x  d ugo③ci potrzebnej pami❎ci.¢           lda sdxmemlo+1,x¢           sta faux1+1¢           sta blkmlh_t,y¢           adc faux4+1¢           sta sdxmemlo+1,x¢           bcs eAFB4¢¢           bit 800_flg     Gdy wynik mniejszy niə najwi❎kszy adres¢           bpl eAFA6¢¢           lda sdxmemhi+3  i komputer ATARI 800¢           beq eAFA6¢¢           lda faux1+1     wyposarzony w pami❎⇨ ext¢           cmp #$10¢           bcs eAFA6¢¢           lda sdxmemlo,x  i poprzedni wska♪nik memlo mniejszy niə $1000,a¢           cmp #$C0¢           lda sdxmemlo+1,x¢           sbc #$0F¢           bcc eAFA6       wi❎kszy niə $FC0¢¢           lda #$00        wska♪nik memlo przyjmuje warto③⇨ rwn⇧ $1000¢           sta sdxmemlo,x¢           lda #$10¢           sta sdxmemlo+1,x i nast❎puje ponowny przydzia  pami❎ci.¢           jmp MALLOC      To dzia anie rezerwuje obszar $FC0-$1000 komputerw¢                           ATARI 800 dla niewiadomych celw.¢¢  eAFA6    lda sdxmemhi,x  Po wst❎pnym przydziale MEMLO porwnywane jest z¢           cmp sdxmemlo,x  MEMHI¢           lda sdxmemhi+1,x¢           sbc sdxmemlo+1,x¢           bcs newmemlo¢¢  eAFB4    sec             i gdy jest wi❎ksze (niedozwolone) ustalone¢           lda sdxmemlo,x  zostaje stare MEMLO,¢           sbc faux4¢           sta sdxmemlo,x¢           lda sdxmemlo+1,x¢           sbc faux4+1¢           sta sdxmemlo+1,x¢           dex             a indeks pami❎ci zostaje zmniejszony.¢           dex¢           bpl MALLOC¢¢           org $AFCB   NEW sdx MEMLO.¢¢  newmemlo lda sdxmemlo    Gdy przeszukano obie pami❎ci uaktualniony zostaje¢           sta memlo       wska♪nik ATARI OS memlo¢           lda sdxmemlo+1¢           sta memlo+1¢           txa             i procedura si❎ koczy wynikiem przeszukiwania.¢           rts¢¢           end of doc.¢