Metropoli BBS
VIEWER: grv_nkd.rom MODE: TEXT (ASCII)
;---------------------------------------------------------------------------
; PnP Header
;
; The PnP header contains the 72-bit "serial identifier", used by PnP
; initialization software to isolate the PnP device.
;---------------------------------------------------------------------------

0x1E            ; AMD 'GRV0001' Vendor ID Byte 0
0x56            ; AMD 'GRV0001' Vendor ID Byte 1
0x00            ; AMD 'GRV0001' Vendor assigned product number (byte 0)
0x01            ; AMD 'GRV0001' Vendor assigned product number (byte 1)
0x01            ; Serial Number Byte 0
0x00            ; Serial Number Byte 1
0x00            ; Serial Number Byte 2
0x00            ; Serial Number Byte 3
0x3d            ; Special LFSR checksum (PnP specification appendix B)

;---------------------------------------------------------------------------
; PnP Version
;
; The PnP version entry tells the PnP initialization software which
; version of the PnP specification the hardware is compatible with.
;---------------------------------------------------------------------------

0x0A            ; PnP Version - Small item, PnP version tag, 2 bytes
0x10            ; InterWave is compatible with PnP spec 1.0
0x10            ; InterWave EEPROM version 1.0

;---------------------------------------------------------------------------
; ANSI Identifier string
;
; The Ansi Identifier string is an ASCII text string to display to the
; user for prompts and messages about the InterWave board.
;---------------------------------------------------------------------------

0x82            ; ANSI identifier string - Large item, ID string tag
0x14            ; Length byte 0 (low byte)  - In total, 9 bytes long
0x00            ; Length byte 1 (high byte)
'InterWave Audio Card'     ; Actual ANSI identifier

;===========================================================================
; Logical Device Block (0)
;
; The logical device defines the resources used by a specific function of
; the PnP device.  The first logical device defined for InterWave is the
; InterWave synthesizer.  Note that all resource information following
; the Logical Device Block applies to the previous Logical Device, until
; a new Logical Device Block is declared.
;===========================================================================

0x15            ; Small item, logical device ID, 5 bytes long
0x1E            ; AMD 'GRV0001' Vendor ID Byte 0
0x56            ; AMD 'GRV0001' Vendor ID Byte 1
0x00            ; Vendor assigned function ID (byte 0)
0x10            ; Vendor assigned function ID (byte 1)
0x02            ; flags[1] = supports commands at index 0x31

;---------------------------------------------------------------------------
; ANSI Identifier string
;
; The Ansi Identifier string is an ASCII text string to display to the user
; for prompts and messages about the InterWave board.
;
; Note - It turns out that the first release of Windows 95 does not use
; the information stored in this field; instead, it uses the .INF file to
; determine the ASCII string for this logical device.  However, it does
; show up in the registry.
;---------------------------------------------------------------------------

0x82            ; ANSI identifier string - Large item, ID string tag
0x0D            ; Length byte 0 (low byte)  - In total, 13 bytes long
0x00            ; Length byte 1 (high byte)
'Synth & Codec' ; Actual ANSI identifier

;---------------------------------------------------------------------------
; InterWave Synthesizer IRQ structure
;
; The IRQ structure defines which IRQs are supported for the
; specified logical device.  In our case, we require two IRQs
; for the InterWave device, hense the need for two IRQ structures.
;
; Note: The familiar concept of describing ISA bus IRQ 2 as
;       "IRQ 2" or "IRQ 2/9" is not valid for the PnP EEPROM.
;       Specifying ISA bus IRQ 2 in the EEPROM by setting IRQ 2
;       causes Windows 95 to prevent the interrupt from being
;       selected (copnflict with the interrupt controller).  The
;       correct way to specify ISA bus IRQ 2 in the PnP EEPROM
;       is by specifying IRQ 9.
;---------------------------------------------------------------------------

0x22            ; Small item, IRQ tag, 2 bytes long (Synth IRQ 1)
0xA0            ; Pic 0: A0 = 10100000 (IRQ 7, 5)
0x9E            ; Pic 1: 9A = 10011110 (IRQ 15, 12, 11, 9)
;---------------------------------------------------------------------------
; InterWave Synthesizer DMA structure
;
; The DMA structure defines which DMA channels are supported for
; the specified logical device.  In our case, we require two DMA
; channels for the InterWave device, hense the need for two DMA
; structures.
;---------------------------------------------------------------------------

0x2A            ; Small item, DMA descriptor, 2 bytes long (Synth DMA 1)
0xE8            ; E8 = 11101000 (DMA 7, 6, 5, 3)
0x19            ; DMA transfer types: 8-bit and 16-bit transfers supported

0x2A            ; Small item, DMA descriptor, 2 bytes long (Synth DMA 2)
0xF8            ; F8 = 11111000 (DMA 7, 6, 5, 4, 3)
0x19            ; DMA transfer types: 8-bit and 16-bit transfers supported

