Diff for /np2/io/Attic/extmem.c between versions 1.2 and 1.4

version 1.2, 2003/10/21 11:22:05 version 1.4, 2003/12/08 00:55:32
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "i286.h"  #include        "cpucore.h"
 #include        "memory.h"  #include        "memory.h"
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
   
   
         BYTE    *extmemmng_ptr;  
         UINT32  extmemmng_size;  
   
   
 void extmemmng_clear(void) {  void extmemmng_clear(void) {
   
         if (extmemmng_ptr) {          if (CPU_EXTMEM) {
                 free(extmemmng_ptr);                  _MFREE(CPU_EXTMEM);
                 extmemmng_ptr = NULL;                  CPU_EXTMEM = NULL;
                 extmemmng_size = 0;                  CPU_EXTMEMSIZE = 0;
         }          }
 }  }
   
 BOOL extmemmng_realloc(UINT megabytes) {  BOOL extmemmng_realloc(UINT megabytes) {
   
         megabytes <<= 20;          megabytes <<= 20;
         if (megabytes != extmemmng_size) {          if (megabytes != CPU_EXTMEMSIZE) {
                 extmemmng_clear();                  extmemmng_clear();
                 if (megabytes) {                  if (megabytes) {
                         extmemmng_ptr = (BYTE *)malloc(megabytes + 16);                          CPU_EXTMEM = (BYTE *)_MALLOC(megabytes + 16, "EXTMEM");
                         if (extmemmng_ptr == NULL) {                          if (CPU_EXTMEM == NULL) {
                                 return(FAILURE);                                  return(FAILURE);
                         }                          }
                 }                  }
                 extmemmng_size = megabytes;                  CPU_EXTMEMSIZE = megabytes;
         }          }
         return(SUCCESS);          return(SUCCESS);
 }  }
Line 37  BOOL extmemmng_realloc(UINT megabytes) { Line 33  BOOL extmemmng_realloc(UINT megabytes) {
   
 // ---- I/O  // ---- I/O
   
 static void IOOUTCALL emm_o08e1(UINT port, BYTE dat) {  static void IOOUTCALL emm_o08e1(UINT port, REG8 dat) {
   
         UINT    pos;          UINT    pos;
   
         if (!(CPUTYPE & CPUTYPE_V30)) {          if (!(CPU_TYPE & CPUTYPE_V30)) {
                 pos = (port >> 1) & 3;                  pos = (port >> 1) & 3;
                 if (!extmem.target) {                                                   // ver0.28                  if (!extmem.target) {                                                   // ver0.28
                         extmem.page[pos] = 0xffffffff;                          extmem.page[pos] = 0xffffffff;
Line 49  static void IOOUTCALL emm_o08e1(UINT por Line 45  static void IOOUTCALL emm_o08e1(UINT por
                 }                  }
                 else if (extmem.target < extmem.maxmem) {               // ver0.28                  else if (extmem.target < extmem.maxmem) {               // ver0.28
                         dat &= 0xfc;                          dat &= 0xfc;
                         extmem.page[pos] = ((extmem.target-1) << 8) + dat;                          extmem.page[pos] = ((extmem.target - 1) << 8) + dat;
                         extmem.pageptr[pos] = extmemmng_ptr +                          extmem.pageptr[pos] = CPU_EXTMEM + (extmem.page[pos] << 12);
                                                                         (extmem.page[pos] << 12);  
                 }                  }
         }          }
 }  }
   
 static void IOOUTCALL emm_o08e9(UINT port, BYTE dat) {  static void IOOUTCALL emm_o08e9(UINT port, REG8 dat) {
   
         if (!(CPUTYPE & CPUTYPE_V30)) {          if (!(CPU_TYPE & CPUTYPE_V30)) {
                 extmem.target = dat & 0x0f;                  extmem.target = dat & 0x0f;
         }          }
         (void)port;          (void)port;
 }  }
   
 static BYTE IOINPCALL emm_i08e9(UINT port) {  static REG8 IOINPCALL emm_i08e9(UINT port) {
   
         if ((!(CPUTYPE & CPUTYPE_V30)) &&          if ((!(CPU_TYPE & CPUTYPE_V30)) &&
                 (extmem.target) && (extmem.target < extmem.maxmem)) {                  (extmem.target) && (extmem.target < extmem.maxmem)) {
                 return(0);                  return(0);
         }          }
Line 83  BOOL extmem_init(BYTE usemem) { Line 78  BOOL extmem_init(BYTE usemem) {
   
         UINT    i;          UINT    i;
   
         if (usemem > 13) {                                                                                      // ver0.28          if (usemem > 13) {
                 usemem = 13;                  usemem = 13;
         }          }
         extmem.adrsmask = 0x0fffff;  
         extmem.target = 0;          extmem.target = 0;
         extmem.maxmem = 0;          extmem.maxmem = 0;
         for (i=0; i<4; i++) {          for (i=0; i<4; i++) {
                 extmem.page[i] = 0xffffffff;                  extmem.page[i] = 0xffffffff;
                 extmem.pageptr[i] = mem + 0xc0000 + (i << 14);                  // ver0.28                  extmem.pageptr[i] = mem + 0xc0000 + (i << 14);
         }          }
         if (extmemmng_realloc(usemem)) {          if (extmemmng_realloc(usemem)) {
                 return(FAILURE);                  return(FAILURE);
         }          }
         extmem.maxmem = usemem + 1;          extmem.maxmem = usemem + 1;
   #if defined(CPU386)
           init_cpumem(usemem);
   #endif
         return(SUCCESS);          return(SUCCESS);
 }  }
   

Removed from v.1.2  
changed lines
  Added in v.1.4


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