Hi Gary,

Excellent job, Sir!  I'm inspired to try out Ultrascreen100 on my M100
and M102 just to see how it compares to the Ultimate ROM offering.

Thank you for sticking with it and getting it over the finish line. 
Again, Well Done!

Regards,    Bert


On Tue, 2026-09-01 at 19:54 -0700, Gary Weber 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.
> 

Reply via email to