Diff for /np2/lio/gscreen.c between versions 1.9 and 1.14

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:

Removed from v.1.9  
changed lines
  Added in v.1.14


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