26 June 2023: Came up with the crazy idea for this program, as well as the even crazier idea to do the whole lot in machine code, just to see if I can. Wrote a rather lengthy brute-force routine (392 bytes) to check every key on the keyboard and assign a unique value to the D register for any key pressed (lower-case letters for A-Z, numbers for 0-9, E/C/S for Enter and the shifts, _ for space, copyright symbol if no key pressed). All the values can be varied individually and it still reacts near-instantly (certainly a lot faster than an INKEY$ and 40 IFs in BASIC). 27 June 2023: Improved the keyboard checking routine so that it now points to a block of 8 bytes corresponding to each keypress - this will hold (so far) the required HL value for the beeper routine (when it's done), the attribute square to light up, and has space for four more bytes for extra data in the future if needed. There is a rudimentary Spectrum keyboard diagram on screen with individual keys lighting up to show that it works. Drew the regular piano keyboard layout on screen. Adapted a Hewson routine that shifts the entire screen right by one pixel to instead shift one line right by four pixels. Wrote my own routine to stretch an entire line to double height (though this doesn't work if it spills over a break between the thirds of the screen; didn't need to do that). ALPHA1: Combined the two and adjusted all the required values so that the note names are turned bright as a corresponding key is pressed. There are now only two spare bytes in the key data as two attribute addresses need to be stored - these are adjacent addresses for a black key and the same addresses for a white key. 28 June 2023: ALPHA2: Added the beeper routine and all the HL/DE values (which now fill all the space in the key data block). Annoyingly, all the calculated HL/DE values made the notes dreadfully out of key in the lower octave (just below middle C). ALPHA3: Shifted all the notes an octave upwards to keep them (just about) in tune. Lower frequencies were still slightly out of tune (intervals weren't right) - higher frequencies are OK. Analysed each note with Christian Zeitnitz's Soundcard Scope. The top octave is consistently around 91% of the correct frequency but it tails off to around 87% at middle C. ALPHA4: Hence, adjusted the frequencies as necessary, calculated new HL and DE values, and now they're about as much in tune as I can possibly make them. One thing is for certain at this stage - that clip-on keyboard that could be attached to the C64's very chunky Bread Bin case made it a lot easier to turn into a crude musical instrument! BETA1: Converted the screen for the Hol-Rock keyboard... BETA2: ...followed by the data for the HL/DE values and the new attribute positions on screen. Effectively, it's done! It could be released now. But this isn't *me*. It needs a lot more polish! BETA3: Gave the screen a title (in the INPUT area, with some trickery used to make the J in the JMC logo...), centralised the keyboard and took the notches out of the top C. Some of the code could be simplified this way, but all the positional ATTR and 22/*/* values needed to be changed. Dummied out the code that shows every keypress. It's now presentable, but could do with a title screen. 29 June 2023: Made the loading screen, even though it will take longer to load than the program itself. BETA4: Added a "tune" when the program starts, highlighting some squares of the loading screen. Added an intro page. BETA5: Corrected the frequencies of the introductory scale, again using the output from the Soundcard Scope. BETA6 (and final version): Corrected the bottom three notes that were still out of tune. Removed the ability to break out of the program... and made the final tape. I absolve myself of all responsibility for any mental damage that occurs as a result of this program. IN THE NAME OF SCIENCE, it sounds awful. It's supposed to.