IBX-100 - reading the NVRAM
Okay, President Bush and not having a constant supply of Big Mac™s and chocolate probably bugs me more, but since this is a web resource about the Bush Box - we'll keep it relevant. :-)
You see, people, those hooking in their own mice seem to have to keep re-configuring the thing or using some sort of boot media. Since a space is provided on the PCB for a double-PS2 socket, I would imagine that it would be an 'option'.
If you don't buy this, take a look at the content of the
FileSystem:&05,,,&2E,L Unplug0:&06,,,,L Unplug1:&07,,,,L Unplug2:&09,,,,L TVInterlace:&0A,4,1,1,L TVVerticalAdjust:&0A,5,3,,L CapsMode:&0B,3,3,2,L AutoRepeatDelay:&0C,,,32,L AutoRepeatRate:&0D,,,8,L PrinterColour:&0F,0,1,1 PrinterIgnoreState:&0F,1,1,1,L BootState:&10,4,1,1,L Unplug3:&12,,,,L Unplug4:&13,,,,L ExtUnplug:&14,0,16,,L WimpDoubleClickMoveTime:&16,,,,L WimpAutoSubMenuTime:&17,,,,L Territory:&18,,,0,L PrinterBufferSize:&19,,,,L WimpMenuDragDelay:&1B,,,,L FileSwitchTruncate:&1C,0,1,1,L MouseType:&1D,,,5,L LanManTransport:&6F,0,1,1,L StaticIP:&1E,0,32 BootServerIPAddr:&22,0,32 GatewayIPAddr:&26,0,32 SubnetMask:&2A,0,32 ModeResolution:&2F,0,5,1,L ModeDepth:&2F,5,2,,L ModeFrameRate:&2F,7,1,,L PaperSize:&30,0,2,0,L StaticIPStatus:&30,2,1 PrinterOrientation:&30,3,1 PrinterPrintImages:&30,4,1,1,L PrinterPrintBackgrounds:&30,5,1,L BootMountPath:&50,0,216 PrinterID:&6B CurrentYear:&80,,,99 CurrentCentury:&81,,,19 Unplug5:&82,,,,L Unplug6:&83,,,,L SoundControl:&84,5,3,5,L MonitorInfo:&85,,,&7D,L FontSize:&86,,,128,L TimeZone:&8B,,,0,L DesktopLook:&8C,0,1,1,L DesktopFont:&8C,1,4,,L DesktopTileStatus:&8C,7,1,,L Unplug7:&8D,,,,L Unplug8:&8E,,,,L ScreenSize:&8F,,,,L SystemHeapSize:&91,,,,L RMASize:&92,,,,L SpriteAreaSize:&93,,,,L SoundParameters:&94,,,&F0,L DNSIPAddr:&95,0,32 ModemPrefix:&99,0,32,&00A0 ModemDialTime:&9D,0,5 ModemDialTone:&9E,4,1 ModemDialType:&9E,5,2,0 ModemDialIgnore:&9E,7,1,0 LocalDialCode:&9F,0,24 ModemTimeout:&A2,0,6,10 ModemPrefixStatus:&A2,6,1,0 ModemCallWaitingStatus:&A2,7,1,0 ModemCallWaiting:&A3,0,16,&10B8 MACAddress:&A6,0,48,,P MACAddressChecksum:&AC,,,,P Unplug9:&AD,,,,L Unplug10:&AE,,,,L Unplug11:&AF,,,,L Unplug12:&B0,,,,L PoduleUnplug:&B1,0,64,,L Country:&BA,,,1,L NetUnplug:&BB,,,,L ScreenBlankTime:&BC,3,3,0 ScreenBlankWRCH:&BC,6,1,,L MouseMultiplier:&C2,,,4,L ResetStatus:&C3,2,1,1 WimpModeStatus:&C3,4,1,1,L ProcessorCacheStatus:&C3,5,1,,L WimpMode:&C4,,,,L WimpFlagsInstantDrag:&C5,0,4,&F,L WimpFlagsErrorAction:&C5,4,1,,L WimpFlagsConfinement:&C5,5,2,3,L WimpFlagsSubMenus:&C5,7,1,1,L FontCacheSize:&C8,,,16,L FontMaxRescaled:&C9,,,,L FontMaxAntiAliased:&CA,,,44,L FontMaxCached:&CB,,,56,L FontMaxSubPixelWidth:&CC,,,14,L FontMaxSubPixelHeight:&CD,,,,L Unplug13:&D9,,,,L Unplug14:&DA,,,,L Unplug15:&DB,,,,L WimpDragTime:&DD,,,,L WimpDragMoveLimit:&DE,,,,L WimpDoubleClickTime:&DF,,,,L IRDeviceID:&E8,0,4 IRDeviceStatus:&E8,4,1 NVRAMChecksum:&EF UniqueID:&F0,0,128,,LP MinutesInOperation:&100,0,24,,P MinutesInOperationCheck:&103,,,,P WarrantyClock:&104,0,16,,P WarrantyClockCheck:&106,,,,P FaultCodes:&107,0,256,,P FaultCodesCheck:&127,,,,P FaultCodesIndex:&128,0,2,,P KeyboardFormat:&128,2,1 VideoClockRate:&128,4,4 IRTVCode:&129,0,10 TVSource:&12A,2,2,1 TVChannel:&12A,4,3 IRVCRCode:&12B,0,10 IRCableCode:&12D,0,10 CableChannel:&12E,2,2,1 PrinterCode:&12F,0,10,0 BrowserFontSize:&131,0,2,1 BrowserMusicStatus:&131,2,1,0 BrowserBeepStatus:&131,3,1,0 BrowserScaling:&131,4,1,1 BrowserDisplayImages:&131,5,1,1,L BrowserDisplayBackgrounds:&131,6,1,1,L BrowserSoundStatus:&131,7,1,0 IRPulseOffsetFirst:&132,,,&CA,L IRPulseOffsetAll:&133,,,&D8,L BrowserEncoding:&134,0,15,2252,L BrowserEncodingOverride:&135,7,1,0,L SystemTime:&136,0,40 InactivityTimeout:&13B,0,16,600 BrowserFavorites:&13D,0,15896 BootBlock:&900,0,6144 # Protected region ISPCAccessPassword:&C00,0,88 NCMAHiddenPhoneNumber:&C0B,0,120 NCMAStartHiddenDialPassword:&C1A,0,88 BootBlockDefault:&D00,0,6144
ISPCAccessPasswordused to gain access to the hidden configuration stuff.
MinutesInOperation MinutesInOperationCheck WarrantyClock WarrantyClockCheck
The first task, therefore, is to attach some flying leads to the NVRAM, and wire it into my
RiscPC's IIC bus...
...to no avail.
The protocol may seem similar, but it is suitably different that the RiscPC doesn't get a
response when scanning the connected IIC devices.
I have written, in ARM code, a driver to provide IIC over a parallel port. I may use this as the basis of a comparison between the NVRAM module and something we already have.
&03200000(it is pretending to be an IOC/IOMD-alike device), with the IOCR based at offset
+&000. Note that there should be pull-up resistors someplace, as the ARM7500 does not contain them internally for OD[0:1] - and you'll find them next to the NVRAM as R82 and R83, which appear to be '472'.
A0 and A2 are taken to ground, while A1 is pulled high. Thus, the device appears to be addressable as %1010010 (device 82; or 164 when shifted).
The WP (Write Protect) on the NVRAM is taken to IOP1 on the ARM7500. This pin,
when low allows normal write operations. When high, all write operations to the
upper quadrant (8K) are inhibited. The value of the eight open drain output/input pins (of which
WR is connected to pin 1) may be altered by writing/reading to address
When a '1' is written to the bit corresponding to the desired I/O line, the output enable for that line is switched off so the line can be driven as an input. Since the ARM7500 contains pull-up resistors internally for these pins, it appears that this also has the effect of taking the line high (as it floats high). Writing a '0' to the bit drives the data line low.
The I/O data lines can also generate interrupts (IRQC). Refer to the CL-PS7500FE datasheet (by Cirrus Logic) for further details.
Here is a diagram that I have drawn to represent the NVRAM connections. Note that this ignores everything else (for example, the NVRAM is beside the processor, not above it!).
I will look into writing some code to bang the hardware directly. Indeed, I can probably pinch quite a bit from my PtrIIC module. But...not now.
DIM buffy% 255 SYS "NVRAM_Read", "< NVRAM key goes here! >", buffy%, 255 TO ,mycode$ PRINT mycode$And, obviously, the inverse for writing:
DIM buffy% 255 REM I am *assuming* null termination below... $buffy% = "< your data goes in here >" + CHR$(0); SYS "NVRAM_Write", "< NVRAM key goes here! >, buffy%, 255 PRINT mycode$You'll probably need to modify the blanket '255' length byte.