--- np2/i286c/memory.h 2003/10/16 17:57:45 1.1 +++ np2/i286c/memory.h 2005/03/21 02:24:23 1.13 @@ -6,10 +6,16 @@ // 000000-0fffff メインメモリ // 100000-10ffef HMA +// 10fff0-10ffff HIMEM // 110000-193fff FONT-ROM/RAM -// 1a8000-1e7fff VRAM1 +// 1a8000-1bffff VRAM1 +// 1c0000-1c7fff ITF-ROM BAK +// 1c8000-1dffff EPSON RAM +// 1e0000-1e7fff VRAM1 // 1f8000-1fffff ITF-ROM +#define USE_HIMEM 0x110000 + enum { VRAM_STEP = 0x100000, VRAM_B = 0x0a8000, @@ -27,36 +33,67 @@ enum { VRAM1_E = (VRAM_STEP + VRAM_E), FONT_ADRS = 0x110000, - ITF_ADRS = 0x1f8000 + ITF_ADRS = (VRAM_STEP + 0xf8000) }; -#define VRAM_POS(a) (a & (VRAM_STEP | 0x7fff)) +#define VRAMADDRMASKEX(a) ((a) & (VRAM_STEP | 0x7fff)) #ifdef __cplusplus extern "C" { #endif -extern BYTE mem[0x200000]; +extern UINT8 mem[0x200000]; +void MEMCALL i286_memorymap(UINT type); +void MEMCALL i286_romareamap(UINT16 map); void MEMCALL i286_vram_dispatch(UINT operate); -BYTE MEMCALL i286_memoryread(UINT32 address); -UINT16 MEMCALL i286_memoryread_w(UINT32 address); -void MEMCALL i286_memorywrite(UINT32 address, BYTE value); -void MEMCALL i286_memorywrite_w(UINT32 address, UINT16 value); - -BYTE MEMCALL i286_membyte_read(UINT seg, UINT off); -UINT16 MEMCALL i286_memword_read(UINT seg, UINT off); -void MEMCALL i286_membyte_write(UINT seg, UINT off, BYTE value); -void MEMCALL i286_memword_write(UINT seg, UINT off, UINT16 value); - -void MEMCALL i286_memstr_read(UINT seg, UINT off, void *dat, UINT leng); -void MEMCALL i286_memstr_write(UINT seg, UINT off, - const void *dat, UINT leng); - -void MEMCALL i286_memx_read(UINT32 address, void *dat, UINT leng); -void MEMCALL i286_memx_write(UINT32 address, const void *dat, UINT leng); +REG8 MEMCALL i286_memoryread(UINT32 address); +REG16 MEMCALL i286_memoryread_w(UINT32 address); +UINT32 MEMCALL i286_memoryread_d(UINT32 address); +void MEMCALL i286_memorywrite(UINT32 address, REG8 value); +void MEMCALL i286_memorywrite_w(UINT32 address, REG16 value); +void MEMCALL i286_memorywrite_d(UINT32 address, UINT32 value); + +REG8 MEMCALL meml_read8(UINT seg, UINT off); +REG16 MEMCALL meml_read16(UINT seg, UINT off); +void MEMCALL meml_write8(UINT seg, UINT off, REG8 value); +void MEMCALL meml_write16(UINT seg, UINT off, REG16 value); + +void MEMCALL meml_readstr(UINT seg, UINT off, void *dat, UINT leng); +void MEMCALL meml_writestr(UINT seg, UINT off, const void *dat, UINT leng); + +void MEMCALL meml_read(UINT32 address, void *dat, UINT leng); +void MEMCALL meml_write(UINT32 address, const void *dat, UINT leng); + + +// ---- Physical Space (DMA) + +#define MEMP_READ8(addr) \ + i286_memoryread((addr)) +#define MEMP_WRITE8(addr, dat) \ + i286_memorywrite((addr), (dat)) + + +// ---- Logical Space (BIOS) + +#define MEML_READ8(seg, off) \ + meml_read8((seg), (off)) +#define MEML_READ16(seg, off) \ + meml_read16((seg), (off)) +#define MEML_WRITE8(seg, off, dat) \ + meml_write8((seg), (off), (dat)); +#define MEML_WRITE16(seg, off, dat) \ + meml_write16((seg), (off), (dat)); +#define MEML_READSTR(seg, off, dat, leng) \ + meml_readstr((seg), (off), (dat), (leng)) +#define MEML_WRITESTR(seg, off, dat, leng) \ + meml_writestr((seg), (off), (dat), (leng)) +#define MEML_READ(addr, dat, leng) \ + meml_read((addr), (dat), (leng)) +#define MEML_WRITE(addr, dat, leng) \ + meml_write((addr), (dat), (leng)) #ifdef __cplusplus }