GithubHelp home page GithubHelp logo

arjunnair / zero-emulator Goto Github PK

View Code? Open in Web Editor NEW
40.0 15.0 10.0 44.18 MB

Zero is a ZX Spectrum emulator for Windows, written using C#.

License: Other

HTML 0.02% C# 98.26% Pascal 0.86% Inno Setup 0.27% Visual Basic .NET 0.59%

zero-emulator's Introduction

Zero - A ZX Spectrum Emulator

Zero is a spectrum emulator written entirely on the .NET platform, using C#, and requires .NET framework 4.7 or above.

The philosophy behind Zero is to provide a highly accurate emulation of the various Spectrum models while also providing a nice, user friendly experience.

Zero running Exolon

Features

  • Emulates the 48k, 128k, 128k SE, the Spectrum +2 and the Spectrum +3 (with 2 disk drives), and the Pentagon 128k models.

  • Supports the following tape formats: TZX, TAP, CSW, and PZX. It only saves .TAP files though.

  • Supports the following snapshot formats: SZX, SNA, and the Z80. It can save to SNA and SZX formats.

  • Supports the following disk formats: DSK, TRD and SCL.

  • Supports the playback and recording (with rollback) of RZX files.

  • Supports the AY-3-8192 sound chip and ULA Plus.

  • Supports the Kempston, Cursor and Sinclair joystick as well as the Kempston mouse.

  • There is a built-in debugger with modern conveniences like step-in, step-over, logging and breakpoint facilities.

  • Other stuff: Virtual tape drive, POK file support, Zip file support, et al.

Using the Emulator

The entire emulator is controlled and configured via the menu bar at the top. Additional options are under the Tools section in the menu.

Using the Keyboard

Zero emulates the speccy keyboard faithfully and provides some additional functionality via the PC keyboard.

The Shift Keys on the PC keyboard act as Caps Shift for the speccy, while the Control keys act as Symbol Shift. For example, to enter LOAD "" on Zero: First press J to bring up the LOAD keyword and then press Ctrl+P twice (J, Ctrl+P, Ctrl+P).

To enter extended mode press Shift and Ctrl key together.

In addition, you can type in symbols like + , - ? etc directly from the PC keyboard as usual. Of course, the normal speccy entry method will work as well.

If you're in the habit of forgetting what key does what on the speccy (like me!), I recommend you use the SEBasic ROM or the Gosh Wonderful for the 48k, which support full typing (i.e to do LOAD "" you would actually have to type it in one letter at a time like on the PC).

The following key combinations are used by Zero:

Emulator Window

Shortcut Key Function
F2 Tape Browser
F3 Debugger
F4 Search Infoseek
F5 Pause Emulation
F6 Acquire/Release Mouse (May first need to enable mouse emulation in Options)
F7 New RZX Recording
F8 Finalise RZX Recording
F9 Stop RZX Recording
Ins / Tab Insert RZX Bookmark
Del Rollback RZX to previous bookmark
Alt+F8 Discard RZX Recording
Alt+F4 Exit emulator
Ctrl+F5 Reset Emulator
Alt+F6 Unacquire mouse
Ctrl+O Open File
Ctrl+S Save snapshot
Ctrl+Shift+S Save screenshot
Ctrl+K Show 48k Keyboard helper
Alt+0 100% window size
Alt+ + Increase window size by 50% of original speccy size
Alt+ - Decrease window size by 50% of original speccy size
Alt+Enter Full screen toggle

Debugger

Shortcut Key Function
F5 Resume Emulation
F10 Step Over
F11 Step In
F12 Step Out
Alt+B Show Breakpoints Editor
Alt+S Show Machine State
Alt+V Show Memory Viewer
Alt+R Show Registers
Alt+L Show Execution Log
Alt+P Poke Memory

Command line options

Zero can be fully configured via the command line by passing parameters in the following format:

zero [file][-option [value]]

The following options are available:

