The above flow explanation ignores some subtleties like carriage return stripping and multiple space reduction. Those are left out because at least one tag, the
 tag (preformatted text) overrides those rules. 
 text is displayed in a monospaced font exactly as it is prepared
in the document.  Text is not wrapped, and spaces are not reduced.  So,
we will make those formatting options that are normally turned on.

@(A): Conclusion

I regret that we haven't gotten very far in the development process with
this installment, but we'll make up for lost time in the next
installment.  One thing that I would like to encourage from readers is
comments and suggestions.  Do you see a problem with some of the above
information?  Do you have a better way to parse some of the information? =

Do you see limitations in the data structures? Since we haven't delved
into some of these aspects yet, do you have some ideas of your own? I
can guarantee that I'm ready to discuss them with you; however, I can't
read your mind.  I think it's important that this project be completed,
as it forms the core of a successful WWW browser, and I see everyone
wanting to know when one will be available.  I am less concerned that my
name appear on the finished product.  In fact, I think a product that
draws on the talent of the entire Commodore community would most likely
exceed the quality a single individual can afford a piece of software. 
So, fire up those assemblers and put on those thinking caps.  

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

@(#)gfx: Creating 3-D Dungeon Crawls
         by Todd S. Elliott (telliott@ubmail.ubalt.edu)
         http://ubmail.ubalt.edu/~telliott/commodore.html
    
@(A): Introduction

What? Another article in C=3DHacking that deals with the subject of 3-D?
Well, not in the same vein as Mr. Judd's study in 3 Dimensions for
rendering shaded 3-D polygons in real time. (See Polygonomy in C=3DHackin=
g
12.) No, this article only deals with the aspect of the 3-D look and
feel in those dungeon crawls you see for the c64. Some titles spring to
mind, like the gold box series by SSI in collaboration with TSR, i.e.,
Pool of Radiance, Curse of the Azure Bonds, or other popular titles such
as the Bard's Tale Trilogy.

With the techniques described, the aspiring Dungeon Master (DM) can
create a rich world to torture his players at the local terminal of the
beloved c64! That, and some generous helpings from the local pizza
delivery company. "Hey! Look out for the grease! Arrrgh! Now the `A' key
is stained!" ;)

@(A): Nuts and Bolts
   
Let's begin with the 3-D screen. It is comprised of a 12x12 square of
custom characters, which never change position. The 12x12 square looks
like this:

characters 01,02,24,25,48,49,..,96,97,120,121
           03,04,26,27,50,51,..,98,99,122,123
           ..
           ..
           22,23,46,47,70,71,..,118,119,142,143

The 144 characters are positioned in an unusual way: they flow in two
character columns, run down for 24 characters, then go back up for the
next two-character columns. Think of these two-character columns as
SEAMS in the 3-D window. Right now, there are six such SEAMS in the 3-D
window for the dungeon. Of course, these are not the actual characters
(screen codes), (I forget what they are right now), but they are in a
continuous sequence, i.e., no broken or interrupted series of screen
codes. (If memory serves me correctly, they are the last 144 screen
codes in the 256 screen code table.) The corresponding color codes never
change, for the sake of speed.

Next, we deal with the concept of CELLS in the 3-D window. There are a
total of 13 CELLS which we can utilize individually to show an object,
which in turn, is displayed in the 3-D window in the correct
perspective. By objects, I mean walls or doors. The perspective is from
the user's standpoint. This creates the illusion of the 3-D look and
feel, but does not simulate true 3-D rendering on the fly such as
Polygonamy by Mr. Judd. (See Polygonomy, C=3DHacking 12.)  Let's take a
look at all 13 cells, to give us an idea of what each one does:

Cell 01 - Farthest left side object.
Cell 02 - Middle left side object.
Cell 03 - Immediate left side object.
Cell 04 - Farthest right side object.
Cell 05 - Middle right side object.
Cell 06 - Immediate right side object.
Cell 07 - Farthest front object.
Cell 08 - Middle front object.
Cell 09 - Immediate front object . (Currently used for backdrop only;
          fills the entire 12x12 screen.)
Cell 10 - Farthest left side object situated in front.
Cell 11 - Middle left side object situated in front.
Cell 12 - Farthest right side object situated in front.
Cell 13 - Middle right side object situated in front.

The 3-D engine, before it starts to redraw the 12x12 screen, checks the
user's (you!) orientation. If you are facing north, the engine will know
this and configure the 3-D window accordingly. Let's assume that the
user is facing north, and the 3-D engine now looks in the dungeon map
for relevant objects to place on the screen. The 3-D engine will look
for doors or walls only. In future revisions, this is expected to
change. Currently, the map value for a wall is 128 and for a door is 7.

First of all, the 3-D engine looks in Cell 3. If it finds an object
there, it will paint a wall or door and will skip the search in Cell 11.
The reason why Cell 11 was skipped is because an object was found in
Cell 3, which would overwrite Cell 11. We don't want the 3-D engine
accidentally overwriting Cell 3 with Cell 11 on top. Next, it searches
for an object in Cell 6, and if it finds an object there, it will skip
Cell 13. Last, it will search in Cell 8, and if an object is found, it
will skip all remaining cells except for Cells 10 & 12. This is to
ensure that there are no overlapping cells which result in a less-than
harmonious 3-D look and feel. This hunt and eliminate approach employed
by the 3-D engine can be referred to as a first-last approach. There are
three layers of information for the 3-D engine to process, and it starts
from the 1st layer to the 3rd layer, minimizing conflicts and results in
a natural 3-D look.

Here's the sample code for the direction of north:

   ;paint the north surroundings
   ; Note: the .Y register refers to the location in the map for the 3-D
   ; engine to search.
   ; position the paint location
   npaint  =3D*
           lda #101
           sta subtract+1
           sta addition+1
           jsr minus
   ;first block module
           ldy #100:jsr cell3
   ;second block module
           bne +:ldy #74:jsr cell11
   +       ldy #102:jsr cell6
           bne +:ldy #78:jsr cell13
   ;third block module
   +       ldy #76:jsr cell8:bne +
   ;fourth block module
           ldy #50:jsr cell2
   ;fifth block module
           ldy #52:jsr cell5
   ;sixth block module
           ldy #26:jsr cell7:bne +
   ;seventh block module
           ldy #0:jsr cell1
   ;eighth block module
           ldy #2:jsr cell4
   +       ldy #24:jsr cell10
           ldy #28:jsr cell12
   ;position the party
           jmp plus
  
@(A): Drawing the Screen

Now, on to the actual drawing of the 12x12 3-D screen! First, the 3-D
engine immediately draws a backdrop to Cell 9. This is the floor and the
sky you see in the 3-D world. (This step may be unnecessary in the
future.) Then, the 3-D engine takes the object found in a particular
cell and draws the object on the SEAM in the 12x12 window. Remember the
SEAM's, eh? Depending on the size of the object, the 3-D engine may
encompass two or more SEAM's in one sitting. First, it takes the pointer
values from the graphic tables, extracts the raw graphics data, and
stashes the same raw data on to the character dot data area. Please note
that the 3-D engine does not stash the data to the screen; only to the
character dot data area. Remember that the 12x12 had a character grid-
the VIC-II chip continuously updates the characters with its
corresponding dot data. Hence the reason why the characters never change
in the 12x12 3-D window. This is needed for two reasons: One, the 12x12
grid uses only 144 of the 256 available characters, leaving some left
over for regular character. Two, it allows the 3-D engine to `unroll'
the graphics updating loop using self-modifying code , resulting in
speed increases.

Here's a sample code for the grunt screen updating routine:

   ;to paint the 3d surroundings
   paint   =3D*
           lda #59:ldy #128; This is the lo-hi byte representation of
                           ; the character
           sta dummy+2:sty dummy+1; dot data area.
           lda milleu; the pointer to where the backdrop
                                  ; can be found.
           sta dumb+1:sty dumb+2
           ldx #$03
   -       lda #$00
           sta disflag,x; this flag is used for hidden objects.
           tay
   dumb    lda $ffff,y
   dummy   sta $ffff,y; This is the self-modifying code to draw the
                      ; backdrop.
           dey  
           bne dumb
           inc dummy+2
           inc dumb+2
           dex
           bpl - 
           ldy #127
   -       lda 22016,y
           sta 16256,y; The remaining part of the backdrop is drawn.
           dey
           bpl -
           jmp direction

   ; routine for printing two char wide column on the dungeon window
   table   =3D*
           lda cassette,y; retrieves the pointer values from a table.
           sta twain+1; The table is stored in the cassette buffer at
                      ; 820.
           iny
           lda cassette,y
           sta twain+2
           lda chartable,x
           sta seam+1; This retrieves the pointer values from a table
                     ; for
           inx       ; the character dot data area.
           lda chartable,x
           sta seam+2
           ldy #192; to output enough bytes to fill 24 characters.
           twain lda $ffff,y; Self-modifying code used here to draw the
                            ; 3-D screen.
   seam    sta $ffff,y
           dey
           bne twain
           dey
           rts

@(A): Conclusions

Whew! The 3-D engine has finally done its work and waits for the user to
press a key for a new facing. The 3-D engine by itself is quite small
and flexible enough to handle as much as the programmer wants to throw
at it! The power is in the tables and the 3-D hunt/eliminate routines.

The 3-D Dungeon Demo can be found in this issue of Commodore Hacking
(Reference: code, SubRef: gfxcode), on the Commodore Hacking MAILSERV
server (Reference: code), at http://www.msen.com/~brain/pub/dungeon.sda
or in the file DUNGEON.SDA available at my site.  There may be a c128
version in the offing, but in 40 col. mode. Of course, there are no
planned versions for the c65. ;) Please note that it does not contain
the source code. However, upon request, I will be happy to send you the
source code in Buddy format. (Right now, I'm trying to make the source
code assembler neutral to work in either ACEsembler or the Buddy assemble=
r.
  
Right now, I have already done work in producing a Dungeon Master's
environment- with a 12x12 screen grabber routine and a Retouch Studio.
The 3-D engine will be overhauled completely to create a 3-D environment
in the hi-res multi-color screen, as opposed to using custom characters.
In the future, I hope to have a complete environment, where the user can
design dungeons, comment them, add a bestiary, add custom doors and
walls, and map editors for the purpose of playing pen & paper dungeon
games. This way, the program only shows the visual aspects of the pen &
paper genre; it will not have combat or character interaction. I expect
a version to be ready by the end of summer '96. I'm not sure how I will
release the software, but I will choose an appropriate medium for mass
distribution that is accessible to C=3D users.

That's it! Feel free to drop me a line regarding this article. I'd be
happy and will try my best to answer any questions or comments about
this article. Until then, Happy 8-Bit computing!

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
  
@(#)trivia: Commodore Trivia
            by Jim Brain (j.brain@ieee.org)
           
@(A): Introduction

As some may know, these questions are part of a contest held each month o=
n
the Internet, in which the winner receives a donated prize.  I encourage
those who can received the newest editions of trivia to enter the contest.

This article contains the questions and answers for trivia editions #27-2=
8,
with questions for edition #29 and the current contest, #30.  Why two set=
s
of questions?  Well, as some may know.  I have recently moved, and that
has put me behind in posting answers.  At present, my reference books
are still packed in storage, so I can't finish the answers.
   
If you wish, you can subscribe to the trivia mailing list and receive the
newest editions of the trivia via Internet email.  To add your name to th=
e
list, please mail a message:
  
To: brain@mail.msen.com
Subject: MAILSERV
Body:
subscribe trivia Firstname Lastname
help
quit
  
@(A): Trivia Questions

Q $1A0) Commodore produced an assembler for the 128 called HCD65.  What
        does HCD stand for?
       
A $1A0) Hedly C. Davis, the writer of the assembler.

Q $1A1) Who wrote most of RAM DOS?

A $1A1) Although many assume Fred Bowen wrote RAMDOS, Hedly Davis actuall=
y
        wrote the bulk of it.

Q $1A2) What is the name of the first C64 disk copy program?  (hint: it
        sported a "gas gauge".)

A $1A2) 1541 Backup.

Q $1A3) What was the case color of the original Commodore 64s?

A $1A3) Ivory, just like the case color of the VIC-20.  In fact, early
        cases WERE VIC-20 cases.

Q $1A4) There are at least two ways to enter 64 mode from 128 mode on a C=
128:
        go 64 and sys 65357.  They produce the same result (64 mode), but
        they differ in at least one noticeable way.  How?

A $1A4) sys 65357 doesn't ask the "Are You Sure?" question.

Q $1A5) What CPU powers the B-128 computer system?

A $1A5) The 6509 CPU.

Q $1A6) What type of drive mechanisms are in the D series hard drives fro=
m
        Commodore?

A $1A6) The D9060 and D9090 drives used "Winchester" hard drive mechanism=
s.

Q $1A7) Commodore produced a 16kB RAM expander for the Commodore VIC-20.
        What is its model number?

A $1A7) The VIC-1111.

Q $1A8) Commodore produced at least one disk drive with an optical track
        one sensor.  Which drive?

A $1A8) Certain early versions of the 1541C drive had a functional track
        1 sensor.  Later, due to compatibility problems, it was disabled,=

        and then later, the sensor was removed from the mechanism.  In
        addition, 1571 drives and 1581 units have optical track sensors.

Q $1A9) The Commodore PET series used the IEEE bus to communicate with
        peripherals.  Each peripheral had a unique ID.  What range of IDs
        are supported by the PET?

A $1A9) IDs 4-15 are supported, although you cannot connect all 12 device=
s
        up at one time.

Q $1AA) Many people have developed Commodore software with the PAL assemb=
ler.
        What does PAL stand for?

A $1AA) Personal Assembly Language (PAL).

Q $1AB) Many people remember Compute's Gazette.  This magazine is best kn=
own
        for the word processor program it shared with thousands of
        subscribers.  Name the program?

A $1AB) SpeedScript.

Q $1AC) In some 6502 assemblers, the opcode "bge" is available.  It stand=
s
        for "branch if greater than or equal to".  What more common opcod=
e
        is this opcode referring to?

A $1AC) bcs (Branch Carry Set)

Q $1AD) If I wanted to do a "blt" (branch if result less than), what 6502=

        opcode would I use?

A $1AD) bcc (Branch Carry Clear)

Q $1AE) Each Commodore peripheral has a device number, which is associate=
d
        with a type of device.  8-15 implied disk drive, 4-5 implies
        printer.  These have remained constant from the PET to the C128.
        However, one peripheral in the PET was phased out and its device
        number was reused.  What device number was reused?

A $1AE) Device #2.  The PET systems used #2 as a second tape drive, but i=
n
        the newer computers, #2 refers to the RS-232 port.

Q $1AF) What is the maximum amount of general purpose RAM can one utilize
        in a stock C64?  (I need an exact number here)

A $1AF) In the Ultimax memory configuration, if you guarantee no interrup=
ts
        can occur, one can utilize all but the first two memory locations
        for general purpose RAM, giving 65534 bytes of RAM.  If you can't
        guarantee you'll never receive an NMI, you lose 2 more bytes for =
that
        vector, giving 65532 bytes available.

Q $1B0) What was COMPUTE!'s original sub title?
    =09
A $1B0) "The Journal for Progressive Computing".

Q $1B1) After COMPUTE! was absorbed by General Media, how did the name
        change?
    =09
A $1B0) The name, having gained an exclamation point and lost a period ma=
ny
         years before, reverted back to the period as the ending punctuat=
ion.

Q $1B2) What Commodore content magazine was named after a nautical term?
    =09
A $1B0) "Ahoy!"

Q $1B3) What Commodore content magazine was named after a BASIC keyword?
    =09
A $1B0) "RUN"

Q $1B4) What CPU gets control first when a Commodore 128 is booted?
    =09
A $1B0) The Z80 CPU has control first.

Q $1B5) What CPU powered the Commodore C900?
    =09
A $1B0) The Zilog Z8000, from the company who brought us the popular Z80.

Q $1B6) How large is the monitor installed in the SX64?
    =09
A $1B0) 5" diagonal.

Q $1B7) What color scheme does the SX64 boot up into?
    =09
A $1B0) White screen with cyan border and blue text.

Q $1B8) What is printed as the stock SX64 boot up screen?
    =09
A $1B0)      *****  SX-64 BASIC V2.0  *****
         64K RAM SYSTEM  38911 BASIC BYTES FREE

        READY.
        _

Q $1B9) The SX64 has a reset switch behind the door that holds the
        monitor controls.  What is strange about the rest switch?
    =09
A $1B0) The reset switch only resets the disk drive.  Most people assume =
it
        resets the entire computer system.

Q $1BA) What common port is not included on the SX64?
    =09
A $1B0) The Cassette Port.

Q $1BB) In the mid 1980's, a company called Berkeley Softworks created
        a graphical user environment for the Commodore 64.  What was it
        called?
    =09
A $1B0) Graphical Environment Operating System (GEOS).

Q $1BC) Berkeley Softworks eventually changed their name to what?
    =09
A $1B0) GEOWorks.  They now develop the GEOS OS for Personal Digital
        Assistants (PDA).

Q $1BD) Most everyone is familiar with MSD disk drives.  What does MSD
        stand for?
    =09
A $1B0) Micro Systems Development, Inc.

Q $1BE) On the NMOS 6502, what two addressing modes have but one opcode
        each that can operate in that mode?
      
A $1B0) Actually, there is only one such mode, indirect.  jmp (xxxx) is
        the only opcode that can utilize that addressing mode.

Q $1BF) How many transfer register opcodes are there on the NMOS 6502?
        
A $1B0) 6 (TAX, TAY, TSX, TXA, TXS, TYA).

Q $1C0) What are the two configurations for the LORAM, HIRAM, GAME, and E=
XROM
        pins that will allow the use of a full 64kB of RAM in the C64?
    =09
Q $1C1) What is the first thing that the C64 (and VIC) KERNAL does upon
        powerup?
    =09
Q $1C2) What KERNAL routine is used to set a DOS channel to input? 
    =09
Q $1C3) What KERNAL routine is used to set a DOS channel to output? 
    =09
Q $1C4) Before calling the routines in $1C2 and $1C3, what register must
        you load?
    =09
Q $1C5) What 3 devices can the KERNAL NOT load from?
    =09
Q $1C6) In the Commodore KERNAL, there are "high" and "low" level routine=
s.
        To which class of routines does "SECOND" belong?
    =09
Q $1C7) If a programmer calls the KERNAL routine "STOP" and the RUN/STOP
        key is NOT pressed, what is returned in the .A register?
    =09
Q $1C8) The Commodore KERNAL routines are all accessed via a jump table.
        What routine is used to change the values in the KERNAL jump tabl=
e?
    =09
Q $1C9) A call is made to a KERNAL routine, the call returns with the C
        bit set and the .A register holds $02.  What error does this
        indicate?
    =09
Q $1CA) If a call to READST is made, and a $40 is returned in .A, what
        does this indicate?
    =09
Q $1CB) What routine can be called to determine the physical format of th=
e
        Commodore 64 screen in characters?
    =09
Q $1CC) The Commodore 64 starts a non-destructive RAM test at what locati=
on?
    =09
Q $1CD) Which way does the RAM test proceed: up or down?
    =09
Q $1CE) Which KERNAL routine is used ONLY in conjunction with a Commodore
        IEEE card?
      
Q $1CF) Many hybrid BASIC/ML programs use SYS to transfer control from BA=
SIC
        to ML.  However, a few use USR(X).  When using the latter functio=
n,
        where does BASIC fetch the ML routine's starting address from?

Q $1D0) To load a program from the current location on a cassette tape, w=
hat
        two key combination must a user press on a VIC-20 or C64.
    =09
Q $1D1) If I issue the BASIC statement OPEN "JIM,S,W", What type of file
        am I opening?
    =09
Q $1D2) Is BASIC in the Commodore computer systems an "interpreted" or
        "compiled" language
    =09
Q $1D3) What type of variable is A%?
    =09
Q $1D4) If I issue the BASIC line PRINT:PRINT "A","B" what column does
        the "B" show up on when run on a C64?
    =09
Q $1D5) What column does "B" show up on if I run the BASIC line in $1D4 o=
n
        a VIC-20?
    =09
Q $1D6) Alphabetically, what is the first BASIC 2.0 to have a 3 letter
        abbreviation?
    =09
Q $1D7) How many times does the statement FOR T=3D1TO0 execute?
    =09
Q $1D8) What base does the BASIC LOG command use for its logarithm
        function?
    =09
Q $1D9) A =3D NOT B can be written as which expression:
        
        a) A =3D -B
        b) A =3D -(B+1)
       
Q $1DA) What does INT(-15.43) return?
    =09
Q $1DB) What does ASC$("JIM") return?
     
Q $1DC) What is the abbreviation for GET#?
    =09
Q $1DD) What is the largest integer value that Commodore BASIC can handle=
?
    =09
Q $1DE) What is the ONLY Commodore Editor key not affected by "quote mode=
"
         
Q $1DF) What is the range of RND?
        
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

@(#)error: ? DS, DS$: rem The Error Channel

We here at Hacking Headquarters are actually perfect, but the online
networks occasionally globally alter the issue after it leaves our hands.
The printed version is similarly changed by the print shop.  We think
it's an attempt to discredit us, but we will thwart them again by simply
printing the corrections to the mistakes THEY introduced below. 
   
@(e)dbldma: Speed up RAMLink transfers with the Double-DMA Technique

Brett Tabke wrote in to correct some misinformation contained in this
article in Issue #11.  In the article's discussion of RAMDOS, it was
written that "RAMDOS continually pages its code in and out of main
memory" during transfers.  Mr. Tabke, who has researched the RAMDOS code
extensively, notes that the above is incorrect.  RAMDOS pages the main
code in to initiate the transfer, but the bulk of transfers are handled
by the 256 byte interface that remains in memory at all times. 

@(e)mags: Hacking the Mags

We reprinted Jeff Jones' electronic mail address as printed in LOADSTAR
LETTER #31, but Jeff sent us a note mentioning the address had changed,
and the correct email address is jeff@loadstar.com.
  
@(e)cmdcpu: Underneath the Hood of the SuperCPU

In this article in version 1.0 of Issue #12, there were two references to=

"Exploiting the 65C816S CPU", an article pulled from the issue for space
reasons.  We regret the error.  The full article on the 65C816S appears i=
n
this issue (Reference: cpu).

@(e)gfx: Taking to TED: The MOS 7360/8360 Display ICs

In early versions of Issue #12, the TED IC article was incorrectly
attributed to Harsfalvi Levente.  Hungarians customarily sign names with
the last name first, opposite English notation (implying that the other
way must be Hungarian notation :-).  The article should be attributed to
Levente Harsfalvi.  Version 1.3 of the issue fixes this problem.

@(e)polygon: Polygonamy: A Study in 3 Dimensions

After the publication of this article in Issue 12, Stephen Judd noted tha=
t
the following information was not included in the article:

Memory map:

$0800-$1BFF  Tables
$1C00-$1FFF  Color info for bitmap #1
$2000-$3FFF  Bitmap 1
$4000-$58FF  Fill routine for bitmap #1
$5900-$5BFF  Tables
$5C00-$5FFF  Color info for bitmap #2
$6000-$7FFF  Bitmap #2
$8000-$A6FF  Code
$A700-$BFFF  Fill routine for bitmap #2
$C000-$C5FF  Yet more tables
$C600-$C6FF  List of points for plotting routine
$C700-$C7FF  Fill patterns
$C800-$CDFF  A few more tables

The fill pattern table may be broken down further.  Each fill pattern
is eight bytes, so to get the address in the fill table multiply the
pattern number by eight:

0 - Empty (clear)
1 - $FF (solid)
2 - Brick
3 - CrossSmall
4 - Inverse of 3
5 - Dither 1
6 - Dither 2 (inverse of 5)
7 - Zigs
8 - Zags
9 - Zigzag
10- Holes
11- Smiley
12-15 Not used
16-23 Shockwave    \ Animated patterns, eight frames each
24-31 Squaredance  /

If you have a freezer cartridge you might want to try changing the
patterns.  You might also turn on the multicolor bit (bit 4 of $D016)
to see what a multicolor Polygonamy might look like, and change the
patterns (not to mention the color info) to be more multicolor-friendly.