ReC98/th05/music/piano.h

58 lines
1.4 KiB
C
Raw Normal View History

/// Graphics
/// --------
#define PIANO_LEFT 384
#define PIANO_TOP 64
#define PIANO_H 15
#define PIANO_KEY_W 4
#define PIANO_BLACK_H 9
#define PIANO_BLACK_PRESSED_H 8
#define PIANO_PADDING_BOTTOM 3
#define PIANO_H_PADDED (PIANO_H + PIANO_PADDING_BOTTOM)
#define PIANO_OCTAVES 8
#define PIANO_OCTAVE_W (7 * PIANO_KEY_W)
#define PIANO_VRAM_LEFT (PIANO_LEFT / BYTE_DOTS)
#define PIANO_VRAM_W ((PIANO_OCTAVES * PIANO_OCTAVE_W) / BYTE_DOTS)
// Sprite data
extern const dots8_t PIANO_KEYS_BLACK[PIANO_VRAM_W];
/// --------
#define PIANO_LABEL_DIST_X 32
#define PIANO_LABEL_DIST_Y 4
#define PIANO_LABEL_LEFT(col) \
(PIANO_LEFT - PIANO_LABEL_DIST_X + (col * PIANO_LABEL_FONT_W))
#define PIANO_LABEL_TOP(row) \
(PIANO_TOP + PIANO_LABEL_DIST_Y + (row * PIANO_H_PADDED))
// Assumes that the GRCG is active.
#define piano_label_puts(row, chr1, chr2, chr3) \
piano_label_putc(0, row, chr1); \
piano_label_putc(1, row, chr2); \
piano_label_putc(2, row, chr3); \
#define piano_label_putc(col, row, chr) \
_AL = chr; \
_DI = vram_offset_muldiv(PIANO_LABEL_LEFT(col), PIANO_LABEL_TOP(row)); \
piano_label_put_raw();
void pascal piano_label_put_raw();
// Note data
// ---------
extern OPEN_WORK *pmd_workadr;
typedef struct {
char fm[5];
char unused[3]; // SSG?
} piano_notes_t;
extern piano_notes_t piano_notes_cur;
extern piano_notes_t piano_notes_prev;
// ---------
void piano_setup(void);
void piano_render(void);