CROOK-5 w EM400 pod Windows.

crook5windows

Dziś z ciekawości skompilowałem EM400 w MSYS2 pod Windows.

Aby uruchomić (snapshot git b4794ce, aktualizacja z 24.04.2017):

  1. Instalujemy MSYS2 w wersji x86_64 lub i686 w zależności od wersji systemu Windows.
  2. Pobieramy i rozpakowujemy archiwum  w wersji 64-ro lub 32-bitowej zawierające binaria EM400. Znajdziemy w nim też cross-assemblery, plik konfiguracyjny i inne narzędzia, ale obraz Crook5 oraz EEPROM pamięci Mega trzeba pobrać ze strony mera400.pl.
  3. Odpalamy Msys2 Shell z menu Windows. W shell-u wchodzimy do katalogu gdzie rozpakowaliśmy em400.zip i obraz systemu CROOK. MSYS2 jest środowiskiem uniksopodobnym, więc dyski z Windows mapowane są np. na /c/jakiś/katalog.
  4. Uruchamiamy emulator: ./em400.exe -c em400.cfg
  5. Odpalamy jeszcze jeden Msys2 Shell, telnet 127.0.0.1 32000
  6. Wpisujemy run w debuggerze.

fib_on_crook

Miłej zabawy Mera400 (MX-16) i CROOK-5.

Printf() pod Windows.

Printf() pod Windows okazuje się sporo wolniejszy niż pod Linuksem.

printf_windowsParadoksalnie, jak widać powyżej, pythonowy print() jest ~3x szybszy od printf() z biblioteki standardowej Mingw-w64. Pod Linuksem na odwrót, 4x wolniejszy względem tego z libc.stdio:

print_linux


Poczytałem stdio.h i doszedłem do tego, że gdy  -D__USE_MINGW_ANSI_STDIO=1 używana jest funkcja printf() z Mingw (ponad 11 razy wolniejsza od printf() pod Linuksem) i tak jest „by default”.

Jeśli do gcc dodam  -D__USE_MINGW_ANSI_STDIO=0, używana jest wersja printf() z msvcrt.dll. Mimo, że ta funkcja ma swoje braki, różnica jest dość znaczna:

$ time ./fib_mingw_printf.exe 300000 > /dev/null

real 0m5.513s
user 0m0.000s
sys 0m0.031s

$ time ./fib_msvcrt_printf.exe 300000 > /dev/null

real 0m1.081s
user 0m0.015s
sys 0m0.000s


Jeszcze jedna ciekawostka: przekierowanie do /dev/null w MSYS2 (które jest prawdopodobnie mapowane na NUL) pod Windows jest powolne. Przekierowanie do pliku jest ~2x szybsze:

$ time ./fib_msvcrt_printf.exe 300000 > output.txt

real 0m0.562s
user 0m0.000s
sys 0m0.015s

(Pod Linuksem bez różnicy).


Na szczęście %timeit pozwala się przekonać, że kod generowany w tej samej wersji gcc pod Windows i pod Linuksem jest niemal tak samo wydajny.

Msys2 – toolchain idealny.

Idąc jak po nitce do kłębka, w końcu trafiłem na Msys2, czyli minimalny zestaw narzędzi systemowych, oparty o narzędzia uniksowe (głównie GNU) dla Windows.

msys2
Co się najbardziej rzuca w oczy w tym zrzucie? 🙂 Ano pacman. Tak, ten sam pacman co w Arch Linuksie, którego używam na co dzień. Co za tym idzie? Wszystkie pakiety (kompilator, biblioteki, python, narzędzia) i kompletne środowisko GNU, są w repo projektu, więc aktualizacja (pod Windows!) to standardowe: pacman -Suy, a przebudowanie pakietu wg własnego uznania to edycja prostych, jak konstrukcja przysłowiowego cepa plików PKGBUILD.

Dla mnie Msys2 to brakujący element systemów Windowsowych.

Windows 7 vs Debian + KDE4.

Od kilku dni mam okazję testować Windows 7 Ultimate na moim wysłużonym laptoku. Pierwsze wrażenia: wow. Chyba pierwszy produkt MS oprócz może W2K, który wydaje się mieć sens. Mało tego, działa szybko (bardzo szybko), a do tego całkiem miło i przyjemnie obsługuje cały sprzęt OOTB. I jeszcze jedno: po ustawieniu planu zarządzania energii na bardziej „laptop-mode”, dwupółletnia bateria w R61 działa 3 godziny.

Drugie wrażenie, czasem wywala się grafika (dziś w opcjonalnych aktualizacjach znalazłem sterownik intela, może będzie lepiej). Jedna zwiecha po suspendzie w trakcie słuchania muzyki. Opóźnienie w Guitar Rig drugie tyle większe jak pod Linuksem + Wine + Wineasio + jackd.

Trzecie wrażenie: Debian z ich wersją KDE4 nie ma się czego wstydzić. Jak dla mnie środowiska są porównywalne. Debian jak to Debian, bardziej przewidywalny i mniej więcej wiadomo co się tam pod maską odbywa.