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.