deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* $XConsortium: wm3.h /main/4 1996/02/21 17:59:24 kaleb $ */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef HAVE_XORG_CONFIG_H
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include <xorg-config.h>
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include "vgaReg.h"
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef PC98_EGC
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define VGA_ALLPLANES 0xFL
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* Do call in Write Mode 3.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * We take care of the possibility that two passes are needed.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifndef PC98_EGC
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define DO_WM3(pgc,call) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync { int _tp, _fg, _bg, _alu; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync _fg = pgc->fgPixel; _bg = pgc->bgPixel; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync _tp = wm3_set_regs(pgc); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (call); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync if ( _tp ) { \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync _alu = pgc->alu; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pgc->alu = GXinvert; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync _tp = wm3_set_regs(pgc); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (call); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pgc->alu = _alu; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync } \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pgc->fgPixel = _fg; pgc->bgPixel = _bg; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync }
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#else
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define DO_WM3(pgc,call) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync { int _tp, _fg, _bg; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync _fg = pgc->fgPixel; _bg = pgc->bgPixel; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync _tp = wm3_set_regs(pgc); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (call); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pgc->fgPixel = _fg; pgc->bgPixel = _bg; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync }
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifndef PC98_EGC
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define WM3_SET_INK(ink) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync SetVideoGraphics(Set_ResetIndex, ink)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#else
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define WM3_SET_INK(ink) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync outw(EGC_FGC, ink)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* GJA -- Move a long word to screen memory.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * The reads into 'dummy' are here to load the VGA latches.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * This is a RMW operation except for trivial cases.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * Notice that we ignore the operation.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef PC98_EGC
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define UPDRW(destp,src) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync { volatile unsigned short *_dtmp = \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (volatile unsigned short *)(destp); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync unsigned int _stmp = (src); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync *_dtmp = _stmp; _dtmp++; _stmp >>= 16; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync *_dtmp = _stmp; }
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#else
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define UPDRW(destp,src) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync { volatile char *_dtmp = (volatile char *)(destp); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync unsigned int _stmp = (src); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync volatile int dummy; /* Bit bucket. */ \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync _stmp = ldl_u(&_stmp); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync dummy = *_dtmp; *_dtmp = _stmp; _dtmp++; _stmp >>= 8; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync dummy = *_dtmp; *_dtmp = _stmp; _dtmp++; _stmp >>= 8; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync dummy = *_dtmp; *_dtmp = _stmp; _dtmp++; _stmp >>= 8; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync dummy = *_dtmp; *_dtmp = _stmp; }
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define UPDRWB(destp,src) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync { volatile int dummy; /* Bit bucket. */ \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync dummy = *(destp); *(destp) = (src); }