Showing posts with label qt. Show all posts
Showing posts with label qt. Show all posts

April 1, 2014

zxsp 0.8.0pre23: DivIDE Hard Disc Interface

Hello everbody,

good news: this is no April's fool. zxsp 0.8.0pre23 has just been released.

New in this version: 

Emulation of the DivIDE hard disc interface.
Some bugs eliminated.
Some small improvements.
Lots of new bugs. :-/

Due to sucking Qt this version of zxsp is still linked against Qt 5.11; not 5.2, not 5.2.1 and not 5.3beta. Please visit QTBUG-37706 and vote it up.

And if you are on the Qt bug tracker site, vote this up as well: QTBUG-37918. And this one: QTBUG-33530. And this one: QTBUG-34160. And this one: QTCREATORBUG-10276. Just to make a starting point...

Open File Requester

Qt fails to open the file requester box in the requested directory for quite a few versions now. I have finally added a work-around.

Qt under certain conditions returns a directory though only files were requested. I have added a catch.

Debugger Disassembler View

Fixed a problem where the disassembler was not informed about memory configuration changes and would crash when reading from old memory.

Fixed colouring of assembler instruction at the CPU's programme counter.

Fixed that setting r/w/x breakpoints in the disassembler view corrupted the memory byte.

Added requested feature: Display in disassembler view now follows the PC while debugging and slow motion of the CPU (≤1000Hz).

Release Key "A" Error

When key "A" and a modifier key is down, if you release the modifier also released key "A" though it was still down. This is fixed in zxsp linked against Qt 5.3, but in this version, which is linked against Qt 5.11, it is replaced by some other wrong behaviour... Luckily enough this is pretty rare and only affects key "A" because the key code of this key is 0x00.

DivIDE Compact Flash and IDE Hard Disc Interface

This is the great new addition: support of the DivIDE interface. The interface can be added to most machines with a ZXSP system bus. zxsp remembers the recently used rom and hard disc file. Initially it defaults to esxDOS 0.8.5. From the context menu of the DivIDE inspector you can create new hard disc files which are preset with SYS/ and BIN/ folders for esxDOS 0.8.5. From my web site you can download hard disc image files for some different dos/versions with a bunch of demos and some games. Don't expect them all to work, at least not on every model. B-)

The yellow jumper: If you own a DivIDE interface you'll know it: it enables the rom (actually the automatic rom paging on certain hook addresses) and disables writing to the rom. If it is removed you can load a .tap file (or similar) and write it to the rom. I suggest to save the rom thereafter or next time you'll have to load it from .tap again.

The push button: This is the NMI button. if you click on it, it should start the waiting dos on your DivIDE interface which will show the hard disc's contents and provide some other functions as well. You can load quite a lot of different types of files in esxDOS: .tap, .scr, .sna, .z80, .trd and maybe others. But many files don't work / on every model. They don't work on the real thing as well (mostly, probably).

The hard disc image files: zxsp knows .img, .dmg, .iso and .hdf files. It does not support all variants of the .img and .dmg files, actually only the very basic uncompressed formats. You can mount them in OSX as well and fill in files. Then unmount them and insert them into the DivIDE interface. Note that the DivIDE interface can write to the disc image and eventually corrupt it, though this should not happen. From the DivIDE inspector context menu you can write protect the disc or you can write protect the image file itself in OSX. Creating a disc file which works with fatware is very tricky in OSX. Actually i don't know how to do it. But phoenix^ra supplied me with a .hdf image which works with fatware and i have made a .img file from it. You can download it from my web site. See link above.

Known and unknown Bugs

The current release of zxsp has some known bugs at the moment of release (as opposed to bugs known after releasing ;-) )

TS2068 emulation has some problems: it frequently crashes in Basic, e.g. if you try to save or load a file. Timex Command Cartridges (dock roms) seemingly work fine. If someone has an idea why Basic crashes every now and then i'll be thankful to know. I'm stuck.

Writing to tape probably only works if you enable instand load/save and write using the standard rom routines only.

There's still a lot on the TODO list.

    ... Kio !

March 27, 2014

Qt sucks...

