Atari i internet (SLIP)

Atari i internet? To chyba trochę… inne dekady, nieprawdaż? WWW otwarto do użytku publicznego w 1991 roku, a większość moich płyt datuje się na schyłek lat 80. Czy można pogodzić te dwie technologie?

Okazuje się to możliwe. Podłączenie Atari do internetu wcale nie jest takie trudne – a to za sprawą… ESP8266 i portu szeregowego. Na podstawie świetnego tekstu chzsoft.de skonstruowałem sobie adapter do Atari-do-WiFi.

Pomysł

  • Na ESP8266 wypalę stos do SLIP – „Serial Line to IP”,
  • ESP podłączę do portu szeregowego (DB25) atari przez konwerter poziomów logicznych MAX3232,
  • Na Atari uruchomię STiNG – stos obsługujący SLIP.
  • Dane z Atari będą pakowane w ramki, przekazywane po porcie szeregowym, rozpakowywane po stronie ESP – który zajmie się dalej komunikacją po wi-fi.

Używając domyślnych ustawień oprogramowania z chzsoft.de, idea wygląda tak:

Na początek

Do wykonania takiej „przejściówki” potrzeba kilka zabawek:

  • ESP8266, moduł ESP-01,
  • Do programowania ESP: przejściówka USB-UART,
  • Moduł portu szeregowego z MAX3232; uwaga – koniecznie ten, 232 lub podobny wymaga dodatkowych konwersji poziomów napięcia (ESP chodzi na 3,3v, MAX232 wymaga 5v),
  • Ew. przejściówka z DB9 do DB25 – jeżeli potrzebna,
  • Jakieś zasilanie 3,3v, mogą być np. połączone szeregowo dwie bateryjki AA.

Obraz dla ESP

W pierwszym kroku pobrałem odpowiednie paczki i zbudowałem obraz dla ESP z SLIP (SDK w wersji stand-alone)

W tym momencie w podkatalogu ./esp_slip_router/firmware powinniście zobaczyć dwa pliki: 0x00000.bin 0x10000 0x10000.bin.

Podłączenie ESP

Poniżej znajdziecie schemat połączenia ESP.

Na potrzeby programowania, GPIO0 musi być zwarte do masy. Inaczej startujący chip przeczyta dane z flasha i rozpocznie realizację zapisanego tam programu.

Wypalanie obrazu dla ESP

Podłączcie GPIO0 do masy. U mnie przejściówka USB->UART podpięła się pod /dev/ttyUSB0. Pobrałem jeszcze kilka domyślnych „wypełniaczy” flasha – i wypaliłem kod:

W powyższym wrzucie używam esp_init_data_default.bin, który musi być identyczny z tym zapisanym w pliku config_flash.c. Wygląda on tak:

Możecie przekompilować samemu pliki 0x00000 i 0x10000:

Jak zauważyliście, nie używam wkładów z oryginalnego projektu. U mnie one w ogóle nie zadziałały – esp w kółko resetował się

Przydatne:

  • Adres konfiguracji czipa (esp_init_data_default.bin):
  • Odczytanie rodzaju pamięci:
  • Wymazanie flasha:
  • Sprawdzenie adresu MAC ESP:

Uruchomienie na pc z  linux – i konfiguracja modułu ESP

Moduł slip nie był dodany:

Teraz stworzyłem nowy interfejs sieclowy sl0:

I zalogowałem się do ESP to telnecie:

Teraz należy na ESP ustawić parametry połączenia sieciowego – zamiast <ssid> i <password> podajcie namiary do swojej domowej sieci WiFi:

Po ponownym zalogowaniu, dzieki „save”:

Na płytce protypowej

Zazwyczaj zanim węzmę się za lutowanie docelowej płytki, najpierw składam wszystko na prototypowej. Może nie piękne – ale skuteczne. No i łatwiej się na tym robi zmiany:)

Do zasilenia jej użyłem dwie bateryjki AA – trochę mało napięciowo, ale prądowo się wyrabiały.

Uwaga o mocy

Mimo że taki mały, ESP8266 – 01 potrafi pobrać nawet 350mA przy 3.3v. Dlatego zasilenie go np. z przejściówki USB-UART może będzie problematyczne.

