llvm-mos-sdk
rp6502.h
Go to the documentation of this file.
1 #ifndef _RP6502_H
2 #define _RP6502_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 /* RP6502 VIA $FFD0-$FFDF */
9 struct __6522 {
10  unsigned char prb; /* Port register B */
11  unsigned char pra; /* Port register A */
12  unsigned char ddrb; /* Data direction register B */
13  unsigned char ddra; /* Data direction register A */
14  unsigned char t1_lo; /* Timer 1, low byte */
15  unsigned char t1_hi; /* Timer 1, high byte */
16  unsigned char t1l_lo; /* Timer 1 latch, low byte */
17  unsigned char t1l_hi; /* Timer 1 latch, high byte */
18  unsigned char t2_lo; /* Timer 2, low byte */
19  unsigned char t2_hi; /* Timer 2, high byte */
20  unsigned char sr; /* Shift register */
21  unsigned char acr; /* Auxiliary control register */
22  unsigned char pcr; /* Peripheral control register */
23  unsigned char ifr; /* Interrupt flag register */
24  unsigned char ier; /* Interrupt enable register */
25  unsigned char pra2; /* Port register A w/o handshake */
26 };
27 #define VIA (*(volatile struct __6522 *)0xFFD0)
28 
29 /* RP6502 RIA $FFE0-$FFF9 */
30 struct __RP6502 {
31  const unsigned char ready;
32  unsigned char tx;
33  const unsigned char rx;
34  const unsigned char vsync;
35  unsigned char rw0;
36  signed char step0;
37  unsigned int addr0;
38  unsigned char rw1;
39  signed char step1;
40  unsigned int addr1;
41  unsigned char xstack;
42  unsigned int errno_;
43  unsigned char op;
44  unsigned char irq;
45  const unsigned char spin;
46  const unsigned char busy;
47  const unsigned char lda;
48  unsigned char a;
49  const unsigned char ldx;
50  unsigned char x;
51  const unsigned char rts;
52  unsigned int sreg;
53 };
54 #define RIA (*(volatile struct __RP6502 *)0xFFE0)
55 
56 /* OS operation numbers */
57 
58 #define RIA_OP_EXIT 0xFF
59 #define RIA_OP_DROP_XSTACK 0x00
60 #define RIA_OP_XREG 0x01
61 #define RIA_OP_ARGV 0x08
62 #define RIA_OP_EXEC 0x09
63 #define RIA_OP_ATTR_GET 0x0A
64 #define RIA_OP_ATTR_SET 0x0B
65 #define RIA_OP_OPEN 0x14
66 #define RIA_OP_CLOSE 0x15
67 #define RIA_OP_READ_XSTACK 0x16
68 #define RIA_OP_READ_XRAM 0x17
69 #define RIA_OP_WRITE_XSTACK 0x18
70 #define RIA_OP_WRITE_XRAM 0x19
71 #define RIA_OP_LSEEK_CC65 0x1A
72 #define RIA_OP_REMOVE 0x1B
73 #define RIA_OP_RENAME 0x1C
74 #define RIA_OP_LSEEK 0x1D
75 #define RIA_OP_LSEEK_LLVM 0x1D
76 #define RIA_OP_SYNCFS 0x1E
77 #define RIA_OP_STAT 0x1F
78 #define RIA_OP_OPENDIR 0x20
79 #define RIA_OP_READDIR 0x21
80 #define RIA_OP_CLOSEDIR 0x22
81 #define RIA_OP_TELLDIR 0x23
82 #define RIA_OP_SEEKDIR 0x24
83 #define RIA_OP_REWINDDIR 0x25
84 #define RIA_OP_CHMOD 0x26
85 #define RIA_OP_UTIME 0x27
86 #define RIA_OP_MKDIR 0x28
87 #define RIA_OP_CHDIR 0x29
88 #define RIA_OP_GETCWD 0x2B
89 #define RIA_OP_SETLABEL 0x2C
90 #define RIA_OP_GETLABEL 0x2D
91 #define RIA_OP_GETFREE 0x2E
92 #define RIA_OP_RLN_LASTKEY 0x30
93 #define RIA_OP_RLN_PEEK 0x31
94 #define RIA_OP_RLN_POKE 0x32
95 #define RIA_OP_GMTIME 0x3A
96 #define RIA_OP_LOCALTIME 0x3B
97 #define RIA_OP_MKTIME 0x3C
98 #define RIA_OP_STRFTIME 0x3D
99 #define RIA_OP_TIME_SET 0x3E
100 #define RIA_OP_TIME_GET 0x3F
101 
102 /* RIA attribute IDs */
103 
104 #define RIA_ATTR_ERRNO_OPT 0x00
105 #define RIA_ATTR_PHI2_KHZ 0x01
106 #define RIA_ATTR_CODE_PAGE 0x02
107 #define RIA_ATTR_RLN_LENGTH 0x03
108 #define RIA_ATTR_LRAND 0x04
109 #define RIA_ATTR_BEL 0x05
110 #define RIA_ATTR_LAUNCHER 0x06
111 #define RIA_ATTR_EXIT_CODE 0x07
112 #define RIA_ATTR_SIGINT 0x08
113 #define RIA_ATTR_RLN_CAPS 0x09
114 #define RIA_ATTR_RLN_WIDTH 0x0A
115 #define RIA_ATTR_RLN_HEIGHT 0x0B
116 #define RIA_ATTR_RLN_SUPPRESS_NL 0x0C
117 #define RIA_ATTR_CLK_RUN_MS 0x10
118 #define RIA_ATTR_CLK_RUN_CS 0x11
119 #define RIA_ATTR_CLK_RUN_DS 0x12
120 #define RIA_ATTR_CLK_RUN_S 0x13
121 
122 /* C API for the operating system. */
123 
124 typedef struct {
125  unsigned long fsize;
126  unsigned fdate;
127  unsigned ftime;
128  unsigned crdate;
129  unsigned crtime;
130  unsigned char fattrib;
131  char altname[12 + 1];
132  char fname[255 + 1];
133 } f_stat_t;
134 
135 void ria_drop(void);
136 __attribute__((leaf)) int ria_spin(void);
137 unsigned char ria_vsync(void);
138 unsigned char ria_irq_read(void);
139 void ria_irq_write(unsigned char mask);
140 int ria_execv(const char *path, char *const argv[]);
141 int ria_execl(const char *path, ...);
142 long ria_attr_get(unsigned char id);
143 int ria_attr_set(long val, unsigned char id);
144 int read_xstack(void *buf, unsigned count, int fildes);
145 int read_xram(unsigned xaddr, unsigned count, int fildes);
146 int write_xstack(const void *buf, unsigned count, int fildes);
147 int write_xram(unsigned xaddr, unsigned count, int fildes);
148 long f_lseek(long offset, char whence, int fildes);
149 int f_stat(const char *path, f_stat_t *dirent);
150 int f_opendir(const char *name);
151 int f_readdir(f_stat_t *dirent, int dirdes);
152 int f_closedir(int dirdes);
153 long f_telldir(int dirdes);
154 int f_seekdir(long loc, int dirdes);
155 int f_rewinddir(int dirdes);
156 int f_chmod(const char *path, unsigned char attr, unsigned char mask);
157 int f_utime(const char *path, unsigned fdate, unsigned ftime, unsigned crdate,
158  unsigned crtime);
159 int f_mkdir(const char *name);
160 int f_setlabel(const char *name);
161 int f_getlabel(const char *drive, char *label);
162 int f_getfree(const char *drive, unsigned long *free, unsigned long *total);
163 int ria_rln_lastkey(char *key, unsigned char *action);
164 int ria_rln_peek(char *peek, unsigned char *pos);
165 int ria_rln_poke(const char *poke);
166 int time_set(long long time);
167 
168 /* Extended memory */
169 
170 #define xreg(d, c, i, ...) \
171  xregn(d, c, i, sizeof((long[]){__VA_ARGS__}) / sizeof(long), __VA_ARGS__)
172 int xregn(char device, char channel, unsigned char index, unsigned count, ...);
173 void xram0_read(void *dest, unsigned src, unsigned count);
174 void xram1_read(void *dest, unsigned src, unsigned count);
175 void xram0_write(unsigned dest, const void *src, unsigned count);
176 void xram1_write(unsigned dest, const void *src, unsigned count);
177 void xram0_set(unsigned dest, unsigned char val, unsigned count);
178 void xram1_set(unsigned dest, unsigned char val, unsigned count);
179 void xram_move(unsigned dest, unsigned src, unsigned count);
180 unsigned char xram0_peek8(unsigned addr);
181 unsigned char xram1_peek8(unsigned addr);
182 unsigned xram0_peek16(unsigned addr);
183 unsigned xram1_peek16(unsigned addr);
184 void xram0_poke8(unsigned addr, unsigned char val);
185 void xram1_poke8(unsigned addr, unsigned char val);
186 void xram0_poke16(unsigned addr, unsigned val);
187 void xram1_poke16(unsigned addr, unsigned val);
188 
189 #ifdef __cplusplus
190 }
191 #endif
192 
193 #endif /* _RP6502_H */
void free(void *ptr)
time_t time(time_t *timep)
byte x
Definition: api.h:26
char channel
Definition: famitone2.h:31
char count
Definition: bios.h:188
const void * src
Definition: memory.h:57
char index
Definition: nesdoug.h:113
char char char attr
Definition: neslib.h:85
void xram0_set(unsigned dest, unsigned char val, unsigned count)
int ria_rln_poke(const char *poke)
int f_getlabel(const char *drive, char *label)
int f_opendir(const char *name)
int ria_rln_lastkey(char *key, unsigned char *action)
long f_telldir(int dirdes)
int write_xstack(const void *buf, unsigned count, int fildes)
int f_setlabel(const char *name)
void xram_move(unsigned dest, unsigned src, unsigned count)
int time_set(long long time)
void xram1_write(unsigned dest, const void *src, unsigned count)
void xram0_read(void *dest, unsigned src, unsigned count)
int f_seekdir(long loc, int dirdes)
void xram1_set(unsigned dest, unsigned char val, unsigned count)
void xram0_write(unsigned dest, const void *src, unsigned count)
void xram1_poke16(unsigned addr, unsigned val)
int write_xram(unsigned xaddr, unsigned count, int fildes)
unsigned char xram0_peek8(unsigned addr)
unsigned char ria_vsync(void)
int ria_attr_set(long val, unsigned char id)
int f_utime(const char *path, unsigned fdate, unsigned ftime, unsigned crdate, unsigned crtime)
unsigned char ria_irq_read(void)
int ria_execv(const char *path, char *const argv[])
void xram0_poke8(unsigned addr, unsigned char val)
unsigned xram0_peek16(unsigned addr)
int f_rewinddir(int dirdes)
void ria_irq_write(unsigned char mask)
int f_mkdir(const char *name)
int read_xram(unsigned xaddr, unsigned count, int fildes)
void xram1_poke8(unsigned addr, unsigned char val)
int f_readdir(f_stat_t *dirent, int dirdes)
int f_getfree(const char *drive, unsigned long *free, unsigned long *total)
long ria_attr_get(unsigned char id)
int f_closedir(int dirdes)
unsigned char xram1_peek8(unsigned addr)
int f_stat(const char *path, f_stat_t *dirent)
long f_lseek(long offset, char whence, int fildes)
int ria_rln_peek(char *peek, unsigned char *pos)
void ria_drop(void)
void xram0_poke16(unsigned addr, unsigned val)
int xregn(char device, char channel, unsigned char index, unsigned count,...)
int read_xstack(void *buf, unsigned count, int fildes)
unsigned xram1_peek16(unsigned addr)
int ria_execl(const char *path,...)
void xram1_read(void *dest, unsigned src, unsigned count)
int f_chmod(const char *path, unsigned char attr, unsigned char mask)
Definition: rp6502.h:124
unsigned char fattrib
Definition: rp6502.h:130
unsigned ftime
Definition: rp6502.h:127
unsigned crtime
Definition: rp6502.h:129
unsigned long fsize
Definition: rp6502.h:125
unsigned fdate
Definition: rp6502.h:126
unsigned crdate
Definition: rp6502.h:128