|
|
| version 1.9, 2004/02/21 06:26:34 | version 1.14, 2005/02/07 14:46:12 |
|---|---|
| Line 9 | Line 9 |
| typedef struct { | typedef struct { |
| BYTE mode; | UINT8 mode; |
| BYTE sw; | UINT8 sw; |
| BYTE act; | UINT8 act; |
| BYTE disp; | UINT8 disp; |
| } GSCREEN; | } GSCREEN; |
| typedef struct { | typedef struct { |
| BYTE x1[2]; | UINT8 x1[2]; |
| BYTE y1[2]; | UINT8 y1[2]; |
| BYTE x2[2]; | UINT8 x2[2]; |
| BYTE y2[2]; | UINT8 y2[2]; |
| BYTE vdraw_bg; | UINT8 vdraw_bg; |
| BYTE vdraw_ln; | UINT8 vdraw_ln; |
| } GVIEW; | } GVIEW; |
| typedef struct { | typedef struct { |
| BYTE dummy; | UINT8 dummy; |
| BYTE bgcolor; | UINT8 bgcolor; |
| BYTE bdcolor; | UINT8 bdcolor; |
| BYTE fgcolor; | UINT8 fgcolor; |
| BYTE palmode; | UINT8 palmode; |
| } GCOLOR1; | } GCOLOR1; |
| typedef struct { | typedef struct { |
| BYTE pal; | UINT8 pal; |
| BYTE color1; | UINT8 color1; |
| BYTE color2; | UINT8 color2; |
| } GCOLOR2; | } GCOLOR2; |
| // ---- INIT | // ---- INIT |
| REG8 lio_ginit(LIOWORK lio) { | REG8 lio_ginit(GLIO lio) { |
| UINT i; | UINT i; |
| Line 52 REG8 lio_ginit(LIOWORK lio) { | Line 52 REG8 lio_ginit(LIOWORK lio) { |
| iocore_out8(0x006a, 0); | iocore_out8(0x006a, 0); |
| gdc_paletteinit(); | gdc_paletteinit(); |
| ZeroMemory(&lio->mem, sizeof(lio->mem)); | ZeroMemory(&lio->work, sizeof(lio->work)); |
| // lio->mem.scrnmode = 0; | // lio->work.scrnmode = 0; |
| // lio->mem.pos = 0; | // lio->work.pos = 0; |
| lio->mem.plane = 1; | lio->work.plane = 1; |
| // lio->mem.bgcolor = 0; | // lio->work.bgcolor = 0; |
| lio->mem.fgcolor = 7; | lio->work.fgcolor = 7; |
| for (i=0; i<8; i++) { | for (i=0; i<8; i++) { |
| lio->mem.color[i] = (UINT8)i; | lio->work.color[i] = (UINT8)i; |
| } | } |
| // STOREINTELWORD(lio->mem.viewx1, 0); | // STOREINTELWORD(lio->work.viewx1, 0); |
| // STOREINTELWORD(lio->mem.viewy1, 0); | // STOREINTELWORD(lio->work.viewy1, 0); |
| STOREINTELWORD(lio->mem.viewx2, 639); | STOREINTELWORD(lio->work.viewx2, 639); |
| STOREINTELWORD(lio->mem.viewy2, 399); | STOREINTELWORD(lio->work.viewy2, 399); |
| lio->palmode = 0; | lio->palmode = 0; |
| i286_memstr_write(CPU_DS, 0x0620, &lio->mem, sizeof(lio->mem)); | MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work)); |
| i286_membyte_write(CPU_DS, 0x0a08, lio->palmode); | MEML_WRITE8(CPU_DS, 0x0a08, lio->palmode); |
| return(LIO_SUCCESS); | return(LIO_SUCCESS); |
| } | } |
| // ---- SCREEN | // ---- SCREEN |
| REG8 lio_gscreen(LIOWORK lio) { | REG8 lio_gscreen(GLIO lio) { |
| GSCREEN dat; | GSCREEN dat; |
| UINT colorbit; | UINT colorbit; |
| Line 93 REG8 lio_gscreen(LIOWORK lio) { | Line 93 REG8 lio_gscreen(LIOWORK lio) { |
| else { | else { |
| colorbit = 4; | colorbit = 4; |
| } | } |
| i286_memstr_read(CPU_DS, CPU_BX, &dat, sizeof(dat)); | MEML_READSTR(CPU_DS, CPU_BX, &dat, sizeof(dat)); |
| scrnmode = dat.mode; | scrnmode = dat.mode; |
| if (scrnmode == 0xff) { | if (scrnmode == 0xff) { |
| scrnmode = lio->mem.scrnmode; | scrnmode = lio->work.scrnmode; |
| } | } |
| else { | else { |
| if ((dat.mode >= 2) && (!(mem[MEMB_PRXCRT] & 0x40))) { | if ((dat.mode >= 2) && (!(mem[MEMB_PRXCRT] & 0x40))) { |
| Line 118 REG8 lio_gscreen(LIOWORK lio) { | Line 118 REG8 lio_gscreen(LIOWORK lio) { |
| mono = ((scrnmode + 1) >> 1) & 1; | mono = ((scrnmode + 1) >> 1) & 1; |
| act = dat.act; | act = dat.act; |
| if (act == 0xff) { | if (act == 0xff) { |
| if (scrnmode != lio->mem.scrnmode) { | if (scrnmode != lio->work.scrnmode) { |
| lio->mem.pos = 0; | lio->work.pos = 0; |
| lio->mem.access = 0; | lio->work.access = 0; |
| } | } |
| } | } |
| else { | else { |
| Line 148 REG8 lio_gscreen(LIOWORK lio) { | Line 148 REG8 lio_gscreen(LIOWORK lio) { |
| if (act >= 2) { | if (act >= 2) { |
| goto gscreen_err5; | goto gscreen_err5; |
| } | } |
| lio->mem.pos = pos; | lio->work.pos = pos; |
| lio->mem.access = act; | lio->work.access = act; |
| } | } |
| disp = dat.disp; | disp = dat.disp; |
| if (disp == 0xff) { | if (disp == 0xff) { |
| if (scrnmode != lio->mem.scrnmode) { | if (scrnmode != lio->work.scrnmode) { |
| lio->mem.plane = 1; | lio->work.plane = 1; |
| lio->mem.disp = 0; | lio->work.disp = 0; |
| } | } |
| } | } |
| else { | else { |
| Line 164 REG8 lio_gscreen(LIOWORK lio) { | Line 164 REG8 lio_gscreen(LIOWORK lio) { |
| if (disp >= 2) { | if (disp >= 2) { |
| goto gscreen_err5; | goto gscreen_err5; |
| } | } |
| lio->mem.disp = disp; | lio->work.disp = disp; |
| planemax = 1; | planemax = 1; |
| if (mono) { | if (mono) { |
| planemax <<= colorbit; | planemax <<= colorbit; |
| Line 176 REG8 lio_gscreen(LIOWORK lio) { | Line 176 REG8 lio_gscreen(LIOWORK lio) { |
| (plane != (1 << colorbit))) { | (plane != (1 << colorbit))) { |
| goto gscreen_err5; | goto gscreen_err5; |
| } | } |
| lio->mem.plane = plane; | lio->work.plane = plane; |
| lio->mem.disp = disp; | lio->work.disp = disp; |
| } | } |
| lio->mem.scrnmode = scrnmode; | lio->work.scrnmode = scrnmode; |
| pos = lio->work.pos; | |
| switch(scrnmode) { | switch(scrnmode) { |
| case 0: | case 0: |
| mode = (pos)?0x40:0x80; | mode = (pos)?0x40:0x80; |
| Line 200 REG8 lio_gscreen(LIOWORK lio) { | Line 201 REG8 lio_gscreen(LIOWORK lio) { |
| break; | break; |
| } | } |
| mode |= disp << 4; | mode |= disp << 4; |
| TRACEOUT(("bios1842 - %.2x", mode)); | |
| bios0x18_42(mode); | bios0x18_42(mode); |
| iocore_out8(0x00a6, lio->mem.access); | iocore_out8(0x00a6, lio->work.access); |
| i286_memstr_write(CPU_DS, 0x0620, &lio->mem, sizeof(lio->mem)); | MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work)); |
| return(LIO_SUCCESS); | return(LIO_SUCCESS); |
| gscreen_err5: | gscreen_err5: |
| Line 215 gscreen_err5: | Line 215 gscreen_err5: |
| // ---- VIEW | // ---- VIEW |
| REG8 lio_gview(LIOWORK lio) { | REG8 lio_gview(GLIO lio) { |
| GVIEW dat; | GVIEW dat; |
| int x1; | int x1; |
| Line 223 REG8 lio_gview(LIOWORK lio) { | Line 223 REG8 lio_gview(LIOWORK lio) { |
| int x2; | int x2; |
| int y2; | int y2; |
| i286_memstr_read(CPU_DS, CPU_BX, &dat, sizeof(dat)); | MEML_READSTR(CPU_DS, CPU_BX, &dat, sizeof(dat)); |
| x1 = (SINT16)LOADINTELWORD(dat.x1); | x1 = (SINT16)LOADINTELWORD(dat.x1); |
| y1 = (SINT16)LOADINTELWORD(dat.y1); | y1 = (SINT16)LOADINTELWORD(dat.y1); |
| x2 = (SINT16)LOADINTELWORD(dat.x2); | x2 = (SINT16)LOADINTELWORD(dat.x2); |
| Line 231 REG8 lio_gview(LIOWORK lio) { | Line 231 REG8 lio_gview(LIOWORK lio) { |
| if ((x1 >= x2) || (y1 >= y2)) { | if ((x1 >= x2) || (y1 >= y2)) { |
| return(LIO_ILLEGALFUNC); | return(LIO_ILLEGALFUNC); |
| } | } |
| STOREINTELWORD(lio->mem.viewx1, (UINT16)x1); | STOREINTELWORD(lio->work.viewx1, (UINT16)x1); |
| STOREINTELWORD(lio->mem.viewy1, (UINT16)y1); | STOREINTELWORD(lio->work.viewy1, (UINT16)y1); |
| STOREINTELWORD(lio->mem.viewx2, (UINT16)x2); | STOREINTELWORD(lio->work.viewx2, (UINT16)x2); |
| STOREINTELWORD(lio->mem.viewy2, (UINT16)y2); | STOREINTELWORD(lio->work.viewy2, (UINT16)y2); |
| i286_memstr_write(CPU_DS, 0x0620, &lio->mem, sizeof(lio->mem)); | MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work)); |
| return(LIO_SUCCESS); | return(LIO_SUCCESS); |
| } | } |
| // ---- COLOR1 | // ---- COLOR1 |
| REG8 lio_gcolor1(LIOWORK lio) { | REG8 lio_gcolor1(GLIO lio) { |
| GCOLOR1 dat; | GCOLOR1 dat; |
| i286_memstr_read(CPU_DS, CPU_BX, &dat, sizeof(dat)); | MEML_READSTR(CPU_DS, CPU_BX, &dat, sizeof(dat)); |
| if (dat.bgcolor != 0xff) { | if (dat.bgcolor != 0xff) { |
| lio->mem.bgcolor = dat.bgcolor; | lio->work.bgcolor = dat.bgcolor; |
| } | } |
| if (dat.fgcolor == 0xff) { | if (dat.fgcolor == 0xff) { |
| lio->mem.fgcolor = dat.fgcolor; | lio->work.fgcolor = dat.fgcolor; |
| } | } |
| if (dat.palmode != 0xff) { | if (dat.palmode != 0xff) { |
| if (!(mem[MEMB_PRXCRT] & 1)) { // 8color lio | if (!(mem[MEMB_PRXCRT] & 1)) { // 8color lio |
| Line 270 REG8 lio_gcolor1(LIOWORK lio) { | Line 270 REG8 lio_gcolor1(LIOWORK lio) { |
| } | } |
| lio->palmode = dat.palmode; | lio->palmode = dat.palmode; |
| } | } |
| i286_memstr_write(CPU_DS, 0x0620, &lio->mem, sizeof(lio->mem)); | MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work)); |
| i286_membyte_write(CPU_DS, 0x0a08, lio->palmode); | MEML_WRITE8(CPU_DS, 0x0a08, lio->palmode); |
| return(LIO_SUCCESS); | return(LIO_SUCCESS); |
| gcolor1_err5: | gcolor1_err5: |
| Line 281 gcolor1_err5: | Line 281 gcolor1_err5: |
| // ---- COLOR2 | // ---- COLOR2 |
| REG8 lio_gcolor2(LIOWORK lio) { | REG8 lio_gcolor2(GLIO lio) { |
| GCOLOR2 dat; | GCOLOR2 dat; |
| i286_memstr_read(CPU_DS, CPU_BX, &dat, sizeof(dat)); | MEML_READSTR(CPU_DS, CPU_BX, &dat, sizeof(dat)); |
| if (dat.pal >= ((lio->palmode == 2)?16:8)) { | if (dat.pal >= ((lio->palmode == 2)?16:8)) { |
| goto gcolor2_err5; | goto gcolor2_err5; |
| } | } |
| if (!lio->palmode) { | if (!lio->palmode) { |
| dat.color1 &= 7; | dat.color1 &= 7; |
| lio->mem.color[dat.pal] = dat.color1; | lio->work.color[dat.pal] = dat.color1; |
| gdc_setdegitalpal(dat.pal, dat.color1); | gdc_setdegitalpal(dat.pal, dat.color1); |
| } | } |
| else { | else { |
| Line 302 REG8 lio_gcolor2(LIOWORK lio) { | Line 302 REG8 lio_gcolor2(LIOWORK lio) { |
| gdc_setanalogpal(dat.pal, offsetof(RGB32, p.g), | gdc_setanalogpal(dat.pal, offsetof(RGB32, p.g), |
| (UINT8)(dat.color2 & 0x0f)); | (UINT8)(dat.color2 & 0x0f)); |
| } | } |
| i286_memstr_write(CPU_DS, 0x0620, &lio->mem, sizeof(lio->mem)); | MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work)); |
| return(LIO_SUCCESS); | return(LIO_SUCCESS); |
| gcolor2_err5: | gcolor2_err5: |