summaryrefslogtreecommitdiff
path: root/libs/JSystem/src/JAudio2/JASRegisterParam.cpp
blob: 02d3c140b9cabb5ac2ba22ff78a132e7e3a47e39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include "JSystem/JSystem.h" // IWYU pragma: keep

#include "JSystem/JAudio2/JASRegisterParam.h"
#include "JSystem/JSupport/JSupport.h"

JASRegisterParam::JASRegisterParam() {
    for (int i = 0; i < 14; i++) {
        field_0x0[i] = 0;
    }
}

void JASRegisterParam::init() {
    for (int i = 0; i < 14; i++) {
        field_0x0[i] = 0;
    }
}


void JASRegisterParam::write(JASRegisterParam::RegID param_0, u32 param_1) {
    if (param_0 < 14) {
        if (param_0 <= 2) {
            field_0x0[param_0] = (u8)param_1;
        } else {
            field_0x0[param_0] = param_1;
        }
        return;
    }

    switch (param_0) {
    case 32:
        field_0x0[0] = JSUHiByte(param_1);
        field_0x0[1] = JSULoByte(param_1);
        break;
    case 33:
        field_0x0[4] = JSUHiHalf(param_1);
        field_0x0[5] = JSULoHalf(param_1);
        break;
    case 34:
        field_0x0[4] = u8(field_0x0[4]);
        field_0x0[4] |= u16((param_1 & 0xff) << 8);
        break;
    case 35:
        field_0x0[4] &= 0xff00;
        field_0x0[4] |= u8(param_1);
        break;
    case 36:
        field_0x0[5] = u8(field_0x0[5]);
        field_0x0[5] |= u16((param_1 & 0xff) << 8);
        break;
    case 37:
        field_0x0[5] &= 0xff00;
        field_0x0[5] |= u8(param_1);
        break;
    case 38:
        field_0x0[6] = JSUHiHalf(param_1);
        field_0x0[7] = JSULoHalf(param_1);
        break;
    case 39:
        field_0x0[8] = JSUHiHalf(param_1);
        field_0x0[9] = JSULoHalf(param_1);
        break;
    case 40:
        field_0x0[10] = JSUHiHalf(param_1);
        field_0x0[11] = JSULoHalf(param_1);
        break;
    case 41:
        field_0x0[12] = JSUHiHalf(param_1);
        field_0x0[13] = JSULoHalf(param_1);
        break;
    default:
        JUT_WARN(92, "%s", "Warning: Unsupported REG id");
        break;
    }
}


u32 JASRegisterParam::read(JASRegisterParam::RegID param_0) {
    if (param_0 < 14) {
        return field_0x0[param_0];
    }
    u32 rv = 0;
    switch (param_0) {
    case 32:
        rv = ((field_0x0[0] & 0xff) << 8) | (field_0x0[1] & 0xff) ;
        break;
    case 33:
        rv = field_0x0[4];
        rv <<= 16;
        rv |= field_0x0[5];
        break;
    case 34:
        rv = JSUHiByte(field_0x0[4]);
        break;
    case 35:
        rv = JSULoByte(field_0x0[4]);
        break;
    case 36:
        rv = JSUHiByte(field_0x0[5]);
        break;
    case 37:
        rv = JSULoByte(field_0x0[5]);
        break;
    case 38:
        rv = field_0x0[6];
        rv <<= 16;
        rv |= field_0x0[7];
        break;
    case 39:
        rv = field_0x0[8];
        rv <<= 16;
        rv |= field_0x0[9];
        break;
    case 40:
        rv = field_0x0[10];
        rv <<= 16;
        rv |= field_0x0[11];
        break;
    case 41:
        // !@bug I think this should get field_0x0[12] and field_0x0[13]. Looks like a copy paste bug.
        rv = field_0x0[10];
        rv <<= 16;
        rv |= field_0x0[11];
        break;
    default:
        JUT_WARN(160, "%s", "Warning: Unsupported REG id");
        break;
    }
    return rv;
}