{
    "archive_path": "archive/1789380389.570674",
    "base_url": "github.com/rh1tech/frank-386",
    "basename": "frank-386",
    "bookmarked_date": "2026-09-14 10:06",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/github.com/rh1tech/frank-386",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=github.com",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "github.com/rh1tech/frank-386.html"
    },
    "domain": "github.com",
    "extension": "",
    "hash": "8DFDZ7KWB6188JA4H4K7",
    "history": {
        "archive_org": [],
        "dom": [],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=github.com"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-14T10:11:19.266372+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1789380389.570674",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-14T10:11:18.811519+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://github.com/rh1tech/frank-386"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-14T10:11:19.905706+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1789380389.570674",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-14T10:11:19.275364+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [],
        "media": [],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://github.com/rh1tech/frank-386"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-09-14T10:11:39.587305+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1789380389.570674",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-14T10:11:34.770131+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmpz6s9fc6j",
                    "https://github.com/rh1tech/frank-386"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-09-14T10:11:34.759915+00:00",
                "index_texts": [
                    "FRANK 386\nOfficial page: frank.rh1.tech \u2014 hub for all FRANK boards and firmware.\ni386 PC Emulator for RP2350 (Raspberry Pi Pico 2) with VGA/HDMI output, SD card storage, PS/2 and USB keyboard/mouse, NES gamepad, and audio output.\nBased on Tiny386 by Chunhui He.\nFeatures\n\nFull i386 (and partially i486/i586) CPU emulation with optional x87 FPU\nUp to 8MB RAM (using 8MB PSRAM)\nVGA and HDMI graphics output (text modes and graphics up to 640x480)\nSound: AdLib OPL2, Sound Blaster 16, PC Speaker, Tandy, Covox, Disney Sound Source\nSD card support for floppy, hard disk, and CD-ROM images\nRuntime disk manager (Win+F12) for hot-swapping disk images\nSettings menu (Win+F11) for changing emulator configuration\nPS/2 keyboard and mouse input\nUSB keyboard and mouse input (via native USB Host)\nNES gamepad support with mouse emulation mode\nBoots DOS, Windows 3.x, Windows 95, Linux, and more\n\nScreenshots\nFRANK 386 in Action\n\n\n\n\n\nSupported Boards\nThis firmware is designed for RP2350-based boards with integrated VGA/HDMI, SD card, and keyboard input:\n\nFRANK - A versatile development board with VGA output\nMurmulator - A compact retro-computing platform based on RP Pico 2 (M1 and M2 variants)\nOlimex PICO-PC - Olimex RP2350 PC board\nWaveshare RP2350-PiZero - Waveshare RP2350 board\n\nHardware Requirements\n\nRaspberry Pi Pico 2 (RP2350) or compatible board\n8MB PSRAM (required for extended memory)\nVGA or HDMI connector\nSD card module (SPI mode)\nPS/2 keyboard (directly connected) - OR - USB keyboard (via native USB port)\nAudio output (optional): I2S DAC or PWM\n\n\nNote: When USB HID is enabled, the native USB port is used for keyboard/mouse input. USB serial console (CDC) is disabled in this mode; use UART for debug output.\n\nBoard Configurations\nFour GPIO layouts are supported: M1, M2, PC (Olimex), and Z2 (Waveshare).\nVGA / HDMI\n\n\n\nSignal\nM1 GPIO\nM2 GPIO\n\n\n\n\nBase\n6\n12\n\n\nRange\n6-13\n12-19\n\n\n\nSD Card (SPI mode)\n\n\n\nSignal\nM1 GPIO\nM2 GPIO\n\n\n\n\nCLK\n2\n6\n\n\nCMD\n3\n7\n\n\nDAT0\n4\n4\n\n\nDAT3/CS\n5\n5\n\n\n\nPS/2 Keyboard\n\n\n\nSignal\nM1 GPIO\nM2 GPIO\n\n\n\n\nCLK\n0\n2\n\n\nDATA\n1\n3\n\n\n\nPS/2 Mouse\n\n\n\nSignal\nM1 GPIO\nM2 GPIO\n\n\n\n\nCLK\n14\n0\n\n\nDATA\n15\n1\n\n\n\nNES/SNES Gamepad\n\n\n\nSignal\nM1 GPIO\nM2 GPIO\n\n\n\n\nCLK\n14\n20\n\n\nDATA\n16\n26\n\n\nLATCH\n15\n21\n\n\n\nI2S Audio\n\n\n\nSignal\nM1 GPIO\nM2 GPIO\n\n\n\n\nDATA\n26\n9\n\n\nBCLK\n27\n10\n\n\nLRCLK\n28\n11\n\n\n\nSD Card Setup\nDirectory Structure\nCreate a 386/ directory on your SD card:\nSD Card Root/\n\u2514\u2500\u2500 386/\n    \u251c\u2500\u2500 config.ini      # Configuration file\n    \u251c\u2500\u2500 bios.bin        # SeaBIOS ROM (required)\n    \u251c\u2500\u2500 vgabios.bin     # VGA BIOS ROM (required)\n    \u251c\u2500\u2500 dos622.img      # Hard disk image\n    \u251c\u2500\u2500 boot.img        # Floppy image\n    \u2514\u2500\u2500 ...             # Other disk images\n\nBIOS Files\nDownload SeaBIOS and VGA BIOS from the SeaBIOS releases or use bios.bin/vgabios.bin from sdcard/386.\nConfiguration File (config.ini)\nCreate 386/config.ini:\n[pc]\nmem=8M\nbios=bios.bin\nvga_bios=vgabios.bin\n\n[frank-386]\ncpu_freq=504\npsram_freq=166\nPreparing Disk Images\nFloppy Images (.img):\n\nStandard 1.44MB floppy images (1474560 bytes)\nCreate with: dd if=/dev/zero of=floppy.img bs=512 count=2880\nFormat with DOS or use pre-made DOS boot disks\n\nHard Disk Images (.img):\n\nRaw disk images up to 2GB\nCreate with: dd if=/dev/zero of=hdd.img bs=1M count=512\nUse FDISK and FORMAT from DOS to partition and format\n\nCD-ROM Images (.iso):\n\nStandard ISO 9660 images\nUse CD burning software to create ISOs from CDs\n\nLoading Disk Images\nAt Boot:\nConfigure disk images in config.ini as shown above.\nAt Runtime (Disk Manager):\n\nPress Win+F12 to open the Disk Manager\nUse arrow keys to select a drive (A:, B:, C:, D:, E:)\nPress Enter to browse disk images in the 386/ directory\nSelect an image file to insert, or eject the current disk\nPress Escape to close the Disk Manager\n\nChanges made via Disk Manager are saved to config.ini automatically.\nControls\nKeyboard Shortcuts\n\n\n\nShortcut\nAction\n\n\n\n\nWin+F12\nOpen Disk Manager\n\n\nWin+F11\nOpen Settings Menu\n\n\nCtrl+Alt+Delete\nSystem reset (sent to guest OS)\n\n\n\nSettings Menu (Win+F11)\nConfigure emulator settings at runtime:\n\nMemory size (1-8 MB)\nCPU generation (386/486/586)\nFPU emulation on/off\nSound devices (AdLib, SB16, PC Speaker, Tandy, Covox, MPU-401, DSS)\nPS/2 or USB Mouse on/off\nNES Mouse on/off (emulate mouse with NES gamepad D-pad, B=left click, A=right click)\nRP2350 CPU frequency and voltage\nPSRAM / Flash frequency\n\nSettings are saved to config.ini and take effect after restart.\nDisk Manager (Win+F12)\nManage disk images without restarting:\n\nInsert/eject floppy images (A:, B:)\nInsert/eject hard disk images (C:, D:)\nInsert/eject CD-ROM images (E:)\n\nBuilding\nPrerequisites\n\nInstall the Raspberry Pi Pico SDK (version 2.0+)\nSet environment variable: export PICO_SDK_PATH=/path/to/pico-sdk\nInstall ARM GCC toolchain\n\nBuild Steps\n# Clone the repository\ngit clone https://github.com/rh1tech/frank-386.git\ncd frank-386\n\n# Build with default settings (M2 board, 378MHz, PS/2 keyboard)\n./build.sh\n\n# Build for M1 board\n./build.sh -M1\n\n# Build with USB keyboard support\n./build.sh --usb-hid\n\n# Custom build\n./build.sh -b M1 -c 504 -p 166 --debug\nBuild Options (build.sh)\n\n\n\nOption\nDescription\n\n\n\n\n-b, --board <M1|M2|PC|Z2>\nBoard variant (default: M2)\n\n\n-c, --cpu <MHz>\nCPU speed: 378 (default), 504\n\n\n-p, --psram <MHz>\nPSRAM speed: 133 (default), 166\n\n\n--usb-hid\nEnable USB keyboard (disables USB serial)\n\n\n--hdmi\nForce HDMI output\n\n\n--debug\nEnable debug output\n\n\n-clean\nClean build directory first\n\n\n\nBuild Options (CMake)\n\n\n\nOption\nDescription\n\n\n\n\n-DPICO_BOARD=pico2\nBuild for RP2350 (default)\n\n\n-DBOARD=M1\nUse M1 GPIO layout\n\n\n-DBOARD=M2\nUse M2 GPIO layout (default)\n\n\n-DBOARD=PC\nUse Olimex PICO-PC layout\n\n\n-DBOARD=Z2\nUse Waveshare RP2350-PiZero layout\n\n\n-DCPU_SPEED=378\nCPU clock in MHz (378, 504)\n\n\n-DPSRAM_SPEED=133\nPSRAM clock in MHz (133, 166)\n\n\n-DUSB_HID_ENABLED=ON\nEnable USB keyboard (disables USB serial)\n\n\n-DDEBUG_ENABLED=ON\nEnable verbose debug logging\n\n\n-DFORCE_HDMI=ON\nForce HDMI output\n\n\n\nRelease Builds\nTo build all firmware variants:\n# Interactive (prompts for version)\n./release.sh\n\n# With version number\n./release.sh 1.02\nThis creates firmware files in the release/ directory:\n\nfrank-386_m1_<version>.uf2 - M1 board (Murmulator)\nfrank-386_m2_<version>.uf2 - M2 board (Murmulator)\nfrank-386_pc_<version>.uf2 - Olimex PICO-PC\nfrank-386_z2_<version>.uf2 - Waveshare RP2350-PiZero\n\nFlashing\n# With device in BOOTSEL mode:\npicotool load build/frank-386.uf2\n\n# Or use the flash script:\n./flash.sh\nTroubleshooting\n\"0 bytes of memory\" during Windows 95 setup\nUse setup /im to bypass memory check.\n\"Protection error\" during Windows 95 startup\nUse patcher9x.\nEnable mapdrive.com support (redirector) to map SD-card to network-attached-drive H\nSet redirector = 1 in config.ini.\nNo keyboard input\n\nFor PS/2: Check keyboard connection and GPIO pins\nFor USB: Ensure firmware was built with --usb-hid option\n\nSD card not detected\n\nEnsure SD card is formatted as FAT32\nCheck SD card module connections\nVerify 386/ directory exists on SD card\n\nLicense\nMIT License. See LICENSE for details.\nAuthors & Contributors\nMikhail Matveev & DnCraptor\n\nfrank-386 port and development (2026)\nRepository: https://github.com/rh1tech/frank-386\n\nAcknowledgments\nThis project is based on the following open-source projects:\nTiny386\n\nProject: Tiny386 - x86 PC Emulator\nAuthor: Chunhui He\nLicense: BSD 3-Clause\nDescription: The core i386 CPU emulator and PC peripheral emulation (8259 PIC, 8254 PIT, 8042 keyboard controller, VGA, sound devices).\n\nPico-286\n\nProject: Pico-286\nAuthor: xrip\nLicense: MIT\nDescription: RP2350 platform integration, disk management, VGA driver concepts.\n\nQuakeGeneric\n\nProject: QuakeGeneric\nAuthor: DnCraptor\nLicense: GPL v2\nDescription: RP2350 hardware integration patterns, Murmulator platform support, and PS/2 mouse driver implementation.\n\nQEMU\n\nProject: QEMU\nAuthors: Fabrice Bellard (2003-2017), Vassili Karpov \"malc\" (2003-2005), Joachim Henke (2006)\nLicense: MIT\nDescription: PC peripheral emulation code including 8259 PIC, 8254 PIT, 8257 DMA, 8042 keyboard controller, PCI bus, PC speaker, VGA, and AdLib OPL2 proxy.\n\nMAME FM Sound Generator\n\nProject: MAME\nAuthor: Tatsuyuki Satoh (1999-2000)\nLicense: LGPL 2.1+\nDescription: FM OPL sound generator (fmopl) for AdLib emulation, forked from MAME and relicensed under LGPL.\n\ninih\n\nProject: inih\nAuthor: Ben Hoyt (2009-2020)\nLicense: BSD 3-Clause\nDescription: Simple INI file parser for configuration file handling.\n\nSeaBIOS\n\nProject: SeaBIOS\nAuthors: Kevin O'Connor and contributors\nLicense: GNU LGPL v3\nDescription: x86 BIOS and VGA BIOS firmware.\n\nFatFs\n\nProject: FatFs\nAuthor: ChaN (2014, 2021)\nLicense: FatFs License (BSD-style)\nDescription: Generic FAT filesystem module for SD card access.\n\nFatFs Utilities\n\nAuthor: Carl John Kugler III (2021)\nLicense: Apache 2.0\nDescription: FatFs utility functions for error handling and result string conversion.\n\nRaspberry Pi Pico SDK\n\nProject: Pico SDK\nAuthor: Raspberry Pi (Trading) Ltd. (2020)\nLicense: BSD 3-Clause\nDescription: PIO SPI driver for SD card communication."
                ],
                "output": "readability",
                "pwd": "/data/archive/1789380389.570674",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-14T10:11:28.304478+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://github.com/rh1tech/frank-386"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-14T10:11:28.296595+00:00",
                "index_texts": null,
                "output": "GitHub - rh1tech/frank-386: Tiny386 port to RP2350 \u00b7 GitHub",
                "pwd": "/data/archive/1789380389.570674",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-14T10:11:28.206471+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--backup-converted",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--warc-file=/data/archive/1789380389.570674/warc/1789380679",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "https://github.com/rh1tech/frank-386"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-09-14T10:11:28.193787+00:00",
                "index_texts": null,
                "output": "github.com/rh1tech/frank-386.html",
                "pwd": "/data/archive/1789380389.570674",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-14T10:11:19.917813+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": null,
        "dom": null,
        "favicon": "favicon.ico",
        "git": null,
        "media": null,
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "GitHub - rh1tech/frank-386: Tiny386 port to RP2350 \u00b7 GitHub",
        "warc": null,
        "wget": "github.com/rh1tech/frank-386.html"
    },
    "link_dir": "/data/archive/1789380389.570674",
    "newest_archive_date": "2026-09-14T10:11:34.770131+00:00",
    "num_failures": 0,
    "num_outputs": 6,
    "oldest_archive_date": "2026-09-14T10:11:18.811519+00:00",
    "path": "/rh1tech/frank-386",
    "schema": "Link",
    "scheme": "https",
    "snapshot_id": "dbc4b18a-58ad-48aa-86f0-c34554964567",
    "sources": [
        "/data/sources/1789380389-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1789380389.570674",
    "title": "GitHub - rh1tech/frank-386: Tiny386 port to RP2350 \u00b7 GitHub",
    "updated": "2026-09-14T10:11:18.811068+00:00",
    "updated_date": "2026-09-14 10:11",
    "url": "https://github.com/rh1tech/frank-386"
}