Changeset 5 for trunk/SharpMz800.pas
- Timestamp:
- Apr 18, 2026, 7:24:02 PM (9 days ago)
- File:
-
- 1 edited
-
trunk/SharpMz800.pas (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/SharpMz800.pas
r4 r5 4 4 5 5 uses 6 Classes, SysUtils, CpuZ80, Memory ;6 Classes, SysUtils, CpuZ80, Memory, Base; 7 7 8 8 type 9 TMode = (md800, md700); 10 TResolution = (rs320x200, rs640x200); 11 9 12 { TSharpMz800 } 10 13 11 14 TSharpMz800 = class 12 15 private 16 WriteFormatRegister: Byte; // WF 17 ReadFormatRegister: Byte; // RF 18 DisplayModeRegister: Byte; // DMD 19 MemoryBankControl: array[0..6] of Byte; 20 FOnMessage: TMessageEvent; 21 Mode: TMode; 22 Resolution: TResolution; 23 procedure CpuWrite(Address: Word; Data: Byte); 24 function CpuRead(Address: Word): Byte; 25 function CpuInput(Address: Word): Byte; 26 procedure CpuOutput(Address: Word; Data: Byte); 27 procedure MesssageExecute(Text: string); 28 procedure UpdateMemoryMapping; 13 29 public 14 30 Cpu: TCpuZ80; … … 19 35 CharacterRom: TMemoryData; 20 36 MappedMemory: TMemoryMapped; 21 procedure CpuWrite(Address: Word; Data: Byte); 22 function CpuRead(Address: Word): Byte; 37 MappedIO: TMemoryIO; 23 38 procedure PowerOn; 24 39 procedure PowerOff; 25 40 constructor Create; 26 41 destructor Destroy; override; 42 property OnMessage: TMessageEvent read FOnMessage write FOnMessage; 27 43 end; 28 44 … … 42 58 end; 43 59 60 function TSharpMz800.CpuInput(Address: Word): Byte; 61 begin 62 Result := 0; 63 end; 64 65 procedure TSharpMz800.CpuOutput(Address: Word; Data: Byte); 66 begin 67 case Address of 68 $cc: WriteFormatRegister := Data; 69 $cd: ReadFormatRegister := Data; 70 $ce: begin 71 DisplayModeRegister := Data; 72 if (DisplayModeRegister and 8) <> 0 then Mode := md700 else Mode := md800; 73 if (DisplayModeRegister and 4) <> 0 then Resolution := rs320x200 else Resolution := rs640x200; 74 UpdateMemoryMapping; 75 end; 76 $e0..$e6: MemoryBankControl[Address - $e0] := Data; 77 end; 78 end; 79 80 procedure TSharpMz800.MesssageExecute(Text: string); 81 begin 82 if Assigned(FOnMessage) then FOnMessage(Text); 83 end; 84 85 procedure TSharpMz800.UpdateMemoryMapping; 86 begin 87 MappedMemory.Areas.Clear; 88 MappedMemory.Areas.AddNew($0, BaseRom); 89 case Mode of 90 md700: begin 91 MappedMemory.Areas.AddNew($d000, VideoRam); 92 VideoRam.Size := $1000; 93 MappedMemory.Areas.AddNew($e000, MappedIO); 94 MappedMemory.Areas.AddNew($e010, ExtendedRom); 95 end; 96 md800: begin 97 MappedMemory.Areas.AddNew($1000, CharacterRom); 98 MappedMemory.Areas.AddNew($8000, VideoRam); 99 VideoRam.Size := $1000; 100 MappedMemory.Areas.AddNew($e000, ExtendedRom); 101 end; 102 end; 103 MappedMemory.Areas.AddNew($0, Memory); 104 end; 105 44 106 procedure TSharpMz800.PowerOn; 45 107 begin … … 56 118 RomSubDir = 'ROM'; 57 119 begin 120 Mode := md800; 121 Resolution := rs320x200; 58 122 Memory := TMemoryData.Create; 123 Memory.Title := 'Main memory'; 59 124 Memory.Size := 65536; // $10000 60 125 BaseRom := TMemoryData.Create; 126 BaseRom.Title := 'Base ROM'; 61 127 BaseRom.LoadFromFile(RomSubDir + DirectorySeparator + 'MZ700A.ROM'); 62 128 ExtendedRom := TMemoryData.Create; 129 ExtendedRom.Title := 'Extended ROM'; 63 130 ExtendedRom.LoadFromFile(RomSubDir + DirectorySeparator + '9Z_504M.ROM'); 64 131 CharacterRom := TMemoryData.Create; 132 CharacterRom.Title := 'Character ROM (CGROM)'; 65 133 CharacterRom.LoadFromFile(RomSubDir + DirectorySeparator + 'CGROM.ROM'); 66 134 VideoRam := TMemoryData.Create; 135 VideoRam.Title := 'Video memory (VRAM)'; 67 136 VideoRam.Size := 4096; // $1000 68 137 MappedMemory := TMemoryMapped.Create; 69 138 MappedMemory.Size := $10000; 70 MappedMemory.Areas.AddNew($0, BaseRom); 71 MappedMemory.Areas.AddNew($1000, CharacterRom); 72 MappedMemory.Areas.AddNew($e000, ExtendedRom); 73 MappedMemory.Areas.AddNew($0, Memory); 139 MappedIO := TMemoryIO.Create; 140 MappedIO.Title := 'Mapped I/O'; 141 MappedIO.Size := 8; 142 MappedIO.BasePort := $d0; 143 UpdateMemoryMapping; 74 144 Cpu := TCpuZ80.Create; 75 145 Cpu.Memory := MappedMemory; 76 146 Cpu.OnRead := CpuRead; 77 147 Cpu.OnWrite := CpuWrite; 148 Cpu.OnInput := CpuInput; 149 Cpu.OnOutput := CpuOutput; 150 Cpu.OnMessage := MesssageExecute; 78 151 end; 79 152 … … 87 160 FreeAndNil(ExtendedRom); 88 161 FreeAndNil(Memory); 162 FreeAndNil(MappedIO); 89 163 inherited; 90 164 end;
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/mzxemu/chrome/site/your_project_logo.png)