src/mess/drivers/fmtowns.c
| r6037 | r6038 | |
| 84 | 84 | * IRQ12 - Printer port |
| 85 | 85 | * IRQ13 - Sound (FM?), Mouse |
| 86 | 86 | * 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 |
| 87 | 111 | */ |
| 88 | 112 | |
| 89 | 113 | #include "driver.h" |
| r6037 | r6038 | |
| 129 | 153 | emu_timer* towns_rtc_timer; |
| 130 | 154 | static UINT8 towns_timer_mask; |
| 131 | 155 | static UINT8 towns_crtc_mix; |
| 156 | static UINT16 towns_machine_id; // default is 0x0101 |
| 132 | 157 | |
| 133 | 158 | |
| 134 | 159 | static void towns_update_video_banks(const address_space* space); |
| 135 | 160 | static PIC8259_SET_INT_LINE( towns_pic_irq ); |
| 136 | 161 | |
| 137 | | static void towns_init_serial_rom(void) |
| 162 | static void towns_init_serial_rom(running_machine* machine) |
| 138 | 163 | { |
| 139 | 164 | // 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 | |
| 142 | 169 | 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 | } |
| 143 | 178 | |
| 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++) |
| 149 | 183 | { |
| 150 | | if(code[y/8] & (1 << (y % 8))) |
| 151 | | towns_serial_rom[x/8] |= (1 << (x%8)); |
| 184 | towns_serial_rom[x] = code[x]; |
| 152 | 185 | } |
| 153 | 186 | |
| 154 | 187 | // 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; |
| 157 | 191 | |
| 158 | 192 | // 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; |
| 164 | 198 | } |
| 165 | 199 | |
| 166 | 200 | static void towns_init_rtc(void) |
| r6037 | r6038 | |
| 209 | 243 | return nmi_mask & 0x01; |
| 210 | 244 | case 0x10: |
| 211 | 245 | logerror("SYS: (0x30) Machine ID read\n"); |
| 212 | | return 0x01; |
| 246 | return (towns_machine_id >> 8) & 0xff; |
| 213 | 247 | case 0x11: |
| 214 | 248 | logerror("SYS: (0x31) Machine ID read\n"); |
| 215 | | return 0x01; |
| 249 | return towns_machine_id & 0xff; |
| 216 | 250 | case 0x12: |
| 217 | 251 | /* Bit 0 = data, bit 6 = CLK, bit 7 = RESET, bit 5 is always 1? */ |
| 218 | 252 | ret = (towns_serial_rom[towns_srom_position/8] & (1 << (towns_srom_position%8))) ? 1 : 0; |
| r6037 | r6038 | |
| 747 | 781 | |
| 748 | 782 | if(towns_mainmem_enable != 0) // first MB is RAM |
| 749 | 783 | { |
| 784 | ROM = memory_region(space->machine,"user"); |
| 785 | |
| 750 | 786 | memory_set_bankptr(space->machine,1,mess_ram+0xc0000); |
| 751 | 787 | memory_set_bankptr(space->machine,2,mess_ram+0xc8000); |
| 752 | 788 | memory_set_bankptr(space->machine,3,mess_ram+0xc9000); |
| r6037 | r6038 | |
| 756 | 792 | memory_set_bankptr(space->machine,6,mess_ram+0xcb000); |
| 757 | 793 | memory_set_bankptr(space->machine,7,mess_ram+0xcb000); |
| 758 | 794 | 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); |
| 760 | 799 | memory_set_bankptr(space->machine,12,mess_ram+0xf8000); |
| 761 | 800 | return; |
| 762 | 801 | } |
| r6037 | r6038 | |
| 1089 | 1128 | towns_gfxvram = auto_alloc_array(machine,UINT8,0x200000); |
| 1090 | 1129 | towns_txtvram = auto_alloc_array(machine,UINT8,0x8000); |
| 1091 | 1130 | towns_serial_rom = auto_alloc_array(machine,UINT8,256/8); |
| 1092 | | towns_init_serial_rom(); |
| 1131 | towns_init_serial_rom(machine); |
| 1093 | 1132 | towns_init_rtc(); |
| 1094 | 1133 | towns_rtc_timer = timer_alloc(machine,rtc_second,NULL); |
| 1095 | 1134 | |
| 1096 | 1135 | cpu_set_irq_callback(cputag_get_cpu(machine,"maincpu"), towns_irq_callback); |
| 1097 | 1136 | } |
| 1098 | 1137 | |
| 1138 | static DRIVER_INIT( marty ) |
| 1139 | { |
| 1140 | DRIVER_INIT_CALL(towns); |
| 1141 | towns_machine_id = 0x034a; |
| 1142 | } |
| 1143 | |
| 1099 | 1144 | static MACHINE_RESET( towns ) |
| 1100 | 1145 | { |
| 1101 | 1146 | ftimer = 0x00; |
| r6037 | r6038 | |
| 1298 | 1343 | ROM_CONTINUE(0x200000,0x40000) |
| 1299 | 1344 | ROM_END |
| 1300 | 1345 | |
| 1346 | ROM_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) ) |
| 1358 | ROM_END |
| 1359 | |
| 1301 | 1360 | /* Driver */ |
| 1302 | 1361 | |
| 1303 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT CONFIG COMPANY FULLNAME FLAGS */ |
| 1304 | | COMP( 1989, fmtowns, 0, 0, towns, towns, towns, towns, "Fujitsu", "FM-Towns", GAME_NOT_WORKING) |
| 1305 | | COMP( 1989, fmtownsa, fmtowns, 0, towns, towns, towns, towns, "Fujitsu", "FM-Towns (alternate)", GAME_NOT_WORKING) |
| 1306 | | CONS( 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 */ |
| 1363 | COMP( 1989, fmtowns, 0, 0, towns, towns, towns, towns, "Fujitsu", "FM-Towns", GAME_NOT_WORKING) |
| 1364 | COMP( 1989, fmtownsa, fmtowns, 0, towns, towns, towns, towns, "Fujitsu", "FM-Towns (alternate)", GAME_NOT_WORKING) |
| 1365 | CONS( 1993, fmtmarty, 0, 0, towns, towns, marty, towns, "Fujitsu", "FM-Towns Marty", GAME_NOT_WORKING) |
| 1366 | CONS( 1994, carmarty, fmtmarty, 0, towns, towns, towns, towns, "Fujitsu", "FM-Towns Car Marty", GAME_NOT_WORKING) |
| 1307 | 1367 | |