Enable DISCiPLE on 128K machines
Thank you for reporting. It looks like an array access out of bounds that happens on a long running machine. #define ULA_CONTENTION_SIZE 80000 libspectrum_byte ula_contention[ ULA_CONTENTION_SIZE ]; libspectrum_byte ula_contention_no_mreq[ ULA_CONTENTION_SIZE ]; (gdb) print tstates $1 = 17062059
Fuse cannot load EDSK images without track data
Thank you. Committed in [51f4e2].
Fuse cannot merge disk sides with different bpt
Thank you. Committed in [edac60].
Allow to load unformatted EDSK disk images
Allow to merge disk sides with different bpt
Bug around EDSK "Stored data length" extension
Thank you. Committed in [d789c0].
Treat special "Stored data length" in EDSK images
Wrong padding for DSK/EDSK disk images
Thank you. Committed in [3af9c3].
Pad disk tracks to length multiple of 256 bytes
Error formatting disk with CP/M Plus
Thanks all. Committed in [ce0a65] and [ 84f7fe].
Add debugging info in uPD765 FDC
Fix SCAN bug in uPD765 FDC
So I figured the simplest way, bumping up nano + commit it It would be better if you don't manipulate micro and nano version numbers as could by defined by an official release, e.g, version 0.10.0.2 or 1.0.0.1. Also, I've noticed that the zin EXE file version info is from fuse_rc_version constant. Good, that means I can manipulate with the other one and extend it with "-20231013-master" or similar. The fuse_rc_version constant needs exactly 4 tokens and can't be extended for EXE properties. I suggest...
Is it maybe a bug in Cygwin ? Technically you are using mingw32 to compile C files and windres to compile the resource files. Windows is showing 6 digits, so the bug could be on Windows side, most likely an undefined behaviour when treating big version numbers. http://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=binutils/windint.h;h=73faabf85aa75728e9e7bd7a7e67bb7b48cd670a;hb=HEAD#l905 http://sourceware.org/git?p=binutils-gdb.git;a=blob;f=binutils/resrc.c;h=468e2fd8fe1d82b072d92766f063a9b2fedccc79;hb=HEAD#l3273...
Distribute sp0256.h and uspeech.h in source tarballs
Group empty memory mapping of Spectrum 16K on debugger
Add uSpeech block to snapdump
Currah µSpeech emulation
Currah µSpeech emulation
Thank you all. Finally merged in [c80f3d] and [e85c93]. After 16 years we can close this ticket.
Thank you!
Merge branch 'patches-142-currah-uspeech'
List Currah uSpeech as a supported peripheral
Merge branch 'patches-142-currah-uspeech'
Changes recently committed: Intonation change frequency of SP0256 [404a9b]. Avoid the use of 64-bit integers [0302d3]. Fusify C99 variable types (still C89) [c8f122]. This patch has evolved over last months and is a good state to be merged IMO. I'll merge it next week barring objections. Are there any must-have outstanding issues? Less important things that come to my mind are: Remove SPB-640 FIFO code. Currently entangled with the SP0256 emulation. Add a 5 kHz low pass filter alter generating samples...
Document sp0256 ROM
Document sp0256 ROM
Fusify C99 variable types (we are still C89)
Fusify C99 variable types (we are still C89)
Declare missing function prototypes and unused parameters
Disable debugging macros
Avoid the use of 64-bit integers
uSpeech intonation changes SP0256 clock frequency
So, here is the"fuse-uspeech-comparision" PCM, just two tracks mixed together, real uSpeech unit goes first, then the same repeated by the FUSE with intonation.diff applied. FUSE's part is easy to spot, it has a loud leading click, this is the button press sound missing from the uSpeech recording which was taken directly from the uSpeech 3.5mm jack. Thank you Vic. Recordings from real hardware are very valuable. My ear is not well trained but sounds quite good to me. Real uSpeech sounds a bit more...
It's unclear to me why timings are multiplied by 4 in original ivoice_tk(). Maybe because DIGITAL OUT pin output a 40-kHz square wave when the device is not speaking. Nonsense. Seems something specific to Intellivision. CPU is clocked at 1/4 of a 7.16 MHz crystal. https://forums.atariage.com/topic/253007-intv-clock/?do=findComment&comment=3517169
This patch improves intonation as Kio and Thome Busse determined that oscillator frequency for low intonation is about 3.05 MHz and high intonation is 7% higher, i.e., 3.26 MHz. As SP0256 and Z80 have different clocks, timings can't compare t-states of both chips, so a SP0256 sample duration is based on Z80 processor speed. Alternatively ZXSP emulator calculate sample duration in time rather than t-states, which ease synchronisation with spectrum frames.
SP0256 code has been updated from upstream jzIntv emulator (version 20200712) in [881373]: Use arithmetic operators when using signed data as bitwise operators have undefined behaviour. sp0256_datafmt table has been extended with an alternate opcode 0001 (LOADALL) as doesn't always update F5/B5. It's unclear to me why timings are multiplied by 4 in original ivoice_tk(). Maybe because DIGITAL OUT pin output a 40-kHz square wave when the device is not speaking.
Thank you Vic. Don't worth doing more tests. Limited to 48K machines in [bd36f2]
Audio glitches fixed in [adc075].
Limit uSpeech to 48K machines
Add uSpeech page/unpage events to debugger
Document uSpeech volume option
Beautify uSpeech code with uncrustify
Update SP0256 code from upstream
Fix audio glitches in SP0256 samples
Thanks all.
Spectranet is broken as of (at least) 1.6.0
I think it's related to this change in sound_beeper(): https://sourceforge.net/p/fuse-emulator/fuse/ci/d6c9fa6a81f9b189fac249f50efb972b9fdf71ba/tree/sound.c?diff=0e7de75994ee1a9bfff4ea09168f2f8d03fa1fe5 if( tape_is_playing() ) { /* Timex machines have no loading noise */ if( !settings_current.sound_load || machine_current->timex ) on = on & 0x02; } else { /* ULA book says that MIC only isn't enough to drive the speaker as output voltage is below the 1.4v threshold */ if( on == 1 ) on = 0; } We mute...
Tape saving noise (ULA MIC bit)
Still in the list of things to review and test, sorry. There is real hardware and a few software. Apparently the hardware was not commercially sold but schematics distributed by magazines, right?
fix: Fixed running unittest checks which require gzip, but gzip was not enabled or available.
Sure. Merged in [8b374c]. Thank you.
Merge request #13: Fixed unittest checks that require gzip
GitHub test and nightly (master) build workflows + patches
Thank you. Merged in [7718c3].
Merge request #25: GitHub test and nightly builds
Build only if something got merged - OK, can be done. Also will help cut down on needed manual deletions in Source Forge. One drawback only. If something changes in Libspectrum, Fuse will have to be pinged manually. IMO it's acceptable. Changes that affect only libspectrum are less likely and will be picked up sooner or later. Version identification - if you're fine with setting official (sort of) version to such nightly build, then this does not need TEST build process. Only set "build" portion...
Looks good to me. Some thoughts... A build is made every night even if there aren't changes. That could be a waste of resources and confuse users. Maybe you could store the last commit hash and trigger the build only on master branch changes? It's preferable to identify source version rather than build date. Last commit on master branch was made on June. Probably versioning as 1.6.0-20230611 or 1.6.0-81efcbce would help on user's feedback. The message when the application starts seems annoying to...
I've checked the clicks and pops audible in the speaker and spotted the cause. The SDP0256 scratch buffer have signed 16 bit samples but we write only the most significant byte as an unsigned byte (losing data): sound_sp0256_write( sp0256_tstates + ((n + i) * factor), (s->scratch[(i + old_idx) & SCBUF_MASK]) >> 8 ); and in sound_sp0256_write() we scale the unsigned byte to a signed integer: blip_synth_update( left_sp0256_synth, f, ( val - 128) * 128); Possible solutions are: Pass 16 bits samples...
Address mirroring patch committed in [2324c3].
Add memory address mirroring and more I/O ports to uSpeech
Maybe I have formulated it wrongly.. now that I look at my message again. It does not force 48K mode, it switches ROM to 48K rom page, keeping 128K ram memory available. Would make sense if somebody made some SW for combination of that HW and 128K Spectrum. If there’s nothing like that, then indeed this is not needed at all. I think a similar solution is changing the 128 ROM: ./fuse -m 128 --rom-128-0 roms/48.rom --uspeech That would do RAM accessible. But if real uSpeech doesn't run on an unmodified...
Here is zxsp's implementation, it includes some clarifying comments from kio and T. Busse. Thank you Vic. Kio has tested the interface and is a valuable source of information. He has made it's own implementation of SDP0256, i.e., not based on jzIntv emulator.
I made a patch settings checkbox for combination D40 and Spectrum 128K. It limits IO address decoder by additional bit and forces 48k mode. Maybe it could be generalized for more use cases. Or add 48k mode of any Spectrum 128k as a separate settings checkbox. Thank you Miroslav. I was wondering if Stuart had some thoughts about 128K compatibility. IMO there is little improvement if we are forcing a 48k mode. It's simpler to limit the peripheral to 48K machines
Under windows, in SDL mode, it is not possible to increase or decrease the window size with the mouse (not full screen). Is that on purpose or a missing feature ? Most likely nobody has cared about that feature. The SDL UI on Windows hasn't been much tested. It's just the SDL UI for other OS recompiled for Windows. Currently we limit window size to integer scalers (1x, 2x, etc) because back in the day was an efficient way to scale. Unfortunately there is code to restrict to these sizes that makes...
Not sure if this is a bug or not, but when I open the fuse emulator now (.TAP file) it does not let me pull to scale out the program window size. This only started happening today. Any ideas/workarounds or solutions would be much appreciated. Alternatively you can choose the window size in Options -> Filter
I noticed that, when full screen, the aspect ratio appears to be incorrect, and I was wondering if there is a way I can correct this? You can set the resolution used in fullscreen mode. List available modes: ./fuse --sdl-fullscreen-mode list and then select the prefered mode: ./fuse --sdl-fullscreen-mode <mode>
Works Currah uSpeech on a Spectrum 128K? It works only if I do a NMI and reboot into 48K mode. There is a positive post on WOS: https://worldofspectrum.org/forums/discussion/comment/149871/#Comment_149871 And a negative post on SC: https://spectrumcomputing.co.uk/forums/viewtopic.php?p=63411&sid=5213fd8d1fa2266bc62b95d6d1ab6c6e#p63411 On a real +2 it only works with a hardware hack to boot into 48k mode: https://worldofspectrum.org/forums/discussion/54035/
Works Currah uSpeech on a Spectrum 128K? I cant only work if I do a NMI and reboot into 48K mode. There is a positive post on WOS: https://worldofspectrum.org/forums/discussion/comment/149871/#Comment_149871 And a negative post on SC: https://spectrumcomputing.co.uk/forums/viewtopic.php?p=63411&sid=5213fd8d1fa2266bc62b95d6d1ab6c6e#p63411 On a real +2 it only works with a hardware hack to boot into 48k mode: https://worldofspectrum.org/forums/discussion/54035/
This patch adds address mirroring on memory read (0x1000), memory write (0x1000, 0x3000 and 0x3001) according to Thomas Busse tests. Also adds input I/O on 0x1000 and output I/O on 0x1000, 0x3000 and 0x3001. It's unclear to me why we check memory writes to 0x0038, 0x1000, 0x3000 and 0x3001 after trying to write to ROM.
Thomas Busse tests claim: The uSpeech 2k ROM (0-07ffh) is mirrored at 0800h-0fffh. If the uSpeech ROM is enabled the original ZX Spectrum is not accessible, i.e. the addresses 1000h-3fffh do not contain ZX Spectrum ROM when read. Commit [47275a] does ZX Spectrum ROM inaccessible. Memory holes test works now.
Do ZX Spectrum ROM inaccessible while uSpeech is paged
I think there is a discrepancy in the menu.c::MENU_CALLBACK_WITH_ACTION, where the indices for ROM entries have a wrong order making it impossible to update ROM file location for anything below "Opus Discovery". The following patch should fix it: Thank you Vic. Fixed in [4ac128].
Fix ROM entries order in menu.c
Kio's web page is another source of technical info: https://k1.spdns.de/Vintage/Sinclair/82/Peripherals/Currah%20uSpeech/Technical%20Information/
For those that want to test without building. Here's automated build/release for this branch. I myself don't have the needed roms, but the device is listed under sound HW. Only win32 + win SDL so far. Also, I'm interested in hearing what you think about these kind of builds. Thank you Arki55, much appreciated. That allows non-techy users to test new features. I'm not sure if there are many users interested in this branch, though. IMO automating the master branch would have more interest, as a kind...
I was trying Colour Clash... everything works with uSpeech enabled. I guess it says the failure of the original code is expected. Hence, safe to ignore? Thank you. I couldn't reproduce your steps, but if game instructions don't claim uSpeech support, it doesn't matter much.
There are currently patches-142-currah-uspeech branches on both libspectrum and fuse projects with latest development. https://sourceforge.net/p/fuse-emulator/libspectrum/ci/patches-142-currah-uspeech/tree/ https://sourceforge.net/p/fuse-emulator/fuse/ci/patches-142-currah-uspeech/tree/
Document SP0256 ROM option and uSpeech memory source
Enable snapshot support for Currah uSpeech
Enhanced Currah uSpeech paging logic:
Add UI elements to manage SP0256 ROM file location
Initial support for Currah uSpeech peripheral
Enable SZX support for Currah uSpeech
Note info loss of uSpeech when writing dsnap, sna or z80 snapshots
I can run the Romik's tzx fine on latest Fuse (Win), or do you mean "with uSpeech" instead of "without"? I've made more tests and can load ColourClash without uSpeech if I disable loader detection (--no-detect-loader). With uSpeech crash on both 16k and 48k machines. IMO the proper way to test this title is with --no-detect-loader option.
Thank you Vic. Snapshots enabled, per https://www.spectaculator.com/docs/zx-state/uspeech.shtml. The uspeech ROM and SP0256 ROM are NOT persisted, if I understand it correctly, that would be an unofficial addition to the SZX spec. Frankly, I am not sure how to implemented it, too. If there aren't different ROM versions there isn't any advantage by storing the ROM files. IMO it's OK to stick with this implementation for the time being. If we extend the SZX block, intonation high/normal would be a...
Thank you Vic. Snapshots enabled, per https://www.spectaculator.com/docs/zx-state/uspeech.shtml. The uspeech ROM and SP0256 ROM are NOT persisted, if I understand it correctly, that would be an unofficial addition to the SZX spec. Frankly, I am not sure how to implemented it, too. If there aren't different ROM versions there isn't any advantage by storing the ROM files. IMO it's OK to stick with this implementation for the time being. If we extend the SZX block, intonation high/normal would be a...
Thank you Vic. I've fixed a few bits to make it working with current git version. Booty seems to work now. Currently you need a uspeech.rom file (2 Kb) in roms folder: CRC32 = ce7cf52e SHA1 = 90dbba5afbf07949df9cbdcb0a8ec0b106340422 MD5 = 052f6af718337e35e76693723e1d73e3 and a sp0256_1.bin (2 Kb) file in the working directory: CRC32 = b504ac15 SHA1 = e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc MD5 = c6fe422a12d834b34c54956782ec5f81 The sp0256_1.bin rom file can be downloaded from spatula-city.org, but...
It looks like the compressed versions (*.raw.bz2, *.img.gz, ...) are still there. D'oh! I missed that. But before removing those I would take a closer look at the full list, I'm not sure that things like .csw should have the ZX Spectrum icon. Do you mind reviewing the file extensions list? .csw is mainly used for ZX Spectrum (and Amstrad?), but Corel Wordperfect also use that file extension. On Windows the last installed program usually takes control on supported extensions. But in case of doubt...
libgcrypto error when recording in competition mode
Thank you. Fixed in [6510b0].
Fix RZX recording in competition mode
Fix function prototypes due to enum/integer mismatch