Qbus
Veteran Member
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
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