Option Parameters Function
-f Launches the emulator in full screen mode
-s Enables pixel smoothing
-v Enables vertical syncing
-g Use GDI instead of DirectX for rendering
-i Enables display interlacing (scanlines)
-l Enables late timings
-p ula+/ulaplus/grayscale/normal Selects a colour palette
-m 48k/128k/128ke/plus3/pentagon128k Selects a spectrum machine model
-e 1 to 10 Sets the emulation speed (1 = Normal)
-c 1/2/4/8/14 CPU Multiplier (3.5 MHz * multiplier)
-w multiples of 50 Selects a window size as a percentage increment of speccy size (0 = no increment, 50 = 50% increment, etc)
-b mini/medium/full Sets the emulated border size
-q see below Plays back commands in a queue

Available playback commands:

/loadfile "filename"    : Loads a file given the path
/waitframes N           : Waits for N frames before processing next command
/trace "filename"       : Starts a trace log to the given filename
/stoptrace              : Stops the above trace logging
/savesnap "filename"    : Saves the current emulation state as a snapshot
/debug                  : Opens the debugger
/exit                   : Exits the emulator

Examples:

  1. Open the emulator in full screen, with scanlines and ULA+ palette enabled:
zero.exe -f -s -c ula+
  1. Open a file, use late timings and enable mini borders:
zero.exe -q "exolon.pzx" -l -b mini
  1. Open a file, wait for 2 frames, start trace logging, wait for 5 frames, stop the logging and shutdown emulator:
zero.exe -q "exolon.pzx" /waitframes 2 /startrace "exolon_trace.log" /waitframes 5 /stoptrace /exit

Uninstalling Zero

If you installed the emulator using the Setup, simply run the uninstaller to uninstall the emulator.It's generally a good idea to uninstall a previous version of the emulator before installing a new one.

If you used the .zip version, simply delete the folder in which Zero resides.

Building the project using source

The project currently uses Visual Studio 2019 Community edition (free). It may not be compatible with older Visual Studio editions. I recommend downloading VS 2019 Community as it's almost like the professional version (supports plugins for example) and is free to download from here: http://www.visualstudio.com/en-us/news/vs2013-community-vs.aspx

Important

If you're unable to launch the emulator or the emulator crashes immediately on launching, you may need to install an additional DirectX component, which can be found here: http://www.microsoft.com/en-us/download/details.aspx?id=810

Acknowledgements

Many thanks to Mark Woodmass (Woody) for his patient and detailed technical advice on various aspects of emulation, and to Rich Chandler, Paul Dunn (Dunny) and others on the ZX Spectrum discord group for their help and feedback. This emulator wouldn't have been possible otherwise without their considerable encouragement and support.

Thanks also to Patrik Rak for permission to use the various PZX conversion tools that Zero uses to support other tape format. You can find more information on them on Patrik's site: http://zxds.raxoft.cz/pzx.html.

Thanks to Alex Makeev for permission to use his DirectSound routines from ZXMAK 2.

Thanks go out to Dr. Phil Kendall and others for putting together the CSS FAQ, which helped me figure out some of the nuances of the Spectrum hardware and peripherals.

I must also thank my wife Poornima for putting up with my obsession with the speccy and even providing encouragement and help with this project!

Additional contributors whose feedback have helped in shaping the emulator are credited in the What's New file.

License & Copyrights

Copyright (c) 2009-2024 Arjun Nair. See the LICENSE file for license rights and limitations (MIT).
Zero uses various public domain icons. Copyright rests with their respective authors.

zero-emulator's People

Contributors

arjunnair avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zero-emulator's Issues

Byte Count for Data Blocks in File Browser is Incorrect

The number of bytes displayed for a data block in the file browser is always two bytes more than the actual size of the data block. This can be recreated easily by loading a .tap or .tzx with a loading screen. The size will be displayed as 6914 bytes instead of 6912.

Arcade joystick detected but not saved

image