Hi folks,

currently i'm a little bit pi**ed with Qt. The more they move to portable devices the more the desktop versions, maybe except Linux, are neglected and fall behind.

I think i have now posted the 20th or 30th bug report. Actually i wanted to write code for zxsp, not bug reports... but Qt becomes more and more unusable.

Here the images posted with QTBUG-37918:

Memory Hex Inspector in Qt 5.2 Memory Hex Inspector in Qt 5.3b1

AY Inspector in Qt5.2 AY Inspector in Qt5.3 AY Inspector in Qt5.3




QtDesigner has a lot of issues, e.g. vanishing mouse pointer, problem with dead keys, debugger not working, crashing on first breakpoint, weird formats chosen to display data. Scrollbars don't work properly. Tool windows do not hide when the App is in background, setting a folder for a file selector box does not work, file selector box may return folder instead of file, file selector box does not update itself when another file filter is chosen by the user, actions with submenus added to more than one menu do not work. I'm pissed.

    ... Kio !


November 1, 2013

zxsp 0.8.0pre21: misc. old stuff

Hi Folks,

bad news: i can't make up my mind for a picture. A blog post without a photo? – wait – there will be one, at the end of the post, maybe. :-)

New in this version:

misc. old stuff

"misc." consists of the following:

Video Beam Indicator

Yeah! Finally, the video beam indicator is back again. Right now only for the color machines, but the b&w machines know exactly where the beam currently is anyway. ;-)

The video beam indicator is a red&yellow blinking cursor at the current position of the video beam. It is activated when the cpu clock is throttled down to 100 kHz or less or when you single step in the debugger. This is an aid for anybody who wants to write a demo with some critical timing. For those who only want to play games it's a "nice to have" for curiosity. B-)

Load assembler source

Now it's possible (again) to load snapshots and tapes from assembler source. The source will be compiled by the built-in zasm assembler and the resulting snapshot will be loaded as if it was initially selected to load. The source file is stored in the "recent files" list so that reloading it is easy.

It's not trivial to get the headers of .sna or .z80 files right, so i have included template files in this distribution.

Supported target file types for assembler sources are .sna, .z80, .ace, .rom and .tap.

Load .rom and .scr files

Also, it is now possible again to load .rom and .scr files. 

Load .rom files: Based on the rom size, the currently running machine and the default machine in the preferences, the application choses the best fitting machine and uses this to load the rom file. If am Interface 2 or a SPECTRA interface is attached, then 16K roms will load as a rom cartridge. Else they will replace the built-in rom.

Load scr files: If the current machine is a color machine, then the .scr screenshot is loaded into the currently displayed video ram of that machine. Else, based on the default machine in the preferences, a color machine is chosen and started, but probably the screenshot will not be displayed very long in this case. 

Load .tap and .dsk files

Tapes and disks can now be loaded like a snapshot. zxsp choses the best fitting machine based on the file type, the currently running machine and the default model in the preferences. Note: a tape or disk normally does not contain any easily retrievable information about the required machine, so you should select the desired machine before loading a tape or disk.

Load .dsk files: That's fairly easy, as these disk files can only be loaded into a ZX Spectrum +3. zxsp just tries to select the British or Spanish version based on the currently running machine and the default model, if the currently running machine is not a +3.

Load .tap files: These tape files can only be loaded into a color model or into the Jupiter Ace. zxsp tries to detect whether this is a Jupiter Ace tape and loads it into a Jupiter Ace, else it uses the currently running machine, if it is a color model, else it tries to determine the best model based on the default model, starts it and loads the .tap file. Most .tap files can be instant-loaded entirely, giving the impression of loading a snapshot. If the program uses it's own tape loader code, instant loading does not work and you have to wait until the tape is loaded. You may open the tape recorder window (if it isn't opened by default) and wind back and fore if required.

Load .tzx files: These tapes may be loaded into every model. zxsp can't tell beforehand which might be the best fitting one. So it loads a .tzx file always into the current machine. You should always start the desired machine before loading a .tzx file. Frequently .tzx files contain programs which use custom loaders. Then instant loading will not work and you have to wait for the game loading as normal.

