'=========================================================================== ' Subject: QBASIC INTERRUPT CALLS Date: 10-28-95 (22:32) ' Author: Tyler Barnes Code: QBasic ' Origin: FidoNet QUIK_BAS Echo Packet: DOS.ABC '=========================================================================== DEFINT A-Z DECLARE FUNCTION ASMCode$ () TYPE RegTypeX ax AS INTEGER BX AS INTEGER CX AS INTEGER dx AS INTEGER BP AS INTEGER SI AS INTEGER DI AS INTEGER Flags AS INTEGER DS AS INTEGER ES AS INTEGER END TYPE DIM SHARED Regs AS RegTypeX DECLARE SUB INTERRUPT (IntNum%, Regs AS RegTypeX) '** Simple demonstration on using INTERRUPT ** '** Requires a mouse driver ** CLS Regs.ax = 0 INTERRUPT &H33, Regs Regs.ax = &H20 INTERRUPT &H33, Regs Regs.ax = 1 INTERRUPT &H33, Regs DEFSNG A-Z FUNCTION ASMCode$ Buf$ = "UVWU^G=" + CHR$(255) + CHR$(255) + "uGG=" + CHR$(255) + CHR$(255) + "uGGFOWw" + CHR$(10) + " " + CHR$(255) + "w" + CHR$(255) + "wF" + CHR$(255) + "wn[!Un^^F" Buf$ = Buf$ + CHR$(255) + "vFGOWXGw" + CHR$(10) + " GGFGZ_^]" + CHR$(0) ASMCode$ = Buf$ END FUNCTION DEFINT A-Z SUB INTERRUPT (IntNum, Regs AS RegTypeX) STATIC STATIC FileNum, IntOffset, Loaded DIM Intcode AS STRING * 200 IF NOT Loaded THEN ' loaded will be 0 first time Intcode = ASMCode ' load routine and determine IntOffset = INSTR(Intcode$, CHR$(&HCD) + CHR$(&H21)) + 1 ' int # offset Loaded = -1 END IF SELECT CASE IntNum CASE &H25, &H26, IS > 255 ' ignore these interrupts CASE ELSE DEF SEG = VARSEG(Intcode) ' poke interrupt number into POKE VARPTR(Intcode) * 1& + IntOffset - 1, IntNum' code block CALL Absolute(Regs, VARPTR(Intcode$)) ' call routine END SELECT END SUB