These Weeks in FujiNet – Weeks 42, 43, 44, 45
Welcome back again to another TWIF – This Week in FujiNet. This is a catch-up edition covering a whopping 4 weeks of FujiNet progress across most of October and the start of November 2022. The weather was warm on the east coast all October and even into November, with some balmy days — but as I write this it’s settled into a more colder clime with 40 and 50 degree days making it finally feel like the start of an east-coast fall. With the chiller weather and darkened evenings comes more reasons to stay indoors and use your FujiNet.
The Atari platform has some major developments as some interesting projects that utilize the power of the FujiNet pick up steam and mature. Two of those projects are so interesting that I’ve broken them out into independent postings that you’ll find on this blog, with mentions below about them.
This edition of This Week In FujiNet covers these dates in 2022:
- 42 – Oct 16 – 22n
- 43 – Oct 23 – 29th
- 44 – Oct 30 – Nov 4th
- 45 -Nov 6 – 11th
There is a new platform! The rc2014 is a Z80 homebrew system that now boots Fujinet and has a working CONFIG thanks to @jskists and his work. More info below in the rc2014 section.
The C64 FujiNet is real- @mozzwald completed an initial design and had some testing boards made. It boots FujiNet- no more need to use an Apple FujiNet board. More info in the Commodore section below.
Update: The Vintage Computer Center is closing its doors by the end of this year! See the link below and grab some FujiNets while they are available (they are also available from other vendors, but VCC was a huge supplier of excellent boards to many many people! I’m very sad to see the VCC close up shop.
Where to purchase a device:
- FujiNet Official Site
- Buy A FN Device from Vintage Computer Center
- Buy A FN Device from Arcade Shopper
- Purchase a FujiNet device from TBA – The Brewing Academy
- Antonio @masteries on AA Sells FujiNets from Spain – now Apple2, Atari & ADAM
You can find more information about the FujiNet project
- GH Project Wiki Pages for Devices Hacking & Coding
- Join our Discord and learn and contribute
- The FujiNet Facebook Group has interesting discussions
Check Mr. Robot’s Live Fujinet Server Status – where to connect with your FN
FujiNet Flasher – keep your FN up2date for best results.
- LinguaXE v0.1 – translator for Atari XL/XE – Amazing demo of FujiNet access remote web services to provide real-time text translations on your Atari, with Amazing D/L graphics and unicode.
- First prototype test of #FujiNet / Meatloaf for #Commodore64 – Mozzwald shows a peek of the very first ever prototype board build for the Commodore 64 FujiNet board. Now with LED support.
- First Look: compact FujiNet from Europe! – Javier Rivera @javmaster takes us thru a hands on demo of the AppleII FujiNet board available today from Masteries in Spain (see above).
- Fujinet Exhibit at Kennett Classic – Eric Rangell demos two FujiNets at the recent Kennett Classic Retro Computer Show (In PA).
- Visit FujiNet CP/M with Altirra – apc takes us thru using Altirra with a real FujiNet.
- 1985: Making TEXT ADVENTURE Games | Micro Live | Retro Gaming | BBC Archive – 8 min. of cool Infocom tech from 1985.
- The RS-232 protocol – Ben Eater adds RS232 to his 6502 board computer and explains how RS232 works along the way.
@dotmatrix, @seatsafetyswitch, @HenryR and @Ron Klein worked on ADAM testing and getting some new ADAM systems up and working. The difference between the ADAM System and the ADAM Expansion was explored.
@erangell popped in and was asking about apple2, TNFS and MIDI. He has a video of his demo at Kennett Classic above in the video section.
erangell: OK Thanks. I will demo serving Atari and Apple disk images from TNFS on a Raspberry PI on November 5 at kennettclassic.com: https://www.kennettclassic.com/calendar-2022/
@robj has been building a number of small test harness apps that work the SmartPort routines in the FujiNet code – pushing them to copy and write test files across the different SP interfaces (IIGS,IIC,YellowStone, etc…) to iron out all the edge cases in the FujiNet Apple implementation. He recently enhanced it to support the largest disk ‘image’ that the SP can support:
robj: I had a bit of a play supporting the full 24bit block numbers in the test util. That’s a big disk image that SP supports! Seems the IIgs will can support up to 2Gb images using the hfs file system. It can’t boot off them, but can use them as secondary storage image. I’m running out of room with the 40 column display, so trimmed/rearranged the output screen.
These apps are used by a number of testers to QA the releases by JeffP as he works to re-factor some of the SP code in the project to better support the planned DISKII enhancements coming after SmartPort.
Jeff Piepmeier: I’m (slowly) consolidating the packet handling routines. My goal is to have a single function the devices call to send a packet. It will take in the necessary arguments for the different uses.
Jeff Piepmeier: Then I will move all the 7+1 GCR code out of the devices into the low level lib.
Thom Cherryhomes: excellent 🙂
More re-factoring by Jeff:
Jeff Piepmeier: The devices no longer need to deal with smartport/iwm low-level details (except for decoding the command packet – i will look into that next). The bus class does the calls to the low-level class. It’s looking like it’ll be easier to create a low-level slot interface class and slip it in without having to rewrite the bus and devices. I think we can just send smartport packets (no GCR coding needed) back and forth, using 4-phase handshaking. At least that’s a hope.
Many rounds of testing by Ron Klein, running the SP Test Utility from robj.
JeffP encountered the ESP32’s ability to easily multi-task!
Jeff Piepmeier: @Thom Cherryhomes for some silly reason I had never tried messing with the web interface. I can navigate TNFS servers while the SP TEST is running!
Jeff Piepmeier: i’m just blown away by this … i mounted a disk in slot 3 using the browser and the SPTEST is just banging away at the image in slot 2. no sweat.
By Nov 7th Jeff was done and had merged his re-factor back into master for the project…
Jeff Piepmeier: @hereI merged the refactoring branches into master with this comment “Moved all SmartPort low-level code out of devices mostly into iwm_ll.cpp with accesses done by the iwmBus class. Decode the command packet so devices can access decoded parameters. Both changes should ease creating a slot based interface.”
More testing is going on now. So far no major blockers.
There is a lot going on in the Atari Space! I’ve broken out some items into their own postings to better explain and track them. I’ll mention them briefly in the platform review but here are the links to read them:
So Thomas Cherryhomes (TCH) posted in Atari Age on October 9th: “Storing game high scores for legacy games on TNFS servers.”
Had a thought, bytes 11-14 on the ATR file format are not used.
use bytes 11 and 12 to specify a single sector which can be marked as read-write, despite the mounted mode of the disk image.
The purpose is to mark a sector that can store high scores on public TNFS servers.
If sector is accessed, cache is always flushed, and WRITEs to this sector cause a temporary re-open as read-write using a secondary file descriptor, which is then immediately closed.
What has ensued from that idea has been one of the most fun and easy (for the end-user) developments in recent Atari history. @TCH has combined one neat trick, the power of the FujiNet device, and some really hard work patching games to come up with a system that allows anyone with a FujiNet to download a patched game, play it, and if you are good enough persist your own High Score back up to the source disk for anyone else to immediately see as they boot the same game… and so on and so on. I’m calling this AHSS – Atari High Scoring System.
More on the AHSS at my blog post for it. For now I’ll just review what happened in Discord…
@DjayBee helped with patching some games for AHSS..
NOS was updated (by @DaBaBa) with a feature to support auto executing a batch file upon boot. This was an important update, and this is discussed in more details in my NOS blog post!
Thom Cherryhomes: @Michael Sternberg somebody came by and added autoexec.bat support to NOS.
Michael Sternberg: I finally reviewed it yesterday. Very, very clever. I knew there was a need for autoexec but I didn’t have any good ideas on how it could be implemented.
Thom Cherryhomes: yup 🙂
Thom Cherryhomes: I’m thinking through in my head how digging into disk images could be implemented…
Thom Cherryhomes: am exploring the possibility of using a channel mode to do so (like is done with JSON and XML currently)
Thom Cherryhomes: or via #.
TCH continued to add more games to AHSS… Tuttifrutti, Wizard of Wor, GORF, Lode Runner, Flak, and others. Big support from @DjayBee as they tore thru a decent amount of games in the past month.
There was some discussion with @mozzwald, @Schadret (github: frachel) referencing an AA thread about TNFS links, and about having a hard-coded or pre-defined HOST slot in CONFIG that would point to a highly-available TNFS server that would know about all currently live TNFS servers for some sort of auto-discovery for users. While an interesting idea – it may be pursued in the future no-one has current plans on implementing it yet. AA1 and AA2
Andy Diller (me) started a conversation about why FujiNet PC can’t just get ‘new versions’ of the FujiNet firmware – I was asking as the High Score games required a new Firmware build to recognize the ATR header changes, but FujiNet PC (FNPC) didn’t have those new features till @apc (the creator and genius behind FNCP) merged in the new changes from the FujiNet PlatformIO into FNPC and created a new release.
It boiled down to my mistaken assumption that FNPC was an emulation of the FujiNet on the PC – and so therefore could just consume a new firmware file as part of its emulation. But it’s not an emulation it’s a port of all the ESP32 calls into a POSIX compatible application that just makes FujiNet itself into an application.
andy diller: ok but even porting the c code- wouldn’t you need something like RTOS on the other end to deal with it? or you bypassed PIO all together and did like the ‘raw Fujinet code’?
apc: found many RTOS calls similar to POSIX, it was more difficult to make windows port vs linux and mac
On the amazing origin of FujiNet-PC:
apc: the whole FN-PC is a challenge for me, was not coding in C/C++ for decades, then on AA Thom said “it is doable”
Which may be the biggest understatement of 2022 in my opinion.
Thom has another idea
Thom Cherryhomes: I’m instigating a thing over on ABBUC. They have their pd-Collection up on FujiNet, and a corresponding PDF file generated from a database. Am asking them for a dump of the db to do a proof of concept to make a simple front-end to it. https://abbuc.de/forum/viewtopic.php?f=32&t=1050
Abbuc is planning to figure something out to allow searches from the Atari. Meanwhile @tch also designed some logos for the group.
@hideehoo popped in to announce he has a new case for this “thru-hole” version of the FujiNet board. His designs are available on GitHub, both the FujiNet device and now the case for it.
@TCH ended up having to create a High Score system from scratch for PacMac, but since the source is available he hacked out a new version (with a lot of work) that not only supported the AHSS but he even fixed the color of Inky.
Thom Cherryhomes: @here modified PAC-MAN player color palette, because INKY is supposed to be BLUE damn it!
With Pacman up I was able to scramble and get my own initials up on the AHSS! I post an image of the web-based leader board system here for posterity:
NOS and Binary Loads
Michael Sternberg: The issue with the binary loader had to do with interpreting an EOF. To mitigate, I added a call to status while reading the payload header. So if the EOF wasn’t correctly detected, it would hit the EOF while trying to read the next (non-existing) header.
However the binary loader doesn’t rely on the handler code. When the loader is solved, it will be moved into the handler and NOS will perform a binary load via CIO.
@mnemo continues his work on preserving Atari disks, since he has a flux reader now (Greaseweazle) for atari drives and can image more disks. @DjayBee offered support to get a8rawconv working on some floppies.
mnemo: LOTS of errors from a8rawconv
DjayBee: 0-40 is OK. It only tries to read one more track to the inside. According to ijor you sometimes find interesting data from disk mastering.
Connect the XF to an Atari and format a disk on it. Then try to dump this disk using the GW.
On October 30th @TCH posted that he was porting some FujiNet commands from the ADAM work back into the Atari.. and he also mentioned FBASIC…
Thom Cherryhomes: is porting the Adam fmount to Atari, as it is a better program.
Thom Cherryhomes: There is a ready to run version of dmsc’s excellent FastBASIC 4.4 in the @ABBUC Public Domain library, complete with manual and example programs. This is a great way to quickly write programs that take full advantage of the atari8bit, and with the #FujiNet, you can quickly access it using the abbuc.social TNFS! Try it today!
Just within the day @tch had the idea to bring some FujiNet commands directly into FBASIC- and posted as much on an AA thread with the author of FBASIC @dmsc.
Thom Cherryhomes: fastbasic is a good idea to add direct fujinet support for, as it has tons of useful features, is very fast, and compiles down to small code.
[8:54 PM]Thom Cherryhomes: some of the things i’ve seen with it, with regards to the 10L BASIC contest, are mind blowing.
@tch began his work to implement FujiNet commands into FBASIC but his some roadblocks. After some postings on AA the author of FBASIC came over on Nov. 5th to the Discord to help!
dmsc: I’m ready to answer questions about the FastBasic parser 🤪
And they dove right in.
dmsc: FastBasic VM is stack based, with one 16 bit acumulator (stored at AX) and one 16 bit address register (stored at SADDR). So, POKE A, B is translated to “LOAD A; more to SADDR; LOAD B; store into SADDR location.
Thom Cherryhomes: also, I saw a string expression token somewhere….can I use that? 😉
Thom Cherryhomes: ok, gonna pull and rebuild
dmsc: You have “STR_EXPR”: expects a string, can be a constant or variable
Thom Cherryhomes: that’s what I thought I saw.
dmsc: only problem with that, it is not expected to be written to – it would be up to the user to guarantee that the string is initialized.
dmsc: for example, if you pass a constant string “x”, the compiler will pass you the address of that constant inside the code.
Thom Cherryhomes: well it would be used e.g. for the argument for nopen.
dmsc: as you would only read from it, it is ok.
Thom Cherryhomes: ok cool
Thom Cherryhomes: gonna try again to do nopen in the order I want it.
dmsc: For a first version would be ok, but a next version could include proper asm code to handle it better. Currently FastBasic has a routine get_str_eol that copies a string to LBUFF and adds a $9B to the end.
Thom Cherryhomes: gotcha.
@tch’s initial list of commands to implement:
Thom Cherryhomes: ok, will implement the rest of the commands, what I basically think should happen:
* sio for everything else
@tch hit this one hard and by Nov 6th there was a PR for @dmsc to incorporate his work into FBASIC. He later posted a complete sample Mastodon client in FBASIC using FujiNet.
Thom Cherryhomes: finishes up a mastodon example client in fastbasic
SSH Protocol Adapter
Out of nowhere Mark J Fisher (@fenrock) comes and ports over libssh to use on the ESP32. Now you can ssh on your Atari to most any modern system using SSH. He appeared on the discord and patiently went thru the dev onboarding experience with Platform IO and worked out getting a dev system on his end. And we found out soon enough what he was doing with it as on November 3rd he announced:
fenrock: I’ve ported libssh to fujinet, just looking to test it.
By porting I mean I’ve hacked the living fuck out of libssh from https://github.com/tnn2/esp-idf-libssh and amend SSH.cpp/h to use it.
How do I load netcat into my spartados session? I’ve got the amended SDX that has the N/R utils loaded, but it doesn’t have “nc”, so is there an atr I can mount that includes it?
And just like that FujiNet has another protocol adapter! And this is a big one. SSH from your Atari to any modern system that supports ssh.
TNFS (trivial networking file system) has been the backbone of the FujiNet project allowing remote systems to easily host the files that the FujiNet needs to mount disk images for all the platforms. The TNFS service was originally written as part of the Spectranet project, to bring networking to the Spectrum computers. Apparently the author (Dylan Smith) has caught wind of this project and it’s growing popularity as he send this message to @tch:
Given that tnfsd is being used in much more than the Spectranet these days, I’m planning some time soon to move it to its own github repository. I also recently got an Atari 800 XL and a FujiNet, really nice device.
Atari CONFIG now back common CONFIG repo
As FujiNet was first an Atari only project, the FN Atari CONFIG (the program that auto loads when turning on the Atari and lets you configure the FN device) was the first and only CONFIG created. CONFIG is used in lieu of a screen on the FN device itself. This saves money and complexity and lets you use the Atari screen you already have.
After the ADAM port, CONFIG was abstracted out into its own Repo. The Apple CONFIG was derived here. So the “common” CONFIG and Atari config started to diverge in the feature set.
A project was lead by @Schadret (github: frachel) to bring the Atari CONFIG back in with the newer CONFIGS for the other platforms so there was a common base functionality with features that all the platforms could benefit from. That is complete, and the current Firmware release for Atari is the first to have the Atari CONFIG built from the common repo.
@mozzwald posted a new Firmware update that included the new ssh protocol adapter and the new CONFIG for Atari.
There was a bug in this for Atari that didn’t allow passwords for wifi longer than 31 chars, and the new High Scores weren’t saving properly. This was fixed and a new firmware release was quickly pushed out.
Andy Diller (me) began a conversation/help request with the author of NOS @Michael Sternberg as I started to actually boot up NOS and try to use it effectively. It’s a fascinating project with some really cool features already. I have created its own post for NOS to please see that for more details.
One thing that came up is the issue of capitalization, the Atari and NOS. Caps matter at this point and often on the underlying file-systems (in my case, my TNFS server running on Linux was hosting my NOS “file hierarchy” and it has lower cases for directories. So for NOS you must respect the capitalization as you traverse directories, but all the commands themselves are capitalized. It is possible to create a filesystem on Linux that ignores case, which should then treat something like BIN same as bin. More testing is needed to see how that would work.
Big news- @mozzwald has the first FujiNet hardware for the C64 built and working!
mozzwald: plugs into userport. powered by userport 9VAC or USB-C 5V. DAC output to 3.5mm jack. buffered IEC pins. userport parallel through i2c gpio expander. ws2812 LED strip on the front
mozzwald: can be built for vertical (shown) or horizontal
See his video at the top in the video sections.
He has even designed a new PSU adapter for the C64:
It takes in 9V ac via barrel connectors (like the Atari 9vac bricks) and then USB-C for the 5v. Hopefully some are build and become available on the website for purchase.
Meanwhile Ron Klein has been playing with FujiNet and the C128 and can report back that it works on that system in C64 emulation mode.
Ron was working with @idolpx to setup and test Meatloaf/FujiNet and helped replicate some of the PHP scripts on his own server to serve up some ML games and programs for the C64.
idolpx: When you “Send to Meatloaf” does it show the right URL queued up?
idolpx: OH!!! I think I was testing relaying so that you could use ftp:// urls too.
idolpx: That would explain it. The server can’t proxy for your localnet stuff. I will check and turn that off if it is on.
idolpx: It should just relay the URL to you so that Meatloaf can then go get it directly.
idolpx: Yep.. that was it. Try now!
idolpx: It’s expecting to see “//196.168.” or “//10.” in the url to redirect it instead of proxy.
@apc announced new releases of FNPC to incorporate new features including the High Score system!
apc: New releases:
Following FujiNet main project:
Support for High Score Enabled Games on Atari
Improved directory navigation for N: (CD in NOS)
Improved JSON parsing
Host slot in CONFIG can point to FTP server (read-only, no writes)
E.g host slot can be ftp://ftp.pigwa.net
Fixed [C]opy file in CONFIG program from / to TNFS server
FujiNet-PC Launcher 2210.1
Bundle with Launcher and updated FujiNet-PC
On Nov 6th in the morning (+5 GMT) jskists popped in and announced his breadboard FujiNet was booting.
[10:42 AM]jskists: Woohoo! FujiNet-RC2014 is alive-ish!!!!!
After a couple more days he showed a working CONFIG that was connecting to his wifi…
jskists: So, it turns out that my comms issue was me getting UART1 and UART2 mixed up!
jskists: I think that’s “board bring-up” milestone success!
jskists: Also, getting RTS and CTS the right way around also helps with the flow control….😆
jskists: Next steps: start re-enabling the commands and actually connect to my wifi…
jskists: That shall be the weekend’s task.
Next development of a FujiNet board for the rc2014 can proceed, and Mozzwald has offered to help create it.
jskists: And don’t worry, @mozzwald , once I’m settled on a basic schematic, I’ll be hoping that you’d be able to do your magic and turn it into a PCB. 😉
mozzwald: yeah, I can probably whip something up!
A whole bunch more work happened here in the past month.
Almost too much to cover except that @That Old Nerd and @thweasel have been cranking out ideas, plans, schematics and code to make FujiNet on a Bus (FNOAB) that much closer to reality. And it seems to be getting very, very close.
thweasel: *grey boxes are not part of the Fuji board, they are supporting components for the simulation
[5:46 PM]That Old Nerd: I will check it in the morning, before I start on the breadboard. So taking a shot in the dark, you didn’t get anything written on your paper today. 😛
thweasel: I did a bit here and there, I am in a bit of a rut. Sometimes do the writing as the bit on the side while being productive else where can help. Sometimes I just get tied into making things look neat for hours 😆
thweasel: Are you breadboarding the ROM/IOd section?
thweasel: Mostly code work last few day. Slow and tedious, basically making methods for each type of operation and the small steps involved. Lots of duplication in the code and refactoring going on, but it’s a process that is helping to flush out the details for the circuit.
Then @TON posted this interesting picture:
That Old Nerd: Well I got some work done yesterday and today. I burned the ROM with the new numbering scheme. It boots, I will hopefully start testing the base decoding tomorrow or Tuesday.
That is the first time I’ve seen a real ZX connected to the buss! Amazing progress on, in my opinion, the hardest and most important platform bring up in FujiNet history.
Sorry for the delay in getting these notes assembled, I’m trying to balance the amount of interesting new work and advances in FujiNet with the amount of time between updates. Then all of a sudden you turn around and there is an onslaught of new and cool things going on. This should be a good break-down of all the major events happening here on FujiNet and if this interests you enough, and you’ve read all the way down here to the bottom, you really should consider jumping into the Discord yourself and say hello, start playing with something, and asking some questions.