From: Alex B. <vam...@gm...> - 2012-08-09 21:06:21
|
Hello all, I'm interested in adding emulation for some Romanian Spectrum clones. In this somewhat lengthy e-mail, I'll give some background, then describe what I've done, what I'd like to do, and finally ask for guidance. == Background == Several families of Romanian clones exist. They all aim, at a minimum, for spec48 compatibility. This discussion is about the HC ("Home Computer") series, manufactured by ICE Felix in Bucharest. * The HC-85 is essentially a spec48, with the ULA replaced by 74LS-series ICs. * The HC-90 has a redesigned circuit board (e.g. larger RAM chips), but behaves the same as the HC-85. It can optionally be equipped with an "HC" variant of IF1 (separate board, in the same physical housing) * The HC-91 has extra RAM, ROM, and bank-switching circuitry to support CP/M * The HC-2000 is essentially an HC-91 and IF1 on the same circuit board (with some optimizations). The case also houses the floppy drive. Instead of a microdrive, the HC IF1 has an i8272-based floppy drive controller. The RS232 and network interfaces are still present. This IF1 also has an 1kB of RAM, which has incomplete address decoding and is selected in 4 pages of shadow memory space. For this reason, only 12 kB out of the 16 kB ROM are accessible (but only the bottom 8 kB appear to be used by code). ROM code appears to be a modified version of the Sinclair IF1 ROM. (Disclaimer: I've only ever owned an "aftermarket" HC-85, assembled by my father; I've also briefly played with an HC-91 with IF1, floppy drive, and CP/M) Some documentation (including schematics and I/O port maps) can be found here[1]. There are also other families of Romanian clones, possibly the most interesting and popular being the CoBra; it significantly differs from the HC family, and thus deserves its own separate discussion. == Code == I've written a proof-of-concept hack[2] for fuse which adds i8272 support to IF1 code. In conjunction with the HC IF1 ROM it can successfully emulate floppy access from BASIC, including the use of disk images dumped from real disks. Of note, the IF1 controls the i8272 Terminal Count (TC) input, and relies on its proper operation; support for this was added to upd_fdc. There are a couple of design choices where I'd like to ask for advice. 1) How do we implement the floppy-flavoured IF1? 1A) implement a whole new peripheral type, with its own paging routines, etc. 1B) add a switchable mode to the existing IF1 code, allowing to choose between microdrive and floppy 2) Should we create new machine types for these clones? 2A) Yes (presumably one for each model) 2B) No, we would simply have some peripherals which can be manually enabled on top of spec48 Any and all other feedback is greatly appreciated. Thanks and regards, Alex [1] https://sites.google.com/site/georgechirtoaca/documentation [2] https://github.com/vamposdecampos/fuse-emulator-svn/commits/hc-if1-hacks |