[atari7800] Re: DMA TIMING

  • From: "Eric Ball" <ek-ball@xxxxxxxxxx>
  • To: <atari7800@xxxxxxxxxxxxx>
  • Date: Tue, 2 Nov 2004 18:14:26 -0500

> Thanks, Dennis, however, either I'm being completely dense, or everything
I've read so far on the subject is indirect and circular (or maybe I've just
frustrated and cranky that my "big breakthrough" of layered parallax
scrolling may not be possible).

I'm sure you'll get it.  Keep asking questions, only way to get answers.

> So I am going to make a some of very simple, very direct statements. I
welcome anyone who can tell me if they are correct or not.
> - DLLs, DLs and bitmap data may be in RAM *or* ROM. (True/False?)

DLLs and display lists _must_ be in RAM.  Character/tile lists & bitmap data
may be in ROM.

> - DLLs and DLs *must* be in RAM because ROM access time is too slow to be
read by Maria. (True/False?)
>   - But somehow Maria is able to read bitmap data from ROM. (True/False?)
> - RAM is accessed more quickly by Maria so it is generally preferable to
put DLLs, DLs and bitmaps in RAM. However, for displays which are not overly
complex keeping everything in ROM would be perfectly acceptable.

My guess is the logic in MARIA is fairly simple.  For DLLs and DLs put the
address on the bus then latch the data after two 7MHz clock cycles.  For
everything else wait three 7MHz clock cycles.  So you could put the DLLs and
DLs in ROM, assuming that your ROM has a short enough access time.
> - The DMA TIMING values listed in the Software Guide are for data read
from ROM  (True/False?)
> - The DMA TIMING values listed in the Software Guide are for data read
from RAM  (True/False?)
> - The DMA TIMING values listed in the Software Guide are for data read
from ROM or RAM, it doesn't make any difference  (True/False?)

Based upon a demo I did a long while back the following is a rough guide: 2
cycles / DL&DLL byte, 3 cycles / tile/graphics byte, approx 400 cycles
available per line.

> I expect I'm coming off as a complete jerk here, and I appologise.
However, my impression at this point is that if I rewrite my routines to use
sprites instead of characters and put all bitmaps in RAM that it will work
(128 bytes per line * 2 = 256 cycles or 128 bytes per line * 3 = 384 cycles
either of which should leave enough time for overhead but the former would
have the added bonus of being able to display other sprites on the layered
scanlines). However, I don't have the timing values nailed down and I don't
want to spend a day or day and a half in rewrites only to find out it's
still not fast enough.

IIRC, MARIA has just enough time for two complete rows of 160A double byte
characters.  I never tested this though.  (I had an idea for a scrolling
game with tiles for clouds & ground, check AA.)

Other related posts: