|
|
| (Nie pokazano 8 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 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]] |