X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fmodex16.c;h=df5a23e984dca76abbc040e09fc6f0001956e423;hb=655913f0313102c92ca9e817262cb38ac4fe96c6;hp=4ce84b8cb6f639117d2b18f7ac27bdeb685fdba7;hpb=f906c5a2bf24af0c9990f2c3f6b60bf2237ec5f4;p=16.git diff --git a/src/lib/modex16.c b/src/lib/modex16.c index 4ce84b8c..df5a23e9 100644 --- a/src/lib/modex16.c +++ b/src/lib/modex16.c @@ -1,13 +1,40 @@ +/* Project 16 Source Code~ + * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 + * + * This file is part of Project 16. + * + * Project 16 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 3 of the License, or + * (at your option) any later version. + * + * Project 16 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 this program. If not, see , or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + #include #include #include #include #include #include -#include "src\lib\modex16.h" - +#include "src/lib/modex16.h" byte far* VGA=(byte far*) 0xA0000000; /* this points to video memory. */ +/*word text_mask[16] = { + 0x0002, 0x0102, 0x0202, 0x0302, + 0x0402, 0x0502, 0x0602, 0x0702, + 0x0802, 0x0902, 0x0A02, 0x0B02, + 0x0C02, 0x0D02, 0x0E02, 0x0F02 +};*/ static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette); static byte tmppal[PAL_SIZE]; @@ -91,6 +118,7 @@ modexDefaultPage() { page.dy = 0; page.width = SCREEN_WIDTH; page.height = SCREEN_HEIGHT; + page.id = 0; return page; } @@ -107,6 +135,23 @@ modexNextPage(page_t *p) { result.dy = 0; result.width = p->width; result.height = p->height; + result.id = p->id+1; + + return result; +} + +//next page with defined dimentions~ +page_t +modexNextPage0(page_t *p, word x, word y) +{ + page_t result; + + result.data = p->data + (p->width/4)*p->height; /* compute the offset */ + result.dx = 0; + result.dy = 0; + result.width = x; + result.height = y; + result.id = p->id+1; return result; } @@ -138,7 +183,7 @@ modexShowPage(page_t *page) { outp(CRTC_DATA, crtcOffset); /* wait for one retrace */ - while (!(inp(INPUT_STATUS_1) & VRETRACE)); + while (!(inp(INPUT_STATUS_1) & VRETRACE)); /* do PEL panning here */ outp(AC_INDEX, 0x33); @@ -215,6 +260,28 @@ modexClearRegion(page_t *page, int x, int y, int w, int h, byte color) { } +void +oldDrawBmp(byte far* page, int x, int y, bitmap_t *bmp, byte sprite) +{ + byte plane; + word px, py; + word offset; + + /* TODO Make this fast. It's SLOOOOOOW */ + for(plane=0; plane < 4; plane++) { + modexSelectPlane(PLANE(plane+x)); + for(px = plane; px < bmp->width; px+=4) { + offset=px; + for(py=0; pyheight; py++) { + if(!sprite || bmp->data[offset]) + page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset]; + offset+=bmp->width; + } + } + } +} + + void modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp) { /* draw the region (the entire freakin bitmap) */ @@ -253,7 +320,7 @@ modexDrawBmpRegion(page_t *page, int x, int y, ;-- begin plane painting MOV AX, height ; start the row counter - MOV rowCounter, AX ; + MOV rowCounter, AX ; MOV DI, poffset ; go to the first pixel MOV SI, bmpOffset ; go to the bmp pixel ROW_LOOP: @@ -333,7 +400,7 @@ modexDrawSpriteRegion(page_t *page, int x, int y, ;-- begin plane painting MOV AX, height ; start the row counter - MOV rowCounter, AX ; + MOV rowCounter, AX ; MOV DI, poffset ; go to the first pixel MOV SI, bmpOffset ; go to the bmp pixel ROW_LOOP: