Fujinet-pc na Raspberry Pi Zero W.

Trafiłem ostatnio na wątek forum Atari Age, w którym Jan Krupa (apc) informował o postępach prac nad jego portem Fujinet na PC. Pierwsza myśl – jakby to działało na RPi Zero W?

Zamówiłem, szybko dotarło. Dopracowane jako produkt genialnie.

Instalacja Arch Linux na Arm6 to jakieś 10 minut na przygotowanie karty i konfigurację Wifi. Konfiguracja distcc zajmuje trochę dłużej, ale działa i bez tego – kompilacja na Raspberry to jakieś 15 minut. Źródła kompilują się bez żadnych warningów (zależności są minimalne: gcc, cmake, make i libbsd).

Update (sierpień 2022):

Niestety Archlinux Arm porzucił wparcie dla Arm6, więc przeinstalowałem Fujinet na Raspberry Pi OS z Debianem 11.4 Bullseye. Działa tak samo pięknie, a może nawet nieco lepiej.

Zwykle uruchamiam Fujinet w sesji screen przy starcie Raspberry Pi: screen -d -m ./run-fujinet, bo w razie konieczności zawsze można się przypiąć i odpiąć screenem po zalogowaniu przez ssh żeby zobaczyć co się dzieje. Interfejs webowy pozwala też na reset fujinet, ale szybciej i wygodniej zrobić to z Termux Widget na telefonie (skrypty uruchamiane są via ssh na Raspberry Pi):

#!/bin/bash
killall -9 fujinet
cd /home/greblus/fujinet/
screen -d -m ./run-fujinet

Skoro działa, to może jakiś niezbyt miarodajny test, np. RWTEST. Testy w SpartaDos X na Rpi, laptopie z Linuksem i w moim porcie AspeQt na Androidzie. Ten sam obraz atr z RWTEST.COM podmontowany jako D1. Fujinet na Rpi Zero działa fajnie z hsindex=0 i SIO2PC-USB, ale dobrze jest wyjście debuggowania w skrypcie run-fujinet przekierować do /dev/null, jest jednak nieznacznie szybciej, nawet przy odpiętym terminalu screen.

Fujinet na Rpi Zero W
Fujinet na laptopie
AspeQt na Androidzie

Jest ok. Zaskakujące, że na PC działa wolniej. Tłumaczę sobie to tym, że odczyty realizowane są z pamięci RAM bo obraz atr jest wczytywany do pamięci, a zapisy na Rpi i Androidzie realizowane są na pamięci Flash, tymczasem na moim starym laptopie kręci się stary dobry dysk talerzowy 5400rpm 🙂

SIO2BT + AspeQt.

Update: wersja 1.0.39 z obsługą SIO2BT jest już w Google Play.

Kilka tygodni temu dotarły do mnie słuchy, że FJC planuje dodać obsługę większych prędkości (do 57600 bps) SIO2BT w PBI BIOS Ultimate 1MB, pomyślałem – ja się piszę – Marcin „The Montezuma” Sochacki przysłał mi pięknie zmontowanego dongla SIO2BT, a kilka dni później  AspeQt na Androidzie obsługiwał już SIO2BT.

Wersja w Google Play.
Ta sama wersja na Github.

Poza sparowaniem z Androidem wystarczy tylko w ustawieniach podać nazwę modułu, z którym AspeQt będzie się łączył. Standardowo wykorzystuje programową detekcję ramki komendy (SOFT), a prędkość ustawia się narzędziem BTCONFIG z poziomu Atari (jednorazowo). Z najnowszym firmware U1MB działa @57600bps. Jedyne wymaganie to wybranie w Opcjach interfejsu SIO2BT i ustawienie nazwy modułu BT, z którym Android będzie się łączył.

W planach mam utworzenie wspólnego javowego interfejsu dla SIO2BT, usb-serial-for-android i felhr/UsbSerial. Nie powinno mi to zająć dużo czasu…(zrobione).

Zadziała z każdym adapterem zbudowanym wg tego prostego schematu:

bluetooth_03

Moduł BT to koszt ok. 20zł (HC-06 na Allegro).

AspeQt i FT312D.