Uwaga: tylko niektóre przejściówki mają możliwość przełączenia PWR na 3.3v. Większość chodzi na 5v – co może uszkodzić ESP.

ESP da się zaprogramować przez przejściówkę, ale na nawiązanie połączenia może nie starczyć mocy. U mnie przy takiej próbie napięcie 3.3v z przejściówki spadało do 2.6v – w rezultacie miałem bardzo dużo błędów w pakietach. Wbrew pozorom, 2xAA mogą dać całkiem dużo prądu (nawet 1A). Oczywiście możecie również użyc zasilacza laboratoryjnego – przynajmniej na etapie projektowania. Później… to mało wygodne:)

Test

Całe potrzebne oprogramowanie znajdziecie na stronie chzsoft.de. Pobierzcie paczkę, rozpakujcie, nagrajcie na dyskietkę. Po uruchomieniu Atari, skopiujcie pliki drvin.prg, mfp.prg i sting.prg z katalogu /AUTO.TMP do AUTO – dokładnie w  takiej kolejności. Teraz oprogramowanie sterujące połączeniem uruchomi się z każdym restartem.

W górnym menu powinniście już znaleźć element „Control Panel”.

Pod klawiszem „Sting port setup” upewnijcie się, że interfejs jest aktywny (checkbox „Active”) i ustawcie adres IP modułu (192.168.240.2).

Koniecznie ustawcie adres DNS (9.9.9.9, menu „Sting Protocols” i potem „Resolver”) oraz adres IP modułu (192.168.240.2, menu „Sting port setup”).

Na koniec warto zapisać wszystkie ustawienia (klawisz „Save”). Teraz możecie podłączyć się do ESP terminalem (TERMINAL.PRG) i sprawdzić poprawność  ustawień (adres 192.168.240.1, port 7777 i polecenie „show” – jak w linuksie).

Złożona na szybko płytka zadziałała, uzyskałem połączenie z internetem. Postanowiłem więc zlutować coś bardziej „produkcyjnego”:)

Płytka

Schemat znajdziecie na stronie CHZ-Soft. Odrobinę go zmieniłem o dodatkowe gniazda umożliwiające przeprogramowanie ESP w układzie:

Do konstrukcji adaptera użyłem płytki 5x7cm, jednostronnej. Niestety montaż wtyczki d-sub wymagał trochę kombinowania. Po prostu rozstaw pinów nie pasuje do standardowego rastra.

Dodatkowo drugi rząd pinów jest przesunięty o połowę odległości pinów. Po prostu podgiąłem rząd pinów o wyższych numerach – i usunąłem niektóre niepasujące piny (potrzebuję tylko 2,3 i 6). Wtyk podkleiłem żywicą.

Teraz zająłem się zasilaniem. Z jednej strony wyprowadziłem sobie 12v z Atari – picoPSU miał kilka dodatkowych wyjść. Do płytki przyczepiłem kabel i dolutowałem przetwornicę step-down. Z przyzwyczajenia między zasilanie i masę dodałem dwa kondensatory – coś jak 4.7uF i 100 nF.

W następnej kolejności lutowałem max3232:

Zanim podłączyłem czipy do zasilania, Potencjometrem ustawiłem zasilanie na przetwornicy na ok. 3.3v. Potencjometr zabezpieczyłem klejem – tak, żeby nic się przypadkiem nie przekręciło:)

W ostatnim etapie dodałem ESP:

Na płytce dodałem kilka złączy:

  • Złącze do programowania ESP (rx, tx, GND, PWR),
  • Zworki dla GPIO0 – zwarcie do masy (programowanie) lub do zasilania (praca).

Co to w ogóle potrafi?

Przeglądarka? Cóż…

Na dyskietce, w folderze /CAB znajdziecie przeglądarkę CAB. Niestety pochodzi z czasów, kiedy HTML był już wersji 2.0 – ale o CSS czy JavaScript jeszcze się nie słyszało. Dlatego trudno w zobaczyć nawet prostsze strony. Zazwyczaj kończy się to listą tagów.

