Obsługa rozszerzenia pamięci RAM typu Axlon
From Atariki
Wersja z dnia 00:26, 22 lut 2016 KMK (Dyskusja | wkład) ← Previous diff |
Aktualna wersja KMK (Dyskusja | wkład) (→Axlon na XL/XE) |
||
Linia 1: | Linia 1: | ||
== Informacje ogólne == | == Informacje ogólne == | ||
- | |||
Rozszerzenie typu [[Axlon]] przeznaczone jest zasadniczo dla komputerów serii [[400/800]]. Podobnie jak w [[130XE]] rozszerzona pamięć podzielona na banki po 16 KB znajduje się w obszarze $4000-$7FFF. Inaczej niż w 130XE nie ma możliwości oddzielnego adresowania dodatkowej pamięci przez [[6502C|CPU]] i [[ANTIC (układ)|ANTIC]]. | Rozszerzenie typu [[Axlon]] przeznaczone jest zasadniczo dla komputerów serii [[400/800]]. Podobnie jak w [[130XE]] rozszerzona pamięć podzielona na banki po 16 KB znajduje się w obszarze $4000-$7FFF. Inaczej niż w 130XE nie ma możliwości oddzielnego adresowania dodatkowej pamięci przez [[6502C|CPU]] i [[ANTIC (układ)|ANTIC]]. | ||
- | Rejestr sterujący rozszerzeniem umieszczony jest pod adresem $CFFF. Rejestr ten jest tylko do zapisu. | + | Rejestr sterujący rozszerzeniem umieszczony jest pod adresem $CFFF. Rejestr ten jest tylko do zapisu. |
- | Trzeba mieć na względzie, że ze względu na niepełne dekodowanie, ten rejestr zajmuje obszar $CFC0-$CFFF oraz - co istotniejsze - $0FC0-$0FFF. | + | Trzeba mieć na uwadze, że ze względu na niepełne dekodowanie ten rejestr zajmuje obszar $CFC0-$CFFF oraz - co istotniejsze - $0FC0-$0FFF. |
- | Obsługa jest bardzo prosta: wartość $00 wstawiona do rejestru $CFFF powoduje podłączenie pamięci podstawowej, każda inna - jednego z banków pamięci dodatkowej. To pozwala na instalację w komputerze do 4 MB pamięci dodatkowej (255 banków po 16k - 4080 KB). | + | Obsługa jest bardzo prosta: wartość $00 wstawiona do rejestru $CFFF powoduje podłączenie pamięci podstawowej (tzw. home bank), każda inna - jednego z banków pamięci dodatkowej. To pozwala na instalację w komputerze do 4 MB pamięci dodatkowej (255 banków po 16k - 4080 KB). |
=== Axlon na XL/XE === | === Axlon na XL/XE === | ||
- | + | W 2012 roku [[Simius]] zbudował prototypowe rozszerzenie pamięci [[SIMMius 4 MB]] pozwalające na użycie trybu Axlon również na XL/XE. Rejestr przełączający znajduje się w obszarze pamięci ROM (tj. działa, gdy bit 0 rejestru [[Rejestry PIA#PORTB|PORTB]] jest ustawiony) wyłącznie pod adresem $CFFF i - jak na oryginale - jest tylko do zapisu. | |
- | W 2012 roku [[Simius]] zbudował prototypowe rozszerzenie pamięci [[SIMMius 4 MB]] pozwalające na użycie trybu Axlon również na XL/XE. Rejestr przełączający znajduje się w pamięci ROM (tj. działa, gdy bit 0 rejestru PORTB jest ustawiony) wyłącznie pod adresem $CFFF i - jak na oryginale - jest tylko do zapisu. | + | |
== Wykrycie rozszerzenia i obliczenie jego rozmiaru == | == Wykrycie rozszerzenia i obliczenie jego rozmiaru == | ||
- | |||
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: | 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: | ||
Linia 28: | Linia 25: | ||
; procedura | ; procedura | ||
detect_axlon | detect_axlon | ||
- | ldx #$ff ;zapamiętanie bajtów ext (z 16 bloków po 64k) | + | ldx #$ff ;zapamiętanie bajtów ext |
_p0 stx axlon | _p0 stx axlon | ||
lda ext_b | lda ext_b | ||
sta bsav,x | sta bsav,x | ||
- | stx ext_b | + | stx ext_b ;oznaczenie bankow |
- | dex | + | dex ;koniecznie w kolejnosci malejacej |
cpx #$ff | cpx #$ff | ||
bne _p0 | bne _p0 | ||
Linia 39: | Linia 36: | ||
inx | inx | ||
- | _p1 inx | + | _p1 inx ;sprawdzenie numerow bankow |
beq _x1 | beq _x1 | ||
stx axlon | stx axlon | ||
cpx ext_b | cpx ext_b | ||
- | beq _p1 | + | beq _p1 ;pierwsza niezgodnosc przerywa petle |
- | _x1 dex | + | _x1 dex ;odliczamy bank podstawowy |
txa | txa | ||
tay | tay | ||
- | ldx #$00 | + | ldx #$00 ;przywrocenie wartosci |
_p2 stx axlon | _p2 stx axlon | ||
lda bsav,x | lda bsav,x | ||
Linia 56: | Linia 53: | ||
bne _p2 | bne _p2 | ||
+ | stx axlon ;ustaw bank podstawowy | ||
rts | rts | ||
Linia 61: | Linia 59: | ||
bsav .ds 256 | bsav .ds 256 | ||
</pre> | </pre> | ||
+ | |||
+ | === Uwagi === | ||
+ | * Rozszerzenie typu Axlon automatycznie wykrywa i obsługuje [[SpartaDOS X]]. Uniknięcie konfliktu z tym DOS-em (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]. | ||
+ | * Powyższa procedura jest lekko zmodyfikowaną wersją procedury zawartej w kodzie startowym SpartaDOS X. | ||
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] |
Aktualna wersja
Spis treści |
Informacje ogólne
Rozszerzenie typu Axlon przeznaczone jest zasadniczo dla komputerów serii 400/800. Podobnie jak w 130XE rozszerzona pamięć podzielona na banki po 16 KB znajduje się w obszarze $4000-$7FFF. Inaczej niż w 130XE nie ma możliwości oddzielnego adresowania dodatkowej pamięci przez CPU i ANTIC.
Rejestr sterujący rozszerzeniem umieszczony jest pod adresem $CFFF. Rejestr ten jest tylko do zapisu.
Trzeba mieć na uwadze, że ze względu na niepełne dekodowanie ten rejestr zajmuje obszar $CFC0-$CFFF oraz - co istotniejsze - $0FC0-$0FFF.
Obsługa jest bardzo prosta: wartość $00 wstawiona do rejestru $CFFF powoduje podłączenie pamięci podstawowej (tzw. home bank), każda inna - jednego z banków pamięci dodatkowej. To pozwala na instalację w komputerze do 4 MB pamięci dodatkowej (255 banków po 16k - 4080 KB).
Axlon na XL/XE
W 2012 roku Simius zbudował prototypowe rozszerzenie pamięci SIMMius 4 MB pozwalające na użycie trybu Axlon również na XL/XE. Rejestr przełączający znajduje się w obszarze pamięci ROM (tj. działa, gdy bit 0 rejestru PORTB jest ustawiony) wyłącznie pod adresem $CFFF i - jak na oryginale - jest tylko do zapisu.
Wykrycie rozszerzenia i obliczenie jego rozmiaru
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 dodatkowe banki nie są dostępne)
Ze względu na prostotę obsługi rozszerzenia nie ma potrzeby generowania listy dostępnych banków, wystarczy obliczyć ich liczbę.
; etykiety ext_b = $4000 ;cokolwiek z zakresu $4000-$7FFF axlon = $cfff ; procedura detect_axlon ldx #$ff ;zapamiętanie bajtów ext _p0 stx axlon lda ext_b sta bsav,x stx ext_b ;oznaczenie bankow dex ;koniecznie w kolejnosci malejacej cpx #$ff bne _p0 inx _p1 inx ;sprawdzenie numerow bankow beq _x1 stx axlon cpx ext_b beq _p1 ;pierwsza niezgodnosc przerywa petle _x1 dex ;odliczamy bank podstawowy txa tay ldx #$00 ;przywrocenie wartosci _p2 stx axlon lda bsav,x sta ext_b inx bne _p2 stx axlon ;ustaw bank podstawowy rts ;zmienne bsav .ds 256
Uwagi
- Rozszerzenie typu Axlon automatycznie wykrywa i obsługuje SpartaDOS X. Uniknięcie konfliktu z tym DOS-em (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 tutaj.
- Powyższa procedura jest lekko zmodyfikowaną wersją procedury zawartej w kodzie startowym SpartaDOS X.