Loading a tape like a snapshot vs. inserting a tape into the tape recorder
Tapes and disks are no snapshots. They contain the data of their respective represented media. When you double-click or open a tape or disk file with "open file", then zxsp secretly loads a snapshot which was saved at a point where it started to load a program from tape or disk and inserts the requested tape or disk into the respective drive. Additionally, it sets the tape recorder to instant-load. The result is, that it looks like zxsp is loading the tape or disk like a snapshot, though you now know it isn't.

This is a convenience feature, though. Normally you should launch the desired model, insert the tape into the tape recorder (or the disk into the disk drive) and type LOAD "" or similar. Then you get back more of the original feeling. You can select instant-load and auto-start-stop the tape here as well.

Load .tap files into the Jupiter Ace
You may not know it, but the Jupiter Ace had no load tape command with wildcard and it had no auto-start feature. So zxsp takes some effort to supply the tape loader snapshot with the required name. But it does not know which command is required to start the game or to load subsequent data blocks. Once the first dictionary is loaded you are alone. You may open the tape recorder and wind the tape fore and back to see the names of following blocks, but you'll have to pick the info on how to load them and how to start the game from it's documentation.

Display parameters for the b&w Ulas

I reworked the display of video parameters in the Ula inspector for all models, but especially the b&w models, which up to now just showed some default values collected from various sources in the net. They now show the actually used display parameters, though some, most notably the cpu cycles per scan line, still just show the nominal values.

Select 50 Hz or 60 Hz model for the TK clones

I have added a 50 Hz / 60 Hz switch to the Brazilian TK models. I'm not sure about the cpu clock for the color 50 Hz models. If someone owns a TK85, TK90X or TK95 could he please determine the model (50 vs 60) and tell me the quartz frequencies? 

Fixes:

Fixed a problem with the .ace files saved by zxsp. 
The two final bytes were missing and made them not load. :-|

Fixed spurious crash when switching between models.
This was annoying me for a long time now and i really thought it was Qt to blame. But it was my fault and the error only popped up at an unexpected place, misleading me for quite a while. Under certain race conditions a mutex was released twice and then another thread waiting for this thread to terminate crashed in it's wait position, somewhere deep in the library function. :-/ 
Actually this fix made me issue version pre21 today.

Image


An image, an image ...

.ace sample program loaded from assembler source animated gif file made with zxsp

October 10, 2013

zxsp 0.8.0pre19: New stuff for Jupiter Ace, Sound Fx and TS2020 tape recorder

Moin,

Timex Sinclair TS2020
a new version of zxsp is out now. There is no 'big' thing as in the last release, but several minor improvements and some 'less important' additions.

Jupiter Ace

Some errors in handling .tap files for Jupiter Ace have been eliminated. .tap files can be 'instant loaded' now. .ace snapshots can be loaded and saved. I have included 'WORMS' from the Jupiter Cantab demonstration tape in this release. A tiny game, just to show it works. To load it, type load worms get graphics game. There is no wildcard load and no auto-start on the Jupiter Ace!

Timex Sinclair TS2020

The b&w machines now use a TS2020 for their tape recorder. Not sure whether i should also use it for all other machines as well, except for those with built-in tape recorder. What's your opinion?
As with the +2 / +2A recorder, the pause button is used in conjunction with wind and rewind to auto-stop at block boundaries.

All tape recorders

I have added sound effects to the tape recorders. I hope you like it. :-)
I have also added new menu entries to the context menu, including a 'recent tapes...' menu.

New Qt version

This is the first release which uses Qt 5.x. This enables me to send bug reports for the current version. B-) The only visible difference (to my knowing) is the superfluous animation when starting/leaving full screen mode.

Have fun!

June 6, 2013

zxsp 0.8.0pre15: Screenshots for TC2048 and b&w machines

Hi,

i was busy working on GIF file export in zxsp, which i had temporarily disabled in 0.8.0pre14. GIF file export is now working for all models, that is, in addition to the ZX Spectrum compatible models you now can make screen shots from the TC2048 and ZX80, ZX81 and Jupiter ACE screens.

