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

Powertran Cortex

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

    Originally posted by ClassicHasClass View Post
    Thanks. If I read this correctly, it loads the first sector to @>8000 and executes it from there, correct? Where does the kernel load in memory?
    Yes, that is correct. The kernel loads at @>0000, please have a look at the second stage boot loader ("the first sector") for details:
    http://1587660.websites.xs4all.nl/cg...447f8291186a8a
    The "emu" flag adds a bit of code that does some initialisation that on the real hardware is already performed by the first stage boot loader.

    (And while I'm asking, is the source code for emulsx around anywhere?)
    Sure, attached. It is a messy bit of code that hacks together parts of David Pitt's TI990 emulator and Warren Toomey's Apout unix simulator. The latter was used in debugging the userland programs (or more accurately: debugging the compiler) well before I ported the kernel itself. The Apout code is not currently used. As said, it is messy code that just evolved as a debugging tool as I went along.

    Compile with:
    Code:
    gcc -o emulsx -O -m32 -DUNIX sim990.c simio.c simload.c simops.c simuv6.c
    Paul
    Attached Files

    Comment


      I had to do a little hacking on my AIX system, but it runs emulsx and boots the kernel. There's a glitch with the terminal where it wants 4 characters at a time -- I suspect this is an endian problem given the fact it's exactly 32 bits, but it otherwise behaves properly.

      Once I figure that out, then I want to see if I can get my larger project off the ground, and if it does I'll share.
      I use my C128 because I am an ornery, stubborn, retro grouch. -- Bob Masse
      Various projects and oddities: http://oldvcr.blogspot.com/
      Machine room: http://www.floodgap.com/etc/machines.html

      Comment


        Originally posted by ClassicHasClass View Post
        I had to do a little hacking on my AIX system, but it runs emulsx and boots the kernel. There's a glitch with the terminal where it wants 4 characters at a time -- I suspect this is an endian problem given the fact it's exactly 32 bits, but it otherwise behaves properly.
        It might be the way AIX handles raw mode. To emulate the 9902, it places stdin in non-blocking raw mode and checks for new characters arriving ~60 times per second. On OSX I get each character reported separately, perhaps AIX groups in 4 characters with the current raw settings (Side note: on my breadboard I have not hooked up the 9902 interrupt to the CPU, so on every clock interrupt the service routine checks the receive buffer full flag on the 9902 -- see low.s for details).

        Once I figure that out, then I want to see if I can get my larger project off the ground, and if it does I'll share.
        Super!

        Comment


          You're right, it's something AIX is doing. I put it on my G5 running OS X and it works fine. I'll mess with the AIX code over lunch since it's more convenient to work on.
          I use my C128 because I am an ornery, stubborn, retro grouch. -- Bob Masse
          Various projects and oddities: http://oldvcr.blogspot.com/
          Machine room: http://www.floodgap.com/etc/machines.html

          Comment


            Originally posted by ClassicHasClass View Post
            I put it on my G5 running OS X and it works fine.
            Happy to hear you could replicate the results! Now try the command "mv . a" and witness an ancient inside joke between the original Unix developers. Google for it to read the background to this joke.

            Comment


              An ominous phrase! It's a shame it doesn't render as beta here.
              I use my C128 because I am an ornery, stubborn, retro grouch. -- Bob Masse
              Various projects and oddities: http://oldvcr.blogspot.com/
              Machine room: http://www.floodgap.com/etc/machines.html

              Comment


                pnr, one last request: I tried to extract out the DSKs and was not able to. Are you using the CF card image as merely one big honking DSK image? My hope was to distill down to floppy size (say, around 120-140K each).
                I use my C128 because I am an ornery, stubborn, retro grouch. -- Bob Masse
                Various projects and oddities: http://oldvcr.blogspot.com/
                Machine room: http://www.floodgap.com/etc/machines.html

                Comment


                  Originally posted by ClassicHasClass View Post
                  pnr, one last request: I tried to extract out the DSKs and was not able to. Are you using the CF card image as merely one big honking DSK image? My hope was to distill down to floppy size (say, around 120-140K each).
                  To extract the files you need to build the file system tool:
                  http://1587660.websites.xs4all.nl/cg...aa&name=fsutil
                  With this tool you can also rebuild the file system for a different size disk.

                  Note that the disk is also the swap device and that in the current configuration it needs to be able to hold two 40KB swapped images, i.e. 80KB. With one 120KB disk I'm not sure you have enough space left over for the file system. Perhaps use one 120KB floppy as swap space and the other as a file system?

                  The original LSX had 32KB user space, so it needed 64KB swap space. It ran on a system with SSSD 8" floppy, or about 240KB, of which 176KB was used as the filesystem.

                  Have a look at the param.h file for configuration settings:
                  http://1587660.websites.xs4all.nl/cg...d929c?ln=17-31
                  You need to consider the NBLKS, SWPSIZ, NSWAP and SWPLO settings.

                  All-in-all you will need to recompile the kernel, probably also adding your own disk driver code (see drv_cf.S for the breadboard CF Card driver).

                  Comment


                    Originally posted by Ksarul View Post
                    Actually, there might be a couple of folks who'd want to build one of these. There was an individual on AtariAge that wanted to build a 9995 single-board computer this past week and was looking for folks to chime in on his development project. Right now he's looking at a possible update to the Cortex, but the breadboard project may be a good fit too.
                    Here are a draft schematic and a PCB design for the "Mini Cortex". I have a little room left over on the PCB. I've considered adding further memory protection (futile), adding an ethernet chip or an F18A. For the latter I'm not so much interested in the 9918A part, but I find the embedded 9900 GPU intriguing and an F18A may serve as a handy development board to prototype an FPU for the 99105 project. On the other hand, mission creep is usually a progress killer.

                    Jim, Stuart and Ksarul, I would appreciate your constructive critique of the design and PCB (it has been 35 years since I last did a PCB and those were simple, hand-drawn affairs).

                    Paul
                    Last edited by pnr; February 23, 2015, 11:12 AM. Reason: spelling

                    Comment


                      Looks good, Paul. Although you renumbering the address and data buses away from the TI standard had me confused.

                      Questions more than anything:

                      (1) What's the purpose of the RESET jumper? Won't that just hold the processor in the reset state?

                      (2) Is the 3K3 resistor for the Power LED correct? These normally seem to be around 330R.

                      (3) Why have you split the inputs/outputs to the memory mapper into a group of 4 and a group of 3?

                      (4) Is the single-step triggered by reading/writing a specific memory address, rather than using the LREX instruction?

                      (5) What's the USER output of U10? I can see it goes into the GAL but isn't used. For future use?

                      (6) Out of interest, why on some ICs (like the memory mapper) do you pull pins high through a resistor, but with the 74LS74 you tie the /Set input directly to +5V? Seen that done before, but never understood why.

                      Is it worth filling that spare space on the PCB with a load of 'tripad' holes and power rails so you can add extra ICs for mods?

                      (Programmed my first GAL yesterday. Got it to emulate a 74LS138.)

                      Stuart.

                      Comment


                        Originally posted by Stuart View Post
                        (1) What's the purpose of the RESET jumper? Won't that just hold the processor in the reset state?
                        Ah yes, it is not a jumper: it is a header for connecting an external reset switch. Could not find the symbol for a two pin header, so used the jumper symbol. Confusing, I admit.

                        Originally posted by Stuart View Post
                        (2) Is the 3K3 resistor for the Power LED correct? These normally seem to be around 330R.
                        It is a low power LED, 2 mA does the job. That said, a 2K7 is perhaps a better choice.

                        Originally posted by Stuart View Post
                        (3) Why have you split the inputs/outputs to the memory mapper into a group of 4 and a group of 3?
                        Originally they were all together and in order, but this way works out better for laying out the PCB tracks.

                        Originally posted by Stuart View Post
                        (4) Is the single-step triggered by reading/writing a specific memory address, rather than using the LREX instruction?
                        It is triggered by a CRU bit. So to execute a single instruction from the monitor the code would be:
                        Code:
                        li r12, 0x0800
                        sbo 2
                        rtwp
                        This will execute one instruction after the RTWP and than do an NMI. The NMI routine then starts with:
                        Code:
                        limi 0
                        li r12,0x0800
                        sbz 2
                        Originally posted by Stuart View Post
                        (5) What's the USER output of U10? I can see it goes into the GAL but isn't used. For future use?
                        Good catch. I forgot to update the GAL formulas. The purpose of USER is for the operating system to set "user mode". In this mode access to the CF Card, the mapper registers and the 9902 is blocked. A user program can always reset the bit, so it does not protect from malicious code, but should help as a minor defense against bugs taking the system down. That said, on a 9995 any user program can do a "limi 0" and that pretty much locks out the OS from recovering.

                        Originally posted by Stuart View Post
                        (6) Out of interest, why on some ICs (like the memory mapper) do you pull pins high through a resistor, but with the 74LS74 you tie the /Set input directly to +5V? Seen that done before, but never understood why.
                        I guess the truth is that I don't really understand the purpose of these pull up resistors. I will have to read up on their origins. Most likely outcome is that this needs to be modified to use a pull up resistor.

                        Originally posted by Stuart View Post
                        Is it worth filling that spare space on the PCB with a load of 'tripad' holes and power rails so you can add extra ICs for mods?
                        That is a good idea. Not sure what you mean by 'tripad' holes: I think three holes connected by a long pad, like you see on prototyping boards?

                        Originally posted by Stuart View Post
                        (Programmed my first GAL yesterday. Got it to emulate a 74LS138.)
                        That is great news. This means you have figured out the required toolchain to go from logic formulas to a programmed device. I still have that learning curve ahead of me.

                        Paul

                        Comment


                          Originally posted by pnr View Post
                          I guess the truth is that I don't really understand the purpose of these pull up resistors. I will have to read up on their origins. Most likely outcome is that this needs to be modified to use a pull up resistor.
                          Found this explanation:
                          http://www.edn.com/electronics-blogs...-up-Resistors-

                          As a teenager 35 years ago I experimented a lot with TTL (mostly LS types, though) and I never experienced this problem. Depending on the value of beta (as defined in the above write-up) one would perhaps not immediately notice (if beta is in the 10 to 20 range, the chip would get warm, but not hot). It is also possible that this was a sixties problem and that by the late 70's chips were designed to prevent this issue.

                          In any case, the safe route is to assume that it can be a problem. I will update the schematic and pcb to add a pull-up resistor. Thanks for highlighting this.

                          Comment


                            The Cortex has a 74LS74 with /Set and /Reset tied directly to +5V, so I'm sure it a 'valid' thing to do. Just not sure why. Using pull-up resistors can't hurt though.

                            Tripad - yes, three holes connected by a long pad.

                            All your other replies sound convincing. Apart from perhaps:

                            -- U10. Feel a bit uncomfortable that CRUCLK isn't involved in deriving the /CE. I guess though that if /MEMEN is high then it must be a CRU cycle (or an external instruction, which you aren't using by the looks of things).

                            -- If PROTECT is high, then it looks as if you're locking out use of the 9902, as its CRUCLK input won't ... clock. Is that intentional?

                            Stuart.

                            Comment


                              Originally posted by Stuart View Post
                              The Cortex has a 74LS74 with /Set and /Reset tied directly to +5V, so I'm sure it a 'valid' thing to do. Just not sure why. Using pull-up resistors can't hurt though. .
                              Have a look at this 74LS74 datasheet:
                              http://www.ti.com/lit/ds/symlink/sn54s74.pdf
                              Look at the full schematic on page 3. All inputs are protected by two diodes that should block the run-away currents described in the write-up. I guess the Cortex designers felt safe that TI chips would be used and that the issue could not arrise -- after all, they were working for TI's chip division, weren't they? It is a bit strange though that the "equivalent input circuit" on page 2 is still the open emitter design mentioned in the write-up.

                              I've looked at datasheets from National Semi and Motorola but the TI one is the only one giving full internal schematics.

                              Originally posted by Stuart View Post
                              -- U10. Feel a bit uncomfortable that CRUCLK isn't involved in deriving the /CE. I guess though that if /MEMEN is high then it must be a CRU cycle (or an external instruction, which you aren't using by the looks of things).

                              -- If PROTECT is high, then it looks as if you're locking out use of the 9902, as its CRUCLK input won't ... clock. Is that intentional?
                              It looks like you have found two more bugs. I'll correct those too. Once more many thanks.

                              Also, the "spare" area could be used to make the circuit even more Cortex-like with decoding of the external instructions.

                              Comment


                                Thanks for the reminder something had been happening here Paul, the last message I saw was a couple of months ago.

                                Yes, my TMS99105 system did suffer from feature creep somewhat and I got distracted by another hobby.

                                A quick look at your PCB and I would say you need more 0.1uf decouplers, at least one for every chip, as close between 0v and 5V as you can get them.

                                Silly question, where does the power connect ?

                                Jim

                                Comment

                                Working...
                                X