Bit PB1, jeśli jest 1, oznacza odłączony Basic a jeśli jest on dostępny to powinien mieć wartość 0. Tak mówi teoria (wyczytana w "Mapie pamięci Atari..." Zientary). Ale co ustawia ten port na samym starcie? Jak to jest wykrywane?

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

2 Ostatnio edytowany przez seban (2022-07-17 23:11:10)

Jeżeli dobrze rozumiem Twoje pytanie to pytasz w jakim stanie będą linie PORTB tuż po włączeniu komputera?

Jeżeli o to chodzi, to zwróć uwagę że po włączeniu zasilania (czy też RESET) wszystkie porty PIA są ustawione jako wejścia (tzn. PORTA oraz PORTB) ... normalnie stan na liniach PB0...PB7 byłby nieustalony (linie wiszą w przysłowiowym powietrzu, ponieważ teoretycznie nie nikogo kto bym sterował stanem tych linii), jednak w tym przypadku stany na liniach PB0...PB7 wymuszają rezystory "pull-up" obecne na płycie i podpięte do pinów PB0...PB7, a więc stan wszystkich linii PB0...PB7 będzie wymuszony za pomocą tychże rezystorów podciągających.

Z tego wynika, że do czasu skonfigurowania przez system operacyjny PORTB jako wyjścia i ustawiania tam odpowiednich wartość wszystkie układy podłączone pod PORTB będą widziały tam logiczną "1".

ps) Oczywiście PB6 jest normalnie nie podłączone i wisi sobie w powietrzu, ale dla uproszczenia wyżej pisałem PB0...PB7.

3

To zrozumiałem. Ale czytałem kod procedury Reset (książka powyżej) i w niej ten rejestr (w kontekście tego bitu) się tylko czyta. Chodzi mi o ten fragment, gdzie jest sprawdzane, czy Basic jest czy też go nie ma. Wcześniej są zapisy ale chodzi tylko o ustawienie bitu PB7, jeśli poprawnie wszystko zrozumiałem. I brakuje mi tego jednego klocuszka bo wychodzi, że Basic jest na początku niedostępny by default (pull-up, który wspomniałeś) a jednak standardowo do niego komputer wchodzi.

Albo inaczej - czy jeśli nie założę kości Basic to komputer wejdzie do self testu? Z tego co wiem. To tak, nie zawiśnie próbując Basic odpalić - czyli Basic niedostępny. Gdzie jest to wykrywane? Jak?

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

4 Ostatnio edytowany przez seban (2022-07-18 07:17:57)

Cześć!

Jeżeli chodzi o sprawdzenie czy wciśnięto OPTION i czy należy ustawić odpowiednią watość w PORTB B to posiłkując się książką o której wspominasz, możemy zajrzeć do rozdziału:

"2.3.1. Procedury rozpoznania cartridge'a i RAM (procedura CARTridge GOes)"

... a tam w zależności od tego czy mamy ward/cold start i czy wciśnięto OPTION w przypadku tego drugiego, lub czy ustawiony jest BASICF (w przypadku tego pierwszego) odpowiednio ustawiany jest PORTB (lda ... and #$FD ... sta), tak aby dołączyć wbudowany interpreter BASIC. Warunkiem dodatkowym jest oczywiście że nie ma żadnego innego fizycznego cart-a w gnieździe.

A potem sam start cartridge (BASIC jest traktowany jako cart wbudowany) wykonywany jest już w głównej procedurze RESET, którą opisuje rozdział:

"2.1.2. Przebieg procedury RESET"

Tam na końcu (od linii 2440) sprawdzana flaga (w rejestrze CARTOPT znajdujący się pod adresem $BFFD) czy należy uruchomić cartridge, jeżeli ona jest ustawiona następuje uruchomienie BASIC-a, natomiast w przeciwnym wypadku zostanie wykonany skok pod wektor znajdujący się w komórkach DOSVEC (która domyślnie wskazuje /jeżeli nie było wcześniej BOOT z dyskietki/ na wektor "SELF TEST").

perinoid napisał/a:

Albo inaczej - czy jeśli nie założę kości Basic to komputer wejdzie do self testu? Z tego co wiem. To tak, nie zawiśnie próbując Basic odpalić - czyli Basic niedostępny. Gdzie jest to wykrywane? Jak?

Jeżeli nie włożysz kości ROM zawierającej BASIC to jestem w stanie sobie wyobrazić sytuację w której przy braku pull-up na magistrali danych (65XE,130XE,800XE) z pod adresu $BFFD odczyta się wartość taka że akurat bit #3 będzie ustawiony i wtedy procedura RESET pominie próbę skodu do DOSVEC i wykona skok pod losowe wartości znajdujące się w komórkach CARTRUN ($BFFFA, $BFFB) i komputer po prostu zawiśnie, ponieważ wykonany skok nastąpi w losowe miejsce.

Ale przyznaję że nie przeglądałem aż tak dokładnie procedury RESET i być może jakieś wcześniejsze operacje wykonywane przez tę procedurą zapobiegną takiemu przebiegowi zdarzeń, jednak nie bardzo teraz kojarzę czy istnieją jakieś dodatkowe zabezpieczenia przed czymś takim.