Wykrycie Sophii

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
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

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.

Personal tools