Hi Gary,
Does this mean you have the source code for ultrascreen?
Thanks
Steve


On Tuesday, September 1, 2026, Gary Weber <[email protected]> wrote:

> Announcing UltrascreenNEC: a 60x10 small-font display for the PC-8201A /
> PC-8300
>
> Back in 2007, after getting in touch with Ultrasoft and the original
> Ultrascreen author, Daniel Born, I was able to make Ultrascreen100
> available to everyone who has a TRS-80 Model 100. What used to be a
> commercial product became freely available up on Club 100 in my Personal
> Library, thanks to both Daniel Born & Richard Eckerlin.  At that time as
> well, I floated an idea on this list: could Daniel Born's Ultrascreen100,
> that wonderful 1987 Ultrasoft TSR that squeezes a 60-column × 10-line
> display out of the Model 100's LCD, ever be brought to the NEC machines?
> I've picked this project up and put it back down more times than I can
> count. Today I can finally say it's real: UltrascreenNEC is working on
> hardware.
>
> Once installed, it hooks the console and renders a crisp small font that
> turns the PC-8201A/8300's 40×8 screen into a 60×10 one, across TEXT,
> TELCOM, and BASIC. It brings back SCREEN 0 / SCREEN 1 to flip between
> 40-column and 60-column modes on the fly, it installs and uninstalls
> cleanly (with a "REMOVE Ultrascreen? (Y/N)" confirmation), and the part I'm
> proudest of, it gives you a full-screen BASIC editor at 60 columns: arrow
> keys, insert mode, delete-and-close-the-gap, delete-to-end-of-line, the
> works. That last item is why this took so long.
>
> The challenges I had to overcome
>
> 1. The menu-flag wall: Where I got stuck, and reason #1 why this project
> got stalled.
>
> On the Model 100, the ROM only calls Ultrascreen's display hook when the
> small-font mode is actually active.  So when you drop back to the main
> menu, the hook simply doesn't fire and you get the normal menu. The NEC's
> console is wired differently: the hook I had to use fires on every
> character, unconditionally, with no such gate. The result was the small
> font bleeding right into the main menu and making a mess, complicated by
> the large-size and unaligned menu cursor. The Model 100 flag that would
> have gated it doesn't behave the same way on the NEC. This is the exact bug
> that stopped me cold in 2017. The fix turned out to be a NEC-only "menu
> mode" flag the ROM already maintains: once I found it and gated my
> rendering on it, the menu came back clean.
>
> 2. Writing a full-screen BASIC editor from scratch, because the Model 100
> never had one!  (Reason #1 why this project was stalled.)
>
> This is the big one, and it's the reason the original Ultrascreen100 code
> was no help here. Model 100 BASIC builds your command line in a keystroke
> buffer as you type. It doesn't let you use cursor keys to pop around the
> screen while in BASIC. However, the NEC has full-screen editing in BASIC,
> i.e. when you press ENTER, it doesn't read what you typed into an input
> buffer; it reads the data back off the screen, out of a 40-column character
> grid that the ROM keeps in RAM (320 bytes).  The 60-column display driver
> paints pixels straight to the LCD and never touches that upper RAM
> character grid, because it didn't need to. The NEC's ROM routines are no
> help here as they only support the 40x8 standard LCD. In fact the NEC
> PC-8241A CRT adapter also has to maintain its own full screen edit buffer
> in its own RAM area as well since 40x25 can't fit into the upper RAM area
> either.
>
> There was no shortcut: I had to A) maintain my own private 600 byte
> character shadow in parallel with the pixel display, and B) intercept the
> NEC's input path entirely and reimplement the full-screen editor myself.
> That means arrow-key cursor movement across all 60 columns, an insert mode
> with an underscore cursor, backspace and delete that pull the rest of the
> line in to close the gap, delete-to-end-of-line, clear-screen, all reading
> and writing my shadow so that when you hit ENTER, the right line goes to
> BASIC. None of this exists in the 1987 original Ultrascreen code; it simply
> wasn't an issue with the Model 100 due to the lack of full screen editing
> in BASIC.
>
> 3. Getting SCREEN 0 / SCREEN 1 back.
>
> This one's a cautionary tale. The flag Ultrascreen100 uses to decide "am I
> active?" quietly does two jobs on that machine; it also happens to encode
> the SCREEN mode. When I replaced the menu detection (challenge #1) with the
> NEC's menu flag, I unknowingly dropped the SCREEN 0/1 behavior along with
> it, because that same overloaded flag was carrying the mode. Once I traced
> it, with a big assist from studying how NEC's own PC-8241A CRT adapter ROM
> handles SCREEN, the fix was to layer both checks: the menu flag for the
> menu, the mode flag for 40-vs-60. Now SCREEN 0 drops you to a clean
> 40-column screen and SCREEN 1 brings the 60-column display right back just
> like Ultracreen100.
>
> 4. The uninstall saga.
>
> Cleanly removing a resident TSR from a CLEAR command turned into a cascade
> of NEC-specific gotchas. The NEC fires the CLEAR hook at a different point
> in the command than the Model 100 does, so the original approach threw a
> syntax error. Fixing that surfaced a hang: on the way out I was restoring
> one of my hooks to the ROM's "function-call error" address, which is
> harmless on the Model 100, but because the NEC calls that hook on every
> character printed, turned the first "Ok" prompt after removal into an
> infinite error loop. Sort that out and there's an interrupt-timing trap
> while the ROM relocates the stack, then the function-key labels going
> haywire because the screen width hadn't been reset to 40 on the way out.
> Each one was a small "same code, different machine" surprise. It now
> removes itself cleanly and hands all the memory back. And, since I'm
> reclaiming the one-shot install code automatically at install time, it's
> tidy about memory the whole way through.
>
> 5. Everything else that a 19-year project accumulates.
>
> There was the build/entry-point puzzle that made an early build crash the
> machine outright on launch, the function-key label geometry to get the
> 60-column labels laid out right, and a long tail of address verification
> between the two ROMs. Individually small, but collectively the reason this
> took the better part of two decades of on-and-off effort.
>
> To everyone on this list who's asked me about it over the years: thank you
> for your patience. It's a genuine thrill to finally hand this to the
> community that's been waiting for it.
>
> You'll find USCNEC.ZIP available for download here:
>    https://www.club100.org/memfiles/index.php?direction=
> 0&order=&directory=Gary%20Weber&
>
> -- Gary
>
> [image: image.png]
>
> P.S.  Before anyone asks: I've been trying to get in touch with Daniel
> Born, the original author and Copyright holder, but unfortunately my email
> for him bounces.   (There's also contacts with his name on LinkedIn but
> none match up.)  If I'm successful contacting him, I'll see if I can make
> source available for it under GPL v3.  But I just can't do it in good
> conscience yet.  All I have right now, officially, are binary distribution
> rights.
>
> --
> Gary Weber
> [email protected]
>

Reply via email to