File: supervision.h

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (137 lines) | stat: -rw-r--r-- 5,169 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*****************************************************************************/
/*                                                                           */
/*                               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