And probably in that argument of greatest of all time, period. Yes. Shots of Tokido. Yes, huge. We give props to props to do here. That's right. That's right. We don't ignore other teams. That ends up winning for 20 something years. Oh my god, he's so good. I mean, but that's the thing. Like, if it doesn't matter. I think it's about 20 years. No, I think you're right. I mean, this guy is just one of the smartest players of all time. And he doesn't let age affect him. A lot of us love to just sit on that excuse if we're too old to react to this. Well, explain Tokido. Explain Tokido, exactly. Tokido chill, bro. Stop. You're making us all look bad. You're ruining my OS, OK? All of our West is back here. All right, so it looks like we have Jackie versus Sonia. Now, Sonia being played by Rewind here. We saw a little bit of Sonia before from Scar. And again, Sonia and Jackie both considered very, very strong characters in this game. So no real obscure picks here. Both players, both characters have very solid mids and just can dance around the threat of throw or the threat of a nice big mid to the chest. And Rewind playing that character that we've is the only one that we've ever seen Fox lose to. We talked about for some time, Scar getting up with Sonia in this particular matchup. It's Rewind up to par, though. This is his training part. And it's got to be a lot of familiarity between the two. And here's Rewind. No break with Sonia. Easy in every bit of this near 40%. Switching music. No, he didn't have the bar for it. Just ran out. Looking for the neutral jump kick. And the throw. Empty jump roll. Round one. What a turnaround from Rewind. Insane. Absolutely insane here. The empty jump Rewind up to a freight start. Oh, that crushing blow. It does activate if only that second amplified rink connects. And it does a lot of damage. But now you don't have to worry about it too much. Sonia Fox getting right through that roll attempt with the regular throw. If your opponent's trying to roll through, you just throw him. Oh, he's in position. Wait a minute. Did he not hold the crushing blow in that down too? Maybe he just maybe he's saving it for a time. He really, really needs it. I think he really, really needs it. The armor is put in the corner by the Fox. Well, but see, here's the thing. Even though he had to down two, Sonic Fox does have two defensive bars ready to go for the breakaway. So maybe that was the mindset of Rewind in that situation. But who knows? It probably cost him the match right there. Or the round at least. Let's see how the rest of this match plays out in the final round of game number one. Again, this is just the start of 96. What a reaction from the young man Rewind from Vegas. Looking to handle the magic of his own. We don't realize that Rewind is coming off of being the world champion essentially of our video games. It's a brand new game, brand new everything. Fox looking to establish dominance early. He is, he is. He doesn't care who's in his way between him and that big W Combo Breaker champion, Sonic Fox, looking to break the curse of Combo Breaker, not being able to win any Mortal Kombat here, Combo Breaker. He has never won MK a Combo Breaker. And ladies and gentlemen, the home, let that sink in. Cursed, cursed, cursed here in the home of MK in Chicago. Checking them there, that down one. Now this variation of Jackie has canceled all through her strings. And that's an escape field here. Teching the wrong way. He was anticipating getting thrown to the corner. But great, great decision there by Rewind. Oh, no. Making it with, but not punishing. All he's looking for is the chip damage at this point. No less stretch. The down three going to do it. Rewind, one over Sonic. This is a race to two. This is scary stuff. Sonic halfway to losing to Rewind, to losing to this Sonya, a player who was not invited to the summit, a player who did not get voted or qualify into the summit. He actually couldn't make it to even the qualifier he prioritized school, he prioritized work, but you have to respect at the end of the day. Yes, you do. He's a very smart young man. He just graduated. He's a grown man. Now welcome Rewind, by the way, up 1-0 on the legend Sonic Fox. You talked about it. This is the actual apprentice versus the master. Sonic Fox molded him, shaped him. And now is he able to destroy the monster he created? He's going to really regret this if he does go down here. Combo breaker, flipping him over to the other side. Sonic Fox trying to get aggressive here. Checking him and getting hit with a down to crushing blow here, forced to utilize that breakaway. He's got no escape, throw tech, and just snaps the knee in half. That is one of the, like, you guys feel that from home? That hurts my soul every time I see that knee go in the opposite direction that it was intended. It hurts. Shades to like the MK4 throws. Those were absolutely insane. Just elbows and knees go in the wrong way, all over the place. Jumping in with that big, meaty kick is Sonic Fox. He's applying the pressure here, forcing him to utilize that breakaway, still taking so much damage, even though he didn't finish it. The throw, going to keep him in the corner. He's tied up around here. Rewind looking to make the comeback and rolling away, big punish here by Sonic Fox. And it's got the crushing blow. Big damage here. No breakaway for Rewind. This is death, Sonic Fox. Tidus up, F1 to 1. He just tried to go to restart match. I saw it, but said, you know what? Let me let it rock. It was disabled anyway. Go back. Let's see the outros and Rewind sticking to the stage, sticking with this character, sticking with his guns. He didn't even want to think about it. He wanted that short-term memory to kick in. And here we go. One game apiece. Sonic Fox drawing first blood. Oh, here we go. Those are some bruised abs at the end of the day in the roll-away attack. And Sonic Fox started off just trying to roll out this time around. Rewind ready for it. It's the boy tie technique here from Jack. He's just making sure it kicks to the ribs over and over again into the launcher and more knees to the ribs, throwing her over to the other side, over the shoulder. And Sonic Fox looking great, but hold on, getting tossed for his troubles. Forward throw, Rewind trying to make it happen. The anti-air scan won shades of FK9. These fundamentals have been solidified for almost 10 years now. The nine frame mid got to close it out and put Fox on match point.


