Uses Dos; Const Code: Array[0..79] Of Byte = ( $89,$e5,$50,$53,$06,$51,$fb,$f4,$cf,$90,$90,$90,$90,$90,$90,$90, $fb,$f4,$89,$ec,$cf,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90, $0e,$e8,$02,$00,$89,$ec,$cf,$90,$90,$90,$90,$90,$90,$90,$90,$90, $cd,$01,$cd,$03,$cd,$08,$cc,$9d,$89,$ec,$cf,$90,$90,$90,$90,$90, $9c,$fa,$89,$ec,$cf,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90 ); Const FV: Array[0..3] Of Word = ($7002,$7102,$7202,$7302); Var Buffer: Array[0..40000] Of Char; Var Index: Word; Var I: Word; Procedure BufWrite(S: String); Var I: Byte; Begin For I:=1 To Length(S) Do Begin Buffer[Index]:=S[I]; Inc(Index); End; End; Procedure Hex(w : Word); Const HexKarakterer : Array [0..$F] Of Char = '0123456789ABCDEF'; Begin BufWrite(HexKarakterer[Hi(w) Shr 4]+ HexKarakterer[Hi(w) And $F]+ HexKarakterer[Lo(w) Shr 4]+ HexKarakterer[Lo(w) And $F]+ ' '); End; Procedure MyInt1(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS, ES, BP: word); Interrupt; Begin Hex(IP); Hex(MemW[CS:IP]); Hex(SPtr); Hex(Flags); BufWrite('Trace'#13#10); End; Procedure MyInt3(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS, ES, BP: word); Interrupt; Begin Hex(IP); Hex(MemW[CS:IP]); Hex(SPtr); Hex(Flags); BufWrite('Break'#13#10); End; Procedure MyInt8(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS, ES, BP: word); Interrupt; Begin Port[$20]:=$20; Hex(IP); Hex(MemW[CS:IP]); Hex(SPtr); Hex(Flags); BufWrite('Timer'#13#10); End; Var S01,S03,S08,S18: Pointer; Var X,Y,Z: Byte; Var Regs: Registers; Var T: Byte; Begin WriteLn('Waiting'); Index := 0; T:=Mem[$40:$6C]; Repeat InLine($F4); Until Byte(Mem[$40:$6C]-T) > 42; WriteLn('Runing tests'); GetIntVec($01,S01); GetIntVec($03,S03); GetIntVec($08,S08); GetIntVec($18,S18); SetIntVec($01,@MyInt1); SetIntVec($03,@MyInt3); SetIntVec($08,@MyInt8); SetIntVec($18,@Code); For X:=0 To 3 Do For Y := 0 To 3 Do For Z := 1 To 4 Do Begin BufWrite('Test'#13#10); Regs.AX:=FV[X]; Regs.BX:=FV[Y]; Regs.CX:=Ofs(Code[Z*16]); Regs.ES:=Seg(Code); Regs.Flags:=$7202; Intr($18,Regs); End; SetIntVec($01,S01); SetIntVec($03,S03); SetIntVec($08,S08); SetIntVec($18,S18); WriteLn('Printing results'); For I:=0 To Index-1 Do Write(Buffer[I]); WriteLn('All done.'); End.