X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_vl.c;h=91776466836ea7cb0bd26297e9b02aaa5967d5af;hb=946dfbe9b29be3a3b180c37e0b414a938e867dc6;hp=023c440f4ea4248519a99425c35ac79701a57459;hpb=7c35eb648613504ac47e5605d79f93112f569134;p=16.git diff --git a/src/lib/16_vl.c b/src/lib/16_vl.c index 023c440f..91776466 100755 --- a/src/lib/16_vl.c +++ b/src/lib/16_vl.c @@ -43,12 +43,20 @@ void VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv) { case 0: // deinit the video // change to the video mode we were in before we switched to mode 13h - modexLeave(); - in.h.ah = 0x00; - in.h.al = gv->video.old_mode; - int86(0x10, &in, &out); + if(gv->video.VL_Started) + { + modexLeave(); + in.h.ah = 0x00; + in.h.al = gv->video.old_mode; + int86(0x10, &in, &out); + } + gv->video.VL_Started=0; break; default: // init the video + if(gv->video.VL_Started) + return; + if(!gv->video.VL_Initiated) + TL_VidInit(gv); // get old video mode //in.h.ah = 0xf; //int86(0x10, &in, &out); @@ -158,16 +166,13 @@ void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv) dword far*ptr=(dword far*)vga_state.vga_graphics_ram;//VGA; /* used for faster screen clearing */ vga_write_sequencer(2/*map mask register*/,0xf/*all 4 planes*/); for(i = 0;i < 0x4000; i++) ptr[i] = 0x0000; // 0x4000 x dword = 64KB + /* fix up the palette and everything */ + modexPalBlack(); //reset the palette~ } break; } - -// gv->video.page[0].tw = gv->video.page[0].sw/TILEWH; -// gv->video.page[0].th = gv->video.page[0].sh/TILEWH; - - //TODO MAKE FLEXIBLE~ -// gv->video.page[0].tilemidposscreenx = gv->video.page[0].tilesw; -// gv->video.page[0].tilemidposscreeny = (gv->video.page[0].tilesh/2)+1; +// VL_SetLineWidth (cm.offset, &gv->video.ofs); + gv->video.VL_Started=1; } void @@ -191,12 +196,12 @@ modexDefaultPage(page_t *p) page.sh = p->sh; page.width = p->sw+TILEWHD; page.height = p->sh+TILEWHD; - page.tw = page.sw/TILEWH; - page.th = page.sh/TILEWH; - page.tilesw=page.width/TILEWH; - page.tilesh=page.height/TILEWH; - page.tilemidposscreenx = page.tw/2; - page.tilemidposscreeny = (page.th/2)+1; + page.ti.tw = page.sw/TILEWH; + page.ti.th = page.sh/TILEWH; + page.ti.tilesw=page.width/TILEWH; + page.ti.tilesh=page.height/TILEWH; + page.ti.tilemidposscreenx = page.ti.tw/2; + page.ti.tilemidposscreeny = (page.ti.th/2)+1; page.stridew=page.width/4; page.pagesize = (word)(page.stridew)*page.height; page.pi=page.width*4; @@ -219,10 +224,10 @@ modexNextPage(page_t *p) { result.sh = p->sh; result.width = p->width; result.height = p->height; - result.tw = p->tw; - result.th = p->th; - result.tilesw = p->tilesw; - result.tilesh = p->tilesh; + result.ti.tw = p->ti.tw; + result.ti.th = p->ti.th; + result.ti.tilesw = p->ti.tilesw; + result.ti.tilesh = p->ti.tilesh; result.stridew=p->stridew; result.pagesize = p->pagesize; result.pi=result.width*4; @@ -244,14 +249,14 @@ modexNextPageFlexibleSize(page_t *p, word x, word y) result.sh = y; result.width = x; result.height = y; - result.tw = result.sw/TILEWH; - result.th = result.sh/TILEWH; - result.tilesw=result.width/TILEWH; - result.tilesh=result.height/TILEWH; + result.ti.tw = result.sw/TILEWH; + result.ti.th = result.sh/TILEWH; + result.ti.tilesw=result.width/TILEWH; + result.ti.tilesh=result.height/TILEWH; result.id = p->id+1; - result.stridew=p->sw/4;//result.width/4; + result.stridew=result.width/4;//p->sw/4; result.pagesize = (word)(result.stridew)*result.height; - switch(result.id) +/* switch(result.id) { case 2: result.pi=p->width*4; @@ -259,7 +264,8 @@ modexNextPageFlexibleSize(page_t *p, word x, word y) case 3: result.pi=p->pi; break; - } + }*/ + result.pi=result.width*4; return result; } @@ -276,6 +282,18 @@ void modexCalcVmemRemain(video_t *video) } } +void VL_Initofs(video_t *video) +{ + if(!video->vga_state.bgps) + { + video->ofs.offscreen_ofs = video->page[0].pagesize+video->page[1].pagesize;//(vga_state.vga_stride * vga_state.vga_height); + video->ofs.pattern_ofs = (uint16_t)video->page[2].data; + }else{ + video->ofs.offscreen_ofs = 0; + video->ofs.pattern_ofs = 0;//(uint16_t)video->page[0].data; + } +} + void modexHiganbanaPageSetup(video_t *video) { video->vmem_remain=65535U; @@ -284,21 +302,24 @@ void modexHiganbanaPageSetup(video_t *video) (video->page[1]) = modexNextPage(&(video->page[0])); video->num_of_pages++; //0000 (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), (video->page[0]).width, TILEWH*4); video->num_of_pages++; //0000 (video->page[3]) = (video->page[2]); video->num_of_pages++; - (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), TILEWH*4, TILEWH*4); video->num_of_pages++; -// (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].width, 176); video->num_of_pages++; - (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].sw, 208); video->num_of_pages++; -// (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), video->page[0].width, 172); video->num_of_pages++; -// (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), 72, 128); video->num_of_pages++; +//// (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), TILEWH*4, TILEWH*4); video->num_of_pages++; +//// (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].sw, 208); video->num_of_pages++; + (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), video->page[0].width, 96); video->num_of_pages++; + (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].width, 96); video->num_of_pages++; modexCalcVmemRemain(video); - video->p=0; - video->r=1; + + video->sp=video->p = 0; //showpage + video->dorender = 1; //render video->vh=video->page[0].height+video->page[1].height+video->page[2].height+video->page[3].height; + + VL_Initofs(video); //doslib origi var - video->omemptr= vga_state.vga_graphics_ram; - video->vga_draw_stride= vga_state.vga_draw_stride; - video->vga_draw_stride_limit= vga_state.vga_draw_stride_limit; - //sprite render switch - video->rss=0; + video->vga_state.omemptr= vga_state.vga_graphics_ram; + video->vga_state.vga_draw_stride= vga_state.vga_draw_stride; + video->vga_state.vga_draw_stride_limit= vga_state.vga_draw_stride_limit; + //sprite render switch and bgpreservation switch + video->vga_state.rss= 1; + video->vga_state.bgps= 1; //setup the buffersize video->page[0].dx=video->page[0].dy= @@ -340,18 +361,19 @@ modexShowPage(page_t *page) { outp(AC_INDEX, 0x33); outp(AC_INDEX, (page[0].dx & 0x03) << 1); } + //args: page, vertical sync switch, screen resolution switch, page0 switch void VL_ShowPage(page_t *page, boolean vsync, boolean sr) { word high_address, low_address, offset; byte crtcOffset; - /* calculate offset */ + // calculate offset offset = (word) page->data; - offset += page[0].dy * (page->width >> 2 ); - offset += page[0].dx >> 2; + offset += page->dy * (page->width >> 2 ); + offset += page->dx >> 2; - /* calculate crtcOffset according to virtual width */ + // calculate crtcOffset according to virtual width switch(sr) { case 1: @@ -366,20 +388,20 @@ VL_ShowPage(page_t *page, boolean vsync, boolean sr) { high_address = HIGH_ADDRESS | (offset & 0xff00); low_address = LOW_ADDRESS | (offset << 8); - /* wait for appropriate timing and then program CRTC */ + // wait for appropriate timing and then program CRTC if(vsync) 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 */ + // wait for one retrace if(vsync) while (!(inp(INPUT_STATUS_1) & VRETRACE)); - /* do PEL panning here */ + // do PEL panning here outp(AC_INDEX, 0x33); - outp(AC_INDEX, (page[0].dx & 0x03) << 1); - vga_state.vga_graphics_ram = (VGA_RAM_PTR)page[0].data; + outp(AC_INDEX, (page->dx & 0x03) << 1); + vga_state.vga_graphics_ram = (VGA_RAM_PTR)page->data; } //============================================================================= @@ -392,25 +414,25 @@ modexPanPage(page_t *page, int dx, int dy) { void modexSelectPlane(byte plane) { - outp(SC_INDEX, MAP_MASK); /* select plane */ + outp(SC_INDEX, SC_MAPMASK); /* select plane */ outp(SC_DATA, plane); } void -modexClearRegion(page_t *page, int x, int y, int w, int h, byte color) { +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->stridew) + xoff; /* starting offset */ - word nextRow = page->stridew-scanCount-1; /* loc of next row */ - byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */ - byte rclip[] = {0x00, 0x01, 0x03, 0x07}; + word xoff=(x>>2); // xoffset that begins each row + word poffset = pageOff + y*(page->stridew) + xoff; // starting offset + word scanCount=w>>2; // number of iterations per row (excluding right clip) + word nextRow = page->stridew-scanCount-1; // loc of next row + LRCLIPDEF byte left = lclip[x&0x03]; byte right = rclip[(x+w)&0x03]; - /* handle the case which requires an extra group */ + // handle the case which requires an extra group if((x & 0x03) && !((x+w) & 0x03)) { - right=0x0f; + right=0x0f; } //printf("modexClearRegion(x=%u, y=%u, w=%u, h=%u, left=%u, right=%u)\n", x, y, w, h, left, right); @@ -428,7 +450,7 @@ modexClearRegion(page_t *page, int x, int y, int w, int h, byte color) { MOV ES, AX MOV DI, poffset ; go to the first pixel MOV DX, SC_INDEX ; point to the map mask - MOV AL, MAP_MASK + MOV AL, SC_MAPMASK OUT DX, AL INC DX MOV AL, color ; get ready to write colors @@ -480,17 +502,16 @@ modexCopyPageRegion(page_t *dest, page_t *src, word dx, word dy, word width, word height) { - 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; //++++0000 the quick and dirty fix of the major issue with p16 video display wwww + word doffset = (word)dest->data + dy*(dest->stridew) + (dx>>2); + word soffset = (word)src->data + sy*(src->stridew) + (sx>>2); + word scans = vga_state.vga_stride+8; //++++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 */ - byte rclip[] = {0x00, 0x01, 0x03, 0x07}; + LRCLIPDEF byte left = lclip[sx&0x03]; byte right = rclip[(sx+width)&0x03]; - /* handle the case which requires an extra group */ + // handle the case which requires an extra group if((sx & 0x03) && !((sx+width) & 0x03)) { right=0x0f; } @@ -518,7 +539,7 @@ modexCopyPageRegion(page_t *dest, page_t *src, MOV AX, SC_INDEX ; point to the mask register MOV DX, AX ; - MOV AL, MAP_MASK ; + MOV AL, SC_MAPMASK ; OUT DX, AL ; INC DX ; @@ -567,6 +588,7 @@ modexCopyPageRegion(page_t *dest, page_t *src, } } +//check 16_vl_1.c /* fade and flash */ void @@ -600,7 +622,7 @@ fadePalette(sbyte fade, sbyte start, word iter, byte *palette) { /* handle the case where we just update */ if(iter == 0) { - modexPalUpdate1(palette); + modexPalUpdate(palette); return; } @@ -613,7 +635,7 @@ fadePalette(sbyte fade, sbyte start, word iter, byte *palette) { tmppal[i] = 63; } } - modexPalUpdate1(tmppal); + modexPalUpdate(tmppal); iter--; dim += fade; } @@ -632,43 +654,39 @@ modexPalSave(byte *palette) { } -byte * +/*byte * modexNewPal() { byte *ptr; - ptr = malloc(PAL_SIZE); + ptr = m a l l o c(PAL_SIZE); - /* handle errors */ + // handle errors if(!ptr) { - printf("Could not allocate palette.\n"); - exit(-1); + printf("Could not allocate palette.\n"); } return ptr; -} +}*/ void -modexLoadPalFile(byte *filename, byte **palette) { +modexLoadPalFile(byte *filename, byte *palette) { FILE *file; byte *ptr; - /* free the palette if it exists */ - if(*palette) { - free(*palette); - } + // free the palette if it exists + //if(*palette) { free(*palette); } - /* allocate the new palette */ - *palette = modexNewPal(); + // allocate the new palette + //*palette = modexNewPal(); - /* open the file */ + // open the file file = fopen(filename, "rb"); if(!file) { - printf("Could not open palette file: %s\n", filename); - exit(-2); + printf("Could not open palette file: %s\n", filename); } /* read the file */ - ptr = *palette; + ptr = palette; while(!feof(file)) { *ptr++ = fgetc(file); } @@ -678,21 +696,29 @@ modexLoadPalFile(byte *filename, byte **palette) { void VL_LoadPalFile(const char *filename, byte *palette) +{ + VL_LoadPalFilewithoffset(filename, palette, 0); +} + +void VL_LoadPalFilewithoffset(const char *filename, byte *palette, word o) { int fd; fd = open(filename,O_RDONLY|O_BINARY); if (fd >= 0) { - word i; - - read(fd,palette,768); + read(fd,palette, PAL_SIZE); close(fd); - vga_palette_lseek(0); - for (i=0;i < 256;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2); + VL_UpdatePaletteWrite(palette, o); } } +void VL_UpdatePaletteWrite(byte *palette, word o) +{ + word i; + vga_palette_lseek(/*1+*/o); + for (i=o;i < 256-o;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2); +} void modexSavePalFile(char *filename, byte *pal) { @@ -703,7 +729,6 @@ modexSavePalFile(char *filename, byte *pal) { file = fopen(filename, "wb"); if(!file) { printf("Could not open %s for writing\n", filename); - exit(-2); } /* write the data to the file */ @@ -726,177 +751,10 @@ modexPalWhite() { /* utility */ -void -modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqoffset) -{ - byte *p = bmp->palette; - 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(); - vga_wait_for_vsync(); - 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 */ - vga_wait_for_vsync(); - 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); - modexchkcolor(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(aqwidth/4) * y + (x / 4) + ((word)page->data); - word addrr = addrq; + word addrq; + word addrr; byte c; - s=romFonts[t].seg; - o=romFonts[t].off; - w=romFonts[t].charSize; - romFontsData.chw=0; - - for(; *str != '\0'; str++) - { - c = (*str); - if(c=='\n') + switch(sw) { - x = x_draw; - romFontsData.chw = 0; - addrq += (page->width / 4) * 8; - addrr = addrq; - y += 8; - continue; - } + case 0: + printf("%s\n", str); + break; + case 1: + if(tlsw){ x-=page->tlx; y-=page->tly; } + x_draw = x/4; + addrq = (page->stridew) * y + (word)(x_draw) + + ((word)page->data); + addrr = addrq; + s=romFonts[t].seg; + o=romFonts[t].off; + w=romFonts[t].charSize; + romFontsData.chw=0; + + for(; *str != '\0'; str++) + { + c = (*str); + if(c=='\n') + { + x = x_draw; + romFontsData.chw = 0; + addrq += (page->stridew) * 8; + addrr = addrq; + y += 8; + continue; + } - // load the character into romFontsData.l - // no need for inline assembly! - // NTS: It might even be faster to just let the modexDrawChar point directly at ROM font than to copy per char! --J.C. - _fmemcpy(romFontsData.l,MK_FP(s,o+(w*c))/*ROM font location*/,w/*char size*/); - modexDrawChar(page, x_draw/*for mode X planar use*/, t, col, bgcol, addrr); - x_draw += 8; /* track X for edge of screen */ - addrr += 2; /* move 8 pixels over (2 x 4 planar pixels per byte) */ + // load the character into romFontsData.l + // no need for inline assembly! + // NTS: It might even be faster to just let the modexDrawChar point directly at ROM font than to copy per char! --J.C. + _fmemcpy(romFontsData.l,MK_FP(s,o+(w*c))/*ROM font location*/,w/*char size*/); + modexDrawChar(page, x_draw/*for mode X planar use*/, t, col, bgcol, addrr); + x_draw += 8; /* track X for edge of screen */ + addrr += 2; /* move 8 pixels over (2 x 4 planar pixels per byte) */ + } + //printf("print xy:%dx%d tlxy:%dx%d\n", x, y, page->tlx, page->tly); + break; } } @@ -1236,8 +1021,8 @@ void modexpdump(page_t *pee) int palq=(mult)*TILEWH; int palcol=0; int palx, paly; - for(paly=0; palywidth*(page->height)/4); + _fmemset(Where, color, page->stridew*page->height); } // @@ -1320,6 +1105,26 @@ modexWaitBorder() { } } +void +modexWaitBorder_start() +{ + while(inp(INPUT_STATUS_1) & 8) { + // spin + } + +} + +void +modexWaitBorder_end() +{ + while(!(inp(INPUT_STATUS_1) & 8)) { + // spin + } + +} + +//=========================================================================== + // // printings of video memory information // @@ -1330,8 +1135,8 @@ void VL_PrintmodexmemInfo(video_t *v) // printf("========================================\n"); printf("VL_PrintmodexmemInfo:\n"); // printf("========================================\n"); - printf(" Virtual Screen: %dx", v->page[0].width); printf("%d ", v->page[0].height); printf("Tile: %dx", v->page[0].tilesw); printf("%d", v->page[0].tilesh); printf("=((Virtual Screen)/16)\n"); - printf(" Screen: %dx", v->page[0].sw); printf("%d ", v->page[0].sh); printf("Tile: %dx", v->page[0].tw); printf("%d", v->page[0].th); printf("=((Screen)/16)\n"); + printf(" Virtual Screen: %dx", v->page[0].width); printf("%d ", v->page[0].height); printf("Tile: %dx", v->page[0].ti.tilesw); printf("%d", v->page[0].ti.tilesh); printf("=((Virtual Screen)/16)\n"); + printf(" Screen: %dx", v->page[0].sw); printf("%d ", v->page[0].sh); printf("Tile: %dx", v->page[0].ti.tw); printf("%d", v->page[0].ti.th); printf("=((Screen)/16)\n"); printf(" Free Video Memory: %u\n", v->vmem_remain); printf(" page");