Showing posts with label ZX Spectrum. Show all posts
Showing posts with label ZX Spectrum. Show all posts

May 18, 2015

zxsp 0.8.pre27: Multiface ONE, 128 and +3

Hello,

Three new members in the family of supported extensions: The Multiface ONE, 128 and +3 from Romantic Robots.

This time i scrutinized the circuits into depth and therefore the emulation should be near perfect. :-) There were different roms used in the MF1, evtl. also in the MF128, i don't know – i have included the most common.

The Multiface ONE had a Kempston-style joystick port which could be disabled by cutting a wire, in case another device also used this port. You can disable this port in zxsp too. If you attached the Kempston interface (e.g. you have enabled the auto-attach option in the preferences) and then at some time attach the Multiface ONE, then disabling this port is not strictly required, because an already attached USB joystick will happen to be magically plugged in both interfaces, and then both devices will react the same when a program reads a byte from the Kempston port. But disabling this port in the MF1 is probably more intuitive and leads to less unexpected misbehavior.

While looking at the circuits i noticed some interesting points:

The Multifaces do only react to an NMI generated by the own red button, not to any NMI.

The presence of the Multiface ONE could be detected by the running program if it paged in the MF1 rom, and probably at some point games started to test for it and complained if they detected this device.

The presence of the Multiface 128 could no longer be detected by the running software; Romantic Robots had added a flag which stored the visibility state of the interface, i called it the camouflage flag. Same time they wrote "PIRACY IS ILLEGAL! MULTIFACE 128 is NOT designed to encourage piracy!" into their manual – Words and actions are not always the same.

The Multiface +3 was unusable if a program mapped ram to address $0000. Romantic Robots silently did not mention this in their manual. But the circuit of the MF+3 is very clear: It has a flag which monitors the "special mode" bit written to the MMU of the Spectrum +3 and, if set, ignores any press of the button. The reason is quite clear: Amstrad had reworked the ZX Spectrum bus connector of the +3 and added a second line to disable the internal rom at address $0000 with highest comfort, but no possibility to disable ram at this address. Yes, the Spectrum was not their most beloved child…

zxsp displays the state of the most interesting flags in the Multiface, which is, for the MF1, whether an NMI is pending (and the NMI routine very likely already has been executed and any more pressing this button has no effect), for the MF128 whether it is visible and for the +3 whether the ZX Spectrum MMU was set to "special mode" which means ram at $0000 and a disabled Multiface.

The red button of all Multifaces is gated by the output of the NMI pending flip flop which is set by this button: If the button set the FF, then the FF's output immediately disabled the button. To my best understanding this is unnecessary and it does not work:
  • I believe it was meant to immediately stop the signal from the button, so that recursive NMI processing in the CPU could not happen. But the NMI is edge triggered: once active, it can be held active for years without triggering another NMI.
  • Once the FF was reset (by software) this disable signal disappeared and the FF was immediately set again, if the button was still pressed.
The last point might be tested with the real device if you press the red button and keep it pressed while you type 'r' on the keyboard to exit the Multiface menu. Then the Multiface should be immediately entered again. But it's not sure whether it will, because for this the NMI must go away for a long enough time so another edge can be detected by the Z80 CPU, but it only goes away for a tiny moment, just the round-trip time through one gate and the flip flop. Note: this is not reproduced in zxsp.

So, to all of you who owned a Multiface: Test your skills and revive memories. ;-).

     ... Kio !

April 26, 2015

zxsp 0.8.pre26: hE(ll)(oo) k(ee)(OO)

Got it?

"Hello Kio !"

Yeah, my Spectrum speaks.

Inspector for the Currah µSpeech digital speech unit
Thanks to the work of Joe Zbiciak and Frank Palazzolo, who had reverse engineered the SP0256 speech processor, i was able to implement an emulation of this chip and then of the Currah µSpeech interface in zxsp.
The SP0256-AL2 contains a cascade of six 2-pole filters, a rom with filter coefficients for British/American language and a micro sequencer, which feeds these values into the filter coefficients. All digital. The output is an 8 bit PWM.

Despite of the very comprehensive informations about the SP0256 chip on their website there were still some bits not clear to me. I filled in the gaps by own tests and looking at what other people did. (not too many of them…) And i emulated the double RC filter after the PWM output. Yeah!

I added an option to switch between the original 8 bit sound and the unrestricted approx. 14 bit output, but i can't hear any difference. :-)

At the bottom of the inspector widget i added a scroller which displays the spoken allophones.

Though most allophones are spoken as expected, i believe some are emulated wrong, e.g. "1" and "Y" sound a little bit like a "bass bump" and "?", spoken as "kw(ee)r(ee)", sounds more like "kneenee". But there is little i can do about this.

