Previous 15994 Revisions Next

r15768 Monday 6th August, 2012 at 11:49:00 UTC by Miodrag Milanović
New computer added : Elektronika MS-0515 [KokaF77, Miodrag Milanovic]

out of log:
Big thanks for KokaF77 for providing docs for this machine
[src/mess]mess.lst mess.mak
[src/mess/drivers]ms0515.c*

src/mess/mess.lst
r15767r15768
21422142hpz80unk
21432143itt3030
21442144vax785
2145ms0515
src/mess/drivers/ms0515.c
r0r15768
1/***************************************************************************
2   
3        Elektronika MS-0515
4
5        06/08/2012 Skeleton driver.
6
7****************************************************************************/
8
9#include "emu.h"
10#include "cpu/t11/t11.h"
11#include "machine/wd17xx.h"
12#include "imagedev/flopdrv.h"
13#include "formats/basicdsk.h"
14#include "machine/ram.h"
15
16class ms0515_state : public driver_device
17{
18public:
19   ms0515_state(const machine_config &mconfig, device_type type, const char *tag)
20      : driver_device(mconfig, type, tag),
21        m_maincpu(*this, "maincpu")
22   { }
23
24   required_device<cpu_device> m_maincpu;
25   
26   DECLARE_WRITE16_MEMBER(ms0515_bank_w);
27   virtual void machine_reset();
28   
29   UINT8 *m_video_ram;
30};
31
32static ADDRESS_MAP_START(ms0515_mem, AS_PROGRAM, 16, ms0515_state)
33   ADDRESS_MAP_UNMAP_HIGH
34   AM_RANGE(0000000, 0037777) AM_RAMBANK("bank0") // RAM
35   AM_RANGE(0040000, 0077777) AM_RAMBANK("bank1") // RAM
36   AM_RANGE(0100000, 0137777) AM_RAMBANK("bank2") // RAM
37   AM_RANGE(0140000, 0157777) AM_RAMBANK("bank3") // RAM
38   AM_RANGE(0160000, 0177377) AM_ROM   
39   
40   AM_RANGE(0177400, 0177437) AM_WRITE(ms0515_bank_w) // Register for RAM expansion
41   
42   //AM_RANGE(0177440, 0177441)  // read data
43   //AM_RANGE(0177460, 0177461)  // write data   Elektronika MS-7004 Keyboard
44   //AM_RANGE(0177442, 0177443)  // read
45   //AM_RANGE(0177462, 0177463)  // write
46   
47   //AM_RANGE(0177500, 0177501)
48   //AM_RANGE(0177502, 0177503)
49   //AM_RANGE(0177504, 0177505)  // i8253
50   //AM_RANGE(0177506, 0177507)
51   
52   //AM_RANGE(0177540, 0177541)
53   //AM_RANGE(0177542, 0177543)
54   //AM_RANGE(0177544, 0177545)  // i8255 for MS-7007 Keyboard
55   //AM_RANGE(0177546, 0177547)
56
57   //AM_RANGE(0177600, 0177601)
58   //AM_RANGE(0177602, 0177603)
59   //AM_RANGE(0177604, 0177605)  // i8255 for parallel port
60   //AM_RANGE(0177606, 0177607)
61   
62   AM_RANGE(0177640, 0177641) AM_DEVREADWRITE8_LEGACY("vg93", wd17xx_status_r, wd17xx_command_w,0x00ff)
63   AM_RANGE(0177642, 0177643) AM_DEVREADWRITE8_LEGACY("vg93", wd17xx_track_r, wd17xx_track_w,0x00ff)
64   AM_RANGE(0177644, 0177645) AM_DEVREADWRITE8_LEGACY("vg93", wd17xx_sector_r, wd17xx_sector_w,0x00ff)
65   AM_RANGE(0177646, 0177647) AM_DEVREADWRITE8_LEGACY("vg93", wd17xx_data_r, wd17xx_data_w,0x00ff)   
66   
67   //AM_RANGE(0177700, 0177701) // read data
68   //AM_RANGE(0177720, 0177721) // write data     // protocol S2
69   //AM_RANGE(0177702, 0177703) // read status
70   //AM_RANGE(0177722, 0177723) // write control
71   
72   //AM_RANGE(0177770, 0177771) // read/write
73ADDRESS_MAP_END
74
75WRITE16_MEMBER(ms0515_state::ms0515_bank_w)
76{
77   switch((data >> 10) % 3)
78   {
79      case 0: // 000000 - 037777
80            break;
81      case 1: // 040000 - 077777
82            break;
83      case 2:
84      case 3: // 100000 - 137777
85            break;
86   }
87   
88   printf("bank[%d] %02x video %d\n",((data >> 10) % 3),data & 0x7f, BIT(data,7));
89}
90
91void ms0515_state::machine_reset()
92{
93   UINT8 *ram = machine().device<ram_device>(RAM_TAG)->pointer();
94   membank("bank0")->set_base(ram + 0000000);
95   membank("bank1")->set_base(ram + 0040000);
96   membank("bank2")->set_base(ram + 0100000);
97   membank("bank3")->set_base(ram + 0140000);
98   
99   m_video_ram = ram + 0040000;
100}
101/* Input ports */
102static INPUT_PORTS_START( ms0515 )
103INPUT_PORTS_END
104
105static const struct t11_setup ms0515_data =
106{
107   0xf2ff
108};
109
110static const wd17xx_interface ms0515_wd17xx_interface =
111{
112   DEVCB_LINE_VCC,
113   DEVCB_NULL,
114   DEVCB_NULL,
115   { FLOPPY_0, NULL, NULL, NULL }
116};
117
118
119static LEGACY_FLOPPY_OPTIONS_START(ms0515)
120   LEGACY_FLOPPY_OPTION(ms0515, "dz", "MS0515 disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
121      HEADS([1])
122      TRACKS([80])
123      SECTORS([10])
124      SECTOR_LENGTH([512])
125      FIRST_SECTOR_ID([0]))
126LEGACY_FLOPPY_OPTIONS_END
127
128static const floppy_interface ms0515_floppy_interface =
129{
130   DEVCB_NULL,
131   DEVCB_NULL,
132   DEVCB_NULL,
133   DEVCB_NULL,
134   DEVCB_NULL,
135   FLOPPY_STANDARD_5_25_DSHD,
136   LEGACY_FLOPPY_OPTIONS_NAME(ms0515),
137   NULL,
138   NULL
139};
140
141static SCREEN_UPDATE_IND16( ms0515 )
142{
143   ms0515_state *state = screen.machine().driver_data<ms0515_state>();
144   UINT8 code;
145   int y, x, b;
146
147   int addr = 0;
148   for (y = 0; y < 200; y++)
149   {
150      int horpos = 0;
151      for (x = 0; x < 40; x++)
152      {
153         code = state->m_video_ram[addr]; addr+=2;
154         for (b = 0; b < 8; b++)
155         {
156            // In lower res mode we will just double pixels
157            bitmap.pix16(y, horpos++) =  (code >> (7-b)) & 0x01;
158            bitmap.pix16(y, horpos++) =  (code >> (7-b)) & 0x01;
159         }
160      }
161   }
162   return 0;
163}
164
165static MACHINE_CONFIG_START( ms0515, ms0515_state )
166   /* basic machine hardware */
167   MCFG_CPU_ADD("maincpu",T11, XTAL_4MHz) // Need proper CPU here
168   MCFG_CPU_CONFIG(ms0515_data)
169   MCFG_CPU_PROGRAM_MAP(ms0515_mem)
170   
171   MCFG_FD1793_ADD( "vg93", ms0515_wd17xx_interface )
172   
173   MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, ms0515_floppy_interface)
174   
175   /* video hardware */
176   MCFG_SCREEN_ADD("screen", RASTER)
177   MCFG_SCREEN_REFRESH_RATE(50)
178   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
179   MCFG_SCREEN_SIZE(640, 200)
180   MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
181    MCFG_SCREEN_UPDATE_STATIC(ms0515)
182   
183   MCFG_PALETTE_LENGTH(2)
184   MCFG_PALETTE_INIT(black_and_white)
185
186   /* internal ram */
187   MCFG_RAM_ADD(RAM_TAG)
188   MCFG_RAM_DEFAULT_SIZE("128K")
189MACHINE_CONFIG_END
190
191/* ROM definition */
192ROM_START( ms0515 )
193    ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
194   ROM_LOAD16_BYTE( "7004l.bin", 0xc000, 0x2000, CRC(b08b3b73) SHA1(c12fd4672598cdf499656dcbb4118d787769d589))
195   ROM_LOAD16_BYTE( "7004h.bin", 0xc001, 0x2000, CRC(515dcf99) SHA1(edd34300fd642c89ce321321e1b12493cd16b7a5))
196ROM_END
197
198/* Driver */
199
200/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT             COMPANY   FULLNAME       FLAGS */
201COMP( ????, ms0515,  0,       0,    ms0515,    ms0515,  ms0515_state, 0,     "Elektronika",   "MS-0515",      GAME_NOT_WORKING | GAME_NO_SOUND)
202
src/mess/mess.mak
r15767r15768
19611961   $(MESS_DRIVERS)/mk14.o      \
19621962   $(MESS_DRIVERS)/mmd1.o      \
19631963   $(MESS_DRIVERS)/mod8.o      \
1964   $(MESS_DRIVERS)/ms0515.o   \
19641965   $(MESS_DRIVERS)/mstation.o   \
19651966   $(MESS_DRIVERS)/mycom.o      \
19661967   $(MESS_DRIVERS)/okean240.o   \

Previous 15994 Revisions Next


© 1998-2018 The MESS Team