Skip to content

Commit 80d3e50

Browse files
committed
Updated SagaGFX.hidd for SAGA HW sprite support
1 parent 797f2e8 commit 80d3e50

3 files changed

Lines changed: 51 additions & 8 deletions

File tree

arch/m68k-amiga/hidd/sagagfx/sagagfx_hw.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ static inline __attribute__((always_inline)) ULONG READ32(IPTR a)
5050
return (*(volatile ULONG*)a);
5151
}
5252

53+
static inline __attribute__((always_inline)) VOID WRITE8(IPTR a, UBYTE b)
54+
{
55+
D(bug("WRITE8(%p,%02x)\n", a, b));
56+
*(volatile UBYTE *)(a) = (b);
57+
}
58+
5359
static inline __attribute__((always_inline)) VOID WRITE16(IPTR a, UWORD b)
5460
{
5561
D(bug("WRITE16(%p,%04x)\n", a, b));

arch/m68k-amiga/hidd/sagagfx/sagagfx_hw_v4.c

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,19 +134,47 @@ VOID SAGAHW_V4_SetSpriteHide(VOID)
134134

135135
VOID SAGAHW_V4_SetSpriteColors(UWORD *colors)
136136
{
137-
for (int i = 1; i < 4; i++)
137+
ULONG colorvalue;
138+
139+
for (int i = 0; i < 4; i++)
138140
{
139-
WRITE16(SAGA_V4_VIDEO_SPRITE_CLUT + (i << 1), colors[i]);
141+
colorvalue = (colors[i] & (0x0F00)) << 12 | (colors[i] & (0x00F0)) << 8 | (colors[i] & (0x000F)) << 4; // CLUT4->CLUT8
142+
143+
//kprintf("Sprite Color %d: %04x -> %08x\n", i, colors[i], colorvalue);
144+
145+
WRITE16(SAGA_VIDEO_SPRITECLUT_IDX, i);
146+
WRITE32(SAGA_VIDEO_SPRITECLUT_RGB, colorvalue);
140147
}
141148
}
142149

143150
VOID SAGAHW_V4_SetSpriteMemory(UBYTE *memory)
144151
{
145-
IPTR ptr = SAGA_V4_VIDEO_SPRITE_DATA;
152+
IPTR ptr = SAGA_VIDEO_SPRITEDATA;
146153

147-
ULONG x, y, pix, val;
154+
ULONG x, y, value;
148155

149-
for (y = 0; y < 16; y++)
156+
for (y=0; y < 16; y++)
157+
{
158+
for (x=0; x < 8; x++)
159+
{
160+
value = (memory[y * 16 + (x*2)] << 24) | (0xAA)<< 16 | (memory[y * 16 + (x*2) + 1] << 8) | (0xAA);
161+
WRITE32(ptr, value);
162+
ptr+=4;
163+
}
164+
for (x=0; x < 8; x++)
165+
{
166+
WRITE32(ptr, 0x00000000);
167+
ptr+=4;
168+
}
169+
}
170+
171+
for (x=0; x < 256; x++)
172+
{
173+
WRITE32(ptr, 0x00000000);
174+
ptr += 4;
175+
}
176+
177+
/*for (y = 0; y < 16; y++)
150178
{
151179
pix = 0x80008000;
152180
val = 0;
@@ -172,7 +200,7 @@ VOID SAGAHW_V4_SetSpriteMemory(UBYTE *memory)
172200
173201
WRITE32(ptr, val);
174202
ptr += 4;
175-
}
203+
}*/
176204
}
177205

178206
VOID SAGAHW_V4_SetSpritePosition(WORD x, WORD y)

arch/m68k-amiga/hidd/sagagfx/sagagfx_hw_v4.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,17 @@
2828

2929
#define SAGA_V4_VIDEO_SPRITE_POSX 0xDFF1D0 // [16-bits] Mouse Sprite X
3030
#define SAGA_V4_VIDEO_SPRITE_POSY 0xDFF1D2 // [16-bits] Mouse Sprite Y
31-
#define SAGA_V4_VIDEO_SPRITE_CLUT 0xDFF3A0 // [16-bits] Mouse Sprite CLUT[4]
32-
#define SAGA_V4_VIDEO_SPRITE_DATA 0xDFF800 // [16-bits] Mouse Sprite DATA[16*16]
31+
32+
//#define SAGA_V4_VIDEO_SPRITE_CLUT 0xDFF3A0 // [16-bits] Mouse Sprite CLUT[4] [WD] Legacy Cores < 12000
33+
//#define SAGA_V4_VIDEO_SPRITE_DATA 0xDFF800 // [16-bits] Mouse Sprite DATA[16*16] [WD] Legacy Cores < 12000
34+
35+
// Hardware sprite: 32x32, 1 byte color index + 1 byte alpha per pixel.
36+
// LONG layout: [pix0:8][alpha0:8][pix1:8][alpha1:8].
37+
// Palette: move.w index to $DFF3A8, then move.l RGB888 to $DFF3AA.
38+
#define SAGA_VIDEO_SPRITEDATA 0x00DFD000
39+
#define SAGA_VIDEO_SPRITECLUT_IDX 0x00DFF3A8
40+
#define SAGA_VIDEO_SPRITECLUT_RGB 0x00DFF3AA
41+
3342

3443
// PIXEL FORMATS
3544

0 commit comments

Comments
 (0)