RESET: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
Nie podano opisu zmian
 
(Nie pokazano 12 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
Rodzaj [[przerwania]], którego wystąpienie jest sygnałem do zainicjowania procedury przygotowującej system do pracy.
Rodzaj [[przerwania]], którego wystąpienie jest sygnałem do zainicjowania procedury przygotowującej system do pracy.


Wektor przerwania RESET znajduje się pod adresem $FFFC w procesorze [[6502]]. W procesorze [[65C816]] wektor RESET jest pod adresem $00FFFC. Wystąpienie tego przerwania powoduje przestawienie 65C816 w tryb emulacji oraz wyzerowanie znacznika D.
Wektor przerwania RESET znajduje się pod adresem $FFFC w procesorze [[6502]] i [[65C02]]. W 65C02 wystąpienie tego przerwania powoduje wyzerowanie znacznika D. W procesorze [[65C816]] wektor RESET jest pod adresem $00FFFC. Wystąpienie tego przerwania powoduje przestawienie 65C816 w tryb emulacji 6502 oraz wyzerowanie znacznika D.


Przerwanie RESET jest wywoływane przez podanie procesorowi sygnału RST. Logika na płycie Atari robi to automatycznie po włączeniu zasilania a użytkownik może wywołać to przerwanie naciskając przycisk RESET (tylko w XL/XE - w 400/800 klawisz RESET wywołuje przewanie [[NMI]]). Domyślnym zachowaniem systemu po wywołaniu takiego przerwania jest skok do procedury zimnego startu. Procedura zimnego startu wygląda tak:
Przerwanie RESET jest wywoływane przez podanie procesorowi sygnału RST. Logika na płycie Atari robi to automatycznie po włączeniu zasilania a użytkownik może wywołać to przerwanie naciskając przycisk RESET (tylko w [[XL]]/[[XE]] - w [[400/800]] klawisz RESET wywołuje przerwanie [[NMI]]). Domyślnym zachowaniem systemu po wywołaniu takiego przerwania jest skok do procedury zimnego startu.
 
== Zimny start ==
 
Procedura zimnego startu wygląda tak:


#Flaga ciepłego startu (WARMST $0008) ustawiana jest na wartość 0 (fałsz - wykonujemy wszak zimny start)
#Flaga ciepłego startu (WARMST $0008) ustawiana jest na wartość 0 (fałsz - wykonujemy wszak zimny start)
#Sprawdzany jest stan kartridża. Jeśli włożono kart diagnostyczny - kontrola przekazywana jest do niego)
#Sprawdzany jest stan kartridża. Jeśli włożono kart diagnostyczny - kontrola przekazywana jest do niego)
#Określany jest adres konca pamięci RAM
#Określany jest adres końca pamięci RAM
#Zerowane są rejestry sprzętowe od $D000 do $D4FF (z wyjątkiem obszaru $D100 - $D1FF i $D500-$D5FF)
#Zerowane są rejestry sprzętowe od $D000 do $D4FF (z wyjątkiem obszaru $D100-$D1FF i $D500-$D5FF)
#Zerowana jest pamięć RAM od adresu $0008 do uprzednio obliczonego adresu końca RAM.
#Zerowana jest pamięć RAM od adresu $0008 do uprzednio obliczonego adresu końca RAM.
#Wektor skoku do programu użytkownika (DOSVEC $000A) ustawiany jest na adres procedury MEMO PAD (400/800) albo procedury SELF-TEST (XL/XE)
#Wektor skoku do programu użytkownika (DOSVEC $000A) ustawiany jest na adres procedury [[MEMO PAD]] (400/800) albo procedury [[SELF TEST]] (XL/XE)
#Marginesy ekranu znakowego ustawiane są na wartości 2 i 39
#Marginesy ekranu znakowego ustawiane są na wartości 2 i 39
#Inicjalizowane są wektory przerwań.
#Inicjowane są wektory przerwań.
#Adres najniższego wolnego bajtu pamięci (MEMLO $2E7) ustawiany jest na $0700
#Adres najniższego wolnego bajtu pamięci (MEMLO $02E7) ustawiany jest na $0700
#Inicjalizowane są wszystkie rezydentne handlery CIO.
#Inicjowane są wszystkie rezydentne handlery CIO.
#Jeśli naciśnięto START, ustawiana jest flaga żądania startu z kasety (CKEY $004A)  
#Jeśli naciśnięto START, ustawiana jest flaga żądania startu z kasety (CKEY $004A na 400/800, $03E9 na XL/XE)  
#Tablica urządzeń CIO (HATABS) zostaje zainicjalizowana.
#Tablica urządzeń CIO (HATABS $031A) zostaje zainicjowana.
#Jeśli włożony jest kartridż (inny niz diagnostyczny) - zostaje on zainicjalizowany.
#Podejmowana jest próba zainicjowania tzw. [[nowe urządzenia|nowych urządzeń]] podłączonych do szyny równoległej (tylko XL/XE).
#Jeśli włożony jest kartridż (inny niż diagnostyczny) - zostaje on zainicjowany.
#Kanał we/wy #0 zostaje otworzony dla edytora ekranowego. MEMTOP ($02E5) zostaje ustawiony na pierwszy bajt po końcu pamięci RAM. Następuje otwarcie ekranu (po tej operacji MEMTOP wskazuje ostatni wolny bajt przed pamięcią ekranu).
#Kanał we/wy #0 zostaje otworzony dla edytora ekranowego. MEMTOP ($02E5) zostaje ustawiony na pierwszy bajt po końcu pamięci RAM. Następuje otwarcie ekranu (po tej operacji MEMTOP wskazuje ostatni wolny bajt przed pamięcią ekranu).
#Jeśli została ustawiona flaga żądania startu z kasety, następuje procedura startu z kasety.
#Jeśli została ustawiona flaga żądania startu z kasety, następuje procedura startu z kasety.
Linia 23: Linia 28:
#Flaga zimnego startu zostaje skasowana.
#Flaga zimnego startu zostaje skasowana.
#Jeśli włożono kartridż, system uruchamia go.  
#Jeśli włożono kartridż, system uruchamia go.  
#Jeśli nie ma kartridża system uruchamia program pod adresem wskazywanym przez DOSVEC.
#Jeśli nie ma kartridża system uruchamia program pod adresem wskazywanym przez DOSVEC ($000A).
 
== Ciepły start ==


Po pierwszym zimnym starcie każde następne naciśnięcie klawisza RESET powoduje tzw. ciepły start.
Po pierwszym zimnym starcie każde następne naciśnięcie klawisza RESET powoduje tzw. ciepły start.
Linia 30: Linia 37:
#Wykonywane są kroki 2-4 procedury zimnego startu.
#Wykonywane są kroki 2-4 procedury zimnego startu.
#Zerowany jest RAM w obszarach $0010-007F i $0200-$03FF
#Zerowany jest RAM w obszarach $0010-007F i $0200-$03FF
#Wykonywane są kroki 7-14 procedury zimnego startu.
#Wykonywane są kroki 7-15 procedury zimnego startu.
#Jeśli podczas ostatniego zimnego startu nastąpił boot z kasety system skacze pod adres zapisany w wektorze CASINI $0002
#Jeśli podczas ostatniego zimnego startu nastąpił boot z kasety system skacze pod adres zapisany w wektorze CASINI $0002
#Jeśli podczas ostatniego zimnego startu nastąpił boot z dysku system skacze pod adres zapisany w wektorze DOSINI $000C
#Jeśli podczas ostatniego zimnego startu nastąpił boot z dysku system skacze pod adres zapisany w wektorze DOSINI $000C
#Wykonywane są kroki 19-20 procedury zimnego startu.


W pamięci komputera znajdują się znaczniki (np. CDST $0244), których stan inny od oczekiwanego powoduje przejście procedury ciepłego startu w zimny start.
W pamięci komputera znajdują się znaczniki (np. CDST $0244), których stan inny od oczekiwanego powoduje przejście procedury ciepłego startu w zimny start.


[[Kategoria:Programowanie Atari 8-bit]]
[[Kategoria:Programowanie Atari 8-bit]]

Aktualna wersja z 15 mar 2025, 22:08

Rodzaj przerwania, którego wystąpienie jest sygnałem do zainicjowania procedury przygotowującej system do pracy.

Wektor przerwania RESET znajduje się pod adresem $FFFC w procesorze 6502 i 65C02. W 65C02 wystąpienie tego przerwania powoduje wyzerowanie znacznika D. W procesorze 65C816 wektor RESET jest pod adresem $00FFFC. Wystąpienie tego przerwania powoduje przestawienie 65C816 w tryb emulacji 6502 oraz wyzerowanie znacznika D.

Przerwanie RESET jest wywoływane przez podanie procesorowi sygnału RST. Logika na płycie Atari robi to automatycznie po włączeniu zasilania a użytkownik może wywołać to przerwanie naciskając przycisk RESET (tylko w XL/XE - w 400/800 klawisz RESET wywołuje przerwanie NMI). Domyślnym zachowaniem systemu po wywołaniu takiego przerwania jest skok do procedury zimnego startu.

Zimny start

Procedura zimnego startu wygląda tak:

  1. Flaga ciepłego startu (WARMST $0008) ustawiana jest na wartość 0 (fałsz - wykonujemy wszak zimny start)
  2. Sprawdzany jest stan kartridża. Jeśli włożono kart diagnostyczny - kontrola przekazywana jest do niego)
  3. Określany jest adres końca pamięci RAM
  4. Zerowane są rejestry sprzętowe od $D000 do $D4FF (z wyjątkiem obszaru $D100-$D1FF i $D500-$D5FF)
  5. Zerowana jest pamięć RAM od adresu $0008 do uprzednio obliczonego adresu końca RAM.
  6. Wektor skoku do programu użytkownika (DOSVEC $000A) ustawiany jest na adres procedury MEMO PAD (400/800) albo procedury SELF TEST (XL/XE)
  7. Marginesy ekranu znakowego ustawiane są na wartości 2 i 39
  8. Inicjowane są wektory przerwań.
  9. Adres najniższego wolnego bajtu pamięci (MEMLO $02E7) ustawiany jest na $0700
  10. Inicjowane są wszystkie rezydentne handlery CIO.
  11. Jeśli naciśnięto START, ustawiana jest flaga żądania startu z kasety (CKEY $004A na 400/800, $03E9 na XL/XE)
  12. Tablica urządzeń CIO (HATABS $031A) zostaje zainicjowana.
  13. Podejmowana jest próba zainicjowania tzw. nowych urządzeń podłączonych do szyny równoległej (tylko XL/XE).
  14. Jeśli włożony jest kartridż (inny niż diagnostyczny) - zostaje on zainicjowany.
  15. Kanał we/wy #0 zostaje otworzony dla edytora ekranowego. MEMTOP ($02E5) zostaje ustawiony na pierwszy bajt po końcu pamięci RAM. Następuje otwarcie ekranu (po tej operacji MEMTOP wskazuje ostatni wolny bajt przed pamięcią ekranu).
  16. Jeśli została ustawiona flaga żądania startu z kasety, następuje procedura startu z kasety.
  17. Jeśli nie ma kartridża albo nie zabrania on tego, następuje procedura startu z dysku, a potem z nowych urządzeń (to tylko w XL/XE).
  18. Flaga zimnego startu zostaje skasowana.
  19. Jeśli włożono kartridż, system uruchamia go.
  20. Jeśli nie ma kartridża system uruchamia program pod adresem wskazywanym przez DOSVEC ($000A).

Ciepły start

Po pierwszym zimnym starcie każde następne naciśnięcie klawisza RESET powoduje tzw. ciepły start.

  1. Flaga ciepłego startu ustawiana jest na $FF (prawda)
  2. Wykonywane są kroki 2-4 procedury zimnego startu.
  3. Zerowany jest RAM w obszarach $0010-007F i $0200-$03FF
  4. Wykonywane są kroki 7-15 procedury zimnego startu.
  5. Jeśli podczas ostatniego zimnego startu nastąpił boot z kasety system skacze pod adres zapisany w wektorze CASINI $0002
  6. Jeśli podczas ostatniego zimnego startu nastąpił boot z dysku system skacze pod adres zapisany w wektorze DOSINI $000C
  7. Wykonywane są kroki 19-20 procedury zimnego startu.

W pamięci komputera znajdują się znaczniki (np. CDST $0244), których stan inny od oczekiwanego powoduje przejście procedury ciepłego startu w zimny start.