]> git.sesse.net Git - pistorm/blob - platforms/amiga/amiga-registers.c
Merge pull request #5 from beeanyew/config-file-setvar
[pistorm] / platforms / amiga / amiga-registers.c
1 #include "../../Gayle.h"
2 #include "../../config_file/config_file.h"
3
4 #define GAYLEBASE 0xD80000  // D7FFFF
5 #define GAYLESIZE 0x6FFFF
6
7 #define CLOCKBASE 0xDC0000
8 #define CLOCKSIZE 0x010000
9
10 uint8_t rtc_emulation_enabled = 1;
11
12 void configure_rtc_emulation_amiga(uint8_t enabled) {
13     if (enabled == rtc_emulation_enabled)
14         return;
15
16     rtc_emulation_enabled = enabled;
17     printf("Amiga RTC emulation is now %s.\n", (enabled) ? "enabled" : "disabled");
18 }
19
20 int handle_register_read_amiga(unsigned int addr, unsigned char type, unsigned int *val) {
21     if (!rtc_emulation_enabled && addr >= CLOCKBASE && addr < CLOCKBASE + CLOCKSIZE)
22         return -1;
23     if (addr >= GAYLEBASE && addr < GAYLEBASE + GAYLESIZE) {
24         switch(type) {
25         case OP_TYPE_BYTE:
26             *val = readGayleB(addr);
27             return 1;
28             break;
29         case OP_TYPE_WORD:
30             *val = readGayle(addr);
31             return 1;
32             break;
33         case OP_TYPE_LONGWORD:
34             *val = readGayleL(addr);
35             return 1;
36             break;
37         case OP_TYPE_MEM:
38             return -1;
39             break;
40         }
41     }
42     return -1;
43 }
44
45 int handle_register_write_amiga(unsigned int addr, unsigned int value, unsigned char type) {
46     if (!rtc_emulation_enabled && addr >= CLOCKBASE && addr < CLOCKBASE + CLOCKSIZE)
47         return -1;
48     if (addr >= GAYLEBASE && addr < GAYLEBASE + GAYLESIZE) {
49         switch(type) {
50         case OP_TYPE_BYTE:
51             writeGayleB(addr, value);
52             return 1;
53             break;
54         case OP_TYPE_WORD:
55             writeGayle(addr, value);
56             return 1;
57             break;
58         case OP_TYPE_LONGWORD:
59             writeGayleL(addr, value);
60             return 1;
61             break;
62         case OP_TYPE_MEM:
63             return -1;
64             break;
65         }
66     }
67     return -1;
68 }