Okay, you've made a histogram of your data and you're looking at it and it looks somewhat like a bell curve, but there's something going on over here and it makes me wonder are those extreme values or their outliers? Well you can guess and say they probably are because they're so much different than the rest of the data, but we don't know for sure unless we run a test and calculate the values that are outliers. I'll show you how to do that. Okay, I brought up the data that was responsible for that histogram. Let's start by creating a box plot or a box and whisker plot. I'm going to take this column there where the data is, control shift down arrow to make sure I drop to the bottom, get all the data, then go to insert, recommended charts, all charts, find box and whisker, click OK. We've got our basic chart, it's kind of hard to see because it's all squished up. I'm going to click on the y-axis, right-click, format axis, brings this open and set my minimum to be 4.5 to expand it and then close it, get out of the way. So we've got our basic box and whisker, I'm not going to pretty it up, but you can see we've got some points that are sticking out here and those are outliers. This box and whisker, if you remember, the box contains the data that falls in the interquartile range between Q1, which is the lower edge of the box, the first quartile, and Q3, which is the third quartile, the middle of the box is the median, which is Q2. These things are called fences, and they are delimiters. Any points that are outside the fences, above the fence, greater than the fence, or below the fence, are technically outliers. And the way that's calculated, it is the lower, in this case, Q1 plus 1.5 times the entire quartile range, which is the width of that box. And anything that is smaller than that is an outlier, anything greater than that is outlier. You can't just stop here because you don't know if you've got some double points, redundant points in there, or the same value more than once. So we need to dig into it a bit. I do it using descriptive statistics using Excel functions. We use the count, using the count function of 400, get the mean, standard deviation. We use the standard deviation of a sample, because this is a sample. Calculate the min, the max, the range, which is there between the max and the min. And then we calculate Q1 using the quartile.exe function. There's also a quartile inc function, but most people use the exe, and the arguments for it are the data range, E1 to E400, comma, 1, 1 indicates you want the first quartile, 3 indicates you want the third quartile. You could put a 2 in there to return the median if you wanted. The inner quartile range is just the difference in those two, Q1 minus, excuse me, Q3 minus Q1, which is 0.138. And I calculated the fences using the Q1 minus 1.5 times the inner quartile range, gives me 4.71, and then the upper fence is the Q3 plus 1.5 times the inner quartile, 5.265. And that's what those values are. So now let's take this information and see if we have any outliers here. First thing I want to do is to select that column and then go to data and then sort. And so it's sorted from smallest to largest. Now you could just manually inspect these. I like to use a conditional formatting to help me find out. I'm going to use, first of all, select that. Any cell that's less than the value of the lower fence, I want to be red. And then I'm going to use a greater than any cell that's greater than the upper fence. I want to be green, okay? And now I'm going to use the format painter and drag this down to format all my data. And you can see I've got an outlier there, of course, 4.6. And then down at the bottom I've got 4 more, 5.33, 5.33, 5.87, 5.9. That's one way to do it that's really fairly quick and foolproof.


Me-tie-doty walker.  At least that's what people said, so nobody would stay there overnight. Then a rich man offered two hundred dollars to whoever would do it. And this boy said he would try if he could have his dog with him, so it was all settled. The very next night, the boy went to the house with his dog. To make it more cheerful, he started a fire in the fireplace.  For a while, nothing happened. But a little after midnight, he heard someone singing softly and sadly off in the woods. The singing sounded something like this. Me-tie-doty. It's just somebody singing, the boy told himself, but he was frightened. Then his dog answered the song. Softly and sadly, it sang, linchy, kinchy, cally, molly. Not believe his ears. His dog had never uttered a word before. Then a few minutes later, he heard the singing again. Now it was closer and louder, but the words were the same. Me-tie-doty walker. This time, the boy tried to stop his dog from answering. He was afraid that whoever was singing would hear it and come after them. But his dog paid no attention, and again it sang. Linchy, kinchy, cally, molly, ding-go, ding-go. A half hour later, the boy heard the singing again. Now it was in the backyard, and the song was the same. Me-tie-doty walker. Again, the boy tried to keep his dog quiet, but the dog sang louder than ever. Linchy, kinchy, cally, molly, ding-go, ding-go. Soon the boy heard the singing again. Now it was coming down the chimney. Me-tie-doty walker. The dog sang right back. Linchy, kinchy, cally, molly, ding-go, ding-go.  It missed the fire and landed right next to the dog. The dog took one look and fell over. Dead from fright, the head turned and stared at the boy. Slowly it opened its mouth and...


