PDA

View Full Version : Data General Nova 3: 6045 Drive Debugging Progress



NF6X
June 13th, 2016, 08:22 AM
This forum needs more Nova chatter!

After a long hiatus, I've given my Nova 3/12 some more brain bandwidth. It consists of a Nova 3/12 and a 6045 hard drive. The drive has one 5M fixed platter, and one 5M removable pack. A couple of packs came with the system. I have not been able to boot the system off the hard drive, and I've finally started to debug that issue. I don't have quite enough going on yet for a blog post on my own blog, but the bar is a lot lower for a forum thread, so here we are!

The first task was determining if I even had things plugged into the right places after reassembling the system from its move to my home. Here are the boards that are installed. Note that the part numbers listed are the PCB artwork markings, which don't tell the whole story since the same PCB artwork was used for multiple end products based on how it was assembled. I have more data to gather, still.



Slot
Part Number
Description


12
107-000116-08
DGC NOVA QUAD MULTIPLEXER


11
107-000187-16
DISK CARTRIDGE CONTROL DGC NOVA


10




9




8




7




6




5




4
107-000151-19
DGC NOVA CASSETTE I/O ("4078" async interface)


3
(non-DGC card)
128K MOSTEK MEMORY


2
107-000621-01
NOVA 3 TRIPLE OPTION


1
107-000539-05
NOVA 3 CPU



First, I downloaded Toby Thain's portable Nova assembler (http://www.telegraphics.com.au/sw/info/dpa.html) and wrote a test program to toggle in and determine whether I could talk to the drive at all:


02 .TITL dsktst1
03 .LOC 0
05 00000 062677 START: IORST ; Reset I/O channels
06 00001 060633 DIAC 0, DKP ; Drive status register to AC0
07 00002 065433 DIB 1, DKP ; Drive mem addr register to AC1
08 00003 072433 DIC 2, DKP ; Drive disk addr register to AC2
09 00004 034010 LDA 3, SEEK ; Load seek command to AC3
10 00005 075133 DOAS 3, DKP ; Do seek
11 00006 074433 POLL: DIA 3, DKP ; Poll drive status to AC3...
12 00007 000006 JMP POLL ; ...forever
14 00010 003220 SEEK: 003220 ; Seek cyl 620(8):
15 ; 0 0000 1 10 10010000
16 ; -> 0 000 011 010 010 000
17 .END START


That code reads the three drive registers into accumulators AC0-AC2, requests a near-full-stroke seek, then polls the status register into AC3 forever. The good news: It produced an audible clunk from the drive! The bad news: Reading the status register always produces zeros.

Toggling in test programs was going to get tedious pretty quickly, so I launched off on a side project to find an easier way. A very helpful and very Nova-savvy fellow helped me out with some documentation and test tape images, so I spent some time learning how to bootstrap paper tape images over the serial console port. I figured it out, and successfully ran a memory diagnostic. Still, dealing with multiple bootloader stage images each time was a bit more cumbersome than I wanted, so I looked for a still easier way.

With a day of work, I hacked up Toby's code to spit out binaries with a self-loading bootstrap prepended. Here's my fork of the code (https://github.com/NF6X/dpa). Now, I can write test programs and then bootstrap them into the computer in one step, using its PROGRAM LOAD function! With that tool in the toolbox, I wrote another test program to perform full-stroke seeks, checking the BUSY and DONE flags after each seek:


02 .TITL DSKTST2
03 .LOC 0
05 00000 062677 START: IORST ; Reset all IO
06
07 00001 020024 LOOP: LDA 0, SEEKUP ; Full stroke seek +
08 00002 061133 DOAS 0, DKP
10 00003 063433 SKPBN DKP ; Wait for busy
11 00004 000003 JMP .-1
13 00005 063633 SKPDN DKP ; Wait for done
14 00006 000005 JMP .-1
16 00007 063533 SKPBZ DKP ; Wait for not busy
17 00010 000007 JMP .-1
19 00011 060233 NIOC DKP ; Clear flags
20
21 00012 020025 LDA 0, SEEKDN ; Full stroke seek -
22 00013 061133 DOAS 0, DKP
24 00014 063433 SKPBN DKP ; Wait for busy
25 00015 000014 JMP .-1
27 00016 063633 SKPDN DKP ; Wait for done
28 00017 000016 JMP .-1
30 00020 063533 SKPBZ DKP ; Wait for not busy
31 00021 000020 JMP .-1
33 00022 060233 NIOC DKP ; Clear flags
34
35 00023 000001 JMP LOOP
38 00024 003227 SEEKUP: 003227 ; Seek cyl 407:
39 ; 0 0000 1 10 10010111
40 ; 0 000 011 010 010 111
42 00025 001000 SEEKDN: 001000 ; Seek cyl 0:
43 ; 0 0000 0 10 00000000
44 ; 0 000 001 000 000 000
46 .END START

That should produce a small earthquake if all goes well, but it just made one clunk and then remained looping at 00005/00006. So, the drive took one seek command but then never set the DONE flag. And that's where I am right now. Time to dig into the electronics and find out what's going wrong!

Well, I need to leave for work. No telling whether the next time slice will be tonight or a year from now.

Marty
June 13th, 2016, 09:02 AM
Hi All;

Nf6X, You need to check the Flip-flops for the BUSY and DONE flags and the associated circuitry, and Make sure with a scope or something Similar that they Both can be Set and Reset, not at the same time..
Most likely one of them is stuck or not working at all..
Also, make sure all of the appropriate signals are getting to the flip-flops..

THANK YOU Marty

NF6X
June 13th, 2016, 09:12 AM
Yup, I need to dig into the circuitry. I don't think I have detailed schematics for the drive or controller yet. I hope I can get some so I don't need to do it all in hard mode.

Marty
June 13th, 2016, 09:20 AM
Hi All;

NF6X, I think You already know the two places to check for that kind of Information..

THANK YOU Marty

NF6X
June 13th, 2016, 09:49 AM
Yep, we're working on it! ;)