Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/include/PR/os.h
7858 views
1
2
/*====================================================================
3
* os.h
4
*
5
* Copyright 1995, Silicon Graphics, Inc.
6
* All Rights Reserved.
7
*
8
* This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
9
* Inc.; the contents of this file may not be disclosed to third
10
* parties, copied or duplicated in any form, in whole or in part,
11
* without the prior written permission of Silicon Graphics, Inc.
12
*
13
* RESTRICTED RIGHTS LEGEND:
14
* Use, duplication or disclosure by the Government is subject to
15
* restrictions as set forth in subdivision (c)(1)(ii) of the Rights
16
* in Technical Data and Computer Software clause at DFARS
17
* 252.227-7013, and/or in similar or successor clauses in the FAR,
18
* DOD or NASA FAR Supplement. Unpublished - rights reserved under the
19
* Copyright Laws of the United States.
20
*====================================================================*/
21
22
/**************************************************************************
23
*
24
* $Revision: 1.149 $
25
* $Date: 1997/12/15 04:30:52 $
26
* $Source: /disk6/Master/cvsmdev2/PR/include/os.h,v $
27
*
28
**************************************************************************/
29
30
31
#ifndef _OS_H_
32
#define _OS_H_
33
34
#ifdef _LANGUAGE_C_PLUS_PLUS
35
extern "C" {
36
#endif
37
38
#include <PR/ultratypes.h>
39
#include "PR/os_message.h"
40
41
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
42
43
/**************************************************************************
44
*
45
* Type definitions
46
*
47
*/
48
49
/*
50
* Structure for device manager block
51
*/
52
typedef struct {
53
s32 active; /* Status flag */
54
OSThread *thread; /* Calling thread */
55
OSMesgQueue *cmdQueue; /* Command queue */
56
OSMesgQueue *evtQueue; /* Event queue */
57
OSMesgQueue *acsQueue; /* Access queue */
58
/* Raw DMA routine */
59
s32 (*dma)(s32, u32, void *, u32);
60
s32 (*edma)(OSPiHandle *, s32, u32, void *, u32);
61
} OSDevMgr;
62
63
/*
64
* Structure for file system
65
*/
66
67
68
69
typedef struct {
70
int status;
71
OSMesgQueue *queue;
72
int channel;
73
u8 id[32];
74
u8 label[32];
75
int version;
76
int dir_size;
77
int inode_table; /* block location */
78
int minode_table; /* mirrioring inode_table */
79
int dir_table; /* block location */
80
int inode_start_page; /* page # */
81
u8 banks;
82
u8 activebank;
83
} OSPfs;
84
85
86
typedef struct {
87
u32 file_size; /* bytes */
88
u32 game_code;
89
u16 company_code;
90
char ext_name[4];
91
char game_name[16];
92
} OSPfsState;
93
94
/*
95
* Structure for Profiler
96
*/
97
typedef struct {
98
u16 *histo_base; /* histogram base */
99
u32 histo_size; /* histogram size */
100
u32 *text_start; /* start of text segment */
101
u32 *text_end; /* end of text segment */
102
} OSProf;
103
104
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
105
106
/**************************************************************************
107
*
108
* Global definitions
109
*
110
*/
111
112
/* Thread states */
113
114
#define OS_STATE_STOPPED 1
115
#define OS_STATE_RUNNABLE 2
116
#define OS_STATE_RUNNING 4
117
#define OS_STATE_WAITING 8
118
119
/* Events */
120
#ifdef _FINALROM
121
#define OS_NUM_EVENTS 15
122
#else
123
#define OS_NUM_EVENTS 23
124
#endif
125
126
#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */
127
#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */
128
#define OS_EVENT_CART 2 /* Cartridge interrupt: used by rmon */
129
#define OS_EVENT_COUNTER 3 /* Counter int: used by VI/Timer Mgr */
130
#define OS_EVENT_SP 4 /* SP task done interrupt */
131
#define OS_EVENT_SI 5 /* SI (controller) interrupt */
132
#define OS_EVENT_AI 6 /* AI interrupt */
133
#define OS_EVENT_VI 7 /* VI interrupt: used by VI/Timer Mgr */
134
#define OS_EVENT_PI 8 /* PI interrupt: used by PI Manager */
135
#define OS_EVENT_DP 9 /* DP full sync interrupt */
136
#define OS_EVENT_CPU_BREAK 10 /* CPU breakpoint: used by rmon */
137
#define OS_EVENT_SP_BREAK 11 /* SP breakpoint: used by rmon */
138
#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */
139
#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */
140
#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */
141
#ifndef _FINALROM
142
#define OS_EVENT_RDB_READ_DONE 15 /* RDB read ok event: used by rmon */
143
#define OS_EVENT_RDB_LOG_DONE 16 /* read of log data complete */
144
#define OS_EVENT_RDB_DATA_DONE 17 /* read of hostio data complete */
145
#define OS_EVENT_RDB_REQ_RAMROM 18 /* host needs ramrom access */
146
#define OS_EVENT_RDB_FREE_RAMROM 19 /* host is done with ramrom access */
147
#define OS_EVENT_RDB_DBG_DONE 20
148
#define OS_EVENT_RDB_FLUSH_PROF 21
149
#define OS_EVENT_RDB_ACK_PROF 22
150
#endif
151
152
/* Flags for debugging purpose */
153
154
#define OS_FLAG_CPU_BREAK 1 /* Break exception has occurred */
155
#define OS_FLAG_FAULT 2 /* CPU fault has occurred */
156
157
/* Interrupt masks */
158
159
#define OS_IM_NONE 0x00000001
160
#define OS_IM_SW1 0x00000501
161
#define OS_IM_SW2 0x00000601
162
#define OS_IM_CART 0x00000c01
163
#define OS_IM_PRENMI 0x00001401
164
#define OS_IM_RDBWRITE 0x00002401
165
#define OS_IM_RDBREAD 0x00004401
166
#define OS_IM_COUNTER 0x00008401
167
#define OS_IM_CPU 0x0000ff01
168
#define OS_IM_SP 0x00010401
169
#define OS_IM_SI 0x00020401
170
#define OS_IM_AI 0x00040401
171
#define OS_IM_VI 0x00080401
172
#define OS_IM_PI 0x00100401
173
#define OS_IM_DP 0x00200401
174
#define OS_IM_ALL 0x003fff01
175
#define RCP_IMASK 0x003f0000
176
#define RCP_IMASKSHIFT 16
177
178
/* Recommended thread priorities for the system threads */
179
180
#define OS_PRIORITY_MAX 255
181
#define OS_PRIORITY_VIMGR 254
182
#define OS_PRIORITY_RMON 250
183
#define OS_PRIORITY_RMONSPIN 200
184
#define OS_PRIORITY_PIMGR 150
185
#define OS_PRIORITY_SIMGR 140
186
#define OS_PRIORITY_APPMAX 127
187
#define OS_PRIORITY_IDLE 0 /* Must be 0 */
188
189
190
/* Flags to turn blocking on/off when sending/receiving message */
191
192
#define OS_MESG_NOBLOCK 0
193
#define OS_MESG_BLOCK 1
194
195
/* Flags to indicate direction of data transfer */
196
197
#define OS_READ 0 /* device -> RDRAM */
198
#define OS_WRITE 1 /* device <- RDRAM */
199
#define OS_OTHERS 2 /* for Leo disk only */
200
201
/*
202
* I/O message types
203
*/
204
#define OS_MESG_TYPE_BASE (10)
205
#define OS_MESG_TYPE_LOOPBACK (OS_MESG_TYPE_BASE+0)
206
#define OS_MESG_TYPE_DMAREAD (OS_MESG_TYPE_BASE+1)
207
#define OS_MESG_TYPE_DMAWRITE (OS_MESG_TYPE_BASE+2)
208
#define OS_MESG_TYPE_VRETRACE (OS_MESG_TYPE_BASE+3)
209
#define OS_MESG_TYPE_COUNTER (OS_MESG_TYPE_BASE+4)
210
#define OS_MESG_TYPE_EDMAREAD (OS_MESG_TYPE_BASE+5)
211
#define OS_MESG_TYPE_EDMAWRITE (OS_MESG_TYPE_BASE+6)
212
213
/*
214
* I/O message priority
215
*/
216
#define OS_MESG_PRI_NORMAL 0
217
#define OS_MESG_PRI_HIGH 1
218
219
/*
220
* Page size argument for TLB routines
221
*/
222
#define OS_PM_4K 0x0000000
223
#define OS_PM_16K 0x0006000
224
#define OS_PM_64K 0x001e000
225
#define OS_PM_256K 0x007e000
226
#define OS_PM_1M 0x01fe000
227
#define OS_PM_4M 0x07fe000
228
#define OS_PM_16M 0x1ffe000
229
230
/*
231
* Stack size for I/O device managers: PIM (PI Manager), VIM (VI Manager),
232
* SIM (SI Manager)
233
*
234
*/
235
#define OS_PIM_STACKSIZE 4096
236
#define OS_VIM_STACKSIZE 4096
237
#define OS_SIM_STACKSIZE 4096
238
239
#define OS_MIN_STACKSIZE 72
240
241
/*
242
* Values for osTvType
243
*/
244
#define OS_TV_PAL 0
245
#define OS_TV_NTSC 1
246
#define OS_TV_MPAL 2
247
248
/*
249
* Video Interface (VI) mode type
250
*/
251
#define OS_VI_NTSC_LPN1 0 /* NTSC */
252
#define OS_VI_NTSC_LPF1 1
253
#define OS_VI_NTSC_LAN1 2
254
#define OS_VI_NTSC_LAF1 3
255
#define OS_VI_NTSC_LPN2 4
256
#define OS_VI_NTSC_LPF2 5
257
#define OS_VI_NTSC_LAN2 6
258
#define OS_VI_NTSC_LAF2 7
259
#define OS_VI_NTSC_HPN1 8
260
#define OS_VI_NTSC_HPF1 9
261
#define OS_VI_NTSC_HAN1 10
262
#define OS_VI_NTSC_HAF1 11
263
#define OS_VI_NTSC_HPN2 12
264
#define OS_VI_NTSC_HPF2 13
265
266
#define OS_VI_PAL_LPN1 14 /* PAL */
267
#define OS_VI_PAL_LPF1 15
268
#define OS_VI_PAL_LAN1 16
269
#define OS_VI_PAL_LAF1 17
270
#define OS_VI_PAL_LPN2 18
271
#define OS_VI_PAL_LPF2 19
272
#define OS_VI_PAL_LAN2 20
273
#define OS_VI_PAL_LAF2 21
274
#define OS_VI_PAL_HPN1 22
275
#define OS_VI_PAL_HPF1 23
276
#define OS_VI_PAL_HAN1 24
277
#define OS_VI_PAL_HAF1 25
278
#define OS_VI_PAL_HPN2 26
279
#define OS_VI_PAL_HPF2 27
280
281
#define OS_VI_MPAL_LPN1 28 /* MPAL - mainly Brazil */
282
#define OS_VI_MPAL_LPF1 29
283
#define OS_VI_MPAL_LAN1 30
284
#define OS_VI_MPAL_LAF1 31
285
#define OS_VI_MPAL_LPN2 32
286
#define OS_VI_MPAL_LPF2 33
287
#define OS_VI_MPAL_LAN2 34
288
#define OS_VI_MPAL_LAF2 35
289
#define OS_VI_MPAL_HPN1 36
290
#define OS_VI_MPAL_HPF1 37
291
#define OS_VI_MPAL_HAN1 38
292
#define OS_VI_MPAL_HAF1 39
293
#define OS_VI_MPAL_HPN2 40
294
#define OS_VI_MPAL_HPF2 41
295
296
/*
297
* Video Interface (VI) special features
298
*/
299
#define OS_VI_GAMMA_ON 0x0001
300
#define OS_VI_GAMMA_OFF 0x0002
301
#define OS_VI_GAMMA_DITHER_ON 0x0004
302
#define OS_VI_GAMMA_DITHER_OFF 0x0008
303
#define OS_VI_DIVOT_ON 0x0010
304
#define OS_VI_DIVOT_OFF 0x0020
305
#define OS_VI_DITHER_FILTER_ON 0x0040
306
#define OS_VI_DITHER_FILTER_OFF 0x0080
307
308
/*
309
* Video Interface (VI) mode attribute bit
310
*/
311
#define OS_VI_BIT_NONINTERLACE 0x0001 /* lo-res */
312
#define OS_VI_BIT_INTERLACE 0x0002 /* lo-res */
313
#define OS_VI_BIT_NORMALINTERLACE 0x0004 /* hi-res */
314
#define OS_VI_BIT_DEFLICKINTERLACE 0x0008 /* hi-res */
315
#define OS_VI_BIT_ANTIALIAS 0x0010
316
#define OS_VI_BIT_POINTSAMPLE 0x0020
317
#define OS_VI_BIT_16PIXEL 0x0040
318
#define OS_VI_BIT_32PIXEL 0x0080
319
#define OS_VI_BIT_LORES 0x0100
320
#define OS_VI_BIT_HIRES 0x0200
321
#define OS_VI_BIT_NTSC 0x0400
322
#define OS_VI_BIT_PAL 0x0800
323
324
/*
325
* Leo Disk
326
*/
327
328
/* transfer mode */
329
330
#define LEO_BLOCK_MODE 1
331
#define LEO_TRACK_MODE 2
332
#define LEO_SECTOR_MODE 3
333
334
/*
335
* Controllers number
336
*/
337
338
#ifndef _HW_VERSION_1
339
#define MAXCONTROLLERS 4
340
#else
341
#define MAXCONTROLLERS 6
342
#endif
343
344
/* controller errors */
345
#define CONT_NO_RESPONSE_ERROR 0x8
346
#define CONT_OVERRUN_ERROR 0x4
347
#ifdef _HW_VERSION_1
348
#define CONT_FRAME_ERROR 0x2
349
#define CONT_COLLISION_ERROR 0x1
350
#endif
351
352
/* Controller type */
353
354
#define CONT_ABSOLUTE 0x0001
355
#define CONT_RELATIVE 0x0002
356
#define CONT_JOYPORT 0x0004
357
#define CONT_EEPROM 0x8000
358
#define CONT_EEP16K 0x4000
359
#define CONT_TYPE_MASK 0x1f07
360
#define CONT_TYPE_NORMAL 0x0005
361
#define CONT_TYPE_MOUSE 0x0002
362
363
/* Controller status */
364
365
#define CONT_CARD_ON 0x01
366
#define CONT_CARD_PULL 0x02
367
#define CONT_ADDR_CRC_ER 0x04
368
#define CONT_EEPROM_BUSY 0x80
369
370
/* EEPROM TYPE */
371
372
#define EEPROM_TYPE_4K 0x01
373
#define EEPROM_TYPE_16K 0x02
374
375
/* Buttons */
376
377
#define CONT_A 0x8000
378
#define CONT_B 0x4000
379
#define CONT_G 0x2000
380
#define CONT_START 0x1000
381
#define CONT_UP 0x0800
382
#define CONT_DOWN 0x0400
383
#define CONT_LEFT 0x0200
384
#define CONT_RIGHT 0x0100
385
#define CONT_L 0x0020
386
#define CONT_R 0x0010
387
#define CONT_E 0x0008
388
#define CONT_D 0x0004
389
#define CONT_C 0x0002
390
#define CONT_F 0x0001
391
392
/* Nintendo's official button names */
393
394
#define A_BUTTON CONT_A
395
#define B_BUTTON CONT_B
396
#define L_TRIG CONT_L
397
#define R_TRIG CONT_R
398
#define Z_TRIG CONT_G
399
#define START_BUTTON CONT_START
400
#define U_JPAD CONT_UP
401
#define L_JPAD CONT_LEFT
402
#define R_JPAD CONT_RIGHT
403
#define D_JPAD CONT_DOWN
404
#define U_CBUTTONS CONT_E
405
#define L_CBUTTONS CONT_C
406
#define R_CBUTTONS CONT_F
407
#define D_CBUTTONS CONT_D
408
409
/* File System size */
410
#define OS_PFS_VERSION 0x0200
411
#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8)
412
#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255)
413
414
#define PFS_FILE_NAME_LEN 16
415
#define PFS_FILE_EXT_LEN 4
416
#define BLOCKSIZE 32 /* bytes */
417
#define PFS_ONE_PAGE 8 /* blocks */
418
#define PFS_MAX_BANKS 62
419
420
/* File System flag */
421
422
#define PFS_READ 0
423
#define PFS_WRITE 1
424
#define PFS_CREATE 2
425
426
/* File System status */
427
#define PFS_INITIALIZED 0x1
428
#define PFS_CORRUPTED 0x2 /* File system was corrupted */
429
430
/* File System error number */
431
432
#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */
433
#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a */
434
/* different one */
435
#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker */
436
#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR
437
#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/
438
#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/
439
#define PFS_DATA_FULL 7 /* no free pages on ram pack */
440
#define PFS_DIR_FULL 8 /* no free directories on ram pack*/
441
#define PFS_ERR_EXIST 9 /* file exists */
442
#define PFS_ERR_ID_FATAL 10 /* dead ram pack */
443
#define PFS_ERR_DEVICE 11 /* wrong device type*/
444
445
/* definition for EEPROM */
446
447
#define EEPROM_MAXBLOCKS 64
448
#define EEP16K_MAXBLOCKS 256
449
#define EEPROM_BLOCK_SIZE 8
450
451
/*
452
* PI/EPI
453
*/
454
#define PI_DOMAIN1 0
455
#define PI_DOMAIN2 1
456
457
/*
458
* Profiler constants
459
*/
460
#define PROF_MIN_INTERVAL 50 /* microseconds */
461
462
/*
463
* Boot addresses
464
*/
465
#define BOOT_ADDRESS_ULTRA 0x80000400
466
#define BOOT_ADDRESS_COSIM 0x80002000
467
#define BOOT_ADDRESS_EMU 0x20010000
468
#define BOOT_ADDRESS_INDY 0x88100000
469
470
/*
471
* Size of buffer the retains contents after NMI
472
*/
473
#define OS_APP_NMI_BUFSIZE 64
474
475
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
476
477
/**************************************************************************
478
*
479
* Macro definitions
480
*
481
*/
482
483
/* PARTNER-N64 */
484
#ifdef PTN64
485
#define osReadHost osReadHost_pt
486
#define osWriteHost osWriteHost_pt
487
#endif
488
489
/* Get count of valid messages in queue */
490
#define MQ_GET_COUNT(mq) ((mq)->validCount)
491
492
/* Figure out if message queue is empty or full */
493
#define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0)
494
#define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount)
495
496
/*
497
* CPU counter increments at 3/4 of bus clock rate:
498
*
499
* Bus Clock Proc Clock Counter (1/2 Proc Clock)
500
* --------- ---------- ------------------------
501
* 62.5 Mhz 93.75 Mhz 46.875 Mhz
502
*/
503
extern u64 osClockRate;
504
505
#define OS_CLOCK_RATE 62500000LL
506
#define OS_CPU_COUNTER (OS_CLOCK_RATE*3/4)
507
#define OS_NSEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL))
508
#define OS_USEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL))
509
#define OS_CYCLES_TO_NSEC(c) (((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL))
510
#define OS_CYCLES_TO_USEC(c) (((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL))
511
512
/**************************************************************************
513
*
514
* Extern variables
515
*
516
*/
517
extern OSViMode osViModeTable[]; /* Global VI mode table */
518
519
extern OSViMode osViModeNtscLpn1; /* Individual VI NTSC modes */
520
extern OSViMode osViModeNtscLpf1;
521
extern OSViMode osViModeNtscLan1;
522
extern OSViMode osViModeNtscLaf1;
523
extern OSViMode osViModeNtscLpn2;
524
extern OSViMode osViModeNtscLpf2;
525
extern OSViMode osViModeNtscLan2;
526
extern OSViMode osViModeNtscLaf2;
527
extern OSViMode osViModeNtscHpn1;
528
extern OSViMode osViModeNtscHpf1;
529
extern OSViMode osViModeNtscHan1;
530
extern OSViMode osViModeNtscHaf1;
531
extern OSViMode osViModeNtscHpn2;
532
extern OSViMode osViModeNtscHpf2;
533
534
extern OSViMode osViModePalLpn1; /* Individual VI PAL modes */
535
extern OSViMode osViModePalLpf1;
536
extern OSViMode osViModePalLan1;
537
extern OSViMode osViModePalLaf1;
538
extern OSViMode osViModePalLpn2;
539
extern OSViMode osViModePalLpf2;
540
extern OSViMode osViModePalLan2;
541
extern OSViMode osViModePalLaf2;
542
extern OSViMode osViModePalHpn1;
543
extern OSViMode osViModePalHpf1;
544
extern OSViMode osViModePalHan1;
545
extern OSViMode osViModePalHaf1;
546
extern OSViMode osViModePalHpn2;
547
extern OSViMode osViModePalHpf2;
548
549
extern OSViMode osViModeMpalLpn1; /* Individual VI MPAL modes */
550
extern OSViMode osViModeMpalLpf1;
551
extern OSViMode osViModeMpalLan1;
552
extern OSViMode osViModeMpalLaf1;
553
extern OSViMode osViModeMpalLpn2;
554
extern OSViMode osViModeMpalLpf2;
555
extern OSViMode osViModeMpalLan2;
556
extern OSViMode osViModeMpalLaf2;
557
extern OSViMode osViModeMpalHpn1;
558
extern OSViMode osViModeMpalHpf1;
559
extern OSViMode osViModeMpalHan1;
560
extern OSViMode osViModeMpalHaf1;
561
extern OSViMode osViModeMpalHpn2;
562
extern OSViMode osViModeMpalHpf2;
563
564
extern s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */
565
extern u32 osRomBase; /* Rom base address of the game image */
566
extern u32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */
567
extern u32 osResetType; /* 0 = cold reset, 1 = NMI */
568
extern s32 osCicId;
569
extern s32 osVersion;
570
extern u32 osMemSize; /* Memory Size */
571
extern s32 osAppNMIBuffer[];
572
573
extern OSIntMask __OSGlobalIntMask; /* global interrupt mask */
574
extern OSPiHandle *__osPiTable; /* The head of OSPiHandle link list */
575
extern OSPiHandle *__osDiskHandle; /* For exceptasm to get disk info*/
576
577
578
579
/**************************************************************************
580
*
581
* Function prototypes
582
*
583
*/
584
585
/* Thread operations */
586
587
extern void osCreateThread(OSThread *, OSId, void (*)(void *),
588
void *, void *, OSPri);
589
extern void osDestroyThread(OSThread *);
590
extern void osYieldThread(void);
591
extern void osStartThread(OSThread *);
592
extern void osStopThread(OSThread *);
593
extern OSId osGetThreadId(OSThread *);
594
extern void osSetThreadPri(OSThread *, OSPri);
595
extern OSPri osGetThreadPri(OSThread *);
596
597
/* Message operations */
598
599
extern void osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32);
600
extern s32 osSendMesg(OSMesgQueue *, OSMesg, s32);
601
extern s32 osJamMesg(OSMesgQueue *, OSMesg, s32);
602
extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32);
603
604
/* Event operations */
605
606
extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg);
607
608
/* Interrupt operations */
609
610
extern OSIntMask osGetIntMask(void);
611
extern OSIntMask osSetIntMask(OSIntMask);
612
613
/* RDB port operations */
614
615
extern void osInitRdb(u8 *sendBuf, u32 sendSize);
616
617
/* Cache operations and macros */
618
619
extern void osInvalDCache(void *, size_t);
620
extern void osInvalICache(void *, size_t);
621
extern void osWritebackDCache(void *, size_t);
622
extern void osWritebackDCacheAll(void);
623
624
#define OS_DCACHE_ROUNDUP_ADDR(x) (void *)(((((u32)(x)+0xf)/0x10)*0x10))
625
#define OS_DCACHE_ROUNDUP_SIZE(x) (u32)(((((u32)(x)+0xf)/0x10)*0x10))
626
627
/* TLB management routines */
628
629
extern void osMapTLB(s32, OSPageMask, void *, u32, u32, s32);
630
extern void osMapTLBRdb(void);
631
extern void osUnmapTLB(s32);
632
extern void osUnmapTLBAll(void);
633
extern void osSetTLBASID(s32);
634
635
/* Address translation routines and macros */
636
637
extern u32 osVirtualToPhysical(void *);
638
extern void * osPhysicalToVirtual(u32);
639
640
#define OS_K0_TO_PHYSICAL(x) (u32)(((char *)(x)-0x80000000))
641
#define OS_K1_TO_PHYSICAL(x) (u32)(((char *)(x)-0xa0000000))
642
643
#define OS_PHYSICAL_TO_K0(x) (void *)(((u32)(x)+0x80000000))
644
#define OS_PHYSICAL_TO_K1(x) (void *)(((u32)(x)+0xa0000000))
645
646
/* I/O operations */
647
648
/* Audio interface (Ai) */
649
extern u32 osAiGetStatus(void);
650
extern u32 osAiGetLength(void);
651
extern s32 osAiSetFrequency(u32);
652
extern s32 osAiSetNextBuffer(void *, u32);
653
654
/* Display processor interface (Dp) */
655
extern u32 osDpGetStatus(void);
656
extern void osDpSetStatus(u32);
657
extern void osDpGetCounters(u32 *);
658
extern s32 osDpSetNextBuffer(void *, u64);
659
660
/* Peripheral interface (Pi) */
661
extern u32 osPiGetStatus(void);
662
extern s32 osPiGetDeviceType(void);
663
extern s32 osPiRawWriteIo(u32, u32);
664
extern s32 osPiRawReadIo(u32, u32 *);
665
extern s32 osPiRawStartDma(s32, u32, void *, u32);
666
extern s32 osPiWriteIo(u32, u32);
667
extern s32 osPiReadIo(u32, u32 *);
668
extern s32 osPiStartDma(OSIoMesg *, s32, s32, u32, void *, u32,
669
OSMesgQueue *);
670
extern void osCreatePiManager(OSPri, OSMesgQueue *, OSMesg *, s32);
671
672
/* Video interface (Vi) */
673
extern u32 osViGetStatus(void);
674
extern u32 osViGetCurrentMode(void);
675
extern u32 osViGetCurrentLine(void);
676
extern u32 osViGetCurrentField(void);
677
extern void *osViGetCurrentFramebuffer(void);
678
extern void *osViGetNextFramebuffer(void);
679
extern void osViSetXScale(f32);
680
extern void osViSetYScale(f32);
681
extern void osViSetSpecialFeatures(u32);
682
extern void osViSetMode(OSViMode *);
683
extern void osViSetEvent(OSMesgQueue *, OSMesg, u32);
684
extern void osViSwapBuffer(void *);
685
extern void osViBlack(u8);
686
extern void osViFade(u8, u16);
687
extern void osViRepeatLine(u8);
688
extern void osCreateViManager(OSPri);
689
690
/* Timer interface */
691
692
extern OSTime osGetTime(void);
693
extern void osSetTime(OSTime);
694
extern u32 osSetTimer(OSTimer *, OSTime, OSTime,
695
OSMesgQueue *, OSMesg);
696
extern int osStopTimer(OSTimer *);
697
698
/* Controller interface */
699
700
extern s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *);
701
extern s32 osContReset(OSMesgQueue *, OSContStatus *);
702
extern s32 osContStartQuery(OSMesgQueue *);
703
extern s32 osContStartReadData(OSMesgQueue *);
704
#ifndef _HW_VERSION_1
705
extern s32 osContSetCh(u8);
706
#endif
707
extern void osContGetQuery(OSContStatus *);
708
extern void osContGetReadData(OSContPad *);
709
710
/* file system interface */
711
712
extern s32 osPfsInitPak(OSMesgQueue *, OSPfs *, int);
713
extern s32 osPfsRepairId(OSPfs *);
714
extern s32 osPfsInit(OSMesgQueue *, OSPfs *, int);
715
extern s32 osPfsReFormat(OSPfs *, OSMesgQueue *, int);
716
extern s32 osPfsChecker(OSPfs *);
717
extern s32 osPfsAllocateFile(OSPfs *, u16, u32, u8 *, u8 *, int, s32 *);
718
extern s32 osPfsFindFile(OSPfs *, u16, u32, u8 *, u8 *, s32 *);
719
extern s32 osPfsDeleteFile(OSPfs *, u16, u32, u8 *, u8 *);
720
extern s32 osPfsReadWriteFile(OSPfs *, s32, u8, int, int, u8 *);
721
extern s32 osPfsFileState(OSPfs *, s32, OSPfsState *);
722
extern s32 osPfsGetLabel(OSPfs *, u8 *, int *);
723
extern s32 osPfsSetLabel(OSPfs *, u8 *);
724
extern s32 osPfsIsPlug(OSMesgQueue *, u8 *);
725
extern s32 osPfsFreeBlocks(OSPfs *, s32 *);
726
extern s32 osPfsNumFiles(OSPfs *, s32 *, s32 *);
727
728
/* EEPROM interface */
729
730
extern s32 osEepromProbe(OSMesgQueue *);
731
extern s32 osEepromRead(OSMesgQueue *, u8, u8 *);
732
extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *);
733
extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int);
734
extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int);
735
736
/* MOTOR interface */
737
738
extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int);
739
extern s32 osMotorStop(OSPfs *);
740
extern s32 osMotorStart(OSPfs *);
741
742
/* Enhanced PI interface */
743
744
extern OSPiHandle *osCartRomInit(void);
745
extern OSPiHandle *osLeoDiskInit(void);
746
extern OSPiHandle *osDriveRomInit(void);
747
748
extern s32 osEPiDeviceType(OSPiHandle *, OSPiInfo *);
749
extern s32 osEPiRawWriteIo(OSPiHandle *, u32 , u32);
750
extern s32 osEPiRawReadIo(OSPiHandle *, u32 , u32 *);
751
extern s32 osEPiRawStartDma(OSPiHandle *, s32 , u32 , void *, u32 );
752
extern s32 osEPiWriteIo(OSPiHandle *, u32 , u32 );
753
extern s32 osEPiReadIo(OSPiHandle *, u32 , u32 *);
754
extern s32 osEPiStartDma(OSPiHandle *, OSIoMesg *, s32);
755
extern s32 osEPiLinkHandle(OSPiHandle *);
756
757
/* Profiler Interface */
758
759
extern void osProfileInit(OSProf *, u32 profcnt);
760
extern void osProfileStart(u32);
761
extern void osProfileFlush(void);
762
extern void osProfileStop(void);
763
764
/* Game <> Host data transfer functions */
765
766
extern s32 osTestHost(void);
767
extern void osReadHost(void *, u32);
768
extern void osWriteHost(void *, u32);
769
extern void osAckRamromRead(void);
770
extern void osAckRamromWrite(void);
771
772
773
/* byte string operations */
774
775
extern void bcopy(const void *, void *, size_t);
776
extern int bcmp(const void *, const void *, int);
777
extern void bzero(void *, size_t);
778
779
/* Miscellaneous operations */
780
781
extern void osInitialize(void);
782
extern u32 osGetCount(void);
783
extern void osExit(void);
784
extern u32 osGetMemSize(void);
785
786
/* Printf */
787
788
extern int sprintf(char *s, const char *fmt, ...);
789
extern void osSyncPrintf(const char *fmt, ...);
790
extern void osAsyncPrintf(const char *fmt, ...);
791
extern int osSyncGetChars(char *buf);
792
extern int osAsyncGetChars(char *buf);
793
794
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
795
796
#ifdef _LANGUAGE_C_PLUS_PLUS
797
}
798
#endif
799
800
#endif /* !_OS_H */
801
802