Last modified on 10 January 2010, at 16:05

Peripheral Soft Reset

Revision as of 16:05, 10 January 2010 by Nocash (Talk | contribs) (Known Hardware)

Port F8FFh is an undocumented and 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 apparently intended to allow Peripherals to re-initialize themselves when needed.

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 isn't too useful, and there's no hardware known to use that (though when reverse engineering things by only examining the software drivers one may easily miss its presence, since the OUT is issued by the BIOS, not by the driver).

The only known hardware that is (maybe unintentionally) using Port F8FFh is CPCISA by Yarek.

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 it's Port FBFFh, and so, it will also react to OUT [F8FFh],FFh.