Ignore:
Timestamp:
Sep 8, 2023, 11:20:27 PM (8 months ago)
Author:
chronos
Message:
  • Modified: Improved simple virtual machine.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/simple/Memory.pas

    r40 r42  
    44
    55uses
    6   Classes, SysUtils, DataBus;
     6  Classes, SysUtils, Channel, Device;
    77
    88type
     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
    922  { TMemory8 }
    1023
    11   TMemory8 = class(TDataBus8)
     24  TMemory8 = class(TDevice8)
    1225  private
    1326    Memory: array of Byte;
     
    1831    procedure WritePos8(Data: Byte);
    1932    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;
    2236    property Size: Byte read GetSize write SetSize;
    2337  end;
     
    2539  { TMemory16 }
    2640
    27   TMemory16 = class(TDataBus16)
     41  TMemory16 = class(TDevice16)
    2842  private
    2943    Memory: array of Byte;
     
    3650    procedure WritePos8(Data: Byte);
    3751    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;
    4257    property Size: Word read GetSize write SetSize;
    4358  end;
    4459
     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
    4597
    4698implementation
     99
     100{ TMemory64 }
     101
     102procedure TMemory64.SetSize(Value: QWord);
     103begin
     104
     105end;
     106
     107function TMemory64.GetSize: QWord;
     108begin
     109
     110end;
     111
     112function TMemory64.ReadPos8: Byte;
     113begin
     114
     115end;
     116
     117function TMemory64.ReadPos16: Word;
     118begin
     119
     120end;
     121
     122function TMemory64.ReadPos32: DWord;
     123begin
     124
     125end;
     126
     127function TMemory64.ReadPos64: QWord;
     128begin
     129
     130end;
     131
     132procedure TMemory64.WritePos8(Data: Byte);
     133begin
     134
     135end;
     136
     137procedure TMemory64.WritePos16(Data: Word);
     138begin
     139
     140end;
     141
     142procedure TMemory64.WritePos32(Data: Word);
     143begin
     144
     145end;
     146
     147procedure TMemory64.WritePos64(Data: Word);
     148begin
     149
     150end;
     151
     152function TMemory64.Read8(Address: QWord): Byte;
     153begin
     154
     155end;
     156
     157function TMemory64.Read16(Address: QWord): Word;
     158begin
     159
     160end;
     161
     162function TMemory64.Read32(Address: QWord): DWord;
     163begin
     164
     165end;
     166
     167function TMemory64.Read64(Address: QWord): QWord;
     168begin
     169
     170end;
     171
     172procedure TMemory64.Write8(Address: QWord; Data: Byte);
     173begin
     174
     175end;
     176
     177procedure TMemory64.Write16(Address: QWord; Data: Word);
     178begin
     179
     180end;
     181
     182procedure TMemory64.Write32(Address: QWord; Data: DWord);
     183begin
     184
     185end;
     186
     187procedure TMemory64.Write64(Address: QWord; Data: QWord);
     188begin
     189
     190end;
     191
     192procedure TMemory64.SetDataBus(Channel: TAddressableChannel64);
     193begin
     194  inherited SetDataBus(Channel);
     195end;
     196
     197{ TMemoryMulti }
     198
     199procedure TMemoryMulti.SetSize(Value: QWord);
     200begin
     201  SetLength(Memory, Size);
     202end;
     203
     204function TMemoryMulti.GetSize: QWord;
     205begin
     206  Result := Length(Memory);
     207end;
    47208
    48209{ TMemory16 }
     
    103264end;
    104265
     266procedure TMemory16.SetDataBus(Channel: TAddressableChannel16);
     267begin
     268  Channel.Read8 := Read8;
     269  Channel.Read16 := Read16;
     270  Channel.Write8 := Write8;
     271  Channel.Write16 := Write16;
     272end;
     273
    105274{ TMemory8 }
    106275
     
    137306end;
    138307
     308procedure TMemory8.SetDataBus(Channel: TAddressableChannel8);
     309begin
     310  Channel.Write8 := Write8;
     311  Channel.Read8 := Read8;
     312end;
    139313
    140314end.
Note: See TracChangeset for help on using the changeset viewer.