Difference between revisions of "Tilemap"

From SpecNext official Wiki
Jump to: navigation, search
(cross-linking with particular Next-register articles, fixing range value in Y-offset description)
(One intermediate revision by one other user not shown)
Line 3: Line 3:
 
A screen mode similar to hardware text linked to the ULA modes which allows for either 40x32 or 80x32 16-colour 8x8 tiles.
 
A screen mode similar to hardware text linked to the ULA modes which allows for either 40x32 or 80x32 16-colour 8x8 tiles.
  
The tilemap is enabled using {{NextRegNo|$6B}} (107)
+
The tilemap is enabled using {{NextRegNo|$6B| / 107}}
  
 
   bit 7: 0=disable tilemap, 1=enable tilemap
 
   bit 7: 0=disable tilemap, 1=enable tilemap
Line 17: Line 17:
 
=== Tile Description ===
 
=== Tile Description ===
  
The tile description area is a contiguous list of tile descriptions starting at the location indicated by bits 5-0 of the value in {{NextRegNo|$6F}} (111).
+
The tile description area is a contiguous list of tile descriptions starting at the location indicated by bits 5-0 of the value in {{NextRegNo|$6F| / 111}}.
  
 
Each tile description is a 32 byte block of 4-bit values describing the indices of each pixel of a tile in row major order.
 
Each tile description is a 32 byte block of 4-bit values describing the indices of each pixel of a tile in row major order.
Line 23: Line 23:
 
=== Tilemap ===
 
=== Tilemap ===
  
The tilemap begins at the location stored in bits 5-0 of {{NextRegNo|$6E}} (110).
+
The tilemap begins at the location stored in bits 5-0 of {{NextRegNo|$6E| / 110}}.
  
This map either consists of either pairs of tile numbers and tile attributes, or a list of tile numbers. If no attributes are present (bit 5 of Nextreg $6B=1) then the attributes for all tiles come from {{NextRegNo|$6C}} (108).
+
This map either consists of either pairs of tile numbers and tile attributes, or a list of tile numbers. If no attributes are present (bit 5 of Nextreg $6B=1) then the attributes for all tiles come from {{NextRegNo|$6C| / 108}}.
  
 
==== Tile Attribute ====
 
==== Tile Attribute ====
Line 37: Line 37:
 
=== Additional Registers ===
 
=== Additional Registers ===
  
{{NextRegNo|$1B}} (27)
+
{{NextRegNo|$1B| / 27}}
 
   bits 7-0: Coord. of the clip window
 
   bits 7-0: Coord. of the clip window
 
   1st write = X1 position
 
   1st write = X1 position
Line 46: Line 46:
 
   Reads do not advance the clip position
 
   Reads do not advance the clip position
  
{{NextRegNo|$2F}} (47)
+
{{NextRegNo|$2F| / 47}}
 
   bits 7-2: Reserved (0)
 
   bits 7-2: Reserved (0)
 
   bits 1-0: MSB X Offset
 
   bits 1-0: MSB X Offset
 
   Meaningful Range is 0-319 in 40 char mode, 0-639 in 80 char mode
 
   Meaningful Range is 0-319 in 40 char mode, 0-639 in 80 char mode
  
{{NextRegNo|$30}} (48)
+
{{NextRegNo|$30| / 48}}
 
   bits 7-0: LSB X Offset
 
   bits 7-0: LSB X Offset
 
   Meaningful range is 0-319 in 40 char mode, 0-639 in 80 char mode
 
   Meaningful range is 0-319 in 40 char mode, 0-639 in 80 char mode
  
{{NextRegNo|$31}} (49)
+
{{NextRegNo|$31| / 49}}
 
   bits 7-0: Y Offset (0-255)
 
   bits 7-0: Y Offset (0-255)
  
{{NextRegNo|$43}} (67)
+
{{NextRegNo|$43| / 67}}
 
   bit 7: '1' to disable palette write auto-increment.
 
   bit 7: '1' to disable palette write auto-increment.
 
   bits 6-4: Select palette for reading or writing:
 
   bits 6-4: Select palette for reading or writing:
Line 74: Line 74:
 
   bit 0: Enable Enhanced ULA mode if 1 (0 after a reset)
 
   bit 0: Enable Enhanced ULA mode if 1 (0 after a reset)
  