Whenever I try to save it gets reset to None so I can't use my arcade USB joystick 'Hori Fighting Stick Mini' (seen as DPAD for stick directions).
Zero 0.8, Windows 10

Support loading of symbols for debug

It would be very useful to be able to define a text file with a list of symbols, so that debugger memory locations for CALL, JP, JR, ... and memory (variables) could be replaced to aid debugging.

Sample listing of symbols
image

Then if symbols are loaded, we would get:

CALL BALLB
JR NZ, KBEND
JP EXIT

instead of:

CALL 25011
JR NZ, 24827
JP 24834

It would also be very nice to show labels in monitor window, column "address", next to it's value, using existing symbol definitions. It could be used to document ROM entry points too.

Font size changed, and several windows are affected

Not sure exactly when this happened or why, but the font size, changed after I saved the settings.
And now most windows text (example: Registers Windows) is being clipped vertically, because it is too large to fit the expected area.

Monitor Window fails to show proper instruction

When doing a step into, on a call or similar, when it jumps, the window sometimes, incorrectly fails to show the proper code disassembly.

The symptons seem to be that the windows is starting to decode a byte sooner then it should.
But once we step once, again ti reverts to normal behaviour.

Example code in Assembly

lineSignX DB 1

RenderLine:
LD A, D
SUB B
LD H, A
...

When jumping to the routine Render line, it shows
LD BC, 907A

Because it's decoding the bytes: 01 7a 90
Hence why I mentioned that it seems to be starting one byte too early.

Doesn't compile with the SlimDX library

The DirectSound library and SDK is deprecated, and I didn't want to install it, so I tried to compile with the SOUND_SLIMDX preprocessor directive.

I had to install the SlimDX Nuget package.

However the code fails to compile with:

Error CS1061	'SoundManager' does not contain a definition for 'LockBuffer' and no accessible extension method 'LockBuffer' accepting a first argument of type 'SoundManager' could be found (are you missing a using directive or an assembly reference?)	Speccy	C:\source\Zero-Emulator\Ziggy\Speccy\zxSpectrum.cs	7924	Active

The LockBuffer and UnlockBuffer methods are only available with the DirectX mode, but are called from common code.

Support ZX Printer

Support at least printer functionality when it relates to LPRINT, i.e. simple text and user defined chars.

Ubuntu PPA needed

Is there any Ubuntu PPA for this emulator? And where can we find a .deb package of it?

Support hex addresses in monitor window

when option "View" » "Hex Numbers" is selected, monitor window shows "Address" column in Hex but CALL, JR, JP , etc .. instructions still show input address in decimal.

Se last instruction in following screenshot
image

NOTE: Address are easily readable in hex from "bytes" column, if one knows how instructions are coded (just need to swap the correct bytes), but it would be more consistent to have address in "instruction" column also represented in hex, when hex is selected.

Saving preferences does not keep display size

If we go to: Tools -> Preferences -> Display

There is a drop-down for "Window Size:" and no matter what we set it to, and making sure we "Save", it won't keep the setting for the next run/launch.

Feature: Support Hex better in memory viewer

If the debugger is in Hex Number mode, the memory viewer, should default to show 16 bytes per line.

Ideally, memory viewer should allow to resize the "bytes" column into any width, and adjust the number of bytes we would see per line, hence also adjust the "Address" column stride factor, and the width of the "Characters " column too.

NOTE: Changing either "bytes" or "characters" column widths, should have the same side-effects, as defined above.

WARNING: while adjusting these widths, the top most visible line, should be reasonably maintained (we we are no in the beginning of the memory view), so that it starts in a multiple of the current width, without straying way from what the user is currently looking at (besides the multiple or reminder of the width).

Computer sleep breaks emulator

If computer is left for a while and sleeps/hibernates, when it wakes up, emulator window has a big white background with a red cross and border on it, and emulation no longer works.

Probably related with system timers, that don't get fired after waked up, screen resources or something similar.

