1<!DOCTYPE html> 2<html> 3 4 <head> 5 <meta charset="utf-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="viewport" content="width=device-width initial-scale=1"> 8 9 <link rel="preconnect" href="https://fonts.googleapis.com"> 10 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 11 <link href="https://fonts.googleapis.com/css2?family=Fraunces:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500&family=IBM+Plex+Sans:wght@400;500;600&family=PT+Serif:wght@400;700&family=Russo+One&display=swap" rel="stylesheet"> 12 13 <link rel="stylesheet" href="/css/main.css"> 14 <link rel="stylesheet" type="text/css" href="/css/bootstrap.css" /> 15 <link rel="stylesheet" type="text/css" href="/css/custom-styles.css" /> 16 17 <title>1am Studios - Jeff Harris</title> 18 <meta name="description" content="Random hacks, tools, products, explorations of retro tech! I am software engineer, sometime entrepreneur, New Zealander living in San Francisco 19"> 20 <meta property="og:image" content="https://1amstudios.com/img/logo3.png"> 21 22 <link rel="canonical" href="http://1amstudios.com/"> 23 <link rel="alternate" type="application/atom+xml" title="1am Studios - Jeff Harris" href="http://1amstudios.com/feed.xml"> 24</head> 25 26 27 <body> 28 <header class="site-header"> 29 <div class="site-header__inner"> 30 <a class="site-brand" href="/"> 31 <span class="site-brand__name"><span class="site-brand__one">1</span>AM STUDIOS</span> 32 <span class="site-brand__kicker">Jeff Harris</span> 33 </a> 34 35 <nav class="site-nav" aria-label="Primary"> 36 <a href="/articles/">Articles</a> 37 <a href="/about/">About</a> 38 </nav> 39 40 <div class="site-social" aria-label="External links"> 41 <a href="https://github.com/jeff-1amstudios">GitHub</a> 42 <a href="https://www.youtube.com/user/1amStudios/videos">YouTube</a> 43 </div> 44 </div> 45</header> 46 47 <main class="site-shell"> 48 <section class="editorial-feature"> 49 <div class="editorial-feature__copy"> 50 <p class="section-kicker">Featured article</p> 51 <h1><a href="/articles/these-pixels-havent-been-seen-for-20-years/">These pixels haven't been seen by anyone for 20 years</a></h1> 52 <p>When I played this game back as a kid, I was fascinated with what lay beyond. It seems like the track keeps going. What is around the next bend, over the next hill?</p> 53 <p class="feature-card__meta">Need for Speed 1</p> 54 <a class="text-link" href="/articles/these-pixels-havent-been-seen-for-20-years/">Read article â</a> 55 </div> 56 <a class="editorial-feature__media" href="/articles/these-pixels-havent-been-seen-for-20-years/"> 57 <img src="/img/opennfs1/past-checkpoint-looking-back.jpg" alt="A Need for Speed track beyond the checkpoint"> 58 </a> 59</section> 60 61<section class="home-section"> 62 <div class="section-heading"><h2>Selected articles</h2><a class="text-link" href="/articles/">View all articles â</a></div> 63 <div class="selected-grid"> 64 65 66 <article class="selected-card"> 67 <a class="selected-card__media" href="/articles/cruisin-usa/"><img src="/articles/cruisin-usa/2026-08-attract-mode.jpg" alt="Cruis'n USA: rebuilding the arcade game from its original assembly"></a> 68 <h3><a href="/articles/cruisin-usa/">Cruis'n USA: rebuilding the arcade game from its original assembly</a></h3> 69 <p>How a released 1994 assembly codebase, the wrong version of the arcade ROM, MAME and a source-matching spider became a native SDL port of Cruis'n USA.</p> 70 </article> 71 72 <article class="selected-card"> 73 <a class="selected-card__media" href="/articles/dethrace/"><img src="/articles/dethrace/2022-01-textures.png" alt="Dethrace: rebuilding Carmageddon one function at a time"></a> 74 <h3><a href="/articles/dethrace/">Dethrace: rebuilding Carmageddon one function at a time</a></h3> 75 <p>How a forgotten symbol file became a native, verifiable rebuild of Carmageddonâand how AI is helping with the final assembly-level details.</p> 76 </article> 77 78 <article class="selected-card"> 79 <a class="selected-card__media" href="/articles/do-not-run-carma2-from-the-server/"><img src="/articles/do-not-run-carma2-from-the-server/success.png" alt="Do NOT run Carmageddon 2 from the server!"></a> 80 <h3><a href="/articles/do-not-run-carma2-from-the-server/">Do NOT run Carmageddon 2 from the server!</a></h3> 81 <p>During Carmageddon 2 development, there was a problem with people running Carmageddon 2 on "the server".</p> 82 </article> 83 84 <article class="selected-card"> 85 <a class="selected-card__media" href="/articles/reactivating-carmageddon-debug-output/"><img src="/articles/reactivating-carmageddon-debug-output/hangontoyerhelmet2.jpg" alt="Reactivating Carmageddon's debug output"></a> 86 <h3><a href="/articles/reactivating-carmageddon-debug-output/">Reactivating Carmageddon's debug output</a></h3> 87 <p>And yet...! The executable still contains those messages, so maybe we can re-enable them somehow.</p> 88 </article> 89 90 </div> 91</section> 92 93 </main> 94 95 <footer class="site-footer"> 96 <div class="site-footer__inner"> 97 <p class="site-footer__eyebrow">1AM Studios · Jeff Harris</p>
98 <p class="site-footer__copy">Random hacks, tools, products, explorations of retro tech! I am software engineer, sometime entrepreneur, New Zealander living in San Francisco 99</p> 100 </div> 101</footer> 102 103
104<script>
vendor: 339 bytes, lines 104-110
104 105 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 106 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 107 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 108 })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 109 110 ga('create', '
110UA-57331937-1
vendor: 39 bytes, lines 110-112
110', 'auto'); 111 ga('send', 'pageview'); 112
113</script>
113 114 115 116 </body> 117 118</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.