// ---- TRAM
enum {
TRAMATR_COLOR = 0x07,
TRAMATR_REVERSE = 0x08,
TRAMATR_BLINK = 0x10,
TRAMATR_PCG = 0x20,
TRAMATR_Yx2 = 0x40,
TRAMATR_Xx2 = 0x80,
TRAMKNJ_ULINE = 0x20
};
enum {
UPDATE_TRAM = (1 << 5),
UPDATE_VRAM0 = (1 << 6),
UPDATE_VRAM1 = (1 << 7),
UPDATE_VRAM = UPDATE_VRAM0 | UPDATE_VRAM1,
UPDATE_TVRAM = UPDATE_VRAM0 | UPDATE_VRAM1 | UPDATE_TRAM
};
typedef struct {
UINT8 ank;
UINT8 knj;
UINT8 atr;
UINT8 udt;
} TRAM;
// ---- GRAM
#if !defined(VRAMSTOIC) // メモリキャッシュ優先
enum {
GRAM_SIZE = 0x20000,
GRAM_BANK0 = 0x00000,
GRAM_BANK1 = 0x10000,
GRAM_BANK0L = 0x00000,
GRAM_BANK0H = 0x08000,
GRAM_BANK1L = 0x10000,
GRAM_BANK1H = 0x18000,
GRAM_HALFSTEP = 0x08000,
GRAM_LINESTEP = 0x01,
GRAM_B = 0x08,
GRAM_R = 0x10,
GRAM_G = 0x18,
GRAM_RGBMASK = 0x18
};
#define PORT2GRAM(port) ((LOW11((port)) << 5) + ((port) >> 11))
#define PORT2GRAM2(port) ((((port) << 5) + ((port) >> 11)) & 0xffe7)
#define TRAM2GRAM(addr) ((addr) << 5)
#else // メモリ並び優先
enum {
GRAM_SIZE = 0x18000,
GRAM_BANK0 = 0x00000,
GRAM_BANK1 = 0x0c000,
GRAM_BANK0L = 0x00000,
GRAM_BANK0H = 0x00400,
GRAM_BANK1L = 0x0c000,
GRAM_BANK1H = 0x0c400,
GRAM_HALFSTEP = 0x00400,
GRAM_LINESTEP = 0x0800,
GRAM_B = 0x0000,
GRAM_R = 0x4000,
GRAM_G = 0x8000,
GRAM_RGBMASK = 0xc000
};
#define PORT2GRAM(port) ((port) - 0x4000)
#define PORT2GRAM2(port) ((port) & (~0xc000))
#define TRAM2GRAM(addr) (addr)
#endif
#ifdef __cplusplus
extern "C" {
#endif
extern TRAM tram[0x800];
extern UINT8 gram[GRAM_SIZE];
#ifdef __cplusplus
}
#endif
#define TRAM_ANK(addr) tram[addr].ank
#define TRAM_KNJ(addr) tram[addr].knj
#define TRAM_ATR(addr) tram[addr].atr
#define TRAMUPDATE(addr) tram[addr].udt
RetroPC.NET-CVS <cvs@retropc.net>