Peripheral Soft Reset

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search

Port F8FFh is a documented, but rarely known I/O address, used by the standard BIOS functions MC_BOOT_PROGRAM and MC_START_PROGRAM (vector BD13h and BD16h). These functions are usually executed when starting a binary program with RUN"FILENAME.BIN", both functions do issue an "OUT [F8FFh],FFh". This feature is intended to allow Peripherals to re-initialize themselves when needed. From the official SOFT158 specs:

"All expansion peripherals should be reset when an output is performed to I/O channel #F8FF. In particular a peripheral that generates interrupts must not generate an interrupt until it is re-initialised after such an output has been performed."

Most or all peripherals (including Amstrad's own DDI-1) aren't following that suggestion, and usually there is no need to do so. There may be a few special cases there hardware could take use of it, such like interrupt generating devices, especially if they do access formerly allocated memory.

Avoid this

  • Software should never write to (or even read from) Port F8FFh. That might cause connected Peripherals to reset themselves.
  • Hardware should not perform any actions (other than the intended Soft Reset action) upon accessing Port F8FFh. Eg. producing hardware that formats the disc on write to Port F8FFh would be no good. This applies also on incompletely decoded addresses, eg. formatting on write to Port F8F0h, but also mirroring that action to F8FFh.
  • When intentionally using the feature, be sure to have the port fully decoded. Ie. do not re-initialize your hardware on writes to other 'nearby' ports like F8EFh (Schneider RS232 Interface).

Known Hardware

The Soft Reset feature is useful (initialize hardware expansions), but no used a lot; the PlayCity, Nova and CPCISA are the only hardware expansion using intentionally this feature (though when reverse engineering things by only examining the software drivers one may easily miss its presence, since the OUT [F8FFh] is issued by the BIOS, not by the driver).

Moreover, there are probably various devices that do not directly use Port F8FFh, but that do react to the OUT because of incomplete port decoding. For example, the ACU Real Time Clock (DIY) decodes only A10,A4,A3 of its Port FBFFh, and so, it will also react to OUT [F8FFh],FFh.

Offical Specs