Let's now deal with another huge section of instructions. All of these instructions down here. So we can pretty much do it the same way that we did the ALU instructions. So instead of immediate direct indexed and extended, we have accumulator A, accumulator B indexed and extended. So accumulator A, for example, negate, that just means take the contents of A, negate it, and put it back into A. So I think we can probably cover all of these instructions. And I do want to point out something about negate. If you look in the datasheet, you'll see that it's basically zero minus whatever you're targeting, A, B, or some memory location. And you can see over by the flags that N and Z are changed and V has note one and C has note two. Now, if we look at those notes, we can see that the overflow flag should be set if the result is hex 80 and the C flag should test whether the result is zero. Now, that's really interesting because if we go to the programming manual and we look at the instruction description for negate, we can see down here that the overflow is set if there would be two's complement overflow as a result of the implied subtraction from zero. So in other words, the ALU is going to do zero minus the accumulator and whatever the overflow flag is, is whatever it is. And it additionally says that this will occur if and only if the contents is hex 80. So zero minus hex 80 is hex 80, which is why down here they say that the formula for the V flag is just the high bit of the result, seven, multiplied by the negative of the other bits. So that's one thing. The other thing, though, is that it says that the carry would be set if there would be a borrow in the implied subtraction from zero, the C bit will be set in all cases except where the contents of the accumulator is zero. And here in the formula, you can see that we're just oring all of the result bits together. Now, that is not what the datasheet says. The datasheet says that the test is whether the result is zero and then bit is set. And what the programming manual says is, if the result is non zero, then the C bit is set. Well, it turns out that if you do subtraction from zero, then the carry bit really is set when the contents is non zero. So in other words, this datasheet is either wrong, or there may be a line through the equals that just didn't make it through the scanning process. Now, in order to actually verify which one was correct, I did, of course, some formal verification. So we can see here that my formal verification is verifying whether the overflow flag is set if the expected output is equal to x 80, and that the C flag is set if the expected output is non zero. And this passes formal verification, which means that it's the programming guide that's actually correct and not the datasheet. So that was kind of interesting. Okay, so that's great, but it's not unheard of for the documentation to be incorrect. And in this case, we've got one document saying one thing and the other document saying another thing. So what I did is I went to the 6800 simulator on visual 6502, that's right up here. And this is a really nice transistor level simulation of an actual 6800 processor. So what we could do is we could, first of all, notice that it starts with the carry being clear here, and the accumulator being zero. So let's go ahead and put negate a in here. So I'm just going to go for zero. And I'm going to fill the next byte with zero one, which is just a knob, and another zero one just for fun. Okay, so now I just have to reset the processor. Okay, so the data byte is going to be 40. And then I'll just step forward a few steps until we see what happens to the carry. So this should negate zero, which would be zero minus zero, which is zero. Okay, and clearly we can see that the carry flag did not change. Now this is in direct opposition to, so this is in direct opposition to this note two in the datasheet, because the result was zero, right? There's the accumulator right here, it's still zero. And it says, well, if the result is zero, then set the carry. Well, it clearly did not. Let's double check that by changing, let's see, let's reset the processor. And I think, can we change the accumulator to something like, I don't know, FF? No, apparently not. Okay, so let's load the accumulator. It's too bad. Okay, so let's compliment the accumulator. So that will mean we're going to end up with FF. So that's four three. So let's just go ahead and put a four three in here, and then a four zero, and then a no op, reset the processor and see what happens. Okay, so we complimented the accumulator. So we ended up with FF. And then we negated it, and we ended up with one, and we can see that the carry is actually set. So this implies that the programming manual was actually the correct thing. So we have implemented this correctly. Now, the reason that I went into the flags is that ideally, all of these instructions are going to be handled in exactly the same way, with the exact same handling of flags. So for example, if you look at the clear instruction, right, and if we look up here in the poster, where it says clear, you can see that n is set to zero, z is set to one, v is set to zero, and C is set to zero. So that's interesting. So n, of course, would be set to zero because the high bit after you clear is going to be zero. Same thing, z is going to be one, because after a clear, the contents is going to be zero. So the question is, what is the motivation behind setting v and c to zero? So if we look first at the datasheet, and if we look at clear, we can see, okay, reset, set, reset, and reset. So there's no notes or anything. And if we look at the programming manual, because if that's true, and subtracting something from itself results in these flags being exactly this way, then we can simply use the ALU to implement clear and not have to have some special path for implementing clear. So this is basically my hypothesis. So in formal verification, in order to verify clear, what I'm going to do is I'm just going to check that z is one and the n, v, and c flags are zero. And in the implementation, and in the implementation for clear, what I'm going to do is I'm simply going to subtract a from itself through the ALU. And now I'll run formal verification and see if they match up. And perhaps it comes as no surprise that, in fact, that is what happens. We can use the ALU to subtract the value from itself and the flags will come out properly. This kind of makes sense because the carry flag really is the borrow flag. And when you do something minus itself, you're not actually borrowing anything. So that makes sense. And the overflow flag is the same because that has to do with some kind of accidental sign change. And you're never going to have an accidental sign change if your answer is zero. So this is good. So negate and clear can both be implemented by the ALU. Let's take a look at the other instructions. Okay, let's take a look at complement. Now this is not a mathematical operation. This is a logical operation. So all we're doing is flipping the bits. In other words, we're XORing with FF. So if we're XORing with FF, if that's the implementation, then does that mean that the way we set the flags for exclusive or is compatible with the flags for complement? So again, if we go to the datasheet and look at complement, we can see that the N and Z flags are going to be set according to whatever the output is. The overflow flag is reset, and the carry flag is set. And if we look at exclusive or we can see, aha, the N and Z flags are changed, the V flag is reset, but the carry flag is not affected, which seems to mean that we actually cannot implement complement using the ALU to exclusive or the value with FF, because then the carry flag would be affected. Now the interesting thing is that again, if we go to the programming manual, it says that complement is implemented by subtracting the value from FF, and that the carry flag is actually set to one. So which do we believe? Well, if indeed it is FF minus the value, then the carry flag is always going to be one. So here is our implementation. We're simply subtracting, in this case, the A register from FF and performing a subtract operation in the ALU. And in formal verification, we subtract the A accumulator from FF, and we check to see that the N and Z flags are set correctly, and the V flag is zero, and the carry flag is always one. Oops, with the slight error that this should be 4-3 and not 4-0, so that we're actually verifying the correct instruction. Now in this case, our hypothesis turned out to be incorrect, because we can see that formal verification came up with a case where it is not true that the carry is set to one. So apparently what it's been doing is it did a complement of zero zero. So the answer is FF, and the flags got set to D8. So in other words, the zero flag is zero. The negative flag is one, that's all correct. The V flag is zero, that's correct, but the C flag is zero, and we wanted the C flag to be one all the time. So the datasheet says that the carry flag should be set, and the programming manual also says that the carry flag should be set. However, our implementation was using the ALU subtract function to get FF minus the value that we want, to get FF minus the operand. So it turns out that formal verification found a case where it is not true, that if you subtract zero from FF, you will get FF, but the carry flag will be zero, which means that we cannot use the ALU's subtraction in order to implement this instruction. And we also can't do FFX or the operand, because for that operation, the carry flag is not affected. So this seems to be a special operation that the ALU will have to carry out, where it explicitly sets the carry flag to one. So unfortunately, this means that we will have to add yet another function to our ALU, so that it can set the flags properly. So this is now our new implementation of complement. You can see that we're not actually setting anything on input one. And on input two, we're inputting A, and then we're going to do the complement function. So let's just formally verify that and make sure that it works. And indeed, we can see down here that formal verification did actually work. It's a little unfortunate, because now we can't use the same operation for negate, clear and complement. Now let's turn our attention to decrement and increment. Again, can we use the ALU to subtract one or add one? So let's go to the flags. So here's increment, and we can see that the N and the Z flags are set according to the output. The V flag has note five, and the C flag is unaffected. So immediately this means that we can't use addition or subtraction, because those will affect the carry flag. And if we look at note five, we can see that the test is, is the operand seven F prior to execution? In other words, is the result hex 80 after execution? Let's take a look at the programming manual. And we can see that the programming manual says that the C bit is not affected. The V bit is whether there's a two's complement overflow as a result of the operation, which presumably means adding one. And it does say that two's complement overflow will occur if and only if the operand was seven F before the operation. And it says that the C flag is not affected. And unfortunately, they seem to have made a perhaps a copy paste error, where they say that the carry flag is actually going to be set if the result is zero, and it's going to be reset otherwise, which is not correct. And in fact, if we look at decrement, we can see that the C bit is also not affected by the operation. The V bit is set if there's a two's complement overflow. And you can see that there's some other weird thing going on here. And I'm not even sure what that means. But nevertheless, it does say that the C flag is not affected. So now here we can see our implementations for negate clear complement and increment and decrement. Again, they look fairly similar in that we're just using the ALU to determine what the result should be and what the flags should be. And in fact, it's just going to be the same for all of the shift and rotate operations. In other words, we're going to implement them in the ALU, the ALU will set the flags according to what it needs to be. And here's a nice diagram about what all the rotates and shift actually look like. And we can also see that the negative and the zero flag are set according to the result with the exception of logical shift right, where the negative flag is always reset, of course, because we're putting the zero in the high bit. So that makes perfect sense. The carry flag is affected according to of course, whatever bit happens to end up in the carry flag because the carry flag is used for all these operations. And the overflow flag has a note six. Let's see what that is. So note six says that it's equal to the result of the negative flag x or the carry after shift has occurred. Okay. So here's how I've implemented the rotate and shift instructions in the ALU. You can see at the top this is sort of the pattern that I want to implement. So for example, for rotate left, I basically want to place basically nine bits with the carry on the least significant side and the input on the most significant side. And I basically just want to map that so that carry goes into output zero. The high bit of the input goes into the carry. And then the middle bits or the lower bits of input go into the higher bits of output. Now, I can use cat, but the problem with cat is that the problem that I have with with Python and digital logic is that I'm really, really used to treating the most significant bit as the left most bit and the least significant bit as the right most bit. But Python uses indexing, which means that index zero, which would be bit zero, would be on the left because it goes zero, one, two, three and so on. It's the same thing with ranges. If you do a range, it's going to be low comma high. Not only that, but when you have a range with low comma high, it doesn't actually include high. It includes only high minus one. So there's a bit of a disconnect, I feel, or maybe some confusion. So what I've done is I've created this function called lcat. And all lcat does is it takes its arguments, flips them, and passes it to cat. So now I can take the carry flag. So I want to lay out my output like this over here. So I can put the carry flag on the quote left and lcat stands for either left or logical or something. So I put the carry flag on what I consider to be the left, which is what I consider to be the most significant bit. And then the output goes next and then so on and so forth. So I think that's a really nice alternative to cat. And it just makes more sense from a digital design perspective to me, at least. Here's what cat lcat looks like. Basically, it just flips the arguments. That's all it does, right? And you can do that with Python pretty easily. You can do actually the same thing with ranges. So if we look at the formal verification code that I wrote, here's the formal verification for rotate left. So here again, I've put in my pattern. And this time, what I'm using is the down to notation that we're familiar with from the regular HDLs. So this is input from bit seven down to bit zero comma carry. So that would be the concatenation. And I want that to become the carry concatenated with the output bit seven down to zero. So what I do here is I say, okay, well, the carry, the output carry is going to be input sub seven. So I just do that. The output zero is just going to be the carry. So I do that here. The rest of it is basically the expected output. This is the output from seven down to one is equal to the input from six down to zero. So the reason that I didn't use lcat here is because again, this is formal verification, and you always want to use a different method to calculate your outputs. And this I found to be also convenient using this down to function. So what does down to look like? Well, it's basically just it's basically just this again, I reverse the arguments and I add one to the top most value so that I can use basic ranges. So again, there's nothing preventing you from building on the basic building blocks of nMyGen to suit your own need. There's a caveat, though, and that is you will probably end up basically designing your own language. And an API is basically a language. You have to know the functions and you have to know when they're called and what the arguments are. If you do that too much, you basically end up with a meta language on top of your programming language. And MyGen is basically a language on top of Python. Anyway, that's enough philosophizing. So I did the formal verification and it works just fine. So now there's also the test function TST. TST basically does the accumulator or whatever operand minus zero. So in fact, this does use subtract. And when you subtract zero from anything, the overflow flag and the carry flag are always zero. And the negative flag and the zero flag are just as they always are. So that was easily implemented just like all the other ones that operate off of subtract. So the next thing that I want to do is I want to see if there's any way that I can combine all of these instructions. Because if you look at them, like for example in the gate, you set source one to zero, source two to the accumulator. I'm only dealing with the A accumulator versions of the instruction at this point. You set the function to some function and then you store the result back into A. TST does the same thing except the operands are flipped. You still do a sub, but you don't store. Clear. The operands are both A. You do a sub and you store. Calm. The first operand doesn't matter. It may as well be zero. The second operand is A. The function you do is calm and you store the output. It's exactly the same thing for all of these functions. So just like we did with the ALU functions or the ALU instructions, it would be nice to have some sort of a common ALU instruction. I'm just going to call it ALU2. And this is what I came up with. Basically, you specify operand one and operand two. And if one of these operands is zero, it means that that source bus gets zero. Otherwise, it gets the operand you're actually going to compute on, which in this case is going to be self.a. So I would say, for example, if I wanted to do negate, so source bus one has to be zero. So I'd set operand one to zero. And source A2 has to be A. So I would just set operand two to one. So it has to be either a zero or a one. And I chose not to use a Boolean because I wanted to use a MUX in here. So in other words, it's doing this at the hardware level rather than at the Python level just for fun. You also pass it the function that you want to do and just like before, whether you want to store the result or not. And that's that. So if I go to, for example, let's say, COM, right? So source one is going to be zero. Source two is going to be A. And the function is going to be COM. And I want to store. So zero one. So this would be self. ALU2M, the ALU function, which is COM, ALU8, zero, one, and by default, you store. So now if we do formal verification, hopefully it should still work, which it does. So I'm just going to go ahead and modify all these other functions. Okay, and that didn't really take all that much time. It took about 40 seconds to do, mainly because I did six at a time. So and I was doing six formal verifications. And now we don't need any of this code. So that goes away. Okay, so the next thing that we have to deal with are the other modes. There's the B mode. And there's also the extended and the indexed mode. So we can see from the chart over here that we've got A, B indexed and extended. So again, A and B are going to be sort of bit aliases for immediate and direct. And indexed and extended are the same. So all we have to do is look at the mode and determine what the operand should be. Now it's going to be a little bit different because now we're also storing the result back, which isn't as simple as just storing it in a register. So for example, you can see that for something like rotate write, the A and B versions of the instruction take only two cycles because you're dealing with the register. But for index to take seven cycles, so you know, that's probably, you know, at least two, maybe, maybe three cycles to do the read and an equal number to do the write maybe, something like that. So let's go ahead and just implement all the other modes for these instructions. So here's what the new ALU2 function looks like with extended and indexed. So I basically stole a lot of the extended code from ALU and from store A because store A does a write and ALU extended does a read. And it is fairly straightforward. I added some comments here because I was getting very confused about what happened during which cycle. So anything combinatorial happened during that cycle and anything on phase one happens during the next cycle. So I just put some comments in there to make sure that I was doing exactly what I was supposed to do. And basically I followed along with and basically I followed along with the cycle by cycle table that is provided in the datasheet. So so here we are. Actually, I don't think I did this. I should check that. And that's another thing that I think that I will probably do after all the psych after all the instructions are done is I'm also going to add formal verification for the VMA line, the read and the read write line, because I just want to make sure that it's doing the right thing at the right time. Also, of course, the number of cycles that the instruction takes because the programmers of the 6800 would have written timing routines. And obviously, if you're going to put in an FPGA and obviously if you're going to put the instruction set into an FPGA, then the instructions should take the same amount of time given the same clock. So for the indexed instructions, it says that valid memory address should be zero during cycles two and three. Oh, okay. Well, that is in mode indexed. So all I have to do is go to mode indexed and make sure that I do that during cycles two and three. So it seems clear that I'm not doing that. Okay, so what I'm doing here is I am setting VMA to zero during cycle two and during cycle three. And if we look at the cycle by cycle sheet, we can see that during cycle, remember my cycles start from zero not one. So during cycles two and cycle three, VMA should always be zero. So now that should be correct. Again, I'm going to want to formally verify that the the signals are doing exactly what they're supposed to at the right time, but not now. Okay, so that means that we can turn these 44 instructions green. All right, things are looking up. So on the next video, I will probably end up tackling all of the other instructions with the exception of wait for interrupt and software interrupt, because that will have to deal with the interrupt line, which we haven't even implemented yet. So until the next video. But before we go, how many LUTs are we using now? 1462 LUTs with 1700 and 17 cells. Not to worry, hardware optimization will come. How's that, cat?


