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¢ sposb liniowy, a podzielona jest na banki. Podzia fizyczny to pami❎⇨ gwna¢ (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 sterownikw¢ 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 parametrw¢¢ faux4 - liczba bajtw 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 rwne 0.¢¢ Uwaga procedura zmienia warto③ci faux1 (2), sdxmemlo,memlo i H_FENCE.¢ Wynik niesiony w F, gdy nieprawidowy 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 ktrej ma zosta⇨¢ txa ustalona pami❎⇨.¢ sta blkext_t,y Zapami❎tuje indeks w tabeli ktrej 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 dugo③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③⇨ rwn⇧ $1000¢ sta sdxmemlo,x¢ lda #$10¢ sta sdxmemlo+1,x i nast❎puje ponowny przydzia pami❎ci.¢ jmp MALLOC To dziaanie rezerwuje obszar $FC0-$1000 komputerw¢ ATARI 800 dla niewiadomych celw.¢¢ eAFA6 lda sdxmemhi,x Po wst❎pnym przydziale MEMLO porwnywane 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❎ koczy wynikiem przeszukiwania.¢ rts¢¢ end of doc.¢