I found that there are three pairs of allophone tokens in the µSpeech unit which refer to the same allophone: "(ck)" and "(gg)" which refer to KK2, "(oo)" and "(eau)" for OW and "(aa)" and "(ay)" for allophone EY. On the other side, tokens for two allophones are missing: DH2 and GG2. Given the fact, that "CLEAR" and "CLS" are both spoken as "CLEAR", the µSpeech seemed to be released a little bit fast these days.

Technically the Currah µSpeech isn't a Z80 peripheral. It's more like a 6502 add-on. It uses memory-mapped i/o! I had to extend my Z80 emulation to handle that sort of things…

Final problem was the rom switching for this little beast: It toggle's between it's 2k rom and the ZX Spectrum's internal rom when a RST7, that is, when the regular timer interrupt is executed. Actually, the way i handled rom switching up to now could not handle this: It detected an opcode fetch at address 0x0038 in one rom, switched the rom and restarted the CPU at this address. Then it detected an opcode fetch at address 0x0038 in the other rom, switched the rom and restarted the CPU at this address. And so forth.


A final word about the Blog Editor: It's getting worse every day i write my next post. It's really so bad now, that i write my blog post in a text editor on my Mac and copy&paste it into this editor.

April 18, 2015

zxsp 0.8.0pre25: 4.75 cm/s

Hello,

long time not seen…

This release brings bug fixes, improved tape handling and the ability to load C sources.

Fixed bugs


(some are only intermediate bugs, not actually present in pre24)
  • Kempston mouse interface: Mouse grabbing & tracking did no longer work in Qt 5.x
  • Investigated and fixed audio interrupt drop-outs (thanks, Apple!)
  • Investigated and fixed paintEvent() overpainting child widgets in Qt 5.4 (thanks, Qt!)
  • Investigated regular unusually long interrupt runtime: WLAN-internet bridge! (thanks, Apple!)
  • Instand loading crashed at end of tape if tape was "running"
  • Inves could not load from tape recorder
  • Crash when accessing beyond allocated tracks of floppy, e.g. on empty side
  • Save tape utterly broken, crashed in CSW buffer decoding

Tape recorder


Load and save tape is now fully supported in all models.
Spectrum-type machines can load and save .tap, and .tzx.
ZX80 machines can load and save .o, .80 and .tzx.
ZX81 machines can load and save .p, .81, .p81 and .tzx.
The Jupiter Ace can load and save .tap and .tzx.

Additionally all models can load from real audio files like .wav and .aiff, but saving to audio file is not yet supported. E.g. you can insert a .wav file in the tape recorder and choose "save as" from the context menu and save it to a .tzx file.

All models can instant-load and instant-save tapes, if the rom routines are used. Loading tape files like a snapshot, e.g. by double clicking or by reload recent file, will set the tape recorder to instant-load, so, unless custom loading routines are used, loading a tape file is instantaneous.

While playing tapes now the typical sound is audible, which was missing for a while.

Record and play back from your Mac's audio-in and audio-out device is not yet fully supported. For recording i recommend to record the audio file with Audacity, but i have not yet tested whether it suffers from dropped audio interrupts, as zxsp did and, as far i can tell, even iTunes does (for playing). For playing the tape recorder of any machine can be used, though the audio level is currently a little bit low, because i didn't want to annoy you too much every time you load a tape. :-) Of course for playing real audio files any audio program can be used as well. ;-)

Recording your old tapes into .tap or .tzx files is now very easy: Just insert the audio file into the tape recorder and choose "save as" from the context menu to save it in another format.

Load assembler and C source files


Assembler source files are assembled using a built-in version of zasm, and the result, whatever it is, is loaded. zasm supports .sna, .z80, .o, .p and .tap files.

zxsp comes with a built-in executable of sdcc, a multi-target C compiler. Take a look at the zasm manual to see how to include C source files.


April 11, 2014

zxsp 0.8.0pre24: OMG!

Hello,

this is a bugfix release. A bugfix release was planned anyway, but suddenly it became very urgent, for two reasons:

  1. dyndns.com will stop their free DDNS service.
  2. a severe bug in zxsp made it crash when a usb joystick was attached.

New Domain

Please bookmark this new domain for all zxsp related web resources:

The links in the zxsp.zip are also updated, yo you may use them.
The URL of the blog does not change! :-)

Bug Fixes

  • Scanning for USB joysticks crashed, eventually right from the start
  • Reloading a HD image in a machine which can't attach the DivIDE interface crashed
  • Loading two or more files simultaneously crashed if they a loaded different models

  • Visualisation of compound keys on ZX128 and later did no longer animate the compound keys
  • Joysticks in TS2068 were swapped, fire button bit was wrong (bugger, WoS!)
  • Opening joystick inspector could reassign USB joysticks

Misc.

I have slightly modified the key mapping: The ESC key now generates the typical BREAK key(s) of the current machine: mostly SPACE + CAPS SHIFT on ZX Spectrum models, simply SPACE on ZX81 models. Activating extended mode now requires SYMBOL SHIFT + CAPS SHIFT to be pressed (as on real model) where i suggest to use CTRL + ALT on the real keyboard because the are adjacent.

