1 | unit Channel;
|
---|
2 |
|
---|
3 | interface
|
---|
4 |
|
---|
5 | uses
|
---|
6 | Classes, SysUtils;
|
---|
7 |
|
---|
8 | type
|
---|
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 |
|
---|
127 | implementation
|
---|
128 |
|
---|
129 | end.
|
---|
130 |
|
---|