1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
/* $XConsortium: ct_Blitter.h /main/2 1996/10/25 10:28:37 kaleb $ */
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/chips/ct_Blitter.h,v 1.4 2002/01/25 21:55:58 tsi Exp $ */
/* Definitions for the Chips and Technology BitBLT engine communication. */
/* registers */
/* Do not read 87D0 while BitBLT is active */
/* 83D0: 11-0 source offset, width of 'screen' */
/* 15-12 reserved (0) */
/* 27-16 destination offset, width of screen */
/* 31-28 reserved (0) */
/* 87D0: 20-0 pattern (alinged 8 pixel x 8 line) pointer */
/* 31-21 reserved (0) */
/* 8BD0: 15-0 backgroud colour */
/* 31-6 duplicate of 15-0 */
/* 8FD0: 15-0 foregroud/solid colour */
/* 31-6 duplicate of 15-0 */
/* 93D0: 7-0 ROP, same as MS-Windows */
/* 8 BitBLT Y direction, if 0 bottom to top, 1 top to bottom */
/* 9 BitBLT X direction, if 0 right to left, 1 left to right */
/* 10 source data, if 0 source is selected bit 14, 1 foregourd colour */
/* 11 source depth, if 0 source is colour, */
/* 1 source is monochrome(Font expansion) */
/* 12 pattern depth, if 0 colour, else monochrome */
/* 13 background, if 0 opaque (8BD0), else transparent */
/* 14 BitBLT source, if 0 screen, else system memory */
/* 15 reserved (0, destination?) */
/* 18-16 starting row of 8x8 pattern */
/* 19 if 1 solid pattern (Brush), else bitmap */
/* 20(R) BitBLT status, if 1 active */
/* 23-21 reserved (0) */
/* 27-24 vacancy in buffer */
/* 31-25 reserved (0) */
/* 97D0: 20-0 source address (byte aligned) */
/* 31-21 reserved (0) */
/* 9BD0: 20-0 destination address (byte aligned) */
/* 31-21 reserved (0) */
/* 9FD0: 11-0 number of bytes to be transferred per line */
/* 15-12 reserved (0) */
/* 27-16 height in lines of the block to be transferred */
/* 31-28 reserved (0) */
/* BitBLT modes for register 93D0. */
#define ctPATCOPY 0xF0
#define ctTOP2BOTTOM 0x100
#define ctBOTTOM2TOP 0x000
#define ctLEFT2RIGHT 0x200
#define ctRIGHT2LEFT 0x000
#define ctSRCFG 0x400
#define ctSRCMONO 0x800
#define ctPATMONO 0x1000
#define ctBGTRANSPARENT 0x2000
#define ctSRCSYSTEM 0x4000
#define ctPATSOLID 0x80000L
#define ctPATSTART0 0x00000L
#define ctPATSTART1 0x10000L
#define ctPATSTART2 0x20000L
#define ctPATSTART3 0x30000L
#define ctPATSTART4 0x40000L
#define ctPATSTART5 0x50000L
#define ctPATSTART6 0x60000L
#define ctPATSTART7 0x70000L
/* Macros to do useful things with the C&T BitBLT engine */
#define ctBLTWAIT \
{HW_DEBUG(0x4+2); while(inw(cPtr->PIOBase+DR(0x4)+2)&0x10){};}
#define ctSETROP(op) \
{HW_DEBUG(0x4); outl(cPtr->PIOBase+DR(0x4),(op));}
#define ctSETSRCADDR(srcAddr) \
{HW_DEBUG(0x5); outl(cPtr->PIOBase+DR(0x5),((srcAddr)&0x1FFFFFL));}
#define ctSETDSTADDR(dstAddr) \
{HW_DEBUG(0x6); outl(cPtr->PIOBase+DR(0x6),((dstAddr)&0x1FFFFFL));}
#define ctSETPITCH(srcPitch,dstPitch) \
{HW_DEBUG(0x0); outl(cPtr->PIOBase+DR(0x0),(((dstPitch)<<16)|(srcPitch)));}
/* Note that this command signal a blit to commence */
#define ctSETHEIGHTWIDTHGO(Height,Width)\
{HW_DEBUG(0x7); outl(cPtr->PIOBase+DR(0x7),(((Height)<<16)|(Width)));}
#define ctSETPATSRCADDR(srcAddr)\
{HW_DEBUG(0x1); outl(cPtr->PIOBase+DR(0x1),((srcAddr)&0x1FFFFFL));}
/* I can't help pointing out at this point that I'm not complaining
* about the american spelling of Colour!! [DGB] */
#define ctSETBGCOLOR8(c) {\
HW_DEBUG(0x2); \
if ((cAcl->bgColor != (c)) || (cAcl->bgColor == -1)) { \
cAcl->bgColor = (c); \
outl(cPtr->PIOBase+DR(0x2),((((((c)&0xFF)<<8)|((c)&0xFF))<<16) | \
((((c)&0xFF)<<8)|((c)&0xFF)))); \
} \
}
#define ctSETBGCOLOR16(c) {\
HW_DEBUG(0x2); \
if ((cAcl->bgColor != (c)) || (cAcl->bgColor == -1)) { \
cAcl->bgColor = (c); \
outl(cPtr->PIOBase+DR(0x2),((((c)&0xFFFF)<<16)|((c)&0xFFFF))); \
} \
}
/* As the 6554x doesn't support 24bpp colour expansion this doesn't work */
#define ctSETBGCOLOR24(c) {\
HW_DEBUG(0x2); \
if ((cAcl->bgColor != (c)) || (cAcl->bgColor == -1)) { \
cAcl->bgColor = (c); \
outl(cPtr->PIOBase+DR(0x2),(c)&0xFFFFFF); \
} \
}
#define ctSETFGCOLOR8(c) {\
HW_DEBUG(0x3); \
if ((cAcl->fgColor != (c)) || (cAcl->fgColor == -1)) { \
cAcl->fgColor = (c); \
outl(cPtr->PIOBase+DR(0x3),((((((c)&0xFF)<<8)|((c)&0xFF))<<16) | \
((((c)&0xFF)<<8)|((c)&0xFF)))); \
} \
}
#define ctSETFGCOLOR16(c) {\
HW_DEBUG(0x3); \
if ((cAcl->fgColor != (c)) || (cAcl->fgColor == -1)) { \
cAcl->fgColor = (c); \
outl(cPtr->PIOBase+DR(0x3),((((c)&0xFFFF)<<16)|((c)&0xFFFF))); \
} \
}
/* As the 6554x doesn't support 24bpp colour expansion this doesn't work */
#define ctSETFGCOLOR24(c) {\
HW_DEBUG(0x3); \
if ((cAcl->fgColor != (c)) || (cAcl->fgColor == -1)) { \
cAcl->fgColor = (c); \
outl(cPtr->PIOBase+DR(0x3),(c)&0xFFFFFF); \
} \
}
/* Define a Macro to replicate a planemask 64 times and write to address
* allocated for planemask pattern */
#define ctWRITEPLANEMASK8(mask,addr) { \
if (cAcl->planemask != (mask&0xFF)) { \
cAcl->planemask = (mask&0xFF); \
memset((unsigned char *)cPtr->FbBase + addr, (mask&0xFF), 64); \
} \
}
#define ctWRITEPLANEMASK16(mask,addr) { \
if (cAcl->planemask != (mask&0xFFFF)) { \
cAcl->planemask = (mask&0xFFFF); \
{ int i; \
for (i = 0; i < 64; i++) { \
memcpy((unsigned char *)cPtr->FbBase + addr \
+ i * 2, &mask, 2); \
} \
} \
} \
}
|