    #ifndef _RAMROM_H
    #define	_RAMROM_H

    /**************************************************************************
     *									  *
     *		 Copyright (C) 1994, Silicon Graphics, Inc.		  *
     *									  *
     *  These coded instructions, statements, and computer programs  contain  *
     *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
     *  are protected by Federal copyright law.  They  may  not be disclosed  *
     *  to  third  parties  or copied or duplicated in any form, in whole or  *
     *  in part, without the prior written consent of Silicon Graphics, Inc.  *
     *									  *
     **************************************************************************/

    /**************************************************************************
     *
     *  $Revision: 1.20 $
     *  $Date: 1997/02/11 08:26:47 $
     *  $Source: /hosts/gate3/exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/ramrom.h,v $
     *
     **************************************************************************/

    /*
     * Defines for the GIO card in the Nintendo Development Station
     *
     * The RAM on the GIO card acts as ROM for the game
     * Interrupts available between the game and the Indy host
     *
     * The last part of the ramrom is used for communication between
     * game and host.  There are 6 4K buffers defined:
     *    log, printf, rmon to indy, rmon from indy, app to indy, app from indy
     * The last 8 bytes of the buffer are used in the emulator environment
     */

    #define	RAMROM_SIZE		(0x1000000)

    #define RAMROM_BUF_SIZE		(4096)
    #define RAMROM_MSG_SIZE		(RAMROM_BUF_SIZE*6)
    #define RAMROM_MSG_ADDR		(RAMROM_SIZE - RAMROM_MSG_SIZE)
    #define RAMROM_MSG_HDR_SIZE	(3*sizeof(long))
    #define RAMROM_USER_DATA_SIZE	(RAMROM_MSG_SIZE-RAMROM_MSG_HDR_SIZE)

    #define RAMROM_APP_READ_ADDR	(RAMROM_MSG_ADDR + (0*RAMROM_BUF_SIZE))
    #define RAMROM_APP_WRITE_ADDR	(RAMROM_MSG_ADDR + (1*RAMROM_BUF_SIZE))
    #define RAMROM_RMON_READ_ADDR	(RAMROM_MSG_ADDR + (2*RAMROM_BUF_SIZE))
    #define RAMROM_RMON_WRITE_ADDR	(RAMROM_MSG_ADDR + (3*RAMROM_BUF_SIZE))
    #define RAMROM_PRINTF_ADDR	(RAMROM_MSG_ADDR + (4*RAMROM_BUF_SIZE))
    #define RAMROM_LOG_ADDR		(RAMROM_MSG_ADDR + (5*RAMROM_BUF_SIZE))

    /*#define RAMROM_GIO_INTERRUPT	(RAMROM_MSG_ADDR + RAMROM_MSG_SIZE - 4)*/

    /*
     * For the initial round of PIF bringup, we will load in a bootstrap loader
     * 0x400 bytes into the ramrom, and the rom will be loaded at 0x2000
     */
    #ifndef _HW_VERSION_1
    #define RAMROM_BOOTSTRAP_OFFSET	0x40
    #define RAMROM_GAME_OFFSET	0x1000
    #define RAMROM_FONTDATA_OFFSET	0xb70
    #define RAMROM_FONTDATA_SIZE	1152
    #else
    #define RAMROM_BOOTSTRAP_OFFSET	0x400
    #define RAMROM_GAME_OFFSET	0x2000
    #endif
    #define RAMROM_CLOCKRATE_OFFSET	0x4
    #define RAMROM_CLOCKRATE_MASK	0xfffffff0
    #define RAMROM_BOOTADDR_OFFSET	0x8
    #define RAMROM_RELEASE_OFFSET	0xc
    /*
     * Second version of the PIF jumps to location 0x1000, and we'll put a jump to
     * location 0x400 into the ramrom (for backwards compatibility).
     */
    #define RAMROM_PIF2BOOTSTRAP_OFFSET	0x1000

    typedef struct {
        long type;
        long length;	    /* in bytes of userdata */
        long magic;
        char userdata[RAMROM_USER_DATA_SIZE];
    } RamRomBuffer;

    /*
     * Interrupt values  (must fit in 6 bits!)
     * values are used for both request & response
     * Transactions initiated by the host start with HOST
     * and those initiated by the target start with GAME.
     */

    #define HOST_PIACCESS_REQ	1
    #define HOST_DBG_CMD_READY	2
    #define GAME_DBG_DATA_SEND	3
    #define HOST_DBG_DATA_ACK	4
    #define GAME_PRINTF_SEND	5
    #define HOST_PRINTF_ACK		6
    #define GAME_LOG_SEND		7
    #define HOST_LOG_ACK		8
    #define HOST_APP_CMD_READY	9
    #define GAME_APP_DATA_READY	10
    #define	HOST_PROF_REQ		11
    #define	GAME_PROF_SEND		12
    #define	HOST_PROF_ACK		13
    #define	GAME_FAULT_SEND		14
    #define	HOST_FAULT_ACK		15
    #define	GAME_EXIT		16
    #define	HOST_DATA_ACK		17

    #ifdef _EMULATOR
    void __RamRomInit(int key, void *romaddr);
    void __RamRomDestroy(int key);
    #endif /* _EMULATOR */

    #endif /* !_RAMROM_H */