Obsługa rozszerzenia pamięci RAM typu Axlon: Różnice pomiędzy wersjami
| Linia 32: | Linia 32: | ||
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 39: | ||
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 ;pierwsa 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 56: | ||
bne _p2 | bne _p2 | ||
stx axlon ;ustaw bank podstawowy | |||
rts | rts | ||
Wersja z 22 lut 2016, 01:30
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 względzie, ż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).
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 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 ;pierwsa 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