source: branches/simple/Devices/Console.pas

Last change on this file was 42, checked in by chronos, 10 months ago
  • Modified: Improved simple virtual machine.
File size: 1.9 KB
Line 
1unit Console;
2
3interface
4
5uses
6 Classes, SysUtils, Device, DeviceManager, Channel;
7
8type
9
10 { TConsole8 }
11
12 TConsole8 = class(TDevice8)
13 private
14 FOnRead: TReadEvent8;
15 FOnWrite: TWriteEvent8;
16 procedure Write8(Data: Byte);
17 function Read8: Byte;
18 public
19 function GetHandlerCount: Integer; override;
20 function GetHandler(Address: Integer): TChannel8; override;
21 property OnWrite: TWriteEvent8 read FOnWrite write FOnWrite;
22 property OnRead: TReadEvent8 read FOnRead write FOnRead;
23 end;
24
25 { TConsole16 }
26
27 TConsole16 = class(TDevice16)
28 private
29 FOnRead: TReadEvent8;
30 FOnWrite: TWriteEvent8;
31 procedure Write8(Data: Byte);
32 function Read8: Byte;
33 public
34 function GetHandlerCount: Integer; override;
35 function GetHandler(Address: Integer): TChannel16; override;
36 property OnWrite: TWriteEvent8 read FOnWrite write FOnWrite;
37 property OnRead: TReadEvent8 read FOnRead write FOnRead;
38 end;
39
40
41implementation
42
43{ TConsole8 }
44
45procedure TConsole8.Write8(Data: Byte);
46begin
47 if Assigned(FOnWrite) then FOnWrite(Data);
48end;
49
50function TConsole8.Read8: Byte;
51begin
52 if Assigned(FOnRead) then Result := FOnRead
53 else Result := 0;
54end;
55
56function TConsole8.GetHandlerCount: Integer;
57begin
58 Result := 1;
59end;
60
61function TConsole8.GetHandler(Address: Integer): TChannel8;
62begin
63 if Address = 0 then begin
64 Result := TChannel8.Create;
65 Result.Read8 := Read8;
66 Result.Write8 := Write8;
67 end;
68end;
69
70{ TConsole16 }
71
72procedure TConsole16.Write8(Data: Byte);
73begin
74 if Assigned(FOnWrite) then FOnWrite(Data);
75end;
76
77function TConsole16.Read8: Byte;
78begin
79 if Assigned(FOnRead) then Result := FOnRead
80 else Result := 0;
81end;
82
83function TConsole16.GetHandlerCount: Integer;
84begin
85 Result := 1;
86end;
87
88function TConsole16.GetHandler(Address: Integer): TChannel16;
89begin
90 if Address = 0 then begin
91 Result := TChannel16.Create;
92 Result.Read8 := Read8;
93 Result.Write8 := Write8;
94 end;
95end;
96
97end.
98
Note: See TracBrowser for help on using the repository browser.