Wykrycie Sophii: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Mono (dyskusja | edycje)
mNie podano opisu zmian
Mono (dyskusja | edycje)
m optymalizacje
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 37: Linia 35:


   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
   cpx #'S'          ;sprawdzamy sygnaturę Sophia 2

Wersja z 16 sie 2023, 13:50

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
  
  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 (bez zapisu do NVRAM)
  sta GRACTL

  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.