Skip to content
Mac(intosh) mini
OpenSCAD JavaScript Shell Makefile
Branch: master
Clone or download
Latest commit 622d1a0 Oct 13, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config Add .Xdefaults to colorize xterm Oct 12, 2019
images Add info about the LCD pinout Oct 12, 2019
minivmac Add files Oct 6, 2019
openscad Remove unused includes Oct 13, 2019
switcher Specify the depth explicitly Oct 11, 2019
.gitignore Fix bugs Oct 11, 2019
.gitmodules Add files Oct 6, 2019
README.md Add info about the LCD pinout Oct 12, 2019
basilisk_ii_prefs.md Add files Oct 6, 2019
install.sh Add .Xdefaults to colorize xterm Oct 12, 2019

README.md

Mac(intosh) mini

Build Instruction

  • Print the outer shell.

$ sudo apt install -y git tightvncserver

# Install Node.js
$ git clone https://github.com/tj/n /tmp/n && cd /tmp/n && sudo make install
$ sudo n v10

# Install https://github.com/xpertsavenue/WiringOP-Zero
$ cd ~/
$ git clone https://github.com/xpertsavenue/WiringOP-Zero
## Please refer to https://github.com/xpertsavenue/WiringOP-Zero

# Enable SPI1 interface
$ sudo vi /boot/armbianEnv.txt # or use armbian-config
! overlays=spi-spidev analog-codec usbhost2 usbhost3
+ param_spidev_spi_bus=1

# Setup vncserver
$ mkdir ~/.vnc
$ vncpasswd ~/.vnc/passwd

# Install the dependencies & config files
$ git clone https://github.com/likeablob/macmini ~/macmini
$ cd ~/macmini
$ sudo ./install.sh

# Copy your assets
$ cp /path/to/vmac.rom ~/macmini/minivmac/vMac.ROM # Mini vMac ROM file
$ cp /path/to/vmac.dsk ~/macmini/minivmac/system.dsk # Mini vMac disk file
$ cp /path/to/.basilisk_ii_prefs ~/.basilisk_ii_prefs # Basilisk II config file
$ cp /path/to/macboot.wav ~/macmini/macboot.wav # Boot sound (optional)

# Reboot to apply the settings
$ sudo reboot now

# Select LineOut as the default sink
$ pacmd list-sinks | grep -e 'name:' -e 'index:'
  index: 0
	  name: <alsa_output.platform-1c22c00.codec.analog-mono> # LineOut
* index: 1
	  name: <alsa_output.platform-soc_sound.stereo-fallback> # HDMI
$ pactl set-default-sink 0 # or use `DISPLAY=:1 pavucontrol` and `alsamixer` to adjust volume

OPi Peripherals
PA15/SPI1_MOSI LCD MOSI
PA16/SPI1_MISO LCD MISO
PA14/SPI1_CLK LCD CLK
PA13/SPI1_CS LCD CS
PS12 LCD RESET
PA11 LCD DC
PA06 Push Switch
GND Push Switch
USB-DP2 USB (Front) Data+
USB-DM2 USB (Front) Data-
5V USB (Front/Rear) 5V
GND USB (Front/Rear) GND
LINEOUTL (Optional) Amplifier Input

Basic Concepts

  1. At system boot, fbtft_device kernel module is loaded and it initializes the LCD as /dev/fb0.
  2. nodm starts an X session and ~/.xinitrc get executed.
  3. ~/.xinitrc launchs matchbox-window-manager and ~/macmini/switcher/*js.
  4. ~/macmini/switcher/index.js reads the scripts ~/macmini/switcher/sh.d/*sh and spawns them one by one when there is a HTTP GET request at localhost:5501/.
  5. ~/macmini/switcher/gpio-reader.js watchs the push SW at GPIO7(PA06) and send a request to localhost:5501/.

How does the low-res LCD(320x240) handle 512x384 resolution?

Internally tightvncserver and ssvncviewer are used to scale the display.

  • e.g. 1_large_minimac.sh launches:
    • tightvncserver to create a virtual display (512x384) at DISPLAY=:1 (:5901)
    • minivmac in DISPLAY:1
    • ssvncviewer -scale 0.625 in DISPLAY:0 (By the -scale option, low-res LED get upscaled)

Gallery

BOM

Name Quantity Descriptions
OrangePi Zero Plus 2 (H3) 1 H5 ver. might work too.
2.4inch SPI Display (ili9341, 320x240, with flat cable) 1
Generic micro-USB Breakout Board 2
M2 x 6 mm Self Tapping Screw 16
D10mm Rounding Magnet 2
7x7 mm Push Switch 1
2W Small Speaker 1 (Optional)
ClassD Audio Amplifier Board 1 (Optional) PAM8403

Acknowledgments

You can’t perform that action at this time.