[Lapetus-cvs] lapetus vdp1.c, NONE, 1.1 rotscr.c, 1.1, 1.2 vdp.h, 1.5, 1.6
Status: Inactive
Brought to you by:
cyberwarriorx
From: Theo B. <cyb...@us...> - 2007-07-04 02:32:46
|
Update of /cvsroot/lapetus/lapetus In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv7163 Modified Files: rotscr.c vdp.h Added Files: vdp1.c Log Message: -Moved rottbl_struct typedef to vdp.h -Added new file for vdp1 drawing: vdp1.c -Added functions for system clipping, user clipping, normal sprite drawing, scaled sprite drawing, distorted sprite drawing. Index: rotscr.c =================================================================== RCS file: /cvsroot/lapetus/lapetus/rotscr.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- rotscr.c 27 Feb 2007 23:32:55 -0000 1.1 +++ rotscr.c 4 Jul 2007 02:32:43 -0000 1.2 @@ -19,20 +19,6 @@ #include "lapetus.h" -typedef struct -{ - u32 Xst, Yst, Zst; - u32 deltaXst, deltaYst; - u32 deltaX, deltaY; - u32 A, B, C, D, E, F; - u16 Px, Py, Pz; - u16 unused1; - u16 Cx, Cy, Cz; - u16 unused2; - u32 Mx, My; - u32 kx, ky; -} rottbl_struct; - extern vdp2settings_struct vdp2settings; ////////////////////////////////////////////////////////////////////////////// --- NEW FILE: vdp1.c --- /* Copyright 2007 Theo Berkau This file is part of Lapetus. Lapetus is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Lapetus is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Lapetus; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "lapetus.h" ////////////////////////////////////////////////////////////////////////////// int commandnum=0; ////////////////////////////////////////////////////////////////////////////// void VdpSystemClipping(sprite_struct *sprite) { volatile vdp1cmd_struct *tbl=(volatile vdp1cmd_struct *)(VDP1_RAM+(commandnum * 0x20)); tbl->CMDCTRL = ((sprite->attr >> 12) & 0x7FF0) | 0x0009; tbl->CMDLINK = sprite->linkaddr / 8; tbl->CMDXC = sprite->x; tbl->CMDYC = sprite->y; commandnum++; } ////////////////////////////////////////////////////////////////////////////// void VdpUserClipping(sprite_struct *sprite) { volatile vdp1cmd_struct *tbl=(volatile vdp1cmd_struct *)(VDP1_RAM+(commandnum * 0x20)); tbl->CMDCTRL = ((sprite->attr >> 12) & 0x7FF0) | 0x0008; tbl->CMDLINK = sprite->linkaddr / 8; tbl->CMDXA = sprite->x; tbl->CMDYA = sprite->y; tbl->CMDXC = sprite->x2; tbl->CMDYC = sprite->y2; commandnum++; } ////////////////////////////////////////////////////////////////////////////// void VdpLocalCoordinate(sprite_struct *sprite) { volatile vdp1cmd_struct *tbl=(volatile vdp1cmd_struct *)(VDP1_RAM+(commandnum * 0x20)); tbl->CMDCTRL = ((sprite->attr >> 12) & 0x7FF0) | 0x000A; tbl->CMDLINK = sprite->linkaddr / 8; tbl->CMDXA = sprite->x; tbl->CMDYA = sprite->y; commandnum++; } ////////////////////////////////////////////////////////////////////////////// void VdpDrawNormalSprite(sprite_struct *sprite) { volatile vdp1cmd_struct *tbl=(volatile vdp1cmd_struct *)(VDP1_RAM+(commandnum * 0x20)); tbl->CMDCTRL = ((sprite->attr >> 12) & 0x7FF0) | 0x0000; tbl->CMDLINK = sprite->linkaddr / 8; tbl->CMDPMOD.all = (u16)sprite->attr; tbl->CMDCOLR = sprite->bank; tbl->CMDSRCA = sprite->addr / 8; tbl->CMDSIZE = ((sprite->width / 8) << 8) | sprite->height; tbl->CMDXA = sprite->x; tbl->CMDYA = sprite->y; tbl->CMDGRDA = sprite->gouraudaddr / 8; commandnum++; } ////////////////////////////////////////////////////////////////////////////// void VdpDrawScaledSprite(sprite_struct *sprite) { volatile vdp1cmd_struct *tbl=(volatile vdp1cmd_struct *)(VDP1_RAM+(commandnum * 0x20)); tbl->CMDCTRL = ((sprite->attr >> 12) & 0x7FF0) | 0x0001; tbl->CMDLINK = sprite->linkaddr / 8; tbl->CMDPMOD.all = (u16)sprite->attr; tbl->CMDCOLR = sprite->bank; tbl->CMDSRCA = sprite->addr / 8; tbl->CMDSIZE = ((sprite->width / 8) << 8) | sprite->height; tbl->CMDXA = sprite->x; tbl->CMDYA = sprite->y; tbl->CMDXB = sprite->x2; tbl->CMDYB = sprite->y2; tbl->CMDXC = sprite->x3; tbl->CMDYC = sprite->y3; tbl->CMDXD = sprite->x4; tbl->CMDYD = sprite->y4; tbl->CMDGRDA = sprite->gouraudaddr / 8; commandnum++; } ////////////////////////////////////////////////////////////////////////////// void VdpDrawDistortedSprite(sprite_struct *sprite) { volatile vdp1cmd_struct *tbl=(volatile vdp1cmd_struct *)(VDP1_RAM+(commandnum * 0x20)); tbl->CMDCTRL = ((sprite->attr >> 12) & 0x7FF0) | 0x0002; tbl->CMDLINK = sprite->linkaddr / 8; tbl->CMDPMOD.all = (u16)sprite->attr; tbl->CMDCOLR = sprite->bank; tbl->CMDSRCA = sprite->addr / 8; tbl->CMDSIZE = ((sprite->width / 8) << 8) | sprite->height; tbl->CMDXA = sprite->x; tbl->CMDYA = sprite->y; tbl->CMDXB = sprite->x2; tbl->CMDYB = sprite->y2; tbl->CMDXC = sprite->x3; tbl->CMDYC = sprite->y3; tbl->CMDXD = sprite->x4; tbl->CMDYD = sprite->y4; tbl->CMDGRDA = sprite->gouraudaddr / 8; commandnum++; } ////////////////////////////////////////////////////////////////////////////// void VdpStartDrawList() { commandnum = 0; } ////////////////////////////////////////////////////////////////////////////// void VdpEndDrawList() { *((volatile u16 *)(VDP1_RAM+(commandnum * 0x20))) = 0x8000; } ////////////////////////////////////////////////////////////////////////////// Index: vdp.h =================================================================== RCS file: /cvsroot/lapetus/lapetus/vdp.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- vdp.h 3 Mar 2007 02:59:38 -0000 1.5 +++ vdp.h 4 Jul 2007 02:32:43 -0000 1.6 @@ -796,34 +796,71 @@ CRM8_1024 = 0x2 }; -#define SPRITE_MSBOFF 0x0000 -#define SPRITE_MSBON 0x8000 +typedef struct +{ + u32 Xst, Yst, Zst; + u32 deltaXst, deltaYst; + u32 deltaX, deltaY; + u32 A, B, C, D, E, F; + u16 Px, Py, Pz; + u16 unused1; + u16 Cx, Cy, Cz; + u16 unused2; + u32 Mx, My; + u32 kx, ky; +} rottbl_struct; -#define SPRITE_HIGHSPEEDSHRINKDISABLE 0x0000 -#define SPRITE_HIGHSPEEDSHRINKENABLE 0x1000 +#define SPRITE_JUMPNEXT 0x00000000 +#define SPRITE_JUMPASSIGN 0x01000000 +#define SPRITE_JUMPCALL 0x02000000 +#define SPRITE_JUMPRETURN 0x03000000 +#define SPRITE_SKIPNEXT 0x04000000 +#define SPRITE_SKIPASSIGN 0x05000000 +#define SPRITE_SKIPCALL 0x06000000 +#define SPRITE_SKIPRETURN 0x07000000 -#define SPRITE_PRECLIPDISABLE 0x0800 -#define SPRITE_PRECLIPENABLE 0x0000 +#define SPRITE_ZOOMPOINTNONE 0x00000000 +#define SPRITE_ZOOMPOINTUPPERLEFT 0x00500000 +#define SPRITE_ZOOMPOINTUPPERCENTER 0x00600000 +#define SPRITE_ZOOMPOINTUPPERRIGHT 0x00700000 +#define SPRITE_ZOOMPOINTCENTERLEFT 0x00900000 +#define SPRITE_ZOOMPOINTCENTERCENTER 0x00A00000 +#define SPRITE_ZOOMPOINTCENTERRIGHT 0x00B00000 +#define SPRITE_ZOOMPOINTLOWERLEFT 0x00D00000 +#define SPRITE_ZOOMPOINTLOWERCENTER 0x00E00000 +#define SPRITE_ZOOMPOINTLOWERRIGHT 0x00F00000 -#define SPRITE_CLIPDISABLE 0x0000 -#define SPRITE_CLIPOUTSIDE 0x0400 -#define SPRITE_CLIPINSIDE 0x0600 +#define SPRITE_REVERSEHORIZONTAL 0x00010000 +#define SPRITE_REVERSEVERTICAL 0x00020000 -#define SPRITE_MESHDISABLE 0x0000 -#define SPRITE_MESHENABLE 0x0100 +#define SPRITE_MSBOFF 0x00000000 +#define SPRITE_MSBON 0x00008000 -#define SPRITE_ENDCODEDISABLE 0x0080 -#define SPRITE_ENDCODEENABLE 0x0000 +#define SPRITE_HIGHSPEEDSHRINKDISABLE 0x00000000 +#define SPRITE_HIGHSPEEDSHRINKENABLE 0x00001000 -#define SPRITE_TRANSPIXELDISABLE 0x0040 -#define SPRITE_TRANSPIXELENABLE 0x0000 +#define SPRITE_PRECLIPDISABLE 0x00000800 +#define SPRITE_PRECLIPENABLE 0x00000000 -#define SPRITE_4BPP 0x0000 -#define SPRITE_4BPPLUT 0x0008 -#define SPRITE_8BPP64COLOR 0x0010 -#define SPRITE_8BPP128COLOR 0x0018 -#define SPRITE_8BPP256COLOR 0x0020 -#define SPRITE_16BPP 0x0028 +#define SPRITE_CLIPDISABLE 0x00000000 +#define SPRITE_CLIPOUTSIDE 0x00000400 +#define SPRITE_CLIPINSIDE 0x00000600 + +#define SPRITE_MESHDISABLE 0x00000000 +#define SPRITE_MESHENABLE 0x00000100 + +#define SPRITE_ENDCODEDISABLE 0x00000080 +#define SPRITE_ENDCODEENABLE 0x00000000 + +#define SPRITE_TRANSPIXELDISABLE 0x00000040 +#define SPRITE_TRANSPIXELENABLE 0x00000000 + +#define SPRITE_4BPP 0x00000000 +#define SPRITE_4BPPLUT 0x00000008 +#define SPRITE_8BPP64COLOR 0x00000010 +#define SPRITE_8BPP128COLOR 0x00000018 +#define SPRITE_8BPP256COLOR 0x00000020 +#define SPRITE_16BPP 0x00000028 #define RGB16(r, g, b) (0x8000 | (((b) & 0x1F) << 10) | (((g) & 0x1F) << 10) | ((r) & 0x1F)) @@ -864,6 +901,23 @@ u16 CMDUNUSED; } vdp1cmd_struct; +typedef struct +{ + u32 linkaddr; + u32 attr; + u32 addr; + u32 gouraudaddr; + u16 bank; + u16 width, height; + s16 x; + s16 y; + s16 x2; + s16 y2; + s16 x3; + s16 y3; + s16 x4; + s16 y4; +} sprite_struct; extern volatile u16 *vdp1ram; extern volatile u16 *vdp2ram; @@ -889,6 +943,14 @@ int VdpSetPalette(int type, void *palette, int size); int VdpSetDefaultPalette(void); -////////////////////////////////////////////////////////////////////////////// +// Sprite/Polygon related +void VdpSystemClipping(sprite_struct *sprite); +void VdpUserClipping(sprite_struct *sprite); +void VdpLocalCoordinate(sprite_struct *sprite); +void VdpDrawNormalSprite(sprite_struct *sprite); +void VdpDrawScaledSprite(sprite_struct *sprite); +void VdpDrawDistortedSprite(sprite_struct *sprite); +void VdpStartDrawList(); +void VdpEndDrawList(); #endif |