undar-lang/emit/uxn/lib/chibicc-uxn/varvara.h

134 lines
3.8 KiB
C

#include "uxn.h"
void exit(char status);
typedef struct {
char operation; // 1 = copy
int length;
int src_page;
void* src_addr;
int dst_page;
void* dst_addr;
} Expansion;
// https://wiki.xxiivv.com/site/varvara.html
#define expansion(ptr) deo2(ptr, 0x02)
#define friend(func) deo2(func, 0x04)
#define set_palette(r, g, b) (deo2(r, 0x08), deo2(g, 0x0a), deo2(b, 0x0c))
#define debug() deo(0x01, 0x0e)
#define console_read() dei(0x12)
#define console_type() dei(0x17)
#define console_write(c) deo(c, 0x18) // stdout
#define console_error(c) deo(c, 0x19) // stderr
#define getchar console_read
#define putchar console_write
#define set_screen_size(width, height) (deo2(width, 0x22), deo2(height, 0x24))
#define screen_width() dei2(0x22)
#define screen_height() dei2(0x24)
#define set_screen_auto(a) deo(a, 0x26)
#define set_screen_x(x) deo2(x, 0x28)
#define set_screen_y(y) deo2(y, 0x2a)
#define set_screen_xy(x,y) (set_screen_x(x), set_screen_y(y))
#define screen_x() dei2(0x28)
#define screen_y() dei2(0x2a)
#define set_screen_addr(a) deo2(a, 0x2c)
#define draw_pixel(a) deo(a, 0x2e)
#define draw_sprite(a) deo(a, 0x2f)
#define audio_position(ch, a) dei2(0x32 + 0x10*ch)
#define audio_output(ch) dei(a, 0x34 + 0x10*ch)
#define set_audio_adsr(ch, adsr) deo2(adsr, 0x38 + 0x10*ch)
#define set_audio_length(ch, length) deo2(length, 0x3a + 0x10*ch)
#define set_audio_addr(ch, addr) deo2(addr, 0x3c + 0x10*ch)
#define set_audio_volume(ch, volume) deo(volume, 0x3e + 0x10*ch)
#define play_audio(ch, pitch) deo(pitch, 0x3f + 0x10*ch)
#define controller_button() dei(0x82)
#define controller_key() dei(0x83)
#define mouse_x() dei2(0x92)
#define mouse_y() dei2(0x94)
#define mouse_state() dei(0x96)
#define mouse_scrollx() dei2(0x9a)
#define mouse_scrolly() dei2(0x9c)
/// Read up to n bytes from file "name" into addr, then return bytes read.
#define file_read(name, n, addr) (deo2(name, 0xa8), deo2(n, 0xaa), deo2(addr, 0xac), dei2(0xa2))
#define _file_write(name, n, addr, append) (deo(append, 0xa7), deo2(name, 0xa8), deo2(n, 0xaa), deo2(addr, 0xae), dei2(0xa2))
/// Write n bytes from addr into file "name", then return bytes written.
#define file_write(name, n, addr) _file_write(name, n, addr, 0)
#define file_append(name, n, addr) _file_write(name, n, addr, 1)
#define file_delete(name) (deo2(name, 0xa8), deo(1, 0xa6))
#define datetime_year() dei2(0xc0)
#define datetime_month() dei(0xc2)
#define datetime_day() dei(0xc3)
#define datetime_hour() dei(0xc4)
#define datetime_minute() dei(0xc5)
#define datetime_second() dei(0xc6)
#define datetime_dotw() dei(0xc7)
#define datetime_doty() dei2(0xc8)
#define datetime_isdst() dei(0xca)
// Pixel values (| with color number)
// (Layer + operation + corner)
#define BgDot 0x00
#define BgFillBR 0x80
#define BgFillBL 0x90
#define BgFillTR 0xa0
#define BgFillTL 0xb0
#define FgDot 0x40
#define FgFillBR 0xc0
#define FgFillBL 0xd0
#define FgFillTR 0xe0
#define FgFillTL 0xf0
// Sprite values (| with blend number)
// (Layer + bit depth + flip axes)
#define Bg1 0x00
#define Bg1X 0x10
#define Bg1Y 0x20
#define Bg1XY 0x30
#define Fg1 0x40
#define Fg1X 0x50
#define Fg1Y 0x60
#define Fg1XY 0x70
#define Bg2 0x80
#define Bg2X 0x90
#define Bg2Y 0xa0
#define Bg2XY 0xb0
#define Fg2 0xc0
#define Fg2X 0xd0
#define Fg2Y 0xe0
#define Fg2XY 0xf0
// Auto values
#define Auto1 0x00
#define Auto1x 0x01
#define Auto1y 0x02
#define Auto1a 0x04
#define Auto1ax 0x05
#define Auto1ay 0x06
#define Auto2 0x10
#define Auto2x 0x11
#define Auto2y 0x12
#define Auto2a 0x14
#define Auto2ax 0x15
#define Auto2ay 0x16
// Button values
#define ButtonCtrl 0x01
#define ButtonA 0x01
#define ButtonAlt 0x02
#define ButtonB 0x02
#define ButtonShift 0x04
#define ButtonSelect 0x04
#define ButtonStart 0x08
#define ButtonHome 0x08
#define ButtonUp 0x10
#define ButtonDown 0x20
#define ButtonLeft 0x40
#define ButtonRight 0x80