[net.micro.atari] Modified Display Lists

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.