From d1ce94441d5e0bffafeb959c505bf3d3975a0a35 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Tue, 14 Jul 2015 07:35:06 -0500 Subject: [PATCH] OH OH OH MY GOD ON HO OH!! modified: 16.exe modified: fonttes0.exe modified: maptest.exe modified: palettec.exe modified: pcxtest.exe modified: src/fonttes0.c modified: src/lib/modex16.c modified: src/lib/modex16.h modified: test.exe modified: test2.exe --- 16.exe | Bin 53950 -> 54308 bytes fonttes0.exe | Bin 43028 -> 43370 bytes maptest.exe | Bin 53369 -> 53727 bytes palettec.exe | Bin 39666 -> 40024 bytes pcxtest.exe | Bin 69421 -> 69779 bytes src/fonttes0.c | 3 +- src/lib/modex16.c | 1998 ++++++++++++++++++++++----------------------- src/lib/modex16.h | 2 +- test.exe | Bin 40119 -> 40477 bytes test2.exe | Bin 45281 -> 45639 bytes 10 files changed, 999 insertions(+), 1004 deletions(-) diff --git a/16.exe b/16.exe index e48b8aef3ba9b7b5bdddacd2eabd1ecd6fdf9e08..9017de370c1a7e715118909fb882e28eb8ddb641 100644 GIT binary patch delta 12846 zcmai530zc1((m`?%^O5R2F2kTVYtNu!2?tj@j^{J5RDh&1UU=|0^cxzxdfNE>vM2o z>}(E=NeE_*#uyZJ5ii6$Zj5L?mq?;+%rS~r!9Cz7*1XzQDmUd*|}UtJP5gDB*aA2%a}>XM!*(8>S991WD&9n z@Mpj|z$L&vKuk6vGXZM>TL2FLDLI5tKne6M?L){v0atgCU2iVB) zQG|qy#w-B3Btkv~%pU`VfKLFY0Ji{M$%IS-{0VRX(0?r2fZqY$1Y7}J2gv2)2(gcc zizdJ#fHaYi;eeTd=Kz&}wSa2Ce!vC5O~4&M&lEy_okYkJlL;|DLCB7$2#K3Rhy^fb zE+H=ijsboK=;p!0fJne7z{`MDfShme;V~Z_0ZRa7fZqc?0{jJV10XEG`T^DfjJkCB z2EIMg30VW!2)G8&F2oW5o&;n9UIM%Ys0Cc5nc|qf5yr}+lH+wB<%rVkF#FUGAXVoa zqkB8n_cqigkW`13^M@PhNpXPCO#dOy7oMdvG~>#1gI1m^kybWZ18phyj?H+<~6@{1RJvksk zYgAJ1DRbIkc-YFul3>S%Fy)B-VrPP(eiunK)IXz5b-Y1G==y|w2!@h!Yh~lhVU9&% z%5ew{on@#$>5`g9%XB80$qxym8+Cr821cO63FQJ*Cqwlp`^D9|*zch8uB*$hp_NBH z9alqLBMO3Z#7p#NU5M}o?d35#VqJKbg$JRg!C~%__jAcFpd}urLD@QkZF+mEax1me_OTGoImOGS`j;gZ_M>Y0Fd&@x&Exqowt{db3!uWM7AHN~^ z8_~QTUmb+68}Zd9t#V08xfx#_s;yh?{ZEa5IOu3b;;TKry02C_!^Qh)>)z=dCx})Z z{lehuZPkq`FTEIl{0~+gY5Te!)L#wLgTCy}q7W|Zjk$Xp>SKgdN4^g6S>M^|SWB~f zqlI~Njj!+IW^bpUKLmTv?JRv@sGknuZV>jU@91<4^s_JOu#K`=Mf+EGCVA>h9)}-3 zb4>D|WWTg(VrSbm-n>t5_?m<~`k0^Z@M_uF^_XvGX~$lo*(V?t;noMXIrkjP5wk!# z92*Sqpn1`e2eZ=PKW6wsKR-6BQood*H?{V!Y)FZcpuI${?L1`lq-XrL8LXbshn15; z3rtGw9BQb44VETo>01A?UbR3QBm@R{ozk^`bU0q40Ra`POOtZ;w_SWCS{pFck99ew z>FQ$YG}NC4X(#mw9AmV48mca)+EN^GosMfHaruq1p342^tMQf0mcqac;S&8kFhtl- ze+mqZeOqiesflg88Q0oyO5?Em-W!p)z*&(Fb7Wp`mKsSJ{gAilMVD%JJ9g!k%L;WbAfg;^z{H1(4 z&=3JmuRNl;X6S^vN=b9=*A6bkhLD6uhNu+z5I4xb5Ag|^NGIa?
c2&6PqpF5wrC(`&51AX!NOSv|Vhzs{WN| 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 diff --git a/fonttes0.exe b/fonttes0.exe index 4cc28256a65059b63811f6a3c999605618e1d378..6a0d03e696caea4a8e6ad9b998bf43fe86b1b458 100644 GIT binary patch delta 13696 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 diff --git a/maptest.exe b/maptest.exe index e86cd95d52cd62dd795180ffd56f916f66adbf09..f267d6cd1aee7894b9c4d8b0f49a027f532ac0c9 100644 GIT binary patch delta 11276 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 delta 10846 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 TJYE|2e%HJw$B6P%aR2`gl)969 diff --git a/pcxtest.exe b/pcxtest.exe index 3be4c9071cdb28fe6ba6ed3d05222058b3468d7f..61cc8d882923db3fb5b4ec54a8e7ab468c11006b 100644 GIT binary patch delta 18378 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 diff --git a/src/lib/modex16.c b/src/lib/modex16.c index 2b2818fe..e61df5a1 100644 --- a/src/lib/modex16.c +++ b/src/lib/modex16.c @@ -1,1004 +1,998 @@ -/* 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" - -byte far* VGA=(byte far*) 0xA0000000; /* this points to video memory. */ - -static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette); -static byte tmppal[PAL_SIZE]; - -static void -vgaSetMode(byte mode) -{ - union REGS regs; - - regs.h.ah = SET_MODE; - regs.h.al = mode; - int86(VIDEO_INT, ®s, ®s); -} - - -/* -========================= Entry Points ==========================- */ -void -modexEnter() { - word i; - dword far*ptr=(dword far*)VGA; /* used for faster screen clearing */ - word CRTParms[] = { - 0x0d06, /* vertical total */ - 0x3e07, /* overflow (bit 8 of vertical counts) */ - 0x4109, /* cell height (2 to double-scan */ - 0xea10, /* v sync start */ - 0xac11, /* v sync end and protect cr0-cr7 */ - 0xdf12, /* vertical displayed */ - 0x0014, /* turn off dword mode */ - 0xe715, /* v blank start */ - 0x0616, /* v blank end */ - 0xe317 /* turn on byte mode */ - }; - int CRTParmCount = sizeof(CRTParms) / sizeof(CRTParms[0]); - - /* TODO save current video mode and palette */ - vgaSetMode(VGA_256_COLOR_MODE); - - /* disable chain4 mode */ - outpw(SC_INDEX, 0x0604); - - /* synchronous reset while setting Misc Output */ - outpw(SC_INDEX, 0x0100); - - /* select 25 MHz dot clock & 60 Hz scanning rate */ - outp(MISC_OUTPUT, 0xe3); - - /* undo reset (restart sequencer) */ - outpw(SC_INDEX, 0x0300); - - /* reprogram the CRT controller */ - outp(CRTC_INDEX, 0x11); /* VSync End reg contains register write prot */ - outp(CRTC_DATA, 0x7f); /* get current write protect on varios regs */ - - /* send the CRTParms */ - for(i=0; idata + (p->width/4)*p->height; /* compute the offset */ - result.dx = 0; - 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; -} - - -void -modexShowPage(page_t *page) { - word high_address; - word low_address; - word offset; - byte crtcOffset; - - /* calculate offset */ - offset = (word) page->data; - offset += page->dy * (page->width >> 2 ); - offset += page->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->dx & 0x03) << 1); -} - - -void -modexPanPage(page_t *page, int dx, int dy) { - page->dx = dx; - page->dy = dy; -} - - -void -modexSelectPlane(byte plane) { - outp(SC_INDEX, MAP_MASK); /* select plane */ - outp(SC_DATA, plane); -} - - -void -modexClearRegion(page_t *page, int x, int y, int w, int h, byte color) { - word pageOff = (word) page->data; - word xoff=x/4; /* xoffset that begins each row */ - word scanCount=w/4; /* number of iterations per row (excluding right clip)*/ - word poffset = pageOff + y*(page->width/4) + xoff; /* starting offset */ - word nextRow = page->width/4-scanCount-1; /* loc of next row */ - byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */ - byte rclip[] = {0x00, 0x01, 0x03, 0x07}; - byte left = lclip[x&0x03]; - byte right = rclip[(x+w)&0x03]; - - /* handle the case which requires an extra group */ - if((x & 0x03) && !((x+w) & 0x03)) { - right=0x0f; - } - - __asm { - MOV AX, SCREEN_SEG ; go to the VGA memory - MOV ES, AX - MOV DI, poffset ; go to the first pixel - MOV DX, SC_INDEX ; point to the map mask - MOV AL, MAP_MASK - OUT DX, AL - INC DX - MOV AL, color ; get ready to write colors - SCAN_START: - MOV CX, scanCount ; count the line - MOV BL, AL ; remember color - MOV AL, left ; do the left clip - OUT DX, AL ; set the left clip - MOV AL, BL ; restore color - STOSB ; write the color - DEC CX - JZ SCAN_DONE ; handle 1 group stuff - - ;-- write the main body of the scanline - MOV BL, AL ; remember color - MOV AL, 0x0f ; write to all pixels - OUT DX, AL - MOV AL, BL ; restore color - REP STOSB ; write the color - SCAN_DONE: - MOV BL, AL ; remeber color - MOV AL, right - OUT DX, AL ; do the right clip - MOV AL, BL ; restore color - STOSB ; write pixel - ADD DI, nextRow ; go to the next row - DEC h - JNZ SCAN_START - } -} - - -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) */ - modexDrawBmpRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); -} - - -void -modexDrawBmpRegion(page_t *page, int x, int y, - int rx, int ry, int rw, int rh, bitmap_t *bmp) { - word poffset = (word) page->data + y*(page->width/4) + x/4; - byte *data = bmp->data;//+bmp->offset; - word bmpOffset = (word) data + ry * bmp->width + rx; - word width = rw; - word height = rh; - byte plane = 1 << ((byte) x & 0x03); - word scanCount = width/4 + (width%4 ? 1 :0); - word nextPageRow = page->width/4 - scanCount; - word nextBmpRow = (word) bmp->width - width; - word rowCounter; - byte planeCounter = 4; - - //code is a bit slow here - __asm { - MOV AX, SCREEN_SEG ; go to the VGA memory - MOV ES, AX - - MOV DX, SC_INDEX ; point at the map mask register - MOV AL, MAP_MASK ; - OUT DX, AL ; - - PLANE_LOOP: - MOV DX, SC_DATA ; select the current plane - MOV AL, plane ; - OUT DX, AL ; - - ;-- begin plane painting - MOV AX, height ; start the row counter - MOV rowCounter, AX ; - MOV DI, poffset ; go to the first pixel - MOV SI, bmpOffset ; go to the bmp pixel - ROW_LOOP: - MOV CX, width ; count the columns - SCAN_LOOP: - MOVSB ; copy the pixel - SUB CX, 3 ; we skip the next 3 - ADD SI, 3 ; skip the bmp pixels - LOOP SCAN_LOOP ; finish the scan - - MOV AX, nextPageRow - ADD DI, AX ; go to the next row on screen - MOV AX, nextBmpRow - ADD SI, AX ; go to the next row on bmp - - DEC rowCounter - JNZ ROW_LOOP ; do all the rows - ;-- end plane painting - - MOV AL, plane ; advance to the next plane - SHL AL, 1 ; - AND AL, 0x0f ; mask the plane properly - MOV plane, AL ; store the plane - - INC bmpOffset ; start bmp at the right spot - - DEC planeCounter - JNZ PLANE_LOOP ; do all 4 planes - } -} - - -void -modexDrawPlanarBuf(page_t *page, int x, int y, planar_buf_t *bmp) { - /* TODO - adapt from test code */ - int plane; - for(plane=0; plane < 4; plane++) - { - //fack - } -} - - -void -modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp) { - /* draw the whole sprite */ - modexDrawSpriteRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); -} - -void -modexDrawSpriteRegion(page_t *page, int x, int y, - int rx, int ry, int rw, int rh, bitmap_t *bmp) { - word poffset = (word)page->data + y*(page->width/4) + x/4; - byte *data = bmp->data;//+bmp->offset; - word bmpOffset = (word) data + ry * bmp->width + rx; - word width = rw; - word height = rh; - byte plane = 1 << ((byte) x & 0x03); - word scanCount = width/4 + (width%4 ? 1 :0); - word nextPageRow = page->width/4 - scanCount; - word nextBmpRow = (word) bmp->width - width; - word rowCounter; - byte planeCounter = 4; - - __asm { - MOV AX, SCREEN_SEG ; go to the VGA memory - MOV ES, AX - - MOV DX, SC_INDEX ; point at the map mask register - MOV AL, MAP_MASK ; - OUT DX, AL ; - - PLANE_LOOP: - MOV DX, SC_DATA ; select the current plane - MOV AL, plane ; - OUT DX, AL ; - - ;-- begin plane painting - MOV AX, height ; start the row counter - MOV rowCounter, AX ; - MOV DI, poffset ; go to the first pixel - MOV SI, bmpOffset ; go to the bmp pixel - ROW_LOOP: - MOV CX, width ; count the columns - SCAN_LOOP: - LODSB - DEC SI - CMP AL, 0 - JNE DRAW_PIXEL ; draw non-zero pixels - - INC DI ; skip the transparent pixel - ADD SI, 1 - JMP NEXT_PIXEL - DRAW_PIXEL: - MOVSB ; copy the pixel - NEXT_PIXEL: - SUB CX, 3 ; we skip the next 3 - ADD SI, 3 ; skip the bmp pixels - LOOP SCAN_LOOP ; finish the scan - - MOV AX, nextPageRow - ADD DI, AX ; go to the next row on screen - MOV AX, nextBmpRow - ADD SI, AX ; go to the next row on bmp - - DEC rowCounter - JNZ ROW_LOOP ; do all the rows - ;-- end plane painting - - MOV AL, plane ; advance to the next plane - SHL AL, 1 ; - AND AL, 0x0f ; mask the plane properly - MOV plane, AL ; store the plane - - INC bmpOffset ; start bmp at the right spot - - DEC planeCounter - JNZ PLANE_LOOP ; do all 4 planes - } -} - - -/* copy a region of video memory from one page to another. - * It assumes that the left edge of the tile is the same on both - * regions and the memory areas do not overlap. - */ -void -modexCopyPageRegion(page_t *dest, page_t *src, - word sx, word sy, - word dx, word dy, - word width, word height) -{ - word doffset = (word)dest->data + dy*(dest->width/4) + dx/4; - word soffset = (word)src->data + sy*(src->width/4) + sx/4; - word scans = width/4; - word nextSrcRow = src->width/4 - scans - 1; - word nextDestRow = dest->width/4 - scans - 1; - byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */ - byte rclip[] = {0x0f, 0x01, 0x03, 0x07}; - byte left = lclip[sx&0x03]; - byte right = rclip[(sx+width)&0x03]; - - __asm { - MOV AX, SCREEN_SEG ; work in the vga space - MOV ES, AX ; - MOV DI, doffset ; - MOV SI, soffset ; - - MOV DX, GC_INDEX ; turn off cpu bits - MOV AX, 0008h ; - OUT DX, AX - - MOV AX, SC_INDEX ; point to the mask register - MOV DX, AX ; - MOV AL, MAP_MASK ; - OUT DX, AL ; - INC DX ; - - ROW_START: - PUSH DS - MOV AX, ES - MOV DS, AX - MOV CX, scans ; the number of latches - - MOV AL, left ; do the left column - OUT DX, AL ; - MOVSB ; - DEC CX ; - - MOV AL, 0fh ; do the inner columns - OUT DX, AL - REP MOVSB ; copy the pixels - - MOV AL, right ; do the right column - OUT DX, AL - MOVSB - POP DS - - MOV AX, SI ; go the start of the next row - ADD AX, nextSrcRow ; - MOV SI, AX ; - MOV AX, DI ; - ADD AX, nextDestRow ; - MOV DI, AX ; - - DEC height ; do the rest of the actions - JNZ ROW_START ; - - MOV DX, GC_INDEX+1 ; go back to CPU data - MOV AL, 0ffh ; none from latches - OUT DX, AL ; - } -} - - -/* fade and flash */ -void -modexFadeOn(word fade, byte *palette) { - fadePalette(-fade, 64, 64/fade+1, palette); -} - - -void -modexFadeOff(word fade, byte *palette) { - fadePalette(fade, 0, 64/fade+1, palette); -} - - -void -modexFlashOn(word fade, byte *palette) { - fadePalette(fade, -64, 64/fade+1, palette); -} - - -void -modexFlashOff(word fade, byte *palette) { - fadePalette(-fade, 0, 64/fade+1, palette); -} - - -static void -fadePalette(sbyte fade, sbyte start, word iter, byte *palette) { - word i; - byte dim = start; - - /* handle the case where we just update */ - if(iter == 0) { - modexPalUpdate1(palette); - return; - } - - while(iter > 0) { /* FadeLoop */ - for(i=0; i 127) { - tmppal[i] = 0; - } else if(tmppal[i] > 63) { - tmppal[i] = 63; - } - } - modexPalUpdate1(tmppal); - iter--; - dim += fade; - } -} - - -/* save and load */ -void -modexPalSave(byte *palette) { - int i; - - outp(PAL_READ_REG, 0); /* start at palette entry 0 */ - for(i=0; ipalette; - word w=0; - word q=0; - word qq=0; - static word a[PAL_SIZE]; //palette array of change values! - word z=0, aq=0, aa=0, pp=0; - - modexWaitBorder(); - if((*i)==0) - { - memset(a, -1, sizeof(a)); - outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ - } - else if(qp==0) - { - q=(*i); - } - else - { - q=(*i); - qq=(*i)/3; -// printf("q: %02d\n", (q)); -// printf("qq: %02d\n", (qq)); - //printf(" (*i)-q=%02d\n", (*i)-q); - outp(PAL_WRITE_REG, qq); /* start at the beginning of palette */ - } - if((*i)0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else - if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) - { - w++; - break; - } - else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3)) - { - //printf("qp=%d\n", qp); - //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); - printf(" %d's color=%d\n", (*i), (a[qp])-(bmp->offset*3)+qp); - //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit! - if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; } - } - else - { - if(bmp->offset==0 && (*i)<3 && q==0) outp(PAL_DATA_REG, 0); - else - if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); - else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]); - printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); } - } - } - //if(qp>0) printf("qp=%d\n", qp); - //if(qp>0) printf(" (*i)=%d\n", (*i)/3); - } - modexWaitBorder(); /* waits one retrace -- less flicker */ - if((*i)>=PAL_SIZE/2 && w==0) - { - for(; (*i)0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else - if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) - { - w++; - break; - } - else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3)) - { - //printf("qp=%d\n", qp); - //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); - printf(" %d's color=%d\n", (*i), (a[qp]-(bmp->offset*3)+qp)); - //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit! - if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; } - } - else - { - if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); - else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]); - printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); } - } - } - //printf(" (*i)=%d\n", (*i)/3); - } - -printf("\nqqqqqqqq\n\n"); - - //palette checker~ - if(q>0 && qp==0) - { - long lq; - long bufSize = (bmp->width * bmp->height); - pp = q; - //printf("1(*i)=%02d\n", (*i)/3); - //printf("1z=%02d\n", z/3); - chkcolor(bmp, &q, &a, &aa, &z, i); - //printf("2(*i)=%02d\n", (*i)/3); - //printf("2z=%02d\n", z/3); - aq=0; -aqpee: - while(aq<=aa) - { -// printf("a[%02d]=(%d)\n", aq, a[aq]); - if(a[aq]==-1) aq++; - else { aqoffset++; break; } - } -//update the image data here! - for(lq=0; lqoffset for this spot! - NO! wwww - */ - - /* - Facking bloody point the values of the changed palette to correct values.... major confusion! wwww - */ - - //(offset/bmp->offset)*bmp->offset - - - //printf("%02d ",bmp->data[lq]+bmp->offset); - //if(lq > 0 && lq%bmp->width==0) printf("\n"); - //printf("%02d_", bmp->data[lq]+bmp->offset); - /*if(bmp->data[lq]+bmp->offset==aq) - { - //printf("%02d", bmp->data[lq]); - //printf("\n%02d\n", bmp->offset); - printf("aq=%02d ", aq); - printf("a[aq]=%02d ", a[aq]); - printf("a[aq]+aqpp=%02d ", a[aq]+aqpp); - printf("a[aq]-aqpp=%02d\n", a[aq]-aqpp); - //bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]); -//++++ bmp->data[lq]=a[aq]-aqpp; -// printf("_%d ", bmp->data[lq]); - //if(lq > 0 && lq%bmp->width==0) printf("\n"); - } - else if(bmp->data[lq]+bmp->offset < ((*i)/3)-aqpp) - { - if(bmp->data[lq]+bmp->offset >= aq) - { - bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp;//-((z-(*i))/3); - //printf("_%d ", bmp->data[lq]+bmp->offset)-aqpp-((z-(*i))/3); - } - else bmp->data[lq]+=(bmp->offset-aqpp); - }*/ - - //printf("%02d`", bmp->data[lq]); - //if(lq > 0 && lq%bmp->width==0) printf("\n"); - } - -//printf(" aq=%02d\n", aq); -//printf(" aa=%02d\n", aa); - - //update the palette~ - modexPalUpdate(bmp, &pp, aq, aqoffset); - (*i)=pp; - - if(aq, 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" + +byte far* VGA=(byte far*) 0xA0000000; /* this points to video memory. */ + +static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette); +static byte tmppal[PAL_SIZE]; + +static void +vgaSetMode(byte mode) +{ + union REGS regs; + + regs.h.ah = SET_MODE; + regs.h.al = mode; + int86(VIDEO_INT, ®s, ®s); +} + + +/* -========================= Entry Points ==========================- */ +void +modexEnter() { + word i; + dword far*ptr=(dword far*)VGA; /* used for faster screen clearing */ + word CRTParms[] = { + 0x0d06, /* vertical total */ + 0x3e07, /* overflow (bit 8 of vertical counts) */ + 0x4109, /* cell height (2 to double-scan */ + 0xea10, /* v sync start */ + 0xac11, /* v sync end and protect cr0-cr7 */ + 0xdf12, /* vertical displayed */ + 0x0014, /* turn off dword mode */ + 0xe715, /* v blank start */ + 0x0616, /* v blank end */ + 0xe317 /* turn on byte mode */ + }; + int CRTParmCount = sizeof(CRTParms) / sizeof(CRTParms[0]); + + /* TODO save current video mode and palette */ + vgaSetMode(VGA_256_COLOR_MODE); + + /* disable chain4 mode */ + outpw(SC_INDEX, 0x0604); + + /* synchronous reset while setting Misc Output */ + outpw(SC_INDEX, 0x0100); + + /* select 25 MHz dot clock & 60 Hz scanning rate */ + outp(MISC_OUTPUT, 0xe3); + + /* undo reset (restart sequencer) */ + outpw(SC_INDEX, 0x0300); + + /* reprogram the CRT controller */ + outp(CRTC_INDEX, 0x11); /* VSync End reg contains register write prot */ + outp(CRTC_DATA, 0x7f); /* get current write protect on varios regs */ + + /* send the CRTParms */ + for(i=0; idata + (p->width/4)*p->height; /* compute the offset */ + result.dx = 0; + 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; +} + + +void +modexShowPage(page_t *page) { + word high_address; + word low_address; + word offset; + byte crtcOffset; + + /* calculate offset */ + offset = (word) page->data; + offset += page->dy * (page->width >> 2 ); + offset += page->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->dx & 0x03) << 1); +} + + +void +modexPanPage(page_t *page, int dx, int dy) { + page->dx = dx; + page->dy = dy; +} + + +void +modexSelectPlane(byte plane) { + outp(SC_INDEX, MAP_MASK); /* select plane */ + outp(SC_DATA, plane); +} + + +void +modexClearRegion(page_t *page, int x, int y, int w, int h, byte color) { + word pageOff = (word) page->data; + word xoff=x/4; /* xoffset that begins each row */ + word scanCount=w/4; /* number of iterations per row (excluding right clip)*/ + word poffset = pageOff + y*(page->width/4) + xoff; /* starting offset */ + word nextRow = page->width/4-scanCount-1; /* loc of next row */ + byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */ + byte rclip[] = {0x00, 0x01, 0x03, 0x07}; + byte left = lclip[x&0x03]; + byte right = rclip[(x+w)&0x03]; + + /* handle the case which requires an extra group */ + if((x & 0x03) && !((x+w) & 0x03)) { + right=0x0f; + } + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + MOV DI, poffset ; go to the first pixel + MOV DX, SC_INDEX ; point to the map mask + MOV AL, MAP_MASK + OUT DX, AL + INC DX + MOV AL, color ; get ready to write colors + SCAN_START: + MOV CX, scanCount ; count the line + MOV BL, AL ; remember color + MOV AL, left ; do the left clip + OUT DX, AL ; set the left clip + MOV AL, BL ; restore color + STOSB ; write the color + DEC CX + JZ SCAN_DONE ; handle 1 group stuff + + ;-- write the main body of the scanline + MOV BL, AL ; remember color + MOV AL, 0x0f ; write to all pixels + OUT DX, AL + MOV AL, BL ; restore color + REP STOSB ; write the color + SCAN_DONE: + MOV BL, AL ; remeber color + MOV AL, right + OUT DX, AL ; do the right clip + MOV AL, BL ; restore color + STOSB ; write pixel + ADD DI, nextRow ; go to the next row + DEC h + JNZ SCAN_START + } +} + + +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) */ + modexDrawBmpRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + + +void +modexDrawBmpRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, bitmap_t *bmp) { + word poffset = (word) page->data + y*(page->width/4) + x/4; + byte *data = bmp->data;//+bmp->offset; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter; + byte planeCounter = 4; + + //code is a bit slow here + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, MAP_MASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + MOVSB ; copy the pixel + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + + +void +modexDrawPlanarBuf(page_t *page, int x, int y, planar_buf_t *bmp) { + /* TODO - adapt from test code */ + int plane; + for(plane=0; plane < 4; plane++) + { + //fack + } +} + + +void +modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp) { + /* draw the whole sprite */ + modexDrawSpriteRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawSpriteRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, bitmap_t *bmp) { + word poffset = (word)page->data + y*(page->width/4) + x/4; + byte *data = bmp->data;//+bmp->offset; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, MAP_MASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + LODSB + DEC SI + CMP AL, 0 + JNE DRAW_PIXEL ; draw non-zero pixels + + INC DI ; skip the transparent pixel + ADD SI, 1 + JMP NEXT_PIXEL + DRAW_PIXEL: + MOVSB ; copy the pixel + NEXT_PIXEL: + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + + +/* copy a region of video memory from one page to another. + * It assumes that the left edge of the tile is the same on both + * regions and the memory areas do not overlap. + */ +void +modexCopyPageRegion(page_t *dest, page_t *src, + word sx, word sy, + word dx, word dy, + word width, word height) +{ + word doffset = (word)dest->data + dy*(dest->width/4) + dx/4; + word soffset = (word)src->data + sy*(src->width/4) + sx/4; + word scans = width/4; + word nextSrcRow = src->width/4 - scans - 1; + word nextDestRow = dest->width/4 - scans - 1; + byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */ + byte rclip[] = {0x0f, 0x01, 0x03, 0x07}; + byte left = lclip[sx&0x03]; + byte right = rclip[(sx+width)&0x03]; + + __asm { + MOV AX, SCREEN_SEG ; work in the vga space + MOV ES, AX ; + MOV DI, doffset ; + MOV SI, soffset ; + + MOV DX, GC_INDEX ; turn off cpu bits + MOV AX, 0008h ; + OUT DX, AX + + MOV AX, SC_INDEX ; point to the mask register + MOV DX, AX ; + MOV AL, MAP_MASK ; + OUT DX, AL ; + INC DX ; + + ROW_START: + PUSH DS + MOV AX, ES + MOV DS, AX + MOV CX, scans ; the number of latches + + MOV AL, left ; do the left column + OUT DX, AL ; + MOVSB ; + DEC CX ; + + MOV AL, 0fh ; do the inner columns + OUT DX, AL + REP MOVSB ; copy the pixels + + MOV AL, right ; do the right column + OUT DX, AL + MOVSB + POP DS + + MOV AX, SI ; go the start of the next row + ADD AX, nextSrcRow ; + MOV SI, AX ; + MOV AX, DI ; + ADD AX, nextDestRow ; + MOV DI, AX ; + + DEC height ; do the rest of the actions + JNZ ROW_START ; + + MOV DX, GC_INDEX+1 ; go back to CPU data + MOV AL, 0ffh ; none from latches + OUT DX, AL ; + } +} + + +/* fade and flash */ +void +modexFadeOn(word fade, byte *palette) { + fadePalette(-fade, 64, 64/fade+1, palette); +} + + +void +modexFadeOff(word fade, byte *palette) { + fadePalette(fade, 0, 64/fade+1, palette); +} + + +void +modexFlashOn(word fade, byte *palette) { + fadePalette(fade, -64, 64/fade+1, palette); +} + + +void +modexFlashOff(word fade, byte *palette) { + fadePalette(-fade, 0, 64/fade+1, palette); +} + + +static void +fadePalette(sbyte fade, sbyte start, word iter, byte *palette) { + word i; + byte dim = start; + + /* handle the case where we just update */ + if(iter == 0) { + modexPalUpdate1(palette); + return; + } + + while(iter > 0) { /* FadeLoop */ + for(i=0; i 127) { + tmppal[i] = 0; + } else if(tmppal[i] > 63) { + tmppal[i] = 63; + } + } + modexPalUpdate1(tmppal); + iter--; + dim += fade; + } +} + + +/* save and load */ +void +modexPalSave(byte *palette) { + int i; + + outp(PAL_READ_REG, 0); /* start at palette entry 0 */ + for(i=0; ipalette; + word w=0; + word q=0; + word qq=0; + static word a[PAL_SIZE]; //palette array of change values! + word z=0, aq=0, aa=0, pp=0; + + modexWaitBorder(); + if((*i)==0) + { + memset(a, -1, sizeof(a)); + outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ + } + else if(qp==0) + { + q=(*i); + } + else + { + q=(*i); + qq=(*i)/3; +// printf("q: %02d\n", (q)); +// printf("qq: %02d\n", (qq)); + //printf(" (*i)-q=%02d\n", (*i)-q); + outp(PAL_WRITE_REG, qq); /* start at the beginning of palette */ + } + if((*i)0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else + if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) + { + w++; + break; + } + else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3)) + { + //printf("qp=%d\n", qp); + //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); + printf(" %d's color=%d\n", (*i), (a[qp])-(bmp->offset*3)+qp); + //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit! + if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; } + } + else + { + if(bmp->offset==0 && (*i)<3 && q==0) outp(PAL_DATA_REG, 0); + else + if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); + else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]); + printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); } + } + } + //if(qp>0) printf("qp=%d\n", qp); + //if(qp>0) printf(" (*i)=%d\n", (*i)/3); + } + modexWaitBorder(); /* waits one retrace -- less flicker */ + if((*i)>=PAL_SIZE/2 && w==0) + { + for(; (*i)0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else + if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) + { + w++; + break; + } + else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3)) + { + //printf("qp=%d\n", qp); + //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); + printf(" %d's color=%d\n", (*i), (a[qp]-(bmp->offset*3)+qp)); + //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit! + if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; } + } + else + { + if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); + else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]); + printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); } + } + } + //printf(" (*i)=%d\n", (*i)/3); + } + +printf("\nqqqqqqqq\n\n"); + + //palette checker~ + if(q>0 && qp==0) + { + long lq; + long bufSize = (bmp->width * bmp->height); + pp = q; + //printf("1(*i)=%02d\n", (*i)/3); + //printf("1z=%02d\n", z/3); + chkcolor(bmp, &q, &a, &aa, &z, i); + //printf("2(*i)=%02d\n", (*i)/3); + //printf("2z=%02d\n", z/3); + aq=0; +aqpee: + while(aq<=aa) + { +// printf("a[%02d]=(%d)\n", aq, a[aq]); + if(a[aq]==-1) aq++; + else { aqoffset++; break; } + } +//update the image data here! + for(lq=0; lqoffset for this spot! + NO! wwww + */ + + /* + Facking bloody point the values of the changed palette to correct values.... major confusion! wwww + */ + + //(offset/bmp->offset)*bmp->offset + + + //printf("%02d ",bmp->data[lq]+bmp->offset); + //if(lq > 0 && lq%bmp->width==0) printf("\n"); + //printf("%02d_", bmp->data[lq]+bmp->offset); + /*if(bmp->data[lq]+bmp->offset==aq) + { + //printf("%02d", bmp->data[lq]); + //printf("\n%02d\n", bmp->offset); + printf("aq=%02d ", aq); + printf("a[aq]=%02d ", a[aq]); + printf("a[aq]+aqpp=%02d ", a[aq]+aqpp); + printf("a[aq]-aqpp=%02d\n", a[aq]-aqpp); + //bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]); +//++++ bmp->data[lq]=a[aq]-aqpp; +// printf("_%d ", bmp->data[lq]); + //if(lq > 0 && lq%bmp->width==0) printf("\n"); + } + else if(bmp->data[lq]+bmp->offset < ((*i)/3)-aqpp) + { + if(bmp->data[lq]+bmp->offset >= aq) + { + bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp;//-((z-(*i))/3); + //printf("_%d ", bmp->data[lq]+bmp->offset)-aqpp-((z-(*i))/3); + } + else bmp->data[lq]+=(bmp->offset-aqpp); + }*/ + + //printf("%02d`", bmp->data[lq]); + //if(lq > 0 && lq%bmp->width==0) printf("\n"); + } + +//printf(" aq=%02d\n", aq); +//printf(" aa=%02d\n", aa); + + //update the palette~ + modexPalUpdate(bmp, &pp, aq, aqoffset); + (*i)=pp; + + if(aqq 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 YPm;z-Qn0kiRg&xKLO(bl$tGC-e~UDC;{X5v delta 10062 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