notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
compiler work, last(?) C version
[picodrive.git]
/
Pico
/
Draw2.c
diff --git
a/Pico/Draw2.c
b/Pico/Draw2.c
index
5037e2f
..
ec82e44
100644
(file)
--- a/
Pico/Draw2.c
+++ b/
Pico/Draw2.c
@@
-20,8
+20,13
@@
\r
#define USE_CACHE
\r
\r
\r
#define USE_CACHE
\r
\r
+// note: this is not implemented in ARM asm
\r
+#if defined(DRAW2_OVERRIDE_LINE_WIDTH)
\r
+#define LINE_WIDTH DRAW2_OVERRIDE_LINE_WIDTH
\r
+#else
\r
+#define LINE_WIDTH 328
\r
+#endif
\r
\r
\r
-extern unsigned char *framebuff; // in format (8+320)x(8+224+8) (eights for borders)
\r
int currpri = 0;
\r
\r
static int HighCache2A[41*(TILE_ROWS+1)+1+1]; // caches for high layers
\r
int currpri = 0;
\r
\r
static int HighCache2A[41*(TILE_ROWS+1)+1+1]; // caches for high layers
\r
@@
-46,7
+51,7
@@
static int TileXnormYnorm(unsigned char *pd,int addr,unsigned char pal)
unsigned int pack=0; unsigned int t=0, blank = 1;
\r
int i;
\r
\r
unsigned int pack=0; unsigned int t=0, blank = 1;
\r
int i;
\r
\r
- for(i=8; i; i--, addr+=2, pd +=
320+8
) {
\r
+ for(i=8; i; i--, addr+=2, pd +=
LINE_WIDTH
) {
\r
pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels
\r
if(!pack) continue;
\r
\r
pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels
\r
if(!pack) continue;
\r
\r
@@
-69,7
+74,7
@@
static int TileXflipYnorm(unsigned char *pd,int addr,unsigned char pal)
unsigned int pack=0; unsigned int t=0, blank = 1;
\r
int i;
\r
\r
unsigned int pack=0; unsigned int t=0, blank = 1;
\r
int i;
\r
\r
- for(i=8; i; i--, addr+=2, pd +=
320+8
) {
\r
+ for(i=8; i; i--, addr+=2, pd +=
LINE_WIDTH
) {
\r
pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels
\r
if(!pack) continue;
\r
\r
pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels
\r
if(!pack) continue;
\r
\r
@@
-92,7
+97,7
@@
static int TileXnormYflip(unsigned char *pd,int addr,unsigned char pal)
int i;
\r
\r
addr+=14;
\r
int i;
\r
\r
addr+=14;
\r
- for(i=8; i; i--, addr-=2, pd +=
320+8
) {
\r
+ for(i=8; i; i--, addr-=2, pd +=
LINE_WIDTH
) {
\r
pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels
\r
if(!pack) continue;
\r
\r
pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels
\r
if(!pack) continue;
\r
\r
@@
-116,7
+121,7
@@
static int TileXflipYflip(unsigned char *pd,int addr,unsigned char pal)
int i;
\r
\r
addr+=14;
\r
int i;
\r
\r
addr+=14;
\r
- for(i=8; i; i--, addr-=2, pd +=
320+8
) {
\r
+ for(i=8; i; i--, addr-=2, pd +=
LINE_WIDTH
) {
\r
pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels
\r
if(!pack) continue;
\r
\r
pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels
\r
if(!pack) continue;
\r
\r
@@
-139,7
+144,7
@@
static void DrawWindowFull(int start, int end, int prio)
{
\r
struct PicoVideo *pvid=&Pico.video;
\r
int nametab, nametab_step, trow, tilex, blank=-1, code;
\r
{
\r
struct PicoVideo *pvid=&Pico.video;
\r
int nametab, nametab_step, trow, tilex, blank=-1, code;
\r
- unsigned char *scrpos =
framebuff
;
\r
+ unsigned char *scrpos =
PicoDraw2FB
;
\r
int tile_start, tile_end; // in cells
\r
\r
// parse ranges
\r
int tile_start, tile_end; // in cells
\r
\r
// parse ranges
\r
@@
-165,8
+170,8
@@
static void DrawWindowFull(int start, int end, int prio)
code=Pico.vram[nametab+tile_start];
\r
if ((code>>15) != prio) return; // hack: just assume that whole window uses same priority
\r
\r
code=Pico.vram[nametab+tile_start];
\r
if ((code>>15) != prio) return; // hack: just assume that whole window uses same priority
\r
\r
- scrpos+=8*
328
+8;
\r
- scrpos+=8*
328
*(start-START_ROW);
\r
+ scrpos+=8*
LINE_WIDTH
+8;
\r
+ scrpos+=8*
LINE_WIDTH
*(start-START_ROW);
\r
\r
// do a window until we reach planestart row
\r
for(trow = start; trow < end; trow++, nametab+=nametab_step) { // current tile row
\r
\r
// do a window until we reach planestart row
\r
for(trow = start; trow < end; trow++, nametab+=nametab_step) { // current tile row
\r
@@
-194,7
+199,7
@@
static void DrawWindowFull(int start, int end, int prio)
if(zero) blank=code; // We know this tile is blank now
\r
}
\r
\r
if(zero) blank=code; // We know this tile is blank now
\r
}
\r
\r
- scrpos +=
328
*8;
\r
+ scrpos +=
LINE_WIDTH
*8;
\r
}
\r
}
\r
\r
}
\r
}
\r
\r
@@
-239,12
+244,12
@@
static void DrawLayerFull(int plane, int *hcache, int planestart, int planeend)
if (plane==0) nametab=(pvid->reg[2]&0x38)<< 9; // A
\r
else nametab=(pvid->reg[4]&0x07)<<12; // B
\r
\r
if (plane==0) nametab=(pvid->reg[2]&0x38)<< 9; // A
\r
else nametab=(pvid->reg[4]&0x07)<<12; // B
\r
\r
- scrpos =
framebuff
;
\r
- scrpos+=8*
328
*(planestart-START_ROW);
\r
+ scrpos =
PicoDraw2FB
;
\r
+ scrpos+=8*
LINE_WIDTH
*(planestart-START_ROW);
\r
\r
// Get vertical scroll value:
\r
vscroll=Pico.vsram[plane]&0x1ff;
\r
\r
// Get vertical scroll value:
\r
vscroll=Pico.vsram[plane]&0x1ff;
\r
- scrpos+=(8-(vscroll&7))*
328
;
\r
+ scrpos+=(8-(vscroll&7))*
LINE_WIDTH
;
\r
if(vscroll&7) planeend++; // we have vertically clipped tiles due to vscroll, so we need 1 more row
\r
\r
*hcache++ = 8-(vscroll&7); // push y-offset to tilecache
\r
if(vscroll&7) planeend++; // we have vertically clipped tiles due to vscroll, so we need 1 more row
\r
\r
*hcache++ = 8-(vscroll&7); // push y-offset to tilecache
\r
@@
-303,7
+308,7
@@
static void DrawLayerFull(int plane, int *hcache, int planestart, int planeend)
if(zero) blank=code; // We know this tile is blank now
\r
}
\r
\r
if(zero) blank=code; // We know this tile is blank now
\r
}
\r
\r
- scrpos +=
328
*8;
\r
+ scrpos +=
LINE_WIDTH
*8;
\r
}
\r
\r
*hcache = 0; // terminate cache
\r
}
\r
\r
*hcache = 0; // terminate cache
\r
@@
-317,10
+322,10
@@
static void DrawTilesFromCacheF(int *hc)
// unsigned short *pal;
\r
unsigned char pal;
\r
short blank=-1; // The tile we know is blank
\r
// unsigned short *pal;
\r
unsigned char pal;
\r
short blank=-1; // The tile we know is blank
\r
- unsigned char *scrpos =
framebuff
, *pd = 0;
\r
+ unsigned char *scrpos =
PicoDraw2FB
, *pd = 0;
\r
\r
// *hcache++ = code|(dx<<16)|(trow<<27); // cache it
\r
\r
// *hcache++ = code|(dx<<16)|(trow<<27); // cache it
\r
- scrpos+=(*hc++)*
328 - START_ROW*328
*8;
\r
+ scrpos+=(*hc++)*
LINE_WIDTH - START_ROW*LINE_WIDTH
*8;
\r
\r
while((code=*hc++)) {
\r
if((short)code == blank) continue;
\r
\r
while((code=*hc++)) {
\r
if((short)code == blank) continue;
\r
@@
-328,7
+333,7
@@
static void DrawTilesFromCacheF(int *hc)
// y pos
\r
if(((unsigned)code>>27) != prevy) {
\r
prevy = (unsigned)code>>27;
\r
// y pos
\r
if(((unsigned)code>>27) != prevy) {
\r
prevy = (unsigned)code>>27;
\r
- pd = scrpos + prevy*
328
*8;
\r
+ pd = scrpos + prevy*
LINE_WIDTH
*8;
\r
}
\r
\r
// Get tile address/2:
\r
}
\r
\r
// Get tile address/2:
\r
@@
-380,8
+385,8
@@
static void DrawSpriteFull(unsigned int *sprite)
// goto first vertically visible tile
\r
while(sy <= START_ROW*8) { sy+=8; tile+=tdeltay; height--; }
\r
\r
// goto first vertically visible tile
\r
while(sy <= START_ROW*8) { sy+=8; tile+=tdeltay; height--; }
\r
\r
- scrpos =
framebuff
;
\r
- scrpos+=(sy-START_ROW*8)*
328
;
\r
+ scrpos =
PicoDraw2FB
;
\r
+ scrpos+=(sy-START_ROW*8)*
LINE_WIDTH
;
\r
\r
for (; height > 0; height--, sy+=8, tile+=tdeltay)
\r
{
\r
\r
for (; height > 0; height--, sy+=8, tile+=tdeltay)
\r
{
\r
@@
-403,7
+408,7
@@
static void DrawSpriteFull(unsigned int *sprite)
}
\r
}
\r
\r
}
\r
}
\r
\r
- scrpos+=8*
328
;
\r
+ scrpos+=8*
LINE_WIDTH
;
\r
}
\r
}
\r
#endif
\r
}
\r
}
\r
#endif
\r
@@
-480,8
+485,7
@@
static void DrawAllSpritesFull(int prio, int maxwidth)
#ifndef _ASM_DRAW_C
\r
static void BackFillFull(int reg7)
\r
{
\r
#ifndef _ASM_DRAW_C
\r
static void BackFillFull(int reg7)
\r
{
\r
- unsigned int back, i;
\r
- unsigned int *p=(unsigned int *)framebuff;
\r
+ unsigned int back;
\r
\r
// Start with a background color:
\r
// back=PicoCramHigh[reg7&0x3f];
\r
\r
// Start with a background color:
\r
// back=PicoCramHigh[reg7&0x3f];
\r
@@
-489,12
+493,7
@@
static void BackFillFull(int reg7)
back|=back<<8;
\r
back|=back<<16;
\r
\r
back|=back<<8;
\r
back|=back<<16;
\r
\r
- for(i = (8+320)*(8+(END_ROW-START_ROW)*8)/16; i; i--) {
\r
- *p++ = back; // do 16 pixels per iteration
\r
- *p++ = back;
\r
- *p++ = back;
\r
- *p++ = back;
\r
- }
\r
+ memset32((int *)PicoDraw2FB, back, LINE_WIDTH*(8+(END_ROW-START_ROW)*8)/4);
\r
}
\r
#endif
\r
\r
}
\r
#endif
\r
\r