Przypomniało mi się, że HIAS opisał kiedyś na AtariAge problem z sygnałem RING i z fizycznymi portami szeregowymi:
http://atariage.com/forums/topic/251089 … try3557722
Chodzi o to, że chip 16550 generuje "event" o akywnym sygnale RI nie w momencie jego narastania, ale opadania.
Kabelek SIO2PC w wersji RI ma podpiętą linię COMMAND właśnie do RI.
Narastające zbocze sygnału RI mówi nam, że za chwilę na linii DATA OUT pojawi się Command Frame.
"Nowy" RespeQt nie jest jednak "budzony" narastającym zboczem i ignoruje opadające zbocze, więc Twój kabelek nie działa...
(wersja RespeQt dla Linux-a i OSX-a stosuje "polling" i będzie działać z RI, natomiast wersja dla Windows jest "event driven" dla handshake-u CTS/DSR/RI).
Rozwiązanie:
Handshake: "NONE" lub "SOFTWARE"
Ciekawostka:
Z AspeQt i ze starszymi wersjami RespeQt Twój kabelek SIO2PC/RI będzie działał pod Windows ze względu na błąd w oprogramowaniu.
Zdarzenia związane ze stanem linii sygnałowych generowane są zarówno dla narastających, jak i dla opadających zboczy (z wyjątkiem wspomnianego sygnału RI z UART-em 16550).
Aktualna wersja RespeQt oczekując na Command Frame ignoruje notyfikacje o opadającym zboczu.
Błąd w starszych wersjach polegał na tym, że opadające zbocze powodowało, że AspeQt/RespeQt traktował wtedy dane na DATA OUT jako potencjalny Command Frame.
Następujący scenariusz kopiowania pliku z emulowanego dysku D2 (plik test.atr) na fizyczną dyskietkę w stacji D1 spowodowałby sformatowanie D2!
Błąd uaktywni się jeśli mamy kabelek SIO2PC w wersji CTS/DSR lub SIO2PC/USB w dowolnej wersji (CTS/DSR/RI).
Polecenie kopiowania pliku COPYME.BIN powoduje:
1) ATARI ustawia COMMAND LINE, żeby wysłać do D2 polecenie odczytu sektora dyskietki
2) Narastające zbocze sygnału "budzi" RespeQt, który odczytuje komendę odczytu sektora
3) RespeQt wysyła sektor do ATARI (nie przejmując się opadającym sygnałem Command Line)
3) ATARI odczytuje sektor dyskietki i znowu ustawia COMMAND LINE, tym razem, żeby wysłać do D1 polecenie zapisu sektora dyskietki
4) Narastające zbocze sygnału "budzi" RespeQt, który odczytuje komendę zapisu sektora, ale ponieważ adresowana jest ona do D1, więc ją ignoruje i czeka na kolejne zbocze sygnału.
5) BŁĄD!!! Opadające zbocze sygnału "budzi" RespeQt ponownie, który odczytuje dane wysyłane przez ATARI, traktując je jako Command Frame.
Tak naprawdę jest to Data Frame (przeznaczone dla dysku D1) zawierające sektor dykietki do zapisu.
W większości przypadków RespeQt stwierdzi, że nie zgadza się suma kontrolna i nic złego się nie wydarzy.
Jeśli jednak sektor danych przypadkowo zawierałby dane, które mogą zostać zinterpretowane jako Command Frame (np. 32 21 20 20 53) to tak się właśnie stanie.
W tym przypadku RespeQt wykona "komendę", czyli sformatuje ($21) dysk D2 ($32).
Dla kabelka SIO2PC/RI z UART-em 16550 problem jednak nie wystąpi, ponieważ dla każdej komendy SIO, AspeQt i starsze wersje RespeQt są "budzone" tylko raz.
Można by do kolejnej wersji RespeQt dołożyć handshake "RI (falling edge)", ale nie ma chyba takiej potrzeby, ponieważ Handshake: "NONE" powinien załatwić sprawę.
ATARI 65XE + SIO2BT