For the TC2048 i decided on a compromise, after i ran into a widely unsupported feature of gif files, the pixel aspect ratio. Screenshots of the TC2048 are made in the same 1x size as those of a ZX Spectrum. In most cases you will probably use the standard 32 column mode anyway and then this is what you want. If you make a screenshot when (parts of) the display is in 64 column mode, the image will be smoothly scaled down to 256 pixels width.

Weird Science Overscan Demo
Also new is that you can include full border animation in the gif file movies. There is an option right under the "Record gif movie" item to include or exclude border animation. In most cases this makes no difference, but when you make a movie from the loading process of a programme, then it's surely preferable not to include the border animation, because this will explode file size. On the other hand you may want to make a movie from a demo which performs some tricks with the border; then you want to record border changes.

While i was over the b&w gif movie support i also fixed some errors in the display of the ZX80 and ZX81 compatible machines, especially in 60 Hz mode.

TC2048 64 Column Mode ZX81 Silly Basic Demo

    ... Kio !

May 30, 2013

zxsp 0.8.0 pre 14: TC2048 Screen Modes

Hello everybody,

zxsp 0.8.0 pre14 is out now.

With this version zxsp gets (hopefully) full support for the Portuguese Timex TC2048 computer. Feel free to test it and compare it to a real machine and report any bugs you find. Otherwise they won't be fixed. :-)

As a temporary drawback creation of GIF images and movies is not supported in this version.

Screenshot from the TC2048Hi-ResColourDemo
In the course of TC2048 screen mode implementation i wanted to redesign some aspects of the screen output, basically make it more easy for me. For that i wanted to replace the native OpenGL calls with a convenience layer of Qt classes: QPainter and QImage. But to make the story short: i ran into another OpenGL-related bug, which will probably fixed in Qt 5.1. And for some other unclear problems i'm still stuck in Qt 4.8.4. What i have done is: i have split rendering of frames from the the actual display update, so that i don't have to deal with OpenGL stuff when modifying to the screen rendering routines. This works pretty well now. I have removed lots of optimizations, because it seems that OpenGL overhead is dominant compared to rendering of large arrays of pixels. So i render lots of pixels. Always. And then copy exactly one large image of the screen to the graphics card. 50 times a second. Demos which tended to not get 100% screen hits or stuttered a little, now run 100% smooth. At least on my iMac.

Here are the first screen shots:

Program used for this demo

The online editor of Blogger is such a crap thing... sorry...

Screen with 1:1 zoom

I'll have a look whether this can be smoothed instead of omitting every other pixel.

Screen with 2:1 zoom


May 21, 2013

zxsp 0.8.0 pre13: Tape Recorder Animation

Hello everybody,

after working for some time on my hardware projects, i'm back to zxsp for the next weeks or months.
I have released a new version yesterday.

What's new?

I have added animation to the tape recorder windows. Ok, version 0.7.2 had an animated tape recorder too, but for 0.8.0 this is new. :-)
There is the well-known green Walkman-style tape recorder, which is currently used for all models without built-in tape recorder, and internal tape drives for the plus2 and plus2A.

Working with the tape recorder

The buttons work mostly as on the original machine. Use EJECT to eject or insert a tape. The PAUSE button has an additional function: If down while winding back or forth the tape will stop at the start or end of the current data block. The green Walkman-style recorder has separate buttons for this.
Right-click in the tape recorder window to bring up an options menu. Here you can create and insert a new empty tape or temporarily switch instant-load or auto-start-stop on and of. The latter two options are set globally for new machines in the Preferences.

What's next?

If nothing breaks i'll now work on the additional screen modes for the Timex machines.

Greetings,

    ... Kio !

January 9, 2013

Good News & Bad News

Hi,

short story:


  1. My Mac is online again. 
  2. There won't be a PowerPC version of zxsp unless something very unlikely happens.

long story:


I tried to create a PowerPC version of zxsp for all those who have a nicely working Mac and don't want to buy a new one just for Intel's sake.