Support SNA saving

SNA is used by hardware devices, like DIVMMC, and it would be helpful to support this format, specially when one wants to quickly test something on real hardware.

Watch Memory tool does not support address input in an App coherent form

The only possible address input is decimal.

This input should be using a standardized function to work like the other address inputs, that also support HEX input, in the format: $FFFF

By the way this function should also accept HEX in the format #FFFF, since many assembler of the 80's also did.
And Pasmo also does support this #FFFF format.

[Feature Request] Add options to control creation of log file

Whenever I start Zero by double-clicking an associated file like a .tzx or .z80, it creates a ZeroLog.txt file in the directory where the TZX or Z80 snapshot file is located.
Can you please provide an option to turn off the creation of this file and / or place them in a single location e.g. in a Zero folder in my APPDATA folder or C:\ProgramData\Zero or similar?

Add memory map

A simple map which can identify parts of memory that are code and data.

Load Symbols ... Should parse the symbol value in any of the formats supported by the Emulator

The emulator supports decimal and hex ($FFFF format).
Hopefully in the near future it will also suport HEX (#FFFF format).

However, CSV value column parsing is only accepting a decimal value.
This value parsing should be coherent across all features of the Emulator.

I would also like to ask for a new feature: to also support parsing regular assembly language value listings, like the ones generated by Pasmo, that uses the EQU keyword, instead of a comma. (should be an easy thing to implement)

Pasmo sample:

BLACK EQU 00000H
BLUE EQU 00001H
CYAN EQU 00005H
GREEN EQU 00004H
MAGENTA EQU 00003H
RED EQU 00002H
WHITE EQU 00007H
YELLOW EQU 00006H
BRIGHT EQU 00040H
FLASH EQU 00080H

NOTE: Pasmo uses yet another format for HEX number, with a trailing H.
If that could also be supported accross the Emulator it would be great.

Auto read Symbols file, when starting debug session

It would be very useful to load the symbols file automatically once a debugger session has been started.
And by automatically, I mean check if there is a symbol file (with the correct extension), with the same name as the loaded file (TAP z80 or other).

Alternatively, a confirmation prompt could be popped up, if the symbol file exists.

Crash loading some TZX and Z80

Here are the files: https://1drv.ms/u/s!ApMUGr0cuN39-kpb5rRoosOT-eSF

They make Zero 0.7.1 crash instantly with error:

Le informazioni su come richiamare il debug JIT (Just-In-Time) anziché questa finestra
sono riportate in fondo al messaggio.

************** Testo dell'eccezione **************
System.IndexOutOfRangeException: Indice oltre i limiti della matrice.
   in Peripherals.Z80Loader.LoadZ80(Stream fs)
   in Peripherals.Z80Loader.LoadZ80(String filename)
   in ZeroWin.Form1.LoadZXFile(String filename)
   in ZeroWin.Form1.openFileMenuItem1_Click(Object sender, EventArgs e)
   in System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   in System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
   in System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   in System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   in System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   in System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   in System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   in System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   in System.Windows.Forms.Control.WndProc(Message& m)
   in System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   in System.Windows.Forms.ToolStrip.WndProc(Message& m)
   in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Assembly caricati **************
mscorlib
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
Zero
    Versione assembly: 1.0.0.0
    Versione Win32: 1.0.0.0
    Base di codice: file:///C:/Users/Luca/Zero/Zero.exe
----------------------------------------
System.Windows.Forms
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8750 (QFE.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Speccy
    Versione assembly: 1.0.0.0
    Versione Win32: 1.0.0.0
    Base di codice: file:///C:/Users/Luca/Zero/Speccy.DLL
----------------------------------------
Microsoft.DirectX.DirectInput
    Versione assembly: 1.0.2902.0
    Versione Win32: 5.04.00.2904
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.DirectInput/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.DirectInput.dll
----------------------------------------
System.Windows.Forms.resources
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_it_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
Peripherals
    Versione assembly: 1.0.0.0
    Versione Win32: 1.0.0.0
    Base di codice: file:///C:/Users/Luca/Zero/Peripherals.DLL
----------------------------------------
System.Core
    Versione assembly: 3.5.0.0
    Versione Win32: 3.5.30729.8763 built by: WinRel
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
Microsoft.DirectX
    Versione assembly: 1.0.2902.0
    Versione Win32: 5.04.00.2904
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.dll
----------------------------------------
System.Configuration
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
mscorlib.resources
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
ZeroSound
    Versione assembly: 1.0.0.0
    Versione Win32: 1.0.0.0
    Base di codice: file:///C:/Users/Luca/Zero/ZeroSound.DLL
----------------------------------------
Microsoft.DirectX.DirectSound
    Versione assembly: 1.0.2902.0
    Versione Win32: 5.04.00.2904
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.DirectSound/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.DirectSound.dll
----------------------------------------
Microsoft.VisualC
    Versione assembly: 8.0.0.0
    Versione Win32: 8.00.50727.9268
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualC/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualC.dll
----------------------------------------
Microsoft.DirectX.Direct3D
    Versione assembly: 1.0.2902.0
    Versione Win32: 9.05.132.0000
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.Direct3D/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.Direct3D.dll
----------------------------------------
Microsoft.DirectX.Direct3DX
    Versione assembly: 1.0.2911.0
    Versione Win32: 9.12.589.0000
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.Direct3DX/1.0.2911.0__31bf3856ad364e35/Microsoft.DirectX.Direct3DX.dll
----------------------------------------

************** Debug JIT **************
Per attivare il debug JIT, è necessario impostare il valore
jitDebugging nella sezione system.windows.forms del file di configurazione
dell'applicazione o del computer (machine.config).
L'applicazione inoltre deve essere compilata con il debug
attivato.

Ad esempio:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Quando il debug JIT è attivato, tutte le eccezioni non gestite
vengono inviate al debugger JIT registrato nel computer,
anziché essere gestite da questa finestra di dialogo.


Le informazioni su come richiamare il debug JIT (Just-In-Time) anziché questa finestra
sono riportate in fondo al messaggio.

************** Testo dell'eccezione **************
System.IndexOutOfRangeException: Indice oltre i limiti della matrice.
   in Peripherals.Z80Loader.LoadZ80(Stream fs)
   in Peripherals.Z80Loader.LoadZ80(String filename)
   in ZeroWin.Form1.LoadZXFile(String filename)
   in ZeroWin.Form1.openFileMenuItem1_Click(Object sender, EventArgs e)
   in System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   in System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
   in System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   in System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   in System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   in System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   in System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   in System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   in System.Windows.Forms.Control.WndProc(Message& m)
   in System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   in System.Windows.Forms.ToolStrip.WndProc(Message& m)
   in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Assembly caricati **************
mscorlib
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
Zero
    Versione assembly: 1.0.0.0
    Versione Win32: 1.0.0.0
    Base di codice: file:///C:/Users/Luca/Zero/Zero.exe
----------------------------------------
System.Windows.Forms
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8750 (QFE.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Speccy
    Versione assembly: 1.0.0.0
    Versione Win32: 1.0.0.0
    Base di codice: file:///C:/Users/Luca/Zero/Speccy.DLL
----------------------------------------
Microsoft.DirectX.DirectInput
    Versione assembly: 1.0.2902.0
    Versione Win32: 5.04.00.2904
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.DirectInput/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.DirectInput.dll
----------------------------------------
System.Windows.Forms.resources
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_it_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
Peripherals
    Versione assembly: 1.0.0.0
    Versione Win32: 1.0.0.0
    Base di codice: file:///C:/Users/Luca/Zero/Peripherals.DLL
----------------------------------------
System.Core
    Versione assembly: 3.5.0.0
    Versione Win32: 3.5.30729.8763 built by: WinRel
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
Microsoft.DirectX
    Versione assembly: 1.0.2902.0
    Versione Win32: 5.04.00.2904
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.dll
----------------------------------------
System.Configuration
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
mscorlib.resources
    Versione assembly: 2.0.0.0
    Versione Win32: 2.0.50727.8745 (WinRel.050727-8700)
    Base di codice: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
ZeroSound
    Versione assembly: 1.0.0.0
    Versione Win32: 1.0.0.0
    Base di codice: file:///C:/Users/Luca/Zero/ZeroSound.DLL
----------------------------------------
Microsoft.DirectX.DirectSound
    Versione assembly: 1.0.2902.0
    Versione Win32: 5.04.00.2904
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.DirectSound/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.DirectSound.dll
----------------------------------------
Microsoft.VisualC
    Versione assembly: 8.0.0.0
    Versione Win32: 8.00.50727.9268
    Base di codice: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualC/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualC.dll
----------------------------------------
Microsoft.DirectX.Direct3D
    Versione assembly: 1.0.2902.0
    Versione Win32: 9.05.132.0000
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.Direct3D/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.Direct3D.dll
----------------------------------------
Microsoft.DirectX.Direct3DX
    Versione assembly: 1.0.2911.0
    Versione Win32: 9.12.589.0000
    Base di codice: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.Direct3DX/1.0.2911.0__31bf3856ad364e35/Microsoft.DirectX.Direct3DX.dll
----------------------------------------

************** Debug JIT **************
Per attivare il debug JIT, è necessario impostare il valore
jitDebugging nella sezione system.windows.forms del file di configurazione
dell'applicazione o del computer (machine.config).
L'applicazione inoltre deve essere compilata con il debug
attivato.

Ad esempio:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Quando il debug JIT è attivato, tutte le eccezioni non gestite
vengono inviate al debugger JIT registrato nel computer,
anziché essere gestite da questa finestra di dialogo.


After changing ROM file to something unsupported, Zero will fail to re-start.

I was trying to test a Cartridge ROM (QBERT), and using Zero GUI, browsed to a "QBert.bin" file (not a .ROM file).

It failed to load, asked to select a folder for ROMs, which I tried to give the original Zero "roms" folder, but it failed again, and quit.

On restart of Zero, it has no ROM, so it complains and enters the same process to define a correct ROM, but fails again and again. IT doesn't seem to recognize it's own "roms" folder.

I had a look at "Zero.exe.config" file, but it's not being used, since it's modified date is older than it's create date.

It's probably using Windows Registry to keep it's settings, but I haven't found it's registry folder or key yet.

Resuming, I can't run ZERO now, unless I re-install.

Fix or workaround please, since I plan to test a lot of ROMs.

Feature: Provide a Stack data view

Spec for a new feature:

Either in Register window (preferred), or as a separate window, provide a vertical list that grows down like a stack.

  • This window should show WORD values, since Stack works in byte pairs.

  • The stack must have a column showing the addr of each line (which will jump 2 by 2 for obvious reasons)
    Since Word values have the high part higher in memory and since SP always points to the Lower part of the last Word psuhed into Stack, the stack Value Column should be on the Left side and the "Addr Column" to be on the Right side of the view table.

  • The Stack should show higher addresses on top, and lower on bottom, hence stack PUSH goes DOWN in memory and on screen, and stack POPs goes UP in memory and on screen.

  • The stack, should have a pointer/arrow/cursor showing the current location of SP
    This pointer should be located between the Value Column and "Addr Column", so that it points to the correct byte defined by SP.

  • Stack usually starts high, since it grows down, hence when showing the stack it should maximize the visible contents of the stack.
    When PUSHing into the stack, the stack pointer/arrow/cursor should force a scroll up (contents move up in view), if it tries to pass the bottom, hence ensuring that the SP location is still visible.
    When POPing the stack, the stack pointer/arrow/cursor should force a scroll down (contents move down in view), if it tries to pass above the middle vertical of the available view height, unless this is not possible, when the top of the view is already showing the top of memory (#FFFE and #FFFF)

  • Be mindful that stack can wrap.
    The most common wrap is from #0000 to #FFFE, after the first PUSH, when using the TOP of memory as Stack space.

  • It should be possible to scroll the stack view using a scrollbar, and hence having the side effect of making the SP pointer/arrow/cursor invisible.
    SP should return to normal visibility as soon as Write (PUSH) or read (POP) is done, i.e. every time SP is changed by the running program.

  • Stack view, should always show a minimum of 8 entries (16 bytes)

  • If the window resizes vertically, show more of the stack.
    If resize is a reduction of vertical height, there is no need to adjust the view so that stack pointer/arrow/cursor is visible, since any change in SP will do that, and not adjusting the view avoids making the view jump around when interactively resizing the window.

  • The Addr Column data, should be greyed out, to not be the focus of the viewer, but function just as a visual aid.

Example Output, using ASCII ART:

Value| Addr
-----|------
A000 | FFFE
BF32 | FFFC
0025 | FFFA
CDFE | FFF8
1783 | FFF4
9378 | FFF2
0001 | FFF0
0100 |< FFEE

Alternatively, we could have a visualization that showed 2 Addr columns one on each side of the "Value Column", which would allow to clrealy show the High and Low Addr

AddrH | Value | AddrL
------|-------|-------
FFFF | A000 | FFFE
FFFD | BF32 | FFFC
FFFB | 0025 | FFFA
FFF9 | CDFE | FFF8
FFF5 | 1783 | FFF4
FFF3 | 9378 | FFF2
FFF1 | 0001 | FFF0
FFFD |0100 |< FFEE

Experimentaly, I would suggest for the addr columns to be in inverse video, i.e. PAPER would be dark gray, INK should be white, in order to allow a high contrast between the actual stack data and the addr data.

Warning: Nothing prevents the SP to point to be an Odd or Even addr, so don't hardcode the Addr column(s) to be specifically even or odd.

Support screen recording into animated GIF image format

Zero already allows us to save a spectrum session using a RZX format.

But without an emulator running this is not very useful for web use.

Being able to either convert an RZX into an Animated GIF, with palette minimized to spectrum 15 colors (to save space), would be very useful to generate Animated GIFs to show Spectrum "video" content online, with little effort.

Better yet, would be to be able to select between RZX or GIF format, and use the same GUI features used to save an RZX, to actually save an Animated GIF, for web use,

Crash after sleep or hibernation

After windows 10 sleeps or hibernates, graphical interface no longer works and the program aborts.

NOTE:
I have reported this before and apparently it was fixed, but now it's back again.

Reloading a TZX shifts breakpoints display

First Load a TZX, then define a few breakpoints in monitor window.

Reload the TZX.
Some breakpoint marks (red) may not be on the correct lines.

The issue is not 100% repeatable, every time.
Maybe some other step is required, that I haven't noticed yet.

I sometimes also mark breakpoints using the "tools" » "Breakpoints Editor", and maybe it's related with this issue.

Memory Variable View

Currently there is a "Memory viewer" window, that allows to check memory contents.

However, it would be really helpful to be able to define:

  • a memory address
  • optionally a name

and the have a list of these pairs, and corresponding memory contents, listed in a new "watch" window.

These items could be loaded, base on symbols (address, that have a name), to defined these view variables.

Every time we hit a breakpoint or step debug, this window contents (memory values) are updated.

Unable to run emulator from Visual Studio 2017

I am able to run zero.exe when built from VS2017 by double-clicking on the exe from file explorer. However, I am unable to run from visual studio as it crashes (an exception) when instantiating Form1. I've installed the DirectX SDK. Is there something I am doing wrong?

Does not start on Win8

Error in event log:
Application: Zero.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
Stack:
at ZeroWin.Form1..ctor()
at ZeroWin.Program.Main()

(directx was installed from ms site, but issue still persists)

Support extra breakpoint debug conditions

Provide support for further breakpoint conditions, besides "equal" ("larger then", "smaller then"), and support also "different", so that we can break when memory or register changes value.

Providing a count condition, would also be very useful.
i.e. the breakpoint will only work (AKA STOP execution), after a pre-defined amount of previous triggers.

Also the breakpoint dialog, could be made more intuitive, since currently it's confusing to use, due to the @address field sometimes used as value for condition testing.
Just declare the proper fields, and enable/disabled them, when selecting the breakpoint condition.

Feature: Registers window click on value should be smarter

Every single register value, if clicked makes the Monitor disassembly window to jump to that address.

For some registers this makes sense, like PC for example.
For others not so much (SP).
For general purpose registers (BC, DE, HL) or Index registers (IX, IY) depends on what the value means currently on the code.

So I would suggest the following, by default on LEFT CLICK:

  • PC or IR or MP (A.K.A. WZ) -> jump Monitor dissassembly to that addr
  • SP -> open and/or jump Memory Viewer to that addr
  • All other registers, open and/or jump Memory Viewer to that addr

If user SHIFT + LEFT CLICK, to the opposite of the default ( Monitor dissassembly or Memory Viewer)

If user RIGHT CLICKs, present a popup providing a choice (to jump to Monitor dissassembly or Memory Viewer )

Watch Memory tool, should support size or type

The most obvious problems is looking at a byte or word value, due to the byte ordering.

The bare minimum, I would say are 3 types:

  • Char
    Value representation, should be shown in decimal, Hex and as Character, all simultaneously.
    Alternatively run time selection of visual format, during creation and/or directly in the watch table.
    ( this allows to have a single value column for all watched variables.

  • Byte (signed or unsigned)
    Value representation, should be shown in decimal or Hex, simultaneously.
    Alternatively run time selection of visual format, during creation and/or directly in the watch table.

WARNING: you may need to provide a different type for signed versus unsigned

  • Word
    Value representation, should be shown in decimal or Hex, simultaneously.
    Alternatively run time selection of visual format, during creation and/or directly in the watch table.

WARNING: you may need to provide a different type for signed versus unsigned

However, it would be ideal, if we could watch an ARRAY (of any of these types), by allowing to select a size (different from 1, the default)
This would allow to watch Arrays and also as rudimentary data Struct visualization.

TIP: An Array, could be visualized as sub list of rows, of N elements/lines of that selected type, i.e. one element per row.

Incorrect full screen aspect ratio

Even with option to keep aspect ratio in fullscreen... it appears incorrect here (Windows 10 x64 14393.576, 1080p 75Hz). Looks a little bit squashed vertically...

Is is possible to properly reference resources int the project/solution ?

i.e. making the references relative to the project -
VS can't find them ;/ :

Error CS1719 Error opening Win32 resource file 'C:\Users\arjun\Documents\Zero-Emulator\ZiggyWin\ZiggyWin\zeroIconResource.res' -- 'Could not find a part of the path 'C:\Users\arjun\Documents\Zero-Emulator\ZiggyWin\ZiggyWin\zeroIconResource.res'.' ZeroWin C:\Users\user01\Downloads\zxsp\Zero-Emulator-master\ZiggyWin\ZiggyWin\CSC 1 Active

image

Bug - Bumpy.tap crashes Zero

LOAD "", using "Bumpy.tap" (get from WOS), will make Zero crash hard, and exit to windows.

NOTES:
Auto Load: OFF
Auto Play/Stop: ON
Fast Load: OFF
Edge Load: ON

Joystick settings are forgotten on quit

Zero.exe 0.7.1
Even if I set as Input Devices>Joystick
joy1: SPEED-LINK Competition Pro
emulates: Kempston
and Save, on next Zero.exe restart these info will be lost and I have to reconfigure the input device every time.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.