Kelly McDonald
Kelly McDonald
  • 19
  • 1 359
EP 19: Branching Logic
In Episode 19 we'll take about the branching logic in the AGC. Including the "test" control pulses, the BR1/BR2 flags and how instruction decoding uses them to perform conditional instructions.Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7Ben.html Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHUVirtual.html AGC Page - www.ibiblio.org/apollo/#gsc.tab=0GitHub Schematic Repository - github.com/kellymcdonald78/Block-74-ACG/tree/Schematics
Переглядів: 38

Відео

EP 18: G Register Part 2
Переглядів 52День тому
In Episode 18 we'll continue working through the G register and editing control. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Page - www.ibiblio.org/apollo/#gsc.tab=0 GitHub Sche...
EP 17: G Register Part 1
Переглядів 3821 день тому
In Episode 17 we'll introduce the G register. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Page - www.ibiblio.org/apollo/#gsc.tab=0 GitHub Schematic Repository - github.com/kelly...
EP 16 S Register Part 3
Переглядів 42Місяць тому
In Episode 16 we'll continue talking about the S register and the FBANK and FEXT register including fixed memory logic. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Page - www.ib...
EP 15: S Register Part 2
Переглядів 50Місяць тому
In Episode 15 we'll continue talking about the S register and the EBANK register including erasable memory logic. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Page - www.ibiblio....
EP: 14 S Register Part 1
Переглядів 50Місяць тому
In Episode 14 we'll start into the S register and how memory is structured within the AGC. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Page - www.ibiblio.org/apollo/#gsc.tab=0 G...
EP: 13 X Register Part 3
Переглядів 712 місяці тому
In Episode 13 we'll wrap up the X register and the read logic it uses to place the contents of the adder back into the write bus. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Pag...
EP 12: X Register Part 2
Переглядів 372 місяці тому
In Episode 12 we'll continue talking about the X register and the AGCs arithmetic unit. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Page - www.ibiblio.org/apollo/#gsc.tab=0 GitH...
EP 11: The X Register Part 1
Переглядів 272 місяці тому
In Episode 11 we'll start talking about the X register and how data is loaded into it. The X register is one of the two operand registers for the ACG adder. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvj...
EP 10: The Y Register
Переглядів 242 місяці тому
In Episode 10 we'll take a closer look at the Y register one of the two operand registers for the ACG adder. Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Page - www.ibiblio.org/a...
EP 9: The L Register
Переглядів 853 місяці тому
In Episode 9 we'll take a closer look at the L register and some updates to the Q register based on what I've learned about IO Channels (Special thanks to Mike Stewart). Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqI...
EP 8: The A Register
Переглядів 823 місяці тому
In Episode 8 we'll take a closer look at the A register and some of the complexities of managing logical data operations and timing . Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC...
EP 7: Clock and Sub Instructions
Переглядів 523 місяці тому
Before getting into the A Register, we spend some time talking about clocking and how machine instructions are decomposed into sub-instructions and control pulses Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2...
EP 6: The Q Register
Переглядів 1403 місяці тому
In Episode 6 we'll take a closer look at the Q register . Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC Page - www.ibiblio.org/apollo/#gsc.tab=0
EP 5: Hardware
Переглядів 854 місяці тому
A change of pace for Episode 5 as we'll look at some of the hardware I'll be using to build the computer and my approach to assembly Links Referred to in the video Curious Marc series on the restoration of a block II AGC - ua-cam.com/play/PL-_93BVApb59FWrLZfdlisi_x7-Ut_-w7.html Ben Eater's series on building an 8-bit computer- ua-cam.com/play/PLowKtXNTBypGqImE405J2565dvjafglHU.html Virtual AGC ...
EP 4: The B/C Register
Переглядів 624 місяці тому
EP 4: The B/C Register
EP 3: The Z register
Переглядів 654 місяці тому
EP 3: The Z register
EP 2: Register Overview
Переглядів 1024 місяці тому
EP 2: Register Overview
EP 1: Introduction to AGC
Переглядів 2574 місяці тому
EP 1: Introduction to AGC

