|
|
| version 1.2, 2003/12/11 15:03:16 | version 1.4, 2004/01/07 14:49:10 |
|---|---|
| Line 32 | Line 32 |
| #include "memory.h" | #include "memory.h" |
| // あとで… | // あとで… |
| extern DWORD cpumem_addrmask; | // extern DWORD cpumem_addrmask; // -> CPU_STAT_ADRSMASK |
| BYTE *cpumem = 0; | BYTE *cpumem = 0; |
| DWORD extmem_size = 0; | DWORD extmem_size = 0; |
| Line 500 cpu_vmemorywrite_d(int idx, DWORD madr, | Line 500 cpu_vmemorywrite_d(int idx, DWORD madr, |
| void MEMCALL | void MEMCALL |
| cpu_memorywrite_d(DWORD address, DWORD value) | cpu_memorywrite_d(DWORD address, DWORD value) |
| { | { |
| DWORD adr = address & cpumem_addrmask; | DWORD adr = address & CPU_STAT_ADRSMASK; |
| if (adr < LOWMEM - 3) { | if (adr < LOWMEM - 3) { |
| __i286_memorywrite_d(adr, value); | __i286_memorywrite_d(adr, value); |
| Line 511 cpu_memorywrite_d(DWORD address, DWORD v | Line 511 cpu_memorywrite_d(DWORD address, DWORD v |
| adr -= LOWMEM; | adr -= LOWMEM; |
| if (adr < extmem_size - 3) { | if (adr < extmem_size - 3) { |
| STOREINTELDWORD(cpumem + adr, value); | STOREINTELDWORD(cpumem + adr, value); |
| } else { | } else if (adr < extmem_size) { |
| ia32_panic("cpu_memorywrite_d: out of universe."); | cpu_memorywrite_w(adr, value & 0xffff); |
| cpu_memorywrite_w(adr + 2, (value >> 16) & 0xffff); | |
| } | } |
| } | } |
| } | } |
| Line 520 cpu_memorywrite_d(DWORD address, DWORD v | Line 521 cpu_memorywrite_d(DWORD address, DWORD v |
| void MEMCALL | void MEMCALL |
| cpu_memorywrite_w(DWORD address, WORD value) | cpu_memorywrite_w(DWORD address, WORD value) |
| { | { |
| DWORD adr = address & cpumem_addrmask; | DWORD adr = address & CPU_STAT_ADRSMASK; |
| if (adr < LOWMEM - 1) { | if (adr < LOWMEM - 1) { |
| __i286_memorywrite_w(adr, value); | __i286_memorywrite_w(adr, value); |
| Line 531 cpu_memorywrite_w(DWORD address, WORD va | Line 532 cpu_memorywrite_w(DWORD address, WORD va |
| adr -= LOWMEM; | adr -= LOWMEM; |
| if (adr < extmem_size - 1) { | if (adr < extmem_size - 1) { |
| STOREINTELWORD(cpumem + adr, value); | STOREINTELWORD(cpumem + adr, value); |
| } else { | } else if (adr == extmem_size - 1) { |
| ia32_panic("cpu_memorywrite_w: out of universe."); | cpumem[adr] = value & 0xff; |
| } | } |
| } | } |
| } | } |
| Line 540 cpu_memorywrite_w(DWORD address, WORD va | Line 541 cpu_memorywrite_w(DWORD address, WORD va |
| void MEMCALL | void MEMCALL |
| cpu_memorywrite(DWORD address, BYTE value) | cpu_memorywrite(DWORD address, BYTE value) |
| { | { |
| DWORD adr = address & cpumem_addrmask; | DWORD adr = address & CPU_STAT_ADRSMASK; |
| if (adr < LOWMEM) { | if (adr < LOWMEM) { |
| __i286_memorywrite(adr, value); | __i286_memorywrite(adr, value); |
| Line 548 cpu_memorywrite(DWORD address, BYTE valu | Line 549 cpu_memorywrite(DWORD address, BYTE valu |
| adr -= LOWMEM; | adr -= LOWMEM; |
| if (adr < extmem_size) { | if (adr < extmem_size) { |
| cpumem[adr] = value; | cpumem[adr] = value; |
| } else { | |
| ia32_panic("cpu_memorywrite: out of universe."); | |
| } | } |
| } | } |
| } | } |
| Line 557 cpu_memorywrite(DWORD address, BYTE valu | Line 556 cpu_memorywrite(DWORD address, BYTE valu |
| DWORD MEMCALL | DWORD MEMCALL |
| cpu_memoryread_d(DWORD address) | cpu_memoryread_d(DWORD address) |
| { | { |
| DWORD adr = address & cpumem_addrmask; | DWORD adr = address & CPU_STAT_ADRSMASK; |
| DWORD val; | DWORD val; |
| if (adr < LOWMEM - 3) { | if (adr < LOWMEM - 3) { |
| Line 570 cpu_memoryread_d(DWORD address) | Line 569 cpu_memoryread_d(DWORD address) |
| if (adr < extmem_size - 3) { | if (adr < extmem_size - 3) { |
| val = LOADINTELDWORD(cpumem + adr); | val = LOADINTELDWORD(cpumem + adr); |
| } else { | } else { |
| ia32_panic("cpu_memoryread_d: out of universe."); | val = cpu_memoryread_w(adr); |
| val = (DWORD)-1; | val |= (DWORD)cpu_memoryread_w(adr + 2) << 16; |
| } | } |
| } | } |
| return val; | return val; |
| Line 580 cpu_memoryread_d(DWORD address) | Line 579 cpu_memoryread_d(DWORD address) |
| WORD MEMCALL | WORD MEMCALL |
| cpu_memoryread_w(DWORD address) | cpu_memoryread_w(DWORD address) |
| { | { |
| DWORD adr = address & cpumem_addrmask; | DWORD adr = address & CPU_STAT_ADRSMASK; |
| WORD val; | WORD val; |
| if (adr < LOWMEM - 1) { | if (adr < LOWMEM - 1) { |
| Line 592 cpu_memoryread_w(DWORD address) | Line 591 cpu_memoryread_w(DWORD address) |
| adr -= LOWMEM; | adr -= LOWMEM; |
| if (adr < extmem_size - 1) { | if (adr < extmem_size - 1) { |
| val = LOADINTELWORD(cpumem + adr); | val = LOADINTELWORD(cpumem + adr); |
| } else if (adr == extmem_size - 1) { | |
| val = 0xff00 | cpumem[adr]; | |
| } else { | } else { |
| ia32_panic("cpu_memoryread_w: out of universe."); | |
| val = (WORD)-1; | val = (WORD)-1; |
| } | } |
| } | } |
| Line 603 cpu_memoryread_w(DWORD address) | Line 603 cpu_memoryread_w(DWORD address) |
| BYTE MEMCALL | BYTE MEMCALL |
| cpu_memoryread(DWORD address) | cpu_memoryread(DWORD address) |
| { | { |
| DWORD adr = address & cpumem_addrmask; | DWORD adr = address & CPU_STAT_ADRSMASK; |
| BYTE val; | BYTE val; |
| if (adr < LOWMEM) { | if (adr < LOWMEM) { |
| Line 613 cpu_memoryread(DWORD address) | Line 613 cpu_memoryread(DWORD address) |
| if (adr < extmem_size) { | if (adr < extmem_size) { |
| val = cpumem[adr]; | val = cpumem[adr]; |
| } else { | } else { |
| ia32_panic("cpu_memoryread: out of universe."); | |
| val = (BYTE)-1; | val = (BYTE)-1; |
| } | } |
| } | } |