home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / sysutil / dipset.lzh / DIPSET.BAS next >
Encoding:
BASIC Source File  |  1988-08-31  |  11.5 KB  |  437 lines

  1.  REM ---------------------------------------------------------------------
  2.  REM Program: Dipset
  3.  REM Purpose: Mother Board Hardware Switch Configuration
  4.  REM Original Author : Steve Dorr
  5.  REM This Version:     Pete Willard
  6.  REM ---------------------------------------------------------------------
  7.  REM Influenced by: Systat.Bas          Author: Crisp
  8.  
  9.  REM Revsion History                    Made By
  10.  REM ---------------------------------------------------------------------
  11.  REM Display modifications     :        Feldmann (MCI 248-9063)
  12.  REM Turbo Basic Conversion, clean-up
  13.  REM  and corrections:                  Peter K. Willard
  14.  
  15.  REM Reference: "CONFIG.BAS"            Peter G. Wohlmut
  16.  REM            "POKEPEEK.DOC"          Author unknown
  17.  REM            "I/O ADDRESS MAP"       in the technical reference manual
  18.  REM            "Programmer's
  19.  REM             Problem Solver"        Robert Jourdain
  20.  
  21.  
  22. '
  23. '|--------- REGNAMES.INC FROM BORLAND
  24. '
  25. %FLAGS = 0
  26. %AX    = 1
  27. %BX    = 2
  28. %CX    = 3
  29. %DX    = 4
  30. %SI    = 5
  31. %DI    = 6
  32. %BP    = 7
  33. %DS    = 8
  34. %ES    = 9
  35.  
  36. '
  37. '-------------------------------------------------------------------------
  38. ' color constants for video screen
  39.         %BLACK   = 0
  40.         %BLUE    = 1
  41.         %GREEN   = 2
  42.         %CYAN    = 3
  43.         %RED     = 4
  44.         %PURPLE  = 5
  45.         %BROWN   = 6
  46.         %WHITE   = 7
  47.         %GRAY    = 8
  48.         %LTBLUE  = 9
  49.         %LTGREEN = 10
  50.         %LTCYAN  = 11
  51.         %LTRED   = 12
  52.         %LTPURPLE= 13
  53.         %YELLOW  = 14
  54.         %LTWHITE = 15
  55.         %BLINK   = 16
  56.         %REVERSE = 112
  57.  
  58. SUB EOL
  59.  
  60.  
  61.  
  62. ' LIMITED USE: ASSUMED 80 COLUMN SCREEN WITH NORMAL ATTRIBUTES
  63. '              ALLOWS FOR NO CALLED PARAMETERS
  64.  
  65. XSTART = POS-1
  66. YSTART = CSRLIN-1
  67.  
  68. REG %AX,&H0600        ' SCROLL FUNCTION WITH 0 LINES SCROLLED
  69. REG %BX,(7*256)     'ATTRIBUTE SET AT 7 (%white, NORMAL)
  70. REG %CX,(YSTART*256)+XSTART
  71. REG %DX,(YSTART*256)+79
  72. CALL INTERRUPT &H10     ' EXECUTE
  73.  
  74. END SUB
  75.  
  76. SUB CSound
  77.   '
  78.   ' Produces a short signalling sound.
  79.   ' Written by Rick Kerner, 1/5/88
  80.   SOUND 760, .5
  81.   SOUND 1080, .5
  82. END SUB 'CSound
  83.  
  84. '
  85. '|----------- PRESS A KEY PROCEDURE, ALWAYS RETURNS UPPERCASE
  86. '  Uses the varialble ANS$
  87.  
  88. SUB GETCH
  89.  SHARED ANS$
  90.         WHILE NOT INSTAT
  91.          ANS$ = ""
  92.         WEND
  93.      ANS$ = INKEY$
  94.     ANS$ = UCASE$(ANS$)
  95. END SUB
  96.  
  97. SUB PRINTAT(X,Y)
  98.  SHARED Z$
  99.         LOCATE X,Y
  100.         PRINT Z$;
  101. END SUB
  102.  
  103. SUB DRAW.SWITCH(START)
  104.  SHARED PLINE
  105. '|-----------------------------Draw and label switches
  106.  DECR START,1
  107.  color %yellow
  108.  
  109.  LOCATE START+1,PLINE:PRINT "       SW1                 SW2       "
  110.  LOCATE START+2,PLINE:PRINT "┌─╥─╥─╥─╥─╥─╥─╥─┐   ┌─╥─╥─╥─╥─╥─╥─╥─┐"
  111.  LOCATE START+3,PLINE:PRINT "│ ║ ║ ║ ║ ║ ║ ║ │on│ ║ ║ ║ ║ ║ ║ ║ │"
  112.  LOCATE START+4,PLINE:PRINT "│ ║ ║ ║ ║ ║ ║ ║ │   │ ║ ║ ║ ║ ║ ║ ║ │"
  113.  LOCATE START+5,PLINE:PRINT "└─╨─╨─╨─╨─╨─╨─╨─┘   └─╨─╨─╨─╨─╨─╨─╨─┘"
  114.  LOCATE START+6,PLINE:PRINT " 1 2 3 4 5 6 7 8     1 2 3 4 5 6 7 8 "
  115.  color %white
  116. END SUB
  117.  
  118.  
  119.  DEFDBL E
  120.  DIM SW$(2,8)
  121.   UP$= CHR$(223)
  122.   DOWN$= CHR$(220)
  123.  
  124.    KEY OFF
  125.    DEF SEG
  126.    POKE &H5C,25
  127.  
  128. Main.menu:
  129.  CLS
  130.   KEY OFF
  131.   LOCATE 8,19,0
  132.   Z$= "Review/Set DIP Switches for IBM-PC or COMPAQ" :CALL PRINTAT(8,19)
  133.   Z$= "1.  View current DIP switch settings." :CALL PRINTAT(10,22)
  134.   Z$= "2.  Configure DIP switch settings." :CALL PRINTAT(12,22)
  135.   Z$= "3.  Exit to DOS." :CALL PRINTAT(14,22)
  136.   Z$= "[Enter option]" :CALL PRINTAT(16,32)
  137.  
  138.   CALL GETCH
  139.    O=VAL(ANS$)
  140.    ANS$ = ""
  141.     SELECT CASE O
  142.  
  143.         CASE 1
  144.          CLS
  145.          SETUP = 0
  146.          GOSUB GET.SWITCH
  147.          EXIT SELECT
  148.  
  149.         CASE 2
  150.          SETUP = 1
  151.          GOSUB SET.SWITCH
  152.          EXIT SELECT
  153.  
  154.         CASE 3
  155.          GOSUB PROGRAM.DONE
  156.          EXIT SELECT
  157.         CASE ELSE
  158.                 GOTO Main.menu
  159.     END SELECT
  160.  
  161. GOTO Main.menu
  162.  
  163. '|-----------------------------------------------------------------------|
  164.  
  165. Get.Switch:
  166.  PLINE = 15
  167.  START = 1
  168.  CALL DRAW.SWITCH(START)
  169.  TEMP=INP(&H61)
  170. REM ***** turn off keyboard and read switches
  171.  OUT &H61,&HC8
  172.  SW1=INP(&H60)
  173.  SW2H=(INP(&H62) AND &HF)
  174. REM ***** turn keyboard back on
  175.  OUT &H61,TEMP
  176.  SW2L=(INP(&H62) AND &HF)
  177.  SW2=16*SW2H+SW2L
  178.  
  179. REM ***** draw switch status
  180.  FOR I=0 TO 7
  181.   IF (SW1 AND 2^I)/2^I=1 THEN  GOTO SKIP.A
  182.    LOCATE 3,I*2+(PLINE+1):COLOR %LTRED:PRINT UP$:COLOR %WHITE:GOTO SKIP.B
  183.  
  184. SKIP.A:
  185.    LOCATE 4,I*2+(PLINE+1):COLOR %LTRED:PRINT DOWN$:COLOR %WHITE
  186.  
  187. SKIP.B:
  188.   IF (SW2 AND 2^I)/2^I=1 THEN  GOTO SKIP.C
  189.    LOCATE 3,I*2+(PLINE+21):COLOR %LTRED:PRINT UP$:COLOR %WHITE:GOTO SKIP.D
  190.  
  191. SKIP.C:
  192.    LOCATE 4,I*2+(PLINE+21):COLOR %LTRED:PRINT DOWN$:COLOR %WHITE
  193.  
  194. SKIP.D:
  195.  NEXT I
  196.  
  197. REM ***** find status in ram
  198.  DEF SEG=&H40
  199.  
  200. REM ***** memory size
  201.  TOTMEM=256*PEEK(&H14)+PEEK(&H13)
  202.  IOMEM=256*PEEK(&H16)+PEEK(&H15)
  203.  
  204. REM ***** equipment flags (bits 1,8,13 not used)
  205.  EQUIPFLAG=256*PEEK(&H11)+PEEK(&H10)
  206. '|----------Original equipment flag check for Parallel didn't work, use Turbo
  207. '|----------binary commands to diddle bits.
  208.         B$ = BIN$(EQUIPFLAG)
  209.         B$ = "&B"+MID$(B$,7,2)
  210.         Parallel = Val(B$)
  211.  
  212.  SYSBRDMEM=((EQUIPFLAG AND 2^3+2^2)/2^2+1)*16
  213.   IF (EQUIPFLAG AND 2^0)=0 THEN DISKS=0:GOTO CHEK.VID
  214.    DISKS=(EQUIPFLAG AND 2^7+2^6)/2^6+1
  215.  
  216. CHEK.VID:
  217.  VI=(EQUIPFLAG AND 2^5+2^4)/2^4
  218.  SELECT CASE VI
  219.      CASE 0
  220.          VIDINIT$="No MONITOR Set"
  221.      CASE 1
  222.          VIDINIT$="40x25 GRAPHICS"
  223.      CASE 2
  224.          VIDINIT$="80x25 GRAPHICS"
  225.      CASE 3
  226.          VIDINIT$="80x25 MONO"
  227.      CASE ELSE
  228.          VIDINIT$="UNKOWN"
  229.  END SELECT
  230.  
  231.  SERIAL=(EQUIPFLAG AND 2^11+2^10+2^9)/2^9
  232.  IF (EQUIPFLAG AND 2^12)=2^12 THEN GAME$="YES" ELSE GAME$="NO"
  233.  TB$=STRING$(8,32)
  234.  
  235. REM ***** print status from ram
  236.  
  237.  LOCATE 1,55
  238.   PRINT "Status According to RAM"
  239.  LOCATE 2,55
  240.   PRINT "-----------------------"
  241.  LOCATE 4,55
  242.   PRINT USING "Total Memory    ###K";TOTMEM
  243.  LOCATE 5,55
  244.   PRINT USING "Sys Brd Mem     ###K";SYSBRDMEM
  245.  LOCATE 6,55
  246.   PRINT USING "I/O Memory      ###K";IOMEM
  247.  LOCATE 7,55
  248.   PRINT USING "Disk Drives       ##";DISKS
  249.  LOCATE 8,55
  250.   PRINT USING "Parallel Ports    ##";PARALLEL
  251.  LOCATE 9,55
  252.   PRINT USING "Serial Ports      ##";SERIAL
  253.  LOCATE 10,55
  254.   PRINT "Game Adapter     ";GAME$
  255.  LOCATE 11,55
  256.   PRINT "Monitor: ";VIDINIT$
  257.  
  258. IF SETUP = 1 THEN SKIP.IT
  259. '|----------------------------------------------------
  260.  LOCATE 13,55
  261.   PRINT       "Press  [ESC] to end."
  262.  
  263. CHECK.ESC:
  264. CALL GETCH
  265.  
  266.  IF ANS$<>CHR$(27) THEN GOTO CHECK.ESC
  267. '|----------------------------------------------------
  268.  
  269. SKIP.IT:
  270.  RETURN
  271.  
  272.  
  273. '|-----------------------OPTION # 2--------------------------------------------
  274. SET.SWITCH:
  275.  CLS
  276.  PRINT"                     DIPSET CONFIGURATION"
  277.  PRINT"     This program will ask you how you want your computer to be"
  278.  print"    set up and then will issue the proper dip switch settings"
  279.  print"    for the system motherboard. It will also display the current"
  280.  print"    configuration according to RAM to help visualize the proper"
  281.  print"    adjustment to SW1 and SW2, if any."
  282.  
  283. DRIVE.SET:
  284.  LOCATE 8,1:CALL EOL
  285.  PRINT"    How many floppy disk drives are there";:input disk
  286.  IF DISK ><INT(DISK) THEN
  287.   CALL CSOUND
  288.   PRINT "    %INP_BAD_NUM   YOU MUST INPUT A WHOLE NUMBER"
  289.   CALL EOL
  290.   GOTO DRIVE.SET
  291.  END IF
  292.  IF DISK >4 OR DISK <0 THEN
  293.   CALL CSOUND
  294.   PRINT "    %INP_RNG_ERR   DISK RANGE 0 THRU 4"
  295.   CALL EOL
  296.   GOTO DRIVE.SET
  297.  END IF
  298.  
  299. MEM.SET:
  300.  LOCATE 9,1:CALL EOL
  301.  PRINT"    How much memory, in K, is installed";:input mem
  302.  IF MEM<> INT(MEM/64)*64 THEN
  303.   CALL CSOUND
  304.   PRINT"    %INP_INC_ERR   MEMORY MUST BE IN 64K INCREMENTS"
  305.   CALL EOL
  306.   GOTO MEM.SET
  307.  END IF
  308.  IF MEM <64 OR MEM >640 THEN
  309.   CALL CSOUND
  310.   PRINT "    %INP_RNG_ERR   MEMORY RANGE 64 THRU 640K"
  311.   CALL EOL
  312.   GOTO MEM.SET
  313.  END IF
  314.  
  315. VID.SET:
  316.  LOCATE 10,1:CALL EOL
  317.  PRINT"    What type of monitor do you have:"
  318.  print"        1.  No display"
  319.  print"        2.  Monochrome 80 X 25"
  320.  print"        3.  Graphics   40 X 25"
  321.  print"        4.  Graphics   80 X 25"
  322.  LOCATE 16,1:CALL EOL
  323.  INPUT"            [CHOICE]-> "; MONITOR
  324.  IF MONITOR <1 OR MONITOR >4 OR MONITOR <>INT(MONITOR) THEN
  325.   CALL CSOUND
  326.   GOTO VID.SET
  327.  END IF
  328.  
  329. CO.PROC:
  330.  LOCATE 18,1:CALL EOL
  331.  PRINT "    Do you have an 8087 chip installed (Y or N) ? ";
  332.  CALL GETCH
  333.  IF ANS$ <>"Y" AND ANS$ <>"N" THEN
  334.    PRINT "WHAT?"
  335.    CALL CSOUND
  336.    DELAY .5
  337.    GOTO CO.PROC
  338.  END IF
  339.  PRINT ANS$
  340.  IF ANS$ = "Y" THEN CHIP = 1 ELSE CHIP = 2
  341. '|---------------------------------------------------------------------------
  342.  CLS
  343.  GOSUB GET.SWITCH
  344.  PLINE = 15
  345.  START = 15
  346.  SETUP = 0
  347.  CALL DRAW.SWITCH(START)
  348.  
  349.  LOCATE 15,55: PRINT "Switch Configuration for:"
  350.  LOCATE 16,55: PRINT "-------------------------"
  351.  LOCATE 17,55: PRINT USING "Floppy disk drives  ##";DISK
  352.  SELECT CASE DISK+1
  353.         CASE 1
  354.          SW$(1,1)=UP$  :SW$(1,7)=UP$  :SW$(1,8)=UP$
  355.         CASE 2
  356.          SW$(1,1)=DOWN$:SW$(1,7)=UP$  :SW$(1,8)=UP$
  357.         CASE 3
  358.          SW$(1,1)=DOWN$:SW$(1,7)=DOWN$:SW$(1,8)=UP$
  359.         CASE 4
  360.          SW$(1,1)=DOWN$:SW$(1,7)=UP$  :SW$(1,8)=DOWN$
  361.         CASE 5
  362.          SW$(1,1)=DOWN$:SW$(1,7)=DOWN$:SW$(1,8)=DOWN$:RETURN
  363.  END SELECT
  364.  
  365.  LOCATE 18,55: PRINT "Monitor: ";
  366.  IF CHIP = 1 THEN SW$(1,2)=DOWN$ ELSE SW$(1,2) = UP$
  367.  SELECT CASE MONITOR
  368.         CASE 1
  369.          SW$(1,5)=UP$  :SW$(1,6)=UP$  :PRINT"NO DISPLAY"
  370.         CASE 2
  371.          SW$(1,5)=DOWN$:SW$(1,6)=DOWN$:PRINT"80x25 MONOCHROME"
  372.         CASE 3
  373.          SW$(1,5)=DOWN$:SW$(1,6)=UP$  :PRINT"40x25 GRAPHICS"
  374.         CASE 4
  375.          SW$(1,5)=UP$  :SW$(1,6)=DOWN$:PRINT"80x25 GRAPHICS"
  376.  END SELECT
  377.  LOCATE 19,55: PRINT USING "Memory installed:####K";MEM
  378.  LOCATE 20,55
  379.  IF CHIP = 2 THEN PRINT"No ";
  380.  PRINT "8087 chip installed" ' WILL PRINT IF INSTALLED
  381.  COLOR %LTRED
  382.         MEMRY = MEM/64
  383.         SELECT CASE MEMRY
  384.          CASE 1
  385.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  386.           SW$(2,2)=UP$  :SW$(2,3)=UP$  : SW$(2,4)=UP$  :SW$(2,5)=UP$
  387.          CASE 2
  388.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  389.           SW$(2,2)=DOWN$:SW$(2,3)=UP$  : SW$(2,4)=UP$  :SW$(2,5)=UP$
  390.          CASE 3
  391.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  392.           SW$(2,2)=UP$  :SW$(2,3)=DOWN$: SW$(2,4)=UP$  :SW$(2,5)=UP$
  393.          CASE 4
  394.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  395.           SW$(2,2)=DOWN$:SW$(2,3)=DOWN$: SW$(2,4)=UP$  :SW$(2,5)=UP$
  396.          CASE 5
  397.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  398.           SW$(2,2)=UP$  :SW$(2,3)=UP$  : SW$(2,4)=DOWN$:SW$(2,5)=UP$
  399.          CASE 6
  400.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  401.           SW$(2,2)=DOWN$:SW$(2,3)=UP$  : SW$(2,4)=DOWN$:SW$(2,5)=UP$
  402.          CASE 7
  403.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  404.           SW$(2,2)=UP$  :SW$(2,3)=DOWN$: SW$(2,4)=DOWN$:SW$(2,5)=UP$
  405.          CASE 8
  406.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  407.           SW$(2,2)=DOWN$:SW$(2,3)=DOWN$: SW$(2,4)=DOWN$:SW$(2,5)=UP$
  408.          CASE 9
  409.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  410.           SW$(2,2)=UP$  :SW$(2,3)=UP$  : SW$(2,4)=UP$  :SW$(2,5)=DOWN$
  411.          CASE 10
  412.           SW$(1,3)=DOWN$:SW$(1,4)=DOWN$:SW$(2,1)=UP$
  413.           SW$(2,2)=DOWN$:SW$(2,3)=UP$  : SW$(2,4)=UP$  :SW$(2,5)=DOWN$
  414.  
  415.     END SELECT
  416.  
  417.  FOR I=0 TO 7:
  418.  IF SW$(1,I+1)=UP$ THEN LOCATE START+3,I*2+(PLINE+1):PRINT UP$;
  419.  IF SW$(1,I+1)=DOWN$ THEN LOCATE START+4,I*2+(PLINE+1):PRINT DOWN$;
  420.  NEXT I
  421.  
  422.  SW$(2,6)=DOWN$:SW$(2,7)=DOWN$:SW$(2,8)=DOWN$
  423.  FOR I=0 TO 7:
  424.  IF SW$(2,I+1)=UP$ THEN LOCATE START+3,I*2+(PLINE+21):PRINT UP$;
  425.  IF SW$(2,I+1)=DOWN$ THEN LOCATE START+4,I*2+(PLINE+21):PRINT DOWN$;
  426.  NEXT I
  427.  
  428.  COLOR %WHITE
  429.  LOCATE 22,55
  430.  PRINT "Press [ESC] to end."
  431.  
  432. GOTO CHECK.ESC
  433. RETURN
  434.  
  435. PROGRAM.DONE:
  436.  CLS:END
  437.