Skip to content

Latest commit

 

History

History
154 lines (114 loc) · 5.95 KB

README.md

File metadata and controls

154 lines (114 loc) · 5.95 KB

Platform: the Amstrad NC200

The Amstrad NC200 is a late-era Z80 laptop. It's pretty high specification for a Z80, with a fast processor, 128kB of RAM (expandable up to a megabyte) 720kB floppy disk drive, rather nice monochrome screen, and decent battery life.

It's not really supposed to boot from floppy but there's a backdoor in the ROM-based software suite which will seamlessly run programs from disk if you use the right keyboard combination.

What you get with this port:

  • standard PC 720kB floppy disks (with the CP/M file system, of course, but they're writeable from ordinary PC drives)
  • support for a hard drive of up to 32MB on a Compact Flash card (note: not SRAM)
  • CCP and BDOS cached in RAM for instant warm reboots
  • most of an ADM-3a / Kaypro II terminal emulator supporting 80x18 text
  • a gigantic 60kB TPA
  • an interrupt-driven keyboard
  • parallel printer support
  • bugs

What you don't get:

  • power management (if you turn the machine off, all state is lost)
  • repeat key
  • blinking cursor
  • serial port support
  • sysgen, format etc
  • no bugs

Important note: the NC200 runs in im 1 mode, which means that all interrupts go through rst 0x38. Unfortunately this is the default system call used by debuggers like DDT and SID, so you'll need to patch them to use a different one. The supplied copy of z8e has been preconfigured for the NC200 and will work out of the box.

How to use it

Format a 720kB floppy disk on the NC200 and dd the nc200.img file onto it.

Important: the NC200 uses a non-standard sector skew to improve performance. If you format your disks on a PC, they'll work, but using disks formatted on the NC200 itself (using the standard ROM software) will more than double disk speed.

Insert the disk into the machine's drive, power on, and press Code+R. CP/Mish will boot.

Big warning: CP/Mish uses all the memory in your system; if you have files stored in RAM, you will lose them. The entire state of the machine is destroyed. You have been warned!

You can replace the CCP and BIOS with your own if you like, although you do need to do this from Linux (because I haven't written the CP/M tools for this yet).

To replace the BDOS:

  • create a standard 3.5kB BDOS image assembled at 0xef00.
  • do dd if=my-custom-bdos.bin of=/dev/fd0 bs=1 seek=11264

To replace the CCP:

  • create a standard 2kB CCP image assembled at 0xe700.
  • do dd if=my-custom-ccp.bin of=/dev/fd0 bs=1 seek=9216

Then, inserting the disk into the NC200 and resetting the machine will start CP/M with load your new BDOS and CCP. Note that it is necessary to do a full reset to ensure that the new BDOS and CCP get loaded into the cache; a simple warm start isn't sufficient.

Using a hard drive

If you want to store files on a hard drive, you'll need a PCMCIA type II ATA card --- a Compact Flash card plugged into an inexpensive adaptor will do just fine.

You will have trouble plugging this in to your NC200, because the slot in the case is only big enough for a type I card, and type II cards are thicker. The NC200 comes apart relatively easily and this can be removed, although plugging a card in takes care without the plastic guide.

Disclaimer: Your NC200 was designed for type I cards only. While a type II card works fine on mine, it may not work fine on yours --- there's more power draw for a start, which may cause problems and potentially damage. Don't do this unless you're willing to live with the consequences. If you damage your machine, be aware that I will express sympathy but not compensate you in any way: you have been warned!

The drive shows up as B: in CP/M. For simplicity no partition table is used so the CP/M drive will occupy the entire card; however, the maximum filesystem size is 32MB, so if you have a larger card (which seems likely) any additional space will be wasted.

The card needs to be formatted before use. Use mkfs b: to do this. This will destroy any data on your card.

Sadly, the NC200 is unable to boot from an ATA card, so you'll still need a floppy disk in the drive to start cpmish; but once booted, your files will be available on drive B.

A tool FLIPDISK is available which will swap drives A: and B: in the BIOS. So, if you have a PCMCIA flash card, you can boot from floppy, run FLIPDISK, and then run everything from flash. This drastically speeds up everything, especially submit files, which use a temporary file on drive A:.

If you have a CF card reader for a modern machine, the diskdefs file in the cpmish root should allow access to files on the card:

cpmcp -f nc200cf -i /dev/sdf 0:oncpm onlinux

Be aware that it's set up for a 32MB file system so if you have a smaller card you will need to be careful writing to it.

Technical details

The NC200 has a simple MMU allowing any 16kB bank of RAM to be mapped anywhere in memory, and this port exploits this to keep most of the BIOS code out of user space --- hence the large TPA. In fact, the BIOS is a simple stub which just banks in the code which does the real work (the Supervisor) and calls that.

The Supervisor is 8kB long and shares a 16kB bank with the video memory. However, it's only mapped in when it's actually doing something, so user code will never know it exists.

Of the eight memory banks, four provide the 64kB of CP/M userspace, one contains the Supervisor and video memory, and one if used to cache the BDOS and CCP; the other two are currently unused.

The terminal emulator is ADM-3a with some Kaypro II extensions, using a custom (drawn by me!) 6x7 font to allow 80x18 characters of text. This appears to be a relatively common choice and most software I've tried (Turbo Pascal, VDE etc) works. Sadly, games tend not to work due to the non-standard screen size.

Who?

Everything here was written by me, David Given, and is covered under the terms of the whole CP/Mish project. See the documentation in the project root for more information.