/*****************************************************************************/ /* */ /* supervision.h */ /* */ /* Supervision specific definitions */ /* */ /* */ /* */ /* 2003 Peter Trauner (trap@utanet.at) */ /* */ /* */ /* This software is provided "as-is," without any expressed or implied */ /* warranty. In no event will the authors be held liable for any damages */ /* arising from the use of this software. */ /* */ /* Permission is granted to anyone to use this software for any purpose, */ /* including commercial applications, and to alter and redistribute it */ /* freely, subject to the following restrictions: */ /* */ /* 1. The origin of this software must not be misrepresented; you must not */ /* claim that you wrote the original software. If you use this software */ /* in a product, an acknowledgment, in the product's documentation, */ /* would be appreciated, but is not required. */ /* 2. Alterred source versions must be marked plainly as such, */ /* and must not be misrepresented as being the original software. */ /* 3. This notice may not be removed or alterred */ /* from any source distribution. */ /* */ /*****************************************************************************/ #ifndef _SUPERVISION_H #define _SUPERVISION_H /* Check for errors */ #if !defined(__SUPERVISION__) # error This module may only be used when compiling for the Supervision! #endif /*****************************************************************************/ /* Data */ /*****************************************************************************/ struct __sv_lcd { unsigned char width; unsigned char height; unsigned char xpos; unsigned char ypos; }; #define SV_LCD (*(struct __sv_lcd*)0x2000) struct __sv_tone { unsigned delay; unsigned char control; unsigned char timer; }; #define SV_RIGHT (*(struct __sv_tone*)0x2010) #define SV_LEFT (*(struct __sv_tone*)0x2014) struct __sv_noise { unsigned char volume; /* and frequency */ unsigned char timer; unsigned char control; }; #define SV_NOISE (*(struct __sv_noise*)0x2028) struct __io_port { unsigned char in; unsigned char out; }; #define IO_PORT (*(struct __io_port*)0x2021) struct __sv_dma { unsigned start; unsigned char size; unsigned char control; unsigned char on; }; #define SV_DMA (*(struct __sv_dma*)0x2018) #define SV_CONTROL (*(unsigned char*)0x2020) #define SV_BANK (*(unsigned char*)0x2026) #define SV_BANK_COMBINE(nmi,irq_timer,irq_dma,lcd_on, timer_prescale, bank) \ ((nmi)?1:0)|((irq_timer)?2:0)|((irq_dma)?4:0)|((lcd_on)?8:0) \ |((timer_prescale)?0x10:0)|((bank)<<5) #define SV_VIDEO ((unsigned char*)0x4000) #define SV_TIMER_COUNT (*(unsigned char*)0x2023) /* Counters incremented asynchronously! ** If you want more complex, copy the crt0.s file from the libsrc/supervision ** directory and code them yourself (in assembler) */ extern unsigned char sv_nmi_counter; extern unsigned char sv_timer_irq_counter; extern unsigned char sv_timer_dma_counter; /* Masks for joy_read */ #define JOY_UP_MASK 0x08 #define JOY_DOWN_MASK 0x04 #define JOY_LEFT_MASK 0x02 #define JOY_RIGHT_MASK 0x01 #define JOY_BTN_1_MASK 0x20 #define JOY_BTN_2_MASK 0x10 #define JOY_BTN_3_MASK 0x80 #define JOY_BTN_4_MASK 0x40 #define JOY_BTN_A_MASK JOY_BTN_1_MASK #define JOY_BTN_B_MASk JOY_BTN_2_MASK #define JOY_START_MASK JOY_BTN_3_MASK #define JOY_SELECT_MASK JOY_BTN_4_MASK #define JOY_BTN_A(v) ((v) & JOY_BTN_A_MASK) #define JOY_BTN_B(v) ((v) & JOY_BTN_B_MASK) #define JOY_START(v) ((v) & JOY_START_MASK) #define JOY_SELECT(v) ((v) & JOY_SELECT_MASK) /* No support for dynamically loadable drivers */ #define DYN_DRV 0 /* The addresses of the static drivers */ extern void supervision_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ /* End of supervision.h */ #endif