| 1 | unit Console;
|
|---|
| 2 |
|
|---|
| 3 | interface
|
|---|
| 4 |
|
|---|
| 5 | uses
|
|---|
| 6 | Classes, SysUtils, Channel;
|
|---|
| 7 |
|
|---|
| 8 | type
|
|---|
| 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 |
|
|---|
| 36 | implementation
|
|---|
| 37 |
|
|---|
| 38 | { TConsole }
|
|---|
| 39 |
|
|---|
| 40 | procedure TConsole.DoWrite(Data: Byte);
|
|---|
| 41 | begin
|
|---|
| 42 | if Assigned(FOnWrite) then FOnWrite(Data);
|
|---|
| 43 | end;
|
|---|
| 44 |
|
|---|
| 45 | function TConsole.DoRead: Byte;
|
|---|
| 46 | begin
|
|---|
| 47 | if Assigned(FOnRead) then Result := FOnRead;
|
|---|
| 48 | end;
|
|---|
| 49 |
|
|---|
| 50 | function TConsole.Read8(Address: QWord): Byte;
|
|---|
| 51 | begin
|
|---|
| 52 | if Address = 0 then Result := DoRead;
|
|---|
| 53 | end;
|
|---|
| 54 |
|
|---|
| 55 | function TConsole.Read16(Address: QWord): Word;
|
|---|
| 56 | begin
|
|---|
| 57 | if Address = 0 then Result := DoRead;
|
|---|
| 58 | end;
|
|---|
| 59 |
|
|---|
| 60 | function TConsole.Read24(Address: QWord): DWord;
|
|---|
| 61 | begin
|
|---|
| 62 | if Address = 0 then Result := DoRead;
|
|---|
| 63 | end;
|
|---|
| 64 |
|
|---|
| 65 | function TConsole.Read32(Address: QWord): DWord;
|
|---|
| 66 | begin
|
|---|
| 67 | if Address = 0 then Result := DoRead;
|
|---|
| 68 | end;
|
|---|
| 69 |
|
|---|
| 70 | function TConsole.Read64(Address: QWord): QWord;
|
|---|
| 71 | begin
|
|---|
| 72 | if Address = 0 then Result := DoRead;
|
|---|
| 73 | end;
|
|---|
| 74 |
|
|---|
| 75 | procedure TConsole.Write8(Address: QWord; Data: Byte);
|
|---|
| 76 | begin
|
|---|
| 77 | if Address = 0 then DoWrite(Data);
|
|---|
| 78 | end;
|
|---|
| 79 |
|
|---|
| 80 | procedure TConsole.Write16(Address: QWord; Data: Word);
|
|---|
| 81 | begin
|
|---|
| 82 | if Address = 0 then DoWrite(Data);
|
|---|
| 83 | end;
|
|---|
| 84 |
|
|---|
| 85 | procedure TConsole.Write24(Address: QWord; Data: DWord);
|
|---|
| 86 | begin
|
|---|
| 87 | if Address = 0 then DoWrite(Data);
|
|---|
| 88 | end;
|
|---|
| 89 |
|
|---|
| 90 | procedure TConsole.Write32(Address: QWord; Data: DWord);
|
|---|
| 91 | begin
|
|---|
| 92 | if Address = 0 then DoWrite(Data);
|
|---|
| 93 | end;
|
|---|
| 94 |
|
|---|
| 95 | procedure TConsole.Write64(Address: QWord; Data: QWord);
|
|---|
| 96 | begin
|
|---|
| 97 | if Address = 0 then DoWrite(Data);
|
|---|
| 98 | end;
|
|---|
| 99 |
|
|---|
| 100 | procedure TConsole.SetChannel(Channel: TChannel);
|
|---|
| 101 | begin
|
|---|
| 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;
|
|---|
| 112 | end;
|
|---|
| 113 |
|
|---|
| 114 | end.
|
|---|
| 115 |
|
|---|