Changeset 42 for branches/simple/Devices/Device.pas
- Timestamp:
- Sep 8, 2023, 11:20:27 PM (9 months ago)
- Location:
- branches/simple/Devices
- Files:
-
- 1 added
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/simple/Devices/Device.pas
r41 r42 4 4 5 5 uses 6 Classes, SysUtils, DeviceMapper;6 Classes, SysUtils, Channel, Generics.Collections, Forms; 7 7 8 8 type 9 TDeviceClass = (dcNone, dcKeyboard, dcMouse, dcStorage, dcScreen, dcConsole, 10 dcTimer); 11 TDeviceClassSet = set of TDeviceClass; 12 9 13 { TDevice8 } 10 14 11 15 TDevice8 = class 12 procedure RegisterMapper8(Mapper: TDeviceMapper8); virtual; abstract; 16 BaseAddress: Byte; 17 procedure SetDataBus(Channel: TAddressableChannel8); virtual; 18 function GetHandlerCount: Integer; virtual; 19 function GetHandler(Address: Integer): TChannel8; virtual; 13 20 end; 14 21 … … 16 23 17 24 TDevice16 = class 18 procedure RegisterMapper8(Mapper: TDeviceMapper8); virtual; abstract; 19 procedure RegisterMapper16(Mapper: TDeviceMapper16); virtual; abstract; 25 BaseAddress: Word; 26 procedure SetDataBus(Channel: TAddressableChannel16); virtual; 27 function GetHandlerCount: Integer; virtual; 28 function GetHandler(Address: Integer): TChannel16; virtual; 20 29 end; 30 31 { TDevice32 } 32 33 TDevice32 = class 34 BaseAddress: DWord; 35 procedure SetDataBus(Channel: TAddressableChannel32); virtual; 36 function GetHandlerCount: Integer; virtual; 37 function GetHandler(Address: Integer): TChannel32; virtual; 38 end; 39 40 { TDevice64 } 41 42 TDevice64 = class 43 BaseAddress: QWord; 44 procedure SetDataBus(Channel: TAddressableChannel64); virtual; 45 function GetHandlerCount: Integer; virtual; 46 function GetHandler(Address: Integer): TChannel64; virtual; 47 end; 48 49 TDevice = class; 50 51 { TFormDevice } 52 53 TFormDevice = class(TForm) 54 protected 55 function GetDevice: TDevice; virtual; 56 procedure SetDevice(AValue: TDevice); virtual; 57 public 58 property Device: TDevice read GetDevice write SetDevice; 59 end; 60 61 TFormDeviceClass = class of TFormDevice; 62 63 { TDevice } 64 65 TDevice = class 66 Name: string; 67 DeviceClass: TDeviceClass; 68 Form: TFormDevice; 69 end; 70 71 { TDevices } 72 73 TDevices = class(TObjectList<TDevice>) 74 function GetDevicesCountByClass(DeviceClass: TDeviceClass): Integer; 75 function GetDevicesByClass(DeviceClass: TDeviceClass): TDevices; 76 function GetClasses: TDeviceClassSet; 77 end; 78 79 const 80 DeviceClassText: array[TDeviceClass] of string = ('None', 'Keyboard', 'Mouse', 'Storage', 'Screen', 'Console', 'Timer'); 21 81 22 82 23 83 implementation 24 84 85 { TFormDevice } 86 87 function TFormDevice.GetDevice: TDevice; 88 begin 89 Result := nil; 90 end; 91 92 procedure TFormDevice.SetDevice(AValue: TDevice); 93 begin 94 end; 95 96 { TDevices } 97 98 function TDevices.GetDevicesCountByClass(DeviceClass: TDeviceClass): Integer; 99 var 100 I: Integer; 101 begin 102 Result := 0; 103 for I := 0 to Count - 1 do 104 if Items[I].DeviceClass = DeviceClass then Inc(Result); 105 end; 106 107 function TDevices.GetDevicesByClass(DeviceClass: TDeviceClass): TDevices; 108 var 109 I: Integer; 110 begin 111 Result := TDevices.Create(False); 112 for I := 0 to Count - 1 do 113 if Items[I].DeviceClass = DeviceClass then Result.Add(Items[I]) 114 end; 115 116 function TDevices.GetClasses: TDeviceClassSet; 117 var 118 I: Integer; 119 begin 120 Result := []; 121 for I := 0 to Count - 1 do 122 if not (Items[I].DeviceClass in Result) then 123 Result := Result + [Items[I].DeviceClass]; 124 end; 125 126 { TDevice32 } 127 128 procedure TDevice32.SetDataBus(Channel: TAddressableChannel32); 129 begin 130 end; 131 132 function TDevice32.GetHandlerCount: Integer; 133 begin 134 Result := 0; 135 end; 136 137 function TDevice32.GetHandler(Address: Integer): TChannel32; 138 begin 139 end; 140 141 { TDevice64 } 142 143 procedure TDevice64.SetDataBus(Channel: TAddressableChannel64); 144 begin 145 end; 146 147 function TDevice64.GetHandlerCount: Integer; 148 begin 149 Result := 0; 150 end; 151 152 function TDevice64.GetHandler(Address: Integer): TChannel64; 153 begin 154 end; 155 156 { TDevice8 } 157 158 procedure TDevice8.SetDataBus(Channel: TAddressableChannel8); 159 begin 160 end; 161 162 function TDevice8.GetHandlerCount: Integer; 163 begin 164 Result := 0; 165 end; 166 167 function TDevice8.GetHandler(Address: Integer): TChannel8; 168 begin 169 end; 170 171 { TDevice16 } 172 173 procedure TDevice16.SetDataBus(Channel: TAddressableChannel16); 174 begin 175 end; 176 177 function TDevice16.GetHandlerCount: Integer; 178 begin 179 Result := 0; 180 end; 181 182 function TDevice16.GetHandler(Address: Integer): TChannel16; 183 begin 184 end; 185 25 186 end. 26 187
Note:
See TracChangeset
for help on using the changeset viewer.