{{NextRegNo|$68}} (104)
+
{{NextRegNo|$68| / 104}}
 
   bit 7: 1 to disable ULA output
 
   bit 7: 1 to disable ULA output
 
   bit 6: 0=select the ULA colour for blending in SLU modes 6 & 7
 
   bit 6: 0=select the ULA colour for blending in SLU modes 6 & 7
Line 82: Line 82:
 
             (if either are transparent the result is transparent otherwise the
 
             (if either are transparent the result is transparent otherwise the
 
             result is a logical AND of both colours)
 
             result is a logical AND of both colours)
 +
 +
=== More info ===
 +
[https://www.specnext.com/tilemap-mode/ Article about Tilemap Mode]

Revision as of 00:54, 19 September 2020

Tilemap

A screen mode similar to hardware text linked to the ULA modes which allows for either 40x32 or 80x32 16-colour 8x8 tiles.

The tilemap is enabled using Tilemap Control Register ($6B / 107)

 bit 7: 0=disable tilemap, 1=enable tilemap
 bit 6: 0=40x32, 1=80x32
 bit 5: 0=attributes in tilemap, 1=no attributes in tilemap
 bit 4: 0=primary palette, 1=secondary palette
 bits 3-2: reserved (0)
 bit 1: 0=256 tile mode, 1=512 tile mode
 bit 0: 1=tilemap over ULA

The tilemap consists of two data areas: tile descriptions and an actual tilemap; both of which are located in 16k page 5

Tile Description

The tile description area is a contiguous list of tile descriptions starting at the location indicated by bits 5-0 of the value in Tile Definitions Base Address Register ($6F / 111).

Each tile description is a 32 byte block of 4-bit values describing the indices of each pixel of a tile in row major order.

Tilemap

The tilemap begins at the location stored in bits 5-0 of Tilemap Base Address Register ($6E / 110).

This map either consists of either pairs of tile numbers and tile attributes, or a list of tile numbers. If no attributes are present (bit 5 of Nextreg $6B=1) then the attributes for all tiles come from Default Tilemap Attribute Register ($6C / 108).

Tile Attribute

 bits 7-4: palette offset
 bit 3: mirror X
 bit 2: mirror Y
 bit 1: Rotate
 bit 0: In 256-tile mode ULA over tilemap, in 512-tile mode bit 8 of tile number

Additional Registers

Clip Window Tilemap Register ($1B / 27)

 bits 7-0: Coord. of the clip window
 1st write = X1 position
 2nd write = X2 position
 3rd write = Y1 position
 4rd write = Y2 position
 The values are 0,159,0,255 after a Reset
 Reads do not advance the clip position

Tilemap Offset X MSB Register ($2F / 47)

 bits 7-2: Reserved (0)
 bits 1-0: MSB X Offset
 Meaningful Range is 0-319 in 40 char mode, 0-639 in 80 char mode

Tilemap Offset X LSB Register ($30 / 48)

 bits 7-0: LSB X Offset
 Meaningful range is 0-319 in 40 char mode, 0-639 in 80 char mode

Tilemap Offset Y Register ($31 / 49)

 bits 7-0: Y Offset (0-255)

Enhanced ULA Control Register ($43 / 67)

 bit 7: '1' to disable palette write auto-increment.
 bits 6-4: Select palette for reading or writing:
    000 = ULA first palette
    100 = ULA second palette
    001 = Layer 2 first palette
    101 = Layer 2 second palette
    010 = Sprites first palette 
    110 = Sprites second palette
    011 = Tilemap first palette
    111 = Tilemap second palette
 bit 3: Select Sprites palette (0 = first palette, 1 = second palette)
 bit 2: Select Layer 2 palette (0 = first palette, 1 = second palette)
 bit 1: Select ULA palette (0 = first palette, 1 = second palette)
 bit 0: Enable Enhanced ULA mode if 1 (0 after a reset)

ULA Control Register ($68 / 104)

 bit 7: 1 to disable ULA output
 bit 6: 0=select the ULA colour for blending in SLU modes 6 & 7
        1=select the ULA/tilemap mix for blending in SLU modes 6 & 7
 bits 5-1: Reserved (0)
 bit 0: 1=enable stencil mode when both the ULA and tilemap are enabled
           (if either are transparent the result is transparent otherwise the
            result is a logical AND of both colours)

More info

Article about Tilemap Mode