'=========================================================================== ' Subject: CHECK FOR EMS Date: Unknown Date ' Author: James Vahn Code: QB, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: MEMORY.ABC '=========================================================================== 'test4ems.bas - James Vahn 1:30854/20@fidonet 'written for QB 4.5 Load QB/L - does not work with Qbasic. '$INCLUDE: 'qb.bi' 'This checks out your EMS driver & hardware. TYPE EmsHardware EmmRawPageSize AS INTEGER NumberAlternateRegisterSets AS INTEGER SizeMappingContextSaveArea AS INTEGER NumberDMARegisterSets AS INTEGER DMAOperationType AS INTEGER END TYPE DIM Regs AS RegTypeX DIM EmsH AS EmsHardware Regs.ax = &H3567 ' locate code for INT 67, EMS driver. CALL INTERRUPTX(&H21, Regs, Regs) DEF SEG = Regs.es FOR t = &HA TO &H11 ' search the driver header for text EMS$ = EMS$ + CHR$(PEEK(t)) NEXT IF EMS$ = "EMMQXXX0" THEN EMS$ = "EMMXXXX0" PRINT "DR DOS EMM386 detected." PRINT "Would you like it fixed (y/n)?" WHILE A$ = "" A$ = INKEY$ WEND IF A$ = "y" THEN POKE &HA + 3, ASC("X") ' fix(?) the driver handle. END IF END IF DEF SEG IF EMS$ <> "EMMXXXX0" THEN PRINT "No EMS installed": END PRINT "EMS Driver found at "; HEX$(Regs.es); ":"; HEX$(Regs.bx) Regs.ax = &H5900 ' subfunction 59h Regs.es = VARSEG(EmsH) ' point ES:DI to the array EmsH Regs.di = VARPTR(EmsH) ' CALL INTERRUPTX(&H67, Regs, Regs) PRINT "Emm Raw Page Size"; EmsH.EmmRawPageSize PRINT "Number Alternate Register Sets"; EmsH.NumberAlternateRegisterSets PRINT "Size Mapping Context Save Area"; EmsH.SizeMappingContextSaveArea PRINT "Number DMA Register Sets"; EmsH.NumberDMARegisterSets PRINT "DMA Operation Type"; EmsH.DMAOperationType Regs.ax = &H4200 CALL INTERRUPTX(&H67, Regs, Regs) PRINT "Total EMS memory"; Regs.dx * 16; CHR$(29) + "k" PRINT "Total EMS memory available"; Regs.bx * 16; CHR$(29) + "k" PRINT IF EmsH.NumberAlternateRegisterSets = 0 THEN PRINT "Hardware alternate page mapping not supported." PRINT " Bad news for multitasking." ELSE PRINT "Suitable for multitasking." END IF