Obsługa rozszerzenia pamięci RAM
From Atariki
(Różnice między wersjami)
Wersja z dnia 19:48, 9 lis 2011 KMK (Dyskusja | wkład) (+ koment na życzenie publiczności) ← 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 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 #$7f ;zapamietanie bajtow ext | ||
- | _p0 jsr setpb | ||
- | lda ext_b | ||
- | sta bsav,x | ||
- | dex | ||
- | bpl _p0 | ||
- | |||
- | ldx #$7f ;wyzerowanie ich (w oddzielnej petli, bo nie wiadomo | ||
- | _p1 jsr setpb ;ktore kombinacje bitow PORTB wybieraja te same banki) | ||
- | lda #$00 | ||
- | sta ext_b | ||
- | dex | ||
- | bpl _p1 | ||
- | |||
- | stx portb ;eliminacja pamieci podstawowej | ||
- | stx ext_b | ||
- | stx $00 ;niezbedne dla niektorych rozszerzen do 256k | ||
- | |||
- | ldy #$00 ;petla zliczajaca banki | ||
- | ldx #$7f | ||
- | _p2 jsr setpb | ||
- | lda ext_b | ||
- | bne _n2 | ||
- | dec ext_b | ||
- | lda portb | ||
- | sta banks,y | ||
- | iny | ||
- | _n2 dex | ||
- | bpl _p2 | ||
- | |||
- | ldx #$7f ;przywrocenie zawartosci ext | ||
- | _p3 jsr setpb | ||
- | lda bsav,x | ||
- | sta ext_b | ||
- | dex | ||
- | bpl _p3 | ||
- | |||
- | pla | ||
- | sta portb | ||
- | rts | ||
- | |||
- | ; podprogramy | ||
- | setpb txa | ||
- | sec ;wartosc licznika mnozymy przez 2 i dodajemy 1 | ||
- | rol ;w celu przesuniecia wszystkich bitow w lewo i ustawienia bitu sterujacego OS ROM | ||
- | sta portb | ||
- | rts | ||
- | |||
- | ; zmienne | ||
- | banks .ds 64 | ||
- | bsav .ds 128 | ||
- | </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). Wadą procedury jest to, że prawdopodobieństwo tego konfliktu jest różne dla różnych typów rozszerzeń (większe, gdy bit 1 PORTB steruje pamięcią RAM, jak w przypadku rozszerzeń do 576k i 1 MB). 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]] |