final note:

OMG!

Why does nobody report when zxsp crashes? Bugs which are reported are fixed much faster, really!

    ... Kio !

P.S.:

Oh, i forgot the image: Right now i'm listening to:

You Are Adult.tap

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 !

November 23, 2013

zxsp 0.8.0pre22: Timex Sinclair 2068 family; Updated

Hello everybody,

and on it goes: 3 new models added! Ok, basically it's only one model which comes in 3 flavours:

The Timex Sinclair 2068 Family

  • The Timex Sinclair 2068 (USA)
  • The Timex Computer 2068 (Portugal)
  • The unipolbrit 2086 (Poland)
Technically they are very similar, not to say identical, but there are minor differences:
The US version runs with 60 Hz, the European variants with 50 Hz frame rate.
The Polish version had only one joystick port, the right port was replaced by a parallel "Centromix" port. But, *wonder*wonder*, *my* U2086 had 2 joystick ports! So currently the U2086 is also emulated with 2 joystick ports and no parallel printer port. I currently don't know of any software using the printer port anyway. Even the precise usage of some control pins are still discussed.

TCC dock inspector
These computers had a Rom module port, the so called Timex Command Cartridge dock. These are stored on .dck files nowadays and i have included some samples in this distribution. Only a very limited number of titles were ever produced by Timex – Androids, Budgeter, Casino1, Crazy Bugs, Flight Simulator, Pinball, States And Capitals, and Penetrator – but there are also some Sinclair Interface II adaptations and some emulators for various variants of the ZX Spectrum, especially the ZX Spectrum emulator itself. This was even bundled with every U2086 computer AFAIK.

Note: if someone has games or demos which use the AY sound chip and joysticks of these machines could he please be so kind and send me a copy? Thanks in advance!

Some people say that the "86" in unipolbrit 2086 is not a spelling error but a pun on 8086 or an indication of the year of release – but then "Centromix" is probably no spelling error either... B-)

Update: Instant load tape files is currently broken on these machines. You must disable instant tape loading and load them in realtime. This will be fixed in the next release.

Other Changes

I have added recent-files menus to the SPECTRA and Sinclair Interface II inspector as well to the Dock inspector. Inserting a rom now also adds it to the global "recent files" list as well so that CMD-R reloads it.
The TK95 got a rear-side joystick connector image and a real photo of the keyboard – not sure whether this is an improvement thou.





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 18, 2013

zxsp 0.8.0pre20: Lenslok!

Hi there,
Using Lenslok to decode the scrambled pattern
i've just dropped a new version of zxsp in the download folder.

This brings Lenslok support to the ZX Spectrum models and clones.

The Lenslok can be found in the Extensions menu. Drag it over the screen, follow the instructions to adjust the width of the 'H', click on the Lenslok to rotate it (and fold the hinges, but that's hard to see ;-) ) adjust position, type in the code and you are in! :-)) Click outside the Lenslok to dismiss it.

It works much better than the original device! If it was like that it'd had been fun to use. :-)

The virtual Lenslok has a tiny bit of magic built in to select the proper version for the current game, but in case the magic fails you can select the right game from the context menu of the lens.

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!

September 10, 2013

zxsp 0.8.0pre18: +3 Floppy Disc Drive support (updated)


zxsp 0.8.0pre18 is out now!

New supported machines in zxsp:

ZX Spectrum +3 English and Spanish version.

ZX Spectrum +3 disc drive
The NEC µPD765 emulation seems to work good, but sometimes i think zxsp reacts differently than the real machine. There is still plenty left for testing. The FDC765 is not very well documented. There are plenty of data sheets for the various clones* around, but somehow they have all just copied NECs data sheet, more or less.

*) The FDC in my +3 is a Zilog Z0765A.

Supported file format is currently .dsk only, others will follow in the next release.

The disc drive is the first item with sound effects! :-) I had a hard time making recordings of the various sounds. I have at least 10 microphones at home (telephone, cellphone, iPad, iMac, even ZX Spectrum recording hardware) but nothing really good or in working order. I finally resorted to the recordings i made with my iPad except for the stepping noise, which is 'hand crafted'.

In the floppy disc controller window you can insert and eject the disc by clicking on the slot or the eject button. The context menu provides options for creation of new discs and access to recently used discs.

Discs can be flipped side B up by clicking on the "B" label. You probably have to format most discs on this side before you can use it. This is done in Basic with:

format "A:"

where "A:" is the drive, not the side. ;-)

Discs can and probably should mostly be write protected. This can be checked and toggled in the context menu, when a disc is "inserted" or "ejected". (The "ejected" state is as shown in the above image.) The write protection state is simply the write protection state of the disc file.

If you double-click a .dsk file it will mostly open in a ZX Spectrum +3, except if your default machine or the currently open machine is a Spanish +3.

Please test the +3 disc emulation and report any problems. (or whether it works for you.)

    ... Kio !