This is adb_bus.h in view mode; [Download] [Up]
/* Copyright (c) 1991 NeXT Computer, Inc. All rights reserved. * * adb_bus.h - Architecture-indpendent ADB bus defintions. * * HISTORY * 12-Sep-91 Doug Mitchell at NeXT * Created. */ #ifndef _ARCHITECTURE_ADB_BUS_ #define _ARCHITECTURE_ADB_BUS_ typedef unsigned char adbHandlerId; typedef unsigned char adbAddress; #define ADB_ADDRESS_NONE ((adbAddress)-1) #define ADB_HANDLER_ID_NONE ((adbHandlerId)0) /* * ADB Command byte fields. */ #define AC_ADDRESS_MASK 0xf0 #define AC_ADDRESS_SHIFT 4 #define AC_COMMAND_MASK 0x0c #define AC_REGISTER_MASK 0x03 #define AC_ADDRESS(commandByte) \ ((commandByte & AC_ADDRESS_MASK) >> AC_ADDRESS_SHIFT) #define AC_REGISTER(commandByte) \ (commandByte & AC_REGISTER_MASK) #define AC_COMMAND(commandByte) \ (commandByte & AC_COMMAND_MASK) /* * Command values. */ #define ADB_CMD_TALK 0x0c #define ADB_CMD_LISTEN 0x08 #define ADB_CMD_FLUSH 0x01 #define ADB_CMD_SENDRESET 0x00 /* * Macros to build the known ADB commands. */ #define TALK_REGISTER(reg, deviceAddress) \ (ADB_CMD_TALK | (deviceAddress << AC_ADDRESS_SHIFT) | \ (unsigned char)(reg)) #define LISTEN_REGISTER(reg, deviceAddress) \ (ADB_CMD_LISTEN | (deviceAddress << AC_ADDRESS_SHIFT) | \ (unsigned char)(reg)) #define ADB_FLUSH(deviceAddress) \ (ADB_CMD_FLUSH | (deviceAddress << AC_ADDRESS_SHIFT)) #define ADB_SEND_RESET ADB_CMD_SENDRESET /* * Standard device register (register 0 thru 2). */ #define ADB_REGISTER_SIZE 8 typedef struct { unsigned char byte[ADB_REGISTER_SIZE]; } adbRegisterStandard; /* * Two ways of looking at Register 3. */ typedef struct { unsigned reserved0:1, /* bit 15, always 0*/ exceptionalEvent:1, /* bit 14*/ serviceRequestEnable:1, /* bit 13*/ reserved1:1, /* bit 12, always 0*/ deviceAddress:4, /* bits 11..8*/ handlerId:8; /* bits 7..0*/ /* * Pad out to remainder of standard register size. */ unsigned char reserved2[ADB_REGISTER_SIZE-2]; } adbRegister3bits; typedef struct { unsigned short data; unsigned char reserved[ADB_REGISTER_SIZE-2]; } adbRegister3short; typedef union { adbRegister3bits bits; adbRegister3short sh; } adbRegister3; /* * Bit fields for adbRegister3.sh. */ #define AR3_RESERVED0 0x8000 #define AR3_EXCEPTIONAL_EVENT 0x4000 #define AR3_SERVICE_REQUEST_ENABLE 0x2000 #define AR3_RESERVED1 0x1000 #define AR3_DEVICE_ADDRESS_MASK 0x0f00 #define AR3_HANDLER_ID_MASK 0x00ff /* * Common device register. */ typedef union { adbRegisterStandard stand; adbRegister3 reg3; } adbRegister; /* * Reserved Handler IDs. */ #define HANDLER_ID_SELF_TEST 0xff #define HANDLER_ID_UPDATE_ALWAYS 0xff /* listen only - update address*/ /* and enable bits*/ #define HANDLER_ID_SELF_TEST_FAIL 0xff /* talk only - self test failed*/ #define HANDLER_ID_UPDATE_NO_COLLISION 0xfe /* update address only if no */ /* collision detected*/ #define HANDLER_ID_UPDATE_IF_ACTIVATOR 0xfd /* update address only if */ /* activator depressed*/ /* * Maximum number of ADB devices on the bus. */ #define NUM_ADB_ADDRESSES 16 #define MIN_BUS_DEVICE_ADDRESS 1 #define MAX_BUS_DEVICE_ADDRESS 15 /* * 'soft address' range. */ #define ADB_SOFT_ADDRESS_START 8 #define ADB_SOFT_ADDRESS_END (NUM_ADB_ADDRESSES - 1) #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.