source: branches/multi-width/Console.pas

Last change on this file was 54, checked in by chronos, 6 months ago
  • Added: Experimental multi-width CPU.
File size: 2.5 KB
Line 
1unit Console;
2
3interface
4
5uses
6 Classes, SysUtils, Channel;
7
8type
9 TWriteEvent = procedure (Data: Byte) of object;
10 TReadEvent = function : Byte of object;
11
12 { TConsole }
13
14 TConsole = class
15 private
16 FOnRead: TReadEvent;
17 FOnWrite: TWriteEvent;
18 procedure DoWrite(Data: Byte);
19 function DoRead: Byte;
20 public
21 function Read8(Address: QWord): Byte;
22 function Read16(Address: QWord): Word;
23 function Read24(Address: QWord): DWord;
24 function Read32(Address: QWord): DWord;
25 function Read64(Address: QWord): QWord;
26 procedure Write8(Address: QWord; Data: Byte);
27 procedure Write16(Address: QWord; Data: Word);
28 procedure Write24(Address: QWord; Data: DWord);
29 procedure Write32(Address: QWord; Data: DWord);
30 procedure Write64(Address: QWord; Data: QWord);
31 procedure SetChannel(Channel: TChannel);
32 property OnWrite: TWriteEvent read FOnWrite write FOnWrite;
33 property OnRead: TReadEvent read FOnRead write FOnRead;
34 end;
35
36implementation
37
38{ TConsole }
39
40procedure TConsole.DoWrite(Data: Byte);
41begin
42 if Assigned(FOnWrite) then FOnWrite(Data);
43end;
44
45function TConsole.DoRead: Byte;
46begin
47 if Assigned(FOnRead) then Result := FOnRead;
48end;
49
50function TConsole.Read8(Address: QWord): Byte;
51begin
52 if Address = 0 then Result := DoRead;
53end;
54
55function TConsole.Read16(Address: QWord): Word;
56begin
57 if Address = 0 then Result := DoRead;
58end;
59
60function TConsole.Read24(Address: QWord): DWord;
61begin
62 if Address = 0 then Result := DoRead;
63end;
64
65function TConsole.Read32(Address: QWord): DWord;
66begin
67 if Address = 0 then Result := DoRead;
68end;
69
70function TConsole.Read64(Address: QWord): QWord;
71begin
72 if Address = 0 then Result := DoRead;
73end;
74
75procedure TConsole.Write8(Address: QWord; Data: Byte);
76begin
77 if Address = 0 then DoWrite(Data);
78end;
79
80procedure TConsole.Write16(Address: QWord; Data: Word);
81begin
82 if Address = 0 then DoWrite(Data);
83end;
84
85procedure TConsole.Write24(Address: QWord; Data: DWord);
86begin
87 if Address = 0 then DoWrite(Data);
88end;
89
90procedure TConsole.Write32(Address: QWord; Data: DWord);
91begin
92 if Address = 0 then DoWrite(Data);
93end;
94
95procedure TConsole.Write64(Address: QWord; Data: QWord);
96begin
97 if Address = 0 then DoWrite(Data);
98end;
99
100procedure TConsole.SetChannel(Channel: TChannel);
101begin
102 Channel.Read8 := Read8;
103 Channel.Read16 := Read16;
104 Channel.Read24 := Read24;
105 Channel.Read32 := Read32;
106 Channel.Read64 := Read64;
107 Channel.Write8 := Write8;
108 Channel.Write16 := Write16;
109 Channel.Write24 := Write24;
110 Channel.Write32 := Write32;
111 Channel.Write64 := Write64;
112end;
113
114end.
115
Note: See TracBrowser for help on using the repository browser.