Montezuma podesłał mi linka ze specyfikacją kabla Digitus:

http://www.morele.net/digitus-adapter-usb-rs232-da-70160-698967/

i myślę, że ma to spore szanse jako alternatywa do FT232 na Androidzie. Tym bardziej, że Open Accessory Mode nie wymaga żadnych sterowników… Zobaczymy co z tego wyjdzie ;).

Mój Samsung nie ma usb-host ale open accessory mode działa ;). Już prawie… Jeszcze tylko dołożyć TTL level shifter 3.3<->5V i powinno działać.

Aktualizacja:

java.io.IOException: write failed: ENODEV (No such device)
at libcore.io.IoBridge.write(IoBridge.java:455)
at java.io.FileOutputStream.write(FileOutputStream.java:187)
at dji.midware.usb.P3.UsbAccessoryService$1.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

Jest problem z open accessory mode, nierozwiązany od kilku lat…

AspeQt na Androidzie i High Speed SIO w MyPicoDos.

Po co posiadaczowi Side AspeQt na Androida? Ano, coraz częściej znajduje jakiś program w necie i aby sobie go odpalić musiałbym iść po laptopa/czytnik kart CF. Nie chce mi się, a nic tak nie cieszy jak odpalenie jakiejś zdobyczy retro, na prawdziwym Atari.

Z AspeQt na Androidzie nie ma tego problemu – tablet albo telefon mam zawsze pod ręką ;). Dodatkowo mogę cieszyć się szybkim SIO (HS index 0) na niezmodyfikowanym Atari 130XE,  którego używam na co dzień:

  • do katalogu z pobranymi z neta skarbami (xex) wrzucamy dwa pliki $boot.bin i picodos.sys stąd.
  • montujemy katalog w AspeQt:

mypicodos-aspeqt

I bootujemy:

pikuc59b1

 

Pikuś załatwia nawet długie nazwy plików 😉 i klawisza Option naduszać nie trzeba.

OptionsDialog.

TreeView na Androidzie sprawdza się średnio, zastanawiałem się jak to można by zrobić w Qt5 i przyznam szczerze, łatwo nie jest. QScrollView ma jedną podstawową wadę: póki co nie obsługuje przewijania jednym palcem i trzeba mu zostawić włączony scrollbar, na szczęście udało się go poprawić za pomocą stylów:

O kwestię layoutów mam ochotę zapytać któregoś z developerów, bo niestety są bardzo nieprzewidywalne. Nigdy nie wiadomo gdzie i jak dany widget się wyświetli. Na powyższym zrzucie odległości między obiektami są różne, a powinny być względnie spójne, bo na samym dole kontenera dodałem expander, który powinien wszystko co powyżej niego ładnie do siebie dosunąć…

Mam nadzieję, że kiedyś pojawi się spójne scrollview z obsługą single finger pan. Póki co się nie zanosi. A przecież aplikacji w QtWidgets jest niewspółmiernie więcej na wolności, niż w QtQuick.

AspeQt na Kazam Tornado 348.

A oto żywy dowód na prawidłową obsługę usb-host przez Kazam Tornado:

Przy okazji powiększyłem trochę przyciski i jeśli ekran jest mniejszy od 5″ to log jest wyłączony (wyświetla się na pasku statusu), a hbox-y wypełniają cały ekran:

Screenshot_2015-09-06-02-59-05Z małych ważnych zmian: usunąłem orientację poziomą i dzięki temu można sobie wybrać plik do załadowania w Fileselektorze w pionie (więcej się mieści).

scr-orient

 

AspeQt dla Windows.

Piętnaście emulowanych napędów w AspeQt to było dla mnie zdecydowanie za dużo 🙂 więc „zandroidyzowałem” plik projektu z repo dla Androida i wydzieliłem co androidowe, dzięki czemu mój fork AspeQt dla Antka kompiluje się też pod Windows i pod Linuksem. Obsługa portu odbywa się wtedy przez standardowy moduł serialport-{win32,linux}.cpp. Przy okazji poprawiłem kodowanie znaków, które w AspeQt pod Windows było skopane od dawna:

AspeQt_WindowsBinarka dla Windows z wymaganymi bibliotekami tutaj.

winandroidlinux