aica_xm: add sandbox state
This commit is contained in:
parent
4eb9b0b2bd
commit
77bc48e278
@ -21,6 +21,7 @@
|
|||||||
#include "sh7091/sh7091_bits.hpp"
|
#include "sh7091/sh7091_bits.hpp"
|
||||||
#include "sh7091/serial.hpp"
|
#include "sh7091/serial.hpp"
|
||||||
#include "printf/printf.h"
|
#include "printf/printf.h"
|
||||||
|
#include "printf/unparse.h"
|
||||||
|
|
||||||
#include "math/float_types.hpp"
|
#include "math/float_types.hpp"
|
||||||
|
|
||||||
@ -66,6 +67,51 @@ struct interpreter_state {
|
|||||||
|
|
||||||
struct interpreter_state state;
|
struct interpreter_state state;
|
||||||
|
|
||||||
|
struct aica_sandbox_state {
|
||||||
|
int channel_ix;
|
||||||
|
union aica_sandbox_channel {
|
||||||
|
struct {
|
||||||
|
int instrument;
|
||||||
|
int loop;
|
||||||
|
int note;
|
||||||
|
|
||||||
|
int krs;
|
||||||
|
int ar;
|
||||||
|
int d1r;
|
||||||
|
int d2r;
|
||||||
|
int rr;
|
||||||
|
int dl;
|
||||||
|
|
||||||
|
int disdl;
|
||||||
|
int dipan;
|
||||||
|
};
|
||||||
|
int field[11];
|
||||||
|
} channel[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct aica_sandbox_state sandbox_state = {};
|
||||||
|
|
||||||
|
struct key_offset_value {
|
||||||
|
const char * label;
|
||||||
|
int min;
|
||||||
|
int max;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct key_offset_value sandbox_labels[] = {
|
||||||
|
{"instrument", 0, max_instruments - 1},
|
||||||
|
{"loop", 0, 1},
|
||||||
|
{"note", 0, 97},
|
||||||
|
{"krs", 0, 0xf},
|
||||||
|
{"ar", 0, 0x1f},
|
||||||
|
{"d1r", 0, 0x1f},
|
||||||
|
{"d2r", 0, 0x1f},
|
||||||
|
{"rr", 0, 0x1f},
|
||||||
|
{"dl", 0, 0x1f},
|
||||||
|
{"disdl", 0, 0xf},
|
||||||
|
{"dipan", 0, 0x1f},
|
||||||
|
};
|
||||||
|
const int sandbox_labels_length = (sizeof (sandbox_labels)) / (sizeof (sandbox_labels[0]));
|
||||||
|
|
||||||
void print_u8(int8_t * chars, int length, const char * end)
|
void print_u8(int8_t * chars, int length, const char * end)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
@ -1038,16 +1084,52 @@ void transfer_glyph(ta_parameter_writer& writer, char c, int x, int y)
|
|||||||
dp, dt);
|
dp, dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int transfer_string(ta_parameter_writer& writer, const char * s, int x, int y)
|
||||||
|
{
|
||||||
|
int len = 0;
|
||||||
|
while (*s) {
|
||||||
|
len += 1;
|
||||||
|
transfer_glyph(writer, *s++, x, y);
|
||||||
|
x += glyph_hori_advance;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int transfer_integer(ta_parameter_writer& writer, int n, int x, int y)
|
||||||
|
{
|
||||||
|
char buf[16];
|
||||||
|
|
||||||
|
int len = unparse_base10(buf, n, 0, 0);
|
||||||
|
|
||||||
|
transfer_string(writer, buf, x, y);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
void transfer_scene(ta_parameter_writer& writer)
|
void transfer_scene(ta_parameter_writer& writer)
|
||||||
{
|
{
|
||||||
global_polygon_type_0(writer);
|
global_polygon_type_0(writer);
|
||||||
|
|
||||||
const char * foo = "Although the ROM provides a graphic for all 256 different possible 8-bit codes";
|
|
||||||
int x = 32;
|
int x = 32;
|
||||||
int y = 32;
|
int y = 32;
|
||||||
while (*foo) {
|
|
||||||
transfer_glyph(writer, *foo++, x, y);
|
int xi = x;
|
||||||
x += 8;
|
int len = transfer_string(writer, "channel", xi, y);
|
||||||
|
xi += glyph_hori_advance * len;
|
||||||
|
xi += glyph_hori_advance;
|
||||||
|
transfer_integer(writer, sandbox_state.channel_ix, xi, y);
|
||||||
|
y += glyph_vert_advance * 2;
|
||||||
|
|
||||||
|
for (int i = 0; i < sandbox_labels_length; i++) {
|
||||||
|
int xi = x + glyph_hori_advance * 2;
|
||||||
|
|
||||||
|
int len = transfer_string(writer, sandbox_labels[i].label, xi, y);
|
||||||
|
xi += glyph_hori_advance * len;
|
||||||
|
xi += glyph_hori_advance;
|
||||||
|
|
||||||
|
transfer_integer(writer, sandbox_state.channel[sandbox_state.channel_ix].field[i], xi, y);
|
||||||
|
|
||||||
|
y += glyph_vert_advance;
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.append<ta_global_parameter::end_of_list>() =
|
writer.append<ta_global_parameter::end_of_list>() =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user