OXYGENHUB
# 9120e87480a6 enhanced-x16-emulator / src / cartridge.h
2.2 KiB · Objective-C · last changed chore(): initial commit 26 days ago source blame history raw
1
// Commander X16 Emulator
2
// Copyright (c) 2023 Stephen Horn
3
// All rights reserved. License: 2-clause BSD
4
5
#pragma once
6
7
#include <stddef.h>
8
#include <stdbool.h>
9
#include <stdint.h>
10
11
#define CART_MAX_BANKS 224
12
#define CART_BANK_SIZE 0x4000
13
#define CART_MAX_SIZE (CART_BANK_SIZE * CART_MAX_BANKS)
14
15
#define CART_MAGIC_NUMBER_SIZE 16
16
#define CART_VERSION_SIZE 16
17
#define CART_DESCRIPTION_SIZE 32
18
#define CART_AUTHOR_SIZE 32
19
#define CART_COPYRIGHT_SIZE 32
20
#define CART_PROGRAM_VERSION_SIZE 32
21
#define CART_RESERVED_SIZE (64 + 32)
22
23
#define CART_BANK_NONE 0
24
#define CART_BANK_ROM 1
25
#define CART_BANK_UNINITIALIZED_RAM 2
26
#define CART_BANK_INITIALIZED_RAM 3
27
#define CART_BANK_UNINITIALIZED_NVRAM 4
28
#define CART_BANK_INITIALIZED_NVRAM 5
29
#define CART_NUM_BANK_TYPES 5
30
31
struct x16cartridge_header
32
{
33
	char magic_number[CART_MAGIC_NUMBER_SIZE];
34
	char cart_version[CART_VERSION_SIZE];
35
	char description[CART_DESCRIPTION_SIZE];
36
	char author[CART_AUTHOR_SIZE];
37
	char copyright[CART_COPYRIGHT_SIZE];
38
	char prg_version[CART_PROGRAM_VERSION_SIZE];
39
	char reserved[CART_RESERVED_SIZE];
40
	uint8_t bank_info[CART_MAX_BANKS];
41
};
42
43
struct cartridge_import;
44
45
bool cartridge_load(const char *cartridge_file, bool randomize);
46
void cartridge_unload();
47
void cartridge_new();
48
49
void cartridge_set_desc(const char *name);
50
void cartridge_set_author(const char *name);
51
void cartridge_set_copyright(const char *name);
52
void cartridge_set_program_version(const char *name);
53
54
void cartridge_get_desc(char *buffer, size_t buffer_size);
55
void cartridge_get_author(char *buffer, size_t buffer_size);
56
void cartridge_get_copyright(char *buffer, size_t buffer_size);
57
void cartridge_get_program_version(char *buffer, size_t buffer_size);
58
59
bool cartridge_define_bank_range(uint8_t start_bank, uint8_t end_bank, uint8_t bank_type);
60
bool cartridge_import_files(char **bin_files, int num_files, uint8_t start_bank, uint8_t bank_type, uint8_t fill_value);
61
bool cartridge_fill(uint8_t start_bank, uint8_t end_bank, uint8_t bank_type, uint8_t fill_value);
62
63
bool cartridge_save(const char *cartridge_file);
64
bool cartridge_save_nvram();
65
66
uint8_t cartridge_read(uint16_t address, uint8_t bank);
67
void cartridge_write(uint16_t address, uint8_t bank, uint8_t value);
68
uint8_t cartridge_get_bank_type(uint8_t bank);