Obsługa rozszerzenia pamięci RAM

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 22:14, 18 lip 2013
KMK (Dyskusja | wkład)
(Wykrycie rozszerzenia i obliczenie jego rozmiaru - zm. kolejnosci z FB73 na 37BF, plus drobiazgi)
← Previous diff
Aktualna wersja
KMK (Dyskusja | wkład)

Linia 1: Linia 1:
-== Wykrycie rozszerzenia i obliczenie jego rozmiaru ==+* [[Obsługa standardowego rozszerzenia pamięci RAM]]
 +* [[Obsługa rozszerzenia pamięci RAM typu Axlon]]
 +* [[Obsługa pamięci liniowej 65C816]]
-Poniższa procedura przeprowadza test rozmiaru rozszerzenia pamięci RAM nie niszcząc zawartości tejże pamięci. Procedura musi być ulokowana w całości poza obszarem $4000-$7FFF. Dane wyjściowe: 
- 
-* liczba dodatkowych banków 16k w rejestrze Y (lub 0, gdy komputer ma tylko 64k RAM) 
-* wartości PORTB w tablicy ''banks'' 
- 
-<pre> 
-; etykiety 
-ext_b = $4000 
-portb = $d301 
- 
-; procedura 
-detect_ext 
- lda portb 
- pha 
- 
- ldx #$0f ;zapamiętanie bajtów ext (z 16 bloków po 64k) 
-_p0 jsr setpb 
- lda ext_b 
- sta bsav,x 
- dex 
- bpl _p0 
- 
- ldx #$0f ;wyzerowanie ich (w oddzielnej pętli, bo nie wiadomo 
-_p1 jsr setpb ;które kombinacje bitów PORTB wybierają te same banki) 
- lda #$00 
- sta ext_b 
- dex 
- bpl _p1 
- 
- stx portb ;eliminacja pamięci podstawowej 
- stx ext_b 
- stx $00 ;niezbędne dla niektórych rozszerzeń do 256k 
- 
- ldy #$00 ;pętla zliczająca bloki 64k 
- ldx #$0f 
-_p2 jsr setpb 
- lda ext_b ;jeśli ext_b jest różne od zera, blok 64k już zliczony 
- bne _n2 
- 
- dec ext_b ;w przeciwnym wypadku zaznacz jako zliczony 
- 
- lda ext_b ;sprawdz, czy sie zaznaczyl; jesli nie -> cos nie tak ze sprzetem 
- bpl _n2 
- 
- lda portb ;wpisz wartość PORTB do tablicy dla banku 0 
- sta banks,y 
- eor #%00000100 ;uzupełnij wartości dla banków 1, 2, 3 
- sta banks+1,y 
- eor #%00001100 
- sta banks+2,y 
- eor #%00000100 
- sta banks+3,y 
- iny 
- iny 
- iny 
- iny 
- 
-_n2 dex 
- bpl _p2 
- 
- ldx #$0f ;przywrócenie zawartości ext 
-_p3 jsr setpb 
- lda bsav,x 
- sta ext_b 
- dex 
- bpl _p3 
- 
- pla 
- sta portb 
- rts 
- 
-; podprogramy 
-setpb txa ;zmiana kolejności bitów: %0000dcba -> %cba000d0 
- lsr  
- ror 
- ror 
- ror 
- adc #$01 ;ustawienie bitu nr 1 w zaleznosci od stanu C 
- ora #$01 ;ustawienie bitu sterującego OS ROM na wartosc domyslna 
- sta portb 
- rts 
- 
-; zmienne 
-banks .ds 64 
-bsav .ds 16 
-</pre> 
- 
-Zawartość tablicy ''banks'' jest uszeregowana tak, żeby przy zajmowaniu banków w kolejności od jej początku zmniejszyć prawdopodobieństwo konfliktu ze [[SpartaDOS X]] (który to DOS przydziela sobie pamięć rozszerzenia w generalnie odwrotnej kolejności). Całkowite uniknięcie konfliktu (w tym z ramdyskami itp.) wymaga użycia procedur zarządzania pamięcią SpartaDOS X, co zostało opisane w "Przewodniku programisty SpartaDOS X", dostępnym [http://sdx.atari8.info/index.php?show=en_docs tutaj]. 
- 
-[[Kategoria:Programowanie Atari 8-bit]] 
[[Kategoria:Niezbędnik kodera]] [[Kategoria:Niezbędnik kodera]]
 +[[Kategoria:Rozszerzenia RAM Atari 8-bit]]

Aktualna wersja

Personal tools