#pragma once

#include <stddef.h>
#include <stdint.h>

typedef volatile uint32_t reg32;


struct voodoo2_reg {
  reg32 status;            // (r ) Voodoo2 Graphics Status
  reg32 intrCtrl;          // (rw) Interrupt Status and Control
  reg32 vertexAx;          // ( w) Vertex A x-coordinate location (12.4 format)
  reg32 vertexAy;          // ( w) Vertex A y-coordinate location (12.4 format)
  reg32 vertexBx;          // ( w) Vertex B x-coordinate location (12.4 format)
  reg32 vertexBy;          // ( w) Vertex B y-coordinate location (12.4 format)
  reg32 vertexCx;          // ( w) Vertex C x-coordinate location (12.4 format)
  reg32 vertexCy;          // ( w) Vertex C y-coordinate location (12.4 format)
  reg32 startR;            // ( w) Starting Red parameter (12.12 format)
  reg32 startG;            // ( w) Starting Green parameter (12.12 format)
  reg32 startB;            // ( w) Starting Blue parameter (12.12 format)
  reg32 startZ;            // ( w) Starting Z parameter (20.12 format)
  reg32 startA;            // ( w) Starting Alpha parameter (12.12 format)
  reg32 startS;            // ( w) Starting S/W parameter (14.18 format)
  reg32 startT;            // ( w) Starting T/W parameter (14.18 format)
  reg32 startW;            // ( w) Starting 1/W parameter (2.30 format)
  reg32 dRdX;              // ( w) Change in Red with respect to X (12.12 format)
  reg32 dGdX;              // ( w) Change in Green with respect to X (12.12 format)
  reg32 dBdX;              // ( w) Change in Blue with respect to X (12.12 format)
  reg32 dZdX;              // ( w) Change in Z with respect to X (20.12 format)
  reg32 dAdX;              // ( w) Change in Alpha with respect to X (12.12 format)
  reg32 dSdX;              // ( w) Change in S/W with respect to X (14.18 format)
  reg32 dTdX;              // ( w) Change in T/W with respect to X (14.18 format)
  reg32 dWdX;              // ( w) Change in 1/W with respect to X (2.30 format)
  reg32 dRdY;              // ( w) Change in Red with respect to Y (12.12 format)
  reg32 dGdY;              // ( w) Change in Green with respect to Y (12.12 format)
  reg32 dBdY;              // ( w) Change in Blue with respect to Y (12.12 format)
  reg32 dZdY;              // ( w) Change in Z with respect to Y (20.12 format)
  reg32 dAdY;              // ( w) Change in Alpha with respect to Y (12.12 format)
  reg32 dSdY;              // ( w) Change in S/W with respect to Y (14.18 format)
  reg32 dTdY;              // ( w) Change in T/W with respect to Y (14.18 format)
  reg32 dWdY;              // ( w) Change in 1/W with respect to Y (2.30 format)
  reg32 triangleCMD;       // ( w) Execute TRIANGLE command (floating point)
  reg32 _reserved0[1];
  reg32 fvertexAx;         // ( w) Vertex A x-coordinate location (floating point)
  reg32 fvertexAy;         // ( w) Vertex A y-coordinate location (floating point)
  reg32 fvertexBx;         // ( w) Vertex B x-coordinate location (floating point)
  reg32 fvertexBy;         // ( w) Vertex B y-coordinate location (floating point)
  reg32 fvertexCx;         // ( w) Vertex C x-coordinate location (floating point)
  reg32 fvertexCy;         // ( w) Vertex C y-coordinate location (floating point)
  reg32 fstartR;           // ( w) Starting Red parameter (floating point)
  reg32 fstartG;           // ( w) Starting Green parameter (floating point)
  reg32 fstartB;           // ( w) Starting Blue parameter (floating point)
  reg32 fstartZ;           // ( w) Starting Z parameter (floating point)
  reg32 fstartA;           // ( w) Starting Alpha parameter (floating point)
  reg32 fstartS;           // ( w) Starting S/W parameter (floating point)
  reg32 fstartT;           // ( w) Starting T/W parameter (floating point)
  reg32 fstartW;           // ( w) Starting 1/W parameter (floating point)
  reg32 fdRdX;             // ( w) Change in Red with respect to X (floating point)
  reg32 fdGdX;             // ( w) Change in Green with respect to X (floating point)
  reg32 fdBdX;             // ( w) Change in Blue with respect to X (floating point)
  reg32 fdZdX;             // ( w) Change in Z with respect to X (floating point)
  reg32 fdAdX;             // ( w) Change in Alpha with respect to X (floating point)
  reg32 fdSdX;             // ( w) Change in S/W with respect to X (floating point)
  reg32 fdTdX;             // ( w) Change in T/W with respect to X (floating point)
  reg32 fdWdX;             // ( w) Change in 1/W with respect to X (floating point)
  reg32 fdRdY;             // ( w) Change in Red with respect to Y (floating point)
  reg32 fdGdY;             // ( w) Change in Green with respect to Y (floating point)
  reg32 fdBdY;             // ( w) Change in Blue with respect to Y (floating point)
  reg32 fdZdY;             // ( w) Change in Z with respect to Y (floating point)
  reg32 fdAdY;             // ( w) Change in Alpha with respect to Y (floating point)
  reg32 fdSdY;             // ( w) Change in S/W with respect to Y (floating point)
  reg32 fdTdY;             // ( w) Change in T/W with respect to Y (floating point)
  reg32 fdWdY;             // ( w) Change in 1/W with respect to Y (floating point)
  reg32 ftriangleCMD;      // ( w) Execute TRIANGLE command (floating point)
  reg32 fbzColorPath;      // (rw) Chuck Color Path Control
  reg32 fogMode;           // (rw) Fog Mode Control
  reg32 alphaMode;         // (rw) Alpha Mode Control
  reg32 fbzMode;           // (rw) RGB Buffer and Depth-Buffer Control
  reg32 lfbMode;           // (rw) Linear Frame Buffer Mode Control
  reg32 clipLeftRight;     // (rw) Left and Right of Clipping Register
  reg32 clipLowYHighY;     // (rw) Top and Bottom of Clipping Register
  reg32 nopCMD;            // ( w) Execute NOP command
  reg32 fastfillCMD;       // ( w) Execute FASTFILL command
  reg32 swapbufferCMD;     // ( w) Execute SWAPBUFFER command
  reg32 fogColor;          // ( w) Fog Color Value
  reg32 zaColor;           // ( w) Constant Alpha/Depth Value
  reg32 chromaKey;         // ( w) Chroma Key Compare Value
  reg32 chromaRange;       // ( w) Chroma Range Compare Values,modes,enable
  reg32 userIntrCMD;       // ( w) Execute USERINTERRUPT command
  reg32 stipple;           // (rw) Rendering Stipple Value
  reg32 color0;            // (rw) Constant Color #0
  reg32 color1;            // (rw) Constant Color #1
  reg32 fbiPixelsIn;       // (r ) Pixel Counter (Number pixels processed)
  reg32 fbiChromaFail;     // (r ) Pixel Counter (Number pixels failed Chroma test)
  reg32 fbiZfuncFail;      // (r ) Pixel Counter (Number pixels failed Z test)
  reg32 fbiAfuncFail;      // (r ) Pixel Counter (Number pixels failed Alpha test)
  reg32 fbiPixelsOut;      // (r ) Pixel Counter (Number pixels drawn)
  reg32 fogTable[32];      // ( w) Fog Table
  reg32 cmdFifoBaseAddr;   // (rw) CMDFIFO base address and size
  reg32 cmdFifoBump;       // (rw) CMDFIFO bump depth
  reg32 cmdFifoRdPtr;      // (rw) CMDFIFO current read pointer
  reg32 cmdFifoAMin;       // (rw) CMDFIFO current minimum address
  reg32 cmdFifoAMax;       // (rw) CMDFIFO current maximum address
  reg32 cmdFifoDepth;      // (rw) CMDFIFO current depth
  reg32 cmdFifoHoles;      // (rw) CMDFIFO number of holes
  reg32 _reserved1[1];
  reg32 fbiInit4;          // (rw) Chuck Hardware Initialization (register 4)
  reg32 vRetrace;          // (r ) Vertical Retrace Counter
  reg32 backPorch;         // (rw) Video Backporch Timing Generator
  reg32 videoDimensions;   // (rw) Video Screen Dimensions
  reg32 fbiInit0;          // (rw) Chuck Hardware Initialization (register 0)
  reg32 fbiInit1;          // (rw) Chuck Hardware Initialization (register 1)
  reg32 fbiInit2;          // (rw) Chuck Hardware Initialization (register 2)
  reg32 fbiInit3;          // (rw) Chuck Hardware Initialization (register 3)
  reg32 hSync;             // ( w) Horizontal Sync Timing Generator
  reg32 vSync;             // ( w) Vertical Sync Timing Generator
  reg32 clutData;          // ( w) Video Color Lookup Table Initialization
  reg32 dacData;           // ( w) External DAC Initialization
  reg32 maxRgbDelta;       // ( w) Max. RGB difference for Video Filtering
  reg32 hBorder;           // ( w) Horizontal Border Color Control
  reg32 vBorder;           // ( w) Vertical Border Color Control
  reg32 borderColor;       // ( w) Video Border Color
  reg32 hvRetrace;         // (r ) Horizontal and Vertical Retrace Counters (synced)
  reg32 fbiInit5;          // (rw) Chuck Hardware Initialization (register 5)
  reg32 fbiInit6;          // (rw) Chuck Hardware Initialization (register 6)
  reg32 fbiInit7;          // (rw) Chuck Hardware Initialization (register 7)
  reg32 _reserved2[2];
  reg32 fbiSwapHistory;    // (r ) Swap History Register
  reg32 fbiTrianglesOut;   // (r ) Triangle Counter (Number triangles drawn)
  reg32 sSetupMode;        // ( w) Triangle setup mode
  reg32 sVx;               // ( w) Triangle setup X
  reg32 sVy;               // ( w) Triangle setup Y
  reg32 sARGB;             // ( w) Triangle setup Alpha, Red, Green, Blue
  reg32 sRed;              // ( w) Triangle setup Red value
  reg32 sGreen;            // ( w) Triangle setup Green value
  reg32 sBlue;             // ( w) Triangle setup Blue value
  reg32 sAlpha;            // ( w) Triangle setup Alpha value
  reg32 sVz;               // ( w) Triangle setup Z
  reg32 sWb;               // ( w) Triangle setup Global W
  reg32 sWtmu0;            // ( w) Triangle setup Tmu0 & Tmu1 W
  reg32 sS_W0;             // ( w) Triangle setup Tmu0 & Tmu1 S/W
  reg32 sT_W0;             // ( w) Triangle setup Tmu0 & Tmu1 T/W
  reg32 sWtmu1;            // ( w) Triangle setup Tmu1 only W
  reg32 sS_Wtmu1;          // ( w) Triangle setup Tmu1 only S/W
  reg32 sT_Wtmu1;          // ( w) Triangle setup Tmu1 only T/W
  reg32 sDrawTriCMD;       // ( w) Triangle setup (Draw)
  reg32 sBeginTriCMD;      // ( w) Triangle setup Start New triangle
  reg32 _reserved3[6];
  reg32 bltSrcBaseAddr;    // (rw) BitBLT Source base address
  reg32 bltDstBaseAddr;    // (rw) BitBLT Destination base address
  reg32 bltXYStrides;      // (rw) BitBLT Source and Destination strides
  reg32 bltSrcChromaRange; // (rw) BiBLT Source Chroma key range
  reg32 bltDstChromaRange; // (rw) BitBLT Destination Chroma key range
  reg32 bltClipX;          // (rw) BitBLT Min/Max X clip values
  reg32 bltClipY;          // (rw) BitBLT Min/Max Y clip values
  reg32 _reserved4[1];
  reg32 bltSrcXY;          // (rw) BitBLT Source starting XY coordinates
  reg32 bltDstXY;          // (rw) BitBLT Destination starting XY coordinates
  reg32 bltSize;           // (rw) BitBLT width and height
  reg32 bltRop;            // (rw) BitBLT Raster operations
  reg32 bltColor;          // (rw) BitBLT and foreground background colors
  reg32 _reserved5[1];
  reg32 bltCommand;        // (rw) BitBLT command mode
  reg32 bltData;           // ( w) BitBLT data for CPU-to-Screen BitBLTs
  reg32 textureMode;       // ( w) Texture Mode Control
  reg32 tLOD;              // ( w) Texture LOD Settings
  reg32 tDetail;           // ( w) Texture LOD Settings
  reg32 texBaseAddr;       // ( w) Texture Base Address
  reg32 texBaseAddr_1;     // ( w) Texture Base Address (supplemental LOD 1)
  reg32 texBaseAddr_2;     // ( w) Texture Base Address (supplemental LOD 2)
  reg32 texBaseAddr_3_8;   // ( w) Texture Base Address (supplemental LOD 3-8)
  reg32 trexInit0;         // ( w) Bruce Hardware Initialization (register 0)
  reg32 trexInit1;         // ( w) Bruce Hardware Initialization (register 1)
  reg32 nccTable0[12];     // ( w) Narrow Channel Compression Table 0 (12 entries)
  reg32 nccTable1[12];     // ( w) Narrow Channel Compression Table 1 (12 entries)
};

