Changeset 42 for branches/simple/Memory.pas
- Timestamp:
- Sep 8, 2023, 11:20:27 PM (8 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/simple/Memory.pas
r40 r42 4 4 5 5 uses 6 Classes, SysUtils, DataBus;6 Classes, SysUtils, Channel, Device; 7 7 8 8 type 9 10 { TMemoryMulti } 11 12 TMemoryMulti = class 13 private 14 Memory: array of Byte; 15 procedure SetSize(Value: QWord); 16 function GetSize: QWord; 17 public 18 Position: QWord; 19 property Size: QWord read GetSize write SetSize; 20 end; 21 9 22 { TMemory8 } 10 23 11 TMemory8 = class(TD ataBus8)24 TMemory8 = class(TDevice8) 12 25 private 13 26 Memory: array of Byte; … … 18 31 procedure WritePos8(Data: Byte); 19 32 function ReadPos8: Byte; 20 procedure Write8(Address: Byte; Data: Byte); override; 21 function Read8(Address: Byte): Byte; override; 33 procedure Write8(Address: Byte; Data: Byte); 34 function Read8(Address: Byte): Byte; 35 procedure SetDataBus(Channel: TAddressableChannel8); override; 22 36 property Size: Byte read GetSize write SetSize; 23 37 end; … … 25 39 { TMemory16 } 26 40 27 TMemory16 = class(TD ataBus16)41 TMemory16 = class(TDevice16) 28 42 private 29 43 Memory: array of Byte; … … 36 50 procedure WritePos8(Data: Byte); 37 51 procedure WritePos16(Data: Word); 38 function Read8(Address: Word): Byte; override; 39 function Read16(Address: Word): Word; override; 40 procedure Write8(Address: Word; Data: Byte); override; 41 procedure Write16(Address: Word; Data: Word); override; 52 function Read8(Address: Word): Byte; 53 function Read16(Address: Word): Word; 54 procedure Write8(Address: Word; Data: Byte); 55 procedure Write16(Address: Word; Data: Word); 56 procedure SetDataBus(Channel: TAddressableChannel16); override; 42 57 property Size: Word read GetSize write SetSize; 43 58 end; 44 59 60 { TMemory64 } 61 62 TMemory64 = class(TDevice64) 63 private 64 Memory: array of Byte; 65 procedure SetSize(Value: QWord); 66 function GetSize: QWord; 67 public 68 Position: QWord; 69 function ReadPos8: Byte; 70 function ReadPos16: Word; 71 function ReadPos32: DWord; 72 function ReadPos64: QWord; 73 procedure WritePos8(Data: Byte); 74 procedure WritePos16(Data: Word); 75 procedure WritePos32(Data: Word); 76 procedure WritePos64(Data: Word); 77 function Read8(Address: QWord): Byte; 78 function Read16(Address: QWord): Word; 79 function Read32(Address: QWord): DWord; 80 function Read64(Address: QWord): QWord; 81 procedure Write8(Address: QWord; Data: Byte); 82 procedure Write16(Address: QWord; Data: Word); 83 procedure Write32(Address: QWord; Data: DWord); 84 procedure Write64(Address: QWord; Data: QWord); 85 procedure SetDataBus(Channel: TAddressableChannel64); override; 86 property Size: QWord read GetSize write SetSize; 87 end; 88 89 { TMemory } 90 91 TMemory = class(TDevice) 92 BitWidth: TBitWidth; 93 Memory8: TMemory8; 94 Memory16: TMemory16; 95 end; 96 45 97 46 98 implementation 99 100 { TMemory64 } 101 102 procedure TMemory64.SetSize(Value: QWord); 103 begin 104 105 end; 106 107 function TMemory64.GetSize: QWord; 108 begin 109 110 end; 111 112 function TMemory64.ReadPos8: Byte; 113 begin 114 115 end; 116 117 function TMemory64.ReadPos16: Word; 118 begin 119 120 end; 121 122 function TMemory64.ReadPos32: DWord; 123 begin 124 125 end; 126 127 function TMemory64.ReadPos64: QWord; 128 begin 129 130 end; 131 132 procedure TMemory64.WritePos8(Data: Byte); 133 begin 134 135 end; 136 137 procedure TMemory64.WritePos16(Data: Word); 138 begin 139 140 end; 141 142 procedure TMemory64.WritePos32(Data: Word); 143 begin 144 145 end; 146 147 procedure TMemory64.WritePos64(Data: Word); 148 begin 149 150 end; 151 152 function TMemory64.Read8(Address: QWord): Byte; 153 begin 154 155 end; 156 157 function TMemory64.Read16(Address: QWord): Word; 158 begin 159 160 end; 161 162 function TMemory64.Read32(Address: QWord): DWord; 163 begin 164 165 end; 166 167 function TMemory64.Read64(Address: QWord): QWord; 168 begin 169 170 end; 171 172 procedure TMemory64.Write8(Address: QWord; Data: Byte); 173 begin 174 175 end; 176 177 procedure TMemory64.Write16(Address: QWord; Data: Word); 178 begin 179 180 end; 181 182 procedure TMemory64.Write32(Address: QWord; Data: DWord); 183 begin 184 185 end; 186 187 procedure TMemory64.Write64(Address: QWord; Data: QWord); 188 begin 189 190 end; 191 192 procedure TMemory64.SetDataBus(Channel: TAddressableChannel64); 193 begin 194 inherited SetDataBus(Channel); 195 end; 196 197 { TMemoryMulti } 198 199 procedure TMemoryMulti.SetSize(Value: QWord); 200 begin 201 SetLength(Memory, Size); 202 end; 203 204 function TMemoryMulti.GetSize: QWord; 205 begin 206 Result := Length(Memory); 207 end; 47 208 48 209 { TMemory16 } … … 103 264 end; 104 265 266 procedure TMemory16.SetDataBus(Channel: TAddressableChannel16); 267 begin 268 Channel.Read8 := Read8; 269 Channel.Read16 := Read16; 270 Channel.Write8 := Write8; 271 Channel.Write16 := Write16; 272 end; 273 105 274 { TMemory8 } 106 275 … … 137 306 end; 138 307 308 procedure TMemory8.SetDataBus(Channel: TAddressableChannel8); 309 begin 310 Channel.Write8 := Write8; 311 Channel.Read8 := Read8; 312 end; 139 313 140 314 end.
Note:
See TracChangeset
for help on using the changeset viewer.