mirror of
https://github.com/cc65/cc65.git
synced 2024-08-28 02:29:22 +00:00
The change matches the way that I/O register structures are defined in other headers. The names are defined as "struct", instead of as "pointer to struct".
138 lines
5.0 KiB
C
138 lines
5.0 KiB
C
/*****************************************************************************/
|
|
/* */
|
|
/* 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
|