My last couple of posts have been made from my new Iconia Tab W500. Too many evenings have had me sitting on the sofa hunched over a laptop, whilst my wife looks much more relaxed with her iPad. I'd get an iPad myself - they are brilliant - but you can't program on them, so that is a deal breaker for me. The Iconia Tab W500 tries to be a laptop and a tablet:
When in tablet mode it is not as good as the iPad. The touchscreen pointer does not seem as accurate and you're left feeling that Windows 7 wasn't designed with tablets in mind. The on-screen keyboard (which is a special version for this machine, not the standard Windows 7 version) is better than on the iPad ... but the less accurate pointer means that you get the wrong key sometimes. Battery life seems OK when compared to other laptops - I have taken notes on it all day (with careful use of the screen brightness control) and still had some power left. When I got the machine I did a BIOS update which seemed to make the battery life much better though.
But ... you can run Visual Studio 2010 on it - so it scores bonus points there for me. All-in-all I'm quite happy with it, it does what I wanted it to. Perhaps there will be better Windows based tablets to follow.
Back in the early 90’s I was employed to convert a piece of educational software called ‘Podd’ from the BBC Micro to the Acorn Archimedes. What I actually did was take a look at the BBC version, but completely re-write the code in C for RISC OS. When the software was released the publisher sent me a complimentary copy, since I was the author. I carefully put this copy aside for safe-keeping, where it has stayed for nearly a couple of decades. The 800k floppy disk that was included has never even been inserted into a machine.
Until last week that is. A friend of mine is restoring his Acorn A3000 (you read about his efforts here). So I decided that he should try and read the floppy to see if it was still intact. The good news is that the disk seems fine. My name was even left inside one of the files:
So now we’ve decided to try and make a copy of the disk, before the original is lost for all time. The only problem is that the publisher used copy protection when duplicating the disks, so I can’t just copy the disk bit-for-bit. I seem to remember that they used “flaky sector” for copy protection. So I’ve written some code using the Dokan library to create a virtual drive on my Windows machine. Then I’ve written a few extra lines of code that takes a disk image file stored on this virtual drive and emulates a flaky sector. This means that I may be able to create an image of the disk that works on an emulator on top of Windows (like the Arculator). Perhaps I’ll be able to make an exact image of the disk, including the flaky sector, and maybe my ‘authors copy’ can be properly archived for safe storage…
I don’t know if this will actually work yet, I’ll have to report back. But it has been a nice trip down memory lane…
My blog has been quiet recently. Mainly because I have been busy learning OS development. At the moment I'm calling the result of my efforts by the name "ShedOS" in honour of men who build things in sheds. I count myself in that category - even if my hobby is more likely to be practiced in Costa Coffee (drinking a flat white) than an actual shed. Maybe I need to build a better shed, or maybe sheds should serve better coffee.
As I've mentioned before on this blog, I've been following Bran's Kernel Development tutorial, so my OS is based on that. But I have been busy customising it and adding new things. Currently, ShedOS has these features:
- 32 bit x86 operating system
- preemptive multitasking
- floppy disk driver
- limited support for FAT12 filesystems (read-only)
- text only video driver (16 colours)
- exports a few system calls, like 'print', 'plot' and 'exit'
- can load and run user programs from disk
- oops, still no keyboard driver
I have just started to implement some system calls, so that the kernel can expose an API to user programs, it seems to work. If I seem surprised; it's because I am. I have gotten to the point where the kernel boots, then loads a user program from a FAT12 disk. The user program runs, making use of the kernel's API to print to the screen. Then the program exits and returns full control to the kernel again. During that whole process the system continues to multitask. Not a bad start I suppose.
At some point I'll bring over some of my favourite features from the PDP-11 world, like the ability to drop machine-code instructions straight into memory. Running some code by typing the instructions in manually must be like a "rite of passage", and it's something that you can't do from windows. Surely if you can do that using an OS that you've built yourself then you're the man.
Right, I really must get round to posting my floppy driver source code, just in case anybody else out there finds it interesting... Sadly, I don't think there will be many other people developing drivers for floppy disks these days, but I'll post my code anyway.
I've been experimenting with the mkisofs tool to make bootable ISO images for burning onto CD. This tool can be downloaded from the CDRTOOLS site (make sure you use the latest *stable* release).
The command line I'm using is:
mkisofs.exe -J -N -l -v -relaxed-filenames -b Floppy.img -volid "BootCD" -o "BootCD.iso" CDfiles
...where "CDfiles" is the name of a folder containing the floppy disk image (named "Floppy.img") as well as anything else you want to put onto the CD-ROM. I'm doing this from a command prompt in Windows 7 and it seems to work very well.
To make the CD bootable I've been using my bootable floppy image. This causes the CD-ROM to boot as if it were a floppy disk. You'll see the files inside the disk image appear as if it were a real floppy drive when the CD boots up. I've included the the generic CD-ROM drivers, and you should see the actual CD-ROM appear as drive X:.
You'll also get a 10Mb RAM drive, giving you some *writable* disk space to play with. This version simply boots to a basic DR-DOS system, but I'm blogging it since it may come in handy for other purposes...
You can burn the resulting ISO image to a CD, or simply try it out by attaching the ISO in Virtual PC or VirtualBox and booting from it. Here is a screenshot of the ISO booted in Virtual PC:
One of the results of all this DR-DOS memory stick work was that I also created a bootable floppy disk image. I created it using Microsoft Virtual PC ... but the resulting disk image would be bootable in VirtualBox too. I manually edited the xml files to attach the virtual floppy disk in Virtual PC, as described here. This disk image just boots DR-DOS with a CD ROM driver, some memory management and a RAM Disk driver.
My next step will be to use this floppy disk image to build a bootable CD. I will then use that as the basis for my revised PDP-11 Live CD. I'll probably use SIMH for DOS since I don't expect that I'll be allowed to redistrubute the demo version of Ersatz-11 (although I think that Ersatz is a better emulator).
I've made a few enhancements to the DR-DOS boot stick that I made, so here are the details. Just copy the files mentioned to the root of the boot disk. I believe that everything used is free for non-commercial use. Here goes:
The OAKCDROM.SYS generic CD-ROM driver (will work with most IDE CD-ROM drives) I got my version from here. Open the zip file and look inside the "Floppy" subfolder. Just copy OAKCDROM.SYS to the boot disk.
In addition to the CD-ROM driver, I've used a MSCDEX replacement called SHSUCDX, which is linked to from here. I've downloaded the "shcdx33e.zip" version. Just copy the SHCDX33E.COM file to the boot disk.
For memory management I've added two things:
HIMEMX - copy both EXE files
CWSDPMI - just copy CWSDPMI.EXE (in the bin folder)
And finally, I've added a RAMdisk driver... we need to copy the SRDISK.EXE and SRDXMS.SYS files.
To get all those files to work we also need to edit AUTOEXEC.BAT and CONFIG.SYS:
SHCDX33E /d:CD001 /l:X
SRDISK 10240 /E
So now if we boot from the memory stick we'll have X: mounted as the CD-ROM (if you have one) and the current drive will be an empty 10Mb RAM drive. We also have better memory management. It should be a reasonable DOS system, and to the best of my knowledge everything I have used is free for non-commercial use - good for the hobbyist that wants to run a DOS machine.
I’ve bought a Brunsviga 18RK mechanical calculating machine, since it is a piece of computing history. Here it is:
It is awesome and I can report that everything seems to work. It can’t do negative numbers, so I have enjoyed doing things like entering 100 and then subtracting 150 to get a result of 9999999999950. That’s called underflowing the accumulator, and a bell rings when you do it.
In its honour, I have also written this C program:
int main(int argc, char *argv)
unsigned char test='A';
…which underflows an unsigned char, subtracting 66 from 65 to get a result of 255. For the sake of completeness I’m printing ACSII code 7 at the same time, so that a bell also sounds. I’m sorry.