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 !