I need to compile Qt, because the precompiled version is Intel-only. done.
I need to figure out which options to use for ./configure. done.
I tried to compile. failed.
I'm lacking a PowerPC compiler.
I'm researching in the net. done.
Checked whether there is something i can install with MacPorts. riente.
I need to install XCode 3.2.6 to get a powerpc gcc and thereafter XCode 4.0 to fix what's messed up.
I found XCode 3.2 on my Snow Leopard install disk and installed it. Asked me to quit iTunes. iTunes wasn't running. Couldn't be quit. Couldn't be force quit. Mac couldn't be shut down. 
Power cycled my Mac. done.
Installed XCode 3.2 without having started iTunes before so it couldn't leave some trails in the system. worked.
XCode 3.2 provided an older version of the powerpc gcc. grrr...
I tried to compile zxsp. failed.
I searched, found and downloaded XCode 3.2.6, whoopy 4.1GB. done.
I installed XCode 3.2.6, or, erm, at least, what it liked to install. Basically everything except the development tools itself. grrr...
I checked whether i still could compile zxsp. failed.
I installed XCode 4.0.5 from the AppStore. done.
I checked whether i still could compile zxsp. failed.
I checked whether i could use XCode. Basically yes.
I tried to compile a project. Initially failed, but after updating some settings worked. done.
I checked whether i still could compile zxsp. failed.
I tried to compile Qt 4.8.3 from the saved sources. failed.
Meanwhile i had disposed the XCode 3.2 installation. But i thought, i could have saved the slightly older powerpc gcc files. I looked into the bundle of the XCode installer on the Snow Leopard disk and installed only those packages which seemed to be appropriate. If they were installed, i didn't find them.
I installed XCode 3.2 aga...
Kernel Panic.
Mac rebooted.
Kernel Panic.
Mac rebooted.
Kernel Panic.
Mac rebooted.
Kernel Panic.
I booted from the Snow Leopard installation disk.  ok.
Checked file system. ok.
Restored from Time Machine backup. 1h later: Failed.
Restored from older Time Machine Backup. 3h later: worked.
Booted. ok.
Checked online state. k1.dyndns.org not responding.
Checked local web server: running & serving.
Checked DynDns IP assignment. ok.
Fixed LAN settings. k1.dyndns.org online again.
Downloaded Qt source. (Qt stuff wasn't in the backup) done.
Compiled Qt. worked.
Compiled zxsp. worked.
Will i give it another try? Not on this Mac.


I'll accept a donated Mac Mini or similar...
(That's the very unlikely thing to happen...)

    ... Kio !

January 7, 2013

zxsp 0.8.0.pre11: Debugger

Hi,

i hope you had a nice trip through 2012 and arrived well in 2013.

What's new in this version?


Ad-hoc assembling in disass view
I still worked on the debugger and added Ad-hoc assembling in the disassembler view.

If you choose "Edit" in the button group and then click on a disassembled instruction you can immediately enter a new Z80 assembler opcode. While the line is valid it is shown in green and while it is invalid in red. If you hit "Enter" while it is valid, the current opcode is overwritten with the new data. If the new opcode is shorter or longer than the overwritten opcode, then NOPs are added to align the opcode end to the old opcode boundaries.

  • I have fixed some cosmetic issues in the memory editors. Now they zip to a full character size after a short moment after you have resized a window. 
  • The view which has keyboard focus is highlighted with a light green border and only here a blinking cursor is displayed.

Forecast


Though there are still a lot of ideas around the memory views, i'll consider this section "finished" for now and will probably work next on TC2048 screen modes.

I have checked whether i can make a G4/G5 version based on Qt. This is possible but requires me to build a Qt library from source, with proper settings. I think i'll do it, because there are still some people out there with PowerPCs, but it may take a while.

Switch to Qt 5.0 will take a while too. They have not yet even confirmed the bug. You could do me a favor and vote it up: bugs at qt-project/28804.

I'll suspend work on zxsp for a while to work on my hardware projects. I need a switch to something else now. I'll be back in ~2 months.

    ... Kio !




December 22, 2012

zxsp 0.8.0.pre10: Debugger

Let's the year's end rallye start...
(phht, i had to look up 'rallye'...)

The last weeks i was working on the debugger, especially on break points, and some cosmetic&nice stuff.

So what's new?

In Hex and Disass Memory Inspector:
  • Highlight opcode addressed by register
  • Indicate breakpoints
  • Set & clear Breakpoints
  • Edit memory

Editing in the Hex Memory Inspector

Color codes in the Hex Memory Inspector

The toolbar in the hex inspector now has a button group "Edit", "R", "W" + "X".

If you push down "Edit" you can directly edit the displayed hex data. Any editing is instantaneous. Note, that key input now goes to the edit field and no longer to the running machine. Currently it is not visually shown that the hex field has focus. That's on the ToDo list. Also you cannot yet edit in the Ascii field.

If you push down "R", "W" and/or "X" you are in breakpoint editor mode. Where ever you click you set or clear a breakpoint for Read, Write or Execute. Breakpoints are indicated with colored hex characters:
  • Blue = read
  • Green = Write
  • Red = Execute
  • and any combination, e.g. Yellow = Green+Red = Write+Execute.
If a register points to a certain memory address, the background of the bytes is colored:
  • red (pink) = PC
  • green = SP
  • cyan = HL
  • yellow = other registers
If you hover the mouse over the byte the register is displayed in the tooltip.

Editing in the Disass Inspector

PC highlight and the Edit mode popup in Disass View
The toolbar in the disass view now contains a popup menu for selecting edit mode or breakpoint mode. It has the same functionality as the button group in the hex view. I'm not sure which method is better. 
As in the hex view registers and breakpoints are indicated with colors. As you can see im the screenshot the colors are shown in the hex code column, except for the PC which is shown in the full row. 
If you have selected "Edit" you can edit memory in the hex code column. Again there is not yet a visual indicator that this view has keyboard focus. Also, while you can click on the disassembled opcode to toggle breakpoints you cannot yet edit the opcodes. This will come next.

Other Changes

The Disass inspector now tries to lock on actual opcode boundaries. But this can only be done 95% because this is unavoidably ambiguous.

Qt Version

As you may know Qt 5.0.0 was release yesterday. I have already tried to compile zxsp with Qt 5.0.0. Most code compiled with no problems, but i'm currently stuck because i probably ran into a bug in Qt 5.0.0: OpenGL drawing cannot be set to single buffer mode, but that's what i use in zxsp. Switching to double buffered mode is not trivial in this special case. I hope this is fixed quickly and the next version is compiled against Qt 5.0.0. We'll see.


Happy Christmas to all and a peaceful start into the new year!

    ... Kio !

St. Johann, Erlangen 2012-12-08

p.s: as written, we had a fire in our building and one apartment was completely destroyed.
If you start at the burnt-out flat and go 3 flats right and 6 floors up you may note the small black spot at my window, which is the "little-bat". :-)



December 7, 2012

zxsp 0.8.0.pre9: Memory Inspectors

And on it goes...

"0.8.0.pre9" is out.

What's new?
  • Audio input from standard audio input device
  • Memory inspectors. see screenshot. :-)