КОМЕНТАРІ

  • @mikestewart8928
    @mikestewart8928 4 дні тому

    Wow, yeah, the wording in that control pulse table is needlessly confusing. TSGU does not affect BR2; it simply copies U16 into BR1. AGC4 memo 9's descriptions of the control pulses are a bit more clear here. Figure 4-136 in ND-1021042 might be the best way to directly confirm which control pulse affects which branch register -- it has logic equations for both printed on the left sides of their respective pages. TSGU appears in BR1's equation but not BR2's.

    • @kellymcdonald78
      @kellymcdonald78 3 дні тому

      Fantastic, that's exactly what I needed

    • @kellymcdonald78
      @kellymcdonald78 2 дні тому

      I'm noticing that there a few cases where multiple test control pulses are generated simultaneously. Not quite sure how that works when you have TMZ, TZGN, and TPZG at the same time. May just have to look at the logic equations and replicate them

    • @mikestewart8928
      @mikestewart8928 День тому

      @@kellymcdonald78 For that specific example, TSGN doesn't conflict since it's the only one that modifies BR1. TMZ and TPZG are different since both modify BR2.... and looking at the schematics, it seems like there was some special consideration made here. TMZ operates by always resetting BR2 during PHS3, and then setting it in PHS4 if the write lines are -0. TPZG, on the other hand, has no ability to ever reset BR2; it simply sets it during PHS4 if G is +0. So when both occur at the same time, the setting of BR2 during PHS4 is essentially an OR of the two conditions. An interesting restriction from this implementation is that TPZG can't be used unless it coincides with or is preceded by some other control pulse that does the work of clearing BR2. Spot-checking the control pulse sequences this appears always be the case. That's something I never really noticed before!

  • @mikestewart8928
    @mikestewart8928 Місяць тому

    I think you may need another level of selection for writing into EB, for the "TS BBANK" possibility: in this case, EB is loaded from bits 1-3 of the write lines, without going through U. The erasable memory in the AGC is traditional coincident-current core memory, not core rope -- only the fixed memory used rope. And unlike more modern SRAMs, core memory (of either variety) needs no refresh! Once the data is written, it will be retained indefinitely (at least 50+ years), even through complete loss of power. The Apollo missions made use of this capability to power down the computer in flight (e.g. on the lunar surface) without worrying about needing to reload anything once the computer was powered back up -- the RAM was nonvolatile, and the computer was designed in such a way to expect (but validate) data to still be there during boot. The problem is that readout from core memory is destructive. Whenever you read from a core memory location, all of the corresponding cores get set to 0. To account for this, all data that is read out must be written back. In the AGC design, this is all handled through the control pulse sequences: instructions that do not modify erasable make sure that they have stored the original value back into G before the erasable write cycle starts. Instructions that do change erasable simply put the new desired value there instead of what was read. It's definitely worth implementing the parity logic! Even though you'll almost surely never encounter an erasable memory parity error, fixed parity errors are easy to trigger, and the computer test procedures involve steps to intentionally trigger them. This is because all unused fixed memory locations are completely unwired in the rope memory modules, causing them to read as all 0 bits, including the parity bit. So all you need to do to trigger a parity alarm is attempt to read from a fixed location not used by the current program. Also, resetting S with your GENRST isn't strictly necessary, although I don't think it will have any ill effects. The original AGC design allowed the S register to start with any random value, with no reset inputs. The boot process forces the GOJ1 subinstruction to execute first, which sets S to a known initial value through control pulse action. Digital Development Memo #340, "Block II GOJAM Actions", contains a nice concise list of all of the things that the global RESET signal did in the original design.

    • @kellymcdonald78
      @kellymcdonald78 Місяць тому

      Again, thanks so much for the additional context. Would you be able to point me towards any details on the "TS BANK" , I wasn't able to find it in the documentation I'm currently referencing (that said it took me a while to find the details on the directly addressable register logic for the EBANK and FBANK). As for the erasable memory, I realized halfway through the recording that I kept calling it core rope, which is wrong :) thinking I may need some kind of battery backup to emulate the non-volatile nature of the AGC memory. Thanks for the link to the GOJAM actions, I had started reading up on in a while back as I was starting to design the SQ logic

    • @mikestewart8928
      @mikestewart8928 Місяць тому

      ​@@kellymcdonald78 Essentially, writing into address 3 (WEB) causes bits 9-11 of the write lines to be written to EBANK, while writing into address 6 (WBBK) causes bits 1-3 of the write lines to be written into EBANK. Figures 4-138A and 4-138B in our later copy of ND-1021042 ("acelectroniclmma00acel_0" on the Internet Archive) have a really nice graphical representation of the various ways the bank registers interact with the write lines. Battery backup would work! Another thing you could look into is MRAM or FRAM -- those are modern non-volatile magnetic RAM chips (whose internal block diagrams are shockingly similar to core memory). You might be able to find a pin-compatible drop-in-replacement for whatever SRAM chips you were looking at.

    • @kellymcdonald78
      @kellymcdonald78 Місяць тому

      @@mikestewart8928 Ahh, I see it now. The Raytheon ACG Info Series Table 30-1 has a good breakdown of the addressable registers

  • @mikestewart8928
    @mikestewart8928 Місяць тому

    Small historical correction: Block I was also referred to as "AGC4", and was already the fourth iteration on the design -- making Block II arguably the fifth. Block I already had the EXTEND instruction, although it was implemented in a different way. Its predecessor, the Mod 3C ("C" for "Complex", because it included hardware multiplication!), did not. The Mod 3C only implemented 8 instructions, all directly encodable with the 3 opcode bits: TC, CCS, INDEX, XCH, CS, TS, AD, and MP. Block I's EXTEND is kind of weird in one sense but also makes a lot of sense. It's not its own (pseudo-)instruction like Block II; instead, it is activated by using INDEX to cause an overflow condition on the following instruction. This overflow essentially allows you to write into a fourth bit for SQ. The assembler does recognize the "EXTEND" mnemonic, for which it emits INDEX 5777. By convention it is expected that the programmer has left the constant 47777 there (this must actually be part of your program! If it's not and you use the EXTEND mnemonic, you will have a bad day).

    • @kellymcdonald78
      @kellymcdonald78 Місяць тому

      Appreciate the clarification. One area I’ve been trying to understand is how the FEXT (or super bank) registers are set. There are control pulses to write the BB registers from the “U” register and read contents to the write lines.

    • @mikestewart8928
      @mikestewart8928 Місяць тому

      ​@@kellymcdonald78 FEXT is three flip-flops that are only accessible via I/O channel 7. There's no special mechanism to read or write to it, other than the standard channel I/O instructions that use RCH/WCH. If the programmer wants to construct the full current BBCON, the idiomatic approach is to load BB into the accumulator, and then ROR channel 7 onto that. In the other direction, WRITE is the instruction most often used to change superbanks.

    • @kellymcdonald78
      @kellymcdonald78 Місяць тому

      Thanks, I see it now. I'll have to dive into it a bit deeper when I get to the IO logic.

  • @CaptainSwag101
    @CaptainSwag101 Місяць тому

    Awesome project! Something I would mention is that the erasable core memory is non-volatile when it loses power. I am more of a software guy than a hardware guy, but when developing an AGC emulator, I found that deliberately initializing erasable memory to random values at computer startup (excluding registers), would frequently cause crashes or failure to boot properly. If you aren't already, that might be something to consider since you mentioned you plan to use static RAM for erasable memory, which I think might have a similar issue in practice due to its volatile nature.

    • @kellymcdonald78
      @kellymcdonald78 Місяць тому

      Good point, I may need to consider some kind of battery backup for the SRAM to at least replicate the non-volatile characteristics of the memory

  • @mikestewart8928
    @mikestewart8928 2 місяці тому

    Great video! It's great to see the progress, and I'm excited to see everything on GitHub! There was actually a hardware design bug related to NEAC that wasn't fixed until quite late in the Block II design process: NEACOF comes too early in the MP3 control pulse sequence. It clears NEAC at time 6, but the multiplication has not quite finished yet and end-around-carry still needs to be inhibited for the addition happening during times 7-10. Since it was a late fix, not all of the documents we have include it, and not all of the logic drawings show the change. Updated documents describe NEACOF as "Permit end-around-carry after end of MP3". The actual fix was very simple but slightly hacky: they simply treated the subinstruction selection signal MP3 as another inhibit for end-around-carry, such that no EAC will ever occur during MP3, regardless of the state of NEAC. This was done using a spare expander gate in module A2. In the original schematics, it's on sheet 3, right next to the spare pins. The fix is also visible in Figure 4-153 in earlier revisions of ND-1021042 (they dropped it in later versions, possibly by mistake...): MP3A (equivalent to MP3) is used as an additional inhibit for EAC, along with NEAC. In your design, I think the equivalent fix would be to add MP3/ as a third input to U1121C, alongside NEAC/.

  • @jackdaniels8898
    @jackdaniels8898 2 місяці тому

    I am so much looking forward watching your series. I think this is an amazing project that combines 2 of my great interests the Apollo program computers and 74 logic series breadboard computers.

  • @campbellmorrison8540
    @campbellmorrison8540 3 місяці тому

    Wow that is a serious bit of work just to build it let alone actually work out the circuits etc way above my ability for sure but I'll be really interested to see the final machine albeit I have no idea how one would interface it to the outside world. I too followed CuriousMarc and those guys are nothing less than stunning. My background is hardware primarily PCB and thick film design and I like your generic board approach however I might suggest I suspect you could regret wiring over the chips, if it were me I think I would try and run them between the devices . I just have a feeling as the wiring increases you are going to have trouble digging down to test points but up to you and all the best in what is a major undertaking

    • @kellymcdonald78
      @kellymcdonald78 3 місяці тому

      I did experiment with a few options when deciding how I wanted to wire my boards. Thankfully 1.024Mhz lets you get away with a lot of things you can't with higher frequencies. I started with solid wire and bending it around devices (similar to how Ben Eater does it on his breadboards), but with the number of registers, control lines and 16-bit word length, it started getting pretty effort intensive. I ended up choosing noodle wire as its flexible and you can move it around nicely to get to test points and re-route if needed. It is stranded though so you have to be careful to clean up any stray whiskers to avoid shorts

  • @mikestewart8928
    @mikestewart8928 3 місяці тому

    All of those simplifications are great to see! 😃L has one more unique feature: even though it is implemented in hardware as (and can be written to as) a 16-bit register, it behaves as a 15-bit register when reading data out onto the write lines. Bit 15 of L can never make it out onto the write lines; instead, bit 16 of L is placed onto both WL15 and WL16. The AGC software sometimes uses this feature for overflow correction, since writing something into L and then reading it back out will effectively copy the upper sign bit into the low one. From software's perspective, I don't _think_ there is any way to test the value of bit 15 of L once it's been written to. Sometimes more software-focused documentation will call L a 15-bit register because of that -- but the hardware makes extensive use of bit 15 of L for multiplication and division, so that's not really fully true. Everything that needs the true value of the bit can still access it through your L15 pin.

    • @kellymcdonald78
      @kellymcdonald78 3 місяці тому

      I thought I had noticed something along those lines. Thanks for pointing it out. I see L15 is used in certain cases of the WYD pulse and some of the ZIP logic

  • @mikestewart8928
    @mikestewart8928 3 місяці тому

    That approach for handling the multiple-read-pulses-at-the-same-time thing with modern devices is really clever! That works in the original computer because of its use of RTL logic. RTL has a kind of funky feature in that you can tie the outputs of any two gates together, and it works like a wired-AND. For AGC purposes, if you tie the outputs of two 3-input NOR gates together, you get a fully functional 6-input NOR gate. Electrically this works because every RTL output is essentially open-collector with a built-in pullup. The write lines don't have any special drivers, so they operate the same way. When multiple R* pulses go off, all of the registers really do drive their outputs onto the write lines at the same time and it all gets wired-AND'd together. But crucially, the write lines are distributed inverted, so logically the contents of all of the registers are being OR'd together. This is true for all instances, so if you see RA RC, that's (A or C); RU RB is (U or B); etc. Since the computer can only invert things through B/C and perform logical ORs on the write lines, in order to compute a logical AND, the MSK0 subinstruction mechanizes De Morgan's law A & B = ~(~A | ~B). It first inverts the accumulator (3. RA WB; 4. RC WA); then it sticks the word from memory into B so that it can be accessed inverted as C (7. RG WB); then it logically ORs the already-inverted A and C together by reading them at the same time, using the adder as temporary storage (9. RC RA WY; writing to Y naturally zeros X); then it fetches number back from the adder and again inverts it to achieve the final result (10. RU WB; 11. RC WA). In case you haven't spotted them: in addition to the six cases you've highlighted, RXOR0 has two more (3. RC RCH WY; 11. RC RG WA), and DV0 has an RSC that could possibly trigger one (7. RG RSC WB TSGN). Certain instructions also use this same mechanism to logically OR a constant with a register, like DV3 (5. 1X RG WL TSGU RB1F). The AGC Monitor can also logically OR whatever it wants onto the write lines at any time with the MDT01-MDT16 test connector inputs, which may or may not matter depending on your plans for test equipment.

    • @kellymcdonald78
      @kellymcdonald78 3 місяці тому

      Thanks for this, I had missed the RSC pulses and RCH pulses that could result in the same contention issues (if we're addressing the right register or channel). It also reinforces something I was thinking about with the RA/RC pulses and which mode I should be selecting on the ALU. With the inversion (RC) I wasn't sure if I should be ORing (vs ANDing) as you've indicated, or putting RB on the bus in that instance so I can AND the contents of the register rather than ANDing the inverted contents. Definitely a bit more to think about

    • @kellymcdonald78
      @kellymcdonald78 3 місяці тому

      Sorry, now I get it lol. My ALU should only by ORing as the sequence of control pulses takes care of the rest. I may need to reconsider if I even continue to use the ALU chips as I can get the same results using multiple OR chips, will have to see if which approach uses the least number of chips

    • @mikestewart8928
      @mikestewart8928 3 місяці тому

      Yep, you got it! 😄Hopefully should simplify things a bit. I'm going to rack my brain a bit more to try to think of any other scenarios where multiple things end up on the write lines, but I think aside from the monitor stuff, the subinstruction control pulse sequences should cover all of them.

    • @kellymcdonald78
      @kellymcdonald78 3 місяці тому

      Thinking through this, have some questions about the RCH command pulse (and WCH). So we've got the Q and L register which can write data from the channel bus (based on if XB1 or XB2 are asserted). Would this mean 2 scenarios for WCH? E.g. if S is 00003 with WCH, we'd just place whatever is on the WL's into output channel 00003, while if S is 00002 would we write the data from Q into output channel 00002 or the contents of the WLs into output channel 00002?). Similar for RCH. E.g. if S is 00003 would we just place whatever is in output channel 00003 on the write lines (for another W pulse to pick it up), while if S was 00002 would we just read the contents of into the Q register, or place those contents on the WLs as well.

    • @mikestewart8928
      @mikestewart8928 3 місяці тому

      @@kellymcdonald78 Output channels 1 and 2 don't exist as separate entities from the L and Q registers. The service gate logic is set up so that RCH and WCH will cause the corresponding register control pulses to happen -- e.g. if an RCH control pulse happens when the bottom 6 bits of S are 02 octal, an RQ control pulse will get generated. In such cases you can effectively just replace the RCH with RQ. RSC operates in exactly the same manner -- it'll trigger generation of actual RA, RL, RQ, etc. pulses if S contains certain values. Same for WSC and WCH. So for your examples, WCH when S is 00002 only causes the WLs to be written into Q, and RCH while S is 00002 only causes the contents of Q to be read out onto the WLs. Does that answer your questions? It also might be worth noting that the channel bus doesn't _really_ exist as a separate entity from the write lines, if some documentation is making it look that way. Module A24 contains some buffer circuits that generate CHWL01/-CHWL16/ as direct copies of WL01/-WL16/, which is then distributed to all of the channel circuits (except for L and Q, since those are handled by regular control pulses and the regular write lines). I'm pretty sure they only did this to reduce the fan-out needed for the write lines. The only difference between CHWL and WL is that CHWL consists only of CHWL01-CHWL14 and CHWL16; channels are only 15 bits wide maximum and the extra sign bit does not get passed along to them. (N.B. Q and L are exceptions because of the WQ and WL generation! So WCH with S=00002 will still copy all 16 bits into Q). Those CHWL/ lines are only fed into the inputs for writeable channels; the output for all of the non-register channels is combined into a big channel-OR (wires CHOR01-CHOR16). Channels generally read their outputs onto CHOR* whenever the lower 6 bits of S match their address (regardless of control pulses or read timers); RCH then gates CHOR* onto the write lines.

  • @kellymcdonald78
    @kellymcdonald78 3 місяці тому

    This is a good observation and I bumped into it when starting to lay out my S register (still a work in progress), but I’ll be generating the XB signals from there (helps me save a line on the backplane for SCAD as it’s getting crowded as it is, 96 pins just isn’t enough lol). I had considered putting XTO on the backplane (and I may need to do so) based on the last quirk you mentioned (bit 10). I’ve only looked at the channel side of things at a high level so far.

    • @mikestewart8928
      @mikestewart8928 3 місяці тому

      Makes sense! Yeah I can imagine 96 pins is quite a constraint to work with haha.

  • @mikestewart8928
    @mikestewart8928 3 місяці тому

    How are you defining XB2? It sounds like you're using it to mean "the whole address is 0x0002", but in the original design it only covers bits 1-3 of the address. XT0 then covers bits 4-6. This is *maybe* an important distinction because channels use a different number of address bits than normal accesses. If Q is accessed as an addressable register, it is accessed via RSCG/WSCG instead of RSC/WSC directly. The G versions of these control pulses combine them with SCAD (Special/Central ADdress, or something like that). SCAD will be 1 if and only if bits 4-12 of S are all 0; therefore, if RSCG/WSCG are active, it is sufficient to use XB2 to only examine the bottom 3 bits of S to figure out which special/central register is being accessed. As a result, all 12 bits of S are inspected. Channel accesses on the other hand are not combined with SCAD. Instead, only XT0 is combined with XB2 -- meaning that only bits 1-6 of S are examined. This produces a weird quirk of the AGC design where, even though the channel address space is nominally 9 bits, all channels implemented inside the AGC are accessible with any combination of bits 7-9. So Q is channel 2, but it's also channel 102, 202, 302, etc.... This behavior is never exploited, and we don't even emulate it in VirtualAGC at the moment, so it's no big deal if your replica doesn't replicate it. More importantly though, I/O opcodes take 6 bits to encode. The control pulse sequences for the I/O instructions do the usual quarter-code thing of using RL10BB WS to clear out bits 11 and 12 of S, but they don't clear bit 10, so during WRITE, WAND, and WOR, bit 10 of S is going to be still be set at the time of the RCH and WCH control pulses. Thus, while addressing Q as a special/central register requires looking at all 12 bits of S, accessing it as a channel requires ignoring at least bit 10. Sorry if you've already thought about this and have handled it a different way, or if I'm misinterpreting your logic!

  • @mikestewart8928
    @mikestewart8928 4 місяці тому

    I'm really enjoying your videos so far -- you're doing a great job explaining everything. I'm excited to see how it all comes together!

    • @kellymcdonald78
      @kellymcdonald78 4 місяці тому

      Thanks, should have an episode on the Q register out later this week

    • @ApolloKid1961
      @ApolloKid1961 4 місяці тому

      Mike, you also have made a significant contribution.

  • @NeilFraser
    @NeilFraser 4 місяці тому

    An AGC and a DSKY would make an amazing DRO for a machine tool like a mill. The three-number I/O of the DSKY would be perfect for X/Y/Z axis measurements.

    • @kellymcdonald78
      @kellymcdonald78 4 місяці тому

      An interesting application. Havn't thought far enough as to what I'll do with my AGC once I'm done. Go to some maker fairs maybe lol

  • @ApolloKid1961
    @ApolloKid1961 4 місяці тому

    The restoration of the AGC by CuriousMarc and his team was wonderful to see. Seeing the AGC working on a breadboard also seems very exciting to me, so I'm looking forward to see it.

    • @kellymcdonald78
      @kellymcdonald78 4 місяці тому

      Have you seen their latest series on restoring an Apollo CSM communication string? Suspect they'll be getting to the point where they connect it to an AGC to issue remote commands

    • @ApolloKid1961
      @ApolloKid1961 4 місяці тому

      @@kellymcdonald78 Sure I've seen that. I think it's so amazing that they could send and receive speech, TV and telemetry all at the same time. If they keep this up, they'll soon have an entire Saturn 5 ready to be launched. I also like the AGC simulator made by Ronald Burkey.

    • @kellymcdonald78
      @kellymcdonald78 4 місяці тому

      @@ApolloKid1961without the treasure trove of documents Ronald has available on his site, this project wouldn't have been possible