Wykrycie Sophii: Różnice pomiędzy wersjami
Przejdź do nawigacji
Przejdź do wyszukiwania
mNie podano opisu zmian |
m →Sophia 2: GRACTL=PMCNTL |
||
| (Nie pokazano 4 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
| Linia 6: | Linia 6: | ||
<pre> | <pre> | ||
REV = $D015 | REV = $D015 | ||
GRACTL = $D01D | GRACTL = $D01D ;PMCNTL | ||
SOPHIA = $D01E | SOPHIA = $D01E | ||
| Linia 14: | Linia 14: | ||
;Z=1-urządzenie jest obecne w komputerze, Z=0-brak urządzenia lub Sophia 1 | ;Z=1-urządzenie jest obecne w komputerze, Z=0-brak urządzenia lub Sophia 1 | ||
;A-konfiguracja GRACTL | ;A-konfiguracja GRACTL | ||
;X-sygnatura 'S' | ;X-sygnatura urządzenia ('S'=$53) | ||
;Y-rewizja urządzenia | ;Y-rewizja urządzenia (n.p. $03) | ||
detect_sophia2: | detect_sophia2: | ||
| Linia 24: | Linia 24: | ||
sta GRACTL ;w przypadku gdyby bank rejestrów Sophii był aktywny | sta GRACTL ;w przypadku gdyby bank rejestrów Sophii był aktywny | ||
lda #%10000000 ;uaktywniamy rejestry Sophii | |||
sta GRACTL | |||
sta GRACTL | |||
ldx SOPHIA ;czytamy sygnaturę | ldx SOPHIA ;czytamy sygnaturę | ||
| Linia 33: | Linia 31: | ||
lda GRACTL ;deaktywujemy rejestry Sophii | lda GRACTL ;deaktywujemy rejestry Sophii | ||
and #%01111110 ;zachowując ustawienia (bez zapisu do | and #%01111110 ;zachowując ustawienia | ||
sta GRACTL ;(bez zapisu do pamięci nieulotnej) | |||
pla | pla | ||
sta GRACTL ;i resetujemy ustawienia GRACTL w GTIA | |||
cpx #'S' ;sprawdzamy sygnaturę Sophia 2 | cpx #'S' ;sprawdzamy sygnaturę Sophia 2 | ||
rts | rts | ||
</pre> | </pre> | ||
Aktualna wersja z 16 sie 2023, 14:36
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 ;PMCNTL
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
lda #%10000000 ;uaktywniamy rejestry Sophii
sta GRACTL
ldx SOPHIA ;czytamy sygnaturę
ldy REV ;i rewizję
lda GRACTL ;deaktywujemy rejestry Sophii
and #%01111110 ;zachowując ustawienia
sta GRACTL ;(bez zapisu do pamięci nieulotnej)
pla
sta GRACTL ;i resetujemy ustawienia GRACTL w GTIA
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.