The HP palmtop contains an implementation of Socket Services 1.01.
From Socket Services viewpoint, the HP palmtop has one adapter (number 0) and the adapter has one socket (number 1), which is the PCMCIA card slot. Socket Services has no knowledge of other devices in the system such as System ROM. This means that there are necessarily some special considerations. For example, the GetWindow function cannot return the true window state if the window is currently mapped to System ROM since System ROM is not a socket.
The Socket Services Status Change Callback goes to its client, CardBIOS. Since Socket Services is not designed to have multiple clients, it is recommended that applications register as clients of CardBIOS to obtain card change events. See the CICDEMO program discussed below.
It is expected that CICDEMO will provide a sufficent illustration of Socket Services usage for most application's needs. However, complete Socket Services 1.01 documentation is available upon request (note that it is no longer available from the PCMCIA).
Here are some notes on selected HP100LX/HP200LX Socket Services functions (all this information is available by calling the appropriate Socket Services Inquire functions):
Number of Windows 11
Number of Sockets 1
Number of EDCs 0
Capabilities: Indicators 0
Power Management 0
Data Bus Width 1
Status Change Interrupt 1
SCI Software Sharable 0
SCI Hardware Sharable 0
SC IRQ Level 16 (NMI), (The correct IRQ level is 6;
but the function returns 16)
Get/Set Adapter
Attributes:
Reduce Power Consumption Preserved
Preserve State Information Preserved
Enable Status Change Interrupt Supported
Software Share SCI Ignored
Hardware Share SCI Ignored
Inquire Window for Window Numbers 0 through 8 (memory windows)
Capabilities:
Common Memory 1
Attribute Memory 1
I/O Space 0
EISA I/O Mappable 0
Separate Enable for EISA Common Space 0
Assignable Sockets 1
EISA A15 through A12 0
Supported Access Speeds:
WAIT line monitoring 1
100 ns 1
150 ns 0
200 ns 1
250 ns 0
300 ns 1
600 ns 1
Memory Window Characteristics Table:
Capabilities:
Programmable Base Address 0
Programmable Window Size 0
Window Disable/Enable Supported 1
Eight-bit Data Bus Supported 1
Sixteen-bit Data Bus Supported 0
Requires Base Address Alignment on Size Boundary 0
Power of Two Size Granularity 0
Requires Card Offset Alignment on Size Boundary 0
Paging Hardware Available 0
Paging Hardware Shared 0
Page Disable/Enable Supported 0
I/0 Window Characteristics Table None
Window Number Base Address Window Size Required Card Offset Alignment
0 D0 (D000) 4 (16K bytes) 4 (16K byte boundary)
1 D4 (D400) 4 (16K bytes) 4 (16K byte boundary)
2 D8 (D800) 4 (16K bytes) 4 (16K byte boundary)
3 DC (DC00) 4 (16K bytes) 4 (16K byte boundary)
4 E0 (E000) 4 (16K bytes) 4 (16K byte boundary)
5 E0 (E400) 4 (16K bytes) 4 (16K byte boundary)
6 E0 (E800) 4 (16K bytes) 4 (16K byte boundary)
7 E0 (EC00) 4 (16K bytes) 4 (16K byte boundary)
8 C0 (C000) 16 (64K bytes) 16 (64K byte boundary)
Inquire Window for Window Numbers 9 and 10 (I/O windows)
Capabilities
Common Memory 0
Attribute Memory 0
I/O Space 1
EISA I/O Mappable 0
Separate Enable for EISA Common Space 0
Assignable Sockets 1
EISA A15 through A12 0
Supported Access Speeds:
WAIT line monitoring 1
100 ns 0
150 ns 0
200 ns 1
250 ns 0
300 ns 1
600 ns 1
Memory Window Characteristics Table: None
I/0 Window Characteristics Table:
Capabilities:
Programmable Base Address 1
Programmable Window Size 1
Window Disable/Enable Supported 1
Eight-bit Data Bus Supported 1
Sixteen-bit Data Bus Supported 0
Requires Base Address Alignment on Size Boundary 0
Power of Two Size Granularity 1
Minimum Base Address 0x0000
Maximum Base Address 0xFFFF
Minimum Window Size 1
Maximum Window Size 256
Required Window Size Granularity 1
Inquire Socket
Capabilities:
Card Change 1
Card Lock 0
Insert Card 0
Eject Card 0
Hardware Indicators:
Busy Status 0
Write Protect Status 0
Battery Status 0
Card Lock Status 0
XIP Status 0
Socket Characteristics Table:
Supported Card Types:
Memory Card 1
I/O Card 1
Steerable IRQ Levels 3, 5, 6, 7
Additional Steerable IRQ Levels none
Power Management Table (two entries):
5.0 volts Vcc, Vpp1, Vpp2
12.0 volts Vpp1, Vpp2
Notes:
The XIP code and data are mapped in from the System ROM. The System ROM is not controlled by Socket Services, but is instead accessed by proprietary memory mapping functions on Int 63h.
In order for the System Manager and memory cards to coexist, all utilities which access a memory card must save and restore the window(s) so that from the System Manager's point of view, the System Manager has exclusive use of the windows.
No program on the 100LX/200LX, including the System Manager, is allowed to store a hardware interrupt handler in a memory window. Thus, code such as disk drivers which do temporary mapping from a memory card, do NOT need to worry about interrupts during the time the window mapping is changed.
CardBIOS takes care of saving and restoring window mappings so it is recommended that CardBIOS be used to read/write cards whenever possible. It is hoped that this will cover the need to configure I/O cards.
The natural address to use for a UART card is 2F8h (COM2).
I/O addresses used by built-in Cougar hardware or the automatic test system, and hence should be avoided for plug-in cards, are:
20h - 21h Interrupt controller
22h Hornet index register
23h Hornet data register
28h CPU power control
29h reserved
2Ch reserved
2Dh reserved
40h - 43h Programmable Interval Timer
60h - 62h Programmable Peripheral Interface
300h - 307h Possible test system parallel port
308h - 30Fh Possible test system UART
310h - 317h Possible test system parallel port
318h - 31Fh Possible test system UART
348h - 34Fh Possible test system UART
358h - 35Fh Possible test system UART
3B0h - 3BFh Display
3D0h - 3DFh Display
3F8h - 3FFh Built-in UART (COM1)
Access Speed Wait States Estimated time (8mH)
100 ns1 0 117.5 ns
200 ns 1 242.5 ns
300 ns 2 367.5 ns
WAIT line monitoring2 3 492.5 ns
600 ns 4 617.5 ns
1 Due to a hardware limitation, the wait states must be at least 1 for an I/O access. Hence, the 100 ns speed is not supported for I/O cards. 2 Due to a hardware limitation, WAIT line monitoring does not work with fewer than 3 wait states. Thus, if WAIT line monitoring is requested, Socket Services will set 3 wait states. With 3 or more wait states, WAIT line monitoring will be active.