Obsługa rozszerzenia pamięci RAM: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
→Wykrycie rozszerzenia i obliczenie jego rozmiaru: zm. kolejnosci z FB73 na 37BF, plus drobiazgi
Nie podano opisu zmian
 
(Nie pokazano 5 pośrednich wersji utworzonych przez tego samego użytkownika)
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 z 12 cze 2016, 12:14