Previous 199869 Revisions Next

r18971 Thursday 15th November, 2012 at 12:25:21 UTC by Miodrag Milanović
initial merge of fba neocd code into ng_aes by Haze (no whatsnew)
[hash]neocd.xml*
[src/mess/drivers]ng_aes.c

trunk/src/mess/drivers/ng_aes.c
r18970r18971
3535#include "cpu/z80/z80.h"
3636#include "sound/2610intf.h"
3737#include "imagedev/cartslot.h"
38#include "imagedev/chd_cd.h"
39#include "sound/cdda.h"
3840
3941extern const char layout_neogeo[];
4042
r18970r18971
4547
4648// CD-ROM / DMA control registers
4749struct neocd_ctrl_t
50
4851{
4952   UINT8 area_sel;
5053   UINT8 pcm_bank_sel;
r18970r18971
5659   UINT16 dma_mode[10];
5760};
5861
62#define CD_FRAMES_MINUTE (60 * 75)
63#define CD_FRAMES_SECOND (     75)
64#define CD_FRAMES_PREGAP ( 2 * 75)
65
66#define SEK_IRQSTATUS_NONE (0x0000)
67#define SEK_IRQSTATUS_AUTO (0x2000)
68#define SEK_IRQSTATUS_ACK  (0x1000)
69
70static INT32 nNeoCDIRQVector = 0;
71static INT32 nNeoCDIRQVectorAck = 0;
72
73/* Stubs for various functions called by the FBA code, replace with MAME specifics later */
74#define MAX_SLOT      (8)
75UINT8 *NeoSpriteRAM, *NeoTextRAM;
76UINT8* NeoSpriteROM[MAX_SLOT];
77UINT8* NeoTextROM[MAX_SLOT];
78UINT8* YM2610ADPCMAROM[MAX_SLOT];
79UINT8* NeoZ80ROMActive;
80UINT32 nNeoActiveSlot;
81UINT8 NeoSystem;
82INT32 nNeoCDZ80ProgWriteWordCancelHack = 0;
83
84enum CDEmuStatusValue { idle = 0, reading, playing, paused, seeking, fastforward, fastreverse };
85CDEmuStatusValue CDEmuStatus;
86
87static inline CDEmuStatusValue CDEmuGetStatus()
88{
89   return CDEmuStatus;
90}
91
92static UINT8* CDEmuReadQChannel()
93{
94   return NULL;
95}
96
97static UINT8* CDEmuReadTOC(INT32 track)
98{
99   return NULL;
100}
101
102static void CDEmuStartRead()
103{
104   CDEmuStatus = seeking;
105}
106
107static void CDEmuPause()
108{
109   CDEmuStatus = paused;
110}
111
112static INT32 CDEmuStop()
113{
114   return 1;
115}
116
117static INT32 CDEmuPlay(UINT8 M, UINT8 S, UINT8 F)
118{
119   return 1;
120}
121
122static INT32 CDEmuLoadSector(INT32 LBA, char* pBuffer)
123{
124   return 0;
125}
126
127static void SekWriteWord(UINT32 a, UINT16 d)
128{
129
130}
131
132static void SekWriteByte(UINT32 a, UINT8 d)
133{
134
135}
136
137static UINT32 SekReadByte(UINT32 a)
138{
139   return 0;
140}
141
142
143static UINT32 SekReadWord(UINT32 a)
144{
145   return 0;
146}
147
148
149static INT32 SekIdle(INT32 nCycles)
150{
151   return nCycles;
152}
153
154static void NeoSetSpriteSlot(INT32 nSlot)
155{
156
157}
158
159static void NeoSetTextSlot(INT32 nSlot)
160{
161
162}
163
164
165static void neogeoSynchroniseZ80(INT32 nExtraCycles)
166{
167
168}
169
170static void ZetSetBUSREQLine(INT32 nStatus)
171{
172
173}
174
175
176static void NeoDecodeSpritesCD(UINT8* pData, UINT8* pDest, INT32 nSize)
177{
178
179}
180
181static void NeoUpdateSprites(INT32 nOffset, INT32 nSize)
182{
183
184}
185
186static void NeoUpdateText(INT32 nOffset, const INT32 nSize, UINT8* pData, UINT8* pDest)
187{
188
189}
190
191static void MapVectorTable(bool bMapBoardROM)
192{
193   /*
194   if (!bMapBoardROM && Neo68KROMActive) {
195      SekMapMemory(Neo68KFix[nNeoActiveSlot], 0x000000, 0x0003FF, SM_ROM);
196   } else {
197      SekMapMemory(NeoVectorActive, 0x000000, 0x0003FF, SM_ROM);
198   }
199   */
200}
201
202static void SekSetIRQLine(const INT32 line, const INT32 status)
203{
204
205}
206
207
59208class ng_aes_state : public neogeo_state
60209{
61210public:
62211   ng_aes_state(const machine_config &mconfig, device_type type, const char *tag)
63      : neogeo_state(mconfig, type, tag) { }
212      : neogeo_state(mconfig, type, tag)
213   {
214      nff0002 = 0;
215      nIRQAcknowledge = 0;
216      for (int i=0;i<10;i++)
217         NeoCDCommsCommandFIFO[i] = 0;
218      for (int i=0;i<10;i++)
219         NeoCDCommsStatusFIFO[i] = 0;
220      NeoCDCommsWordCount = 0;
221      NeoCDAssyStatus = 0;
222      NeoCDTrack = 0;
223      NeoCDSectorMin = 0;
224      NeoCDSectorSec = 0;
225      NeoCDSectorFrm = 0;
226      NeoCDSectorLBA = 0;
227      for (int i=0;i<2352;i++)
228         NeoCDSectorData[i] = 0;
229      bNeoCDLoadSector = false;
230      NeoCDDMAAddress1 = 0;
231      NeoCDDMAAddress2 = 0;
232      NeoCDDMAValue1   = 0;
233      NeoCDDMAValue2   = 0;
234      NeoCDDMACount    = 0;
235      NeoCDDMAMode = 0;
236      nLC8951Register = 0;
237   }
64238
65239   UINT8 *m_memcard_data;
66   neocd_ctrl_t m_neocd_ctrl;
67240   DECLARE_WRITE8_MEMBER(audio_cpu_clear_nmi_w);
68241   DECLARE_WRITE16_MEMBER(io_control_w);
69242   DECLARE_WRITE16_MEMBER(save_ram_w);
r18970r18971
96269   TIMER_CALLBACK_MEMBER(display_position_interrupt_callback);
97270   TIMER_CALLBACK_MEMBER(display_position_vblank_callback);
98271   TIMER_CALLBACK_MEMBER(vblank_interrupt_callback);
272
273   // neoCD
274   TIMER_DEVICE_CALLBACK_MEMBER( neocd_access_timer_callback );
275   neocd_ctrl_t m_neocd_ctrl;
276   INT32 nIRQAcknowledge;
277   UINT16 nff0002;
278   UINT16 nff0016;
279
280
281   INT32 nLC8951Register;
282   INT32 LC8951RegistersR[16];
283   INT32 LC8951RegistersW[16];
284
285   INT32 nActiveTransferArea;
286   INT32 nSpriteTransferBank;
287   INT32 nADPCMTransferBank;
288
289   UINT8 nTransferWriteEnable;
290
291   bool NeoCDOBJBankUpdate[4];
292
293   bool bNeoCDCommsClock, bNeoCDCommsSend;
294
295   UINT8 NeoCDCommsCommandFIFO[10];
296   UINT8 NeoCDCommsStatusFIFO[10];
297
298   INT32 NeoCDCommsWordCount;
299
300   INT32 NeoCDAssyStatus;
301
302   INT32 NeoCDTrack;
303
304   INT32 NeoCDSectorMin;
305   INT32 NeoCDSectorSec;
306   INT32 NeoCDSectorFrm;
307   INT32 NeoCDSectorLBA;
308
309   char NeoCDSectorData[2352];
310
311   bool bNeoCDLoadSector;
312
313   INT32 NeoCDDMAAddress1;
314   INT32 NeoCDDMAAddress2;
315   INT32 NeoCDDMAValue1;
316   INT32 NeoCDDMAValue2;
317   INT32 NeoCDDMACount;
318
319   INT32 NeoCDDMAMode;
320
321
322
323   void NeoCDIRQUpdate(UINT8 byteValue);
324   void NeoCDReadSector();
325   void NeoCDCommsControl(UINT8 clock, UINT8 send);
326   void NeoCDProcessCommand();
327   void LC8951UpdateHeader();
328   char* LC8915InitTransfer();
329   void LC8915EndTransfer();
330   void LC8951Reset();
331   void NeoCDLBAToMSF(const INT32 LBA);
332   void NeoCDCommsWrite(UINT8 data);
333   UINT8 NeoCDCommsread();
334   void NeoCDCommsReset();
335   void NeoCDDoDMA();
336   UINT8 neogeoReadByteCDROM(UINT32 sekAddress);
337   UINT16 neogeoReadWordCDROM(UINT32 sekAddress);
338   void neogeoWriteByteCDROM(UINT32 sekAddress, UINT8 byteValue);
339   void neogeoWriteWordCDROM(UINT32 sekAddress, UINT16 wordValue);
340   UINT8 neogeoReadByteTransfer(UINT32 sekAddress);
341   UINT16 neogeoReadWordTransfer(UINT32 sekAddress);
342   void neogeoWriteByteTransfer(UINT32 sekAddress, UINT8 byteValue);
343   void neogeoWriteWordTransfer(UINT32 sekAddress, UINT16 wordValue);
344   void NeoIRQUpdate(UINT16 wordValue);
345
99346};
100347
101348
r18970r18971
284531}
285532
286533
287#if 0
288static CUSTOM_INPUT( multiplexed_controller_r )
289{
290   int port = (FPTR)param;
291
292   static const char *const cntrl[2][2] =
293      {
294         { "IN0-0", "IN0-1" }, { "IN1-0", "IN1-1" }
295      };
296
297   return input_port_read_safe(field.machine(), cntrl[port][controller_select & 0x01], 0x00);
298}
299
300
301static CUSTOM_INPUT( mahjong_controller_r )
302{
303   UINT32 ret;
304
305/*
306cpu #0 (PC=00C18B9A): unmapped memory word write to 00380000 = 0012 & 00FF
307cpu #0 (PC=00C18BB6): unmapped memory word write to 00380000 = 001B & 00FF
308cpu #0 (PC=00C18D54): unmapped memory word write to 00380000 = 0024 & 00FF
309cpu #0 (PC=00C18D6C): unmapped memory word write to 00380000 = 0009 & 00FF
310cpu #0 (PC=00C18C40): unmapped memory word write to 00380000 = 0000 & 00FF
311*/
312   switch (controller_select)
313   {
314   default:
315   case 0x00: ret = 0x0000; break; /* nothing? */
316   case 0x09: ret = field.machine().root_device().ioport("MAHJONG1")->read(); break;
317   case 0x12: ret = field.machine().root_device().ioport("MAHJONG2")->read(); break;
318   case 0x1b: ret = field.machine().root_device().ioport("MAHJONG3")->read(); break; /* player 1 normal inputs? */
319   case 0x24: ret = field.machine().root_device().ioport("MAHJONG4")->read(); break;
320   }
321
322   return ret;
323}
324
325#endif
326
327534WRITE16_MEMBER(ng_aes_state::io_control_w)
328535{
329536   switch (offset)
r18970r18971
344551}
345552
346553
347
348
349/*************************************
350 *
351 *  uPD4990A calendar chip
352 *
353 *************************************/
354#if 0
355static void calendar_init(running_machine &machine)
356{
357   /* set the celander IC to 'right now' */
358   system_time systime;
359   system_tm time;
360
361   machine.base_datetime(&systime);
362   time = systime.local_time;
363
364   pd4990a.seconds = ((time.second / 10) << 4) + (time.second % 10);
365   pd4990a.minutes = ((time.minute / 10) << 4) + (time.minute % 10);
366   pd4990a.hours = ((time.hour / 10) <<4 ) + (time.hour % 10);
367   pd4990a.days = ((time.mday / 10) << 4) + (time.mday % 10);
368   pd4990a.month = time.month + 1;
369   pd4990a.year = ((((time.year - 1900) % 100) / 10) << 4) + ((time.year - 1900) % 10);
370   pd4990a.weekday = time.weekday;
371}
372
373
374static void calendar_clock(void)
375{
376//  pd4990a_addretrace();
377}
378#endif
379
380554static CUSTOM_INPUT( get_calendar_status )
381555{
382556   neogeo_state *state = field.machine().driver_data<neogeo_state>();
r18970r18971
384558}
385559
386560
387
388561/*************************************
389562 *
390 *  NVRAM (Save RAM)
391 *
392 *************************************/
393#if 0
394static NVRAM_HANDLER( neogeo )
395{
396   if (read_or_write)
397      /* save the SRAM settings */
398      mame_fwrite(file, save_ram, 0x2000);
399   else
400   {
401      /* load the SRAM settings */
402      if (file)
403         mame_fread(file, save_ram, 0x2000);
404      else
405         memset(save_ram, 0, 0x10000);
406   }
407}
408
409
410static void set_save_ram_unlock( running_machine &machine, UINT8 data )
411{
412   neogeo_state *state = machine.driver_data<neogeo_state>();
413   state->m_save_ram_unlocked = data;
414}
415
416
417WRITE16_MEMBER(ng_aes_state::save_ram_w)
418{
419
420   if (m_save_ram_unlocked)
421      COMBINE_DATA(&save_ram[offset]);
422}
423#endif
424
425
426/*************************************
427 *
428563 *  Memory card
429564 *
430565 *************************************/
r18970r18971
8841019
8851020   switch(offset)
8861021   {
1022
1023   case 0x16/2:
1024      return nff0016;
1025
8871026   case 0x64/2: // source address, high word
8881027      return (m_neocd_ctrl.addr_source >> 16) & 0xffff;
8891028   case 0x66/2: // source address, low word
r18970r18971
9241063   return 0;
9251064}
9261065
1066
1067void ng_aes_state::NeoCDReadSector()
1068{
1069   if ((nff0002 & 0x0500)) {
1070      if (NeoCDAssyStatus == 1 && bNeoCDLoadSector) {
1071
1072//         if (LC8951RegistersW[10] & 0x80) {
1073            NeoCDSectorLBA++;
1074            NeoCDSectorLBA = CDEmuLoadSector(NeoCDSectorLBA, NeoCDSectorData + 4) - 1;
1075//         }
1076
1077         if (LC8951RegistersW[10] & 0x80) {
1078            LC8951UpdateHeader();
1079   
1080            LC8951RegistersR[12] = 0x80;                              // STAT0
1081            LC8951RegistersR[13] = 0;                                 // STAT1
1082            LC8951RegistersR[14] = 0x10;                              // STAT2
1083            LC8951RegistersR[15] = 0;                                 // STAT3
1084   
1085//            bprintf(PRINT_IMPORTANT, _T("    Sector %08i (%02i:%02i:%02i) read\n"), NeoCDSectorLBA, NeoCDSectorMin, NeoCDSectorSec, NeoCDSectorFrm);
1086
1087// CDZ protection hack? (error correction on the CDC should correct this?)
1088#if 1
1089            if (NeoCDSectorData[4 + 64] == 'g' && !strncmp(NeoCDSectorData + 4, "Copyright by SNK", 16)) {
1090//               printf(PRINT_ERROR, _T("    simulated CDZ protection error\n"));
1091//               bprintf(PRINT_ERROR, _T("    %.70hs\n"), NeoCDSectorData + 4);
1092   
1093               NeoCDSectorData[4 + 64] = 'f';
1094   
1095               // LC8951RegistersR[12] = 0x00;                           // STAT0
1096            }
1097#endif
1098
1099            nIRQAcknowledge &= ~0x20;
1100            NeoCDIRQUpdate(0);
1101   
1102            LC8951RegistersR[1] &= ~0x20;
1103
1104//            bprintf(PRINT_IMPORTANT, _T("    DECI interrupt triggered\n"));
1105         }
1106      }
1107
1108      bNeoCDLoadSector = true;
1109//      bNeoCDLoadSector = false;
1110   }
1111}
1112
1113
1114
1115UINT8 ng_aes_state::neogeoReadByteTransfer(UINT32 sekAddress)
1116{
1117//   if ((sekAddress & 0x0FFFFF) < 16)
1118//      printf(PRINT_NORMAL, _T("  - NGCD port 0x%06X read (byte, PC: 0x%06X)\n"), sekAddress, SekGetPC(-1));
1119   
1120   sekAddress ^= 1;
1121
1122   switch (nActiveTransferArea) {
1123      case 0:                     // Sprites
1124         return NeoSpriteRAM[nSpriteTransferBank + (sekAddress & 0x0FFFFF)];
1125         break;
1126      case 1:                     // ADPCM
1127         return YM2610ADPCMAROM[nNeoActiveSlot][nADPCMTransferBank + ((sekAddress & 0x0FFFFF) >> 1)];
1128         break;
1129      case 4:                     // Z80
1130         if ((sekAddress & 0xfffff) >= 0x20000) break;
1131         return NeoZ80ROMActive[(sekAddress & 0x1FFFF) >> 1];
1132         break;
1133      case 5:                     // Text
1134         return NeoTextRAM[(sekAddress & 0x3FFFF) >> 1];
1135         break;
1136   }
1137   
1138   return ~0;
1139}
1140
1141UINT16 ng_aes_state::neogeoReadWordTransfer(UINT32 sekAddress)
1142{
1143//   if ((sekAddress & 0x0FFFFF) < 16)
1144//      bprintf(PRINT_NORMAL, _T("  - Transfer: 0x%06X read (word, PC: 0x%06X)\n"), sekAddress, SekGetPC(-1));
1145
1146   switch (nActiveTransferArea) {
1147      case 0:                     // Sprites
1148         return *((UINT16*)(NeoSpriteRAM + nSpriteTransferBank + (sekAddress & 0xFFFFF)));
1149         break;
1150      case 1:                     // ADPCM
1151         return 0xFF00 | YM2610ADPCMAROM[nNeoActiveSlot][nADPCMTransferBank + ((sekAddress & 0x0FFFFF) >> 1)];
1152         break;
1153      case 4:                     // Z80
1154         if ((sekAddress & 0xfffff) >= 0x20000) break;
1155         return 0xFF00 | NeoZ80ROMActive[(sekAddress & 0x1FFFF) >> 1];
1156         break;
1157      case 5:                     // Text
1158         return 0xFF00 | NeoTextRAM[(sekAddress & 0x3FFFF) >> 1];
1159         break;
1160   }
1161   
1162   return ~0;
1163}
1164
1165void ng_aes_state::neogeoWriteByteTransfer(UINT32 sekAddress, UINT8 byteValue)
1166{
1167//   if ((sekAddress & 0x0FFFFF) < 16)
1168//      bprintf(PRINT_NORMAL, _T("  - Transfer: 0x%06X -> 0x%02X (PC: 0x%06X)\n"), sekAddress, byteValue, SekGetPC(-1));
1169
1170   if (!nTransferWriteEnable) {
1171//      return;
1172   }
1173
1174   sekAddress ^= 1;
1175
1176   switch (nActiveTransferArea) {
1177      case 0:                     // Sprites
1178         NeoSpriteRAM[nSpriteTransferBank + (sekAddress & 0x0FFFFF)] = byteValue;
1179         NeoCDOBJBankUpdate[nSpriteTransferBank >> 20] = true;
1180         break;
1181      case 1:                     // ADPCM
1182         YM2610ADPCMAROM[nNeoActiveSlot][nADPCMTransferBank + ((sekAddress & 0x0FFFFF) >> 1)] = byteValue;
1183         break;
1184      case 4:                     // Z80
1185         if ((sekAddress & 0xfffff) >= 0x20000) break;
1186         NeoZ80ROMActive[(sekAddress & 0x1FFFF) >> 1] = byteValue;
1187         break;
1188      case 5:                     // Text
1189         NeoTextRAM[(sekAddress & 0x3FFFF) >> 1] = byteValue;
1190//         NeoUpdateTextOne((sekAddress & 0x3FFFF) >> 1, byteValue);
1191         break;
1192   }
1193}
1194
1195void ng_aes_state::neogeoWriteWordTransfer(UINT32 sekAddress, UINT16 wordValue)
1196{
1197//   if ((sekAddress & 0x0FFFFF) < 16)
1198//      bprintf(PRINT_NORMAL, _T("  - Transfer: 0x%06X -> 0x%04X (PC: 0x%06X)\n"), sekAddress, wordValue, SekGetPC(-1));
1199
1200   if (!nTransferWriteEnable) {
1201//      return;
1202   }
1203
1204   switch (nActiveTransferArea) {
1205      case 0:                     // Sprites
1206         *((UINT16*)(NeoSpriteRAM + nSpriteTransferBank + (sekAddress & 0xFFFFF))) = wordValue;
1207         NeoCDOBJBankUpdate[nSpriteTransferBank >> 20] = true;
1208         break;
1209      case 1:                     // ADPCM
1210         YM2610ADPCMAROM[nNeoActiveSlot][nADPCMTransferBank + ((sekAddress & 0x0FFFFF) >> 1)] = wordValue;
1211         break;
1212      case 4:                     // Z80
1213         // The games that write here, seem to write crap, however the BIOS writes the Z80 code here, and not in the byte area
1214         // So basically, we are allowing writes to here, until the BIOS has finished writing the program, then not allowing any further writes
1215         if (((sekAddress & 0xfffff) >= 0x20000) || nNeoCDZ80ProgWriteWordCancelHack) break;
1216         if (sekAddress == 0xe1fdf2) nNeoCDZ80ProgWriteWordCancelHack = 1;
1217         NeoZ80ROMActive[(sekAddress & 0x1FFFF) >> 1] = wordValue;
1218         break;
1219      case 5:                     // Text
1220         NeoTextRAM[(sekAddress & 0x3FFFF) >> 1] = wordValue;
1221//         NeoUpdateTextOne((sekAddress & 0x3FFFF) >> 1, wordValue);
1222         break;
1223   }
1224}
1225
1226
1227UINT8 ng_aes_state::neogeoReadByteCDROM(UINT32 sekAddress)
1228{
1229//   bprintf(PRINT_NORMAL, _T("  - CDROM: 0x%06X read (byte, PC: 0x%06X)\n"), sekAddress, SekGetPC(-1));
1230   
1231   switch (sekAddress & 0xFFFF) {
1232
1233      case 0x0017:
1234         return nff0016;
1235
1236      // LC8951 registers
1237      case 0x0101:
1238//         bprintf(PRINT_NORMAL, _T("  - LC8951 register read (PC: 0x%06X)\n"), SekGetPC(-1));
1239         return nLC8951Register;
1240      case 0x0103: {
1241//         bprintf(PRINT_NORMAL, _T("  - LC8951 register 0x%X read (PC: 0x%06X)\n"), nLC8951Register, SekGetPC(-1));
1242
1243         INT32 reg = LC8951RegistersR[nLC8951Register];
1244
1245         switch (nLC8951Register) {
1246            case 0x03:                                          // DBCH
1247               LC8951RegistersR[3] &=  0x0F;
1248               LC8951RegistersR[3] |=  (LC8951RegistersR[1] & 0x40) ? 0x00 : 0xF0;
1249               break;
1250            case 0x0D:                                          // STAT3
1251               LC8951RegistersR[1] |= 0x20;                        // reset DECI
1252               // bprintf(PRINT_ERROR, _T("  - DECI (PC: 0x%06X)\n"), SekGetPC(-1));
1253               break;
1254         }
1255
1256         nLC8951Register = (nLC8951Register + 1) & 0x0F;
1257         return reg;
1258      }
1259
1260      // CD mechanism communication
1261      case 0x0161:
1262         return NeoCDCommsread();
1263
1264      default: {
1265//         bprintf(PRINT_NORMAL, _T("  - NGCD port 0x%06X read (byte, PC: 0x%06X)\n"), sekAddress, SekGetPC(-1));
1266      }
1267   }
1268
1269   return ~0;
1270}
1271
1272UINT16 ng_aes_state::neogeoReadWordCDROM(UINT32 sekAddress)
1273{
1274//   bprintf(PRINT_NORMAL, _T("  - CDROM: 0x%06X read (word, PC: 0x%06X)\n"), sekAddress, SekGetPC(-1));
1275
1276#if 1
1277   switch (sekAddress & 0xFFFF) {
1278      case 0x011C:
1279         return ~((0x10 | (NeoSystem & 3)) << 8);
1280   }
1281#endif
1282
1283//   bprintf(PRINT_NORMAL, _T("  - NGCD port 0x%06X read (word, PC: 0x%06X)\n"), sekAddress, SekGetPC(-1));
1284
1285   return ~0;
1286}
1287
1288void ng_aes_state::neogeoWriteByteCDROM(UINT32 sekAddress, UINT8 byteValue)
1289{
1290//   bprintf(PRINT_NORMAL, _T("  - Neo Geo CD: 0x%06X -> 0x%02X (PC: 0x%06X)\n"), sekAddress, byteValue, SekGetPC(-1));
1291
1292   switch (sekAddress & 0xFFFF) {
1293      case 0x000F:
1294         NeoCDIRQUpdate(byteValue);
1295         break;
1296
1297      case 0x0017:
1298         nff0016 = byteValue;
1299         break;
1300
1301      case 0x0061:
1302         if (byteValue & 0x40) {
1303            NeoCDDoDMA();
1304         }
1305         break;
1306
1307      // LC8951 registers
1308      case 0x0101:
1309         nLC8951Register = byteValue & 0x0F;
1310//         bprintf(PRINT_NORMAL, _T("  - LC8951 register -> 0x%02X (PC: 0x%06X)\n"), nLC8951Register, SekGetPC(-1));
1311         break;
1312      case 0x0103:
1313//         bprintf(PRINT_NORMAL, _T("  - LC8951 register 0x%X -> 0x%02X (PC: 0x%06X)\n"), nLC8951Register, byteValue, SekGetPC(-1));
1314         switch (nLC8951Register) {
1315            case 3:                                             // DBCH
1316               LC8951RegistersW[ 3]  = byteValue & 0x0F;
1317               break;
1318            case 6:                                             // DTTRG
1319               LC8951RegistersW[ 6]  = ~0x00;
1320               LC8951RegistersR[ 1] &= ~0x08;
1321               break;
1322            case 7:                                             // DTACK
1323               LC8951RegistersW[ 7]  = ~0x00;
1324               LC8951RegistersR[ 1] &= ~0x40;
1325               break;
1326//            case 10:
1327//               LC8951RegistersW[nLC8951Register] = byteValue;
1328//               bprintf(PRINT_NORMAL, _T("  - CTRL0 -> %02X (PC: 0x%06X)\n"), LC8951RegistersW[nLC8951Register], byteValue, SekGetPC(-1));
1329//               break;
1330            case 11:
1331               LC8951RegistersW[11]  = byteValue;                     // CTRL1
1332               LC8951UpdateHeader();
1333               break;
1334            case 15:
1335               LC8951Reset();
1336               break;
1337            default:
1338               LC8951RegistersW[nLC8951Register] = byteValue;
1339         }
1340         nLC8951Register = (nLC8951Register + 1) & 0x0F;
1341         break;
1342
1343      case 0x0105:
1344//         bprintf(PRINT_NORMAL, _T("  - NGCD 0xE00000 area -> 0x%02X (PC: 0x%06X)\n"), byteValue, SekGetPC(-1));
1345         nActiveTransferArea = byteValue;
1346         break;
1347
1348      case 0x0121:
1349//         bprintf(PRINT_NORMAL, _T("  - NGCD OBJ BUSREQ -> 1 (PC: 0x%06X)\n"), SekGetPC(-1));
1350         NeoSetSpriteSlot(1);
1351         memset(NeoCDOBJBankUpdate, 0, sizeof(NeoCDOBJBankUpdate));
1352         break;
1353      case 0x0123:
1354//         bprintf(PRINT_NORMAL, _T("  - NGCD PCM BUSREQ -> 1 (PC: 0x%06X) %x\n"), SekGetPC(-1), byteValue);
1355         break;
1356      case 0x0127:
1357//         bprintf(PRINT_NORMAL, _T("  - NGCD Z80 BUSREQ -> 1 (PC: 0x%06X)\n"), SekGetPC(-1));
1358         neogeoSynchroniseZ80(0);
1359         ZetSetBUSREQLine(1);
1360         break;
1361      case 0x0129:
1362//         bprintf(PRINT_NORMAL, _T("  - NGCD FIX BUSREQ -> 1 (PC: 0x%06X)\n"), SekGetPC(-1));
1363         NeoSetTextSlot(1);
1364         break;
1365
1366      case 0x0141:
1367//         bprintf(PRINT_NORMAL, _T("  - NGCD OBJ BUSREQ -> 0 (PC: 0x%06X)\n"), SekGetPC(-1));
1368         NeoSetSpriteSlot(0);
1369         for (INT32 i = 0; i < 4; i++) {
1370            if (NeoCDOBJBankUpdate[i]) {
1371               NeoDecodeSpritesCD(NeoSpriteRAM + (i << 20), NeoSpriteROM[0] + (i << 20), 0x100000);
1372               NeoUpdateSprites((i << 20), 0x100000);
1373            }
1374         }
1375
1376         break;
1377      case 0x0143:
1378//         bprintf(PRINT_NORMAL, _T("  - NGCD PCM BUSREQ -> 0 (PC: 0x%06X)\n"), SekGetPC(-1));
1379         break;
1380      case 0x0147:
1381//         bprintf(PRINT_NORMAL, _T("  - NGCD Z80 BUSREQ -> 0 (PC: 0x%06X)\n"), SekGetPC(-1));
1382         neogeoSynchroniseZ80(0);
1383         ZetSetBUSREQLine(0);
1384         break;
1385      case 0x0149:
1386//         bprintf(PRINT_NORMAL, _T("  - NGCD FIX BUSREQ -> 0 (PC: 0x%06X)\n"), SekGetPC(-1));
1387         NeoSetTextSlot(0);
1388         NeoUpdateText(0, 0x020000, NeoTextRAM, NeoTextROM[0]);
1389         break;
1390
1391      // CD mechanism communication
1392      case 0x0163:
1393         NeoCDCommsWrite(byteValue);
1394         break;
1395      case 0x0165:
1396         NeoCDCommsControl(byteValue & 1, byteValue & 2);
1397         break;
1398
1399      case 0x016D:
1400//         bprintf(PRINT_ERROR, _T("  - NGCD port 0x%06X -> 0x%02X (PC: 0x%06X)\n"), sekAddress, byteValue, SekGetPC(-1));
1401
1402         MapVectorTable(!(byteValue == 0xFF));
1403
1404//extern INT32 bRunPause;
1405//bRunPause = 1;
1406         break;
1407
1408      case 0x016F:
1409//         bprintf(PRINT_IMPORTANT, _T("  - NGCD 0xE00000 area write access %s (0x%02X, PC: 0x%06X)\n"), byteValue ? _T("enabled") : _T("disabled"), byteValue, SekGetPC(-1));
1410
1411         nTransferWriteEnable = byteValue;
1412         break;
1413
1414      case 0x0181: {
1415         static UINT8 clara = 0;
1416         if (!byteValue && clara) {
1417//            bprintf(PRINT_IMPORTANT, _T("  - NGCD CD communication reset (PC: 0x%06X)\n"), SekGetPC(-1));
1418//            NeoCDCommsReset();
1419         }
1420         clara = byteValue;         
1421         break;
1422      }
1423      case 0x0183: {
1424         static UINT8 clara = 0;
1425         if (!byteValue && clara) {
1426//            bprintf(PRINT_IMPORTANT, _T("  - NGCD Z80 reset (PC: 0x%06X)\n"), SekGetPC(-1));
1427            //ZetReset();
1428         }
1429         clara = byteValue;         
1430         break;
1431      }
1432      case 0x01A1:
1433         nSpriteTransferBank = (byteValue & 3) << 20;
1434         break;
1435      case 0x01A3:
1436         nADPCMTransferBank  = (byteValue & 1) << 19;
1437         break;
1438
1439      default: {
1440//         bprintf(PRINT_NORMAL, _T("  - NGCD port 0x%06X -> 0x%02X (PC: 0x%06X)\n"), sekAddress, byteValue, SekGetPC(-1));
1441      }
1442   }
1443}
1444
1445void ng_aes_state::neogeoWriteWordCDROM(UINT32 sekAddress, UINT16 wordValue)
1446{
1447//   bprintf(PRINT_NORMAL, _T("  - NGCD port 0x%06X -> 0x%04X (PC: 0x%06X)\n"), sekAddress, wordValue, SekGetPC(-1));
1448
1449   switch (sekAddress & 0xFFFE) {
1450      case 0x0002:
1451//         bprintf(PRINT_IMPORTANT, _T("  - NGCD Interrupt mask -> 0x%04X (PC: 0x%06X)\n"), wordValue, SekGetPC(-1));
1452         nff0002 = wordValue;         
1453
1454// LC8951RegistersR[1] |= 0x20;
1455
1456         //if (nff0002 & 0x0500)
1457         //   nNeoCDCyclesIRQPeriod = (INT32)(12000000.0 * nBurnCPUSpeedAdjust / (256.0 * 75.0));
1458         //else
1459         //   nNeoCDCyclesIRQPeriod = (INT32)(12000000.0 * nBurnCPUSpeedAdjust / (256.0 *  75.0));
1460
1461         break;
1462
1463      case 0x000E:
1464         NeoCDIRQUpdate(wordValue);
1465         break;
1466
1467      // DMA controller
1468
1469      case 0x0064:
1470         NeoCDDMAAddress1 &= 0x0000FFFF;
1471         NeoCDDMAAddress1 |= wordValue << 16;
1472         break;
1473      case 0x0066:
1474         NeoCDDMAAddress1 &= 0xFFFF0000;
1475         NeoCDDMAAddress1 |= wordValue;
1476         break;
1477      case 0x0068:
1478         NeoCDDMAAddress2 &= 0x0000FFFF;
1479         NeoCDDMAAddress2 |= wordValue << 16;
1480         break;
1481      case 0x006A:
1482         NeoCDDMAAddress2 &= 0xFFFF0000;
1483         NeoCDDMAAddress2 |= wordValue;
1484         break;
1485      case 0x006C:
1486         NeoCDDMAValue1 = wordValue;
1487         break;
1488      case 0x006E:
1489         NeoCDDMAValue2 = wordValue;
1490         break;
1491      case 0x0070:
1492         NeoCDDMACount &= 0x0000FFFF;
1493         NeoCDDMACount |= wordValue << 16;
1494         break;
1495      case 0x0072:
1496         NeoCDDMACount &= 0xFFFF0000;
1497         NeoCDDMACount |= wordValue;
1498         break;
1499
1500      case 0x007E:
1501         NeoCDDMAMode = wordValue;
1502//         bprintf(PRINT_NORMAL, _T("  - DMA controller 0x%2X -> 0x%04X (PC: 0x%06X)\n"), sekAddress & 0xFF, wordValue, SekGetPC(-1));
1503         break;
1504
1505      // upload DMA controller program
1506
1507      case 0x0080:
1508      case 0x0082:
1509      case 0x0084:
1510      case 0x0086:
1511      case 0x0088:
1512      case 0x008A:
1513      case 0x008C:
1514      case 0x008E:
1515//         bprintf(PRINT_NORMAL, _T("  - DMA controller program[%02i] -> 0x%04X (PC: 0x%06X)\n"), sekAddress & 0x0F, wordValue, SekGetPC(-1));
1516         break;
1517
1518      default: {
1519//         bprintf(PRINT_NORMAL, _T("  - NGCD port 0x%06X -> 0x%04X (PC: 0x%06X)\n"), sekAddress, wordValue, SekGetPC(-1));
1520      }
1521   }
1522   
1523}
1524
1525
1526void ng_aes_state::NeoCDLBAToMSF(const INT32 LBA)
1527{
1528   NeoCDSectorMin = (LBA + CD_FRAMES_PREGAP)                    / CD_FRAMES_MINUTE;
1529   NeoCDSectorSec = (LBA + CD_FRAMES_PREGAP) % CD_FRAMES_MINUTE / CD_FRAMES_SECOND;
1530   NeoCDSectorFrm = (LBA + CD_FRAMES_PREGAP) % CD_FRAMES_SECOND;
1531}
1532
1533void ng_aes_state::NeoCDCommsWrite(UINT8 data)
1534{
1535   if (NeoCDCommsWordCount >= 0 && NeoCDCommsWordCount < 10) {
1536      NeoCDCommsCommandFIFO[NeoCDCommsWordCount] = data & 0x0F;
1537   }
1538}
1539
1540UINT8 ng_aes_state::NeoCDCommsread()
1541{
1542   UINT8 ret = 0;
1543
1544   if (NeoCDCommsWordCount >= 0 && NeoCDCommsWordCount < 10) {
1545      ret = NeoCDCommsStatusFIFO[NeoCDCommsWordCount] & 0x0F;
1546   }
1547
1548   if (bNeoCDCommsClock) {
1549      ret |= 0x10;
1550   }
1551
1552   return ret;
1553}
1554
1555void ng_aes_state::NeoCDCommsReset()
1556{
1557   bNeoCDCommsSend  = false;
1558   bNeoCDCommsClock = true;
1559
1560   memset(NeoCDCommsCommandFIFO, 0, sizeof(NeoCDCommsCommandFIFO));
1561   memset(NeoCDCommsStatusFIFO,  0, sizeof(NeoCDCommsStatusFIFO));
1562
1563   NeoCDCommsWordCount = 0;
1564
1565   NeoCDAssyStatus = 9;
1566
1567   memset(NeoCDSectorData, 0, sizeof(NeoCDSectorData));
1568
1569   bNeoCDLoadSector = false;
1570
1571   nff0016 = 0;
1572}
1573
1574
1575void ng_aes_state::NeoCDDoDMA()
1576{
1577
1578   // The LC8953 chip has a programmable DMA controller, which is not properly emulated.
1579   // Since the software only uses it in a limited way, we can apply a simple heuristic
1580   // to determnine the requested operation.
1581
1582   // Additionally, we don't know how many cycles DMA operations take.
1583   // Here, only bus access is used to get a rough approximation --
1584   // each read/write takes a single cycle, setup and everything else is ignored.
1585
1586//   bprintf(PRINT_IMPORTANT, _T("  - DMA controller transfer started (PC: 0x%06X)\n"), SekGetPC(-1));
1587
1588   switch (NeoCDDMAMode) {
1589
1590      case 0xCFFD: {
1591//         bprintf(PRINT_NORMAL, _T("    adr : 0x%08X - 0x%08X <- address, skip odd bytes\n"), NeoCDDMAAddress1, NeoCDDMAAddress1 + NeoCDDMACount * 8);
1592
1593         //  - DMA controller 0x7E -> 0xCFFD (PC: 0xC07CE2)
1594         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC07CE8)
1595         //  - DMA controller program[02] -> 0xE8DA (PC: 0xC07CEE)
1596         //  - DMA controller program[04] -> 0x92DA (PC: 0xC07CF4)
1597         //  - DMA controller program[06] -> 0x92DB (PC: 0xC07CFA)
1598         //  - DMA controller program[08] -> 0x96DB (PC: 0xC07D00)
1599         //  - DMA controller program[10] -> 0x96F6 (PC: 0xC07D06)
1600         //  - DMA controller program[12] -> 0x2E02 (PC: 0xC07D0C)
1601         //  - DMA controller program[14] -> 0xFDFF (PC: 0xC07D12)
1602
1603         SekIdle(NeoCDDMACount * 4);
1604
1605         while (NeoCDDMACount--) {
1606            SekWriteWord(NeoCDDMAAddress1 + 0, NeoCDDMAAddress1 >> 24);
1607            SekWriteWord(NeoCDDMAAddress1 + 2, NeoCDDMAAddress1 >> 16);
1608            SekWriteWord(NeoCDDMAAddress1 + 4, NeoCDDMAAddress1 >>  8);
1609            SekWriteWord(NeoCDDMAAddress1 + 6, NeoCDDMAAddress1 >>  0);
1610            NeoCDDMAAddress1 += 8;
1611         }
1612
1613         break;
1614      }
1615
1616      case 0xE2DD: {
1617//         bprintf(PRINT_NORMAL, _T("    copy: 0x%08X - 0x%08X <- 0x%08X - 0x%08X, skip odd bytes\n"), NeoCDDMAAddress2, NeoCDDMAAddress2 + NeoCDDMACount * 2, NeoCDDMAAddress1, NeoCDDMAAddress1 + NeoCDDMACount * 4);
1618
1619         //  - DMA controller 0x7E -> 0xE2DD (PC: 0xC0A190)
1620         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC0A192)
1621         //  - DMA controller program[02] -> 0x82BE (PC: 0xC0A194)
1622         //  - DMA controller program[04] -> 0x93DA (PC: 0xC0A196)
1623         //  - DMA controller program[06] -> 0xBE93 (PC: 0xC0A198)
1624         //  - DMA controller program[08] -> 0xDABE (PC: 0xC0A19A)
1625         //  - DMA controller program[10] -> 0xF62D (PC: 0xC0A19C)
1626         //  - DMA controller program[12] -> 0x02FD (PC: 0xC0A19E)
1627         //  - DMA controller program[14] -> 0xFFFF (PC: 0xC0A1A0)
1628
1629         SekIdle(NeoCDDMACount * 1);
1630
1631         while (NeoCDDMACount--) {
1632            SekWriteWord(NeoCDDMAAddress2 + 0, SekReadByte(NeoCDDMAAddress1 + 0));
1633            SekWriteWord(NeoCDDMAAddress2 + 2, SekReadByte(NeoCDDMAAddress1 + 1));
1634            NeoCDDMAAddress1 += 2;
1635            NeoCDDMAAddress2 += 4;
1636         }
1637
1638         break;
1639      }
1640
1641      case 0xFC2D: {
1642//         bprintf(PRINT_NORMAL, _T("    copy: 0x%08X - 0x%08X <- LC8951 external buffer, skip odd bytes\n"), NeoCDDMAAddress1, NeoCDDMAAddress1 + NeoCDDMACount * 4);
1643
1644         //  - DMA controller 0x7E -> 0xFC2D (PC: 0xC0A190)
1645         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC0A192)
1646         //  - DMA controller program[02] -> 0x8492 (PC: 0xC0A194)
1647         //  - DMA controller program[04] -> 0xDA92 (PC: 0xC0A196)
1648         //  - DMA controller program[06] -> 0xDAF6 (PC: 0xC0A198)
1649         //  - DMA controller program[08] -> 0x2A02 (PC: 0xC0A19A)
1650         //  - DMA controller program[10] -> 0xFDFF (PC: 0xC0A19C)
1651         //  - DMA controller program[12] -> 0x48E7 (PC: 0xC0A19E)
1652         //  - DMA controller program[14] -> 0xFFFE (PC: 0xC0A1A0)
1653
1654         char* data = LC8915InitTransfer();
1655         if (data == NULL) {
1656            break;
1657         }
1658
1659         SekIdle(NeoCDDMACount * 4);
1660
1661         while (NeoCDDMACount--) {
1662            SekWriteByte(NeoCDDMAAddress1 + 0, data[0]);
1663            SekWriteByte(NeoCDDMAAddress1 + 2, data[1]);
1664            NeoCDDMAAddress1 += 4;
1665            data += 2;
1666         }
1667
1668         LC8915EndTransfer();
1669
1670         break;
1671      }
1672
1673      case 0xFE3D:
1674
1675         //  - DMA controller 0x7E -> 0xFE3D (PC: 0xC0A190)
1676         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC0A192)
1677         //  - DMA controller program[02] -> 0x82BF (PC: 0xC0A194)
1678         //  - DMA controller program[04] -> 0x93BF (PC: 0xC0A196)
1679         //  - DMA controller program[06] -> 0xF629 (PC: 0xC0A198)
1680         //  - DMA controller program[08] -> 0x02FD (PC: 0xC0A19A)
1681         //  - DMA controller program[10] -> 0xFFFF (PC: 0xC0A19C)
1682         //  - DMA controller program[12] -> 0xF17D (PC: 0xC0A19E)
1683         //  - DMA controller program[14] -> 0xFCF5 (PC: 0xC0A1A0)
1684
1685      case 0xFE6D: {
1686//         bprintf(PRINT_NORMAL, _T("    copy: 0x%08X - 0x%08X <- 0x%08X - 0x%08X\n"), NeoCDDMAAddress2, NeoCDDMAAddress2 + NeoCDDMACount * 2, NeoCDDMAAddress1, NeoCDDMAAddress1 + NeoCDDMACount * 2);
1687
1688         //  - DMA controller 0x7E -> 0xFE6D (PC: 0xC0FD7A)
1689         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC0FD7C)
1690         //  - DMA controller program[02] -> 0x82BF (PC: 0xC0FD7E)
1691         //  - DMA controller program[04] -> 0xF693 (PC: 0xC0FD80)
1692         //  - DMA controller program[06] -> 0xBF29 (PC: 0xC0FD82)
1693         //  - DMA controller program[08] -> 0x02FD (PC: 0xC0FD84)
1694         //  - DMA controller program[10] -> 0xFFFF (PC: 0xC0FD86)
1695         //  - DMA controller program[12] -> 0xC515 (PC: 0xC0FD88)
1696         //  - DMA controller program[14] -> 0xFCF5 (PC: 0xC0FD8A)
1697
1698         SekIdle(NeoCDDMACount * 1);
1699
1700         while (NeoCDDMACount--) {
1701            SekWriteWord(NeoCDDMAAddress2, SekReadWord(NeoCDDMAAddress1));
1702            NeoCDDMAAddress1 += 2;
1703            NeoCDDMAAddress2 += 2;
1704         }
1705
1706if (NeoCDDMAAddress2 == 0x0800)  {
1707// MapVectorTable(false);
1708//   bprintf(PRINT_ERROR, _T("    RAM vectors mapped (PC = 0x%08X\n"), SekGetPC(0));
1709//   extern INT32 bRunPause;
1710//   bRunPause = 1;
1711}
1712         break;
1713      }
1714
1715      case 0xFEF5: {
1716//         bprintf(PRINT_NORMAL, _T("    adr : 0x%08X - 0x%08X <- address\n"), NeoCDDMAAddress1, NeoCDDMAAddress1 + NeoCDDMACount * 4);
1717
1718         //  - DMA controller 0x7E -> 0xFEF5 (PC: 0xC07CE2)
1719         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC07CE8)
1720         //  - DMA controller program[02] -> 0x92E8 (PC: 0xC07CEE)
1721         //  - DMA controller program[04] -> 0xBE96 (PC: 0xC07CF4)
1722         //  - DMA controller program[06] -> 0xF629 (PC: 0xC07CFA)
1723         //  - DMA controller program[08] -> 0x02FD (PC: 0xC07D00)
1724         //  - DMA controller program[10] -> 0xFFFF (PC: 0xC07D06)
1725         //  - DMA controller program[12] -> 0xFC3D (PC: 0xC07D0C)
1726         //  - DMA controller program[14] -> 0xFCF5 (PC: 0xC07D12)
1727
1728         SekIdle(NeoCDDMACount * 2);
1729
1730         while (NeoCDDMACount--) {
1731            SekWriteWord(NeoCDDMAAddress1 + 0, NeoCDDMAAddress1 >> 16);
1732            SekWriteWord(NeoCDDMAAddress1 + 2, NeoCDDMAAddress1 >>  0);
1733            NeoCDDMAAddress1 += 4;
1734         }
1735
1736         break;
1737      }
1738
1739      case 0xFFC5: {
1740//         bprintf(PRINT_NORMAL, _T("    copy: 0x%08X - 0x%08X <- LC8951 external buffer\n"), NeoCDDMAAddress1, NeoCDDMAAddress1 + NeoCDDMACount * 2);
1741
1742         //  - DMA controller 0x7E -> 0xFFC5 (PC: 0xC0A190)
1743         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC0A192)
1744         //  - DMA controller program[02] -> 0xA6F6 (PC: 0xC0A194)
1745         //  - DMA controller program[04] -> 0x2602 (PC: 0xC0A196)
1746         //  - DMA controller program[06] -> 0xFDFF (PC: 0xC0A198)
1747         //  - DMA controller program[08] -> 0xFC2D (PC: 0xC0A19A)
1748         //  - DMA controller program[10] -> 0xFCF5 (PC: 0xC0A19C)
1749         //  - DMA controller program[12] -> 0x8492 (PC: 0xC0A19E)
1750         //  - DMA controller program[14] -> 0xDA92 (PC: 0xC0A1A0)
1751
1752         char* data = LC8915InitTransfer();
1753         if (data == NULL) {
1754            break;
1755         }
1756
1757         SekIdle(NeoCDDMACount * 4);
1758
1759         while (NeoCDDMACount--) {
1760            SekWriteByte(NeoCDDMAAddress1 + 0, data[0]);
1761            SekWriteByte(NeoCDDMAAddress1 + 1, data[1]);
1762            NeoCDDMAAddress1 += 2;
1763            data += 2;
1764         }
1765
1766         LC8915EndTransfer();
1767
1768         break;
1769      }
1770
1771      case 0xFFCD:
1772
1773         //  - DMA controller 0x7E -> 0xFFCD (PC: 0xC0A190)
1774         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC0A192)
1775         //  - DMA controller program[02] -> 0x92F6 (PC: 0xC0A194)
1776         //  - DMA controller program[04] -> 0x2602 (PC: 0xC0A196)
1777         //  - DMA controller program[06] -> 0xFDFF (PC: 0xC0A198)
1778         //  - DMA controller program[08] -> 0x7006 (PC: 0xC0A19A)
1779         //  - DMA controller program[10] -> 0x6100 (PC: 0xC0A19C)
1780         //  - DMA controller program[12] -> 0x2412 (PC: 0xC0A19E)
1781         //  - DMA controller program[14] -> 0x13FC (PC: 0xC0A1A0)
1782
1783      case 0xFFDD: {
1784//         bprintf(PRINT_NORMAL, _T("    Fill: 0x%08X - 0x%08X <- 0x%04X\n"), NeoCDDMAAddress1, NeoCDDMAAddress1 + NeoCDDMACount * 2, NeoCDDMAValue1);
1785
1786         //  - DMA controller 0x7E -> 0xFFDD (PC: 0xC07CE2)
1787         //  - DMA controller program[00] -> 0xFCF5 (PC: 0xC07CE8)
1788         //  - DMA controller program[02] -> 0x92F6 (PC: 0xC07CEE)
1789         //  - DMA controller program[04] -> 0x2602 (PC: 0xC07CF4)
1790         //  - DMA controller program[06] -> 0xFDFF (PC: 0xC07CFA)
1791         //  - DMA controller program[08] -> 0xFFFF (PC: 0xC07D00)
1792         //  - DMA controller program[10] -> 0xFCF5 (PC: 0xC07D06)
1793         //  - DMA controller program[12] -> 0x8AF0 (PC: 0xC07D0C)
1794         //  - DMA controller program[14] -> 0x1609 (PC: 0xC07D12)
1795
1796         SekIdle(NeoCDDMACount * 1);
1797
1798         while (NeoCDDMACount--) {
1799            SekWriteWord(NeoCDDMAAddress1, NeoCDDMAValue1);
1800            NeoCDDMAAddress1 += 2;
1801         }
1802
1803         break;
1804      }
1805      default: {
1806         //bprintf(PRINT_ERROR, _T("    Unknown transfer type 0x%04X (PC: 0x%06X)\n"), NeoCDDMAMode, SekGetPC(-1));
1807         //bprintf(PRINT_NORMAL, _T("    ??? : 0x%08X  0x%08X 0x%04X 0x%04X 0x%08X\n"), NeoCDDMAAddress1, NeoCDDMAAddress2, NeoCDDMAValue1, NeoCDDMAValue2, NeoCDDMACount);
1808
1809//extern INT32 bRunPause;
1810//bRunPause = 1;
1811
1812      }
1813   }
1814}
1815
1816
1817void ng_aes_state::NeoCDProcessCommand()
1818{
1819   memset(NeoCDCommsStatusFIFO,  0, sizeof(NeoCDCommsStatusFIFO));
1820
1821   if (NeoCDCommsCommandFIFO[0]) {
1822      NeoCDCommsStatusFIFO[1] = 15;
1823   }
1824
1825   switch (NeoCDCommsCommandFIFO[0]) {
1826      case 0:
1827         break;
1828      case 1:
1829//                        //bprintf(PRINT_ERROR, _T("    CD comms received command %i\n"), NeoCDCommsCommandFIFO[0]);
1830         CDEmuStop();
1831
1832         NeoCDAssyStatus = 0x0E;
1833         bNeoCDLoadSector = false;
1834         break;
1835      case 2:
1836//                        //bprintf(PRINT_ERROR, _T("    CD comms received command %i\n"), NeoCDCommsCommandFIFO[0]);
1837         NeoCDCommsStatusFIFO[1] = NeoCDCommsCommandFIFO[3];
1838          switch (NeoCDCommsCommandFIFO[3]) {
1839
1840            case 0: {
1841               UINT8* ChannelData = CDEmuReadQChannel();
1842
1843               NeoCDCommsStatusFIFO[2] = ChannelData[1] / 10;
1844               NeoCDCommsStatusFIFO[3] = ChannelData[1] % 10;
1845
1846               NeoCDCommsStatusFIFO[4] = ChannelData[2] / 10;
1847               NeoCDCommsStatusFIFO[5] = ChannelData[2] % 10;
1848
1849               NeoCDCommsStatusFIFO[6] = ChannelData[3] / 10;
1850               NeoCDCommsStatusFIFO[7] = ChannelData[3] % 10;
1851               
1852               NeoCDCommsStatusFIFO[8] = ChannelData[7];
1853
1854// //bprintf(PRINT_ERROR, _T("    %02i %02i:%02i:%02i %02i:%02i:%02i %02i\n"), ChannelData[0], ChannelData[1], ChannelData[2], ChannelData[3], ChannelData[4], ChannelData[5], ChannelData[6], ChannelData[7]);
1855
1856               break;
1857            }
1858            case 1: {
1859               UINT8* ChannelData = CDEmuReadQChannel();
1860
1861               NeoCDCommsStatusFIFO[2] = ChannelData[4] / 10;
1862               NeoCDCommsStatusFIFO[3] = ChannelData[4] % 10;
1863
1864               NeoCDCommsStatusFIFO[4] = ChannelData[5] / 10;
1865               NeoCDCommsStatusFIFO[5] = ChannelData[5] % 10;
1866
1867               NeoCDCommsStatusFIFO[6] = ChannelData[6] / 10;
1868               NeoCDCommsStatusFIFO[7] = ChannelData[6] % 10;
1869
1870               NeoCDCommsStatusFIFO[8] = ChannelData[7];
1871
1872               break;
1873            }
1874            case 2: {
1875
1876               UINT8* ChannelData = CDEmuReadQChannel();
1877
1878               NeoCDCommsStatusFIFO[2] = ChannelData[0] / 10;
1879               NeoCDCommsStatusFIFO[3] = ChannelData[0] % 10;
1880
1881
1882               NeoCDCommsStatusFIFO[8] = ChannelData[7];
1883
1884               break;
1885            }
1886            case 3: {
1887               UINT8* TOCEntry = CDEmuReadTOC(-2);
1888
1889               NeoCDCommsStatusFIFO[2] = TOCEntry[0] / 10;
1890               NeoCDCommsStatusFIFO[3] = TOCEntry[0] % 10;
1891
1892               NeoCDCommsStatusFIFO[4] = TOCEntry[1] / 10;
1893               NeoCDCommsStatusFIFO[5] = TOCEntry[1] % 10;
1894
1895               NeoCDCommsStatusFIFO[6] = TOCEntry[2] / 10;
1896               NeoCDCommsStatusFIFO[7] = TOCEntry[2] % 10;
1897
1898               break;
1899            }
1900            case 4: {
1901               UINT8* TOCEntry = CDEmuReadTOC(-1);
1902
1903               NeoCDCommsStatusFIFO[2] = TOCEntry[0] / 10;
1904               NeoCDCommsStatusFIFO[3] = TOCEntry[0] % 10;
1905
1906               NeoCDCommsStatusFIFO[4] = TOCEntry[1] / 10;
1907               NeoCDCommsStatusFIFO[5] = TOCEntry[1] % 10;
1908
1909               break;
1910            }
1911            case 5:   {
1912               NeoCDTrack = NeoCDCommsCommandFIFO[4] * 10 + NeoCDCommsCommandFIFO[5];
1913
1914               UINT8* TOCEntry = CDEmuReadTOC(NeoCDTrack);
1915
1916               NeoCDCommsStatusFIFO[2] = TOCEntry[0] / 10;
1917               NeoCDCommsStatusFIFO[3] = TOCEntry[0] % 10;
1918
1919               NeoCDCommsStatusFIFO[4] = TOCEntry[1] / 10;
1920               NeoCDCommsStatusFIFO[5] = TOCEntry[1] % 10;
1921
1922               NeoCDCommsStatusFIFO[6] = TOCEntry[2] / 10;
1923               NeoCDCommsStatusFIFO[7] = TOCEntry[2] % 10;
1924
1925               // bit 3 of the 1st minutes digit indicates a data track
1926               if (TOCEntry[3] & 4) {
1927                  NeoCDCommsStatusFIFO[6] |= 8;
1928               }
1929
1930               NeoCDCommsStatusFIFO[8] = NeoCDTrack % 10;
1931
1932               break;
1933            }
1934
1935            case 6: {
1936
1937               UINT8* ChannelData = CDEmuReadQChannel();
1938
1939               NeoCDCommsStatusFIFO[8] = ChannelData[7];
1940
1941               break;
1942            }
1943
1944            case 7: {
1945
1946               // must be 02, 0E, 0F, or 05
1947               NeoCDCommsStatusFIFO[2] = 0;
1948               NeoCDCommsStatusFIFO[3] = 5;
1949
1950               NeoCDCommsStatusFIFO[4] = 0;
1951               NeoCDCommsStatusFIFO[5] = 0;
1952
1953               NeoCDCommsStatusFIFO[6] = 0;
1954               NeoCDCommsStatusFIFO[7] = 0;
1955               break;
1956            }
1957          }
1958         break;
1959
1960      case 3: {
1961
1962         if (LC8951RegistersW[10] & 4) {
1963
1964            if (CDEmuGetStatus() == playing) {
1965               //bprintf(PRINT_ERROR, _T("*** Switching CD mode to CD-ROM while in audio mode!(PC: 0x%06X)\n"), SekGetPC(-1));
1966            }
1967
1968            NeoCDSectorLBA  = NeoCDCommsCommandFIFO[2] * (10 * CD_FRAMES_MINUTE);
1969            NeoCDSectorLBA += NeoCDCommsCommandFIFO[3] * ( 1 * CD_FRAMES_MINUTE);
1970            NeoCDSectorLBA += NeoCDCommsCommandFIFO[4] * (10 * CD_FRAMES_SECOND);
1971            NeoCDSectorLBA += NeoCDCommsCommandFIFO[5] * ( 1 * CD_FRAMES_SECOND);
1972            NeoCDSectorLBA += NeoCDCommsCommandFIFO[6] * (10                   );
1973            NeoCDSectorLBA += NeoCDCommsCommandFIFO[7] * ( 1                   );
1974
1975            NeoCDSectorLBA -= CD_FRAMES_PREGAP;
1976
1977            CDEmuStartRead();
1978//            LC8951RegistersR[1] |= 0x20;
1979         } else {
1980
1981            if (CDEmuGetStatus() == reading) {
1982               //bprintf(PRINT_ERROR, _T("*** Switching CD mode to audio while in CD-ROM mode!(PC: 0x%06X)\n"), SekGetPC(-1));
1983            }
1984
1985            CDEmuPlay((NeoCDCommsCommandFIFO[2] * 10) + NeoCDCommsCommandFIFO[3], (NeoCDCommsCommandFIFO[4] * 10) + NeoCDCommsCommandFIFO[5], (NeoCDCommsCommandFIFO[6] * 10) + NeoCDCommsCommandFIFO[7]);
1986         }
1987
1988         NeoCDAssyStatus = 1;
1989         bNeoCDLoadSector = true;
1990
1991         break;
1992      }
1993      case 4:
1994//         //bprintf(PRINT_ERROR, _T("    CD comms received command %i\n"), NeoCDCommsCommandFIFO[0]);
1995         CDEmuPause();
1996         break;
1997      case 5:
1998//         //bprintf(PRINT_ERROR, _T("    CD comms received command %i\n"), NeoCDCommsCommandFIFO[0]);
1999//         NeoCDAssyStatus = 9;
2000//         bNeoCDLoadSector = false;
2001         break;
2002
2003      case 6:
2004//         //bprintf(PRINT_ERROR, _T("    CD comms received command %i\n"), NeoCDCommsCommandFIFO[0]);
2005         NeoCDAssyStatus = 4;
2006         bNeoCDLoadSector = false;
2007         break;
2008      case 7:
2009//         //bprintf(PRINT_ERROR, _T("    CD comms received command %i\n"), NeoCDCommsCommandFIFO[0]);
2010         NeoCDAssyStatus = 1;
2011         bNeoCDLoadSector = true;
2012         break;
2013
2014      case 8:
2015      case 9:
2016      case 10:
2017      case 11:
2018      case 12:
2019      case 13:
2020      case 14:
2021      case 15:
2022//         //bprintf(PRINT_ERROR, _T("    CD comms received command %i\n"), NeoCDCommsCommandFIFO[0]);
2023         NeoCDAssyStatus = 9;
2024         bNeoCDLoadSector = false;
2025         break;
2026   }
2027}
2028
2029void ng_aes_state::NeoCDCommsControl(UINT8 clock, UINT8 send)
2030{
2031   if (clock && !bNeoCDCommsClock) {
2032      NeoCDCommsWordCount++;
2033      if (NeoCDCommsWordCount >= 10) {
2034         NeoCDCommsWordCount = 0;
2035
2036         if (send) {
2037
2038            // command receive complete
2039
2040            if (NeoCDCommsCommandFIFO[0]) {
2041               INT32  sum = 0;
2042
2043//               bprintf(PRINT_NORMAL, _T("  - CD mechanism command receive completed : 0x"));
2044               for (INT32 i = 0; i < 9; i++) {
2045//                  bprintf(PRINT_NORMAL, _T("%X"), NeoCDCommsCommandFIFO[i]);
2046                  sum += NeoCDCommsCommandFIFO[i];
2047               }
2048               sum = ~(sum + 5) & 0x0F;
2049//               bprintf(PRINT_NORMAL, _T(" (CS 0x%X, %s)\n"), NeoCDCommsCommandFIFO[9], (sum == NeoCDCommsCommandFIFO[9]) ? _T("OK") : _T("NG"));
2050               if (sum == NeoCDCommsCommandFIFO[9]) {
2051
2052                  NeoCDProcessCommand();
2053
2054                  if (NeoCDCommsCommandFIFO[0]) {
2055
2056                     if (NeoCDAssyStatus == 1) {
2057                        if (CDEmuGetStatus() == idle) {
2058                           NeoCDAssyStatus = 0x0E;
2059                           bNeoCDLoadSector = false;
2060                        }
2061                     }
2062
2063                     NeoCDCommsStatusFIFO[0] = NeoCDAssyStatus;
2064
2065                     // compute checksum
2066
2067                     sum = 0;
2068
2069                     for (INT32 i = 0; i < 9; i++) {
2070                        sum += NeoCDCommsStatusFIFO[i];
2071                     }
2072                     NeoCDCommsStatusFIFO[9] = ~(sum + 5) & 0x0F;
2073                  }
2074               }
2075            }
2076         } else {
2077
2078            // status send complete
2079
2080//            if (NeoCDCommsStatusFIFO[0] || NeoCDCommsStatusFIFO[1]) {
2081//               INT32  sum = 0;
2082//
2083//               bprintf(PRINT_NORMAL, _T("  - CD mechanism status send completed : 0x"));
2084//               for (INT32 i = 0; i < 9; i++) {
2085//                  bprintf(PRINT_NORMAL, _T("%X"), NeoCDCommsStatusFIFO[i]);
2086//                  sum += NeoCDCommsStatusFIFO[i];
2087//               }
2088//               sum = ~(sum + 5) & 0x0F;
2089//               bprintf(PRINT_NORMAL, _T(" (CS 0x%X, %s)\n"), NeoCDCommsStatusFIFO[9], (sum == NeoCDCommsStatusFIFO[9]) ? _T("OK") : _T("NG"));
2090//            }
2091
2092//            if (NeoCDAssyStatus == 0xE) {
2093//               NeoCDAssyStatus = 9;
2094//            }
2095         }
2096
2097      }
2098      bNeoCDCommsSend = send;
2099   }
2100   bNeoCDCommsClock = clock;
2101}
2102
2103
2104void ng_aes_state::LC8951UpdateHeader()
2105{
2106   NeoCDLBAToMSF(NeoCDSectorLBA);
2107
2108   if (LC8951RegistersW[11] & 1) {
2109
2110      // HEAD registers have sub-header
2111
2112      LC8951RegistersR[4] = 0;                                       // HEAD0
2113      LC8951RegistersR[5] = 0;                                       // HEAD1
2114      LC8951RegistersR[6] = 0;                                       // HEAD2
2115      LC8951RegistersR[7] = 0;                                       // HEAD3
2116
2117   } else {
2118
2119      // HEAD registers have header
2120
2121      LC8951RegistersR[4] = ((NeoCDSectorMin / 10) << 4) | (NeoCDSectorMin % 10);   // HEAD0
2122      LC8951RegistersR[5] = ((NeoCDSectorSec / 10) << 4) | (NeoCDSectorSec % 10);   // HEAD1
2123      LC8951RegistersR[6] = ((NeoCDSectorFrm / 10) << 4) | (NeoCDSectorFrm % 10);   // HEAD2
2124      LC8951RegistersR[7] = 1;                                       // HEAD3
2125   }
2126}
2127
2128char* ng_aes_state::LC8915InitTransfer()
2129{
2130   if (!LC8951RegistersW[6]) {
2131      //bprintf(PRINT_ERROR, _T("    LC8951 DTTRG status invalid\n"));
2132      return NULL;
2133   }
2134   if (!(LC8951RegistersW[1] & 0x02)) {
2135      //bprintf(PRINT_ERROR, _T("    LC8951 DOUTEN status invalid\n"));
2136      return NULL;
2137   }
2138   if (((LC8951RegistersW[5] << 8) | LC8951RegistersW[4]) + (NeoCDDMACount << 1) > 2352) {
2139      //bprintf(PRINT_ERROR, _T("    DMA transfer exceeds current sector in LC8951 external buffer\n"));
2140      return NULL;
2141   }
2142
2143   return NeoCDSectorData + ((LC8951RegistersW[5] << 8) | LC8951RegistersW[4]);
2144}                 
2145
2146void ng_aes_state::LC8915EndTransfer()
2147{
2148   LC8951RegistersW[6]  = 0x00;                                    // reset DTTRG
2149
2150   LC8951RegistersR[1] |= 0x48;                                    //   set DTEI & DTBSY
2151   if (LC8951RegistersW[1] & 0x40) {
2152
2153      // trigger DTE interrupt
2154
2155      // the Neo Geo CD doesn't use the DTE interrupt
2156      // nIRQAcknowledge &= ~0x20;
2157      // NeoCDIRQUpdate(0);
2158
2159   }
2160}
2161
2162void ng_aes_state::LC8951Reset()
2163{
2164   memset(LC8951RegistersR, 0, sizeof(LC8951RegistersR));
2165   memset(LC8951RegistersW, 0, sizeof(LC8951RegistersW));
2166   LC8951RegistersR[0x01] = 0xFF;
2167   LC8951RegistersR[0x0F] = 0x80;
2168
2169   LC8951UpdateHeader();
2170}
2171
2172
2173
9272174WRITE16_MEMBER(ng_aes_state::neocd_control_w)
9282175{
9292176   switch(offset)
9302177   {
2178   case 0x02/2: // HOCK
2179      COMBINE_DATA(&nff0002);
2180      printf("nff0002 = %04x %04x\n", data, mem_mask);
2181      break;
2182
2183   case 0x16/2:
2184      COMBINE_DATA(&nff0016);
2185      printf("nff0016 = %04x %04x\n", data, mem_mask);
2186      break;
2187
2188
9312189   case 0x60/2: // Start DMA transfer
9322190      if((data & 0xff) == 0x40)
9332191         neocd_do_dma(space);
r18970r18971
16782936   MCFG_SOFTWARE_LIST_FILTER("cart_list","AES")
16792937MACHINE_CONFIG_END
16802938
2939
2940
2941int nVBLankIRQ   = 2;
2942int nScanlineIRQ = 1;
2943
2944void ng_aes_state::NeoIRQUpdate(UINT16 wordValue)
2945{
2946   nIRQAcknowledge |= (wordValue & 7);
2947
2948//   bprintf(PRINT_NORMAL, _T("  - IRQ Ack -> %02X (at line %3i).\n"), nIRQAcknowledge, SekCurrentScanline());
2949
2950   if ((nIRQAcknowledge & 7) == 7) {
2951      SekSetIRQLine(7, SEK_IRQSTATUS_NONE);
2952   } else {
2953      if ((nIRQAcknowledge & 1) == 0) {
2954         SekSetIRQLine(3, SEK_IRQSTATUS_ACK);
2955      }
2956      if ((nIRQAcknowledge & 2) == 0) {
2957         SekSetIRQLine(nScanlineIRQ, SEK_IRQSTATUS_ACK);
2958      }
2959      if ((nIRQAcknowledge & 4) == 0) {
2960         SekSetIRQLine(nVBLankIRQ, SEK_IRQSTATUS_ACK);
2961      }
2962   }
2963}
2964
2965
2966
2967void ng_aes_state::NeoCDIRQUpdate(UINT8 byteValue)
2968{
2969   nIRQAcknowledge |= (byteValue & 0x38);
2970
2971//   bprintf(PRINT_NORMAL, _T("  - IRQ Ack -> %02X (CD, at line %3i).\n"), nIRQAcknowledge, SekCurrentScanline());
2972
2973   if ((nIRQAcknowledge & 0x3F) == 0x3F) {
2974      SekSetIRQLine(7, SEK_IRQSTATUS_NONE);
2975   } else {
2976      if ((nIRQAcknowledge & 0x07) != 7) {
2977         NeoIRQUpdate(0);
2978         return;
2979      }
2980      if ((nIRQAcknowledge & 0x08) == 0) {
2981         nNeoCDIRQVector = 0x17;
2982         nNeoCDIRQVectorAck = 1;
2983         SekSetIRQLine(4, SEK_IRQSTATUS_ACK /*| SEK_IRQSTATUS_CALLBACK*/);
2984         return;
2985      }
2986      if ((nIRQAcknowledge & 0x10) == 0) {
2987         nNeoCDIRQVector = 0x16;
2988         nNeoCDIRQVectorAck = 1;
2989         SekSetIRQLine(4, SEK_IRQSTATUS_ACK /*| SEK_IRQSTATUS_CALLBACK*/);
2990         return;
2991      }
2992      if ((nIRQAcknowledge & 0x20) == 0) {
2993         nNeoCDIRQVector = 0x15;
2994         nNeoCDIRQVectorAck = 1;
2995         SekSetIRQLine(4, SEK_IRQSTATUS_ACK /*| SEK_IRQSTATUS_CALLBACK*/);
2996         return;
2997      }
2998   }
2999}
3000
3001TIMER_DEVICE_CALLBACK_MEMBER( ng_aes_state::neocd_access_timer_callback )
3002{
3003   //CheckCommand(machine());
3004
3005   if (nff0002 & 0x0050) {
3006      nIRQAcknowledge &= ~0x10;
3007      NeoCDIRQUpdate(0);
3008
3009      if (nff0002 & 0x0500) {
3010         NeoCDReadSector();
3011      }
3012   }
3013}
3014
3015
3016struct cdrom_interface neocd_cdrom =
3017{
3018   "neocd_cdrom",
3019   NULL
3020};
3021
16813022static MACHINE_CONFIG_DERIVED( neocd, neogeo )
16823023
16833024   MCFG_CPU_MODIFY("maincpu")
16843025   MCFG_CPU_PROGRAM_MAP(neocd_main_map)
16853026
16863027   MCFG_MACHINE_START_OVERRIDE(ng_aes_state,neocd)
3028
3029   MCFG_TIMER_DRIVER_ADD_PERIODIC("hock_timer", ng_aes_state, neocd_access_timer_callback, attotime::from_hz(75))
3030   MCFG_CDROM_ADD( "cdrom",neocd_cdrom )
3031   MCFG_SOFTWARE_LIST_ADD("cd_list","neocd")
3032
3033   MCFG_SOUND_ADD( "cdda", CDDA, 0 )
3034   MCFG_SOUND_ROUTE( 0, "lspeaker", 0.50 )
3035   MCFG_SOUND_ROUTE( 1, "rspeaker", 0.50 )
16873036MACHINE_CONFIG_END
16883037
16893038/*************************************
r18970r18971
17813130
17823131/*    YEAR  NAME  PARENT COMPAT MACHINE INPUT  INIT     COMPANY      FULLNAME            FLAGS */
17833132CONS( 1990, aes,    0,      0,   aes,      aes, ng_aes_state,   neogeo,  "SNK", "Neo-Geo AES", 0)
1784CONS( 1994, neocd,  0,      0,   neocd,    aes, ng_aes_state,   neogeo,  "SNK", "Neo-Geo CD", GAME_NOT_WORKING )
1785CONS( 1996, neocdz, neocd,   0,   neocd,    aes, ng_aes_state,   neogeo,  "SNK", "Neo-Geo CDZ", GAME_NOT_WORKING )
3133
3134CONS( 1996, neocdz, 0,       0,   neocd,    aes, ng_aes_state,   neogeo,  "SNK", "Neo-Geo CDZ", GAME_NOT_WORKING ) // the CDZ is the newer slot-loading model, faster drive etc.
3135CONS( 1994, neocd,  neocdz,   0,   neocd,    aes, ng_aes_state,   neogeo,  "SNK", "Neo-Geo CD", GAME_NOT_WORKING ) // older Top Loading model, ignores disc protections?
trunk/hash/neocd.xml
r0r18971
1<?xml version="1.0"?>
2<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
3<softwarelist name="neocd" description="SNK NeoGeo CD CD-ROM list">
4
5  <!-- Most of the images listed are converted from an old TOSEC set and should probably be replaced with TruRip dumps once we can import CCD files -->
6  <!-- A small number of images are from the TruRip set, converted using .cue files created with CDMage, the sub-data however is not converted -->
7
8  <software name="pbobblen">
9     <description>Bust-A-Move (1995)(SNK)(JP-US)[!][Puzzle Bobble]</description>
10     <year>199?</year>
11     <publisher>SNK</publisher>
12     <part name="cdrom" interface="neocd_cdrom">
13        <diskarea name="cdrom">
14           <disk name="bust-a-move (1995)(snk)(jp-us)[!][puzzle bobble]" sha1="e9ae51499f1790b402307c0d1c8a62c2ff0cfea9"/>
15        </diskarea>
16     </part>
17  </software>
18   
19  <!-- disable most things for now, until I actually get it working -->
20  <!--
21  <software name="2020bb">
22     <description>2020 Super Baseball (1995)(SNK)(JP-US)[!]</description>
23     <year>199?</year>
24     <publisher>SNK</publisher>
25     <part name="cdrom" interface="neocd_cdrom">
26        <diskarea name="cdrom">
27           <disk name="2020 super baseball (1995)(snk)(jp-us)[!]" sha1="047a91393b7391d4ef772c706a034d57417a7a46"/>
28        </diskarea>
29     </part>
30  </software>
31
32  <software name="3countb">
33     <description>3 Count Bout (1995)(SNK)(JP-US)[!][Fire Suplex]</description>
34     <year>199?</year>
35     <publisher>SNK</publisher>
36     <part name="cdrom" interface="neocd_cdrom">
37        <diskarea name="cdrom">
38           <disk name="3 count bout (1995)(snk)(jp-us)[!][fire suplex]" sha1="d31d934452ed3d90c73a5f7ec2f13b502293287b"/>
39        </diskarea>
40     </part>
41  </software>
42
43  <software name="adkworld">
44     <description>ADK World (1995)(ADK)(JP)[!]</description>
45     <year>199?</year>
46     <publisher>SNK</publisher>
47     <part name="cdrom" interface="neocd_cdrom">
48        <diskarea name="cdrom">
49           <disk name="adk world (1995)(adk)(jp)[!]" sha1="c99032d62ce5bf6be9b1dc37c70ef45a4dc37180"/>
50        </diskarea>
51     </part>
52  </software>
53
54  <software name="sonicwi2">
55     <description>Aero Fighters 2 (1994)(SNK)(JP-US)[!][Sonic Wings 2]</description>
56     <year>199?</year>
57     <publisher>SNK</publisher>
58     <part name="cdrom" interface="neocd_cdrom">
59        <diskarea name="cdrom">
60           <disk name="aero fighters 2 (1994)(snk)(jp-us)[!][sonic wings 2]" sha1="12a453dd787b6407f9bf18eec044095edb5c4511"/>
61        </diskarea>
62     </part>
63  </software>
64
65  <software name="sonicwi3">
66     <description>Aero Fighters 3 (1995)(SNK)(JP-US)[!][Sonic Wings 3]</description>
67     <year>199?</year>
68     <publisher>SNK</publisher>
69     <part name="cdrom" interface="neocd_cdrom">
70        <diskarea name="cdrom">
71           <disk name="aero fighters 3 (1995)(snk)(jp-us)[!][sonic wings 3]" sha1="3bd2b3931429d67e5443a2e931a6f75041cb3030"/>
72        </diskarea>
73     </part>
74  </software>
75
76  <software name="aodk">
77     <description>Aggressors of Dark Kombat (1995)(ADK)(JP-US)[!][Tsuukai GanGan Koushinkyoku]</description>
78     <year>199?</year>
79     <publisher>SNK</publisher>
80     <part name="cdrom" interface="neocd_cdrom">
81        <diskarea name="cdrom">
82           <disk name="aggressors of dark kombat (1995)(adk)(jp-us)[!][tsuukai gangan koushinkyoku]" sha1="76d7972b3dd81fb476e4b89cd1b02e6ad794956d"/>
83        </diskarea>
84     </part>
85  </software>
86
87  <software name="alpham2">
88     <description>Alpha Mission II (1994)(SNK)(JP-US)[!][ASO II - Last Guardian]</description>
89     <year>199?</year>
90     <publisher>SNK</publisher>
91     <part name="cdrom" interface="neocd_cdrom">
92        <diskarea name="cdrom">
93           <disk name="alpha mission ii (1994)(snk)(jp-us)[!][aso ii - last guardian]" sha1="be27801500ae7f4e40f2715dec343943fb0fb0e5"/>
94        </diskarea>
95     </part>
96  </software>
97
98  <software name="aof">
99     <description>Art of Fighting (1994)(SNK)(JP)[!][Ryuuko no Ken]</description>
100     <year>199?</year>
101     <publisher>SNK</publisher>
102     <part name="cdrom" interface="neocd_cdrom">
103        <diskarea name="cdrom">
104           <disk name="art of fighting (1994)(snk)(jp)[!][ryuuko no ken]" sha1="77f4910e0b1d82a0b1d17594408bda368b619c0c"/>
105        </diskarea>
106     </part>
107  </software>
108
109  <software name="aof2">
110     <description>Art of Fighting 2 (1994)(SNK)(JP-US)[!][Ryuuko no Ken 2]</description>
111     <year>199?</year>
112     <publisher>SNK</publisher>
113     <part name="cdrom" interface="neocd_cdrom">
114        <diskarea name="cdrom">
115           <disk name="art of fighting 2 (1994)(snk)(jp-us)[!][ryuuko no ken 2]" sha1="91f57d4a159e95a63c5992a69a8e7d02934432f0"/>
116        </diskarea>
117     </part>
118  </software>
119
120  <software name="aof3">
121     <description>Art of Fighting 3 - Path of the Warrior (1996)(SNK)(JP)[!][Art of Fighting - Ryuuko no Ken Gaiden][NGCD-0961]</description>
122     <year>199?</year>
123     <publisher>SNK</publisher>
124     <part name="cdrom" interface="neocd_cdrom">
125        <diskarea name="cdrom">
126           <disk name="art of fighting 3 - path of the warrior (1996)(snk)(jp)[!][art of fighting - ryuuko no ken gaiden][ngcd-0961]" sha1="275e2265e56d719d55a80cac811d421e0f81c669"/>
127        </diskarea>
128     </part>
129  </software>
130
131  <software name="aof3a" cloneof="aof3">
132     <description>Art of Fighting 3 - Path of the Warrior (1996)(SNK)(JP-US)[!][Art of Fighting - Ryuuko no Ken Gaiden][NGCD-096, NGCD-096E]</description>
133     <year>199?</year>
134     <publisher>SNK</publisher>
135     <part name="cdrom" interface="neocd_cdrom">
136        <diskarea name="cdrom">
137           <disk name="art of fighting 3 - path of the warrior (1996)(snk)(jp-us)[!][art of fighting - ryuuko no ken gaiden][ngcd-096, ngcd-096e]" sha1="39502261dc15f4279659ed074b1b4e62b683f266"/>
138        </diskarea>
139     </part>
140  </software>
141
142  <software name="lastbld2">
143     <description>Bakumatsu Roman Daini Maku - Gekka no Kenshi - Tsuki ni Saku Hana, Chiri Yuku Hana (1999)(SNK)(JP)[!][Last Blade 2, The]</description>
144     <year>199?</year>
145     <publisher>SNK</publisher>
146     <part name="cdrom" interface="neocd_cdrom">
147        <diskarea name="cdrom">
148           <disk name="bakumatsu roman daini maku - gekka no kenshi - tsuki ni saku hana, chiri yuku hana (1999)(snk)(jp)[!][last blade 2, the]" sha1="d4a4dc25b27ecb26f64242acf06fe6da98ee3777"/>
149        </diskarea>
150     </part>
151  </software>
152
153  <software name="bstars2">
154     <description>Baseball Stars 2 (1994)(SNK)(JP-US)[!]</description>
155     <year>199?</year>
156     <publisher>SNK</publisher>
157     <part name="cdrom" interface="neocd_cdrom">
158        <diskarea name="cdrom">
159           <disk name="baseball stars 2 (1994)(snk)(jp-us)[!]" sha1="e8963b17212889ac5307e8d40f940f8d941cd46a"/>
160        </diskarea>
161     </part>
162  </software>
163
164  <software name="bstars">
165     <description>Baseball Stars Professional (1995)(SNK)(JP-US)[!]</description>
166     <year>199?</year>
167     <publisher>SNK</publisher>
168     <part name="cdrom" interface="neocd_cdrom">
169        <diskarea name="cdrom">
170           <disk name="baseball stars professional (1995)(snk)(jp-us)[!]" sha1="85fa71ab8576dd7bcc9717111297926ce6cec29e"/>
171        </diskarea>
172     </part>
173  </software>
174
175  <software name="breakers">
176     <description>Breakers (1997)(Visco)(JP)[!]</description>
177     <year>199?</year>
178     <publisher>SNK</publisher>
179     <part name="cdrom" interface="neocd_cdrom">
180        <diskarea name="cdrom">
181           <disk name="breakers (1997)(visco)(jp)[!]" sha1="f203ef8f2a431a2e841af09deaedda3d33238104"/>
182        </diskarea>
183     </part>
184  </software>
185
186  <software name="burningf">
187     <description>Burning Fight (1994)(SNK)(JP-US)[!]</description>
188     <year>199?</year>
189     <publisher>SNK</publisher>
190     <part name="cdrom" interface="neocd_cdrom">
191        <diskarea name="cdrom">
192           <disk name="burning fight (1994)(snk)(jp-us)[!]" sha1="fb851b5fc2bc5ce2addf8c1bae5b65401c10eceb"/>
193        </diskarea>
194     </part>
195  </software>
196
197  <software name="totc">
198     <description>Treasure of The Caribbean (FR) [NGCD-500] [731-1501-30910-5]</description>
199     <year>199?</year>
200     <publisher>SNK</publisher>
201     <part name="cdrom" interface="neocd_cdrom">
202        <diskarea name="cdrom">
203           <disk name="cd-rom [ngcd-500] [v2011-12-22] [!-].chd" sha1="95c9e0b42410ac4e384529b3c067cb55e9b0e537"/>
204        </diskarea>
205     </part>
206  </software>
207
208  <software name="lasthope">
209     <description>Last Hope (DE) [NGDT CD-300J] [N.A.]</description>
210     <year>199?</year>
211     <publisher>SNK</publisher>
212     <part name="cdrom" interface="neocd_cdrom">
213        <diskarea name="cdrom">
214           <disk name="cd-rom [ngdt cd-300j] [v2007-10-03] [!-].chd" sha1="4cf60613098531b49c447a2b223aeb49a6395fd2"/>
215        </diskarea>
216     </part>
217  </software>
218
219  <software name="ironclad">
220     <description>Choutetsu Brikin'ger (1996)(Saurus)(JP)[!][Ironclad]</description>
221     <year>199?</year>
222     <publisher>SNK</publisher>
223     <part name="cdrom" interface="neocd_cdrom">
224        <diskarea name="cdrom">
225           <disk name="choutetsu brikin'ger (1996)(saurus)(jp)[!][ironclad]" sha1="4d518370686853c727eb300a91c0f070c3333225"/>
226        </diskarea>
227     </part>
228  </software>
229
230  <software name="crsword">
231     <description>Crossed Swords (1994)(ADK)(JP)[!]</description>
232     <year>199?</year>
233     <publisher>SNK</publisher>
234     <part name="cdrom" interface="neocd_cdrom">
235        <diskarea name="cdrom">
236           <disk name="crossed swords (1994)(adk)(jp)[!]" sha1="854759d12584d2bded3bd6355016ac1302acf973"/>
237        </diskarea>
238     </part>
239  </software>
240
241  <software name="crsword2">
242     <description>Crossed Swords II (1995)(ADK)(JP)[!]</description>
243     <year>199?</year>
244     <publisher>SNK</publisher>
245     <part name="cdrom" interface="neocd_cdrom">
246        <diskarea name="cdrom">
247           <disk name="crossed swords ii (1995)(adk)(jp)[!]" sha1="dc65e9a937bfc912c3fdaff0b8200bfd4df4c34c"/>
248        </diskarea>
249     </part>
250  </software>
251
252  <software name="cyberlip">
253     <description>Cyber-Lip (1995)(SNK)(JP-US)[!]</description>
254     <year>199?</year>
255     <publisher>SNK</publisher>
256     <part name="cdrom" interface="neocd_cdrom">
257        <diskarea name="cdrom">
258           <disk name="cyber-lip (1995)(snk)(jp-us)[!]" sha1="4f4667df89005623200bb6a0a49d55beda1128db"/>
259        </diskarea>
260     </part>
261  </software>
262
263  <software name="doubledr">
264     <description>Double Dragon (1995)(SNK)(JP-US)[!][NGCD-082 MT B01, NGCD-082E MT B04]</description>
265     <year>199?</year>
266     <publisher>SNK</publisher>
267     <part name="cdrom" interface="neocd_cdrom">
268        <diskarea name="cdrom">
269           <disk name="double dragon (1995)(snk)(jp-us)[!][ngcd-082 mt b01, ngcd-082e mt b04]" sha1="404856deac6875ec1fac00fa36c2aed1b6900c09"/>
270        </diskarea>
271     </part>
272  </software>
273
274  <software name="fatfury1">
275     <description>Fatal Fury - The Battle of Fury (1994)(SNK)(JP-US)[!][Garou Densetsu - Shukumei no Tatakai]</description>
276     <year>199?</year>
277     <publisher>SNK</publisher>
278     <part name="cdrom" interface="neocd_cdrom">
279        <diskarea name="cdrom">
280           <disk name="fatal fury - the battle of fury (1994)(snk)(jp-us)[!][garou densetsu - shukumei no tatakai]" sha1="098d6b48b45afad41bb17467e460990069f9385b"/>
281        </diskarea>
282     </part>
283  </software>
284
285  <software name="fatfury2">
286     <description>Fatal Fury 2 (1994)(SNK)(JP-US)[!][Garou Densetsu 2 - Aratanaru Tatakai]</description>
287     <year>199?</year>
288     <publisher>SNK</publisher>
289     <part name="cdrom" interface="neocd_cdrom">
290        <diskarea name="cdrom">
291           <disk name="fatal fury 2 (1994)(snk)(jp-us)[!][garou densetsu 2 - aratanaru tatakai]" sha1="886f605d800cdab23de381135a3938bcbd821662"/>
292        </diskarea>
293     </part>
294  </software>
295
296  <software name="fatfury3">
297     <description>Fatal Fury 3 - Road to the Final Victory (1995)(SNK)(JP-US)[!][Garou Densetsu 3 - Harukanaru Tatakai][NGCD-069, NGCD-069E MT B02]</description>
298     <year>199?</year>
299     <publisher>SNK</publisher>
300     <part name="cdrom" interface="neocd_cdrom">
301        <diskarea name="cdrom">
302           <disk name="fatal fury 3 - road to the final victory (1995)(snk)(jp-us)[!][garou densetsu 3 - harukanaru tatakai][ngcd-069, ngcd-069e mt b02]" sha1="5bcf25e0a4f01389e028632fa2f2a13f31444a87"/>
303        </diskarea>
304     </part>
305  </software>
306
307  <software name="fatfury3a" cloneof="fatfury3">
308     <description>Fatal Fury 3 - Road to the Final Victory (1995)(SNK)(US)[!][Garou Densetsu 3 - Harukanaru Tatakai][NGCD-069E MT B03]</description>
309     <year>199?</year>
310     <publisher>SNK</publisher>
311     <part name="cdrom" interface="neocd_cdrom">
312        <diskarea name="cdrom">
313           <disk name="fatal fury 3 - road to the final victory (1995)(snk)(us)[!][garou densetsu 3 - harukanaru tatakai][ngcd-069e mt b03]" sha1="3a808e3bda8b1eb77e1f30bfd6e38e1b303b11ec"/>
314        </diskarea>
315     </part>
316  </software>
317
318  <software name="fatfursp">
319     <description>Fatal Fury Special (1994)(SNK)(JP-US)[!][Garou Densetsu Special]</description>
320     <year>199?</year>
321     <publisher>SNK</publisher>
322     <part name="cdrom" interface="neocd_cdrom">
323        <diskarea name="cdrom">
324           <disk name="fatal fury special (1994)(snk)(jp-us)[!][garou densetsu special]" sha1="a4a3a5b7c95214bec4b77d1a91686a83f6600638"/>
325        </diskarea>
326     </part>
327  </software>
328
329  <software name="fbfrenzy">
330     <description>Football Frenzy (1994)(SNK)(JP-US)[!]</description>
331     <year>199?</year>
332     <publisher>SNK</publisher>
333     <part name="cdrom" interface="neocd_cdrom">
334        <diskarea name="cdrom">
335           <disk name="football frenzy (1994)(snk)(jp-us)[!]" sha1="e2fed1652c5d513edaae11481b4345e3b19fd760"/>
336        </diskarea>
337     </part>
338  </software>
339
340  <software name="pgoal">
341     <description>Futsal - 5 on 5 Mini Soccer (1996)(Saurus)(JP)[!][Pleasuregoal - 5 on 5 Mini Soccer]</description>
342     <year>199?</year>
343     <publisher>SNK</publisher>
344     <part name="cdrom" interface="neocd_cdrom">
345        <diskarea name="cdrom">
346           <disk name="futsal - 5 on 5 mini soccer (1996)(saurus)(jp)[!][pleasuregoal - 5 on 5 mini soccer]" sha1="8e70456d560e6c8f1a484af86b953d9ed6bbf724"/>
347        </diskarea>
348     </part>
349  </software>
350
351  <software name="galaxyfg">
352     <description>Galaxy Fight - Universal Warriors (1995)(Sunsoft)(JP-US)[!]</description>
353     <year>199?</year>
354     <publisher>SNK</publisher>
355     <part name="cdrom" interface="neocd_cdrom">
356        <diskarea name="cdrom">
357           <disk name="galaxy fight - universal warriors (1995)(sunsoft)(jp-us)[!]" sha1="65ca73d11d98e9c9e26bf0753e52378188c79471"/>
358        </diskarea>
359     </part>
360  </software>
361
362  <software name="gpilots">
363     <description>Ghost Pilots (1995)(SNK)(JP)[!]</description>
364     <year>199?</year>
365     <publisher>SNK</publisher>
366     <part name="cdrom" interface="neocd_cdrom">
367        <diskarea name="cdrom">
368           <disk name="ghost pilots (1995)(snk)(jp)[!]" sha1="77f8425c27c314aa746951c517f9a44c2624baae"/>
369        </diskarea>
370     </part>
371  </software>
372
373  <software name="fromanc2">
374     <description>Idol Mahjong Final Romance 2 (1995)(Video System)(JP)[!]</description>
375     <year>199?</year>
376     <publisher>SNK</publisher>
377     <part name="cdrom" interface="neocd_cdrom">
378        <diskarea name="cdrom">
379           <disk name="idol mahjong final romance 2 (1995)(video system)(jp)[!]" sha1="63c2b6c8cccfbcba9c41efb61954db9885ff9869"/>
380        </diskarea>
381     </part>
382  </software>
383
384  <software name="janshin">
385     <description>Janshin Densetsu - Quest of the Jongmaster (1995)(SNK)(JP)[!]</description>
386     <year>199?</year>
387     <publisher>SNK</publisher>
388     <part name="cdrom" interface="neocd_cdrom">
389        <diskarea name="cdrom">
390           <disk name="janshin densetsu - quest of the jongmaster (1995)(snk)(jp)[!]" sha1="074807c2a48f5c915a253e7b9bff2b8a3ad0ced3"/>
391        </diskarea>
392     </part>
393  </software>
394
395  <software name="karnovr">
396     <description>Karnov's Revenge (1994)(SNK)(JP-US)[!][Fighter's History Dynamite]</description>
397     <year>199?</year>
398     <publisher>SNK</publisher>
399     <part name="cdrom" interface="neocd_cdrom">
400        <diskarea name="cdrom">
401           <disk name="karnov's revenge (1994)(snk)(jp-us)[!][fighter's history dynamite]" sha1="89acc598b304e97749f632c4883935cf1f41100e"/>
402        </diskarea>
403     </part>
404  </software>
405
406  <software name="kof94">
407     <description>King of Fighters '94, The (1994)(SNK)(JP-US)[!][NGCD-055 MT B01+B04, NGCD-055E MT B01]</description>
408     <year>199?</year>
409     <publisher>SNK</publisher>
410     <part name="cdrom" interface="neocd_cdrom">
411        <diskarea name="cdrom">
412           <disk name="king of fighters '94, the (1994)(snk)(jp-us)[!][ngcd-055 mt b01+b04, ngcd-055e mt b01]" sha1="a6a461dc12ab4a0bb4385d2800a97b64a5792414"/>
413        </diskarea>
414     </part>
415  </software>
416
417  <software name="kof94a" cloneof="kof94">
418     <description>King of Fighters '94, The (1994)(SNK)(JP-US)[!][NGCD-055 MT B12, NGCD-055E]</description>
419     <year>199?</year>
420     <publisher>SNK</publisher>
421     <part name="cdrom" interface="neocd_cdrom">
422        <diskarea name="cdrom">
423           <disk name="king of fighters '94, the (1994)(snk)(jp-us)[!][ngcd-055 mt b12, ngcd-055e]" sha1="60319c764eef1814825b3440bb0838f3f16fd447"/>
424        </diskarea>
425     </part>
426  </software>
427
428  <software name="kof95">
429     <description>King of Fighters '95, The (1995)(SNK)(JP-US)[!][NGCD-084 MT B01+B03+B06, NGCD-084E MT B01]</description>
430     <year>199?</year>
431     <publisher>SNK</publisher>
432     <part name="cdrom" interface="neocd_cdrom">
433        <diskarea name="cdrom">
434           <disk name="king of fighters '95, the (1995)(snk)(jp-us)[!][ngcd-084 mt b01+b03+b06, ngcd-084e mt b01]" sha1="dee363caf747ecd92e9e98b88094aecf181173e4"/>
435        </diskarea>
436     </part>
437  </software>
438
439  <software name="kof95a" cloneof="kof95">
440     <description>King of Fighters '95, The (1995)(SNK)(JP-US)[!][NGCD-084 MT B10, NGCD-084E MT B03]</description>
441     <year>199?</year>
442     <publisher>SNK</publisher>
443     <part name="cdrom" interface="neocd_cdrom">
444        <diskarea name="cdrom">
445           <disk name="king of fighters '95, the (1995)(snk)(jp-us)[!][ngcd-084 mt b10, ngcd-084e mt b03]" sha1="67f0ce0da3585043b3813be2fc0b7664b60c32d3"/>
446        </diskarea>
447     </part>
448  </software>
449
450  <software name="kof96col">
451     <description>King of Fighters '96 NEOGEO Collection, The (1997)(SNK)(JP)[!][NGCD-229 MT B07]</description>
452     <year>199?</year>
453     <publisher>SNK</publisher>
454     <part name="cdrom" interface="neocd_cdrom">
455        <diskarea name="cdrom">
456           <disk name="king of fighters '96 neogeo collection, the (1997)(snk)(jp)[!][ngcd-229 mt b07]" sha1="4f0fa12fc1e6b77e08fbbfa84366dbb04ca09f32"/>
457        </diskarea>
458     </part>
459  </software>
460
461  <software name="kof96">
462     <description>King of Fighters '96, The (1996)(SNK)(JP)[!][NGCD-214 MT A02+A03]</description>
463     <year>199?</year>
464     <publisher>SNK</publisher>
465     <part name="cdrom" interface="neocd_cdrom">
466        <diskarea name="cdrom">
467           <disk name="king of fighters '96, the (1996)(snk)(jp)[!][ngcd-214 mt a02+a03]" sha1="e162d33d5a33049bf26226a651b359815efae16b"/>
468        </diskarea>
469     </part>
470  </software>
471
472  <software name="kof96a" cloneof="kof96">
473     <description>King of Fighters '96, The (1996)(SNK)(JP-US)[!][NGCD-214 MT A01, NGCD-214E]</description>
474     <year>199?</year>
475     <publisher>SNK</publisher>
476     <part name="cdrom" interface="neocd_cdrom">
477        <diskarea name="cdrom">
478           <disk name="king of fighters '96, the (1996)(snk)(jp-us)[!][ngcd-214 mt a01, ngcd-214e]" sha1="a3b663994339fd6c8244fed1865895a87e8365b2"/>
479        </diskarea>
480     </part>
481  </software>
482
483  <software name="kof97">
484     <description>King of Fighters '97, The (1997)(SNK)(JP)[!]</description>
485     <year>199?</year>
486     <publisher>SNK</publisher>
487     <part name="cdrom" interface="neocd_cdrom">
488        <diskarea name="cdrom">
489           <disk name="king of fighters '97, the (1997)(snk)(jp)[!]" sha1="3985560edfda8e5095e888b8fd8f5ae6a9a820dd"/>
490        </diskarea>
491     </part>
492  </software>
493
494  <software name="kof98">
495     <description>King of Fighters '98, The - The Slugfest (1998)(SNK)(JP)[!][King of Fighters '98, The - Dream Match Never Ends][NGCD-2420 MT A04, NGCD-2421]</description>
496     <year>199?</year>
497     <publisher>SNK</publisher>
498     <part name="cdrom" interface="neocd_cdrom">
499        <diskarea name="cdrom">
500           <disk name="king of fighters '98, the - the slugfest (1998)(snk)(jp)[!][king of fighters '98, the - dream match never ends][ngcd-2420 mt a04, ngcd-2421]" sha1="a9347d7ca911be575fc1d4da01b9376f05057181"/>
501        </diskarea>
502     </part>
503  </software>
504
505  <software name="kof99">
506     <description>King of Fighters '99, The - Millennium Battle (1999)(SNK)(JP)[!][King of Fighters '99, The]</description>
507     <year>199?</year>
508     <publisher>SNK</publisher>
509     <part name="cdrom" interface="neocd_cdrom">
510        <diskarea name="cdrom">
511           <disk name="king of fighters '99, the - millennium battle (1999)(snk)(jp)[!][king of fighters '99, the]" sha1="813e7880f72e19074beb8cc1d96eb4f9e2f87c09"/>
512        </diskarea>
513     </part>
514  </software>
515
516  <software name="kotm2">
517     <description>King of the Monsters 2 (1994)(SNK)(JP-US)[!]</description>
518     <year>199?</year>
519     <publisher>SNK</publisher>
520     <part name="cdrom" interface="neocd_cdrom">
521        <diskarea name="cdrom">
522           <disk name="king of the monsters 2 (1994)(snk)(jp-us)[!]" sha1="c041b07f6057b818fb666b450e65b227c1f0c56d"/>
523        </diskarea>
524     </part>
525  </software>
526
527  <software name="lastblad">
528     <description>Last Blade, The (1998)(SNK)(JP)[!][Bakumatsu Roman - Gekka no Kenshi]</description>
529     <year>199?</year>
530     <publisher>SNK</publisher>
531     <part name="cdrom" interface="neocd_cdrom">
532        <diskarea name="cdrom">
533           <disk name="last blade, the (1998)(snk)(jp)[!][bakumatsu roman - gekka no kenshi]" sha1="72dd53d44e0b253246e4d1a3815f7c4e9d27c5ec"/>
534        </diskarea>
535     </part>
536  </software>
537
538  <software name="lresort">
539     <description>Last Resort (1994)(SNK)(JP-US)[!]</description>
540     <year>199?</year>
541     <publisher>SNK</publisher>
542     <part name="cdrom" interface="neocd_cdrom">
543        <diskarea name="cdrom">
544           <disk name="last resort (1994)(snk)(jp-us)[!]" sha1="372b9642cf861d3c7507b8485fc43fc144b16874"/>
545        </diskarea>
546     </part>
547  </software>
548
549  <software name="lbowling">
550     <description>League Bowling (1994)(SNK)(JP-US)[!]</description>
551     <year>199?</year>
552     <publisher>SNK</publisher>
553     <part name="cdrom" interface="neocd_cdrom">
554        <diskarea name="cdrom">
555           <disk name="league bowling (1994)(snk)(jp-us)[!]" sha1="ca657fa76e16ae70745a6938770677c523daa041"/>
556        </diskarea>
557     </part>
558  </software>
559
560  <software name="magdrop2">
561     <description>Magical Drop 2 (1996)(Data East)(JP)[!]</description>
562     <year>199?</year>
563     <publisher>SNK</publisher>
564     <part name="cdrom" interface="neocd_cdrom">
565        <diskarea name="cdrom">
566           <disk name="magical drop 2 (1996)(data east)(jp)[!]" sha1="69135e129dd3587910f3b6042175788298e31a71"/>
567        </diskarea>
568     </part>
569  </software>
570
571  <software name="maglord">
572     <description>Magician Lord (1994)(ADK)(JP)[!]</description>
573     <year>199?</year>
574     <publisher>SNK</publisher>
575     <part name="cdrom" interface="neocd_cdrom">
576        <diskarea name="cdrom">
577           <disk name="magician lord (1994)(adk)(jp)[!]" sha1="e537fefc2179c2017ebb1d0794f77b1d18581555"/>
578        </diskarea>
579     </part>
580  </software>
581
582  <software name="mahretsu">
583     <description>Mahjong Kyo Retsuden - Nishi Nihon Hen (1994)(SNK)(JP)[!]</description>
584     <year>199?</year>
585     <publisher>SNK</publisher>
586     <part name="cdrom" interface="neocd_cdrom">
587        <diskarea name="cdrom">
588           <disk name="mahjong kyo retsuden - nishi nihon hen (1994)(snk)(jp)[!]" sha1="8cc5def122d2638d7c63f02922150cc046ef3c1a"/>
589        </diskarea>
590     </part>
591  </software>
592
593  <software name="mslug">
594     <description>Metal Slug (1996)(SNK)(JP-US)[!]</description>
595     <year>199?</year>
596     <publisher>SNK</publisher>
597     <part name="cdrom" interface="neocd_cdrom">
598        <diskarea name="cdrom">
599           <disk name="metal slug (1996)(snk)(jp-us)[!]" sha1="b4f83b0b7046e9445f9cc16c40e57fd84b575ef9"/>
600        </diskarea>
601     </part>
602  </software>
603
604  <software name="mslug2">
605     <description>Metal Slug 2 (1998)(SNK)(JP)[!]</description>
606     <year>199?</year>
607     <publisher>SNK</publisher>
608     <part name="cdrom" interface="neocd_cdrom">
609        <diskarea name="cdrom">
610           <disk name="metal slug 2 (1998)(snk)(jp)[!]" sha1="8cc8fc89d4effec887c25ca18d6caf4893572302"/>
611        </diskarea>
612     </part>
613  </software>
614
615  <software name="mutnat">
616     <description>Mutation Nation (1995)(SNK)(JP-US)[!]</description>
617     <year>199?</year>
618     <publisher>SNK</publisher>
619     <part name="cdrom" interface="neocd_cdrom">
620        <diskarea name="cdrom">
621           <disk name="mutation nation (1995)(snk)(jp-us)[!]" sha1="624efc927077f87f7fea2d5b14bf3cf8c68a5514"/>
622        </diskarea>
623     </part>
624  </software>
625
626  <software name="nam1975">
627     <description>NAM-1975 (1994)(SNK)(JP-US)[!]</description>
628     <year>199?</year>
629     <publisher>SNK</publisher>
630     <part name="cdrom" interface="neocd_cdrom">
631        <diskarea name="cdrom">
632           <disk name="nam-1975 (1994)(snk)(jp-us)[!]" sha1="8a0ea9a98551286da76bb75137211b9f0aec5541"/>
633        </diskarea>
634     </part>
635  </software>
636
637  <software name="neodrift">
638     <description>Neo DriftOut (1996)(Visco)(JP)[!]</description>
639     <year>199?</year>
640     <publisher>SNK</publisher>
641     <part name="cdrom" interface="neocd_cdrom">
642        <diskarea name="cdrom">
643           <disk name="neo driftout (1996)(visco)(jp)[!]" sha1="9bad0585e54fc505c635d7d6e0ded79c175c6c8d"/>
644        </diskarea>
645     </part>
646  </software>
647
648  <software name="ncdspec">
649     <description>Neo Geo CD Special (1996)(SNK)(JP)[!]</description>
650     <year>199?</year>
651     <publisher>SNK</publisher>
652     <part name="cdrom" interface="neocd_cdrom">
653        <diskarea name="cdrom">
654           <disk name="neo geo cd special (1996)(snk)(jp)[!]" sha1="20ceb3e2cb21c6ccad99e0e21dc990affb4ecc39"/>
655        </diskarea>
656     </part>
657  </software>
658
659  <software name="turfmast">
660     <description>Neo Turf Masters (1996)(SNK)(JP)[!][Big Tournament Golf]</description>
661     <year>199?</year>
662     <publisher>SNK</publisher>
663     <part name="cdrom" interface="neocd_cdrom">
664        <diskarea name="cdrom">
665           <disk name="neo turf masters (1996)(snk)(jp)[!][big tournament golf]" sha1="806597142c6e7939009494c8f3a84fcbdc1fca38"/>
666        </diskarea>
667     </part>
668  </software>
669
670  <software name="ncombat">
671     <description>Ninja Combat (1994)(ADK)(JP)[!]</description>
672     <year>199?</year>
673     <publisher>SNK</publisher>
674     <part name="cdrom" interface="neocd_cdrom">
675        <diskarea name="cdrom">
676           <disk name="ninja combat (1994)(adk)(jp)[!]" sha1="713aefb92722b41926da4676adba6ea428420b19"/>
677        </diskarea>
678     </part>
679  </software>
680
681  <software name="ncommand">
682     <description>Ninja Commando (1994)(ADK)(JP)[!]</description>
683     <year>199?</year>
684     <publisher>SNK</publisher>
685     <part name="cdrom" interface="neocd_cdrom">
686        <diskarea name="cdrom">
687           <disk name="ninja commando (1994)(adk)(jp)[!]" sha1="55e4e119a9fb3cd284eda0712f1fd79c1aced861"/>
688        </diskarea>
689     </part>
690  </software>
691
692  <software name="ninjamas">
693     <description>Ninja Master's - Haou Ninpou-Chou (1996)(ADK)(JP)[!]</description>
694     <year>199?</year>
695     <publisher>SNK</publisher>
696     <part name="cdrom" interface="neocd_cdrom">
697        <diskarea name="cdrom">
698           <disk name="ninja master's - haou ninpou-chou (1996)(adk)(jp)[!]" sha1="b2a9a6cb38d66af1e02450a2967b4eeff39e2ad6"/>
699        </diskarea>
700     </part>
701  </software>
702
703  <software name="zintrick">
704     <description>Oshidashi Zintrick (1996)(ADK)(JP)[!][Zintrick]</description>
705     <year>199?</year>
706     <publisher>SNK</publisher>
707     <part name="cdrom" interface="neocd_cdrom">
708        <diskarea name="cdrom">
709           <disk name="oshidashi zintrick (1996)(adk)(jp)[!][zintrick]" sha1="46ab081316ffc6d5cca76fee679e80270fe1a8ab"/>
710        </diskarea>
711     </part>
712  </software>
713
714  <software name="overtop">
715     <description>OverTop (1996)(ADK)(JP)[!]</description>
716     <year>199?</year>
717     <publisher>SNK</publisher>
718     <part name="cdrom" interface="neocd_cdrom">
719        <diskarea name="cdrom">
720           <disk name="overtop (1996)(adk)(jp)[!]" sha1="e5d510ffa771cc8caa5a6ca7465ac69fe75ae3e5"/>
721        </diskarea>
722     </part>
723  </software>
724
725  <software name="pspikes2">
726     <description>Power Spikes II (1995)(Video System)(JP)[!]</description>
727     <year>199?</year>
728     <publisher>SNK</publisher>
729     <part name="cdrom" interface="neocd_cdrom">
730        <diskarea name="cdrom">
731           <disk name="power spikes ii (1995)(video system)(jp)[!]" sha1="a0b7b551971f2f0c76b92ad09f271f0d96575a5a"/>
732        </diskarea>
733     </part>
734  </software>
735
736  <software name="pulstar">
737     <description>Pulstar (1995)(SNK)(JP-US)[!]</description>
738     <year>199?</year>
739     <publisher>SNK</publisher>
740     <part name="cdrom" interface="neocd_cdrom">
741        <diskarea name="cdrom">
742           <disk name="pulstar (1995)(snk)(jp-us)[!]" sha1="a7836434d5180beb460c3100c29812dd3928228c"/>
743        </diskarea>
744     </part>
745  </software>
746
747  <software name="joyjoy">
748     <description>Puzzled (1994)(SNK)(JP-US)[!][Joy Joy Kid]</description>
749     <year>199?</year>
750     <publisher>SNK</publisher>
751     <part name="cdrom" interface="neocd_cdrom">
752        <diskarea name="cdrom">
753           <disk name="puzzled (1994)(snk)(jp-us)[!][joy joy kid]" sha1="738d0194042cc9c7093bcdbacfbb99f97dc07ba2"/>
754        </diskarea>
755     </part>
756  </software>
757
758  <software name="quizkof">
759     <description>Quiz King of Fighters (1995)(Saurus)(JP)[!]</description>
760     <year>199?</year>
761     <publisher>SNK</publisher>
762     <part name="cdrom" interface="neocd_cdrom">
763        <diskarea name="cdrom">
764           <disk name="quiz king of fighters (1995)(saurus)(jp)[!]" sha1="e361db324e54e4e523e46c2803c831e3b51750de"/>
765        </diskarea>
766     </part>
767  </software>
768
769  <software name="bjourney">
770     <description>Raguy (1994)(ADK)(JP)[!][Blue's Journey]</description>
771     <year>199?</year>
772     <publisher>SNK</publisher>
773     <part name="cdrom" interface="neocd_cdrom">
774        <diskarea name="cdrom">
775           <disk name="raguy (1994)(adk)(jp)[!][blue's journey]" sha1="b1063594b9e214765b95e0446c041c2a5663ae20"/>
776        </diskarea>
777     </part>
778  </software>
779
780  <software name="trally">
781     <description>Rally Chase (1994)(ADK)(JP)[!]</description>
782     <year>199?</year>
783     <publisher>SNK</publisher>
784     <part name="cdrom" interface="neocd_cdrom">
785        <diskarea name="cdrom">
786           <disk name="rally chase (1994)(adk)(jp)[!]" sha1="07a394aaf9937206f4bd61e2c9f46afe1a43aecb"/>
787        </diskarea>
788     </part>
789  </software>
790
791  <software name="rbff1">
792     <description>Real Bout Fatal Fury (1996)(SNK)(JP-US)[!][Real Bout Garou Densetsu][NGCD-095 MT B06+B08, NGCD-095E]</description>
793     <year>199?</year>
794     <publisher>SNK</publisher>
795     <part name="cdrom" interface="neocd_cdrom">
796        <diskarea name="cdrom">
797           <disk name="real bout fatal fury (1996)(snk)(jp-us)[!][real bout garou densetsu][ngcd-095 mt b06+b08, ngcd-095e]" sha1="634906800d14029e0e86f1ff531139ec47e213c6"/>
798        </diskarea>
799     </part>
800  </software>
801
802  <software name="rbff2">
803     <description>Real Bout Fatal Fury 2 - The Newcomers (1998)(SNK)(JP-US)[!][Real Bout Garou Densetsu 2 - The Newcomers]</description>
804     <year>199?</year>
805     <publisher>SNK</publisher>
806     <part name="cdrom" interface="neocd_cdrom">
807        <diskarea name="cdrom">
808           <disk name="real bout fatal fury 2 - the newcomers (1998)(snk)(jp-us)[!][real bout garou densetsu 2 - the newcomers]" sha1="d738ff116843cedeb719d5ee033d98e05f62d92e"/>
809        </diskarea>
810     </part>
811  </software>
812
813  <software name="rbffspec">
814     <description>Real Bout Fatal Fury Special (1997)(SNK)(JP)[!][Real Bout Special]</description>
815     <year>199?</year>
816     <publisher>SNK</publisher>
817     <part name="cdrom" interface="neocd_cdrom">
818        <diskarea name="cdrom">
819           <disk name="real bout fatal fury special (1997)(snk)(jp)[!][real bout special]" sha1="22da9b42359f4c9281dd9569baf043a6f86eb746"/>
820        </diskarea>
821     </part>
822  </software>
823
824  <software name="ridhero">
825     <description>Riding Hero (1995)(SNK)(JP-US)[!]</description>
826     <year>199?</year>
827     <publisher>SNK</publisher>
828     <part name="cdrom" interface="neocd_cdrom">
829        <diskarea name="cdrom">
830           <disk name="riding hero (1995)(snk)(jp-us)[!]" sha1="0289f10c5bfffad8575cda05088fad52e256474d"/>
831        </diskarea>
832     </part>
833  </software>
834
835  <software name="roboarmy">
836     <description>Robo Army (1995)(SNK)(JP-US)[!]</description>
837     <year>199?</year>
838     <publisher>SNK</publisher>
839     <part name="cdrom" interface="neocd_cdrom">
840        <diskarea name="cdrom">
841           <disk name="robo army (1995)(snk)(jp-us)[!]" sha1="1e3a592681df2ec8e7c983c7a2192ae8ae563121"/>
842        </diskarea>
843     </part>
844  </software>
845
846  <software name="samsho">
847     <description>Samurai Shodown (1994)(SNK)(JP-US)[!][Samurai Spirits][NGCD-045 MT B02+B05, NGCD-045E MT B02]</description>
848     <year>199?</year>
849     <publisher>SNK</publisher>
850     <part name="cdrom" interface="neocd_cdrom">
851        <diskarea name="cdrom">
852           <disk name="samurai shodown (1994)(snk)(jp-us)[!][samurai spirits][ngcd-045 mt b02+b05, ngcd-045e mt b02]" sha1="26181f36ae317a2eb93ade832d2cf0b9ccfd1c42"/>
853        </diskarea>
854     </part>
855  </software>
856
857  <software name="samsho2">
858     <description>Samurai Shodown II (1994)(SNK)(JP-US)[!][Shin Samurai Spirits - Haoumaru Jigoku Hen]</description>
859     <year>199?</year>
860     <publisher>SNK</publisher>
861     <part name="cdrom" interface="neocd_cdrom">
862        <diskarea name="cdrom">
863           <disk name="samurai shodown ii (1994)(snk)(jp-us)[!][shin samurai spirits - haoumaru jigoku hen]" sha1="ee5a32a77152f7408c62dc7321e5f2adf322d46c"/>
864        </diskarea>
865     </part>
866  </software>
867
868  <software name="samsho3">
869     <description>Samurai Shodown III (1995)(SNK)(JP)[!][Samurai Spirits - Zankurou Musouken][NGCD-087 MT A04]</description>
870     <year>199?</year>
871     <publisher>SNK</publisher>
872     <part name="cdrom" interface="neocd_cdrom">
873        <diskarea name="cdrom">
874           <disk name="samurai shodown iii (1995)(snk)(jp)[!][samurai spirits - zankurou musouken][ngcd-087 mt a04]" sha1="ad0b2dee64bf8b34e27ec2c1435859d568b49981"/>
875        </diskarea>
876     </part>
877  </software>
878
879  <software name="samsho4">
880     <description>Samurai Shodown IV - Amakusa's Revenge (1996)(SNK)(JP-US)[!][Samurai Spirits - Amakusa Kourin]</description>
881     <year>199?</year>
882     <publisher>SNK</publisher>
883     <part name="cdrom" interface="neocd_cdrom">
884        <diskarea name="cdrom">
885           <disk name="samurai shodown iv - amakusa's revenge (1996)(snk)(jp-us)[!][samurai spirits - amakusa kourin]" sha1="b90bff26f7977049935ca3d761f3ce692f117813"/>
886        </diskarea>
887     </part>
888  </software>
889
890  <software name="savagere">
891     <description>Savage Reign (1995)(SNK)(JP-US)[!][Fu'un Mokujiroku - Kakutou Sousei]</description>
892     <year>199?</year>
893     <publisher>SNK</publisher>
894     <part name="cdrom" interface="neocd_cdrom">
895        <diskarea name="cdrom">
896           <disk name="savage reign (1995)(snk)(jp-us)[!][fu'un mokujiroku - kakutou sousei]" sha1="67cdf5abc7f52b8c2f9d7ad5cec73528d6a456bd"/>
897        </diskarea>
898     </part>
899  </software>
900
901  <software name="sengoku">
902     <description>Sengoku (1995)(SNK)(JP-US)[!][Sengoku Denshou]</description>
903     <year>199?</year>
904     <publisher>SNK</publisher>
905     <part name="cdrom" interface="neocd_cdrom">
906        <diskarea name="cdrom">
907           <disk name="sengoku (1995)(snk)(jp-us)[!][sengoku denshou]" sha1="eac1b1a0b884bcd4d9e02891c85c34ea182ccdb1"/>
908        </diskarea>
909     </part>
910  </software>
911
912  <software name="sengoku2">
913     <description>Sengoku 2 (1995)(SNK)(JP-US)[!][Sengoku Denshou 2]</description>
914     <year>199?</year>
915     <publisher>SNK</publisher>
916     <part name="cdrom" interface="neocd_cdrom">
917        <diskarea name="cdrom">
918           <disk name="sengoku 2 (1995)(snk)(jp-us)[!][sengoku denshou 2]" sha1="52f016131ccd4f5835f5ddf35b20114c474c62d9"/>
919        </diskarea>
920     </part>
921  </software>
922
923  <software name="ragnagrd">
924     <description>Shinouken (1996)(Saurus)(JP)[!][Ragnagard]</description>
925     <year>199?</year>
926     <publisher>SNK</publisher>
927     <part name="cdrom" interface="neocd_cdrom">
928        <diskarea name="cdrom">
929           <disk name="shinouken (1996)(saurus)(jp)[!][ragnagard]" sha1="ae219a7382645c648a78a2126f3cd1dfc01cd708"/>
930        </diskarea>
931     </part>
932  </software>
933
934  <software name="samsrpg">
935     <description>Shinsetsu Samurai Spirits - Bushidohretsuden (1997)(SNK)(JP)[!][NGCD-0850 MT A01]</description>
936     <year>199?</year>
937     <publisher>SNK</publisher>
938     <part name="cdrom" interface="neocd_cdrom">
939        <diskarea name="cdrom">
940           <disk name="shinsetsu samurai spirits - bushidohretsuden (1997)(snk)(jp)[!][ngcd-0850 mt a01]" sha1="5df33f9533c2bc55c3354790bcafb1350039b438"/>
941        </diskarea>
942     </part>
943  </software>
944
945  <software name="mosyougi">
946     <description>Shougi no Tatsujin - Master of Syougi (1995)(ADK)(JP)[!]</description>
947     <year>199?</year>
948     <publisher>SNK</publisher>
949     <part name="cdrom" interface="neocd_cdrom">
950        <diskarea name="cdrom">
951           <disk name="shougi no tatsujin - master of syougi (1995)(adk)(jp)[!]" sha1="d61ec46215b07bb8d7f070e439212641cc409792"/>
952        </diskarea>
953     </part>
954  </software>
955
956  <software name="socbrawl">
957     <description>Soccer Brawl (1995)(SNK)(JP-US)[!]</description>
958     <year>199?</year>
959     <publisher>SNK</publisher>
960     <part name="cdrom" interface="neocd_cdrom">
961        <diskarea name="cdrom">
962           <disk name="soccer brawl (1995)(snk)(jp-us)[!]" sha1="97e9a937f211536197a96a9cbcafaec0ffc21662"/>
963        </diskarea>
964     </part>
965  </software>
966
967  <software name="stakwin">
968     <description>Stakes Winner - GI Kanzen Seiha Heno Machi (1996)(Saurus)(JP)[!]</description>
969     <year>199?</year>
970     <publisher>SNK</publisher>
971     <part name="cdrom" interface="neocd_cdrom">
972        <diskarea name="cdrom">
973           <disk name="stakes winner - gi kanzen seiha heno machi (1996)(saurus)(jp)[!]" sha1="e72ce998b2d91542df5ae05ac0714284b6926e5d"/>
974        </diskarea>
975     </part>
976  </software>
977
978  <software name="strhoop">
979     <description>Street Hoop (1995)(Data East)(JP-US)[!][Dunk Dream]</description>
980     <year>199?</year>
981     <publisher>SNK</publisher>
982     <part name="cdrom" interface="neocd_cdrom">
983        <diskarea name="cdrom">
984           <disk name="street hoop (1995)(data east)(jp-us)[!][dunk dream]" sha1="7bb971e4dd218a65c40e0f2f368711a6889e1b05"/>
985        </diskarea>
986     </part>
987  </software>
988
989  <software name="ssideki">
990     <description>Super Sidekicks (1995)(SNK)(JP-US)[!][Tokuten Oh]</description>
991     <year>199?</year>
992     <publisher>SNK</publisher>
993     <part name="cdrom" interface="neocd_cdrom">
994        <diskarea name="cdrom">
995           <disk name="super sidekicks (1995)(snk)(jp-us)[!][tokuten oh]" sha1="9bda953cb1b5354cb19ec3f8d2792de6bd1fba1a"/>
996        </diskarea>
997     </part>
998  </software>
999
1000  <software name="ssideki2">
1001     <description>Super Sidekicks 2 (1994)(SNK)(JP-US)[!][Tokuten Oh 2]</description>
1002     <year>199?</year>
1003     <publisher>SNK</publisher>
1004     <part name="cdrom" interface="neocd_cdrom">
1005        <diskarea name="cdrom">
1006           <disk name="super sidekicks 2 (1994)(snk)(jp-us)[!][tokuten oh 2]" sha1="ef2a5fee5502561d25922aad1656319de18c72a0"/>
1007        </diskarea>
1008     </part>
1009  </software>
1010
1011  <software name="ssideki3">
1012     <description>Super Sidekicks 3 - The Next Glory (1995)(SNK)(JP-US)[!][Tokuten Oh 3 - Eikoue No Chousen]</description>
1013     <year>199?</year>
1014     <publisher>SNK</publisher>
1015     <part name="cdrom" interface="neocd_cdrom">
1016        <diskarea name="cdrom">
1017           <disk name="super sidekicks 3 - the next glory (1995)(snk)(jp-us)[!][tokuten oh 3 - eikoue no chousen]" sha1="ac8e645615318789535513b5861d99d6e45b99f9"/>
1018        </diskarea>
1019     </part>
1020  </software>
1021
1022  <software name="superspy">
1023     <description>Super Spy, The (1994)(SNK)(JP-US)[!]</description>
1024     <year>199?</year>
1025     <publisher>SNK</publisher>
1026     <part name="cdrom" interface="neocd_cdrom">
1027        <diskarea name="cdrom">
1028           <disk name="super spy, the (1994)(snk)(jp-us)[!]" sha1="46297a94d8db0e4e6abaebbf33e4560cdec9be85"/>
1029        </diskarea>
1030     </part>
1031  </software>
1032
1033  <software name="kabukikl">
1034     <description>Tengai Makyou Shinden - Far East of Eden (1995)(Hudson)(JP)[!][Kabuki Klash]</description>
1035     <year>199?</year>
1036     <publisher>SNK</publisher>
1037     <part name="cdrom" interface="neocd_cdrom">
1038        <diskarea name="cdrom">
1039           <disk name="tengai makyou shinden - far east of eden (1995)(hudson)(jp)[!][kabuki klash]" sha1="922c307ef433c412d65a1ff3f8a8327fdfb1d1c9"/>
1040        </diskarea>
1041     </part>
1042  </software>
1043
1044  <software name="tophuntr">
1045     <description>Top Hunter - Roddy &amp; Cathy (1994)(SNK)(JP-US)[!][NGCD-046 MT B02, NGCD-046E]</description>
1046     <year>199?</year>
1047     <publisher>SNK</publisher>
1048     <part name="cdrom" interface="neocd_cdrom">
1049        <diskarea name="cdrom">
1050           <disk name="top hunter - roddy &amp; cathy (1994)(snk)(jp-us)[!][ngcd-046 mt b02, ngcd-046e]" sha1="fdde6325416fabf1929b61f64c87a5398e6e8e5d"/>
1051        </diskarea>
1052     </part>
1053  </software>
1054
1055  <software name="tpgolf">
1056     <description>Top Player's Golf (1994)(SNK)(JP-US)[!]</description>
1057     <year>199?</year>
1058     <publisher>SNK</publisher>
1059     <part name="cdrom" interface="neocd_cdrom">
1060        <diskarea name="cdrom">
1061           <disk name="top player's golf (1994)(snk)(jp-us)[!]" sha1="fe6326f015917a87fd1f436311be6f48def2b2cf"/>
1062        </diskarea>
1063     </part>
1064  </software>
1065
1066  <software name="twinspri">
1067     <description>Twinkle Star Sprites (1997)(ADK)(JP)[!]</description>
1068     <year>199?</year>
1069     <publisher>SNK</publisher>
1070     <part name="cdrom" interface="neocd_cdrom">
1071        <diskarea name="cdrom">
1072           <disk name="twinkle star sprites (1997)(adk)(jp)[!]" sha1="169ad6845fe9baa6ca3e08f92e554ede71b3b13e"/>
1073        </diskarea>
1074     </part>
1075  </software>
1076
1077  <software name="viewpoin">
1078     <description>Viewpoint (1995)(SNK)(JP-US)[!]</description>
1079     <year>199?</year>
1080     <publisher>SNK</publisher>
1081     <part name="cdrom" interface="neocd_cdrom">
1082        <diskarea name="cdrom">
1083           <disk name="viewpoint (1995)(snk)(jp-us)[!]" sha1="8a13861b34cbe5953843a535c7b50d691aefa069"/>
1084        </diskarea>
1085     </part>
1086  </software>
1087
1088  <software name="gowcaizr">
1089     <description>Voltage Fighter Gowcaizer (1995)(Technos)(JP)[!][Choujin Gakuen Gowcaizer]</description>
1090     <year>199?</year>
1091     <publisher>SNK</publisher>
1092     <part name="cdrom" interface="neocd_cdrom">
1093        <diskarea name="cdrom">
1094           <disk name="voltage fighter gowcaizer (1995)(technos)(jp)[!][choujin gakuen gowcaizer]" sha1="9a645a7dc3f723b55393090f11d5ae425f7411c6"/>
1095        </diskarea>
1096     </part>
1097  </software>
1098
1099  <software name="wjammers">
1100     <description>Windjammers (1995)(SNK)(JP-US)[!][Flying Power Disc]</description>
1101     <year>199?</year>
1102     <publisher>SNK</publisher>
1103     <part name="cdrom" interface="neocd_cdrom">
1104        <diskarea name="cdrom">
1105           <disk name="windjammers (1995)(snk)(jp-us)[!][flying power disc]" sha1="2d4dc090fa7d55f04c2f6484f1e892d93ce42aa4"/>
1106        </diskarea>
1107     </part>
1108  </software>
1109
1110  <software name="wh1">
1111     <description>World Heroes (1995)(ADK)(JP-US)[!]</description>
1112     <year>199?</year>
1113     <publisher>SNK</publisher>
1114     <part name="cdrom" interface="neocd_cdrom">
1115        <diskarea name="cdrom">
1116           <disk name="world heroes (1995)(adk)(jp-us)[!]" sha1="10b4a5ef5613982edbc07da1894208ec6a468583"/>
1117        </diskarea>
1118     </part>
1119  </software>
1120
1121  <software name="wh2">
1122     <description>World Heroes 2 (1995)(ADK)(JP-US)[!]</description>
1123     <year>199?</year>
1124     <publisher>SNK</publisher>
1125     <part name="cdrom" interface="neocd_cdrom">
1126        <diskarea name="cdrom">
1127           <disk name="world heroes 2 (1995)(adk)(jp-us)[!]" sha1="4dba3f8107f798c089d8be7b1b1fbe2dfb4e1d8b"/>
1128        </diskarea>
1129     </part>
1130  </software>
1131
1132  <software name="wh2j">
1133     <description>World Heroes 2 Jet (1994)(ADK)(JP)[!]</description>
1134     <year>199?</year>
1135     <publisher>SNK</publisher>
1136     <part name="cdrom" interface="neocd_cdrom">
1137        <diskarea name="cdrom">
1138           <disk name="world heroes 2 jet (1994)(adk)(jp)[!]" sha1="b2ce705d16b82963a2eafbbefe37975225b7b145"/>
1139        </diskarea>
1140     </part>
1141  </software>
1142
1143  <software name="whp">
1144     <description>World Heroes Perfect (1995)(ADK)(JP-US)[!]</description>
1145     <year>199?</year>
1146     <publisher>SNK</publisher>
1147     <part name="cdrom" interface="neocd_cdrom">
1148        <diskarea name="cdrom">
1149           <disk name="world heroes perfect (1995)(adk)(jp-us)[!]" sha1="7d444937c98b08845a00f965ced83e6677109cb7"/>
1150        </diskarea>
1151     </part>
1152  </software>
1153
1154  -->
1155 
1156</softwarelist>

Previous 199869 Revisions Next


© 1997-2024 The MAME Team