POC Computer Version One
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
POC Version 2
I think some of you may be missing the point. I already have the parts needed to set up a SCSI subsystem. Why fool around with something else? As André pointed out, SCSI is very robust and works well with a lot of different hardware. As well as disks, I could attach a DVD or CD ROM, tape, etc. André got it to work with a wide disk, and that was without the benefit of an intelligent controller.
BTW, I had thought about doing SATA but when I found out I could get my hands on SCSI ASICs I set aside that idea for another time. My bus won't be a U320 interface or anything like it, but absolute performance isn't critical. Besides, this will give me the opportunity to fiddle with some more hardware.
Speaking of SATA, does anyone know of an SATA controller that might be adaptable to the 65xx bus?
BTW, I had thought about doing SATA but when I found out I could get my hands on SCSI ASICs I set aside that idea for another time. My bus won't be a U320 interface or anything like it, but absolute performance isn't critical. Besides, this will give me the opportunity to fiddle with some more hardware.
Speaking of SATA, does anyone know of an SATA controller that might be adaptable to the 65xx bus?
x86? We ain't got no x86. We don't NEED no stinking x86!
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
POC Version 2
I started a new topic on my second-design POC.
x86? We ain't got no x86. We don't NEED no stinking x86!
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
POC V1
I'm still fiddling with POC V1 as I test some code concepts that will come in handy with the next version. In the process, I accidentally discovered that I can run the board at 12.5 MHz.
What happened was I had borrowed the unit's 20 MHz oscillator that generates the Ø2 clock for some other purpose. When I went to power up the unit I remembered that I had used the oscillator somewhere else. I thought I had grabbed the 20 MHz oscillator but it turned out I had gotten a 25 MHz one (the damned things all look alike unless under magnification). Since I had already plugged it in when I realized my mistake, I figured no harm in powering it up. The worst that could happen would be nothing.
Much to my amazement, the POC booted, went through the full RAM test and fell into the M/L monitor, just as it is supposed to do. After fooling around with it for a while, I concluded it was stable at the elevated clock rate. I really didn't think the unit would be able to run faster than 10 MHz, due to the 70 ns rating of the I/O hardware and EPROM, as well as the expected prop delays in the glue logic.
As you might expect, increasing the Ø2 clock rate by 50 percent had a noticeable effect on performance. A fill of RAM from $0100 to $CFFF (top of stack) was done in 290 ms, as compared to 440 ms with an 8 MHz clock. Hunting memory for a pattern took about 0.5 seconds to search the entire 52K usable address space.
Now I'm a bit excited about getting POC V2 built, since it should be able to run with a 20 MHz Ø2 clock, making it some 80 percent faster than my "overclocked" POC V1.
What happened was I had borrowed the unit's 20 MHz oscillator that generates the Ø2 clock for some other purpose. When I went to power up the unit I remembered that I had used the oscillator somewhere else. I thought I had grabbed the 20 MHz oscillator but it turned out I had gotten a 25 MHz one (the damned things all look alike unless under magnification). Since I had already plugged it in when I realized my mistake, I figured no harm in powering it up. The worst that could happen would be nothing.
Much to my amazement, the POC booted, went through the full RAM test and fell into the M/L monitor, just as it is supposed to do. After fooling around with it for a while, I concluded it was stable at the elevated clock rate. I really didn't think the unit would be able to run faster than 10 MHz, due to the 70 ns rating of the I/O hardware and EPROM, as well as the expected prop delays in the glue logic.
As you might expect, increasing the Ø2 clock rate by 50 percent had a noticeable effect on performance. A fill of RAM from $0100 to $CFFF (top of stack) was done in 290 ms, as compared to 440 ms with an 8 MHz clock. Hunting memory for a pattern took about 0.5 seconds to search the entire 52K usable address space.
Now I'm a bit excited about getting POC V2 built, since it should be able to run with a 20 MHz Ø2 clock, making it some 80 percent faster than my "overclocked" POC V1.
x86? We ain't got no x86. We don't NEED no stinking x86!
Yeah, but, where did you put the liquid cooling system and radiator block for it? 
http://image.skycomp.com.au/products/gi ... hwiu02.jpg
This is cool news -- is this the first recorded incidence of running a discrete 65xx CPU at 25MHz?
http://image.skycomp.com.au/products/gi ... hwiu02.jpg
This is cool news -- is this the first recorded incidence of running a discrete 65xx CPU at 25MHz?
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
kc5tja wrote:
Yeah, but, where did you put the liquid cooling system and radiator block for it? 
http://image.skycomp.com.au/products/gi ... hwiu02.jpg
http://image.skycomp.com.au/products/gi ... hwiu02.jpg
Quote:
This is cool news -- is this the first recorded incidence of running a discrete 65xx CPU at 25MHz?
x86? We ain't got no x86. We don't NEED no stinking x86!
-
ElEctric_EyE
- Posts: 3260
- Joined: 02 Mar 2009
- Location: OH, USA
A few MHz increase seems nonlinear as far as speed doesn't it BDD? Even if it is linear, to see one's own code running so much faster is quite a reward to push further!
However, if you said you had reached higher speeds than my 6502 system, I would have to demand some sort of proof!
However, if you said you had reached higher speeds than my 6502 system, I would have to demand some sort of proof!
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
ElEctric_EyE wrote:
A few MHz increase seems nonlinear as far as speed doesn't it BDD? Even if it is linear, to see one's own code running so much faster is quite a reward to push further!
Quote:
However, if you said you had reached higher speeds than my 6502 system, I would have to demand some sort of proof! 
x86? We ain't got no x86. We don't NEED no stinking x86!
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
POC V1
ElEctric_EyE wrote:
A few MHz increase seems nonlinear as far as speed doesn't it BDD? Even if it is linear, to see one's own code running so much faster is quite a reward to push further!
However, if you said you had reached higher speeds than my 6502 system, I would have to demand some sort of proof!
However, if you said you had reached higher speeds than my 6502 system, I would have to demand some sort of proof!
The increased clock rate over the 12.5 MHz Ø2 I've been running produces a small but perceptible performance improvement. As the time_t clock driven by the IRQ only has a resolution of 10 msec, I can't quantify the performance increase. But I can definitely see it. A fill of all RAM from $0100 to $CFFF happens too fast for a lag to be perceptible. Whooo-whee!
As soon as I have time to finalize the PCB layout for POC V2, I should be able to find out what 20 MHz operation feels like (except I/O—that will have to be wait-stated).
x86? We ain't got no x86. We don't NEED no stinking x86!
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
[deleted]
Last edited by BigDumbDinosaur on Mon Dec 05, 2011 6:36 pm, edited 1 time in total.
x86? We ain't got no x86. We don't NEED no stinking x86!
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
Re: POC V1
BigDumbDinosaur wrote:
I've been monkeying with something else (non-computer), which uses a 30 MHz oscillator. Just for grins, I plugged the 30 MHz part into POC V1's clock generator socket, which produces an effective 15 MHz Ø2 clock.
x86? We ain't got no x86. We don't NEED no stinking x86!
Re: POC Version 2
BigDumbDinosaur wrote:
I already have the parts needed to set up a SCSI subsystem. Why fool around with something else? As André pointed out, SCSI is very robust and works well with a lot of different hardware. As well as disks, I could attach a DVD or CD ROM, tape, etc. André got it to work with a wide disk, and that was without the benefit of an intelligent controller.
André
Edit: my current state of affairs for the USB host driver: http://www.flickr.com/photos/afachat/5448843351/
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
Re: POC Version 2
fachat wrote:
In the meantime I found out that quite some USB devices (namely my USB memory stick, as well as a USB multi-card reader) actually fall into the category of "SCSI" devices as well.
On another note, something I've been fiddling with is figuring out how to determine the approximate clock speed of a 65Cxx-based system strictly in software. To do so, a "calibration loop" is required that runs for a known number of clock cycles. If one can accurately measure the wall-clock time that elapses while the loop is looping, one can compute the speed of the MPU clock. Here's the calibration loop:
Code: Select all
;this code requires exactly 10,000,001 clocks
;to execute the loop bounded by L0000001
;
*=$2000
lda #$1f ;MSB
ldx #$04 ;LSB
ldy #$6d
;
L0000001 dex
bne L0000001
;
dey
bne L0000001
;
nop
dec a
bne L0000001
;
brkx86? We ain't got no x86. We don't NEED no stinking x86!
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
POC Version 1 SCSI
As I mentioned in my POC V2 topic, I've concocted a way to add SCSI (specifically, single-ended SCSI-2) to my POC unit. POC V2 will include on-board SCSI, along with CPLD glue logic, but I though it best to do the SCSI development work within the realm of something that already functions and is stable. By adding SCSI to POC V1, I'm not faced with debugging a whole new design if something doesn't work right. Also, V1 has a fully functional M/L monitor and a Motorola S-record loader in ROM, so I can develop a driver on my UNIX box and then ship it to the POC unit for testing.
A while back, I acquired some 53C94 SCSI controllers, around which I've designed a plug-in host adapter. The 53C94 offloads all of the SCSI bus protocol steps from the host processor, greatly simplifying the circuit design, as well as the code required to drive the bus and talk to SCSI devices. The 53C94 requires little in the way of supporting silicon. The controller is capable of directly driving the SCSI bus, eliminating the need for line drivers, unless a high voltage differential bus is desired. A TTL or CMOS clock source running between 10 MHz and 25 MHz is required to generate the internal timing signals used by the 53C94's state machine. In theory, that clock could be derived from the Ø2 clock on the POC board. However, the configuration of several registers in the 53C94 is contingent on the clock rate, which I may change in the course of experimentation. I don't want to have to burn a new EPROM each time I fiddle with Ø2, so I'll use a separate clock generator (20 MHz, in this case) on the HA.
The 53C94 is capable of synchronous SCSI bus transfers at the rate of 10 MB/second. However, that mode of operation isn't practical with the 65C816 without a DMA controller. Synchronous operation increases throughput by not handshaking each byte on the bus, which implies that the host system must be able to read or write the bus at a rate greater than it can actually operate. As the 65C816 can't move data at SCSI-2's synchronous rate, an attempt to run in synchronous mode would likely result in data overrun during any of the data-in phases or an underrun in the target device during a data-out phase. Accordingly, I will run the bus asynchronously, which (in theory) can be done at very slow rates. For example, the Lt. Kernal subsystem for the C-128 ran at only 65 KB/second in FAST mode, a mere 2.6 percent of the base asynchronous rate supported by the SCSI-1 standard (2.5 MB/sec). My preliminary calculations suggest a maximum of 750KB/second with the '816 running at 20 MHz (not possible with POC V1). As loads and stores consume the bulk of the processing time, that rate will probably decrease almost in proportion to Ø2. Assuming this HA will function with the current Ø2 rate of 12.5 MHz, I might be able to achieve 450 KB/sec.
There is no expansion port on the POC, so I decided to use the Dallas watchdog timer's socket as a makeshift expansion port, as all but two of the signals required to control the 53C94 are already present. Several of the watchdog's socket positions are unused, so a simple patch to the POC board connects /IO-2 and RST (the missing signals) to the vacant pins. The host adapter itself mounts on three standoffs on the POC board and plugs into the watchdog's socket. The watchdog, in turn, plugs into a socket on the HA and (in theory) should be none the wiser about the change.
Owing to its intended use, the 53C94 will generate an interrupt each time the SCSI bus changes phase (the target device controls bus phases once arbitration and selection have occurred). Other events can also generate an IRQ, such as target device selection timeout. Most of the possible IRQ sources can't be disabled, which initially increases the difficulty of creating a basic driver. So I rigged up the host adapter so I can isolate the 53C94 IRQ output from the POC's IRQ circuit.
The finished driver will ultimately be a combination of foreground and interrupt-driven code. Each phase will have a code segment that fulfills whatever requirements are peculiar to that phase. There will also be segments to handle interrupts caused by events such as unexpected phase change, data transfer timeout, etc. In a general sense, the IRQ part will "dispatch" the main driver loop by changing the RTI address on the stack to point to the correct segment. This is where the 65C816's LDA n,S and STA n,S instructions will come in handy.
Anyhow, I've got the HA PCBs ordered and will post more as I progress.
SCSI-2 Host Adapter Schematic
SCSI-2 Host Adapter PCB Layout
NCR 53C94 SCSI Controller (PLCC84)
A while back, I acquired some 53C94 SCSI controllers, around which I've designed a plug-in host adapter. The 53C94 offloads all of the SCSI bus protocol steps from the host processor, greatly simplifying the circuit design, as well as the code required to drive the bus and talk to SCSI devices. The 53C94 requires little in the way of supporting silicon. The controller is capable of directly driving the SCSI bus, eliminating the need for line drivers, unless a high voltage differential bus is desired. A TTL or CMOS clock source running between 10 MHz and 25 MHz is required to generate the internal timing signals used by the 53C94's state machine. In theory, that clock could be derived from the Ø2 clock on the POC board. However, the configuration of several registers in the 53C94 is contingent on the clock rate, which I may change in the course of experimentation. I don't want to have to burn a new EPROM each time I fiddle with Ø2, so I'll use a separate clock generator (20 MHz, in this case) on the HA.
The 53C94 is capable of synchronous SCSI bus transfers at the rate of 10 MB/second. However, that mode of operation isn't practical with the 65C816 without a DMA controller. Synchronous operation increases throughput by not handshaking each byte on the bus, which implies that the host system must be able to read or write the bus at a rate greater than it can actually operate. As the 65C816 can't move data at SCSI-2's synchronous rate, an attempt to run in synchronous mode would likely result in data overrun during any of the data-in phases or an underrun in the target device during a data-out phase. Accordingly, I will run the bus asynchronously, which (in theory) can be done at very slow rates. For example, the Lt. Kernal subsystem for the C-128 ran at only 65 KB/second in FAST mode, a mere 2.6 percent of the base asynchronous rate supported by the SCSI-1 standard (2.5 MB/sec). My preliminary calculations suggest a maximum of 750KB/second with the '816 running at 20 MHz (not possible with POC V1). As loads and stores consume the bulk of the processing time, that rate will probably decrease almost in proportion to Ø2. Assuming this HA will function with the current Ø2 rate of 12.5 MHz, I might be able to achieve 450 KB/sec.
There is no expansion port on the POC, so I decided to use the Dallas watchdog timer's socket as a makeshift expansion port, as all but two of the signals required to control the 53C94 are already present. Several of the watchdog's socket positions are unused, so a simple patch to the POC board connects /IO-2 and RST (the missing signals) to the vacant pins. The host adapter itself mounts on three standoffs on the POC board and plugs into the watchdog's socket. The watchdog, in turn, plugs into a socket on the HA and (in theory) should be none the wiser about the change.
Owing to its intended use, the 53C94 will generate an interrupt each time the SCSI bus changes phase (the target device controls bus phases once arbitration and selection have occurred). Other events can also generate an IRQ, such as target device selection timeout. Most of the possible IRQ sources can't be disabled, which initially increases the difficulty of creating a basic driver. So I rigged up the host adapter so I can isolate the 53C94 IRQ output from the POC's IRQ circuit.
The finished driver will ultimately be a combination of foreground and interrupt-driven code. Each phase will have a code segment that fulfills whatever requirements are peculiar to that phase. There will also be segments to handle interrupts caused by events such as unexpected phase change, data transfer timeout, etc. In a general sense, the IRQ part will "dispatch" the main driver loop by changing the RTI address on the stack to point to the correct segment. This is where the 65C816's LDA n,S and STA n,S instructions will come in handy.
Anyhow, I've got the HA PCBs ordered and will post more as I progress.
SCSI-2 Host Adapter Schematic
SCSI-2 Host Adapter PCB Layout
NCR 53C94 SCSI Controller (PLCC84)
x86? We ain't got no x86. We don't NEED no stinking x86!
-
ElEctric_EyE
- Posts: 3260
- Joined: 02 Mar 2009
- Location: OH, USA
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
POC Version 1 SCSI
ElEctric_EyE wrote:
Can we still acquire these SCSI drives BDD? It would be a shame to put so much effort into writing code for a device that can't be used by anyone else...
x86? We ain't got no x86. We don't NEED no stinking x86!