Changeset 42 for branches/simple/Devices/Screen.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/Screen.pas
r41 r42 4 4 5 5 uses 6 Classes, SysUtils, Device, DeviceMa pper, Memory;6 Classes, SysUtils, Device, DeviceManager, Memory, Channel; 7 7 8 8 type … … 31 31 constructor Create; 32 32 destructor Destroy; override; 33 procedure RegisterMapper8(Mapper: TDeviceMapper8); override; 33 function GetHandlerCount: Integer; override; 34 function GetHandler(Address: Integer): TChannel8; override; 34 35 property OnChange: TNotifyEvent read FOnChange write FOnChange; 35 36 end; … … 59 60 constructor Create; 60 61 destructor Destroy; override; 61 procedure RegisterMapper8(Mapper: TDeviceMapper8); override;62 procedure RegisterMapper16(Mapper: TDeviceMapper16); override;62 function GetHandlerCount: Integer; override; 63 function GetHandler(Address: Integer): TChannel16; override; 63 64 property OnChange: TNotifyEvent read FOnChange write FOnChange; 64 65 end; 65 66 67 TScreen = class(TDevice) 68 BitWidth: TBitWidth; 69 Screen8: TScreen8; 70 Screen16: TScreen16; 71 constructor Create(BitWidth: TBitWidth; Screen8: TScreen8; Screen16: TScreen16); 72 end; 73 66 74 67 75 implementation 76 77 { TScreen } 78 79 constructor TScreen.Create(BitWidth: TBitWidth; Screen8: TScreen8; 80 Screen16: TScreen16); 81 begin 82 Self.BitWidth := BitWidth; 83 Self.Screen8 := Screen8; 84 Self.Screen16 := Screen16; 85 end; 68 86 69 87 { TScreen16 } … … 149 167 end; 150 168 151 procedure TScreen16.RegisterMapper8(Mapper: TDeviceMapper8); 152 begin 153 end; 154 155 procedure TScreen16.RegisterMapper16(Mapper: TDeviceMapper16); 156 begin 157 Mapper.RegisterReadHandler(ReadData8, ReadData16); 158 Mapper.RegisterWriteHandler(WriteData8, WriteData16); 159 Mapper.RegisterReadHandler(nil, ReadAddr16); 160 Mapper.RegisterWriteHandler(nil, WriteAddr16); 161 Mapper.RegisterReadHandler(nil, ReadWidth16); 162 Mapper.RegisterWriteHandler(nil, WriteWidth16); 163 Mapper.RegisterReadHandler(nil, ReadHeight16); 164 Mapper.RegisterWriteHandler(nil, WriteHeight16); 169 function TScreen16.GetHandlerCount: Integer; 170 begin 171 Result := 4; 172 end; 173 174 function TScreen16.GetHandler(Address: Integer): TChannel16; 175 begin 176 if Address = 0 then begin 177 Result := TChannel16.Create; 178 Result.Read16 := ReadData16; 179 Result.Write16 := WriteData16; 180 end else 181 if Address = 1 then begin 182 Result := TChannel16.Create; 183 Result.Read16 := ReadAddr16; 184 Result.Write16 := WriteAddr16; 185 end else 186 if Address = 2 then begin 187 Result := TChannel16.Create; 188 Result.Read16 := ReadWidth16; 189 Result.Write16 := WriteWidth16; 190 end else 191 if Address = 3 then begin 192 Result := TChannel16.Create; 193 Result.Read16 := ReadHeight16; 194 Result.Write16 := WriteHeight16; 195 end; 165 196 end; 166 197 … … 236 267 end; 237 268 238 procedure TScreen8.RegisterMapper8(Mapper: TDeviceMapper8); 239 begin 240 Mapper.RegisterReadHandler(ReadData8); 241 Mapper.RegisterWriteHandler(WriteData8); 242 Mapper.RegisterReadHandler(ReadAddr8); 243 Mapper.RegisterWriteHandler(WriteAddr8); 244 Mapper.RegisterReadHandler(ReadWidth8); 245 Mapper.RegisterWriteHandler(WriteWidth8); 246 Mapper.RegisterReadHandler(ReadHeight8); 247 Mapper.RegisterWriteHandler(WriteHeight8); 269 function TScreen8.GetHandlerCount: Integer; 270 begin 271 Result := 4; 272 end; 273 274 function TScreen8.GetHandler(Address: Integer): TChannel8; 275 begin 276 if Address = 0 then begin 277 Result := TChannel8.Create; 278 Result.Read8 := ReadData8; 279 Result.Write8 := WriteData8; 280 end else 281 if Address = 1 then begin 282 Result := TChannel8.Create; 283 Result.Read8 := ReadAddr8; 284 Result.Write8 := WriteAddr8; 285 end else 286 if Address = 2 then begin 287 Result := TChannel8.Create; 288 Result.Read8 := ReadWidth8; 289 Result.Write8 := WriteWidth8; 290 end else 291 if Address = 3 then begin 292 Result := TChannel8.Create; 293 Result.Read8 := ReadHeight8; 294 Result.Write8 := WriteHeight8; 295 end; 248 296 end; 249 297
Note:
See TracChangeset
for help on using the changeset viewer.