;---------------------------------------------------------------------------
; InterWave Synthesizer I/O port descriptor
;
; The I/O port descriptor defines which I/O ports are supported
; for the specified logical device.
;
; Note that the "start dependent function", and "end dependent
; function", is not part of the I/O port descriptor.  It is used
; to tell the PnP configuration software that this logical device
; has a preferred configuration for this resource (in our case,
; the synthesizer's preferred I/O resource is 220h/320h/32Ch),
; and what that preferred configuration is.
;
; Although the InterWave can support a large number of possible
; I/O port configurations, for backwards compatibility with
; Gravis software (and to make Sound Blaster emulation work),
; the only addresses allowed are 220h/320h/32Ch and
; 240h/340h/34Ch.
;---------------------------------------------------------------------------

;-----------------------------;
; Configuration 0 (preferred) ;
;-----------------------------;

0x31            ; Small item, start dependent function, 1 byte long
0x00            ; 00 = Preferred I/O resource configuration

0x47            ; Small item, I/O port descriptor, 7 bytes long
0x01            ; 16-bit I/O decode
0x20            ; Lowest I/O base address (low byte)  = 220h
0x02            ; Lowest I/O base address (high byte) = 220h
0x20            ; Highest I/O base address (low byte)  = 220h
0x02            ; Highest I/O base address (high byte) = 220h
0x10            ; I/O port must be aligned on a 2 byte boundary
0x10            ; MPU-401 requires 2 consecutive I/O ports

0x47            ; Small item, I/O port descriptor, 7 bytes long
0x01            ; 16-bit I/O decode
0x20            ; Lowest I/O base address (low byte)  = 320h
0x03            ; Lowest I/O base address (high byte) = 320h
0x20            ; Highest I/O base address (low byte)  = 320h
0x03            ; Highest I/O base address (high byte) = 320h
0x08            ; I/O port must be aligned on a 2 byte boundary
0x08            ; MPU-401 requires 2 consecutive I/O ports

0x47            ; Small item, I/O port descriptor, 7 bytes long
0x01            ; 16-bit I/O decode
0x2C            ; Lowest I/O base address (low byte)  = 32Ch
0x03            ; Lowest I/O base address (high byte) = 32Ch
0x2C            ; Highest I/O base address (low byte)  = 32Ch
0x03            ; Highest I/O base address (high byte) = 32Ch
0x04            ; I/O port must be aligned on a 2 byte boundary
0x04            ; MPU-401 requires 2 consecutive I/O ports


;------------------------------;
; Configuration 1 (acceptible) ;
;------------------------------;

0x31            ; Small item, start dependent function, 1 byte long
0x01            ; 01 = Acceptable I/O resource configuration, not best

0x47            ; Small item, I/O port descriptor, 7 bytes long
0x01            ; 16-bit I/O decode
0x40            ; Lowest I/O base address (low byte)  = 220h
0x02            ; Lowest I/O base address (high byte) = 220h
0x40            ; Highest I/O base address (low byte)  = 220h
0x02            ; Highest I/O base address (high byte) = 220h
0x10            ; I/O port must be aligned on a 2 byte boundary
0x10            ; MPU-401 requires 2 consecutive I/O ports

0x47            ; Small item, I/O port descriptor, 7 bytes long
0x01            ; 16-bit I/O decode
0x40            ; Lowest I/O base address (low byte)  = 320h
0x03            ; Lowest I/O base address (high byte) = 320h
0x40            ; Highest I/O base address (low byte)  = 320h
0x03            ; Highest I/O base address (high byte) = 320h
0x08            ; I/O port must be aligned on a 2 byte boundary
0x08            ; MPU-401 requires 2 consecutive I/O ports

0x47            ; Small item, I/O port descriptor, 7 bytes long
0x01            ; 16-bit I/O decode
0x4C            ; Lowest I/O base address (low byte)  = 32Ch
0x03            ; Lowest I/O base address (high byte) = 32Ch
0x4C            ; Highest I/O base address (low byte)  = 32Ch
0x03            ; Highest I/O base address (high byte) = 32Ch
0x04            ; I/O port must be aligned on a 2 byte boundary
0x04            ; MPU-401 requires 2 consecutive I/O ports

0x38            ; Small item, end dependent function, 0 bytes long

;===========================================================================
; Logical Device Block (1)
;
; The next logical device on the InterWave part is the external
; device decoder (CD-ROM interface).  Note that all the resource
; information following this block are setup for a board with an
; ATAPI compatible interface.
;===========================================================================

0x15            ; Small item, logical device ID, 5 bytes long
0x1E            ; AMD 'GRV0001' Vendor ID Byte 0
0x56            ; AMD 'GRV0001' Vendor ID Byte 1
0x00            ; Vendor assigned function ID (byte 0)
0x11            ; Vendor assigned function ID (byte 1)
0x02            ; flags[1] = supports commands at index 0x31

;---------------------------------------------------------------------------
; ANSI Identifier string
;
; The Ansi Identifier string is an ASCII text string to display
; to the user for prompts and messages about the InterWave board.
;---------------------------------------------------------------------------

0x82            ; ANSI identifier string - Large item, ID string tag
0x15            ; Length byte 0 (low byte)  - In total, 21 bytes long
0x00            ; Length byte 1 (high byte)
'Disabled ATAPI CD-ROM'  ; Actual ASCII identifier

;===========================================================================
; Logical Device Block (2)
;
; The third logical device on the InterWave part is the joystick
; (game port) interface.  The joystick only uses a single
; I/O port.
;===========================================================================

0x15            ; Small item, logical device ID, 5 bytes long
0x1E            ; AMD 'GRV0001' Vendor ID Byte 0
0x56            ; AMD 'GRV0001' Vendor ID Byte 1
0x00            ; Vendor assigned function ID (byte 0)
0x12            ; Vendor assigned function ID (byte 1)
0x02            ; flags[1] = supports commands at index 0x31

;---------------------------------------------------------------------------
; Compatible Device Block (2)
;
; The InterWave joystick interface is compatible with the generic
; gameport.  We can tell the PnP manager that this is true by
; by specifying a compatible device block. The PnP device ID for
; the generic gameport is PNPB02F (see the Microsoft document
; DEVIDS.TXT).
;---------------------------------------------------------------------------

0x1C            ; Small item, compatible device ID, 4 bytes long
0x41            ; Device ID "PNPB02F" in standard PnP vendor ID notation
0xD0
0xB0
0x2F

;---------------------------------------------------------------------------
; ANSI Identifier string
;
; The Ansi Identifier string is an ASCII text string to display
; to the user for prompts and messages about the InterWave board.
;---------------------------------------------------------------------------

0x82            ; ANSI identifier string - Large item, ID string tag
0x09            ; Length byte 0 (low byte)  - In total, 9 bytes long
0x00            ; Length byte 1 (high byte)
'Game Port'     ; Actual ANSI identifier

;---------------------------------------------------------------------------
; InterWave Joystick I/O descriptor block
;
; We only support a single I/O address for the joystick, for
; games compatibility.
;---------------------------------------------------------------------------

0x47            ; Small item, I/O port descriptor, 7 bytes long
0x01            ; 16-bit I/O decode
0x01            ; Lowest I/O base address (low byte)  = 330h
0x02            ; Lowest I/O base address (high byte) = 330h
0x01            ; Highest I/O base address (low byte)  = 336h
0x02            ; Highest I/O base address (high byte) = 336h
0x01            ; I/O port must be aligned on a 2 byte boundary
0x01            ; MPU-401 requires 2 consecutive I/O ports

;===========================================================================
; Logical Device Block (3)
;
; The fourth logical device on the InterWave part is the Adlib
; FM register set and Sound Blaster interrupt line.
;===========================================================================

0x15            ; Small item, logical device ID, 5 bytes long
0x1E            ; AMD 'GRV0001' Vendor ID Byte 0
0x56            ; AMD 'GRV0001' Vendor ID Byte 1
0x00            ; Vendor assigned function ID (byte 0)
0x13            ; Vendor assigned function ID (byte 1)
0x02            ; flags[1] = supports commands at index 0x31

;---------------------------------------------------------------------------
; ANSI Identifier string
;
; The Ansi Identifier string is an ASCII text string to display
; to the user for prompts and messages about the InterWave board.
;---------------------------------------------------------------------------

0x82            ; ANSI identifier string - Large item, ID string tag
0x10            ; Length byte 0 (low byte)  - In total, 16 bytes long
0x00            ; Length byte 1 (high byte)
'SB Digital Audio'  ; Actual ANSI identifier

;===========================================================================
; Logical Device Block (4)
;
; The last logical device on the InterWave part is the MPU-401
; device.
;===========================================================================

0x15            ; Small item, logical device ID, 5 bytes long
0x1E            ; AMD 'GRV0001' Vendor ID Byte 0
0x56            ; AMD 'GRV0001' Vendor ID Byte 1
0x00            ; Vendor assigned function ID (byte 0)
0x14            ; Vendor assigned function ID (byte 1)
0x02            ; flags[1] = supports commands at index 0x31

;---------------------------------------------------------------------------
; ANSI Identifier string
;
; The Ansi Identifier string is an ASCII text string to display
; to the user for prompts and messages about the InterWave board.
;---------------------------------------------------------------------------

0x82            ; ANSI identifier string - Large item, ID string tag
0x11            ; Length byte 0 (low byte)  - In total, 8 bytes long
0x00            ; Length byte 1 (high byte)
'GM (MPU401) Music'      ; Actual ANSI identifier

;===========================================================================
; End tag
;
; The end tag defines the end of the EEPROM, and the EEPROM
; checksum.  Note that the checksum of zero means "unknown
; checksum", and that the PnP manager should not bother to verify
; that the EEPROM checksum is correct.
;===========================================================================

0x79
0x00
[ RETURN TO DIRECTORY ]