mirror of
https://github.com/trebonian/visual6502.git
synced 2024-12-21 21:29:16 +00:00
950 lines
30 KiB
JavaScript
950 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
|
|
"dpc-1_ADL/ABL": 639,// alias for DPControl pseudo-bus
|
|
|
|
"ADH/ABH": 821, // load ABH latches from ADH bus
|
|
"dpc-2_ADH/ABH": 821,// alias for DPControl pseudo-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
|
|
*/
|