Listing: 1 (*# call(reg_saved => (si, di, ds, st1, st2), 2 reg_param => (), 3 near_call => off, 4 ds_eq_ss => off) *) 5 6 DEFINITION MODULE LowLevel; 7 (* 8 * REPERTOIRE 9 * Release 1.6 10 * By Charles Bradford and Cole Brecheen 11 * (c) Copyright 1985-1992 PMI 12 * Green Bay, Wisconsin 13 * All rights reserved 14 * (414) 468-6040 15 * 16 * $Header: D:/logfiles/defs/lowlevel.dev 1.5 10 Mar 1991 15:38:00 coleb $ 17 * 18 *) 19 20 21 22 FROM SYSTEM IMPORT ADDRESS, BYTE, WORD; 23 24 TYPE 25 Address8086 = 26 RECORD 27 CASE : CARDINAL OF ***** ^ not supported yet ***** ^ 'POINTER' expected 28 1 : 29 a : ADDRESS; 30 | 2 : 31 off, seg : CARDINAL; 32 | 3 : 33 x : POINTER TO CARDINAL; 34 | 4 : 35 b : POINTER TO CHAR; 36 | 5 : 37 p : POINTER TO ADDRESS; 38 END; 39 END; 40 41 DataRegister = 42 RECORD 43 CASE : BOOLEAN OF 44 FALSE : 45 x : CARDINAL; 46 | TRUE : 47 l, h : CHAR; 48 END; 49 END; 50 51 regpack = 52 RECORD 53 a, b, c, d : DataRegister; 54 bp, si, di, ds, es : CARDINAL; 55 flags : BITSET; 56 END; 57 58 PROCEDURE AddAddr( TheAdr: ADDRESS; bytes: 59 CARDINAL): ADDRESS; 60 61 PROCEDURE BitwiseAnd(val1, val2: WORD): WORD; 62 63 PROCEDURE DecAddr( VAR TheAdr: ADDRESS; bytes: 64 CARDINAL); 65 66 PROCEDURE EMInterrupt( VAR TheRegs: regpack; 67 Function: CARDINAL ); 68 69 PROCEDURE Fill(dest : ADDRESS; size : CARDINAL; 70 thefill : BYTE); 71 72 PROCEDURE FillWord(dest : ADDRESS; size : 73 CARDINAL; thefill : WORD); 74 75 PROCEDURE FlaggedError(TheFlags : BITSET) : 76 BOOLEAN; 77 78 PROCEDURE InByte( port: CARDINAL; VAR value: 79 BYTE ); 80 81 PROCEDURE IncAddr( VAR TheAdr: ADDRESS; bytes: 82 CARDINAL ); 83 84 PROCEDURE Interrupt( InterruptNumber: CARDINAL; 85 VAR TheRegs : regpack ); 86 87 PROCEDURE InWord( port: CARDINAL; VAR value: 88 WORD ); 89 90 PROCEDURE Move(source, dest : ADDRESS; size : 91 CARDINAL); 92 93 PROCEDURE msdos(VAR TheRegs : regpack); 94 95 PROCEDURE ofs(TheAddr : ADDRESS) : CARDINAL; 96 97 PROCEDURE OutByte( port: CARDINAL; value: BYTE 98 ); 99 100 PROCEDURE OutWord( port: CARDINAL; value: WORD 101 ); 102 103 PROCEDURE PeekByte(segm, offs : CARDINAL) : 104 CHAR; 105 106 PROCEDURE PeekWord(segm, offs : CARDINAL) : 107 CARDINAL; 108 109 PROCEDURE PokeByte(TheByte : CHAR; segm, offs : 110 CARDINAL); 111 112 PROCEDURE PokeWord(TheWord : CARDINAL; segm, 113 offs : CARDINAL); 114 115 PROCEDURE Ptr( segment, offset: CARDINAL ): 116 ADDRESS; 117 118 PROCEDURE ScanEQ(size : INTEGER; lookfor : BYTE; 119 start : ADDRESS) : INTEGER; 120 121 PROCEDURE ScanNE(size : INTEGER; lookfor : BYTE; 122 start : ADDRESS) : INTEGER; 123 124 PROCEDURE seg(TheAddr : ADDRESS) : CARDINAL; 125 126 PROCEDURE ShiftArrayLeft( TheAdr: ADDRESS; 127 TheSize, distance: CARDINAL ); 128 129 PROCEDURE ShiftArrayRight( TheAdr: ADDRESS; 130 TheSize, distance: CARDINAL ); 131 132 PROCEDURE ShiftLeft(VAR TheWord : WORD; HowMany 133 : CARDINAL); 134 135 PROCEDURE ShiftRight(VAR TheWord : WORD; HowMany 136 : CARDINAL); 137 138 PROCEDURE SubAddr( TheAdr: ADDRESS; bytes: 139 CARDINAL): ADDRESS; 140 141 PROCEDURE VideoInterrupt(VAR TheRegs : regpack); 142 143 PROCEDURE WriteDMANoSnow( FromAddr, ToAddr: 144 ADDRESS; size: CARDINAL); 145 146 PROCEDURE Init(); 147 148 END LowLevel. 2 errors