]> git.sesse.net Git - pistorm/blob - platforms/amiga/cdtv-dmac.c
Add license information to source
[pistorm] / platforms / amiga / cdtv-dmac.c
1 // SPDX-License-Identifier: MIT
2
3 #include <stdio.h>
4 #include <stdint.h>
5 #include <stdlib.h>
6 #include "config_file/config_file.h"
7
8 uint8_t dmac_reg_idx = 0;
9 uint8_t dmac_reg_values[0xFFFF];
10
11 uint8_t cdtv_dmac_reg_idx_read() {
12     return dmac_reg_idx;
13 }
14
15 /* DMAC Registers
16 R   0x06 [B]    - Something
17
18     0x40 [W]    - ISTR
19 RW  0x42 [W]    - CNTR
20
21     0x80 [L]    - WTC
22     0x84 [L]    - ACR
23
24     0x8E [B]    - SASR
25 W   0x8F [B]    - Something
26     0x90        - SCMD
27     0x91 [B]    - Something
28     0x92 [B]    - Something?
29 RW  0x93 [B]    - Something
30
31 R   0xA2?[W?]   - Some status thing?
32 W   0xA4?[W?]   - Something
33 W   0xA6?[W?]   - Something
34 W   0xA8?[W?]   - Something
35
36     0xDE [W]    - ST_DMA
37     0xE0 [W]    - SP_DMA
38     0xE2 [W]    - CINT
39     0xE4 [W]    - Something
40     0xE4-0xE5   - Nothing
41     0xE6 [W]    - Flush
42 */
43
44 void cdtv_dmac_reg_idx_write(uint8_t value) {
45     dmac_reg_idx = value;
46 }
47
48 uint32_t cdtv_dmac_read(uint32_t address, uint8_t type) {
49     uint32_t ret = 0;
50
51     switch (type) {
52         case OP_TYPE_BYTE:
53             return dmac_reg_values[address];
54         case OP_TYPE_WORD:
55             return be16toh(*((uint16_t *)&dmac_reg_values[address]));
56         default:
57             break;
58     }
59
60     return ret;
61 }
62
63 void cdtv_dmac_write(uint32_t address, uint32_t value, uint8_t type) {
64     switch (type) {
65         case OP_TYPE_BYTE:
66             dmac_reg_values[address] = (uint8_t)value;
67             return ;
68         case OP_TYPE_WORD:
69             printf("Help, it's a scary word write.\n");
70             *((uint16_t *)&dmac_reg_values[address]) = htobe16(value);
71             return;
72     }
73 }