MacintoshPi to mój mały projekt, pozwalający na uruchomienie pod Raspberry Pi pełnoekranowych wersji systemów Apple: Mac OS 7, Mac OS 8 i Mac OS 9 z dźwiękiem, aktywnym połączeniem internetowym i emulacją modemu.
• Wersja legacy obrazu - nie należy aktualizować, korzystasz na własną odpowiedzialność
• Wpisz polecenie mac --help, aby uzyskać pomoc
• Rozważ wsparcie - przetestuj poniższy suwak :)
Przetestuj suwak :)
Wszystko bez menadżera X.org, a wyłącznie za pomocą multimedialnej biblioteki SDL2 i z poziomu CLI – Raspberry Pi OS Lite. Dzięki temu emulatory wykorzystują pełną moc Raspberry Pi, są stabilniejsze i użyteczne w połączeniu z dodatkowym retro-oprogramowaniem. Instalacja wymaga uruchomienia jednego skryptu na czystym systemie Raspberry Pi OS Lite i poczekania około dwóch godzin na kompilację i instalację pakietów. Dodatkowo, dzięki zawartemu w projekcie dokumentowi, w dual-boot możliwe jest umieszczenie najszybszego (bare-metal) emulatora Commodore 64/128/PET BMC64 budując w ten sposób ciekawy retro pakiet na jednej karcie SD. Cały projekt MacintoshPi działa z urządzeniami Raspberry Pi Zero 2W, 2, 3, 3B, 3B+ (na razie nie działa z wersją 4).
Poniżej film przedstawiający możliwości projektu MacintoshPi:
W skład projektu wchodzą poniższe skrypty bash'owe auto-kompilujące i instalujące dla Raspberry Pi:
Emulator Macintosh 68K Basilisk II obsługujący systemy Mac OS 7 (System 7.5.5) i Mac OS 8,
Emulator PowerPC SheepShaver obsługujący system Mac OS 9,
Emulator Commodore 64/128/Pet VICE,
Wirtualny Modem wykorzystujący projekty tty0tty i tcpser, działający z powyższymi dwoma emulatorami dla produktów Apple, Commodore oraz z samym Raspberry Pi OS i pozwalający na łączenie się dowolnym oryginalnym retro-oprogramowaniem terminalowym z dzisiejszymi telnetowymi BBSami,
Emulator CD-ROM, DVD-ROM CDEmu, pozwalający na montowanie pod Linuxem obrazów CD (iso, toast, cue/bin, mds/mdf itp.) – działa z emulatorami BasiliskII i SheepShaver oraz z Raspberry Pi OS. Emulatory są automatycznie skonfigurowane do obsługi tego wirtualnego napędu CD-ROM.
Spójny launcher uruchamiający te wszystkie systemy w różnych rozdzielczościach (po restarcie) i w różnych konfiguracjach,
SyncTERM – program do łączenia się z BBSami z poziomu Raspberry Pi OS kompilowany w połączeniu z biblioteką SDL,
Informacje jak uruchomić w dual-bootRaspberry Pi OS z najszybszym emulatorem Commodore dla Raspberry PiBMC64 – (bare metal/low latency emulator).
Obrazy systemów Mac OS zostały prekonfigurowane do obsługi połączeń internetowych.
O moim Macintosh Classic II
Moją wersję MacintoshPi napędza Raspberry Pi 3B+. Obudowę Macintosh Classic II zakupiłem na eBay – była kompletnie żółta, ale do stanu zgodnego z fabrycznym przywróciłem ją korzystając z wody utlenionej 18% i odpowiedniego naświetlania.
Ekran LCD IPS 10,1'' 1024x600px HDMI Waveshare 11870 jest obrócony o 180°, aby okablowanie nie przeszkadzało górnej, wąskiej ramce Macintosha. Przestrzeń między płaskim ekranem, a pozostałościami kształtu CRT uzupełniłem wydrukiem 3D, który został zaprojektowany na potrzeby projektu twórców kanału YouTube 2GuysTek.
Ekran Waveshare jest nieco zbyt szeroki, ale odpowiednie operowanie plikiem config.txt pozwala software'owo obrócić ekran i ustalić dokładną pozycję wyświetlanego obrazu, dla każdego z systemów lub programów oddzielnie (po każdorazowym restarcie). Ekran jest też nieco zbyt niski, dlatego puste przestrzenie wypełniłem czarnym bristolem i praktycznie nie widać tych elementów (wyglądają jak czarne tło ramki otaczającej ekran) – zalecam jednak wykorzystanie innego monitora, którego rozmiar będzie nieco większy, a dopiero software'owo zmniejszyć rozmiar i ustalić właściwą pozycję wyświetlanego obrazu.
Klawiatura i mysz to zestaw Logiteh MK295 Silent Wireless Combo – są tylko nieznacznie zbliżone stylem do dostarczanych w tamtych latach peryferii, ale są też bezprzewodowe i korzystają z pojedynczego dongla bluetooth. Dodałem dwa głośniki podłączone do wejścia audio analog/jack Raspberry Pi 3B+ i do rozgałęźnika. Wszystkie te elementy są zintegrowałem wewnątrz obudowy komputera Apple Macintosh Classic II.
Źródła projektu można znaleźć na
Ten film znalazł się na stronie głównej serwisu wykop.pl otrzymując 311 wykopów. Zobacz też inne wpisy z tego bloga, które trafiły na stronę główną.
Piszą o projekcie
Podcasty o projekcie
@ 33:25 @ 36:26 @ 47:15
Dual-boot Raspberry Pi OS i BMC64
BMC64 nie jest oparte bezpośrednio na Linuxie i MUSI znajdować się w pierwszej partycji karty SD, dlatego aby dual-boot był możliwy, należy przenieść zawartość pierwszej partycji systemu Raspberry Pi OS na trzecią. W tym celu należy zmniejszyć rozmiar drugiej partycji i na pozostałym miejscu utworzyć trzecią partycję zgodnie z poniższym poradnikiem.
W tym przykładzie korzystam z dystrybucji Fedora Linux. Nazwa karty SD to mmcblk0, ale w zależności od tego, czy czytnik kart SD jest wbudowany, czy podłączany przez USB, karty SD mogą być oznaczane w systemie jako zwykłe napędy dysków (np. sdc). Partycje są oznaczone jako: p1 p2 i nieistniejąca jeszcze jako p3, czasami jednak partycje oznaczane są wyłącznie cyframi. Wszystkich operacji należy dokonywać z konta użytkownika root.
Wysuń kartę SD z Raspberry Pi i przenieś do komputera z czytnikiem kart SD i uruchomionym systemem Linux.
Włóż do czytnika kartę SD, uruchom dmesg i lsblk, aby sprawdzić nazewnictwo karty SD i odmontuj jej wszystkie partycje.
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 532480 60579839 60047360 28.6G 83 Linux
Zapisz ostatni sektor pierwszej partycji – w tym przypadku 532479.
Uruchom sprawdzanie błędów na drugiej partycji, czyli tej, której rozmiar należy zmniejszyć:
e2fsck -f -C 0 /dev/mmcblk0p2
Zmniejsz rozmiar partycji p2 o wielkość, która stanie się rozmiarem nowej, trzeciej partycji rozruchowej – dla Raspberry Pi OS wystarczy 300-600MB, czyli w tym wypadku z 28.6G wystarczy usunąć końcówkę .6:
resize2fs /dev/mmcblk0p2 28G
Usuń partycję p2 (tak – należy ją całkowicie usunąć, dane na niej jednak pozostaną nietknięte):
fdisk /dev/mmcblk0, klawisz d i numer partycji 2.
Partition 2 has been deleted.
Naciśnij klawisz w, aby zapisać te zmiany.
Utwórz nową partycję p2 już o nowym rozmiarze:
fdisk /dev/mmcblk0, klawisz n utwórz nową partycję, klawisz p primary, numer partycji 2, w pierwszy sektor wpisz wartość zapisanego wcześniej ostatniego sektora pierwszej partycji, ale powiększony o jeden, czyli w tym przypadku 532480, ostatni sektor zostanie obliczony automatycznie na podstawie wartości rozmiaru z punktu 6. tego poradnika, czyli w tym przypadku +28G (znak plus jest bardzo ważny), na pytanie o usunięcie sygnatury należy odpowiedzieć No, czyli nacisnąć klawisz n, a następnie w, aby zapisać zmiany.
Jeszcze raz wylistuj wszystkie partycje obecne na karcie SD:
fdisk -l /dev/mmcblk0
w tym przypadku wynikiem jest:
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 532480 59252735 58720256 28G 83 Linux
Tym razem zanotuj ostatni sektor drugiej partycji – w tym przypadku 59252735.
Utwórz nową, trzecią partycję rozruchową p3:
fdisk /dev/mmcblk0, klawisz n utwórz nową partycję, klawisz p primary, numer partycji 3, w pierwszy sektor wpisz wartość ostatnio zapisanego sektora drugiej partycji, ale powiększonego o jeden, czyli w tym przypadku 59252736, przy ostatni sektor wybierz wartość domyślną naciskając Enter, dzięki czemu zostanie wypełniona cała pozostała przestrzeń karty SD. Jeszcze nie zapisuj zmian.
Zmień typ nowej partycji na W95 FAT32 (LBA):
Naciśnij klawisz t, numer partycji 3, hex kod: 0c i dopiero teraz naciśnij klawisz w, aby zapisać zmiany.
Utwórz system plików na nowej, trzeciej partycji poleceniem:
mkfs.vfat -F 32 /dev/mmcblk0p3
Nadaj nowej partycji label boot2 poleceniem:
fatlabel /dev/mmcblk0p3 boot2
zignoruj komunikat ostrzegawczy, który się wyświetli po tej operacji.
Utwórz trzy katalogi (p1, p2 i p3) w katalogu /mnt:
mkdir /mnt/p{1,2,3}
Zamontuj wszystkie trzy partycje do odpowiednich podkatalogów w katalogu /mnt, czyli w tym przykładzie:
mount /dev/mmcblk0p1 /mnt/p1
mount /dev/mmcblk0p2 /mnt/p2
mount /dev/mmcblk0p3 /mnt/p3
Przenieś zawartość pierwszej partycji, czyli zawartość katalogu /mnt/p1/* na trzecią partycję poleceniem:
mv /mnt/p1/* /mnt/p3/
Utwórz w głównym katalogu drugiej partycji katalog BMC64:
mkdir /mnt/p2/BMC64
Wyświetl UUID i PARTUUID nowej partycji poleceniem:
blkid /dev/mmcblk0p3 -o export | grep UUID
W przykładzie wynik polecenia jest następujący:
UUID=E1D6-04D5
PARTUUID=163f3c16-03
Zapisz te dane.
Wyedytuj plik /mnt/p2/etc/fstab i sprawdź, czy używany jest UUID, czy PARTUUID. Skorzystaj również z tego samego sposobu nazewnictwa w przypadku trzeciej partycji.
W naszym przypadku plik fstab wygląda następująco:
Podmień UUID lub PARTUUID dla pierwszej partycji /boot z zapisaną wcześniej wartością trzeciej partycji – po tej zmianie przykładowy plik fstab wygląda następująco:
W ostatniej linii tego pliku wskaż montowanie zasobu pierwszej partycji do katalogu /BMC64 z prawami zapisu i odczytu dla użytkownika pi – wystarczy w czwartej kolumnie podmienić zwrot defaults na rw,uid=1000,gid=1000. W drugiej kolumnie należy podmienić katalog /boot na /BMC64. Cały przykładowy plik /mnt/p2/etc/fstab ma teraz postać:
Na pierwszą partycję przegraj pliki programu BMC64 i wszystkie niezbędne do jego działania pliki dodatkowe.
Wykonaj poniższe polecenie, dzięki któremu domyślnie będzie uruchamiany system Raspberry Pi OS startując z trzeciej partycji:
echo "boot_partition=3" > /mnt/p1/autoboot.txt
Odmontuj wszystkie partycje karty SD poleceniem:
umount /mnt/*
Uruchom polecenie eject /dev/mmcblk0, wysuń kartę SD i włóż ją do Raspberry Pi.
Uruchom Raspberry Pi i jeżeli poprawnie wystartuje system Raspberry Pi OS, to wykonaj polecenie:
sudo reboot 1 (lub mac commodore jeżeli posiadasz zainstalowany projekt MacintoshPi) – powinien wystartować BMC64,
Aby z BMC64 wrócić do systemu Raspberry Pi OS, wystarczy wybrać opcję F12->Machine->Switch->C64->Restart. Po tej operacji powinien nastąpić restart i powrót do systemu Raspberry Pi OS.
Kliknij tutaj, aby wyświetlić instrukcję uruchomienia MacintoshPi w trybie dual-boot z BMC64.
Wsparcie
Możesz przelać dowolne środki na moje konto PayPal, jeżeli chcesz wesprzeć ten projekt.
7 myśli na temat “MacintoshPi – Mac OS 7/8/9 dla Raspberry Pi”
przy tych gabarytach może zmieścilo by się zasilanie?
powiedzmy na tydzień
podziwiam pracę wykonaną, żeby to wszystko śmigało. Zainstalowałem na Raspberry Pi B+ Zostało mi przygotować obudowę dla Malinki z 2,8 calowym wyświetlaczem i jakimś rozwiązaniem dla zasilania – nie ma jak spełnienie marzeń z dzieciństwa. DZIĘKUJĘ
Uruchomiłem na Pi400 wystarczyło wykorzystać nowszą wersje SDL2 tj. zamiast https://www.libsdl.org/release/SDL2-2.0.7.tar.gz wykorzystać https://www.libsdl.org/release/SDL2-2.0.18.tar.gz.
Dodatkowo miałem problem z cd-rom oraz ethernetem więc na szybko zmieniłem w plikach konfiguracyjnych:
– ‚nocdrom false’ -> ‚nocdrom true’
– ‚ether slirp’ -> ‚#ether slirp’.
Zakładam że zarówno cd-rom jak i ethernet jest do uruchomienia (np. ethernet może działa tylko wymaga podłączenia przewodu i postawienia interfejsu, może analogicznie jest z cd-rom tj. może wystarczy coś podmontować – nie wiem nie próbowałem, powyższa proteza w plikach konfiguracyjnych była tylko wynikiem mojego pośpiechu). Jak będę miał chwile czasu to może spróbuje uruchomić powyższe.
Ogólnie skrypty to mega profeska :)
To może dodaj do repozytorium GitHub swoją wersję (jako nowy plik dla Pi400) i zrób Pull Requesta. Chętnie przetestuję i może wspólnie naprawimy te bolączki. Projekt idealnie pasuje na Pi400 – naklejka Macintosha na klawiaturę Pi400 i gotowe :)
przy tych gabarytach może zmieścilo by się zasilanie?
powiedzmy na tydzień
Faktycznie – wtedy byłby to komputer całkowicie pozbawiony okablowania. Dobry pomysł :)
podziwiam pracę wykonaną, żeby to wszystko śmigało. Zainstalowałem na Raspberry Pi B+ Zostało mi przygotować obudowę dla Malinki z 2,8 calowym wyświetlaczem i jakimś rozwiązaniem dla zasilania – nie ma jak spełnienie marzeń z dzieciństwa. DZIĘKUJĘ
OK – podziel się tu fotką gotowego produktu, jak już skończysz prace :) powodzenia i pozdrawiam.
Uruchomiłem na Pi400 wystarczyło wykorzystać nowszą wersje SDL2 tj. zamiast https://www.libsdl.org/release/SDL2-2.0.7.tar.gz wykorzystać https://www.libsdl.org/release/SDL2-2.0.18.tar.gz.
Dodatkowo miałem problem z cd-rom oraz ethernetem więc na szybko zmieniłem w plikach konfiguracyjnych:
– ‚nocdrom false’ -> ‚nocdrom true’
– ‚ether slirp’ -> ‚#ether slirp’.
Zakładam że zarówno cd-rom jak i ethernet jest do uruchomienia (np. ethernet może działa tylko wymaga podłączenia przewodu i postawienia interfejsu, może analogicznie jest z cd-rom tj. może wystarczy coś podmontować – nie wiem nie próbowałem, powyższa proteza w plikach konfiguracyjnych była tylko wynikiem mojego pośpiechu). Jak będę miał chwile czasu to może spróbuje uruchomić powyższe.
Ogólnie skrypty to mega profeska :)
A i jeszcze jedno. Tak jak jest w tym przewodniku wykorzystałem stary obraz raspios (buster 32bit) – link poniżej:
https://downloads.raspberrypi.com/raspios_oldstable_lite_armhf/images/raspios_oldstable_lite_armhf-2022-04-07/2022-04-04-raspios-buster-armhf-lite.img.xz
To może dodaj do repozytorium GitHub swoją wersję (jako nowy plik dla Pi400) i zrób Pull Requesta. Chętnie przetestuję i może wspólnie naprawimy te bolączki. Projekt idealnie pasuje na Pi400 – naklejka Macintosha na klawiaturę Pi400 i gotowe :)