' CMOS.BAS ' Reads the contents of the CMOS ' DEFINT A-Z DECLARE FUNCTION CMOSBattery% () DECLARE FUNCTION BitOn% (which%, IntVal%) DECLARE FUNCTION DriveType% (Drv%) DECLARE FUNCTION Hex2Bin$ (Hcs$) DECLARE FUNCTION TotalMem% () CLS PRINT "CMOS Contents:" FOR I = 0 TO &H7F OUT &H70, I PRINT USING "\ \"; HEX$(INP(&H71)); NEXT I PRINT " " PRINT "CMOS Battery State: "; IF CMOSBattery% THEN PRINT "Good" ELSE PRINT "Battery Dead" PRINT k% = DriveType%(1) PRINT "Drive A: "; IF k% = 0 THEN PRINT "None" IF k% = 1 THEN PRINT "5"; CHR$(172); " 360K" IF k% = 2 THEN PRINT "5"; CHR$(172); " 1.2M" IF k% = 3 THEN PRINT "3"; CHR$(171); " 720K" IF k% = 4 THEN PRINT "3"; CHR$(171); " 1.44M" k% = DriveType%(2) PRINT "Drive B: "; IF k% = 0 THEN PRINT "None" IF k% = 1 THEN PRINT "5"; CHR$(172); " 360K" IF k% = 2 THEN PRINT "5"; CHR$(172); " 1.2M" IF k% = 3 THEN PRINT "3"; CHR$(171); " 720K" IF k% = 4 THEN PRINT "3"; CHR$(171); " 1.44M" PRINT OUT &H70, &H19 B% = INP(&H71) PRINT "Hard Disk 0 Type:"; IF B <> 0 THEN PRINT B% ELSE PRINT " Not Installed" OUT &H70, &H1A B% = INP(&H71) PRINT "Hard Disk 1 Type:"; IF B <> 0 THEN PRINT B% ELSE PRINT " Not Installed" PRINT OUT &H70, &H15 B% = INP(&H71) OUT &H70, &H16 b1% = INP(&H71) PRINT "Base Memory:"; RTRIM$(STR$(CVI(CHR$(B) + CHR$(b1%)))); "K" OUT &H70, &H17 B% = INP(&H71) OUT &H70, &H18 b1% = INP(&H71) PRINT "Extended Memory:"; RTRIM$(STR$(CVI(CHR$(B) + CHR$(b1%)))); "K" PRINT "Total System Memory:"; RTRIM$(STR$(TotalMem%)); "K" FUNCTION BitOn (which, IntVal) BitOn = 0 SELECT CASE which CASE 1: IF (IntVal AND 128) THEN BitOn = (-1) CASE 2: IF (IntVal AND 64) THEN BitOn = (-1) CASE 3: IF (IntVal AND 32) THEN BitOn = (-1) CASE 4: IF (IntVal AND 16) THEN BitOn = (-1) CASE 5: IF (IntVal AND 8) THEN BitOn = (-1) CASE 6: IF (IntVal AND 4) THEN BitOn = (-1) CASE 7: IF (IntVal AND 2) THEN BitOn = (-1) CASE 8: IF (IntVal AND 1) THEN BitOn = (-1) CASE 9: IF (IntVal AND (-32768)) THEN BitOn = (-1) CASE 10: IF (IntVal AND 16384) THEN BitOn = (-1) CASE 11: IF (IntVal AND 8192) THEN BitOn = (-1) CASE 12: IF (IntVal AND 4096) THEN BitOn = (-1) CASE 13: IF (IntVal AND 2048) THEN BitOn = (-1) CASE 14: IF (IntVal AND 1024) THEN BitOn = (-1) CASE 15: IF (IntVal AND 512) THEN BitOn = (-1) CASE 16: IF (IntVal AND 256) THEN BitOn = (-1) END SELECT END FUNCTION FUNCTION CMOSBattery% OUT &H70, &HD B% = INP(&H71) C = BitOn%(1, B%) CMOSBattery% = C END FUNCTION FUNCTION DriveType% (Drv%) OUT &H70, &H10 B% = INP(&H71) IF Drv% = 1 THEN t$ = LEFT$(Hex2Bin$(LTRIM$(RTRIM$(HEX$(B%)))), 4) ELSE t$ = MID$(Hex2Bin$(LTRIM$(RTRIM$(HEX$(B%)))), 5, 4) END IF IF t$ = "0001" THEN DriveType% = 1 IF t$ = "0010" THEN DriveType% = 2 IF t$ = "0011" THEN DriveType% = 3 IF t$ = "0100" THEN DriveType% = 4 END FUNCTION FUNCTION Hex2Bin$ (Hcs$) Hcs$ = UCASE$(Hcs$) lc = LEN(Hcs$) FOR x = 1 TO lc SELECT CASE MID$(Hcs$, x, 1) CASE "0" out$ = out$ + "0000" CASE "1" out$ = out$ + "0001" CASE "2" out$ = out$ + "0010" CASE "3" out$ = out$ + "0011" CASE "4" out$ = out$ + "0100" CASE "5" out$ = out$ + "0101" CASE "6" out$ = out$ + "0110" CASE "7" out$ = out$ + "0111" CASE "8" out$ = out$ + "1000" CASE "9" out$ = out$ + "1001" CASE "A" out$ = out$ + "1010" CASE "B" out$ = out$ + "1011" CASE "C" out$ = out$ + "1100" CASE "D" out$ = out$ + "1101" CASE "E" out$ = out$ + "1110" CASE "F" out$ = out$ + "1111" END SELECT NEXT Hex2Bin$ = out$ END FUNCTION FUNCTION TotalMem% OUT &H70, &H15 B% = INP(&H71) OUT &H70, &H16 b1% = INP(&H71) a1% = CVI(CHR$(B) + CHR$(b1%)) OUT &H70, &H17 B% = INP(&H71) OUT &H70, &H18 b1% = INP(&H71) a2% = CVI(CHR$(B) + CHR$(b1%)) TotalMem% = a1% + a2% END FUNCTION