Beispiel #1
0
 public BusManager()
 {
     m_cpu          = new CpuUnit();
     m_rzx          = new RzxHandler(m_cpu);
     m_eventManager = new EventManager(m_cpu, m_rzx);
     SampleRate     = 44100;
 }
Beispiel #2
0
        public override void BusInit(IBusManager bmgr)
        {
            m_sandbox = bmgr.IsSandbox;
            m_cpu     = bmgr.CPU;
            m_memory  = bmgr.FindDevice <IMemoryDevice>();

            m_rtcFileName   = bmgr.GetSatelliteFileName("cmos");
            m_nvramFileName = bmgr.GetSatelliteFileName("nvram");
            m_ideFileName   = bmgr.GetSatelliteFileName("vmide");

            bmgr.RegisterIcon(m_iconHdd);
            bmgr.Events.SubscribeBeginFrame(BusBeginFrame);
            bmgr.Events.SubscribeEndFrame(BusEndFrame);

            bmgr.Events.SubscribeReset(BusReset);

            const int mask = 0xB8E7;//0xA044;

            bmgr.Events.SubscribeRdIo(mask, 0x5FBA & mask, ReadVer);
            bmgr.Events.SubscribeRdIo(mask, 0x5FBE & mask, ReadRev);
            bmgr.Events.SubscribeRdIo(mask, 0x7FBA & mask, ReadFdd);
            bmgr.Events.SubscribeRdIo(mask, 0x7FBE & mask, ReadPic);
            bmgr.Events.SubscribeRdIo(mask, 0xDFBA & mask, ReadRtc);
            bmgr.Events.SubscribeRdIo(mask, 0xD8BE & mask, ReadIdeHi);
            bmgr.Events.SubscribeRdIo(mask, 0xFFBA & mask, ReadSys);
            bmgr.Events.SubscribeRdIo(mask, 0xFFBE & mask, ReadIde);

            bmgr.Events.SubscribeWrIo(mask, 0x7FBA & mask, WriteFdd);
            bmgr.Events.SubscribeWrIo(mask, 0xDFBA & mask, WriteRtc);
            bmgr.Events.SubscribeWrIo(mask, 0xD8BE & mask, WriteIdeHi);
            bmgr.Events.SubscribeWrIo(mask, 0xFFBA & mask, WriteSys);
            bmgr.Events.SubscribeWrIo(mask, 0xFFBE & mask, WriteIde);
        }
Beispiel #3
0
        public override void BusInit(IBusManager bmgr)
        {
            m_page0000  = -1;
            m_page4000  = 5;
            m_page8000  = 2;
            m_pageC000  = 0;
            m_videoPage = 5;

            CPU    = bmgr.CPU;
            Memory = bmgr.FindDevice <IMemoryDevice>();

            bmgr.Events.SubscribeWrMem(0xC000, 0x0000, WriteMem0000);
            bmgr.Events.SubscribeWrMem(0xC000, 0x4000, WriteMem4000);
            bmgr.Events.SubscribeWrMem(0xC000, 0x8000, WriteMem8000);
            bmgr.Events.SubscribeWrMem(0xC000, 0xC000, WriteMemC000);

            bmgr.Events.SubscribeWrIo(0x0001, 0x0000, WritePortFE);

            bmgr.Events.SubscribeBeginFrame(BeginFrame);
            bmgr.Events.SubscribeEndFrame(EndFrame);

            bmgr.AddSerializer(new ScrSerializer(this));
            bmgr.AddSerializer(new BmpSerializer(this));
            bmgr.AddSerializer(new JpgSerializer(this));
            bmgr.AddSerializer(new PngSerializer(this));
        }
