Login
Search for:


Previous | Next

From: Marko_Mäkelä
Date: 1998-06-05
Subject: Re: RAM refresh
On Fri, 5 Jun 1998, Tibor Biczo wrote:

> Yes it wraps at line $100, but that's normal, as $100*5 is dividable
> with 256, so there will be no adress lost.

But this means that there is a big jump after line $137 or $105, just like with the VIC-II.

> Hmm, how does $d012 incrementation affects Ram refresh? Does the VIC-II
> increments $d012 at X-cords 0?

As far as I remember, at X-coordinate 0 the VIC-II retrieves some sprite pointers (sprite 2 or 3). The refresh comes after that, right before the character/graphics data fetch.

> Well, this will be a bit harder on Plus4, as in the RAM refresh cycles
> the registers of the TED are also acessed, and some of them are changing
> continously.

OK, so that is why I couldn't explain the RAM refresh values. I don't remember if I tried to initialize $ff00, but anyway the results were different between different test runs. I wouldn't have come up with the idea that the TED is reading its own registers. But that must be a side effect, I think. It drives the low address lines, because they are connected to the RAS cycle of the DRAMs, and leaves the high address lines undriven, which the internal pull-ups somewhere make $FF. The DRAMs won't be activated unless they get a CAS (column address select) signal, and they won't get it for $FF00-$FF3F or if the ROM is enabled. But for refresh, it is enough that the RAS (row address select) counts through all row addresses. And BTW, a 6-bit counter would be enough for 64k chips;
256k chips need a 8-bit counter. An internal 256k expansion would be more difficult to make if the counter was only 6 bits.

> So, it will a bit harder to do it on Plus4.

So? :-) Well, you just have to skip the difficult cycles somehow. For instance, with an RTS (the stack is filled with a constant byte that makes the program return to open address space) or RTI you can skip 5 or 6
difficult cycles, respectively. So, to skip the refresh cycles you could always do an RTS right before the refresh. No problem at all. But of course it would be nicer to also use the refresh cycles. And that's actually where all the action in my $dadb program takes place, as far as I remember.

Marko

Copyright © Plus/4 World Team, 2001-2024