W sieci możecie znaleźć różne wersje CAB.OVL (łączy przeglądarkę ze stosem Sting). Za każdym razem, kiedy próbowałem ten plik podmieniać (w stosunku do tego z chzsoft) – kończyło się to crashem aplikacji.

Ping – tak

Można się „pingnąć” do innego kompa w sieci domowej (PING.PRG):

No cóż… niezbyt rozrywkowe…

Telnet – tak

Możecie telnetować się na inny komputer. Najpierw na swoim kompie z linuksem uruchomiłem usługę telnet:

Teraz wystarczy otworzyć TELNET.PRG i podłączyć się do linuksa (tutaj adres IP: 192.168.1.150):

I logujemy się:

No tak, ale to dalej mało przydatne.

FTP – tak

Myślę, że najciekawsza jest jednak możliwość ftp-owania się na komputer w sieci i pobrania z niego pliku. W ten sposób nie musicie „machać” dyskietkami… Na przykład ten: https://github.com/anodynesoftware/pftp/releases. Wystarczy go skopiować na Atari. Na linuksie (tutaj):

Moja konfiguracja z vstfpd.conf – zauważcie ustawienie serwera w tryb pasywny:

Ostatnie 2 linijki (user_sub_token i local_root) pozwalają na ustawienie katalogu, w którym wyląduje logujący się użytkownik.

Bez ustawienia w tryb pasywny cały czas dostawałem reset i EOF’y. Teraz na Atari (adres mojego ftp to 192.168.1.150):

Bingo – mogę ściągać pliki z ftp na Atari:)

„mget *” pozwoli na załadowanie wielu plików. Wcześniej wydajcie polecenie „prompt” – nie będziecie musieli potwierdzać pobierania każdego kolejnego pliku. ftp nie potrafi pobierać danych z podkatalogów (rekursywnie).

Problemy

Zauważyłem, że transfer potrafi nagle znacząco zwolnić. W rezultacie ściągnięcie większego pliku może trwać wieczność. Może to być problem z moim Mega ST 4. Cały czas pracuję nad tym problemem, jak tylko go rozwiążę – uzupełnię tekst.

Podsumowanie

W sieci znajdziecie kilka modułów otwierających Atari dostęp do internetu. Ciekawy (i dostępny) jest NetUSBee. Problem w tym, że kosztuje… grubo ponad 200 złotych. Złożenie tego modułu kosztowało mnie nie więcej niż 20.

Niestety komunikacja po porcie szeregowym ma swoje ograniczenia. Podstawowym jest szybkość – 19200. Ale przy odrobinie cierpliwości…

Źródła

  • https://github.com/martin-ger/esp_slip_router
  • https://github.com/pfalcon/esp-open-sdk
  • https://www.chzsoft.de/site/hardware/connecting-the-atari-st-to-the-internet/
  • http://transaction.perso.libertysurf.fr/interactive/software/cab.htm
  • https://nodemcu.readthedocs.io/en/master/flash/#sdk-init-data
  • https://plociennik.info/index.php/informatyka/26-esp8266/880-aktualizacja-firmware
  • https://github.com/krzychb/esp-just-slip
  • https://lotharek.pl/productdetail.php?id=46
  • https://www.atari-forum.com/viewtopic.php?f=15&t=31586
  • http://transaction.perso.libertysurf.fr/interactive/software/cab.htm
  • http://atari.net.pl/network/
  • https://breakintochat.com/blog/2017/09/05/web-browsing-on-the-atari-st-with-a-cosmosex/
  • https://web.archive.org/web/20040417002129/http://www.netset.com/~baldrick/ovl.html
  • https://sourceforge.net/projects/highwire/files/hw100529.zip/download
  • https://breakintochat.com/blog/2017/09/05/web-browsing-on-the-atari-st-with-a-cosmosex/
  • http://freemint.de/en/?net
  • https://www.chebucto.ns.ca/Services/PDA/AtariSTBrowsers.shtml
  • http://jfhaslam.atari.org/
  • ftp://ftp.lip6.fr/pub/atari/Internet/
  • http://www.atari.org.pl/artykul/sting-ostateczne-rozwiazanie/42
  • http://atari.net.pl/wez-sobie/
  • https://github.com/espressif/esptool