Wykrycie Sophii
From Atariki
(Różnice między wersjami)
Wersja z dnia 11:38, 16 sie 2023 Mono (Dyskusja | wkład) (ulepszona procedura detekcji) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→Sophia 2 - GRACTL=PMCNTL) |
||
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 | ||
- | pla | + | lda #%10000000 ;uaktywniamy rejestry Sophii |
- | pha | + | sta GRACTL |
- | + | ||
- | ora #%10000000 ;uaktywniamy rejestry Sophii | + | |
- | sta GRACTL ;a przy okazji resetujemy ustawienia GRACTL w GTIA | + | |
ldx SOPHIA ;czytamy sygnaturę | ldx SOPHIA ;czytamy sygnaturę | ||
Linia 34: | Linia 31: | ||
lda GRACTL ;deaktywujemy rejestry Sophii | lda GRACTL ;deaktywujemy rejestry Sophii | ||
- | and #%01111110 ;zachowując ustawienia (bez zapisu do NVRAM) | + | and #%01111110 ;zachowując ustawienia |
- | sta GRACTL | + | sta GRACTL ;(bez zapisu do pamięci nieulotnej) |
pla | pla | ||
- | and #%01111111 ;i finalnie resetujemy ustawienia GRACTL w GTIA | + | sta GRACTL ;i resetujemy ustawienia GRACTL w GTIA |
- | sta GRACTL | + | |
- | cpx #'S' ;sprawdzamy sygnaturę Sophia 2 ($53) | + | cpx #'S' ;sprawdzamy sygnaturę Sophia 2 |
rts | rts | ||
</pre> | </pre> |
Aktualna wersja
[Edytuj]
Sophia 1
Detekcja urządzenia w tej wersji nie jest możliwa.
[Edytuj]
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.