(*# call(reg_saved => (si, di, ds, st1, st2), reg_param => (), near_call => off, ds_eq_ss => off) *) DEFINITION MODULE LowLevel; (* * REPERTOIRE * Release 1.6 * By Charles Bradford and Cole Brecheen * (c) Copyright 1985-1992 PMI * Green Bay, Wisconsin * All rights reserved * (414) 468-6040 * * $Header: D:/logfiles/defs/lowlevel.dev 1.5 10 Mar 1991 15:38:00 coleb $ * *) FROM SYSTEM IMPORT ADDRESS, BYTE, WORD; TYPE Address8086 = RECORD CASE : CARDINAL OF 1 : a : ADDRESS; | 2 : off, seg : CARDINAL; | 3 : x : POINTER TO CARDINAL; | 4 : b : POINTER TO CHAR; | 5 : p : POINTER TO ADDRESS; END; END; DataRegister = RECORD CASE : BOOLEAN OF FALSE : x : CARDINAL; | TRUE : l, h : CHAR; END; END; regpack = RECORD a, b, c, d : DataRegister; bp, si, di, ds, es : CARDINAL; flags : BITSET; END; PROCEDURE AddAddr( TheAdr: ADDRESS; bytes: CARDINAL): ADDRESS; PROCEDURE BitwiseAnd(val1, val2: WORD): WORD; PROCEDURE DecAddr( VAR TheAdr: ADDRESS; bytes: CARDINAL); PROCEDURE EMInterrupt( VAR TheRegs: regpack; Function: CARDINAL ); PROCEDURE Fill(dest : ADDRESS; size : CARDINAL; thefill : BYTE); PROCEDURE FillWord(dest : ADDRESS; size : CARDINAL; thefill : WORD); PROCEDURE FlaggedError(TheFlags : BITSET) : BOOLEAN; PROCEDURE InByte( port: CARDINAL; VAR value: BYTE ); PROCEDURE IncAddr( VAR TheAdr: ADDRESS; bytes: CARDINAL ); PROCEDURE Interrupt( InterruptNumber: CARDINAL; VAR TheRegs : regpack ); PROCEDURE InWord( port: CARDINAL; VAR value: WORD ); PROCEDURE Move(source, dest : ADDRESS; size : CARDINAL); PROCEDURE msdos(VAR TheRegs : regpack); PROCEDURE ofs(TheAddr : ADDRESS) : CARDINAL; PROCEDURE OutByte( port: CARDINAL; value: BYTE ); PROCEDURE OutWord( port: CARDINAL; value: WORD ); PROCEDURE PeekByte(segm, offs : CARDINAL) : CHAR; PROCEDURE PeekWord(segm, offs : CARDINAL) : CARDINAL; PROCEDURE PokeByte(TheByte : CHAR; segm, offs : CARDINAL); PROCEDURE PokeWord(TheWord : CARDINAL; segm, offs : CARDINAL); PROCEDURE Ptr( segment, offset: CARDINAL ): ADDRESS; PROCEDURE ScanEQ(size : INTEGER; lookfor : BYTE; start : ADDRESS) : INTEGER; PROCEDURE ScanNE(size : INTEGER; lookfor : BYTE; start : ADDRESS) : INTEGER; PROCEDURE seg(TheAddr : ADDRESS) : CARDINAL; PROCEDURE ShiftArrayLeft( TheAdr: ADDRESS; TheSize, distance: CARDINAL ); PROCEDURE ShiftArrayRight( TheAdr: ADDRESS; TheSize, distance: CARDINAL ); PROCEDURE ShiftLeft(VAR TheWord : WORD; HowMany : CARDINAL); PROCEDURE ShiftRight(VAR TheWord : WORD; HowMany : CARDINAL); PROCEDURE SubAddr( TheAdr: ADDRESS; bytes: CARDINAL): ADDRESS; PROCEDURE VideoInterrupt(VAR TheRegs : regpack); PROCEDURE WriteDMANoSnow( FromAddr, ToAddr: ADDRESS; size: CARDINAL); PROCEDURE Init(); END LowLevel.