Previous 15994 Revisions Next

r7955 Saturday 1st May, 2010 at 10:47:45 UTC by Fabio Priuli
[CBM] moved prg, p00 etc. quickload to formats
[src/mess]mess.mak
[src/mess/drivers]c128.c c16.c c64.c c65.c cbmb.c pet.c vic20.c
[src/mess/formats]cbm_snqk.c* cbm_snqk.h*
[src/mess/includes]cbm.h
[src/mess/machine]cbm.c

src/mess/includes/cbm.h
r7954r7955
77#ifndef CBM_H_
88#define CBM_H_
99
10#include "devices/snapquik.h"
1110#include "devices/cassette.h"
1211
1312
r7954r7955
2524
2625/***********************************************
2726
28    CBM Quickloads
29
30***********************************************/
31
32QUICKLOAD_LOAD( cbm_pet1 );
33QUICKLOAD_LOAD( cbm_pet );
34QUICKLOAD_LOAD( cbm_c16 );
35QUICKLOAD_LOAD( cbm_c64 );
36QUICKLOAD_LOAD( cbm_vc20 );
37QUICKLOAD_LOAD( cbmb );
38QUICKLOAD_LOAD( p500 );
39QUICKLOAD_LOAD( cbm_c65 );
40
41#define CBM_QUICKLOAD_DELAY_SECONDS 3
42
43
44/***********************************************
45
4627    CBM Cartridges
4728
4829***********************************************/
src/mess/machine/cbm.c
r7954r7955
11#include "emu.h"
2#include "devices/cartslot.h"
32#include "devices/cassette.h"
43#include "crsshair.h"
54#include "includes/cbm.h"
r7954r7955
326325
327326/***********************************************
328327
329    CBM Quickloads
330
331***********************************************/
332
333
334static int general_cbm_loadsnap( running_device *image, const char *file_type, int snapshot_size,
335   offs_t offset, void (*cbm_sethiaddress)(running_machine *machine, UINT16 hiaddress) )
336{
337   char buffer[7];
338   UINT8 *data = NULL;
339   UINT32 bytesread;
340   UINT16 address = 0;
341   int i;
342   const address_space *space = cpu_get_address_space(image->machine->firstcpu, ADDRESS_SPACE_PROGRAM);
343
344   if (!file_type)
345      goto error;
346
347   if (!mame_stricmp(file_type, "prg"))
348   {
349      /* prg files */
350   }
351   else if (!mame_stricmp(file_type, "p00"))
352   {
353      /* p00 files */
354      if (image_fread(image, buffer, sizeof(buffer)) != sizeof(buffer))
355         goto error;
356      if (memcmp(buffer, "C64File", sizeof(buffer)))
357         goto error;
358      image_fseek(image, 26, SEEK_SET);
359      snapshot_size -= 26;
360   }
361   else if (!mame_stricmp(file_type, "t64"))
362   {
363      /* t64 files - for GB64 Single T64s loading to x0801 - header is always the same size */
364      if (image_fread(image, buffer, sizeof(buffer)) != sizeof(buffer))
365         goto error;
366      if (memcmp(buffer, "C64 tape image file", sizeof(buffer)))
367         goto error;
368      image_fseek(image, 94, SEEK_SET);
369      snapshot_size -= 94;
370   }
371   else
372   {
373      goto error;
374   }
375
376   image_fread(image, &address, 2);
377   address = LITTLE_ENDIANIZE_INT16(address);
378   if (!mame_stricmp(file_type, "t64"))
379      address = 2049;
380   snapshot_size -= 2;
381
382   data = (UINT8*)malloc(snapshot_size);
383   if (!data)
384      goto error;
385
386   bytesread = image_fread(image, data, snapshot_size);
387   if (bytesread != snapshot_size)
388      goto error;
389
390   for (i = 0; i < snapshot_size; i++)
391      memory_write_byte(space, address + i + offset, data[i]);
392
393   cbm_sethiaddress(image->machine, address + snapshot_size);
394   free(data);
395   return INIT_PASS;
396
397error:
398   if (data)
399      free(data);
400   return INIT_FAIL;
401}
402
403static void cbm_quick_sethiaddress( running_machine *machine, UINT16 hiaddress )
404{
405   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
406
407   memory_write_byte(space, 0x31, hiaddress & 0xff);
408   memory_write_byte(space, 0x2f, hiaddress & 0xff);
409   memory_write_byte(space, 0x2d, hiaddress & 0xff);
410   memory_write_byte(space, 0x32, hiaddress >> 8);
411   memory_write_byte(space, 0x30, hiaddress >> 8);
412   memory_write_byte(space, 0x2e, hiaddress >> 8);
413}
414
415QUICKLOAD_LOAD( cbm_c16 )
416{
417   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_quick_sethiaddress);
418}
419
420QUICKLOAD_LOAD( cbm_c64 )
421{
422   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_quick_sethiaddress);
423}
424
425QUICKLOAD_LOAD( cbm_vc20 )
426{
427   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_quick_sethiaddress);
428}
429
430static void cbm_pet_quick_sethiaddress( running_machine *machine, UINT16 hiaddress )
431{
432   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
433
434   memory_write_byte(space, 0x2e, hiaddress & 0xff);
435   memory_write_byte(space, 0x2c, hiaddress & 0xff);
436   memory_write_byte(space, 0x2a, hiaddress & 0xff);
437   memory_write_byte(space, 0x2f, hiaddress >> 8);
438   memory_write_byte(space, 0x2d, hiaddress >> 8);
439   memory_write_byte(space, 0x2b, hiaddress >> 8);
440}
441
442QUICKLOAD_LOAD( cbm_pet )
443{
444   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_pet_quick_sethiaddress);
445}
446
447static void cbm_pet1_quick_sethiaddress(running_machine *machine, UINT16 hiaddress)
448{
449   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
450
451   memory_write_byte(space, 0x80, hiaddress & 0xff);
452   memory_write_byte(space, 0x7e, hiaddress & 0xff);
453   memory_write_byte(space, 0x7c, hiaddress & 0xff);
454   memory_write_byte(space, 0x81, hiaddress >> 8);
455   memory_write_byte(space, 0x7f, hiaddress >> 8);
456   memory_write_byte(space, 0x7d, hiaddress >> 8);
457}
458
459QUICKLOAD_LOAD( cbm_pet1 )
460{
461   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_pet1_quick_sethiaddress);
462}
463
464static void cbmb_quick_sethiaddress(running_machine *machine, UINT16 hiaddress)
465{
466   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
467
468   memory_write_byte(space, 0xf0046, hiaddress & 0xff);
469   memory_write_byte(space, 0xf0047, hiaddress >> 8);
470}
471
472QUICKLOAD_LOAD( cbmb )
473{
474   return general_cbm_loadsnap(image, file_type, quickload_size, 0x10000, cbmb_quick_sethiaddress);
475}
476
477QUICKLOAD_LOAD( p500 )
478{
479   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbmb_quick_sethiaddress);
480}
481
482static void cbm_c65_quick_sethiaddress( running_machine *machine, UINT16 hiaddress )
483{
484   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
485
486   memory_write_byte(space, 0x82, hiaddress & 0xff);
487   memory_write_byte(space, 0x83, hiaddress >> 8);
488}
489
490QUICKLOAD_LOAD( cbm_c65 )
491{
492   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_c65_quick_sethiaddress);
493}
494
495
496/***********************************************
497
498328    CBM Cartridges
499329
500330***********************************************/
src/mess/formats/cbm_snqk.c
r0r7955
1/***********************************************
2 
3 CBM Quickloads
4 
5 ***********************************************/
6
7#include "emu.h"
8#include "cbm_snqk.h"
9
10static int general_cbm_loadsnap( running_device *image, const char *file_type, int snapshot_size,
11                        offs_t offset, void (*cbm_sethiaddress)(running_machine *machine, UINT16 hiaddress) )
12{
13   char buffer[7];
14   UINT8 *data = NULL;
15   UINT32 bytesread;
16   UINT16 address = 0;
17   int i;
18   const address_space *space = cpu_get_address_space(image->machine->firstcpu, ADDRESS_SPACE_PROGRAM);
19   
20   if (!file_type)
21      goto error;
22   
23   if (!mame_stricmp(file_type, "prg"))
24   {
25      /* prg files */
26   }
27   else if (!mame_stricmp(file_type, "p00"))
28   {
29      /* p00 files */
30      if (image_fread(image, buffer, sizeof(buffer)) != sizeof(buffer))
31         goto error;
32      if (memcmp(buffer, "C64File", sizeof(buffer)))
33         goto error;
34      image_fseek(image, 26, SEEK_SET);
35      snapshot_size -= 26;
36   }
37   else if (!mame_stricmp(file_type, "t64"))
38   {
39      /* t64 files - for GB64 Single T64s loading to x0801 - header is always the same size */
40      if (image_fread(image, buffer, sizeof(buffer)) != sizeof(buffer))
41         goto error;
42      if (memcmp(buffer, "C64 tape image file", sizeof(buffer)))
43         goto error;
44      image_fseek(image, 94, SEEK_SET);
45      snapshot_size -= 94;
46   }
47   else
48   {
49      goto error;
50   }
51   
52   image_fread(image, &address, 2);
53   address = LITTLE_ENDIANIZE_INT16(address);
54   if (!mame_stricmp(file_type, "t64"))
55      address = 2049;
56   snapshot_size -= 2;
57   
58   data = (UINT8*)malloc(snapshot_size);
59   if (!data)
60      goto error;
61   
62   bytesread = image_fread(image, data, snapshot_size);
63   if (bytesread != snapshot_size)
64      goto error;
65   
66   for (i = 0; i < snapshot_size; i++)
67      memory_write_byte(space, address + i + offset, data[i]);
68   
69   cbm_sethiaddress(image->machine, address + snapshot_size);
70   free(data);
71   return INIT_PASS;
72   
73error:
74   if (data)
75      free(data);
76   return INIT_FAIL;
77}
78
79static void cbm_quick_sethiaddress( running_machine *machine, UINT16 hiaddress )
80{
81   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
82   
83   memory_write_byte(space, 0x31, hiaddress & 0xff);
84   memory_write_byte(space, 0x2f, hiaddress & 0xff);
85   memory_write_byte(space, 0x2d, hiaddress & 0xff);
86   memory_write_byte(space, 0x32, hiaddress >> 8);
87   memory_write_byte(space, 0x30, hiaddress >> 8);
88   memory_write_byte(space, 0x2e, hiaddress >> 8);
89}
90
91QUICKLOAD_LOAD( cbm_c16 )
92{
93   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_quick_sethiaddress);
94}
95
96QUICKLOAD_LOAD( cbm_c64 )
97{
98   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_quick_sethiaddress);
99}
100
101QUICKLOAD_LOAD( cbm_vc20 )
102{
103   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_quick_sethiaddress);
104}
105
106static void cbm_pet_quick_sethiaddress( running_machine *machine, UINT16 hiaddress )
107{
108   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
109   
110   memory_write_byte(space, 0x2e, hiaddress & 0xff);
111   memory_write_byte(space, 0x2c, hiaddress & 0xff);
112   memory_write_byte(space, 0x2a, hiaddress & 0xff);
113   memory_write_byte(space, 0x2f, hiaddress >> 8);
114   memory_write_byte(space, 0x2d, hiaddress >> 8);
115   memory_write_byte(space, 0x2b, hiaddress >> 8);
116}
117
118QUICKLOAD_LOAD( cbm_pet )
119{
120   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_pet_quick_sethiaddress);
121}
122
123static void cbm_pet1_quick_sethiaddress(running_machine *machine, UINT16 hiaddress)
124{
125   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
126   
127   memory_write_byte(space, 0x80, hiaddress & 0xff);
128   memory_write_byte(space, 0x7e, hiaddress & 0xff);
129   memory_write_byte(space, 0x7c, hiaddress & 0xff);
130   memory_write_byte(space, 0x81, hiaddress >> 8);
131   memory_write_byte(space, 0x7f, hiaddress >> 8);
132   memory_write_byte(space, 0x7d, hiaddress >> 8);
133}
134
135QUICKLOAD_LOAD( cbm_pet1 )
136{
137   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_pet1_quick_sethiaddress);
138}
139
140static void cbmb_quick_sethiaddress(running_machine *machine, UINT16 hiaddress)
141{
142   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
143   
144   memory_write_byte(space, 0xf0046, hiaddress & 0xff);
145   memory_write_byte(space, 0xf0047, hiaddress >> 8);
146}
147
148QUICKLOAD_LOAD( cbmb )
149{
150   return general_cbm_loadsnap(image, file_type, quickload_size, 0x10000, cbmb_quick_sethiaddress);
151}
152
153QUICKLOAD_LOAD( p500 )
154{
155   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbmb_quick_sethiaddress);
156}
157
158static void cbm_c65_quick_sethiaddress( running_machine *machine, UINT16 hiaddress )
159{
160   const address_space *space = cpu_get_address_space(machine->firstcpu, ADDRESS_SPACE_PROGRAM);
161   
162   memory_write_byte(space, 0x82, hiaddress & 0xff);
163   memory_write_byte(space, 0x83, hiaddress >> 8);
164}
165
166QUICKLOAD_LOAD( cbm_c65 )
167{
168   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_c65_quick_sethiaddress);
169}
src/mess/formats/cbm_snqk.h
r0r7955
1/***********************************************
2 
3    CBM Quickloads
4 
5 ***********************************************/
6
7#ifndef __CBM_SNQK_H__
8#define __CBM_SNQK_H__
9
10#include "devices/snapquik.h"
11
12#define CBM_QUICKLOAD_DELAY_SECONDS 3
13
14QUICKLOAD_LOAD( cbm_pet1 );
15QUICKLOAD_LOAD( cbm_pet );
16QUICKLOAD_LOAD( cbm_c16 );
17QUICKLOAD_LOAD( cbm_c64 );
18QUICKLOAD_LOAD( cbm_vc20 );
19QUICKLOAD_LOAD( cbmb );
20QUICKLOAD_LOAD( p500 );
21QUICKLOAD_LOAD( cbm_c65 );
22
23#endif  /* __CBM_SNQK_H__ */
src/mess/mess.mak
r7954r7955
725725   $(MESS_MACHINE)/c2040.o      \
726726   $(MESS_MACHINE)/c8280.o      \
727727   $(MESS_MACHINE)/c9060.o      \
728   $(MESS_FORMATS)/d64_dsk.o   \
729   $(MESS_FORMATS)/g64_dsk.o   \
730   $(MESS_FORMATS)/d81_dsk.o   \
731728   $(MESS_DRIVERS)/clcd.o      \
732   $(MESS_FORMATS)/cbm_tap.o   \
733729   $(MESS_MACHINE)/6525tpi.o   \
734730   $(MESS_MACHINE)/cbm.o      \
735731   $(MESS_MACHINE)/cbmipt.o   \
r7954r7955
740736   $(MESS_VIDEO)/vdc8563.o      \
741737   $(MESS_VIDEO)/vic6567.o      \
742738   $(MESS_VIDEO)/vic4567.o      \
739   $(MESS_FORMATS)/d64_dsk.o   \
740   $(MESS_FORMATS)/g64_dsk.o   \
741   $(MESS_FORMATS)/d81_dsk.o   \
742   $(MESS_FORMATS)/cbm_tap.o   \
743   $(MESS_FORMATS)/cbm_snqk.o   \
743744
744745$(MESSOBJ)/cccp.a:            \
745746   $(MESS_VIDEO)/lviv.o      \
src/mess/drivers/c65.c
r7954r7955
6161
6262/* devices config */
6363#include "includes/cbm.h"
64#include "formats/cbm_snqk.h"
6465
6566#include "includes/c64.h"
6667#include "includes/c65.h"
src/mess/drivers/cbmb.c
r7954r7955
102102#include "machine/6525tpi.h"
103103#include "machine/6526cia.h"
104104
105#include "formats/cbm_snqk.h"
105106#include "includes/cbm.h"
106107#include "includes/cbmb.h"
107108#include "machine/ieee488.h"
src/mess/drivers/vic20.c
r7954r7955
7474#include "emu.h"
7575#include "includes/vic20.h"
7676#include "includes/cbm.h"
77#include "formats/cbm_snqk.h"
7778#include "cpu/m6502/m6502.h"
7879#include "devices/cartslot.h"
7980#include "devices/messram.h"
r7954r7955
643644   MDRV_VIA6522_ADD(M6522_0_TAG, 0, vic20_via0_intf)
644645   MDRV_VIA6522_ADD(M6522_1_TAG, 0, vic20_via1_intf)
645646
646   MDRV_QUICKLOAD_ADD("quickload", cbm_vc20, "p00,prg", 3)
647   MDRV_QUICKLOAD_ADD("quickload", cbm_vc20, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
647648   MDRV_CASSETTE_ADD(CASSETTE_TAG, cbm_cassette_config )
648649   MDRV_CBM_IEC_ADD(IEC_TAG, cbm_iec_daisy)
649650   MDRV_C1540_ADD(C1540_TAG, IEC_TAG, 8)
src/mess/drivers/c128.c
r7954r7955
186186
187187/* devices config */
188188#include "includes/cbm.h"
189#include "formats/cbm_snqk.h"
189190#include "machine/cbmiec.h"
190191
191192#include "includes/c128.h"
src/mess/drivers/pet.c
r7954r7955
392392
393393/* devices config */
394394#include "includes/cbm.h"
395#include "formats/cbm_snqk.h"
395396#include "machine/ieee488.h"
396397
397398/*************************************
src/mess/drivers/c16.c
r7954r7955
117117#include "audio/t6721.h"
118118#include "cpu/m6502/m6502.h"
119119#include "devices/messram.h"
120#include "formats/cbm_snqk.h"
120121#include "includes/cbm.h"
121122#include "includes/c16.h"
122123#include "machine/c1541.h"
src/mess/drivers/c64.c
r7954r7955
338338
339339/* devices config */
340340#include "includes/cbm.h"
341#include "formats/cbm_snqk.h"
341342#include "machine/cbmiec.h"
342343#include "machine/c1541.h"
343344

Previous 15994 Revisions Next


© 1998-2018 The MESS Team