Old News (July 08 - Dec 08)
More boards made
Unfortunately, I've been a bit busy at work of late, so I've not really attended to the project in the last two or three weeks - in fact, I've done nothing at all that I wanted to do on the software, not even testing. After slogging away at Java and Perl at work on an extremely urgent project, the only computery stuff I've felt like doing when I've got home is gaming. However, I"ve made more prototype boards, so now I have enough that I can start sending some out.
The first job after Christmas is to do just that. I'll be dropping an email to those who've expressed an interest so far to get mailing addresses... I hope to have them mailed out before the new year.
I also bought the first batch of W5100s for boards for next year, I ordered 35. I thought I'd got away with not having to pay import duty, then the bill arrived from FedEx! (They paid it so they could ship the delivery with no delay. Which is odd, since other people I know who have received stuff via FedEx with duty to be paid, have had their package held until they paid up. Perhaps because I was ordering the sort of thing that only electronics companies tend to order, they treated me as a business rather than domestic customer). I must say that Wiznet don't hang around shipping stuff, I got the chips within 4 days of ordering them from Korea.
Winston 19:36, 21 December 2008 (UTC)
I'm on the verge at sending out some prototype boards to some people who've expressed an interest in doing some development with the Spectranet. I just need to test the new static RAM page allocation routines work OK, and do some further ROM module testing, and then they can be off. I need to make a couple more boards, too. Since there's been quite a bit of interest in the video that I made last week, of the Spectrum doing streaming video, I may make a "The Making of the Spectranet" video, which will perhaps show people that soldering surface mount isn't quite as scary as people think :-)
Once that's all done, the next thing I want to do is to actually start on TNFS - Tiny (or perhaps Trivial) Network File System, as a ROM module. My plans for TNFS is to make a simple network filesystem that's good for 8 bit machines - so that the protocol can be used for a PC serving files to a Spectrum, or a Spectrum to serve files to another Spectrum. I'll start off by implementing mount/open/read/write/close/umount. Then build on top of that to provide things like TAP loading, and snapshot loading. I also want support for directories, given that quite a big filesystem may exist on the other end. Ultimately, I'd want to support all the basic C style filesystem syscalls.
I also put an order in today for some more W5100 chips.
Winston 23:28, 27 November 2008 (UTC)
A demonstration of the Spectranet in action
LCD of World of Spectrum gave me a video file for the Spectrum, basically 25 megabytes worth of SCREEN$ in sequence. So I wrote a very short video player for the Spectrum, and a very short video streaming server for the PC. Well, actually, sort of the other way around, the Spectrum actually listens and the PC connects and sends, but that's just detail.
Here is a video of it in action on Youtube.
I also put the source code in SVN so you can see how it works. It uses standard Spectranet library calls to copy the data to the Spectrum's frame buffer. I was actually quite surprised they were fast enough - I was expecting to have to write a custom routine. Source code for the Spectrum end is here  - you'll see it's really very simple.
Winston 17:09, 23 November 2008 (UTC)
ROM modules now work!
Finally, I have had a little time to work some more on the ROM module code, and they work! I have made modules for both calling from other programs, and BASIC extensions. There's even a tutorial (which I hoped to have finished tonight, except I had to fix someone else's PC. And I have another PC to fix tomorrow...) You can see what's been written so far here - Spectranet: Tutorial 7 which so far shows how to write a simple ROM module.
The long and the short of it is this. The Spectranet's boot code checks at power up or reset each page of flash memory, looking for a module signature. If it finds one, it then looks to see whether there's a reset vector in the page's vector table, and if so, calls it. This gives an opportunity for the ROM module to register various things, such as any BASIC extensions it provides (or any other arbitrary initialization code - for example, the Spectranet utility module starts the DHCP client this way). A mechanism is also provided such that other programs can call routines in a module, regardless of where the module is located in flash (dynamic binding on a Spectrum!)
I need to do a bit more testing, but the light really is finally at the end of the tunnel.
The ROM module utility (which is used to install, update and remove modules) naturally now works, although I need to do more testing to ensure it really does work as designed. Naturally, the utility is available in both English and Spanish.
Winston 23:51, 18 November 2008 (UTC)
ROM module utility
Soon, I hope to have a few fellow Specchums writing a bit of code for this hardware, and I imagine quite a bit of it will be stored as a ROM module. The Spectranet will have a method whereby you can add a new module into flash memory, and have it available to BASIC, or available to assembly/C programs via an indirect call mechanism, or both. Some of the infrastructure has actually been in ROM for a while - the built-in DHCP client is run via this mechanism (although that lives in a "reserved" page) and the configuration utility is stored in the same page, along with the NMI utility.
This requires a utility to be able to add, replace and remove modules. The utility works over the network, so you just assemble or compile the module with Z88DK or a cross assembler, then fire it over the network to the utility, which flashes it into ROM.
I had hoped to have this done a couple of weeks ago, but I had a severe case of toomanyprojectsitus. However, look out for the ROM module tutorial, coming soon!
Winston 19:02, 9 November 2008 (UTC)
After adding UTF-8 support, I translated the messages into Spanish, with some corrections from the denizens of foro.speccy.org (a Spanish Spectrum forum). I was very gratified that they said I was doing very well for someone who had only been learning the language for 6 months!
Odious on WOS has also offered a Portuguese translation, and since the UFT-8 0xC3 table contains all the characters used in that language too, it's merely a matter of building ROM images in Portuguese too. Since the strings are all in string tables anyway (rather than embedded in code) it's easy to separate the strings out into their own files. For each language, a ROM image is built (rather than carrying all the strings for each language in one grand unified ROM). It's very easy to load a new ROM onto the Spectranet over the network so therefore I thought it would be better to have a separate ROM image for each language, given how easy it is to switch ROMs.
Which brings me on to the subject of ROMs. The Spectranet has 128K of in system reprogrammable flash. Only 16K is reserved for the Spectranet itself (and of that, I've not even used half yet). I expect many utilities would be written as ROM modules, and so not depend on mass storage being available. The next project, therefore, is to write the utility that organizes these ROM modules. Also, I have added a simple mechanism to make calls into ROM modules (regardless of the physical page they reside in) using a call number mechanism: a 16 bit identifier, where the high order byte represents the ROM ID (I doubt more than 256 ROM modules will ever be made for the Spectranet!) and the low order byte has meaning to the ROM module itself (and it's up to the ROM module to determine what to do with it - it might be a simple function call, or it might be a way of launching an application). I still need to test the code actually works. (Then look out for the ROM writing tutorial).
Winston 10:10, 26 October 2008 (UTC)
Ahora, hay un poco de UTF-8
Just under 6 months ago, I started learning Spanish. While doing that, I discovered that the Spectrum does have a following outside of Britain - it has quite a strong following in Spain too. In fact, I've been using pages about Spectrum hardware in Spanish to help learn the language. (So, if the little dialogue in the screenshot is an example of terrible Spanish, my apologies, but I have only been learning for a short time).
Since the Speccy has a following there, it makes sense to have a Spanish translation for all the things in the Spectranet. To do that, accented characters, things like ¿ and ¡, and new letters like ñ must be supported. Since the Spectranet will be used to talk to things over the internet, it needs to do this in a standard way, too. UTF-8 is the way this is done. The UTF-8 character set supports a huge number of extra glyphs on top of what ASCII supports, and it's compatible with ASCII (characters 0-127 are the same). Supporting accented characters is very important if you're to support Spanish, because an accented character can change the entire meaning of a word: for example, si means "if", but sí means yes. Also, the ñ character is very important to support, because it's not an accented letter - Spanish has 27 letters, and ñ is a letter in its own right, coming after the letter N. You can't write ano if you really mean año - the latter means year, but the former means anus!
Actually, just a subset of UTF-8 is supported, but it's enough to support western European languages. All of the characters that follow 0xE3 are supported (this includes the accented characters and ñ, and things like the German ß - not to be confused with beta), and just a few characters that follow 0xE2 (€, ¢, ¡ and ¿).
Winston 23:36, 18 October 2008 (BST)
Extending BASIC ... with C?
Yes! It now can be done. If you've been following the development of the BASIC extension tutorial, you'll see that there's C code there. No, it's not theoretical, you really can write BASIC extensions in C with the Spectranet.
Actually, making a library to do it isn't all that hard, but strings do need some special handling as ZX BASIC does not use C strings. The strings are sequences of bytes as you might expect, but they aren't null terminated, instead the ROM's string handling functions return string lengths plus a pointer to the string. This is being handled in the C library by copying the string, null terminating it, and returning a length. (Copying only as much as the buffer, of course).
The next thing to do with C is to develop some guidelines for making ROMmable routines. Certain things in the z88dk expect the ZX ROM to be present (the print routines, for example, use the ROM's scrolling routine even if the character printing routines belong to the z88dk). This isn't a great deal, since C routines destined for ROM which need to do things like this can use the Spectranet's print42 routine (and I probably ought to make a library that lets stdout go there).
Winston 22:02, 16 October 2008 (BST)
Developers, developers, developers, developers!
OK, I think it's at a stage where someone else can also have a go at doing things with the Spectranet. You just know you need an interesting project for your own Spectrum as the dark days of winter approach...so...
What I am going to do is this. I've already posted in the WOS hardware forum, but I'm going to post this into the Development forum. I'm going to loan out (on a free loan, indefinite) 6 of the prototype boards to anyone who wants to develop for it. The deal is this - tell me what you want to develop, and if there's more than 6 developers chomping at the bit I'll have to choose the 6 ideas I like the most. You will need a real working Spectrum (48K, 128K or one of the Amstrad models) since the Spectranet is not emulated. You don't need any sort of mass storage for the Speccy - already there's a method to send data to the Spectrum from another machine over ethernet, accessable on the NMI menu.
This isn't a competition or anything like that for some fancy or uber-imaginative networked program for the Spectrum. Examples of some things that are fine ideas are:
- An FTP client, perhaps with the ability to run a .SNA or use tape traps to load a .TAP file off the network.
- A *good* IRC client, perhaps improving the rinkety-dink one I've written as a test, or perhaps something completely new
- A networked strategy game.
- A simple web browser
- A news ticker and/or weather display. (Perhaps that's a good one for demo writers - there's lots of scope for making a novel way of displaying the current weather which can make the most of the Speccy's hardware)
Pretty much anything that needs the network qualifies. (I wonder if anyone can squeeze enough performance out of the Z80 for an SSH client!)
At the moment if you want to join in with development you'll have to do it in C (with the Z88DK) or in assembly language - channels/streams support is something I've got planned but it won't be there for a while. If you want a feel for the Spectranet's API (which, for the net code is a subset of the BSD socket library) you can take a look at the Software page. To contact me you can do so via the WOS forums or to my email address 'dyls (at) alioth (punto) net' (please put 'Spectranet' in the subject). Hopefully by the end of this month, there will be a few willing developers who want to hack at this thing.
Winston 15:50, 4 October 2008 (BST)
The last 10%
As usual, the last 10% is taking 90% of the time (and it doesn't help that I'm overloaded with projects at the moment). But it is getting closer, I promise!
I need to do some tidying up (hopefully this weekend) in the code - for instance, the socket library should save and restore the memory that's paged into area A, otherwise this paging area isn't very useful as a place to put code. The library also ought to make an attempt to allow data in this area to be transferred, hiding the fact that the ethernet buffers are memory mapped from the programmer as much as possible. I've thought of a way of swapping paging area B to do this, although this obviously has an issue if the buffer crosses the boundary between paging area A and B.
I've also been doing quite a bit of documentation recently (as you will have seen if you follow 'Recent Changes') including things like a nice memory map diagram. Some more must be done, though - for instance, documenting how to extend BASIC (fairly low priority at the moment) and how to write a ROM module (much higher priority).
What I want to do next is get the socket library paging sorted out, then once that's done, I think it's in a fit state for someone else to try and write some programs for it too. So continue to watch this space. I would like to make an announcement on the availability of development boards at the end of September if possible, since the long dark winter nights are coming and perhaps people will be looking for a new project for their beloved rubbery friend!
Winston 21:00, 11 September 2008 (BST)
Getting ready for the Steve Ballmer Monkey Dance
It's time to get ready and do a Ballmer impression: "Developers...developers...developers...developers..." - you've probably seen the video. But soon, that's what the Spectranet will need.
It's mainly an issue of documentation: so that people who fancy doing development know where to start, I need to get a basic user guide out for the development boards (things like 'what does jumper J1 do', and 'how do I set the IP address', and "how do I flash a new ROM" etc.) Also the tutorials - I need the tutorials and basic socket library API documented so that people who are otherwise great Spectrum developers, but who've not done much with netcode, know where to start. You'll note if you look at 'Recent Changes' on the wiki I've been doing some of this over the weekend (including a minor re-org of the front page).
It's my intention to do the following, once I feel I can release some boards for development. The deal is this: I'll make a permanent, free loan of a prototype board to anyone who's interested in developing something. If the developer can't continue for whatever reason, then they just pass the board onto the next person. The requirements for the developer who wants to take advantage of the free loan is to have something they want to develop, and also have a real Spectrum to hand - no emulators emulate this board yet, so a developer must have a real, serviceable Spectrum to hand. (What reduces the pain is that even now, before I've even developed the network filesystem, you CAN load programs over ethernet, making it fast and easy to test your code on the real machine). If demand outstrips supply, I'll choose whatever I consider the most interesting projects are. Hopefully, I'll have at least half a dozen boards I can lend to people (5 currently exist, and I hope to make a couple more soon). I'll be making an announcement on the World of Spectrum forums (and here, of course) when I get to that point. But it should be pretty soon.
Winston 20:50, 17 August 2008 (BST)