Forum Rules and 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.

Rule 1: 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.

Rule 2: 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.

Rule 3: 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.

Rule 4: "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.

Rule 5: 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

NOVA Assembler

  • Filter
  • Time
  • Show
Clear All
new posts

    NOVA Assembler

    Have never been accused of being the sharpest tool in the shed and in the last couple years been trying to teach myself assembler for the Data General NOVA/Rolm military platform. Been lots of fun, something like being in a dark room with no idea of where anything is or how to turn on the lights. I am slowly making progress, maybe.
    Why is it that all the books written about working in assembler appear to be written by people who have no idea how to convey information or is it a plot where the people who know assembler want to keep the understanding limited to just themselves?

    I have a couple working systems and a small understanding of the layout and experience loading and working with the 16 bit systems.
    The problem I have now is how to use the JSR (jump sub routine) command, can use the JMP all day long to drive the PC to another location but need to be able to call a jump to a sub routine for doing things like printing but cannot see how you get the routine to go back to the next address in the PC when finished? Think the manual says something about putting the return address in A3 but just cant see how that works, use to doing things like in Basic where you put return on the end of the sub routine but donít understand the syntax for NOVA speak.
    The problem is I want to have the system print out a string of characters to TT0, right now have to do a LDA(020100)from a fixed address to A0. You can only print from one of the four accumulators, A0, A1, A2 and A3.
    Then test TT0 for ready (063511), If TT0 is not finished pushing out the last character then JMP back until TT0 ready (000777), once the port is good then print DOA (061111) and start all over again with loading the next address into A0.
    I want to have a JSR that executes Test TT0 063511, jump back until ready 000777 and when ready print A0 061111 so I donít have to enter that string for each character that gets printed.

    This is what I currently have to do:

    1000 020100 LDA 0 100
    1001 063511 Test TT0
    1002 000777 JMP back 1
    1003 061111 DOAS print to TT0
    1004 020101 LDA 0 101
    1005 063511
    1006 000777
    1007 061111
    1010 020102 LDA 0 102
    1011 063511
    1012 000777
    1013 061111
    1014 020103 LDA 103

    I am using addresses 100 to around 150 for the stuff that gets printed out. But the executable program starts at 1000

    In my experience, the manuals/documentation is reference material only - you have to go on the training course to actually learn anything...

    Hmmm, now how do I get on a training course for something that has been obsolete for ‘x’ decades? Replacing ‘x’ for the machine you are working with...

    I learned much more by going on the DEC MACRO assembler and Intel 286 assembler courses than I ever did by just reading the manuals before I went on the courses.

    The microprocessor books (e.g. Z80, 6502 and 6800 etc.) started a bit of a revolution (in my opinion).

    The makers of mainframes and minis wanted a slice of the training market as a paid-for add-on.

    Never used the DG Nova though...



      The answer on how to do a return from a subroutine is

      JMP 0,3

      Maybe reading through this guide might help (particularly section 2)?
      Reach me: vcfblackhole _at_ protonmail dot com.


        Sounds surprisingly simple just use the JMP command back three. The problem is I am a hardware guy and not a software person.
        I have the book and have spent hours trying to read but somehow my brain is too small to take it all in! It starts with a simple explanation of a command, then devolves into some weird argument into how the memory is partitioned and somehow by the third or forth line I am so confused I have no clue what they are saying.
        Slowly, in microscopic increments I have been moving forward in trying to get these systems to do things that regular people can appreciate but without formal education and all my training and education being in analog systems and broadcasting working on teaching yourself NOVA speak can be a painful process.
        Thanks for the help and with the guidance from groups like this perhaps we can all move forward into the past.


          The offending systems:



            The Nova is a very simple machine with only a few instruction formats. If your impression is that it's complicated, you're overthinking things.

            Pretty much everything is a 16-bit word. Addresses refer to 16-bit words; operations operate on 16 bit words and all instructions are single 16 bit words-- and there are only 4 types of those:
            • Memory modification: (increment, decrement, jump and jump to subroutine)
            • Data moving - e.g., load, store.
            • Arithmetic; which are basically ALU operations that include shifting and skipping on the result. None of these address memory (they work through the accumulators). There are numerous variations on these, obviously, and you can perform, say, an add and left shift and skip on zero all in the same instruction. Further, the result of any operation need not be stored into any register. The assembler syntax for all of these can look daunting at first, but basically, it's a root operation, followed by modifiers (e.g. # = don't actualize the result) as well as a final action (e.g. SZR = skip on zero). Study the instruction word makeup and then the assembler will make sense.
            • I/O instructions - these are device-specific and you need to refer to the applicable manual for these. Some are a bit peculiar; for example, on some Novas, multiply and divide is relegated to an I/O unit.

            Because of the limited instruction set, and the limit of an 8 bit displacement, the Nova has a varied addressing scheme. Not only can an address be indexed by an accumulator, but if the high-order bit (bit 0 in DG parlance) is set in the referenced, the reference is indirect; that is the addressed word points to another word. Some low-memory addresses have special properties; there are 8 auto-increment and 8 auto-decrement memory locations in page 0.

            Again, the Nova is a very simple machine. If you can get your mind around the basic instruction set, by looking at the instruction word layout, the assembly mnemonics will make sense.
            Reach me: vcfblackhole _at_ protonmail dot com.


              The Nova has "designed by the guy behind the PDP-8" written all over it, in the sense that it initially seems baffling and constrictive until you wrap your head around it to the point where the solutions to your problems start to become obvious. I'm not sure I've ever seen another architecture so dedicated to the concept of building complex operations out of combinations of simple operations.
              Computers: Amiga 1200, DEC VAXStation 4000/60, DEC MicroPDP-11/73
              Synthesizers: Roland JX-10/SH-09/MT-32/D-50, Yamaha DX7-II/V50/TX7/TG33/FB-01, Korg MS-20 Mini/ARP Odyssey/DW-8000/X5DR, Ensoniq SQ-80, E-mu Proteus/2, Moog Satellite, Oberheim SEM
              "'Legacy code' often differs from its suggested alternative by actually working and scaling." - Bjarne Stroustrup


                Yup, Edson de Castro definitely left his mark on the PDP-8 as well as the Nova.

                The Fairchild 9440 MPU as well as the MicroNova are direct implementations of the Nova. The 4 16-bit accumulator model was used with the National Semi PACE and the multi-chip IMP-16, although a stack was added and traditional CISC instruction set.

                The idea of low-memory "direct cells" is much older than the Nova or PDP-8; it's used, for example on the CDC 160 computer.
                Reach me: vcfblackhole _at_ protonmail dot com.


                  Ok, so jump to address located in A3 is 001400 or binary 00000110000000 with the JMP instruction being bits 0,1 and 2 and 6 and 7 being the address of the accumulator, 8 thru 15 don’t matter.
                  The PC doesn’t matter because it will go to the addresses located in the JSR but A3 will hold the valid return address. But will A3 increment the address by one or am I setting up a loop?


                    If you look at the description of the JSR carefully, you'll note that it stores P+1 in AC3. So no need to increment.

                    To add a bit of color to the discussion, it was common practice to stash arguments to the subroutine after the JSR. So you could pick up the arguments relative to AC3 and then jump to the return address, indexed by the number of arguments. So, if you had 2 argument words stored after the JSR, you'd return with a

                    JSR 2,3

                    That is, AC3 indexed by 2 words.
                    Reach me: vcfblackhole _at_ protonmail dot com.


                      My JSR statement just isn’t working! I can do jumps no problem. My print sub starts at page 1 address 300 and runs to 304 where it’s sent back with the JMP to address set by A3 001400.
                      The issue now is that when I want to branch to the sub I have been trying 010300 to send the PC down to 300 but that don’t work, I can do a JMP 000300 and that sends the PC down to 300 but it will not write to A3 so going to assume that’s the difference that in JMP you are just transferring down to that address and in JSR you transfer down to that address but it also increments A3?
                      What am I missing here?


                        Well, that's the idea with JSR:

                        The effective address 'E' is computed. Then the present value of the program counter is incremented by one and the result is placed in AC3. 'E' is then placed in the program counter and sequential operation continues with the word addressed by the updated value of the program counter.
                        Seems to be pretty straightforward to me. JMP just omits the AC3 stuff (second sentence).
                        Reach me: vcfblackhole _at_ protonmail dot com.


                          Can you post your program so we can have a look?



                            Will post when completed, have a simple version that works now but want to reduce the lines of code by using a JSR command and just have to work out the particulars of the command into a version that runs on my hardware.
                            Once a year some friends and I get together and we do a Ham Radio related event commemorating Able Archer 83, a Cold War event and this involves us dragging lots of period correct radio equipment out to a remote site and setting up and operating for a weekend using only that technology. We use to set up on top of mountains and the like but in the past couple years we have been operating from historical locations like a former Nike Missile site in Davidsonville Maryland and this last year from the site of a former Navy SOSUS facility located at Fort Miles, Cape Henlopen State Park in Delaware.
                            Working in a public setting we have people who stop by to see what’s going on and last year we set up a AA 83 information table with information on what this was all about and stuff including a set of 1980 military field telephones that we allowed people to try and it was a big hit with all that tried them.
                            Thinking for this year I want to also put a rack up by the public table that will hold the Rolm 1602 (AN/YUK-19) and a MX-101059 terminal that will be displaying a scrolling message about the event. The MX Terminal has a huge fount and is easily visible from a distance and figure it will be a good example of state of the art from 1983
                            There are other ways of doing this, have already built up PROM and Uart that can play back a message to the terminal and know that the smart people can do this with an Arduino and imagine I may be able to do it with a Basic Stamp being that s more my generation but because we make a big effort to use period correct radio equipment would like to do this with a period correct computer and think people will be impressed by a huge rack full of stuff that can barley do what they do when they send text messages.
                            This last year we ran over a hundred voice radio contacts on SSB, some on old tactical wide band FM and several teletype contacts and had around two hundred people stop by and see what we were doing. The state park people loved it and have already invited us back for this year so I think a vintage military communications terminal and computer would be something people would like to see.


                              That’s why I wanted to see the code, to see if we could spot why your JSR wasn’t working?