X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_vl.c;h=0e2bfcf064f83b93f52bd8832826c906da2d2cf9;hb=1159fe5a6cd0f8eaeee6e8584f5972d42e004073;hp=0c8c5571fd7db83be30f5ba79917755f94616d21;hpb=fb900d77df687bfa549995e15a762017c381e552;p=16.git diff --git a/src/lib/16_vl.c b/src/lib/16_vl.c index 0c8c5571..0e2bfcf0 100755 --- a/src/lib/16_vl.c +++ b/src/lib/16_vl.c @@ -213,8 +213,8 @@ modexNextPage(page_t *p) { page_t result; result.data = p->data + (p->pagesize); - result.dx = 0; - result.dy = 0; + result.dx = p->dx; // not used anymore we use page[0].dx + result.dy = p->dy; // not used anymore we use page[0].dy result.sw = p->sw; result.sh = p->sh; result.width = p->width; @@ -238,8 +238,8 @@ modexNextPageFlexibleSize(page_t *p, word x, word y) page_t result; result.data = p->data + (p->pagesize); /* compute the offset */ - result.dx = 0; - result.dy = 0; + result.dx = 0; // not used anymore we use page[0].dx + result.dy = 0; // not used anymore we use page[0].dy result.sw = x; result.sh = y; result.width = x; @@ -292,19 +292,92 @@ void modexHiganbanaPageSetup(video_t *video) modexCalcVmemRemain(video); video->p=0; video->r=1; + + //setup the buffersize + video->page[0].dy=video->page[0].dx=TILEWH; + /* video->page[1].dx=video->page[1].dy=TILEWH; // 1 tile size buffer + video->page[2].dx=video->page[2].dy= + video->page[3].dx=video->page[3].dy=0; */// cache pages are buffer wwww } +// +// move page to appropriate part and show it +// void modexShowPage(page_t *page) { - word high_address; - word low_address; - word offset; + word high_address, low_address, offset; + byte crtcOffset; + + /* calculate offset */ + offset = (word) page->data; + offset += page[0].dy * (page->width >> 2 ); + offset += page[0].dx >> 2; + + /* calculate crtcOffset according to virtual width */ + crtcOffset = page->width >> 3; + + high_address = HIGH_ADDRESS | (offset & 0xff00); + low_address = LOW_ADDRESS | (offset << 8); + + /* wait for appropriate timing and then program CRTC */ +//+=+= 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)); + + /* do PEL panning here */ + outp(AC_INDEX, 0x33); + outp(AC_INDEX, (page[0].dx & 0x03) << 1); +} + +// +// testing version of void modexShowPage() +// +void +modexShowPage_(page_t *page) +{ + word high_address, low_address, offset; + byte crtcOffset; + + /* calculate offset */ + offset = (word) page->data; + offset += page[0].dy * (page->width >> 2 ); + offset += page[0].dx >> 2; + + /* calculate crtcOffset according to virtual width */ + crtcOffset = page->sw >> 3; + + high_address = HIGH_ADDRESS | (offset & 0xff00); + low_address = LOW_ADDRESS | (offset << 8); + + /* wait for appropriate timing and then program CRTC */ +//+=+= 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)); + + /* do PEL panning here */ + outp(AC_INDEX, 0x33); + outp(AC_INDEX, (page[0].dx & 0x03) << 1); +} + +void +modexShowPageVsync(page_t *page) { + word high_address, low_address, offset; byte crtcOffset; /* calculate offset */ offset = (word) page->data; - offset += page->dy * (page->width >> 2 ); - offset += page->dx >> 2; + offset += page[0].dy * (page->width >> 2 ); + offset += page[0].dx >> 2; /* calculate crtcOffset according to virtual width */ crtcOffset = page->width >> 3; @@ -313,24 +386,24 @@ 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)); + /* wait for one retrace */ + while (!(inp(INPUT_STATUS_1) & VRETRACE)); /* do PEL panning here */ outp(AC_INDEX, 0x33); - outp(AC_INDEX, (page->dx & 0x03) << 1); + outp(AC_INDEX, (page[0].dx & 0x03) << 1); } void modexPanPage(page_t *page, int dx, int dy) { - page->dx = dx; - page->dy = dy; + page[0].dx = dx; + page[0].dy = dy; } void