--- np2/lio/lio.c 2004/02/21 04:48:35 1.9 +++ np2/lio/lio.c 2004/06/12 15:32:53 1.19 @@ -7,69 +7,59 @@ #include "biosmem.h" #include "vram.h" #include "lio.h" - - -static _LIOWORK liowork; +#include "lio.res" void lio_initialize(void) { - UINT i; - - mem[0xf9900] = 0x11; - for (i=0; i<0x11; i++) { - mem[0xf9904 + i*4] = 0xa0 + i; - mem[0xf9905 + i*4] = 0x00; - SETBIOSMEM16(0xf9906 + i*4, 0x100 + i*4); - SETBIOSMEM32(0xf9a00 + i*4, 0xcf90fb90); - } - mem[0xf9944] = 0xce; + CopyMemory(mem + (LIO_SEGMENT << 4), liorom, sizeof(liorom)); } void bios_lio(REG8 cmd) { - LIOWORK lio; + _GLIO lio; UINT8 ret; // TRACEOUT(("lio command %.2x", cmd)); - - lio = &liowork; - lio->wait = 500; + MEML_READSTR(CPU_DS, 0x0620, &lio.work, sizeof(lio.work)); + lio.palmode = MEML_READ8(CPU_DS, 0x0a08); + lio.wait = 0; switch(cmd) { case 0x00: // a0: GINIT - ret = lio_ginit(lio); + ret = lio_ginit(&lio); break; case 0x01: // a1: GSCREEN - ret = lio_gscreen(lio); + ret = lio_gscreen(&lio); break; case 0x02: // a2: GVIEW - ret = lio_gview(lio); + ret = lio_gview(&lio); break; case 0x03: // a3: GCOLOR1 - ret = lio_gcolor1(lio); + ret = lio_gcolor1(&lio); break; case 0x04: // a4: GCOLOR2 - ret = lio_gcolor2(lio); + ret = lio_gcolor2(&lio); break; case 0x05: // a5: GCLS - ret = lio_gcls(lio); + ret = lio_gcls(&lio); break; case 0x06: // a6: GPSET - ret = lio_gpset(lio); + ret = lio_gpset(&lio); break; case 0x07: // a7: GLINE - ret = lio_gline(lio); + ret = lio_gline(&lio); break; -// case 0x08: // a8: GCIRCLE -// break; + case 0x08: // a8: GCIRCLE + ret = lio_gcircle(&lio); + break; // case 0x09: // a9: GPAINT1 // break; @@ -78,22 +68,22 @@ void bios_lio(REG8 cmd) { // break; case 0x0b: // ab: GGET - ret = lio_gget(lio); + ret = lio_gget(&lio); break; case 0x0c: // ac: GPUT1 - ret = lio_gput1(lio); + ret = lio_gput1(&lio); break; case 0x0d: // ad: GPUT2 - ret = lio_gput2(lio); + ret = lio_gput2(&lio); break; // case 0x0e: // ae: GROLL // break; case 0x0f: // af: GPOINT2 - ret = lio_gpoint2(lio); + ret = lio_gpoint2(&lio); break; // case 0x10: // ce: GCOPY @@ -104,7 +94,9 @@ void bios_lio(REG8 cmd) { break; } CPU_AH = ret; - gdcsub_setslavewait(lio->wait); + if (lio.wait) { + gdcsub_setslavewait(lio.wait); + } } @@ -112,7 +104,7 @@ void bios_lio(REG8 cmd) { const UINT32 lioplaneadrs[4] = {VRAM_B, VRAM_R, VRAM_G, VRAM_E}; -void lio_updatedraw(LIOWORK lio) { +void lio_updatedraw(GLIO lio) { UINT8 flag; UINT8 colorbit; @@ -126,38 +118,38 @@ void lio_updatedraw(LIOWORK lio) { flag |= LIODRAW_4BPP; colorbit = 4; } - switch(lio->mem.scrnmode) { + switch(lio->work.scrnmode) { case 0: - if (lio->mem.pos & 1) { + if (lio->work.pos & 1) { flag |= LIODRAW_UPPER; } maxline = 199; break; case 1: - flag |= lio->mem.pos % colorbit; + flag |= lio->work.pos % colorbit; flag |= LIODRAW_MONO; - if (lio->mem.pos >= colorbit) { + if (lio->work.pos >= colorbit) { flag |= LIODRAW_UPPER; } maxline = 199; break; case 2: - flag |= lio->mem.pos % colorbit; + flag |= lio->work.pos % colorbit; flag |= LIODRAW_MONO; break; } lio->draw.flag = flag; lio->draw.palmax = 1 << colorbit; - tmp = (SINT16)LOADINTELWORD(lio->mem.viewx1); + tmp = (SINT16)LOADINTELWORD(lio->work.viewx1); lio->draw.x1 = max(tmp, 0); - tmp = (SINT16)LOADINTELWORD(lio->mem.viewy1); + tmp = (SINT16)LOADINTELWORD(lio->work.viewy1); lio->draw.y1 = max(tmp, 0); - tmp = (SINT16)LOADINTELWORD(lio->mem.viewx2); + tmp = (SINT16)LOADINTELWORD(lio->work.viewx2); lio->draw.x2 = min(tmp, 639); - tmp = (SINT16)LOADINTELWORD(lio->mem.viewy2); + tmp = (SINT16)LOADINTELWORD(lio->work.viewy2); lio->draw.y2 = min(tmp, maxline); if (!gdcs.access) { lio->draw.base = 0; @@ -174,7 +166,7 @@ void lio_updatedraw(LIOWORK lio) { // ---- -static void pixed8(const _LIOWORK *lio, UINT addr, REG8 bit, REG8 pal) { +static void pixed8(const _GLIO *lio, UINT addr, REG8 bit, REG8 pal) { BYTE *ptr; @@ -200,7 +192,7 @@ static void pixed8(const _LIOWORK *lio, else { ptr[VRAM_G] &= ~bit; } - if (lio->palmode == 2) { + if (lio->draw.flag & LIODRAW_4BPP) { if (pal & 8) { ptr[VRAM_E] |= bit; } @@ -220,7 +212,7 @@ static void pixed8(const _LIOWORK *lio, } } -void lio_pset(const _LIOWORK *lio, SINT16 x, SINT16 y, REG8 pal) { +void lio_pset(const _GLIO *lio, SINT16 x, SINT16 y, REG8 pal) { UINT addr; BYTE bit; @@ -238,7 +230,8 @@ void lio_pset(const _LIOWORK *lio, SINT1 pixed8(lio, addr, bit, pal); } -void lio_line(const _LIOWORK *lio, SINT16 x1, SINT16 x2, SINT16 y, REG8 pal) { +#if 0 +void lio_line(const _GLIO *lio, SINT16 x1, SINT16 x2, SINT16 y, REG8 pal) { UINT addr; BYTE bit, dbit; @@ -264,9 +257,10 @@ void lio_line(const _LIOWORK *lio, SINT1 } gdcs.grphdisp |= lio->draw.sbit; dbit = 0; - while(bit && width--) { + while((bit) && (width)) { dbit |= bit; bit >>= 1; + width--; } pixed8(lio, addr, dbit, pal); addr++; @@ -277,16 +271,19 @@ void lio_line(const _LIOWORK *lio, SINT1 } dbit = 0; bit = 0x80; - while(bit && width--) { + while((bit) && (width)) { dbit |= bit; bit >>= 1; + width--; } if (dbit) { pixed8(lio, addr, dbit, pal); } } +#endif +#if 0 void lio_look(UINT vect) { BYTE work[16]; @@ -310,4 +307,5 @@ void lio_look(UINT vect) { work[6], work[7], work[8], work[9])); } } +#endif