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