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