1 | unit Machine;
|
---|
2 |
|
---|
3 | interface
|
---|
4 |
|
---|
5 | uses
|
---|
6 | Classes, SysUtils, Cpu, Memory, DeviceManager, Console, Screen;
|
---|
7 |
|
---|
8 | type
|
---|
9 |
|
---|
10 | { TMachine }
|
---|
11 |
|
---|
12 | TMachine = class
|
---|
13 | protected
|
---|
14 | FPoweredOn: Boolean;
|
---|
15 | procedure SetPoweredOn(AValue: Boolean); virtual;
|
---|
16 | published
|
---|
17 | property PoweredOn: Boolean read FPoweredOn write SetPoweredOn;
|
---|
18 | end;
|
---|
19 |
|
---|
20 | { TMachine8 }
|
---|
21 |
|
---|
22 | TMachine8 = class(TMachine)
|
---|
23 | private
|
---|
24 | FPoweredOn: Boolean;
|
---|
25 | procedure SetPoweredOn(AValue: Boolean); override;
|
---|
26 | public
|
---|
27 | DeviceManager: TDeviceManager8;
|
---|
28 | Memory: TMemory8;
|
---|
29 | Console: TConsole8;
|
---|
30 | Cpu: TCpu8;
|
---|
31 | Screen: TScreen8;
|
---|
32 | constructor Create;
|
---|
33 | destructor Destroy; override;
|
---|
34 | end;
|
---|
35 |
|
---|
36 | { TMachine16 }
|
---|
37 |
|
---|
38 | TMachine16 = class(TMachine)
|
---|
39 | private
|
---|
40 | FPoweredOn: Boolean;
|
---|
41 | procedure SetPoweredOn(AValue: Boolean); override;
|
---|
42 | public
|
---|
43 | DeviceManager: TDeviceManager16;
|
---|
44 | Memory: TMemory16;
|
---|
45 | Console: TConsole16;
|
---|
46 | Cpu: TCpu16;
|
---|
47 | Screen: TScreen16;
|
---|
48 | constructor Create;
|
---|
49 | destructor Destroy; override;
|
---|
50 | end;
|
---|
51 |
|
---|
52 |
|
---|
53 | implementation
|
---|
54 |
|
---|
55 | { TMachine }
|
---|
56 |
|
---|
57 | procedure TMachine.SetPoweredOn(AValue: Boolean);
|
---|
58 | begin
|
---|
59 | if FPoweredOn=AValue then Exit;
|
---|
60 | FPoweredOn:=AValue;
|
---|
61 | end;
|
---|
62 |
|
---|
63 | { TMachine16 }
|
---|
64 |
|
---|
65 | procedure TMachine16.SetPoweredOn(AValue: Boolean);
|
---|
66 | begin
|
---|
67 | if FPoweredOn = AValue then Exit;
|
---|
68 | FPoweredOn := AValue;
|
---|
69 | if FPoweredOn then Cpu.Run;
|
---|
70 | end;
|
---|
71 |
|
---|
72 | constructor TMachine16.Create;
|
---|
73 | begin
|
---|
74 | Cpu := TCpu16.Create;
|
---|
75 | Console := TConsole16.Create;
|
---|
76 | Screen := TScreen16.Create;
|
---|
77 | DeviceManager := TDeviceManager16.Create;
|
---|
78 | DeviceManager.RegisterDevice(Console);
|
---|
79 | DeviceManager.RegisterDevice(Screen);
|
---|
80 | DeviceManager.SetDataBus(Cpu.IO);
|
---|
81 | Memory := TMemory16.Create;
|
---|
82 | Memory.Size := 65535;
|
---|
83 | Memory.SetDataBus(Cpu.Memory);
|
---|
84 | end;
|
---|
85 |
|
---|
86 | destructor TMachine16.Destroy;
|
---|
87 | begin
|
---|
88 | FreeAndNil(Cpu);
|
---|
89 | FreeAndNil(DeviceManager);
|
---|
90 | FreeAndNil(Console);
|
---|
91 | FreeAndNil(Memory);
|
---|
92 | FreeAndNil(Screen);
|
---|
93 | inherited;
|
---|
94 | end;
|
---|
95 |
|
---|
96 | { TMachine8 }
|
---|
97 |
|
---|
98 | procedure TMachine8.SetPoweredOn(AValue: Boolean);
|
---|
99 | begin
|
---|
100 | if FPoweredOn = AValue then Exit;
|
---|
101 | FPoweredOn := AValue;
|
---|
102 | if FPoweredOn then Cpu.Run;
|
---|
103 | end;
|
---|
104 |
|
---|
105 | constructor TMachine8.Create;
|
---|
106 | begin
|
---|
107 | Cpu := TCpu8.Create;
|
---|
108 | Console := TConsole8.Create;
|
---|
109 | Screen := TScreen8.Create;
|
---|
110 | DeviceManager := TDeviceManager8.Create;
|
---|
111 | DeviceManager.RegisterDevice(Console);
|
---|
112 | DeviceManager.RegisterDevice(Screen);
|
---|
113 | DeviceManager.SetDataBus(Cpu.IO);
|
---|
114 | Memory := TMemory8.Create;
|
---|
115 | Memory.Size := 255;
|
---|
116 | Memory.SetDataBus(Cpu.Memory);
|
---|
117 | end;
|
---|
118 |
|
---|
119 | destructor TMachine8.Destroy;
|
---|
120 | begin
|
---|
121 | FreeAndNil(Cpu);
|
---|
122 | FreeAndNil(DeviceManager);
|
---|
123 | FreeAndNil(Console);
|
---|
124 | FreeAndNil(Memory);
|
---|
125 | FreeAndNil(Screen);
|
---|
126 | inherited;
|
---|
127 | end;
|
---|
128 |
|
---|
129 | end.
|
---|
130 |
|
---|