ekijak@ARDC.ARPA (Edmund S. Kijak, POINT) (11/25/85)
In the model 400/800 machines (and probably in the XL's), you can modify the display list to form custom screens. You can actually see the changes being made by POKEing new values into the current display list. All except for the very last display list instruction which is a JUMP to a two byte address which is the beginning of the display list. (This way you keep looping thru the same display list over and over to keep the screen refreshed). My question is why doesn't changing the last instruction or address have any effect? I've even POKEd zeroes into the last three bytes of a display list and seen no change to the screen.
c160-1bj%holden@UCBVAX (Courtney Goeltzenleuchter) (11/26/85)
Hi, you've probably already got a dozen answers on this one, but since I know the answer I thought I'd throw in my two cents worth. The Atari OS stores the location of the display list in locations 560, 561 (decimal usual low, high format). Every 60th of a second a vertical blank interupt is generated and this 'shadow' value is put into 54274, 54275 which tells the hardware to really find the display list. So, in effect, it makes the last instruction almost useless, the only thing it does is tell the hardware to stop sending stuff to the screen. In other words if you want to change whereyour display list is located you'll have to chage the 'shadow' memory. If you want to know ALL about the Atari 800 and related computers your best bet is the book "De Re Atari" it's just packed with useful info. Well I hope this answered you question. Have fun. -Courtney Goeltzenleuchter -- c160-1bj@holden@BERKENLEY.EDU
DYOUNG@USC-ISID.ARPA (C. David Young) (11/26/85)
I too have noticed that zeroing out the last 3 byte jump instruction of the gr.0 display list seems to have no effect. The only thing that I can figure is that ANTIC must be sometimes smart enough to know when it has reached the bottom of the screen and simply goes back to the beginning of the list. This is not always the case however because you can make the screen roll if you put too many instructions in the list. David Young -------
ekijak@ARDC.ARPA (Edmund S. Kijak, POINT) (11/27/85)
----- Forwarded message # 1: Received: from xerox.arpa by ARDC.ARDC.ARPA id a026363; 26 Nov 85 13:25 EST Received: from BacoNoir.ms by ArpaGateway.ms ; 26 NOV 85 10:24:30 PST Date: 26 Nov 85 13:24:21 EST (Tuesday) Subject: Re: Modified Display Lists In-reply-to: ekijak's message of Mon, 25 Nov 85 15:38:31 EST To: Edmund S. Kijak (POINT) <ekijak@ARDC.ARPA> From: Dan Fleysher <Fleysher.wbst@Xerox.ARPA> Message-ID: <851126-102430-3627@Xerox> that's strange. Let us all know if you get an answer. You would think that it would be nice to jump between alternate or multiple display lists, as one possible implementation of animation, etc. It sounds like the hardware responds to a JMP instruction by using the start address pointed to by that pointer in page mumble where the start address of the display list is stored, ignoring the one provided by the JMP instruction. I can't believe that is really the case... Dan ----- End of forwarded messages Dan, Yes, animation and multiple screens (like a double exposed photograph) are exactly what I had in mind when I found out the display list jump address was being ignored. Your explanation seems to be exactly what's happening. My thanks to others who responded (I won't repeat their messages since copies were cc'd to the net).
rasp@bmcg.UUCP (Ron Perloff) (12/04/85)
The short answer to the question of why the ATARI seems to
behave properly even when garbage is written into the JVB
instruction at the bottom of the Display List is that the
6502 initializes ANTIC's program counter during every
Vertical Blank Interval, thus overwriting the garbage with
"good stuff".
For those of you that are interested and to whom the above
paragraph raises more questions than answers, I have
included the long answer below.
Enjoy
Ron Perloff
Burroughs DSG
619-485-4519
Home: 17040 Oculto Court
San Diego, CA 92127
The ANTIC chip is a special purpose microcomputer that
happens to execute graphics-oriented instructions
instead of computational instructions. The
instructions consist of a one-byte op-code which in
some cases is accompanied by a two-byte operand. The
op-codes take the form:
IOOOMMMM
|-v---v-
| | |
| | |
| | +-- 4-bit mode field
| +------ 3-bit option field
+-------- interrupt request
When the interrupt request flag is on, ANTIC generates
a Display List Interrupt, DLI, to the 6502 at the
beginning of the last horizontal scan line caused by
the instruction. The interpretation of the option
field depends upon the value of the mode field.
ANTIC interprets the 4-bit mode field as follows:
MODE 0 --> DISPLAY n+1 BLANK LINES
The three bit option field specifies the number,
n, of lines to be displayed in the background
color; e.g.:
00000000 ==> DISPLAY 1 BLANK LINE
00010000 ==> DISPLAY 2 BLANK LINES
10100000 ==> DISPLAY 3 BLANK LINES,
DLI AT START OF 3rd LINE
MODE 1 --> JUMP INSTRUCTIONS
The jump instruction always includes a two-byte
operand field, in low/high format, which
indicates the location from which ANTIC will
take its next instruction. ANTIC performs the
jump like any microprocessor, reloading its
program counter with the value in the operand
field.
When the left-most bit of the option field holds
a "0", ANTIC displays one blank line and
performs the jump. When the left-most bit of
the option field holds a "1", ANTIC suspends
operation until the end of the vertical blank
interval. In both cases, ANTIC ignores the
remaining two bits in the option field.
ATARI calls the first form of the instruction
"JMP" and the second form JUMP VERTICAL BLANK or
"JVB".
MODES 2-F --> DISPLAY INSTRUCTIONS
ANTIC interprets all of the remaining
instructions as display instructions. In the
character modes, 2 through 7, each byte of
screen data indicates an offset into a character
set. The character modes differ from one
another in the interpretation of the bits in the
character set and the height and width of the
characters.
In the map modes, 8 through F, the bits of
screen data identify which the register whose
8-bit color description is to be displayed. The
various map modes differ in the number of bits
included in each pixel and the height and width
of each pixel. Pixels may contain either 1 or 2
or 4 bits.
The option field contains three independent
flags:
LVH
|||
||+-- enable Horizontal scrolling
|+--- enable Vertical scrolling
+---- Load data pointer
When the LOAD flag is on, ANTIC loads its data
pointer from the operand field of the
instruction before beginning to fetch screen
data. When the LOAD flag is off, ANTIC merely
continues taking screen data from the place that
the previous instruction left off.
The Horizontal and Vertical scrolling flags
allow ANTIC to perform fine scrolling on the
display. ANTIC takes the scrolling offsets from
on chip registers. from where the previous
instruction left off.
The 6502 gives ANTIC's program counter its initial
value, the top of the Display List, by storing low-
byte/high-byte into DLISTL/DLISTH, D402H/D403H. Once
ANTIC begins executing the display list, ANTIC can
theoretically keep going because the JVB instruction
at the bottom of the display list brings it back to
the top.
The designers of the ROM-resident operating system for
the ATARI very wisely decided to load a new value for
the starting Display List location as part of the
vertical blank interrupt procedure. They take the
address from a "shadow" location in RAM, SDLSTL/SDLSTH
or 230H/231H. Of course this overwrites the address
that the JVB instruction at the bottom of the display
list places in the ANTIC chip's program counter.