arjunnair / zero-emulator Goto Github PK
View Code? Open in Web Editor NEWZero is a ZX Spectrum emulator for Windows, written using C#.
License: Other
Zero is a ZX Spectrum emulator for Windows, written using C#.
License: Other
FUSE and ZesarUX have both added support for the Recreated ZX Spectrum Bluetooth Keyboard in Mode A (Game Mode) - it would be great if Zero could support it too.
There's information on how the keyboard mapping works at http://zedcode.blogspot.com.es/2016/07/notes-on-recreated-zx-spectrum.html
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?
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,
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
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?
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.
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.
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.
Please update or add explanation in README.md
see https://github.com/ArjunNair/Zero-Emulator/blob/master/run/License.txt
Thx.
Currently there is a "Memory viewer" window, that allows to check memory contents.
However, it would be really helpful to be able to define:
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.
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
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.
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.
It would be very useful to be possible to enable/disable Breakpoints, instead of just having to delete them.
A simple map which can identify parts of memory that are code and data.
The TZX file at World of Spectrum for Heavy on the Magick does not load correctly. The same file loads without issue in other emulators.
Support at least printer functionality when it relates to LPRINT, i.e. simple text and user defined chars.
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.
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
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.
"Load Symbols ..." feature fails to load a file if it0s not inside the emulador run folder.
I went into the code to find this out, since the file although correctly formatted, would always fail.
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).
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)
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.
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
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.
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.
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.
I don't mean saving a snapshot of the whole computer state; just the program. Thanks!
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.
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.
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.
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.
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.
Zero.exe 0.7.1
I use a "Competition Pro USB arcade joystick SpeedLink SL-6603-SPORTS-EU" to play Spectrum games and since I stop touching the keyboard/mouse the display and then system can go in suspension mode ignoring the fact I'm playing with the emulator.
Please can you prevent this from happening?
https://msdn.microsoft.com/en-us/library/windows/desktop/aa373208(v=vs.85).aspx
Zero throws an exception that's unhandled when more than one instance is opened via file associations.
Steps to reproduce:
Zero loads all TZX and TAP files in an accelerated manner - given that one of the goals for this emulator is to be "highly accurate", it would be good if this was an option that could be turned off for a more authentic Spectrum loading experience.
Is there any Ubuntu PPA for this emulator? And where can we find a .deb package of it?
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.
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:
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 )
Would it be possible to duplicate the tape transport controls on the main window toolbar? It's quite inconvenient to always have to open the Tape Browser window to start a tape when edge/auto loading is turned off.
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...
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.
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.
Currently, double clicking an assembly code line, in debugger, doesn't setup a breakpoint realiably anymore.
This bug is really weird, since update the watched variables is the main purpose for this tool.
So if this is not working, then this tool is not working.
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.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.