static_assert((offsetof (struct voodoo2_reg, status))            == 0x000);
static_assert((offsetof (struct voodoo2_reg, intrCtrl))          == 0x004);
static_assert((offsetof (struct voodoo2_reg, vertexAx))          == 0x008);
static_assert((offsetof (struct voodoo2_reg, vertexAy))          == 0x00c);
static_assert((offsetof (struct voodoo2_reg, vertexBx))          == 0x010);
static_assert((offsetof (struct voodoo2_reg, vertexBy))          == 0x014);
static_assert((offsetof (struct voodoo2_reg, vertexCx))          == 0x018);
static_assert((offsetof (struct voodoo2_reg, vertexCy))          == 0x01c);
static_assert((offsetof (struct voodoo2_reg, startR))            == 0x020);
static_assert((offsetof (struct voodoo2_reg, startG))            == 0x024);
static_assert((offsetof (struct voodoo2_reg, startB))            == 0x028);
static_assert((offsetof (struct voodoo2_reg, startZ))            == 0x02c);
static_assert((offsetof (struct voodoo2_reg, startA))            == 0x030);
static_assert((offsetof (struct voodoo2_reg, startS))            == 0x034);
static_assert((offsetof (struct voodoo2_reg, startT))            == 0x038);
static_assert((offsetof (struct voodoo2_reg, startW))            == 0x03c);
static_assert((offsetof (struct voodoo2_reg, dRdX))              == 0x040);
static_assert((offsetof (struct voodoo2_reg, dGdX))              == 0x044);
static_assert((offsetof (struct voodoo2_reg, dBdX))              == 0x048);
static_assert((offsetof (struct voodoo2_reg, dZdX))              == 0x04c);
static_assert((offsetof (struct voodoo2_reg, dAdX))              == 0x050);
static_assert((offsetof (struct voodoo2_reg, dSdX))              == 0x054);
static_assert((offsetof (struct voodoo2_reg, dTdX))              == 0x058);
static_assert((offsetof (struct voodoo2_reg, dWdX))              == 0x05c);
static_assert((offsetof (struct voodoo2_reg, dRdY))              == 0x060);
static_assert((offsetof (struct voodoo2_reg, dGdY))              == 0x064);
static_assert((offsetof (struct voodoo2_reg, dBdY))              == 0x068);
static_assert((offsetof (struct voodoo2_reg, dZdY))              == 0x06c);
static_assert((offsetof (struct voodoo2_reg, dAdY))              == 0x070);
static_assert((offsetof (struct voodoo2_reg, dSdY))              == 0x074);
static_assert((offsetof (struct voodoo2_reg, dTdY))              == 0x078);
static_assert((offsetof (struct voodoo2_reg, dWdY))              == 0x07c);
static_assert((offsetof (struct voodoo2_reg, triangleCMD))       == 0x080);
static_assert((offsetof (struct voodoo2_reg, fvertexAx))         == 0x088);
static_assert((offsetof (struct voodoo2_reg, fvertexAy))         == 0x08c);
static_assert((offsetof (struct voodoo2_reg, fvertexBx))         == 0x090);
static_assert((offsetof (struct voodoo2_reg, fvertexBy))         == 0x094);
static_assert((offsetof (struct voodoo2_reg, fvertexCx))         == 0x098);
static_assert((offsetof (struct voodoo2_reg, fvertexCy))         == 0x09c);
static_assert((offsetof (struct voodoo2_reg, fstartR))           == 0x0a0);
static_assert((offsetof (struct voodoo2_reg, fstartG))           == 0x0a4);
static_assert((offsetof (struct voodoo2_reg, fstartB))           == 0x0a8);
static_assert((offsetof (struct voodoo2_reg, fstartZ))           == 0x0ac);
static_assert((offsetof (struct voodoo2_reg, fstartA))           == 0x0b0);
static_assert((offsetof (struct voodoo2_reg, fstartS))           == 0x0b4);
static_assert((offsetof (struct voodoo2_reg, fstartT))           == 0x0b8);
static_assert((offsetof (struct voodoo2_reg, fstartW))           == 0x0bc);
static_assert((offsetof (struct voodoo2_reg, fdRdX))             == 0x0c0);
static_assert((offsetof (struct voodoo2_reg, fdGdX))             == 0x0c4);
static_assert((offsetof (struct voodoo2_reg, fdBdX))             == 0x0c8);
static_assert((offsetof (struct voodoo2_reg, fdZdX))             == 0x0cc);
static_assert((offsetof (struct voodoo2_reg, fdAdX))             == 0x0d0);
static_assert((offsetof (struct voodoo2_reg, fdSdX))             == 0x0d4);
static_assert((offsetof (struct voodoo2_reg, fdTdX))             == 0x0d8);
static_assert((offsetof (struct voodoo2_reg, fdWdX))             == 0x0dc);
static_assert((offsetof (struct voodoo2_reg, fdRdY))             == 0x0e0);
static_assert((offsetof (struct voodoo2_reg, fdGdY))             == 0x0e4);
static_assert((offsetof (struct voodoo2_reg, fdBdY))             == 0x0e8);
static_assert((offsetof (struct voodoo2_reg, fdZdY))             == 0x0ec);
static_assert((offsetof (struct voodoo2_reg, fdAdY))             == 0x0f0);
static_assert((offsetof (struct voodoo2_reg, fdSdY))             == 0x0f4);
static_assert((offsetof (struct voodoo2_reg, fdTdY))             == 0x0f8);
static_assert((offsetof (struct voodoo2_reg, fdWdY))             == 0x0fc);
static_assert((offsetof (struct voodoo2_reg, ftriangleCMD))      == 0x100);
static_assert((offsetof (struct voodoo2_reg, fbzColorPath))      == 0x104);
static_assert((offsetof (struct voodoo2_reg, fogMode))           == 0x108);
static_assert((offsetof (struct voodoo2_reg, alphaMode))         == 0x10c);
static_assert((offsetof (struct voodoo2_reg, fbzMode))           == 0x110);
static_assert((offsetof (struct voodoo2_reg, lfbMode))           == 0x114);
static_assert((offsetof (struct voodoo2_reg, clipLeftRight))     == 0x118);
static_assert((offsetof (struct voodoo2_reg, clipLowYHighY))     == 0x11c);
static_assert((offsetof (struct voodoo2_reg, nopCMD))            == 0x120);
static_assert((offsetof (struct voodoo2_reg, fastfillCMD))       == 0x124);
static_assert((offsetof (struct voodoo2_reg, swapbufferCMD))     == 0x128);
static_assert((offsetof (struct voodoo2_reg, fogColor))          == 0x12c);
static_assert((offsetof (struct voodoo2_reg, zaColor))           == 0x130);
static_assert((offsetof (struct voodoo2_reg, chromaKey))         == 0x134);
static_assert((offsetof (struct voodoo2_reg, chromaRange))       == 0x138);
static_assert((offsetof (struct voodoo2_reg, userIntrCMD))       == 0x13c);
static_assert((offsetof (struct voodoo2_reg, stipple))           == 0x140);
static_assert((offsetof (struct voodoo2_reg, color0))            == 0x144);
static_assert((offsetof (struct voodoo2_reg, color1))            == 0x148);
static_assert((offsetof (struct voodoo2_reg, fbiPixelsIn))       == 0x14c);
static_assert((offsetof (struct voodoo2_reg, fbiChromaFail))     == 0x150);
static_assert((offsetof (struct voodoo2_reg, fbiZfuncFail))      == 0x154);
static_assert((offsetof (struct voodoo2_reg, fbiAfuncFail))      == 0x158);
static_assert((offsetof (struct voodoo2_reg, fbiPixelsOut))      == 0x15c);
static_assert((offsetof (struct voodoo2_reg, fogTable[0]))       == 0x160);
static_assert((offsetof (struct voodoo2_reg, cmdFifoBaseAddr))   == 0x1e0);
static_assert((offsetof (struct voodoo2_reg, cmdFifoBump))       == 0x1e4);
static_assert((offsetof (struct voodoo2_reg, cmdFifoRdPtr))      == 0x1e8);
static_assert((offsetof (struct voodoo2_reg, cmdFifoAMin))       == 0x1ec);
static_assert((offsetof (struct voodoo2_reg, cmdFifoAMax))       == 0x1f0);
static_assert((offsetof (struct voodoo2_reg, cmdFifoDepth))      == 0x1f4);
static_assert((offsetof (struct voodoo2_reg, cmdFifoHoles))      == 0x1f8);
static_assert((offsetof (struct voodoo2_reg, fbiInit4))          == 0x200);
static_assert((offsetof (struct voodoo2_reg, vRetrace))          == 0x204);
static_assert((offsetof (struct voodoo2_reg, backPorch))         == 0x208);
static_assert((offsetof (struct voodoo2_reg, videoDimensions))   == 0x20c);
static_assert((offsetof (struct voodoo2_reg, fbiInit0))          == 0x210);
static_assert((offsetof (struct voodoo2_reg, fbiInit1))          == 0x214);
static_assert((offsetof (struct voodoo2_reg, fbiInit2))          == 0x218);
static_assert((offsetof (struct voodoo2_reg, fbiInit3))          == 0x21c);
static_assert((offsetof (struct voodoo2_reg, hSync))             == 0x220);
static_assert((offsetof (struct voodoo2_reg, vSync))             == 0x224);
static_assert((offsetof (struct voodoo2_reg, clutData))          == 0x228);
static_assert((offsetof (struct voodoo2_reg, dacData))           == 0x22c);
static_assert((offsetof (struct voodoo2_reg, maxRgbDelta))       == 0x230);
static_assert((offsetof (struct voodoo2_reg, hBorder))           == 0x234);
static_assert((offsetof (struct voodoo2_reg, vBorder))           == 0x238);
static_assert((offsetof (struct voodoo2_reg, borderColor))       == 0x23c);
static_assert((offsetof (struct voodoo2_reg, hvRetrace))         == 0x240);
static_assert((offsetof (struct voodoo2_reg, fbiInit5))          == 0x244);
static_assert((offsetof (struct voodoo2_reg, fbiInit6))          == 0x248);
static_assert((offsetof (struct voodoo2_reg, fbiInit7))          == 0x24c);
static_assert((offsetof (struct voodoo2_reg, fbiSwapHistory))    == 0x258);
static_assert((offsetof (struct voodoo2_reg, fbiTrianglesOut))   == 0x25c);
static_assert((offsetof (struct voodoo2_reg, sSetupMode))        == 0x260);
static_assert((offsetof (struct voodoo2_reg, sVx))               == 0x264);
static_assert((offsetof (struct voodoo2_reg, sVy))               == 0x268);
static_assert((offsetof (struct voodoo2_reg, sARGB))             == 0x26c);
static_assert((offsetof (struct voodoo2_reg, sRed))              == 0x270);
static_assert((offsetof (struct voodoo2_reg, sGreen))            == 0x274);
static_assert((offsetof (struct voodoo2_reg, sBlue))             == 0x278);
static_assert((offsetof (struct voodoo2_reg, sAlpha))            == 0x27c);
static_assert((offsetof (struct voodoo2_reg, sVz))               == 0x280);
static_assert((offsetof (struct voodoo2_reg, sWb))               == 0x284);
static_assert((offsetof (struct voodoo2_reg, sWtmu0))            == 0x288);
static_assert((offsetof (struct voodoo2_reg, sS_W0))             == 0x28c);
static_assert((offsetof (struct voodoo2_reg, sT_W0))             == 0x290);
static_assert((offsetof (struct voodoo2_reg, sWtmu1))            == 0x294);
static_assert((offsetof (struct voodoo2_reg, sS_Wtmu1))          == 0x298);
static_assert((offsetof (struct voodoo2_reg, sT_Wtmu1))          == 0x29c);
static_assert((offsetof (struct voodoo2_reg, sDrawTriCMD))       == 0x2a0);
static_assert((offsetof (struct voodoo2_reg, sBeginTriCMD))      == 0x2a4);
static_assert((offsetof (struct voodoo2_reg, bltSrcBaseAddr))    == 0x2c0);
static_assert((offsetof (struct voodoo2_reg, bltDstBaseAddr))    == 0x2c4);
static_assert((offsetof (struct voodoo2_reg, bltXYStrides))      == 0x2c8);
static_assert((offsetof (struct voodoo2_reg, bltSrcChromaRange)) == 0x2cc);
static_assert((offsetof (struct voodoo2_reg, bltDstChromaRange)) == 0x2d0);
static_assert((offsetof (struct voodoo2_reg, bltClipX))          == 0x2d4);
static_assert((offsetof (struct voodoo2_reg, bltClipY))          == 0x2d8);
static_assert((offsetof (struct voodoo2_reg, bltSrcXY))          == 0x2e0);
static_assert((offsetof (struct voodoo2_reg, bltDstXY))          == 0x2e4);
static_assert((offsetof (struct voodoo2_reg, bltSize))           == 0x2e8);
static_assert((offsetof (struct voodoo2_reg, bltRop))            == 0x2ec);
static_assert((offsetof (struct voodoo2_reg, bltColor))          == 0x2f0);
static_assert((offsetof (struct voodoo2_reg, bltCommand))        == 0x2f8);
static_assert((offsetof (struct voodoo2_reg, bltData))           == 0x2fc);
static_assert((offsetof (struct voodoo2_reg, textureMode))       == 0x300);
static_assert((offsetof (struct voodoo2_reg, tLOD))              == 0x304);
static_assert((offsetof (struct voodoo2_reg, tDetail))           == 0x308);
static_assert((offsetof (struct voodoo2_reg, texBaseAddr))       == 0x30c);
static_assert((offsetof (struct voodoo2_reg, texBaseAddr_1))     == 0x310);
static_assert((offsetof (struct voodoo2_reg, texBaseAddr_2))     == 0x314);
static_assert((offsetof (struct voodoo2_reg, texBaseAddr_3_8))   == 0x318);
static_assert((offsetof (struct voodoo2_reg, trexInit0))         == 0x31c);
static_assert((offsetof (struct voodoo2_reg, trexInit1))         == 0x320);
static_assert((offsetof (struct voodoo2_reg, nccTable0[0]))      == 0x324);
static_assert((offsetof (struct voodoo2_reg, nccTable1[0]))      == 0x354);
