mirror of
https://github.com/trebonian/visual6502.git
synced 2024-06-01 10:41:28 +00:00
Compare commits
109 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d8ecc129b3 | ||
|
d14ade8be8 | ||
|
bc5da26ea2 | ||
|
15911b02b4 | ||
|
badcf8e40b | ||
|
8097137323 | ||
|
5b86a57c2c | ||
|
0d4cb75658 | ||
|
cb7815e1ad | ||
|
7ee143a906 | ||
|
52540e3c12 | ||
|
f33937cc92 | ||
|
deb6833f8a | ||
|
296cd01f84 | ||
|
8e799d6922 | ||
|
a4ed7a9178 | ||
|
9795b463ac | ||
|
b384fb552f | ||
|
bf63c33552 | ||
|
9760663cc1 | ||
|
3ae93282ba | ||
|
ab53a12b2e | ||
|
a92f443ac1 | ||
|
86e6e116d7 | ||
|
f360557572 | ||
|
5005774b1b | ||
|
924074e305 | ||
|
b0c40b9e7b | ||
|
74762264c1 | ||
|
6fcb3077eb | ||
|
cbebb0e11d | ||
|
2612132999 | ||
|
8327a36826 | ||
|
886efe1d5a | ||
|
d9c92ebdc3 | ||
|
651a1753b7 | ||
|
f5cada53f7 | ||
|
7d579fa4aa | ||
|
e33f40e60c | ||
|
379d2d1ea1 | ||
|
59792d75fc | ||
|
225b49a6d8 | ||
|
3de51801ea | ||
|
2f882d7d34 | ||
|
b9e235fac2 | ||
|
0e4c3e0ab0 | ||
|
767e2492be | ||
|
95f9d52306 | ||
|
646f22b79e | ||
|
2ff43fafb3 | ||
|
8a9fe6f57e | ||
|
3315f309a7 | ||
|
85058171b2 | ||
|
7a0cb72539 | ||
|
0a6866f10c | ||
|
5b15e2d6c9 | ||
|
e6e446a256 | ||
|
bd0356f2a0 | ||
|
096f6bbcf8 | ||
|
698312b98e | ||
|
bd45334147 | ||
|
7efe4fb8c7 | ||
|
ef0a714a29 | ||
|
e0547e6c35 | ||
|
76edc1186a | ||
|
c1409b78cb | ||
|
d39bab7302 | ||
|
587fa47d8a | ||
|
27d0eb8fb2 | ||
|
90f57631c0 | ||
|
cba0c7a6b5 | ||
|
c2348c5f63 | ||
|
4bb43bfd0e | ||
|
8d50388828 | ||
|
1f78e25b3a | ||
|
4364604b96 | ||
|
2147762ee4 | ||
|
651d8a44c5 | ||
|
51d6bb216b | ||
|
3b7fbe4385 | ||
|
f3cffeeed6 | ||
|
a2a4bc65c5 | ||
|
815e972d14 | ||
|
9f4f922e16 | ||
|
27bec1bfe5 | ||
|
976fe7e430 | ||
|
72ac2caf74 | ||
|
741e035eb4 | ||
|
dd2241d3de | ||
|
c0809ba34e | ||
|
df33b88c56 | ||
|
7d90b33187 | ||
|
34244661cb | ||
|
ce74c3f5d3 | ||
|
cb03b9741a | ||
|
7b95b5e345 | ||
|
de265ecdb8 | ||
|
e81c9fbe0f | ||
|
c300e6ad01 | ||
|
79d0c4c445 | ||
|
a2d35d54ca | ||
|
e20eb08b91 | ||
|
8487a7a9e1 | ||
|
6c138a4f6b | ||
|
658d40646c | ||
|
67e15e68c1 | ||
|
a316831100 | ||
|
acd7b0310e | ||
|
9331be20fe |
182
3rdparty/jquery.cookie.js
vendored
182
3rdparty/jquery.cookie.js
vendored
|
@ -1,92 +1,92 @@
|
||||||
/**
|
/**
|
||||||
* Cookie plugin
|
* Cookie plugin
|
||||||
*
|
*
|
||||||
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
|
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
|
||||||
* Dual licensed under the MIT and GPL licenses:
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
* http://www.opensource.org/licenses/mit-license.php
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
* http://www.gnu.org/licenses/gpl.html
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a cookie with the given name and value and other optional parameters.
|
* Create a cookie with the given name and value and other optional parameters.
|
||||||
*
|
*
|
||||||
* @example $.cookie('the_cookie', 'the_value');
|
* @example $.cookie('the_cookie', 'the_value');
|
||||||
* @desc Set the value of a cookie.
|
* @desc Set the value of a cookie.
|
||||||
* @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});
|
* @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});
|
||||||
* @desc Create a cookie with all available options.
|
* @desc Create a cookie with all available options.
|
||||||
* @example $.cookie('the_cookie', 'the_value');
|
* @example $.cookie('the_cookie', 'the_value');
|
||||||
* @desc Create a session cookie.
|
* @desc Create a session cookie.
|
||||||
* @example $.cookie('the_cookie', null);
|
* @example $.cookie('the_cookie', null);
|
||||||
* @desc Delete a cookie by passing null as value.
|
* @desc Delete a cookie by passing null as value.
|
||||||
*
|
*
|
||||||
* @param String name The name of the cookie.
|
* @param String name The name of the cookie.
|
||||||
* @param String value The value of the cookie.
|
* @param String value The value of the cookie.
|
||||||
* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
|
* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
|
||||||
* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
|
* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
|
||||||
* If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
|
* If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
|
||||||
* If set to null or omitted, the cookie will be a session cookie and will not be retained
|
* If set to null or omitted, the cookie will be a session cookie and will not be retained
|
||||||
* when the the browser exits.
|
* when the the browser exits.
|
||||||
* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
|
* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
|
||||||
* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
|
* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
|
||||||
* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
|
* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
|
||||||
* require a secure protocol (like HTTPS).
|
* require a secure protocol (like HTTPS).
|
||||||
* @type undefined
|
* @type undefined
|
||||||
*
|
*
|
||||||
* @name $.cookie
|
* @name $.cookie
|
||||||
* @cat Plugins/Cookie
|
* @cat Plugins/Cookie
|
||||||
* @author Klaus Hartl/klaus.hartl@stilbuero.de
|
* @author Klaus Hartl/klaus.hartl@stilbuero.de
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the value of a cookie with the given name.
|
* Get the value of a cookie with the given name.
|
||||||
*
|
*
|
||||||
* @example $.cookie('the_cookie');
|
* @example $.cookie('the_cookie');
|
||||||
* @desc Get the value of a cookie.
|
* @desc Get the value of a cookie.
|
||||||
*
|
*
|
||||||
* @param String name The name of the cookie.
|
* @param String name The name of the cookie.
|
||||||
* @return The value of the cookie.
|
* @return The value of the cookie.
|
||||||
* @type String
|
* @type String
|
||||||
*
|
*
|
||||||
* @name $.cookie
|
* @name $.cookie
|
||||||
* @cat Plugins/Cookie
|
* @cat Plugins/Cookie
|
||||||
* @author Klaus Hartl/klaus.hartl@stilbuero.de
|
* @author Klaus Hartl/klaus.hartl@stilbuero.de
|
||||||
*/
|
*/
|
||||||
jQuery.cookie = function(name, value, options) {
|
jQuery.cookie = function(name, value, options) {
|
||||||
if (typeof value != 'undefined') { // name and value given, set cookie
|
if (typeof value != 'undefined') { // name and value given, set cookie
|
||||||
options = options || {};
|
options = options || {};
|
||||||
if (value === null) {
|
if (value === null) {
|
||||||
value = '';
|
value = '';
|
||||||
options.expires = -1;
|
options.expires = -1;
|
||||||
}
|
}
|
||||||
var expires = '';
|
var expires = '';
|
||||||
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
|
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
|
||||||
var date;
|
var date;
|
||||||
if (typeof options.expires == 'number') {
|
if (typeof options.expires == 'number') {
|
||||||
date = new Date();
|
date = new Date();
|
||||||
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
|
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
|
||||||
} else {
|
} else {
|
||||||
date = options.expires;
|
date = options.expires;
|
||||||
}
|
}
|
||||||
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
|
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
|
||||||
}
|
}
|
||||||
var path = options.path ? '; path=' + options.path : '';
|
var path = options.path ? '; path=' + options.path : '';
|
||||||
var domain = options.domain ? '; domain=' + options.domain : '';
|
var domain = options.domain ? '; domain=' + options.domain : '';
|
||||||
var secure = options.secure ? '; secure' : '';
|
var secure = options.secure ? '; secure' : '';
|
||||||
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
|
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
|
||||||
} else { // only name given, get cookie
|
} else { // only name given, get cookie
|
||||||
var cookieValue = null;
|
var cookieValue = null;
|
||||||
if (document.cookie && document.cookie != '') {
|
if (document.cookie && document.cookie != '') {
|
||||||
var cookies = document.cookie.split(';');
|
var cookies = document.cookie.split(';');
|
||||||
for (var i = 0; i < cookies.length; i++) {
|
for (var i = 0; i < cookies.length; i++) {
|
||||||
var cookie = jQuery.trim(cookies[i]);
|
var cookie = jQuery.trim(cookies[i]);
|
||||||
// Does this cookie string begin with the name we want?
|
// Does this cookie string begin with the name we want?
|
||||||
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
||||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cookieValue;
|
return cookieValue;
|
||||||
}
|
}
|
||||||
};
|
};
|
4
README
4
README
|
@ -1,10 +1,10 @@
|
||||||
This is the javascript simulator from the visual5602.org project:
|
This is the JavaScript simulator from the visual6502.org project:
|
||||||
www.visual6502.org/JSSim
|
www.visual6502.org/JSSim
|
||||||
|
|
||||||
It includes a general purpose transistor-level simulator, layout browser,
|
It includes a general purpose transistor-level simulator, layout browser,
|
||||||
and the data from a 6502 revD chip.
|
and the data from a 6502 revD chip.
|
||||||
|
|
||||||
Recently added: polygon data for the 6800 chip. The simulation is not yet working,
|
It also includes a similar simulator for the 6800 chip.
|
||||||
|
|
||||||
Note the various licenses and Copyright associated with each file.
|
Note the various licenses and Copyright associated with each file.
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,8 @@ vcc: 31, // pads: power
|
||||||
phi1: 1507, // pads: phase 1 clock input
|
phi1: 1507, // pads: phase 1 clock input
|
||||||
phi2: 1511, // pads: phase 2 clock input
|
phi2: 1511, // pads: phase 2 clock input
|
||||||
reset: 1461, // pads: reset
|
reset: 1461, // pads: reset
|
||||||
db0: 686, // pads: data bus
|
|
||||||
|
db0: 686, // pads: data bus (should really be called d)
|
||||||
db1: 683,
|
db1: 683,
|
||||||
db2: 677,
|
db2: 677,
|
||||||
db3: 676,
|
db3: 676,
|
||||||
|
@ -34,7 +35,8 @@ db4: 669,
|
||||||
db5: 670,
|
db5: 670,
|
||||||
db6: 664,
|
db6: 664,
|
||||||
db7: 691,
|
db7: 691,
|
||||||
ab0: 1854, // pads: address bus
|
|
||||||
|
ab0: 1854, // pads: address bus (should really be called a)
|
||||||
ab1: 1857,
|
ab1: 1857,
|
||||||
ab2: 1855,
|
ab2: 1855,
|
||||||
ab3: 1858,
|
ab3: 1858,
|
||||||
|
@ -50,6 +52,7 @@ ab12: 1948,
|
||||||
ab13: 1946,
|
ab13: 1946,
|
||||||
ab14: 1949,
|
ab14: 1949,
|
||||||
ab15: 1947,
|
ab15: 1947,
|
||||||
|
|
||||||
irq: 1496, // input pads: interrupt request (active low)
|
irq: 1496, // input pads: interrupt request (active low)
|
||||||
nmi: 1501, // pads: non maskable interrupt (active low)
|
nmi: 1501, // pads: non maskable interrupt (active low)
|
||||||
dbe: 1456, // pads: data bus enable
|
dbe: 1456, // pads: data bus enable
|
||||||
|
@ -60,8 +63,206 @@ vma: 1971, // pads: valid memory address
|
||||||
ba: 1964, // pads: bus available
|
ba: 1964, // pads: bus available
|
||||||
//
|
//
|
||||||
|
|
||||||
// internal state: Instruction Register
|
// major internal busses
|
||||||
ir0: 1301,
|
|
||||||
|
idb0: 610, // internal databus (should be called db)
|
||||||
|
idb1: 1593,
|
||||||
|
idb2: 387,
|
||||||
|
idb3: 386,
|
||||||
|
idb4: 311,
|
||||||
|
idb5: 310,
|
||||||
|
idb6: 393,
|
||||||
|
idb7: 1651,
|
||||||
|
|
||||||
|
abh0: 267, // internal bus: address bus high
|
||||||
|
abh1: 258,
|
||||||
|
abh2: 266,
|
||||||
|
abh3: 257,
|
||||||
|
abh4: 265,
|
||||||
|
abh5: 256,
|
||||||
|
abh6: 259,
|
||||||
|
abh7: 255,
|
||||||
|
|
||||||
|
abl0: 1670, // internal bus: address bus low
|
||||||
|
abl1: 1671,
|
||||||
|
abl2: 1653,
|
||||||
|
abl3: 1667,
|
||||||
|
abl4: 1655,
|
||||||
|
abl5: 1657,
|
||||||
|
abl6: 1656,
|
||||||
|
abl7: 1658,
|
||||||
|
|
||||||
|
ablx0: 1683, // internal bus: extension of abl bus
|
||||||
|
ablx1: 1682,
|
||||||
|
ablx2: 1689,
|
||||||
|
ablx3: 1687,
|
||||||
|
ablx4: 1694,
|
||||||
|
ablx5: 1693,
|
||||||
|
ablx6: 1698,
|
||||||
|
ablx7: 1697,
|
||||||
|
|
||||||
|
i0: 1271, // pla word lines
|
||||||
|
i1: 1269,
|
||||||
|
i2: 1268,
|
||||||
|
i3: 1267,
|
||||||
|
i4: 1265,
|
||||||
|
i5: 1264,
|
||||||
|
i6: 1263,
|
||||||
|
i7: 1261,
|
||||||
|
|
||||||
|
// programmer-visible state
|
||||||
|
|
||||||
|
flagc: 1160, // status word flags
|
||||||
|
flagh: 785,
|
||||||
|
flagi: 1007,
|
||||||
|
flagn: 1005,
|
||||||
|
flagv: 1124,
|
||||||
|
flagz: 1026,
|
||||||
|
|
||||||
|
acca0: 1934, // a register: accumulator a
|
||||||
|
acca1: 1688,
|
||||||
|
acca2: 1700,
|
||||||
|
acca3: 1699,
|
||||||
|
acca4: 1701,
|
||||||
|
acca5: 1702,
|
||||||
|
acca6: 1703,
|
||||||
|
acca7: 1784,
|
||||||
|
|
||||||
|
accb0: 1919, // b register: accumulator b
|
||||||
|
accb1: 1927,
|
||||||
|
accb2: 1921,
|
||||||
|
accb3: 1929,
|
||||||
|
accb4: 1923,
|
||||||
|
accb5: 1931,
|
||||||
|
accb6: 1925,
|
||||||
|
accb7: 1933,
|
||||||
|
|
||||||
|
ixh0: 1910, // index register high
|
||||||
|
ixh1: 1914,
|
||||||
|
ixh2: 1911,
|
||||||
|
ixh3: 1915,
|
||||||
|
ixh4: 1912,
|
||||||
|
ixh5: 1916,
|
||||||
|
ixh6: 1913,
|
||||||
|
ixh7: 1917,
|
||||||
|
ixl0: 1918, // index register low
|
||||||
|
ixl1: 1926,
|
||||||
|
ixl2: 1920,
|
||||||
|
ixl3: 1928,
|
||||||
|
ixl4: 1922,
|
||||||
|
ixl5: 1930,
|
||||||
|
ixl6: 1924,
|
||||||
|
ixl7: 1932,
|
||||||
|
|
||||||
|
pch0: 1878, // program counter high register
|
||||||
|
pch1: 1882,
|
||||||
|
pch2: 1879,
|
||||||
|
pch3: 1883,
|
||||||
|
pch4: 1880,
|
||||||
|
pch5: 1884,
|
||||||
|
pch6: 1881,
|
||||||
|
pch7: 1885,
|
||||||
|
pcl0: 1877, // program counter low register
|
||||||
|
pcl1: 1873,
|
||||||
|
pcl2: 1876,
|
||||||
|
pcl3: 1872,
|
||||||
|
pcl4: 1875,
|
||||||
|
pcl5: 1871,
|
||||||
|
pcl6: 1874,
|
||||||
|
pcl7: 1870,
|
||||||
|
|
||||||
|
sph0: 1909, // stack pointer high register
|
||||||
|
sph1: 1908,
|
||||||
|
sph2: 1907,
|
||||||
|
sph3: 1906,
|
||||||
|
sph4: 1905,
|
||||||
|
sph5: 1904,
|
||||||
|
sph6: 1903,
|
||||||
|
sph7: 1902,
|
||||||
|
spl0: 1894, // stack pointer low register
|
||||||
|
spl1: 1898,
|
||||||
|
spl2: 1895,
|
||||||
|
spl3: 1899,
|
||||||
|
spl4: 1896,
|
||||||
|
spl5: 1900,
|
||||||
|
spl6: 1897,
|
||||||
|
spl7: 1901,
|
||||||
|
|
||||||
|
// datapath state not visible to the programmer
|
||||||
|
|
||||||
|
tmp0: 1893, // non-visible temporary register
|
||||||
|
tmp1: 1892,
|
||||||
|
tmp2: 1891,
|
||||||
|
tmp3: 1890,
|
||||||
|
tmp4: 1889,
|
||||||
|
tmp5: 1888,
|
||||||
|
tmp6: 1887,
|
||||||
|
tmp7: 1886,
|
||||||
|
|
||||||
|
sum0: 644, // alu output (phi2-latched)
|
||||||
|
sum1: 643,
|
||||||
|
sum2: 642,
|
||||||
|
sum3: 641,
|
||||||
|
sum4: 640,
|
||||||
|
sum5: 639,
|
||||||
|
sum6: 638,
|
||||||
|
sum7: 412,
|
||||||
|
|
||||||
|
dbi0: 608, // data bus input register
|
||||||
|
dbi1: 599,
|
||||||
|
dbi2: 598,
|
||||||
|
dbi3: 400,
|
||||||
|
dbi4: 405,
|
||||||
|
dbi5: 395,
|
||||||
|
dbi6: 389,
|
||||||
|
dbi7: 650,
|
||||||
|
|
||||||
|
dbo0: 609, // data bus output latch
|
||||||
|
dbo1: 602,
|
||||||
|
dbo2: 601,
|
||||||
|
dbo3: 402,
|
||||||
|
dbo4: 406,
|
||||||
|
dbo5: 397,
|
||||||
|
dbo6: 390,
|
||||||
|
dbo7: 649,
|
||||||
|
|
||||||
|
inch0: 198, // incrementer high output port
|
||||||
|
inch1: 199,
|
||||||
|
inch2: 200,
|
||||||
|
inch3: 201,
|
||||||
|
inch4: 202,
|
||||||
|
inch5: 203,
|
||||||
|
inch6: 204,
|
||||||
|
inch7: 205,
|
||||||
|
incl0: 154, // incrementer low output port
|
||||||
|
incl1: 143,
|
||||||
|
incl2: 144,
|
||||||
|
incl3: 147,
|
||||||
|
incl4: 148,
|
||||||
|
incl5: 151,
|
||||||
|
incl6: 152,
|
||||||
|
incl7: 156,
|
||||||
|
|
||||||
|
obl0: 27, // output buffer low (address bus low output latch)
|
||||||
|
obl1: 30,
|
||||||
|
obl2: 28,
|
||||||
|
obl3: 32,
|
||||||
|
obl4: 29,
|
||||||
|
obl5: 33,
|
||||||
|
obl6: 1073,
|
||||||
|
obl7: 35,
|
||||||
|
|
||||||
|
"#obh0": 1071, // output buffer high (address bus high output latch))
|
||||||
|
"#obh1": 819,
|
||||||
|
"#obh2": 811,
|
||||||
|
"#obh3": 813,
|
||||||
|
"#obh4": 817,
|
||||||
|
"#obh5": 809,
|
||||||
|
"#obh6": 815,
|
||||||
|
"#obh7": 574,
|
||||||
|
|
||||||
|
// other internal state
|
||||||
|
ir0: 1301, // Instruction Register
|
||||||
ir1: 1285,
|
ir1: 1285,
|
||||||
ir2: 1286,
|
ir2: 1286,
|
||||||
ir3: 1287,
|
ir3: 1287,
|
||||||
|
@ -70,50 +271,41 @@ ir5: 1289,
|
||||||
ir6: 1274,
|
ir6: 1274,
|
||||||
ir7: 1277,
|
ir7: 1277,
|
||||||
|
|
||||||
|
// timing state signals
|
||||||
|
Ts: 1309,
|
||||||
|
Tf: 849, // aka fetch
|
||||||
|
Ta0: 879,
|
||||||
|
Td0_0: 981,
|
||||||
|
"#Te0": 868,
|
||||||
|
"Te0.2": 866,
|
||||||
|
Tg0: 12,
|
||||||
|
Tx0: 850,
|
||||||
|
Ta1: 838,
|
||||||
|
Te1_0: 735,
|
||||||
|
Tg1: 772,
|
||||||
|
Tx1: 851,
|
||||||
|
Ta2: 844,
|
||||||
|
Tg2: 832,
|
||||||
|
Tx2: 860,
|
||||||
|
Tg3: 835,
|
||||||
|
Tr3: 823,
|
||||||
|
Tg4: 696,
|
||||||
|
Tr4: 825,
|
||||||
|
Tg5: 914,
|
||||||
|
Tr5: 828,
|
||||||
|
Tg6: 911,
|
||||||
|
Tr6: 894,
|
||||||
|
Tr7: 694,
|
||||||
|
Tg7: 1081,
|
||||||
|
Tg8: 891,
|
||||||
|
Tr8: 697,
|
||||||
|
|
||||||
|
// other internal busses registers and signals
|
||||||
|
|
||||||
// internal control signals
|
// internal control signals
|
||||||
sync: 1528, // aka #decode_0
|
sync: 1528, // aka #decode_0
|
||||||
|
|
||||||
// many other internal busses registers and signals
|
// ALU signals
|
||||||
abh0: 267,
|
|
||||||
abh1: 258,
|
|
||||||
abh2: 266,
|
|
||||||
abh3: 257,
|
|
||||||
abh4: 265,
|
|
||||||
abh5: 256,
|
|
||||||
abh6: 259,
|
|
||||||
abh7: 255,
|
|
||||||
ablx0: 1683,
|
|
||||||
ablx1: 1682,
|
|
||||||
ablx2: 1689,
|
|
||||||
ablx3: 1687,
|
|
||||||
ablx4: 1694,
|
|
||||||
ablx5: 1693,
|
|
||||||
ablx6: 1698,
|
|
||||||
ablx7: 1697,
|
|
||||||
abl0: 1670,
|
|
||||||
abl1: 1671,
|
|
||||||
abl2: 1653,
|
|
||||||
abl3: 1667,
|
|
||||||
abl4: 1655,
|
|
||||||
abl5: 1657,
|
|
||||||
abl6: 1656,
|
|
||||||
abl7: 1658,
|
|
||||||
acca0: 1934,
|
|
||||||
acca1: 1688,
|
|
||||||
acca2: 1700,
|
|
||||||
acca3: 1699,
|
|
||||||
acca4: 1701,
|
|
||||||
acca5: 1702,
|
|
||||||
acca6: 1703,
|
|
||||||
acca7: 1784,
|
|
||||||
accb0: 1919,
|
|
||||||
accb1: 1927,
|
|
||||||
accb2: 1921,
|
|
||||||
accb3: 1929,
|
|
||||||
accb4: 1923,
|
|
||||||
accb5: 1931,
|
|
||||||
accb6: 1925,
|
|
||||||
accb7: 1933,
|
|
||||||
adda0: 1680,
|
adda0: 1680,
|
||||||
adda1: 1681,
|
adda1: 1681,
|
||||||
adda2: 1685,
|
adda2: 1685,
|
||||||
|
@ -138,145 +330,42 @@ addb4: 553,
|
||||||
addb5: 552,
|
addb5: 552,
|
||||||
addb6: 545,
|
addb6: 545,
|
||||||
addb7: 544,
|
addb7: 544,
|
||||||
idb0: 610,
|
addg0: 593,
|
||||||
idb1: 1593,
|
addg1: 594,
|
||||||
idb2: 387,
|
addg2: 589,
|
||||||
idb3: 386,
|
addg3: 590,
|
||||||
idb4: 311,
|
addg4: 585,
|
||||||
idb5: 310,
|
addg5: 586,
|
||||||
idb6: 393,
|
addg6: 581,
|
||||||
idb7: 1651,
|
addg7: 582,
|
||||||
dbi0: 608,
|
addp0: 564,
|
||||||
dbi1: 599,
|
addp1: 566,
|
||||||
dbi2: 598,
|
addp2: 556,
|
||||||
dbi3: 400,
|
addp3: 558,
|
||||||
dbi4: 405,
|
addp4: 548,
|
||||||
dbi5: 395,
|
addp5: 550,
|
||||||
dbi6: 389,
|
addp6: 541,
|
||||||
dbi7: 650,
|
addp7: 543,
|
||||||
dbo0: 609,
|
|
||||||
dbo1: 602,
|
|
||||||
dbo2: 601,
|
|
||||||
dbo3: 402,
|
|
||||||
dbo4: 406,
|
|
||||||
dbo5: 397,
|
|
||||||
dbo6: 390,
|
|
||||||
dbo7: 649,
|
|
||||||
decode: 1225,
|
decode: 1225,
|
||||||
i0: 1271, // pla word lines
|
|
||||||
i1: 1269,
|
|
||||||
i2: 1268,
|
|
||||||
i3: 1267,
|
|
||||||
i4: 1265,
|
|
||||||
i5: 1264,
|
|
||||||
i6: 1263,
|
|
||||||
i7: 1261,
|
|
||||||
inch0: 198,
|
|
||||||
inch1: 199,
|
|
||||||
inch2: 200,
|
|
||||||
inch3: 201,
|
|
||||||
inch4: 202,
|
|
||||||
inch5: 203,
|
|
||||||
inch6: 204,
|
|
||||||
inch7: 205,
|
|
||||||
incl0: 154,
|
|
||||||
incl1: 143,
|
|
||||||
incl2: 144,
|
|
||||||
incl3: 147,
|
|
||||||
incl4: 148,
|
|
||||||
incl5: 151,
|
|
||||||
incl6: 152,
|
|
||||||
incl7: 156,
|
|
||||||
ixh0: 1910,
|
|
||||||
ixh1: 1914,
|
|
||||||
ixh2: 1911,
|
|
||||||
ixh3: 1915,
|
|
||||||
ixh4: 1912,
|
|
||||||
ixh5: 1916,
|
|
||||||
ixh6: 1913,
|
|
||||||
ixh7: 1917,
|
|
||||||
ixl0: 1918,
|
|
||||||
ixl1: 1926,
|
|
||||||
ixl2: 1920,
|
|
||||||
ixl3: 1928,
|
|
||||||
ixl4: 1922,
|
|
||||||
ixl5: 1930,
|
|
||||||
ixl6: 1924,
|
|
||||||
ixl7: 1932,
|
|
||||||
ob: 1308,
|
|
||||||
obl0: 27,
|
|
||||||
obl1: 30,
|
|
||||||
obl2: 28,
|
|
||||||
obl3: 32,
|
|
||||||
obl4: 29,
|
|
||||||
obl5: 33,
|
|
||||||
obl6: 1073,
|
|
||||||
obl7: 35,
|
|
||||||
pch0: 1878,
|
|
||||||
pch1: 1882,
|
|
||||||
pch2: 1879,
|
|
||||||
pch3: 1883,
|
|
||||||
pch4: 1880,
|
|
||||||
pch5: 1884,
|
|
||||||
pch6: 1881,
|
|
||||||
pch7: 1885,
|
|
||||||
pcl0: 1877,
|
|
||||||
pcl1: 1873,
|
|
||||||
pcl2: 1876,
|
|
||||||
pcl3: 1872,
|
|
||||||
pcl4: 1875,
|
|
||||||
pcl5: 1871,
|
|
||||||
pcl6: 1874,
|
|
||||||
pcl7: 1870,
|
|
||||||
res: 1512,
|
|
||||||
sph0: 1909,
|
|
||||||
sph1: 1908,
|
|
||||||
sph2: 1907,
|
|
||||||
sph3: 1906,
|
|
||||||
sph4: 1905,
|
|
||||||
sph5: 1904,
|
|
||||||
sph6: 1903,
|
|
||||||
sph7: 1902,
|
|
||||||
spl0: 1894,
|
|
||||||
spl1: 1898,
|
|
||||||
spl2: 1895,
|
|
||||||
spl3: 1899,
|
|
||||||
spl4: 1896,
|
|
||||||
spl5: 1900,
|
|
||||||
spl6: 1897,
|
|
||||||
spl7: 1901,
|
|
||||||
sum0: 644,
|
|
||||||
sum1: 643,
|
|
||||||
sum2: 642,
|
|
||||||
sum3: 641,
|
|
||||||
sum4: 640,
|
|
||||||
sum5: 639,
|
|
||||||
sum6: 638,
|
|
||||||
sum7: 412,
|
|
||||||
sumab0: 564,
|
|
||||||
sumab1: 566,
|
|
||||||
sumab2: 556,
|
|
||||||
sumab3: 558,
|
|
||||||
sumab4: 548,
|
|
||||||
sumab5: 550,
|
|
||||||
sumab6: 541,
|
|
||||||
sumab7: 543,
|
|
||||||
tmp0: 1893,
|
|
||||||
tmp1: 1892,
|
|
||||||
tmp2: 1891,
|
|
||||||
tmp3: 1890,
|
|
||||||
tmp4: 1889,
|
|
||||||
tmp5: 1888,
|
|
||||||
tmp6: 1887,
|
|
||||||
tmp7: 1886,
|
|
||||||
enrwa: 1318,
|
enrwa: 1318,
|
||||||
flagc: 1160,
|
fetch: 849, // aka Tf
|
||||||
flagh: 785,
|
|
||||||
flagi: 1007,
|
ob: 1308, // output buffer (read-not-write output latch)
|
||||||
flagn: 1005,
|
|
||||||
flagv: 1124,
|
resg: 1512,
|
||||||
flagz: 1026,
|
|
||||||
qaddgen0: 593,
|
xi0: 1303, // half-latch prior to IR
|
||||||
|
xi1: 1291,
|
||||||
|
xi2: 1294,
|
||||||
|
xi3: 1292,
|
||||||
|
xi4: 1295,
|
||||||
|
xi5: 1293,
|
||||||
|
xi6: 1275,
|
||||||
|
xi7: 1276,
|
||||||
|
|
||||||
|
// signals which are not purely alphabetical
|
||||||
|
// note that underscore digit represents a logical duplication
|
||||||
acca0_1: 342,
|
acca0_1: 342,
|
||||||
acca1_1: 350,
|
acca1_1: 350,
|
||||||
acca2_1: 344,
|
acca2_1: 344,
|
||||||
|
@ -607,14 +696,6 @@ phi2_1: 478,
|
||||||
"#ixl5_0": 1726,
|
"#ixl5_0": 1726,
|
||||||
"#ixl6_0": 1730,
|
"#ixl6_0": 1730,
|
||||||
"#ixl7_0": 1782,
|
"#ixl7_0": 1782,
|
||||||
"#obh0": 1071,
|
|
||||||
"#obh1": 819,
|
|
||||||
"#obh2": 811,
|
|
||||||
"#obh3": 813,
|
|
||||||
"#obh4": 817,
|
|
||||||
"#obh5": 809,
|
|
||||||
"#obh6": 815,
|
|
||||||
"#obh7": 574,
|
|
||||||
"#pch0_0": 1760,
|
"#pch0_0": 1760,
|
||||||
"#pch1_0": 1757,
|
"#pch1_0": 1757,
|
||||||
"#pch2_0": 1761,
|
"#pch2_0": 1761,
|
||||||
|
@ -704,7 +785,6 @@ phi2_1: 478,
|
||||||
"#n0n.2-7": 1242,
|
"#n0n.2-7": 1242,
|
||||||
"#phi2_0": 477,
|
"#phi2_0": 477,
|
||||||
"#phi2_2": 576,
|
"#phi2_2": 576,
|
||||||
"#qand0": 571,
|
|
||||||
"#x0/abh": 979,
|
"#x0/abh": 979,
|
||||||
"#x0/abl1": 438,
|
"#x0/abl1": 438,
|
||||||
"#x0/db0": 127,
|
"#x0/db0": 127,
|
||||||
|
@ -718,6 +798,14 @@ phi2_1: 478,
|
||||||
"#xacca/db": 466,
|
"#xacca/db": 466,
|
||||||
"#xaccb/abl1": 460,
|
"#xaccb/abl1": 460,
|
||||||
"#xaccb/db": 760,
|
"#xaccb/db": 760,
|
||||||
|
"#xaddg0": 571,
|
||||||
|
"#xaddg1": 570,
|
||||||
|
"#xaddg2": 563,
|
||||||
|
"#xaddg3": 562,
|
||||||
|
"#xaddg4": 555,
|
||||||
|
"#xaddg5": 554,
|
||||||
|
"#xaddg6": 547,
|
||||||
|
"#xaddg7": 546,
|
||||||
"#xda/adda": 434,
|
"#xda/adda": 434,
|
||||||
"#xdb/acca": 464,
|
"#xdb/acca": 464,
|
||||||
"#xdb/accb": 430,
|
"#xdb/accb": 430,
|
||||||
|
@ -856,13 +944,279 @@ phi2_1: 478,
|
||||||
"flag0/db3": 376,
|
"flag0/db3": 376,
|
||||||
"flag0/db4": 309,
|
"flag0/db4": 309,
|
||||||
"flag0/db5": 308,
|
"flag0/db5": 308,
|
||||||
"n1n-0": 1303,
|
|
||||||
"n1n-1": 1291,
|
|
||||||
"n1n-2": 1294,
|
|
||||||
"n1n-3": 1292,
|
|
||||||
"n1n-4": 1295,
|
|
||||||
"n1n-5": 1293,
|
|
||||||
"n1n-6": 1275,
|
|
||||||
"ndb/adda": 415,
|
"ndb/adda": 415,
|
||||||
"nin-7": 1276,
|
|
||||||
|
// from this point: signals imported from Segher 2011-04-16 and not yet ordered or commented
|
||||||
|
carry: 646,
|
||||||
|
dbe_1: 1453,
|
||||||
|
dec: 163,
|
||||||
|
halted: 2,
|
||||||
|
int: 1083,
|
||||||
|
irq_0: 3,
|
||||||
|
irqg: 1183,
|
||||||
|
nmi_0: 1477,
|
||||||
|
nmig: 1192,
|
||||||
|
restart: 1186,
|
||||||
|
|
||||||
|
ta0: 879, // timing state signals also seen earlier with mixed-case names
|
||||||
|
ta1: 838,
|
||||||
|
ta2: 844,
|
||||||
|
td0_0: 981,
|
||||||
|
td0_1: 700,
|
||||||
|
te1_0: 735,
|
||||||
|
te1_1: 967,
|
||||||
|
te1_2: 705,
|
||||||
|
te1_3: 715,
|
||||||
|
te1_4: 865,
|
||||||
|
te1_5: 973,
|
||||||
|
te1_6: 706,
|
||||||
|
tg0: 12,
|
||||||
|
tg1: 772,
|
||||||
|
tg2: 832,
|
||||||
|
tg3: 835,
|
||||||
|
tg4: 696,
|
||||||
|
tg5: 914,
|
||||||
|
tg6: 911,
|
||||||
|
tg7: 1081,
|
||||||
|
tg8: 891,
|
||||||
|
tr3: 823,
|
||||||
|
tr4: 825,
|
||||||
|
tr5: 828,
|
||||||
|
tr6: 894,
|
||||||
|
tr7: 694,
|
||||||
|
tr8: 697,
|
||||||
|
ts: 1309,
|
||||||
|
tsc_0: 1508,
|
||||||
|
tx0: 850,
|
||||||
|
tx1: 851,
|
||||||
|
tx2: 860,
|
||||||
|
|
||||||
|
wait: 1234,
|
||||||
|
wr: 788,
|
||||||
|
writing: 1449,
|
||||||
|
|
||||||
|
// the remainder of the imports need quoting
|
||||||
|
"#alu-cin": 592,
|
||||||
|
"#alu-cout": 595,
|
||||||
|
"#alu-hin": 584,
|
||||||
|
"#alu-hout": 1690,
|
||||||
|
"#alu-or": 472,
|
||||||
|
"#alu-or-xor": 475,
|
||||||
|
"#carry16": 733,
|
||||||
|
"#dbe_0": 1452,
|
||||||
|
"#dbe_2": 1454,
|
||||||
|
"#end": 1574,
|
||||||
|
"#flagc_1": 942,
|
||||||
|
"#i-ts": 1313,
|
||||||
|
"#inc": 712,
|
||||||
|
"#inch-cin": 78,
|
||||||
|
"#next-cyc-fetch": 4,
|
||||||
|
"#nmi_1": 1478,
|
||||||
|
"#nmip": 1178,
|
||||||
|
"#op-00xxxxxx_0": 945,
|
||||||
|
"#op-ta0-a-alu": 1019,
|
||||||
|
"#ta0-stx": 796,
|
||||||
|
"#ta0.2_0": 873,
|
||||||
|
"#ta1-0000100x": 798,
|
||||||
|
"#ta1-0000100x.2": 799,
|
||||||
|
"#ta1_0": 872,
|
||||||
|
"#ta1_1": 1095,
|
||||||
|
"#ta1_2": 960,
|
||||||
|
"#taken": 1039,
|
||||||
|
"#te0": 868,
|
||||||
|
"#te0.2_0": 867,
|
||||||
|
"#tx0_0": 971,
|
||||||
|
"#tx0_1": 926,
|
||||||
|
"#tx1_0": 727,
|
||||||
|
"#xalu-cin": 943,
|
||||||
|
"#xalu-or-xor": 479,
|
||||||
|
"#xdbi/db": 536,
|
||||||
|
"#xsum/db": 535,
|
||||||
|
"alu-and": 473,
|
||||||
|
"alu-sl": 578,
|
||||||
|
"alu-sr/c": 1110,
|
||||||
|
"alu-sub/c": 1144,
|
||||||
|
"alu-sub/c_0": 1163,
|
||||||
|
"alu-vout": 1058,
|
||||||
|
"alu-zout": 645,
|
||||||
|
"alu/c": 1147,
|
||||||
|
"alu/c_0": 1164,
|
||||||
|
"alu/h": 782,
|
||||||
|
"alu/nz": 1027,
|
||||||
|
"alu/v": 1112,
|
||||||
|
"alu2/z": 1049,
|
||||||
|
"da-c": 379,
|
||||||
|
"da-h": 381,
|
||||||
|
"db/ccr": 1107,
|
||||||
|
"dbi/db": 531,
|
||||||
|
"dec-low-adjust": 385,
|
||||||
|
"do-alu-cin": 575,
|
||||||
|
"force-wait": 1245,
|
||||||
|
"inc16/z": 989,
|
||||||
|
"incl-cout": 42,
|
||||||
|
"insn/c": 1162,
|
||||||
|
"insn/c_0": 1131,
|
||||||
|
"insn/i": 1000,
|
||||||
|
"insn/v": 1570,
|
||||||
|
"irq-dis": 990,
|
||||||
|
"irq-new": 1215,
|
||||||
|
"ix/ab": 833,
|
||||||
|
"nmi-done": 1172,
|
||||||
|
"nmi-new": 1174,
|
||||||
|
"no-address": 1489,
|
||||||
|
"shift-vout": 1057,
|
||||||
|
"shift/v": 1568,
|
||||||
|
"sr-cin": 765,
|
||||||
|
"t-before-fetch-simple": 1149,
|
||||||
|
"ta0-two-cycle-insn": 965,
|
||||||
|
"ta0.2": 878,
|
||||||
|
"ta2-0000100x": 1028,
|
||||||
|
"ta2-0000100x_0": 748,
|
||||||
|
"ta2-0000100x_1": 759,
|
||||||
|
"ta2-1xxx11xx": 1045,
|
||||||
|
"ta3-0000100x": 1031,
|
||||||
|
"te0.2": 866,
|
||||||
|
"tsc-high": 1460,
|
||||||
|
"tsc-low": 1476,
|
||||||
|
"xalu-and": 483,
|
||||||
|
|
||||||
|
// pla outputs (not in physical order)
|
||||||
|
"op-0000011x": 1361,
|
||||||
|
"op-0000100x": 1332,
|
||||||
|
"op-0000100x_0": 1379,
|
||||||
|
"op-0000100x_1": 1427,
|
||||||
|
"op-0000101x": 1141,
|
||||||
|
"op-0000110x": 1130,
|
||||||
|
"op-0000xxxx": 1369,
|
||||||
|
"op-0000xxxx_0": 1362,
|
||||||
|
"op-00010110": 1355,
|
||||||
|
"op-0001100x": 1394,
|
||||||
|
"op-0001101x": 1346,
|
||||||
|
"op-0001xxxx": 1360,
|
||||||
|
"op-000x0110": 1391,
|
||||||
|
"op-0010xxxx": 1380,
|
||||||
|
"op-0010xxxx_0": 1363,
|
||||||
|
"op-0010xxxx_1": 1399,
|
||||||
|
"op-0010xxxx_2": 1426,
|
||||||
|
"op-0011100x": 1381,
|
||||||
|
"op-00111011": 1383,
|
||||||
|
"op-00xxxxxx": 1342,
|
||||||
|
"op-0100xxxx": 1432,
|
||||||
|
"op-0101xxxx": 1425,
|
||||||
|
"op-011x1101": 1387,
|
||||||
|
"op-011x1110": 1398,
|
||||||
|
"op-011xxxxx": 1337,
|
||||||
|
"op-011xxxxx_0": 1322,
|
||||||
|
"op-011xxxxx_1": 1320,
|
||||||
|
"op-01xx01xx": 1443,
|
||||||
|
"op-01xx01xx_0": 1396,
|
||||||
|
"op-01xx0xxx": 1390,
|
||||||
|
"op-01xx100x": 1345,
|
||||||
|
"op-01xx100x_0": 1094,
|
||||||
|
"op-01xx100x_1": 1334,
|
||||||
|
"op-01xx1110": 1328,
|
||||||
|
"op-01xx1110_0": 1341,
|
||||||
|
"op-01xx11x1": 1428,
|
||||||
|
"op-01xxx1xx": 1338,
|
||||||
|
"op-0x01xxxx": 1343,
|
||||||
|
"op-0x0xxxxx_0": 1364,
|
||||||
|
"op-0xxxxxxx": 1439,
|
||||||
|
"op-0xxxxxxx_0": 1401,
|
||||||
|
"op-0xxxxxxx_1": 1437,
|
||||||
|
"op-10xx0111": 1339,
|
||||||
|
"op-10xx111x": 948,
|
||||||
|
"op-10xxxxxx": 1384,
|
||||||
|
"op-11xx0111": 1436,
|
||||||
|
"op-11xx1110": 1366,
|
||||||
|
"op-11xx1111": 1393,
|
||||||
|
"op-11xxxxxx": 1327,
|
||||||
|
"op-1x001101": 1349,
|
||||||
|
"op-1x00xxxx": 1372,
|
||||||
|
"op-1x10xxxx": 1350,
|
||||||
|
"op-1x11xxxx": 1321,
|
||||||
|
"op-1xx01101": 1352,
|
||||||
|
"op-1xx0xxxx": 1371,
|
||||||
|
"op-1xxx0010": 1354,
|
||||||
|
"op-1xxx0111": 1323,
|
||||||
|
"op-1xxx10x0": 1438,
|
||||||
|
"op-1xxx10x1": 1444,
|
||||||
|
"op-1xxx1100": 1378,
|
||||||
|
"op-1xxx1100_0": 1442,
|
||||||
|
"op-1xxx1101": 1356,
|
||||||
|
"op-1xxx1101_0": 1388,
|
||||||
|
"op-1xxx1101_1": 1434,
|
||||||
|
"op-1xxx1111": 1389,
|
||||||
|
"op-1xxx11x0": 1374,
|
||||||
|
"op-1xxx11xx": 1431,
|
||||||
|
"op-1xxx11xx_0": 1353,
|
||||||
|
"op-1xxx11xx_1": 1430,
|
||||||
|
"op-1xxx11xx_2": 1392,
|
||||||
|
"op-1xxx11xx_3": 1340,
|
||||||
|
"op-1xxx11xx_4": 1373,
|
||||||
|
"op-1xxxx111": 1435,
|
||||||
|
"op-1xxxx111_0": 1348,
|
||||||
|
"op-1xxxxxxx": 846,
|
||||||
|
"op-1xxxxxxx_0": 1150,
|
||||||
|
"op-s-00000110": 1420,
|
||||||
|
"op-s-00000111": 1407,
|
||||||
|
"op-s-00001001": 1410,
|
||||||
|
"op-s-0000100x": 1417,
|
||||||
|
"op-s-0000100x_0": 1423,
|
||||||
|
"op-s-0000111x": 1001,
|
||||||
|
"op-s-00110101": 1411,
|
||||||
|
"op-s-00110110": 1413,
|
||||||
|
"op-s-00110111": 1414,
|
||||||
|
"op-s-0011011x": 1415,
|
||||||
|
"op-s-0011x1xx": 1421,
|
||||||
|
"op-s-0011xxxx": 1409,
|
||||||
|
"op-s-0x0xxxxx": 1419,
|
||||||
|
"op-s-0x0xxxxx": 1422,
|
||||||
|
"op-s-1x001101": 1412,
|
||||||
|
"op-s-1x00xxxx": 1405,
|
||||||
|
"op-s-1x01xxxx": 1418,
|
||||||
|
"op-s-1x01xxxx_0": 1402,
|
||||||
|
"op-s-1x01xxxx_1": 1416,
|
||||||
|
"op-s-xx10xxxx": 1408,
|
||||||
|
"op-s-xx10xxxx_0": 1403,
|
||||||
|
"op-s-xx11xxxx": 1404,
|
||||||
|
"op-xx11xxxx": 1357,
|
||||||
|
"op-xxx011x": 1375,
|
||||||
|
"op-xxx1xxxx": 1336,
|
||||||
|
"op-xxxx0000": 1424,
|
||||||
|
"op-xxxx000x": 1377,
|
||||||
|
"op-xxxx0010": 1344,
|
||||||
|
"op-xxxx0011": 1333,
|
||||||
|
"op-xxxx001x": 1335,
|
||||||
|
"op-xxxx00xx": 1433,
|
||||||
|
"op-xxxx00xx_0": 1367,
|
||||||
|
"op-xxxx0111": 1330,
|
||||||
|
"op-xxxx01xx": 1395,
|
||||||
|
"op-xxxx0x01": 1385,
|
||||||
|
"op-xxxx0x0x": 1324,
|
||||||
|
"op-xxxx0xxx": 1040,
|
||||||
|
"op-xxxx0xxx_0": 1351,
|
||||||
|
"op-xxxx1001": 1326,
|
||||||
|
"op-xxxx100x": 1358,
|
||||||
|
"op-xxxx10x1": 1365,
|
||||||
|
"op-xxxx10x1_0": 1429,
|
||||||
|
"op-xxxx10xx": 1325,
|
||||||
|
"op-xxxx1100": 1440,
|
||||||
|
"op-xxxx111x": 1359,
|
||||||
|
"op-xxxx111x_0": 1400,
|
||||||
|
"op-xxxx111x_1": 1368,
|
||||||
|
"op-xxxx11xx": 1329,
|
||||||
|
"op-xxxx11xx_0": 1382,
|
||||||
|
"op-xxxx1xx1": 1386,
|
||||||
|
"op-xxxx1xxx": 1397,
|
||||||
|
"op-xxxxx11x": 1376,
|
||||||
|
"op-xxxxx11x_0": 1441,
|
||||||
|
"op-xxxxx1xx": 1370,
|
||||||
|
"op-xxxxxx0x": 1041,
|
||||||
|
"op-xxxxxx1x": 1446,
|
||||||
|
"op-xxxxxxx0": 1138,
|
||||||
|
"op-xxxxxxx0_0": 1003,
|
||||||
|
"op-xxxxxxx1": 1331,
|
||||||
|
"op-xxxxxxx1_0": 11,
|
||||||
|
"op-xxxxxxx1_1": 1347,
|
||||||
|
"op-xxxxxxx1_2": 1086,
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
|
|
||||||
chipname='6800';
|
chipname='6800';
|
||||||
|
|
||||||
grChipSize=7000;
|
grChipSize=6600;
|
||||||
|
grChipOffsetX=25
|
||||||
|
grChipOffsetY=-200;
|
||||||
|
|
||||||
ngnd = nodenames['gnd'];
|
ngnd = nodenames['gnd'];
|
||||||
npwr = nodenames['vcc'];
|
npwr = nodenames['vcc'];
|
||||||
|
@ -14,10 +16,10 @@ nodenamereset = 'reset';
|
||||||
presetLogLists=[
|
presetLogLists=[
|
||||||
['cycle',],
|
['cycle',],
|
||||||
['ab','db','rw','vma','Fetch','pc','acca','accb','ix','sp','p'],
|
['ab','db','rw','vma','Fetch','pc','acca','accb','ix','sp','p'],
|
||||||
['ir','sync','Execute'], // instruction fetch and execution control
|
['ir','sync','Execute','State'], // instruction fetch and execution control
|
||||||
['dbi','dbo','tmp'], // internal state
|
['dbi','dbo','tmp','sum','inc'], // internal register-sized state
|
||||||
['idb','abh','abl','ablx'], // internal busses
|
['idb','abh','abl','ablx'], // internal datapath busses
|
||||||
['irq','nmi',nodenamereset,'tsc','dbe','halt','ba'], // other pins
|
['irq','nmi',nodenamereset,'tsc','dbe','halt','ba'], // other pins
|
||||||
];
|
];
|
||||||
|
|
||||||
function setupTransistors(){
|
function setupTransistors(){
|
||||||
|
@ -125,6 +127,33 @@ function readPstring(){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The 6800 state control is something like a branching shift register
|
||||||
|
// ... but not quite like that
|
||||||
|
TCStates=[
|
||||||
|
"Ts", "Tf",
|
||||||
|
"Tx0", "Tx1", "Tx2",
|
||||||
|
"Ta0", "Ta1", "Ta2",
|
||||||
|
"Td0_0",
|
||||||
|
"#Te0", "Te1_0",
|
||||||
|
"Tg0", "Tg1", "Tg2", "Tg3", "Tg4", "Tg5", "Tg6", "Tg7", "Tg8",
|
||||||
|
"Tr3", "Tr4", "Tr5", "Tr6", "Tr7", "Tr8",
|
||||||
|
];
|
||||||
|
|
||||||
|
function listActiveTCStates() {
|
||||||
|
var s=[];
|
||||||
|
for(var i=0;i<TCStates.length;i++){
|
||||||
|
var t=TCStates[i];
|
||||||
|
// remove a leading hash, but invert the signal
|
||||||
|
// in any case, remove any trailing suffix
|
||||||
|
if(t[0]=="#"){
|
||||||
|
if(!isNodeHigh(nodenames[t])) s.push(t.slice(1,4));
|
||||||
|
} else {
|
||||||
|
if(isNodeHigh(nodenames[t])) s.push(t.slice(0,3));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s.join("+");
|
||||||
|
}
|
||||||
|
|
||||||
function busToString(busname){
|
function busToString(busname){
|
||||||
// takes a signal name or prefix
|
// takes a signal name or prefix
|
||||||
// returns an appropriate string representation
|
// returns an appropriate string representation
|
||||||
|
@ -137,6 +166,8 @@ function busToString(busname){
|
||||||
return busToHex('sph') + busToHex('spl');
|
return busToHex('sph') + busToHex('spl');
|
||||||
if(busname=='ix')
|
if(busname=='ix')
|
||||||
return busToHex('ixh') + busToHex('ixl');
|
return busToHex('ixh') + busToHex('ixl');
|
||||||
|
if(busname=='inc')
|
||||||
|
return busToHex('inch') + busToHex('incl');
|
||||||
if(busname=='p')
|
if(busname=='p')
|
||||||
return readPstring();
|
return readPstring();
|
||||||
if(busname=='State')
|
if(busname=='State')
|
||||||
|
@ -190,7 +221,7 @@ function chipStatus(){
|
||||||
}
|
}
|
||||||
|
|
||||||
setStatus(machine1, machine2, machine3);
|
setStatus(machine1, machine2, machine3);
|
||||||
if (loglevel>0) {
|
if (logThese.length>1) {
|
||||||
updateLogbox(logThese);
|
updateLogbox(logThese);
|
||||||
}
|
}
|
||||||
selectCell(ab);
|
selectCell(ab);
|
||||||
|
|
|
@ -4,20 +4,26 @@ testprogramAddress=0x0000;
|
||||||
// we want to auto-clear the console if any output is sent by the program
|
// we want to auto-clear the console if any output is sent by the program
|
||||||
var consoleboxStream="";
|
var consoleboxStream="";
|
||||||
|
|
||||||
// for opcodes, see ftp://ftp.comlab.ox.ac.uk/pub/Cards/txt/6800.txt
|
// demonstrate write hook
|
||||||
|
writeTriggers[0x8000]="consoleboxStream += String.fromCharCode(d);"+
|
||||||
|
"consolebox.innerHTML = consoleboxStream;";
|
||||||
|
|
||||||
|
// demonstrate read hook (not used by this test program)
|
||||||
|
readTriggers[0x8004]="((consolegetc==undefined)?0:0xff)"; // return zero until we have a char
|
||||||
|
readTriggers[0x8000]="var c=consolegetc; consolegetc=undefined; (c)";
|
||||||
|
|
||||||
|
// for opcodes, see http://www.textfiles.com/programming/CARDS/6800
|
||||||
|
|
||||||
testprogram = [
|
testprogram = [
|
||||||
0xce, 0x43, 0x21, // LDX #4321
|
0xce, 0x43, 0x21, // LDX #4321
|
||||||
0x35, // TXS
|
0x35, // TXS
|
||||||
0xc6, 0xfb, // LDAB #$FB
|
0xce, 0x80, 0x00, // LDX #8000
|
||||||
|
0xc6, 0x40, // LDAB #$40
|
||||||
0xbd, 0x00, 0x10, // JSR $0010
|
0xbd, 0x00, 0x10, // JSR $0010
|
||||||
0x7e, 0x00, 0x04, // JMP $0004
|
0x7e, 0x00, 0x09, // JMP $0009
|
||||||
0x01, // NOP
|
0x01, // NOP
|
||||||
0x01, // NOP
|
|
||||||
0x01, // NOP
|
|
||||||
0x01, // NOP
|
|
||||||
0x08, // INX
|
|
||||||
0x4a, // DECA
|
0x4a, // DECA
|
||||||
|
0xe7, 0x00, // STAB 0, X
|
||||||
0x7c, 0x00, 0x0f, // INC $0F
|
0x7c, 0x00, 0x0f, // INC $0F
|
||||||
0x0d, // SEC
|
0x0d, // SEC
|
||||||
0xc9, 0x02, // ADCB #$02
|
0xc9, 0x02, // ADCB #$02
|
||||||
|
|
7599
chip-6800/transdefs.js
Normal file → Executable file
7599
chip-6800/transdefs.js
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
530
chip-z80/nodenames.js
Normal file
530
chip-z80/nodenames.js
Normal file
|
@ -0,0 +1,530 @@
|
||||||
|
// ***********************************************************
|
||||||
|
// * This file is automatically generated by Z80Simulator. *
|
||||||
|
// * Please do not manually edit! Instead, find a transistor *
|
||||||
|
// * that uses the new signal and use FindTransistor(x,y) in *
|
||||||
|
// * Z80Simulator to cause that signal to be added. *
|
||||||
|
// * This seems a pain, but it has two advantages: *
|
||||||
|
// * - all signals are then available in Z80Simulator *
|
||||||
|
// * - it avoids renumbering issues if/when the PNGs change *
|
||||||
|
// ***********************************************************
|
||||||
|
var nodenames ={
|
||||||
|
// Pads
|
||||||
|
vss: 1,
|
||||||
|
vcc: 2,
|
||||||
|
clk: 3,
|
||||||
|
ab0: 5,
|
||||||
|
ab1: 6,
|
||||||
|
ab2: 7,
|
||||||
|
ab3: 8,
|
||||||
|
ab4: 9,
|
||||||
|
ab5: 10,
|
||||||
|
ab6: 11,
|
||||||
|
ab7: 12,
|
||||||
|
ab8: 13,
|
||||||
|
ab9: 14,
|
||||||
|
ab10: 15,
|
||||||
|
ab11: 16,
|
||||||
|
ab12: 17,
|
||||||
|
ab13: 18,
|
||||||
|
ab14: 19,
|
||||||
|
ab15: 20,
|
||||||
|
_reset: 21,
|
||||||
|
_wait: 22,
|
||||||
|
wait: 22,
|
||||||
|
_int: 23,
|
||||||
|
int: 23,
|
||||||
|
_irq: 23,
|
||||||
|
irq: 23,
|
||||||
|
_nmi: 24,
|
||||||
|
nmi: 24,
|
||||||
|
_busrq: 25,
|
||||||
|
busrq: 25,
|
||||||
|
_m1: 26,
|
||||||
|
_rd: 27,
|
||||||
|
_wr: 28,
|
||||||
|
_mreq: 29,
|
||||||
|
_iorq: 30,
|
||||||
|
_rfsh: 31,
|
||||||
|
db0: 32,
|
||||||
|
db1: 33,
|
||||||
|
db2: 34,
|
||||||
|
db3: 35,
|
||||||
|
db4: 36,
|
||||||
|
db5: 37,
|
||||||
|
db6: 38,
|
||||||
|
db7: 39,
|
||||||
|
_halt: 40,
|
||||||
|
_busak: 41,
|
||||||
|
// T-States
|
||||||
|
t1: 115,
|
||||||
|
t2: 137,
|
||||||
|
t3: 144,
|
||||||
|
t4: 166,
|
||||||
|
t5: 134,
|
||||||
|
t6: 168,
|
||||||
|
// Machine cycles
|
||||||
|
m1: 155,
|
||||||
|
m2: 173,
|
||||||
|
m3: 163,
|
||||||
|
m4: 159,
|
||||||
|
m5: 209,
|
||||||
|
m6: 210,
|
||||||
|
// EXX latches
|
||||||
|
ex_af: 631,
|
||||||
|
ex_bcdehl: 1770,
|
||||||
|
ex_dehl0: 625,
|
||||||
|
ex_dehl1: 629,
|
||||||
|
ex_dehl_combined: 626,
|
||||||
|
// Registers
|
||||||
|
reg_a0: 2245,
|
||||||
|
reg_a1: 2319,
|
||||||
|
reg_a2: 2357,
|
||||||
|
reg_a3: 2442,
|
||||||
|
reg_a4: 2463,
|
||||||
|
reg_a5: 2552,
|
||||||
|
reg_a6: 2586,
|
||||||
|
reg_a7: 2656,
|
||||||
|
reg_f0: 1827,
|
||||||
|
reg_f1: 1903,
|
||||||
|
reg_f2: 1928,
|
||||||
|
reg_f3: 2009,
|
||||||
|
reg_f4: 2032,
|
||||||
|
reg_f5: 2107,
|
||||||
|
reg_f6: 2132,
|
||||||
|
reg_f7: 2209,
|
||||||
|
reg_b0: 2242,
|
||||||
|
reg_b1: 2316,
|
||||||
|
reg_b2: 2354,
|
||||||
|
reg_b3: 2439,
|
||||||
|
reg_b4: 2460,
|
||||||
|
reg_b5: 2549,
|
||||||
|
reg_b6: 2583,
|
||||||
|
reg_b7: 2653,
|
||||||
|
reg_c0: 1824,
|
||||||
|
reg_c1: 1900,
|
||||||
|
reg_c2: 1925,
|
||||||
|
reg_c3: 2006,
|
||||||
|
reg_c4: 2029,
|
||||||
|
reg_c5: 2104,
|
||||||
|
reg_c6: 2129,
|
||||||
|
reg_c7: 2206,
|
||||||
|
reg_d0: 2238,
|
||||||
|
reg_d1: 2312,
|
||||||
|
reg_d2: 2350,
|
||||||
|
reg_d3: 2435,
|
||||||
|
reg_d4: 2456,
|
||||||
|
reg_d5: 2545,
|
||||||
|
reg_d6: 2579,
|
||||||
|
reg_d7: 2649,
|
||||||
|
reg_e0: 1820,
|
||||||
|
reg_e1: 1896,
|
||||||
|
reg_e2: 1921,
|
||||||
|
reg_e3: 2002,
|
||||||
|
reg_e4: 2025,
|
||||||
|
reg_e5: 2100,
|
||||||
|
reg_e6: 2125,
|
||||||
|
reg_e7: 2202,
|
||||||
|
reg_h0: 2240,
|
||||||
|
reg_h1: 2314,
|
||||||
|
reg_h2: 2352,
|
||||||
|
reg_h3: 2437,
|
||||||
|
reg_h4: 2458,
|
||||||
|
reg_h5: 2547,
|
||||||
|
reg_h6: 2581,
|
||||||
|
reg_h7: 2651,
|
||||||
|
reg_l0: 1822,
|
||||||
|
reg_l1: 1898,
|
||||||
|
reg_l2: 1923,
|
||||||
|
reg_l3: 2004,
|
||||||
|
reg_l4: 2027,
|
||||||
|
reg_l5: 2102,
|
||||||
|
reg_l6: 2127,
|
||||||
|
reg_l7: 2204,
|
||||||
|
reg_w0: 2234,
|
||||||
|
reg_w1: 2308,
|
||||||
|
reg_w2: 2346,
|
||||||
|
reg_w3: 2431,
|
||||||
|
reg_w4: 2452,
|
||||||
|
reg_w5: 2541,
|
||||||
|
reg_w6: 2575,
|
||||||
|
reg_w7: 2645,
|
||||||
|
reg_z0: 1816,
|
||||||
|
reg_z1: 1892,
|
||||||
|
reg_z2: 1917,
|
||||||
|
reg_z3: 1998,
|
||||||
|
reg_z4: 2021,
|
||||||
|
reg_z5: 2096,
|
||||||
|
reg_z6: 2121,
|
||||||
|
reg_z7: 2198,
|
||||||
|
reg_pch0: 2232,
|
||||||
|
reg_pch1: 2306,
|
||||||
|
reg_pch2: 2344,
|
||||||
|
reg_pch3: 2429,
|
||||||
|
reg_pch4: 2450,
|
||||||
|
reg_pch5: 2539,
|
||||||
|
reg_pch6: 2573,
|
||||||
|
reg_pch7: 2643,
|
||||||
|
reg_pcl0: 1814,
|
||||||
|
reg_pcl1: 1890,
|
||||||
|
reg_pcl2: 1915,
|
||||||
|
reg_pcl3: 1996,
|
||||||
|
reg_pcl4: 2019,
|
||||||
|
reg_pcl5: 2094,
|
||||||
|
reg_pcl6: 2119,
|
||||||
|
reg_pcl7: 2196,
|
||||||
|
reg_sph0: 2235,
|
||||||
|
reg_sph1: 2309,
|
||||||
|
reg_sph2: 2347,
|
||||||
|
reg_sph3: 2432,
|
||||||
|
reg_sph4: 2453,
|
||||||
|
reg_sph5: 2542,
|
||||||
|
reg_sph6: 2576,
|
||||||
|
reg_sph7: 2646,
|
||||||
|
reg_spl0: 1817,
|
||||||
|
reg_spl1: 1893,
|
||||||
|
reg_spl2: 1918,
|
||||||
|
reg_spl3: 1999,
|
||||||
|
reg_spl4: 2022,
|
||||||
|
reg_spl5: 2097,
|
||||||
|
reg_spl6: 2122,
|
||||||
|
reg_spl7: 2199,
|
||||||
|
reg_ixh0: 2237,
|
||||||
|
reg_ixh1: 2311,
|
||||||
|
reg_ixh2: 2349,
|
||||||
|
reg_ixh3: 2434,
|
||||||
|
reg_ixh4: 2455,
|
||||||
|
reg_ixh5: 2544,
|
||||||
|
reg_ixh6: 2578,
|
||||||
|
reg_ixh7: 2648,
|
||||||
|
reg_ixl0: 1819,
|
||||||
|
reg_ixl1: 1895,
|
||||||
|
reg_ixl2: 1920,
|
||||||
|
reg_ixl3: 2001,
|
||||||
|
reg_ixl4: 2024,
|
||||||
|
reg_ixl5: 2099,
|
||||||
|
reg_ixl6: 2124,
|
||||||
|
reg_ixl7: 2201,
|
||||||
|
reg_iyh0: 2236,
|
||||||
|
reg_iyh1: 2310,
|
||||||
|
reg_iyh2: 2348,
|
||||||
|
reg_iyh3: 2433,
|
||||||
|
reg_iyh4: 2454,
|
||||||
|
reg_iyh5: 2543,
|
||||||
|
reg_iyh6: 2577,
|
||||||
|
reg_iyh7: 2647,
|
||||||
|
reg_iyl0: 1818,
|
||||||
|
reg_iyl1: 1894,
|
||||||
|
reg_iyl2: 1919,
|
||||||
|
reg_iyl3: 2000,
|
||||||
|
reg_iyl4: 2023,
|
||||||
|
reg_iyl5: 2098,
|
||||||
|
reg_iyl6: 2123,
|
||||||
|
reg_iyl7: 2200,
|
||||||
|
reg_i0: 2233,
|
||||||
|
reg_i1: 2307,
|
||||||
|
reg_i2: 2345,
|
||||||
|
reg_i3: 2430,
|
||||||
|
reg_i4: 2451,
|
||||||
|
reg_i5: 2540,
|
||||||
|
reg_i6: 2574,
|
||||||
|
reg_i7: 2644,
|
||||||
|
reg_r0: 1815,
|
||||||
|
reg_r1: 1891,
|
||||||
|
reg_r2: 1916,
|
||||||
|
reg_r3: 1997,
|
||||||
|
reg_r4: 2020,
|
||||||
|
reg_r5: 2095,
|
||||||
|
reg_r6: 2120,
|
||||||
|
reg_r7: 2197,
|
||||||
|
reg_aa0: 2244,
|
||||||
|
reg_aa1: 2318,
|
||||||
|
reg_aa2: 2356,
|
||||||
|
reg_aa3: 2441,
|
||||||
|
reg_aa4: 2462,
|
||||||
|
reg_aa5: 2551,
|
||||||
|
reg_aa6: 2585,
|
||||||
|
reg_aa7: 2655,
|
||||||
|
reg_ff0: 1826,
|
||||||
|
reg_ff1: 1902,
|
||||||
|
reg_ff2: 1927,
|
||||||
|
reg_ff3: 2008,
|
||||||
|
reg_ff4: 2031,
|
||||||
|
reg_ff5: 2106,
|
||||||
|
reg_ff6: 2131,
|
||||||
|
reg_ff7: 2208,
|
||||||
|
reg_bb0: 2243,
|
||||||
|
reg_bb1: 2317,
|
||||||
|
reg_bb2: 2355,
|
||||||
|
reg_bb3: 2440,
|
||||||
|
reg_bb4: 2461,
|
||||||
|
reg_bb5: 2550,
|
||||||
|
reg_bb6: 2584,
|
||||||
|
reg_bb7: 2654,
|
||||||
|
reg_cc0: 1825,
|
||||||
|
reg_cc1: 1901,
|
||||||
|
reg_cc2: 1926,
|
||||||
|
reg_cc3: 2007,
|
||||||
|
reg_cc4: 2030,
|
||||||
|
reg_cc5: 2105,
|
||||||
|
reg_cc6: 2130,
|
||||||
|
reg_cc7: 2207,
|
||||||
|
reg_dd0: 2239,
|
||||||
|
reg_dd1: 2313,
|
||||||
|
reg_dd2: 2351,
|
||||||
|
reg_dd3: 2436,
|
||||||
|
reg_dd4: 2457,
|
||||||
|
reg_dd5: 2546,
|
||||||
|
reg_dd6: 2580,
|
||||||
|
reg_dd7: 2650,
|
||||||
|
reg_ee0: 1821,
|
||||||
|
reg_ee1: 1897,
|
||||||
|
reg_ee2: 1922,
|
||||||
|
reg_ee3: 2003,
|
||||||
|
reg_ee4: 2026,
|
||||||
|
reg_ee5: 2101,
|
||||||
|
reg_ee6: 2126,
|
||||||
|
reg_ee7: 2203,
|
||||||
|
reg_hh0: 2241,
|
||||||
|
reg_hh1: 2315,
|
||||||
|
reg_hh2: 2353,
|
||||||
|
reg_hh3: 2438,
|
||||||
|
reg_hh4: 2459,
|
||||||
|
reg_hh5: 2548,
|
||||||
|
reg_hh6: 2582,
|
||||||
|
reg_hh7: 2652,
|
||||||
|
reg_ll0: 1823,
|
||||||
|
reg_ll1: 1899,
|
||||||
|
reg_ll2: 1924,
|
||||||
|
reg_ll3: 2005,
|
||||||
|
reg_ll4: 2028,
|
||||||
|
reg_ll5: 2103,
|
||||||
|
reg_ll6: 2128,
|
||||||
|
reg_ll7: 2205,
|
||||||
|
// Data buses and control
|
||||||
|
dp_dl: 82,
|
||||||
|
dl_dp: 165,
|
||||||
|
load_ir: 1354,
|
||||||
|
dlatch0: 123,
|
||||||
|
dlatch1: 195,
|
||||||
|
dlatch2: 414,
|
||||||
|
dlatch3: 930,
|
||||||
|
dlatch4: 1000,
|
||||||
|
dlatch5: 872,
|
||||||
|
dlatch6: 751,
|
||||||
|
dlatch7: 358,
|
||||||
|
dl_d: 87,
|
||||||
|
d_dl: 133,
|
||||||
|
dbus0: 138,
|
||||||
|
dbus1: 196,
|
||||||
|
dbus2: 412,
|
||||||
|
dbus3: 480,
|
||||||
|
dbus4: 485,
|
||||||
|
dbus5: 486,
|
||||||
|
dbus6: 380,
|
||||||
|
dbus7: 370,
|
||||||
|
_instr0: 1350,
|
||||||
|
_instr1: 1360,
|
||||||
|
_instr2: 1366,
|
||||||
|
_instr3: 1380,
|
||||||
|
_instr4: 1388,
|
||||||
|
_instr5: 1395,
|
||||||
|
_instr6: 1370,
|
||||||
|
_instr7: 1375,
|
||||||
|
instr0: 1348,
|
||||||
|
instr1: 1359,
|
||||||
|
instr2: 1365,
|
||||||
|
instr3: 1379,
|
||||||
|
instr4: 1387,
|
||||||
|
instr5: 1394,
|
||||||
|
instr6: 1369,
|
||||||
|
instr7: 1374,
|
||||||
|
d_u: 546,
|
||||||
|
ubus0: 545,
|
||||||
|
ubus1: 528,
|
||||||
|
ubus2: 526,
|
||||||
|
ubus3: 770,
|
||||||
|
ubus4: 779,
|
||||||
|
ubus5: 790,
|
||||||
|
ubus6: 716,
|
||||||
|
ubus7: 525,
|
||||||
|
u_v: 750,
|
||||||
|
vbus0: 755,
|
||||||
|
vbus1: 772,
|
||||||
|
vbus2: 783,
|
||||||
|
vbus3: 796,
|
||||||
|
vbus4: 803,
|
||||||
|
vbus5: 808,
|
||||||
|
vbus6: 836,
|
||||||
|
vbus7: 839,
|
||||||
|
rl_wr: 678,
|
||||||
|
rh_wr: 652,
|
||||||
|
r_u: 692,
|
||||||
|
r_v: 693,
|
||||||
|
regbit0: 702,
|
||||||
|
regbit1: 732,
|
||||||
|
regbit2: 738,
|
||||||
|
regbit3: 775,
|
||||||
|
regbit4: 776,
|
||||||
|
regbit5: 807,
|
||||||
|
regbit6: 809,
|
||||||
|
regbit7: 864,
|
||||||
|
regbit8: 870,
|
||||||
|
regbit9: 902,
|
||||||
|
regbit10: 906,
|
||||||
|
regbit11: 934,
|
||||||
|
regbit12: 935,
|
||||||
|
regbit13: 970,
|
||||||
|
regbit14: 973,
|
||||||
|
regbit15: 999,
|
||||||
|
r_p: 1785,
|
||||||
|
r_x1: 608,
|
||||||
|
pcbit0: 703,
|
||||||
|
pcbit1: 731,
|
||||||
|
pcbit2: 739,
|
||||||
|
pcbit3: 774,
|
||||||
|
pcbit4: 777,
|
||||||
|
pcbit5: 806,
|
||||||
|
pcbit6: 810,
|
||||||
|
pcbit7: 863,
|
||||||
|
pcbit8: 871,
|
||||||
|
pcbit9: 901,
|
||||||
|
pcbit10: 907,
|
||||||
|
pcbit11: 933,
|
||||||
|
pcbit12: 936,
|
||||||
|
pcbit13: 969,
|
||||||
|
pcbit14: 974,
|
||||||
|
pcbit15: 998,
|
||||||
|
// ALU
|
||||||
|
alubus0: 837,
|
||||||
|
alubus1: 889,
|
||||||
|
alubus2: 937,
|
||||||
|
alubus3: 983,
|
||||||
|
alubus4: 852,
|
||||||
|
alubus5: 903,
|
||||||
|
alubus6: 951,
|
||||||
|
alubus7: 995,
|
||||||
|
alua0: 850,
|
||||||
|
alua1: 899,
|
||||||
|
alua2: 947,
|
||||||
|
alua3: 993,
|
||||||
|
alua4: 868,
|
||||||
|
alua5: 920,
|
||||||
|
alua6: 968,
|
||||||
|
alua7: 1007,
|
||||||
|
alub0: 845,
|
||||||
|
alub1: 897,
|
||||||
|
alub2: 944,
|
||||||
|
alub3: 988,
|
||||||
|
alub4: 867,
|
||||||
|
alub5: 918,
|
||||||
|
alub6: 966,
|
||||||
|
alub7: 1005,
|
||||||
|
aluout0: 2211,
|
||||||
|
aluout1: 2338,
|
||||||
|
aluout2: 2504,
|
||||||
|
aluout3: 816,
|
||||||
|
alulat0: 865,
|
||||||
|
alulat1: 912,
|
||||||
|
alulat2: 960,
|
||||||
|
alulat3: 1002,
|
||||||
|
// PLA
|
||||||
|
pla0: 287,
|
||||||
|
pla1: 332,
|
||||||
|
pla2: 314,
|
||||||
|
pla3: 333,
|
||||||
|
pla4: 315,
|
||||||
|
pla5: 334,
|
||||||
|
pla6: 316,
|
||||||
|
pla7: 335,
|
||||||
|
pla8: 317,
|
||||||
|
pla9: 336,
|
||||||
|
pla10: 318,
|
||||||
|
pla11: 361,
|
||||||
|
pla12: 261,
|
||||||
|
pla13: 337,
|
||||||
|
pla14: 319,
|
||||||
|
pla15: 464,
|
||||||
|
pla16: 288,
|
||||||
|
pla17: 338,
|
||||||
|
pla18: 320,
|
||||||
|
pla19: 364,
|
||||||
|
pla20: 325,
|
||||||
|
pla21: 324,
|
||||||
|
pla22: 308,
|
||||||
|
pla23: 289,
|
||||||
|
pla24: 339,
|
||||||
|
pla25: 313,
|
||||||
|
pla26: 340,
|
||||||
|
pla27: 290,
|
||||||
|
pla28: 341,
|
||||||
|
pla29: 291,
|
||||||
|
pla30: 342,
|
||||||
|
pla31: 292,
|
||||||
|
pla32: 365,
|
||||||
|
pla33: 293,
|
||||||
|
pla34: 362,
|
||||||
|
pla35: 294,
|
||||||
|
pla36: 331,
|
||||||
|
pla37: 293,
|
||||||
|
pla38: 343,
|
||||||
|
pla39: 296,
|
||||||
|
pla40: 297,
|
||||||
|
pla41: 298,
|
||||||
|
pla42: 344,
|
||||||
|
pla43: 299,
|
||||||
|
pla44: 269,
|
||||||
|
pla45: 300,
|
||||||
|
pla46: 237,
|
||||||
|
pla47: 301,
|
||||||
|
pla48: 345,
|
||||||
|
pla49: 302,
|
||||||
|
pla50: 346,
|
||||||
|
pla51: 264,
|
||||||
|
pla52: 266,
|
||||||
|
pla53: 347,
|
||||||
|
pla54: 303,
|
||||||
|
pla55: 356,
|
||||||
|
pla56: 227,
|
||||||
|
pla57: 366,
|
||||||
|
pla58: 304,
|
||||||
|
pla59: 305,
|
||||||
|
pla60: 271,
|
||||||
|
pla61: 348,
|
||||||
|
pla62: 306,
|
||||||
|
pla63: 309,
|
||||||
|
pla64: 311,
|
||||||
|
pla65: 312,
|
||||||
|
pla66: 307,
|
||||||
|
pla67: 367,
|
||||||
|
pla68: 272,
|
||||||
|
pla69: 349,
|
||||||
|
pla70: 273,
|
||||||
|
pla71: 350,
|
||||||
|
pla72: 274,
|
||||||
|
pla73: 351,
|
||||||
|
pla74: 275,
|
||||||
|
pla75: 276,
|
||||||
|
pla76: 268,
|
||||||
|
pla77: 352,
|
||||||
|
pla78: 277,
|
||||||
|
pla79: 278,
|
||||||
|
pla80: 279,
|
||||||
|
pla81: 280,
|
||||||
|
pla82: 368,
|
||||||
|
pla83: 281,
|
||||||
|
pla84: 282,
|
||||||
|
pla85: 283,
|
||||||
|
pla86: 284,
|
||||||
|
pla87: 285,
|
||||||
|
pla88: 286,
|
||||||
|
pla89: 321,
|
||||||
|
pla90: 353,
|
||||||
|
pla91: 322,
|
||||||
|
pla92: 354,
|
||||||
|
pla93: 323,
|
||||||
|
pla94: 369,
|
||||||
|
pla95: 258,
|
||||||
|
pla96: 249,
|
||||||
|
pla97: 245,
|
||||||
|
pla98: 355,
|
||||||
|
}
|
14606
chip-z80/segdefs.js
Normal file
14606
chip-z80/segdefs.js
Normal file
File diff suppressed because one or more lines are too long
2570
chip-z80/support.js
Normal file
2570
chip-z80/support.js
Normal file
File diff suppressed because it is too large
Load Diff
73
chip-z80/testprogram.js
Normal file
73
chip-z80/testprogram.js
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
// This file testprogram.js can be substituted by one of several tests
|
||||||
|
testprogramAddress=0x0000;
|
||||||
|
|
||||||
|
// we want to auto-clear the console if any output is sent by the program
|
||||||
|
var consoleboxStream="";
|
||||||
|
|
||||||
|
// demonstrate write hook
|
||||||
|
writeTriggers[0x8000]="consoleboxStream += String.fromCharCode(d);"+
|
||||||
|
"consolebox.innerHTML = consoleboxStream;";
|
||||||
|
|
||||||
|
// demonstrate read hook (not used by this test program)
|
||||||
|
readTriggers[0x8004]="((consolegetc==undefined)?0:0xff)"; // return zero until we have a char
|
||||||
|
readTriggers[0x8000]="var c=consolegetc; consolegetc=undefined; (c)";
|
||||||
|
|
||||||
|
// for opcodes, see http://www.textfiles.com/programming/CARDS/6800
|
||||||
|
|
||||||
|
testprogram = [
|
||||||
|
0x00, // NOP
|
||||||
|
0x31, 0x00, 0x01, // LD SP,0x0100
|
||||||
|
0xCD, 0x0B, 0x00, // CALL $000B
|
||||||
|
0x00, // NOP
|
||||||
|
0x21, 0x78, 0x56, // LD HL,$5678
|
||||||
|
0x21, 0x34, 0x12, // LD HL,$1234
|
||||||
|
0xe5, // PUSH HL
|
||||||
|
0x00, // NOP
|
||||||
|
0x00, // NOP
|
||||||
|
0x3C, // INC A
|
||||||
|
0x04, // INC B
|
||||||
|
0x15, // DEC D
|
||||||
|
0x24, // INC H
|
||||||
|
0xEB, // EXX DE,HL
|
||||||
|
0x00, // NOP
|
||||||
|
0x3C, // INC A
|
||||||
|
0x04, // INC B
|
||||||
|
0x15, // DEC D
|
||||||
|
0x24, // INC H
|
||||||
|
0xD9, // EXX
|
||||||
|
0x00, // NOP
|
||||||
|
0x3C, // INC A
|
||||||
|
0x04, // INC B
|
||||||
|
0x15, // DEC D
|
||||||
|
0x24, // INC H
|
||||||
|
0xEB, // EXX DE,HL
|
||||||
|
0x00, // NOP
|
||||||
|
0x3C, // INC A
|
||||||
|
0x04, // INC B
|
||||||
|
0x15, // DEC D
|
||||||
|
0x24, // INC H
|
||||||
|
0x08, // EXX AF,AF'
|
||||||
|
0x00, // NOP
|
||||||
|
0x3C, // INC A
|
||||||
|
0x04, // INC B
|
||||||
|
0x15, // DEC D
|
||||||
|
0x24, // INC H
|
||||||
|
0x00, // NOP
|
||||||
|
0x00, // NOP
|
||||||
|
0x00, // NOP
|
||||||
|
0x21, 0x00, 0x01, // LD HL,$0100
|
||||||
|
0x36, 0xCC, // LD (HL),$CC
|
||||||
|
0x00, // NOP
|
||||||
|
0x7E, // LD A, (HL)
|
||||||
|
0x00, // NOP
|
||||||
|
// Pavel's original test program
|
||||||
|
0x21, 0x34, 0x12, // LD HL,$1234
|
||||||
|
0x31, 0xfe, 0xdc, // LD SP,0xDCFE
|
||||||
|
0xe5, // PUSH HL
|
||||||
|
0x21, 0x78, 0x56, // LD HL,$5678
|
||||||
|
0xe3, // EX (SP),HL
|
||||||
|
0xdd, 0x21, 0xbc,0x9a, // LD IX, 0x9ABC
|
||||||
|
0xdd, 0xe3, // EX (SP),IX
|
||||||
|
0x76, // HALT
|
||||||
|
0x00 // NOP
|
||||||
|
]
|
6815
chip-z80/transdefs.js
Executable file
6815
chip-z80/transdefs.js
Executable file
File diff suppressed because it is too large
Load Diff
12
chipsim.js
12
chipsim.js
|
@ -143,14 +143,22 @@ function saveString(name, str){
|
||||||
|
|
||||||
function allNodes(){
|
function allNodes(){
|
||||||
var res = new Array();
|
var res = new Array();
|
||||||
for(var i in nodes) if((i!=npwr)&&(i!=ngnd)) res.push(i);
|
var ii = 0;
|
||||||
|
for(var i in nodes) {
|
||||||
|
// Don't feed numeric strings to recalcNodeList(). Numeric
|
||||||
|
// strings can cause a (data dependent) duplicate node number
|
||||||
|
// hiccup when accumulating a node group's list, ie:
|
||||||
|
// group => [ "49", 483, 49 ]
|
||||||
|
ii = Number( i );
|
||||||
|
if((ii!=npwr)&&(ii!=ngnd)) res.push(ii);
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
function stateString(){
|
function stateString(){
|
||||||
var codes = ['l','h'];
|
var codes = ['l','h'];
|
||||||
var res = '';
|
var res = '';
|
||||||
for(var i=0;i<1725;i++){
|
for(var i=0;i<nodes.length;i++){
|
||||||
var n = nodes[i];
|
var n = nodes[i];
|
||||||
if(n==undefined) res+='x';
|
if(n==undefined) res+='x';
|
||||||
else if(i==ngnd) res+='g';
|
else if(i==ngnd) res+='g';
|
||||||
|
|
|
@ -57,7 +57,7 @@ $().ready(function(){
|
||||||
<a href="http://blog.visual6502.org">Blog</a>
|
<a href="http://blog.visual6502.org">Blog</a>
|
||||||
<a href="http://www.visual6502.org/links.html">Links</a>
|
<a href="http://www.visual6502.org/links.html">Links</a>
|
||||||
<a href="http://github.com/trebonian/visual6502">Source</a>
|
<a href="http://github.com/trebonian/visual6502">Source</a>
|
||||||
<a href="ftp://ftp.comlab.ox.ac.uk/pub/Cards/txt/6800.txt">6800 instruction card</a>
|
<a href="http://www.textfiles.com/programming/CARDS/6800">6800 instruction card</a>
|
||||||
<a href="http://www.sbprojects.com/sbasm/6800.htm#model">programming model</a>
|
<a href="http://www.sbprojects.com/sbasm/6800.htm#model">programming model</a>
|
||||||
</span>
|
</span>
|
||||||
<div class="frame" id="frame">
|
<div class="frame" id="frame">
|
||||||
|
|
7306
expert-allinone.js
7306
expert-allinone.js
File diff suppressed because one or more lines are too long
151
expert-z80.html
Normal file
151
expert-z80.html
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Visual Z80 in JavaScript</title>
|
||||||
|
<style type="text/css">@import "expert.css";</style>
|
||||||
|
<script src="chip-z80/segdefs.js"></script>
|
||||||
|
<script src="chip-z80/transdefs.js"></script>
|
||||||
|
<script src="chip-z80/nodenames.js"></script>
|
||||||
|
<script src="wires.js"></script>
|
||||||
|
<script src="expertWires.js"></script>
|
||||||
|
<script src="chipsim.js"></script>
|
||||||
|
<script src="memtable.js"></script>
|
||||||
|
<script src="macros.js"></script>
|
||||||
|
<script src="chip-z80/support.js"></script>
|
||||||
|
<script src="chip-z80/testprogram.js"></script>
|
||||||
|
<script src="3rdparty/jquery-1.3.2.min.js"></script>
|
||||||
|
<script src="3rdparty/jquery.cookie.js"></script>
|
||||||
|
<script src="3rdparty/splitter.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function handleOnload() {
|
||||||
|
/MSIE (\d+\.\d+);/.test(navigator.appVersion);
|
||||||
|
IEVersion=Number(RegExp.$1);
|
||||||
|
if((navigator.appName == 'Microsoft Internet Explorer') && (IEVersion<9)){
|
||||||
|
document.getElementById('browsertrouble').innerHTML=
|
||||||
|
'<p>Sorry, '+navigator.appName+' not supported - showing you a picture instead!</p>';
|
||||||
|
document.getElementById('frame').innerHTML='<a href="browsertrouble.html"><img src="images/jssim2.png" style="border:10px"></a>';
|
||||||
|
}else{
|
||||||
|
setTimeout(setup,200);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// initialise splitter (built on jquery)
|
||||||
|
$().ready(function(){
|
||||||
|
$("#frame").splitter({
|
||||||
|
type: "v",
|
||||||
|
outline: true,
|
||||||
|
minLeft: 20,
|
||||||
|
sizeLeft: 810,
|
||||||
|
resizeToWidth: true,
|
||||||
|
anchorToWindow: true,
|
||||||
|
});
|
||||||
|
$("#rightcolumn").splitter({
|
||||||
|
type: "h",
|
||||||
|
outline: true,
|
||||||
|
sizeBottom: 180,
|
||||||
|
minTop: 100,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="handleOnload();">
|
||||||
|
<span id="plain">
|
||||||
|
<a href="http://www.visual6502.org/faq.html">FAQ</a>
|
||||||
|
<a href="http://blog.visual6502.org">Blog</a>
|
||||||
|
<a href="http://www.visual6502.org/links.html">Links</a>
|
||||||
|
<a href="http://github.com/trebonian/visual6502">Source</a>
|
||||||
|
</span>
|
||||||
|
<div class="frame" id="frame">
|
||||||
|
<div class="leftcolumn" id="leftcolumn">
|
||||||
|
<div id="chipsurround" tabindex="1">
|
||||||
|
<div class="chip" id="chip">
|
||||||
|
<span id="waiting">Please wait, graphics initialising...</span>
|
||||||
|
<canvas class="chip" id="chipbg"></canvas>
|
||||||
|
<canvas class="chip" id="overlay"></canvas>
|
||||||
|
<canvas class="chip" id="hilite"></canvas>
|
||||||
|
<canvas class="chip" id="hitbuffer"></canvas>
|
||||||
|
</div>
|
||||||
|
</div> <!-- chipsurround -->
|
||||||
|
<div class="nochip" id="nochip">
|
||||||
|
<form>
|
||||||
|
<input type="button" value="Show chip layout" onclick="updateChipLayoutVisibility(true)" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div id="layoutControlPanel">
|
||||||
|
Use 'z' or '>' to zoom in, 'x' or '<' to zoom out, click to probe signals and drag to pan.
|
||||||
|
<form id="updateShow"> Show:
|
||||||
|
<input type="checkbox" name="1" id="updateShow1" onchange="updateShow(this.name,this.checked)" />(diffusion)
|
||||||
|
<input type="checkbox" name="3" id="updateShow3" onchange="updateShow(this.name,this.checked)" />(grounded diffusion)
|
||||||
|
<input type="checkbox" name="4" id="updateShow4" onchange="updateShow(this.name,this.checked)" />(powered diffusion)
|
||||||
|
<input type="checkbox" name="5" id="updateShow5" onchange="updateShow(this.name,this.checked)" />(polysilicon)
|
||||||
|
<input type="checkbox" name="0" id="updateShow0" onchange="updateShow(this.name,this.checked)" />(metal)
|
||||||
|
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(protection)
|
||||||
|
</form>
|
||||||
|
<form action="javascript:hiliteNodeList();">
|
||||||
|
<input type="button" value="Find:" onclick="hiliteNodeList();" />
|
||||||
|
<input type="text" id="HighlightThese" name="HighlightThese" value="" />
|
||||||
|
<input type="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
||||||
|
<span class="animatebox">
|
||||||
|
Animate during simulation:
|
||||||
|
<input type="checkbox" id="animateModeCheckbox" onchange="updateChipLayoutAnimation(this.checked)"
|
||||||
|
/></span>
|
||||||
|
</form>
|
||||||
|
<form>
|
||||||
|
<input type="button" value="Hide Chip Layout" onclick="updateChipLayoutVisibility(false)" />
|
||||||
|
<a href="" id="linkHere" >Link to this location</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div> <!-- closing leftcolumn -->
|
||||||
|
<div class="rightcolumn" id="rightcolumn">
|
||||||
|
<div id="righttopdiv">
|
||||||
|
<div class = "buttons">
|
||||||
|
<div class="twobuttons">
|
||||||
|
<a href ="javascript:stopChip()" id="stop"><img class="navstop" src="images/stop.png" title="stop"></a>
|
||||||
|
<a href ="javascript:runChip()" id="start"><img class="navplay" src="images/play.png" title="run"></a>
|
||||||
|
</div>
|
||||||
|
<div class="morebuttons">
|
||||||
|
<a href ="javascript:resetChip()"><img class="navbutton" src="images/up.png" title="reset"></a>
|
||||||
|
<a href ="javascript:stepBack()"><img class="navbutton" src="images/prev.png" title="back"></a>
|
||||||
|
<a href ="javascript:stepForward()"><img class="navbutton" src="images/next.png" title="forward"></a>
|
||||||
|
<a href ="javascript:goUntilSyncOrWrite()"><img class="navbutton" src="images/singlestep.png" title="step"></a>
|
||||||
|
<a href ="javascript:goFor()"><img class="navbutton" src="images/fastforward.png" title="fastforward"></a>
|
||||||
|
</div>
|
||||||
|
<div style="float:right;">
|
||||||
|
<a href="http://visual6502.org/wiki/index.php?title=JssimUserHelp" target="_blank">User Guide</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div> <!-- buttons -->
|
||||||
|
<div class="status" id="status"><p>x: 0<br>y: 0</p>
|
||||||
|
</div> <!-- status -->
|
||||||
|
|
||||||
|
<div id="memtablediv">
|
||||||
|
<table class="memtable" id="memtable" tabindex="2"></table>
|
||||||
|
</div>
|
||||||
|
</div> <!-- righttopdiv -->
|
||||||
|
|
||||||
|
<div id="tracingdiv">
|
||||||
|
<textarea id="consolebox">
|
||||||
|
click here and type if your program handles input
|
||||||
|
</textarea>
|
||||||
|
<div id="expertControlPanel" tabindex="3">
|
||||||
|
<form action="javascript:updateLogList()">
|
||||||
|
<input type="button" value="Trace more" onclick="updateLoglevel(++loglevel)" />
|
||||||
|
<input type="button" value="Trace less" onclick="updateLoglevel(--loglevel)" />
|
||||||
|
<input type="button" value="Trace these too:" onclick="updateLogList()" />
|
||||||
|
<input type="text" id="LogThese" name="LogThese" value="" />
|
||||||
|
<input type="button" value="Log Up/Down" onclick="updateLogDirection();" />
|
||||||
|
<input type="button" value="Clear Log" onclick="updateLoglevel(loglevel)" />
|
||||||
|
</form>
|
||||||
|
<br />
|
||||||
|
</div>
|
||||||
|
<div id="logstreamscroller">
|
||||||
|
<table class="logstream" id="logstream"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div> <!-- closing rightcolumn -->
|
||||||
|
</div> <!-- closing 'frame' div -->
|
||||||
|
</body>
|
||||||
|
</html>
|
22
expert.html
22
expert.html
|
@ -56,8 +56,8 @@ $().ready(function(){
|
||||||
<a href="http://blog.visual6502.org">Blog</a>
|
<a href="http://blog.visual6502.org">Blog</a>
|
||||||
<a href="http://www.visual6502.org/links.html">Links</a>
|
<a href="http://www.visual6502.org/links.html">Links</a>
|
||||||
<a href="http://github.com/trebonian/visual6502">Source</a>
|
<a href="http://github.com/trebonian/visual6502">Source</a>
|
||||||
<a href="http://www.6502asm.com/">6502asm assembler</a>
|
<a href="http://skilldrick.github.io/easy6502/#first-program">easy6502 assembler</a>
|
||||||
<a href="http://www.e-tradition.net/bytes/6502/disassembler.html">e-tradition disassembler</a>
|
<a href="http://www.masswerk.at/6502/disassembler.html">mass:werk disassembler</a>
|
||||||
</span>
|
</span>
|
||||||
<div class="frame" id="frame">
|
<div class="frame" id="frame">
|
||||||
<div class="leftcolumn" id="leftcolumn">
|
<div class="leftcolumn" id="leftcolumn">
|
||||||
|
@ -76,21 +76,21 @@ $().ready(function(){
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div id="layoutControlPanel">
|
<div id="layoutControlPanel">
|
||||||
Use 'z' or '>' to zoom in, 'x' or '<' to zoom out, click to probe signals and drag to pan.
|
Use 'z' or '>' to zoom in, 'x' or '<' to zoom out, click to probe signals and drag to pan.
|
||||||
<form id="updateShow"> Show:
|
<form id="updateShow"> Show:
|
||||||
<input type="checkbox" name="1" id="updateShow1" onchange="updateShow(this.name,this.checked)" />(diffusion)
|
<input type="checkbox" name="1" id="updateShow1" onchange="updateShow(this.name,this.checked)" /><label for="updateShow1">(diffusion)</label>
|
||||||
<input type="checkbox" name="3" id="updateShow3" onchange="updateShow(this.name,this.checked)" />(grounded diffusion)
|
<input type="checkbox" name="3" id="updateShow3" onchange="updateShow(this.name,this.checked)" /><label for="updateShow3">(grounded diffusion)</label>
|
||||||
<input type="checkbox" name="4" id="updateShow4" onchange="updateShow(this.name,this.checked)" />(powered diffusion)
|
<input type="checkbox" name="4" id="updateShow4" onchange="updateShow(this.name,this.checked)" /><label for="updateShow4">(powered diffusion)</label>
|
||||||
<input type="checkbox" name="5" id="updateShow5" onchange="updateShow(this.name,this.checked)" />(polysilicon)
|
<input type="checkbox" name="5" id="updateShow5" onchange="updateShow(this.name,this.checked)" /><label for="updateShow5">(polysilicon)</label>
|
||||||
<input type="checkbox" name="0" id="updateShow0" onchange="updateShow(this.name,this.checked)" />(metal)
|
<input type="checkbox" name="0" id="updateShow0" onchange="updateShow(this.name,this.checked)" /><label for="updateShow0">(metal)</label>
|
||||||
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(protection)
|
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" /><label for="updateShow2">(protection)</label>
|
||||||
</form>
|
</form>
|
||||||
<form action="javascript:hiliteNodeList();">
|
<form action="javascript:hiliteNodeList();">
|
||||||
<input type="button" value="Find:" onclick="hiliteNodeList();" />
|
<input type="button" value="Find:" onclick="hiliteNodeList();" />
|
||||||
<input type="text" id="HighlightThese" name="HighlightThese" value="" />
|
<input type="text" id="HighlightThese" name="HighlightThese" value="" />
|
||||||
<input type="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
<input type="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
||||||
<span class="animatebox">
|
<span class="animatebox">
|
||||||
Animate during simulation:
|
<label for="animateModeCheckbox">Animate during simulation:</label>
|
||||||
<input type="checkbox" id="animateModeCheckbox" onchange="updateChipLayoutAnimation(this.checked)"
|
<input type="checkbox" id="animateModeCheckbox" onchange="updateChipLayoutAnimation(this.checked)"
|
||||||
/></span>
|
/></span>
|
||||||
</form>
|
</form>
|
||||||
|
@ -115,7 +115,7 @@ $().ready(function(){
|
||||||
<a href ="javascript:goFor()"><img class="navbutton" src="images/fastforward.png" title="fastforward"></a>
|
<a href ="javascript:goFor()"><img class="navbutton" src="images/fastforward.png" title="fastforward"></a>
|
||||||
</div>
|
</div>
|
||||||
<div style="float:right;">
|
<div style="float:right;">
|
||||||
<a href="http://visual6502.org/wiki/index.php?title=JssimUserHelp" target="_blank">User Guide</a>
|
<a href="https://web.archive.org/web/20210608195625/http://visual6502.org/wiki/index.php?title=JssimUserHelp" target="_blank">User Guide</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- buttons -->
|
</div> <!-- buttons -->
|
||||||
|
|
|
@ -37,12 +37,14 @@ var labelThese=[];
|
||||||
// overlay - a red/white transparency to show logic high or low
|
// overlay - a red/white transparency to show logic high or low
|
||||||
// hilite - to show the selected polygon
|
// hilite - to show the selected polygon
|
||||||
// hitbuffer - abusing color values to return which polygon is under a point
|
// hitbuffer - abusing color values to return which polygon is under a point
|
||||||
// we no longer use a scaling transform - we now scale the chip data at
|
// we no longer use a scaling transform - we now scale the chip data at
|
||||||
// the point of drawing line segments
|
// the point of drawing line segments
|
||||||
// if the canvas is any smaller than chip coordinates there will be
|
// if the canvas is any smaller than chip coordinates there will be
|
||||||
// rounding artifacts, and at high zoom there will be anti-aliasing on edges.
|
// rounding artifacts, and at high zoom there will be anti-aliasing on edges.
|
||||||
var grMaxZoom=12;
|
var grMaxZoom=12;
|
||||||
var grChipSize=10000;
|
var grChipSize=10000;
|
||||||
|
var grChipOffsetX=400;
|
||||||
|
var grChipOffsetY=0;
|
||||||
var grCanvasSize=2000;
|
var grCanvasSize=2000;
|
||||||
var grLineWidth=1;
|
var grLineWidth=1;
|
||||||
|
|
||||||
|
@ -51,7 +53,7 @@ var layernames = ['metal', 'switched diffusion', 'inputdiode', 'grounded diffusi
|
||||||
var colors = ['rgba(128,128,192,0.4)','#FFFF00','#FF00FF','#4DFF4D',
|
var colors = ['rgba(128,128,192,0.4)','#FFFF00','#FF00FF','#4DFF4D',
|
||||||
'#FF4D4D','#801AC0','rgba(128,0,255,0.75)'];
|
'#FF4D4D','#801AC0','rgba(128,0,255,0.75)'];
|
||||||
var drawlayers = [true, true, true, true, true, true];
|
var drawlayers = [true, true, true, true, true, true];
|
||||||
|
|
||||||
// some modes and parameters which can be passed in from the URL query
|
// some modes and parameters which can be passed in from the URL query
|
||||||
var moveHereFirst;
|
var moveHereFirst;
|
||||||
var expertMode=true;
|
var expertMode=true;
|
||||||
|
@ -210,6 +212,24 @@ function setupParams(){
|
||||||
clockTriggers[value]=[clockTriggers[value],"setLow('rdy');"].join("");
|
clockTriggers[value]=[clockTriggers[value],"setLow('rdy');"].join("");
|
||||||
} else if(name=="rdy1" && parseInt(value)!=NaN){
|
} else if(name=="rdy1" && parseInt(value)!=NaN){
|
||||||
clockTriggers[value]=[clockTriggers[value],"setHigh('rdy');"].join("");
|
clockTriggers[value]=[clockTriggers[value],"setHigh('rdy');"].join("");
|
||||||
|
} else if(name=="so0" && parseInt(value)!=NaN){
|
||||||
|
clockTriggers[value]=[clockTriggers[value],"setLow('so');"].join("");
|
||||||
|
} else if(name=="so1" && parseInt(value)!=NaN){
|
||||||
|
clockTriggers[value]=[clockTriggers[value],"setHigh('so');"].join("");
|
||||||
|
// Some Z80 inputs - we can refactor if this becomes unwieldy
|
||||||
|
} else if(name=="int0" && parseInt(value)!=NaN){
|
||||||
|
clockTriggers[value]=[clockTriggers[value],"setLow('int');"].join("");
|
||||||
|
} else if(name=="int1" && parseInt(value)!=NaN){
|
||||||
|
clockTriggers[value]=[clockTriggers[value],"setHigh('int');"].join("");
|
||||||
|
} else if(name=="wait0" && parseInt(value)!=NaN){
|
||||||
|
clockTriggers[value]=[clockTriggers[value],"setLow('wait');"].join("");
|
||||||
|
} else if(name=="wait1" && parseInt(value)!=NaN){
|
||||||
|
clockTriggers[value]=[clockTriggers[value],"setHigh('wait');"].join("");
|
||||||
|
} else if(name=="busrq0" && parseInt(value)!=NaN){
|
||||||
|
clockTriggers[value]=[clockTriggers[value],"setLow('busrq');"].join("");
|
||||||
|
} else if(name=="busrq1" && parseInt(value)!=NaN){
|
||||||
|
clockTriggers[value]=[clockTriggers[value],"setHigh('busrq');"].join("");
|
||||||
|
//
|
||||||
} else if(name=="time" && parseInt(value)!=NaN){
|
} else if(name=="time" && parseInt(value)!=NaN){
|
||||||
eventTime=value;
|
eventTime=value;
|
||||||
} else if(name=="databus" && parseInt(value)!=NaN){
|
} else if(name=="databus" && parseInt(value)!=NaN){
|
||||||
|
@ -257,13 +277,22 @@ function handleKey(e){
|
||||||
else if(c=='p') stepBack();
|
else if(c=='p') stepBack();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handler for zoom in/out using the mouse wheel
|
||||||
|
function handleWheelZoom(e){
|
||||||
|
chipsurround.focus();
|
||||||
|
e.preventDefault();
|
||||||
|
var n = e.deltaY / 100;
|
||||||
|
if(n>0 && zoom>1) setZoom(zoom/1.2);
|
||||||
|
if(n<0 && zoom<grMaxZoom) setZoom(zoom*1.2);
|
||||||
|
}
|
||||||
|
|
||||||
// handler for mousedown events over chip display
|
// handler for mousedown events over chip display
|
||||||
// must handle click-to-select (and focus), and drag to pan
|
// must handle click-to-select (and focus), and drag to pan
|
||||||
function mouseDown(e){
|
function mouseDown(e){
|
||||||
chipsurround.focus();
|
chipsurround.focus();
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
moved=false;
|
moved=false;
|
||||||
dragMouseX = e.clientX;
|
dragMouseX = e.clientX;
|
||||||
dragMouseY = e.clientY;
|
dragMouseY = e.clientY;
|
||||||
chipsurround.onmousemove = function(e){mouseMove(e)};
|
chipsurround.onmousemove = function(e){mouseMove(e)};
|
||||||
chipsurround.onmouseup = function(e){mouseUp(e)};
|
chipsurround.onmouseup = function(e){mouseUp(e)};
|
||||||
|
@ -286,7 +315,7 @@ function mouseMove(e){
|
||||||
}
|
}
|
||||||
|
|
||||||
function mouseUp(e){
|
function mouseUp(e){
|
||||||
if(!moved) handleClick(e);
|
if(!moved) handleClick(e);
|
||||||
chipsurround.onmousemove = undefined;
|
chipsurround.onmousemove = undefined;
|
||||||
chipsurround.onmouseup = undefined;
|
chipsurround.onmouseup = undefined;
|
||||||
}
|
}
|
||||||
|
@ -330,8 +359,8 @@ function updateLinkHere(){
|
||||||
// boxLabel(['PD', 50, 8424, 3536, 9256, 2464])
|
// boxLabel(['PD', 50, 8424, 3536, 9256, 2464])
|
||||||
// boxLabel(['IR', 50, 8432, 2332, 9124, 984])
|
// boxLabel(['IR', 50, 8432, 2332, 9124, 984])
|
||||||
// boxLabel(['PLA', 100, 1169, 2328, 8393, 934])
|
// boxLabel(['PLA', 100, 1169, 2328, 8393, 934])
|
||||||
// boxLabel(['Y', 50, 2143, 8820, 2317, 5689])
|
// boxLabel(['Y', 50, 2143, 8820, 2317, 5689])
|
||||||
// boxLabel(['X', 50, 2317, 8820, 2490, 5689])
|
// boxLabel(['X', 50, 2317, 8820, 2490, 5689])
|
||||||
// boxLabel(['S', 50, 2490, 8820, 2814, 5689])
|
// boxLabel(['S', 50, 2490, 8820, 2814, 5689])
|
||||||
// boxLabel(['ALU', 50, 2814, 8820, 4525, 5689])
|
// boxLabel(['ALU', 50, 2814, 8820, 4525, 5689])
|
||||||
// boxLabel(['DAdj', 40, 4525, 8820, 5040, 5689])
|
// boxLabel(['DAdj', 40, 4525, 8820, 5040, 5689])
|
||||||
|
@ -457,7 +486,7 @@ function hiliteNodeList(){
|
||||||
// the localx and localy functions return canvas coordinate offsets from the canvas window top left corner
|
// the localx and localy functions return canvas coordinate offsets from the canvas window top left corner
|
||||||
// we divide the results by 'zoom' to get drawn coordinates useful in findNodeNumber
|
// we divide the results by 'zoom' to get drawn coordinates useful in findNodeNumber
|
||||||
// to convert to reported user chip coordinates we multiply by grChipSize/600
|
// to convert to reported user chip coordinates we multiply by grChipSize/600
|
||||||
// to compare to segdefs and transdefs coordinates we subtract 400 from x and subtract y from grChipSize
|
// to compare to segdefs and transdefs coordinates we subtract grChipOffsetX from x and subtract y from grChipSize plus grChipOffsetY
|
||||||
|
|
||||||
function handleClick(e){
|
function handleClick(e){
|
||||||
var x = localx(hilite, e.clientX)/zoom;
|
var x = localx(hilite, e.clientX)/zoom;
|
||||||
|
@ -467,7 +496,7 @@ function handleClick(e){
|
||||||
var cx = Math.round(x*grChipSize/600);
|
var cx = Math.round(x*grChipSize/600);
|
||||||
var cy = Math.round(y*grChipSize/600);
|
var cy = Math.round(y*grChipSize/600);
|
||||||
// prepare two lines of status report
|
// prepare two lines of status report
|
||||||
var s1='x: ' + cx + ' y: ' + cy;
|
var s1='x: ' + (cx - grChipOffsetX) + ' y: ' + (cy - grChipOffsetY);
|
||||||
var s2='node: ' + w + ' ' + nodeName(w);
|
var s2='node: ' + w + ' ' + nodeName(w);
|
||||||
if(w==-1) {
|
if(w==-1) {
|
||||||
setStatus(s1); // no node found, so report only coordinates
|
setStatus(s1); // no node found, so report only coordinates
|
||||||
|
@ -476,8 +505,8 @@ function handleClick(e){
|
||||||
// we have a node, but maybe we clicked over a transistor
|
// we have a node, but maybe we clicked over a transistor
|
||||||
var nodelist=[w];
|
var nodelist=[w];
|
||||||
// match the coordinate against transistor gate bounding boxes
|
// match the coordinate against transistor gate bounding boxes
|
||||||
x=cx-400;
|
x=cx-grChipOffsetX;
|
||||||
y=grChipSize-cy;
|
y=grChipSize+grChipOffsetY-cy;
|
||||||
for(var i=0;i<nodes[w].gates.length;i++){
|
for(var i=0;i<nodes[w].gates.length;i++){
|
||||||
var xmin=nodes[w].gates[i].bb[0], xmax=nodes[w].gates[i].bb[1];
|
var xmin=nodes[w].gates[i].bb[0], xmax=nodes[w].gates[i].bb[1];
|
||||||
var ymin=nodes[w].gates[i].bb[2], ymax=nodes[w].gates[i].bb[3];
|
var ymin=nodes[w].gates[i].bb[2], ymax=nodes[w].gates[i].bb[3];
|
||||||
|
@ -579,8 +608,10 @@ function setupChipLayoutGraphics(){
|
||||||
}
|
}
|
||||||
// grant focus to the chip display to enable zoom keys
|
// grant focus to the chip display to enable zoom keys
|
||||||
chipsurround.focus();
|
chipsurround.focus();
|
||||||
|
chipsurround.onwheel = function(e){handleWheelZoom(e);};
|
||||||
chipsurround.onmousedown = function(e){mouseDown(e);};
|
chipsurround.onmousedown = function(e){mouseDown(e);};
|
||||||
chipsurround.onkeypress = function(e){handleKey(e);};
|
chipsurround.onkeypress = function(e){handleKey(e);};
|
||||||
|
chipsurround.onmouseout = function(e){mouseLeave(e);};
|
||||||
}
|
}
|
||||||
|
|
||||||
// utility function to save graphics pan and zoom
|
// utility function to save graphics pan and zoom
|
||||||
|
|
16
index.html
16
index.html
|
@ -66,7 +66,7 @@ Keyboard controls: 'z' to zoom in, 'x' to zoom out, 'n' to step the simulation.
|
||||||
<br />
|
<br />
|
||||||
Mouse controls: Left-click and drag to scroll around (when you're zoomed in.)
|
Mouse controls: Left-click and drag to scroll around (when you're zoomed in.)
|
||||||
<br />
|
<br />
|
||||||
More information in the <a href="http://visual6502.org/wiki/index.php?title=JssimUserHelp">User Guide<a>.
|
More information in the <a href="https://web.archive.org/web/20210608195625/http://visual6502.org/wiki/index.php?title=JssimUserHelp">User Guide</a>.
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
</span>
|
</span>
|
||||||
|
@ -79,13 +79,13 @@ More information in the <a href="http://visual6502.org/wiki/index.php?title=Jssi
|
||||||
</div>
|
</div>
|
||||||
<div class = "buttons">
|
<div class = "buttons">
|
||||||
<div style="position:relative; float:left;">
|
<div style="position:relative; float:left;">
|
||||||
<a href ="javascript:stopChip()"id="stop"><img class="navstop" src="images/stop.png"></a>
|
<a href ="javascript:stopChip()" id="stop"><img class="navstop" src="images/stop.png" title="stop"></a>
|
||||||
<a href ="javascript:runChip()" id="start"><img class="navplay" src="images/play.png"></a>
|
<a href ="javascript:runChip()" id="start"><img class="navplay" src="images/play.png" title="start"></a>
|
||||||
</div>
|
</div>
|
||||||
<div style="float:left;">
|
<div style="float:left;">
|
||||||
<a href ="javascript:resetChip()"><img class="navbutton" src="images/up.png"></a>
|
<a href ="javascript:resetChip()"><img class="navbutton" src="images/up.png" title="reset"></a>
|
||||||
<a href ="javascript:stepBack()"><img class="navbutton" src="images/prev.png"></a>
|
<a href ="javascript:stepBack()"><img class="navbutton" src="images/prev.png" title="back"></a>
|
||||||
<a href ="javascript:stepForward()"><img class="navbutton" src="images/next.png"></a>
|
<a href ="javascript:stepForward()"><img class="navbutton" src="images/next.png" title="step"></a>
|
||||||
</div>
|
</div>
|
||||||
<div style="float:right; margin-left:20px;">... or try <a href="expert.html">Advanced</a></div>
|
<div style="float:right; margin-left:20px;">... or try <a href="expert.html">Advanced</a></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -97,8 +97,8 @@ More information in the <a href="http://visual6502.org/wiki/index.php?title=Jssi
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
Source code is available on <a href="http://github.com/trebonian/visual6502">github visual6502</a>.
|
Source code is available on <a href="http://github.com/trebonian/visual6502">github visual6502</a>.
|
||||||
Use the online <a href="http://www.6502asm.com/">emulator and assembler</a> from 6502asm.com
|
Use the online <a href="https://skilldrick.github.io/easy6502/#first-program">emulator and assembler</a> from the easy6502 tutorial
|
||||||
and <a href="http://www.e-tradition.net/bytes/6502/disassembler.html">disassembler</a> from e-tradition.net
|
and <a href="http://www.masswerk.at/6502/disassembler.html">disassembler</a> from mass:werk
|
||||||
<br />
|
<br />
|
||||||
For in-depth 6502 investigation and some more advanced features, try our <a href="expert.html">Advanced</a> page.
|
For in-depth 6502 investigation and some more advanced features, try our <a href="expert.html">Advanced</a> page.
|
||||||
<br />
|
<br />
|
||||||
|
|
|
@ -89,6 +89,6 @@ table.memtable {
|
||||||
}
|
}
|
||||||
|
|
||||||
#title {
|
#title {
|
||||||
font-size:30px;
|
font-size:30px;
|
||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
}
|
}
|
|
@ -45,6 +45,8 @@ var userResetHigh;
|
||||||
// rounding artifacts, and at high zoom there will be anti-aliasing on edges.
|
// rounding artifacts, and at high zoom there will be anti-aliasing on edges.
|
||||||
var grMaxZoom=12;
|
var grMaxZoom=12;
|
||||||
var grChipSize=10000;
|
var grChipSize=10000;
|
||||||
|
var grChipOffsetX=400;
|
||||||
|
var grChipOffsetY=0;
|
||||||
var grCanvasSize=2000;
|
var grCanvasSize=2000;
|
||||||
var grLineWidth=1;
|
var grLineWidth=1;
|
||||||
|
|
||||||
|
|
81
macros.js
81
macros.js
|
@ -226,9 +226,10 @@ fetchTriggers={};
|
||||||
// simulate a single clock phase with no update to graphics or trace
|
// simulate a single clock phase with no update to graphics or trace
|
||||||
function halfStep(){
|
function halfStep(){
|
||||||
var clk = isNodeHigh(nodenames['clk0']);
|
var clk = isNodeHigh(nodenames['clk0']);
|
||||||
eval(clockTriggers[cycle]);
|
|
||||||
if (clk) {setLow('clk0'); handleBusRead(); }
|
if (clk) {setLow('clk0'); handleBusRead(); }
|
||||||
else {setHigh('clk0'); handleBusWrite();}
|
else {setHigh('clk0'); handleBusWrite();}
|
||||||
|
eval(clockTriggers[cycle+1]); // pre-apply next tick's inputs now, so the updates are displayed
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleBusRead(){
|
function handleBusRead(){
|
||||||
|
@ -303,6 +304,71 @@ function listActiveTCStates() {
|
||||||
return s.join("+");
|
return s.join("+");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Show all time code node states (active and inactive) in fixed format,
|
||||||
|
// with non-PLA-controlling internal state indication in square
|
||||||
|
// brackets, followed by RCL-resident timing state indication.
|
||||||
|
// ".." for a PLA-controlling node indicates inactive state, "T"* for a
|
||||||
|
// PLA-controlling node indicates active state.
|
||||||
|
// Bracketed codes are one of T1/V0/T6/..
|
||||||
|
// V0 indicates the VEC0 node, T6 is a synonym for the VEC1 node.
|
||||||
|
// The RCL codes are one of SD1/SD2/...
|
||||||
|
// For discussion of this reconstruction, see:
|
||||||
|
// http://visual6502.org/wiki/index.php?title=6502_Timing_States
|
||||||
|
function allTCStates( useHTML )
|
||||||
|
{
|
||||||
|
var s = "";
|
||||||
|
var _spc;
|
||||||
|
useHTML = (typeof useHTML === 'undefined') ? false : useHTML;
|
||||||
|
// Use Non-Breaking Space for presentation in an HTML (browser)
|
||||||
|
// context, else use ASCII space for logging context
|
||||||
|
_spc = useHTML ? ' ' : ' ';
|
||||||
|
if ( !isNodeHigh( nodenames[ 'clock1' ] ) ) s += "T0"; else s += "..";
|
||||||
|
s += _spc;
|
||||||
|
// T+ in visual6502 is called T1x in
|
||||||
|
// http://www.weihenstephan.org/~michaste/pagetable/6502/6502.jpg
|
||||||
|
// Notated as T+ for compatibility with PLA node names
|
||||||
|
if ( !isNodeHigh( nodenames[ 'clock2' ] ) ) s += "T+"; else s += "..";
|
||||||
|
s += _spc;
|
||||||
|
if ( !isNodeHigh( nodenames[ 't2' ] ) ) s += "T2"; else s += "..";
|
||||||
|
s += _spc;
|
||||||
|
if ( !isNodeHigh( nodenames[ 't3' ] ) ) s += "T3"; else s += "..";
|
||||||
|
s += _spc;
|
||||||
|
if ( !isNodeHigh( nodenames[ 't4' ] ) ) s += "T4"; else s += "..";
|
||||||
|
s += _spc;
|
||||||
|
if ( !isNodeHigh( nodenames[ 't5' ] ) ) s += "T5"; else s += "..";
|
||||||
|
s += _spc + "[";
|
||||||
|
// Check three confirmed exclusive states (three nodes)
|
||||||
|
if ( isNodeHigh( 862 ) ) {
|
||||||
|
s += "T1";
|
||||||
|
// ...else if VEC0 is on...
|
||||||
|
} else if ( isNodeHigh( nodenames[ 'VEC0' ] ) ) {
|
||||||
|
// ...then tell the outside world
|
||||||
|
s += "V0";
|
||||||
|
// ...else if VEC1 is on...
|
||||||
|
} else if ( isNodeHigh( nodenames[ 'VEC1' ] ) ) {
|
||||||
|
// ...then this is the canonical T6. It is a synonym for VEC1
|
||||||
|
s += "T6";
|
||||||
|
} else {
|
||||||
|
// ...else none of the "hidden" bits in the clock state is active
|
||||||
|
s += "..";
|
||||||
|
}
|
||||||
|
s += "]" + _spc;
|
||||||
|
// Check the RCL's two confirmed exclusive states (two nodes)
|
||||||
|
// If this node is grounding ~WR...
|
||||||
|
if ( isNodeHigh( 440 ) ) {
|
||||||
|
// ...then we can regard this state as Store Data 1
|
||||||
|
s += "SD1";
|
||||||
|
// ...else if this node is grounding ~WR...
|
||||||
|
} else if ( isNodeHigh( 1258 ) ) {
|
||||||
|
// ...then we can regard this state as Store Data 2
|
||||||
|
s += "SD2";
|
||||||
|
} else {
|
||||||
|
// ...else none of the RCL-resident timing bits is active
|
||||||
|
s += "...";
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
function readBit(name){
|
function readBit(name){
|
||||||
return isNodeHigh(nodenames[name])?1:0;
|
return isNodeHigh(nodenames[name])?1:0;
|
||||||
}
|
}
|
||||||
|
@ -329,6 +395,13 @@ function busToString(busname){
|
||||||
return ['clock1','clock2','t2','t3','t4','t5'].map(busToHex).join("");
|
return ['clock1','clock2','t2','t3','t4','t5'].map(busToHex).join("");
|
||||||
if(busname=='State')
|
if(busname=='State')
|
||||||
return listActiveTCStates();
|
return listActiveTCStates();
|
||||||
|
if(busname=='TState')
|
||||||
|
return allTCStates( true );
|
||||||
|
if(busname=='Phi')
|
||||||
|
// Pretty-printed phase indication based on the state of cp1,
|
||||||
|
// the internal Phase 1 node
|
||||||
|
return 'Φ' +
|
||||||
|
(isNodeHigh( nodenames[ 'cp1' ] ) ? '1' : '2');
|
||||||
if(busname=='Execute')
|
if(busname=='Execute')
|
||||||
return disassemblytoHTML(readBits('ir',8));
|
return disassemblytoHTML(readBits('ir',8));
|
||||||
if(busname=='Fetch')
|
if(busname=='Fetch')
|
||||||
|
@ -338,7 +411,7 @@ function busToString(busname){
|
||||||
// - we'll allow the x and xx prefix but ignore the #
|
// - we'll allow the x and xx prefix but ignore the #
|
||||||
return listActiveSignals('^([x]?x-)?op-');
|
return listActiveSignals('^([x]?x-)?op-');
|
||||||
if(busname=='DPControl')
|
if(busname=='DPControl')
|
||||||
return listActiveSignals('^dpc[0-9]+_');
|
return listActiveSignals('^dpc[-]?[0-9]+_');
|
||||||
if(busname[0]=="-"){
|
if(busname[0]=="-"){
|
||||||
// invert the value of the bus for display
|
// invert the value of the bus for display
|
||||||
var value=busToHex(busname.slice(1))
|
var value=busToHex(busname.slice(1))
|
||||||
|
@ -471,7 +544,7 @@ function chipStatus(){
|
||||||
machine3 += " Chk:" + traceChecksum + ((traceChecksum==goldenChecksum)?" OK":" no match");
|
machine3 += " Chk:" + traceChecksum + ((traceChecksum==goldenChecksum)?" OK":" no match");
|
||||||
}
|
}
|
||||||
setStatus(machine1, machine2, machine3);
|
setStatus(machine1, machine2, machine3);
|
||||||
if (loglevel>0) {
|
if (logThese.length>1) {
|
||||||
updateLogbox(logThese);
|
updateLogbox(logThese);
|
||||||
}
|
}
|
||||||
selectCell(ab);
|
selectCell(ab);
|
||||||
|
@ -698,7 +771,7 @@ var disassembly={
|
||||||
0x68:"PLA",
|
0x68:"PLA",
|
||||||
0x69:"ADC #",
|
0x69:"ADC #",
|
||||||
0x6A:"ROR ",
|
0x6A:"ROR ",
|
||||||
0x6C:"JMP zp",
|
0x6C:"JMP (Abs)",
|
||||||
0x6D:"ADC Abs",
|
0x6D:"ADC Abs",
|
||||||
0x6E:"ROR Abs",
|
0x6E:"ROR Abs",
|
||||||
0x70:"BVS ",
|
0x70:"BVS ",
|
||||||
|
|
138
nodenames.js
138
nodenames.js
|
@ -99,13 +99,21 @@ pclp5: 72,
|
||||||
pclp6: 1458,
|
pclp6: 1458,
|
||||||
pclp7: 1647,
|
pclp7: 1647,
|
||||||
"#pclp0": 1227, // machine state: program counter low (pre-incremented?, inverse second storage node)
|
"#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,
|
||||||
|
"~pclp1": 1102, // automatic alias replacing hash with tilde
|
||||||
"#pclp2": 1079,
|
"#pclp2": 1079,
|
||||||
|
"~pclp2": 1079, // automatic alias replacing hash with tilde
|
||||||
"#pclp3": 868,
|
"#pclp3": 868,
|
||||||
|
"~pclp3": 868, // automatic alias replacing hash with tilde
|
||||||
"#pclp4": 39,
|
"#pclp4": 39,
|
||||||
|
"~pclp4": 39, // automatic alias replacing hash with tilde
|
||||||
"#pclp5": 1326,
|
"#pclp5": 1326,
|
||||||
|
"~pclp5": 1326, // automatic alias replacing hash with tilde
|
||||||
"#pclp6": 731,
|
"#pclp6": 731,
|
||||||
|
"~pclp6": 731, // automatic alias replacing hash with tilde
|
||||||
"#pclp7": 536,
|
"#pclp7": 536,
|
||||||
|
"~pclp7": 536, // automatic alias replacing hash with tilde
|
||||||
pch0: 1670, // machine state: program counter high (first storage node)
|
pch0: 1670, // machine state: program counter high (first storage node)
|
||||||
pch1: 292,
|
pch1: 292,
|
||||||
pch2: 502,
|
pch2: 502,
|
||||||
|
@ -123,13 +131,21 @@ pchp5: 1301,
|
||||||
pchp6: 652,
|
pchp6: 652,
|
||||||
pchp7: 1206,
|
pchp7: 1206,
|
||||||
"#pchp0": 780, // machine state: program counter high (pre-incremented?, inverse second storage node)
|
"#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,
|
||||||
|
"~pchp1": 113, // automatic alias replacing hash with tilde
|
||||||
"#pchp2": 114,
|
"#pchp2": 114,
|
||||||
|
"~pchp2": 114, // automatic alias replacing hash with tilde
|
||||||
"#pchp3": 124,
|
"#pchp3": 124,
|
||||||
|
"~pchp3": 124, // automatic alias replacing hash with tilde
|
||||||
"#pchp4": 820,
|
"#pchp4": 820,
|
||||||
|
"~pchp4": 820, // automatic alias replacing hash with tilde
|
||||||
"#pchp5": 33,
|
"#pchp5": 33,
|
||||||
|
"~pchp5": 33, // automatic alias replacing hash with tilde
|
||||||
"#pchp6": 751,
|
"#pchp6": 751,
|
||||||
|
"~pchp6": 751, // automatic alias replacing hash with tilde
|
||||||
"#pchp7": 535,
|
"#pchp7": 535,
|
||||||
|
"~pchp7": 535, // automatic alias replacing hash with tilde
|
||||||
// machine state: status register (not the storage nodes)
|
// machine state: status register (not the storage nodes)
|
||||||
p0: 32, // C bit of status register (storage node)
|
p0: 32, // C bit of status register (storage node)
|
||||||
p1: 627, // Z bit of status register (storage node)
|
p1: 627, // Z bit of status register (storage node)
|
||||||
|
@ -137,8 +153,8 @@ p2: 1553, // I bit of status register (storage node)
|
||||||
p3: 348, // D 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)
|
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)
|
p5: -1, // there is no bit5 in the status register! (not a storage node)
|
||||||
p6: 77, // V bit of status register (storage node)
|
p6: 1625, // V bit of status register (storage node)
|
||||||
p7: 1370, // N bit of status register (storage node)
|
p7: 69, // N bit of status register (storage node)
|
||||||
|
|
||||||
// internal bus: status register outputs for push P
|
// internal bus: status register outputs for push P
|
||||||
Pout0: 687,
|
Pout0: 687,
|
||||||
|
@ -174,9 +190,11 @@ notir4: 26,
|
||||||
notir5: 1394,
|
notir5: 1394,
|
||||||
notir6: 895,
|
notir6: 895,
|
||||||
notir7: 1320,
|
notir7: 1320,
|
||||||
irline3: 996, // internal signal: PLA input - ir0 AND ir1
|
irline3: 996, // internal signal: PLA input - ir0 OR ir1
|
||||||
clock1: 1536, // internal state: timing control aka #T0
|
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, // internal state: timing control aka #T+
|
||||||
|
clock2: 156, // automatic alias replacing hash with tilde
|
||||||
t2: 971, // internal state: timing control
|
t2: 971, // internal state: timing control
|
||||||
t3: 1567,
|
t3: 1567,
|
||||||
t4: 690,
|
t4: 690,
|
||||||
|
@ -230,6 +248,7 @@ sb5: 166,
|
||||||
sb6: 1336,
|
sb6: 1336,
|
||||||
sb7: 1001,
|
sb7: 1001,
|
||||||
notalu0: 394, // datapath state: alu output storage node (inverse) aka #ADD0
|
notalu0: 394, // datapath state: alu output storage node (inverse) aka #ADD0
|
||||||
|
notalu0: 394, // automatic alias replacing hash with tilde
|
||||||
notalu1: 697,
|
notalu1: 697,
|
||||||
notalu2: 276,
|
notalu2: 276,
|
||||||
notalu3: 495,
|
notalu3: 495,
|
||||||
|
@ -317,7 +336,9 @@ pd7: 1690,
|
||||||
"PD-xxx010x1": 302,
|
"PD-xxx010x1": 302,
|
||||||
"PD-n-0xx0xx0x": 125,
|
"PD-n-0xx0xx0x": 125,
|
||||||
"#TWOCYCLE": 851,
|
"#TWOCYCLE": 851,
|
||||||
|
"~TWOCYCLE": 851, // automatic alias replacing hash with tilde
|
||||||
"#TWOCYCLE.phi1": 792,
|
"#TWOCYCLE.phi1": 792,
|
||||||
|
"~TWOCYCLE.phi1": 792, // automatic alias replacing hash with tilde
|
||||||
"ONEBYTE": 778,
|
"ONEBYTE": 778,
|
||||||
|
|
||||||
abl0: 1096, // internal bus: address bus low latched data out (inverse of inverted storage node)
|
abl0: 1096, // internal bus: address bus low latched data out (inverse of inverted storage node)
|
||||||
|
@ -329,13 +350,21 @@ abl5: 234,
|
||||||
abl6: 178,
|
abl6: 178,
|
||||||
abl7: 567,
|
abl7: 567,
|
||||||
"#ABL0": 153, // internal state: address bus low latched data out (storage node, inverted)
|
"#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,
|
||||||
|
"~ABL1": 107, // automatic alias replacing hash with tilde
|
||||||
"#ABL2": 707,
|
"#ABL2": 707,
|
||||||
|
"~ABL2": 707, // automatic alias replacing hash with tilde
|
||||||
"#ABL3": 825,
|
"#ABL3": 825,
|
||||||
|
"~ABL3": 825, // automatic alias replacing hash with tilde
|
||||||
"#ABL4": 364,
|
"#ABL4": 364,
|
||||||
|
"~ABL4": 364, // automatic alias replacing hash with tilde
|
||||||
"#ABL5": 1513,
|
"#ABL5": 1513,
|
||||||
|
"~ABL5": 1513, // automatic alias replacing hash with tilde
|
||||||
"#ABL6": 1307,
|
"#ABL6": 1307,
|
||||||
|
"~ABL6": 1307, // automatic alias replacing hash with tilde
|
||||||
"#ABL7": 28,
|
"#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)
|
abh0: 1429, // internal bus: address bus high latched data out (inverse of inverted storage node)
|
||||||
abh1: 713,
|
abh1: 713,
|
||||||
abh2: 287,
|
abh2: 287,
|
||||||
|
@ -345,13 +374,21 @@ abh5: 775,
|
||||||
abh6: 997,
|
abh6: 997,
|
||||||
abh7: 489,
|
abh7: 489,
|
||||||
"#ABH0": 1062, // internal state: address bus high latched data out (storage node, inverted)
|
"#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,
|
||||||
|
"~ABH1": 907, // automatic alias replacing hash with tilde
|
||||||
"#ABH2": 768,
|
"#ABH2": 768,
|
||||||
|
"~ABH2": 768, // automatic alias replacing hash with tilde
|
||||||
"#ABH3": 92,
|
"#ABH3": 92,
|
||||||
|
"~ABH3": 92, // automatic alias replacing hash with tilde
|
||||||
"#ABH4": 668,
|
"#ABH4": 668,
|
||||||
|
"~ABH4": 668, // automatic alias replacing hash with tilde
|
||||||
"#ABH5": 1128,
|
"#ABH5": 1128,
|
||||||
|
"~ABH5": 1128, // automatic alias replacing hash with tilde
|
||||||
"#ABH6": 289,
|
"#ABH6": 289,
|
||||||
|
"~ABH6": 289, // automatic alias replacing hash with tilde
|
||||||
"#ABH7": 429,
|
"#ABH7": 429,
|
||||||
|
"~ABH7": 429, // automatic alias replacing hash with tilde
|
||||||
|
|
||||||
"branch-back": 626, // distinguish forward from backward branches
|
"branch-back": 626, // distinguish forward from backward branches
|
||||||
"branch-forward.phi1": 1110, // distinguish forward from backward branches
|
"branch-forward.phi1": 1110, // distinguish forward from backward branches
|
||||||
|
@ -360,13 +397,15 @@ notRdy0: 248, // internal signal: global pipeline control
|
||||||
"notRdy0.phi1": 1272, // delayed pipeline control
|
"notRdy0.phi1": 1272, // delayed pipeline control
|
||||||
"notRdy0.delay": 770, // global pipeline control latched by phi1 and then phi2
|
"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, // 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
|
Reset0: 67, // internal signal: retimed reset from pin
|
||||||
C1x5Reset: 926, // retimed and pipelined reset in progress
|
C1x5Reset: 926, // retimed and pipelined reset in progress
|
||||||
notRnWprepad: 187, // internal signal: to pad, yet to be inverted and retimed
|
notRnWprepad: 187, // internal signal: to pad, yet to be inverted and retimed
|
||||||
RnWstretched: 353, // internal signal: control datapad output drivers, aka TRISTATE
|
RnWstretched: 353, // internal signal: control datapad output drivers, aka TRISTATE
|
||||||
"#DBE": 1035, // internal signal: formerly from DBE pad (6501)
|
"#DBE": 1035, // internal signal: formerly from DBE pad (6501)
|
||||||
|
"~DBE": 1035, // automatic alias replacing hash with tilde
|
||||||
cp1: 710, // internal signal: clock phase 1
|
cp1: 710, // internal signal: clock phase 1
|
||||||
cclk: 943, // unbonded pad: internal non-overlappying phi2
|
cclk: 943, // unbonded pad: internal non-overlapping phi2
|
||||||
fetch: 879, // internal signal
|
fetch: 879, // internal signal
|
||||||
clearIR: 1077, // internal signal
|
clearIR: 1077, // internal signal
|
||||||
H1x1: 1042, // internal signal: drive status byte onto databus
|
H1x1: 1042, // internal signal: drive status byte onto databus
|
||||||
|
@ -519,32 +558,40 @@ H1x1: 1042, // internal signal: drive status byte onto databus
|
||||||
"x-op-push/pull":1050, // pla121 // feeds into pla130 (no normal pla output)
|
"x-op-push/pull":1050, // pla121 // feeds into pla130 (no normal pla output)
|
||||||
"op-T0-cld/sed":1419, // pla122
|
"op-T0-cld/sed":1419, // pla122
|
||||||
"#op-branch-bit6":840, // pla123 // IR bit6 used only to detect branch type
|
"#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-T3-mem-abs":607, // pla124
|
||||||
"op-T2-mem-zp":219, // pla125
|
"op-T2-mem-zp":219, // pla125
|
||||||
"op-T5-mem-ind-idx":1385, // pla126
|
"op-T5-mem-ind-idx":1385, // pla126
|
||||||
"op-T4-mem-abs-idx":281, // pla127
|
"op-T4-mem-abs-idx":281, // pla127
|
||||||
"#op-branch-bit7":1174, // pla128 // IR bit7 used only to detect branch type
|
"#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-clv":1164, // pla129
|
||||||
"op-implied":1006, // pla130 // has extra pulldowns: pla121 and ir0
|
"op-implied":1006, // pla130 // has extra pulldowns: pla121 and ir0
|
||||||
|
|
||||||
// internal signals: derived from pla outputs
|
// internal signals: derived from pla outputs
|
||||||
"#op-branch-done": 1048,
|
"#op-branch-done": 1048,
|
||||||
|
"~op-branch-done": 1048, // automatic alias replacing hash with tilde
|
||||||
"#op-T3-branch": 1708,
|
"#op-T3-branch": 1708,
|
||||||
|
"~op-T3-branch": 1708, // automatic alias replacing hash with tilde
|
||||||
"op-ANDS": 1228,
|
"op-ANDS": 1228,
|
||||||
"op-EORS": 1689,
|
"op-EORS": 1689,
|
||||||
"op-ORS": 522,
|
"op-ORS": 522,
|
||||||
"op-SUMS": 1196,
|
"op-SUMS": 1196,
|
||||||
"op-SRS": 934,
|
"op-SRS": 934,
|
||||||
"#op-store": 925,
|
"#op-store": 925,
|
||||||
|
"~op-store": 925, // automatic alias replacing hash with tilde
|
||||||
"#WR": 1352,
|
"#WR": 1352,
|
||||||
|
"~WR": 1352, // automatic alias replacing hash with tilde
|
||||||
"op-rmw": 434,
|
"op-rmw": 434,
|
||||||
"short-circuit-idx-add": 1185,
|
"short-circuit-idx-add": 1185,
|
||||||
"short-circuit-branch-add": 430,
|
"short-circuit-branch-add": 430,
|
||||||
"#op-set-C": 252,
|
"#op-set-C": 252,
|
||||||
|
"~op-set-C": 252, // automatic alias replacing hash with tilde
|
||||||
|
|
||||||
// internal signals: control signals
|
// internal signals: control signals
|
||||||
nnT2BR: 967, // doubly inverted
|
nnT2BR: 967, // doubly inverted
|
||||||
BRtaken: 1544, // aka #TAKEN
|
"#BRtaken": 1544, // aka #TAKEN
|
||||||
|
"~BRtaken": 1544, // automatic alias replacing hash with tilde
|
||||||
|
|
||||||
// internal signals and state: interrupt and vector related
|
// internal signals and state: interrupt and vector related
|
||||||
// segher says:
|
// segher says:
|
||||||
|
@ -554,21 +601,26 @@ BRtaken: 1544, // aka #TAKEN
|
||||||
// INTG is IRQ and NMI taken together.
|
// INTG is IRQ and NMI taken together.
|
||||||
IRQP: 675,
|
IRQP: 675,
|
||||||
"#IRQP": 888,
|
"#IRQP": 888,
|
||||||
|
"~IRQP": 888, // automatic alias replacing hash with tilde
|
||||||
NMIP: 1032,
|
NMIP: 1032,
|
||||||
"#NMIP": 297,
|
"#NMIP": 297,
|
||||||
|
"~NMIP": 297, // automatic alias replacing hash with tilde
|
||||||
"#NMIG": 264,
|
"#NMIG": 264,
|
||||||
|
"~NMIG": 264, // automatic alias replacing hash with tilde
|
||||||
NMIL: 1374,
|
NMIL: 1374,
|
||||||
RESP: 67,
|
RESP: 67,
|
||||||
RESG: 926,
|
RESG: 926,
|
||||||
VEC0: 1465,
|
VEC0: 1465,
|
||||||
VEC1: 1481,
|
VEC1: 1481,
|
||||||
"#VEC": 1134,
|
"#VEC": 1134,
|
||||||
|
"~VEC": 1134, // automatic alias replacing hash with tilde
|
||||||
D1x1: 827, // internal signal: interrupt handler related
|
D1x1: 827, // internal signal: interrupt handler related
|
||||||
"brk-done": 1382, // internal signal: interrupt handler related
|
"brk-done": 1382, // internal signal: interrupt handler related
|
||||||
INTG: 1350, // internal signal: interrupt handler related
|
INTG: 1350, // internal signal: interrupt handler related
|
||||||
|
|
||||||
// internal state: misc pipeline state clocked by cclk (phi2)
|
// internal state: misc pipeline state clocked by cclk (phi2)
|
||||||
"pipe#VEC": 1431, // latched #VEC
|
"pipe#VEC": 1431, // latched #VEC
|
||||||
|
"pipe~VEC": 1431, // automatic alias replacing hash with tilde
|
||||||
"pipeT-SYNC": 537,
|
"pipeT-SYNC": 537,
|
||||||
pipeT2out: 40,
|
pipeT2out: 40,
|
||||||
pipeT3out: 706,
|
pipeT3out: 706,
|
||||||
|
@ -613,11 +665,13 @@ pipeUNK35: 1713,
|
||||||
pipeUNK36: 729,
|
pipeUNK36: 729,
|
||||||
pipeUNK37: 197,
|
pipeUNK37: 197,
|
||||||
"pipe#WR.phi2": 1131,
|
"pipe#WR.phi2": 1131,
|
||||||
|
"pipe~WR.phi2": 1131, // automatic alias replacing hash with tilde
|
||||||
pipeUNK39: 151,
|
pipeUNK39: 151,
|
||||||
pipeUNK40: 456,
|
pipeUNK40: 456,
|
||||||
pipeUNK41: 1438,
|
pipeUNK41: 1438,
|
||||||
pipeUNK42: 1104,
|
pipeUNK42: 1104,
|
||||||
"pipe#T0": 554, // aka #T0.phi2
|
"pipe#T0": 554, // aka #T0.phi2
|
||||||
|
"pipe~T0": 554, // automatic alias replacing hash with tilde
|
||||||
|
|
||||||
// internal state: vector address pulldown control
|
// internal state: vector address pulldown control
|
||||||
pipeVectorA0: 357,
|
pipeVectorA0: 357,
|
||||||
|
@ -664,53 +718,91 @@ DC34: 1372, // lower nibble decimal carry
|
||||||
DC78: 333, // carry for decimal mode
|
DC78: 333, // carry for decimal mode
|
||||||
"DC78.phi2": 164,
|
"DC78.phi2": 164,
|
||||||
"#C01": 1506,
|
"#C01": 1506,
|
||||||
|
"~C01": 1506, // automatic alias replacing hash with tilde
|
||||||
"#C12": 1122,
|
"#C12": 1122,
|
||||||
|
"~C12": 1122, // automatic alias replacing hash with tilde
|
||||||
"#C23": 1003,
|
"#C23": 1003,
|
||||||
|
"~C23": 1003, // automatic alias replacing hash with tilde
|
||||||
"#C34": 1425,
|
"#C34": 1425,
|
||||||
|
"~C34": 1425, // automatic alias replacing hash with tilde
|
||||||
"#C45": 1571,
|
"#C45": 1571,
|
||||||
|
"~C45": 1571, // automatic alias replacing hash with tilde
|
||||||
"#C56": 427,
|
"#C56": 427,
|
||||||
|
"~C56": 427, // automatic alias replacing hash with tilde
|
||||||
"#C67": 592,
|
"#C67": 592,
|
||||||
|
"~C67": 592, // automatic alias replacing hash with tilde
|
||||||
"#C78": 1327,
|
"#C78": 1327,
|
||||||
|
"~C78": 1327, // automatic alias replacing hash with tilde
|
||||||
"DA-C01": 623,
|
"DA-C01": 623,
|
||||||
"DA-AB2": 216,
|
"DA-AB2": 216,
|
||||||
"DA-AxB2": 516,
|
"DA-AxB2": 516,
|
||||||
"DA-C45": 1144,
|
"DA-C45": 1144,
|
||||||
"#DA-ADD1": 901,
|
"#DA-ADD1": 901,
|
||||||
|
"~DA-ADD1": 901, // automatic alias replacing hash with tilde
|
||||||
"#DA-ADD2": 699,
|
"#DA-ADD2": 699,
|
||||||
|
"~DA-ADD2": 699, // automatic alias replacing hash with tilde
|
||||||
|
|
||||||
// misc alu internals
|
// misc alu internals
|
||||||
"#(AxBxC)0": 371,
|
"#(AxBxC)0": 371,
|
||||||
|
"~(AxBxC)0": 371, // automatic alias replacing hash with tilde
|
||||||
"#(AxBxC)1": 965,
|
"#(AxBxC)1": 965,
|
||||||
|
"~(AxBxC)1": 965, // automatic alias replacing hash with tilde
|
||||||
"#(AxBxC)2": 22,
|
"#(AxBxC)2": 22,
|
||||||
|
"~(AxBxC)2": 22, // automatic alias replacing hash with tilde
|
||||||
"#(AxBxC)3": 274,
|
"#(AxBxC)3": 274,
|
||||||
|
"~(AxBxC)3": 274, // automatic alias replacing hash with tilde
|
||||||
"#(AxBxC)4": 651,
|
"#(AxBxC)4": 651,
|
||||||
|
"~(AxBxC)4": 651, // automatic alias replacing hash with tilde
|
||||||
"#(AxBxC)5": 486,
|
"#(AxBxC)5": 486,
|
||||||
|
"~(AxBxC)5": 486, // automatic alias replacing hash with tilde
|
||||||
"#(AxBxC)6": 1197,
|
"#(AxBxC)6": 1197,
|
||||||
|
"~(AxBxC)6": 1197, // automatic alias replacing hash with tilde
|
||||||
"#(AxBxC)7": 532,
|
"#(AxBxC)7": 532,
|
||||||
|
"~(AxBxC)7": 532, // automatic alias replacing hash with tilde
|
||||||
AxB1: 425,
|
AxB1: 425,
|
||||||
AxB3: 640,
|
AxB3: 640,
|
||||||
AxB5: 1220,
|
AxB5: 1220,
|
||||||
AxB7: 1241,
|
AxB7: 1241,
|
||||||
"#(AxB)0": 1525,
|
"#(AxB)0": 1525,
|
||||||
|
"~(AxB)0": 1525, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)2": 701,
|
"#(AxB)2": 701,
|
||||||
|
"~(AxB)2": 701, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)4": 308,
|
"#(AxB)4": 308,
|
||||||
|
"~(AxB)4": 308, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)6": 1459,
|
"#(AxB)6": 1459,
|
||||||
|
"~(AxB)6": 1459, // automatic alias replacing hash with tilde
|
||||||
"(AxB)0.#C0in": 555,
|
"(AxB)0.#C0in": 555,
|
||||||
|
"(AxB)0.~C0in": 555, // automatic alias replacing hash with tilde
|
||||||
"(AxB)2.#C12": 193,
|
"(AxB)2.#C12": 193,
|
||||||
|
"(AxB)2.~C12": 193, // automatic alias replacing hash with tilde
|
||||||
"(AxB)4.#C34": 65,
|
"(AxB)4.#C34": 65,
|
||||||
|
"(AxB)4.~C34": 65, // automatic alias replacing hash with tilde
|
||||||
"(AxB)6.#C56": 174,
|
"(AxB)6.#C56": 174,
|
||||||
|
"(AxB)6.~C56": 174, // automatic alias replacing hash with tilde
|
||||||
"#(AxB1).C01": 295,
|
"#(AxB1).C01": 295,
|
||||||
|
"~(AxB1).C01": 295, // automatic alias replacing hash with tilde
|
||||||
"#(AxB3).C23": 860,
|
"#(AxB3).C23": 860,
|
||||||
|
"~(AxB3).C23": 860, // automatic alias replacing hash with tilde
|
||||||
"#(AxB5).C45": 817,
|
"#(AxB5).C45": 817,
|
||||||
|
"~(AxB5).C45": 817, // automatic alias replacing hash with tilde
|
||||||
"#(AxB7).C67": 1217,
|
"#(AxB7).C67": 1217,
|
||||||
|
"~(AxB7).C67": 1217, // automatic alias replacing hash with tilde
|
||||||
"#A.B0": 1628,
|
"#A.B0": 1628,
|
||||||
|
"~A.B0": 1628, // automatic alias replacing hash with tilde
|
||||||
"#A.B1": 841,
|
"#A.B1": 841,
|
||||||
|
"~A.B1": 841, // automatic alias replacing hash with tilde
|
||||||
"#A.B2": 681,
|
"#A.B2": 681,
|
||||||
|
"~A.B2": 681, // automatic alias replacing hash with tilde
|
||||||
"#A.B3": 350,
|
"#A.B3": 350,
|
||||||
|
"~A.B3": 350, // automatic alias replacing hash with tilde
|
||||||
"#A.B4": 1063,
|
"#A.B4": 1063,
|
||||||
|
"~A.B4": 1063, // automatic alias replacing hash with tilde
|
||||||
"#A.B5": 477,
|
"#A.B5": 477,
|
||||||
|
"~A.B5": 477, // automatic alias replacing hash with tilde
|
||||||
"#A.B6": 336,
|
"#A.B6": 336,
|
||||||
|
"~A.B6": 336, // automatic alias replacing hash with tilde
|
||||||
"#A.B7": 1318,
|
"#A.B7": 1318,
|
||||||
|
"~A.B7": 1318, // automatic alias replacing hash with tilde
|
||||||
"A+B0": 693,
|
"A+B0": 693,
|
||||||
"A+B1": 1021,
|
"A+B1": 1021,
|
||||||
"A+B2": 110,
|
"A+B2": 110,
|
||||||
|
@ -720,34 +812,61 @@ AxB7: 1241,
|
||||||
"A+B6": 803,
|
"A+B6": 803,
|
||||||
"A+B7": 117,
|
"A+B7": 117,
|
||||||
"#(A+B)0": 143,
|
"#(A+B)0": 143,
|
||||||
|
"~(A+B)0": 143, // automatic alias replacing hash with tilde
|
||||||
"#(A+B)1": 155,
|
"#(A+B)1": 155,
|
||||||
|
"~(A+B)1": 155, // automatic alias replacing hash with tilde
|
||||||
"#(A+B)2": 1691,
|
"#(A+B)2": 1691,
|
||||||
|
"~(A+B)2": 1691, // automatic alias replacing hash with tilde
|
||||||
"#(A+B)3": 649,
|
"#(A+B)3": 649,
|
||||||
|
"~(A+B)3": 649, // automatic alias replacing hash with tilde
|
||||||
"#(A+B)4": 404,
|
"#(A+B)4": 404,
|
||||||
|
"~(A+B)4": 404, // automatic alias replacing hash with tilde
|
||||||
"#(A+B)5": 1632,
|
"#(A+B)5": 1632,
|
||||||
|
"~(A+B)5": 1632, // automatic alias replacing hash with tilde
|
||||||
"#(A+B)6": 1084,
|
"#(A+B)6": 1084,
|
||||||
|
"~(A+B)6": 1084, // automatic alias replacing hash with tilde
|
||||||
"#(A+B)7": 1398,
|
"#(A+B)7": 1398,
|
||||||
|
"~(A+B)7": 1398, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)0": 1525,
|
"#(AxB)0": 1525,
|
||||||
|
"~(AxB)0": 1525, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)2": 701,
|
"#(AxB)2": 701,
|
||||||
|
"~(AxB)2": 701, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)4": 308,
|
"#(AxB)4": 308,
|
||||||
|
"~(AxB)4": 308, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)6": 1459,
|
"#(AxB)6": 1459,
|
||||||
|
"~(AxB)6": 1459, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)1": 953,
|
"#(AxB)1": 953,
|
||||||
|
"~(AxB)1": 953, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)3": 884,
|
"#(AxB)3": 884,
|
||||||
|
"~(AxB)3": 884, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)5": 1469,
|
"#(AxB)5": 1469,
|
||||||
|
"~(AxB)5": 1469, // automatic alias replacing hash with tilde
|
||||||
"#(AxB)7": 177,
|
"#(AxB)7": 177,
|
||||||
|
"~(AxB)7": 177, // automatic alias replacing hash with tilde
|
||||||
"#aluresult0": 957, // alu result latch input
|
"#aluresult0": 957, // alu result latch input
|
||||||
|
"~aluresult0": 957, // automatic alias replacing hash with tilde
|
||||||
"#aluresult1": 250,
|
"#aluresult1": 250,
|
||||||
|
"~aluresult1": 250, // automatic alias replacing hash with tilde
|
||||||
"#aluresult2": 740,
|
"#aluresult2": 740,
|
||||||
|
"~aluresult2": 740, // automatic alias replacing hash with tilde
|
||||||
"#aluresult3": 1071,
|
"#aluresult3": 1071,
|
||||||
|
"~aluresult3": 1071, // automatic alias replacing hash with tilde
|
||||||
"#aluresult4": 296,
|
"#aluresult4": 296,
|
||||||
|
"~aluresult4": 296, // automatic alias replacing hash with tilde
|
||||||
"#aluresult5": 277,
|
"#aluresult5": 277,
|
||||||
|
"~aluresult5": 277, // automatic alias replacing hash with tilde
|
||||||
"#aluresult6": 722,
|
"#aluresult6": 722,
|
||||||
|
"~aluresult6": 722, // automatic alias replacing hash with tilde
|
||||||
"#aluresult7": 304,
|
"#aluresult7": 304,
|
||||||
|
"~aluresult7": 304, // automatic alias replacing hash with tilde
|
||||||
|
|
||||||
// internal signals: datapath control signals
|
// internal signals: datapath control signals
|
||||||
|
|
||||||
"ADL/ABL": 639, // load ABL latches from ADL bus
|
"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
|
"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
|
dpc0_YSB: 801, // drive sb from y
|
||||||
dpc1_SBY: 325, // load y from sb
|
dpc1_SBY: 325, // load y from sb
|
||||||
|
@ -771,6 +890,7 @@ dpc17_SUMS: 921, // alu op: a plus b (?)
|
||||||
alucin: 910, // alu carry in
|
alucin: 910, // alu carry in
|
||||||
notalucin: 1165,
|
notalucin: 1165,
|
||||||
"dpc18_#DAA": 1201, // decimal related (inverted)
|
"dpc18_#DAA": 1201, // decimal related (inverted)
|
||||||
|
"dpc18_~DAA": 1201, // automatic alias replacing hash with tilde
|
||||||
dpc19_ADDSB7: 214, // alu to sb bit 7 only
|
dpc19_ADDSB7: 214, // alu to sb bit 7 only
|
||||||
|
|
||||||
dpc20_ADDSB06: 129, // alu to sb bits 6-0 only
|
dpc20_ADDSB06: 129, // alu to sb bits 6-0 only
|
||||||
|
@ -779,15 +899,20 @@ alurawcout: 808, // alu raw carry out (no decimal adjust)
|
||||||
notalucout: 412, // alu carry out (inverted)
|
notalucout: 412, // alu carry out (inverted)
|
||||||
alucout: 1146, // alu carry out (latched by phi2)
|
alucout: 1146, // alu carry out (latched by phi2)
|
||||||
"#alucout": 206,
|
"#alucout": 206,
|
||||||
|
"~alucout": 206, // automatic alias replacing hash with tilde
|
||||||
"##alucout": 465,
|
"##alucout": 465,
|
||||||
|
"~~alucout": 465, // automatic alias replacing hash with tilde
|
||||||
notaluvout: 1308, // alu overflow out
|
notaluvout: 1308, // alu overflow out
|
||||||
aluvout: 938, // alu overflow out (latched by phi2)
|
aluvout: 938, // alu overflow out (latched by phi2)
|
||||||
|
|
||||||
"#DBZ": 1268, // internal signal: not (databus is zero)
|
"#DBZ": 1268, // internal signal: not (databus is zero)
|
||||||
|
"~DBZ": 1268, // automatic alias replacing hash with tilde
|
||||||
DBZ: 744, // internal signal: databus is zero
|
DBZ: 744, // internal signal: databus is zero
|
||||||
DBNeg: 1200, // internal signal: databus is negative (top bit of db) aka P-#DB7in
|
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, // decimal related/SBC only (inverted)
|
||||||
|
"dpc22_~DSA": 725, // automatic alias replacing hash with tilde
|
||||||
dpc23_SBAC: 534, // (optionalls decimal-adjusted) sb to acc
|
dpc23_SBAC: 534, // (optionalls decimal-adjusted) sb to acc
|
||||||
dpc24_ACSB: 1698, // acc to sb
|
dpc24_ACSB: 1698, // acc to sb
|
||||||
dpc25_SBDB: 1060, // sb pass-connects to idb (bi-directionally)
|
dpc25_SBDB: 1060, // sb pass-connects to idb (bi-directionally)
|
||||||
|
@ -801,8 +926,9 @@ dpc31_PCHPCH: 741, // load pch from pch incremented
|
||||||
dpc32_PCHADH: 1235, // drive adh from pch incremented
|
dpc32_PCHADH: 1235, // drive adh from pch incremented
|
||||||
dpc33_PCHDB: 247, // drive idb from pch incremented
|
dpc33_PCHDB: 247, // drive idb from pch incremented
|
||||||
dpc34_PCLC: 1704, // pch carry in and pcl FF detect?
|
dpc34_PCLC: 1704, // pch carry in and pcl FF detect?
|
||||||
dpc35_PCHC: 1334, // pcl 0x?F detect - half-carry
|
dpc35_PCHC: 1334, // pch 0x?F detect - half-carry
|
||||||
"dpc36_#IPC": 379, // pcl carry in (inverted)
|
"dpc36_#IPC": 379, // pcl carry in (inverted)
|
||||||
|
"dpc36_~IPC": 379, // automatic alias replacing hash with tilde
|
||||||
dpc37_PCLDB: 283, // drive idb from pcl incremented
|
dpc37_PCLDB: 283, // drive idb from pcl incremented
|
||||||
dpc38_PCLADL: 438, // drive adl from pcl incremented
|
dpc38_PCLADL: 438, // drive adl from pcl incremented
|
||||||
dpc39_PCLPCL: 898, // load pcl from pcl incremented
|
dpc39_PCLPCL: 898, // load pcl from pcl incremented
|
||||||
|
|
7024
transdefs.js
7024
transdefs.js
File diff suppressed because it is too large
Load Diff
29
wires.js
29
wires.js
|
@ -204,18 +204,33 @@ function ctxDrawBox(ctx, xMin, yMin, xMax, yMax){
|
||||||
function zoomToBox(xmin,xmax,ymin,ymax){
|
function zoomToBox(xmin,xmax,ymin,ymax){
|
||||||
var xmid=(xmin+xmax)/2;
|
var xmid=(xmin+xmax)/2;
|
||||||
var ymid=(ymin+ymax)/2;
|
var ymid=(ymin+ymax)/2;
|
||||||
var x=(xmid+400)/grChipSize*600;
|
var x=(xmid+grChipOffsetX)/grChipSize*600;
|
||||||
var y=600-ymid/grChipSize*600;
|
var y=600-(ymid-grChipOffsetY)/grChipSize*600;
|
||||||
var zoom=5; // pending a more careful calculation
|
// Zoom to fill 80% of the window with the selection
|
||||||
|
var fillfactor=0.80;
|
||||||
|
var dx=xmax-xmin;
|
||||||
|
var dy=ymax-ymin;
|
||||||
|
if (dx < 1) dx=1;
|
||||||
|
if (dy < 1) dy=1;
|
||||||
|
var zx=(800/600)*fillfactor*grChipSize/dx;
|
||||||
|
var zy=fillfactor*grChipSize/dy;
|
||||||
|
var zoom=Math.min(zx,zy);
|
||||||
|
if (zoom < 1) {
|
||||||
|
zoom = 1;
|
||||||
|
}
|
||||||
|
if (zoom > grMaxZoom) {
|
||||||
|
zoom = grMaxZoom;
|
||||||
|
}
|
||||||
moveHere([x,y,zoom]);
|
moveHere([x,y,zoom]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawSeg(ctx, seg){
|
function drawSeg(ctx, seg){
|
||||||
var dx = 400;
|
var dx = grChipOffsetX;
|
||||||
|
var dy = grChipOffsetY;
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.moveTo(grScale(seg[0]+dx), grScale(grChipSize-seg[1]));
|
ctx.moveTo(grScale(seg[0]+dx), grScale(grChipSize-seg[1]+dy));
|
||||||
for(var i=2;i<seg.length;i+=2) ctx.lineTo(grScale(seg[i]+dx), grScale(grChipSize-seg[i+1]));
|
for(var i=2;i<seg.length;i+=2) ctx.lineTo(grScale(seg[i]+dx), grScale(grChipSize-seg[i+1]+dy));
|
||||||
ctx.lineTo(grScale(seg[0]+dx), grScale(grChipSize-seg[1]));
|
ctx.lineTo(grScale(seg[0]+dx), grScale(grChipSize-seg[1]+dy));
|
||||||
}
|
}
|
||||||
|
|
||||||
function findNodeNumber(x,y){
|
function findNodeNumber(x,y){
|
||||||
|
|
Loading…
Reference in New Issue
Block a user