Screenshot of zxsp with memory (and some other) inspectors

22:30 It's late and i'm tired.

03:00 Fire in the building, smell of smoke, blue flashlights, -5°C, brrrr...

10:00 Front got a new painting (partially): black.

11:00 ok, back to zxsp!

Audio input

I must admit, this is a little bit kind of "forgotten". Audio input is now enabled by default, if the standard audio input device is compatible with the standard audio out device. Basically this requires the sampling frequencies to be the same. Audio-in selection and support for different sampling frequencies will be added some day in the future.

Memory Inspectors

They can be accessed from the "Windows" menu. 
There are 4 kinds of them: 
  • Hex Inspector
  • Disassembler Inspector
  • Graphical Inspector
  • Memory Access Inspector

Common Functions

All windows are updated in real-time. 
Most windows are freely resizable.

Data Source and Page Selector, Base Address
The first popup lets you select from 5 different kinds of sources: 
  • As seen by CPU: This will display the 64 kB which the CPU currently sees when reading (writing may differ). On some models memory is mirrored or some addresses are not mapped to any memory. Note: if you display memory which is repeatedly mapped to different physical ram or rom with a very large inspector window, then this will result in high CPU usage (of your Mac's CPU).
  • All Ram: Show (a section of) all ram. Memory order is as seen by the CPU for models with no paged memory and in sequence of page numbers for models with paged memory.
  • All Rom: Similar, except for the rom. Note: You cannot display the contents of an external rom, e.g. a rom cartridge, this way. But it can be displayed with "as seen by cpu".
  • Ram Pages: Limit view to certain ram pages. The "Page" popup is added to the tool bar. Ram pages typically range from 1 kB to 16 kB in size. On models with no memory paging the ram is divided into 16 kB chunks. 
  • Rom Pages: Similar, except for the rom.
The second popup let's you select the ram or rom page, if "Ram Pages" or "Rom Pages" is selected.

The address view shows the base address of the inspector display and a new address can be entered here.

Hex Inspector

Hex Inspector
Three fields are shown: The start address of the row, memory contents in hex and memory contents in ascii characters. Editing is not yet supported.
The display can be toggled between byte and word display.
There's a popup which let's you navigate quickly to the address in a register.
Two buttons let you quickly resize the window to 16 and 32 bytes per row.

Disassembler Inspector

Disassembler Inspector
The disassembler also shows three fields: Address of an instruction, up to 4 bytes which construct the instruction and the disassembled opcode.
There's also a quick "goto register" popup. 
Note that the disassembler currently does not try to "lock" to the real start of a Z80 opcode for the first line, so the first lines may always contain garbage, due to a misaligned window base address. 
It's nice to point it at some self-modifying code and watch how the addresses change. :-)
I plan to add a "import labels" option for some later release.

Graphical Inspector

Graphical Inspector: video ram; pixels and attributes

The graphical memory view lets you easily find where the graphics are stored or e.g. view the video ram in it's real layout. 
There's also a quick "goto register" popup and 
a "quick resize" button for 32 bytes per row.
You can make the window as tall as 1 byte per row to see 1-byte-wide graphics or e.g. a character set.

Memory Access Inspector

ZX80 Space Invaders running in 2 kB of ram
The optical highlight, due to it's colors, is the memory access inspector.
Every grid point represents one byte of memory and it's color is composed from red, green and blue.
Each color component has a distinct meaning:
  • Red: This address was executed by the CPU
  • Green: This address was written to by the CPU
  • Blue: This address was read by the CPU
These 3 color components combine to 8 base colors:
  • Black: not accessed
  • Red: executed
  • Green: written
  • Blue: read
  • Cyan: = Green + Blue = read and written
  • Yellow: = Red + Green  = executed and written
  • Magenta: = Red + Blue   = Executed & read: rarely seen.
  • White: = Red + Green + Blue = Executed, written & read.
Depending on the decay mode all color components may come in shades. White tends to be a little magenta'ish.

Decay modes:
  • Flash: The currently accessed memory only flashes once. The update speed is roughly 1/10 sec, so you'll see what has been accessed within 0.1 sec.
  • Decay fast: The displayed pixels are faded slowly, like on a very old oscilloscope. 
  • Decay slow: The displayed pixels are faded very slowly.
  • Accumulate: Pixels are not faded and the access information accumulates. This is good to determine code sections on a long run or to display access during single stepping the CPU.
A popup let's you select the grid size from 2x2 to 4x4.

The rightmost popup let's you select the display width from 32 bytes per row to 512 bytes per row.
The memory access inspector window cannot be resized freely.

Note: You can open as many inspectors as you like and fit on your screen, but the memory access inspector should only opened once, because it "consumes" meta information collected in the target machine. You could, however, open one for ram only and one for rom only, which will not interfere. Or for two different machines, as soon as multiple instances are supported by this version of zxsp.

Summary

These four memory inspectors give you a complete new insight into any scrutinized game! :-)

