sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

os.h (21663B)


      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 Profiler 
     65  */
     66 typedef struct {
     67     u16    *histo_base;        /* histogram base */
     68     u32    histo_size;        /* histogram size */
     69     u32    *text_start;        /* start of text segment */
     70     u32    *text_end;        /* end of text segment */
     71 } OSProf;
     72 
     73 #endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
     74 
     75 /**************************************************************************
     76  *
     77  * Global definitions
     78  *
     79  */
     80 
     81 /* Thread states */
     82 
     83 #define OS_STATE_STOPPED    1
     84 #define OS_STATE_RUNNABLE    2
     85 #define OS_STATE_RUNNING    4
     86 #define OS_STATE_WAITING    8
     87 
     88 /* Flags for debugging purpose */
     89 
     90 #define    OS_FLAG_CPU_BREAK    1    /* Break exception has occurred */
     91 #define    OS_FLAG_FAULT        2    /* CPU fault has occurred */
     92 
     93 /* Interrupt masks */
     94 
     95 #define    OS_IM_NONE    0x00000001
     96 #define    OS_IM_SW1    0x00000501
     97 #define    OS_IM_SW2    0x00000601
     98 #define    OS_IM_CART    0x00000c01
     99 #define    OS_IM_PRENMI    0x00001401
    100 #define OS_IM_RDBWRITE    0x00002401
    101 #define OS_IM_RDBREAD    0x00004401
    102 #define    OS_IM_COUNTER    0x00008401
    103 #define    OS_IM_CPU    0x0000ff01
    104 #define    OS_IM_SP    0x00010401
    105 #define    OS_IM_SI    0x00020401
    106 #define    OS_IM_AI    0x00040401
    107 #define    OS_IM_VI    0x00080401
    108 #define    OS_IM_PI    0x00100401
    109 #define    OS_IM_DP    0x00200401
    110 #define    OS_IM_ALL    0x003fff01
    111 #define    RCP_IMASK    0x003f0000
    112 #define    RCP_IMASKSHIFT    16
    113 
    114 /* Recommended thread priorities for the system threads */
    115 
    116 #define OS_PRIORITY_MAX        255
    117 #define OS_PRIORITY_VIMGR    254
    118 #define OS_PRIORITY_RMON    250
    119 #define OS_PRIORITY_RMONSPIN    200
    120 #define OS_PRIORITY_PIMGR    150
    121 #define OS_PRIORITY_SIMGR    140
    122 #define    OS_PRIORITY_APPMAX    127
    123 #define OS_PRIORITY_IDLE      0    /* Must be 0 */
    124 
    125 /* Flags to indicate direction of data transfer */
    126 
    127 #define    OS_READ            0        /* device -> RDRAM */
    128 #define    OS_WRITE        1        /* device <- RDRAM */
    129 #define    OS_OTHERS        2        /* for Leo disk only */
    130 
    131 /*
    132  * I/O message types
    133  */
    134 #define OS_MESG_TYPE_BASE    (10)
    135 #define OS_MESG_TYPE_LOOPBACK    (OS_MESG_TYPE_BASE+0)
    136 #define OS_MESG_TYPE_DMAREAD    (OS_MESG_TYPE_BASE+1)
    137 #define OS_MESG_TYPE_DMAWRITE    (OS_MESG_TYPE_BASE+2)
    138 #define OS_MESG_TYPE_VRETRACE    (OS_MESG_TYPE_BASE+3)
    139 #define OS_MESG_TYPE_COUNTER    (OS_MESG_TYPE_BASE+4)
    140 #define OS_MESG_TYPE_EDMAREAD    (OS_MESG_TYPE_BASE+5)
    141 #define OS_MESG_TYPE_EDMAWRITE    (OS_MESG_TYPE_BASE+6)
    142 
    143 /*
    144  * I/O message priority
    145  */
    146 #define OS_MESG_PRI_NORMAL    0
    147 #define OS_MESG_PRI_HIGH    1
    148 
    149 /*
    150  * Page size argument for TLB routines
    151  */
    152 #define OS_PM_4K    0x0000000
    153 #define OS_PM_16K    0x0006000
    154 #define OS_PM_64K    0x001e000
    155 #define OS_PM_256K    0x007e000
    156 #define OS_PM_1M    0x01fe000
    157 #define OS_PM_4M    0x07fe000
    158 #define OS_PM_16M    0x1ffe000
    159 
    160 /*
    161  * Stack size for I/O device managers: PIM (PI Manager), VIM (VI Manager),
    162  *    SIM (SI Manager)
    163  *
    164  */
    165 #define OS_PIM_STACKSIZE    4096
    166 #define OS_VIM_STACKSIZE    4096
    167 #define OS_SIM_STACKSIZE    4096
    168 
    169 #define    OS_MIN_STACKSIZE    72
    170 
    171 /*
    172  * Values for osTvType 
    173  */
    174 #define    OS_TV_PAL        0
    175 #define    OS_TV_NTSC        1
    176 #define    OS_TV_MPAL        2
    177 
    178 /*
    179  * Video Interface (VI) mode type
    180  */
    181 #define OS_VI_NTSC_LPN1        0    /* NTSC */
    182 #define OS_VI_NTSC_LPF1        1
    183 #define OS_VI_NTSC_LAN1        2
    184 #define OS_VI_NTSC_LAF1        3
    185 #define OS_VI_NTSC_LPN2        4
    186 #define OS_VI_NTSC_LPF2        5
    187 #define OS_VI_NTSC_LAN2        6
    188 #define OS_VI_NTSC_LAF2        7
    189 #define OS_VI_NTSC_HPN1        8
    190 #define OS_VI_NTSC_HPF1        9
    191 #define OS_VI_NTSC_HAN1        10
    192 #define OS_VI_NTSC_HAF1        11
    193 #define OS_VI_NTSC_HPN2        12
    194 #define OS_VI_NTSC_HPF2        13
    195 
    196 #define OS_VI_PAL_LPN1        14    /* PAL */
    197 #define OS_VI_PAL_LPF1        15
    198 #define OS_VI_PAL_LAN1        16
    199 #define OS_VI_PAL_LAF1        17
    200 #define OS_VI_PAL_LPN2        18
    201 #define OS_VI_PAL_LPF2        19
    202 #define OS_VI_PAL_LAN2        20
    203 #define OS_VI_PAL_LAF2        21
    204 #define OS_VI_PAL_HPN1        22
    205 #define OS_VI_PAL_HPF1        23
    206 #define OS_VI_PAL_HAN1        24
    207 #define OS_VI_PAL_HAF1        25
    208 #define OS_VI_PAL_HPN2        26
    209 #define OS_VI_PAL_HPF2        27
    210 
    211 #define OS_VI_MPAL_LPN1        28    /* MPAL - mainly Brazil */
    212 #define OS_VI_MPAL_LPF1        29
    213 #define OS_VI_MPAL_LAN1        30
    214 #define OS_VI_MPAL_LAF1        31
    215 #define OS_VI_MPAL_LPN2        32
    216 #define OS_VI_MPAL_LPF2        33
    217 #define OS_VI_MPAL_LAN2        34
    218 #define OS_VI_MPAL_LAF2        35
    219 #define OS_VI_MPAL_HPN1        36
    220 #define OS_VI_MPAL_HPF1        37
    221 #define OS_VI_MPAL_HAN1        38
    222 #define OS_VI_MPAL_HAF1        39
    223 #define OS_VI_MPAL_HPN2        40
    224 #define OS_VI_MPAL_HPF2        41
    225 
    226 /*
    227  * Video Interface (VI) special features
    228  */
    229 #define    OS_VI_GAMMA_ON            0x0001
    230 #define    OS_VI_GAMMA_OFF            0x0002
    231 #define    OS_VI_GAMMA_DITHER_ON        0x0004
    232 #define    OS_VI_GAMMA_DITHER_OFF        0x0008
    233 #define    OS_VI_DIVOT_ON            0x0010
    234 #define    OS_VI_DIVOT_OFF            0x0020
    235 #define    OS_VI_DITHER_FILTER_ON        0x0040
    236 #define    OS_VI_DITHER_FILTER_OFF        0x0080
    237 
    238 /*
    239  * Video Interface (VI) mode attribute bit
    240  */
    241 #define OS_VI_BIT_NONINTERLACE        0x0001          /* lo-res */
    242 #define OS_VI_BIT_INTERLACE        0x0002          /* lo-res */
    243 #define OS_VI_BIT_NORMALINTERLACE    0x0004          /* hi-res */
    244 #define OS_VI_BIT_DEFLICKINTERLACE    0x0008          /* hi-res */
    245 #define OS_VI_BIT_ANTIALIAS        0x0010
    246 #define OS_VI_BIT_POINTSAMPLE        0x0020
    247 #define OS_VI_BIT_16PIXEL        0x0040
    248 #define OS_VI_BIT_32PIXEL        0x0080
    249 #define OS_VI_BIT_LORES            0x0100
    250 #define OS_VI_BIT_HIRES            0x0200
    251 #define OS_VI_BIT_NTSC            0x0400
    252 #define OS_VI_BIT_PAL            0x0800
    253 
    254 /* 
    255  * Leo Disk 
    256  */
    257 
    258 /* transfer mode */
    259 
    260 #define LEO_BLOCK_MODE    1
    261 #define LEO_TRACK_MODE    2
    262 #define LEO_SECTOR_MODE    3
    263 
    264 /*
    265  *  Controllers  number
    266  */
    267 
    268 #ifndef _HW_VERSION_1
    269 #define MAXCONTROLLERS  4
    270 #else
    271 #define MAXCONTROLLERS  6
    272 #endif
    273 
    274 /* controller errors */
    275 #define CONT_NO_RESPONSE_ERROR          0x8
    276 #define CONT_OVERRUN_ERROR              0x4
    277 #ifdef _HW_VERSION_1
    278 #define CONT_FRAME_ERROR                0x2
    279 #define CONT_COLLISION_ERROR            0x1
    280 #endif 
    281 
    282 /* Controller type */
    283 
    284 #define CONT_ABSOLUTE           0x0001
    285 #define CONT_RELATIVE           0x0002
    286 #define CONT_JOYPORT            0x0004
    287 #define CONT_EEPROM        0x8000
    288 #define CONT_EEP16K        0x4000
    289 #define    CONT_TYPE_MASK        0x1f07
    290 #define    CONT_TYPE_NORMAL    0x0005
    291 #define    CONT_TYPE_MOUSE        0x0002
    292 
    293 /* Controller status */
    294 
    295 #define CONT_CARD_ON            0x01
    296 #define CONT_CARD_PULL          0x02
    297 #define CONT_ADDR_CRC_ER        0x04
    298 #define CONT_EEPROM_BUSY    0x80
    299 
    300 /* EEPROM TYPE */
    301 
    302 #define EEPROM_TYPE_4K        0x01
    303 #define EEPROM_TYPE_16K        0x02
    304 
    305 /* Buttons */
    306 
    307 #define CONT_A      0x8000
    308 #define CONT_B      0x4000
    309 #define CONT_G        0x2000
    310 #define CONT_START  0x1000
    311 #define CONT_UP     0x0800
    312 #define CONT_DOWN   0x0400
    313 #define CONT_LEFT   0x0200
    314 #define CONT_RIGHT  0x0100
    315 #define CONT_L      0x0020
    316 #define CONT_R      0x0010
    317 #define CONT_E      0x0008
    318 #define CONT_D      0x0004
    319 #define CONT_C      0x0002
    320 #define CONT_F      0x0001
    321 
    322 /* Nintendo's official button names */
    323 
    324 #define A_BUTTON    CONT_A
    325 #define B_BUTTON    CONT_B
    326 #define L_TRIG        CONT_L
    327 #define R_TRIG        CONT_R
    328 #define Z_TRIG        CONT_G
    329 #define START_BUTTON    CONT_START
    330 #define U_JPAD        CONT_UP
    331 #define L_JPAD        CONT_LEFT
    332 #define R_JPAD        CONT_RIGHT
    333 #define D_JPAD        CONT_DOWN
    334 #define U_CBUTTONS    CONT_E
    335 #define L_CBUTTONS    CONT_C
    336 #define R_CBUTTONS    CONT_F
    337 #define D_CBUTTONS    CONT_D
    338 
    339 /* definition for EEPROM */
    340 
    341 #define EEPROM_MAXBLOCKS    64
    342 #define EEP16K_MAXBLOCKS    256
    343 #define EEPROM_BLOCK_SIZE    8
    344 
    345 /*
    346  * PI/EPI
    347  */
    348 #define PI_DOMAIN1      0
    349 #define PI_DOMAIN2      1
    350 
    351 /*
    352  * Profiler constants
    353  */
    354 #define PROF_MIN_INTERVAL    50    /* microseconds */
    355 
    356 /*
    357  * Boot addresses
    358  */
    359 #define    BOOT_ADDRESS_ULTRA    0x80000400
    360 #define    BOOT_ADDRESS_COSIM    0x80002000
    361 #define    BOOT_ADDRESS_EMU    0x20010000
    362 #define    BOOT_ADDRESS_INDY     0x88100000
    363 
    364 /*
    365  * Size of buffer the retains contents after NMI
    366  */
    367 #define OS_APP_NMI_BUFSIZE    64
    368 
    369 #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
    370 
    371 /**************************************************************************
    372  *
    373  * Macro definitions
    374  *
    375  */
    376 
    377 /* PARTNER-N64 */
    378 #ifdef PTN64
    379 #define osReadHost osReadHost_pt
    380 #define osWriteHost osWriteHost_pt
    381 #endif
    382 
    383 /* Get count of valid messages in queue */
    384 #define MQ_GET_COUNT(mq)        ((mq)->validCount)
    385 
    386 /* Figure out if message queue is empty or full */
    387 #define MQ_IS_EMPTY(mq)        (MQ_GET_COUNT(mq) == 0)
    388 #define MQ_IS_FULL(mq)        (MQ_GET_COUNT(mq) >= (mq)->msgCount)
    389 
    390 /*
    391  * CPU counter increments at 3/4 of bus clock rate:
    392  *
    393  * Bus Clock    Proc Clock    Counter (1/2 Proc Clock)
    394  * ---------    ----------    ------------------------
    395  * 62.5 Mhz    93.75 Mhz    46.875 Mhz
    396  */
    397 extern u64 osClockRate;
    398 
    399 #define    OS_CLOCK_RATE        62500000LL
    400 #define    OS_CPU_COUNTER        (OS_CLOCK_RATE*3/4)
    401 #define OS_NSEC_TO_CYCLES(n)    (((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL))
    402 #define OS_USEC_TO_CYCLES(n)    (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL))
    403 #define OS_CYCLES_TO_NSEC(c)    (((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL))
    404 #define OS_CYCLES_TO_USEC(c)    (((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL))
    405 
    406 /**************************************************************************
    407  *
    408  * Extern variables
    409  *
    410  */
    411 extern OSViMode    osViModeTable[];    /* Global VI mode table */
    412 
    413 extern OSViMode    osViModeNtscLpn1;    /* Individual VI NTSC modes */
    414 extern OSViMode    osViModeNtscLpf1;
    415 extern OSViMode    osViModeNtscLan1;
    416 extern OSViMode    osViModeNtscLaf1;
    417 extern OSViMode    osViModeNtscLpn2;
    418 extern OSViMode    osViModeNtscLpf2;
    419 extern OSViMode    osViModeNtscLan2;
    420 extern OSViMode    osViModeNtscLaf2;
    421 extern OSViMode    osViModeNtscHpn1;
    422 extern OSViMode    osViModeNtscHpf1;
    423 extern OSViMode    osViModeNtscHan1;
    424 extern OSViMode    osViModeNtscHaf1;
    425 extern OSViMode    osViModeNtscHpn2;
    426 extern OSViMode    osViModeNtscHpf2;
    427 
    428 extern OSViMode    osViModePalLpn1;    /* Individual VI PAL modes */
    429 extern OSViMode    osViModePalLpf1;
    430 extern OSViMode    osViModePalLan1;
    431 extern OSViMode    osViModePalLaf1;
    432 extern OSViMode    osViModePalLpn2;
    433 extern OSViMode    osViModePalLpf2;
    434 extern OSViMode    osViModePalLan2;
    435 extern OSViMode    osViModePalLaf2;
    436 extern OSViMode    osViModePalHpn1;
    437 extern OSViMode    osViModePalHpf1;
    438 extern OSViMode    osViModePalHan1;
    439 extern OSViMode    osViModePalHaf1;
    440 extern OSViMode    osViModePalHpn2;
    441 extern OSViMode    osViModePalHpf2;
    442 
    443 extern OSViMode    osViModeMpalLpn1;    /* Individual VI MPAL modes */
    444 extern OSViMode    osViModeMpalLpf1;
    445 extern OSViMode    osViModeMpalLan1;
    446 extern OSViMode    osViModeMpalLaf1;
    447 extern OSViMode    osViModeMpalLpn2;
    448 extern OSViMode    osViModeMpalLpf2;
    449 extern OSViMode    osViModeMpalLan2;
    450 extern OSViMode    osViModeMpalLaf2;
    451 extern OSViMode    osViModeMpalHpn1;
    452 extern OSViMode    osViModeMpalHpf1;
    453 extern OSViMode    osViModeMpalHan1;
    454 extern OSViMode    osViModeMpalHaf1;
    455 extern OSViMode    osViModeMpalHpn2;
    456 extern OSViMode    osViModeMpalHpf2;
    457 
    458 extern s32     osRomType;    /* Bulk or cartridge ROM. 0=cartridge 1=bulk */
    459 extern u32  osRomBase;    /* Rom base address of the game image */
    460 extern u32     osTvType;    /* 0 = PAL, 1 = NTSC, 2 = MPAL */
    461 extern u32     osResetType;    /* 0 = cold reset, 1 = NMI */
    462 extern s32     osCicId;
    463 extern s32     osVersion;
    464 extern u32    osMemSize;    /* Memory Size */
    465 extern s32    osAppNMIBuffer[];
    466 
    467 extern OSIntMask __OSGlobalIntMask;    /* global interrupt mask */
    468 extern OSPiHandle      *__osPiTable;    /* The head of OSPiHandle link list */
    469 extern OSPiHandle      *__osDiskHandle; /* For exceptasm to get disk info*/
    470 
    471 
    472 
    473 /**************************************************************************
    474  *
    475  * Function prototypes
    476  *
    477  */
    478 
    479 /* Thread operations */
    480 
    481 extern void        osCreateThread(OSThread *, OSId, void (*)(void *),
    482                        void *, void *, OSPri);
    483 extern void        osDestroyThread(OSThread *);
    484 extern void        osYieldThread(void);
    485 extern void        osStartThread(OSThread *);
    486 extern void        osStopThread(OSThread *);
    487 extern OSId        osGetThreadId(OSThread *);
    488 extern void        osSetThreadPri(OSThread *, OSPri);
    489 extern OSPri        osGetThreadPri(OSThread *);
    490 
    491 /* Message operations */
    492 
    493 extern void        osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32);
    494 extern s32        osSendMesg(OSMesgQueue *, OSMesg, s32);
    495 extern s32        osJamMesg(OSMesgQueue *, OSMesg, s32);
    496 extern s32        osRecvMesg(OSMesgQueue *, OSMesg *, s32);
    497 
    498 /* Event operations */
    499 
    500 extern void        osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg);
    501 
    502 /* Interrupt operations */
    503 
    504 extern OSIntMask    osGetIntMask(void);
    505 extern OSIntMask    osSetIntMask(OSIntMask);
    506 
    507 /* RDB port operations */
    508 
    509 extern void             osInitRdb(u8 *sendBuf, u32 sendSize);
    510 
    511 /* Cache operations and macros */
    512 
    513 extern void        osInvalDCache(void *, size_t);
    514 extern void        osInvalICache(void *, size_t);
    515 extern void        osWritebackDCache(void *, size_t);
    516 extern void        osWritebackDCacheAll(void);
    517 
    518 #define    OS_DCACHE_ROUNDUP_ADDR(x)    (void *)(((((u32)(x)+0xf)/0x10)*0x10))
    519 #define    OS_DCACHE_ROUNDUP_SIZE(x)    (u32)(((((u32)(x)+0xf)/0x10)*0x10))
    520 
    521 /* TLB management routines */
    522 
    523 extern void        osMapTLB(s32, OSPageMask, void *, u32, u32, s32);
    524 extern void        osMapTLBRdb(void);
    525 extern void        osUnmapTLB(s32);
    526 extern void        osUnmapTLBAll(void);
    527 extern void        osSetTLBASID(s32);
    528 
    529 /* Address translation routines and macros */
    530 
    531 extern u32         osVirtualToPhysical(void *);
    532 extern void *         osPhysicalToVirtual(u32);
    533 
    534 #define    OS_K0_TO_PHYSICAL(x)    (u32)(((char *)(x)-0x80000000))
    535 #define    OS_K1_TO_PHYSICAL(x)    (u32)(((char *)(x)-0xa0000000))
    536 
    537 #define    OS_PHYSICAL_TO_K0(x)    (void *)(((u32)(x)+0x80000000))
    538 #define    OS_PHYSICAL_TO_K1(x)    (void *)(((u32)(x)+0xa0000000))
    539 
    540 /* I/O operations */
    541 
    542 /* Audio interface (Ai) */
    543 extern u32         osAiGetStatus(void);
    544 extern u32         osAiGetLength(void);
    545 extern s32        osAiSetFrequency(u32);
    546 extern s32        osAiSetNextBuffer(void *, u32);
    547 
    548 /* Display processor interface (Dp) */
    549 extern u32         osDpGetStatus(void);
    550 extern void        osDpSetStatus(u32);
    551 extern void         osDpGetCounters(u32 *);
    552 extern s32        osDpSetNextBuffer(void *, u64);
    553 
    554 /* Peripheral interface (Pi) */
    555 extern u32         osPiGetStatus(void);
    556 extern s32        osPiGetDeviceType(void);
    557 extern s32        osPiRawWriteIo(u32, u32);
    558 extern s32        osPiRawReadIo(u32, u32 *);
    559 extern s32        osPiRawStartDma(s32, u32, void *, u32);
    560 extern s32        osPiWriteIo(u32, u32);
    561 extern s32        osPiReadIo(u32, u32 *);
    562 extern s32        osPiStartDma(OSIoMesg *, s32, s32, u32, void *, u32,
    563                      OSMesgQueue *);
    564 extern void        osCreatePiManager(OSPri, OSMesgQueue *, OSMesg *, s32);
    565 
    566 /* Video interface (Vi) */
    567 extern u32        osViGetStatus(void);
    568 extern u32        osViGetCurrentMode(void);
    569 extern u32        osViGetCurrentLine(void);
    570 extern u32        osViGetCurrentField(void);
    571 extern void        *osViGetCurrentFramebuffer(void);
    572 extern void        *osViGetNextFramebuffer(void);
    573 extern void        osViSetXScale(f32);
    574 extern void        osViSetYScale(f32);
    575 extern void        osViSetSpecialFeatures(u32);
    576 extern void        osViSetMode(OSViMode *);
    577 extern void        osViSetEvent(OSMesgQueue *, OSMesg, u32);
    578 extern void        osViSwapBuffer(void *);
    579 extern void        osViBlack(u8);
    580 extern void        osViFade(u8, u16);
    581 extern void        osViRepeatLine(u8);
    582 extern void        osCreateViManager(OSPri);
    583 
    584 /* Timer interface */
    585 
    586 extern OSTime        osGetTime(void);
    587 extern void        osSetTime(OSTime);
    588 extern u32        osSetTimer(OSTimer *, OSTime, OSTime,
    589                    OSMesgQueue *, OSMesg);
    590 extern int        osStopTimer(OSTimer *);
    591 
    592 /* Controller interface */
    593 
    594 extern s32        osContInit(OSMesgQueue *, u8 *, OSContStatus *);
    595 extern s32        osContReset(OSMesgQueue *, OSContStatus *);
    596 extern s32        osContStartQuery(OSMesgQueue *);
    597 extern s32        osContStartReadData(OSMesgQueue *);
    598 #ifndef _HW_VERSION_1
    599 extern s32        osContSetCh(u8);
    600 #endif
    601 extern void        osContGetQuery(OSContStatus *);
    602 extern void        osContGetReadData(OSContPad *);
    603 
    604 /* file system interface */
    605 
    606 extern s32 osPfsInitPak(OSMesgQueue *, OSPfs *, int);
    607 extern s32 osPfsRepairId(OSPfs *);
    608 extern s32 osPfsInit(OSMesgQueue *, OSPfs *, int);
    609 extern s32 osPfsReFormat(OSPfs *, OSMesgQueue *, int);
    610 extern s32 osPfsChecker(OSPfs *);
    611 extern s32 osPfsAllocateFile(OSPfs *, u16, u32, u8 *, u8 *, int, s32 *);
    612 extern s32 osPfsFindFile(OSPfs *, u16, u32, u8 *, u8 *, s32 *);
    613 extern s32 osPfsDeleteFile(OSPfs *, u16, u32, u8 *, u8 *);
    614 extern s32 osPfsReadWriteFile(OSPfs *, s32, u8, int, int, u8 *);
    615 extern s32 osPfsFileState(OSPfs *, s32, OSPfsState *);
    616 extern s32 osPfsGetLabel(OSPfs *, u8 *, int *);
    617 extern s32 osPfsSetLabel(OSPfs *, u8 *);
    618 extern s32 osPfsIsPlug(OSMesgQueue *, u8 *);
    619 extern s32 osPfsFreeBlocks(OSPfs *, s32 *);
    620 extern s32 osPfsNumFiles(OSPfs *, s32 *, s32 *);
    621 
    622 /* EEPROM interface */
    623 
    624 extern s32 osEepromProbe(OSMesgQueue *);
    625 extern s32 osEepromRead(OSMesgQueue *, u8, u8 *);
    626 extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *);
    627 extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int);
    628 extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int);
    629 
    630 /* MOTOR interface */
    631 
    632 extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int);
    633 extern s32 osMotorStop(OSPfs *);
    634 extern s32 osMotorStart(OSPfs *);
    635 
    636 #ifdef VERSION_CN
    637 #define MOTOR_START 1
    638 #define MOTOR_STOP 0
    639 extern s32 __osMotorAccess(OSPfs *, s32);
    640 #endif
    641 
    642 /* Enhanced PI interface */
    643 
    644 extern OSPiHandle *osCartRomInit(void);
    645 extern OSPiHandle *osLeoDiskInit(void);
    646 extern OSPiHandle *osDriveRomInit(void);
    647 
    648 extern s32 osEPiDeviceType(OSPiHandle *, OSPiInfo *);
    649 extern s32 osEPiRawWriteIo(OSPiHandle *, u32 , u32);
    650 extern s32 osEPiRawReadIo(OSPiHandle *, u32 , u32 *);
    651 extern s32 osEPiRawStartDma(OSPiHandle *, s32 , u32 , void *, u32 );
    652 extern s32 osEPiWriteIo(OSPiHandle *, u32 , u32 );
    653 extern s32 osEPiReadIo(OSPiHandle *, u32 , u32 *);
    654 extern s32 osEPiStartDma(OSPiHandle *, OSIoMesg *, s32);
    655 extern s32 osEPiLinkHandle(OSPiHandle *);
    656 
    657 /* Profiler Interface */
    658 
    659 extern void        osProfileInit(OSProf *, u32 profcnt);
    660 extern void        osProfileStart(u32);
    661 extern void        osProfileFlush(void);
    662 extern void        osProfileStop(void);
    663 
    664 /* Game <> Host data transfer functions */
    665 
    666 extern s32        osTestHost(void);
    667 extern void        osReadHost(void *, u32);
    668 extern void        osWriteHost(void *, u32);
    669 extern void        osAckRamromRead(void);
    670 extern void        osAckRamromWrite(void);
    671 
    672 
    673 /* byte string operations */
    674 
    675 extern void     bcopy(const void *, void *, size_t);
    676 extern int      bcmp(const void *, const void *, int);
    677 extern void     bzero(void *, size_t);
    678 
    679 /* Miscellaneous operations */
    680 
    681 extern void        osInitialize(void);
    682 extern u32        osGetCount(void);
    683 extern void        osExit(void);
    684 extern u32         osGetMemSize(void);
    685 
    686 /* Printf */
    687 
    688 extern int        sprintf(char *s, const char *fmt, ...);
    689 extern void        osSyncPrintf(const char *fmt, ...);
    690 extern void        osAsyncPrintf(const char *fmt, ...);
    691 extern int        osSyncGetChars(char *buf);
    692 extern int        osAsyncGetChars(char *buf);
    693 
    694 #endif  /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
    695 
    696 #ifdef _LANGUAGE_C_PLUS_PLUS
    697 }
    698 #endif
    699 
    700 #endif /* !_OS_H */