From a66734883a369318cfac95ef00aa81a78dd505dc Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 22 Jun 2021 19:33:41 -0400 Subject: [PATCH] Starts sketching out Dave. --- Machines/Enterprise/Dave.cpp | 14 +++++++ Machines/Enterprise/Dave.hpp | 40 +++++++++++++++++++ Machines/Enterprise/Enterprise.cpp | 11 ++++- .../Clock Signal.xcodeproj/project.pbxproj | 18 +++++++-- 4 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 Machines/Enterprise/Dave.cpp create mode 100644 Machines/Enterprise/Dave.hpp diff --git a/Machines/Enterprise/Dave.cpp b/Machines/Enterprise/Dave.cpp new file mode 100644 index 000000000..970d9abcb --- /dev/null +++ b/Machines/Enterprise/Dave.cpp @@ -0,0 +1,14 @@ +// +// Dave.cpp +// Clock Signal +// +// Created by Thomas Harte on 22/06/2021. +// Copyright © 2021 Thomas Harte. All rights reserved. +// + +#include "Dave.hpp" + +using namespace Enterprise; + +void Dave::write(uint16_t address, uint8_t value) { +} diff --git a/Machines/Enterprise/Dave.hpp b/Machines/Enterprise/Dave.hpp new file mode 100644 index 000000000..758ce863e --- /dev/null +++ b/Machines/Enterprise/Dave.hpp @@ -0,0 +1,40 @@ +// +// Dave.hpp +// Clock Signal +// +// Created by Thomas Harte on 22/06/2021. +// Copyright © 2021 Thomas Harte. All rights reserved. +// + +#ifndef Dave_hpp +#define Dave_hpp + +#include + +#include "../../Numeric/LFSR.hpp" + +namespace Enterprise { + +/*! + Models a subset of Dave's behaviour; memory mapping and interrupt status + is integrated into the main Enterprise machine. +*/ +class Dave { + public: + void write(uint16_t address, uint8_t value); + + private: + + // Various polynomials that contribute to audio generation. + Numeric::LFSRv<0xc> poly4_; + Numeric::LFSRv<0x14> poly5_; + Numeric::LFSRv<0x60> poly7_; + Numeric::LFSRv<0x110> poly9_; + Numeric::LFSRv<0x500> poly11_; + Numeric::LFSRv<0x6000> poly15_; + Numeric::LFSRv<0x12000> poly17_; +}; + +} + +#endif /* Dave_hpp */ diff --git a/Machines/Enterprise/Enterprise.cpp b/Machines/Enterprise/Enterprise.cpp index 1ba476c84..d1bae8b27 100644 --- a/Machines/Enterprise/Enterprise.cpp +++ b/Machines/Enterprise/Enterprise.cpp @@ -8,9 +8,10 @@ #include "Enterprise.hpp" +#include "Dave.hpp" +#include "EXDos.hpp" #include "Keyboard.hpp" #include "Nick.hpp" -#include "EXDos.hpp" #include "../MachineTypes.hpp" @@ -253,6 +254,10 @@ template class ConcreteMachine: *cycle.value = 0xff; } break; + case 0xb6: + // TODO: joystick input. + *cycle.value = 0xff; + break; } break; @@ -288,7 +293,7 @@ template class ConcreteMachine: case 0xa4: case 0xa5: case 0xa6: case 0xa7: case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf: -// printf("TODO: audio adjust %04x <- %02x\n", address, *cycle.value); + dave_.write(address, *cycle.value); break; case 0xb4: @@ -446,6 +451,8 @@ template class ConcreteMachine: bool previous_nick_interrupt_line_ = false; // Cf. timing guesses above. + Dave dave_; + // MARK: - EXDos card. EXDos exdos_; }; diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index ff6cbeb57..8587d4e08 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -998,6 +998,8 @@ 4BFCA1291ECBE7A700AC40C1 /* zexall.com in Resources */ = {isa = PBXBuildFile; fileRef = 4BFCA1281ECBE7A700AC40C1 /* zexall.com */; }; 4BFCA12B1ECBE7C400AC40C1 /* ZexallTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BFCA12A1ECBE7C400AC40C1 /* ZexallTests.swift */; }; 4BFDD78C1F7F2DB4008579B9 /* ImplicitSectors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFDD78B1F7F2DB4008579B9 /* ImplicitSectors.cpp */; }; + 4BFEA2EF2682A7B900EBF94C /* Dave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFEA2ED2682A7B900EBF94C /* Dave.cpp */; }; + 4BFEA2F02682A7B900EBF94C /* Dave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFEA2ED2682A7B900EBF94C /* Dave.cpp */; }; 4BFF1D3922337B0300838EA1 /* 68000Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */; }; 4BFF1D3A22337B0300838EA1 /* 68000Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */; }; 4BFF1D3D2235C3C100838EA1 /* EmuTOSTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF1D3C2235C3C100838EA1 /* EmuTOSTests.mm */; }; @@ -2072,6 +2074,9 @@ 4BFDD78A1F7F2DB4008579B9 /* ImplicitSectors.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ImplicitSectors.hpp; sourceTree = ""; }; 4BFDD78B1F7F2DB4008579B9 /* ImplicitSectors.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImplicitSectors.cpp; sourceTree = ""; }; 4BFE7B861FC39BF100160B38 /* StandardOptions.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = StandardOptions.hpp; sourceTree = ""; }; + 4BFEA2ED2682A7B900EBF94C /* Dave.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Dave.cpp; sourceTree = ""; }; + 4BFEA2EE2682A7B900EBF94C /* Dave.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Dave.hpp; sourceTree = ""; }; + 4BFEA2F12682A90200EBF94C /* Sizes.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Sizes.hpp; sourceTree = ""; }; 4BFF1D342233778C00838EA1 /* 68000.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 68000.hpp; sourceTree = ""; }; 4BFF1D37223379D500838EA1 /* 68000Storage.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 68000Storage.hpp; sourceTree = ""; }; 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = 68000Storage.cpp; sourceTree = ""; }; @@ -2116,10 +2121,12 @@ 4B051C9F2676F52200CA44E8 /* Enterprise */ = { isa = PBXGroup; children = ( + 4BFEA2ED2682A7B900EBF94C /* Dave.cpp */, 4B051CA12676F52200CA44E8 /* Enterprise.cpp */, 4B051CB42680158600CA44E8 /* EXDos.cpp */, 4B051CAE267C1CA200CA44E8 /* Keyboard.cpp */, 4B051CAA26783E2000CA44E8 /* Nick.cpp */, + 4BFEA2EE2682A7B900EBF94C /* Dave.hpp */, 4B051CA02676F52200CA44E8 /* Enterprise.hpp */, 4B051CB52680158600CA44E8 /* EXDos.hpp */, 4B051CAF267C1CA200CA44E8 /* Keyboard.hpp */, @@ -2703,34 +2710,36 @@ 4B45188C1F75FD1B00926311 /* Formats */ = { isa = PBXGroup; children = ( + 4B80CD74256CA15E00176FCC /* 2MG.cpp */, 4B45188D1F75FD1B00926311 /* AcornADF.cpp */, 4B0333AD2094081A0050B93D /* AppleDSK.cpp */, 4B45188F1F75FD1B00926311 /* CPCDSK.cpp */, 4B4518911F75FD1B00926311 /* D64.cpp */, 4BAF2B4C2004580C00480230 /* DMK.cpp */, + 4BEBFB4B2002C4BF000708CC /* FAT12.cpp */, 4B4518931F75FD1B00926311 /* G64.cpp */, 4B4518951F75FD1B00926311 /* HFE.cpp */, 4BB4BFAE22A42F290069048D /* MacintoshIMG.cpp */, 4B58601C1F806AB200AEE2E3 /* MFMSectorDump.cpp */, 4BC131782346DF2B00E4FF3D /* MSA.cpp */, - 4BEBFB4B2002C4BF000708CC /* FAT12.cpp */, 4B0F94FC208C1A1600FE41D9 /* NIB.cpp */, 4B4518971F75FD1B00926311 /* OricMFMDSK.cpp */, 4B4518991F75FD1B00926311 /* SSD.cpp */, 4BE0A3EC237BB170002AB46F /* ST.cpp */, 4B7BA03323C58B1E00B98D9E /* STX.cpp */, 4B6ED2EE208E2F8A0047B343 /* WOZ.cpp */, + 4B80CD75256CA15E00176FCC /* 2MG.hpp */, 4B45188E1F75FD1B00926311 /* AcornADF.hpp */, 4B0333AE2094081A0050B93D /* AppleDSK.hpp */, 4B4518901F75FD1B00926311 /* CPCDSK.hpp */, 4B4518921F75FD1B00926311 /* D64.hpp */, 4BAF2B4D2004580C00480230 /* DMK.hpp */, + 4BEBFB4C2002C4BF000708CC /* FAT12.hpp */, 4B4518941F75FD1B00926311 /* G64.hpp */, 4B4518961F75FD1B00926311 /* HFE.hpp */, 4BB4BFAF22A42F290069048D /* MacintoshIMG.hpp */, 4B58601D1F806AB200AEE2E3 /* MFMSectorDump.hpp */, 4BC131792346DF2B00E4FF3D /* MSA.hpp */, - 4BEBFB4C2002C4BF000708CC /* FAT12.hpp */, 4B0F94FD208C1A1600FE41D9 /* NIB.hpp */, 4B4518981F75FD1B00926311 /* OricMFMDSK.hpp */, 4B45189A1F75FD1B00926311 /* SSD.hpp */, @@ -2738,8 +2747,6 @@ 4B7BA03223C58B1E00B98D9E /* STX.hpp */, 4B6ED2EF208E2F8A0047B343 /* WOZ.hpp */, 4BFDD7891F7F2DB4008579B9 /* Utility */, - 4B80CD74256CA15E00176FCC /* 2MG.cpp */, - 4B80CD75256CA15E00176FCC /* 2MG.hpp */, ); path = Formats; sourceTree = ""; @@ -3096,6 +3103,7 @@ children = ( 4B7BA03E23D55E7900B98D9E /* CRC.hpp */, 4B7BA03F23D55E7900B98D9E /* LFSR.hpp */, + 4BFEA2F12682A90200EBF94C /* Sizes.hpp */, ); name = Numeric; path = ../../Numeric; @@ -5267,6 +5275,7 @@ 4BB307BC235001C300457D33 /* 6850.cpp in Sources */, 4B055AB31FAE860F0060FFFF /* CSW.cpp in Sources */, 4B89451D201967B4007DE474 /* Disk.cpp in Sources */, + 4BFEA2F02682A7B900EBF94C /* Dave.cpp in Sources */, 4BDACBED22FFA5D20045EF7E /* ncr5380.cpp in Sources */, 4BC131772346DE9100E4FF3D /* StaticAnalyser.cpp in Sources */, 4B055ACF1FAE9B030060FFFF /* SoundGenerator.cpp in Sources */, @@ -5517,6 +5526,7 @@ 4B7BA03023C2B19C00B98D9E /* Jasmin.cpp in Sources */, 4B7136911F789C93008B8ED9 /* SegmentParser.cpp in Sources */, 4BEDA3BA25B25563000C2DBD /* Decoder.cpp in Sources */, + 4BFEA2EF2682A7B900EBF94C /* Dave.cpp in Sources */, 4B4518A21F75FD1C00926311 /* G64.cpp in Sources */, 4B89452C201967B4007DE474 /* Tape.cpp in Sources */, 4B448E811F1C45A00009ABD6 /* TZX.cpp in Sources */,