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] >
