Mercurial > repos > blastem
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: |