Beispiel #4
0
        private static void ExecCpuTests(string testName, int frameCount)
        {
            var cpu = new CpuUnit();

            cpu.regs.PC   = 0;
            cpu.RESET     = () => { };
            cpu.NMIACK_M1 = () => { };
            cpu.INTACK_M1 = () => { };
            cpu.RDMEM_M1  = addr => (byte)addr;
            cpu.RDMEM     = addr => (byte)addr;
            cpu.WRMEM     = (addr, value) => { };
            cpu.RDPORT    = addr => 0xFF;
            cpu.WRPORT    = (addr, value) => { };
            cpu.RDNOMREQ  = addr => { };
            cpu.WRNOMREQ  = addr => { };

            Stopwatch watch = new Stopwatch();

            watch.Start();
            for (var cycle = 0L; cycle < 71980 * frameCount; cycle++)
            {
                cpu.ExecCycle();
            }
            watch.Stop();
            Console.WriteLine("{0} [cpu]:\t{1} [ms]", testName, watch.ElapsedMilliseconds);
        }
Beispiel #5
0
        public override void BusInit(IBusManager bmgr)
        {
            _cpu     = bmgr.CPU;
            _sandbox = bmgr.IsSandbox;
            _memory  = bmgr.FindDevice <IMemoryDevice>();

            bmgr.RegisterIcon(_iconRd);
            bmgr.RegisterIcon(_iconWr);
            bmgr.Events.SubscribeBeginFrame(BusBeginFrame);
            bmgr.Events.SubscribeEndFrame(BusEndFrame);

            bmgr.Events.SubscribeRdMemM1(0xFF00, 0x3D00, BusReadMem3D00_M1);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0x4000, BusReadMemRam);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0x8000, BusReadMemRam);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0xC000, BusReadMemRam);

            OnSubscribeIo(bmgr);

            bmgr.Events.SubscribeReset(BusReset);
            bmgr.Events.SubscribeNmiRq(BusNmiRq);
            bmgr.Events.SubscribeNmiAck(BusNmiAck);

            foreach (var fs in LoadManager.GetSerializers())
            {
                bmgr.AddSerializer(fs);
            }
        }
Beispiel #6
0
        public override void BusInit(IBusManager bmgr)
        {
            m_cpu    = bmgr.CPU;
            m_ulaAtm = bmgr.FindDevice <UlaAtm450>();

            bmgr.Events.SubscribeRdIo(0x0001, 0x0000, BusReadPortFE);          // bit Z emulation
            bmgr.Events.SubscribeWrIo(0x0001, 0x0000, BusWritePortFE);
            bmgr.Events.SubscribeRdIo(0x0004, 0x00FB & 0x0004, BusReadPortFB); // CPSYS [(addr & 0x7F)==0x7B]
            bmgr.Events.SubscribeWrIo(0x8202, 0x7FFD & 0x8202, BusWritePort7FFD);
            bmgr.Events.SubscribeWrIo(0x8202, 0xFDFD & 0x8202, BusWritePortFDFD);
            bmgr.Events.SubscribeWrIo(0x8202, 0x7DFD & 0x8202, BusWritePort7DFD); // atm_writepal(val);
            bmgr.Events.SubscribeRdMemM1(0xFF00, 0x3D00, BusReadMem3D00_M1);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0x4000, BusReadMemRamM1);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0x8000, BusReadMemRamM1);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0xC000, BusReadMemRamM1);

            //bmgr.Events.SubscribeRdIo(0x0005, 0x00FE & 0x0005, BusReadPortFE);      // bit Z emulation
            //bmgr.Events.SubscribeWrIo(0x0005, 0x00FE & 0x0005, BusWritePortFE);
            //bmgr.Events.SubscribeRdIo(0x0005, 0x00FB & 0x0005, BusReadPortFB);   // CPSYS [(addr & 0x7F)==0x7B]
            //bmgr.Events.SubscribeWrIo(0x8202, 0x7FFD & 0x8202, BusWritePort7FFD);
            //bmgr.Events.SubscribeWrIo(0x8202, 0xFDFD & 0x8202, BusWritePortFDFD);
            //bmgr.Events.SubscribeWrIo(0x8202, 0x7DFD & 0x8202, BusWritePort7DFD); // atm_writepal(val);
            //bmgr.Events.SubscribeRdMemM1(0xFF00, 0x3D00, BusReadMem3D00_M1);
            //bmgr.Events.SubscribeRdMemM1(0xC000, 0x4000, BusReadMemRamM1);
            //bmgr.Events.SubscribeRdMemM1(0xC000, 0x8000, BusReadMemRamM1);
            //bmgr.Events.SubscribeRdMemM1(0xC000, 0xC000, BusReadMemRamM1);

            bmgr.Events.SubscribeReset(BusReset);

            // Subscribe before MemoryBase.BusInit
            // to handle memory switches before read
            base.BusInit(bmgr);
        }
