Files
libretro/emulators/eternal.yml
T
Abdessamad Derraz 4231902a6c docs: write prose without dashes or semicolons
Profiles, the wiki, comments, docstrings, command output and schema descriptions carried em-dashes, clause-joining semicolons, unicode arrows, box-drawing banners and check-mark glyphs. Each sentence was rewritten rather than having its character swapped. Hashes, paths, source_ref values and every cited file:line are unchanged, which a comparison of each parsed profile against the previous revision confirms.

validate_pr comments now say PASS and FAIL in words, and source_ref values in a profile's structured blocks render as code. test_prose_style fails if any of these comes back, in tracked files or in the generated site.
2026-10-19 06:47:31 +02:00

55 lines
2.6 KiB
YAML

emulator: Eternal Computer
type: libretro
core_classification: community_fork
source: "https://codeberg.org/iyzsong/eternal-libretro"
upstream: "https://github.com/adriancable/eternal"
source_commit: "13adf143aea822ebc1ee23722a80e93a7979e4c9"
upstream_commit: "17c8ab87de7f308f48f4990ed62c48b86173797d"
profiled_date: "2026-09-17"
core_version: "0.0"
display_name: "Eternal Computer"
cores:
- eternal
systems:
- eternal-computer
notes: |
Virtual machine for the Eternal Software Initiative architecture, a Subleq
variant with indirect operands, a keyboard port, a console port, a wall
clock at word 64 and a timer interrupt through word 0. Adrian Cable's
reference machines are vm/vm.c (SDL3 framebuffer) and vm/vm_console.c,
and the libretro core by iyzsong carries the same loop in libretro.c:186-222.
Machine memory is a static array of 3<<27 words, 1.5 GiB, cleared again
when the content is unloaded (libretro.c:360-364). The framebuffer is its
last 800x512 words (libretro.c:9-13, 22-23), pushed to the frontend as
XRGB8888 on every retro_run (libretro.c:330-334).
The content is the whole machine image. retro_load_game copies the buffer
the frontend hands over to word 0, refuses an image larger than memory and
starts the interpreter on a thread (libretro.c:302-314). need_fullpath is
false and the accepted extensions are capsule and bootimage
(libretro.c:275-282). The upstream machines fread the same file into mem
(vm/vm.c:45-48, vm/vm_console.c:32).
A boot image comes out of tools/make_boot_image.py applied to a Subleq ELF:
a boot block of text_start bytes, with the interrupt vector at word 0, the
saved PC at word 1, the initial stack pointer at word 4, the framebuffer
word address at word 6 and the constants 0, -1 and 1 at words 36, 38 and
39, followed by the flat binary (tools/make_boot_image.py:34-68). The
upstream repository ships capsules/vmlinux.bootimage.xz, ESI Linux with
busybox, Doom, nano, lynx and htop in its initramfs, 110 MiB once
decompressed. The frontend does not open xz, so the image is decompressed
before loading.
Nothing else is read. retro_set_environment registers the log interface and
the keyboard callback and nothing more (libretro.c:238-249), and the core never
asks for a system, save or content directory and opens no file itself.
Keyboard events are translated to USB HID usage IDs and queued eight deep
(libretro.c:36-184). Console output goes to the host stdout with write
(libretro.c:205-206). A fetched C of zero halts the machine and asks the
frontend to shut down (libretro.c:196-199). No savestate
(libretro.c:336-339), no memory map, no audio.
files: []