November 17, 2012

zxsp 0.8.0.pre8

Hello again,

Snapshot from the Dies Irae Demo, captured with zxsp
Starting with version 0.8.0.pre8 i am working on the debugger. Z80 register editing is implemented again and there is a memory inspector, if you select the 'Mmu' inspector in the Windows menu. Currently only the 'Bytes' display works, others will follow in the next release. Breakpoints are also still ahead.

During the work on this version i managed to freeze my Mac several times. I believe this should no longer be possible with nowadays operating systems, but it is. I suspect OpenGL is still somewhat instable in OSX.

During my work to fix this i worked on the screen display routines and also improved the behavior during window resizing.

New in this version:

  • CPU register editor
  • Memory display
  • Reduced flicker during window resize

CPU Register Editor

Values are committed with 'Return' and 'Tab'.

Memory Display

Only the 'Bytes' display works. You cannot edit memory, and select & copy also does not yet work.
The text widgets provided by Qt did not meet my needs so i have written my own text widget. The drawback is, that i have to implement stuff like copy&paste by myself.

    ... Kio !

2012-11-05: I was ill this week and instead of having 5 free days to work on zxsp i had 5 days i couldn't do anything. :-/

October 19, 2012

zxsp 0.8.0.pre7

Timex Sinclair 1500 Keyboard
Timex Sinclair 1500 Keyboard









