Wykrycie Sophii
From Atariki
Sophia 1
Detekcja urządzenia w tej wersji nie jest możliwa.
Sophia 2
Detekcja odbywa się za pomocą następującej procedury:
REV = $D015
GRACTL = $D01D
SOPHIA = $D01E
;IN:
;A-konfiguracja GRACTL
;OUT:
;Z=1-urządzenie jest obecne w komputerze, Z=0-brak urządzenia lub Sophia 1
;A-konfiguracja GRACTL
;X-sygnatura urządzenia ('S'=$53)
;Y-rewizja urządzenia (n.p. $03)
detect_sophia2:
pha
lda GRACTL ;zachowane zostaną aktualne ustawienia
and #%01111110 ;(ale bez zapisu do pamięci nieulotnej)
sta GRACTL ;w przypadku gdyby bank rejestrów Sophii był aktywny
pla
pha
ora #%10000000 ;uaktywniamy rejestry Sophii
sta GRACTL ;a przy okazji resetujemy ustawienia GRACTL w GTIA
ldx SOPHIA ;czytamy sygnaturę
ldy REV ;i rewizję
lda GRACTL ;deaktywujemy rejestry Sophii
and #%01111110 ;zachowując ustawienia (bez zapisu do NVRAM)
sta GRACTL
pla
and #%01111111 ;i finalnie resetujemy ustawienia GRACTL w GTIA
sta GRACTL
cpx #'S' ;sprawdzamy sygnaturę Sophia 2
rts
Włączenie banku rejestrów Sophii odbywa się kiedy SPCEN=1 (bit 7 GRACTL). Jednakże to, gdzie trafią pozostałe bity zależy od tego czy przed zapisem aktywne były rejestry GTIA czy rejestry Sophii.
W trakcie detekcji może ulec zniszczeniu konfiguracja GRACTL, dlatego użytkownik powinien ją przekazać w akumulatorze.
