Diff for /np2/lio/gscreen.c between versions 1.8 and 1.11

version 1.8, 2004/02/21 04:48:35 version 1.11, 2004/03/04 17:36:06
Line 8 Line 8
 #include        "vram.h"  #include        "vram.h"
   
   
   
 typedef struct {  typedef struct {
         BYTE    mode;          BYTE    mode;
         BYTE    sw;          BYTE    sw;
Line 42  typedef struct { Line 41  typedef struct {
   
 // ---- INIT  // ---- INIT
   
 REG8 lio_ginit(LIOWORK lio) {  REG8 lio_ginit(GLIO lio) {
   
         UINT    i;          UINT    i;
   
Line 53  REG8 lio_ginit(LIOWORK lio) { Line 52  REG8 lio_ginit(LIOWORK lio) {
         iocore_out8(0x006a, 0);          iocore_out8(0x006a, 0);
         gdc_paletteinit();          gdc_paletteinit();
   
         lio->mem.scrnmode = 0;          ZeroMemory(&lio->work, sizeof(lio->work));
         lio->mem.pos = 0;  //      lio->work.scrnmode = 0;
         lio->mem.plane = 1;  //      lio->work.pos = 0;
         lio->mem.bgcolor = 0;          lio->work.plane = 1;
         lio->mem.fgcolor = 7;  //      lio->work.bgcolor = 0;
           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;
           MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work));
           i286_membyte_write(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 91  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 116  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 146  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 162  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 174  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;
         switch(scrnmode) {          switch(scrnmode) {
                 case 0:                  case 0:
                         mode = (pos)?0x40:0x80;                          mode = (pos)?0x40:0x80;
Line 200  REG8 lio_gscreen(LIOWORK lio) { Line 202  REG8 lio_gscreen(LIOWORK lio) {
         mode |= disp << 4;          mode |= disp << 4;
         TRACEOUT(("bios1842 - %.2x", mode));          TRACEOUT(("bios1842 - %.2x", mode));
         bios0x18_42(mode);          bios0x18_42(mode);
         iocore_out8(0x00a6, lio->mem.access);          iocore_out8(0x00a6, lio->work.access);
           MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work));
         return(LIO_SUCCESS);          return(LIO_SUCCESS);
   
 gscreen_err5:  gscreen_err5:
Line 212  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 220  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 228  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);
           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 266  REG8 lio_gcolor1(LIOWORK lio) { Line 270  REG8 lio_gcolor1(LIOWORK lio) {
                 }                  }
                 lio->palmode = dat.palmode;                  lio->palmode = dat.palmode;
         }          }
           MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work));
           i286_membyte_write(CPU_DS, 0x0a08, lio->palmode);
         return(LIO_SUCCESS);          return(LIO_SUCCESS);
   
 gcolor1_err5:  gcolor1_err5:
Line 275  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 296  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));
         }          }
           MEML_WRITESTR(CPU_DS, 0x0620, &lio->work, sizeof(lio->work));
         return(LIO_SUCCESS);          return(LIO_SUCCESS);
   
 gcolor2_err5:  gcolor2_err5:

Removed from v.1.8  
changed lines
  Added in v.1.11


RetroPC.NET-CVS <cvs@retropc.net>