14.System Reset/Power Up
The state of all of the control bits during and immediately
after system reset is given in appendix 2. During reset, the main
clocks are still running and are used to propagate the reset
condition throu the logic. Reset must be long enough to insure a
stable and consistent start up.
The process that takes place upon release from system reset and
the steps required to initialize the hardware are described
below.
-
Suzy Reset Recovery.
At release from reset, all of Suzy is disabled and remains
so until enabled by the CPU. During reset, the bus handshake
logic has stabilized with bus grant asserted. Any incidental
internal activity will be listed when the logic design is
completed. Suzy is not expected to require any software
initialization until a specific function of Suzy is
desired.
-
Mikey Reset Recovery.
At release from system reset, the video bus request is
disabled and will remain so until enabled by the CPU. The CPU
is requesting the bus. During reset, the bus handshake logic
has stabilized and is ready to give the bus to the CPU. The
ROM overlay is enabled and the CPU will fetch its reset
vector from ROM at the normal 6502 address of FFFC and
FFFD.
Since there are some pieces of hardware that are running at
rates slower than the main system clock, there is the
possibility that there will not be a deterministic
relationship between the phases of these slower clocks (eg.
CPU and audio/timer). To prevent possible peculiarities of
operation (due to hardware bugs) and to assist in truthful
software emulation, it is suggested that these individual
hardware chunks get synchronized at system start. It may be
expensive to do it all in silicon, so some of them may need
to be done by software. At this time, Glenn says that the
audio section is done in silicon. There are other hardware
registers that must be initialized correctly in order to let
the system come up consistently. They are stated in appendix
2 (hardware addresses).
The current process that must be followed at system
initialization is:
1. Disable interrupts
2. Clear decimal mode
3. Read SUZYHREV
4. If =0, jump to test code
5. Read 8 locations in RAM (each must cause a new RAS to
occur)
(more ??)
[BACK|CONTENTS|NEXT]
The polarity of signals and their effect on the circuitry is
not always apparent from the name of the signals. For this
document and its related documents and appendices, the following
conventions will be used:
Set = On = Asserted = Active = Occurs
These mean that the signal is in the state that causes or allows
its named function to occur. For example, if bus grant is set, we
are granting a bus. If an interrupt mask bit is set, that
interrupt is masked.
Reset = Off = Cleared = De-asserted = Inactive = Dropped
These mean that the signal is in the state that does not allow
its named function to occur. For example, when bus request is
dropped, we are no longer requesting the bus.
The terms 'hi' and 'low' are well applied to actual schematic
referenced signals, but should be avoided in generally
descriptive text.
Acquired = Taken
These relate to tri-state busses and indicate that the bus is now
being driven by the 'acquirer'.
Released = Let Go
These also relate to tri-state busses and indicate that the
'releaser' is no longer driving the bus.
SimWait = Boil
The act of waiting for garbage collection on the VTI tools
[BACK|CONTENTS|NEXT]
This is a list of the known bugs in the hardware.
-
Mikey
- Sleep does not work if Suzy does not
have the bus.
- The UART interrupt is not edge sensitive.
- The UART TXD signal powers up in TTL HIGH, instead of
open collector.
- The lower nybble of the audio out byte is processed
incorrectly.
- The Reset Timer Done bit is not a pulse.
- The Timer Done bit requires clearing in order to
count.
- The Mikey ROM sets the External Power Detect pin to
output.
- The REST pin on Mikey is initialized as an input and
its data is set to 0.
Both are wrong. You must set it to an
output with a data value of 1.
- The IODAT register is not really a R/W register.
-
Suzy
- Remainder does not correctly handle the upper bit in
two ways.
- Signed multiply thinks 8000 is a positive number.
- Auto clear of the upper byte of an SCB word does not
also auto clear the sign flag.
- The page break signal does not delay the end of the pen
index palette loading.
- The polarity of the 'shadow' attribute is
inverted.
- Signed multiply thinks that 0 is a negative number.
(delayed effect)
- The circuit that detects a '0' in the SCB NEXT field of
an SCB only looks at the upper byte.
Therefore, we can't
have scabs in page 0. I'm sorry.
- A data packet header of '00000' can be used to indicate
end of data.
There appears to be a bug with it. I don't
understand it yet. Beat me. Kick me.
[BACK|CONTENTS|NEXT]
- Only the upper byte of the 'NEXT' word in the SCB needs to
be set to zero in order to indicate that this is the last SCB
in the list. The lower byte of that word can then be used for
any other function since the hardware will ignore it if the
upper byte is zero.
- Some of the sprite values (H size, V size, etc) are
re-usable. The normal way to reuse them is to have the first
sprite in the local list actually initialize the values, and
then have the remaining sprites in the local list re-use them.
One of the difficulties in doing it this way is that it is not
always reasonable to arrange the list and the SCABs
appropriately. One of the ways to simplify the problem is to
use an initializing sprite with the desired numbers in the
reusable registers.
I have been asked to provide an exemption that would allow the
software to write directly to the hardware registers in the
Suzy SCB and thus avoid all of the overhead of arranging the
lists or creating null sprites. Since this section of hardware
is firmly tied to the sprite software process, I believe that
it will be OK to write directly to the hardware registers. I
could be wrong, so I am going to approve the following
conditional exemption.
It will be OK to write to the twentyfour 16 bit registers of
the Suzy SCB PROVIDING that you only do it via the MACRO
PROVIDED TO YOU BY RJ MICAL In addition, you must understand
that the contents of this macro may change if future revisions
of the hardware so require. In addition, you must understand
that future hardware may make the process not work and
therefore the macro will be changed to be a warning that you
can't use it anymore.
Don't cheat.
[BACK|
CONTENTS|NEXT]
There are errors that many first time programmers and some
experienced programmers make with this hardware. Some of these
errors may be difficult to identify due to the complexity of the
ICs. I will list some of them here to aid in the debugging of
'Mystery Bugs'.
- The presence of an interrupt in Mikey, regardless of the
state of the CPU enable interrupt bit, will prevent the CPU
from going to sleep, and thus prevent Suzy from functioning. So
if sprites stop working, unintentional interrupt bits can be
the hidden cause.
- The Suzy Done Acknowledge address must be written to prior
to running the sprite engine. This is required even prior to
the first time the sprite engine is activated. It it is not
written to in the appropriate sequences, the CPU will not go to
sleep when so requested. In addition, if some software
accidentally allows a Suzy operation to complete without then
following that completion with a write to SDONEACK, the CPU
will not sleep. So if sprites stop working, something may have
gone wrong with your SDONEACK software.
- Writes to the cartridge are blind. If you accidentally
access Suzy before the required delay period, you will modify
some internal bus in Suzy. The results are not definable.
[BACK|CONTENTS|NEXT]
(c) by Bastian Schick
It's possible to save high-scores or whatever info on a EEPROM
provided on some carts. For best results use the EEPROM routines
provide with the BLL dev.kit .
[BACK|CONTENTS]
HOME
(c)42Bastian
Schick last modified 03/08/20