Mario Kart 64
Loading...
Searching...
No Matches
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
35extern "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 */
52typedef 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
69typedef 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
86typedef 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 */
97typedef 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 */
503extern 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 */
517extern OSViMode osViModeTable[]; /* Global VI mode table */
518
519extern OSViMode osViModeNtscLpn1; /* Individual VI NTSC modes */
520extern OSViMode osViModeNtscLpf1;
522extern OSViMode osViModeNtscLaf1;
523extern OSViMode osViModeNtscLpn2;
524extern OSViMode osViModeNtscLpf2;
525extern OSViMode osViModeNtscLan2;
526extern OSViMode osViModeNtscLaf2;
527extern OSViMode osViModeNtscHpn1;
528extern OSViMode osViModeNtscHpf1;
529extern OSViMode osViModeNtscHan1;
530extern OSViMode osViModeNtscHaf1;
531extern OSViMode osViModeNtscHpn2;
532extern OSViMode osViModeNtscHpf2;
533
534extern OSViMode osViModePalLpn1; /* Individual VI PAL modes */
535extern OSViMode osViModePalLpf1;
537extern OSViMode osViModePalLaf1;
538extern OSViMode osViModePalLpn2;
539extern OSViMode osViModePalLpf2;
540extern OSViMode osViModePalLan2;
541extern OSViMode osViModePalLaf2;
542extern OSViMode osViModePalHpn1;
543extern OSViMode osViModePalHpf1;
544extern OSViMode osViModePalHan1;
545extern OSViMode osViModePalHaf1;
546extern OSViMode osViModePalHpn2;
547extern OSViMode osViModePalHpf2;
548
549extern OSViMode osViModeMpalLpn1; /* Individual VI MPAL modes */
550extern OSViMode osViModeMpalLpf1;
552extern OSViMode osViModeMpalLaf1;
553extern OSViMode osViModeMpalLpn2;
554extern OSViMode osViModeMpalLpf2;
555extern OSViMode osViModeMpalLan2;
556extern OSViMode osViModeMpalLaf2;
557extern OSViMode osViModeMpalHpn1;
558extern OSViMode osViModeMpalHpf1;
559extern OSViMode osViModeMpalHan1;
560extern OSViMode osViModeMpalHaf1;
561extern OSViMode osViModeMpalHpn2;
562extern OSViMode osViModeMpalHpf2;
563
564extern s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */
565extern u32 osRomBase; /* Rom base address of the game image */
566extern u32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */
567extern u32 osResetType; /* 0 = cold reset, 1 = NMI */
568extern s32 osCicId;
569extern s32 osVersion;
570extern u32 osMemSize; /* Memory Size */
571extern s32 osAppNMIBuffer[];
572
573extern OSIntMask __OSGlobalIntMask; /* global interrupt mask */
574extern OSPiHandle *__osPiTable; /* The head of OSPiHandle link list */
575extern OSPiHandle *__osDiskHandle; /* For exceptasm to get disk info*/
576
577
578
579/**************************************************************************
580 *
581 * Function prototypes
582 *
583 */
584
585/* Thread operations */
586
587extern void osCreateThread(OSThread *, OSId, void (*)(void *),
588 void *, void *, OSPri);
589extern void osDestroyThread(OSThread *);
590extern void osYieldThread(void);
591extern void osStartThread(OSThread *);
592extern void osStopThread(OSThread *);
593extern OSId osGetThreadId(OSThread *);
594extern void osSetThreadPri(OSThread *, OSPri);
596
597/* Message operations */
598
599extern void osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32);
600extern s32 osSendMesg(OSMesgQueue *, OSMesg, s32);
601extern s32 osJamMesg(OSMesgQueue *, OSMesg, s32);
602extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32);
603
604/* Event operations */
605
606extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg);
607
608/* Interrupt operations */
609
610extern OSIntMask osGetIntMask(void);
611extern OSIntMask osSetIntMask(OSIntMask);
612
613/* RDB port operations */
614
615extern void osInitRdb(u8 *sendBuf, u32 sendSize);
616
617/* Cache operations and macros */
618
619extern void osInvalDCache(void *, size_t);
620extern void osInvalICache(void *, size_t);
621extern void osWritebackDCache(void *, size_t);
622extern 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
629extern void osMapTLB(s32, OSPageMask, void *, u32, u32, s32);
630extern void osMapTLBRdb(void);
631extern void osUnmapTLB(s32);
632extern void osUnmapTLBAll(void);
633extern void osSetTLBASID(s32);
634
635/* Address translation routines and macros */
636
637extern u32 osVirtualToPhysical(void *);
638extern 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) */
649extern u32 osAiGetStatus(void);
650extern u32 osAiGetLength(void);
651extern s32 osAiSetFrequency(u32);
652extern s32 osAiSetNextBuffer(void *, u32);
653
654/* Display processor interface (Dp) */
655extern u32 osDpGetStatus(void);
656extern void osDpSetStatus(u32);
657extern void osDpGetCounters(u32 *);
658extern s32 osDpSetNextBuffer(void *, u64);
659
660/* Peripheral interface (Pi) */
661extern u32 osPiGetStatus(void);
662extern s32 osPiGetDeviceType(void);
663extern s32 osPiRawWriteIo(u32, u32);
664extern s32 osPiRawReadIo(u32, u32 *);
665extern s32 osPiRawStartDma(s32, u32, void *, u32);
666extern s32 osPiWriteIo(u32, u32);
667extern s32 osPiReadIo(u32, u32 *);
668extern s32 osPiStartDma(OSIoMesg *, s32, s32, u32, void *, u32,
669 OSMesgQueue *);
670extern void osCreatePiManager(OSPri, OSMesgQueue *, OSMesg *, s32);
671
672/* Video interface (Vi) */
673extern u32 osViGetStatus(void);
674extern u32 osViGetCurrentMode(void);
675extern u32 osViGetCurrentLine(void);
676extern u32 osViGetCurrentField(void);
677extern void *osViGetCurrentFramebuffer(void);
678extern void *osViGetNextFramebuffer(void);
679extern void osViSetXScale(f32);
680extern void osViSetYScale(f32);
681extern void osViSetSpecialFeatures(u32);
682extern void osViSetMode(OSViMode *);
683extern void osViSetEvent(OSMesgQueue *, OSMesg, u32);
684extern void osViSwapBuffer(void *);
685extern void osViBlack(u8);
686extern void osViFade(u8, u16);
687extern void osViRepeatLine(u8);
688extern void osCreateViManager(OSPri);
689
690/* Timer interface */
691
692extern OSTime osGetTime(void);
693extern void osSetTime(OSTime);
695 OSMesgQueue *, OSMesg);
696extern int osStopTimer(OSTimer *);
697
698/* Controller interface */
699
700extern s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *);
701extern s32 osContReset(OSMesgQueue *, OSContStatus *);
702extern s32 osContStartQuery(OSMesgQueue *);
703extern s32 osContStartReadData(OSMesgQueue *);
704#ifndef _HW_VERSION_1
705extern s32 osContSetCh(u8);
706#endif
707extern void osContGetQuery(OSContStatus *);
708extern void osContGetReadData(OSContPad *);
709
710/* file system interface */
711
712extern s32 osPfsInitPak(OSMesgQueue *, OSPfs *, int);
713extern s32 osPfsRepairId(OSPfs *);
714extern s32 osPfsInit(OSMesgQueue *, OSPfs *, int);
715extern s32 osPfsReFormat(OSPfs *, OSMesgQueue *, int);
716extern s32 osPfsChecker(OSPfs *);
717extern s32 osPfsAllocateFile(OSPfs *, u16, u32, u8 *, u8 *, int, s32 *);
718extern s32 osPfsFindFile(OSPfs *, u16, u32, u8 *, u8 *, s32 *);
719extern s32 osPfsDeleteFile(OSPfs *, u16, u32, u8 *, u8 *);
720extern s32 osPfsReadWriteFile(OSPfs *, s32, u8, int, int, u8 *);
721extern s32 osPfsFileState(OSPfs *, s32, OSPfsState *);
722extern s32 osPfsGetLabel(OSPfs *, u8 *, int *);
723extern s32 osPfsSetLabel(OSPfs *, u8 *);
724extern s32 osPfsIsPlug(OSMesgQueue *, u8 *);
725extern s32 osPfsFreeBlocks(OSPfs *, s32 *);
726extern s32 osPfsNumFiles(OSPfs *, s32 *, s32 *);
727
728/* EEPROM interface */
729
730extern s32 osEepromProbe(OSMesgQueue *);
731extern s32 osEepromRead(OSMesgQueue *, u8, u8 *);
732extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *);
733extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int);
734extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int);
735
736/* MOTOR interface */
737
738extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int);
739extern s32 osMotorStop(OSPfs *);
740extern s32 osMotorStart(OSPfs *);
741
742/* Enhanced PI interface */
743
744extern OSPiHandle *osCartRomInit(void);
745extern OSPiHandle *osLeoDiskInit(void);
746extern OSPiHandle *osDriveRomInit(void);
747
748extern s32 osEPiDeviceType(OSPiHandle *, OSPiInfo *);
749extern s32 osEPiRawWriteIo(OSPiHandle *, u32 , u32);
750extern s32 osEPiRawReadIo(OSPiHandle *, u32 , u32 *);
751extern s32 osEPiRawStartDma(OSPiHandle *, s32 , u32 , void *, u32 );
752extern s32 osEPiWriteIo(OSPiHandle *, u32 , u32 );
753extern s32 osEPiReadIo(OSPiHandle *, u32 , u32 *);
754extern s32 osEPiStartDma(OSPiHandle *, OSIoMesg *, s32);
755extern s32 osEPiLinkHandle(OSPiHandle *);
756
757/* Profiler Interface */
758
759extern void osProfileInit(OSProf *, u32 profcnt);
760extern void osProfileStart(u32);
761extern void osProfileFlush(void);
762extern void osProfileStop(void);
763
764/* Game <> Host data transfer functions */
765
766extern s32 osTestHost(void);
767extern void osReadHost(void *, u32);
768extern void osWriteHost(void *, u32);
769extern void osAckRamromRead(void);
770extern void osAckRamromWrite(void);
771
772
773/* byte string operations */
774
775extern void bcopy(const void *, void *, size_t);
776extern int bcmp(const void *, const void *, int);
777extern void bzero(void *, size_t);
778
779/* Miscellaneous operations */
780
781extern void osInitialize(void);
782extern u32 osGetCount(void);
783extern void osExit(void);
784extern u32 osGetMemSize(void);
785
786/* Printf */
787
788extern int sprintf(char *s, const char *fmt, ...);
789extern void osSyncPrintf(const char *fmt, ...);
790extern void osAsyncPrintf(const char *fmt, ...);
791extern int osSyncGetChars(char *buf);
792extern 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:33
unsigned short int u16
Definition ultratypes.h:14
unsigned char u8
Definition ultratypes.h:12