mirror of
https://github.com/trebonian/visual6502.git
synced 2024-12-21 21:29:16 +00:00
c2348c5f63
The comments with them indicate that the semantics of the node (high when branch not taken) was already recognized. pipeBRtaken in the expert version is left untouched, as it is opposite-valued from #BRtaken, although its meaning is multiplexed by additional influences (nodenames.js has it named pipeIPCrelated).
947 lines
30 KiB
JavaScript
947 lines
30 KiB
JavaScript
/*
|
|
Copyright (c) 2010 Brian Silverman, Barry Silverman, Ed Spittles, Segher Boessenkool
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
*/
|
|
|
|
var nodenames ={
|
|
res: 159, // pads: reset
|
|
rw: 1156, // pads: read not write
|
|
db0: 1005, // pads: databus
|
|
db1: 82,
|
|
db3: 650,
|
|
db2: 945,
|
|
db5: 175,
|
|
db4: 1393,
|
|
db7: 1349,
|
|
db6: 1591,
|
|
ab0: 268, // pads: address bus
|
|
ab1: 451,
|
|
ab2: 1340,
|
|
ab3: 211,
|
|
ab4: 435,
|
|
ab5: 736,
|
|
ab6: 887,
|
|
ab7: 1493,
|
|
ab8: 230,
|
|
ab9: 148,
|
|
ab12: 1237,
|
|
ab13: 349,
|
|
ab10: 1443,
|
|
ab11: 399,
|
|
ab14: 672,
|
|
ab15: 195,
|
|
sync: 539, // pads
|
|
so: 1672, // pads: set overflow
|
|
clk0: 1171, // pads
|
|
clk1out: 1163, // pads
|
|
clk2out: 421, // pads
|
|
rdy: 89, // pads: ready
|
|
nmi: 1297, // pads: non maskable interrupt
|
|
irq: 103, // pads
|
|
vcc: 657, // pads
|
|
vss: 558, // pads
|
|
|
|
a0: 737, // machine state: accumulator
|
|
a1: 1234,
|
|
a2: 978,
|
|
a3: 162,
|
|
a4: 727,
|
|
a5: 858,
|
|
a6: 1136,
|
|
a7: 1653,
|
|
y0: 64, // machine state: y index register
|
|
y1: 1148,
|
|
y2: 573,
|
|
y3: 305,
|
|
y4: 989,
|
|
y5: 615,
|
|
y6: 115,
|
|
y7: 843,
|
|
x0: 1216, // machine state: x index register
|
|
x1: 98,
|
|
x2: 1,
|
|
x3: 1648,
|
|
x4: 85,
|
|
x5: 589,
|
|
x6: 448,
|
|
x7: 777,
|
|
pcl0: 1139, // machine state: program counter low (first storage node output)
|
|
pcl1: 1022,
|
|
pcl2: 655,
|
|
pcl3: 1359,
|
|
pcl4: 900,
|
|
pcl5: 622,
|
|
pcl6: 377,
|
|
pcl7: 1611,
|
|
pclp0: 488, // machine state: program counter low (pre-incremented?, second storage node)
|
|
pclp1: 976,
|
|
pclp2: 481,
|
|
pclp3: 723,
|
|
pclp4: 208,
|
|
pclp5: 72,
|
|
pclp6: 1458,
|
|
pclp7: 1647,
|
|
"#pclp0": 1227, // machine state: program counter low (pre-incremented?, inverse second storage node)
|
|
"~pclp0": 1227, // automatic alias replacing hash with tilde
|
|
"#pclp1": 1102,
|
|
"~pclp1": 1102, // automatic alias replacing hash with tilde
|
|
"#pclp2": 1079,
|
|
"~pclp2": 1079, // automatic alias replacing hash with tilde
|
|
"#pclp3": 868,
|
|
"~pclp3": 868, // automatic alias replacing hash with tilde
|
|
"#pclp4": 39,
|
|
"~pclp4": 39, // automatic alias replacing hash with tilde
|
|
"#pclp5": 1326,
|
|
"~pclp5": 1326, // automatic alias replacing hash with tilde
|
|
"#pclp6": 731,
|
|
"~pclp6": 731, // automatic alias replacing hash with tilde
|
|
"#pclp7": 536,
|
|
"~pclp7": 536, // automatic alias replacing hash with tilde
|
|
pch0: 1670, // machine state: program counter high (first storage node)
|
|
pch1: 292,
|
|
pch2: 502,
|
|
pch3: 584,
|
|
pch4: 948,
|
|
pch5: 49,
|
|
pch6: 1551,
|
|
pch7: 205,
|
|
pchp0: 1722, // machine state: program counter high (pre-incremented?, second storage node output)
|
|
pchp1: 209,
|
|
pchp2: 1496,
|
|
pchp3: 141,
|
|
pchp4: 27,
|
|
pchp5: 1301,
|
|
pchp6: 652,
|
|
pchp7: 1206,
|
|
"#pchp0": 780, // machine state: program counter high (pre-incremented?, inverse second storage node)
|
|
"~pchp0": 780, // automatic alias replacing hash with tilde
|
|
"#pchp1": 113,
|
|
"~pchp1": 113, // automatic alias replacing hash with tilde
|
|
"#pchp2": 114,
|
|
"~pchp2": 114, // automatic alias replacing hash with tilde
|
|
"#pchp3": 124,
|
|
"~pchp3": 124, // automatic alias replacing hash with tilde
|
|
"#pchp4": 820,
|
|
"~pchp4": 820, // automatic alias replacing hash with tilde
|
|
"#pchp5": 33,
|
|
"~pchp5": 33, // automatic alias replacing hash with tilde
|
|
"#pchp6": 751,
|
|
"~pchp6": 751, // automatic alias replacing hash with tilde
|
|
"#pchp7": 535,
|
|
"~pchp7": 535, // automatic alias replacing hash with tilde
|
|
// machine state: status register (not the storage nodes)
|
|
p0: 32, // C bit of status register (storage node)
|
|
p1: 627, // Z bit of status register (storage node)
|
|
p2: 1553, // I bit of status register (storage node)
|
|
p3: 348, // D bit of status register (storage node)
|
|
p4: 1119, // there is no bit4 in the status register! (not a storage node)
|
|
p5: -1, // there is no bit5 in the status register! (not a storage node)
|
|
p6: 1625, // V bit of status register (storage node)
|
|
p7: 69, // N bit of status register (storage node)
|
|
|
|
// internal bus: status register outputs for push P
|
|
Pout0: 687,
|
|
Pout1: 1444,
|
|
Pout2: 1421,
|
|
Pout3: 439,
|
|
Pout4: 1119, // there is no bit4 in the status register!
|
|
Pout5: -1, // there is no bit5 in the status register!
|
|
Pout6: 77,
|
|
Pout7: 1370,
|
|
|
|
s0: 1403, // machine state: stack pointer
|
|
s1: 183,
|
|
s2: 81,
|
|
s3: 1532,
|
|
s4: 1702,
|
|
s5: 1098,
|
|
s6: 1212,
|
|
s7: 1435,
|
|
ir0: 328, // internal state: instruction register
|
|
ir1: 1626,
|
|
ir2: 1384,
|
|
ir3: 1576,
|
|
ir4: 1112,
|
|
ir5: 1329, // ir5 distinguishes branch set from branch clear
|
|
ir6: 337,
|
|
ir7: 1328,
|
|
notir0: 194, // internal signal: instruction register inverted outputs
|
|
notir1: 702,
|
|
notir2: 1182,
|
|
notir3: 1125,
|
|
notir4: 26,
|
|
notir5: 1394,
|
|
notir6: 895,
|
|
notir7: 1320,
|
|
irline3: 996, // internal signal: PLA input - ir0 OR ir1
|
|
clock1: 1536, // internal state: timing control aka #T0
|
|
clock1: 1536, // automatic alias replacing hash with tilde
|
|
clock2: 156, // internal state: timing control aka #T+
|
|
clock2: 156, // automatic alias replacing hash with tilde
|
|
t2: 971, // internal state: timing control
|
|
t3: 1567,
|
|
t4: 690,
|
|
t5: 909,
|
|
noty0: 1025, // datapath state: not Y register
|
|
noty1: 1138,
|
|
noty2: 1484,
|
|
noty3: 184,
|
|
noty4: 565,
|
|
noty5: 981,
|
|
noty6: 1439,
|
|
noty7: 1640,
|
|
notx0: 987, // datapath state: not X register
|
|
notx1: 1434,
|
|
notx2: 890,
|
|
notx3: 1521,
|
|
notx4: 485,
|
|
notx5: 1017,
|
|
notx6: 730,
|
|
notx7: 1561,
|
|
nots0: 418, // datapath state: not stack pointer
|
|
nots1: 1064,
|
|
nots2: 752,
|
|
nots3: 828,
|
|
nots4: 1603,
|
|
nots5: 601,
|
|
nots6: 1029,
|
|
nots7: 181,
|
|
notidl0: 116, // datapath state: internal data latch (first storage node)
|
|
notidl1: 576,
|
|
notidl2: 1485,
|
|
notidl3: 1284,
|
|
notidl4: 1516,
|
|
notidl5: 498,
|
|
notidl6: 1537,
|
|
notidl7: 529,
|
|
idl0: 1597, // datapath signal: internal data latch (driven output)
|
|
idl1: 870,
|
|
idl2: 1066,
|
|
idl3: 464,
|
|
idl4: 1306,
|
|
idl5: 240,
|
|
idl6: 1116,
|
|
idl7: 391,
|
|
sb0: 54, // datapath bus: special bus
|
|
sb1: 1150,
|
|
sb2: 1287,
|
|
sb3: 1188,
|
|
sb4: 1405,
|
|
sb5: 166,
|
|
sb6: 1336,
|
|
sb7: 1001,
|
|
notalu0: 394, // datapath state: alu output storage node (inverse) aka #ADD0
|
|
notalu0: 394, // automatic alias replacing hash with tilde
|
|
notalu1: 697,
|
|
notalu2: 276,
|
|
notalu3: 495,
|
|
notalu4: 1490,
|
|
notalu5: 893,
|
|
notalu6: 68,
|
|
notalu7: 1123,
|
|
alu0: 401, // datapath signal: ALU output aka ADD0out
|
|
alu1: 872,
|
|
alu2: 1637,
|
|
alu3: 1414,
|
|
alu4: 606,
|
|
alu5: 314,
|
|
alu6: 331,
|
|
alu7: 765,
|
|
// datapath signal: decimally adjusted special bus
|
|
dasb0: 54, // same node as sb0
|
|
dasb1: 1009,
|
|
dasb2: 450,
|
|
dasb3: 1475,
|
|
dasb4: 1405, // same node as sb4
|
|
dasb5: 263,
|
|
dasb6: 679,
|
|
dasb7: 1494,
|
|
adl0: 413, // internal bus: address low
|
|
adl1: 1282,
|
|
adl2: 1242,
|
|
adl3: 684,
|
|
adl4: 1437,
|
|
adl5: 1630,
|
|
adl6: 121,
|
|
adl7: 1299,
|
|
adh0: 407, // internal bus: address high
|
|
adh1: 52,
|
|
adh2: 1651,
|
|
adh3: 315,
|
|
adh4: 1160,
|
|
adh5: 483,
|
|
adh6: 13,
|
|
adh7: 1539,
|
|
idb0: 1108, // internal bus: data bus
|
|
idb1: 991,
|
|
idb2: 1473,
|
|
idb3: 1302,
|
|
idb4: 892,
|
|
idb5: 1503,
|
|
idb6: 833,
|
|
idb7: 493,
|
|
notdor0: 222, // internal state: data output register (storage node)
|
|
notdor1: 527,
|
|
notdor2: 1288,
|
|
notdor3: 823,
|
|
notdor4: 873,
|
|
notdor5: 1266,
|
|
notdor6: 1418,
|
|
notdor7: 158,
|
|
dor0: 97, // internal signal: data output register
|
|
dor1: 746,
|
|
dor2: 1634,
|
|
dor3: 444,
|
|
dor4: 1088,
|
|
dor5: 1453,
|
|
dor6: 1415,
|
|
dor7: 63,
|
|
"pd0.clearIR": 1622, // internal state: predecode register output (anded with not ClearIR)
|
|
"pd1.clearIR": 809,
|
|
"pd2.clearIR": 1671,
|
|
"pd3.clearIR": 1587,
|
|
"pd4.clearIR": 540,
|
|
"pd5.clearIR": 667,
|
|
"pd6.clearIR": 1460,
|
|
"pd7.clearIR": 1410,
|
|
pd0: 758, // internal state: predecode register (storage node)
|
|
pd1: 361,
|
|
pd2: 955,
|
|
pd3: 894,
|
|
pd4: 369,
|
|
pd5: 829,
|
|
pd6: 1669,
|
|
pd7: 1690,
|
|
// internal signals: predecode latch partial decodes
|
|
"PD-xxxx10x0": 1019,
|
|
"PD-1xx000x0": 1294,
|
|
"PD-0xx0xx0x": 365,
|
|
"PD-xxx010x1": 302,
|
|
"PD-n-0xx0xx0x": 125,
|
|
"#TWOCYCLE": 851,
|
|
"~TWOCYCLE": 851, // automatic alias replacing hash with tilde
|
|
"#TWOCYCLE.phi1": 792,
|
|
"~TWOCYCLE.phi1": 792, // automatic alias replacing hash with tilde
|
|
"ONEBYTE": 778,
|
|
|
|
abl0: 1096, // internal bus: address bus low latched data out (inverse of inverted storage node)
|
|
abl1: 376,
|
|
abl2: 1502,
|
|
abl3: 1250,
|
|
abl4: 1232,
|
|
abl5: 234,
|
|
abl6: 178,
|
|
abl7: 567,
|
|
"#ABL0": 153, // internal state: address bus low latched data out (storage node, inverted)
|
|
"~ABL0": 153, // automatic alias replacing hash with tilde
|
|
"#ABL1": 107,
|
|
"~ABL1": 107, // automatic alias replacing hash with tilde
|
|
"#ABL2": 707,
|
|
"~ABL2": 707, // automatic alias replacing hash with tilde
|
|
"#ABL3": 825,
|
|
"~ABL3": 825, // automatic alias replacing hash with tilde
|
|
"#ABL4": 364,
|
|
"~ABL4": 364, // automatic alias replacing hash with tilde
|
|
"#ABL5": 1513,
|
|
"~ABL5": 1513, // automatic alias replacing hash with tilde
|
|
"#ABL6": 1307,
|
|
"~ABL6": 1307, // automatic alias replacing hash with tilde
|
|
"#ABL7": 28,
|
|
"~ABL7": 28, // automatic alias replacing hash with tilde
|
|
abh0: 1429, // internal bus: address bus high latched data out (inverse of inverted storage node)
|
|
abh1: 713,
|
|
abh2: 287,
|
|
abh3: 422,
|
|
abh4: 1143,
|
|
abh5: 775,
|
|
abh6: 997,
|
|
abh7: 489,
|
|
"#ABH0": 1062, // internal state: address bus high latched data out (storage node, inverted)
|
|
"~ABH0": 1062, // automatic alias replacing hash with tilde
|
|
"#ABH1": 907,
|
|
"~ABH1": 907, // automatic alias replacing hash with tilde
|
|
"#ABH2": 768,
|
|
"~ABH2": 768, // automatic alias replacing hash with tilde
|
|
"#ABH3": 92,
|
|
"~ABH3": 92, // automatic alias replacing hash with tilde
|
|
"#ABH4": 668,
|
|
"~ABH4": 668, // automatic alias replacing hash with tilde
|
|
"#ABH5": 1128,
|
|
"~ABH5": 1128, // automatic alias replacing hash with tilde
|
|
"#ABH6": 289,
|
|
"~ABH6": 289, // automatic alias replacing hash with tilde
|
|
"#ABH7": 429,
|
|
"~ABH7": 429, // automatic alias replacing hash with tilde
|
|
|
|
"branch-back": 626, // distinguish forward from backward branches
|
|
"branch-forward.phi1": 1110, // distinguish forward from backward branches
|
|
"branch-back.phi1": 771, // distinguish forward from backward branches in IPC logic
|
|
notRdy0: 248, // internal signal: global pipeline control
|
|
"notRdy0.phi1": 1272, // delayed pipeline control
|
|
"notRdy0.delay": 770, // global pipeline control latched by phi1 and then phi2
|
|
"#notRdy0.delay": 559, // global pipeline control latched by phi1 and then phi2 (storage node)
|
|
"~notRdy0.delay": 559, // automatic alias replacing hash with tilde
|
|
Reset0: 67, // internal signal: retimed reset from pin
|
|
C1x5Reset: 926, // retimed and pipelined reset in progress
|
|
notRnWprepad: 187, // internal signal: to pad, yet to be inverted and retimed
|
|
RnWstretched: 353, // internal signal: control datapad output drivers, aka TRISTATE
|
|
"#DBE": 1035, // internal signal: formerly from DBE pad (6501)
|
|
"~DBE": 1035, // automatic alias replacing hash with tilde
|
|
cp1: 710, // internal signal: clock phase 1
|
|
cclk: 943, // unbonded pad: internal non-overlapping phi2
|
|
fetch: 879, // internal signal
|
|
clearIR: 1077, // internal signal
|
|
H1x1: 1042, // internal signal: drive status byte onto databus
|
|
|
|
// internal signal: pla outputs block 1 (west/left edge of die)
|
|
// often 130 pla outputs are mentioned - we have 131 here
|
|
"op-sty/cpy-mem": 1601, // pla0
|
|
"op-T3-ind-y": 60, // pla1
|
|
"op-T2-abs-y": 1512, // pla2
|
|
"op-T0-iny/dey": 382, // pla3
|
|
"x-op-T0-tya": 1173, // pla4
|
|
"op-T0-cpy/iny": 1233, // pla5
|
|
|
|
// internal signal: pla outputs block 2
|
|
"op-T2-idx-x-xy": 258, // pla6
|
|
"op-xy": 1562, // pla7
|
|
"op-T2-ind-x": 84, // pla8
|
|
"x-op-T0-txa": 1543, // pla9
|
|
"op-T0-dex": 76, // pla10
|
|
"op-T0-cpx/inx": 1658, // pla11
|
|
"op-from-x": 1540, // pla12
|
|
"op-T0-txs": 245, // pla13
|
|
"op-T0-ldx/tax/tsx": 985, // pla14
|
|
"op-T+-dex": 786, // pla15
|
|
"op-T+-inx": 1664, // pla16
|
|
"op-T0-tsx": 682, // pla17
|
|
"op-T+-iny/dey": 1482, // pla18
|
|
"op-T0-ldy-mem": 665, // pla19
|
|
"op-T0-tay/ldy-not-idx": 286, // pla20
|
|
|
|
// internal signal: pla outputs block 3
|
|
// not pla, feed through
|
|
"op-T0-jsr": 271, // pla21
|
|
"op-T5-brk": 370, // pla22
|
|
"op-T0-php/pha": 552, // pla23
|
|
"op-T4-rts": 1612, // pla24
|
|
"op-T3-plp/pla": 1487, // pla25
|
|
"op-T5-rti": 784, // pla26
|
|
"op-ror": 244, // pla27
|
|
"op-T2": 788, // pla28
|
|
"op-T0-eor": 1623, // pla29
|
|
"op-jmp": 764, // pla30
|
|
"op-T2-abs": 1057, // pla31
|
|
"op-T0-ora": 403, // pla32
|
|
"op-T2-ADL/ADD":204, // pla33
|
|
"op-T0":1273, // pla34
|
|
"op-T2-stack":1582, // pla35
|
|
"op-T3-stack/bit/jmp":1031, // pla36
|
|
|
|
// internal signal: pla outputs block 4
|
|
"op-T4-brk/jsr":804, // pla37
|
|
"op-T4-rti":1311, // pla38
|
|
"op-T3-ind-x":1428, // pla39
|
|
"op-T4-ind-y":492, // pla40
|
|
"op-T2-ind-y":1204, // pla41
|
|
"op-T3-abs-idx":58, // pla42
|
|
"op-plp/pla":1520, // pla43
|
|
"op-inc/nop":324, // pla44
|
|
"op-T4-ind-x":1259, // pla45
|
|
"x-op-T3-ind-y":342, // pla46
|
|
"op-rti/rts":857, // pla47
|
|
"op-T2-jsr":712, // pla48
|
|
"op-T0-cpx/cpy/inx/iny":1337, // pla49
|
|
"op-T0-cmp":1355, // pla50
|
|
"op-T0-sbc":787, // pla51 // 52:111XXXXX 1 0 T0SBC
|
|
"op-T0-adc/sbc":575, // pla52 // 51:X11XXXXX 1 0 T0ADCSBC
|
|
"op-rol/ror":1466, // pla53
|
|
|
|
// internal signal: pla outputs block 5
|
|
"op-T3-jmp":1381, // pla54
|
|
"op-shift":546, // pla55
|
|
"op-T5-jsr":776, // pla56
|
|
"op-T2-stack-access":157, // pla57
|
|
"op-T0-tya":257, // pla58
|
|
"op-T+-ora/and/eor/adc":1243, // pla59
|
|
"op-T+-adc/sbc":822, // pla60
|
|
"op-T+-shift-a":1324, // pla61
|
|
"op-T0-txa":179, // pla62
|
|
"op-T0-pla":131, // pla63
|
|
"op-T0-lda":1420, // pla64
|
|
"op-T0-acc":1342, // pla65
|
|
"op-T0-tay":4, // pla66
|
|
"op-T0-shift-a":1396, // pla67
|
|
"op-T0-tax":167, // pla68
|
|
"op-T0-bit":303, // pla69
|
|
"op-T0-and":1504, // pla70
|
|
"op-T4-abs-idx":354, // pla71
|
|
"op-T5-ind-y":1168, // pla72
|
|
|
|
// internal signal: pla outputs block 6
|
|
"op-branch-done":1721, // pla73 // has extra non-pla input
|
|
"op-T2-pha":1086, // pla74
|
|
"op-T0-shift-right-a":1074, // pla75
|
|
"op-shift-right":1246, // pla76
|
|
"op-T2-brk":487, // pla77
|
|
"op-T3-jsr":579, // pla78
|
|
"op-sta/cmp":145, // pla79
|
|
"op-T2-branch":1239, // pla80 // T2BR, 83 for Balazs
|
|
"op-T2-zp/zp-idx":285, // pla81
|
|
// not pla, feed through
|
|
// not pla, feed through
|
|
"op-T2-ind":1524, // pla82
|
|
"op-T2-abs-access":273, // pla83 // has extra pulldown: pla97
|
|
"op-T5-rts":0, // pla84
|
|
"op-T4":341, // pla85
|
|
"op-T3":120, // pla86
|
|
"op-T0-brk/rti":1478, // pla87
|
|
"op-T0-jmp":594, // pla88
|
|
"op-T5-ind-x":1210, // pla89
|
|
"op-T3-abs/idx/ind":677, // pla90 // has extra pulldown: pla97
|
|
|
|
// internal signal: pla outputs block 7
|
|
"x-op-T4-ind-y":461, // pla91
|
|
"x-op-T3-abs-idx":447, // pla92
|
|
"op-T3-branch":660, // pla93
|
|
"op-brk/rti":1557, // pla94
|
|
"op-jsr":259, // pla95
|
|
"x-op-jmp":1052, // pla96
|
|
// gap
|
|
"op-push/pull":791, // pla97 // feeds into pla83 and pla90 (no normal pla output)
|
|
"op-store":517, // pla98
|
|
"op-T4-brk":352, // pla99
|
|
"op-T2-php":750, // pla100
|
|
"op-T2-php/pha":932, // pla101
|
|
"op-T4-jmp":1589, // pla102
|
|
// gap
|
|
"op-T5-rti/rts":446, // pla103
|
|
"xx-op-T5-jsr":528, // pla104
|
|
|
|
// internal signal: pla outputs block 8
|
|
"op-T2-jmp-abs":309, // pla105
|
|
"x-op-T3-plp/pla":1430, // pla106
|
|
"op-lsr/ror/dec/inc":53, // pla107
|
|
"op-asl/rol":691, // pla108
|
|
"op-T0-cli/sei":1292, // pla109
|
|
// gap
|
|
"op-T+-bit":1646, // pla110
|
|
"op-T0-clc/sec":1114, // pla111
|
|
"op-T3-mem-zp-idx":904, // pla112
|
|
"x-op-T+-adc/sbc":1155, // pla113
|
|
"x-op-T0-bit":1476, // pla114
|
|
"op-T0-plp":1226, // pla115
|
|
"x-op-T4-rti":1569, // pla116
|
|
"op-T+-cmp":301, // pla117
|
|
"op-T+-cpx/cpy-abs":950, // pla118
|
|
"op-T+-asl/rol-a":1665, // pla119
|
|
|
|
// internal signal: pla outputs block 9
|
|
"op-T+-cpx/cpy-imm/zp":1710, // pla120
|
|
"x-op-push/pull":1050, // pla121 // feeds into pla130 (no normal pla output)
|
|
"op-T0-cld/sed":1419, // pla122
|
|
"#op-branch-bit6":840, // pla123 // IR bit6 used only to detect branch type
|
|
"~op-branch-bit6":840, // automatic alias replacing hash with tilde
|
|
"op-T3-mem-abs":607, // pla124
|
|
"op-T2-mem-zp":219, // pla125
|
|
"op-T5-mem-ind-idx":1385, // pla126
|
|
"op-T4-mem-abs-idx":281, // pla127
|
|
"#op-branch-bit7":1174, // pla128 // IR bit7 used only to detect branch type
|
|
"~op-branch-bit7":1174, // automatic alias replacing hash with tilde
|
|
"op-clv":1164, // pla129
|
|
"op-implied":1006, // pla130 // has extra pulldowns: pla121 and ir0
|
|
|
|
// internal signals: derived from pla outputs
|
|
"#op-branch-done": 1048,
|
|
"~op-branch-done": 1048, // automatic alias replacing hash with tilde
|
|
"#op-T3-branch": 1708,
|
|
"~op-T3-branch": 1708, // automatic alias replacing hash with tilde
|
|
"op-ANDS": 1228,
|
|
"op-EORS": 1689,
|
|
"op-ORS": 522,
|
|
"op-SUMS": 1196,
|
|
"op-SRS": 934,
|
|
"#op-store": 925,
|
|
"~op-store": 925, // automatic alias replacing hash with tilde
|
|
"#WR": 1352,
|
|
"~WR": 1352, // automatic alias replacing hash with tilde
|
|
"op-rmw": 434,
|
|
"short-circuit-idx-add": 1185,
|
|
"short-circuit-branch-add": 430,
|
|
"#op-set-C": 252,
|
|
"~op-set-C": 252, // automatic alias replacing hash with tilde
|
|
|
|
// internal signals: control signals
|
|
nnT2BR: 967, // doubly inverted
|
|
"#BRtaken": 1544, // aka #TAKEN
|
|
"~BRtaken": 1544, // automatic alias replacing hash with tilde
|
|
|
|
// internal signals and state: interrupt and vector related
|
|
// segher says:
|
|
// "P" are the latched external signals.
|
|
// "G" are the signals that actually trigger the interrupt.
|
|
// "NMIL" is to do the edge detection -- it's pretty much just a delayed NMIG.
|
|
// INTG is IRQ and NMI taken together.
|
|
IRQP: 675,
|
|
"#IRQP": 888,
|
|
"~IRQP": 888, // automatic alias replacing hash with tilde
|
|
NMIP: 1032,
|
|
"#NMIP": 297,
|
|
"~NMIP": 297, // automatic alias replacing hash with tilde
|
|
"#NMIG": 264,
|
|
"~NMIG": 264, // automatic alias replacing hash with tilde
|
|
NMIL: 1374,
|
|
RESP: 67,
|
|
RESG: 926,
|
|
VEC0: 1465,
|
|
VEC1: 1481,
|
|
"#VEC": 1134,
|
|
"~VEC": 1134, // automatic alias replacing hash with tilde
|
|
D1x1: 827, // internal signal: interrupt handler related
|
|
"brk-done": 1382, // internal signal: interrupt handler related
|
|
INTG: 1350, // internal signal: interrupt handler related
|
|
|
|
// internal state: misc pipeline state clocked by cclk (phi2)
|
|
"pipe#VEC": 1431, // latched #VEC
|
|
"pipe~VEC": 1431, // automatic alias replacing hash with tilde
|
|
"pipeT-SYNC": 537,
|
|
pipeT2out: 40,
|
|
pipeT3out: 706,
|
|
pipeT4out: 1373,
|
|
pipeT5out: 940,
|
|
pipeIPCrelated: 832,
|
|
pipeUNK01: 1530,
|
|
pipeUNK02: 974,
|
|
pipeUNK03: 1436,
|
|
pipeUNK04: 99,
|
|
pipeUNK05: 44,
|
|
pipeUNK06: 443,
|
|
pipeUNK07: 215,
|
|
pipeUNK08: 338,
|
|
pipeUNK09: 199,
|
|
pipeUNK10: 215,
|
|
pipeUNK11: 1011,
|
|
pipeUNK12: 1283,
|
|
pipeUNK13: 1442,
|
|
pipeUNK14: 1607,
|
|
pipeUNK15: 1577, // inverse of H1x1, write P onto idb (PHP, interrupt)
|
|
pipeUNK16: 1051,
|
|
pipeUNK17: 1078,
|
|
pipeUNK18: 899,
|
|
pipeUNK19: 832,
|
|
pipeUNK20: 294,
|
|
pipeUNK21: 1176,
|
|
pipeUNK22: 561, // becomes dpc22
|
|
pipeUNK23: 596,
|
|
pipephi2Reset0: 449,
|
|
pipephi2Reset0x: 1036, // a second copy of the same latch
|
|
pipeUNK26: 1321,
|
|
pipeUNK27: 73,
|
|
pipeUNK28: 685,
|
|
pipeUNK29: 1008,
|
|
pipeUNK30: 1652,
|
|
pipeUNK31: 614,
|
|
pipeUNK32: 960,
|
|
pipeUNK33: 848,
|
|
pipeUNK34: 56,
|
|
pipeUNK35: 1713,
|
|
pipeUNK36: 729,
|
|
pipeUNK37: 197,
|
|
"pipe#WR.phi2": 1131,
|
|
"pipe~WR.phi2": 1131, // automatic alias replacing hash with tilde
|
|
pipeUNK39: 151,
|
|
pipeUNK40: 456,
|
|
pipeUNK41: 1438,
|
|
pipeUNK42: 1104,
|
|
"pipe#T0": 554, // aka #T0.phi2
|
|
"pipe~T0": 554, // automatic alias replacing hash with tilde
|
|
|
|
// internal state: vector address pulldown control
|
|
pipeVectorA0: 357,
|
|
pipeVectorA1: 170,
|
|
pipeVectorA2: 45,
|
|
|
|
// internal signals: vector address pulldown control
|
|
"0/ADL0": 217,
|
|
"0/ADL1": 686,
|
|
"0/ADL2": 1193,
|
|
|
|
// internal state: datapath control drivers
|
|
pipedpc28: 683,
|
|
|
|
// internal signals: alu internal (private) busses
|
|
alua0: 1167,
|
|
alua1: 1248,
|
|
alua2: 1332,
|
|
alua3: 1680,
|
|
alua4: 1142,
|
|
alua5: 530,
|
|
alua6: 1627,
|
|
alua7: 1522,
|
|
alub0: 977,
|
|
alub1: 1432,
|
|
alub2: 704,
|
|
alub3: 96,
|
|
alub4: 1645,
|
|
alub5: 1678,
|
|
alub6: 235,
|
|
alub7: 1535,
|
|
|
|
// alu carry chain and decimal mode
|
|
C01: 1285,
|
|
C12: 505,
|
|
C23: 1023,
|
|
C34: 78,
|
|
C45: 142,
|
|
C56: 500,
|
|
C67: 1314,
|
|
C78: 808,
|
|
"C78.phi2": 560,
|
|
DC34: 1372, // lower nibble decimal carry
|
|
DC78: 333, // carry for decimal mode
|
|
"DC78.phi2": 164,
|
|
"#C01": 1506,
|
|
"~C01": 1506, // automatic alias replacing hash with tilde
|
|
"#C12": 1122,
|
|
"~C12": 1122, // automatic alias replacing hash with tilde
|
|
"#C23": 1003,
|
|
"~C23": 1003, // automatic alias replacing hash with tilde
|
|
"#C34": 1425,
|
|
"~C34": 1425, // automatic alias replacing hash with tilde
|
|
"#C45": 1571,
|
|
"~C45": 1571, // automatic alias replacing hash with tilde
|
|
"#C56": 427,
|
|
"~C56": 427, // automatic alias replacing hash with tilde
|
|
"#C67": 592,
|
|
"~C67": 592, // automatic alias replacing hash with tilde
|
|
"#C78": 1327,
|
|
"~C78": 1327, // automatic alias replacing hash with tilde
|
|
"DA-C01": 623,
|
|
"DA-AB2": 216,
|
|
"DA-AxB2": 516,
|
|
"DA-C45": 1144,
|
|
"#DA-ADD1": 901,
|
|
"~DA-ADD1": 901, // automatic alias replacing hash with tilde
|
|
"#DA-ADD2": 699,
|
|
"~DA-ADD2": 699, // automatic alias replacing hash with tilde
|
|
|
|
// misc alu internals
|
|
"#(AxBxC)0": 371,
|
|
"~(AxBxC)0": 371, // automatic alias replacing hash with tilde
|
|
"#(AxBxC)1": 965,
|
|
"~(AxBxC)1": 965, // automatic alias replacing hash with tilde
|
|
"#(AxBxC)2": 22,
|
|
"~(AxBxC)2": 22, // automatic alias replacing hash with tilde
|
|
"#(AxBxC)3": 274,
|
|
"~(AxBxC)3": 274, // automatic alias replacing hash with tilde
|
|
"#(AxBxC)4": 651,
|
|
"~(AxBxC)4": 651, // automatic alias replacing hash with tilde
|
|
"#(AxBxC)5": 486,
|
|
"~(AxBxC)5": 486, // automatic alias replacing hash with tilde
|
|
"#(AxBxC)6": 1197,
|
|
"~(AxBxC)6": 1197, // automatic alias replacing hash with tilde
|
|
"#(AxBxC)7": 532,
|
|
"~(AxBxC)7": 532, // automatic alias replacing hash with tilde
|
|
AxB1: 425,
|
|
AxB3: 640,
|
|
AxB5: 1220,
|
|
AxB7: 1241,
|
|
"#(AxB)0": 1525,
|
|
"~(AxB)0": 1525, // automatic alias replacing hash with tilde
|
|
"#(AxB)2": 701,
|
|
"~(AxB)2": 701, // automatic alias replacing hash with tilde
|
|
"#(AxB)4": 308,
|
|
"~(AxB)4": 308, // automatic alias replacing hash with tilde
|
|
"#(AxB)6": 1459,
|
|
"~(AxB)6": 1459, // automatic alias replacing hash with tilde
|
|
"(AxB)0.#C0in": 555,
|
|
"(AxB)0.~C0in": 555, // automatic alias replacing hash with tilde
|
|
"(AxB)2.#C12": 193,
|
|
"(AxB)2.~C12": 193, // automatic alias replacing hash with tilde
|
|
"(AxB)4.#C34": 65,
|
|
"(AxB)4.~C34": 65, // automatic alias replacing hash with tilde
|
|
"(AxB)6.#C56": 174,
|
|
"(AxB)6.~C56": 174, // automatic alias replacing hash with tilde
|
|
"#(AxB1).C01": 295,
|
|
"~(AxB1).C01": 295, // automatic alias replacing hash with tilde
|
|
"#(AxB3).C23": 860,
|
|
"~(AxB3).C23": 860, // automatic alias replacing hash with tilde
|
|
"#(AxB5).C45": 817,
|
|
"~(AxB5).C45": 817, // automatic alias replacing hash with tilde
|
|
"#(AxB7).C67": 1217,
|
|
"~(AxB7).C67": 1217, // automatic alias replacing hash with tilde
|
|
"#A.B0": 1628,
|
|
"~A.B0": 1628, // automatic alias replacing hash with tilde
|
|
"#A.B1": 841,
|
|
"~A.B1": 841, // automatic alias replacing hash with tilde
|
|
"#A.B2": 681,
|
|
"~A.B2": 681, // automatic alias replacing hash with tilde
|
|
"#A.B3": 350,
|
|
"~A.B3": 350, // automatic alias replacing hash with tilde
|
|
"#A.B4": 1063,
|
|
"~A.B4": 1063, // automatic alias replacing hash with tilde
|
|
"#A.B5": 477,
|
|
"~A.B5": 477, // automatic alias replacing hash with tilde
|
|
"#A.B6": 336,
|
|
"~A.B6": 336, // automatic alias replacing hash with tilde
|
|
"#A.B7": 1318,
|
|
"~A.B7": 1318, // automatic alias replacing hash with tilde
|
|
"A+B0": 693,
|
|
"A+B1": 1021,
|
|
"A+B2": 110,
|
|
"A+B3": 1313,
|
|
"A+B4": 918,
|
|
"A+B5": 1236,
|
|
"A+B6": 803,
|
|
"A+B7": 117,
|
|
"#(A+B)0": 143,
|
|
"~(A+B)0": 143, // automatic alias replacing hash with tilde
|
|
"#(A+B)1": 155,
|
|
"~(A+B)1": 155, // automatic alias replacing hash with tilde
|
|
"#(A+B)2": 1691,
|
|
"~(A+B)2": 1691, // automatic alias replacing hash with tilde
|
|
"#(A+B)3": 649,
|
|
"~(A+B)3": 649, // automatic alias replacing hash with tilde
|
|
"#(A+B)4": 404,
|
|
"~(A+B)4": 404, // automatic alias replacing hash with tilde
|
|
"#(A+B)5": 1632,
|
|
"~(A+B)5": 1632, // automatic alias replacing hash with tilde
|
|
"#(A+B)6": 1084,
|
|
"~(A+B)6": 1084, // automatic alias replacing hash with tilde
|
|
"#(A+B)7": 1398,
|
|
"~(A+B)7": 1398, // automatic alias replacing hash with tilde
|
|
"#(AxB)0": 1525,
|
|
"~(AxB)0": 1525, // automatic alias replacing hash with tilde
|
|
"#(AxB)2": 701,
|
|
"~(AxB)2": 701, // automatic alias replacing hash with tilde
|
|
"#(AxB)4": 308,
|
|
"~(AxB)4": 308, // automatic alias replacing hash with tilde
|
|
"#(AxB)6": 1459,
|
|
"~(AxB)6": 1459, // automatic alias replacing hash with tilde
|
|
"#(AxB)1": 953,
|
|
"~(AxB)1": 953, // automatic alias replacing hash with tilde
|
|
"#(AxB)3": 884,
|
|
"~(AxB)3": 884, // automatic alias replacing hash with tilde
|
|
"#(AxB)5": 1469,
|
|
"~(AxB)5": 1469, // automatic alias replacing hash with tilde
|
|
"#(AxB)7": 177,
|
|
"~(AxB)7": 177, // automatic alias replacing hash with tilde
|
|
"#aluresult0": 957, // alu result latch input
|
|
"~aluresult0": 957, // automatic alias replacing hash with tilde
|
|
"#aluresult1": 250,
|
|
"~aluresult1": 250, // automatic alias replacing hash with tilde
|
|
"#aluresult2": 740,
|
|
"~aluresult2": 740, // automatic alias replacing hash with tilde
|
|
"#aluresult3": 1071,
|
|
"~aluresult3": 1071, // automatic alias replacing hash with tilde
|
|
"#aluresult4": 296,
|
|
"~aluresult4": 296, // automatic alias replacing hash with tilde
|
|
"#aluresult5": 277,
|
|
"~aluresult5": 277, // automatic alias replacing hash with tilde
|
|
"#aluresult6": 722,
|
|
"~aluresult6": 722, // automatic alias replacing hash with tilde
|
|
"#aluresult7": 304,
|
|
"~aluresult7": 304, // automatic alias replacing hash with tilde
|
|
|
|
// internal signals: datapath control signals
|
|
|
|
"ADL/ABL": 639, // load ABL latches from ADL bus
|
|
"ADH/ABH": 821, // load ABH latches from ADH bus
|
|
|
|
dpc0_YSB: 801, // drive sb from y
|
|
dpc1_SBY: 325, // load y from sb
|
|
dpc2_XSB: 1263, // drive sb from x
|
|
dpc3_SBX: 1186, // load x from sb
|
|
dpc4_SSB: 1700, // drive sb from stack pointer
|
|
dpc5_SADL: 1468, // drive adl from stack pointer
|
|
dpc6_SBS: 874, // load stack pointer from sb
|
|
dpc7_SS: 654, // recirculate stack pointer
|
|
dpc8_nDBADD: 1068, // alu b side: select not-idb input
|
|
dpc9_DBADD: 859, // alu b side: select idb input
|
|
|
|
dpc10_ADLADD: 437, // alu b side: select adl input
|
|
dpc11_SBADD: 549, // alu a side: select sb
|
|
dpc12_0ADD: 984, // alu a side: select zero
|
|
dpc13_ORS: 59, // alu op: a or b
|
|
dpc14_SRS: 362, // alu op: logical right shift
|
|
dpc15_ANDS: 574, // alu op: a and b
|
|
dpc16_EORS: 1666, // alu op: a xor b (?)
|
|
dpc17_SUMS: 921, // alu op: a plus b (?)
|
|
alucin: 910, // alu carry in
|
|
notalucin: 1165,
|
|
"dpc18_#DAA": 1201, // decimal related (inverted)
|
|
"dpc18_~DAA": 1201, // automatic alias replacing hash with tilde
|
|
dpc19_ADDSB7: 214, // alu to sb bit 7 only
|
|
|
|
dpc20_ADDSB06: 129, // alu to sb bits 6-0 only
|
|
dpc21_ADDADL: 1015, // alu to adl
|
|
alurawcout: 808, // alu raw carry out (no decimal adjust)
|
|
notalucout: 412, // alu carry out (inverted)
|
|
alucout: 1146, // alu carry out (latched by phi2)
|
|
"#alucout": 206,
|
|
"~alucout": 206, // automatic alias replacing hash with tilde
|
|
"##alucout": 465,
|
|
"~~alucout": 465, // automatic alias replacing hash with tilde
|
|
notaluvout: 1308, // alu overflow out
|
|
aluvout: 938, // alu overflow out (latched by phi2)
|
|
|
|
"#DBZ": 1268, // internal signal: not (databus is zero)
|
|
"~DBZ": 1268, // automatic alias replacing hash with tilde
|
|
DBZ: 744, // internal signal: databus is zero
|
|
DBNeg: 1200, // internal signal: databus is negative (top bit of db) aka P-#DB7in
|
|
DBNeg: 1200, // automatic alias replacing hash with tilde
|
|
|
|
"dpc22_#DSA": 725, // decimal related/SBC only (inverted)
|
|
"dpc22_~DSA": 725, // automatic alias replacing hash with tilde
|
|
dpc23_SBAC: 534, // (optionalls decimal-adjusted) sb to acc
|
|
dpc24_ACSB: 1698, // acc to sb
|
|
dpc25_SBDB: 1060, // sb pass-connects to idb (bi-directionally)
|
|
dpc26_ACDB: 1331, // acc to idb
|
|
dpc27_SBADH: 140, // sb pass-connects to adh (bi-directionally)
|
|
dpc28_0ADH0: 229, // zero to adh0 bit0 only
|
|
dpc29_0ADH17: 203, // zero to adh bits 7-1 only
|
|
|
|
dpc30_ADHPCH: 48, // load pch from adh
|
|
dpc31_PCHPCH: 741, // load pch from pch incremented
|
|
dpc32_PCHADH: 1235, // drive adh from pch incremented
|
|
dpc33_PCHDB: 247, // drive idb from pch incremented
|
|
dpc34_PCLC: 1704, // pch carry in and pcl FF detect?
|
|
dpc35_PCHC: 1334, // pch 0x?F detect - half-carry
|
|
"dpc36_#IPC": 379, // pcl carry in (inverted)
|
|
"dpc36_~IPC": 379, // automatic alias replacing hash with tilde
|
|
dpc37_PCLDB: 283, // drive idb from pcl incremented
|
|
dpc38_PCLADL: 438, // drive adl from pcl incremented
|
|
dpc39_PCLPCL: 898, // load pcl from pcl incremented
|
|
|
|
dpc40_ADLPCL: 414, // load pcl from adl
|
|
"dpc41_DL/ADL": 1564,// pass-connect adl to mux node driven by idl
|
|
"dpc42_DL/ADH": 41, // pass-connect adh to mux node driven by idl
|
|
"dpc43_DL/DB": 863, // pass-connect idb to mux node driven by idl
|
|
|
|
}
|
|
|
|
/* many bus names taken from Donald F. Hanson's block diagram, found
|
|
* http://www.weihenstephan.org/~michaste/pagetable/6502/6502.jpg
|
|
* from his paper "A VHDL conversion tool for logic equations with embedded D latches"
|
|
* http://portal.acm.org/citation.cfm?id=1275143.1275151
|
|
* also available at
|
|
* http://www.ncsu.edu/wcae/WCAE1/hanson.pdf
|
|
*/
|