Obsługa rozszerzenia pamięci RAM
From Atariki
(Różnice między wersjami)
												
			
			| Wersja z dnia 18:10, 9 lis 2011 KMK (Dyskusja | wkład) ← 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'' | ||
| - | |||
| - | 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). | ||
| - | |||
| - | <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 | ||
| - | rol | ||
| - | sta portb | ||
| - | rts | ||
| - | |||
| - | ; zmienne | ||
| - | banks .ds 64 | ||
| - | bsav .ds 128 | ||
| - | </pre> | ||
| - | |||
| - | [[Kategoria:Programowanie Atari 8-bit]] | ||
| [[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] | ||
| + | [[Kategoria:Rozszerzenia RAM Atari 8-bit]] | ||
