\r
void VL_Initofs(video_t *video)\r
{\r
- video->ofs.offscreen_ofs = video->page[0].pagesize+video->page[1].pagesize;//(vga_state.vga_stride * vga_state.vga_height);\r
- video->ofs.pattern_ofs = (uint16_t)video->page[2].data;\r
+ if(!video->bgps)\r
+ {\r
+ video->ofs.offscreen_ofs = video->page[0].pagesize+video->page[1].pagesize;//(vga_state.vga_stride * vga_state.vga_height);\r
+ video->ofs.pattern_ofs = (uint16_t)video->page[2].data;\r
+ }else{\r
+ video->ofs.offscreen_ofs = 0;\r
+ video->ofs.pattern_ofs = 0;//(uint16_t)video->page[0].data;\r
+ }\r
}\r
\r
void modexHiganbanaPageSetup(video_t *video)\r
(video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].width, 96); video->num_of_pages++;\r
modexCalcVmemRemain(video);\r
\r
- video->sp=video->p=0;\r
- video->r=1;\r
- video->vh=video->page[0].height+video->page[1].height+video->page[3].height-8;//+video->page[2].height\r
+ video->sp=video->p = 0; //showpage\r
+ video->dorender = 1; //render\r
+ video->vh=video->page[0].height+video->page[1].height+video->page[2].height+video->page[3].height;\r
\r
VL_Initofs(video);\r
//doslib origi var\r
video->omemptr= vga_state.vga_graphics_ram;\r
video->vga_draw_stride= vga_state.vga_draw_stride;\r
video->vga_draw_stride_limit= vga_state.vga_draw_stride_limit;\r
- //sprite render switch\r
- video->rss=0;\r
+ //sprite render switch and bgpreservation switch\r
+ video->rss= 1;\r
+ video->bgps= 1;\r
\r
//setup the buffersize\r
video->page[0].dx=video->page[0].dy=\r
outp(AC_INDEX, 0x33);\r
outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
}\r
+\r
//args: page, vertical sync switch, screen resolution switch, page0 switch\r
void\r
VL_ShowPage(page_t *page, boolean vsync, boolean sr) {\r
word high_address, low_address, offset;\r
byte crtcOffset;\r
\r
- /* calculate offset */\r
+ // calculate offset\r
offset = (word) page->data;\r
- offset += page[0].dy * (page->width >> 2 );\r
- offset += page[0].dx >> 2;\r
+ offset += page->dy * (page->width >> 2 );\r
+ offset += page->dx >> 2;\r
\r
- /* calculate crtcOffset according to virtual width */\r
+ // calculate crtcOffset according to virtual width\r
switch(sr)\r
{\r
case 1:\r
high_address = HIGH_ADDRESS | (offset & 0xff00);\r
low_address = LOW_ADDRESS | (offset << 8);\r
\r
- /* wait for appropriate timing and then program CRTC */\r
+ // wait for appropriate timing and then program CRTC\r
if(vsync) while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE));\r
outpw(CRTC_INDEX, high_address);\r
outpw(CRTC_INDEX, low_address);\r
outp(CRTC_INDEX, 0x13);\r
outp(CRTC_DATA, crtcOffset);\r
\r
- /* wait for one retrace */\r
+ // wait for one retrace\r
if(vsync) while (!(inp(INPUT_STATUS_1) & VRETRACE));\r
\r
- /* do PEL panning here */\r
+ // do PEL panning here\r
outp(AC_INDEX, 0x33);\r
- outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
- vga_state.vga_graphics_ram = (VGA_RAM_PTR)page[0].data;\r
+ outp(AC_INDEX, (page->dx & 0x03) << 1);\r
+ vga_state.vga_graphics_ram = (VGA_RAM_PTR)page->data;\r
}\r
\r
//=============================================================================\r
\r
/* handle errors */\r
if(!ptr) {\r
- printf("Could not allocate palette.\n");\r
- exit(-1);\r
+ printf("Could not allocate palette.\n");\r
}\r
\r
return ptr;\r
file = fopen(filename, "rb");\r
if(!file) {\r
printf("Could not open palette file: %s\n", filename);\r
- exit(-2);\r
}\r
\r
/* read the file */\r
if (fd >= 0) {\r
word i;\r
\r
- read(fd,palette,768);\r
+ read(fd,palette, PAL_SIZE);\r
close(fd);\r
\r
vga_palette_lseek(0);\r
file = fopen(filename, "wb");\r
if(!file) {\r
printf("Could not open %s for writing\n", filename);\r
- exit(-2);\r
}\r
\r
/* write the data to the file */\r
word s, o, w;\r
word x_draw = x;\r
//word addr = (word) romFontsData.l;\r
- word addrq = (page->width/4) * y + (x / 4) + ((word)page->data);\r
+ word addrq = (page->stridew) * y + (x / 4) + ((word)page->data);\r
word addrr = addrq;\r
byte c;\r
\r
{\r
x = x_draw;\r
romFontsData.chw = 0;\r
- addrq += (page->width / 4) * 8;\r
+ addrq += (page->stridew) * 8;\r
addrr = addrq;\r
y += 8;\r
continue;\r
}\r
}\r
\r
+void\r
+modexWaitBorder_start()\r
+{\r
+ while(inp(INPUT_STATUS_1) & 8) {\r
+ // spin\r
+ }\r
+\r
+}\r
+\r
+void\r
+modexWaitBorder_end()\r
+{\r
+ while(!(inp(INPUT_STATUS_1) & 8)) {\r
+ // spin\r
+ }\r
+\r
+}\r
+\r
//\r
// printings of video memory information\r
//\r
printf("VL_PrintmodexmemInfo:\n");\r
// printf("========================================\n");\r
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");\r
- 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");\r
+ 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");\r
\r
printf(" Free Video Memory: %u\n", v->vmem_remain);\r
printf(" page");\r