Difference between revisions of "Current events"

From Spectrum
Jump to navigation Jump to search
Line 33: Line 33:
[[User:Winston|Winston]] 17:03, 1 January 2009 (UTC)
[[User:Winston|Winston]] 17:03, 1 January 2009 (UTC)


== 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.
[[User:Winston|Winston]] 19:36, 21 December 2008 (UTC)
== What's next? ==
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.
[[User:Winston|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 [http://www.youtube.com/watch?v=hf8rz0sb298 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 [http://spectrum.alioth.net/svn/filedetails.php?repname=Spectranet&path=%2Ftrunk%2Fexamples%2FStreamingVideo%2Fbwtestrx.asm] - you'll see it's really very simple.
[[User:Winston|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.
[[User:Winston|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!
[[User:Winston|Winston]] 19:02, 9 November 2008 (UTC)
== Translations! ==
[[Image:00020.jpg|thumb|right|300px|Spanish translation of network config utility]]
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).
[[User:Winston|Winston]] 10:10, 26 October 2008 (UTC)
== Ahora, hay un poco de UTF-8 ==
[[Image:Utf8.jpg|thumb|right|300px|putchar42 showing accented characters]]
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 ¿).
[[User:Winston|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).
[[User:Winston|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.
[[User:Winston|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!
[[User:Winston|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.
[[User:Winston|Winston]] 20:50, 17 August 2008 (BST)


== Older News ==
== Older News ==


* [[Old News (July 08 - Dec 08)]]
* [[Old News (June 08 - July 08)]]
* [[Old News (June 08 - July 08)]]
* [[Old News (Apr 08 - May 08)]]
* [[Old News (Apr 08 - May 08)]]
* [[Old News (Feb 08 - Mar 08)]]
* [[Old News (Feb 08 - Mar 08)]]
* [[Old News (Dec 07 - Jan 08)]]
* [[Old News (Dec 07 - Jan 08)]]

Revision as of 17:20, 24 January 2009

Administratrivia

A few notices. You may have already seen that the wiki and WebSVN have been unavailable pretty frequently recently. This is because the server this all runs on is dying of a suspected case of Capacitor Plague. Unfortunately, I don't have physical access to the machine.

So in the meantime, I've moved the site onto a computer at home. This means things may run a bit slow - firstly, it's having to share the pathetic 256K upstream you get with ADSL with all my other network traffic, and secondly, it's now practically running on a retrocomputer - the only spare hardware I have with sufficient memory is an old 333MHz UltraSPARC system (I don't want to run it on my PC, for one, I the fan in the new PSU on my PC is so loud I can hear it in the next room, which happens to be where I sleep). It could have been a lot worse, it could have ended up on the old VAX that I have, then you'd have had to have waited about 5 minutes for a page load!

The SVN repo isn't yet back up, but it will be shortly, so you may find some broken links in the wiki.

Winston 00:11, 14 January 2009 (UTC)

Through port success

As I said last time, the NMI problem turned out to be a software bug. Gasman kindly let me use the Open ZX ROM keyboard routines under the MIT license from his GPLd OpenZX ROM project which saved me the effort of writing and debugging one. I wanted to use someone else's as it's likely to have already been debugged, and I need to start getting some of the prototypes out soon.

So the board now works great with the ZX-CF plugged into the back of it, including the Spectranet NMI menu, so now my +3 has both access to a CF card and the network. I tested all the prototypes by loading the new ROM image off the CF card and programming them that way. This meant I had to cut slots in the through ports of all the PCBs, but the job's now done. (I only found out later that PCB Cart would cut the slots for me if I included them in the PCB outline).

I think the combination of a ResiDOS device and the Spectranet could lead to some very good things.

Winston 19:46, 3 January 2009 (UTC)

Through port testing

Happy new year!

The first job of 2009 is to test the through port. The last time I did any testing was on the prototype-for-the-prototype (the breadboarded monstrosity that eventually got turned into the prototype PCB), with the DivIDE. Since then, I have got a ZX-CF board, which has ResiDOS, and as such is a bit more complex than the DivIDE.

So I had to cut a slot in a prototype PCB (something I need to do for the rest of the boards I've made). The DivIDE works pretty much perfectly, The ZX-CF is a little more awkward. It generally works fine, but its execution trap method seems to be very aggressive and it still traps NMI even when the Spectranet traps it...no, update, scratch that -- it's actually a bug in the NMI handler. Well, not a bug as such, but after looking at the logic in the CPLD and scratching my head a bit, I remembered that to save memory in ROM page 0, I had used the ZX ROM's keyboard handler...this of course, means a call out to the Spectrum ROM, and the return comes back in via RST 8. Oops. In light of this, I probably ought to put a key scanning routine into one of the Spectranet ROM pages so it's not necessary to call the ZX ROM. I ought to do that before tinkering with TNFS any more!

I already expected the RST 8 trap on the Spectranet to need disabling, with ResiDOS running - only one board should be allowed to handle RST 8. But none of these are fatal problems. The Spectranet socket library can still be called with the ZX-CF plugged into the back of the Spectranet, due to the unique design of the library entry point instruction trapping. I tested this with the IRC client - I put Spectrum IRC onto a CF card, and loaded it with ResiDOS, then connected to IRC. All this means is with the ZX-CF at least, utility programs should be stored on the CF card and loaded with ResiDOS, rather than using the Spectranet NMI button. (It should be perfectly possible to write network aware ResiDOS modules, too).

The RESET trap works fine too, with the ZX-CF, because that's pre-triggered by the reset signal itself, and as such A15 is already being held high when the CPU begins executing instructions.

Winston 17:03, 1 January 2009 (UTC)


Older News