/* Project 16 Source Code~\r
- * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669\r
+ * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123\r
*\r
* This file is part of Project 16.\r
*\r
//modexDrawBmpRegion (page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp)\r
void modexDrawPBufRegion (page_t *page, int x, int y, int rx, int ry, int rw, int rh, planar_buf_t *p, boolean sprite)\r
{\r
- sword plane;\r
+ word plane;\r
int i;\r
- const int px=x;//-page->dx;\r
- const int py=y;//-page->dy;\r
- #define PEEE ((rw)/4)-rx\r
- //-(rx/4)\r
- #define PEEEE ((p->pwidth)*(ry))\r
- //y=py;\r
- //x=px;\r
+ const int px=x+page->dx;\r
+ const int py=y+page->dy;\r
+ const int prw = rw/4;\r
+ int prh;\r
+\r
+ //fine tuning\r
+ rx+=1;\r
+ ry+=1;\r
+\r
+ //^^;\r
+ #define PEEE rx-prw\r
+ #define PE (p->pwidth)\r
+ if(rh<p->height) prh = (PE*(ry-4));\r
+ else if(rh==p->height) prh = (PE*(ry));\r
+ y=py;\r
+ x=px;\r
//printf("%d,%d p(%d,%d) r(%d,%d) rwh(%d,%d)\n", x, y, px, py, rx, ry, rw, rh);\r
for(plane=0; plane < 4; plane++) {\r
- i=PEEE+PEEEE;\r
- //printf("PEEE=%d ", PEEE);\r
- //printf("PEEEE=%d ", PEEEE);\r
- //printf("i=%d\n", i);\r
- modexSelectPlane(PLANE(plane+x));\r
+ i=PEEE+prh;\r
+ modexSelectPlane(PLANE(plane-1));\r
for(; y < py+rh; y++) {\r
- //for(px=0; px < p->width; px++) {\r
- //printf("%02X ", (int) p->plane[plane][i++]);\r
-// _fmemcpy(buff, &(p->plane[plane][i+=p->pwidth]), p->pwidth);\r
-// printf("buff %u==%s\n", y, *buff);\r
- _fmemcpy(page->data + (((page->width/4) * y) + (x / 4)), &(p->plane[plane][i+=p->pwidth]), (rw/4));\r
- //}\r
- //if(plane==3) IN_Ack();\r
+ _fmemcpy(page->data + (((page->width/4) * (y)) + ((x) / 4)), &(p->plane[plane][i]), prw);\r
+ i+=PE;\r
}\r
- /*printf("y%d=%d ", plane, y);\r
- if(plane==3) printf("y%d=%d\n", plane, y);*/\r
x=px;\r
y=py;\r
- }\r
+ }\r
}\r
\r
\r
void\r
modexDrawPBuf(page_t *page, int x, int y, planar_buf_t *p, boolean sprite)\r
{\r
- int plane;\r
+ modexDrawPBufRegion (page, x, x, 0, 0, p->width, p->height, p, sprite);\r
+ /*\r
+ sword plane;\r
int i;\r
// byte near *buff;\r
const int px=x+page->dx;\r
// }\r
for(plane=0; plane < 4; plane++) {\r
i=0;\r
- modexSelectPlane(PLANE(plane+x));\r
+ modexSelectPlane(PLANE(plane-1));\r
for(; y < py+p->height; y++) {\r
//for(px=0; px < p->width; px++) {\r
//printf("%02X ", (int) p->plane[plane][i++]);\r
-// _fmemcpy(buff, &(p->plane[plane][i+=p->pwidth]), p->pwidth);\r
-// printf("buff %u==%s\n", y, *buff);\r
-// _fmemcpy(page->data + (((page->width/4) * (y+page->dy)) + ((x+page->dx) / 4)), buff, p->pwidth);\r
+// _fmemcpy(buff, &(p->plane[plane][i+=p->pwidth]), p->pwidth);\r
+// printf("buff %u==%s\n", y, *buff);\r
+// _fmemcpy(page->data + (((page->width/4) * (y+page->dy)) + ((x+page->dx) / 4)), buff, p->pwidth);\r
_fmemcpy(page->data + (((page->width/4) * y) + (x / 4)), &(p->plane[plane][i+=p->pwidth]), p->pwidth);\r
//}\r
}\r
+//getch();\r
x=px;\r
y=py;\r
}\r
-// _nfree(buff);\r
+// _nfree(buff);*/\r
}\r
\r
void\r
modexDrawBmpPBufRegion(page_t *page, int x, int y,\r
int rx, int ry, int rw, int rh, planar_buf_t *bmp) {\r
word poffset = (word) page->data + y*(page->width/4) + x/4;\r
- byte *data = *bmp->plane;//+bmp->offset;\r
+ byte *data = bmp->plane[0];\r
word bmpOffset = (word) data + ry * bmp->width + rx;\r
word width = rw;\r
word height = rh;\r
ROW_LOOP:\r
MOV CX, width ; count the columns\r
SCAN_LOOP:\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
MOVSB ; copy the pixel\r
+\r
SUB CX, 3 ; we skip the next 3\r
ADD SI, 3 ; skip the bmp pixels\r
LOOP SCAN_LOOP ; finish the scan\r
DEC rowCounter\r
JNZ ROW_LOOP ; do all the rows\r
;-- end plane painting\r
+\r
MOV AL, plane ; advance to the next plane\r
SHL AL, 1 ;\r
AND AL, 0x0f ; mask the plane properly\r
modexDrawSpritePBufRegion(page_t *page, int x, int y,\r
int rx, int ry, int rw, int rh, planar_buf_t *bmp) {\r
word poffset = (word)page->data + y*(page->width/4) + x/4;\r
- byte *data = *bmp->plane;//+bmp->offset;\r
+ byte *data = bmp->plane[0];\r
word bmpOffset = (word) data + ry * bmp->width + rx;\r
word width = rw;\r
word height = rh;\r
JNZ PLANE_LOOP ; do all 4 planes\r
}\r
}\r
+\r
+void modexDrawCharPBuf(page_t *page, int x, int y, word t, word col, word bgcol, boolean q)\r
+{\r
+ word i, j, k;\r
+ for(i=0; i<romFonts[t].charSize; i++)\r
+ {\r
+ j=1<<8;\r
+ k=0;\r
+ //every "pixel" row\r
+ while(j)\r
+ {\r
+ if(q)\r
+ //_fmemcpy(page->data + (((page->width/4) * (y+i)) + ((x+romFontsData.chw+k) / 4)), romFontsData.l[i] & j ? col:bgcol, 2);\r
+ modexputPixel(page, x+k+romFontsData.chw, y+i, romFontsData.l[i] & j ? col:bgcol);\r
+ else\r
+ //printf("l[i]=%c j=%02u l[i] & j=%02u %c\n", l[i] , j, l[i] & j, l[i] & j ? '*':' ');\r
+ //printf("%c", l[i] & j ? '*':' ');\r
+ romFontsData.z[k]=romFontsData.l[i] & j ? '*':' ';\r
+ j>>=1;\r
+ k++;\r
+ }\r
+ if(!q)\r
+ {\r
+ for(k=0;k<9;k++)\r
+ {\r
+ printf("%c", romFontsData.z[k]);\r
+ }\r
+ printf("\n");\r
+ }\r
+ }\r
+ romFontsData.chw += k;\r
+}\r