Me: mom, can I have Sega Channel
Mom: we have Sega Channel at home
Sega Channel at home:
Thought 1: someone should make a website that "rebroadcasts" Sega Channel in realtime, with a browser-based emulator
Thought 2: wait, has no one made a browser-based Nabu emulator yet??
Thought 3: I bet Marduk would be pretty easy to build with emscripten, I'd just need to build a new API for interfacing with JavaScript to fetch content
Thought 4: OR I could use Rust async to design a cycle-accurate emulator framework.......
Thought 5: oh no

I DEFINITELY do not have time to do the Rust thing.

I could _maybe_ get Marduk in the browser over Xmas break, assuming I'm still motivated in a week and a half.

oops, it's 2:30am again

currently I have to run nabud and websockify for this to work, which feels _very_ silly, but shit, it runs.

very slowly, for some reason, but I'm sure that's solvable.

Ideally I would integrate this with something like nabu.run, so it can run completely on the browser side without requiring me to run a server that has not been designed to be public-internet-facing
I figured out the reason it was so slow - the speed-throttling code was running _per-scanline_, so wasm execution was being suspended hundreds of times per frame. Reworked the throttling system to be more emscripten-friendly and it's running quite smoothly now.

I _think_ I've learned enough about emscripten's JS interface to redirect marduk's modem directly to https://nabu.run. There are a bunch of different mechanisms for linking stuff together, with various weird constraints, but I _think_ I can just tell the compiler to generate an ES6 module, and then pass a normal JS object to that module that can be referenced from inside the EM_ASM "inline JS" macro.

Still gotta turn Marduk into a preact component but that shouldn't be too hard.

nabu.run just wants a ReadableStream / WritableStream pair, which seems pretty straightforward to provide. Of course I haven't tested anything yet.
Aarrgghh, the nabu.run build is choking on my emscripten module for some reason, fuckin javascript
fuck yeah!!

OK, I think my web-based NABU Network emulator is in good enough shape to share!

https://www.information-superhighway.net/nabu/

The NABU was a Z80-based PC, released in 1983, that had all of its software delivered over a cable TV signal - like Sega Channel, but a decade earlier. It was only ever available in a handful of cities, including Ottawa, Canada, where it was developed.

Leo Binkowski, who worked at NABU creating arcade game ports, kept virtually everything, so you can experience it just like it was 1983.

Found a pamphlet with some hints for the weird-ass NABU text adventures and I'm trying my hand at Embassy Caper again

https://archive.org/details/nabu-know-it-all/page/7/mode/2up

It's not going great! But it's helping to take notes...

An interesting thing about the NABU text adventures is that they're clearly built on top of a database system that was never meant to be used as a game engine, and I'm reasonably certain there is no persistent state whatsoever besides which "location" you're in. So, they end up essentially being database thrillers?
I'm at the "reverse engineering the game data" stage of IF puzzle solving... All the text is ASCII, so I can clearly see all the responses, and I found where all the recognised input words are stored. But the thing I actually _need_ is "what is the set of question formats that are recognised by the game" and that's difficult to crack without going deep. I think I'm gonna grab one of the non-game database programs and try to reverse engineer it.
Like, having the word list is sort of helpful, but just because I can tell it recognizes "YOU" and "KNOW" doesn't mean I would ever in a million years think to type "YOU KNOW <Person>" to question a character about another character. But that's a really important one!
Keep hitting walls in my NABU projects that I don't have the energy to push past. Thought I could figure out why nabu.run was crashing loading the slideshow demo by diffing the traffic against DJ's internet adapter, but it turns out the whole download sequence diverges almost immediately? nabu.run is mostly just chucking the bytes directly from the file, but DJ's thing is clearly doing waaaay more magic for some reason...
According to Leo’s VCF-Montreal talk, It’s actually a markup language.
@AGMS00 I'm definitely looking forward to hearing more about it in the future talk he was hinting at!
@SpindleyQ One improvement you can make is to use "headless" mode to run a loader on the NABU emulator which will let you select which of the available things you want to load. That way you don't need the big menu of channels in your web app. On the other hand, the big menu does let people see what's available more easily without running the emulator. Screen shot of headless mode on the NABU...
@AGMS00 unfortunately none of the headless menus seem to work with the nabu.run internet adapter, I suspect because most of the RetroNET protocol is currently unimplemented. :/ I'd love to get things to the point where stuff like Cloud CP/M works, but that's going to take some elbow grease.
@SpindleyQ And of course, I use a lot of those RetroNet APIs in #NthPongWars for reading game graphics and level files off the network (much faster than CP/M which does sector by sector disk emulation).