Changes in this version:
  • Fixed: crash if started by double clicking on a snapshot file
  • CPU: halt, step in, out, over
  • AY inspector: edit registers
  • enabled TS1000, TS1500, TK85, TK90X, TK95 and TC2048 for testing purpose
  • made a lot of new photos, mostly of the b&w machines
  • Fixed keyboard support for the new b&w models
  • Added joystick support for TK90X and TK95
The poll has now been reseted twice by Google (or who ever).  :-(
Despite this it is useful for me!

Request for help:

I am looking for images of
  • TK95 keyboard at 90° angle, high resolution
  • TK95 rear view at ~45°
I am looking for technical specs for
  • TK85: joystick, rom, AY sound chip
  • TK90X joystick, wait cycles, known incompatibilities 
  • TK95 joystick, wait cycles, known incompatibilities


    ... Kio !

October 18, 2012

zxsp 0.8.0.pre6

Hello,

this is the start of some sporadic posts about my software projects. Featuring today: 

Space Invaders - animated game for ZX80
Currently i'm busy rewriting source from the latest public release for Qt. I switched to Qt 4 years ago but then suspended work because i worked on another project, my self-built cpu.
I switched to Qt because it has the better API and i don't have to bother with obj-c any more. I took the chance to do a redesign in order to separate model and view which will make the source better portable, if ever. Version 0.8.x marks the switch to Qt.
One major drawback comes with the use of Qt ( nothing comes for free :-/ ): I have to include a lot of Qt libraries which explodes the size of the binary. But on the other hand, hey, today even 10 or 20 MB take only a fraction of a minute to download...

The current state of zxsp is roughly like this:
  • ZX80, ZX81, Jupiter Ace, ZX Spectrum 48k, 128k, +2 and +2A emulation working flawless (i hope). 
  • load & save .z80 files
  • load & save other model-specific snapshot formats
  • read .tap and .tzx tape files
  • fast load standard tape blocks for ZX Spectrum models
  • misc. joystick interfaces, AY sound interfaces and Sinclair IF 2
  • USB Joystick support
  • Images of all machines and interfaces
  • virtual keyboards for all models
  • save gif snapshot and movies
Missing so far:
  • Debugger
  • Save to tape
  • Whatever was missing in 0.7.2
Not yet tested:
  • Audio input from standard microphone input
  • Audio output to speaker for models other than ZX Spectrum 
A new pre-version is ahead: 0.8.0pre6. I tried to fix some bugs in pre5.
What's new in 0.8.0pre6?
  • load ZX80 snapshot from .o or .80 file
  • load ZX81 snapshot from .p, .81 or .p81 file
  • Management of ToolWindows reworked
  • Re-organized source: Qt/, Mac/, Uni/
  • Splashscreen after start without snapshot  
  • reduced size (zip from ~15MB down to ~11MB)
I started this blog because this enables you to leave some feedback and because i have the faint memory that there is a possibility to make polls. Let's see...

    ... Kio !