Previous 15994 Revisions Next

r10751 Thursday 10th March, 2011 at 16:11:56 UTC by Angelo Salese
[PC-9801RS]: Implemented ramsize option
[src/mess/drivers]pc9801.c

src/mess/drivers/pc9801.c
r10750r10751
3333#include "sound/2203intf.h"
3434#include "video/upd7220.h"
3535#include "imagedev/flopdrv.h"
36#include "machine/ram.h"
3637
3738class pc9801_state : public driver_device
3839{
r10750r10751
7980   UINT8 por;       //Power-On Reset
8081   UINT8 rom_bank;
8182   UINT8 fdc_ctrl;
83   UINT32 ram_size;
8284};
8385
8486
r10750r10751
862864   WRAM[offset] = data;
863865}
864866
867static READ8_HANDLER( pc9801rs_ex_wram_r )
868{
869   UINT8 *EX_WRAM = space->machine->region("ex_wram")->base();
870
871   return EX_WRAM[offset];
872}
873
874static WRITE8_HANDLER( pc9801rs_ex_wram_w )
875{
876   UINT8 *EX_WRAM = space->machine->region("ex_wram")->base();
877
878   EX_WRAM[offset] = data;
879}
880
865881static READ8_HANDLER( pc9801rs_ipl_r )
866882{
867883   pc9801_state *state = space->machine->driver_data<pc9801_state>();
r10750r10751
956972   return pc9801_30_r(space,offset);
957973}
958974
975
959976static READ8_HANDLER( pc9801rs_memory_r )
960977{
961978   pc9801_state *state = space->machine->driver_data<pc9801_state>();
r10750r10751
963980   if(state->gate_a20 == 0)
964981      offset &= 0xfffff;
965982
966   if      (offset >= 0x00000000 && offset <= 0x0009ffff) { return pc9801rs_wram_r(space,offset); }
967   else if(offset >= 0x000a0000 && offset <= 0x000a3fff) { return pc9801_tvram_r(space,offset-0xa0000); }
968   else if(offset >= 0x000a4000 && offset <= 0x000a4fff) { return pc9801rs_knjram_r(space,offset & 0xfff); }
969   else if(offset >= 0x000a8000 && offset <= 0x000bffff) { return pc9801_gvram_r(space,offset-0xa8000); }
970   else if(offset >= 0x000e0000 && offset <= 0x000fffff) { return pc9801rs_ipl_r(space,offset & 0x1ffff); }
971   else if(offset >= 0xfffe0000 && offset <= 0xffffffff) {   return pc9801rs_ipl_r(space,offset & 0x1ffff); }
983   if      (offset >= 0x00000000 && offset <= 0x0009ffff)                   { return pc9801rs_wram_r(space,offset);               }
984   else if(offset >= 0x000a0000 && offset <= 0x000a3fff)                   { return pc9801_tvram_r(space,offset-0xa0000);        }
985   else if(offset >= 0x000a4000 && offset <= 0x000a4fff)                   { return pc9801rs_knjram_r(space,offset & 0xfff);     }
986   else if(offset >= 0x000a8000 && offset <= 0x000bffff)                   { return pc9801_gvram_r(space,offset-0xa8000);        }
987   else if(offset >= 0x000e0000 && offset <= 0x000fffff)                   { return pc9801rs_ipl_r(space,offset & 0x1ffff);      }
988   else if(offset >= 0x00100000 && offset <= 0x00100000+state->ram_size-1) { return pc9801rs_ex_wram_r(space,offset-0x00100000); }
989   else if(offset >= 0xfffe0000 && offset <= 0xffffffff)                   { return pc9801rs_ipl_r(space,offset & 0x1ffff);      }
972990
973991   //printf("%08x\n",offset);
974992   return 0x00;
r10750r10751
9821000   if(state->gate_a20 == 0)
9831001      offset &= 0xfffff;
9841002
985   if      (offset >= 0x00000000 && offset <= 0x0009ffff) { pc9801rs_wram_w(space,offset,data); }
986   else if(offset >= 0x000a0000 && offset <= 0x000a3fff) { pc9801_tvram_w(space,offset-0xa0000,data); }
987   else if(offset >= 0x000a4000 && offset <= 0x000a4fff) { pc9801rs_knjram_w(space,offset & 0xfff,data); }
988   else if(offset >= 0x000a8000 && offset <= 0x000bffff) { pc9801_gvram_w(space,offset-0xa8000,data); }
1003   if      (offset >= 0x00000000 && offset <= 0x0009ffff)                   { pc9801rs_wram_w(space,offset,data);                  }
1004   else if(offset >= 0x000a0000 && offset <= 0x000a3fff)                   { pc9801_tvram_w(space,offset-0xa0000,data);           }
1005   else if(offset >= 0x000a4000 && offset <= 0x000a4fff)                   { pc9801rs_knjram_w(space,offset & 0xfff,data);        }
1006   else if(offset >= 0x000a8000 && offset <= 0x000bffff)                   { pc9801_gvram_w(space,offset-0xa8000,data);           }
1007   else if(offset >= 0x00100000 && offset <= 0x00100000+state->ram_size-1) { pc9801rs_ex_wram_w(space,offset-0x00100000,data);    }
9891008   //else
9901009   //   printf("%08x %08x\n",offset,data);
9911010
r10750r10751
18081827   state->por = 0xa0;
18091828   state->rom_bank = 0;
18101829   state->fdc_ctrl = 3;
1830
1831   state->ram_size = ram_get_size(machine->device(RAM_TAG)) - 0xa0000;
1832
1833   printf("%08x\n",state->ram_size);
18111834}
18121835
18131836static INTERRUPT_GEN(pc9801_vrtc_irq)
r10750r10751
19011924   //"upd765_2dd"
19021925   MCFG_FLOPPY_4_DRIVES_ADD(pc9801_floppy_config)
19031926
1927   MCFG_RAM_ADD(RAM_TAG)
1928   MCFG_RAM_DEFAULT_SIZE("640K")
1929   MCFG_RAM_EXTRA_OPTIONS("1664K,3712K,7808K")
1930
19041931   MCFG_SCREEN_ADD("screen", RASTER)
19051932   MCFG_SCREEN_REFRESH_RATE(60)
19061933   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
r10750r10751
19621989   ROM_LOAD( "itf.rom",  0x18000, 0x08000, CRC(c1815325) SHA1(a2fb11c000ed7c976520622cfb7940ed6ddc904e) )
19631990   ROM_LOAD( "bios.rom", 0x28000, 0x18000, BAD_DUMP CRC(315d2703) SHA1(4f208d1dbb68373080d23bff5636bb6b71eb7565) )
19641991
1965   ROM_REGION( 0xa0000, "wram", ROMREGION_ERASE00 )
1992   ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 )
19661993
1994   ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 )
1995
19671996   //ROM_REGION( 0x1000, "kanji", ROMREGION_ERASE00 )
19681997
19691998   /* where shall we load this? */

Previous 15994 Revisions Next


© 1998-2018 The MESS Team