Category : C Source Code
Archive   : TC-EQUIP.ZIP
Filename : EQUIP.C

 
Output of file : EQUIP.C contained in archive : TC-EQUIP.ZIP
/***************************************************************************/
/* Program : EQUIP.C Creation Date: 06/05/1987 */
/* Author : Richard P. Hendricks Last Modified: 06/11/1987 */
/* Compiler : Turbo C Compiler, Version 1.0 */
/* Function : Study the BIOSEQUIP() Function using two analysis approaches.*/
/* Approach 1: Bit Field Structure */
/* Approach 2: Bit Masking of BIOSEQUIP() Returned Value */
/* */
/* Comments : The Turbo C Documentation appears to be in error on the: */
/* - RS232 Ports - COMM Ports */
/* - Mother Board RAM */
/* Referred to PC Magazine Vol 6 Number 8, April 28, 1987, */
/* A System Board Analyzer, pages 281 - 295 */
/* */
/***************************************************************************/

#include /* Standard I/O functions */
#include /* Needed for BIOSEQUIP() Function */

main()
{
struct EQUIP /* BIT Field Structure */
{
unsigned boot :1; /* bit 0 */
unsigned math :1; /* bit 1 */
unsigned ram1 :1; /* bits 2 */
unsigned ram2 :1; /* bits 3 00 - 64K */
/* 01 - 128K */
/* 3 & 2 10 - 192K */
/* 11 - 256K */

unsigned video1 :1; /* bits 4 */
unsigned video2 :1; /* bits 5 00 - unused */
/* 01 - 40 x 25 BW w/ color cd*/
/* 5 & 4 10 - 80 x 25 BW w/ color cd*/
/* 11 - 80 x 25 BW w/ mono crd*/

unsigned disks1 :1; /* bits 6 */
unsigned disks2 :1; /* bits 7 00 - 1 drive */
/* 01 - 2 drives */
/* 7 & 6 10 - 3 drives */
/* 11 - 4 drives, if bit 0 =1 */
unsigned filler1 :1; /* bit 8 */
unsigned comm1 :1; /* bit 9 */
unsigned comm2 :1; /* bit 10 */
unsigned comm3 :1; /* bit 11 000 - 0 comm ports */
/* 001 - 1 comm port */
/* 11, 10 & 9 010 - 2 comm ports */
/* ^^^^^^ 011 - 3 comm ports */
unsigned game :1; /* bit 12 */
unsigned filler2 :1; /* bit 13 */
unsigned printer1:1; /* bit 14 */
unsigned printer2:1; /* bit 15 00 - 0 printer ports */
/* 01 - 1 printer port */
/* 15 & 14 10 - 2 printer ports */
/* 11 - 3 printer ports */
};

struct EQUIP *equip;
unsigned int bios_ret;

unsigned int ram; /* Approach 2 Variables */
char *display;
char *drives;
char *comm_ports;
char *printers;

bios_ret = biosequip();

/* --- Approach 1: Bit Field Structure --- */

equip = (struct EQUIP *)(&bios_ret); /* Put Returned value into the */
/* Bit Field Structure */

/* --- Report Structure Values --- */

printf("\t\t\t BIOSEQUIP() Function Call\n");
printf("\t\t\tApproach: Bit Field Structure\n\n");
printf("Bits Device Settings\tMeaning\n");
printf(" 0 Boot Disk : %u", equip->boot );
printf("\t\t0 - none, 1 - available\n");
printf(" 1 Math Co-Processor : %u", equip->math );
printf("\t\t0 - none, 1 - installed\n");
printf("3/2 Mother Board RAM : %u %u", equip->ram2, equip->ram1 );
printf("\t\t0 0 - 64K, 0 1 - 128K,\n\t\t\t\t\t1 0 - 192K & 1 1 - 256K\n\n");
printf("5/4 Screen Type : %u %u", equip->video2, equip->video1 );
printf("\t\t0 0 - none, 0 1 - 40 color,\n\t\t\t\t\t1 0 - 80 color & 1 1 - mono\n\n");
printf("7/6 Drives (Bit 0 = 1): %u %u", equip->disks2, equip->disks1 );
printf("\t\t0 0 - 1, 0 1 - 2,\n\t\t\t\t\t1 0 - 3 & 1 1 - 4 drives\n\n");
printf(" 8 Not Used : %u\n", equip->filler1 );
printf("11-9 Comm Ports(10 & 9): %u %u %u", equip->comm3, equip->comm2, equip->comm1 );
printf("\t\t0 0 0 - 0, 0 0 1 - 1,\n\t\t\t\t\t0 1 0 - 2 & 0 1 1 - 3 ports\n\n");
printf(" 12 Game Port : %u", equip->game );
printf("\t\t0 - none, 1 - installed\n");
printf(" 13 Not Used : %u\n", equip->filler2 );
printf("15/14 Printer Ports : %u %u", equip->printer2, equip->printer1 );
printf("\t\t0 0 - 0, 0 1 - 1,\n\t\t\t\t\t1 0 - 2 & 1 1 - 3 ports\n\n");

/* --- Approach 2: Bit Masking of Returned Value --- */

/*-------------------------------------------------------------------------**
** Bit Positions **
** |---------| |---------| |---------| |---------| **
** Device\Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Mask **
** + + + +-----------+ v **
** Boot 0 drives 0 0x0000 **
** drives 1 0x0001 **
** **
** Math Chip 0 0 0x0000 **
** 1 1 0x0002 **
** **
** RAM 64k 0 0 0x0000 **
** 128k 0 1 0x0004 **
** 196k 1 0 0x0008 **
** 256k 1 1 0x000C **
** + + +-----------+ + v **
** Video None 0 0 0x0000 **
** 40 Clr 0 1 0x0010 **
** 80 Clr 1 0 0x0020 **
** Mono 1 1 0x0030 **
** **
** Drives 1 0 0 0x0000 **
** 2 0 1 0x0040 **
** 3 1 0 0x0080 **
** 4 1 1 0x00C0 **
** + +-----------+ + + v **
** Not Used - Bit 8 **
** **
** COMM Port 0 0 0 0 0x0000 **
** 1 0 0 1 0x0200 **
** 2 0 1 0 0x0400 **
** 3 0 1 1 0x0600 **
** +-----------+ + + + v **
** Game Port 0 0 0x0000 **
** 1 1 0x1000 **
** **
** Not Used - Bit 13 **
** **
** Printer 0 0 0 0x0000 **
** 1 0 1 0x4000 **
** 2 1 0 0x8000 **
** 3 1 1 0xC000 **
** + + + + + **
** Bit position within a group of 4: 3 2 1 0 **
** Equation for position : 2**3 2**2 2**1 2**0 **
** Decimal Value : 8 4 2 1 **
** Conversion Dec to Hex : **
** **
** Dec : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 **
** Hex : 0 1 2 3 4 5 6 7 8 9 A B C D E F **
** **
** Mask Development Example : bits 3 & 2 are 1's out of a 16 bit **
** integer. 8 + 4 = 12 --> C, so the **
** mask will be: 0x000C **
**-------------------------------------------------------------------------*/
/* --- Bit Mask Defines -- */

#define NO_DRIVES 0x0000
#define DRIVES_AVAILABLE 0x0001

#define NO_MATH_CHIP 0x0000
#define MATH_CHIP 0x0002

#define RAM_INTEREST_BITS 0x000C
#define MOTHERBOARD_RAM_64K 0x0000
#define MOTHERBOARD_RAM_128K 0x0004
#define MOTHERBOARD_RAM_196K 0x0008
#define MOTHERBOARD_RAM_256K 0x000C

#define DISPLAY_INTEREST_BITS 0x0030
#define NO_MONITOR 0x0000
#define COLOR_40 0x0010
#define COLOR_80 0x0020
#define MONOCHROME 0x0030

#define DISK_INTEREST_BITS 0x00C0
#define ONE_DISK_DRIVE 0x0000
#define TWO_DISK_DRIVES 0x0040
#define THREE_DISK_DRIVES 0x0080
#define FOUR_DISK_DRIVES 0x00C0

#define COMM_INTEREST_BITS 0x0600
#define NO_COMM_PORTS 0x0000
#define ONE_COMM_PORT 0x0200
#define TWO_COMM_PORTS 0x0400
#define THREE_COMM_PORTS 0x0600

#define NO_GAME_PORT 0x0000
#define GAME_PORT 0x1000

#define PRINTER_INTEREST_BITS 0xC000
#define NO_PRINTER 0x0000
#define ONE_PRINTER 0x4000
#define TWO_PRINTERS 0x8000
#define THREE_PRINTERS 0xC000

printf("\n");
printf("\t\t\t BIOSEQUIP() Function Call\n");
printf("\t\t\tApproach: Bit Field Masking\n\n");
printf("Bits Device Meaning\n");
printf(" 0 Boot Disk : %s\n", ( bios_ret & DRIVES_AVAILABLE ) ? "Available" : "None" );
printf(" 1 Math Co-Processor : %s\n", ( bios_ret & MATH_CHIP ) ? "Available" : "None" );

ram = -1;
if (( bios_ret & RAM_INTEREST_BITS ) == MOTHERBOARD_RAM_256K )
ram = 256;
else if (( bios_ret & RAM_INTEREST_BITS ) == MOTHERBOARD_RAM_196K )
ram = 196;
else if (( bios_ret & RAM_INTEREST_BITS ) == MOTHERBOARD_RAM_128K )
ram = 128;
else if (( bios_ret & RAM_INTEREST_BITS ) == MOTHERBOARD_RAM_64K )
ram = 64;
printf("3/2 Mother Board RAM : %dK\n", ram );

display = "";
if (( bios_ret & DISPLAY_INTEREST_BITS ) == MONOCHROME )
display = "Monochrome" ;
else if (( bios_ret & DISPLAY_INTEREST_BITS ) == COLOR_80 )
display = "Color with 80 columns";
else if (( bios_ret & DISPLAY_INTEREST_BITS ) == COLOR_40 )
display = "Color with 40 columns";
else if (( bios_ret & DISPLAY_INTEREST_BITS ) == NO_MONITOR )
display = "None";
printf("5/4 Screen Type : %s\n", display );

drives = "";
if (( bios_ret & DISK_INTEREST_BITS ) == FOUR_DISK_DRIVES )
drives = "Four";
else if (( bios_ret & DISK_INTEREST_BITS ) == THREE_DISK_DRIVES )
drives = "Three";
else if (( bios_ret & DISK_INTEREST_BITS ) == TWO_DISK_DRIVES )
drives = "Two";
else if (( bios_ret & DISK_INTEREST_BITS ) == ONE_DISK_DRIVE )
drives = "One";
printf("7/6 Drives (Bit 0 = 1): %s\n", drives );

printf(" 8 Not Used : -\n" );

comm_ports = "";
if (( bios_ret & COMM_INTEREST_BITS ) == THREE_COMM_PORTS )
comm_ports = "Three";
else if (( bios_ret & COMM_INTEREST_BITS ) == TWO_COMM_PORTS )
comm_ports = "Two";
else if (( bios_ret & COMM_INTEREST_BITS ) == ONE_COMM_PORT )
comm_ports = "One";
else if (( bios_ret & COMM_INTEREST_BITS ) == NO_COMM_PORTS )
comm_ports = "None";
printf("11-9 Comm Ports(10 & 9): %s\n", comm_ports );

printf(" 12 Game Port : %s\n", ( bios_ret & GAME_PORT ) ? "Available" : "None" );

printf(" 13 Not Used : -\n" );

printers = "";
if (( bios_ret & PRINTER_INTEREST_BITS ) == THREE_PRINTERS )
printers = "Three";
else if (( bios_ret & PRINTER_INTEREST_BITS ) == TWO_PRINTERS )
printers = "Two";
else if (( bios_ret & PRINTER_INTEREST_BITS ) == ONE_PRINTER )
printers = "One";
else if (( bios_ret & PRINTER_INTEREST_BITS ) == NO_PRINTER )
printers = "None";
printf("15/14 Printer Ports : %s\n", printers );

}
/* end-of-file EQUIP.C end-of-file */


  3 Responses to “Category : C Source Code
Archive   : TC-EQUIP.ZIP
Filename : EQUIP.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/