Jump to content

Memory map

From GeekDotWiki
Revision as of 11:20, 9 April 2025 by Geekdot (talk | contribs)


All services of the ATW800/2 are memory mapped. So, reading/writing to a specific address in memory, you can e.g. communicate with the Transputer(s) or draw to the screen. This is the memory map depending on the Atari system used

As of April 2025
ATW800/2 Mega-ST Mega-STe TT
VidMem 0xFEC00000 0xFEA00000 0xFEC00000
SharedMem 0xFEDF4000 0xFEBF4000 0xFEDF4000
ATWinfo 0xFEDFDC00 0xFEBFDC00 0xFEDFDC00
CLUT shadow 0xFEDFDE00 0xFEBFDE00 0xFEDFDE00
VDI caches 0xFEDFE000 Exa0xFEBFE000ple 0xFEDFE000
FPGA LUT 0xFEDFF000 0xFEBFF000 0xFEDFF000
FPGA Info 0xFEDFF200 0xFEBFF200 0xFEDFF200
FPGA VTG 0xFEDFF800 0xFEBFF800 0xFEDFF800
FPGA Blit 0xFEDFF900 0xFEBFF900 0xFEDFF900
FPGA link 0xFEDFFAC0 0xFEBFFAC0 0xFEDFFAC0
C011 Link 0xFEFFFAC0 0xFEBFFA80 0xFEFFFAC0
CPLD version 0xFEFFFAD8 0xFEBFFA98 0xFEFFFAD8
VidMem

This is where ATW800/2’s video memory starts. For the default firmware, this covers a range of 2 megabytes.

SharedMem

Serves for fast data exchange between Atari and the synthetic Transputer in parallel operation.

ATWInfo

An info structure, created by NVDI/XVDI. Helios, for example, can use it to calculate its video RAM or to exit a Transputer program in an orderly manner.

struct nanoxk_atwinfo {
  long kennung_a;       /*[0] 'ATW8'      -> 0x41545738  */
  long kennung_b;       /*[4] 'XVDI'      -> 0x58564449 / 'NVDI' -> 0x4E564449  */
  long version;         /*[8]  z.B '0100' -> 0x30313030 , struct version, *NOT* VDI-version */
  long version_fpga;    /*[12] z.B '0106' -> 0x30313036  */
  long vdi_memstart;    /*[16] Startaddress videomem for VDI  */
  long vdi_memsize;     /*[20] Videomemory used by Atari, often vdi_stride * vdi_height * byteperpixel  */
  int  vdi_vstride;     /*[24] # of bytes per line  */
  int  vdi_bpp;         /*[26] bit per pixel 1(monochrome), 8, 15, 16  */
  int  vdi_width;       /*[28] width used by VDI */
  int  vdi_height;      /*[30] hight used by VDI */
  int  vtg[16];         /*[32] shadow VTG register, as set by VDI - used for re-init after running a Transputer program */
  int  endmagic;        /*[64] currently 0x4711 - prevents using corrupted data */
  int  stuffing         /*[66] alignment to 32-Bit, currently also 0x4711 */
  /* everything else until byte 511 is currently reserved */
 };
CLUT shadow

This contains a shadow of the VDI color look-up table (CLUT). It needs to be kept up-to-date by the VDI. It’s important if the Transputer is used e.g as an accelerator for the Atari.

VDI caches

This can be used for e.g. fill patterns for VDI acceleration - currently only used by XVDI - total size: 4kB

FPGA LUT / VTG / Blit

These addresses provide means to control the video-output.

FPGA Link / C011 Link

These are the addresses which can be used to communicate with the virtual Transputer inside the FPGA or a real Transputer(s) plugged into the ATW800/2 TRAM sockets.

FPGA Info / CPLD Version

These addresses return information about the currently programmed firmware inside the FPGA and CPLD.