#pragma disable_warning 85

//определения типов переменных

typedef unsigned char u8;
typedef   signed char i8;
typedef unsigned  int u16;
typedef   signed  int i16;
typedef unsigned long u32;
typedef   signed long i32;

#define TRUE	1
#define FALSE	0

//флаги кнопок джойстика

#define JOY_RIGHT	0x01
#define JOY_LEFT	0x02
#define JOY_DOWN	0x04
#define JOY_UP		0x08
#define JOY_FIRE	0x10
#define JOY_START   0x20
#define JOY_ESC     0x80

//крайние и средний уровни яркости

#define BRIGHT_MIN	0
#define BRIGHT_MID	15
#define BRIGHT_MAX	30

//заполнение памяти заданным значением

void memset(void* m,u8 b,u16 len) __naked;

//копирование памяти, области не должны пересекаться

void memcpy(void* d,void* s,u16 len) __naked;

//генерация 16-битного псевдослучайного числа

u16 rand16(void) __naked;

//установка цвета бордюра, 0..7

void border(u8 n) __naked;

// ожидание конца кадра
void vsync(void) __naked;

//опрос kempston джойстика и курсорных клавиш с пробелом
//для опроса кнопок есть константы JOY_

u8 joystick(void) __naked;

//установка яркости экрана BRIGHT_MIN..BRIGHT_MID..BRIGHT_MAX (0..15..30)
//от полностью чёрного экрана до нормальной яркости до полностью белого экрана

void pal_bright(u8 bright) __naked;

void pal_bright16(u8 subpal, u8 bright) __naked;

//выбор предопределённой палитры по номеру

void pal_select(u8 id) __naked;

//копирование текущей палитры в массив

void pal_copy(u8 start, u8 count, u8* pal) __naked;

//установка всех цветов в палитре значениями из массива

void pal_custom(u8 start, u8 count, u8* pal) __naked;

//отрисовка тайла

void draw_tile(u8 x,u8 y,u16 tile) __naked;

//отрисовка изображения

void draw_image(u8 x) __naked;

//очистка теневого экрана нужным цветом 0..255

void clear_screen(u8 color) __naked;

//переключение экранов, теневой становится видимым
//ожидание кадра выполняется автоматически, vsync перед вызовом этой функции не нужен
//функция также обновляет спрайты, если они включены

void swap_screen(void) __naked;

void sprites_clip(u8 clip) __naked;


//запуск системы вывода спрайтов
//на видимом экране должно быть изображение, поверх которого будут выведены спрайты
//эта функция выполняется медленно, происходит копирование большого объёма данных
//после того как спрайты разрешены, они будут автоматически выводиться при swap_screen

void sprites_start(void) __naked;

//останов системы вывода спрайтов

void sprites_stop(void) __naked;

//добавить спрайт в список вывода
//x координата 0..240
//y координата 0..176
//spr номер изображения спрайта
void add_sprite(u8 x,u8 y,u16 spr) __naked;

// конец списка спрайтов
void end_sprite(void) __naked;

//время с момента запуска программы в кадрах

u32 time(void) __naked;

//задержка, значение в кадрах (1/50 секунды)

void delay(u16 time) __naked;


void wyz_play_music (unsigned char song_number) __naked;
void wyz_play_sound (unsigned char fx_number, unsigned char fx_channel) __naked;
void wyz_stop_sound (void) __naked;

//void fm_sound_on (void) __naked;
//u8 tfm_stat(void) __naked;

// выход в DSS
void quit(void) __naked;