Announcement

Collapse

Forum etiquette

Our mission ...

This forum is part of our mission to promote the preservation of vintage computers through education and outreach. (In real life we also run events and have a museum.) We encourage you to join us, participate, share your knowledge, and enjoy.

This forum has been around in this format for over 15 years. These rules and guidelines help us maintain a healthy and active community, and we moderate the forum to keep things on track. Please familiarize yourself with these rules and guidelines.


Remain civil and respectful

There are several hundred people who actively participate here. People come from all different backgrounds and will have different ways of seeing things. You will not agree with everything you read here. Back-and-forth discussions are fine but do not cross the line into rude or disrespectful behavior.

Conduct yourself as you would at any other place where people come together in person to discuss their hobby. If you wouldn't say something to somebody in person, then you probably should not be writing it here.

This should be obvious but, just in case: profanity, threats, slurs against any group (sexual, racial, gender, etc.) will not be tolerated.


Stay close to the original topic being discussed
  • If you are starting a new thread choose a reasonable sub-forum to start your thread. (If you choose incorrectly don't worry, we can fix that.)
  • If you are responding to a thread, stay on topic - the original poster was trying to achieve something. You can always start a new thread instead of potentially "hijacking" an existing thread.



Contribute something meaningful

To put things in engineering terms, we value a high signal to noise ratio. Coming here should not be a waste of time.
  • This is not a chat room. If you are taking less than 30 seconds to make a post then you are probably doing something wrong. A post should be on topic, clear, and contribute something meaningful to the discussion. If people read your posts and feel that their time as been wasted, they will stop reading your posts. Worse yet, they will stop visiting and we'll lose their experience and contributions.
  • Do not bump threads.
  • Do not "necro-post" unless you are following up to a specific person on a specific thread. And even then, that person may have moved on. Just start a new thread for your related topic.
  • Use the Private Message system for posts that are targeted at a specific person.


"PM Sent!" messages (or, how to use the Private Message system)

This forum has a private message feature that we want people to use for messages that are not of general interest to other members.

In short, if you are going to reply to a thread and that reply is targeted to a specific individual and not of interest to anybody else (either now or in the future) then send a private message instead.

Here are some obvious examples of when you should not reply to a thread and use the PM system instead:
  • "PM Sent!": Do not tell the rest of us that you sent a PM ... the forum software will tell the other person that they have a PM waiting.
  • "How much is shipping to ....": This is a very specific and directed question that is not of interest to anybody else.


Why do we have this policy? Sending a "PM Sent!" type message basically wastes everybody else's time by making them having to scroll past a post in a thread that looks to be updated, when the update is not meaningful. And the person you are sending the PM to will be notified by the forum software that they have a message waiting for them. Look up at the top near the right edge where it says 'Notifications' ... if you have a PM waiting, it will tell you there.

Copyright and other legal issues

We are here to discuss vintage computing, so discussing software, books, and other intellectual property that is on-topic is fine. We don't want people using these forums to discuss or enable copyright violations or other things that are against the law; whether you agree with the law or not is irrelevant. Do not use our resources for something that is legally or morally questionable.

Our discussions here generally fall under "fair use." Telling people how to pirate a software title is an example of something that is not allowable here.


Reporting problematic posts

If you see spam, a wildly off-topic post, or something abusive or illegal please report the thread by clicking on the "Report Post" icon. (It looks like an exclamation point in a triangle and it is available under every post.) This send a notification to all of the moderators, so somebody will see it and deal with it.

If you are unsure you may consider sending a private message to a moderator instead.


New user moderation

New users are directly moderated so that we can weed spammers out early. This means that for your first 10 posts you will have some delay before they are seen. We understand this can be disruptive to the flow of conversation and we try to keep up with our new user moderation duties to avoid undue inconvenience. Please do not make duplicate posts, extra posts to bump your post count, or ask the moderators to expedite this process; 10 moderated posts will go by quickly.

New users also have a smaller personal message inbox limit and are rate limited when sending PMs to other users.


Other suggestions
  • Use Google, books, or other definitive sources. There is a lot of information out there.
  • Don't make people guess at what you are trying to say; we are not mind readers. Be clear and concise.
  • Spelling and grammar are not rated, but they do make a post easier to read.
See more
See less

Purpose of U90 in XT second revision board

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Purpose of U90 in XT second revision board

    I've heard before that the first revision of the XT system board was missing U90 but I never knew what that IC actually did. After it was mentioned in another thread I decided to try to figure out what it did. I found the updated schematic in the March 1986 technical reference, and the difference seems to be this:

    In the first revision, input D3 to U88 is -S0 AND -S1 AND -LOCK AND HRQDMA. In the second revision, this is changed to (-S0 AND -S1 AND -LOCK AND HRQDMA) OR (NOT (-DMACS' OR -XIOW')) (U90 is 2-input OR gates, probably a 74LS32). In other words, this input is forced high when writing to the DMA controller registers (IO ports 0x00-0x1f: the 8237). The output Q3 from U88 goes through a couple more flip-flops to HOLDA (the hold acknowledge input to the 8237). There might be some slight timing differences visible to software due to this change, but it would only be when writing to these registers if at all.

    So what I think this is is some logic to fix a race condition between the CPU and the DMA controller. I suspect there was a rare situation where the CPU writes something to the DMA controller at the same time that a DMA access happens, the CPU and the DMA controller end up waiting for each other and the system locks up completely. That's just a guess though.

    The other major difference seems to be the removal of the TD2 7ns delay line which delays the clock input to the 8237. I wonder if this was an earlier (and not completely reliable) method of solving the same problem. I don't think this difference would be visible to software since 7ns is so much shorter than a clock cycle, but I suppose it could be if it causes DMA accesses to happen a cycle later.

    If anyone else has any more concrete information about these changes, I'd be fascinated to hear it.

    #2
    From a historical perspective, that--a race condition--would be my guess also. A 7nsec. delay line on LSTTL is ridiculous--and expensive. Consider that the spec sheet for a 74LS00 puts the propagation time between 3 and 10 nsec, for example.

    Have you compared this with the 2nd edition 5150 board?

    Comment


      #3
      I just looked at the April 1984 5150 TR and that still has the delay line and no U90 equivalent - maybe there was no spare spot on the 5150 board to put another IC without a major redesign.

      Comment


        #4
        There is no U90 on my 256-640K XT system board. It only goes up to U89.
        My Retro Computing and Vintage Gaming Blog : http://nerdlypleasures.blogspot.com/

        Comment


          #5
          Originally posted by Great Hierophant View Post
          There is no U90 on my 256-640K XT system board. It only goes up to U89.
          On the first revision boards the space for U90 was just labbeled "Spare". Most of the remaining boards were patched at the end of 1983/early 1984, before they changed the PCB layout.

          The change occured at about the same time as submodel 087 of the XT was substituted with submodel 086. I wonder if that's a coincidence .
          Current systems owned by me:
          Vintage:IBM PC/XT submodel 087 ( 1983 ), [Kon]tiki-100 rev. C (1983), Compaq Portable I ( 1984 ), IBM PC/XT submodel 078 ( 1985 ), IBM PC/XT286 ( ~1986 ), 3x Nintendo Entertainement Systems ( 1987 ).
          Obsolete:Commodore A500 ( ~1990 ), IBM PS/2 model 70/386 type 8570-161 ( 1991 ), Atari Lynx II ( ~1992 ), Generic Intel 486SX PC ( ~1993 ), AT/T Globalyst Pentium w/FDIV bug MB ( 1994 ), Compaq 486DX4 laptop ( ~1995 ).

          Comment


            #6
            Originally posted by reenigne View Post
            In the first revision, input D3 to U88 is -S0 AND -S1 AND -LOCK AND HRQDMA. In the second revision, this is changed to (-S0 AND -S1 AND -LOCK AND HRQDMA) OR (NOT (-DMACS' OR -XIOW')) (U90 is 2-input OR gates, probably a 74LS32).

            So what I think this is is some logic to fix a race condition between the CPU and the DMA controller. I suspect there was a rare situation where the CPU writes something to the DMA controller at the same time that a DMA access happens, the CPU and the DMA controller end up waiting for each other and the system locks up completely. That's just a guess though.

            The other major difference seems to be the removal of the TD2 7ns delay line which delays the clock input to the 8237.
            Please forgive me for reviving an old thread...

            You're right about the purpose of U90 - It is there to prevent a race condition where CPU is writing to the DMA controller while DMA controller is trying to initiate a DMA transfer. This logic (-S0 AND -S1 AND -LOCK AND HRQDMA) finds passive CPU cycles when DMA transfer is requested, puts CPU in wait mode and activates the DMA controller (using HOLDA signal).

            Regarding the circuit with TD2 delay line. This circuit adjusts DMA clock duty cycle. The 8088 CPU needs clock with 33% duty cycle (and such clock signal is generated by the 8284 clock generator), but the 8237 DMA controller requires clock with a duty cycle more close to 50% ( >70 ns high / >50 ns low to be exact), so the solution is to pass the clock signal through some logic (74LS244 in XT's case) or/and a delay line and then do a logical OR with the original clock signal. It looks like 74LS244 alone extends the "high" phase enough (from 69 ns to 81 ns), but it is possible that in older XT they were using older variants of 8237 (e.g. AMD Am9517A) that required even longer "high" phase, and so additional delay line was added. By the way Taiwanese XT clones simply employed four 74LS04 gates connected in series.

            Comment


              #7
              Originally posted by sergey View Post
              You're right about the purpose of U90 - It is there to prevent a race condition where CPU is writing to the DMA controller while DMA controller is trying to initiate a DMA transfer. This logic (-S0 AND -S1 AND -LOCK AND HRQDMA) finds passive CPU cycles when DMA transfer is requested, puts CPU in wait mode and activates the DMA controller (using HOLDA signal).
              Good to know - thanks! I'm curious whether this would lead to a software-detectable difference between board revisions. I guess the lockup doesn't happen every time the DMAC is accessed during a DMA transfer or the machine would hang in something like 1 in 18 floppy drive accesses due to the DRAM refresh DMAs. So presumably some "harmless" DMAs will also get delayed by a bus cycle when they happen at the same time as a DMAC transfer.

              Originally posted by sergey View Post
              Regarding the circuit with TD2 delay line. This circuit adjusts DMA clock duty cycle. The 8088 CPU needs clock with 33% duty cycle (and such clock signal is generated by the 8284 clock generator), but the 8237 DMA controller requires clock with a duty cycle more close to 50% ( >70 ns high / >50 ns low to be exact), so the solution is to pass the clock signal through some logic (74LS244 in XT's case) or/and a delay line and then do a logical OR with the original clock signal. It looks like 74LS244 alone extends the "high" phase enough (from 69 ns to 81 ns), but it is possible that in older XT they were using older variants of 8237 (e.g. AMD Am9517A) that required even longer "high" phase, and so additional delay line was added. By the way Taiwanese XT clones simply employed four 74LS04 gates connected in series.
              Fascinating stuff - thanks again!

              Comment


                #8
                One thing I did notice in testing DMA on an '84 board is that DMA transfers would sometimes fail where multiple DMA operations were ongoing concurrently. Specifically, running an SB-Pro at 22kHz with DMA disk transfers (both demand mode), one of the DRQs raised by the disk controller would apparently be missed, which I worked around by checking the DMA transfer complete bit when the end had apparently been reached. This never happened unless the SB-Pro was running.

                That said this was early in my development so it may well have been poor logic on the disk controller too.

                Comment

                Working...
                X