Difference between revisions of "Peripheral Soft Reset"
Line 1: | Line 1: | ||
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: | 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. | + | :"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. | 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. |
Revision as of 08:55, 29 April 2010
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 isn't too useful, and there's no hardware known to be (intentionally) using that 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).
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 its Port FBFFh, and so, it will also react to OUT [F8FFh],FFh.
Offical Specs
- SOFT 158 Appendix 12 (XII) (The Hardware) - general info on Port F8FFh (page 3)
- SOFT 968 Appendix 13 (XIII) (Hints Tips and Workarounds) - info on Port F8FFh and interrupts (page 7)