diff --git a/software/interprocess/interprocess.h b/software/interprocess/interprocess.h new file mode 100644 index 0000000000000000000000000000000000000000..4a0bf32e9d4cdb411016ca8bf8d7e65053747382 --- /dev/null +++ b/software/interprocess/interprocess.h @@ -0,0 +1,135 @@ +#ifndef INTERPROCESS_H_ +#define INTERPROCESS_H_ + +#include <stdio.h> +#include <inttypes.h> + +#include "system.h" +#include "io.h" + +#define ISD_BASE INTERPROC_SHARED_DATA_BASE + + +// Mouse: R +#define MOUSE_XY 0 // - 3 +#define MOUSE_W 4 // - 5 +#define MOUSE_BTN 6 // + +// For main +#define mouse_xy IORD_32DIRECT(ISD_BASE, MOUSE_XY) +#define mouse_wheel IORD_16DIRECT(ISD_BASE, MOUSE_W) +#define mouse_btn IORD_8DIRECT(ISD_BASE, MOUSE_BTN) + +// For usb +#define set_mouse_xy(val) IORD_32DIRECT(ISD_BASE, MOUSE_XY, val) +#define set_mouse_wheel(val) IORD_16DIRECT(ISD_BASE, MOUSE_W, val) +#define set_mouse_btn(val) IORD_8DIRECT(ISD_BASE, MOUSE_BTN, btn) + +// Background: W +// Trig: ADDR +// Ready: ADDR +#define MPEG_BG_ADDR 12 // - 15 + +// For main +inline void mpeg_set_bg(uint32_t addr) { + while (IORD_32DIRECT(ISD_BASE, MPEG_BG_ADDR)); + IOWR_32DIRECT(ISD_BASE, MPEG_BG_ADDR, addr); +} + +// For mpeg +#define mpeg_bg IORD_32DIRECT(ISD_BASE, MPEG_BG_ADDR) +#define mpeg_bg_reset(val) IOWR_32DIRECT(ISD_BASE, MPEG_BG_ADDR, addr); + +// Audio: W +// Trig: ADDR +// Ready: ADDR +#define MPEG_AUDIO_ADDR 16 // - 19 +#define MPEG_AUDIO_LEN 20 // - 23 +#define MPEG_AUDIO_START 24 // - 27 + +// For main +inline void mpeg_play_audio(uint32_t addr, uint32_t len, uint32_t synctime) { + while(IORD_32DIRECT(ISD_BASE, MPEG_AUDIO_ADDR)); + IOWR_32DIRECT(ISD_BASE, MPEG_AUDIO_LEN, len); + IOWR_32DIRECT(ISD_BASE, MPEG_AUDIO_START, synctime); + IOWR_32DIRECT(ISD_BASE, MPEG_AUDIO_ADDR, addr); +} +inline void mpeg_cancel_audio() { + IOWR_32DIRECT(ISD_BASE, MPEG_AUDIO_LEN, 0); +} + +// For mpeg +#define mpeg_audio_addr IORD_32DIRECT(ISD_BASE, MPEG_AUDIO_ADDR) +#define mpeg_audio_len IORD_32DIRECT(ISD_BASE, MPEG_AUDIO_LEN) +#define mpeg_audio_start IORD_32DIRECT(ISD_BASE, MPEG_AUDIO_START) +#define mpeg_audio_reset(val) IOWR_32DIRECT(ISD_BASE, MPEG_AUDIO_ADDR, val) + +// Audio Mixdown: W +// Trig: ADDR +// Ready: ADDR +#define MPEG_MIX_ADDR 28 // - 31 +#define MPEG_MIX_LEN 32 // - 35 + +// For main +inline void mpeg_play_fx(uint32_t addr, uint32_t len) { + IOWR_32DIRECT(ISD_BASE, MPEG_MIX_LEN, len); + IOWR_32DIRECT(ISD_BASE, MPEG_MIX_ADDR, addr); +} + +// For mpeg +#define mpeg_fx_addr IORD_32DIRECT(ISD_BASE, MPEG_MIX_ADDR) +#define mpeg_fx_len IORD_32DIRECT(ISD_BASE, MPEG_MIX_LEN) +#define mpeg_fx_reset(val) IOWR_32DIRECT(ISD_BASE, MPEG_MIX_ADDR, val) + +// Generic Read: RW +// Trig: ADDR +// Ready: ADDR +#define MPEG_READ_ADDR 36 // - 39 +#define MPEG_READ_LEN 40 // - 43 +#define MPEG_READ_PTR1 44 // - 47 +#define MPEG_READ_PTR2 48 // - 51 + +// For main +inline void mpeg_read(uint32_t addr, uint32_t len, void *buf) { + uint64_t ptr = (uint64_t) buf; + while(IORD_32DIRECT(ISD_BASE, MPEG_READ_ADDR)); + IOWR_32DIRECT(ISD_BASE, MPEG_READ_LEN, len); + IOWR_32DIRECT(ISD_BASE, MPEG_READ_PTR1, ptr&0xffff); + IOWR_32DIRECT(ISD_BASE, MPEG_READ_PTR2, (ptr&0xffff0000)>>32); + IOWR_32DIRECT(ISD_BASE, MPEG_READ_ADDR, addr); +} + +// For mpeg +#define mpeg_read_addr IORD_32DIRECT(ISD_BASE, MPEG_READ_ADDR) +#define mpeg_read_len IORD_32DIRECT(ISD_BASE, MPEG_READ_LEN) +#define mpeg_read_ptr (void *)((IORD_32DIRECT(ISD_BASE, MPEG_READ_PTR2)<<32)|IORD_32DIRECT(ISD_BASE, MPEG_READ_PTR1)) +#define mpeg_read_reset(val) IOWR_32DIRECT(ISD_BASE, MPEG_READ_ADDR, val) + +// Sprite: W +// Trig: ADDR +// Ready: DEST +#define MPEG_IMG_ADDR 52 // - 55 +#define MPEG_IMG_WIDTH 56 // - 57 +#define MPEG_IMG_HEIGHT 58 // - 59 +#define MPEG_IMG_DEST1 60 // - 63 +#define MPEG_IMG_DEST2 64 // - 67 + +// For main +inline void mpeg_read(uint32_t addr, uint16_t w, uint16_t h, uint64_t dest) { + while(IORD_32DIRECT(ISD_BASE, MPEG_IMG_ADDR)); + IOWR_16DIRECT(ISD_BASE, MPEG_IMG_WIDTH, w); + IOWR_16DIRECT(ISD_BASE, MPEG_IMG_HEIGHT, h); + IOWR_32DIRECT(ISD_BASE, MPEG_IMG_DEST1, dest&0xffff); + IOWR_32DIRECT(ISD_BASE, MPEG_IMG_DEST2, (dest&0xffff0000)>>32); + IOWR_32DIRECT(ISD_BASE, MPEG_IMG_ADDR, addr); +} + +// For mpeg +#define mpeg_read_addr IORD_32DIRECT(ISD_BASE, MPEG_IMG_ADDR) +#define mpeg_read_width IORD_32DIRECT(ISD_BASE, MPEG_IMG_WIDTH) +#define mpeg_read_height IORD_32DIRECT(ISD_BASE, MPEG_IMG_HEIGHT) +#define mpeg_read_dest ((IORD_32DIRECT(ISD_BASE, MPEG_IMG_DEST2)<<32)|IORD_32DIRECT(ISD_BASE, MPEG_IMG_DEST1)) +#define mpeg_read_reset(val) IOWR_32DIRECT(ISD_BASE, MPEG_IMG_ADDR, val) + + +#endif diff --git a/software/osu_main/src/interprocess.h b/software/osu_main/src/interprocess.h deleted file mode 100644 index 673f74a499d038628ce753901de746b6d2765b13..0000000000000000000000000000000000000000 --- a/software/osu_main/src/interprocess.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef INTERPROCESS_H_ -#define INTERPROCESS_H_ - - -#endif