6502.org Forum  Projects  Code  Documents  Tools  Forum
It is currently Sun Jun 30, 2024 4:06 pm

All times are UTC




Post new topic Reply to topic  [ 3 posts ] 
Author Message
PostPosted: Sun Apr 09, 2017 6:04 am 
Offline

Joined: Tue Dec 25, 2007 4:57 am
Posts: 109
Donald F. Hanson drew his 6502 diagram. A block of timing generation logic has 8 registers: T0, T1, T1X, T2, T3, T4, T5, and T6. This Visual 6502 shows that timing generation logic only has 7 registers, but not 8 registers. I have no idea where T1X comes from or it does not have storage. Perhaps, T0 and T1X are tied into one gate logic. T0 has storage. After T0 goes high and then low, the data state is transferred from T0's storage to T1X's storage and then inverted for T1X output into programmable array logic.

This looks like that node 1533 is T0's storage and node 554 is considered to be T1X's storage, but it is actually to be ready's storage. Please confirm if my comment is correct.

Take care,
Bryan


Top
 Profile  
Reply with quote  
PostPosted: Sun Apr 09, 2017 10:16 am 
Online
User avatar

Joined: Thu Dec 11, 2008 1:28 pm
Posts: 10837
Location: England
It's quite a complicated area. The only official notation is what's drawn on the 6502 schematics, which are not public. Donald Hanson's block diagram is drawn up as his best understanding, at the time, of what was on the schematic. The notations in visual6502 are not precisely the same, because they were made up before we saw the schematic. Indeed, they are a combination of our own conclusions, and notations by Balazs, and notations by other 6502 investigators.

Within visula6502, we find this:
Code:
        if(busname=='tcstate')
                return ['clock1','clock2','t2','t3','t4','t5'].map(busToHex).join("");
which tells you the 6 signal names used to construct tcstate. We also find this:
Code:
// The 6502 TCState is almost but not quite an inverted one-hot shift register                                                                   
function listActiveTCStates() {
        var s=[];
        if(!isNodeHigh(nodenames['clock1']))    s.push("T0");
        if(!isNodeHigh(nodenames['clock2']))    s.push("T1");
        if(!isNodeHigh(nodenames['t2']))        s.push("T2");
        if(!isNodeHigh(nodenames['t3']))        s.push("T3");
        if(!isNodeHigh(nodenames['t4']))        s.push("T4");
        if(!isNodeHigh(nodenames['t5']))        s.push("T5");
        return s.join("+");
}

Within the 6502 schematic we see six named control signals as three of the rows of the PLA, all of which have an overbar to signify inversion: T5, T4, T3, T2 at the top of the PLA, and T1, T0 at the bottom. Looking at these horizontal poly lines in visual6502, we see the expected names as seen in the code blocks above.

So the mapping of T0 to T5 is clear, as signal names. As state names it's another question. For example
T5 seems to be stored in node 18
T4 in 1606
T3 in 644
T2 in 1360
These nodes are not named in visual6502, and I might have made a mistake just now in tracing back.
clock1
clock2
are driven from rather more complicated circuits, I don't want to trace those back at this time.

Note that the SYNC pin is labelled on the schematic as T1. In visual6502, it's driven by node 862. That node in the schematic is labelled T1.


Top
 Profile  
Reply with quote  
PostPosted: Sun Apr 09, 2017 5:31 pm 
Offline

Joined: Tue Dec 25, 2007 4:57 am
Posts: 109
BigEd wrote:
It's quite a complicated area. The only official notation is what's drawn on the 6502 schematics, which are not public. Donald Hanson's block diagram is drawn up as his best understanding, at the time, of what was on the schematic. The notations in visual6502 are not precisely the same, because they were made up before we saw the schematic. Indeed, they are a combination of our own conclusions, and notations by Balazs, and notations by other 6502 investigators.

Within visula6502, we find this:
Code:
        if(busname=='tcstate')
                return ['clock1','clock2','t2','t3','t4','t5'].map(busToHex).join("");
which tells you the 6 signal names used to construct tcstate. We also find this:
Code:
// The 6502 TCState is almost but not quite an inverted one-hot shift register                                                                   
function listActiveTCStates() {
        var s=[];
        if(!isNodeHigh(nodenames['clock1']))    s.push("T0");
        if(!isNodeHigh(nodenames['clock2']))    s.push("T1");
        if(!isNodeHigh(nodenames['t2']))        s.push("T2");
        if(!isNodeHigh(nodenames['t3']))        s.push("T3");
        if(!isNodeHigh(nodenames['t4']))        s.push("T4");
        if(!isNodeHigh(nodenames['t5']))        s.push("T5");
        return s.join("+");
}

Within the 6502 schematic we see six named control signals as three of the rows of the PLA, all of which have an overbar to signify inversion: T5, T4, T3, T2 at the top of the PLA, and T1, T0 at the bottom. Looking at these horizontal poly lines in visual6502, we see the expected names as seen in the code blocks above.

So the mapping of T0 to T5 is clear, as signal names. As state names it's another question. For example
T5 seems to be stored in node 18
T4 in 1606
T3 in 644
T2 in 1360
These nodes are not named in visual6502, and I might have made a mistake just now in tracing back.
clock1
clock2
are driven from rather more complicated circuits, I don't want to trace those back at this time.

Note that the SYNC pin is labelled on the schematic as T1. In visual6502, it's driven by node 862. That node in the schematic is labelled T1.


Your assumption is to be correct as I already drew my own timing generation logic schematic. The timing generation logic has seven registers, but you mentioned six registers. T1 is not part of clock1 and clock2 because it does not fire signal into programmable array logic. The node 646 is T0 and node 1533 is T1X. An inverted T0 as clock1 is node 17 and node 1536. An inverted T1X as clock2 is node 156.

According to my conclusion, node 1533 is supposed to be T0 as storage, but I decide to name T0 + T1X on node 1533.

The timing generation logic is divided into four blocks: T0 to T1X, T2 to T5, T6, and T1. T6's storage is on node 698 and T1's storage is on node 666. Both T1 and T6 are not part of programmable array logic. T6 is used for hardware / software interrupt handler. T1 is to delay one or two clock cycles while branch is in the process before next instruction begins.

Take care,
Bryan


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC


Who is online

Users browsing this forum: BigEd and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: