[00:00.000 --> 00:12.040] Okay, then we'll start. Well, everyone's now seen all of the slides, so we can just go [00:12.040 --> 00:17.280] down the pub. So, as this part of the slide says, my name is Steve, and as that part of [00:17.280 --> 00:21.040] the slide says, I'm a bit of a geek. Now, if we've all turned up to the right room, [00:21.040 --> 00:25.080] this is a talk about old computers and emulation and things that I've learned about old computers [00:25.080 --> 00:28.640] through emulation. Over the course of the next 20 minutes or so, I'm going to look at [00:28.640 --> 00:32.480] why emulation is really quite fun. I want to mention these seven things that I've learned [00:32.480 --> 00:36.920] over the last year or so, and then the honoree mentions there's some other stuff that I found [00:36.920 --> 00:42.040] that was too good to go to waste. So, before all of that, who am I? What have I done to [00:42.040 --> 00:46.920] earn a place on this stage? Or is this slide should really be called? It's the ego slide. [00:46.920 --> 00:52.680] Well, the speaker brags about themselves for 10 minutes while everyone else gets bored. [00:52.680 --> 01:01.600] My slide has that on it. That's not a computer. That's Lego. Yeah. So, who am I? Well, I'm [01:01.600 --> 01:05.960] a game developer. I've been a developer for quite a few years. I've written console games. [01:05.960 --> 01:11.160] I've written mobile games. I've written a book, 20 Go To 10, which was crowdfunded last [01:11.160 --> 01:18.240] year. And it's a very good book on old computers, because that's essentially all I do. I've [01:18.240 --> 01:25.320] spoken at this conference a few times before, and I still haven't got it right. So, everything [01:25.320 --> 01:31.040] that's on that slide is not really that useful. It's about what's not on that slide. I'm not [01:31.040 --> 01:36.000] a professional retro developer. I haven't built, you know, the Vega. I have not built [01:36.000 --> 01:43.040] the new Commodore 64 machine. Everything that I have done with retro has been just me having [01:43.040 --> 01:47.320] a fiddle around with electronics. Essentially, that's a long-winded way of saying, if I can [01:47.320 --> 01:54.200] do this, anyone can. So, why is emulation useful? Well, it just is. And it isn't necessarily [01:54.200 --> 01:59.080] about games. It's about being able to see the machine. How does it boot up? How does [01:59.080 --> 02:04.560] it start? What goes on behind the hood? And you can do it safely. You can't break anything [02:04.560 --> 02:09.080] when you're running this stuff through an emulator. So, where should we start? The [02:09.080 --> 02:15.200] Jupiter race. Each of these, I'm going to mention a couple of emulators that I've used [02:15.200 --> 02:19.800] and experimented with. Obviously, Mamers probably got all of these anyway, but Mamers is too [02:19.800 --> 02:23.920] big for me to compile. I like the smaller emulators because I can compile them easier [02:23.920 --> 02:28.440] and I can actually see. That way, I've got the development environment of the emulator [02:28.440 --> 02:33.600] and I can then run it through GCC as well. So, what did I know about the Jupiter race [02:33.600 --> 02:38.440] before all of this? Well, it uses FORTH. The first thing anyone will say about the Jupiter [02:38.440 --> 02:43.800] race, well, it programs in FORTH. And it's just like a ZX81 because the guys, Vickers [02:43.800 --> 02:48.760] and Al Vassa, worked on the ZX81. They also worked on the beginning of the Spectrum. And [02:48.760 --> 02:53.440] they said, why is Clive Sinclair making all this money on our computer? We could build [02:53.440 --> 02:57.240] a computer of ourselves and we could make all the money. And they did. Unfortunately, [02:57.240 --> 03:03.160] they didn't sell any machines. So, they made all the money of about 4,000 quid. But it's [03:03.160 --> 03:07.400] a very nice machine and the prices of the army bear just stupid. It is why I don't have [03:07.400 --> 03:12.440] one. And when I said it's like the ZX81, it's very like the ZX81. This is the code [03:12.440 --> 03:21.240] from two different emulators that reads the keyboard. Can you spot the difference? No, [03:21.240 --> 03:26.280] there isn't. Well, there is. There is one difference. Jupiter 8th added an extra shift [03:26.280 --> 03:30.760] button in the bottom right. And that's the only change between the two machines' keyboard [03:30.760 --> 03:37.840] code. One thing. What else do we know? Oh, it's got a font which is stored in memory. [03:37.840 --> 03:43.560] And this was really interesting. Because the font is stored in memory. But this is the [03:43.560 --> 03:49.880] font, but it's not stored like that. Well, if you have a look, look at some of the... [03:49.880 --> 03:55.240] It's stored here. That's not a very big memory location for the code. So, what's it actually [03:55.240 --> 04:01.080] doing? Well, if you look at letters, you know, some of these, they can go below the line. [04:01.080 --> 04:07.000] But most don't. So, and you've got some things which go to the top and some that don't. So, [04:07.000 --> 04:10.760] if you've got a capital letter that doesn't go above a line and go below the line, why [04:10.760 --> 04:17.680] do you need all eight bytes to store that letter? You don't. You just hot chop the top off. [04:17.680 --> 04:23.080] And then you write a piece of code that puts that byte back in before you render it. So, [04:23.080 --> 04:27.760] they managed to save a whole chunk of code. The graphic symbols you see at the top, they're [04:27.760 --> 04:33.000] not stored in memory. They're generated by code. Again, you've saved another 200-something [04:33.000 --> 04:40.760] bytes by doing that. In fact, the only symbol in the whole font which is copied in its entirety [04:40.760 --> 04:47.280] is the copyright symbol. It's the only one that uses all eight bytes. And everything [04:47.280 --> 04:53.240] else is just modified some way. And it took only 64 bytes of code to do all of this munging. [04:53.240 --> 04:59.160] So that's quite a big saving over every single top and every single bottom of each letter. [04:59.160 --> 05:07.080] Next machine. Oh, there's a couple of murmurs for that one. Good. It's one of my favourites. [05:07.080 --> 05:11.720] Obviously, when anyone mentions the Welsh computer industry, they have to mention the [05:11.720 --> 05:16.120] dragon because it's pretty much the only one that existed. But it's a great machine. [05:16.120 --> 05:22.200] The 699 processor is a phenomenal piece of work. Wonderful machine. It's also told it's [05:22.200 --> 05:27.680] a bit of a rip-off of the Tandy Coco. It isn't. Both the dragon and the Tandy Coco were based [05:27.680 --> 05:32.480] on the same reference design that Motorola put out to basically sell their chips. So [05:32.480 --> 05:37.600] they both used exactly the same setup. The other thing that people know about the dragon [05:37.600 --> 05:46.240] other than the fact it uses Microsoft Basic is green. The video chip defaults to green. [05:46.240 --> 05:55.120] Which colour green? That's colour green. Seriously, dudes. Why you thought that was a good thing [05:55.120 --> 06:07.960] to boot up to in the morning? It means your games look like this. Now, luckily, someone [06:07.960 --> 06:14.280] had the bright idea that you could actually just not use the colour. Build all your games [06:14.280 --> 06:18.040] in black and white because then they look a bit better. And they look like this. Which [06:18.040 --> 06:26.160] is fairly respectable for a machine from 1982. This one is Jet Set Willy. Very well known [06:26.160 --> 06:33.160] that the 48K Spectrum had Jet Set Willy but the much smaller Dragon 32 had Jet Set Willy [06:33.160 --> 06:37.480] with more rooms in it. Because they did all the graphics in black and white so there was [06:37.480 --> 06:41.520] less colour needed so they got more data space and of course the processor was a lot better [06:41.520 --> 06:45.960] than the Z80. What else do we know about the dragon? Yeah, that's its font. It's not very [06:45.960 --> 06:51.480] pretty I'm afraid. But this is the bit that I found interesting. This sets up the graphics [06:51.480 --> 07:00.680] mode. At no point are you actually sending data across the bus. If you write to a memory [07:00.680 --> 07:06.520] address ffc6 for example, it will set a bit. It doesn't matter what data is on the data [07:06.520 --> 07:12.680] bus, it's just not read. If you write to c6 it writes a 0 bit, if you write to c7 it [07:12.680 --> 07:20.840] writes a 1 bit. You can send data by just writing anything to an address. That I thought [07:20.840 --> 07:26.080] was a really interesting approach. Turns out it's not the only machine to do it. Turns [07:26.080 --> 07:30.760] out ARM did it as well. The Archimedes, they just said right we're not going to connect [07:30.760 --> 07:36.440] the data bus to this chip. It'll be cheaper and then we'll write data to it just by toggling [07:36.440 --> 07:44.760] addresses. Nice clever way. So what computer's coming next everybody? It's the Game Boy. Pretty [07:44.760 --> 07:50.440] sure most people have had one of these. They're a bit like the Nokia phones of their era. You [07:50.440 --> 07:56.560] drop it on the pavement and the pavement cracks. That sort of thing. So what did I know about [07:56.560 --> 08:01.600] the Game Boy? Well there are so many emulators out there that emulate this and some variation [08:01.600 --> 08:08.720] of it. Four shades of green and had a version of DRM. Now I know where we are so I'm pretty [08:08.720 --> 08:16.520] safe in saying DRM is a bad thing. But this is what they did. Now that's currently obviously [08:16.520 --> 08:19.800] too small for you to be able to see but that's not important. What's important is that it's [08:19.800 --> 08:26.440] all on the screen. That is the first 256 bytes of the Nintendo Game Boy ROM. And in this lot [08:26.440 --> 08:29.980] it has to set up the graphics system, the sound system, it has to do its copy protection [08:29.980 --> 08:33.720] on the cartridge you put in to make sure it's an official cartridge. And it does that in [08:33.720 --> 08:39.520] that 256 bytes of code and then this is the bit that does the check. You put two pointers [08:39.520 --> 08:44.240] into memory, one into the cartridge that's been inserted and one into the 256 bytes of [08:44.240 --> 08:50.480] ROM and it says okay if all of these bytes in the cartridge match all of these bytes [08:50.480 --> 08:56.000] in the ROM then it's a legitimate cartridge. You're allowed to play and the game game continues. [08:56.000 --> 09:00.760] But what bytes are these? Well there's not many of them, you can see it goes around the [09:00.760 --> 09:05.960] loop and if it doesn't match the machine just locks up, that's fine. Well these are the [09:05.960 --> 09:14.200] bytes that it checks. Can anyone spot the pattern in those bytes? Let me show you in [09:14.200 --> 09:22.440] a graphical form. Anyone spot the pattern in those bytes? The logo that comes up when [09:22.440 --> 09:28.800] you switch on the Game Boy is that? It's in code. So it checks for the Game Boy Nintendo [09:28.800 --> 09:34.760] logo at the start. This means if you're doing a dodgy cartridge you have to copy the Nintendo [09:34.760 --> 09:40.160] logo into your cartridge. This means you are committing a copyright law infringement and [09:40.160 --> 09:47.480] because it's a logo it's a trademark law as well. As much as I hit the other thing whoever [09:47.480 --> 09:55.280] came up with that idea, that was a smart idea. I just disagree with it. Pac-Man. Originally [09:55.280 --> 10:00.800] called Pac-Man I can't think why they would change the name. It's a lovely little machine [10:00.800 --> 10:07.400] and it's incredible when you consider how much memory it has. 3K of memory for a full [10:07.400 --> 10:12.360] screen of color graphics. Now the way that it does this is through tiling and through [10:12.360 --> 10:18.240] a lot of clever hardware. But the bit that's interesting is how it's laid out. Again you [10:18.240 --> 10:22.640] don't really need to look at this but if you come up close the memory goes in this direction [10:22.640 --> 10:27.120] then in that direction then in that direction then down the other side. It's a weird way [10:27.120 --> 10:36.560] of mapping. But it means that when you get to level 256 this happens. I don't expect [10:36.560 --> 10:40.840] anyone to have got there but thanks to emulation I can write one byte and I can actually play [10:40.840 --> 10:47.480] level 256. Now it looks like the screen is all corrupt because some kind of graph, it's [10:47.480 --> 10:52.680] not. You know when you're playing the game and you get oranges and strawberry and fruit [10:52.680 --> 10:57.760] in the middle of it here? That's what it's trying to draw. They never thought anyone [10:57.760 --> 11:01.840] would get to level 256 so they never had a piece of code that checked the number of pieces [11:01.840 --> 11:05.880] of fruit that it should draw. And this is just running over all memory drawing all the [11:05.880 --> 11:14.400] fruit that it can find and then the rest of memory that it can find. That bit there, brilliant. [11:14.400 --> 11:21.520] So Pac-Man done. ZX81. Any fans of the ZX81? I was expecting a bigger cheer to be honest. [11:21.520 --> 11:27.880] We've got two fans over there. First machine I ever had. Don't worry that's not one of [11:27.880 --> 11:37.800] my security questions. 1k of memory. 1 kilobyte. No colour, no sound, it's complete moot. [11:37.800 --> 11:43.600] But we had a chess program that ran in 1k. There was a 3D monster mice, not 1k but still [11:43.600 --> 11:52.400] 3D games on a piece of plastic, basically a black plastic cheese wedge. You could get [11:52.400 --> 11:59.200] a 16k RAM pack. Wow, think of all that extra memory. What can you do with that? A very [11:59.200 --> 12:04.400] interesting fact that I found out completely by accident. I was taking a photograph of [12:04.400 --> 12:10.360] this for the book and there's a big story about the ZX81 RAM pack wobble. And because [12:10.360 --> 12:15.280] this RAM pack is set on the back of the machine it does this and then it crashes. Well people [12:15.280 --> 12:20.240] solve this problem by blue tack and with glue. Some people solve the problem by just buying [12:20.240 --> 12:25.640] a better machine. I solved the problem by actually sticking the two together with screws [12:25.640 --> 12:29.240] and really folding it in nice and tight. I thought I'm going to get a picture of this [12:29.240 --> 12:35.280] and this famous RAM pack wobble thing. So I measured the angle between the ZX81 case [12:35.280 --> 12:44.080] and the 16k RAM pack. It's 16 degrees. So what did I find out about the ZX81? Well [12:44.080 --> 12:49.040] how does it know there's a 16k RAM pack in there or not? Well it just tries everything. [12:49.040 --> 12:52.920] It just writes to every memory address it can find and when it's on it says oh hang on [12:52.920 --> 12:57.600] I've got no memory addresses over here it says well that's where your memory stops. Just [12:57.600 --> 13:03.560] writes data into it and then reads it back again. Very simple but effective. The grown [13:03.560 --> 13:09.240] up version of the ZX81 was the spectrum. This one did have colour of sorts. It had sound [13:09.240 --> 13:17.080] of sorts. It went beep. But what a machine. There are so many emulators for this machine [13:17.080 --> 13:23.320] it's not even funny. Even I've written one. But what can we say about the machine or the [13:23.320 --> 13:28.000] keyboard other than being rubbery dead flesh thing? It's how the keyboard's read that's [13:28.000 --> 13:35.960] kind of interesting. And it works this way. A Z80 machine has an input output system using [13:35.960 --> 13:41.160] memory and an input output system using ports. So you can communicate with systems that aren't [13:41.160 --> 13:46.400] based on a memory bus. So what does it do to read the keyboard? It does an out request [13:46.400 --> 13:51.280] onto a port and if there is a zero in any one of these bit positions it means the key [13:51.280 --> 13:55.640] is down. Well a traditional thing in a lot of these machines of the early 80s it would [13:55.640 --> 14:00.920] always be negative logic. So if you have zero zero zero zero for example in that it means [14:00.920 --> 14:05.480] all of those keys are down. Which funnily enough means it's quicker to check for five [14:05.480 --> 14:10.440] keys being down than it is to check for one key. Because if you want to check for a very [14:10.440 --> 14:15.120] specific key you've got to check the individual bit. Whereas if you just don't care about [14:15.120 --> 14:19.520] it you just say right well if it's not if it isn't one one one if it's you know it [14:19.520 --> 14:24.680] will just trigger as one of these keys is down. That's all it needs to worry about. [14:24.680 --> 14:29.080] And finally of our seven the Commodore 64 which I'm kind of contractually obliged to [14:29.080 --> 14:34.880] sort of put in since I put in Sinclair as well before. Commodore 64 what can we say? [14:34.880 --> 14:39.440] Well it's a bread bin and there are far too many emulators as well to mention. It was [14:39.440 --> 14:44.880] originally called the Vic 40 because the one before this was the Vic 20 and by a nice coincidence [14:44.880 --> 14:52.520] 40 in hex is also 64. A lot of memory 64 kilobytes of memory. 64k of memory hang on [14:52.520 --> 14:57.920] wait a minute how does that work? How can you have a machine with 64k of memory in? [14:57.920 --> 15:07.600] The address range is always 64k. So you've got 64k of memory and that's all you could [15:07.600 --> 15:12.400] ever get. Where's everything stored? Where's your basic interpreter? Where's the system? [15:12.400 --> 15:17.160] If you've got 64k of memory there's not enough room to store the system. Well this [15:17.160 --> 15:22.520] is what it did. It gave you all the memory and they said actually no I need this bit [15:22.520 --> 15:27.760] for my ROM. I need this bit for the SID chip to do the sound. I need this bit for my kernel. [15:27.760 --> 15:34.200] So essentially you don't have 64k of memory. It's all hidden by the ROMs. But there was [15:34.200 --> 15:41.920] an instruction you could call which was that and it would basically say yeah I know there's [15:41.920 --> 15:48.480] a basic ROM over there but really I know machine code. So just ignore the ROM and it just switches [15:48.480 --> 15:54.520] the whole ROM off. If you don't want to use the kernel or the system ROMs there to do [15:54.520 --> 15:58.840] the rendering to the screen you can just say well I know where the screen data is I'll [15:58.840 --> 16:03.080] just write to it directly so you can turn that one off as well. And essentially if you're [16:03.080 --> 16:06.440] prepared to go the whole machine code route you can just turn it all off so you've got [16:06.440 --> 16:12.680] 64k of memory. That's the only way you could have done it. So what are the other mentions [16:12.680 --> 16:18.360] that we should do? Well I should probably mention the X81 again because it is just an [16:18.360 --> 16:23.200] amazing machine. I also have to mention the Game Boy again obviously not so close as the [16:23.200 --> 16:28.560] brilliant emulator but one of the talks later on is about the Game Boy emulator and they're [16:28.560 --> 16:36.000] in the room and I don't want to offend them. Isn't that right? The Spectrum, the Jetpack [16:36.000 --> 16:40.920] game, there's a couple of things I'm using about this game. One, very good game. The [16:40.920 --> 16:50.200] people who wrote it later became rare that did Goldeneye. This drew the screen backwards. [16:50.200 --> 16:53.280] Most people think when you draw a screen you start at the top and you go down to the bottom [16:53.280 --> 16:58.520] right? That's how you do it. Well they couldn't do that because their code was a bit slow [16:58.520 --> 17:04.120] so what they realised is if I'm drawing the screen this way if you don't get to the bottom [17:04.120 --> 17:09.520] of the screen before the TV gets to the bottom of the screen you only ever get half a screen. [17:09.520 --> 17:13.520] So what they did is they drew it backwards. You start at the bottom and go up to the top. [17:13.520 --> 17:17.480] That way it doesn't matter if your game is too slow you're only ever going to get the [17:17.480 --> 17:22.560] crossover once per frame worst case scenario. So as the screen is refreshing this way you're [17:22.560 --> 17:27.360] rendering that way and if you ever see a little black line when you play Jetpack that's what [17:27.360 --> 17:32.960] it is. It couldn't render the screen quick enough and it's just missed the flyback code. [17:32.960 --> 17:38.960] The other thing is it's also 16K game which means you can fit it onto a cartridge and [17:38.960 --> 17:45.080] this cartridge can take the place of the Spectrum ROM and this was a very unpopular thing. I [17:45.080 --> 17:49.360] mean you'd think you know games laid, who remembers cassette tapes? I've suddenly realised [17:49.360 --> 17:55.160] we might have an audience that have no idea what a cassette tape is. These games were [17:55.160 --> 18:00.160] loaded off cassette and they would make a screechy noise. That sort of thing. That's a good rendition [18:00.160 --> 18:05.560] let's play. I'm sure somewhere, somewhere can actually sing the sound tunes from the Spectrum [18:05.560 --> 18:09.920] and actually load them into a machine. That's probably possible. I don't have pitch perfect [18:09.920 --> 18:13.640] but I'm sure it's possible. So they think why would I want to listen to seven minutes [18:13.640 --> 18:17.720] of screechy noises? Surely I just want to put a cartridge in. So Sinclair made a cartridge [18:17.720 --> 18:23.880] system. It had 10 games on it and that was it. Flop. But because it fitted in 16K it [18:23.880 --> 18:28.960] could be done as a cartridge and because it fits in the same memory as the ROM means you [18:28.960 --> 18:37.120] can't use any other Spectrum ROM capabilities in your code. The Acorn BBC Micro. Popular [18:37.120 --> 18:42.240] for anyone who was in the UK during the 80s because this was the computer we had at school. [18:42.240 --> 18:47.080] It was deemed educational enough to be allowed in the classroom. What's nice about this one [18:47.080 --> 18:52.280] is that they have a little credits page in the ROM. Now it's very difficult to see that [18:52.280 --> 18:57.400] on an actual real world machine because when I showed you the Commodore 64 and the ROM [18:57.400 --> 19:02.680] was overlapping the RAM, the same thing is true of the BBC, its ROM was overlapped by [19:02.680 --> 19:08.560] something else. So you can't read the thanks to page. But because of emulation you can [19:08.560 --> 19:13.560] and you can see all the people they thank. Pretty much everyone and their wife and they [19:13.560 --> 19:23.560] thank the city of Cambridge. Knop. Knop. No operation or no operation. It doesn't do [19:23.560 --> 19:28.760] anything. It's an assembler instruction that pretty much every machine has. Just does nothing. [19:28.760 --> 19:36.160] So why would you ever code that? Well, when you're poor like what I is, you don't have [19:36.160 --> 19:41.040] an assembler. Most people, you know, you'd have an assembler, you'd type in some reasonably [19:41.040 --> 19:44.760] English type things into the assembler. It would convert it into machine code and then [19:44.760 --> 19:49.160] the machine code would run on the machine. I didn't have an assembler. So I had to hand [19:49.160 --> 19:55.000] assemble everything by looking up in a reference book and saying I want to do this instruction, [19:55.000 --> 19:59.320] this is the number I need to do and I type that number in manually to my machine. Now [19:59.320 --> 20:04.080] when you do a jump that goes backwards, you have to write it in two's complement and a [20:04.080 --> 20:10.280] jump like that say F0 is back about what is it, about 16 instructions about. But I can [20:10.280 --> 20:16.440] never remember if it includes the instruction itself or not. So this instruction is two [20:16.440 --> 20:22.520] bytes. So is this going back 16 or 14? No idea. So all I would do is I'd put a big stack [20:22.520 --> 20:28.360] of knobs. So wherever it jumped to, it's going to be a safe instruction and it's not going [20:28.360 --> 20:36.800] to mess up the machine. Turns out I wasn't the only person to have ever done that. Microsoft [20:36.800 --> 20:44.800] Basic. If you type weight 6502 comma 1, it prints Microsoft on the screen because these [20:44.800 --> 20:51.840] bytes are hidden in the computation for the sign function. But that's not ASCII. If you [20:51.840 --> 20:57.240] mask off those bits, shift them around a bit, subtract something else, then it's Microsoft [20:57.240 --> 21:04.800] but backwards and it's there. Microsoft and Apple put a lot of these sort of things. Steve [21:04.800 --> 21:10.200] Jobs was very scared. And quite rightly so, loads of people were trying to copy the Apple [21:10.200 --> 21:15.720] 2. Very, very popular computer, particularly in America. So Steve Jobs put a thing in there [21:15.720 --> 21:19.640] where if you went up and you pressed a special combination of keys, it would put up a big [21:19.640 --> 21:25.200] icon saying stolen from Apple. I was going to put that on the slide. Unfortunately, copyright [21:25.200 --> 21:31.160] means I can't put it on the slide. But I can show you Microsoft, one of Microsoft's many [21:31.160 --> 21:35.880] little things they put in there. So with that, I shall end. My beer is getting seriously [21:35.880 --> 21:41.440] low. I will update my FOSDEM scorecard. There we go. If you think after 23, I'd be good [21:41.440 --> 21:47.280] at this by now, right? So with that in mind, I'll open the floor to questions or even if [21:47.280 --> 21:51.200] you've got nice stories about old computers, this is a talk where it's acceptable to use [21:51.200 --> 21:56.880] the phrase, this is more of a comment than a question. So with that in mind, I'll say [21:56.880 --> 22:12.360] thank you very much and over to you. How are we doing? We've got eight minutes for questions. [22:12.360 --> 22:19.640] Orgin, we'll chit chat, whatever we have. There is one over here. Can I tell you on [22:19.640 --> 22:32.600] there what's the way? So what about Amstrad? Amstrad as a company, if you loved Amstrad [22:32.600 --> 22:39.640] on I think the 5th of June 1984, you hated them the day after because they bought Sinclair. [22:39.640 --> 22:43.760] In America, there's a show called The Apprentice. In the UK, we have a version where Alan Sugar [22:43.760 --> 22:52.720] who created Amstrad, he had his own range of machines, CPC6664s and things like that. They [22:52.720 --> 22:59.080] are surprisingly good machines. For a machine that sold a couple of million copies, it doesn't [22:59.080 --> 23:05.120] sound like a lot nowadays, but back then it was a really good, well-made machine, surprisingly [23:05.120 --> 23:22.480] enough. Unfortunately, I don't have one. Their chips are called Roland and Dave, I think, [23:22.480 --> 23:30.960] named after the designers. It's another Z80 machine. The spectrum and what it spawned [23:30.960 --> 23:35.360] really did say, well, we already know Z80, so we're going to go and set up our own computer [23:35.360 --> 23:40.600] company and use the Z80 again. It's not that it was the best machine or the best processor, [23:40.600 --> 23:47.320] but the Z80 did get used in so many things. So it's kind of disproportional to its value [23:47.320 --> 23:53.120] as a chip. Good to hear some Amstrad here. [23:53.120 --> 24:15.400] Yes, it was. So the question is about the, I didn't realize I was doing funnies. Yes, [24:15.400 --> 24:21.360] so the Commodore 64 was called Vic 40 in pre-production and prototyping. ZX Spectrum [24:21.360 --> 24:27.200] was called ZX2 during its prototyping stage. Not unsurprisingly, it came after the ZX80 [24:27.200 --> 24:32.120] and ZX81. The bit, which I'm so glad you brought it up because it's something I forgot to mention [24:32.120 --> 24:38.240] earlier, the ZX80 that Sinclair produced was named because of the Z80 chip. It was Z80 [24:38.240 --> 24:43.920] chip with the extra special ingredient, ZX, for extra. ZX81 was called 81 because it came [24:43.920 --> 24:50.400] out the year after and therefore was related to the year, not the ZX80. The spectrum was [24:50.400 --> 24:55.880] called the Spectrum because it had color. Therefore, ZX81 is probably the only computer [24:55.880 --> 25:02.400] ever named for its year of release. I've never found another one, except probably a Gateway [25:02.400 --> 25:09.400] 2000, but that's a PC and they're boring. [25:09.400 --> 25:25.960] Yes, so the question is, do I know anything about non-Western machines, Russian, Chinese [25:25.960 --> 25:33.320] machines, and the answer is no. Because I'm of that sort of age, I remember when there [25:33.320 --> 25:36.520] was an Iron Curtain and it was called an Iron Curtain, whether that's politically correct [25:36.520 --> 25:41.960] or not, I don't know. But we couldn't get those machines into the West and they couldn't [25:41.960 --> 25:48.120] get our machines across. So they would essentially either smuggle some in or they would find [25:48.120 --> 25:54.240] circuit diagrams and then rebuild their own. There is a massive scenario of clones and [25:54.240 --> 26:02.320] copies and variations from what used to be the whole Eastern block. They are all impressive. [26:02.320 --> 26:07.320] They look like they're homemade, and they just look amazing. It's just the physicality [26:07.320 --> 26:14.200] of the machine. They are carbon copies of other spectrums and things of their ilk, but [26:14.200 --> 26:15.200] they are lovely. [26:15.200 --> 26:45.120] So repeating the question for the crowd, something, something, something, Japanese stuff. [26:45.120 --> 26:52.960] Tell me electromechanical computer. How do we do? Okay. I think you're about to kick [26:52.960 --> 26:53.960] me off, aren't you? Almost. [26:53.960 --> 26:54.960] Just a comment. I don't know if you are aware, but reading the keyboard on the spectrum, the [26:54.960 --> 26:55.960] last eight bits actually select each of each row of the keyboard, so you can do a very [26:55.960 --> 26:56.960] simple routine to read. Is any key pressed by just doing a single read? [26:56.960 --> 26:57.960] Yes. [26:57.960 --> 27:24.640] Press any key. If it's quick, think. [27:24.640 --> 27:35.520] The youngest machine I've made an emulator for. Tricky. It probably is a spectrum or [27:35.520 --> 27:43.480] something like that. One of the first ones I did was a chip 8 emulator, which is an [27:43.480 --> 27:47.480] interesting one. If you want to write an emulator, write chip 8 emulator, because the machine [27:47.480 --> 27:54.760] never existed. It was things like the Cosmic that was it back in the 1970s. This machine [27:54.760 --> 28:00.240] would actually run a sort of a simulator or an emulator inside itself to run the chip [28:00.240 --> 28:05.320] 8 code. Chip 8 didn't exist in the machine. It was an interpreted language that was being [28:05.320 --> 28:09.600] run on a 70s processor. If you see any of the old TV games where you'd sort of play [28:09.600 --> 28:15.160] a version of Pong, the chip inside that is probably an RCA 1802, which would run the [28:15.160 --> 28:37.840] simulator chip 8 language. [29:15.160 --> 29:38.800] It was an Apple One story I wanted to get in, but I didn't think I could get that in [29:38.800 --> 29:46.600] the time frame. It's about the Apple One ROM. It doesn't do much. It's just basically [29:46.600 --> 30:03.920] write data into memory, read data from memory, and execute a program. Use a jump if carry [30:03.920 --> 30:09.160] flag, because the carry flag is always going to be set in one particular way, so it acts [30:09.160 --> 30:12.600] like a different type of jump, because that different type of jump didn't exist. I didn't [30:12.600 --> 30:36.840] have quite the room to include everything, because my time is up. Get lost. Go home.