{"id":1912,"date":"2026-06-25T09:22:30","date_gmt":"2026-06-25T07:22:30","guid":{"rendered":"https:\/\/www.gistlabs.net\/weblogs\/?p=1912"},"modified":"2026-06-25T09:25:12","modified_gmt":"2026-06-25T07:25:12","slug":"pom1-1-9-2-the-apple-1-emulator-becomes-a-dev-workshop-with-pom1-dev","status":"publish","type":"post","link":"https:\/\/www.gistlabs.net\/weblogs\/pom1-1-9-2-the-apple-1-emulator-becomes-a-dev-workshop-with-pom1-dev\/","title":{"rendered":"POM1 1.9.2 \u2014 the Apple 1 emulator becomes a dev workshop with POM1 DEV"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"660\" src=\"https:\/\/www.gistlabs.net\/weblogs\/wp-content\/uploads\/2026\/06\/3Dhat-1024x660.png\" alt=\"\" class=\"wp-image-1914\" srcset=\"https:\/\/www.gistlabs.net\/weblogs\/wp-content\/uploads\/2026\/06\/3Dhat-1024x660.png 1024w, https:\/\/www.gistlabs.net\/weblogs\/wp-content\/uploads\/2026\/06\/3Dhat-300x193.png 300w, https:\/\/www.gistlabs.net\/weblogs\/wp-content\/uploads\/2026\/06\/3Dhat-768x495.png 768w, https:\/\/www.gistlabs.net\/weblogs\/wp-content\/uploads\/2026\/06\/3Dhat-847x546.png 847w, https:\/\/www.gistlabs.net\/weblogs\/wp-content\/uploads\/2026\/06\/3Dhat.png 1416w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p><strong>POM1 1.9.2<\/strong> is here, and this release turns the Apple 1 emulator into a genuine <em>6502 development workshop<\/em>. The headline feature is <strong>POM1 DEV<\/strong> \u2014 the built-in <strong>DevBench<\/strong>, an Arduino-style editor that assembles your ASM or compiles your C with <code>cc65<\/code>, then runs it straight on the emulated machine without ever leaving the window. Celebrating <strong>50 years of the Apple 1 (1976 \u2192 2026)<\/strong>, POM1 remains the most complete Apple 1 emulator ever shipped: 13 one-click machine presets, 16 expansion cards, and 60+ ready-to-run programs.<\/p>\n<p>&#x1f449; <a href=\"https:\/\/www.gistlabs.net\/github\/POM1\/build-wasm\/POM1.html\"><strong>RUN POM1 1.9.2 in your browser<\/strong><\/a> (WebAssembly, no install) \u2014 or clone the sources: <code>git clone https:\/\/www.gistlabs.net\/github\/POM1.git<\/code><\/p>\n<p><!--more--><\/p>\n<h2>POM1 DEV: a 6502 workshop inside the emulator<\/h2>\n<p>The big idea of this release is to make POM1 far more than an emulator \u2014 a full <strong>development bench<\/strong>. The <strong>DevBench<\/strong> menu groups all the developer tools in one place:<\/p>\n<ul>\n<li><strong>POM1 Bench<\/strong> \u2014 an in-app &#8220;sketch&#8221; editor (cc65\/ca65). Write 6502 in assembly <em>or<\/em> C, assemble\/compile, and run in a single click. When you create a new sketch you pick a <strong>Language \u00d7 Machine<\/strong> pair (Assembly ca65\/ld65, or C cc65\/cl65) and POM1 drops in a matching &#8220;HELLO WORLD&#8221; starter for the target:\n<ul>\n<li><em>Apple-1 dual 4K\/8K<\/em> \u2014 plain text via the WozMon (<code>woz_puts<\/code> in C);<\/li>\n<li><em>P-LAB Graphic Card (TMS9918)<\/em> \u2014 Graphics I, with the build flashed into a persistent CodeTank dev cartridge and booted at <code>4000R<\/code>;<\/li>\n<li><em>Uncle Bernie GEN2 HGR<\/em> \u2014 HIRES text drawn with the Beautiful Boot font;<\/li>\n<li><em>Bernie GEN2 TXT<\/em> \u2014 the card&#8217;s native 40\u00d724 text mode.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Telemetry Side Channel<\/strong> \u2014 a live emulator telemetry feed.<\/li>\n<li><strong>TMS9918 VDP Inspector<\/strong> \u2014 always available: it auto-plugs the TMS9918 card so you can inspect VRAM and registers right away.<\/li>\n<li><strong>Silicon Strict Inspector<\/strong> \u2014 a single home for the silicon-strict timing model toggle and its diagnostics.<\/li>\n<\/ul>\n<p>Under the hood, POM1 ships a <strong>complete cc65 dev tree<\/strong>: single-file sketches (the <code>sketchs\/<\/code> folder), multi-file projects with Makefiles (<code>dev\/projects\/<\/code>: Rogue, Nyan Cat, Logo, mazes\u2026), and reusable libraries (<code>dev\/lib\/<\/code>) in both assembly (apple1, m6502, tms9918, hgr, chess\/sokoban games) and C (apple1c, gen2c, tms9918c). Guides are bundled, including two in French \u2014 an ASM guide (~790 lines) and a cc65 C guide.<\/p>\n<h2>Three graphics cards, half a century apart<\/h2>\n<p>POM1 runs three independent video cards side by side:<\/p>\n<ul>\n<li>the 1976 <strong>SWTPC GT-6144<\/strong> (64\u00d796, with bistable SRAM noise on power-up);<\/li>\n<li>Uncle Bernie&#8217;s <strong>GEN2 HGR<\/strong> (280\u00d7192, NTSC artifact colour);<\/li>\n<li>the <strong>P-LAB TMS9918<\/strong> (256\u00d7192, 32 sprites, 4 modes, silicon-strict timing model).<\/li>\n<\/ul>\n<p>This release consolidates a <strong>shared graphics library<\/strong> (<code>dev\/lib\/gfx\/<\/code>): the line\/circle\/rect\/ellipse routines and number\u2192ASCII conversions, once duplicated between GEN2 and TMS9918, are now factored out with a backend resolved at link time. A single source compiles for either card. Added on top: a multi-format &#8220;Beautiful Boot&#8221; font, the TMS9918 bitmap (Mode 2) graphics, a demoscene plasma demo, and several hardware tricks faithful to the original silicon.<\/p>\n<h2>A one-of-a-kind ecosystem<\/h2>\n<p>POM1 remains the only emulator that pushes the Apple 1 this far: its <strong>P-LAB CodeTank<\/strong> ships ready-to-flip cartridges (arcade games, a dungeon crawler, a LOGO turtle interpreter, graphics demos), rebuilt from source via <code>build_codetank_rom.py<\/code>. On the audio side, the <strong>A1-SID<\/strong> plays real SID chiptunes (hot-swappable 6581\/8580 chips through libresidfp); on the network side, the <strong>Wi-Fi modem<\/strong> dials real BBSes over TCP\/TELNET. Everything runs on the same cycle-accurate clock (1,022,727 Hz), with Klaus Dormann&#8217;s 6502 functional test pinned in CI.<\/p>\n<h2>Getting started<\/h2>\n<p>POM1 is built with Dear ImGui &amp; OpenGL \u2014 fast, lightweight, cross-platform (Linux, macOS, Windows, Web). For ASM\/C development, just install the <code>cc65<\/code> toolchain (<code>apt install cc65<\/code>, <code>brew install cc65<\/code>, etc.). Everything is GPLv3.<\/p>\n<ul>\n<li>&#x1f579;&#xfe0f; <a href=\"https:\/\/www.gistlabs.net\/github\/POM1\/build-wasm\/POM1.html\">Play in the browser (WebAssembly)<\/a><\/li>\n<li>&#x1f4be; Clone the mirror: <code>git clone https:\/\/www.gistlabs.net\/github\/POM1.git<\/code><\/li>\n<li>&#x1f419; GitHub repository: <a href=\"https:\/\/github.com\/habib256\/POM1\">github.com\/habib256\/POM1<\/a><\/li>\n<li>&#x1f4d6; Documentation and community discussion on <a href=\"https:\/\/www.applefritter.com\/content\/pom1-apple-1-emulator-cycle-accurate-c-rewrite-50th-anniversary-and-modern-development\">Applefritter<\/a><\/li>\n<\/ul>\n<p><em>POM1 was originally written in Java in 2000, then fully rewritten in modern C++ for the Apple 1&#8217;s 50th anniversary. Many thanks to Claudio Parmigiani (P-LAB), Uncle Bernie (GEN2 card), Rich Dreher (CFFA1) and the Applefritter community.<\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>POM1 1.9.2 is here, and this release turns the Apple 1 emulator into a genuine 6502 development workshop. The headline feature is POM1 DEV \u2014 the built-in DevBench, an Arduino-style editor that assembles your ASM or compiles your C with cc65, then runs it straight on the emulated machine without ever leaving the window. Celebrating &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/www.gistlabs.net\/weblogs\/pom1-1-9-2-the-apple-1-emulator-becomes-a-dev-workshop-with-pom1-dev\/\">Continue reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":1914,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,9],"tags":[583,580,582,584,581,579,553],"class_list":["post-1912","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-emulation","category-dev","tag-583","tag-apple-1","tag-cc65","tag-devbench","tag-emulateur","tag-pom1","tag-webassembly","item-wrap"],"_links":{"self":[{"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/posts\/1912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/comments?post=1912"}],"version-history":[{"count":2,"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/posts\/1912\/revisions"}],"predecessor-version":[{"id":1916,"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/posts\/1912\/revisions\/1916"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/media\/1914"}],"wp:attachment":[{"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/media?parent=1912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/categories?post=1912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gistlabs.net\/weblogs\/wp-json\/wp\/v2\/tags?post=1912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}