X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fmodex16.c;h=b8f733be22b581f1748cffffa04e1f60e988b3be;hb=bd35bd7d97646cc726bd40cc54c9a158af008b4d;hp=df9767bc713bfaaa82db7659c3706a7d6a7e1b8d;hpb=a99a0f403c236dab866e00a81a1a2062417d0eff;p=16.git diff --git a/src/lib/modex16.c b/src/lib/modex16.c index df9767bc..b8f733be 100755 --- a/src/lib/modex16.c +++ b/src/lib/modex16.c @@ -1,11 +1,11 @@ /* Project 16 Source Code~ - * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 + * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover * * 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 verson 3 of the License, or + * 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, @@ -198,8 +198,8 @@ modexDefaultPage(page_t *p) page.tilemidposscreenx = page.tw/2; page.tilemidposscreeny = (page.th/2)+1; page.stridew=page.width/4; - page.pagesize = (word)(page.width/4)*page.height; - page.pi=4; + page.pagesize = (word)(page.stridew)*page.height; + page.pi=page.width*4; page.id = 0; return page; @@ -225,7 +225,7 @@ modexNextPage(page_t *p) { result.tilesh = p->tilesh; result.stridew=p->stridew; result.pagesize = p->pagesize; - result.pi=4; + result.pi=result.width*4; result.id = p->id+1; return result; @@ -249,10 +249,17 @@ modexNextPageFlexibleSize(page_t *p, word x, word y) result.tilesw=result.width/TILEWH; result.tilesh=result.height/TILEWH; result.id = p->id+1; - result.stridew=result.width/4; - result.pagesize = (word)(result.width/4)*result.height; - if(result.id==2) result.pi=p->width*p->pi; - else if(result.id==3) result.pi=p->pi; + result.stridew=p->sw/4;//result.width/4; + result.pagesize = (word)(result.stridew)*result.height; + switch(result.id) + { + case 2: + result.pi=p->width*4; + break; + case 3: + result.pi=p->pi; + break; + } return result; } @@ -306,14 +313,14 @@ modexShowPage(page_t *page) { low_address = LOW_ADDRESS | (offset << 8); /* wait for appropriate timing and then program CRTC */ - while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE)); + //while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE)); outpw(CRTC_INDEX, high_address); outpw(CRTC_INDEX, low_address); outp(CRTC_INDEX, 0x13); 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); @@ -418,7 +425,7 @@ modexCopyPageRegion(page_t *dest, page_t *src, { word doffset = (word)dest->data + dy*(dest->stridew) + dx/4; word soffset = (word)src->data + sy*(src->stridew) + sx/4; - word scans = vga_state.vga_stride+8; //++++0000 the quick and dirty fix of the major issue with p16 video display wwww + word scans = vga_state.vga_stride; //++++0000 the quick and dirty fix of the major issue with p16 video display wwww word nextSrcRow = src->stridew - scans - 1; word nextDestRow = dest->stridew - scans - 1; byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */ @@ -1147,9 +1154,9 @@ modexWaitBorder() { // spin } -// while(!(inp(INPUT_STATUS_1) & 8)) { -// //spin -// } + while(!(inp(INPUT_STATUS_1) & 8)) { + //spin + } } void modexprintmeminfo(video_t *v) @@ -1162,8 +1169,9 @@ void modexprintmeminfo(video_t *v) printf(" [%u]=", i); printf("(%Fp)", (v->page[i].data)); printf(" size=%u ", v->page[i].pagesize); + printf("w=%lu h=%lu ", (unsigned long)v->page[i].width, (unsigned long)v->page[i].height); printf("sw=%lu sh=%lu ", (unsigned long)v->page[i].sw, (unsigned long)v->page[i].sh); - printf(" width=%lu height=%lu", (unsigned long)v->page[i].width, (unsigned long)v->page[i].height); + printf("pi=%u", v->page[i].pi); printf("\n"); } }