source: branches/simple/Channel.pas

Last change on this file was 42, checked in by chronos, 9 months ago
  • Modified: Improved simple virtual machine.
File size: 4.2 KB
Line 
1unit Channel;
2
3interface
4
5uses
6 Classes, SysUtils;
7
8type
9 TBitWidth = (bw8, bw16, bw32, bw64);
10
11 TRead8 = function: Byte of object;
12 TRead16 = function: Word of object;
13 TRead32 = function: DWord of object;
14 TRead64 = function: QWord of object;
15 TWrite8 = procedure(Data: Byte) of object;
16 TWrite16 = procedure(Data: Word) of object;
17 TWrite32 = procedure(Data: DWord) of object;
18 TWrite64 = procedure(Data: QWord) of object;
19
20 TChannel8 = class
21 Read8: TRead8;
22 Write8: TWrite8;
23 end;
24
25 { TChannel16 }
26
27 TChannel16 = class
28 Read8: TRead8;
29 Read16: TRead16;
30 Write8: TWrite8;
31 Write16: TWrite16;
32 end;
33
34 TChannel32 = class
35 Read8: TRead8;
36 Read16: TRead16;
37 Read32: TRead32;
38 Write8: TWrite8;
39 Write16: TWrite16;
40 Write32: TWrite32;
41 end;
42
43 TChannel64 = class
44 Read8: TRead8;
45 Read16: TRead16;
46 Read32: TRead32;
47 Read64: TRead64;
48 Write8: TWrite8;
49 Write16: TWrite16;
50 Write32: TWrite32;
51 Write64: TWrite64;
52 end;
53
54 TAddressableChannelMulti = class
55 function ReadA8D8(Address: Byte): Byte; virtual; abstract;
56 function ReadA16D8(Address: Word): Byte; virtual; abstract;
57 function ReadA16D16(Address: Word): Word; virtual; abstract;
58 function ReadA32D8(Address: LongWord): Byte; virtual; abstract;
59 function ReadA32D16(Address: LongWord): Word; virtual; abstract;
60 function ReadA32D32(Address: LongWord): LongWord; virtual; abstract;
61 function ReadA64D8(Address: QWord): Byte; virtual; abstract;
62 function ReadA64D16(Address: QWord): Word; virtual; abstract;
63 function ReadA64D32(Address: QWord): LongWord; virtual; abstract;
64 function ReadA64D64(Address: QWord): QWord; virtual; abstract;
65 procedure WriteA8D8(Address: Byte; Data: Byte); virtual; abstract;
66 procedure WriteA16D8(Address: Word; Data: Byte); virtual; abstract;
67 procedure WriteA16D16(Address: Word; Data: Word); virtual; abstract;
68 procedure WriteA32D8(Address: LongWord; Data: Byte); virtual; abstract;
69 procedure WriteA32D16(Address: LongWord; Data: Word); virtual; abstract;
70 procedure WriteA32D32(Address: LongWord; Data: LongWord); virtual; abstract;
71 procedure WriteA64D8(Address: QWord; Data: Byte); virtual; abstract;
72 procedure WriteA64D16(Address: QWord; Data: Word); virtual; abstract;
73 procedure WriteA64D32(Address: QWord; Data: LongWord); virtual; abstract;
74 procedure WriteA64D64(Address: QWord; Data: QWord); virtual; abstract;
75 end;
76
77 TAddressableChannel8 = class
78 type
79 TRead8 = function (Address: Byte): Byte of object;
80 TWrite8 = procedure (Address: Byte; Data: Byte) of object;
81 var
82 Read8: TRead8;
83 Write8: TWrite8;
84 end;
85
86 TAddressableChannel16 = class
87 type
88 TRead8 = function (Address: Word): Byte of object;
89 TRead16 = function (Address: Word): Word of object;
90 TWrite8 = procedure (Address: Word; Data: Byte) of object;
91 TWrite16 = procedure (Address: Word; Data: Word) of object;
92 var
93 Read8: TRead8;
94 Read16: TRead16;
95 Write8: TWrite8;
96 Write16: TWrite16;
97 end;
98
99 TAddressableChannel32 = class
100 function Read8(Address: LongWord): Byte; virtual; abstract;
101 function Read16(Address: LongWord): Word; virtual; abstract;
102 function Read32(Address: LongWord): LongWord; virtual; abstract;
103 procedure Write8(Address: LongWord; Data: Byte); virtual; abstract;
104 procedure Write16(Address: LongWord; Data: Word); virtual; abstract;
105 procedure Write32(Address: LongWord; Data: LongWord); virtual; abstract;
106 end;
107
108 TAddressableChannel64 = class
109 function Read8(Address: QWord): Byte; virtual; abstract;
110 function Read16(Address: QWord): Word; virtual; abstract;
111 function Read32(Address: QWord): LongWord; virtual; abstract;
112 function Read64(Address: QWord): DWord; virtual; abstract;
113 procedure Write8(Address: QWord; Data: Byte); virtual; abstract;
114 procedure Write16(Address: QWord; Data: Word); virtual; abstract;
115 procedure Write32(Address: QWord; Data: LongWord); virtual; abstract;
116 procedure Write64(Address: QWord; Data: QWord); virtual; abstract;
117 end;
118
119 TAddressableChannel = class
120 BitWidth: TBitWidth;
121 DataBus8: TAddressableChannel8;
122 DataBus16: TAddressableChannel16;
123 DataBus32: TAddressableChannel32;
124 DataBus64: TAddressableChannel64;
125 end;
126
127implementation
128
129end.
130
Note: See TracBrowser for help on using the repository browser.