home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / pcmag / vol6n08.zip / STATUS.ASM < prev    next >
Assembly Source File  |  1987-01-20  |  25KB  |  543 lines

  1. ;              Status.asm
  2.  
  3. CODE SEGMENT                           ;*************************
  4. ASSUME CS:CODE,DS:CODE                 ;*                       *
  5. ORG 100H                               ;*  REMEMBER TO EXE2BIN  *
  6.                                        ;*                       *
  7.                                        ;*************************
  8. START:         JMP    BEGINNING
  9.  
  10. ;              DATA AREA
  11. ;              ---------
  12. COPYRIGHT      DB  'Copyright 1987 Ziff-Davis Publishing Co.',1AH
  13. PROGRAMMER     DB  'Michael J. Mefford'
  14.  
  15. SWITCH1        DB  179,' O 1 2 3 4 5 6 7 8 ',179,'$'
  16. SWITCH2        DB  '1 ',179,' N $'
  17. SWITCH3        DB  '0 ',179,32,24,32,'$'
  18.  
  19. SWITCH_FLAG    DB  0
  20. DISPLAY_FLAG   DB  0
  21.  
  22. ;------------------------------------------------------------;
  23. ; Clear the screen by changing to 80X25 color.  Start with   ;
  24. ; graphic display of the switches. Print switch explanation. ;
  25. ;------------------------------------------------------------;
  26.  
  27. BEGINNING:     MOV    AH,8                   ;Get attribute at cursor.
  28.                XOR    BH,BH                  ;Page zero.
  29.                INT    10H
  30.                MOV    BH,AH
  31.                XOR    CX,CX
  32.                MOV    DX,184FH               ;Entire screen.
  33.                MOV    AX,600H                ;Scroll active page.
  34.                INT    10H
  35.  
  36.                MOV    BP,16H                 ;BP will be used for cursor
  37.                MOV    DX,OFFSET HEADING      ; position. Display heading
  38.                CALL   LOCATE_STRING          ; at row 0, col 22 (16H).
  39.  
  40.                MOV    BP,123H                ;Row 1, col 35.
  41.                MOV    DX,OFFSET SWITCHES     ;Print "Switches".
  42.                CALL   LOCATE_STRING
  43.  
  44.                MOV    BP,21DH                ;Row 2, col 29.
  45.                CALL   LOCATE
  46.                MOV    DL,218                 ;Display switch box starting
  47.                CALL   PRINT_CHAR             ; with upper left corner.
  48.                CALL   PRINT_LINE             ;Print the line.
  49.                MOV    DL,191                 ;Upper right corner.
  50.                CALL   PRINT_CHAR
  51.  
  52.                MOV    BP,31DH                ;Row 3, col 29.
  53.                MOV    DX,OFFSET SWITCH1      ;More of switch display.
  54.                CALL   LOCATE_STRING
  55.  
  56.                MOV    BP,41BH                ;Row 4, col 27.
  57.                MOV    DX,OFFSET SWITCH2      ;More of switch display.
  58.                CALL   LOCATE_STRING
  59.  
  60.                MOV    BX,20DBH               ;Space = 0  block = 1.
  61.                JMP    SHORT ON               ;Display on position first.
  62.  
  63. OFF:           MOV    DL,179                 ;Finish box on line 4.
  64.                CALL   PRINT_CHAR
  65.                MOV    BP,51BH                ;Row 5, col 27.
  66.                MOV    DX,OFFSET SWITCH3      ;More of switch display.
  67.                CALL   LOCATE_STRING
  68.                MOV    BX,0DB20H              ;Switch graphic characters.
  69.  
  70. ON:            MOV    CX,8                   ;Display all 8 switch settings.
  71.                INT    11H                    ;Equipment determination.
  72.                MOV    DH,AL                  ;Save in DH.
  73. NEXT_SWITCH:   MOV    DL,BH                  ;Assume one of the char.
  74.                TEST   DH,1                   ;Is bit on?
  75.                JZ     GOT_IT                 ;If yes, display graphic char.
  76.                MOV    DL,BL                  ;Else, get other char.
  77. GOT_IT:        CALL   PRINT_CHAR             ;Print the char.
  78.                MOV    DL,32                  ;Space between settings.
  79.                CALL   PRINT_CHAR
  80.                ROR    DH,1                   ;Rotate one to get next bit.
  81.                LOOP   NEXT_SWITCH            ;Get next bit.
  82.                INC    SWITCH_FLAG            ;Now check for off bit settings.
  83.                CMP    SWITCH_FLAG,2          ;Have we done it already?
  84.                JNZ    OFF                    ;If no, do it now.
  85.  
  86.                MOV    DL,179                 ;Finish line 5.
  87.                CALL   PRINT_CHAR
  88.                MOV    BP,61DH                ;Row 6, col 29.
  89.                CALL   LOCATE
  90.                MOV    DL,192                 ;Bottom left of box.
  91.                CALL   PRINT_CHAR
  92.                CALL   PRINT_LINE             ;Display the line.
  93.                MOV    DL,217                 ;Finish with bottom right.
  94.                CALL   PRINT_CHAR
  95.  
  96.                MOV    DX,OFFSET TEXT
  97.                CALL   PRINT_STRING
  98.  
  99. ;------------------------------------------------;
  100. ; Mark with asterisk the correct switch setting. ;
  101. ;------------------------------------------------;
  102.  
  103.                INT    11H                    ;Equipment determination.
  104.                MOV    BX,AX                  ;AX will be used so store in BX.
  105.                MOV    BP,802H                ;Assume row 8, col 2.
  106.                MOV    DL,'*'                 ;Mark with asterisk.
  107.                TEST   BX,1                   ;Is bit one off?
  108.                JZ     DISPLAY_BIT1           ;If yes, we assumed right.
  109.                ADD    BP,100H                ;Else, goto row 9.
  110. DISPLAY_BIT1:  CALL   LOCATE_CHAR
  111.  
  112.                MOV    BP,0B02H               ;Assume row 11, col 2.
  113.                TEST   BX,2                   ;Is bit two off?
  114.                JZ     DISPLAY_BIT2           ;If yes, we assumed right.
  115.                ADD    BP,100H                ;Else, goto row 12.
  116. DISPLAY_BIT2:  CALL   LOCATE_CHAR
  117.  
  118.                MOV    BP,1202H               ;Row 18, col 2.
  119.                CALL   BITS                   ;Mark the other bits.
  120.  
  121.                MOV    BP,0B27H               ;Row 11, col 39.
  122.                CALL   BITS
  123.  
  124. ;------------------------------------;
  125. ; Pause and check if EGA is present. ;
  126. ;------------------------------------;
  127.  
  128.                MOV    AX,0C000H              ;EGA BIOS segment.
  129.                MOV    DS,AX
  130.                MOV    SI,1EH                 ;IBM signature offset.
  131.                MOV    DI,OFFSET IBM
  132.                MOV    DX,OFFSET EGA          ;Assume EGA present.
  133.                MOV    CX,3
  134.                REPZ   CMPSB                  ;Compare three bytes.
  135.                PUSH   CS
  136.                POP    DS
  137.                JNZ    FINISH_BITS            ;If not present, skip.
  138.                ADD    BP,19                  ;Else, add 19 to column.
  139.                CALL   LOCATE_STRING          ;And display "EGA".
  140.  
  141. FINISH_BITS:   MOV    BP,1027H               ;Row 16, col 39.
  142.                CALL   BITS
  143.  
  144. ;---------------------------------------;
  145. ; Display the number of parallel ports. ;
  146. ;---------------------------------------;
  147.  
  148. PRINTERS:      MOV    BP,1401H               ;Row 20, col 1.
  149.                CALL   LOCATE
  150.                INT    11H                    ;Get equipment again.
  151.                MOV    DL,'0'                 ;Assume zero printers.
  152.                TEST   AH,10000000B           ;Is bit 15 on?
  153.                JZ     CH_PRN1                ;If no, check bit 14.
  154.                ADD    DL,2                   ;Else, add two to count.
  155. CH_PRN1:       TEST   AH,1000000B            ;Is bit 14 on?
  156.                JZ     PRINT_PRN              ;If no, ready to print.
  157.                INC    DL                     ;Else, add one to count.
  158. PRINT_PRN:     CALL   PRINT_CHAR             ;Print the count.
  159.                MOV    DX,OFFSET PARALLEL     ;Add the text.
  160.                CALL   PRINT_STRING
  161.  
  162. ;-------------------------------------;
  163. ; Display the number of serial ports. ;
  164. ;-------------------------------------;
  165.  
  166. SERIAL_PORT:   MOV    BP,1501H               ;Row 21, col 1.
  167.                CALL   LOCATE
  168.                INT    11H                    ;Retrieve equiment again.
  169.                MOV    DL,'0'                 ;Assume zero.
  170.                TEST   AH,100B                ;Is bit 10 on?
  171.                JZ     CK_COM1                ;If no, check bit 9.
  172.                ADD    DL,2                   ;Else, add two to count.
  173. CK_COM1:       TEST   AH,10B                 ;Is bit 9 on?
  174.                JZ     PRINT_COM              ;If no, ready to print.
  175.                INC    DL                     ;Else, add one to count.
  176. PRINT_COM:     CALL   PRINT_CHAR             ;Print the count.
  177.                MOV    DX,OFFSET SERIAL       ;Add the text.
  178.                CALL   PRINT_STRING
  179.  
  180. ;-----------------------------------;
  181. ; Display if game port is on board. ;
  182. ;-----------------------------------;
  183.  
  184. GAME:          MOV    BP,1601H               ;Row 22, col 1.
  185.                CALL   LOCATE
  186.                INT    11H                    ;Retrieve equipment.
  187.                MOV    DL,'0'                 ;Assume zero.
  188.                TEST   AH,10000B              ;Is bit 12 on?
  189.                JZ     PRN_GAME               ;If no, ready to print.
  190.                INC    DL                     ;Else, add one to count.
  191. PRN_GAME:      CALL   PRINT_CHAR             ;Print the count.
  192.                MOV    DX,OFFSET GAMEPORT     ;Add the text.
  193.                CALL   PRINT_STRING
  194.  
  195. ;------------------------------;
  196. ; Display total system memory. ;
  197. ;------------------------------;
  198.  
  199. TOTAL_MEMORY:  MOV    BP,1226H                  ;Row 18, col 38.
  200.                MOV    DX,OFFSET SYSTEM_MEMORY   ;Display text.
  201.                CALL   LOCATE_STRING
  202.                INT    12H                    ;Retrieve total memory.
  203.                CALL   NO_CARRY               ;Display via division routine.
  204.                MOV    DL,'K'                 ;Add "K".
  205.                CALL   PRINT_CHAR
  206.  
  207. ;--------------------------------------;
  208. ; Display the bytes free for programs. ;
  209. ;--------------------------------------;
  210.  
  211. BYTES_FREE:    MOV    BP,1326H               ;Row 19, col 38.
  212.                MOV    DX,OFFSET FREE         ;Display the text.
  213.                CALL   LOCATE_STRING
  214.                CALL   MEMORY                 ;Get free memory.
  215.                MOV    DL,'K'                 ;Add "K".
  216.                CALL   PRINT_CHAR
  217.  
  218. ;--------------------------;
  219. ; Display extended memory. ;
  220. ;--------------------------;
  221.  
  222.                MOV    BP,1426H               ;Row 20, col 38.
  223.                MOV    DX,OFFSET EXTENDED
  224.                CALL   LOCATE_STRING
  225.                PUSH   DS                     ;Save data segment.
  226.                MOV    AX,0F000H
  227.                MOV    DS,AX
  228.                MOV    AL,DS:[0FFFEH]         ;Retrieve ID byte.
  229.                POP    DS
  230.                CMP    AL,0FCH                ;Is it AT class machine?
  231.                JNZ    NO_EXTEND              ;If no, no extended memory.
  232.                MOV    AH,88H                 ;Get no. of 1K blocks
  233.                INT    15H                    ; of extended memory.
  234.                STI
  235.                CMP    AX,0
  236.                JZ     NO_EXTEND
  237.                CALL   NO_CARRY               ;Else, display K bytes.
  238.                MOV    DL,'K'                 ;Add the "K".
  239.                CALL   PRINT_CHAR
  240.                JMP    SHORT DISP_EXPAND
  241.  
  242. NO_EXTEND:     MOV    DX,OFFSET NONE         ;If no extended memory,
  243.                CALL   PRINT_STRING           ; display "None".
  244.  
  245. ;--------------------------;
  246. ; Display expanded memory. ;
  247. ;--------------------------;
  248.  
  249. DISP_EXPAND:   MOV    BP,1526H               ;row 21, col 38.
  250.                MOV    DX,OFFSET EXPANDED
  251.                CALL   LOCATE_STRING
  252.                MOV    AX,3567H               ;Get INT 67H vector.
  253.                INT    21H
  254.                MOV    SI,OFFSET EMM          ;Point to "EMM".
  255.                MOV    DI,0AH                 ;Point to Device name.
  256.                MOV    CX,3                   ;Compare three characters.
  257.                REPZ   CMPSB
  258.                PUSH   CS                     ;Restore ES.
  259.                POP    ES
  260.                JNZ    NO_EXPAND              ;If name not there, no expanded.
  261.                MOV    AH,42H                 ;Else, get number of 16K blocks.
  262.                INT    67H
  263.                MOV    AX,16                  ;Multiply by 16 to get 1K blocks.
  264.                MUL    DX
  265.                CALL   NO_CARRY               ;Display via division routine.
  266.                MOV    DL,'K'                 ;Add the "K".
  267.                CALL   PRINT_CHAR
  268.                JMP    SHORT DOS_VERSION
  269.  
  270. NO_EXPAND:     MOV    DX,OFFSET NONE         ;If no expanded memory,
  271.                CALL   PRINT_STRING           ; display "None".
  272.  
  273. ;----------------------;
  274. ; Display DOS version. ;
  275. ;----------------------;
  276.  
  277. DOS_VERSION:   MOV    BP,1626H               ;Row 22, col 38.
  278.                MOV    DX,OFFSET DOS
  279.                CALL   LOCATE_STRING
  280.                MOV    AH,30H                 ;Get DOS version.
  281.                INT    21H
  282.                MOV    BL,AH                  ;Save minor version no. in BL.
  283.                XOR    BH,BH                  ;Zero in high half.
  284.                MOV    DL,AL                  ;Convert major version number
  285.                ADD    DL,30H                 ; to ASCII
  286.                CALL   PRINT_CHAR             ; and print.
  287.                MOV    DL,'.'                 ;Print the decimal.
  288.                CALL   PRINT_CHAR
  289.                CALL   TENS                   ;Display the minor number.
  290.  
  291. ;------------------------------------------------;
  292. ; Display BIOS version and search for copyright. ;
  293. ;------------------------------------------------;
  294.  
  295. BIOS_VERSION:  MOV    BP,1726H               ;Row 23, col 38.
  296.                MOV    DX,OFFSET BIOS
  297.                CALL   LOCATE_STRING
  298.                MOV    AX,0F000H              ;Point to ROM segment.
  299.                MOV    DS,AX
  300.                MOV    SI,0FFF5H              ;Point to Date
  301.                MOV    CX,8                   ;Eight characters max.
  302.                CALL   ASCII                  ; and display.
  303.  
  304.                MOV    BP,1826H               ;Row 24, col 38.
  305.                CALL   LOCATE
  306.  
  307.                MOV    DX,OFFSET COPYR        ;Point to "Copyright"
  308.                MOV    BP,9                   ;Nine characters.
  309.                CALL   SEARCH                 ;Search.
  310.                JNC    DISPLAY_MATCH          ;If no carry, got match.
  311.  
  312.                MOV    DX,OFFSET CAP_COPR     ;Point to "COPR."
  313.                MOV    BP,5
  314.                CALL   SEARCH                 ;And search.
  315.                JNC    DISPLAY_MATCH
  316.  
  317.                MOV    DX,OFFSET LOWER_COPR   ;Point to "Copr."
  318.                MOV    BP,5
  319.                CALL   SEARCH                 ;And search.
  320.                JNC    DISPLAY_MATCH
  321.  
  322.                MOV    DX,OFFSET CAP_C        ;Point to "(C)"
  323.                MOV    BP,3
  324.                CALL   SEARCH                 ;And search.
  325.                JNC    DISPLAY_MATCH
  326.  
  327.                MOV    DX,OFFSET LOWER_C      ;Point to "(c)"
  328.                MOV    BP,3
  329.                CALL   SEARCH                 ;And search.
  330.                JC     EXIT                   ;If didn't find it, give up.
  331.  
  332. DISPLAY_MATCH: PUSH   DS                     ;Save Copyright segment.
  333.                PUSH   CS
  334.                POP    DS
  335.                MOV    DX,OFFSET CAP_C        ;Print (C).
  336.                CALL   PRINT_STRING
  337.                POP    DS                     ;Restore Copyright segment.
  338.                MOV    CX,38                  ;Maximum of 38 characters
  339.                CALL   ASCII                  ; and display.
  340.  
  341. ;-------------------------------------------------------------------;
  342. ; Move the cursor to row 23 so our display won't scroll, then exit. ;
  343. ;-------------------------------------------------------------------;
  344.  
  345. EXIT:          MOV    BP,1700H               ;Row 23, col 0.
  346.                CALL   LOCATE
  347.                INT    20H                    ;Terminate.
  348.  
  349. ;      ******* SUBROUTINES *******
  350.  
  351. ;---------------------------------------------------------;
  352. ; This subroutine searches through ROM for the copyright. ;
  353. ;---------------------------------------------------------;
  354.  
  355. SEARCH:        MOV    BX,0                   ;Start at offset zero.
  356. NEXT_SEARCH:   MOV    CX,BP                  ;Number of characters to match.
  357.                MOV    SI,BX                  ;Retrieve starting offset.
  358.                MOV    DI,DX                  ;DX has offset of text to match.
  359.                REPZ   CMPSB
  360.                JZ     MATCH                  ;If zero, we got a match.
  361.                INC    BX                     ;Else, point to next offset.
  362.                JNZ    NEXT_SEARCH            ;If back to zero, we are done.
  363.                STC                           ;Indicate no match with carry.
  364.                RET
  365. MATCH:         CLC                           ;Indicate match with no carry.
  366.                RET
  367.  
  368. ;------------------------------------------------;
  369. ; This subroutine will display ASCII characters. ;
  370. ;------------------------------------------------;
  371.  
  372. ASCII:         LODSB                         ;Get a character.
  373.                CMP    AL,32                  ;Is it below space?
  374.                JB     END_ASCII              ;If yes, we are done.
  375.                CMP    AL,'z'                 ;Is it above "z"?
  376.                JA     END_ASCII              ;If yes, we are done.
  377.                MOV    DL,AL                  ;Else, print it.
  378.                CALL   PRINT_CHAR
  379.                LOOP   ASCII                  ;Get next character.
  380. END_ASCII:     RET
  381.  
  382. ;-----------------------------------------------;
  383. ; This subroutine will display the free memory. ;
  384. ;-----------------------------------------------;
  385.  
  386. MEMORY:        XOR    BX,BX                  ;Shrink allocated memory to
  387.                MOV    AH,4AH                 ; zero for current program
  388.                INT    21H                    ; via DOS.
  389.  
  390.                MOV    AH,48H                 ;Request FFFFh paragraphs of
  391.                MOV    BX,0FFFFH              ; memory. This will fail with
  392.                INT    21H                    ; available paragraphs in BX.
  393.  
  394.                MOV    AX,BX
  395.                XOR    DX,DX
  396.                MOV    CX,64                  ;Divide by 64 to get memory
  397.                DIV    CX                     ; in K bytes.
  398.                CMP    DX,32
  399.                JB     NO_CARRY
  400.                INC    AX                     ;Round up if half or above.
  401.  
  402. NO_CARRY:      MOV    BX,AX
  403.                MOV    DISPLAY_FLAG,0         ;Reset display flag.
  404.                MOV    CX,10000               ;Get ten thousands by dividing.
  405.                CALL   DIVIDE
  406.                MOV    CX,1000                ;Get thousands by dividing.
  407.                CALL   DIVIDE
  408.                MOV    CX,100                 ;Get hundreds by dividing.
  409.                CALL   DIVIDE
  410. TENS:          MOV    CX,10                  ;Get tens by dividing.
  411.                CALL   DIVIDE
  412.                MOV    CX,1                   ;Get ones by dividing.
  413.                CALL   DIVIDE
  414.                RET
  415.  
  416. DIVIDE:        MOV    AX,BX                  ;Number in AX
  417.                XOR    DX,DX                  ; and zero in DX
  418.                DIV    CX                     ; divide by CX
  419.                MOV    BX,DX                  ; remainder into BX
  420.                MOV    DL,AL                  ; and quotient into DL.
  421.                CMP    AL,0                   ;Is it zero?
  422.                JZ     FLAG                   ;If yes, is a non-zero displayed?
  423.                OR     DISPLAY_FLAG,AL        ;If non-zero, indicate by flag.
  424. FLAG:          CMP    DISPLAY_FLAG,0         ;Non-zero no. been displayed?
  425.                JA     DISPLAY                ;If yes, display else return
  426.                RET                           ; to suppress leading zeros.
  427.  
  428. DISPLAY:       ADD    DL,30H                 ;Convert hexidecimal
  429.                CALL   PRINT_CHAR             ; to decimal and display.
  430.                RET
  431.  
  432. ;--------------------------------------------;
  433. ; These are the two DOS display subroutines. ;
  434. ;--------------------------------------------;
  435.  
  436. PRINT_STRING:  MOV    AH,9                   ;Print string.
  437.                INT    21H
  438.                RET
  439.  
  440. PRINT_CHAR:    MOV    AH,2                   ;Display output.
  441.                INT    21H
  442.                RET
  443.  
  444. ;--------------------------------------------------------------------;
  445. ; These two subroutines locate the cursor before displaying via DOS. ;
  446. ;--------------------------------------------------------------------;
  447.  
  448. LOCATE_STRING: CALL   LOCATE
  449.                CALL   PRINT_STRING
  450.                RET
  451.  
  452. LOCATE_CHAR:   CALL   LOCATE
  453.                CALL   PRINT_CHAR
  454.                RET
  455.  
  456. ;-------------------------------------------;
  457. ; This subroutine sets the cursor position. ;
  458. ;-------------------------------------------;
  459.  
  460. LOCATE:        PUSH   DX                     ;Save the registers.
  461.                PUSH   BX
  462.                MOV    DX,BP                  ;Row/column.
  463.                XOR    BH,BH                  ;Page zero.
  464.                MOV    AH,2                   ;Set cursor postion
  465.                INT    10H                    ; via BIOS.
  466.                POP    BX
  467.                POP    DX                     ;Restore registers.
  468.                RET
  469.  
  470. ;-----------------------------------------------------------------------;
  471. ; This subroutine prints 19 line characters for the box top and bottom. ;
  472. ;-----------------------------------------------------------------------;
  473.  
  474. PRINT_LINE:    MOV    CX,19
  475.                MOV    DL,196
  476. NEXT_LINE:     CALL   PRINT_CHAR
  477.                LOOP   NEXT_LINE
  478.                RET
  479.  
  480. ;----------------------------------------------------------------------;
  481. ; This subroutine marks with an asterisk the appropriate bit settings. ;
  482. ;----------------------------------------------------------------------;
  483.  
  484. BITS:          MOV    CL,2                   ;Shift two bits to right.
  485.                ROR    BX,CL
  486.                MOV    DL,'*'
  487.                TEST   BX,3                   ;Are bits one and two off?
  488.                JZ     DISPLAY_BIT            ;If yes, display as is.
  489.                SUB    BP,100H                ;Else, move up one row.
  490.                TEST   BX,1                   ;Is bit one off?
  491.                JZ     DISPLAY_BIT            ;If yes, display.
  492.                SUB    BP,100H                ;Else, move up one row.
  493.                TEST   BX,2                   ;Is bit two off?
  494.                JZ     DISPLAY_BIT            ;If yes, display.
  495.                SUB    BP,100H                ;Else, move up one row.
  496. DISPLAY_BIT:   CALL   LOCATE_CHAR            ;Print the asterisk.
  497.                RET
  498.  
  499. ;------------------------------------------------------------------------;
  500. ; Text data is placed here so the Basic data listing is easier to enter. ;
  501. ;------------------------------------------------------------------------;
  502.  
  503. HEADING        DB  'PC Magazine System Checkout Utility$'
  504. SWITCHES       DB  'Switches$'
  505. TEXT:
  506. DB 13,10
  507. DB ' Bit 1                                Bits 5-6 initial video mode',13,10
  508. DB '    0 = No disk drive installed          11 = 80X25 monochrome',13,10
  509. DB '    1 = Disk drive installed             10 = 40X25 color',13,10
  510. DB ' Bit 2                                   01 = 80X25 color',13,10
  511. DB '    0 = No math coprocessor              00 = None',13,10
  512. DB '    1 = Math coprocessor installed    Bits 7-8 no. of disks (if bit 1 =1)'
  513. DB 13,10
  514. DB ' Bits 3-4 memory on system board         11 = 4',13,10
  515. DB '    XT/PC2        PC1       AT           10 = 3',13,10
  516. DB '    11 = 256K     64K    Does not        01 = 2',13,10
  517. DB '    10 = 192K     48K     apply          00 = 1',13,10
  518. DB '    01 = 128K     32K',13,10
  519. DB '    00 =  64K     16K$'
  520.  
  521. PARALLEL       DB ' Parallel port(s)$'
  522. SERIAL         DB ' Serial port(s)$'
  523. GAMEPORT       DB ' Game port$'
  524. SYSTEM_MEMORY  DB 'Main memory     $'
  525. FREE           DB 'Bytes free      $'
  526. EXTENDED       DB 'Extended memory $'
  527. EXPANDED       DB 'Expanded memory $'
  528. DOS            DB 'DOS  version    $'
  529. BIOS           DB 'BIOS version    $'
  530. EMM            DB 'EMM'
  531. IBM            DB 'IBM'
  532. EGA            DB '(EGA)$'
  533. NONE           DB 'None$'
  534.  
  535. CAP_COPR       DB 'COPR.'
  536. LOWER_COPR     DB 'Copr.'
  537. CAP_C          DB '(C)$'
  538. LOWER_C        DB '(c)'
  539. COPYR          DB 'Copyright'
  540.  
  541. CODE ENDS
  542. END  START
  543.