summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/jedparse.h
blob: d947d0f9f2216f09fc53bd0900a37999ab92096d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/***************************************************************************

    jedparse.h

    Parser for .JED files into raw fusemaps.

    Copyright Nicola Salmoria and the MAME Team.
    Visit http://mamedev.org for licensing and usage restrictions.

***************************************************************************/

#ifndef __JEDPARSE_H__
#define __JEDPARSE_H__

#include "osdcore.h"



/***************************************************************************
    CONSTANTS
***************************************************************************/

#define JED_MAX_FUSES			(65536)

/* error codes */
#define JEDERR_NONE				0
#define JEDERR_INVALID_DATA		1
#define JEDERR_BAD_XMIT_SUM		2
#define JEDERR_BAD_FUSE_SUM		3



/***************************************************************************
    TYPE DEFINITIONS
***************************************************************************/

typedef struct _jed_data jed_data;
struct _jed_data
{
	UINT32		numfuses;			/* number of defined fuses */
	UINT8		fusemap[JED_MAX_FUSES / 8];/* array of bit-packed data */
};



/***************************************************************************
    FUNCTION PROTOTYPES
***************************************************************************/

/* parse a file (read into memory) into a jed_data structure */
int jed_parse(const void *data, size_t length, jed_data *result);

/* output a jed_data structure into a well-formatted JED file */
size_t jed_output(const jed_data *data, void *result, size_t length);

/* parse a binary JED file (read into memory) into a jed_data structure */
int jedbin_parse(const void *data, size_t length, jed_data *result);

/* output a jed_data structure into a binary JED file */
size_t jedbin_output(const jed_data *data, void *result, size_t length);



/***************************************************************************
    INLINE FUNCTIONS
***************************************************************************/

INLINE int jed_get_fuse(const jed_data *data, UINT32 fusenum)
{
	if (fusenum < JED_MAX_FUSES)
		return (data->fusemap[fusenum / 8] >> (fusenum % 8)) & 1;
	else
		return 0;
}


INLINE void jed_set_fuse(jed_data *data, UINT32 fusenum, UINT8 value)
{
	if (fusenum < JED_MAX_FUSES)
	{
		/* set or clear the bit as appropriate */
		if (value)
			data->fusemap[fusenum / 8] |= (1 << (fusenum % 8));
		else
			data->fusemap[fusenum / 8] &= ~(1 << (fusenum % 8));
	}
}

#endif	/* __JEDPARSE_H__ */