X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FDraw2.c;h=9fc413bc5761af42a0f6608b8468f5966401648e;hb=32826a1a22fd3e6203310bba855d8c2b6f3c403a;hp=b8fa76ad178bd6128c3cb3155e86dc1552d6da29;hpb=cc68a136aa179a5f32fe40208371eb9c2b0aadae;p=picodrive.git diff --git a/Pico/Draw2.c b/Pico/Draw2.c index b8fa76a..9fc413b 100644 --- a/Pico/Draw2.c +++ b/Pico/Draw2.c @@ -1,6 +1,6 @@ // This is part of Pico Library -// (c) Copyright 2006 notaz, All rights reserved. +// (c) Copyright 2007, Grazvydas "notaz" Ignotas // Free for non-commercial use. // For commercial use, separate licencing terms must be obtained. @@ -10,10 +10,6 @@ #include "PicoInt.h" -#include -#ifndef __GNUC__ -#pragma warning (disable:4706) // Disable assignment within conditional -#endif // port_config.h include must define these 2 defines: // #define START_ROW 1 // which row of tiles to start rendering at? @@ -25,11 +21,10 @@ #define USE_CACHE -extern unsigned char *framebuff; // in format (8+320)x(8+224+8) (eights for borders) int currpri = 0; -static int HighCacheA[41*(TILE_ROWS+1)+1+1]; // caches for high layers -static int HighCacheB[41*(TILE_ROWS+1)+1+1]; +static int HighCache2A[41*(TILE_ROWS+1)+1+1]; // caches for high layers +static int HighCache2B[41*(TILE_ROWS+1)+1+1]; unsigned short *PicoCramHigh=Pico.cram; // pointer to CRAM buff (0x40 shorts), converted to native device color (works only with 16bit for now) void (*PicoPrepareCram)()=0; // prepares PicoCramHigh for renderer to use @@ -143,7 +138,7 @@ static void DrawWindowFull(int start, int end, int prio) { struct PicoVideo *pvid=&Pico.video; int nametab, nametab_step, trow, tilex, blank=-1, code; - unsigned char *scrpos = framebuff; + unsigned char *scrpos = PicoDraw2FB; int tile_start, tile_end; // in cells // parse ranges @@ -235,15 +230,15 @@ static void DrawLayerFull(int plane, int *hcache, int planestart, int planeend) height=(width>>4)&3; width&=3; xmask=(1<1) ymask =0x1f; + ymask=(height<<5)|0x1f; // Y Mask in tiles + if(width == 1) ymask&=0x3f; + else if(width>1) ymask =0x1f; // Find name table: if (plane==0) nametab=(pvid->reg[2]&0x38)<< 9; // A else nametab=(pvid->reg[4]&0x07)<<12; // B - scrpos = framebuff; + scrpos = PicoDraw2FB; scrpos+=8*328*(planestart-START_ROW); // Get vertical scroll value: @@ -321,7 +316,7 @@ static void DrawTilesFromCacheF(int *hc) // unsigned short *pal; unsigned char pal; short blank=-1; // The tile we know is blank - unsigned char *scrpos = framebuff, *pd = 0; + unsigned char *scrpos = PicoDraw2FB, *pd = 0; // *hcache++ = code|(dx<<16)|(trow<<27); // cache it scrpos+=(*hc++)*328 - START_ROW*328*8; @@ -384,7 +379,7 @@ static void DrawSpriteFull(unsigned int *sprite) // goto first vertically visible tile while(sy <= START_ROW*8) { sy+=8; tile+=tdeltay; height--; } - scrpos = framebuff; + scrpos = PicoDraw2FB; scrpos+=(sy-START_ROW*8)*328; for (; height > 0; height--, sy+=8, tile+=tdeltay) @@ -485,7 +480,7 @@ static void DrawAllSpritesFull(int prio, int maxwidth) static void BackFillFull(int reg7) { unsigned int back, i; - unsigned int *p=(unsigned int *)framebuff; + unsigned int *p=(unsigned int *)PicoDraw2FB; // Start with a background color: // back=PicoCramHigh[reg7&0x3f]; @@ -563,17 +558,17 @@ static void DrawDisplayFull() if(hvwin==1) { winend|=maxcolc<<16; planeend|=maxcolc<<16; } currpri = 0; - DrawLayerFull(1, HighCacheB, START_ROW, (maxcolc<<16)|END_ROW); + DrawLayerFull(1, HighCache2B, START_ROW, (maxcolc<<16)|END_ROW); switch(hvwin) { case 4: // fullscreen window DrawWindowFull(START_ROW, (maxcolc<<16)|END_ROW, 0); - HighCacheA[1] = 0; + HighCache2A[1] = 0; break; case 3: // we have plane A and both v and h windows - DrawLayerFull(0, HighCacheA, planestart, planeend); + DrawLayerFull(0, HighCache2A, planestart, planeend); DrawWindowFull( winstart&~0xff0000, (winend&~0xff0000)|(maxcolc<<16), 0); // h DrawWindowFull((winstart&~0xff)|START_ROW, (winend&~0xff)|END_ROW, 0); // v break; @@ -581,20 +576,20 @@ static void DrawDisplayFull() case 2: case 1: // both window and plane A visible, window is vertical XOR horizontal - DrawLayerFull(0, HighCacheA, planestart, planeend); + DrawLayerFull(0, HighCache2A, planestart, planeend); DrawWindowFull(winstart, winend, 0); break; default: // fullscreen plane A - DrawLayerFull(0, HighCacheA, START_ROW, (maxcolc<<16)|END_ROW); + DrawLayerFull(0, HighCache2A, START_ROW, (maxcolc<<16)|END_ROW); break; } DrawAllSpritesFull(0, maxw); #ifdef USE_CACHE - if(HighCacheB[1]) DrawTilesFromCacheF(HighCacheB); - if(HighCacheA[1]) DrawTilesFromCacheF(HighCacheA); + if(HighCache2B[1]) DrawTilesFromCacheF(HighCache2B); + if(HighCache2A[1]) DrawTilesFromCacheF(HighCache2A); switch(hvwin) { case 4: // fullscreen window @@ -621,7 +616,7 @@ static void DrawDisplayFull() } -void PicoFrameFull() +PICO_INTERNAL void PicoFrameFull() { // prepare cram? if(PicoPrepareCram) PicoPrepareCram();