The big improvement to the language in Locomotive BASIC, compared to Sinclair BASIC (and many other BASICs), was the addition of timer support:
AFTER 50,0 GOSUB 320
would call the subroutine at line 320 after a second, and
EVERY 500,0 GOSUB 320
would call the subroutine every ten seconds. In both cases, the first value is the interval in fiftieths of a ...
Was Locomotive BASIC significantly better than Sinclair BASIC?
TL;DR: Oh, yes, it was!
I'm aware that both Basics were more advanced than the C64 Microsoft implementation,
Comparison of C64 BASIC to other BASICs of the same time is never in favour for the C64, as it's a quick port of the original 1977 PET Version.
but neither [Locomotive BASIC, BBC ...
Yes, it is possible. There are a number of ways:
If your TV has a SCART connector, you need a cable adapter from DIN 6 to SCART, wired like this (the audio is taken from the audio out using a standard stereo 3.5'' jack):
(taken from CPCwiki)
If your TV does not have SCART, but composite video input, you must
Either use a RGB to CVBS adapter (using for ...
Amstrad used an off-the-shelf component, and did the best they could.
For generating video addresses, sync timing, etc, Amstrad used the 6845 CRTC, which was originally designed for text displays. In particular it is designed for a linear text area, looking up character graphics from a font ROM, so e.g. if you’ve set up a 40-column display with 8px ...
Secure? No, but much more so than protected BASIC programmes on tape, which merely had a single field set in the tape header that triggered the run once then NEW behaviour. It would definitely have slowed down most bedroom crackers, but if you had a sector editor, a printer and a good eye for detail, you could probably work it out quite quickly. As Ken has ...
The fundamental issue with scrolling is that, unless your hardware does it for you, it involves moving around the contents of your whole video memory. In other words, scrolling is the type of video programming task that is mainly limited by your system's fillrate. And, unfortunately, the fillrates of the majority of retro platforms are not particularly good.
As you can see from the schematic, the Armstrad uses a 6845 compatible display controller together with a custom-made Gate Array or ASIC for video output. The Gate Array also controls the screen modes using two bits of a register.
We'll never know exactly what happens until someone reverse engineers the Gate Array, and while it has been decapped and ...
Considering how much of a rush job Locomotive BASIC was, it's remarkably good. But it's not perfect.
Sinclair BASIC has one powerful keyword that Locomotive BASIC lacks: VAL. Sure, Locomotive BASIC has a VAL() function, but Sinclair's one is a function evaluator:
10 FOR X=-5 TO 5
20 PRINT X,VAL ("X * X")
30 NEXT X
This would fail on an Amstrad CPC, but on ...
Especially for writing the sound registers, it is advisable to use the built-in routines.
According to the Schneider CPC firmware guide, the reason is the following:
The CPC keyboard is directly connected to the AY chip - Thus, the keyboard service routine (which runs as an interrupt service routine) is accessing the AY ports directly.
Accessing the sound ...
I used the dsk2cdt2disc tool to convert a .dsk image to a .cdt tape file. I can then play this tape file via an app (or convert it to audio data) and use a standard Amstrad tape cable to play the audio out to the 6128.
I place a blank or erasable disk in the 6128, and then type:
Then I start the tape audio playing, which will load a boot ...
The two machines had very different video memory layouts. The Spectrum had only 6144 bytes of video bitmap, plus 768 bytes of colour attributes for it. The bitmap was monochrome, but one could set foreground and background colours for 8x8 pixel blocks.
The Amstrad had much more video memory, at 16384 bytes, and it was a "proper" colour bitmap, with two, ...
I've written various programs that may help, if the DSK files don't make use of copy protection.
If you can get files onto the +3 via the ZXMMC, you can use DU54 at http://www.seasip.info/Cpm/software/amstrad.html to write unprotected disk images to disk (or vice versa). It may be easier to unpack DU54.PMA within a CP/M emulator and just transfer the +3 ...
This is a wiki answer, so please amend with additional solutions, or improve the ones below:
CPC Tape Software
Tape images are normally downloaded as a .cdt file, the same file format as the Spectrum .tzx tape format. Though these do not contain any sound data, they can be played back on an Android or iOS phone, using an app such as 'PlayZX' or 'Speccy Tape'....
but I can't find any explicit documentation.
The documentation for the Z80 behaviour is in its manual. For the way the CPC hardware handles it, you may need to see these circuits. It may, for example hold an IRQ until it is accepted.
but what happens in the case of the prefix? Is the interrupt acknowledged after the next instruction has been executed?
According to this CPCTech entry:
In the CPC the Gate Array generates maskable interrupts, to do this it uses the HSYNC and VSYNC signals from the CRTC, a 6-bit internal counter and monitors the interrupt acknowledge from the Z80.
When [counter conditions are met] the Gate-Array will issue a interrupt request to the Z80, the interrupt request remains ...
As stated, mode 3 is an unofficial mode and thus a side effect of hardware implementation, so the circuit is designed to handle only three modes (bit values 00, 01 and 10). This means that bit combination 11 is interpreted as some other combination of bits.
From the list of modes' features it looks like there are three circuits that read video mode value: ...
It sounds like you are probably referring to the 1984 release of Chipwits. It was originally released for the Macintosh, and was ported to the Apple ][ and Commodore 64.
The screenshot below is from the version for the C64.
Interestingly, a modern version of the game exists too.
I'm not familiar with that system, but if users had the ability to protect their own files, then no it was not secure.
If you can protect your own files (with known contents) then you have easy access to both the protected and unprotected file. XOR has always been a very common encryption method, so it would have been natural for a curious individual to ...
The Amstrad CPC was not slow at scrolling.
Hardware scrolling as originally intended
Ever since the Amstrad CPC was released, even BASIC programs could use vertical hardware scrolling of the whole screen by just printing text past the bottom line.
It is true, though, that when used in the simplest way, the granularity of the hardware scrolling is a bit ...
'Disc missing' may indicate that the disk is not spinning fast enough, or the index hole sensor is not working properly.
The most likely cause is a bad belt. If the computer is left idle for long periods the belt tends to deform where it goes around the motor pulley. So even though you replaced the belt only 'a few years ago' it is the first thing you ...
Was it Robot Odyssey? This fulfills most of the criteria in your question except that Robot Odyssey was not isometric - or at least I have never seen an isometric version. It required you to program a robot in advance to solve room challenges and it was an 8-bit game in the 8-bit era.
Here's a video of the game on the Apple //.
No, it wasn't considered really secure. In fact several programs existed at the time, including small "type-ins" available in magazines for removing that exact protection. There are some of them listed in the CPCWiki, which are no longer than 3 lines of BASIC (well, sort of) code.
I'm not entirely sure when the first such program appeared on a magazine, but ...
There's another version I found online, but it's the DOS version. In that version, it only used the first three letters.
Typing JOYOUS CELEBRATION would be understood as JOYSTICK.
The DOS version, however, is different than the CPC version.
While the source needs to be analyzed to get the actual algorithm (I think they rolled their own), it is possible to ...
As I was expecting, it was an error in my code :) pelrun was very kind and found the bug (see my question on CPCWiki's forum) so props to him.
I'll try to explain the issue:
Notice I'm hooking into the jump entry by setting up a FAR CALL. Notice how that's a FAR CALL and not a JUMP? There's an extra return address there that shouldn't be pushed into the ...
Call accepts only integers and pointers as parameters; both are 16 bit values. The parameters are put on the BASIC stack. IX points to the top of that stack. The number of parameters is put into A. The machine code operation needs to take it from there, including figuring out (or just assuming) the data type of the parameters.
For an example, see e.g. http://...
For the ZX Spectrum:
Sorted by amount of non standard modern equipment needed (less to more):
A smartphone with SpeccyTape (IOS, unfortunately, now unmaintained and not available for 64 bit devices) or PlayZX (Android) and a stereo to mono cable.
TZXDuino / TAPDuino: hobbyst grade gadget (built and sold in several places) that essentially does the same as ...
As far as I know, no /INT is remembered as it is purely level-triggered, as @Raffzahn noted. So losing interrupts in your conditions is just expected.
Same design is in ZX Spectrum, with probably a longer pulse. Some ZX clones are even capable of catching interrupt several times when the interrupt routine is as simple as EI:RET.
EI disables interrupt ...
My best mental reverse engineering of the constraints applied to the CPC bus, based on reading alone, is that it has a period of four cycles. Disclaimer: I'm not much of an electronics person, just an avid schematic reader as an offshoot of emulator authorship.
The Z80's WAIT, which is the recipient of the gate array's READY is signalled for three out of ...
According to the CPC schematic, the Armstrad uses a gate array to generate video, so we'd need to know how this gate array is programmed for an exact explanation.
But expanding on the comment of supercat, we can do an educated guess:
Assume we have an 8 bit shift register in the gate array, with a tap for bit C0 at the end, a tap for bit C1 in the middle, ...
Short answer from memory:
At the beginning of a frame the address is set to zero
The address is incremented over a line for R0 (total chars aka horizontal timing) character access cycles.
Only R1 (displayed characters) are visible.
The address is reset after R0 character access cycles.
Then the scan line counter is incremented
When the scan line counter ...