comparison menu.c @ 1111:2eb54e24914e

Mostly working changes to allow support for multiple emulated system types in main blastem program
author Michael Pavone <pavone@retrodev.com>
date Mon, 19 Dec 2016 13:28:18 -0800
parents 22e87b739ad6
children 0a34e31c4fd0
comparison
equal deleted inserted replaced
1110:d1eed3b1121c 1111:2eb54e24914e
267 } 267 }
268 case 2: { 268 case 2: {
269 char buf[4096]; 269 char buf[4096];
270 copy_string_from_guest(m68k, dst, buf, sizeof(buf)); 270 copy_string_from_guest(m68k, dst, buf, sizeof(buf));
271 char const *pieces[] = {menu->curpath, PATH_SEP, buf}; 271 char const *pieces[] = {menu->curpath, PATH_SEP, buf};
272 gen->next_rom = alloc_concat_m(3, pieces); 272 gen->header.next_rom = alloc_concat_m(3, pieces);
273 m68k->should_return = 1; 273 m68k->should_return = 1;
274 break; 274 break;
275 } 275 }
276 case 3: { 276 case 3: {
277 switch (dst) 277 switch (dst)
278 { 278 {
279 case 1: 279 case 1:
280 m68k->should_return = 1; 280 m68k->should_return = 1;
281 gen->should_exit = 1; 281 gen->header.should_exit = 1;
282 break; 282 break;
283 case 2: 283 case 2:
284 m68k->should_return = 1; 284 m68k->should_return = 1;
285 break; 285 break;
286 } 286 }
288 break; 288 break;
289 } 289 }
290 case 4: { 290 case 4: {
291 char *buffer = malloc(SAVE_INFO_BUFFER_SIZE); 291 char *buffer = malloc(SAVE_INFO_BUFFER_SIZE);
292 char *cur = buffer; 292 char *cur = buffer;
293 if (gen->next_context && gen->next_context->save_dir) { 293 if (gen->header.next_context && gen->header.next_context->save_dir) {
294 char *end = buffer + SAVE_INFO_BUFFER_SIZE; 294 char *end = buffer + SAVE_INFO_BUFFER_SIZE;
295 char slotfile[] = "slot_0.gst"; 295 char slotfile[] = "slot_0.gst";
296 char const * parts[3] = {gen->next_context->save_dir, PATH_SEP, slotfile}; 296 char const * parts[3] = {gen->header.next_context->save_dir, PATH_SEP, slotfile};
297 struct tm ltime; 297 struct tm ltime;
298 char *fname; 298 char *fname;
299 time_t modtime; 299 time_t modtime;
300 for (int i = 0; i < 10 && cur < end; i++) 300 for (int i = 0; i < 10 && cur < end; i++)
301 { 301 {
336 } 336 }
337 copy_to_guest(m68k, dst, buffer, cur-buffer); 337 copy_to_guest(m68k, dst, buffer, cur-buffer);
338 break; 338 break;
339 case 5: 339 case 5:
340 //save state 340 //save state
341 if (gen->next_context) { 341 if (gen->header.next_context) {
342 gen->next_context->save_state = dst + 1; 342 gen->header.next_context->save_state = dst + 1;
343 } 343 }
344 m68k->should_return = 1; 344 m68k->should_return = 1;
345 break; 345 break;
346 case 6: 346 case 6:
347 //load state 347 //load state
348 if (gen->next_context && gen->next_context->save_dir) { 348 if (gen->header.next_context && gen->header.next_context->save_dir) {
349 char numslotname[] = "slot_0.gst"; 349 char numslotname[] = "slot_0.gst";
350 char *slotname; 350 char *slotname;
351 if (dst == QUICK_SAVE_SLOT) { 351 if (dst == QUICK_SAVE_SLOT) {
352 slotname = "quicksave.gst"; 352 slotname = "quicksave.gst";
353 } else { 353 } else {
354 numslotname[5] = '0' + dst; 354 numslotname[5] = '0' + dst;
355 slotname = numslotname; 355 slotname = numslotname;
356 } 356 }
357 char const *parts[] = {gen->next_context->save_dir, PATH_SEP, slotname}; 357 char const *parts[] = {gen->header.next_context->save_dir, PATH_SEP, slotname};
358 char *gstpath = alloc_concat_m(3, parts); 358 char *gstpath = alloc_concat_m(3, parts);
359 uint32_t pc = load_gst(gen->next_context, gstpath); 359 genesis_context *next = (genesis_context *)gen->header.next_context;
360 uint32_t pc = load_gst(next, gstpath);
360 free(gstpath); 361 free(gstpath);
361 if (!pc) { 362 if (!pc) {
362 break; 363 break;
363 } 364 }
364 gen->next_context->m68k->resume_pc = get_native_address_trans(gen->next_context->m68k, pc); 365 next->m68k->resume_pc = get_native_address_trans(next->m68k, pc);
365 } 366 }
366 m68k->should_return = 1; 367 m68k->should_return = 1;
367 break; 368 break;
368 } 369 }
369 default: 370 default: