AppleWin/linux.md

168 lines
4.8 KiB
Markdown
Raw Normal View History

2018-02-10 17:33:54 +00:00
# Linux
## Structure
2020-12-04 21:03:57 +00:00
There are 4 projects
2018-02-10 17:33:54 +00:00
* libapple: the core emulator files
* applen: a frontend based on ncurses
* qapple: Qt frontend
2020-12-04 21:03:57 +00:00
* sa2: SDL2 frontend
* libra2: a libretro core
2018-02-10 17:33:54 +00:00
The main goal is to reuse the AppleWin source files without changes: only where really necessary the AppleWin source files have
2021-04-13 08:48:52 +01:00
been modified.
2018-02-10 17:33:54 +00:00
## What works
Almost everything works, except the serial port, SNES-MAX and FourPlay.
2018-02-10 17:33:54 +00:00
2021-04-13 08:53:09 +01:00
The UI has been rewritten in Qt or ImGui.
The rest works very well.
Uthernet I is supported via `libpcap`, but it requires elevated capabilities:
2021-04-18 19:47:39 +01:00
`sudo setcap cap_net_raw=ep ./sa2`
Unfortunately, this must be reapplied after every build.
2018-02-10 17:33:54 +00:00
Most of the debugger now works (in the ImGui version).
## New features
Uthernet II is supported too and by default uses `libslirp` which does *not* require elevated capabilities. Use the ImGui settings to enable it.
`libslirp` is not packaged on Raspberry Pi OS. `libpcap` will be used instead, unless the user manually compiles and installs [libslirp](https://gitlab.freedesktop.org/slirp/libslirp).
Audio files can be read via the cassette interface (SDL Version). Just drop a `wav` file into the emulator. Tested with all the formats from [asciiexpress](https://asciiexpress.net/).
## Executables
2021-04-13 08:48:52 +01:00
### sa2
This is your best choice, in particular the ImGui version.
TL;DR: just run ``sa2``
2021-04-13 08:48:52 +01:00
See [sa2](source/frontends/sdl/README.md) for more details.
2018-02-10 17:33:54 +00:00
### applen
Frontend based on ncurses, with a ASCII art graphic mode.
Keyboard shortcuts
* ``F2``: reset the machine
* ``F3``: terminate the emulator
* ``F11``, ``F12``: Save, Load Snapshot
* ``ALT-RIGHT``: wider hi res graphis
* ``ALT-LEFT``: narrower hi res graphics
* ``ALT-UP``: vertical hi res (smaller)
2021-03-22 08:08:31 +00:00
* ``ALT-DOWN``: vertical hi res (bigger)
2018-02-10 17:33:54 +00:00
In order to properly appreciate the wider hi res graphics, open a big terminal window and choose a small font size.
Try ``CTRL-`` as well if ``ALT-`` does not work: terminals do not report a consistent keycode for these combinations.
The joystick uses evdev (``--device-name /dev/input/by-id/id_of_device``).
2018-02-10 17:33:54 +00:00
### qapple
This is based on Qt.
2018-02-10 17:33:54 +00:00
* keyboard shortcuts are listed in the menu entries
2019-11-22 20:50:02 +00:00
* graphics: runs the native NTSC code
* joystick: it uses QtGamepad
2018-02-10 17:33:54 +00:00
* emulator runs in the main UI thread
* Qt timers are very coarse: the emulator needs to dynamically adapt the cycles to execute
2019-11-10 19:38:42 +00:00
* the app runs at 60FPS with correction for uneven timer deltas.
2018-02-10 17:33:54 +00:00
* full speed when disk spins execute up to 5 ms real wall clock of emulator code (then returns to Qt)
2019-11-10 19:39:09 +00:00
* (standard) audio is supported and there are a few configuration options to tune the latency (default very conservative 200ms)
* Open Apple and Solid Apple can be emulated using AltGr and Menu (unfortunately, Alt does not work well)
2018-02-10 17:33:54 +00:00
2020-12-12 13:48:33 +00:00
### ra2
There is an initial [libretro](https://docs.libretro.com/development/cores/developing-cores/) core.
A retropad can be plugged in port 1 (with or without analog stick).
Keyboard emulation
* ``JOYPAD_R``: equivalent to ``F9`` to cycle video types
* ``JOYPAD_L``: equivalent to ``CTRL-SHIFT-F6`` to cycle 50% scan lines
* ``START``: equivalent to ``F2`` to reset the machine
In order to have a better experience with the keyboard, one should probably enable *Game Focus Mode* (normally Scroll-Lock) to disable hotkeys.
Video works, but the vertical flip is done in software.
2020-12-12 13:48:33 +00:00
Audio (speaker) works.
2020-12-12 13:48:33 +00:00
Must be manually configured:
``cmake -DLIBRETRO_PATH=/path/to/libretro-common``
Easiest way to run from the ``build`` folder:
``retroarch -L source/frontends/libretro/libra2.so ../Disks/NoSlotClockTest.dsk``
2020-12-12 13:48:33 +00:00
2018-02-10 17:33:54 +00:00
## Build
The project can be built using cmake from the top level directory.
2018-02-10 17:33:54 +00:00
qapple can be managed from Qt Creator as well and the 2 have coexisted so far, but YMMV.
### Checkout
```
git clone https://github.com/audetto/AppleWin.git --recursive
cd AppleWin
mkdir build
cd build
2021-03-22 08:08:31 +00:00
cmake -DCMAKE_BUILD_TYPE=RELEASE ..
make
```
### Fedora
On Fedora 35, from a fresh installation, install all packages from [fedora.list.txt](source/linux/fedora.list.txt).
2021-03-22 08:08:31 +00:00
### Raspberry Pi OS, Ubuntu and other Debian distributions
Install all packages from [raspbian.list.txt](source/linux/raspbian.list.txt).
2021-03-22 08:08:31 +00:00
You can use `sudo apt-get -y install $(cat raspbian.list.txt)` for an automated installation.
2020-12-04 21:03:57 +00:00
See [Travis](.travis.yml) CI too.
### Packaging
It is possible to create `.deb` and `.rpm` packages using `cpack`. Use `cpack -G DEB` or `cpack -G RPM` from the build folder. It is best to build packages for the running system.
## Speed
### Fedora
Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz
Full update = 582 MHz
| Video Stype | Video update |
| :--- | ---: |
| RGB Monitor | 39 |
| NTSC Monitor | 27 |
| Color TV | 25 |
| B&W TV | 27 |
| Amber Monitor | 31 |
### Raspbian
Pi 3B+
Full update = 54 MHz
| Video Stype | Video update |
| :--- | ---: |
| RGB Monitor | 5.3 |
| NTSC Monitor | 3.6 |
| Color TV | 2.6 |
| B&W TV | 2.9 |
| Amber Monitor | 4.5 |