Beispiel #7
0
        public override void BusInit(IBusManager bmgr)
        {
            m_busManager = bmgr;
            bmgr.Events.SubscribeRdIo(0x99, 0x98, readPortFE);
            bmgr.Events.SubscribeRdIo(0x99, 0x18, readPort7E);

            m_cpu = bmgr.CPU;
        }
Beispiel #8
0
        public override void BusInit(IBusManager bmgr)
        {
            m_cpu = bmgr.CPU;
            var ula = bmgr.FindDevice <IUlaDevice>();

            m_frameTactCount = ula != null ? ula.FrameTactCount : 71680;
            bmgr.Events.SubscribeBeginFrame(BeginFrame);
            bmgr.Events.SubscribeEndFrame(EndFrame);
            ApplyTimings(m_frameTactCount * 50, SampleRate);
            OnVolumeChanged(m_volume, m_volume);
        }
Beispiel #9
0
 public override void BusInit(IBusManager bmgr)
 {
     base.BusInit(bmgr);
     _cpu = bmgr.CPU;
     bmgr.Events.SubscribeWrIo(0x00FF, 0x004e, WritePort4e);
     bmgr.Events.SubscribeRdIo(0x00FF, 0x004e, ReadPort4e);
     bmgr.Events.SubscribeWrIo(0x00FF, 0x004F, WritePort4f);
     bmgr.Events.SubscribeWrIo(0x00FF, 0x00FB, WritePortFb);
     bmgr.Events.SubscribeRdIo(0x00FF, 0x00FE, ReadPortFe);
     bmgr.Events.SubscribePreCycle(CheckInt);
     bmgr.Events.SubscribeReset(ResetBus);
 }
Beispiel #10
0
        public override void BusInit(IBusManager bmgr)
        {
            m_cpu    = bmgr.CPU;
            m_ulaAtm = bmgr.FindDevice <UlaAtm450>();

            OnSubscribeIo(bmgr);

            bmgr.Events.SubscribeRdMemM1(0x0000, 0x0000, BusReadM1);
            bmgr.Events.SubscribeReset(BusReset);

            // Subscribe before MemoryBase.BusInit
            // to handle memory switches before read
            base.BusInit(bmgr);
        }
Beispiel #11
0
        public override void BusInit(IBusManager bmgr)
        {
            m_sandbox = bmgr.IsSandbox;
            m_cpu     = bmgr.CPU;
            m_memory  = bmgr.FindDevice <IMemoryDevice>();

            m_ideFileName = bmgr.GetSatelliteFileName("vmide");

            bmgr.RegisterIcon(m_iconHdd);
            bmgr.Events.SubscribeBeginFrame(BusBeginFrame);
            bmgr.Events.SubscribeEndFrame(BusEndFrame);

            bmgr.Events.SubscribeReset(BusReset);

            bmgr.Events.SubscribeRdIo(0x9F, 0x8B, ReadIde);
            bmgr.Events.SubscribeWrIo(0x9F, 0x8B, WriteIde);
        }
