134 lines
3.8 KiB
C
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
|