]> git.sesse.net Git - pistorm/blob - platforms/amiga/pistorm-dev/pistorm-dev.c
52045d925d54bd81207086f697e61d9c5cfd4f88
[pistorm] / platforms / amiga / pistorm-dev / pistorm-dev.c
1 // SPDX-License-Identifier: MIT
2
3 #include "pistorm-dev.h"
4 #include "pistorm-dev-enums.h"
5 #include <stdio.h>
6
7 #define DEBUG_PISTORM_DEVICE
8
9 #ifdef DEBUG_PISTORM_DEVICE
10 #define DEBUG printf
11
12 #define PIDEV_SWREV 0x0105
13
14 static const char *op_type_names[4] = {
15     "BYTE",
16     "WORD",
17     "LONGWORD",
18     "MEM",
19 };
20 #else
21 #define DEBUG(...)
22 #endif
23
24 extern uint32_t pistorm_dev_base;
25 extern uint32_t do_reset;
26
27 extern uint8_t rtg_enabled, rtg_on, pinet_enabled, piscsi_enabled;
28
29 void handle_pistorm_dev_write(uint32_t addr, uint32_t val, uint8_t type) {
30     switch((addr & 0xFFFF)) {
31         case PI_CMD_RESET:
32             DEBUG("[PISTORM-DEV] System reset called through PiStorm interaction device, code %d\n", (val & 0xFFFF));
33             do_reset = 1;
34             break;
35         default:
36             DEBUG("[PISTORM-DEV] WARN: Unhandled %s register write to %.4X: %d\n", op_type_names[type], addr - pistorm_dev_base, val);
37             break;
38     }
39 }
40  
41 uint32_t handle_pistorm_dev_read(uint32_t addr, uint8_t type) {
42     switch((addr & 0xFFFF)) {
43         case PI_CMD_HWREV:
44             // Probably replace this with some read from the CPLD to get a simple hardware revision.
45             DEBUG("[PISTORM-DEV] %s Read from HWREV\n", op_type_names[type]);
46             return 0x0101; // 1.1
47             break;
48         case PI_CMD_SWREV:
49             DEBUG("[PISTORM-DEV] %s Read from SWREV\n", op_type_names[type]);
50             return PIDEV_SWREV;
51             break;
52         case PI_CMD_RTGSTATUS:
53             DEBUG("[PISTORM-DEV] %s Read from RTGSTATUS\n", op_type_names[type]);
54             return (rtg_on << 1) | rtg_enabled;
55             break;
56         case PI_CMD_NETSTATUS:
57             DEBUG("[PISTORM-DEV] %s Read from NETSTATUS\n", op_type_names[type]);
58             return pinet_enabled;
59             break;
60         case PI_CMD_PISCSI_CTRL:
61             DEBUG("[PISTORM-DEV] %s Read from PISCSI_CTRL\n", op_type_names[type]);
62             return piscsi_enabled;
63             break;
64         default:
65             DEBUG("[PISTORM-DEV] WARN: Unhandled %s register read from %.4X\n", op_type_names[type], addr - pistorm_dev_base);
66             break;
67     }
68     return 0;
69 }