Beispiel #12
0
        public override void BusInit(IBusManager bmgr)
        {
            m_cpu = bmgr.CPU;
            bmgr.Events.SubscribeWrIo(0xD027, 0x7FFD & 0xD027, BusWritePort7FFD);
            bmgr.Events.SubscribeWrIo(0xD027, 0x1FFD & 0xD027, BusWritePort1FFD);

            bmgr.Events.SubscribeRdMemM1(0xFF00, 0x3D00, BusReadMem3D00_M1);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0x4000, BusReadMemRamM1);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0x8000, BusReadMemRamM1);
            bmgr.Events.SubscribeRdMemM1(0xC000, 0xC000, BusReadMemRamM1);
            bmgr.Events.SubscribeNmiRq(BusNmiRq);
            bmgr.Events.SubscribeNmiAck(BusNmiAck);
            bmgr.Events.SubscribeReset(BusReset);

            // Subscribe before MemoryBase.BusInit
            // to handle memory switches before read
            base.BusInit(bmgr);
        }
Beispiel #13
0
        public EventManager(CpuUnit cpu, RzxHandler rzx)
        {
            m_cpu = cpu;
            m_rzx = rzx;

            m_cpu.RDMEM_M1  = RDMEM_M1;
            m_cpu.INTACK_M1 = INTACK_M1;
            m_cpu.NMIACK_M1 = NMIACK_M1;
            m_cpu.RDMEM     = RDMEM;
            m_cpu.WRMEM     = WRMEM;
            m_cpu.RDPORT    = RDPORT;
            m_cpu.WRPORT    = WRPORT;
            m_cpu.RDNOMREQ  = RDNOMREQ;
            m_cpu.WRNOMREQ  = WRNOMREQ;
            m_cpu.RESET     = RESET;

            Clear();
        }
Beispiel #14
0
        public override void BusInit(IBusManager bmgr)
        {
            m_sandbox = bmgr.IsSandbox;
            m_cpu     = bmgr.CPU;

            m_ideFileName = bmgr.GetSatelliteFileName("vmide");

            bmgr.RegisterIcon(m_iconHdd);
            bmgr.Events.SubscribeBeginFrame(BusBeginFrame);
            bmgr.Events.SubscribeEndFrame(BusEndFrame);

            bmgr.Events.SubscribeReset(BusReset);

            const int mask = 0x001F;

            bmgr.Events.SubscribeRdIo(mask, 0xEF & mask, ReadIde);
            bmgr.Events.SubscribeWrIo(mask, 0xEF & mask, WriteIde);
        }
Beispiel #15
0
        public override void BusInit(IBusManager bmgr)
        {
            m_sandbox = bmgr.IsSandbox;
            m_cpu     = bmgr.CPU;

            m_ideFileName = bmgr.GetSatelliteFileName("vmide");

            bmgr.RegisterIcon(m_iconHdd);
            bmgr.Events.SubscribeBeginFrame(BusBeginFrame);
            bmgr.Events.SubscribeEndFrame(BusEndFrame);

            bmgr.Events.SubscribeReset(BusReset);

            bmgr.Events.SubscribeRdIo(0x1E, 0x10, ReadIde);
            bmgr.Events.SubscribeWrIo(0x1E, 0x10, WriteIde);

            bmgr.Events.SubscribeRdIo(0xFF, 0xC8, ReadIdeAltStatus);
            bmgr.Events.SubscribeWrIo(0xFF, 0xC8, WriteIdeAltStatus);
        }
Beispiel #16
0
        public override void BusInit(IBusManager bmgr)
        {
            base.BusInit(bmgr);
            m_cpu    = bmgr.CPU;
            m_memory = bmgr.FindDevice <IMemoryDevice>();

            bmgr.Events.SubscribeRdIo(Mask, Port & Mask, ReadPortFe);
            bmgr.Events.SubscribeWrIo(Mask, Port & Mask, WritePortFe);

            bmgr.Events.SubscribePreCycle(busPreCycle);

            bmgr.AddSerializer(new TapSerializer(this));
            bmgr.AddSerializer(new TzxSerializer(this));
            bmgr.AddSerializer(new CswSerializer(this));
            bmgr.AddSerializer(new WavSerializer(this));
            bmgr.RegisterIcon(m_iconTape);
            if (m_viewHolder != null)
            {
                bmgr.AddCommandUi(m_viewHolder.CommandOpen);
            }
        }
