#ifndef _GLOBAL_H
#define _GLOBAL_H 1
#include <avr/io.h>
#define ENABLE_DIRECTUART 0b00000001
#define ENABLE_UART 0b00000010
#define ENABLE_SCR 0b00000100
#define ENABLE_SD_LOG 0b00001000
#define BIT_ENABLE_SD_LOG 3
#define RTSCTS_FLOWCTRL 0b00010000
//-----------------------------------------------------------------------------
//регистры fpga
#define TEMP_REG 0xA0
#define SD_CS0 0xA1
#define SD_CS1 0xA2
#define FLASH_LOADDR 0xA3
#define FLASH_MIDADDR 0xA4
#define FLASH_HIADDR 0xA5
#define FLASH_DATA 0xA6
#define FLASH_CTRL 0xA7
#define SCR_LOADDR 0xA8 // текущая позиция печати
#define SCR_HIADDR 0xA9 //
#define SCR_ATTR 0xAA // запись атрибута в ATTR
#define SCR_FILL 0xAB // прединкремент адреса и запись атрибута в ATTR и в память
// (если только дергать spics_n, будет писаться предыдущий ATTR)
#define SCR_CHAR 0xAC // прединкремент адреса и запись символа в память и ATTR в память
// (если только дергать spics_n, будет писаться предыдущий символ)
#define SCR_MOUSE_TEMP TEMP_REG
#define SCR_MOUSE_X 0xAD
#define SCR_MOUSE_Y 0xAE
#define SCR_MODE 0xAF // .7 - 0=VGAmode, 1=TVmode; .2.1.0 - режимы;
#define MTST_CONTROL 0x50
#define MTST_PASS_CNT0 0x51
#define MTST_PASS_CNT1 TEMP_REG
#define MTST_FAIL_CNT0 0x52
#define MTST_FAIL_CNT1 TEMP_REG
#define COVOX 0x53
#define INT_CONTROL 0x54
//-----------------------------------------------------------------------------
#ifdef __ASSEMBLER__
/* ------------------------------------------------------------------------- */
#define xl r26
#define xh r27
#define yl r28
#define yh r29
#define zl r30
#define zh r31
/* seed (32bit) */
.extern _rnd
/* буфер в RAM (размером 2048 байт) */
.extern megabuffer
/* (16bit) */
.extern mscounter
.extern flags1
.extern int6vect
.extern newframe
/* ------------------------------------------------------------------------- */
#else // #ifdef __ASSEMBLER__
#include "_types.h"
#include "_messages.h"
#include "_output.h"
//-----------------------------------------------------------------------------
#define GO_READKEY 0
#define GO_REPEAT 1
#define GO_REDRAW 2
#define GO_RESTART 3
#define GO_CONTINUE 4
#define GO_ERROR 5
#define GO_EXIT 6
//-----------------------------------------------------------------------------
#define SetSPICS() PORTB|=(1<<PB0)
#define ClrSPICS() PORTB&=~(1<<PB0)
//-----------------------------------------------------------------------------
#define GET_FAR_ADDRESS(var) \
({ uint_farptr_t tmp; __asm__ __volatile__( \
"ldi %A0,lo8(%1)\n\tldi %B0,hi8(%1)\n\tldi %C0,hh8(%1)\n\tclr %D0\n\t" \
:"=d"(tmp):"p"(&(var)) ); tmp; \
})
//-----------------------------------------------------------------------------
extern u8 mode1, lang, int6vect;
extern u8 flags1;
extern volatile u8 newframe;
extern u8 megabuffer[2048];
//-----------------------------------------------------------------------------
extern u8 ee_dummy[2] EEMEM;
extern u8 ee_mode1[1] EEMEM;
extern u8 ee_lang[1] EEMEM;
//-----------------------------------------------------------------------------
//выбор текущего регистра FPGA
void fpga_sel_reg(u8 reg);
//-----------------------------------------------------------------------------
//обмен с регистрами в FPGA
u8 fpga_reg(u8 reg, u8 data);
//-----------------------------------------------------------------------------
//обмен без установки регистра
u8 fpga_same_reg(u8 data);
//-----------------------------------------------------------------------------
// п.сл.число
u8 random8(void);
//-----------------------------------------------------------------------------
// 1) запрет прерываний
// 2) инициализация SPI
// 3) распаковка данных и загрузка FPGA
void load_fpga(uint_farptr_t confdata);
//-----------------------------------------------------------------------------
void timers_init(void);
//-----------------------------------------------------------------------------
// in: timeout - таймайт, мс (1..16383)
void set_timeout_ms(u16 *storehere, u16 timeout);
//-----------------------------------------------------------------------------
u8 check_timeout_ms(u16 *storedhere);
//-----------------------------------------------------------------------------
void menu_help(void);
//-----------------------------------------------------------------------------
void toggle_vga(void);
//-----------------------------------------------------------------------------
void save_lang(void);
//-----------------------------------------------------------------------------
#endif // #ifdef __ASSEMBLER__
#endif // #ifndef _GLOBAL_H