Mario Kart 64
os.h
Go to the documentation of this file.
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;
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;
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;
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 */
u32 osTvType
OSViMode osViModePalLan1
Definition: osViData.c:3
OSViMode osViModeNtscLan1
Definition: osViData.c:62
OSViMode osViModeMpalLan1
Definition: osViData.c:37
int bcmp(const void *, const void *, int)
void bcopy(const void *, void *, size_t)
void bzero(void *, size_t)
s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32)
Definition: osRecvMesg.c:3
void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg)
Definition: osSetEventMesg.c:10
u64 osClockRate
Definition: osInitialize.c:16
void osSyncPrintf(const char *fmt,...)
Definition: is_debug.c:73
s32 osEPiWriteIo(OSPiHandle *handle, u32 devAddr, u32 data)
Definition: is_debug.c:47
s32 osEPiReadIo(OSPiHandle *handle, u32 devAddr, u32 *data)
Definition: is_debug.c:36
u32 osMemSize
s32 osPiRawReadIo(u32 a0, u32 *a1)
Definition: osPiRawReadIo.c:6
unsigned long long int u64
Definition: llconv.c:2
s32 osEPiRawStartDma(OSPiHandle *arg0, s32 dir, u32 cart_addr, void *dram_addr, u32 size)
Definition: osEPiRawStartDma.c:14
volatile u32 __OSGlobalIntMask
Definition: osInitialize.c:18
OSPiHandle * __osDiskHandle
Definition: osLeoDiskInit.c:12
s32 osAiSetNextBuffer(void *, u32)
Definition: osAiSetNextBuffer.c:21
s32 osAiSetFrequency(u32)
Definition: osAiSetFrequency.c:7
u32 osAiGetLength(void)
Definition: osAiGetLength.c:5
OSPiHandle * osCartRomInit(void)
Definition: osCartRomInit.c:12
s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *status)
Definition: osContInit.c:17
void osContGetReadData(OSContPad *pad)
Definition: osContStartReadData.c:37
s32 osContStartReadData(OSMesgQueue *mesg)
Definition: osContStartReadData.c:18
void osCreateMesgQueue(OSMesgQueue *mq, OSMesg *msgBuf, s32 count)
Definition: osCreateMesgQueue.c:3
void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgCnt)
Definition: osCreatePiManager.c:23
OSPiHandle * __osPiTable
Definition: osCreatePiManager.c:12
void osCreateThread(OSThread *thread, OSId id, void(*entry)(void *), void *arg, void *sp, OSPri pri)
Definition: osCreateThread.c:11
void osCreateViManager(OSPri pri)
Definition: osCreateViManager.c:22
void osDestroyThread(OSThread *thread)
Definition: osDestroyThread.c:3
s32 osEepromLongRead(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes)
Definition: osEepromLongRead.c:10
s32 osEepromLongWrite(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes)
Definition: osEepromLongWrite.c:11
s32 osEepromProbe(OSMesgQueue *mq)
Definition: osEepromProbe.c:11
s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer)
Definition: osEepromRead.c:35
s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer)
Definition: osEepromWrite.c:36
OSPri osGetThreadPri(OSThread *thread)
Definition: osGetThreadPri.c:3
OSTime osGetTime()
Definition: osGetTime.c:6
u32 osResetType
void osInitialize(void)
Definition: osInitialize.c:29
s32 osJamMesg(OSMesgQueue *mq, OSMesg msg, s32 flag)
Definition: osJamMesg.c:3
OSPiHandle * osLeoDiskInit(void)
Definition: osLeoDiskInit.c:14
s32 osPfsAllocateFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name, int file_size_in_bytes, s32 *file_no)
Definition: osPfsAllocateFile.c:5
s32 osPfsChecker(OSPfs *pfs)
Definition: osPfsChecker.c:6
s32 osPfsDeleteFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name)
Definition: osPfsDeleteFile.c:4
s32 osPfsFileState(OSPfs *pfs, s32 file_no, OSPfsState *state)
Definition: osPfsFileState.c:4
s32 osPfsFreeBlocks(OSPfs *pfs, s32 *bytes_not_used)
Definition: osPfsFreeBlocks.c:4
s32 osPfsInit(OSMesgQueue *queue, OSPfs *pfs, int channel)
Definition: osPfsInit.c:5
s32 osPfsIsPlug(OSMesgQueue *queue, u8 *pattern)
Definition: osPfsIsPlug.c:8
s32 osPfsNumFiles(OSPfs *pfs, s32 *max_files, s32 *files_used)
Definition: osPfsNumFiles.c:5
s32 osPfsReadWriteFile(OSPfs *pfs, s32 file_no, u8 flag, int offset, int size_in_bytes, u8 *data_buffer)
Definition: osPfsReadWriteFile.c:24
s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name, s32 *file_no)
Definition: osPfsSearchFile.c:4
u32 osRomBase
s32 osPiRawStartDma(s32 dir, u32 cart_addr, void *dram_addr, size_t size)
Definition: osPiRawStartDma.c:7
s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, void *vAddr, size_t nbytes, OSMesgQueue *mq)
Definition: osPiStartDma.c:5
s32 osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flag)
Definition: osSendMesg.c:3
void osSetThreadPri(OSThread *thread, OSPri pri)
Definition: osSetThreadPri.c:3
void osSetTime(OSTime time)
Definition: osSetTime.c:5
u32 osSetTimer(OSTimer *a0, OSTime a1, u64 a2, OSMesgQueue *a3, OSMesg a4)
Definition: osSetTimer.c:6
void osStartThread(OSThread *thread)
Definition: osStartThread.c:3
void osViBlack(u8 active)
Definition: osViBlack.c:6
void osViSetEvent(OSMesgQueue *mq, OSMesg msg, u32 retraceCount)
Definition: osViSetEvent.c:5
void osViSetMode(OSViMode *mode)
Definition: osViSetMode.c:5
void osViSetSpecialFeatures(u32 func)
Definition: osViSetSpecialFeatures.c:5
void osViSwapBuffer(void *vaddr)
Definition: osViSwapBuffer.c:5
OSViMode osViModeTable[]
Definition: osViTable.c:3
uintptr_t osVirtualToPhysical(void *addr)
Definition: osVirtualToPhysical.c:3
void osYieldThread(void)
Definition: osYieldThread.c:4
u32 osGetCount(void)
s32 osPiWriteIo(uintptr_t devAddr, u32 data)
s32 osPiReadIo(uintptr_t devAddr, u32 *data)
void osStopThread(OSThread *thread)
s32 OSId
Definition: os_thread.h:22
OSId osGetThreadId(OSThread *thread)
s32 OSPri
Definition: os_thread.h:21
u64 OSTime
Definition: os_time.h:19
int sprintf(char *dst, const char *fmt,...)
Definition: sprintf.c:8
Definition: os_pi.h:53
Definition: os_pi.h:28
Definition: os_pi.h:41
Definition: os_thread.h:51
Definition: os_time.h:10
Definition: os_vi.h:53
signed int s32
Definition: ultratypes.h:15
unsigned int u32
Definition: ultratypes.h:16
float f32
Definition: ultratypes.h:32
unsigned short int u16
Definition: ultratypes.h:14
unsigned char u8
Definition: ultratypes.h:12