tag:blogger.com,1999:blog-34450525560622620942024-03-13T16:42:56.621+01:00Kio's Software ProjectsMostly on my ZX Spectrum emulator zxsp for Mac OSX.Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-3445052556062262094.post-52015616576008019102016-09-26T19:08:00.000+02:002016-10-02T17:00:26.926+02:00Paypal<div style="color: red; font-weight: bold;">
Donation with Paypal is no longer possible. Paypal has "restricted" my account and is going to remove it. Reason: this blog. I tried to get response from Paypal, but they have not yet responded. update: They have now also removed their web form (for me, i presume).</div>
<div style="color: red; font-weight: bold;">
I got response for my email to euaup@paypal.com. They just answered with a text module enumerating everything imaginable related to copyright infringement.</div>
I don't know whether it's for an emulator in general or whether they think the emulated Multiface is an illegal cracking device or the Multiface emulation or whatever … they don't answer my request.
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-75577276149686580722015-05-18T18:52:00.002+02:002015-05-18T18:52:57.637+02:00zxsp 0.8.pre27: Multiface ONE, 128 and +3Hello,
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN90rn7L5cgErQYpfisl9qloAa6wBfrcpCGRMkLLzEsnb7nbQ0uQFoGau_iLiPoVAZtDrDVlNFL1-cb_F6q3diXt0kDxwI1nNvPDKmlPRjV_FMoyaC1ka_gQPV7sNSLs1_X-RHtmEsOA0/s1600/MF1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN90rn7L5cgErQYpfisl9qloAa6wBfrcpCGRMkLLzEsnb7nbQ0uQFoGau_iLiPoVAZtDrDVlNFL1-cb_F6q3diXt0kDxwI1nNvPDKmlPRjV_FMoyaC1ka_gQPV7sNSLs1_X-RHtmEsOA0/s320/MF1.png" /></a></div>
Three new members in the family of supported extensions: The Multiface ONE, 128 and +3 from Romantic Robots.
<br />
<br />
This time i scrutinized the circuits into depth and therefore the emulation should be near perfect. <b>:-)</b>
There were different roms used in the MF1, evtl. also in the MF128, i don't know – i have included the most common.
<br />
<br />
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.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi8gG04AAJyaAKAAVZlY7eFtlhXhSeaKJkcr_N_dE_gl1jSR8DzNzv_1In62GzCUtBu31aOXGVXPdac2A-X_5SieWHQ_B9YSTY7kaeKf5-mrGSRhUmes7xN8z8nF3-ApgxcFFsr4Au_tY/s1600/MF128.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi8gG04AAJyaAKAAVZlY7eFtlhXhSeaKJkcr_N_dE_gl1jSR8DzNzv_1In62GzCUtBu31aOXGVXPdac2A-X_5SieWHQ_B9YSTY7kaeKf5-mrGSRhUmes7xN8z8nF3-ApgxcFFsr4Au_tY/s320/MF128.png" /></a></div>
<b>While looking at the circuits i noticed some interesting points:</b>
<br />
<br />
The Multifaces do only react to an NMI generated by the own red button, not to any NMI.
<br />
<br />
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.
<br />
<br />
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 <i>"PIRACY IS ILLEGAL! MULTIFACE 128 is NOT designed to encourage piracy!"</i> into their manual – Words and actions are not always the same.
<br />
<br />
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…
<br />
<br />
<b>zxsp</b> 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.
<br />
<br />
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:
<br />
<ul>
<li>
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.</li>
<li>
Once the FF was reset (by software) this disable signal disappeared and the FF was immediately set again, if the button was still pressed.</li>
</ul>
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.
<br />
<br />
So, to all of you who owned a Multiface: Test your skills and revive memories. <b>;-)</b>.
<br />
<br />
... Kio !
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com1tag:blogger.com,1999:blog-3445052556062262094.post-89914390221306155162015-04-26T20:51:00.000+02:002015-04-26T20:51:16.766+02:00zxsp 0.8.pre26: hE(ll)(oo) k(ee)(OO)Got it?<br />
<h1>"Hello Kio !"</h1>
Yeah, my Spectrum speaks.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" style="float: left; margin-right: 1em; text-align: left;">
<tbody>
<tr>
<td style="text-align: center;">
<img border="0"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbTAYS0Qjo6po6gWu9_0KbHKQigmm9Q12CidSI_Bzg0vfzTLuUykYDRoNTVUXq4pvh72AqWtjNwTprrG7oaXqK030sw2FcVhMdB-Og-Tr-y5HrlITTAf5YeWoBkflOrfglr6DOQduIg-U/s1600/2015-04-26+Currah+%C2%B5Speech.jpg" style="margin-left: auto; margin-right: auto;" />
</td>
</tr>
<tr>
<td class="tr-caption" style="text-align: center;">Inspector for the Currah µSpeech digital speech unit
</td>
</tr>
</tbody>
</table>
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.<br />
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.<br />
<br/>
Despite of the very comprehensive informations about the SP0256 chip on <a href="http://spatula-city.org/~im14u2c/intv/tech/sp0256_instr_set.html" target="_blank">their website</a> 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. <b>Yeah!</b>
<br />
<br />
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. <b>:-)</b>
<br />
<br />
At the bottom of the inspector widget i added a scroller which displays the spoken allophones.
<br />
<br />
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.
<br />
<br />
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.
<br />
<br />
Technically the Currah µSpeech isn't a Z80 peripheral. It's more like a 6502 add-on. It uses <u>memory-mapped i/o!</u> I had to extend my Z80 emulation to handle that sort of things…
<br />
<br />
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.
<br />
<br />
<br />
<span style="background-color: yellow;"><b>A final word about the Blog Editor: </b>
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. </span>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com8tag:blogger.com,1999:blog-3445052556062262094.post-69602401869508457052015-04-18T19:53:00.000+02:002015-04-18T19:57:18.587+02:00zxsp 0.8.0pre25: 4.75 cm/sHello,
<br />
<br />
long time not seen…
<br />
<br />
This release brings bug fixes, improved tape handling and the ability to load C sources.
<br />
<br />
<h1>
Fixed bugs</h1>
<br />
(some are only intermediate bugs, not actually present in pre24)
<br />
<ul>
<li>Kempston mouse interface: Mouse grabbing & tracking did no longer work in Qt 5.x
</li>
<li>Investigated and fixed audio interrupt drop-outs (thanks, Apple!)
</li>
<li>Investigated and fixed paintEvent() overpainting child widgets in Qt 5.4 (thanks, Qt!)
</li>
<li>Investigated regular unusually long interrupt runtime: WLAN-internet bridge! (thanks, Apple!)
</li>
<li>Instand loading crashed at end of tape if tape was "running"
</li>
<li>Inves could not load from tape recorder
</li>
<li>Crash when accessing beyond allocated tracks of floppy, e.g. on empty side
</li>
<li>Save tape utterly broken, crashed in CSW buffer decoding
</li>
</ul>
<br />
<h1>
Tape recorder</h1>
<br />
Load and save tape is now fully supported in all models.<br />
Spectrum-type machines can load and save <i>.tap,</i> and .<i>tzx</i>.<br />
ZX80 machines can load and save <i>.o</i>, <i>.80</i> and <i>.tzx</i>.<br />
ZX81 machines can load and save <i>.p</i>, <i>.81</i>, <i>.p81</i> and <i>.tzx</i>.<br />
The Jupiter Ace can load and save <i>.tap</i> and <i>.tzx</i>.<br />
<br />
Additionally all models can load from <b>real audio files</b> like <i>.wav</i> and <i>.aiff</i>, 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 <i>.tzx</i> file.<br />
<br />
All models can <b>instant-load</b> and <b>instant-save</b> 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.<br />
<br />
While playing tapes now the typical sound is audible, which was missing for a while.<br />
<br />
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. ;-)<br />
<br />
Recording your old tapes into <i>.tap</i> or .<i>tzx</i> 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.<br />
<br />
<h1>
Load assembler and C source files</h1>
<br />
Assembler source files are assembled using a built-in version of <i>zasm</i>, and the result, whatever it is, is loaded. <i>zasm</i> supports <i>.sna</i>, <i>.z80</i>, <i>.o</i>, <i>.p</i> and <i>.tap</i> files.<br />
<br />
zxsp comes with a built-in executable of <i>sdcc</i>, a multi-target C compiler. Take a look at the <a href="http://k1.spdns.de/Develop/Projects/zasm-4.0/Documentation/" target="_blank">zasm manual</a> to see how to include C source files.<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com2tag:blogger.com,1999:blog-3445052556062262094.post-46724604748566173662014-04-11T21:20:00.001+02:002014-04-11T21:20:42.274+02:00zxsp 0.8.0pre24: OMG!<p>Hello,</p>
<p>this is a bugfix release. A bugfix release was planned anyway, but suddenly it became very urgent, for two reasons:</p>
<ol>
<li>dyndns.com will stop their free DDNS service.</li>
<li>a severe bug in zxsp made it crash when a usb joystick was attached.</li>
</ol>
<h3>New Domain</h3>
<p>Please bookmark this new domain for all zxsp related web resources:</p>
<ul>
<li><a href="http://k1.spdns.de/" target="_blank">k1.spdns.de</a></li>
</ul>
<p>The links in the zxsp.zip are also updated, yo you may use them.
<br/>The URL of the blog does not change! <b>:-)</b></p>
<h3>Bug Fixes</h3>
<ul>
<li>Scanning for USB joysticks crashed, eventually right from the start</li>
<li>Reloading a HD image in a machine which can't attach the DivIDE interface crashed</li>
<li>Loading two or more files simultaneously crashed if they a loaded different models</li>
</ul>
<p/>
<ul>
<li>Visualisation of compound keys on ZX128 and later did no longer animate the compound keys</li>
<li>Joysticks in TS2068 were swapped, fire button bit was wrong (bugger, WoS!)</li>
<li>Opening joystick inspector could reassign USB joysticks</li>
</ul>
<h3>Misc.</h3>
<p>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.</p>
<p>final note:</p>
<p/>
<h3>OMG!</h3>
<p>Why does nobody report when zxsp crashes? Bugs which are reported are fixed <u>much</u> faster, really!
<br/>
<br/>
... Kio !
<br/>
</p>
<h3>P.S.:</h3>
<p>Oh, i forgot the image: Right now i'm listening to:
<br/>
</p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMfn81LWafo7TLkB4_4n4KAAXhKdwtzZpL9coCHCpYM2dX-Zzx_y4CIGsSVVIaWLC_e_Hrhjjk6aLaRqASXUSCEIOMQAkk7Q9eXqr9cHxgWWddqWV5rLh0eq6aHmjDb-cYsnAZeRPu97E/s1600/You+Are+Adult+%5B2014-04-11+20:56:43%5D.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMfn81LWafo7TLkB4_4n4KAAXhKdwtzZpL9coCHCpYM2dX-Zzx_y4CIGsSVVIaWLC_e_Hrhjjk6aLaRqASXUSCEIOMQAkk7Q9eXqr9cHxgWWddqWV5rLh0eq6aHmjDb-cYsnAZeRPu97E/s1600/You+Are+Adult+%5B2014-04-11+20:56:43%5D.gif" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">You Are Adult.tap</td></tr>
</tbody></table>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com5tag:blogger.com,1999:blog-3445052556062262094.post-23394445185592340212014-04-01T17:33:00.001+02:002014-04-11T23:13:56.095+02:00zxsp 0.8.0pre23: DivIDE Hard Disc InterfaceHello everbody,<br />
<br />
good news: this is no April's fool. zxsp 0.8.0pre23 has just been released.<br />
<br />
<h3>
New in this version: </h3>
Emulation of the DivIDE hard disc interface.<br />
Some bugs eliminated.<br />
Some small improvements.<br />
Lots of new bugs. <b style="background-color: #ea9999;">:-/</b><br />
<br />
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 <a href="https://bugreports.qt-project.org/browse/QTBUG-37706" rel="nofollow" target="_blank">QTBUG-37706</a> and vote it up.<br />
<br />
And if you are on the Qt bug tracker site, vote this up as well: <a href="https://bugreports.qt-project.org/browse/QTBUG-37918" rel="nofollow" target="_blank">QTBUG-37918</a>. And this one: <a href="https://bugreports.qt-project.org/browse/QTBUG-33530" rel="nofollow" target="_blank">QTBUG-33530</a>. And this one: <a href="https://bugreports.qt-project.org/browse/QTBUG-34160" rel="nofollow" target="_blank">QTBUG-34160</a>. And this one: <a href="https://bugreports.qt-project.org/browse/QTCREATORBUG-10276" rel="nofollow" target="_blank">QTCREATORBUG-10276</a>. Just to make a starting point...<br />
<br />
<h3>
Open File Requester</h3>
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.<br />
<br />
Qt under certain conditions returns a directory though only files were requested. I have added a catch.<br />
<br />
<h3>
Debugger Disassembler View</h3>
Fixed a problem where the disassembler was not informed about memory configuration changes and would crash when reading from old memory.<br />
<br />
Fixed colouring of assembler instruction at the CPU's programme counter.<br />
<br />
Fixed that setting r/w/x breakpoints in the disassembler view corrupted the memory byte.<br />
<br />
Added requested feature: Display in disassembler view now follows the PC while debugging and slow motion of the CPU (≤1000Hz).<br />
<br />
<h3>
Release Key "A" Error</h3>
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.<br />
<br />
<h3>
DivIDE Compact Flash and IDE Hard Disc Interface</h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWjU9bAn4LMpc_Mz9frOuBoUWkjDP7hOxSXMt7BfxBu5OW06b4_cs1nvMQ6p8PnWtaHBUZKx6XSfShpqQJEGqIZJC8Fj9gD-DsCD-fX-bl4-c5hCIu7n-czUsHankmPillOljE75xzIoI/s1600/Bildschirmfoto+2014-03-26+um+20.04.32.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWjU9bAn4LMpc_Mz9frOuBoUWkjDP7hOxSXMt7BfxBu5OW06b4_cs1nvMQ6p8PnWtaHBUZKx6XSfShpqQJEGqIZJC8Fj9gD-DsCD-fX-bl4-c5hCIu7n-czUsHankmPillOljE75xzIoI/s1600/Bildschirmfoto+2014-03-26+um+20.04.32.png" height="254" width="320" /></a></div>
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 <i>SYS/ </i>and <i>BIN/ </i>folders for esxDOS 0.8.5. <a href="http://k1.spdns.de/Develop/projects/zxsp-osx/distributions/Examples/Hard%20Disc%20Images/" target="_blank">From my web site</a> 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. <span style="background-color: #cc0000;"><b>B-)</b></span><br />
<br />
<b>The yellow jumper:</b> 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.<br />
<br />
<b>The push button: </b>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).<br />
<br />
<b>The hard disc image files: </b>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 <span style="color: #3d85c6;">phoenix^ra</span> 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.<br />
<br />
<h3>
Known and unknown Bugs</h3>
The current release of zxsp has some known bugs at the moment of release (as opposed to bugs known after releasing <b style="background-color: #ffe599;">;-)</b> )<br />
<br />
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.<br />
<br />
Writing to tape probably only works if you enable instand load/save and write using the standard rom routines only.<br />
<br />
There's still a lot on the TODO list.<br />
<br />
... Kio !<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-89654019570707135452014-03-27T20:07:00.000+01:002014-03-27T20:15:24.608+01:00Qt sucks...Hi folks,<br />
<br />
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.<br />
<br />
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.<br />
<br />
Here the images posted with <a href="https://bugreports.qt-project.org/browse/QTBUG-37918" rel="nofollow" target="_blank">QTBUG-37918</a>:<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;">
<tbody>
<tr>
<td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxSOmTWAk2cyg4uIeNSZlT_pUclWWMRUanMnA8NUSjRgaEY6UifGcJVi523vC6I4Qzl8MfmQ10J8IUe1F09ZdWnzArNuLAjOAxP62UE6gwrzYCdZfSukqrA6KAAwSzDwaBcMpewMIRD10/s1600/screen+refreshed+in+Qt5.2.png" height="163" width="300" />
</td>
<td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjVguNFinjVDumqb6C4dDG5z1LGIgdcKSaNvr-XmKV3fTbAXsKJYbt_zAFUatnuM9CBbOUUehFpl31E7Hb7JXO54IC2WEaT9RPJvwfYAO0pXnJvf4GgE7oA1bwQjKbh0WZsl5I4YZSvRY/s1600/screen+refreshed+in+Qt5.3b1.png" height="163" width="300" />
</td>
</tr>
<tr>
<td class="tr-caption" style="text-align: center;">Memory Hex Inspector in Qt 5.2</td>
<td class="tr-caption" style="text-align: center;">Memory Hex Inspector in Qt 5.3b1</td>
</tr>
</tbody>
</table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;">
<tbody>
<tr>
<td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhOiISirN1PDwez6msjnbzscummD_Gv6J2s_L7BXV6nAC5Sm6DD-yvt4WZ433Q7K5c7CCfiFcdiSRwTVzZuPIbE9IBy0fShGZ_8VzYG8O-nsye2WoRBjjggWZaSNwanjVmMy6frwyGqdQ/s1600/screen+refreshed+in+Qt5.2+%25282%2529.png" height="310" width="200" /></td>
<td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit12FH4O1kgaN_11hGIX-L5gHirrf7KIZcOR7YPEuDu_X2zf01pqdna3YTzdlBhR3_hxkzewJQJXayVpoumScZ4cpDi-F07CGhnDf6qswXqw6sHVAiUcPHRATOEH8GuRC4ibIyUhnQZ78/s1600/screen+refreshed+in+Qt5.3b1+%25282a%2529.png" height="310" width="200" /></td>
<td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmSPAtkYUwue9O8tJUT-fZXNMah7G2lb51d_DTGIwxCG93Wk_spxu_QyPuTW1L0Qw58z8ohbmptEeBJNv0T7NjqKrVgYFwS4JawvNpYQCCPCu1vIifFpSDYyeTof8G34aKqYicoFZPvHE/s1600/screen+refreshed+in+Qt5.3b1+%25282b%2529.png" height="320" width="206" /></td>
</tr>
<tr>
<td class="tr-caption" style="text-align: center;">AY Inspector in Qt5.2</td>
<td class="tr-caption" style="text-align: center;">AY Inspector in Qt5.3</td>
<td class="tr-caption" style="text-align: center;">AY Inspector in Qt5.3</td>
</tr>
</tbody></table>
<br />
<br />
<br />
<br />
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.<br />
<br />
... Kio !<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-68520131046625420222013-12-27T14:27:00.001+01:002013-12-27T15:09:58.628+01:00Next version of zxsp delayedHi to all,<br />
<br />
i hope you had some nice christmas holidays and that you are looking forward to a smooth transition to a happy next year.<br />
<br />
The next version of zxsp is delayed:<br />
<br />
A friend of mine has had an apoplectic stroke and is only very slowly recovering recently, left half of body eventually remaining paralyzed. He's not the guy who had many friends, so every friend is important now and i visit him every day in hospital. This currently consumes most of my spare time and i have worked only little on zxsp. But with a little luck i'll at least release a new version which fixes tape i/o related errors in the TS2068 emulation within this year.<br />
<br />
Wish me luck,<br />
and wish him luck!<br />
<br />
... Kio !<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com2tag:blogger.com,1999:blog-3445052556062262094.post-77946061416387916442013-11-25T20:46:00.000+01:002013-11-30T14:28:46.356+01:00zxsp: Donate with Bitcoins (Update #2)<h3>Keep zxsp Running and Collect Karma Points</h3>
<p>Hello everybody,</p>
<p>i have added my Bitcoin wallet as a method for donations. I'm pretty new to this stuff, but i think i have done it right. If you have a wallet on your smartphone then you can scan the QR code, else click on the Bitcoin link or copy&paste my Bitcoin address into your wallet app.</p>
<p>What are your donations for? Besides of cheering me up and encouraging me to keep on working on zxsp, i will probably use them to get a paid Apple developer account which is US$99 per annum. It is required to put an app – free, free to play, or paid – in Apple's app store (plus 30% of any revenue).</p>
<p>With Mavericks they have tightened the screws once more: Now developers must register, or OSX will refuse to start their application unless the user has expressively allowed installation from any source. So i have considered to pay US$99 per year now, just to give away zxsp for free.</p>
<p>So, what are your donations for? Mostly for Apple, probably. <b style="background-color: #f4cccc;">:-/</b></p>
<p> ... Kio !</p>
<p>
<a href="bitcoin:1BJ9kY9qm7Mg2UKj9eZxPyK42mzkqe1LKf?amount=0.01&label=Thanks%204%20zxsp%20%3a-%29" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" width="200" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LDmSaXvcJibCYuu98iEiq5W3DAClxaZes3lPos7Hl3UYwVCLqb2yNvGUcGMKYwBoK7PdNI3VRxOgCKNIg79DW1xAoMuh311nev70UuFfbJHfukoxGW2h3wzlPp3euaNxpEFqFuYbfWQ/s200/MultiBit+-+zxsp+-+0.01+-+1BJ9kY9qm7Mg2UKj9eZxPyK42mzkqe1LKf.png"/></a>
If you have a <i>Bitcoin</i> wallet on your smartphone use the QR code to the left, else click on this link: <a href="bitcoin:1BJ9kY9qm7Mg2UKj9eZxPyK42mzkqe1LKf?amount=0.01&label=Thanks%204%20zxsp%20%3a-%29">1BJ9kY9qm7Mg2UKj9eZxPyK42mzkqe1LKf</a> or copy&paste the link into your wallet application.
<a href="litecoin:LZtPuXCwjM11XKEexrdArGmNSqXPjzmXCP?amount=0.5&label=Thanks%204%20zxsp%20%3a-%29" imageanchor="1" style="float: right; margin-top: 1em; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSV3BVrt5f2mWs4syPb7dbUfhM4uPevUa1EamMP_T7HEweg2wI9R-E6WUb3x2WPxnofF6fPexDU_SzbyKNS3LixZly0uwr6A-aBy5SWM16GibtqncUbo61ctc1kjUXe5Bhyphenhyphenz0yPmVqNEM/s1600/Litecoin-zxsp-0.5-LZtPuXCwjM11XKEexrdArGmNSqXPjzmXCP.png"/></a>
If you have a <i>Litecoin</i> wallet on your smartphone use the QR code to the right,
or click on the link: <a href="litecoin:LZtPuXCwjM11XKEexrdArGmNSqXPjzmXCP?amount=0.5&label=Thanks%204%20zxsp%20%3a-%29">LZtPuXCwjM11XKEexrdArGmNSqXPjzmXCP</a> or copy&paste the link into your wallet application.
</p>
<p>
You can also donate with <i>PayPal</i>:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display: inline; margin: 0px; padding: 0px;">
<input name="cmd" type="hidden" value="_s-xclick" />
<input name="hosted_button_id" type="hidden" value="9JF92KU8BZ97A" />
<input type="submit" value="Donate [EUR]" />
</form>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display: inline; margin: 0px; padding: 0px;">
<input name="cmd" type="hidden" value="_s-xclick" />
<input name="hosted_button_id" type="hidden" value="Z3LWJRSD8GUSY" />
<input type="submit" value="Donate [GBP]" />
</form>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display: inline; margin: 0px; padding: 0px;">
<input name="cmd" type="hidden" value="_s-xclick" />
<input name="hosted_button_id" type="hidden" value="NTP3AL4XA44CY" />
<input type="submit" value="Donate [USD]" />
</form>
</p>
<p>Add a comment which feature you'd like to see next or just say thank you. <b style="background-color: #ffe599;">:-)</b><br/>Donations will be used to cheer me up and keep me working on zxsp.</p>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-39997165294431660162013-11-23T18:10:00.000+01:002013-11-24T15:45:27.181+01:00zxsp 0.8.0pre22: Timex Sinclair 2068 family; UpdatedHello everybody,<br />
<br />
and on it goes: 3 new models added! Ok, basically it's only one model which comes in 3 flavours:<br />
<br />
<h3>
The Timex Sinclair 2068 Family</h3>
<ul>
<li>The Timex Sinclair 2068 (USA)</li>
<li>The Timex Computer 2068 (Portugal)</li>
<li>The unipolbrit 2086 (Poland)</li>
</ul>
Technically they are very similar, not to say identical, but there are minor differences:<br />
The US version runs with 60 Hz, the European variants with 50 Hz frame rate.<br />
The Polish version had only one joystick port, the right port was replaced by a parallel "Centromix" port. But, *wonder*wonder*, *my* <i>U2086</i> had 2 joystick ports! So currently the <i>U2086</i> 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.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjrVvaFackwR22_nW-Qz6Jk1ARdnnntx4cdCx0-KnjDI8oLNeBKUeki_0aMB9VshwdtF2Kzfxx2l6KhH7BDVM2E3EzhwHW8nbBsiDsk3TQ1CQ1nRt_NWDth1aecKjdAHbdhJuJ82S6SAU/s1600/TC2086+Dock+with+Cartridge+(ejected).jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjrVvaFackwR22_nW-Qz6Jk1ARdnnntx4cdCx0-KnjDI8oLNeBKUeki_0aMB9VshwdtF2Kzfxx2l6KhH7BDVM2E3EzhwHW8nbBsiDsk3TQ1CQ1nRt_NWDth1aecKjdAHbdhJuJ82S6SAU/s320/TC2086+Dock+with+Cartridge+(ejected).jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">TCC dock inspector</td></tr>
</tbody></table>
These computers had a Rom module port, the so called Timex Command Cartridge dock. These are stored on <i>.dck</i> 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 <i>U2086</i> computer AFAIK.<br />
<br />
<span style="background-color: #ffe599;">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!</span><br />
<br />
Some people say that the "86" in <i>unipolbrit 2086</i> is not a spelling error but a pun on 8086 or an indication of the year of release – but then "Centro<b>m</b>ix" is probably no spelling error either... <b>B-)</b><br />
<b><br /></b>
<span style="color: #0b5394;"><b>Update: </b>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.</span><br />
<span style="color: #0b5394;"><br /></span>
<h3>
Other Changes</h3>
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.<br />
The TK95 got a rear-side joystick connector image and a real photo of the keyboard – not sure whether this is an improvement thou.<br />
<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com1tag:blogger.com,1999:blog-3445052556062262094.post-89835313867541814472013-11-01T18:13:00.000+01:002014-04-11T23:15:28.800+02:00zxsp 0.8.0pre21: misc. old stuffHi Folks,<br />
<br />
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. <b>:-)</b><br />
<br />
New in this version:<br />
<br />
<h2>
misc. old stuff</h2>
"misc." consists of the following:<br />
<br />
<h3>
Video Beam Indicator</h3>
<div>
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. <b>;-)</b></div>
<div>
<br /></div>
<div>
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>B-)</b></div>
<div>
<br /></div>
<h3>
Load assembler source</h3>
<div>
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.</div>
<div>
<br /></div>
<div>
It's not trivial to get the headers of .sna or .z80 files right, so i have included template files in this distribution.</div>
<div>
<br /></div>
<div>
Supported target file types for assembler sources are .sna, .z80, .ace, .rom and .tap.</div>
<div>
<br /></div>
<h3>
Load .rom and .scr files</h3>
<div>
Also, it is now possible again to load .rom and .scr files. </div>
<div>
<b><br /></b></div>
<div>
<b>Load .rom files:</b> 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.</div>
<div>
<br /></div>
<div>
<b>Load scr files:</b> 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. </div>
<div>
<br /></div>
<h3>
Load .tap and .dsk files</h3>
<div>
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.</div>
<div>
<br /></div>
<div>
<b>Load .dsk files:</b> 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.</div>
<div>
<br /></div>
<div>
<b>Load .tap files:</b> 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.</div>
<div>
<br /></div>
<b>Load .tzx files:</b> 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.<br />
<br />
<b>Loading a tape like a snapshot vs. inserting a tape into the tape recorder</b><br />
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.<br />
<br />
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.<br />
<br />
<b>Load .tap files into the Jupiter Ace</b><br />
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.<br />
<br />
<h3>
Display parameters for the b&w Ulas</h3>
<div>
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.</div>
<div>
<br /></div>
<h3>
Select 50 Hz or 60 Hz model for the TK clones</h3>
<div>
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? </div>
<h3>
Fixes:</h3>
<div>
<b>Fixed a problem with the .ace files saved by zxsp. </b></div>
<div>
The two final bytes were missing and made them not load. <b>:-|</b></div>
<div>
<br /></div>
<div>
<b>Fixed spurious crash when switching between models.</b></div>
<div>
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. <b>:-/ </b></div>
<div>
Actually this fix made me issue version pre21 today.</div>
<div>
<br /></div>
<div>
<h3>
Image</h3>
<br />
An image, an image ...</div>
<div>
<br /></div>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;">
<tbody>
<tr>
<td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrDKj9MGLrS6kZkd5U9S6qqCzC0s1kFBUr9XK8xNjKSh1uAZmvbQwPpFOnejZwuGsVJ4KMOV6p9T9sHKx0RAkc7gSMi5hEXS8PXFXywKQgHqfBih1aYmNPKqd6ITcDcgfJcHNBMY1wPWQ/s1600/test+ace+%5B2013-11-01+17:53:13%5D.gif" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrDKj9MGLrS6kZkd5U9S6qqCzC0s1kFBUr9XK8xNjKSh1uAZmvbQwPpFOnejZwuGsVJ4KMOV6p9T9sHKx0RAkc7gSMi5hEXS8PXFXywKQgHqfBih1aYmNPKqd6ITcDcgfJcHNBMY1wPWQ/s1600/test+ace+%5B2013-11-01+17:53:13%5D.gif" /></a></td>
<td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir5svffv0cOj93tJEkQTYQFi4OeTKvdjLRNzvzA7jETyY720H2q7xR0Db7hNZUzElkCoQ6JPLsMT2VzRO7h4Dy5lBaMgQ6El81-W8D1xnhTkVmJW3pB2-c7CMrN0fom_yap_h2m29V160/s1600/ZX80+Kong+(Paul+Farrow+2010)+V1-02+%5B2013-11-01+18:07:24%5D.gif" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir5svffv0cOj93tJEkQTYQFi4OeTKvdjLRNzvzA7jETyY720H2q7xR0Db7hNZUzElkCoQ6JPLsMT2VzRO7h4Dy5lBaMgQ6El81-W8D1xnhTkVmJW3pB2-c7CMrN0fom_yap_h2m29V160/s1600/ZX80+Kong+(Paul+Farrow+2010)+V1-02+%5B2013-11-01+18:07:24%5D.gif" /></a></td>
</tr>
<tr>
<td class="tr-caption" style="text-align: center;">.ace sample program loaded from assembler source</td>
<td class="tr-caption" style="text-align: center;">animated gif file made with zxsp</td>
</tr>
</tbody></table>
</div>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-18982055126593091992013-10-18T18:39:00.002+02:002013-10-18T18:39:47.942+02:00zxsp 0.8.0pre20: Lenslok!Hi there,<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7-NSkPZ1D0R7oryzNQCj2Eqe2TLBj20jPQ6206qVBVQmXevTu3iIsFsjr6wfs6U0XScz48ffwueGLUK1Hp4rKVQ_JG90fQ0CrHZqgK21Oe4-omZBdRef6ThDvsOvIQKJLVbpDJT7QeOQ/s1600/Lenslok-Colossal.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7-NSkPZ1D0R7oryzNQCj2Eqe2TLBj20jPQ6206qVBVQmXevTu3iIsFsjr6wfs6U0XScz48ffwueGLUK1Hp4rKVQ_JG90fQ0CrHZqgK21Oe4-omZBdRef6ThDvsOvIQKJLVbpDJT7QeOQ/s320/Lenslok-Colossal.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Using Lenslok to decode the scrambled pattern</td></tr>
</tbody></table>
i've just dropped a new version of zxsp in the download folder.<br />
<br />
This brings Lenslok support to the ZX Spectrum models and clones. <br />
<br />
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.<br />
<br />
It works much better than the original device! If it was like that it'd had been fun to use. :-)<br />
<br />
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.<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-67852578167898014272013-10-10T17:02:00.001+02:002014-04-11T23:16:01.972+02:00zxsp 0.8.0pre19: New stuff for Jupiter Ace, Sound Fx and TS2020 tape recorderMoin,<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir0adJhw4RHqKUOi3p7OtKdszJKxBfgg7WZ5_hIO1AsnfZDay_bIuAT_3tFPmMxPDMIZbivlYAyK-sT54GRxMUMD2PuIRgfiPOrHorSXdvZTaIic7mapeMbv0IcSfMziRqYto0jR3nH-8/s1600/ts2020_.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir0adJhw4RHqKUOi3p7OtKdszJKxBfgg7WZ5_hIO1AsnfZDay_bIuAT_3tFPmMxPDMIZbivlYAyK-sT54GRxMUMD2PuIRgfiPOrHorSXdvZTaIic7mapeMbv0IcSfMziRqYto0jR3nH-8/s1600/ts2020_.jpg" height="211" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Timex Sinclair TS2020</td></tr>
</tbody></table>
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.<br />
<br />
<h3>
Jupiter Ace</h3>
Some errors in handling <i>.tap</i> files for Jupiter Ace have been eliminated. <i>.tap </i>files can be 'instant loaded' now. <i>.ace</i> 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 <b>load worms get graphics game</b>. There is no wildcard <i>load</i> and no auto-start on the Jupiter Ace!<br />
<br />
<h3>
Timex Sinclair TS2020</h3>
The b&w machines now use a <b>TS2020</b> 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?<br />
As with the +2 / +2A recorder, the <i>pause</i> button is used in conjunction with <i>wind</i> and <i>rewind</i> to auto-stop at block boundaries.<br />
<br />
<h3>
All tape recorders</h3>
I have added sound effects to the tape recorders. I hope you like it. :-)<br />
I have also added new menu entries to the context menu, including a <i>'recent tapes...' </i>menu.<br />
<br />
<h3>
New Qt version</h3>
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.<br />
<br />
Have fun!<br />
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-91628487445667452452013-09-10T20:00:00.000+02:002014-04-11T23:16:20.930+02:00zxsp 0.8.0pre18: +3 Floppy Disc Drive support (updated)<br />
zxsp 0.8.0pre18 is out now!<br />
<br />
<h3>
New supported machines in zxsp:</h3>
ZX Spectrum +3 English and Spanish version.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVvaj-xLIYc3QHy7E4KR01vO5RhE1C56R4d173E_4lppVONXcml40WBN11m0MI7XZj4-BV5vmYgeslwikBMhjA-ibvKJsom2c_nnuyZrd4CgPD78DVJXrhcRlXGUzwAy2EMeiebhTVM14/s1600/Bildschirmfoto+2013-09-02+um+18.33.16.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVvaj-xLIYc3QHy7E4KR01vO5RhE1C56R4d173E_4lppVONXcml40WBN11m0MI7XZj4-BV5vmYgeslwikBMhjA-ibvKJsom2c_nnuyZrd4CgPD78DVJXrhcRlXGUzwAy2EMeiebhTVM14/s320/Bildschirmfoto+2013-09-02+um+18.33.16.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ZX Spectrum +3 disc drive</td></tr>
</tbody></table>
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.<br />
<br />
*) The FDC in my +3 is a Zilog Z0765A.<br />
<br />
Supported file format is currently .dsk only, others will follow in the next release.<br />
<br />
The disc drive is the first item with sound effects! <b>:-)</b> 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'.<br />
<br />
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.<br />
<br />
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:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"><b style="background-color: #ffe599;">format "A:"</b></span><br />
<br />
where "A:" is the drive, not the side. <b>;-)</b><br />
<br />
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.<br />
<br />
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.<br />
<br />
Please test the +3 disc emulation and report any problems. (or whether it works for you.)<br />
<br />
... Kio !<br />
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-90612103236154112682013-07-16T19:13:00.000+02:002014-04-11T23:17:35.745+02:00backup daemon for OSX (and maybe other Unixes) – updated<br />
Hi2all,<br />
<div>
<br /></div>
<div>
project of this month was a <b>backup daemon</b>. It's just a console application, no GUI, and meant to run whenever my Mac is on. And it is always on. <b>;-)</b></div>
<div>
<br /></div>
<div>
Whenever it comes to backups i have a bad feeling: what if i lose everything stored at home? Maybe fire, water is a little bit impossible here, or burglary? A thief won't stop at my Mac but also take the external hard drive and probably all memory sticks as well. And if i hide them very well then it's likely that accessing them is so awkward, that i only update them every now and then, and in case i need it it's probably several months old.</div>
<div>
<br /></div>
<div>
In the domestic most valued computer magazine <i>c't</i> was an article about how to solve this with BoxCrypter and BitTorrent Sync. BoxCrypter to encrypt you files and BT Sync to upload it to a friend, who does the same vice versa.</div>
<div>
<br /></div>
<div>
I tried it with a friend and found this:</div>
<div>
<br /></div>
<div>
If you want to encrypt more than one directory (with it's sub directories) or if you want to encrypt file names as well, you must buy <b>BoxCrypter</b>. Then it provides you with one or more virtual drives which you can use like normal drives, and stores the encrypted data in a directory bundle, which you can backup with BT Sync. But these virtual drives are no full replacements for standard drives, OSX complains here or there about not supported features. And i don't know what happens if you put your user directory into a BoxCrypter volume...</div>
<div>
<br /></div>
<div>
<b>BitTorrent Sync</b> seems to work reliably but it is slow. For unknown reasons it only transmits in bursts and thus uses only a fraction of the already not-so-high upload bandwidth.</div>
<div>
<br /></div>
<div>
After looking at this for two weeks i decided to actually write my own backup daemon.<br />
<br /></div>
<div>
<h3>
Kio's backup daemon</h3>
<br />
<div>
The program can be found here: <a href="http://k1.spdns.de/Develop/Projects/backup_daemon/build/Debug/backup_daemon.zip" target="_blank">kio's backup daemon</a>.</div>
<div>
A sample config file can be found at <a href="http://k1.spdns.de/Develop/Projects/backup_daemon/sample_config.txt" target="_blank">~/.backup_daemon/config.txt</a>.</div>
<div>
If you give it a try please report your experience.</div>
<br />
It is now feature-complete and most bugs are eliminated so i think i can offer it for testing to others. If you feel awkward when you think of your backup and the 'worst case', then it may well be worth a try.</div>
<div>
<br /></div>
<div>
The current features are:</div>
<div>
<ul>
<li>console application, no GUI. You can make it auto-start whenever you login and hide it in the dock.</li>
<li>Backup: synchronize a remote directory with your local directory in regular intervals.</li>
<li>File transfer: maintain 'push' and 'pull' folders for automatic transfer of files between you to your friend(s).</li>
<li>Encrypted connection, backups are stored encrypted, file and directory names are encrypted as well.</li>
<li>Upload speed limiter.</li>
<li>Daily snapshots of backups, except if hard links are not supported. (mostly NAS)</li>
<li>Include and exclude files or subdirectories from uploading.</li>
<li>Upload to a peer over the internet</li>
<li>Synchronize a backup folder locally, e.g. a DropBox folder, NAS or external drive.</li>
</ul>
</div>
<div>
You need (except for pure local usage):</div>
<div>
<ul>
<li>a domain name. Use any dynamic name service you like.</li>
<li>an open port, forwarded by your router, if any.</li>
<li>a friend</li>
</ul>
</div>
<div>
Does not work with:</div>
<div>
<ul>
<li>WebDAV shares.</li>
</ul>
</div>
<div>
There will be sporadic updates in the next months.</div>
<div>
<br /></div>
<div>
<h3>
Behavior of sync type "backup"</h3>
</div>
<div>
<br />
In this mode the daemon tries to synchronize a local directory with a remote directory. Files which vanished remotely are deleted locally too, modified files or new files are downloaded. Once per day a snapshot is created which contains hard-linked files to other snapshots and the current backup, therefore using only very little additional space on the disk. Files which vanished are moved to the last snapshot if no previous copy exists.<br />
<br />
This works well with local disks, but not so good with Network Attached Storage 'NAS', because within the last ten years Apple did not find the time to add a 'hard link' command to the Apple File Protocol 'AFP'. So basically, this does not work with NAS. In this case the backup daemon still creates snapshot directories, but they will only contain the deleted files. Just in case that you need to recreate them.<br />
<br />
You can circumvent this problem in the same way as Time Machine does: With Apple's DiskUtility create a SparseImage on the NAS and mount this image locally. Determine the mount point and use this path for your backup destination.<br />
<br />
Currently 'backup' folders are polled every 12 hours.<br />
<br />
<h3>
Behavior of sync type "push" / "pull"</h3>
<br />
In this mode the daemon downloads all new files i finds in the remote folder. Once download is complete, the file is added to a done list which is stored in "~/.backup_daemon/NAME.done".<br />
So you can remove the file from the receiving folder without triggering a second download of this file.<br />
Files which vanish remotely are not deleted locally, so the sender can remove his files at some point as well.<br />
<br />
Currently 'pull' folders are polled ever 30 minutes.<br />
<br /></div>
<div>
<h3>
Command line arguments</h3>
<br />
While the daemon can be started just 'as is', it may be started with one of two command arguments as well:<br />
<br />
's' (single character 's'): Only the server is started.<br />
'c' (single character 'c'): Only the clients are started.<br />
<br />
This can be used to start 2 instances which can be debugged or stopped independently.<br />
<br /></div>
<div>
<h3>
Settings in ~/.backup_daemon/config.txt</h3>
<br />
<div>
The backup daemon needs a config file, which must be stored at <span style="color: #990000;"><span style="font-family: inherit;"><i>'~/.backup_daemon/config.txt'</i></span>.</span> (note: the location has changed.) The tilde <i>'~'</i> indicates your home directory.</div>
<div>
</div>
<br />
All changes to the config file only take effect when the backup daemon starts. So if you update something here you must stop and restart the daemon. For an example also see <a href="http://k1.spdns.de/Develop/Projects/backup_daemon/sample_config.txt" target="_blank">~/.backup_daemon/config.txt</a>.<br />
<br />
<b>verbose : <i>NUMBER</i></b><br />
Defines how much log output will be produced.<br />
Possible values are: 0 (nearly none) to 4 (each file transferred produces a log line)<br />
<b><br /></b>
<b><i>upload_speed : NUMBER</i></b><br />
Defines a speed limit for sent data. Setting this to 0 disables the limit.<br />
The speed is set in bits per second and may be followed by a unit 'k' or 'M'.<br />
For a typical ADSL connection with 1500 kbit/sec upload speed this might be set to 1000k.<br />
<div>
<br /></div>
<div>
<b><i>num_clients : NUMBER</i></b><br />
Defines how many client workers are created. 'clients' handle the <i>receive</i> side of a connection. 4 clients are recommended.<br />
<br /></div>
<div>
<b><i>num_servers : NUMBER</i></b><br />
Define how many servers are started at most. A server handles the <i>send</i> side of a connection. They are created whenever a client connect to this daemon. If more than N clients try to connect at the same time, only N connections are granted and the others are rejected and will retry later. There should be at least 10 servers allowed.<br />
<br />
<b><i>self : n=MY_NAME : h=MY_ADDRESS : p=MY_SERVER_PORT : secret="MY_LOGIN_SECRET"</i></b><br />
Defines some settings concerning your own computer.<br />
<i>MY_NAME</i> is your nickname. Any client connecting to you will check this name.<br />
<i>MY_ADDRESS</i> is your static IP address or your static or dynamic server name. Remote clients must know this address to connect to your server.</div>
<div>
<i>MY_SERVER_PORT</i> is the socket port which your server uses for incoming connections. Remote clients must know this port address and it must be forwarded in your router, if there is one between your computer and the internet line.</div>
<div>
<i>MY_LOGIN_SECRET</i> this is the password which is exchanged and tested with a challenge - response test. Obviously any client must know this too. </div>
<div>
The 'self' settings are used to create a 'peer' entry as well, so you can connect connect to yourself to make backups to a local disk.</div>
<div>
<br /></div>
<div>
<b>peer : <i>n=MY_NAME : h=MY_ADDRESS : p=MY_SERVER_PORT : secret="MY_LOGIN_SECRET"</i></b></div>
<div>
Define the same settings for any peer which is allowed to connect to your server. </div>
<div>
<br /></div>
<div>
<b>peer : <i>*</i></b><br />
<div>
Defines that any peer is allowed to connect to your server. But they will only have access to folders which are marked with 'p=*'.</div>
</div>
<div>
<br /></div>
<div>
<div>
<i><b>push: n=MY_BACKUP : t=BACKUP : p=HIS_NAME : d="/MY/ROOT/DIR" : s="MY_FOLDER_PASSWORD" : x="EXCLUDED" : i="INCLUDED"</b></i></div>
</div>
<div>
Define a folder, which is exported by your server.</div>
<div>
MY_BACKUP is the nickname for this export. This must match a corresponding 'pull' entry in the remote clients' settings.</div>
<div>
BACKUP is 'backup' for backup-style exports (directories which you want to backup to your friend's HD) or 'push' for a push folder which transmits anything put in here to your friend(s).</div>
<div>
HIS_NAME nickname of your friend. This entry can appear multiple times: once for each friend which shall have access to this folder. If you add a p-setting with value '*' (one character) then this folder is exported to anybody who can connect to your server. For a distribution folder which shall be exported to anybody who knows about your server you must add a peer '*', see above.</div>
<div>
MY/ROOT/DIR is the base path to your exported directory.</div>
<div>
MY_FOLDER_PASSWORD is a password which is used for encryption. all files and file names are encrypted with this password. If you use this in a 'push' folder then all friends should use this password for decryption in their 'pull' jobs, or they'll only get the encrypted files which is probably useless. If you use this for a backup folder, then don't tell your friend your password. Then your files will be stored encrypted on your friend's HD. </div>
<div>
EXCLUDED contains a partial path of files which shall be excluded from the exported directory listing. Initially all files are included. Any file whose path starts with this string is excluded. Except if the string starts with '*' then this indicates a file type which will be excluded. Any amount of excluded file paths may be defined for an exported folder.</div>
<div>
e.g.:</div>
<div>
<ul>
<li>x="" excludes all files</li>
<li>x="." excludes all hidden files in the root level of this push folder.</li>
<li>x="aa" excludes all files starting with "aa"</li>
<li>x="a/bb" excludes all files starting with "bb" in folder "a"</li>
<li>x="*.txt" excludes all files in all folders which end on ".txt"</li>
</ul>
</div>
<div>
INCLUDED contains a partial path of files which shall be included in the exported directory listing. Initially all files are included. Any file whose path starts with this string is excluded. Any amount of included file paths may be defined for an exported folder.</div>
<div>
If entries for both included and excluded files match then the longer and more specific entry wins.</div>
<div>
e.g.</div>
<div>
<ul>
<li>x="" i="Documents" excludes everything except (probably) folder "Documents"</li>
<li>i="photos" x="photos/private" exports all 'photos' except (probably) folder 'photos/private'</li>
</ul>
<div>
<i><b>pull: n=MY_BACKUP : t=BACKUP : p=HIS_NAME : d="/MY/ROOT/DIR" : s="MY_FOLDER_PASSWORD" : x="EXCLUDED" : i="INCLUDED"</b></i></div>
</div>
<div>
This is essentially the same as for 'push' just for the client. If the server exports an encrypted directory and the client has no encryption password set on the pull job, then the directory tree is stored encrypted on his disk. The client may also filter what to download with 'included' and 'excluded' partial paths though normally this won't be used. It is only useful if you want to retrieve only a few files from your backup.</div>
<div>
<br /></div>
<div>
<h3>
Restore from a backup</h3>
<br />
What to do when the worst case happens and you need your data back from your friend?<br />
<br />
<ol>
<li>Stop your backup daemon and ask your friend to stop his backup daemon.</li>
<li>Ask your friend to replace the backup pull job by a push job with identical settings, except the path must be extended with "/current_backup".</li>
<li>Replace your backup push job by a pull job with identical settings, except you might want to change the destination path.</li>
<li>Start your backup daemon and ask your friend to do the same.</li>
</ol>
<div>
Modified scenario: You want to restore from a local disk, e.g. a NAS. Then "you" and "your friend" are the same person. ;-)</div>
<div>
<br /></div>
<div>
Modified scenario: You want to restore only certain files. Then add an appropriate 'exclude' and 'include' entry to the pull job.</div>
<div>
<br /></div>
<div>
Modified scenario: Your friend brings your backup on an external drive: Add a push job for the external drive to your config.txt as well and remove the line for the upload limit.</div>
<div>
<br /></div>
<br />
<h3>
Hints</h3>
<div>
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
</div>
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<div style="margin: 0px;">
</div>
<ul>
<li>Add the backup daemon as a start item to your login profile.</li>
<li>You can test that restoring your backup will work if your friend also adds a push job for the backup folder and you a pull job to a temp directory, eventually with an include/exclude filter.</li>
</ul>
</div>
</div>
<br /></div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-15755774538269159062013-07-16T17:56:00.001+02:002013-07-16T18:02:39.068+02:00My Annual Rant IIHi,<br />
<br />
sometimes things don't work, it's not your fault and you cannot fix it. And sometimes this comes in close succession. So here is my 2nd annual rant for this year:<br />
<br />
<h3>
Chapter I</h3>
<br />
I'm working on a backup daemon, because i'd like to have a copy of important data outside of my home, just in case. As usual this takes some days until it works, i make local tests and fix bugs and try to move the software to a good state. Then tests with a connection over the internet; and finally this works too.<br />
<br />
After that i thought of reasonable extensions to the daemon. 5 GB of webspace come to mind. They are mounted via WebDAV and can be accesses as any local file system. Nearly.<br />
<br />
First i had to adjust the character set for encrypted file names until this seemed to be no longer the cause of transmission problems.<br />
<br />
Then: symbolic links are not supported. Ok, it's mostly for files only anyway, so i accepted this.<br />
<br />
Next is: i cannot set the modification date on files. I use this as a flag whether the file is fully synced. If <i>mdate</i> and <i>file length</i> match, then the file is not further scrutinized but deemed to be up to date. I modified the backup daemon to accept any <i>mdate</i> which is newer than the original file's <i>mdate</i>.<br />
<br />
Next is: frequent errors, irregular with no pattern. Except: 9 of 10 errors are timeout errors. I work around to catch and retry in case of timeout and this seems to work. Running the daemon for some time updated more and more files to there final size. But some files failed over and over again.<br />
<br />
Common pattern: long files. Approx. 15 files and they all were in range 10 to 50 MB. I examined the problem further: It seems that data written to a WebDAV file is not uploaded immediately, but only buffered internally. When the file is closed all data is uploaded. And, unbelievable, the <i>close() </i>system call has a timeout. It's generous: 1 minute. And then it fails with timeout error... and <u>nothing</u> is saved! So there's no real chance to upload long files this way.<br />
<br />
I tried to enforce upload in chunks by calling <i>fsync()</i> after each chunk of data. What the WebDAV driver does here is: it uploads all the current file, not only the modified data, and now, after a long while, while it uploads the growing file again and again, it fails with timeout error when it reaches the critical file size.<span style="background-color: #ffe599;"> <b>:-/</b></span><br />
<br />
Here i gave up. WebDAV is not supported.<br />
<br />
<h3>
Chapter II</h3>
<br />
That was last week. This week i developed the idea, that i could make daily snapshots of the current backup and hard link the files to save space. After all, 'Time Machine' does it as well. And we are Unix, aren't we? After two days it worked, tested locally. What i got back from my friend was:<br />
<br />
<div class="p1">
<span style="color: blue; font-family: Courier New, Courier, monospace; font-size: x-small;">Client1: caught error: create hardlink "/Volumes/K/1/2013-07-15/,NSMHyr<1 {i>+_AbQ5Tc<89I3t0>Er''dGEb(xZNjJ{!#yiO4rmSE8_ILhE": Operation not supported (45)</span></div>
<br />
<div class="p1">
<br /></div>
<div class="p1">
(funny filenames, eh?)</div>
<div class="p1">
<br /></div>
<div class="p1">
Yes: <i>create hard</i> link not supported. He has a Mac like me and stores my backup on his NAS. The NAS is a Linux box and surely supports hard links. So it's the file transfer protocol: <i>AFP</i>. After 12 or 13 years of being unixoid Apple did not manage to implement <i>hard links</i> into their Apple File Protocol. This sucks! But how does 'Time Machine' do this? After all, they not only create hard linked files but also directories (according to internet sources) which is generally deprecated!</div>
<div class="p1">
<br /></div>
<div class="p1">
'Time Machine' creates a <i>SparseImage</i> filesystem file on the NAS and mounts this locally. Wow! That's what i call a workaround. So my friend can just do the same and never forget to mount this volume, or i discard the daily snapshot feature. But i don't want to drop it, so i rewrote the daemon to ignore the failure of creating a hard-linked snapshot of the current backup and just resume work. The risk is, that in case i need the backup it may just have been crippled to the state on my Mac before i can restore it... <b style="background-color: #ffe599;">:-/</b></div>
<div class="p1">
<br /></div>
<h3>
Chapter III</h3>
<div class="p1">
<br /></div>
<div class="p1">
In my work i write apps for Android. Today i wrote a screen to input a bunch of dates and times. I didn't want the <i>DatePicker</i> and the <i>TimePicker</i> to popup over and over again, so the user should be able to enter date and time in text edit fields. There are specializations for these and similar cases, and i flagged the text fields as<i> 'date'</i> and<i> 'time'</i>. <i>'date'</i> works. <i>'time'</i> does not allow me to enter a colon. Actually, not any character besides '0' to '9'. Has Google ever tested this? There is no workaround or solution for this problem, so i used a nasty workaround and require the user to enter a period instead of a colon... <b style="background-color: #ffe599;">:-/</b></div>
<div class="p1">
<br /></div>
<div class="p1">
And here i felt it's time for my second annual rant this year.</div>
<div class="p1">
<br /></div>
<div class="p1">
... Kio !</div>
<div class="p1">
<br /></div>
<div class="p1">
now i feel better. <b style="background-color: #ffe599;">;-)</b></div>
<div class="p1">
<br /></div>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-48567898603382327602013-06-18T20:02:00.000+02:002013-06-18T20:02:04.785+02:00zxsp 0.8.0pre17: multiple instancesHi2all,<br />
<br />
faster than anybody thought, especially myself, the next version of zxsp is released. This version fixes some bugs discovered in the SPECTRA emulation and re-enables the possibility to run more than one machine instance at the same time.<br />
<br />
The SPECTRA emulation had some bugs in border colours and in .z80 file reading. Also it triggered a sleeping error in the Z80 emulation, where under certain circumstances, e.g. when the SPECTRA interface was attached <b>B-)</b>, wait cycles were inserted anytime the CPU was reading from contended memory. According to the location of this bug this should also have occurred when the memory access inspector was open. <br />
<br />
Multiple instances: You now can open as many machine instances as you like ... and your Mac can execute. There are probably still some bugs left in here, but i have discovered nothing severe.<br />
<br />
Have fun!<br />
<br />
... Kio !<br />
<br />
p.s.: summer has arrived here. <b>B-)</b><br />
<br />
p.p.s.: i have included a test rom which demonstrates the colour capabilities of the SPECTRA interface. On Paul Farrow's site there is probably a newer version. Just in case.<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com4tag:blogger.com,1999:blog-3445052556062262094.post-67006543272040535872013-06-15T19:25:00.000+02:002014-04-11T23:18:16.651+02:00zxsp 0.8.0pre16: SPECTRA InterfaceHello,<br />
<div>
<br /></div>
<div>
the next version of zxsp is out right now. The major new thing is support for Paul Farrow's SPECTRA video interface. But let's start with the small modifications.</div>
<div>
<br /></div>
<div>
Rob Probin has pointed me to an improvement for the undocumented bits in the F register in the Z80 emulation which i now implemented. Hopefully programmes crash more accurate now. <b>B-)</b><br />
<br />
I replaced the default external AY extension, which was an AY-Magic, with the Didaktik Melodik, because i didn't get answer to my request for admittance to use the AY-Magic image.<br />
<br />
Now to the big add-on:<br />
<br />
<h3>
Paul Farrow's SPECTRA video interface</h3>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl122qwS4wgB4Dw8zrHhjv-DTr6YLgdiBnbXmSTEfbmE426wOkkD4ofrPiN_NTlwdHmyTVZ0YwQIrQNviWoyNofbSRwRpZMJK5NF0XAkQHM7z0CWUhoOLGtTwOKnWfHsCdpu9O7_R-Eug/s1600/SpectraInspector.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl122qwS4wgB4Dw8zrHhjv-DTr6YLgdiBnbXmSTEfbmE426wOkkD4ofrPiN_NTlwdHmyTVZ0YwQIrQNviWoyNofbSRwRpZMJK5NF0XAkQHM7z0CWUhoOLGtTwOKnWfHsCdpu9O7_R-Eug/s1600/SpectraInspector.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Paul Farrow's SPECTRA video interface</td></tr>
</tbody></table>
This is a RGB-Scart interface to connect your ZX Spectrum to a TV set with much better image quality than with the standard HF lead.<br />
<br />
It also incorporates new colour modes, a rom slot with Interface1-compatible paging, a Kempston joystick interface and an Interface1-compatible RS232 port.<br />
<br />
Of course the "better image" is not emulated in zxsp, because you already get the best quality here <b>:-)</b> but colour modes, rom and joystick interface are emulated. The RS232 port is postponed for a while.<br />
<br />
<h4>
The new colour modes</h4>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5UYj8YSEhJ3JZksuBxW0k2K3KeqqJVbYuP51jB7ne0SiGPuw0a9k7bQLj5DADITuDJncp_LR7KL8-9sYvxjeD5reZ5SBInYZ0Cxn1SB-SghZB3JSpAMuWJBYQ9DHfRnjPw_QX-3vSG0k/s1600/CastleSaventem_8x2_DE.gif" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5UYj8YSEhJ3JZksuBxW0k2K3KeqqJVbYuP51jB7ne0SiGPuw0a9k7bQLj5DADITuDJncp_LR7KL8-9sYvxjeD5reZ5SBInYZ0Cxn1SB-SghZB3JSpAMuWJBYQ9DHfRnjPw_QX-3vSG0k/s1600/CastleSaventem_8x2_DE.gif" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screenshot made with zxsp</td></tr>
</tbody></table>
There are 32 combinations for new modes combined from<br />
<ul>
<li>extra colours: provides 64 colours</li>
<li>half cell mode: set colours for left and right 4 pixels in character cell separately</li>
<li>2-byte attributes: doubles the available information which can be stored for attributes</li>
<li>8, 4, 2 and 1-line mode: increase vertical colour resolution</li>
</ul>
Some combinations are a little bit pointless, but most provide certain trade-offs between memory consumption and added colour capabilities.<br />
<br />
In addition the interface contains 2 x 16 kByte of ram which allows double buffering of video drawing.<br />
<br />
All colour modes are supported by zxsp, you can also make GIF images and movies in these modes.<br />
<br />
<h4>
ROM support</h4>
<br />
The interface has a Sinclair Interface 2-like rom slot or, optionally, a DIL socket, but zxsp basically emulates the IF2 slot. There is the option to enable rom switching on the 3 positions where the Sinclair Interface 1 pages in and out. So you can "insert" an Interface 1 rom or a rom which is somehow based on this rom. You can test that it works if you enter the Basic command<br />
<br />
<b> OPEN #4;"m";1;"foo"</b><br />
<br />
which doesn't pass the parser of the plain Basic rom but works when an Interface 1 rom is inserted and the rom hooks are enabled, though it will only tell you that the microdrive 1 is not present.<br />
<br />
<h4>
Joystick support</h4>
<br />
The interface contains a Kempston-style joystick port and is emulated by zxsp.<br />
<br />
<h4>
RS232</h4>
<br />
The interface contains a RS232 port which works identical to the Interface 1 port, except that it only supports the RS232 mode of this port. This is not yet emulated in zxsp.<br />
<br />
<h4>
.Z80 file support</h4>
<br />
I have extended the .Z80 file standard to contain the SPECTRA interface. I just dump the information here, so that everybody who is interested can add support to his own emulator:<br />
<br />
<div class="p1">
I have used 1 formerly unused bit to indicate presence of the SPECTRA interface:</div>
<div class="p1">
</div>
<ul>
<li>Bit 3 in Byte "rldiremu'".</li>
</ul>
<span class="Apple-tab-span"></span><br />
<div class="p2">
If this bit is set, then two bytes are added to the up-to-now defined header after byte "port_1ffd" introduced by xzx/warajewo:</div>
<div class="p1">
</div>
<ul>
<li>Byte "spectra_bits" and</li>
<li>Byte "spectra_port_7fdf".</li>
</ul>
<br />
<div class="p2">
The first one contains some state information while the latter one the state of the port 0x7FDF colour mode register. </div>
<div class="p2">
<br /></div>
<div class="p2">
The bits are:</div>
<div class="p1">
</div>
<ul>
<li>Bit 0: new colour modes enabled</li>
<li>Bit 1: RS232 enabled </li>
<li>Bit 2: Joystick enabled </li>
<li>Bit 3: IF1 rom hooks enabled</li>
<li>Bit 4: rom paged in </li>
<li>Bit 5: port 239: Comms out bit</li>
<li>Bit 6: port 239: CTS out bit </li>
<li>Bit 7: port 247: Data out bit</li>
</ul>
<br />
<div class="p2">
After the header, pages with ID 12, 13 and 14 may be present.</div>
<div class="p1">
</div>
<ul>
<li>Page 12: rom data of inserted rom</li>
<li>Page 13: ram data of ram bank 0</li>
<li>Page 14: ram data of ram bank 1</li>
</ul>
<br />
<div class="p2">
If page 12 is not present, then no rom is inserted.</div>
<div class="p1">
If page 13 is not present, then it shall be copied from the contended ram page.</div>
<div class="p1">
Same for page 14.</div>
<div class="p1">
<br /></div>
The zip archive of this release comes with some examples and links to my and Paul's website where you can get some more. Let's see how many people find it fancy to write a game or demo which uses this interface. You now have an emulator for convenient development. <b>:-)</b><br />
<br />
... Kio !<br />
<br />
p.s.: Someone promised a download link here, so here's a link to the official download page: <a href="http://k1.spdns.de/Develop/projects/zxsp-osx/distributions/" target="_blank">http://k1.spdns.de/Develop/projects/zxsp-osx/distributions/</a>. The downloads are at the end of the page.<br />
<br /></div>Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com2tag:blogger.com,1999:blog-3445052556062262094.post-19446573400314313752013-06-06T19:50:00.000+02:002013-06-06T19:59:42.162+02:00zxsp 0.8.0pre15: Screenshots for TC2048 and b&w machinesHi,<br />
<br />
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.<br />
<br />
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.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZCvMWTjApVWSMpmSzxXSjvCxaHG752j_0LA3-MaEmaMogMNpC2fQwkPN6gXHL-grS827df8rXx52JuRKGcRUkp48xSYzfZKRiyaohJ7wK9cp3ribWwYiZ050LHWp38TYRJ8T8O4SJkwY/s1600/Weird+Science+-+The+loosened+border.gif" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZCvMWTjApVWSMpmSzxXSjvCxaHG752j_0LA3-MaEmaMogMNpC2fQwkPN6gXHL-grS827df8rXx52JuRKGcRUkp48xSYzfZKRiyaohJ7wK9cp3ribWwYiZ050LHWp38TYRJ8T8O4SJkwY/s1600/Weird+Science+-+The+loosened+border.gif" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Weird Science Overscan Demo</td></tr>
</tbody></table>
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.<br />
<br />
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.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;">
<tbody>
<tr>
<td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYrA9P_bavBenZjD5Bj0g7_bssy23lIcNDxTdRMVZkfMhesvg3ghqkfX53TiNTUDfi5A2x4-A88hdiZu52OJ1yYII-ltQTo5xxcAmh3T2ONnt8kPpejV4zKt3mCWYbuIEA9x-edWtH38M/s1600/TC2048Hi-ResColourDemo.gif" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYrA9P_bavBenZjD5Bj0g7_bssy23lIcNDxTdRMVZkfMhesvg3ghqkfX53TiNTUDfi5A2x4-A88hdiZu52OJ1yYII-ltQTo5xxcAmh3T2ONnt8kPpejV4zKt3mCWYbuIEA9x-edWtH38M/s1600/TC2048Hi-ResColourDemo.gif" /></a>
</td>
<td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAy77MDaJAReB1dPLv-zSJgu_c4Ls5UJ5vXa-0hZS8lGA4lvjrWCNHOy42SPhGBRQS8OG_bY5-mSy7gilhW7iLmPOsH0W1Nwb8tSBq0ZgHOI1YYfTldnOw-LYRPJY3Xl2Uu5-C2I-hZ0Q/s1600/ZX81+Gif+Movie+Demo.gif" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAy77MDaJAReB1dPLv-zSJgu_c4Ls5UJ5vXa-0hZS8lGA4lvjrWCNHOy42SPhGBRQS8OG_bY5-mSy7gilhW7iLmPOsH0W1Nwb8tSBq0ZgHOI1YYfTldnOw-LYRPJY3Xl2Uu5-C2I-hZ0Q/s1600/ZX81+Gif+Movie+Demo.gif" /></a>
</td>
</tr>
<tr>
<td class="tr-caption" style="text-align: center;">TC2048 64 Column Mode
</td>
<td class="tr-caption" style="text-align: center;">ZX81 Silly Basic Demo
</td>
</tr>
</tbody>
</table>
<br />
... Kio !<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-18816676657208991552013-06-04T14:26:00.003+02:002013-07-16T16:45:47.781+02:00My Annual RantOk here it is.<br />
<br />
I have debugged yesterday a piece of code which i had an older version of, which worked, and a new one which didn't. It took me some time to find out what made the difference:<br />
<br />
<b>-2 != -2</b><br />
<br />
There are some crap design jokes in C / C++, but this is really special.<br />
If you apply the unary negation operator on an unsigned int, the result is still an unsigned int. Really, approximately in nearly 100% of all cases not what you want.<br />
<br />
The other "highlight" in C / C++, which actually made it verbatim into quite a lot of other languages, e.g. Java, is the totally broken operator precedence hierarchy.<br />
<br />
A sane precedence order must account of three distinct groups of operators:<br />
<ol>
<li>ops which take 2 numbers and yield a numeric result,</li>
<li>ops which take two numbers and yield a boolean result, and </li>
<li>ops which take 2 boolean values and yield a boolean result.</li>
</ol>
All operators of group 1 must have higher precedence than those of group 2 and those must have higher precedence than those of group 3. Now take a look at the C / C++ / Java / etc. operator precedence hierarchy and see how broken it is by design.<br />
<br />
But that was not the only thing that made me feel bad yesterday. I again ran into the especially good support for gif files in all today's real-world apps.<br />
<br />
After i got lately response from some Mozilla cleaning officer, who complained, that the example gifs i made for a 6 year old bug report were no longer available, i now found a well documented, basic and easy feature in gif files which no app i tested did support: pixel size aspect ratio, the ratio of width to height of pixels. I wanted to use pixels with an aspect ratio of 1:2 for screenshots of the TC2048 in 64 column mode. When i displayed them in the OSX image viewer, Xee, Firefox, Chrome or Gimp these looked like double-width scarfs. Only Gimp at least showed a warning. All other ignored the aspect ratio all together. So i had to rewrite my code to produce easier-to-decode images. <b>:-/</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz5gHcgtrvA1UyQfU9zQlhqP6Y6RjoQTIpXAuNkDvs46SempuRd3Vktdc0sxjAQ-uZMEK1PQcLM3ff_iZzA03-Qxk7OOsA9dIdlPp_Tlg8AdUAqMChq0w3bhahdryNdji7X-QcPB7MWLI/s1600/Timex+TC+2048+(Portugal)+%5B2013-06-03+19:28:24%5D.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz5gHcgtrvA1UyQfU9zQlhqP6Y6RjoQTIpXAuNkDvs46SempuRd3Vktdc0sxjAQ-uZMEK1PQcLM3ff_iZzA03-Qxk7OOsA9dIdlPp_Tlg8AdUAqMChq0w3bhahdryNdji7X-QcPB7MWLI/s1600/Timex+TC+2048+(Portugal)+%5B2013-06-03+19:28:24%5D.gif" width="320" /></a></div>
<br />
sometime these things suck.<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-4157537838445314432013-05-30T18:27:00.000+02:002013-05-30T18:27:17.171+02:00zxsp 0.8.0 pre 14: TC2048 Screen ModesHello everybody,<br />
<br />
zxsp 0.8.0 pre14 is out now.<br />
<br />
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. :-)<br />
<br />
As a temporary drawback creation of GIF images and movies is not supported in this version.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-qDjocRZN-OQEzOAk_asulZt5pIfIBMyZAdRusrLuJxcotSMGYUehi8AQcd7J3DCqlEyWkYn9pakKeAV866-tJoi71Jmsditn1fQ3Q2XNGpN8ggKUoHEWhTXbgglDVYe7F6UA3usoj4w/s1600/Bildschirmfoto+2013-05-30+um+17.11.31.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-qDjocRZN-OQEzOAk_asulZt5pIfIBMyZAdRusrLuJxcotSMGYUehi8AQcd7J3DCqlEyWkYn9pakKeAV866-tJoi71Jmsditn1fQ3Q2XNGpN8ggKUoHEWhTXbgglDVYe7F6UA3usoj4w/s1600/Bildschirmfoto+2013-05-30+um+17.11.31.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screenshot from the TC2048Hi-ResColourDemo</td></tr>
</tbody></table>
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.<br />
<br />
Here are the first screen shots:<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; background-color: white; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px; margin-left: auto; margin-right: auto; padding: 5px; position: relative; text-align: center;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG4SJCK1eQT0dLvPr8v_kT-zcEgbALWlqgTvX4NULvn2XOhGAywYwovvfWTK70fv44fqwM08OeOSLMl2JyxyYQHJXwPKIojR4CvqDxVNucM3WkPUjuUQ9fqasb2UmEPBcTL3yp7t-S3V0/s1600/Bildschirmfoto+2013-05-29+um+21.29.46.png" imageanchor="1" style="clear: left; color: #888888; margin-bottom: 1em; margin-left: auto; margin-right: auto; text-decoration: none;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG4SJCK1eQT0dLvPr8v_kT-zcEgbALWlqgTvX4NULvn2XOhGAywYwovvfWTK70fv44fqwM08OeOSLMl2JyxyYQHJXwPKIojR4CvqDxVNucM3WkPUjuUQ9fqasb2UmEPBcTL3yp7t-S3V0/s320/Bildschirmfoto+2013-05-29+um+21.29.46.png" height="61" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0980392) 0px 0px 0px; background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: none; box-shadow: rgba(0, 0, 0, 0.0980392) 0px 0px 0px; padding: 0px; position: relative;" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 11px;">Program used for this demo</td></tr>
</tbody></table>
<br />
The online editor of Blogger is such a crap thing... sorry...<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; background-color: white; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px; margin-left: auto; margin-right: auto; padding: 5px; position: relative; text-align: center;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwoUN1xi3hiahYlmIt8yQVdKisE6zX_zGeNosIjkj4DP3A8xGYcb_V_bT1gfiLikFDfsRGFhLKAzVvfQTm9VgKl3uavnS56S7_veY9a1AKAVQ6HN3zkjYfHsLvOEi2TV1KjqXK5ta0Mf4/s1600/Bildschirmfoto+2013-05-29+um+21.29.15.png" imageanchor="1" style="color: #888888; margin-left: auto; margin-right: auto; text-decoration: none;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwoUN1xi3hiahYlmIt8yQVdKisE6zX_zGeNosIjkj4DP3A8xGYcb_V_bT1gfiLikFDfsRGFhLKAzVvfQTm9VgKl3uavnS56S7_veY9a1AKAVQ6HN3zkjYfHsLvOEi2TV1KjqXK5ta0Mf4/s1600/Bildschirmfoto+2013-05-29+um+21.29.15.png" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0980392) 0px 0px 0px; background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: none; box-shadow: rgba(0, 0, 0, 0.0980392) 0px 0px 0px; padding: 0px; position: relative;" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 11px;">Screen with 1:1 zoom</td></tr>
</tbody></table>
<br />
I'll have a look whether this can be smoothed instead of omitting every other pixel.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; background-color: white; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px; margin-left: auto; margin-right: auto; padding: 5px; position: relative; text-align: center;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwFacTuhHE0AHgMnAfXcagJWV2TCY8gs8EP_h5qem-F04TmhN4WoIxgVRGDY_1GvssvNZWBsp7jgIGO2FOwDXBE9FSdkJi-5QxWDHE1eDn2VbDAeD0SdUSUPXqIJ8oewQvj7e5dYB9LT4/s1600/Bildschirmfoto+2013-05-29+um+21.29.28.png" imageanchor="1" style="color: #888888; margin-left: auto; margin-right: auto; text-decoration: none;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwFacTuhHE0AHgMnAfXcagJWV2TCY8gs8EP_h5qem-F04TmhN4WoIxgVRGDY_1GvssvNZWBsp7jgIGO2FOwDXBE9FSdkJi-5QxWDHE1eDn2VbDAeD0SdUSUPXqIJ8oewQvj7e5dYB9LT4/s320/Bildschirmfoto+2013-05-29+um+21.29.28.png" height="239" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0980392) 0px 0px 0px; background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: none; box-shadow: rgba(0, 0, 0, 0.0980392) 0px 0px 0px; padding: 0px; position: relative;" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 11px;">Screen with 2:1 zoom</td></tr>
</tbody></table>
<div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">
<br /></div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-32276993537958113282013-05-21T14:03:00.000+02:002013-05-29T21:41:34.345+02:00zxsp 0.8.0 pre13: Tape Recorder Animation<h3>
Hello everybody,</h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpt2Xz__qTo8-bkNAHyEvN6H6FOT7333OC_Ab85m_u88394l0CXVW3yaa1rKj0yCdz6qJfuCY4kx_qCtNNkTa1b-q_3XYsZaPZqo-eJXLj46sZdE7PtOOu_xjEg9EQty2b5_H2ywDSpjs/s1600/Bildschirmfoto+2013-05-21+um+13.39.35.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpt2Xz__qTo8-bkNAHyEvN6H6FOT7333OC_Ab85m_u88394l0CXVW3yaa1rKj0yCdz6qJfuCY4kx_qCtNNkTa1b-q_3XYsZaPZqo-eJXLj46sZdE7PtOOu_xjEg9EQty2b5_H2ywDSpjs/s1600/Bildschirmfoto+2013-05-21+um+13.39.35.png" /></a></div>
after working for some time on my hardware projects, i'm back to zxsp for the next weeks or months.<br />
I have released a new version yesterday.<br />
<br />
<h3>
What's new?</h3>
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. <b>:-)</b><br />
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.<br />
<br />
<h3>
Working with the tape recorder
</h3>
<div>
The buttons work mostly as on the original machine. Use <i>EJECT</i> to eject or insert a tape. The <i>PAUSE</i> 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.</div>
<div>
Right-click in the tape recorder window to bring up an options menu. Here you can create and insert a <b>new empty tape</b> or temporarily switch <b>instant-load </b>or <b>auto-start-stop</b> on and of. The latter two options are set globally for new machines in the <b>Preferences</b>.</div>
<div>
<br /></div>
<h3>
What's next?</h3>
<div>
If nothing breaks i'll now work on the additional screen modes for the <i>Timex</i> machines.</div>
<div>
<br /></div>
<div>
Greetings,</div>
<div>
<br /></div>
<div>
... Kio !</div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-47509889282749081252013-01-12T16:28:00.000+01:002014-04-11T23:19:14.548+02:00Erlangen Computer Disaster 2013Hi,<br />
<br />
after i had to setup my Mac from backup, there are some bits left worth to note:<br />
<br />
Restoring from Time Machine Backup was very reliefing and worked with almost no hassle; ignoring the fact, that for some reason restoring the last snapshot did not work, but the 1 hr older was not really worse. Worse was, that the backup was > 10 days old, because it's done on an external drive which i don't want to power up ever 15 minutes, which it does if left mounted. So it's mostly unmounted.<br />
<br />
curious: iMail marked ~ 2000 mails as unread. I had to "read" them again.<br />
<br />
silly: Restoring my LAN setting did not work. I had to correct it manually when i discovered that my Mac <a href="http://k1.spdns.de/" target="_blank">k1.spdns.de/</a> was not reachable.<br />
<br />
bugger: 2 days later i discovered megabytes of web server error messages, because my script couldn't store preview thumbs in the preview folder. I had to correct permissions. I think this did no harm except that preview images were created anew each time a page was accessed.<br />
<br />
that really sucks: Today i noticed that the current download version of zxsp was not in the download folder. <b><span style="color: #b45f06;">:-/</span></b> I had to create it anew. Now it's slightly larger again, this really depends on what i have compiled in when i compiled Qt. This is a little bit silly; do i actually need a Qt installation for each project, so that the libs included in the app only contain the binaries the app actually uses? And then, of course, i made an error in the deployment process and built the pre11 app with an internal version of pre12. And some folks have already downloaded it before i noticed this mistake. For that reason there won't be a version pre12, the next will be pre13 for the sake of the "check update" function.<br />
<br />
... Kio !<br />
<br />
p.s.: <a href="http://www.youtube.com/watch?v=KCRqAzCevsY" rel="nofollow" target="_blank">http://www.youtube.com/watch?v=KCRqAzCevsY</a><br />
<br />
p.p.s.: And there's a new background for the blog. <b><span style="color: #38761d;">:-)</span></b>Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-54535173129090148922013-01-09T16:23:00.000+01:002013-01-12T16:41:48.381+01:00Good News & Bad NewsHi,<br />
<br />
<h3>
short story:</h3>
<br />
<ol>
<li>My Mac is online again. </li>
<li>There won't be a PowerPC version of zxsp unless something very unlikely happens.</li>
</ol>
<br />
<h3>
long story:</h3>
<div>
<br /></div>
<div>
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.</div>
<div>
<br /></div>
<div>
I need to compile Qt, because the precompiled version is Intel-only. <b><span style="color: lime;">done.</span></b></div>
<div>
I need to figure out which options to use for ./configure. <b><span style="color: lime;">done.</span></b></div>
<div>
I tried to compile.<b><span style="color: red;"> failed.</span></b></div>
<div>
I'm lacking a PowerPC compiler.</div>
<div>
I'm researching in the net. <b><span style="color: lime;">done.</span></b></div>
<div>
Checked whether there is something i can install with MacPorts. <b><span style="color: red;">riente.</span></b></div>
<div>
I need to install XCode 3.2.6 to get a powerpc gcc and thereafter XCode 4.0 to fix what's messed up.</div>
<div>
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. </div>
<div>
Power cycled my Mac. <b><span style="color: red;">done.</span></b></div>
<div>
Installed XCode 3.2 without having started iTunes before so it couldn't leave some trails in the system. <b><span style="color: lime;">worked.</span></b></div>
<div>
XCode 3.2 provided an older version of the powerpc gcc. <span style="color: red;"><b>grrr...</b></span></div>
<div>
<div>
I tried to compile zxsp. <b><span style="color: red;">failed.</span></b></div>
</div>
<div>
I searched, found and downloaded XCode 3.2.6, whoopy 4.1GB. <b><span style="color: lime;">done.</span></b></div>
<div>
I installed XCode 3.2.6, or, erm, at least, what it liked to install. Basically everything except the development tools itself. <b><span style="color: red;">grrr...</span></b></div>
<div>
I checked whether i still could compile zxsp. <b><span style="color: red;">failed.</span></b></div>
<div>
I installed XCode 4.0.5 from the AppStore. <b><span style="color: lime;">done.</span></b></div>
<div>
<div>
I checked whether i still could compile zxsp.<b><span style="color: red;"> failed.</span></b></div>
</div>
<div>
I checked whether i could use XCode. <b><span style="color: orange;">Basically yes.</span></b></div>
<div>
I tried to compile a project. Initially failed, but after updating some settings worked. <b><span style="color: lime;">done.</span></b></div>
<div>
<div>
I checked whether i still could compile zxsp. <b><span style="color: red;">failed.</span></b></div>
</div>
<div>
I tried to compile Qt 4.8.3 from the saved sources. <b><span style="color: red;">failed.</span></b></div>
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. <b><span style="color: orange;">If they were installed, i didn't find them.</span></b><br />
I installed XCode 3.2 <b><span style="color: red;">aga...</span></b><br />
<b><span style="color: red;">Kernel Panic.</span></b><br />
<b><span style="color: red;">Mac rebooted.</span></b><br />
<b><span style="color: red;">Kernel Panic.</span></b><br />
<b><span style="color: red;">Mac rebooted.</span></b><br />
<b><span style="color: red;">Kernel Panic.</span></b><br />
<b><span style="color: red;">Mac rebooted.</span></b><br />
<b><span style="color: red;">Kernel Panic.</span></b><br />
I booted from the Snow Leopard installation disk. <span style="color: lime;"><b>ok.</b></span><br />
Checked file system. <b><span style="color: lime;">ok.</span></b><br />
Restored from Time Machine backup. 1h later: <b><span style="color: red;">Failed.</span></b><br />
Restored from older Time Machine Backup. 3h later: <b><span style="color: lime;">worked.</span></b><br />
Booted. <b><span style="color: lime;">ok.</span></b><br />
Checked online state. k1.dyndns.org <b><span style="color: red;">not responding.</span></b><br />
Checked local web server:<span style="color: orange;"> <b>running & serving.</b></span><br />
Checked DynDns IP assignment. <b><span style="background-color: white; color: orange;">ok.</span></b><br />
Fixed LAN settings. k1.dyndns.org <span style="color: lime;"><b>online again.</b></span><br />
Downloaded Qt source. (Qt stuff wasn't in the backup) <b><span style="color: lime;">done.</span></b><br />
Compiled Qt. <b><span style="color: lime;">worked.</span></b><br />
Compiled zxsp. <b><span style="color: lime;">worked.</span></b><br />
Will i give it another try? <b><span style="color: red;">Not on this Mac.</span></b><br />
<br />
<div>
<br /></div>
<div>
I'll accept a donated Mac Mini or similar...</div>
<div>
(That's the very unlikely thing to happen...)</div>
<div>
<br /></div>
<div>
... Kio !</div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0tag:blogger.com,1999:blog-3445052556062262094.post-33715540888346021462013-01-07T15:54:00.000+01:002013-01-07T18:50:40.793+01:00zxsp 0.8.0.pre11: Debugger<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBAwVmyEMlV2fUywWGxkOXJ8HhYxvQ0Z1ahT6GkCDoFPYbpUjCY41batgmj-Q429X6kKwxFm1l0wCt4y1rGx1daPvErKOMQ9o9jsW2rddDaOJa6Oa6hY7PRjx-d5tHYtdwYw_1JvlzNn0/s1600/newyear.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBAwVmyEMlV2fUywWGxkOXJ8HhYxvQ0Z1ahT6GkCDoFPYbpUjCY41batgmj-Q429X6kKwxFm1l0wCt4y1rGx1daPvErKOMQ9o9jsW2rddDaOJa6Oa6hY7PRjx-d5tHYtdwYw_1JvlzNn0/s1600/newyear.png" height="320" width="150" /></a>Hi,<br />
<br />
i hope you had a nice trip through 2012 and arrived well in 2013.<br />
<br />
<h4>
What's new in this version?</h4>
<div>
<br /></div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq-AHtzU5pUGCL24e_oDqe-JkcPlyKROB4LQqAocHbF2-DGI9WnIRK2m1Ugduwez1u-_mLwjdN-nuI1s2QEkzV3JcZ952Nr97lb0fRwye8eu5As8ur0bucE0cT4aIeuCt2ZJortzPb1Jc/s1600/disass-2013-01-03.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq-AHtzU5pUGCL24e_oDqe-JkcPlyKROB4LQqAocHbF2-DGI9WnIRK2m1Ugduwez1u-_mLwjdN-nuI1s2QEkzV3JcZ952Nr97lb0fRwye8eu5As8ur0bucE0cT4aIeuCt2ZJortzPb1Jc/s1600/disass-2013-01-03.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ad-hoc assembling in disass view</td></tr>
</tbody></table>
I still worked on the debugger and added Ad-hoc assembling in the disassembler view.<br />
<br />
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.<br />
<br />
<ul>
<li>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. </li>
<li>The view which has keyboard focus is highlighted with a light green border and only here a blinking cursor is displayed.</li>
</ul>
<br />
<h4>
Forecast</h4>
<div>
<br /></div>
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.<br />
<br />
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.<br />
<br />
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: <a href="https://bugreports.qt-project.org/browse/QTBUG-28804" rel="nofollow" target="_blank">bugs at qt-project/28804</a>.<br />
<br />
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.<br />
<br />
... Kio !<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/17460730281415132574noreply@blogger.com0