Previous 15994 Revisions Next

r6038 Sunday 11th October, 2009 at 10:08:37 UTC by Barry Rodewald
[FMTOWNS] Added FM-Towns Car Marty, corrected system ROM bank disabling, derive Machine ID from serial ROM if one is present (Car Marty only currently).
[src/mess]messdriv.c
[src/mess/drivers]fmtowns.c

src/mess/messdriv.c
r6037r6038
13461346    DRIVER( fmtowns )   /* 1989 Fujitsu FM-Towns */
13471347    DRIVER( fmtownsa )
13481348    DRIVER( fmtmarty )  /* 1993 Fujitsu FM-Towns Marty */
1349    DRIVER( carmarty )  /* Fujitsu FM-Towns Car Marty */
13491350
13501351    /* Camputers */
13511352    DRIVER( lynx48k )
src/mess/drivers/fmtowns.c
r6037r6038
8484 *       IRQ12 - Printer port
8585 *       IRQ13 - Sound (FM?), Mouse
8686 *       IRQ15 - PCM
87 *
88 * Machine ID list (I/O port 0x31)
89 *
90   1(01h)   FM-TOWNS 1/2
91   2(02h)   FM-TOWNS 1F/2F/1H/2H
92   3(03h)   FM-TOWNS 10F/20F/40H/80H
93   4(04h)   FM-TOWNSII UX
94   5(05h)   FM-TOWNSII CX
95   6(06h)   FM-TOWNSII UG
96   7(07h)   FM-TOWNSII HR
97   8(08h)   FM-TOWNSII HG
98   9(09h)   FM-TOWNSII UR
99   11(0Bh)   FM-TOWNSII MA
100   12(0Ch)   FM-TOWNSII MX
101   13(0Dh)   FM-TOWNSII ME
102   14(0Eh)   TOWNS Application Card (PS/V Vision)
103   15(0Fh)   FM-TOWNSII MF/Fresh/Fresh・TV
104   16(10h)   FM-TOWNSII SN
105   17(11h)   FM-TOWNSII HA/HB/HC
106   19(13h)   FM-TOWNSII EA/Fresh・T/Fresh・ET/Fresh・FT
107   20(14h)   FM-TOWNSII Fresh・E/Fresh・ES/Fresh・FS
108   22(16h)   FMV-TOWNS H/Fresh・GS/Fresh・GT/H2
109   23(17h)   FMV-TOWNS H20
110   74(4Ah)   FM-TOWNS MARTY
87111 */
88112
89113#include "driver.h"
r6037r6038
129153emu_timer* towns_rtc_timer;
130154static UINT8 towns_timer_mask;
131155static UINT8 towns_crtc_mix;
156static UINT16 towns_machine_id;  // default is 0x0101
132157
133158
134159static void towns_update_video_banks(const address_space* space);
135160static PIC8259_SET_INT_LINE( towns_pic_irq );
136161
137static void towns_init_serial_rom(void)
162static void towns_init_serial_rom(running_machine* machine)
138163{
139164   // TODO: init serial ROM contents
140   int x,y;
141   char code[7] = "USTIJUF";
165   int x;
166   char code[8] = { 0x04,0x65,0x54,0xA4,0x95,0x45,0x35,0x5F };
167   UINT8* srom = memory_region(machine,"serial");
168   
142169   memset(towns_serial_rom,0,256/8);
170   
171   if(srom)
172   {
173      memcpy(towns_serial_rom,srom,32);
174      towns_machine_id = (towns_serial_rom[0x18] << 8) | towns_serial_rom[0x17];
175      popmessage("Machine ID in serial ROM: %04x",towns_machine_id);
176      return;
177   }
143178
144   for(x=72;x<=194;x++)  // set these bits to 1
145      towns_serial_rom[x/8] |= (1 << (x%8));
146
147   y=0;
148   for(x=195;x<=251;x++)
179   for(x=8;x<=21;x++)
180      towns_serial_rom[x] = 0xff;
181   
182   for(x=0;x<=7;x++)
149183   {
150      if(code[y/8] & (1 << (y % 8)))
151         towns_serial_rom[x/8] |= (1 << (x%8));
184      towns_serial_rom[x] = code[x];
152185   }
153186
154187   // add Machine ID
155   towns_serial_rom[7] = 0x01;
156   towns_serial_rom[8] = 0x01;
188   towns_machine_id = 0x0101;
189   towns_serial_rom[0x17] = 0x01;
190   towns_serial_rom[0x18] = 0x01;
157191
158192   // serial number?
159   towns_serial_rom[2] = 0x10;
160   towns_serial_rom[3] = 0x6e;
161   towns_serial_rom[4] = 0x54;
162   towns_serial_rom[5] = 0x32;
163   towns_serial_rom[6] = 0x10;
193   towns_serial_rom[29] = 0x10;
194   towns_serial_rom[28] = 0x6e;
195   towns_serial_rom[27] = 0x54;
196   towns_serial_rom[26] = 0x32;
197   towns_serial_rom[25] = 0x10;
164198}
165199
166200static void towns_init_rtc(void)
r6037r6038
209243         return nmi_mask & 0x01;
210244      case 0x10:
211245         logerror("SYS: (0x30) Machine ID read\n");
212         return 0x01;
246         return (towns_machine_id >> 8) & 0xff;
213247      case 0x11:
214248         logerror("SYS: (0x31) Machine ID read\n");
215         return 0x01;
249         return towns_machine_id & 0xff;
216250      case 0x12:
217251         /* Bit 0 = data, bit 6 = CLK, bit 7 = RESET, bit 5 is always 1? */
218252         ret = (towns_serial_rom[towns_srom_position/8] & (1 << (towns_srom_position%8))) ? 1 : 0;
r6037r6038
747781
748782   if(towns_mainmem_enable != 0)  // first MB is RAM
749783   {
784      ROM = memory_region(space->machine,"user");
785
750786      memory_set_bankptr(space->machine,1,mess_ram+0xc0000);
751787      memory_set_bankptr(space->machine,2,mess_ram+0xc8000);
752788      memory_set_bankptr(space->machine,3,mess_ram+0xc9000);
r6037r6038
756792      memory_set_bankptr(space->machine,6,mess_ram+0xcb000);
757793      memory_set_bankptr(space->machine,7,mess_ram+0xcb000);
758794      memory_set_bankptr(space->machine,8,mess_ram+0xcc000);
759      memory_set_bankptr(space->machine,11,mess_ram+0xf8000);
795      if(towns_system_port & 0x02)
796         memory_set_bankptr(space->machine,11,mess_ram+0xf8000);
797      else
798         memory_set_bankptr(space->machine,11,ROM+0x238000);
760799      memory_set_bankptr(space->machine,12,mess_ram+0xf8000);
761800      return;
762801   }
r6037r6038
10891128   towns_gfxvram = auto_alloc_array(machine,UINT8,0x200000);
10901129   towns_txtvram = auto_alloc_array(machine,UINT8,0x8000);
10911130   towns_serial_rom = auto_alloc_array(machine,UINT8,256/8);
1092   towns_init_serial_rom();
1131   towns_init_serial_rom(machine);
10931132   towns_init_rtc();
10941133   towns_rtc_timer = timer_alloc(machine,rtc_second,NULL);
10951134   
10961135   cpu_set_irq_callback(cputag_get_cpu(machine,"maincpu"), towns_irq_callback);
10971136}
10981137
1138static DRIVER_INIT( marty )
1139{
1140   DRIVER_INIT_CALL(towns);
1141   towns_machine_id = 0x034a;
1142}
1143
10991144static MACHINE_RESET( towns )
11001145{
11011146   ftimer = 0x00;
r6037r6038
12981343   ROM_CONTINUE(0x200000,0x40000)
12991344ROM_END
13001345
1346ROM_START( carmarty )
1347  ROM_REGION32_LE( 0x480000, "user", 0)
1348   ROM_LOAD("fmt_dos.rom",  0x000000, 0x080000, CRC(2bc2af96) SHA1(99cd51c5677288ad8ef711b4ac25d981fd586884) )
1349   ROM_LOAD("fmt_dic.rom",  0x100000, 0x080000, CRC(82d1daa2) SHA1(7564020dba71deee27184824b84dbbbb7c72aa4e) )
1350   ROM_LOAD("fmt_fnt.rom",  0x180000, 0x040000, CRC(dd6fd544) SHA1(a216482ea3162f348fcf77fea78e0b2e4288091a) )
1351   ROM_LOAD("fmt_sys.rom",  0x200000, 0x040000, CRC(e1ff7ce1) SHA1(e6c359177e4e9fb5bbb7989c6bbf6e95c091fd88) )
1352   ROM_LOAD("mar_ex0.rom",  0x280000, 0x080000, CRC(e248bfbd) SHA1(0ce89952a7901dd4d256939a6bc8597f87e51ae7) )
1353   ROM_LOAD("mar_ex1.rom",  0x300000, 0x080000, CRC(ab2e94f0) SHA1(4b3378c772302622f8e1139ed0caa7da1ab3c780) )
1354   ROM_LOAD("mar_ex2.rom",  0x380000, 0x080000, CRC(ce150ec7) SHA1(1cd8c39f3b940e03f9fe999ebcf7fd693f843d04) )
1355   ROM_LOAD("mar_ex3.rom",  0x400000, 0x080000, CRC(582fc7fc) SHA1(a77d8014e41e9ff0f321e156c0fe1a45a0c5e58e) )
1356  ROM_REGION( 0x20, "serial", 0)
1357    ROM_LOAD("mytowns.rom",  0x00, 0x20, CRC(bc58eba6) SHA1(483087d823c3952cc29bd827e5ef36d12c57ad49) )
1358ROM_END
1359
13011360/* Driver */
13021361
1303/*    YEAR  NAME    PARENT  COMPAT  MACHINE     INPUT    INIT    CONFIG COMPANY      FULLNAME            FLAGS */
1304COMP( 1989, fmtowns,  0,    0,       towns,       towns,     towns,      towns,     "Fujitsu",   "FM-Towns",       GAME_NOT_WORKING)
1305COMP( 1989, fmtownsa, fmtowns, 0,    towns,       towns,     towns,      towns,     "Fujitsu",   "FM-Towns (alternate)", GAME_NOT_WORKING)
1306CONS( 1993, fmtmarty, 0,    0,       towns,       towns,     towns,      towns,     "Fujitsu",   "FM-Towns Marty",    GAME_NOT_WORKING)
1362/*    YEAR  NAME    PARENT  COMPAT     MACHINE     INPUT    INIT    CONFIG COMPANY      FULLNAME            FLAGS */
1363COMP( 1989, fmtowns,  0,       0,       towns,       towns,     towns,      towns,     "Fujitsu",   "FM-Towns",       GAME_NOT_WORKING)
1364COMP( 1989, fmtownsa, fmtowns,   0,       towns,       towns,     towns,      towns,     "Fujitsu",   "FM-Towns (alternate)", GAME_NOT_WORKING)
1365CONS( 1993, fmtmarty, 0,       0,       towns,       towns,     marty,      towns,     "Fujitsu",   "FM-Towns Marty",    GAME_NOT_WORKING)
1366CONS( 1994, carmarty, fmtmarty,   0,       towns,       towns,     towns,      towns,     "Fujitsu",   "FM-Towns Car Marty",    GAME_NOT_WORKING)
13071367

Previous 15994 Revisions Next


© 1998-2018 The MESS Team