source: branches/multi-width/Channel.pas

Last change on this file was 54, checked in by chronos, 6 months ago
  • Added: Experimental multi-width CPU.
File size: 1.8 KB
Line 
1unit Channel;
2
3interface
4
5uses
6 Classes, SysUtils;
7
8type
9 TBitWidth = (bwNone, bw8, bw16, bw24, bw32, bw40, bw48, bw56, bw64,
10 bw128);
11
12 { TChannel }
13
14 TChannel = class
15 type
16 TRead8 = function (Address: QWord): Byte of object;
17 TRead16 = function (Address: QWord): Word of object;
18 TRead24 = function (Address: QWord): DWord of object;
19 TRead32 = function (Address: QWord): DWord of object;
20 TRead64 = function (Address: QWord): QWord of object;
21 TWrite8 = procedure (Address: QWord; Data: Byte) of object;
22 TWrite16 = procedure (Address: QWord; Data: Word) of object;
23 TWrite24 = procedure (Address: QWord; Data: DWord) of object;
24 TWrite32 = procedure (Address: QWord; Data: DWord) of object;
25 TWrite64 = procedure (Address: QWord; Data: QWord) of object;
26 var
27 Read8: TRead8;
28 Read16: TRead16;
29 Read24: TRead24;
30 Read32: TRead32;
31 Read64: TRead64;
32 Write8: TWrite8;
33 Write16: TWrite16;
34 Write24: TWrite24;
35 Write32: TWrite32;
36 Write64: TWrite64;
37 procedure Write(Width: TBitWidth; Address: QWord; Data: QWord);
38 procedure Read(Width: TBitWidth; Address: QWord; var Data: QWord);
39 end;
40
41
42implementation
43
44{ TChannel }
45
46procedure TChannel.Write(Width: TBitWidth; Address: QWord; Data: QWord);
47begin
48 case Width of
49 bw8: Write8(Address, Data);
50 bw16: Write16(Address, Data);
51 bw24: Write24(Address, Data);
52 bw32: Write32(Address, Data);
53 bw64: Write64(Address, Data);
54 end;
55end;
56
57procedure TChannel.Read(Width: TBitWidth; Address: QWord; var Data: QWord);
58begin
59 case Width of
60 bw8: PByte(@Data)^ := Read8(Address);
61 bw16: PWord(@Data)^ := Read16(Address);
62 bw24: PWord(@Data)^ := Read24(Address);
63 bw32: PDWord(@Data)^ := Read32(Address);
64 bw64: PQWord(@Data)^ := Read64(Address);
65 end;
66end;
67
68end.
69
Note: See TracBrowser for help on using the repository browser.