<> <> <> <> <<>> <> SparcSoftcard: CEDAR DEFINITIONS ~ { <> <> <<>> <> <<>> <> <<>> <> <<>> <> <<>> <<- In the current software implementation a part of this memory is used as memory extension for the Cedar system running on the CP. This Cedar memory is defined as follow:>> cedarMemoryStartByteAddress: CARD32 ~ 0H; <> cedarMemoryByteSize: CARD32 ~ 200000H; <> <<>> <<- The remaining of the memory can be used as Sparc memory. A small amount of it is still visible from the CP and IOP. It is called Backdoor and is used as communication area. Any page of this Backdoor can be set to point anywhere in the Sparc memory. This feature will allow in the future direct IO communications. >> <<>> <> <<>> <> <<>> <> <<>> <> <<>> <> <> <<>> IOBaseByte : CARD32 ~ 0380000H; -- 3.5 Meg <> cedarMemoryExtensionBaseByte: CARD32 ~ 0180000H; -- 1.5 Meg <> cedarMemoryExtensionSizeByte: CARD32 ~ 0200000H; -- 2.0 Meg <> <<>> cedarBackDoorBaseByte: CARD32 ~ 03C0000H; -- 3.75 Meg <> <<>> cedarMemoryEndByte: CARD32 ~ 0400000H; -- 4.0 Meg <> <<>> <<>> <> <<>> sparcIOASI: CARD16 ~ 080H; sparcMapBaseByte : CARD32 ~ 0H; sparcMemoryBankSizeByte : CARD32 ~ 800000H; <> < The mapping mechanism is uniform for everybody.>> <> <> <> <> <> <> softcardPageSizeByte: CARD32 ~ 02000H; <> <<>> <> <<>> <> <<>> mapBaseByteOffset: CARD32 ~ 0H; mapBaseByte: CARD32 ~ mapBaseByteOffset + sparcMapBaseByte; <<>> <> <> <<>> <> mapWindowIndexRegisterByteOffset: CARD32 ~ 04407H; mapWindowIndexRegisterByte: CARD32 ~ IOBaseByte + mapWindowIndexRegisterByteOffset; <> <<>> <> <<>> mapEntriesPerWindow: CARD16 ~ 2048; mapWindowBaseByteOffset: CARD32 ~ 08000H; mapWindowBaseByte: CARD32 ~ IOBaseByte + mapWindowBaseByteOffset; <> <> mapEntryHighByteOffset: NAT ~ 6; mapEntryLowByteOffset: NAT ~ 0EH; mapEntrySizeByte: NAT ~ 010H; <> <> <<>> tRegisterByteOffset: CARD32 ~ 04C07H; tRegisterByte: CARD32 ~ IOBaseByte + tRegisterByteOffset; tRegisterAlternateByte: CARD32 ~ IOBaseByte + tRegisterByteOffset + alternatePathByteOffset; <<>> <> alternatePathByteOffset: CARD32 ~ 10000H; <> <> <> commandBitMask: CARD16 ~ 01H; <> Polarity: TYPE = {ActiveLow, ActiveHigh}; <> sparcResetPolarity: Polarity ~ ActiveLow; sparcResetRegisterByteOffset: CARD32 ~ 04637H; sparcResetRegisterByte: CARD32 ~ IOBaseByte + sparcResetRegisterByteOffset; <> sparcCacheEnablePolarity: Polarity ~ ActiveLow; sparcCacheEnableRegisterByteOffset: CARD32 ~ 04A0FH; sparcCacheEnableRegisterByte: CARD32 ~ IOBaseByte + sparcCacheEnableRegisterByteOffset; <> dMAActivePolarity: Polarity ~ ActiveHigh; dMAActiveRegisterByteOffset: CARD32 ~ 04827H; dMAActiveRegisterByte: CARD32 ~ IOBaseByte + dMAActiveRegisterByteOffset; <> dMAMode0Polarity: Polarity ~ ActiveHigh; dMAMode0RegisterByteOffset: CARD32 ~ 0482FH; dMAMode0RegisterByte: CARD32 ~ IOBaseByte + dMAMode0RegisterByteOffset; dMAMode1Polarity: Polarity ~ ActiveHigh; dMAMode1RegisterByteOffset: CARD32 ~ 04837H; dMAMode1RegisterByte: CARD32 ~ IOBaseByte + dMAMode1RegisterByteOffset; <<>> <<>> <> <> <> <> dMAAddressRegisterHighByteOffset: CARD32 ~ 04006H; dMAAddressRegisterHighByte: CARD32 ~ IOBaseByte + dMAAddressRegisterHighByteOffset; dMAAddressRegisterLowByteOffset: CARD32 ~ 04206H; dMAAddressRegisterLowByte: CARD32 ~ IOBaseByte + dMAAddressRegisterLowByteOffset; <> <> <<>> <> <<>> <<- To keep the design simple the horizontal retrace is a multiple of 64 bits words (this is not the case in the 6085) => slight change in the appearence of the left side of the screen. It can be compensated by adjusting the horizontal amplifier gain and offset. >> <<>> <<- The number of pixels displayed and the sweep frequencies are the same than in the 6085 but the but there is no border. => The bitmap is slightly bigger and is perimeter has to be filled by the pattern you want in order to simulate a border. >> <<>> <<- There is NO hardware cursor. >> <<>> <<- When a bit is set it appears white on the screen (0 => black, 0FFFFH => white). >> <<>> <
> <<>> < the bitmap can be located anywere in scattered pages of the SparcSoftcard physical memory. The byte value of the starting virtual address has to be 0 (MOD 8)>> <<>> <> <<>> <> bitMapLineLengthByte: CARD32 ~ 152; bitMapLineNumber: CARD32 ~ 925; <<>> <> leftBorderLengthByte: CARD32 ~ 4; activeLineLengthByte: CARD32 ~ 144; rightBorderLengthByte: CARD32 ~ bitMapLineLengthByte - leftBorderLengthByte - activeLineLengthByte; topBorderLineNumber: CARD32 ~ 32; activeLineNumber: CARD32 ~ 861; bottomBorderLineNumber: CARD32 ~ bitMapLineNumber - topBorderLineNumber - activeLineNumber; }.