Beispiel #17
0
        public override void BusInit(IBusManager bmgr)
        {
            m_sandbox = bmgr.IsSandbox;
            m_cpu     = bmgr.CPU;

            m_ideFileName = bmgr.GetSatelliteFileName("vmide");

            bmgr.RegisterIcon(m_iconHdd);
            bmgr.Events.SubscribeBeginFrame(BusBeginFrame);
            bmgr.Events.SubscribeEndFrame(BusEndFrame);

            bmgr.Events.SubscribeReset(BusReset);

            var dataMask = 0x00E7; //0x00FF;
            var regMask  = 0xE1E7; //0x00E7;//0xFEFF;

            bmgr.Events.SubscribeRdIo(dataMask, 0x0050 & dataMask, ReadIdeData);
            bmgr.Events.SubscribeWrIo(dataMask, 0x0050 & dataMask, WriteIdeData);

            bmgr.Events.SubscribeRdIo(regMask, 0x0051 & regMask, ReadIdeError);
            bmgr.Events.SubscribeWrIo(regMask, 0x0151 & regMask, WriteIdeError);

            bmgr.Events.SubscribeRdIo(regMask, 0x0052 & regMask, ReadIdeCounter);
            bmgr.Events.SubscribeWrIo(regMask, 0x0152 & regMask, WriteIdeCounter);

            bmgr.Events.SubscribeRdIo(regMask, 0x0053 & regMask, ReadIdeSector);
            bmgr.Events.SubscribeWrIo(regMask, 0x0153 & regMask, WriteIdeSector);

            bmgr.Events.SubscribeRdIo(regMask, 0x0055 & regMask, ReadIdeCylHi);
            bmgr.Events.SubscribeWrIo(regMask, 0x0155 & regMask, WriteIdeCylHi);

            bmgr.Events.SubscribeRdIo(regMask, 0x0054 & regMask, ReadIdeCylLo);
            bmgr.Events.SubscribeWrIo(regMask, 0x0154 & regMask, WriteIdeCylLo);

            bmgr.Events.SubscribeRdIo(regMask, 0x4052 & regMask, ReadIdeControl);
            bmgr.Events.SubscribeWrIo(regMask, 0x4152 & regMask, WriteIdeControl);

            bmgr.Events.SubscribeRdIo(regMask, 0x4053 & regMask, ReadIdeCommand);
            bmgr.Events.SubscribeWrIo(regMask, 0x4153 & regMask, WriteIdeCommand);
        }
Beispiel #18
0
        public override void BusInit(IBusManager bmgr)
        {
            m_sandbox = bmgr.IsSandbox;
            m_cpu     = bmgr.CPU;
            m_memory  = bmgr.FindDevice <IMemoryDevice>();

            bmgr.RegisterIcon(m_iconRd);
            bmgr.RegisterIcon(m_iconWr);
            bmgr.Events.SubscribeBeginFrame(BusBeginFrame);
            bmgr.Events.SubscribeEndFrame(BusEndFrame);

            OnSubscribeIo(bmgr);

            foreach (var fs in LoadManagers.First().GetSerializers())
            {
                bmgr.AddSerializer(fs);
            }
            if (m_viewHolder != null)
            {
                bmgr.AddCommandUi(m_viewHolder.CommandOpen);
            }
        }
Beispiel #19
0
 public RzxHandler(CpuUnit cpu)
 {
     m_cpu       = cpu;
     IsPlayback  = false;
     IsRecording = false;
 }