Previous 15994 Revisions Next

r15545 Friday 6th July, 2012 at 11:42:30 UTC by Curt Coder
[SC3000] Added support for the SC-3000 Survivors *.bit cassette file format. [Curt Coder, SC-3000 Survivor]
[src/lib]lib.mak
[src/lib/formats]sc3000_bit.c* sc3000_bit.h*
[src/mess/drivers]sg1000.c
[src/mess/includes]sg1000.h

src/lib/formats/sc3000_bit.c
r0r15545
1/*********************************************************************
2
3    formats/sc3000_bit.c
4
5    Cassette code for Sega SC-3000 *.bit files
6
7*********************************************************************/
8
9#include "sc3000_bit.h"
10
11/***************************************************************************
12    PARAMETERS
13***************************************************************************/
14
15#define LOG 0
16
17/***************************************************************************
18    IMPLEMENTATION
19***************************************************************************/
20
21/*-------------------------------------------------
22    CassetteModulation sc3000_bit_modulation
23-------------------------------------------------*/
24
25static const struct CassetteModulation sc3000_bit_modulation =
26{
27   CASSETTE_MODULATION_SINEWAVE,
28   1200.0 - 300, 1200.0, 1200.0 + 300,
29   2400.0 - 600, 2400.0, 2400.0 + 600
30};
31
32/*-------------------------------------------------
33    sc3000_bit_identify - identify cassette
34-------------------------------------------------*/
35
36static casserr_t sc3000_bit_identify(cassette_image *cassette, struct CassetteOptions *opts)
37{
38   return cassette_modulation_identify( cassette, &sc3000_bit_modulation, opts);
39}
40
41/*-------------------------------------------------
42    sc3000_bit_load - load cassette
43-------------------------------------------------*/
44
45#define MODULATE(_value) \
46   for (int i = 0; i < (_value ? 2 : 1); i++) { \
47      err = cassette_put_modulated_data_bit(cassette, 0, time_index, _value, &sc3000_bit_modulation, &time_displacement);\
48      if (err) return err;\
49      time_index += time_displacement;\
50   }
51
52static casserr_t sc3000_bit_load(cassette_image *cassette)
53{
54   casserr_t err;
55   UINT64 image_size = cassette_image_size(cassette);
56   UINT64 image_pos = 0;
57   double time_index = 0.0;
58   double time_displacement;
59   UINT8 data;
60
61   while (image_pos < image_size)
62   {
63      cassette_image_read(cassette, &data, image_pos, 1);
64
65      switch (data)
66      {
67      case '1':
68         MODULATE(1);
69         break;
70   
71      case '0':
72         MODULATE(0);
73         break;
74   
75      case ' ':
76         err = cassette_put_sample( cassette, 0, time_index, 1/1200.0, 0);
77         if (err) return err;
78         time_index += 1/1200.0;
79         break;
80      }
81
82      image_pos++;
83   }
84
85   return CASSETTE_ERROR_SUCCESS;
86}
87
88/*-------------------------------------------------
89    CassetteFormat sc3000_bit_cassette_format
90-------------------------------------------------*/
91
92const struct CassetteFormat sc3000_bit_format =
93{
94   "bit",
95   sc3000_bit_identify,
96   sc3000_bit_load,
97   NULL
98};
99
100CASSETTE_FORMATLIST_START( sc3000_cassette_formats )
101   CASSETTE_FORMAT(sc3000_bit_format)
102CASSETTE_FORMATLIST_END
src/lib/formats/sc3000_bit.h
r0r15545
1/*********************************************************************
2
3    formats/sc3000_bit.h
4
5    Cassette code for Sega SC-3000 *.bit files
6
7*********************************************************************/
8
9#pragma once
10
11#ifndef __SC3000_BIT__
12#define __SC3000_BIT__
13
14#include "cassimg.h"
15
16CASSETTE_FORMATLIST_EXTERN( sc3000_cassette_formats );
17
18#endif
src/lib/lib.mak
r15544r15545
144144   $(LIBOBJ)/formats/pmd_cas.o      \
145145   $(LIBOBJ)/formats/primoptp.o   \
146146   $(LIBOBJ)/formats/rk_cas.o      \
147   $(LIBOBJ)/formats/sc3000_bit.o   \
147148   $(LIBOBJ)/formats/smx_dsk.o      \
148149   $(LIBOBJ)/formats/sorc_dsk.o   \
149150   $(LIBOBJ)/formats/sord_cas.o   \
src/mess/includes/sg1000.h
r15544r15545
99#include "machine/ram.h"
1010#include "imagedev/printer.h"
1111#include "formats/basicdsk.h"
12#include "formats/sc3000_bit.h"
1213#include "machine/ctronics.h"
1314#include "machine/i8255.h"
1415#include "machine/i8251.h"
src/mess/drivers/sg1000.c
r15544r15545
625625
626626const cassette_interface sc3000_cassette_interface =
627627{
628   cassette_default_formats,
628   sc3000_cassette_formats,
629629   NULL,
630630   (cassette_state)(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED),
631631   NULL,

Previous 15994 Revisions Next


© 1998-2018 The MESS Team