Section 15 of About Orchids a Chat For a long time after 1853, when serious work began, M. Weich had a monopoly of the business. It is but forty years, therefore, since experiments commenced, in which time hundreds of hybrids have been added to our list of flowers. But this is my point. Nature has been busy at the same task for unknown ages, and who can measure the fruits of her industry? I do not offer the remark as an argument. Our observations are too few as yet. It may well be urged that if nature had been thus active, the natural hybrids which can be recognized would be much more numerous than they are. I have pointed out that many of the largest genera show very few, many none at all. But is it impossible that the explanation appears to fail only because we cannot yet push it far enough? When the hybridiser causes by force a fruitful union betwixt to genera, he seems to triumph over a botanical law. But suppose the genera themselves are artificial, only links in a grand chain which nature has forged slowly, patiently, with many a break, and many a failure, in the course of ages. She would finish her work bit by bit, and at every stage the new variety may have united with others in endless succession. Few natural hybrids can be identified among cat layers, for instance. But suppose cat layers are all hybrids, the result of promiscuous intercourse among genera during cycles of time. Suppose that is the genus itself sprang from parents, widely diverse, crossing, returning, intercrossing, from age to age. It is admitted that kipropidium represents a primeval form, perhaps the primeval form of orchid. Suppose that we behold in this nineteenth century a mere epoch or stage in the ceaseless evolution. Only an irresponsible amateur could dare talk in this way. It would, in truth, be very futile speculation if the experiments already successful did not offer a chance of proof one day, and others hourly ripening did not summon us to think. I may cite, with the utmost brevity, two or three facts which, to me, unscientific, appear inexplicable, unless species of orchid were developed on the spot, or the theory of special local creations be admitted. Oncidium cuculatum flourishes in certain limited areas of Peru, of Ecuador, of Colombia, and of Venezuela. It is not found in the enormous spaces between, nor are any oncidiums which might be accepted as its immediate parents. Then we suppose that the winds or the birds carried it over mountain ranges and broad rivers more than two thousand miles in four several directions to establish it upon a narrow tract. It is a question of faith, but for my own part I could assume believe that aesthetic emigrants took it with them. But even winds and birds could not bear the seeds of dendrobium heterocarpum from Ceylon to Burma, and from Burma to Luzon in the Philippines, at least I am utterly unable to credit it. If the plants were identical or nearly in their different habitats, this case would be less significant, but the dendrobium heterocarpum of Ceylon has a long, thin pseudo-bulb with bright yellow flowers. That of Burma is short and thick, with paler colouring. That of Luzon is no less than three feet high, exaggerating the stature of its most distant relative, while showing the colour of its nearest, but all absolutely the same botanic plant. I have already mentioned other cases. Experience hitherto suggests that we cannot raise adontoglossum seedlings in this climate very, very few have ever been obtained. Attempts in France have been rather more successful. Baron Adolf de Rothschild has four different hybrids of adontoglossum in Bud at this present moment in his garden at Armand-Villiers, near Paris. Monsieur Morro has a variety of seedlings. Authorities admit now that a very great proportion of our adontoglossums are natural hybrids. So many can be identified beyond the chance of error that the field for speculation has scarcely bounds. The adontoglossum exilens is certainly descended from O. pescatoriae and O. triumphans, adontoglossum elegans from O. cirrosum and O. haleae, adontoglossum watianum from O. harianum and O. histrix. And it must be observed that we cannot trace pedigree beyond the parents as yet, saving a very, very few cases. But unions have been contracting during cycles of time. Doubtless from the laws of things, the orchid is latest born of nature's children in the world of flora, but mighty venerable by this time, nevertheless. We can identify the mixed offspring of adontoglossum chryspum alexandri paired with O. gloriosum, with O. luteo purpurium, with O. lindelianum. These parents dwell side by side, and they could not fail to mingle. We can already trace with assurance a few double-crosses as adontoglossum lancians, the result of an alliance between O. chryspum alexandri and O. rucurianum, which latter is a hybrid of the former with adontoglossum gloriosum. When we observe O. rurslii upon the bank of the River Corka and O. vexilarium on the higher ground, whilst O. vexilarium superbum lives between, we may confidently attribute its peculiarity of a broad dark blotch upon the lip to the influence of O. rurslii. So, taking station at Maneos upon the Amazons, we find to Eastwood, Catalea Superba, to Westwood, C. Eldorado, and in the midst, C. Brimeriana, which it is safe to assume represents the union of the two. For that matter, the theory will very soon be tested, for M. Alfred Blur has made the cross of C. Superba and C. Eldorado, and its fowl is expected with no little interest. These cases, and many more, are palpable. We see a variety in the making at this date. A thousand years hence, or ten thousand, by more distant alliances by change of conditions, the variety may well have developed into a species, or by marriage excursions yet wider, it may have founded a genus. I have named Mr. Cookson several times. In fact, to discourse of hybridization for amateurs without reference to his astonishing record would be grotesque. One Sunday afternoon, ten years ago, he amused himself with investigating the structure of a few kit-prepeds after reading Darwin's book, and he impregnated them. To his astonishment, the seed vessel began to swell, and so did Mr. Cookson's enthusiasm simultaneously. He did not yet know, and happily, these experiments gave him no reason to suspect, that pseudo-fertilization can be produced, actually, by anything. So intensely susceptible is the stigmatic surface of the kit-preped that a touch excites it furiously. Upon the irritation caused by a bit of leaf, it will go sometimes through all the visible processes of fecundation, the ovary will swell and ripen, and in due time burst, with every appearance of fertility. But, of course, there is no seed. Beginners, therefore, must not be too sanguine when their bold attempts promise well. From that day, Mr. Cookson gave his leisure to hybridization, with such results as, in short, are known to everybody who takes an interest in orchids. Failure's in abundance, he had at first, but the proportion has grown less and less, until, at this moment, he confidently looks for success in 75% of his attempts. But this does not apply to bi-generic crosses, which hitherto have not engaged his attention much. Beginning with kit-prepedium, he has now 94 hybrids, very many plants of each, produced from 140 capsules sown. Of Calanthi, 16 hybrids from 19 capsules. Of Dendrobium, 36 hybrids from 41 capsules. Of Mastavalia, four hybrids from 17 capsules. Of Adontaglossum, none from nine capsules. Of Phages, two from two capsules. Of Vanda, none from one capsule. Of Bi-generic, one from nine capsules. There may be another, indeed, but the issue of an alliance so startling and produced under circumstances so dubious that Mr. Cookson will not own it until he sees the flower. It does not fall within the scope of this chapter to analyze the list of this gentleman's triumphs, but even Savants will be interested to hear a few of the most remarkable crosses therein, for it is not published. I cite the following haphazard. Reader's Note. I omit 28 named crosses between members of the genera, Phages, Loelia, Catlaya, Kit-prepedium, Dendrobium, and Mastavalia. End Reader's Note. Of these and so many more, Mr. Cookson has at this moment 15,000 plants. Since my object is to rouse the attention of amateurs that they may go and do likewise, I may refer lightly to a consideration which would be out of place under other circumstances. Professional growers of orchids are fond of speculating how much the Wylam Collection would realize if judiciously put on the market. I shall not mention the estimates I have heard. It is enough to say that they reach many, many thousands of pounds, that the difference between the highest and the lowest represents a handsome fortune, and this great sum has been earned by brains alone without increase of expenditure, by boldness of initiative, thought, care, and patience, without special knowledge also at the beginning. For 10 years ago, Mr. Cookson had no more acquaintance with orchids than is possessed by every gentleman who takes an interest in them, while his gardener the early time was both ignorant and prejudiced. This should encourage enterprise, I think. The revelation of means to earn great wealth in a delightful employment. But amateurs must be quick. Almost every professional grower of orchids is preparing to enter the field. They, however, must needs give the most of their attention to such crosses as may be confidently expected to catch the public fancy, as has been said. I advise my readers to be daring, even desperate. It is satisfactory to learn that Mr. Cookson intends to make a study of bi-generic hybridization henceforward. Footnote, Mr. Cookson writes to me, give some of the credit to my present gardener, William Murray, who is entitled to a large proportion at least. End footnote. The common motive for crossing orchids is that, of course, which urges the florist in other realms of botany. He seeks to combine tints, forms, varied peculiarities in a new shape. Orchids lend themselves to experiment with singular freedom within certain limits, and their array of colors seems to invite our interference. Taking species and genera all round, yellow dominates, owing to its prevalence in the great family of Onchidium. Purple's and mauve's stand next by reason of their supremacy among the cat layers. Green follows, if we admit, the whole group of epidendrums. The great majority of which are not beautiful, however. Of magenta, the rarest of natural hues, we have not a few instances. Crimson, in a thousand shades, is frequent. Pure white, a little rare. Orange, much rarer. Scarlet, very uncommon, and blue almost unknown, so supremely lovely in the few instances that occur. Thus the temptation to hybridise with the object of exchanging colors is peculiarly strong. It becomes yet stronger by reason of the delightful uncertainty which attends one's efforts. So far as I have heard or read, no one has yet been able to offer a suggestion of any law which decides the result of combination. In a general way, both parents will be represented in the offspring. But how, to what degree, either will dominate? In what parts, colours or fashions a hybrid will show its mixed lineage, the experienced refuse to conjecture, saving certain easy classes. After choosing parents thoughtfully with a clear perception of the aim in view, one must go it blind. Very often the precise effect desired appears in due time. Very often, something unlooked for turns up. But nearly always the result is beautiful. Whether or no, it serves the operator's purpose. Besides effect, however, there is an utility in hybridisation which relates to culture. Thus, for example, the lovely Kipropidium ferianum is so difficult to grow that few dealers keep it in their stock. By crossing it with Kipropidium barbatum from Mount Ophir, a rough and ready cool species, we get Kipropidium vexilarium, which takes after the latter in constitution while retaining much of the beauty of the former. Or, again, Kipropidium sanderianum from the Mele archipelago needs such swampy heat as few even of its fellows appreciate. It has been crossed with Kipropidium insigni which will flourish anywhere. And though the seedlings have not yet bloomed, there is no reasonable doubt that they will prove as useful and beautiful as in the other case. Kipropidium insigni of the fine varieties has been employed in a multitude of such instances. There is the striking Kipropidium hersutissimum with sepals of a nameless green shaded yellow studded with spicule, exquisitely frilled and tipped by a contrast almost startling with pale purple. It is very hot in the first place and in the second, its appearance would be still more effective if some white could be introduced. Present it to Kipropidium niveum and confidently expect that the progeny will bear cooler treatment whilst their dorsal sepal will be blanched. So the charming Mastavalia tovarensis, warm, white and lowly, will take to itself the qualities in combination of Mastavalia bella, tall, cool and highly colored red and yellow, as Mr. Cookson has proved. So Phalaenopsis whiteii, delicate of growth and small of flower, will become strong and generous by union with Phalaenopsis grandiflora without losing its dainty tones. It is worth mentioning that the first flora medal offered by the Royal Horticultural Society for a seedling, a hybrid in open competition, was won by Loelia Arnoldiana in 1891. The same variety took the first prize in 1892. It was raised by Maceo Sander from Loelia Per Purata by Catlea Labietta, Seed Sewn 1881, Flowered 1891. And now for the actual process by which these most desirable results and 10,000 others may be obtained. I shall not speak upon my own authority which the universe has no reason to trust. Let us observe the methods practised in the great establishment of Mr. Sander at St. Albans. Remark in the first place, the low unshaded range of houses devoted to hybridisation, a contrast to those lofty structures, a hundred yards long or more where plants merely flourish and bloom. There span roofs one may touch with the hand and their glass is always newly cleaned. The first and last demand of the hybridiser is light. Light, eternally light. One of it stands at the bottom of all his disappointments, perhaps. The very great majority of orchids, such as I refer to, have their home in the tropics. Even the cool Adontaglots and Mastavalias owe that quality to their mountaineering habit, not to latitude. They live so near the equator that sunshine descends almost perpendicularly and the sun shines for more than half the year. But in this happy isle of ours, upon the very brightest day of Midsummer, its rays fall at an angle of 28 degrees, declining constantly until at midwinter they struggle through the fogs at an inclination of 75 degrees. The reader may work out this proportion by himself, but he must add to his reckoning the thickness of our atmosphere at its best and the awful number of cloudy days. We cannot spare one particle of light. The ripening seed must stand close beneath the glass and, however fierce the sunshine, no blind may be interposed. It is likely that the mother plant will be burnt up, quite certain that it will be much injured. This house is devoted to the hybridising of kipropediums. I choose that genus for our demonstration, because, as has been said, it is so very easy and so certain that an intelligent girl mastered all its eccentricities of structure after a single lesson, which made her equally proficient in those of dendrobes, onchidiums, Adontaglots, epidendrums, and I know not how many more. The leaves are green and smooth as yet, with many a fantastic bloom and many an ovary that has just begun to swell, rising amidst the verdure. Each flower spike which has been crossed carries its neat label, registering the father's name and the date of union. Mr. Maynard takes the first two virgin blooms to hand, kipropedium sanderianum and kipropedium godfroyi, as its chances. Let us cut off the lip in order to see more clearly. Looking down now upon the flower, we mark two wings, the petals, which stood on either side of the vanished lip. From the junction of these wings issues a round stalk, about one quarter of an inch long and slightly hairy, called the column. It widens out at the tip, forming a pretty table, rather more than one third of an inch long and wide. This table serves no purpose in our inquiry. It obstructs the view and we will remove it, but the reader understands, of course, that these amputations cannot be performed when business is intended.  We see those practical parts of the flower that interest us. Beneath its protection, the column divides into three knobbly excrescences, the central plane, those on either side of it, curling back and down, each bearing at its extremity, a pad the size of a small pin's head, outlined distinctly with a brown color. It is quite impossible to mistake these things. Equally impossible, I hope, to misunderstand my description. The pads are the male, the active organs, but the column does not finish here. It trends downward, behind and below the pads, and widens out with an exquisitely graceful curve into a disc one quarter of an inch broad. This is the female, the receptive part, but here we see the peculiarity of orchid structure, for the upper surface of the disc is not susceptible. It is the under surface, which must be impregnated, though the imagination cannot conceive a mere accident which would throw those fertilizing pads upon their destined receptacle. They are loosely attached and adhesive when separated to a degree actually astonishing, as is the disc itself. But if it were possible to displace them by shaking, they could never fall where they ought. Some outside impulse is needed to bring the parts together. In their native home, insects perform that service, sometimes. Here we may take the first implement at hand, a knife, a bit of stick, a pencil. We remove the pads, which yield at a touch and cling to the object. We lay them one by one on the receptive disc where they seem to melt into the surface and the trick is done. Write out your label, Kipropidium Sandarianum, by Kipropidium Godfrey, Maynard. Add to the date and leave nature to her work. She does not linger. One may almost say that the disc begins to swell instantly. That part, which we term the column, is the termination of the seed purse, the ovary, which occupies an inch or two or three of the stalk behind the flower. In a very few days, its thickening becomes perceptible. The unimpregnated bloom falls off at its appointed date, as everybody knows. But if fertilized, it remains entire, saving the labellum until the seed is ripe, perhaps half a year afterwards. But withered, of course. Very singular and quite inexplicable are the developments that arise in difference genera or even species after fertilization. In the washer-witchellers, for example, not the seed purse only, but the whole column swells. Faleonopsis ludmaniana is specially remarkable. Its exquisite bars and mottlings of rose, brown and purple begin to take a greenish hue forthwith. A few days later, the lip jerks itself off with a sudden movement, as observers declare. Then the sepals and petals remaining take flesh, thicken and thicken, while the hues fade and the green encroaches. Until presently, they assume the likeness of a flower, abnormal in shape, but perfect, of dense green wax. This kipropidium of ours will ripen its seed in about 12 months, more or less. Then the capsule, two inches long and two-thirds of an inch diameter, will burst. Mr. Maynard will cut it off, open it wide, and scatter the thousands of seeds therein, perhaps 150,000, over pots in which orchids are growing. After experiments innumerable, this has been found the best course. The particles, no bigger than a grain of dust, begin to swell at once, reach the size of a mustard seed. And in five or six weeks, or as many months, they put out a tiny leaf, then a tiny root, presently another leaf. And in four or five years, we may look for the hybridized flower. Long before, naturally, they have been established in their own pots. Strange incidents occur continually in this pursuit, as may be believed. Nine years since, Mr. Godsef crossed Catacetam macrocarpum with Catacetam callosum. The seed ripened, and in due course it was sown, but none ever germinated in the proper place. Along while afterwards, Mr. Godsef remarked a tiny little green speck in a crevice above the door of this same house. It grew and grew very fast, never receiving water, unless by the rarest accident, until those experts could identify a healthy young Catacetam. And there it has flourished ever since, receiving no attention. For it is the first rule in orchid culture to leave a plant to itself, where it is doing well. No matter how strange the circumstances may appear to us, this Catacetam wafted by the wind when the seed was sown, found conditions suitable, where it lighted and quickened, while all its fellows carefully provided for died without a sign. It thrives upon the moisture of the house. In a very few years it will flower. In another case, when all hope of the germination of a quantity of seed had long been lost, it became necessary to take up the wooden trellis that formed the flooring of the path. A fine crop of young hybrids was discovered, clinging to the underside. The amateur who has followed us thus far with interest may inquire how long it will be before he can reasonably expect to see the outcome of our proceedings. In the first place, it must be noted that the time shortens continually as we gain experience. The statements following, I leave unaltered, because they are given by Monsieur Weich, our oldest authority, in the last edition of their book. But at the temple show this year, Norman C. Cookson, his choir, exhibited Catlea William Murray, offspring of Catlea Mendeliae, by Catlea Lorenziana, a lovely flower, which gained a first-class certificate. It was only four years old. The quickest record as yet is Calanthi Alexanderiae, with which Mr. Cookson won a first-class certificate of the Royal Horticultural Society. It flowered within three years of fertilizing. As a genus, perhaps, dendrobiums are readyist to show. Plants have actually been pricked out within two months of sowing, and they have bloomed within the fourth year. Phaegis and Calanthi rank next for rapid development. Mastavalia, Caesis, and Capropedium require four to five years, Lycasty, seven to eight, Loelia, and Catlea, 10 to 12. These are Mr. Vitey's calculations in a rough way, but there are endless exceptions, of course. Thus, his Loelia Triophilma flowered in its eighth season, while his Loelia Callaglossa delayed till its 19th. The genus Zygopetulum, which plays odd tricks in hybridizing, as I have mentioned, is curious in this matter also. Zygopetulum maxillari, crossed with Zed Macai, demands five years to bloom, but vice versa nine years. There is a case somewhat similar, however, among the Kipropeds. Kipropedium shlimii, crossed with C. Longifolium, flowers in four years, but vice versa in six. It is not to be disputed, therefore, that the hybridizer's reward is rather slow in coming. The more earnestly should he take measures to ensure as far as is possible that it be worth waiting for. End of chapter nine and the end of About Orchids a Chat by Frederick Boyle