Obsługa rozszerzenia pamięci RAM typu Axlon

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 00:26, 22 lut 2016
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 00:27, 22 lut 2016
KMK (Dyskusja | wkład)
(Wykrycie rozszerzenia i obliczenie jego rozmiaru)
Next diff →
Linia 28: Linia 28:
; 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

Wersja z dnia 00:27, 22 lut 2016

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
       dex
       cpx #$ff
       bne _p0

       inx

_p1    inx
       beq _x1
       stx axlon
       cpx ext_b
       beq _p1

_x1    dex
       txa
       tay

       ldx #$00
_p2    stx axlon
       lda bsav,x
       sta ext_b
       inx
       bne _p2

       rts

;zmienne
bsav   .ds 256
Personal tools