Early eighties, to be more precise.
You see, there was Apple DOS (Disk Operating System). And then there were other Disk Operating Systems, faster and therefore better (OK, faster because very often they left out a whole lot of error checking that the Apple DOS performed — but if you have an error there’s not much you can do about it so why check :-)
One of these was Diversi-DOS. It had a splash screen, which of course was stored on the disk, along with display code.
So of course I promptly hacked the splash screen to display my own message. Recently came across a printout from way back then. So here we have some of the first machine code I ever wrote.
086C- 20 2F FB JSR $FB2F JSR $FB2F and $FC58 clears the High-Res and normal text screens. 086F- 20 58 FC JSR $FC58 0872- A0 00 LDY #$00 0874- B9 A2 08 LDA $08A2,Y Y=0, load from $08A2 (it's down there, 8D 8D 8D etc) 0877- F0 07 BEQ $0880 If the value you've loaded is zero, go to $0880 ($00 marks the end) 0879- 20 ED FD JSR $FDED Otherwise print the character ($FDED prints the accumulator A), increment Y 087C- C8 INY 087D- 4C 74 08 JMP $0874 And get the next character 0880- A0 04 LDY #$04 Now, load Y with 4 and jump to the subroutine at $0895, below. 0882- 20 95 08 JSR $0895 0885- C8 INY 0886- C0 20 CPY #$20 0888- D0 F8 BNE $0882 Then, increment Y and loop, stop when Y reaches $20 (32 -- $ indicates base 16) 088A- 20 95 08 JSR $0895 088D- 88 DEY Now do the same thing, but from $20 down to 4. 088E- C0 04 CPY #$04 0890- D0 F8 BNE $088A 0892- 4C FD 08 JMP $08FD And then exit (back to Diversi-DOS) So here we are with Y=4..31, then 32..5 0895- 98 TYA Move Y to X via A (because this is how a 6502 works) Second TYA maybe a bug* 0896- AA TAX 0897- 98 TYA 0898- 8D 30 C0 STA $C030 Click the speaker by accessing $C030 (yes, one bit, on or off, no Soundblaster) 089B- 20 A8 FC JSR $FCA8 $FCA8 delays for some time dependent on the value in A 089E- CA DEX Now decrement X and loop, i.e. do this as many times as the value in Y 089F- D0 F6 BNE $0897 08A1- 60 RTS And return 08A2- 8D 8D 8D STA $8D8D This is the text that gets displayed by the code up there from $872 to $87E 08A5- 8D 8D 8D STA $8D8D Says "COPIED BY THE DIRTY DEVIL"** in the middle(-ish) of the 40 x 24 screen 08A8- 8D 8D 8D STA $8D8D 08AB- 8D 8D 8D STA $8D8D 08AE- A0 A0 LDY #$A0 $A0 = Spaces 08B0- A0 A0 LDY #$A0 08B2- A0 A0 LDY #$A0 08B4- C3 ??? $C3 = C, $CF = O and so on. 08B5- CF ??? 08B6- D0 C9 BNE $0881 08B8- C5 C4 CMP $C4 08BA- A0 C2 LDY #$C2 08BC- D9 A0 D4 CMP $D4A0,Y 08BF- C8 INY 08C0- C5 A0 CMP $A0 08C2- C4 C9 CPY $C9 08C4- D2 ??? 08C5- D4 ??? 08C6- D9 A0 C4 CMP $C4A0,Y 08C9- C5 D6 CMP $D6 08CB- C9 CC CMP #$CC 08CD- 00 BRK
* As I said, the second TYA is not needed, TAX doesn’t change A. But it’s from the earlier code, which didn’t vary the time of each “note”.
** Which is what I called myself waybackwhen.
The result is a sliding note that slows down as it gets lower, then speeds up again. At full volume (erm, there only was one volume) it’s guaranteed to get attention. Of course some guys were much much more into this than I was.
Stay tuned (might take a few years) for when I blog about the digitized voice I once hacked into the Diversi-DOS startup screen… yes, you can recognizably digitize a voice using only one bit.