From 1df54a338f6100048dff4a7e6281f94c2e22dfdb Mon Sep 17 00:00:00 2001 From: Jeff Parsons Date: Mon, 19 Sep 2016 16:30:08 -0700 Subject: [PATCH] Assorted PDP-11 debugger changes --- devices/pdp11/machine/1170/test/machine.xml | 8 +- devices/pdp11/rom/custom/bootcode.json | 89 ++++++ docs/pcx86/examples/components.xsl | 8 +- docs/pcx86/examples/pcx86-dbg.js | 4 +- modules/pcx86/lib/debugger.js | 2 +- modules/pcx86/lib/x86cpu.js | 34 ++- modules/pdp11/bin/oct2hex.js | 4 +- modules/pdp11/lib/bus.js | 2 +- modules/pdp11/lib/cpustate.js | 51 +++- modules/pdp11/lib/debugger.js | 110 +++---- modules/pdp11/lib/defines.js | 15 +- modules/pdp11/lib/rom.js | 39 ++- modules/shared/lib/debugger.js | 32 +- modules/shared/lib/strlib.js | 4 +- modules/shared/templates/components.xsl | 8 +- versions/pc8080/1.30.0/components.xsl | 8 +- versions/pcx86/1.30.0/components.xsl | 8 +- versions/pcx86/1.30.0/pcx86-dbg.js | 4 +- versions/pdp11/1.30.0/components.xsl | 8 +- versions/pdp11/1.30.0/pdp11-dbg.js | 321 ++++++++++---------- versions/pdp11/1.30.0/pdp11.js | 16 +- 21 files changed, 499 insertions(+), 276 deletions(-) create mode 100644 devices/pdp11/rom/custom/bootcode.json diff --git a/devices/pdp11/machine/1170/test/machine.xml b/devices/pdp11/machine/1170/test/machine.xml index 680ce3694..b45d47b8e 100644 --- a/devices/pdp11/machine/1170/test/machine.xml +++ b/devices/pdp11/machine/1170/test/machine.xml @@ -2,9 +2,11 @@ PDP-11/70 Test Machine - - - + + + + + diff --git a/devices/pdp11/rom/custom/bootcode.json b/devices/pdp11/rom/custom/bootcode.json new file mode 100644 index 000000000..2feb7b272 --- /dev/null +++ b/devices/pdp11/rom/custom/bootcode.json @@ -0,0 +1,89 @@ +{"words":[ +0x0005 /*0000005*/,0x0A1F /*0005037*/,0xFFFE /*0177776*/,0x15C6 /*0012706*/,0xC000 /*0140000*/,0x0A1F /*0005037*/,0xFF74 /*0177564*/,0x15C0 /*0012700*/, +0xC249 /*0141111*/,0x09F7 /*0004767*/,0x0052 /*0000122*/,0x15DF /*0012737*/,0xC054 /*0140124*/,0x0040 /*0000100*/,0x15DF /*0012737*/,0x00E0 /*0000340*/, +0x0042 /*0000102*/,0x55DF /*0052737*/,0x0040 /*0000100*/,0xFF66 /*0177546*/,0x15C0 /*0012700*/,0xC273 /*0141163*/,0x09F7 /*0004767*/,0x0038 /*0000070*/, +0xE5C6 /*0162706*/,0x00AE /*0000256*/,0x1180 /*0010600*/,0x09F7 /*0004767*/,0x006A /*0000152*/,0x0A00 /*0005000*/,0x0001 /*0000001*/,0x0A80 /*0005200*/, +0x0BF7 /*0005767*/,0x000C /*0000014*/,0x03FB /*0001773*/,0x15E6 /*0012746*/,0x5800 /*0054000*/,0x1DE6 /*0016746*/,0x0002 /*0000002*/,0x0006 /*0000006*/, +0x0000 /*0000000*/,0x0000 /*0000000*/,0x0AB7 /*0005267*/,0xFFFA /*0177772*/,0x0006 /*0000006*/,0x8BDF /*0105737*/,0xFF74 /*0177564*/,0x80FD /*0100375*/, +0x901F /*0110037*/,0xFF76 /*0177566*/,0x0087 /*0000207*/,0x0000 /*0000000*/,0xB5DF /*0132737*/,0x0040 /*0000100*/,0xFF74 /*0177564*/,0x02FC /*0001374*/, +0x1037 /*0010067*/,0xFFF2 /*0177762*/,0x15DF /*0012737*/,0xC088 /*0140210*/,0x0034 /*0000064*/,0x15DF /*0012737*/,0x0080 /*0000200*/,0x0036 /*0000066*/, +0xD5DF /*0152737*/,0x0040 /*0000100*/,0xFF74 /*0177564*/,0x0087 /*0000207*/,0x8BFF /*0105777*/,0xFFDA /*0177732*/,0x0306 /*0001406*/,0x9FDF /*0117737*/, +0xFFD4 /*0177724*/,0xFF76 /*0177566*/,0x0AB7 /*0005267*/,0xFFCE /*0177716*/,0x0006 /*0000006*/,0x8A1F /*0105037*/,0xFF74 /*0177564*/,0x0006 /*0000006*/, +0x0000 /*0000000*/,0x0000 /*0000000*/,0x1037 /*0010067*/,0xFFF8 /*0177770*/,0x0A37 /*0005067*/,0xFFF6 /*0177766*/,0x15DF /*0012737*/,0xC0C0 /*0140300*/, +0x0030 /*0000060*/,0x15DF /*0012737*/,0x0080 /*0000200*/,0x0032 /*0000062*/,0xD5DF /*0152737*/,0x0040 /*0000100*/,0xFF70 /*0177560*/,0x0087 /*0000207*/, +0x1026 /*0010046*/,0x97C0 /*0113700*/,0xFF72 /*0177562*/,0xA017 /*0120027*/,0x000D /*0000015*/,0x032D /*0001455*/,0xA017 /*0120027*/,0x007F /*0000177*/, +0x0303 /*0001403*/,0xA017 /*0120027*/,0x0008 /*0000010*/,0x020A /*0001012*/,0x0BF7 /*0005767*/,0xFFC6 /*0177706*/,0x0306 /*0001406*/,0x0AF7 /*0005367*/, +0xFFC0 /*0177700*/,0x15C0 /*0012700*/,0xC217 /*0141027*/,0x09F7 /*0004767*/,0xFF7E /*0177576*/,0x012B /*0000453*/,0xA017 /*0120027*/,0x0020 /*0000040*/, +0x0528 /*0002450*/,0xA017 /*0120027*/,0x007F /*0000177*/,0x0425 /*0002045*/,0x09F7 /*0004767*/,0xFF5E /*0177536*/,0xA017 /*0120027*/,0x007A /*0000172*/, +0x0605 /*0003005*/,0xA017 /*0120027*/,0x0061 /*0000141*/,0x0502 /*0002402*/,0xC5C0 /*0142700*/,0x0020 /*0000040*/,0x2DD7 /*0026727*/,0xFF92 /*0177622*/, +0x00AC /*0000254*/,0x0417 /*0002027*/,0x9026 /*0110046*/,0x1DC0 /*0016700*/,0xFF86 /*0177606*/,0x6DC0 /*0066700*/,0xFF84 /*0177604*/,0x9588 /*0112610*/, +0x0AB7 /*0005267*/,0xFF7E /*0177576*/,0x010E /*0000416*/,0x1DC0 /*0016700*/,0xFF76 /*0177566*/,0x6DC0 /*0066700*/,0xFF74 /*0177564*/,0x8A08 /*0105010*/, +0x15DF /*0012737*/,0xC146 /*0140506*/,0x00A0 /*0000240*/,0x15DF /*0012737*/,0x0040 /*0000100*/,0x00A2 /*0000242*/,0x15DF /*0012737*/,0x0400 /*0002000*/, +0xFFFA /*0177772*/,0x1580 /*0012600*/,0x0006 /*0000006*/,0x0A1F /*0005037*/,0xFFFA /*0177772*/,0x1026 /*0010046*/,0x1066 /*0010146*/,0x10A6 /*0010246*/, +0x10E6 /*0010346*/,0x1126 /*0010446*/,0x15C0 /*0012700*/,0xC214 /*0141024*/,0x09F7 /*0004767*/,0xFF0C /*0177414*/,0xB5DF /*0132737*/,0x0040 /*0000100*/, +0xFF74 /*0177564*/,0x02FC /*0001374*/,0x0A04 /*0005004*/,0x15C3 /*0012703*/,0xC21B /*0141033*/,0x94C0 /*0112300*/,0x0319 /*0001431*/,0x1DC2 /*0016702*/, +0xFF2E /*0177456*/,0x9481 /*0112201*/,0x0319 /*0001431*/,0xA057 /*0120127*/,0x0020 /*0000040*/,0x03FB /*0001773*/,0xA001 /*0120001*/,0x0208 /*0001010*/, +0x94C0 /*0112300*/,0x030A /*0001412*/,0x9481 /*0112201*/,0x0308 /*0001410*/,0xA057 /*0120127*/,0x0020 /*0000040*/,0x02F7 /*0001367*/,0x0104 /*0000404*/, +0x94C0 /*0112300*/,0x02FE /*0001376*/,0x0A84 /*0005204*/,0x01E9 /*0000751*/,0x0CC4 /*0006304*/,0x09FC /*0004774*/,0xC1C0 /*0140700*/,0x0104 /*0000404*/, +0x15C0 /*0012700*/,0xC237 /*0141067*/,0x09F7 /*0004767*/,0xFEC0 /*0177300*/,0x0A37 /*0005067*/,0xFEF6 /*0177366*/,0x15C0 /*0012700*/,0xC273 /*0141163*/, +0x09F7 /*0004767*/,0xFEB4 /*0177264*/,0x1584 /*0012604*/,0x1583 /*0012603*/,0x1582 /*0012602*/,0x1581 /*0012601*/,0x1580 /*0012600*/,0x0006 /*0000006*/, +0xC432 /*0142062*/,0xC2AE /*0141256*/,0xC2BA /*0141272*/,0xC2FE /*0141376*/,0xC2A4 /*0141244*/,0x4F43 /*0047503*/,0x4D4D /*0046515*/,0x4E41 /*0047101*/, +0x5344 /*0051504*/,0x4120 /*0040440*/,0x4552 /*0042522*/,0x4220 /*0041040*/,0x4F4F /*0047517*/,0x2C54 /*0026124*/,0x4820 /*0044040*/,0x4C41 /*0046101*/, +0x2C54 /*0026124*/,0x5420 /*0052040*/,0x5345 /*0051505*/,0x2054 /*0020124*/,0x4E41 /*0047101*/,0x2044 /*0020104*/,0x4548 /*0042510*/,0x504C /*0050114*/, +0x0A0D /*0005015*/,0x4F42 /*0047502*/,0x544F /*0052117*/,0x4420 /*0042040*/,0x5645 /*0053105*/,0x4349 /*0041511*/,0x5345 /*0051505*/,0x4120 /*0040440*/, +0x4552 /*0042522*/,0x5220 /*0051040*/,0x3F4B /*0037513*/,0x5220 /*0051040*/,0x3F4C /*0037514*/,0x4F20 /*0047440*/,0x2052 /*0020122*/,0x5052 /*0050122*/, +0x0D3F /*0006477*/,0x000A /*0000012*/,0x0A0D /*0005015*/,0x0800 /*0004000*/,0x0820 /*0004040*/,0x4200 /*0041000*/,0x4F4F /*0047517*/,0x0054 /*0000124*/, +0x4148 /*0040510*/,0x544C /*0052114*/,0x5400 /*0052000*/,0x5345 /*0051505*/,0x0054 /*0000124*/,0x494C /*0044514*/,0x4847 /*0044107*/,0x5354 /*0051524*/, +0x4800 /*0044000*/,0x4C45 /*0046105*/,0x0050 /*0000120*/,0x5500 /*0052400*/,0x4B4E /*0045516*/,0x4F4E /*0047516*/,0x4E57 /*0047127*/,0x4320 /*0041440*/, +0x4D4F /*0046517*/,0x414D /*0040515*/,0x444E /*0042116*/,0x0D0A /*0006412*/,0x5000 /*0050000*/,0x5541 /*0052501*/,0x204C /*0020114*/,0x414E /*0040516*/, +0x4B4E /*0045516*/,0x5245 /*0051105*/,0x4956 /*0044526*/,0x2053 /*0020123*/,0x202D /*0020055*/,0x4150 /*0040520*/,0x4C55 /*0046125*/,0x414E /*0040516*/, +0x4B4E /*0045516*/,0x4840 /*0044100*/,0x544F /*0052117*/,0x414D /*0040515*/,0x4C49 /*0046111*/,0x432E /*0041456*/,0x4D4F /*0046517*/,0x0D0A /*0006412*/, +0x0D0A /*0006412*/,0x4200 /*0041000*/,0x4F4F /*0047517*/,0x3E54 /*0037124*/,0x0020 /*0000040*/,0x4E55 /*0047125*/,0x4E4B /*0047113*/,0x574F /*0053517*/, +0x204E /*0020116*/,0x4F42 /*0047502*/,0x544F /*0052117*/,0x4420 /*0042040*/,0x5645 /*0053105*/,0x4349 /*0041511*/,0x0A45 /*0005105*/,0x000D /*0000015*/, +0x2020 /*0020040*/,0x2020 /*0020040*/,0x2020 /*0020040*/,0x4C43 /*0046103*/,0x434F /*0041517*/,0x204B /*0020113*/,0x4954 /*0044524*/,0x4B43 /*0045503*/, +0x0A53 /*0005123*/,0x000D /*0000015*/,0x15C0 /*0012700*/,0xC1CA /*0140712*/,0x09F7 /*0004767*/,0xFDBC /*0176674*/,0x0087 /*0000207*/,0x0000 /*0000000*/, +0x15C0 /*0012700*/,0xC214 /*0141024*/,0x09F7 /*0004767*/,0xFDB0 /*0176660*/,0x0087 /*0000207*/,0x0A37 /*0005067*/,0xFD94 /*0176624*/,0x15C5 /*0012705*/, +0x1A00 /*0015000*/,0x115F /*0010537*/,0xFF78 /*0177570*/,0x1144 /*0010504*/,0x0C84 /*0006204*/,0x0A00 /*0005000*/,0x1141 /*0010501*/,0x7204 /*0071004*/, +0x1002 /*0010002*/,0x7084 /*0070204*/,0x60C1 /*0060301*/,0x2045 /*0020105*/,0x0301 /*0001401*/,0x0000 /*0000000*/,0x7F0A /*0077412*/,0x7F4F /*0077517*/, +0x15C0 /*0012700*/,0xC295 /*0141225*/,0x1DC3 /*0016703*/,0xFD6A /*0176552*/,0x0A02 /*0005002*/,0x7297 /*0071227*/,0x0008 /*0000010*/,0x65C3 /*0062703*/, +0x0030 /*0000060*/,0x90E0 /*0110340*/,0x1083 /*0010203*/,0x02F8 /*0001370*/,0x09F7 /*0004767*/,0xFD6C /*0176554*/,0x0087 /*0000207*/,0x15C3 /*0012703*/, +0x7F06 /*0077406*/,0x0A02 /*0005002*/,0x0A01 /*0005001*/,0x15C0 /*0012700*/,0x0008 /*0000010*/,0x10F1 /*0010361*/,0xF4C0 /*0172300*/,0x10B1 /*0010261*/, +0xF4E0 /*0172340*/,0x10F1 /*0010361*/,0xF4D0 /*0172320*/,0x10B1 /*0010261*/,0xF4F0 /*0172360*/,0x10F1 /*0010361*/,0xF480 /*0172200*/,0x10B1 /*0010261*/, +0xF4A0 /*0172240*/,0x10F1 /*0010361*/,0xF490 /*0172220*/,0x10B1 /*0010261*/,0xF4B0 /*0172260*/,0x10F1 /*0010361*/,0xFF80 /*0177600*/,0x10B1 /*0010261*/, +0xFFA0 /*0177640*/,0x10F1 /*0010361*/,0xFF90 /*0177620*/,0x10F1 /*0010361*/,0xFFB0 /*0177660*/,0x65C2 /*0062702*/,0x0080 /*0000200*/,0x65C1 /*0062701*/, +0x0002 /*0000002*/,0x7E1D /*0077035*/,0x55DF /*0052737*/,0xFC00 /*0176000*/,0xF4FE /*0172376*/,0x55DF /*0052737*/,0xFC00 /*0176000*/,0xF4BE /*0172276*/, +0x55DF /*0052737*/,0xFC00 /*0176000*/,0xFFBE /*0177676*/,0x15DF /*0012737*/,0x003F /*0000077*/,0xF54E /*0172516*/,0x15DF /*0012737*/,0x0001 /*0000001*/, +0xFF7A /*0177572*/,0x15DF /*0012737*/,0x03C0 /*0001700*/,0xF4A4 /*0172244*/,0x15DF /*0012737*/,0x03C0 /*0001700*/,0xF4B4 /*0172264*/,0x15DF /*0012737*/, +0x1000 /*0010000*/,0xFFFE /*0177776*/,0x15C3 /*0012703*/,0x4080 /*0040200*/,0x15C2 /*0012702*/,0xC38E /*0141616*/,0x14A6 /*0012246*/,0x0D93 /*0006623*/, +0x2097 /*0020227*/,0xC432 /*0142062*/,0x87FB /*0103773*/,0x15F7 /*0012767*/,0x4080 /*0040200*/,0xFCC4 /*0176304*/,0x0087 /*0000207*/,0x15C0 /*0012700*/, +0x001F /*0000037*/,0x15C1 /*0012701*/,0xF800 /*0174000*/,0x35DF /*0032737*/,0x0001 /*0000001*/,0xFF78 /*0177570*/,0x030C /*0001414*/,0x15C0 /*0012700*/, +0x0F0F /*0007417*/,0x1001 /*0010001*/,0x0A41 /*0005101*/,0x35DF /*0032737*/,0x0002 /*0000002*/,0xFF78 /*0177570*/,0x0304 /*0001404*/,0x15C0 /*0012700*/, +0x3C73 /*0036163*/,0x15C1 /*0012701*/,0x3E00 /*0037000*/,0x1042 /*0010102*/,0xE5C2 /*0162702*/,0x0002 /*0000002*/,0x45C2 /*0042702*/,0x0001 /*0000001*/, +0x1083 /*0010203*/,0x45C3 /*0042703*/,0xFFC1 /*0177701*/,0x15F3 /*0012763*/,0x0001 /*0000001*/,0x4000 /*0040000*/,0x65C3 /*0062703*/,0x0002 /*0000002*/, +0x15F3 /*0012763*/,0x004B /*0000113*/,0x4000 /*0040000*/,0x1084 /*0010204*/,0x7517 /*0072427*/,0xFFFA /*0177772*/,0x45C4 /*0042704*/,0xFF80 /*0177600*/, +0x15C5 /*0012705*/,0x03C0 /*0001700*/,0xE105 /*0160405*/,0x1084 /*0010204*/,0x7517 /*0072427*/,0xFFF4 /*0177764*/,0x45C4 /*0042704*/,0xFFF1 /*0177761*/, +0x1174 /*0010564*/,0xF4A0 /*0172240*/,0x1043 /*0010103*/,0x74D7 /*0072327*/,0xFFF4 /*0177764*/,0x45C3 /*0042703*/,0xFFF1 /*0177761*/,0x20C4 /*0020304*/, +0x030A /*0001412*/,0x1044 /*0010104*/,0x7517 /*0072427*/,0xFFFA /*0177772*/,0x45C4 /*0042704*/,0xFF80 /*0177600*/,0x15C5 /*0012705*/,0x03C0 /*0001700*/, +0xE105 /*0160405*/,0x1173 /*0010563*/,0xF4A0 /*0172240*/,0x15C4 /*0012704*/,0x0003 /*0000003*/,0x67C4 /*0063704*/,0xFF78 /*0177570*/,0x15C3 /*0012703*/, +0x0002 /*0000002*/,0x61C3 /*0060703*/,0x004A /*0000112*/,0x7F02 /*0077402*/,0x1002 /*0010002*/,0x0C02 /*0006002*/,0x0C41 /*0006101*/,0x0C00 /*0006000*/, +0x01C2 /*0000702*/,0x0A03 /*0005003*/,0x9481 /*0112201*/,0x0365 /*0001545*/,0xA057 /*0120127*/,0x0020 /*0000040*/,0x03FB /*0001773*/,0xA057 /*0120127*/, +0x0052 /*0000122*/,0x0305 /*0001405*/,0x15C0 /*0012700*/,0xC27A /*0141172*/,0x09F7 /*0004767*/,0xFC1C /*0176034*/,0x0087 /*0000207*/,0x9481 /*0112201*/, +0x9480 /*0112200*/,0x030E /*0001416*/,0xA017 /*0120027*/,0x0020 /*0000040*/,0x030B /*0001413*/,0xA017 /*0120027*/,0x0037 /*0000067*/,0x0619 /*0003031*/, +0xE5C0 /*0162700*/,0x0030 /*0000060*/,0x0516 /*0002426*/,0x0CC3 /*0006303*/,0x0CC3 /*0006303*/,0x0CC3 /*0006303*/,0x5003 /*0050003*/,0x01F0 /*0000760*/, +0x0A02 /*0005002*/,0x15D2 /*0012722*/,0x005F /*0000137*/,0x15D2 /*0012722*/,0xC000 /*0140000*/,0x15D2 /*0012722*/,0xC000 /*0140000*/,0x0A12 /*0005022*/, +0xA057 /*0120127*/,0x004B /*0000113*/,0x033E /*0001476*/,0xA057 /*0120127*/,0x004C /*0000114*/,0x0308 /*0001410*/,0xA057 /*0120127*/,0x0050 /*0000120*/, +0x034F /*0001517*/,0x15C0 /*0012700*/,0xC237 /*0141067*/,0x09F7 /*0004767*/,0xFBCE /*0175716*/,0x0087 /*0000207*/,0x0005 /*0000005*/,0x00C3 /*0000303*/, +0x15C1 /*0012701*/,0xF900 /*0174400*/,0x15F1 /*0012761*/,0x000B /*0000013*/,0x0004 /*0000004*/,0x55C3 /*0052703*/,0x0004 /*0000004*/,0x10C9 /*0010311*/, +0x8BC9 /*0105711*/,0x80FE /*0100376*/,0x8A03 /*0105003*/,0x55C3 /*0052703*/,0x0008 /*0000010*/,0x10C9 /*0010311*/,0x8BC9 /*0105711*/,0x80FE /*0100376*/, +0x1C42 /*0016102*/,0x0006 /*0000006*/,0x45C2 /*0042702*/,0x003F /*0000077*/,0x0A82 /*0005202*/,0x10B1 /*0010261*/,0x0004 /*0000004*/,0x8A03 /*0105003*/, +0x55C3 /*0052703*/,0x0006 /*0000006*/,0x10C9 /*0010311*/,0x8BC9 /*0105711*/,0x80FE /*0100376*/,0x0A31 /*0005061*/,0x0002 /*0000002*/,0x0A31 /*0005061*/, +0x0004 /*0000004*/,0x15F1 /*0012761*/,0xFE00 /*0177000*/,0x0006 /*0000006*/,0x8A03 /*0105003*/,0x55C3 /*0052703*/,0x000C /*0000014*/,0x10C9 /*0010311*/, +0x8BC9 /*0105711*/,0x80FE /*0100376*/,0x45C9 /*0042711*/,0x00FF /*0000377*/,0x0A02 /*0005002*/,0x0A03 /*0005003*/,0x0A04 /*0005004*/,0x0A05 /*0005005*/, +0x0A07 /*0005007*/,0x0005 /*0000005*/,0x00C3 /*0000303*/,0x0CC3 /*0006303*/,0x0CC3 /*0006303*/,0x0CC3 /*0006303*/,0x0CC3 /*0006303*/,0x0CC3 /*0006303*/, +0x15C1 /*0012701*/,0xFF0A /*0177412*/,0x10C9 /*0010311*/,0x0A21 /*0005041*/,0x15E1 /*0012741*/,0xFE00 /*0177000*/,0x15E1 /*0012741*/,0x0005 /*0000005*/, +0x0A02 /*0005002*/,0x0A03 /*0005003*/,0x0A04 /*0005004*/,0x0A05 /*0005005*/,0x8BC9 /*0105711*/,0x80FE /*0100376*/,0x8A09 /*0105011*/,0x0A07 /*0005007*/, +0x0005 /*0000005*/,0x15C1 /*0012701*/,0xFDC0 /*0176700*/,0x15F1 /*0012761*/,0x0020 /*0000040*/,0x0008 /*0000010*/,0x10F1 /*0010361*/,0x0008 /*0000010*/, +0x15C9 /*0012711*/,0x0011 /*0000021*/,0x15F1 /*0012761*/,0x1000 /*0010000*/,0x001A /*0000032*/,0x15F1 /*0012761*/,0xFE00 /*0177000*/,0x0002 /*0000002*/, +0x0A31 /*0005061*/,0x0004 /*0000004*/,0x0A31 /*0005061*/,0x0006 /*0000006*/,0x0A31 /*0005061*/,0x001C /*0000034*/,0x15C9 /*0012711*/,0x0039 /*0000071*/, +0x8BC9 /*0105711*/,0x80FE /*0100376*/,0x8A09 /*0105011*/,0x0A07 /*0005007*/,0x0000 /*0000000*/,0x0000 /*0000000*/,0x0000 /*0000000*/,0x0000 /*0000000*/ +]} diff --git a/docs/pcx86/examples/components.xsl b/docs/pcx86/examples/components.xsl index 710c78643..13039f121 100644 --- a/docs/pcx86/examples/components.xsl +++ b/docs/pcx86/examples/components.xsl @@ -578,6 +578,12 @@ null + + + + 0 + + @@ -602,7 +608,7 @@ - ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,csStart:,csInterval:,csStop: + ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,resetAddr:,csStart:,csInterval:,csStop: diff --git a/docs/pcx86/examples/pcx86-dbg.js b/docs/pcx86/examples/pcx86-dbg.js index 4d57ef807..876af928e 100644 --- a/docs/pcx86/examples/pcx86-dbg.js +++ b/docs/pcx86/examples/pcx86-dbg.js @@ -707,8 +707,8 @@ function fr(a,b,c,d){var e,f=c?a.aa:a.sb;c=d?0:f.type;var g=f.Ra,h=f.Z,f=f.Ea;if k)return e;0>f?null!=h?(g=lq(a,b,void 0),f=null):(f=lq(a,b,void 0),null==f&&(g=null)):(h=lq(a,b.substring(0,f),void 0),g=lq(a,b.substring(f+1),void 0),f=null)}null!=g&&(e=rq(a,g,h,f,c),d||er(a,e,!0)||(a.O("invalid offset: "+Zq(e)),e=null));return e}function gr(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.kl=a.Mg(b.Rk=c[2]))}m.Ok=function(a,b){var c=fr(this,b);return a.replace("["+b+"]",c?t(this.tb(c),c.Rb?8:4):"undefined")}; function ar(a,b,c){c=c||1;null!=b.Ea&&(b.Ea+=c);null!=b.Z&&(b.Ra+=c,er(a,b)||(b.Ra=0,b.Ea=null))}function Pq(a,b,c){return null!=b?t(b,4)+":"+t(a,a&-65536||c?8:4):t(a)}function Zq(a){var b;switch(a.type){case 1:case 3:b="&";break;case 2:b="#";break;case 4:b="%";break;case 5:b="%%";break;default:b=a.Z?"":"%"}return 4<=a.type||null==a.Z?b+t(a.Ea):b+Pq(a.Ra,a.Z,a.oc)} function Qq(a,b,c){var d="";for(c=c||256;d.length>>a.F.La;g=1}a.O("blockid "+(d?"linear ":"physical")+" blockaddr used size type");a.O("-------- --------- ---------- ------ ------ ----");c=-1;for(var h=0;g--;)(d=b[f])&&5==d.type&&(d=Kc(a.F,e,!1,!0)),d.type==c?h++||a.O("..."):(c=d.type,h=ac[c],6==c&&(d=d.Bd,h+=" -> "+ac[d.type]),d&&a.O(t(d.id)+" %"+t(f<>>a.F.La;g=1}a.O("blockid "+(d?"linear ":"physical")+" blockaddr used size type");a.O("-------- --------- ---------- ------ ------ ----");c=-1;for(var h=0;g--;)(d=b[f])&&5==d.type&&(d=Kc(a.F,e,!1,!0)),d.type==c?h++||a.O("..."):(c=d.type,h=ac[c],6==c&&(d=d.Bd,h+=" -> "+ac[d.type]),d&&a.O(t(d.id,8)+" %"+t(f<= 0 && match.index > iComment) break; @@ -47,7 +47,7 @@ try { console.log("found negative octal value (" + match[2] + "), skipping"); continue; } - var sReplace = match[1] + "0x" + n.toString(16).toUpperCase() + match[3] + " /*" + match[2] + "*/"; + var sReplace = match[1] + "0x" + ("0000" + n.toString(16).toUpperCase()).substr(-4) + match[3] + " /*" + match[2] + "*/"; sLine = sLine.substr(0, match.index) + sReplace + sLine.substr(match.index + match[0].length); re.lastIndex = match.index + sReplace.length; asLines[iLine] = sLine; diff --git a/modules/pdp11/lib/bus.js b/modules/pdp11/lib/bus.js index fc9b24672..af176401e 100644 --- a/modules/pdp11/lib/bus.js +++ b/modules/pdp11/lib/bus.js @@ -333,7 +333,7 @@ BusPDP11.prototype.addMemory = function(addr, size, type) } if (sizeLeft <= 0) { - this.status(Math.floor(size / 1024) + "Kb " + MemoryPDP11.TYPE.NAMES[type] + " at " + str.toHexWord(addr)); + this.status(Math.floor(size / 1024) + "Kb " + MemoryPDP11.TYPE.NAMES[type] + " at " + str.toHexLong(addr)); return true; } diff --git a/modules/pdp11/lib/cpustate.js b/modules/pdp11/lib/cpustate.js index 4df496ccd..3a82c9db2 100644 --- a/modules/pdp11/lib/cpustate.js +++ b/modules/pdp11/lib/cpustate.js @@ -50,6 +50,7 @@ if (NODE) { * The CPUStatePDP11 class uses the following (parmsCPU) properties: * * model: a number (eg, 1170) that should match one of the PDP11.MODEL_* values + * resetAddr: reset address (default is 0) * * This extends the CPU class and passes any remaining parmsCPU properties to the CPU class * constructor, along with a default speed (cycles per second) based on the specified (or default) @@ -62,6 +63,7 @@ if (NODE) { function CPUStatePDP11(parmsCPU) { this.model = +parmsCPU['model'] || PDP11.MODEL_1170; + this.resetAddr = parmsCPU['resetAddr'] || 0; var nCyclesDefault = 0; switch(this.model) { @@ -125,11 +127,45 @@ CPUStatePDP11.prototype.reset = function() */ CPUStatePDP11.prototype.initRegs = function() { - // BEGIN pdp11.js:40:82 + /* + * Instead of having separate flagC, flagZ and flagN variables, I would prefer to have only one: flagsCZN. + * The C and N flags don't conflict; they are always bits 16 and 15 of the last 16-bit arithmetic result (or + * bits 8 and 7 of the last 8-bit arithmetic result). The Z flag is a "bit" more complicated, because it's a + * representation of bits 15-0 (or 7-0), which overlap the N flag bit. That overlap is fine after any given + * arithmetic operation, because of the four possible N and Z combinations: + * + * N Z + * - - + * 0 0 Positive non-zero number + * 0 1 Zero + * 1 0 Negative non-zero number + * 1 1 INVALID + * + * the fourth combination is an impossibility (the world of floating point numbers, with their NaNs, positive + * and negative zeros, infinities, etc, is another story, which doesn't concern us here). + * + * The problem is that some intervening NON-arithmetic instruction (eg, SEN or SEZ) could be executed that sets + * either N or Z independently, resulting in BOTH flags being set. + * + * One way to support that combination would be to define Z as the result of all non-sign bits. However, + * that means that, after any arithmetic operation, we would have to propagate the sign bit of the result to + * one or more other bits in flagsCZN; eg: + * + * flagsCZN = result | ((result & 0x8000) >> 1) + * or: + * flagsCZN = result | ((result & 0xffff)? 1 : 0) + * + * It's worth noting that all that extra work is actually required for only ONE 16-bit value: -32768 or 0x8000 + * (and ONE 8-bit value: -128 or 0x80), because all other negative numbers already have 1 or more lower bits set. + * + * A simpler approach would be to leave flagN independent, and only combine flagC and flagZ (into flagCZ). + * Alternatively, we could combine flagC and flagN and leave flagZ independent; the choice is arbitrary. -JP + */ this.flagC = 0x10000; // PSW C bit - this.flagN = 0x8000; // PSW N bit this.flagV = 0x8000; // PSW V bit this.flagZ = 0xffff; // ~ PSW Z bit + this.flagN = 0x8000; // PSW N bit + this.PSW = 0xf; // PSW other bits this.regsGen = [ // General R0 - R7 0, 0, 0, 0, 0, 0, 0, 0 @@ -137,7 +173,7 @@ CPUStatePDP11.prototype.initRegs = function() this.regsAlt = [ // Alternate R0 - R5 0, 0, 0, 0, 0, 0 ]; - this.regsAltStack = [ // Alternate R6 (kernel, super, illegal, user) + this.regsAltStack = [ // Alternate R6 stack pointers (kernel, super, illegal, user) 0, 0, 0, 0 ]; this.memory = []; // Main memory (words) @@ -177,7 +213,6 @@ CPUStatePDP11.prototype.initRegs = function() 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; this.debugPC = -1; - // END pdp11.js:40:82 }; /** @@ -187,6 +222,7 @@ CPUStatePDP11.prototype.initRegs = function() */ CPUStatePDP11.prototype.resetRegs = function() { + this.setPC(this.resetAddr); this.stackLimit = 0xff; this.CPU_Error = 0; this.interruptQueue = []; @@ -660,14 +696,15 @@ CPUStatePDP11.prototype.panic = function(reason) /** * trap(vector, reason) * - * trap() handles all the trap/abort functions. It reads the trap vector from kernel + * trap() handles all the trap/abort functions. It reads the trap vector from kernel * D space, changes mode to reflect the new PSW and PC, and then pushes the old PSW and - * PC onto the new mode stack. trap() returns a -1 which is passed up through function + * PC onto the new mode stack. trap() returns a -1 which is passed up through function * calls to indicate that a trap/abort has occurred (suspend instruction processing). * * @this {CPUStatePDP11} * @param {number} vector * @param {number} reason + * @return {number} */ CPUStatePDP11.prototype.trap = function(vector, reason) { @@ -1320,7 +1357,6 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) nDebugState = 1; } - // BEGIN pdp11.js:886:1936 var instruction, src, dst, @@ -2401,7 +2437,6 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) } this.trapMask = 0; } - // END pdp11.js:886:1936 } while (this.nStepCycles > 0); } diff --git a/modules/pdp11/lib/debugger.js b/modules/pdp11/lib/debugger.js index 54c959799..a9cae962e 100644 --- a/modules/pdp11/lib/debugger.js +++ b/modules/pdp11/lib/debugger.js @@ -260,28 +260,19 @@ if (DEBUGGER) { DebuggerPDP11.REG_PC = 7; // aka R7 DebuggerPDP11.REG_PSW = 20; - DebuggerPDP11.MODE_REG = 0x0; // REGISTER (register is operand) - DebuggerPDP11.MODE_REGD = 0x1; // REGISTER DEFERRED (register is address of operand) - DebuggerPDP11.MODE_POSTINC = 0x2; // POST-INCREMENT (register is address of operand, register incremented) - DebuggerPDP11.MODE_POSTINCD = 0x3; // POST-INCREMENT DEFERRED (register is address of address of operand, register incremented) - DebuggerPDP11.MODE_PREDEC = 0x4; // PRE-DECREMENT (register decremented, register is address of operand) - DebuggerPDP11.MODE_PREDECD = 0x5; // PRE-DECREMENT DEFERRED (register decremented, register is address of address of operand) - DebuggerPDP11.MODE_INDEX = 0x6; // INDEX (register + next word is address of operand) - DebuggerPDP11.MODE_INDEXD = 0x7; // INDEX DEFERRED (register + next word is address of address of operand) - /* * Operand descriptor masks; anything that's not covered by TYPE_SRC or TYPE_DST must be a TYPE_OTHER value. */ DebuggerPDP11.TYPE_DSTREG = 0x0007; - DebuggerPDP11.TYPE_DSTMOD = 0x0038; - DebuggerPDP11.TYPE_DST = (DebuggerPDP11.TYPE_DSTMOD | DebuggerPDP11.TYPE_DSTREG); + DebuggerPDP11.TYPE_DSTMODE = 0x0038; + DebuggerPDP11.TYPE_DST = (DebuggerPDP11.TYPE_DSTMODE | DebuggerPDP11.TYPE_DSTREG); DebuggerPDP11.TYPE_SRCREG = 0x01C0; - DebuggerPDP11.TYPE_SRCMOD = 0x0E00; - DebuggerPDP11.TYPE_SRC = (DebuggerPDP11.TYPE_SRCMOD | DebuggerPDP11.TYPE_SRCREG); + DebuggerPDP11.TYPE_SRCMODE = 0x0E00; + DebuggerPDP11.TYPE_SRC = (DebuggerPDP11.TYPE_SRCMODE | DebuggerPDP11.TYPE_SRCREG); DebuggerPDP11.TYPE_BRANCH = 0x1000; DebuggerPDP11.TYPE_DSTOFF = 0x2000; DebuggerPDP11.TYPE_DSTNUM3 = 0x3000; // DST 3-bit number (ie, just the DSTREG field) - DebuggerPDP11.TYPE_DSTNUM6 = 0x6000; // DST 6-bit number (ie, both the DSTREG and DSTMOD fields) + DebuggerPDP11.TYPE_DSTNUM6 = 0x6000; // DST 6-bit number (ie, both the DSTREG and DSTMODE fields) DebuggerPDP11.TYPE_OTHER = 0xF000; /* @@ -791,27 +782,27 @@ if (DEBUGGER) { }; /** - * toHexOffset(off) + * toStrOffset(off) * * @this {DebuggerPDP11} * @param {number|null|undefined} [off] * @return {string} the hex representation of off */ - DebuggerPDP11.prototype.toHexOffset = function(off) + DebuggerPDP11.prototype.toStrOffset = function(off) { - return str.toHex(off, 4); + return this.toStrBase(off); }; /** - * toHexAddr(dbgAddr) + * toStrAddr(dbgAddr) * * @this {DebuggerPDP11} * @param {DbgAddrPDP11} dbgAddr * @return {string} the hex representation of the address */ - DebuggerPDP11.prototype.toHexAddr = function(dbgAddr) + DebuggerPDP11.prototype.toStrAddr = function(dbgAddr) { - return this.toHexOffset(dbgAddr.addr); + return this.toStrOffset(dbgAddr.addr); }; /** @@ -871,7 +862,7 @@ if (DEBUGGER) { typePrev = block.type; var sType = MemoryPDP11.TYPE.NAMES[typePrev]; if (block) { - this.println(str.toHex(block.id) + " %" + str.toHex(i << this.bus.nBlockShift) + " %%" + str.toHex(block.addr) + " " + str.toHexWord(block.used) + " " + str.toHexWord(block.size) + " " + sType); + this.println(str.toHex(block.id, 8) + " %" + str.toHex(i << this.bus.nBlockShift, 8) + " %%" + str.toHex(block.addr, 8) + " " + str.toHexWord(block.used) + " " + str.toHexWord(block.size) + " " + sType); } if (typePrev != MemoryPDP11.TYPE.NONE) typePrev = -1; cPrev = 0; @@ -1080,7 +1071,7 @@ if (DEBUGGER) { DebuggerPDP11.prototype.message = function(sMessage, fAddress) { if (fAddress) { - sMessage += " at " + this.toHexAddr(this.newAddr(this.cpu.getPC())); + sMessage += " at " + this.toStrAddr(this.newAddr(this.cpu.getPC())); } if (this.bitsMessage & MessagesPDP11.BUFFER) { @@ -1657,7 +1648,7 @@ if (DEBUGGER) { if (aBreak != this.aBreakExec) { var addr = this.getAddr(dbgAddr); if (addr === PDP11.ADDR_INVALID) { - this.println("invalid address: " + this.toHexAddr(dbgAddr)); + this.println("invalid address: " + this.toStrAddr(dbgAddr)); fSuccess = false; } else { this.bus.addMemBreak(addr, aBreak == this.aBreakWrite); @@ -1751,7 +1742,7 @@ if (DEBUGGER) { DebuggerPDP11.prototype.printBreakpoint = function(aBreak, i, sAction) { var dbgAddr = aBreak[i]; - this.println(aBreak[0] + ' ' + this.toHexAddr(dbgAddr) + (sAction? (' ' + sAction) : (dbgAddr.sCmd? (' "' + dbgAddr.sCmd + '"') : ''))); + this.println(aBreak[0] + ' ' + this.toStrAddr(dbgAddr) + (sAction? (' ' + sAction) : (dbgAddr.sCmd? (' "' + dbgAddr.sCmd + '"') : ''))); }; /** @@ -1929,16 +1920,16 @@ if (DEBUGGER) { sOperands += (sOperand || "???"); } - var sBytes = ""; - var sLine = this.toHexAddr(dbgAddrOp) + ": "; + var sOpcodes = ""; + var sLine = this.toStrAddr(dbgAddrOp) + ": "; if (dbgAddrOp.addr !== PDP11.ADDR_INVALID && dbgAddr.addr !== PDP11.ADDR_INVALID) { do { - sBytes += str.toHex(this.getByte(dbgAddrOp, 1), 2); + sOpcodes += this.toStrBase(this.getWord(dbgAddrOp, true)); if (dbgAddrOp.addr == null) break; } while (dbgAddrOp.addr != dbgAddr.addr); } - sLine += str.pad(sBytes, 10); + sLine += str.pad(sOpcodes, 10); sLine += str.pad(sOpName, 7); if (sOperands) sLine += ' ' + sOperands; @@ -2008,14 +1999,14 @@ if (DEBUGGER) { * Note that opcodes that specify only REG bits in the type mask (ie, no MOD bits) * will automatically default to MODE_REG below. */ - switch(mode & DebuggerPDP11.TYPE_DSTMOD) { - case DebuggerPDP11.MODE_REG: // 0x0: REGISTER + switch(mode & DebuggerPDP11.TYPE_DSTMODE) { + case PDP11.OPMODE.REG: // 0x0: REGISTER sOperand = "R" + reg; break; - case DebuggerPDP11.MODE_REGD: // 0x1: REGISTER DEFERRED + case PDP11.OPMODE.REGD: // 0x1: REGISTER DEFERRED sOperand = "@R" + reg; break; - case DebuggerPDP11.MODE_POSTINC: // 0x2: POST-INCREMENT + case PDP11.OPMODE.POSTINC: // 0x2: POST-INCREMENT if (reg < 7) { sOperand = "(R" + reg + ")+"; } else { @@ -2026,7 +2017,7 @@ if (DEBUGGER) { sOperand = "#" + str.toHexWord(wIndex); } break; - case DebuggerPDP11.MODE_POSTINCD: // 0x3: POST-INCREMENT DEFERRED + case PDP11.OPMODE.POSTINCD: // 0x3: POST-INCREMENT DEFERRED if (reg < 7) { sOperand = "@(R" + reg + ")+"; } else { @@ -2037,20 +2028,20 @@ if (DEBUGGER) { sOperand = "@#" + str.toHexWord(wIndex); } break; - case DebuggerPDP11.MODE_PREDEC: // 0x4: PRE-DECREMENT + case PDP11.OPMODE.PREDEC: // 0x4: PRE-DECREMENT sOperand = "-(R" + reg + ")"; break; - case DebuggerPDP11.MODE_PREDECD: // 0x5: PRE-DECREMENT DEFERRED + case PDP11.OPMODE.PREDECD: // 0x5: PRE-DECREMENT DEFERRED sOperand = "@-R(" + reg + ")"; break; - case DebuggerPDP11.MODE_INDEX: // 0x6: INDEX + case PDP11.OPMODE.INDEX: // 0x6: INDEX wIndex = this.getWord(dbgAddr, true); /* * When using R7 (aka PC), INDEX is known as RELATIVE */ sOperand = str.toHexWord(wIndex) + (reg < 7? "(R" + reg + ")" : "(PC)"); break; - case DebuggerPDP11.MODE_INDEXD: // 0x7: INDEX DEFERRED + case PDP11.OPMODE.INDEXD: // 0x7: INDEX DEFERRED wIndex = this.getWord(dbgAddr, true); /* * When using R7 (aka PC), INDEX DEFERRED is known as RELATIVE DEFERRED @@ -2125,16 +2116,16 @@ if (DEBUGGER) { if (iReg < 8) { sReg = (iReg < 6? ("R" + iReg) : (iReg == 6? "SP" : "PC")); - sReg += '=' + str.toHex(cpu.regsGen[iReg], 4); + sReg += '=' + this.toStrBase(cpu.regsGen[iReg]); } else if (iReg < 13) { - sReg = "A" + (iReg - 8) + '=' + str.toHex(cpu.regsAlt[iReg - 8], 4); + sReg = "A" + (iReg - 8) + '=' + this.toStrBase(cpu.regsAlt[iReg - 8]); } else if (iReg >= 16 && iReg < 20) { - sReg = "S" + (iReg - 16) + '=' + str.toHex(cpu.regsAltStack[iReg - 16], 4); + sReg = "S" + (iReg - 16) + '=' + this.toStrBase(cpu.regsAltStack[iReg - 16]); } else if (iReg == DebuggerPDP11.REG_PSW) { - sReg = "PS=" + str.toHex(cpu.getPSW(), 4); + sReg = "PS=" + this.toStrBase(cpu.getPSW()); } if (sReg) sReg += ' '; return sReg; @@ -2299,7 +2290,7 @@ if (DEBUGGER) { if (offSymbol === undefined) continue; var sSymbolOrig = symbolTable.aSymbols[sSymbol]['l']; if (sSymbolOrig) sSymbol = sSymbolOrig; - this.println(this.toHexOffset(offSymbol) + ' ' + sSymbol); + this.println(this.toStrOffset(offSymbol) + ' ' + sSymbol); } } }; @@ -2461,7 +2452,7 @@ if (DEBUGGER) { this.dbgAddrAssemble = dbgAddr; if (asArgs[2] === undefined) { - this.println("begin assemble at " + this.toHexAddr(dbgAddr)); + this.println("begin assemble at " + this.toStrAddr(dbgAddr)); this.fAssemble = true; this.cpu.updateCPU(); return; @@ -2561,7 +2552,7 @@ if (DEBUGGER) { return; if (this.findBreakpoint(this.aBreakWrite, dbgAddr, true)) return; - this.println("breakpoint missing: " + this.toHexAddr(dbgAddr)); + this.println("breakpoint missing: " + this.toStrAddr(dbgAddr)); return; } @@ -2706,7 +2697,7 @@ if (DEBUGGER) { while (cLines-- && cb > 0) { var data = 0, iByte = 0, i; var sData = "", sChars = ""; - sAddr = this.toHexAddr(dbgAddr); + sAddr = this.toStrAddr(dbgAddr); for (i = 16; i > 0 && cb > 0; i--) { var b = this.getByte(dbgAddr, 1); data |= (b << (iByte++ << 3)); @@ -2767,7 +2758,7 @@ if (DEBUGGER) { this.println("warning: " + str.toHex(vNew) + " exceeds " + size + "-byte value"); } var vOld = fnGet.call(this, dbgAddr); - this.println("changing " + this.toHexAddr(dbgAddr) + " from " + str.toHex(vOld, cch, true) + " to " + str.toHex(vNew, cch, true)); + this.println("changing " + this.toStrAddr(dbgAddr) + " from " + str.toHex(vOld, cch, true) + " to " + str.toHex(vNew, cch, true)); fnSet.call(this, dbgAddr, vNew, size); } }; @@ -2896,7 +2887,7 @@ if (DEBUGGER) { sDelta = ""; nDelta = dbgAddr.addr - aSymbol[1]; if (nDelta) sDelta = " + " + str.toHexWord(nDelta); - s = aSymbol[0] + " (" + this.toHexOffset(aSymbol[1]) + ')' + sDelta; + s = aSymbol[0] + " (" + this.toStrOffset(aSymbol[1]) + ')' + sDelta; if (fPrint) this.println(s); sSymbol = s; } @@ -2904,7 +2895,7 @@ if (DEBUGGER) { sDelta = ""; nDelta = aSymbol[5] - dbgAddr.addr; if (nDelta) sDelta = " - " + str.toHexWord(nDelta); - s = aSymbol[4] + " (" + this.toHexOffset(aSymbol[5]) + ')' + sDelta; + s = aSymbol[4] + " (" + this.toStrOffset(aSymbol[5]) + ')' + sDelta; if (fPrint) this.println(s); if (!sSymbol) sSymbol = s; } @@ -3015,6 +3006,18 @@ if (DEBUGGER) { DebuggerPDP11.prototype.doOptions = function(asArgs) { switch (asArgs[1]) { + case "base": + if (asArgs[2]) { + var nBase = +asArgs[2]; + if (nBase == 8 || nBase == 10 || nBase == 16) { + this.nBase = nBase; + } else { + this.println("invalid base: " + nBase); + break; + } + } + this.println("default base: " + this.nBase); + break; case "cs": var nCycles; if (asArgs[3] !== undefined) nCycles = +asArgs[3]; // warning: decimal instead of hex conversion @@ -3049,6 +3052,7 @@ if (DEBUGGER) { case "?": this.println("debugger options:"); + this.println("\tbase #\t\tset default base to #"); this.println("\tcs int #\tset checksum cycle interval to #"); this.println("\tcs start #\tset checksum cycle start count to #"); this.println("\tcs stop #\tset checksum cycle stop count to #"); @@ -3139,7 +3143,7 @@ if (DEBUGGER) { if (fInstruction) { this.dbgAddrNextCode = this.newAddr(cpu.getPC()); - this.doUnassemble(this.toHexAddr(this.dbgAddrNextCode)); + this.doUnassemble(this.toStrAddr(this.dbgAddrNextCode)); } }; @@ -3300,7 +3304,7 @@ if (DEBUGGER) { var nFrames = 10, cFrames = 0; var dbgAddrCall = this.newAddr(); var dbgAddrStack = this.newAddr(this.cpu.getSP()); - this.println("stack trace for " + this.toHexAddr(dbgAddrStack)); + this.println("stack trace for " + this.toStrAddr(dbgAddrStack)); while (cFrames < nFrames) { var sCall = null, sCallPrev = null, cTests = 256; @@ -3326,7 +3330,7 @@ if (DEBUGGER) { var a = sCall.match(/[0-9A-F]+$/); if (a) sSymbol = this.doList(a[0]); } - sCall = str.pad(sCall, 50) + " ;" + (sSymbol || "stack=" + this.toHexAddr(dbgAddrStack)); // + " return=" + this.toHexAddr(dbgAddrCall)); + sCall = str.pad(sCall, 50) + " ;" + (sSymbol || "stack=" + this.toStrAddr(dbgAddrStack)); // + " return=" + this.toStrAddr(dbgAddrCall)); this.println(sCall); sCallPrev = sCall; cFrames++; @@ -3489,7 +3493,7 @@ if (DEBUGGER) { try { if (!sCmd.length || sCmd == "end") { if (this.fAssemble) { - this.println("ended assemble at " + this.toHexAddr(this.dbgAddrAssemble)); + this.println("ended assemble at " + this.toStrAddr(this.dbgAddrAssemble)); this.dbgAddrNextCode = this.dbgAddrAssemble; this.fAssemble = false; } @@ -3514,7 +3518,7 @@ if (DEBUGGER) { if (this.isReady() /* && !this.isBusy(true) */ && sCmd.length > 0) { if (this.fAssemble) { - sCmd = "a " + this.toHexAddr(this.dbgAddrAssemble) + ' ' + sCmd; + sCmd = "a " + this.toStrAddr(this.dbgAddrAssemble) + ' ' + sCmd; } var asArgs = this.shiftArgs(sCmd.replace(/ +/g, ' ').split(' ')); diff --git a/modules/pdp11/lib/defines.js b/modules/pdp11/lib/defines.js index 5abdb6c07..c4b0de4b6 100644 --- a/modules/pdp11/lib/defines.js +++ b/modules/pdp11/lib/defines.js @@ -123,7 +123,7 @@ var PDP11 = { */ ADDR_INVALID: -1, /* - * Processor Modes + * Processor modes */ MODE: { KERNEL: 0x0, @@ -163,6 +163,19 @@ var PDP11 = { INTR: 0x00ff, // mask for 8 bits, representing interrupt levels 0-7 HALT: 0x0100 // halt requested; see opHLT() }, + /* + * Opcode modes + */ + OPMODE: { + REG: 0x0, // REGISTER (register is operand) + REGD: 0x1, // REGISTER DEFERRED (register is address of operand) + POSTINC: 0x2, // POST-INCREMENT (register is address of operand, register incremented) + POSTINCD: 0x3, // POST-INCREMENT DEFERRED (register is address of address of operand, register incremented) + PREDEC: 0x4, // PRE-DECREMENT (register decremented, register is address of operand) + PREDECD: 0x5, // PRE-DECREMENT DEFERRED (register decremented, register is address of address of operand) + INDEX: 0x6, // INDEX (register + next word is address of operand) + INDEXD: 0x7 // INDEX DEFERRED (register + next word is address of address of operand) + }, /* * Opcode definitions */ diff --git a/modules/pdp11/lib/rom.js b/modules/pdp11/lib/rom.js index 1de220b3f..0d34fd90c 100644 --- a/modules/pdp11/lib/rom.js +++ b/modules/pdp11/lib/rom.js @@ -204,28 +204,39 @@ ROMPDP11.prototype.doneLoad = function(sURL, sROMData, nErrorCode) Component.addMachineResource(this.idMachine, sURL, sROMData); + var i; if (sROMData.charAt(0) == "[" || sROMData.charAt(0) == "{") { try { /* - * The most likely source of any exception will be here: parsing the JSON-encoded ROM data. + * The most likely source of any exception will be here: parsing the JSON-encoded ROM. */ + var a, ib; var rom = eval("(" + sROMData + ")"); - var ab = rom['bytes']; - var adw = rom['data']; - if (ab) { - this.abROM = ab; + if (a = rom['bytes']) { + this.abROM = a; } - else if (adw) { + else if (a = rom['words']) { /* - * Convert all the DWORDs into BYTEs, so that subsequent code only has to deal with abROM. + * Convert all WORDs into BYTEs, so that subsequent code only has to deal with abROM. */ - this.abROM = new Array(adw.length * 4); - for (var idw = 0, ib = 0; idw < adw.length; idw++) { - this.abROM[ib++] = adw[idw] & 0xff; - this.abROM[ib++] = (adw[idw] >> 8) & 0xff; - this.abROM[ib++] = (adw[idw] >> 16) & 0xff; - this.abROM[ib++] = (adw[idw] >> 24) & 0xff; + this.abROM = new Array(a.length * 2); + for (i = 0, ib = 0; i < a.length; i++) { + this.abROM[ib++] = a[i] & 0xff; + this.abROM[ib++] = (a[i] >> 8) & 0xff; + this.assert(!(a[i] & ~0xffff)); + } + } + else if (a = rom['data']) { + /* + * Convert all DWORDs into BYTEs, so that subsequent code only has to deal with abROM. + */ + this.abROM = new Array(a.length * 4); + for (i = 0, ib = 0; i < a.length; i++) { + this.abROM[ib++] = a[i] & 0xff; + this.abROM[ib++] = (a[i] >> 8) & 0xff; + this.abROM[ib++] = (a[i] >> 16) & 0xff; + this.abROM[ib++] = (a[i] >> 24) & 0xff; } } else { @@ -255,7 +266,7 @@ ROMPDP11.prototype.doneLoad = function(sURL, sROMData, nErrorCode) var sHexData = sROMData.replace(/\n/gm, " ").replace(/ +$/, ""); var asHexData = sHexData.split(" "); this.abROM = new Array(asHexData.length); - for (var i = 0; i < asHexData.length; i++) { + for (i = 0; i < asHexData.length; i++) { this.abROM[i] = str.parseInt(asHexData[i], 16); } } diff --git a/modules/shared/lib/debugger.js b/modules/shared/lib/debugger.js index d15831ac4..0916eb4fa 100644 --- a/modules/shared/lib/debugger.js +++ b/modules/shared/lib/debugger.js @@ -74,6 +74,11 @@ function Debugger(parmsDbg) Component.call(this, "Debugger", parmsDbg, Debugger); + /* + * Default base used to display all values; modified with the "s base" command. + */ + this.nBase = 16; + /* * These keep track of instruction activity, but only when tracing or when Debugger checks * have been enabled (eg, one or more breakpoints have been set). @@ -564,7 +569,7 @@ if (DEBUGGER) { value = this.getRegValue(iReg); } else { value = this.getVariable(sValue); - if (value == null) value = str.parseInt(sValue, 16); + if (value == null) value = str.parseInt(sValue, this.nBase); } if (value == null && !fQuiet) this.println("invalid " + (sName? sName : "value") + ": " + sValue); } else { @@ -587,7 +592,7 @@ if (DEBUGGER) { var fDefined = false; if (value !== undefined) { fDefined = true; - sValue = str.toHex(value, 0, true) + " " + value + ". " + str.toOctal(value, 0, true) + " " + str.toBinBytes(value, 0, true); + sValue = str.toHex(value, 0, true) + " " + value + ". " + str.toOct(value, 0, true) + " " + str.toBinBytes(value, 0, true); } sVar = (sVar != null? (sVar + ": ") : ""); this.println(sVar + sValue); @@ -649,6 +654,29 @@ if (DEBUGGER) { this.aVariables[sVar] = value; }; + /** + * toStrBase(n, cch) + * + * Use this instead of str.toHex() or str.toOct() to convert words to the default base. + * + * @this {Debugger} + * @param {number|null|undefined} n + * @param {number} [cch] is the desired number of hex digits (0 or undefined for default) + * @return {string} + */ + Debugger.prototype.toStrBase = function(n, cch) + { + switch(this.nBase) { + case 8: + return str.toOct(n, cch); + case 10: + return n.toString(); // TODO: Do we want to support any formatting based on cch? + case 16: + default: + return str.toHex(n, cch); + } + }; + } // endif DEBUGGER if (NODE) module.exports = Debugger; diff --git a/modules/shared/lib/strlib.js b/modules/shared/lib/strlib.js index 671741eff..b5aec8fdc 100644 --- a/modules/shared/lib/strlib.js +++ b/modules/shared/lib/strlib.js @@ -201,7 +201,7 @@ str.toBinBytes = function(n, cb, fPrefix) }; /** - * toOctal(n, cch, fPrefix) + * toOct(n, cch, fPrefix) * * Converts an integer to octal, with the specified number of digits (default of 6; max of 11) * @@ -214,7 +214,7 @@ str.toBinBytes = function(n, cb, fPrefix) * @param {boolean} [fPrefix] * @return {string} the octal representation of n */ -str.toOctal = function(n, cch, fPrefix) +str.toOct = function(n, cch, fPrefix) { var s = ""; diff --git a/modules/shared/templates/components.xsl b/modules/shared/templates/components.xsl index 8f7595564..7f3afa7da 100644 --- a/modules/shared/templates/components.xsl +++ b/modules/shared/templates/components.xsl @@ -580,6 +580,12 @@ null + + + + 0 + + @@ -604,7 +610,7 @@ - ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,csStart:,csInterval:,csStop: + ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,resetAddr:,csStart:,csInterval:,csStop: diff --git a/versions/pc8080/1.30.0/components.xsl b/versions/pc8080/1.30.0/components.xsl index 34f8ac67c..88eefbf25 100644 --- a/versions/pc8080/1.30.0/components.xsl +++ b/versions/pc8080/1.30.0/components.xsl @@ -578,6 +578,12 @@ null + + + + 0 + + @@ -602,7 +608,7 @@ - ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,csStart:,csInterval:,csStop: + ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,resetAddr:,csStart:,csInterval:,csStop: diff --git a/versions/pcx86/1.30.0/components.xsl b/versions/pcx86/1.30.0/components.xsl index 7bfe1a4f8..6eaef26c1 100644 --- a/versions/pcx86/1.30.0/components.xsl +++ b/versions/pcx86/1.30.0/components.xsl @@ -578,6 +578,12 @@ null + + + + 0 + + @@ -602,7 +608,7 @@ - ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,csStart:,csInterval:,csStop: + ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,resetAddr:,csStart:,csInterval:,csStop: diff --git a/versions/pcx86/1.30.0/pcx86-dbg.js b/versions/pcx86/1.30.0/pcx86-dbg.js index 4d57ef807..876af928e 100644 --- a/versions/pcx86/1.30.0/pcx86-dbg.js +++ b/versions/pcx86/1.30.0/pcx86-dbg.js @@ -707,8 +707,8 @@ function fr(a,b,c,d){var e,f=c?a.aa:a.sb;c=d?0:f.type;var g=f.Ra,h=f.Z,f=f.Ea;if k)return e;0>f?null!=h?(g=lq(a,b,void 0),f=null):(f=lq(a,b,void 0),null==f&&(g=null)):(h=lq(a,b.substring(0,f),void 0),g=lq(a,b.substring(f+1),void 0),f=null)}null!=g&&(e=rq(a,g,h,f,c),d||er(a,e,!0)||(a.O("invalid offset: "+Zq(e)),e=null));return e}function gr(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.kl=a.Mg(b.Rk=c[2]))}m.Ok=function(a,b){var c=fr(this,b);return a.replace("["+b+"]",c?t(this.tb(c),c.Rb?8:4):"undefined")}; function ar(a,b,c){c=c||1;null!=b.Ea&&(b.Ea+=c);null!=b.Z&&(b.Ra+=c,er(a,b)||(b.Ra=0,b.Ea=null))}function Pq(a,b,c){return null!=b?t(b,4)+":"+t(a,a&-65536||c?8:4):t(a)}function Zq(a){var b;switch(a.type){case 1:case 3:b="&";break;case 2:b="#";break;case 4:b="%";break;case 5:b="%%";break;default:b=a.Z?"":"%"}return 4<=a.type||null==a.Z?b+t(a.Ea):b+Pq(a.Ra,a.Z,a.oc)} function Qq(a,b,c){var d="";for(c=c||256;d.length>>a.F.La;g=1}a.O("blockid "+(d?"linear ":"physical")+" blockaddr used size type");a.O("-------- --------- ---------- ------ ------ ----");c=-1;for(var h=0;g--;)(d=b[f])&&5==d.type&&(d=Kc(a.F,e,!1,!0)),d.type==c?h++||a.O("..."):(c=d.type,h=ac[c],6==c&&(d=d.Bd,h+=" -> "+ac[d.type]),d&&a.O(t(d.id)+" %"+t(f<>>a.F.La;g=1}a.O("blockid "+(d?"linear ":"physical")+" blockaddr used size type");a.O("-------- --------- ---------- ------ ------ ----");c=-1;for(var h=0;g--;)(d=b[f])&&5==d.type&&(d=Kc(a.F,e,!1,!0)),d.type==c?h++||a.O("..."):(c=d.type,h=ac[c],6==c&&(d=d.Bd,h+=" -> "+ac[d.type]),d&&a.O(t(d.id,8)+" %"+t(f<null + + + + 0 + + @@ -602,7 +608,7 @@ - ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,csStart:,csInterval:,csStop: + ,model:'',stepping:'',fpu:,cycles:,multiplier:,autoStart:,resetAddr:,csStart:,csInterval:,csStop: diff --git a/versions/pdp11/1.30.0/pdp11-dbg.js b/versions/pdp11/1.30.0/pdp11-dbg.js index 04311ed97..7591eba84 100644 --- a/versions/pdp11/1.30.0/pdp11-dbg.js +++ b/versions/pdp11/1.30.0/pdp11-dbg.js @@ -1,173 +1,174 @@ (function(){var m; -function fa(a){var b=16,d;if(a){b||(b=10);var c=a.charAt(0),e=0=e?48:55),c=String.fromCharCode(e)+c;a>>=4}return(d?"0x":"")+c}function r(a){return p(a,4,!0)}function ga(a){var b=a,d=a.lastIndexOf("/");0<=d&&(b=a.substr(d+1));d=b.indexOf("&");0":">",'"':""","'":"'"};function na(a){return a.replace(/[&<>"']/g,function(a){return ma[a]})}function oa(a,b){return(a+" ").slice(0,b)}function pa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")} -function ta(a,b,d){var c=0,e=a.length,f=0;for(void 0===d&&(d=function(a,b){return a>b?1:a>1,g;g=d(b,a[h]);0a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())} -function wa(a,b,d,c){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return c&&c(a,f,e),[f,e];if(d&&"function"==typeof resources)return resources(a,function(b,d){c&&c(a,b,d)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");d&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),c&&c(a,f,e))});if(b&&"object"== -typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!d);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!d),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();d||(f=g.responseText,200!=g.status&&(e=g.status||-1),c&&c(a,f,e),h=[f,e]);return h}function la(){return"http://"+(window?window.location.host:"www.pcjs.org")} -function u(a){window&&window.alert(a)}function xa(a){var b=!1;window&&(b=window.confirm(a));return b}var ya=null;function za(){if(null==ya){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ya=a}return ya}function Fa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(d){}return b} -function Ga(a,b){try{return window.localStorage.setItem(a,b),!0}catch(d){}return!1}function Ha(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Ia(a,b,d){function c(){--a;0<=a&&(b()||(a=0));0b?this.La=this.id:(this.lb=this.id.substr(0,b),this.La=this.id.substr(b+1));this[a]=d;this.w={ready:!1,Fa:!1,Za:!1,Z:!1,error:!1};this.Xa=null;this.w.error=!1;this.L={};this.I=null;this.$=c||0;z.push(this)}var Ta=void 0,Ua={}; -if(window){Ta||(Ta=window.location.search.substr(1));for(var Va,Wa=/\+/g,Xa=/([^&=]+)=?([^&]*)/g;Va=Xa.exec(Ta);)Ua[decodeURIComponent(Va[1].replace(Wa," "))]=decodeURIComponent(Va[2].replace(Wa," "))}function Ya(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var d=typeof a;if("object"!==d&&"function"!==d)throw new TypeError;}b.prototype=a;return new b} -function A(a,b){b||(b=x);a.prototype=Ya(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var Za=window.PCjs.Machines||(window.PCjs.Machines={}),z=window.PCjs.Components||(window.PCjs.Components=[])}else Za={},z=[];function $a(a,b,d){Za[a]&&b&&(Za[a][b]=d)}function ab(a){var b,d=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b=this.B?10:20>=this.B?12:24>=this.B?14:15;this.la=1<>2;this.H=this.la-1;this.F=this.G/this.la|0;this.K=this.F-1;a=new H;vb(a,this.I);this.P=Array(this.F);for(b=0;b>>a.ba;0f&&(l=f);if(g&&g.size){if(g.type==c){if(e+f<=g.D)return g.Va+=g.D-e,g.D=e,!0;if(e>=g.D+g.Va){l=g.size-(e-k);l>f&&(l=f);g.Va=e-g.D+l;e=k+a.la;f-=l;h++;continue}}return xb(1,e,f)}e=new H(e,l,a.la,c);vb(e,a.I,g);a.P[h++]=e;e=k+a.la;f-=l}return 0>=f?(a.status(Math.floor(d/1024)+"Kb "+yb[c]+" at "+r(b)),!0):xb(2,b,d)} -function zb(a,b){var d=b&a.H,c=(b&a.A)>>>a.ba;return d!=a.H?a.P[c].ub(d,b):a.P[c++].Ta(d,b)|a.P[c&a.K].Ta(0,b+1)<<8}function xb(a,b,d){u("Memory block error ("+a+": "+p(b)+","+p(d)+")");return!1}var Ab;if(rb){var Mb=new ArrayBuffer(2);(new DataView(Mb)).setUint16(0,256,!0);Ab=256===(new Uint16Array(Mb))[0]}else Ab=!1;var Nb=Ab; -function H(a,b,d,c){this.id=Ob+=2;this.f=null;this.D=a;this.Va=b;this.size=d||0;this.type=c||Pb;this.J=c==Qb;vb(this);this.ua=this.Bb=!1;if(d)if(rb)this.F=new ArrayBuffer(d),this.G=new DataView(this.F,0,d),this.H=new Uint8Array(this.F,0,d),this.N=new Uint16Array(this.F,0,d>>1),this.f=new Int32Array(this.F,0,d>>2),Rb(this,Nb?Sb:Tb);else{this.f=Array(d>>2);for(a=0;a>2),b=0;b>8,d)},U:function(a){return this.f[a>>2]>>>((a&3)<<3)&255},da:function(a){var b=a>>2;a=(a&3)<<3;var d=this.f[b]>>a;return 24>a?d&65535:d&255|(this.f[b+1]&255)<<8},ka:function(a,b){var d=a>>2,c=(a&3)<<3;this.f[d]=this.f[d]&~(255<>2,c=(a&3)<<3;24>c?this.f[d]=this.f[d]&~(65535<>8);this.ua=!0},S:function(a,b){if(this.I&&null!=this.D){var d=this.I;Yb(d,this.D+a,1,d.R)&&d.ca(!0)}return this.Ta(a,b)},W:function(a,b){if(this.I&&null!=this.D){var d=this.I;Yb(d,this.D+a,2,d.R)&&d.ca(!0)}return this.ub(a,b)},ga:function(a,b,d){if(this.I&&null!=this.D){var c=this.I;Yb(c,this.D+a,1,c.J)&&c.ca(!0)}this.J?this.B(a,b,d):this.Ka(a,b,d)},na:function(a,b,d){if(this.I&& -null!=this.D){var c=this.I;Yb(c,this.D+a,2,c.J)&&c.ca(!0)}this.J?this.B(a,b,d):this.wb(a,b,d)},R:function(a){return this.H[a]},T:function(a){return this.H[a]},V:function(a){return this.G.getUint16(a,!0)},Y:function(a){return a&1?this.H[a]|this.H[a+1]<<8:this.N[a>>1]},fa:function(a,b){this.H[a]=b;this.ua=!0},ja:function(a,b){this.H[a]=b;this.ua=!0},ma:function(a,b){this.G.setUint16(a,b,!0);this.ua=!0},La:function(a,b){a&1?(this.H[a]=b,this.H[a+1]=b>>8):this.N[a>>1]=b;this.ua=!0}}; -function vb(a,b,d){a.I=b;a.L=a.A=0;d&&((a.L=d.L)&&Xb(a,Wb,!1),(a.A=d.A)&&Vb(a,Wb,!1))}function Zb(a,b){b?0===--a.A&&(a.M=a.J?a.B:a.Ka):0===--a.L&&(a.K=a.Ta)}function Vb(a,b,d){d&&a.A||(a.M=!a.J&&b[2]||a.B);if(d||void 0===d)a.Ka=b[2]||a.B,a.wb=b[3]||a.sa}function Xb(a,b,d){d&&a.L||(a.K=b[0]||a.O);if(d||void 0===d)a.Ta=b[0]||a.O,a.ub=b[1]||a.X}function Rb(a,b){b||(b=$b);Xb(a,b,void 0);Vb(a,b,void 0)} -var $b=[],Ub=[H.prototype.U,H.prototype.da,H.prototype.ka,H.prototype.ta],Wb=[H.prototype.S,H.prototype.W,H.prototype.ga,H.prototype.na];if(rb)var Tb=[H.prototype.R,H.prototype.V,H.prototype.fa,H.prototype.ma],Sb=[H.prototype.T,H.prototype.Y,H.prototype.ja,H.prototype.La]; -function ac(a,b){x.call(this,"CPU",a,ac,1);var d=a.multiplier||1;this.Na=a.cycles||b;this.Aa=d;this.ta=Math.round(this.Na/1E4)/100;this.za=this.ta*this.Aa;this.w.aa=!1;this.w.bb=!1;this.w.Ma=a.autoStart;this.w.hb=!1;this.w.Ga=!1;this.Qa=this.X=0;this.Ra=a.csStart;this.Ha=a.csInterval;this.Ia=a.csStop;this.ja=[];this.Db=this.Ca.bind(this);F(this)}A(ac);var bc=["power","reset"];m=ac.prototype; -m.ya=function(a,b,d,c){this.A=a;this.H=b;this.I=c;for(b=0;b=a.X&&(a.X+=a.Ha,d=!0);0<=a.Ia&&a.Ia<=hc(a)&&(a.Ha=a.Ia=-1,ec(a),a.ca(),d=!0);d&&a.g(hc(a)+" cycles: checksum="+p(a.Qa))}} -function ic(a,b,d,c){a.L[b]&&(void 0===d&&(qb(a,"Value for "+b+" is invalid"),a.ca()),d=!a.w.aa||a.w.hb?p(d,c):"--------".substr(0,c),a.L[b].textContent!=d&&(a.L[b].textContent=d))} -m.ha=function(a,b,d){var c=this;a=!1;switch(b){case "power":case "reset":this.L[b]=d;a=!0;break;case "run":this.L[b]=d;d.onclick=function(){var a;if(a=c.A)if(a=c.A,a.w.Z)a=!0;else{var b=null,d,g=ab(a.id);for(d=0;da.R/a.za?b=1:c=!0;a.Aa=b;b=a.ta*a.Aa;if(a.za!=b){a.za=b;b=a.za.toFixed(2)+"Mhz";var e=a.L.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}d&&a.A&&a.A.Ua()}kc(a,a.N);a.N=0;a.M=ua();a.S=0;lc(a);return c}function yc(a){a.T-=a.O;a.O=0} -m.Ca=function(a){if(nb(this,!0)){if(!this.w.aa){jc(this);this.A&&this.A.start(this.M,hc(this));this.w.aa=!0;this.w.bb=!0;this.fa&&this.fa.start();var b=this.L.run;b&&(b.textContent="Halt");this.A&&(this.A.ia(!0),a&&this.A.Ua(!0))}this.Oa>=this.Na&&lc(this,!0);this.ga=0;this.ma=ua();this.S&&(a=this.ma-this.S,a>this.qb&&(this.M+=a,this.M>this.ma&&(this.M=this.ma)));try{do{for(var d=this.w.Ga?1:this.na,c=this.ja.length-1;0<=c;c--){var e=this.ja[c];0>e[0]||d>e[0]&&(d=e[0])}this.Ja(d);var f=this.T-this.O; -a=f;for(var h=this.ja.length-1;0<=h;h--){var g=this.ja[h];0>g[0]||(g[0]-=a,0>=g[0]&&(g[0]=-1,g[1]()))}this.ga+=f;this.N+=f;kc(this,0,!0);gc(this,f);this.Y-=f;if(0>=this.Y){this.Y+=this.na;15<=++this.rb&&(this.A&&this.A.ia(),this.rb=0);break}}while(this.w.aa)}catch(k){this.ca();I(this);this.A&&this.A.stop(ua(),hc(this));nb(this,!1);qb(this,k.stack||k.message);return}d=setTimeout;c=this.Db;this.S=ua();e=this.qb;this.ga&&(e=Math.round(e*this.ga/this.na));e=e-(this.S-this.ma);if(f=this.S-this.M)this.R= -Math.round(this.N/(10*f))/100,864E5<=f&&(this.U=0,jc(this));if(0>e||this.Re&&(this.M-=e),e=0;this.Oa+=this.ga;this.S+=e;d(c,e)}else I(this),this.A&&this.A.stop(ua(),hc(this))};m.Ja=function(){return 0};m.ca=function(a){ob(this,!0);yc(this);kc(this,this.N);this.N=0;if(this.w.aa){this.w.aa=!1;this.fa&&this.fa.stop();var b=this.L.run;b&&(b.textContent="Run")}this.w.complete=a};function I(a,b){a.A&&a.A.ia(b)} -function zc(a){this.tb=+a.model||1170;ac.call(this,a,1E6);this.jb=0;this.C=65536;this.j=this.i=32768;this.u=65535;this.f=15;this.b=[0,0,0,0,0,0,0,0];this.Ya=[0,0,0,0,0,0];this.Ba=[0,0,0,0];this.memory=[];this.G=[];this.Pa=this.sb=0;this.V=2;this.W=255;this.F=0;this.da=-1;this.pb=this.Da=this.ob=this.B=this.sa=this.K=this.J=0;this.ka=[7,7,7,7];this.Ea=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535, -65535,65535,65535,65535,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];this.Fb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.w.complete=this.w.Ab=!1}A(zc,ac);m=zc.prototype;m.reset=function(){this.w.aa&&this.ca();Ac(this);dc(this);this.w.error=!1;this.parent.reset.call(this)}; -function Ac(a){a.W=255;a.G=[];a.sb=0;a.J=a.K=a.sa=a.ob=0;a.ka[0]=a.ka[1]=a.ka[3]=7;a.Da=0}m.mb=function(){return 0};m.save=function(){var a=new J(this);K(a,0,[]);K(a,1,[this.nb,this.U,this.Aa]);for(var b=this.H,d=0,c=[],e=0;e>12&8|(a.u&65535?0:4)|(a.j&32768?2:0)|(a.C&65536?1:0)} -m.ia=function(a){this.jb&&(a||!this.w.aa||this.w.hb)&&(a=Bc(this),ic(this,"PSW",a,4),ic(this,"NF",a&8?1:0,1),ic(this,"ZF",a&4?1:0,1),ic(this,"VF",a&2?1:0,1),ic(this,"CF",a&1?1:0,1));if(a=this.L.speed)a.textContent=this.w.aa&&this.R?this.R.toFixed(2)+"Mhz":"Stopped"};function Cc(a,b){a.i=b<<12;a.u=~b&4;a.j=b<<14;a.C=b<<16;if((b^a.f)&2048)for(var d=a.Ya.length;0<=--d;){var c=a.b[d];a.b[d]=a.Ya[d];a.Ya[d]=c}a.B=b>>14&3;d=a.f>>14&3;a.B!=d&&(a.Ba[d]=a.b[6],a.b[6]=a.Ba[a.B]);a.V=2;a.f=b} -function M(a,b){var d,c,e=0;0>a.da?a.da=a.f=a.f&63728|a.i>>12&8|(a.u&65535?0:4)|(a.j&32768?2:0)|(a.C&65536?1:0):a.B||(b=4,e=1);a.J&57344||(a.K=63222);a.B=0;0<=(d=N(a,b|65536))&&0<=(c=N(a,b+2&65535|65536))&&(Cc(a,c&53247|a.da>>2&12288),e&&(a.b[6]=4),0<=Dc(a,a.da)&&0<=Dc(a,a.b[7])&&(a.b[7]=d));a.F=0;return a.da=-1} -function Ec(a,b,d){var c,e,f,h=0;if(d&a.ob){c=b>>13&a.ka[a.B];e=a.Ea[a.B][c];f=(a.Ea[a.B][c+16]<<6)+(b&8191)&4194303;if(a.sa&16){if(3932160<=f&&4186112>f){f=f&262143;var g=f>>13&31;31>g?a.sa&32&&(f=a.Fb[g]+(f&8190)&4194302,3932160<=f&&4186112>f&&console.log("panic(898)")):f|=4186112}}else f&=262143,253952<=f&&(f|=4186112);if(3932160>f&&(3915776<=f||f&1&&!(d&1)))return M(a,4);switch(e&7){case 1:h=4096;case 2:e|=128;d&4&&(h=8192);break;case 4:h=4096;case 5:d&4&&(h=4096);case 6:e|=d&4?192:128;break; -default:h=32768}32512!==(e&32520)&&(e&8?e&32512&&(b&8128)<(e>>2&8128)&&(h|=16384):(b&8128)>(e>>2&8128)&&(h|=16384));a.Ea[a.B][c]=e;if(4194170!==f||a.B)a.Da=a.B,a.pb=c;if(h){if(h&57344)return 0<=a.da&&(h|=128),a.J&57344||(a.J=a.J|h|a.Da<<5|a.pb<<1),M(a,168);a.J&61440||!(4191360>f||4194239>1]:b} -function P(a,b,d){d&=65535;return 4194304<=b?a.b[b-4194304]=d:3932160<=b?-1:0<=b?a.memory[b>>1]=d:b}function S(a,b){var d;return 4194304<=b?a.b[b-4194304]&255:3932160<=b?-1:0<=b?(d=a.memory[b>>1],b&1&&(d=d>>8),d&255):b}function T(a,b,d){d&=255;return 4194304<=b?a.b[b-4194304]=a.b[b-4194304]&65280|d:3932160<=b?-1:0<=b?b&1?a.memory[b>>1]=d<<8|a.memory[b>>1]&255:a.memory[b>>1]=a.memory[b>>1]&65280|d:b}function N(a,b){return O(a,Ec(a,b,2))} -function Fc(a){var b=N(a,a.b[6]|65536);0<=b&&(a.b[6]=a.b[6]+2&65535);return b}function Dc(a,b){var d,c;a.b[6]=c=a.b[6]-2&65535;a.J&57344||(a.K=a.K<<8|246);if(!a.B&&c<=a.W&&4>3&7){case 0:return M(a,4);case 1:if(6===f&&!a.B&&d&4&&(a.b[6]<=a.W||65534<=a.b[6])){if(a.b[6]<=a.W-32||65534<=a.b[6])return a.b[6]=4,M(a,4);a.F|=4}return 7===f?a.b[f]:a.b[f]|65536;case 2:e=2;c=a.b[f];7!==f&&(c|=65536,6>f&&d&1&&(e=1));break;case 3:e=2;c=a.b[f];7!==f&&(c|=65536);if(0>(c=N(a,c)))return c;c|=65536;break;case 4:e=-2;6>f&&d&1&&(e=-1);c=a.b[f]+e&65535;7!==f&&(c|=65536);break;case 5:e=-2;c=a.b[f]-2&65535;7!==f&&(c|=65536);if(0>(c=N(a,c)))return c; -c|=65536;break;case 6:if(0>(c=N(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[f]&65535;return c|65536;case 7:if(0>(c=N(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[f]&65535;return 0>(c=N(a,c|65536))?c:c|65536}a.b[f]=a.b[f]+e&65535;a.J&57344||(a.K=a.K<<8|e<<3&248|f);if(6===f&&!a.B&&d&4&&0>=e&&(a.b[6]<=a.W||65534<=a.b[6])){if(a.b[6]<=a.W-32)return a.b[6]=4,M(a,4);a.F|=4}return c}function U(a,b,d){var c;return b&56?(0<=(c=Gc(a,b,d))&&(c=Ec(a,c,d)),c):4194304+(b&7)} -function V(a,b){var d;b&56?0<=(d=U(a,b,2))&&(d=O(a,d)):d=a.b[b&7];return d}function Hc(a,b){var d;b&56?0<=(d=U(a,b,3))&&(d=S(a,d)):d=a.b[b&7]&255;return d}function W(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} -m.Ja=function(a){this.w.complete=!0;var b=this.w.Ab=this.I&&Ic(this.I),d=a?this.w.bb?0:1:-1;this.w.bb=!1;this.T=this.O=a;this.nb&256?(yc(this),a=!1):a=!0;if(a){do{if(b){if(Jc(this.I,this.b[7],d)){this.ca();break}d=1}var c,e,f,h,g;if(this.V)if(1===this.V)this.V=2;else{this.V=0;g=-1;c=this.sb&224;if(0<(a=this.G.length))for(;0c&&(c=this.G[a].Gb,g= -a)}c>(this.f&224)&&(0>g?M(this,160):(M(this,this.G[g].Ib),this.G.splice(g,1)))}this.J&57344||(this.K=0);this.F=this.f&16;if(0<=(a=N(this,this.b[7])))switch(this.b[7]=this.b[7]+2&65535,a&61440){case 4096:0<=(c=V(this,a>>6))&&(a&56?0<=(f=U(this,a,4))&&0<=P(this,f,c)&&(this.i=this.u=c,this.j=0):(this.i=this.u=this.b[a&7]=c,this.j=0));break;case 8192:0<=(c=V(this,a>>6))&&0<=(e=V(this,a))&&(this.i=this.u=this.C=a=c-e,this.j=(c^e)&(c^a));break;case 12288:0<=(c=V(this,a>>6))&&0<=(e=V(this,a))&&(this.i=this.u= +function aa(a,b){var d;if(a){b||(b=10);var c=a.charAt(0),e=0>=3;return(d?"0o":"")+c}function q(a,b,d){var c="";b?8=e?48:55),c=String.fromCharCode(e)+c;a>>=4}return(d?"0x":"")+c} +function t(a){return q(a,4,!0)}function ha(a){var b=a,d=a.lastIndexOf("/");0<=d&&(b=a.substr(d+1));d=b.indexOf("&");0":">",'"':""","'":"'"};function oa(a){return a.replace(/[&<>"']/g,function(a){return na[a]})} +function pa(a,b){return(a+" ").slice(0,b)}function qa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function ua(a,b,d){var c=0,e=a.length,f=0;for(void 0===d&&(d=function(a,b){return a>b?1:a>1,g;g=d(b,a[h]);0a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())} +function xa(a,b,d,c){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return c&&c(a,f,e),[f,e];if(d&&"function"==typeof resources)return resources(a,function(b,d){c&&c(a,b,d)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");d&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),c&&c(a,f,e))});if(b&&"object"== +typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!d);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!d),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();d||(f=g.responseText,200!=g.status&&(e=g.status||-1),c&&c(a,f,e),h=[f,e]);return h}function ma(){return"http://"+(window?window.location.host:"www.pcjs.org")} +function u(a){window&&window.alert(a)}function ya(a){var b=!1;window&&(b=window.confirm(a));return b}var za=null;function Aa(){if(null==za){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}za=a}return za}function Ga(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(d){}return b} +function Ha(a,b){try{return window.localStorage.setItem(a,b),!0}catch(d){}return!1}function Ia(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Ja(a,b,d){function c(){--a;0<=a&&(b()||(a=0));0b?this.Ma=this.id:(this.lb=this.id.substr(0,b),this.Ma=this.id.substr(b+1));this[a]=d;this.A={ready:!1,Ga:!1,$a:!1,Z:!1,error:!1};this.Xa=null;this.A.error=!1;this.L={};this.I=null;this.$=c||0;y.push(this)}var Ua=void 0,Va={}; +if(window){Ua||(Ua=window.location.search.substr(1));for(var Wa,Xa=/\+/g,Ya=/([^&=]+)=?([^&]*)/g;Wa=Ya.exec(Ua);)Va[decodeURIComponent(Wa[1].replace(Xa," "))]=decodeURIComponent(Wa[2].replace(Xa," "))}function Za(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var d=typeof a;if("object"!==d&&"function"!==d)throw new TypeError;}b.prototype=a;return new b} +function A(a,b){b||(b=w);a.prototype=Za(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var $a=window.PCjs.Machines||(window.PCjs.Machines={}),y=window.PCjs.Components||(window.PCjs.Components=[])}else $a={},y=[];function ab(a,b,d){$a[a]&&b&&($a[a][b]=d)}function bb(a){var b,d=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b=this.B?10:20>=this.B?12:24>=this.B?14:15;this.ma=1<>2;this.H=this.ma-1;this.F=this.G/this.ma|0;this.K=this.F-1;a=new H;xb(a,this.I);this.P=Array(this.F);for(b=0;b>>a.ba;0f&&(l=f);if(g&&g.size){if(g.type==c){if(e+f<=g.D)return g.Va+=g.D-e,g.D=e,!0;if(e>=g.D+g.Va){l=g.size-(e-k);l>f&&(l=f);g.Va=e-g.D+l;e=k+a.ma;f-=l;h++;continue}}return zb(1,e,f)}e=new H(e,l,a.ma,c);xb(e,a.I,g);a.P[h++]=e;e=k+a.ma;f-=l}return 0>=f?(a.status(Math.floor(d/1024)+"Kb "+Ab[c]+" at "+q(b,8,!0)),!0):zb(2,b,d)} +function Bb(a,b){var d=b&a.H,c=(b&a.w)>>>a.ba;return d!=a.H?a.P[c].ub(d,b):a.P[c++].Ta(d,b)|a.P[c&a.K].Ta(0,b+1)<<8}function zb(a,b,d){u("Memory block error ("+a+": "+q(b)+","+q(d)+")");return!1}var Cb;if(tb){var Ob=new ArrayBuffer(2);(new DataView(Ob)).setUint16(0,256,!0);Cb=256===(new Uint16Array(Ob))[0]}else Cb=!1;var Pb=Cb; +function H(a,b,d,c){this.id=Qb+=2;this.f=null;this.D=a;this.Va=b;this.size=d||0;this.type=c||Rb;this.J=c==Sb;xb(this);this.va=this.Bb=!1;if(d)if(tb)this.F=new ArrayBuffer(d),this.G=new DataView(this.F,0,d),this.H=new Uint8Array(this.F,0,d),this.N=new Uint16Array(this.F,0,d>>1),this.f=new Int32Array(this.F,0,d>>2),Tb(this,Pb?Ub:Vb);else{this.f=Array(d>>2);for(a=0;a>2),b=0;b>8,d)},U:function(a){return this.f[a>>2]>>>((a&3)<<3)&255},da:function(a){var b=a>>2;a=(a&3)<<3;var d=this.f[b]>>a;return 24>a?d&65535:d&255|(this.f[b+1]&255)<<8},ka:function(a,b){var d=a>>2,c=(a&3)<<3;this.f[d]=this.f[d]&~(255<>2,c=(a&3)<<3;24>c?this.f[d]=this.f[d]&~(65535<>8);this.va=!0},S:function(a,b){if(this.I&&null!=this.D){var d=this.I;$b(d,this.D+a,1,d.R)&&d.ca(!0)}return this.Ta(a,b)},W:function(a,b){if(this.I&&null!=this.D){var d=this.I;$b(d,this.D+a,2,d.R)&&d.ca(!0)}return this.ub(a,b)},ga:function(a,b,d){if(this.I&&null!=this.D){var c=this.I;$b(c,this.D+a,1,c.J)&&c.ca(!0)}this.J?this.B(a,b,d):this.La(a,b,d)},na:function(a,b,d){if(this.I&& +null!=this.D){var c=this.I;$b(c,this.D+a,2,c.J)&&c.ca(!0)}this.J?this.B(a,b,d):this.wb(a,b,d)},R:function(a){return this.H[a]},T:function(a){return this.H[a]},V:function(a){return this.G.getUint16(a,!0)},Y:function(a){return a&1?this.H[a]|this.H[a+1]<<8:this.N[a>>1]},fa:function(a,b){this.H[a]=b;this.va=!0},ja:function(a,b){this.H[a]=b;this.va=!0},la:function(a,b){this.G.setUint16(a,b,!0);this.va=!0},Ma:function(a,b){a&1?(this.H[a]=b,this.H[a+1]=b>>8):this.N[a>>1]=b;this.va=!0}}; +function xb(a,b,d){a.I=b;a.L=a.w=0;d&&((a.L=d.L)&&Zb(a,Yb,!1),(a.w=d.w)&&Xb(a,Yb,!1))}function ac(a,b){b?0===--a.w&&(a.M=a.J?a.B:a.La):0===--a.L&&(a.K=a.Ta)}function Xb(a,b,d){d&&a.w||(a.M=!a.J&&b[2]||a.B);if(d||void 0===d)a.La=b[2]||a.B,a.wb=b[3]||a.pa}function Zb(a,b,d){d&&a.L||(a.K=b[0]||a.O);if(d||void 0===d)a.Ta=b[0]||a.O,a.ub=b[1]||a.X}function Tb(a,b){b||(b=bc);Zb(a,b,void 0);Xb(a,b,void 0)} +var bc=[],Wb=[H.prototype.U,H.prototype.da,H.prototype.ka,H.prototype.ua],Yb=[H.prototype.S,H.prototype.W,H.prototype.ga,H.prototype.na];if(tb)var Vb=[H.prototype.R,H.prototype.V,H.prototype.fa,H.prototype.la],Ub=[H.prototype.T,H.prototype.Y,H.prototype.ja,H.prototype.Ma]; +function cc(a,b){w.call(this,"CPU",a,cc,1);var d=a.multiplier||1;this.Fa=a.cycles||b;this.Aa=d;this.ua=Math.round(this.Fa/1E4)/100;this.za=this.ua*this.Aa;this.A.aa=!1;this.A.cb=!1;this.A.Na=a.autoStart;this.A.ib=!1;this.A.Ha=!1;this.Qa=this.X=0;this.Ra=a.csStart;this.Ia=a.csInterval;this.Ja=a.csStop;this.ja=[];this.Db=this.Ca.bind(this);F(this)}A(cc);var dc=["power","reset"];m=cc.prototype; +m.ya=function(a,b,d,c){this.w=a;this.H=b;this.I=c;for(b=0;b=a.X&&(a.X+=a.Ia,d=!0);0<=a.Ja&&a.Ja<=jc(a)&&(a.Ia=a.Ja=-1,gc(a),a.ca(),d=!0);d&&a.g(jc(a)+" cycles: checksum="+q(a.Qa))}} +function kc(a,b,d,c){a.L[b]&&(void 0===d&&(sb(a,"Value for "+b+" is invalid"),a.ca()),d=!a.A.aa||a.A.ib?q(d,c):"--------".substr(0,c),a.L[b].textContent!=d&&(a.L[b].textContent=d))} +m.ha=function(a,b,d){var c=this;a=!1;switch(b){case "power":case "reset":this.L[b]=d;a=!0;break;case "run":this.L[b]=d;d.onclick=function(){var a;if(a=c.w)if(a=c.w,a.A.Z)a=!0;else{var b=null,d,g=bb(a.id);for(d=0;da.R/a.za?b=1:c=!0;a.Aa=b;b=a.ua*a.Aa;if(a.za!=b){a.za=b;b=a.za.toFixed(2)+"Mhz";var e=a.L.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}d&&a.w&&a.w.Ua()}mc(a,a.N);a.N=0;a.M=va();a.S=0;nc(a);return c}function Ac(a){a.T-=a.O;a.O=0} +m.Ca=function(a){if(pb(this,!0)){if(!this.A.aa){lc(this);this.w&&this.w.start(this.M,jc(this));this.A.aa=!0;this.A.cb=!0;this.fa&&this.fa.start();var b=this.L.run;b&&(b.textContent="Halt");this.w&&(this.w.ia(!0),a&&this.w.Ua(!0))}this.Oa>=this.Fa&&nc(this,!0);this.ga=0;this.la=va();this.S&&(a=this.la-this.S,a>this.qb&&(this.M+=a,this.M>this.la&&(this.M=this.la)));try{do{for(var d=this.A.Ha?1:this.na,c=this.ja.length-1;0<=c;c--){var e=this.ja[c];0>e[0]||d>e[0]&&(d=e[0])}this.Ka(d);var f=this.T-this.O; +a=f;for(var h=this.ja.length-1;0<=h;h--){var g=this.ja[h];0>g[0]||(g[0]-=a,0>=g[0]&&(g[0]=-1,g[1]()))}this.ga+=f;this.N+=f;mc(this,0,!0);ic(this,f);this.Y-=f;if(0>=this.Y){this.Y+=this.na;15<=++this.rb&&(this.w&&this.w.ia(),this.rb=0);break}}while(this.A.aa)}catch(k){this.ca();I(this);this.w&&this.w.stop(va(),jc(this));pb(this,!1);sb(this,k.stack||k.message);return}d=setTimeout;c=this.Db;this.S=va();e=this.qb;this.ga&&(e=Math.round(e*this.ga/this.na));e=e-(this.S-this.la);if(f=this.S-this.M)this.R= +Math.round(this.N/(10*f))/100,864E5<=f&&(this.U=0,lc(this));if(0>e||this.Re&&(this.M-=e),e=0;this.Oa+=this.ga;this.S+=e;d(c,e)}else I(this),this.w&&this.w.stop(va(),jc(this))};m.Ka=function(){return 0};m.ca=function(a){qb(this,!0);Ac(this);mc(this,this.N);this.N=0;if(this.A.aa){this.A.aa=!1;this.fa&&this.fa.stop();var b=this.L.run;b&&(b.textContent="Run")}this.A.complete=a};function I(a,b){a.w&&a.w.ia(b)} +function Bc(a){this.tb=+a.model||1170;this.Fb=a.resetAddr||0;cc.call(this,a,1E6);this.Wa=0;this.C=65536;this.j=32768;this.u=65535;this.i=32768;this.f=15;this.b=[0,0,0,0,0,0,0,0];this.Ya=[0,0,0,0,0,0];this.Ba=[0,0,0,0];this.memory=[];this.G=[];this.Pa=this.sb=0;this.V=2;this.W=255;this.F=0;this.da=-1;this.pb=this.Da=this.ob=this.B=this.pa=this.K=this.J=0;this.ka=[7,7,7,7];this.Ea=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];this.Hb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.A.complete=this.A.Ab=!1}A(Bc,cc);m=Bc.prototype;m.reset=function(){this.A.aa&&this.ca();Cc(this);fc(this);this.A.error=!1;this.parent.reset.call(this)}; +function Cc(a){a.b[7]=a.Fb;a.W=255;a.G=[];a.sb=0;a.J=a.K=a.pa=a.ob=0;a.ka[0]=a.ka[1]=a.ka[3]=7;a.Da=0}m.mb=function(){return 0};m.save=function(){var a=new J(this);K(a,0,[]);K(a,1,[this.nb,this.U,this.Aa]);for(var b=this.H,d=0,c=[],e=0;e>12&8|(a.u&65535?0:4)|(a.j&32768?2:0)|(a.C&65536?1:0)} +m.ia=function(a){this.Wa&&(a||!this.A.aa||this.A.ib)&&(a=Dc(this),kc(this,"PSW",a,4),kc(this,"NF",a&8?1:0,1),kc(this,"ZF",a&4?1:0,1),kc(this,"VF",a&2?1:0,1),kc(this,"CF",a&1?1:0,1));if(a=this.L.speed)a.textContent=this.A.aa&&this.R?this.R.toFixed(2)+"Mhz":"Stopped"};function Ec(a,b){a.i=b<<12;a.u=~b&4;a.j=b<<14;a.C=b<<16;if((b^a.f)&2048)for(var d=a.Ya.length;0<=--d;){var c=a.b[d];a.b[d]=a.Ya[d];a.Ya[d]=c}a.B=b>>14&3;d=a.f>>14&3;a.B!=d&&(a.Ba[d]=a.b[6],a.b[6]=a.Ba[a.B]);a.V=2;a.f=b} +function L(a,b){var d,c,e=0;0>a.da?a.da=a.f=a.f&63728|a.i>>12&8|(a.u&65535?0:4)|(a.j&32768?2:0)|(a.C&65536?1:0):a.B||(b=4,e=1);a.J&57344||(a.K=63222);a.B=0;0<=(d=N(a,b|65536))&&0<=(c=N(a,b+2&65535|65536))&&(Ec(a,c&53247|a.da>>2&12288),e&&(a.b[6]=4),0<=Fc(a,a.da)&&0<=Fc(a,a.b[7])&&(a.b[7]=d));a.F=0;return a.da=-1} +function Gc(a,b,d){var c,e,f,h=0;if(d&a.ob){c=b>>13&a.ka[a.B];e=a.Ea[a.B][c];f=(a.Ea[a.B][c+16]<<6)+(b&8191)&4194303;if(a.pa&16){if(3932160<=f&&4186112>f){f=f&262143;var g=f>>13&31;31>g?a.pa&32&&(f=a.Hb[g]+(f&8190)&4194302,3932160<=f&&4186112>f&&console.log("panic(898)")):f|=4186112}}else f&=262143,253952<=f&&(f|=4186112);if(3932160>f&&(3915776<=f||f&1&&!(d&1)))return L(a,4);switch(e&7){case 1:h=4096;case 2:e|=128;d&4&&(h=8192);break;case 4:h=4096;case 5:d&4&&(h=4096);case 6:e|=d&4?192:128;break; +default:h=32768}32512!==(e&32520)&&(e&8?e&32512&&(b&8128)<(e>>2&8128)&&(h|=16384):(b&8128)>(e>>2&8128)&&(h|=16384));a.Ea[a.B][c]=e;if(4194170!==f||a.B)a.Da=a.B,a.pb=c;if(h){if(h&57344)return 0<=a.da&&(h|=128),a.J&57344||(a.J=a.J|h|a.Da<<5|a.pb<<1),L(a,168);a.J&61440||!(4191360>f||4194239>1]:b} +function P(a,b,d){d&=65535;return 4194304<=b?a.b[b-4194304]=d:3932160<=b?-1:0<=b?a.memory[b>>1]=d:b}function S(a,b){var d;return 4194304<=b?a.b[b-4194304]&255:3932160<=b?-1:0<=b?(d=a.memory[b>>1],b&1&&(d=d>>8),d&255):b}function T(a,b,d){d&=255;return 4194304<=b?a.b[b-4194304]=a.b[b-4194304]&65280|d:3932160<=b?-1:0<=b?b&1?a.memory[b>>1]=d<<8|a.memory[b>>1]&255:a.memory[b>>1]=a.memory[b>>1]&65280|d:b}function N(a,b){return O(a,Gc(a,b,2))} +function Hc(a){var b=N(a,a.b[6]|65536);0<=b&&(a.b[6]=a.b[6]+2&65535);return b}function Fc(a,b){var d,c;a.b[6]=c=a.b[6]-2&65535;a.J&57344||(a.K=a.K<<8|246);if(!a.B&&c<=a.W&&4>3&7){case 0:return L(a,4);case 1:if(6===f&&!a.B&&d&4&&(a.b[6]<=a.W||65534<=a.b[6])){if(a.b[6]<=a.W-32||65534<=a.b[6])return a.b[6]=4,L(a,4);a.F|=4}return 7===f?a.b[f]:a.b[f]|65536;case 2:e=2;c=a.b[f];7!==f&&(c|=65536,6>f&&d&1&&(e=1));break;case 3:e=2;c=a.b[f];7!==f&&(c|=65536);if(0>(c=N(a,c)))return c;c|=65536;break;case 4:e=-2;6>f&&d&1&&(e=-1);c=a.b[f]+e&65535;7!==f&&(c|=65536);break;case 5:e=-2;c=a.b[f]-2&65535;7!==f&&(c|=65536);if(0>(c=N(a,c)))return c; +c|=65536;break;case 6:if(0>(c=N(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[f]&65535;return c|65536;case 7:if(0>(c=N(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[f]&65535;return 0>(c=N(a,c|65536))?c:c|65536}a.b[f]=a.b[f]+e&65535;a.J&57344||(a.K=a.K<<8|e<<3&248|f);if(6===f&&!a.B&&d&4&&0>=e&&(a.b[6]<=a.W||65534<=a.b[6])){if(a.b[6]<=a.W-32)return a.b[6]=4,L(a,4);a.F|=4}return c}function U(a,b,d){var c;return b&56?(0<=(c=Ic(a,b,d))&&(c=Gc(a,c,d)),c):4194304+(b&7)} +function V(a,b){var d;b&56?0<=(d=U(a,b,2))&&(d=O(a,d)):d=a.b[b&7];return d}function Jc(a,b){var d;b&56?0<=(d=U(a,b,3))&&(d=S(a,d)):d=a.b[b&7]&255;return d}function W(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} +m.Ka=function(a){this.A.complete=!0;var b=this.A.Ab=this.I&&Kc(this.I),d=a?this.A.cb?0:1:-1;this.A.cb=!1;this.T=this.O=a;this.nb&256?(Ac(this),a=!1):a=!0;if(a){do{if(b){if(Lc(this.I,this.b[7],d)){this.ca();break}d=1}var c,e,f,h,g;if(this.V)if(1===this.V)this.V=2;else{this.V=0;g=-1;c=this.sb&224;if(0<(a=this.G.length))for(;0c&&(c=this.G[a].Gb,g= +a)}c>(this.f&224)&&(0>g?L(this,160):(L(this,this.G[g].Jb),this.G.splice(g,1)))}this.J&57344||(this.K=0);this.F=this.f&16;if(0<=(a=N(this,this.b[7])))switch(this.b[7]=this.b[7]+2&65535,a&61440){case 4096:0<=(c=V(this,a>>6))&&(a&56?0<=(f=U(this,a,4))&&0<=P(this,f,c)&&(this.i=this.u=c,this.j=0):(this.i=this.u=this.b[a&7]=c,this.j=0));break;case 8192:0<=(c=V(this,a>>6))&&0<=(e=V(this,a))&&(this.i=this.u=this.C=a=c-e,this.j=(c^e)&(c^a));break;case 12288:0<=(c=V(this,a>>6))&&0<=(e=V(this,a))&&(this.i=this.u= c&e,this.j=0);break;case 16384:0<=(c=V(this,a>>6))&&(a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e&~c,0<=P(this,f,a)&&(this.i=this.u=a,this.j=0)):(this.i=this.u=a=this.b[a&7]&=~c,this.j=0));break;case 20480:0<=(c=V(this,a>>6))&&(a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e|c,0<=P(this,f,a)&&(this.i=this.u=a,this.j=0)):(this.i=this.u=a=this.b[a&7]|=c,this.j=0));break;case 24576:0<=(c=V(this,a>>6))&&(a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=c+e,0<=P(this,f,a)&&(this.i=this.u=this.C=a,this.j=(c^a)&(e^a))):(g=a&7, -e=this.b[g],this.b[g]=(a=c+e)&65535,this.i=this.u=this.C=a,this.j=(c^a)&(e^a)));break;case 36864:0<=(c=Hc(this,a>>6))&&(a&56?0<=(f=U(this,a,5))&&0<=T(this,f,c)&&(this.i=this.u=c<<8,this.j=0):(c&128&&(c|=65280),this.i=this.u=this.b[a&7]=c,this.j=0));break;case 40960:0<=(c=Hc(this,a>>6))&&0<=(e=Hc(this,a))&&(a=c-e,this.i=this.u=this.C=a<<8,this.j=((c^e)&(c^a))<<8);break;case 45056:0<=(c=Hc(this,a>>6))&&0<=(e=Hc(this,a))&&(this.i=this.u=(c&e)<<8,this.j=0);break;case 49152:0<=(c=Hc(this,a>>6))&&0<=(e= -S(this,f=U(this,a,7)))&&(a=e&~c,0<=T(this,f,a)&&(this.i=this.u=a<<8,this.j=0));break;case 53248:0<=(c=Hc(this,a>>6))&&0<=(e=S(this,f=U(this,a,7)))&&(a=e|c,0<=T(this,f,a)&&(this.i=this.u=a<<8,this.j=0));break;case 57344:0<=(c=V(this,a>>6))&&(a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e-c,0<=P(this,f,a)&&(this.i=this.u=this.C=a,this.j=(c^e)&(e^a))):(g=a&7,e=this.b[g],this.b[g]=(a=e-c)&65535,this.i=this.u=this.C=a,this.j=(c^e)&(e^a)));break;default:switch(a&65024){case 2048:0<=(h=Gc(this,a,0))&&(g=a>>6&7, -0<=Dc(this,this.b[g])&&(this.b[g]=this.b[7],this.b[7]=h&65535));break;case 28672:0<=(c=V(this,a))&&(g=a>>6&7,c&32768&&(c|=-65536),e=this.b[g],e&32768&&(e|=-65536),a=~~(c*e),this.b[g]=a>>16&65535,this.b[g|1]=a&65535,this.i=a>>16,this.u=this.i|a,this.C=this.j=0,-32768>a||32767>6&7,e=this.b[g]<<16|this.b[g|1],this.C=this.j=0,c&32768&&(c|=-65536),a=~~(e/c),-32768<=a&&32767>=a?(this.b[g]=a&65535,this.b[g|1]=e-a*c&65535,this.u=a>>16|a,this.i= +e=this.b[g],this.b[g]=(a=c+e)&65535,this.i=this.u=this.C=a,this.j=(c^a)&(e^a)));break;case 36864:0<=(c=Jc(this,a>>6))&&(a&56?0<=(f=U(this,a,5))&&0<=T(this,f,c)&&(this.i=this.u=c<<8,this.j=0):(c&128&&(c|=65280),this.i=this.u=this.b[a&7]=c,this.j=0));break;case 40960:0<=(c=Jc(this,a>>6))&&0<=(e=Jc(this,a))&&(a=c-e,this.i=this.u=this.C=a<<8,this.j=((c^e)&(c^a))<<8);break;case 45056:0<=(c=Jc(this,a>>6))&&0<=(e=Jc(this,a))&&(this.i=this.u=(c&e)<<8,this.j=0);break;case 49152:0<=(c=Jc(this,a>>6))&&0<=(e= +S(this,f=U(this,a,7)))&&(a=e&~c,0<=T(this,f,a)&&(this.i=this.u=a<<8,this.j=0));break;case 53248:0<=(c=Jc(this,a>>6))&&0<=(e=S(this,f=U(this,a,7)))&&(a=e|c,0<=T(this,f,a)&&(this.i=this.u=a<<8,this.j=0));break;case 57344:0<=(c=V(this,a>>6))&&(a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e-c,0<=P(this,f,a)&&(this.i=this.u=this.C=a,this.j=(c^e)&(e^a))):(g=a&7,e=this.b[g],this.b[g]=(a=e-c)&65535,this.i=this.u=this.C=a,this.j=(c^e)&(e^a)));break;default:switch(a&65024){case 2048:0<=(h=Ic(this,a,0))&&(g=a>>6&7, +0<=Fc(this,this.b[g])&&(this.b[g]=this.b[7],this.b[7]=h&65535));break;case 28672:0<=(c=V(this,a))&&(g=a>>6&7,c&32768&&(c|=-65536),e=this.b[g],e&32768&&(e|=-65536),a=~~(c*e),this.b[g]=a>>16&65535,this.b[g|1]=a&65535,this.i=a>>16,this.u=this.i|a,this.C=this.j=0,-32768>a||32767>6&7,e=this.b[g]<<16|this.b[g|1],this.C=this.j=0,c&32768&&(c|=-65536),a=~~(e/c),-32768<=a&&32767>=a?(this.b[g]=a&65535,this.b[g|1]=e-a*c&65535,this.u=a>>16|a,this.i= a>>16):(this.j=32768,this.u=a>>15|a,this.i=e>>16,-1===c&&65534===this.b[g]&&(this.b[g]=this.b[g|1]=1))):(this.u=this.i=0,this.j=32768,this.C=65536));break;case 29696:0<=(c=V(this,a))&&(g=a>>6&7,a=this.b[g],a&32768&&(a|=4294901760),this.C=this.j=0,c&=63,c&32?(c=64-c,16>c):c&&(16>15&65535)&&65535!==e&&(this.j=32768))),this.b[g]=a&65535,this.i=this.u=a);break;case 30208:if(0<=(c=V(this,a))){g=a>>6&7;e=this.b[g]<<16|this.b[g|1];this.C= this.j=0;c&=63;if(c&32)c=64-c,32>c-1,this.C=a<<16,a>>=1,e&2147483648&&(a|=4294967295<<32-c);else if(c){if(a=e<>15,a<<=1,32>=32-c)e|=4294967295<>16&65535;this.b[g|1]=a&65535;this.i=a>>16;this.u=a>>16|a}break;case 30720:a&56?0<=(e=O(this,f=U(this,a,6)))&&(e^=this.b[a>>6&7],0<=P(this,f,e)&&(this.i=this.u=e,this.j=0)):(this.i=this.u=e=this.b[a&7]^=this.b[a>>6&7],this.j=0);break;case 32256:g=a>> 6&7;if(this.b[g]=this.b[g]-1&65535)this.b[7]=this.b[7]-((a&63)<<1)&65535;break;default:switch(a&65280){case 256:this.b[7]=W(this.b[7],a);break;case 512:this.u&65535&&(this.b[7]=W(this.b[7],a));break;case 768:this.u&65535||(this.b[7]=W(this.b[7],a));break;case 1024:(this.i&32768)===(this.j&32768)&&(this.b[7]=W(this.b[7],a));break;case 1280:(this.i&32768)!==(this.j&32768)&&(this.b[7]=W(this.b[7],a));break;case 1536:this.u&65535&&(this.i&32768)===(this.j&32768)&&(this.b[7]=W(this.b[7],a));break;case 1792:this.u& 65535&&(this.i&32768)===(this.j&32768)||(this.b[7]=W(this.b[7],a));break;case 32768:this.i&32768||(this.b[7]=W(this.b[7],a));break;case 33280:!(this.C&65536)&&this.u&65535&&(this.b[7]=W(this.b[7],a));break;case 33024:this.i&32768&&(this.b[7]=W(this.b[7],a));break;case 33536:if(this.C&65536||!(this.u&65535))this.b[7]=W(this.b[7],a);break;case 33792:this.j&32768||(this.b[7]=W(this.b[7],a));break;case 34048:this.j&32768&&(this.b[7]=W(this.b[7],a));break;case 34304:this.C&65536||(this.b[7]=W(this.b[7], -a));break;case 34560:this.C&65536&&(this.b[7]=W(this.b[7],a));break;case 34816:M(this,24);break;case 35072:M(this,28);break;default:switch(a&65472){case 64:0<=(h=Gc(this,a,0))&&(this.b[7]=h&65535);break;case 192:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e<<8|e>>8,0<=P(this,f,a)&&(this.i=this.u=e&65280,this.j=this.C=0)):(g=a&7,e=this.b[g],this.b[g]=(e<<8|e>>8)&65535,this.i=this.u=e&65280,this.j=this.C=0);break;case 2560:a&56?0<=(f=U(this,a,4))&&0<=P(this,f,0)&&(this.i=this.C=this.j=this.u=0):this.i=this.C= +a));break;case 34560:this.C&65536&&(this.b[7]=W(this.b[7],a));break;case 34816:L(this,24);break;case 35072:L(this,28);break;default:switch(a&65472){case 64:0<=(h=Ic(this,a,0))&&(this.b[7]=h&65535);break;case 192:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e<<8|e>>8,0<=P(this,f,a)&&(this.i=this.u=e&65280,this.j=this.C=0)):(g=a&7,e=this.b[g],this.b[g]=(e<<8|e>>8)&65535,this.i=this.u=e&65280,this.j=this.C=0);break;case 2560:a&56?0<=(f=U(this,a,4))&&0<=P(this,f,0)&&(this.i=this.C=this.j=this.u=0):this.i=this.C= this.j=this.u=this.b[a&7]=0;break;case 2624:0<=(e=O(this,f=U(this,a,6)))&&(a=~e,0<=P(this,f,a)&&(this.i=this.u=a,this.C=65536,this.j=0));break;case 2688:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e+1,0<=P(this,f,a)&&(this.i=this.u=a,this.j=a&(a^e))):(g=a&7,e=this.b[g],a=e+1,this.b[g]=a&65535,this.i=this.u=a,this.j=a&(a^e));break;case 2752:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e-1,0<=P(this,f,a)&&(this.i=this.u=a,this.j=(a^e)&e)):(g=a&7,e=this.b[g],a=e-1,this.b[g]=a&65535,this.i=this.u=a,this.j=(a^e)&e); break;case 2816:0<=(e=O(this,f=U(this,a,6)))&&(a=-e,0<=P(this,f,a)&&(this.C=this.i=this.u=a,this.j=a&e));break;case 2880:0<=(e=O(this,f=U(this,a,6)))&&(a=e+(this.C>>16&1),0<=P(this,f,a)&&(this.C=this.i=this.u=a,this.j=a&(a^e)));break;case 2944:0<=(e=O(this,f=U(this,a,6)))&&(a=e-(this.C>>16&1),0<=P(this,f,a)&&(this.C=this.i=this.u=a,this.j=(a^e)&e));break;case 3008:0<=(e=V(this,a))&&(this.i=this.u=e,this.C=this.j=0);break;case 3072:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=(this.C&65536|e)>>1,0<=P(this, f,a)&&(this.C=e<<16,this.i=this.u=a,this.j=a^this.C>>1)):(g=a&7,e=this.b[g],a=(this.C&65536|e)>>1,this.b[g]=a&65535,this.C=e<<16,this.i=this.u=a,this.j=a^this.C>>1);break;case 3136:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e<<1|this.C>>16&1,0<=P(this,f,a)&&(this.C=this.i=this.u=a,this.j=a^e)):(g=a&7,e=this.b[g],a=e<<1|this.C>>16&1,this.b[g]=a&65535,this.C=this.i=this.u=a,this.j=a^e);break;case 3200:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e&32768|e>>1,0<=P(this,f,a)&&(this.C=e<<16,this.i=this.u=a,this.j= -this.i^this.C>>1)):(g=a&7,e=this.b[g],a=e&32768|e>>1,this.b[g]=a&65535,this.C=e<<16,this.i=this.u=a,this.j=this.i^this.C>>1);break;case 3264:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e<<1,0<=P(this,f,a)&&(this.C=this.i=this.u=a,this.j=a^e)):(g=a&7,e=this.b[g],a=e<<1,this.b[g]=a&65535,this.C=this.i=this.u=a,this.j=a^e);break;case 3328:h=this.b[7]+((a&63)<<1)&65535;0<=(c=N(this,h|65536))&&(this.b[7]=this.b[5],this.b[5]=c,this.b[6]=h+2&65535);break;case 3392:a&56?0<=(h=Gc(this,a,0))&&(61440!==(this.f&61440)&& -(h&=65535),this.B=this.f>>12&3,0<=(c=N(this,h))&&(this.B=this.f>>14&3,0<=Dc(this,c)&&(this.i=this.u=c,this.j=0))):(g=a&7,c=6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]:this.Ba[this.f>>12&3],0<=Dc(this,c)&&(this.i=this.u=c,this.j=0));break;case 3456:0<=(e=Fc(this))&&((this.J&57344||(this.K=22),a&56)?0<=(h=Gc(this,a,0))&&(h&=65535,this.B=this.f>>12&3,0<=(f=Ec(this,h,4))&&(this.B=this.f>>14&3,0<=P(this,f,e)&&(this.i=this.u=e,this.j=0))):(g=a&7,6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]= +this.i^this.C>>1)):(g=a&7,e=this.b[g],a=e&32768|e>>1,this.b[g]=a&65535,this.C=e<<16,this.i=this.u=a,this.j=this.i^this.C>>1);break;case 3264:a&56?0<=(e=O(this,f=U(this,a,6)))&&(a=e<<1,0<=P(this,f,a)&&(this.C=this.i=this.u=a,this.j=a^e)):(g=a&7,e=this.b[g],a=e<<1,this.b[g]=a&65535,this.C=this.i=this.u=a,this.j=a^e);break;case 3328:h=this.b[7]+((a&63)<<1)&65535;0<=(c=N(this,h|65536))&&(this.b[7]=this.b[5],this.b[5]=c,this.b[6]=h+2&65535);break;case 3392:a&56?0<=(h=Ic(this,a,0))&&(61440!==(this.f&61440)&& +(h&=65535),this.B=this.f>>12&3,0<=(c=N(this,h))&&(this.B=this.f>>14&3,0<=Fc(this,c)&&(this.i=this.u=c,this.j=0))):(g=a&7,c=6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]:this.Ba[this.f>>12&3],0<=Fc(this,c)&&(this.i=this.u=c,this.j=0));break;case 3456:0<=(e=Hc(this))&&((this.J&57344||(this.K=22),a&56)?0<=(h=Ic(this,a,0))&&(h&=65535,this.B=this.f>>12&3,0<=(f=Gc(this,h,4))&&(this.B=this.f>>14&3,0<=P(this,f,e)&&(this.i=this.u=e,this.j=0))):(g=a&7,6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]= e:this.Ba[this.f>>12&3]=e,this.i=this.u=e,this.j=0));break;case 3520:0<=(f=U(this,a,4))&&(a=-(this.i>>15&1),0<=P(this,f,a)&&(this.u=a,this.j=0));break;case 35328:a&56?0<=(f=U(this,a,5))&&0<=T(this,f,0)&&(this.i=this.C=this.j=this.u=0):(this.b[a&7]&=65280,this.i=this.C=this.j=this.u=0);break;case 35392:0<=(e=S(this,f=U(this,a,7)))&&(a=~e,0<=T(this,f,a)&&(this.i=this.u=a<<8,this.C=65536,this.j=0));break;case 35456:0<=(e=S(this,f=U(this,a,7)))&&(a=e+1,0<=T(this,f,a)&&(this.i=this.u=a<<8,this.j=(a&(a^ e))<<8));break;case 35520:0<=(e=S(this,f=U(this,a,7)))&&(a=e-1,0<=T(this,f,a)&&(this.i=this.u=a<<8,this.j=((a^e)&e)<<8));break;case 35584:0<=(e=S(this,f=U(this,a,7)))&&(a=-e,0<=T(this,f,a)&&(this.C=this.i=this.u=a<<8,this.j=(a&e)<<8));break;case 35648:0<=(e=S(this,f=U(this,a,7)))&&(a=e+(this.C>>16&1),0<=T(this,f,a)&&(this.i=this.u=this.C=a<<8,this.j=(a&(a^e))<<8));break;case 35712:0<=(e=S(this,f=U(this,a,7)))&&(a=e-(this.C>>16&1),0<=T(this,f,a)&&(this.i=this.u=this.C=a<<8,this.j=((a^e)&e)<<8));break; -case 35776:0<=(e=Hc(this,a))&&(this.i=this.u=e<<8,this.C=this.j=0);break;case 35840:0<=(e=S(this,f=U(this,a,7)))&&(a=((this.C&65536)>>8|e)>>1,0<=T(this,f,a)&&(this.C=e<<16,this.i=this.u=a<<8,this.j=this.i^this.C>>1));break;case 35904:0<=(e=S(this,f=U(this,a,7)))&&(a=e<<1|this.C>>16&1,0<=T(this,f,a)&&(this.C=this.i=this.u=a<<8,this.j=(a^e)<<8));break;case 35968:0<=(e=S(this,f=U(this,a,7)))&&(a=e&128|e>>1,0<=T(this,f,a)&&(this.C=e<<16,this.i=this.u=a<<8,this.j=this.i^this.C>>1));break;case 36032:0<= -(e=S(this,f=U(this,a,7)))&&(a=e<<1,0<=T(this,f,a)&&(this.C=this.i=this.u=a<<8,this.j=(a^e)<<8));break;case 36160:a&56?0<=(h=Gc(this,a,0))&&(this.B=this.f>>12&3,0<=(c=N(this,h|65536))&&(this.B=this.f>>14&3,0<=Dc(this,c)&&(this.i=this.u=c,this.j=0))):(g=a&7,c=6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]:this.Ba[this.f>>12&3],0<=Dc(this,c)&&(this.i=this.u=c,this.j=0));break;case 36224:0<=(e=Fc(this))&&((this.J&57344||(this.K=22),a&56)?0<=(h=Gc(this,a,0))&&(this.B=this.f>>12&3,0<=(f=Ec(this,h| -65536,4))&&(this.B=this.f>>14&3,0<=P(this,f,e)&&(this.i=this.u=e,this.j=0))):(g=a&7,6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]=e:this.Ba[this.f>>12&3]=e,this.i=this.u=e,this.j=0));break;default:switch(a&65528){case 128:0<=(c=Fc(this))&&(g=a&7,this.b[7]=this.b[g],this.b[g]=c);break;case 152:this.f&49152||(this.f=this.f&63519|(a&7)<<5,this.V=1);break;case 160:case 168:a&1&&(this.C=0);a&2&&(this.j=0);a&4&&(this.u=1);a&8&&(this.i=0);break;case 176:case 184:a&1&&(this.C=65536);a&2&&(this.j=32768); -a&4&&(this.u=0);a&8&&(this.i=32768);break;default:switch(a){case 0:49152&this.f?M(this,4):(this.Pa=3,yc(this),console.log("HALT at "+this.b[7].toString(8)));break;case 1:g=0;if(0<(a=this.G.length))for(;0>>0,h],q=ta(n,k,a.gb);0>q&&n.splice(-(q+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.K.push({Hb:b,D:d,Cb:c,pa:e,eb:f})}delete this.pa}return!0};Kc.prototype.qa=function(){return!0}; -function Lc(a,b,d,c){if(c)a.ea("Unable to load system ROM (error "+c+": "+b+")");else{$a(a.lb,b,d);if("["==d.charAt(0)||"{"==d.charAt(0))try{var e=eval("("+d+")"),f=e.bytes,h=e.data;if(f)a.A=f;else if(h)for(a.A=Array(4*h.length),c=d=0;d>8&255,a.A[c++]=h[d]>>16&255,a.A[c++]=h[d]>>24&255;else a.A=e;a.pa=e.symbols;if(!a.A.length){u("Empty ROM: "+b);return}if(1==a.A.length){u(a.A[0]);return}}catch(g){a.ea("ROM data error: "+g.message);return}else for(b=d.replace(/\n/gm, -" ").replace(/ +$/,"").split(" "),a.A=Array(b.length),e=0;e>>c.ba].Ka(e&c.H,a.A[d]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.F?b.push(a.F):null!=a.F&&a.F.length&&(b=a.F);for(d=0;d>>e.ba;0>>=e.ba;0=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; -function Rc(a,b,d,c){if(d)if(b){0>a.G&&a.F.length&&(a.G=0);if(0>a.G||b!=a.F[a.G])a.F.splice(0,0,b),a.G=0;a.G--}else a.U?b="end":b=a.F[a.G+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");d=0;var e=null;c=c||";";for(var f=0;f<=b.length;f++){var h=b.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==c&&!e||!h)a.push(pa(b.substring(d,f))),d=f+1}}return a} -function Sc(a,b,d){for(d=d||-1;d--&&b.length;){var c=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(c){case "*":c=f*e;break;case "/":if(!e)return!1;c=f/e;break;case "%":if(!e)return!1;c=f%e;break;case "+":c=f+e;break;case "-":c=f-e;break;case "<<":c=f<>":c=f>>e;break;case ">>>":c=f>>>e;break;case "<":c=f":c=f>e?1:0;break;case ">=":c=f>=e?1:0;break;case "==":c=f==e?1:0;break;case "!=":c=f!=e?1:0;break;case "&":c=f&e;break; +case 35776:0<=(e=Jc(this,a))&&(this.i=this.u=e<<8,this.C=this.j=0);break;case 35840:0<=(e=S(this,f=U(this,a,7)))&&(a=((this.C&65536)>>8|e)>>1,0<=T(this,f,a)&&(this.C=e<<16,this.i=this.u=a<<8,this.j=this.i^this.C>>1));break;case 35904:0<=(e=S(this,f=U(this,a,7)))&&(a=e<<1|this.C>>16&1,0<=T(this,f,a)&&(this.C=this.i=this.u=a<<8,this.j=(a^e)<<8));break;case 35968:0<=(e=S(this,f=U(this,a,7)))&&(a=e&128|e>>1,0<=T(this,f,a)&&(this.C=e<<16,this.i=this.u=a<<8,this.j=this.i^this.C>>1));break;case 36032:0<= +(e=S(this,f=U(this,a,7)))&&(a=e<<1,0<=T(this,f,a)&&(this.C=this.i=this.u=a<<8,this.j=(a^e)<<8));break;case 36160:a&56?0<=(h=Ic(this,a,0))&&(this.B=this.f>>12&3,0<=(c=N(this,h|65536))&&(this.B=this.f>>14&3,0<=Fc(this,c)&&(this.i=this.u=c,this.j=0))):(g=a&7,c=6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]:this.Ba[this.f>>12&3],0<=Fc(this,c)&&(this.i=this.u=c,this.j=0));break;case 36224:0<=(e=Hc(this))&&((this.J&57344||(this.K=22),a&56)?0<=(h=Ic(this,a,0))&&(this.B=this.f>>12&3,0<=(f=Gc(this,h| +65536,4))&&(this.B=this.f>>14&3,0<=P(this,f,e)&&(this.i=this.u=e,this.j=0))):(g=a&7,6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]=e:this.Ba[this.f>>12&3]=e,this.i=this.u=e,this.j=0));break;default:switch(a&65528){case 128:0<=(c=Hc(this))&&(g=a&7,this.b[7]=this.b[g],this.b[g]=c);break;case 152:this.f&49152||(this.f=this.f&63519|(a&7)<<5,this.V=1);break;case 160:case 168:a&1&&(this.C=0);a&2&&(this.j=0);a&4&&(this.u=1);a&8&&(this.i=0);break;case 176:case 184:a&1&&(this.C=65536);a&2&&(this.j=32768); +a&4&&(this.u=0);a&8&&(this.i=32768);break;default:switch(a){case 0:49152&this.f?L(this,4):(this.Pa=3,Ac(this),console.log("HALT at "+this.b[7].toString(8)));break;case 1:g=0;if(0<(a=this.G.length))for(;0>>0,h],p=ua(n,k,a.hb);0>p&&n.splice(-(p+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.K.push({Ib:b,D:d,Cb:c,qa:e,fb:f})}delete this.qa}return!0};Mc.prototype.ra=function(){return!0}; +function Nc(a,b,d,c){if(c)a.ea("Unable to load system ROM (error "+c+": "+b+")");else{ab(a.lb,b,d);var e;if("["==d.charAt(0)||"{"==d.charAt(0))try{var f,h,g=eval("("+d+")");if(f=g.bytes)a.w=f;else if(f=g.words)for(a.w=Array(2*f.length),h=e=0;e>8&255;else if(f=g.data)for(a.w=Array(4*f.length),h=e=0;e>8&255,a.w[h++]=f[e]>>16&255,a.w[h++]=f[e]>>24&255;else a.w=g;a.qa=g.symbols;if(!a.w.length){u("Empty ROM: "+ +b);return}if(1==a.w.length){u(a.w[0]);return}}catch(k){a.ea("ROM data error: "+k.message);return}else for(b=d.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.w=Array(b.length),e=0;e>>c.ba].La(e&c.H,a.w[d]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.F?b.push(a.F):null!=a.F&&a.F.length&&(b=a.F);for(d=0;d>>e.ba;0>>=e.ba;0=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; +function Tc(a,b,d,c){if(d)if(b){0>a.G&&a.F.length&&(a.G=0);if(0>a.G||b!=a.F[a.G])a.F.splice(0,0,b),a.G=0;a.G--}else a.U?b="end":b=a.F[a.G+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");d=0;var e=null;c=c||";";for(var f=0;f<=b.length;f++){var h=b.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==c&&!e||!h)a.push(qa(b.substring(d,f))),d=f+1}}return a} +function Uc(a,b,d){for(d=d||-1;d--&&b.length;){var c=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(c){case "*":c=f*e;break;case "/":if(!e)return!1;c=f/e;break;case "%":if(!e)return!1;c=f%e;break;case "+":c=f+e;break;case "-":c=f-e;break;case "<<":c=f<>":c=f>>e;break;case ">>>":c=f>>>e;break;case "<":c=f":c=f>e?1:0;break;case ">=":c=f>=e?1:0;break;case "==":c=f==e?1:0;break;case "!=":c=f!=e?1:0;break;case "&":c=f&e;break; case "^":c=f^e;break;case "|":c=f|e;break;case "&&":c=f&&e?1:0;break;case "||":c=f||e?1:0;break;default:return!1}a.push(c|0)}return!0} -function Tc(a,b,d){var c;if(b){b=Uc(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e>=1;c=n+c;f>>=8}f=d;h=0;g="";h?11>=3;c=p(d,0,!0)+" "+d+". "+("0o"+g)+" "+("0b"+c)}a.g((null!=b?b+": ":"")+c);return e} -function Xc(a,b){if(b)return Wc(a,b,a.W[b]);var d=0;for(b in a.W)Wc(a,b,a.W[b]),d++;return 0=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e>=1;h=n+h;c>>=8}c=q(d,0,!0)+" "+d+". "+ga(d,0,!0)+" "+("0b"+h)}a.g((null!=b?b+": ":"")+c);return e} +function Zc(a,b){if(b)return Yc(a,b,a.W[b]);var d=0;for(b in a.W)Yc(a,b,a.W[b]),d++;return 0>>c.H.ba;k=1}c.g("blockid physical blockaddr used size type");c.g("-------- --------- ---------- ------ ------ ----");for(var d=-1,l=0;k--;){var n=b[g];n.type==d?l++||c.g("..."):(d=n.type,l=yb[d],n&&c.g(p(n.id)+" %"+p(g<>>d.ba].Ta(c&d.H,c),b&&fd(a,b));return d};m.va=function(a,b){var d=65535,c=Y(a);-1!==c&&(d=zb(this.H,c),b&&fd(a,b));return d}; -m.cb=function(a,b,d){var c=Y(a);if(-1!==c){var e=this.H;e.P[(c&e.A)>>>e.ba].Ka(c&e.H,b&255,c);d&&fd(a,d);I(this.f,!0)}};m.xb=function(a,b,d){var c=Y(a);if(-1!==c){var e=this.H,f=c&e.H,h=(c&e.A)>>>e.ba;f!=e.H?e.P[h].wb(f,b&65535,c):(e.P[h++].Ka(f,b&255,c),e.P[h&e.K].Ka(0,b>>8&255,c+1));d&&fd(a,d);I(this.f,!0)}};function X(a){return{D:a,oa:!1}}function gd(a){return[a.D,a.oa]}function hd(a){return{D:a[0],oa:a[1]}} -function Z(a,b,d){var c;d=(d?a.O:a.sa).D;if(void 0!==b){c=b=Uc(a,b);var e;if(c.match(/^[a-z_][a-z0-9_]*$/i))for(c=c.toUpperCase(),d=0;de&&(e+=d.length);0>e&&(e=0);for(var f=d.length;e>>c.ba],!1)}a.R=["br"];if(void 0!==a.J)for(b=1;b>>c.ba],!0);a.J=["bw"];a.ta=0} -m.wa=function(a,b,d){var c=!0;d||nd(this,a,b,!1,!0);if(a!=this.B){var e=Y(b);if(-1===e)this.g("invalid address: "+p(b.D,4)),c=!1;else{var f=this.H;f.P[e>>>f.ba].wa(e&f.H,a==this.J)}}c&&(a.push(b),d?b.oa=!0:(od(this,a,a.length-1,"set"),$c(this)));return c};function nd(a,b,d,c,e){var f=!1;d=Y(d);for(var h=1;h>>c.ba],b==a.J));g.oa||$c(a);break}}return f} -function pd(a,b){for(var d=1;d>24,t=q.D+t&65535,w=r(t);else if(8192==t)t=(f&63)<<1,t=q.D-t&65535,w=r(t);else if(12288==t)t=f&7,w=p(t,2,!0);else if(24576==t)t=f&63,w=p(t,2,!0);else if(t=f&D,D&4032&&(t>>=6,D>>=6),D&63){var D=void 0,y=t&7;switch(t&56){case 0:w="R"+y;break;case 1:w= -"@R"+y;break;case 2:7>y?w="(R"+y+")+":(D=v.va(q,2),w="#"+r(D));break;case 3:7>y?w="@(R"+y+")+":(D=v.va(q,2),w="@#"+r(D));break;case 4:w="-(R"+y+")";break;case 5:w="@-R("+y+")";break;case 6:D=v.va(q,2);w=r(D)+(7>y?"(R"+y+")":"(PC)");break;case 7:D=v.va(q,2),w="@"+r(D)+(7>y?"(R"+y+")":"(PC)")}}v=w;if(!v||!v.length){g="INVALID";break}0>12&8;break;case "Z":d=a.f.u&65535?0:4;break;case "V":d=a.f.j&32768?2:0;break;case "C":d=a.f.C&65536?1:0;break;default:d=0}return b.charAt(0)+(d?"1":"0")+" "} -function Rd(a,b){var d="",c=a.f;8>b?d=(6>b?"R"+b:6==b?"SP":"PC")+("="+p(c.b[b],4)):13>b?d="A"+(b-8)+"="+p(c.Ya[b-8],4):16<=b&&20>b?d="S"+(b-16)+"="+p(c.Ba[b-16],4):20==b&&(d="PS="+p(Bc(c),4));d&&(d+=" ");return d}m.gb=function(a,b){return a[0]>b[0]?1:a[0]>>0;for(b=0;b>>0,g=f.Cb;if(e>=h&&ee;e++)f+=Rd(a,e);f=f+"\n"+(Rd(a,6)+Rd(a,7));f+=sd(a,"T")+sd(a,"N")+sd(a,"Z")+sd(a,"V")+sd(a,"C");a.g(f);d&&(a.O=X(c.b[7]),ld(a,p(a.O.D,4)))}}function Wd(a,b){b=pa(b);var d=b.match(/^(['"])(.*?)\1$/);d?a.g(d[2]):Tc(a,b,!0)} -function Xd(a,b,d){var c="t"!=b;d=Vc(a,d,null,!0)||1;var e=1==d?0:1;"tc"==b&&(e=d,d=1);Ia(d,function(){return nb(a,!0)&&a.Ja(e,c,!1)},function(){I(a.f);nb(a,!1)})} -function ld(a,b,d,c){if(b=Z(a,b,!0)){void 0===c&&(c=1);var e=256;if(void 0!==d){c=Z(a,d,!0);if(!c||c.Dg[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=rd(a,b,h,f);a.g(f);a.O=b;e-=b.D-k;d++}}} -function qd(a,b,d){var c=!0;try{b.length&&"end"!=b?d||a.g(">> "+b):(a.U&&(a.g("ended assemble at "+p(a.T.D,4)),a.O=a.T,a.U=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.ga=null;if(pb(a)&&0l||"z"ca.length&&(a.g("note: only "+ca.length+" available"),R=ca.length);L-=R;0>L&&(null==ca[ca.length-1].D?(R=L+R,L=0):L+=ca.length);var oc=[];"call"==yd&&(Ea=1E5,oc=["CALL"]);for(void 0!==xd&&a.g(R+" instructions earlier:");0=ca.length&&(L=0);a.Da=R;Ad++;Ea--}}Ad||(a.g("no "+zd+ -"history available"),a.Da=void 0)}else{var Bb=Z(a,aa);if(Bb){var Cb=0;qa&&("l"==qa.charAt(0)&&(qa=qa.substr(1)||qe),Cb=Vc(a,qa)>>>0,65536>4||1;se--&&0Gb?String.fromCharCode(Gb):".";Eb--}ra&&(ra+="\n");ra+=aa+" "+eb+(0==db?" "+qc: -"")}ra&&a.g(ra);a.sa=Bb}}}}break;case "e":if("else"==f[0])break;var Hb=1,Dd=255,Ed=a.Wa,Fd=a.cb;"ew"==f[0]&&(Hb=2,Dd=65535,Ed=a.va,Fd=a.xb);var Gd=Hb<<1,Hd=f[1];if(null==Hd)a.g("edit memory commands:"),a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var Ib=Z(a,Hd);if(Ib)for(var Jb=2;Jbuc;){for(var sa=null,we=256;65536>hb.D>>>0;){Jd.D=a.va(hb,2);if(null==hb.D||!we--)break;for(var xe=a,Kb=Jd,Kd=null,ib=Kb.D,Ld=ib,vc=1;6>=vc&&ib;vc++){if(2\nLicense: GPL version 3 or later ");this.g("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis ");for(b=0;bae){if(ce(c,this.N)){this.J=new J(this,"1.30.0","failsafe");ce(this.J)&&(ie(this,c),a=2,je(this.J));K(this.J,"timestamp",va());ke(this.J);var e=this.A&&!this.K;if(1==a||xa("Click OK to restore the previous PDP11js machine state, or CANCEL to reset the machine.")){if(d=ge(c)){var f=he(c,"code"),h=he(c,"data");f&&("ok"==f?ce(c,h):("error"==f&& -"no machine state"!=h?(this.ea("Error: "+h),"unable to verify user"==h&&(Ga("user",""),this.B=null)):this.g(f+": "+h),je(c),ce(c)?(d=ge(c),e=!0):d=!1))}e&&fe(this,d?c:null)}else 2==a&&c.clear()}else fe(this);delete this.N;delete this.O}e=ab(this.id);for(f=0;fa[1];a=a[2];this.Y=!0;this.w.Z=!0;var c=this.L.power;c&&(c.textContent="Shutdown");this.f&&(le(this,this.f,b,d,a),this.f.Ma());this.T&&(ie(this,b),b.clear());!d&&this.J&&(this.J.clear(),delete this.J);this.F=0}; -function ie(a,b){if(xa("There may be a problem with your PDP11js machine.\n\nTo help us diagnose it, click OK to send this PDP11js machine state to http://www.pcjs.org.")){var d=a.B||"",c=b.toString(),e={app:"PDP11js",ver:"1.30.0"};e.url=a.X;e.user=d;e.type="bug";e.data=c;wa("http://www.pcjs.org/api/v1/report",e,!0)}} -function Yd(a,b,d){var c,e="none";if(a.F)return null;a.F--;var f=new J(a,"1.30.0"),h=new J(a,"1.30.0","validate"),g=va();K(h,"timestamp",g);K(f,"timestamp",g);K(f,"version","1.30.0");K(f,"url",window?window.location.href:null);K(f,"browser",window?window.navigator.userAgent:"");a.f&&a.f.qa&&(d&&a.f.ca(),c=a.f.qa(b,d),"object"===typeof c&&K(f,a.f.id,c),d&&(a.f.w.Z=!1,!1===c&&(e=null)));for(var g=ab(a.id),k=0;kg.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);c?"}"==c.slice(-1)?(c=c.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+d+"$2"+(c?" parms='"+c+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDP11js$2"), -a=a.replace(/().*?(<\/xsl:variable>)/,"$1pdp11$2"));g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255/g.exec(a)){var e=c[2];b("Loading "+e+"...");wa(e,null,!0,function(f,h,g){if(g||!h)d(a,"unable to resolve XML reference: "+c[0]+" ("+g+")");else{if(f=c[3])if(g=h.match(new RegExp("<"+c[1]+"[^>]*>"))){for(var k=g[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{d(a,"missing <"+c[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/, -"");a=a.replace(c[0],h);De(a,b,d)}})}else d(a,null)} -function Ee(a,b,d,c){function e(a){if(void 0===g){var b=h&&E(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=na(a))}function f(a){e("Error: "+a);k&&(--pe||Ra(!0));k=!1}var h,g,k=!0;pe++;Za[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=l:q.appendChild(document.createTextNode(l));n.appendChild(q)}d|| -(d="/versions/pdp11/1.30.0/components.xsl");l=function(c,g){g?Be(d,null,null,!1,e,function(c,k){if(k)if($a(a,d,c),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--pe||Ra(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(l,h),--pe||Ra(!0)):f("invalid machine element: "+ -a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(c)}):f(c)};"<"!=b.charAt(0)?Be(b,a,c,!0,e,l):Ce(b,null,a,c,!1,e,l)}else f("missing machine element: "+a)}catch(v){f(v.message)}return k}window.embedPDP11=function(a,b,d,c){Ra(!1);return Ee(a,b,d,c)};window.enableEvents=Ra;window.sendEvent=Sa;})(); +63],35968:[7,63],36032:[5,63],36096:[66,63],36160:[59,63],36224:[64,63],36288:[61,63]},65528:{128:[76,7],152:[108,12288]},65535:{0:[55],1:[99],2:[75],3:[26],4:[109],5:[70],6:[110],7:[111],160:[69],161:[31],162:[41],163:[32],164:[45],165:[35],166:[43],167:[34],168:[37],169:[32],170:[42],171:[33],172:[46],173:[36],174:[44],175:[30],176:[69],177:[80],178:[88],179:[82],180:[92],181:[85],182:[90],183:[84],184:[87],185:[81],186:[89],187:[83],188:[93],189:[86],190:[91],191:[79]}};m=$c.prototype; +m.ya=function(a,b,d,c){this.H=b;this.f=d;this.w=a;(a=ec(a,"messages"))&&cd(this,a);this.Fa=fd;gd(this,function(a){a:{var b=c.H.P,d=a[0],g=a=0,k=b.length;if(d){a=Z(hd(c,d));if(-1===a){c.g("invalid address: "+d);break a}g=a>>>c.H.ba;k=1}c.g("blockid physical blockaddr used size type");c.g("-------- --------- ---------- ------ ------ ----");for(var d=-1,l=0;k--;){var n=b[g];n.type==d?l++||c.g("..."):(d=n.type,l=Ab[d],n&&c.g(q(n.id,8)+" %"+q(g<>>d.ba].Ta(c&d.H,c),b&&id(a,b));return d};m.ta=function(a,b){var d=65535,c=Z(a);-1!==c&&(d=Bb(this.H,c),b&&id(a,b));return d}; +m.eb=function(a,b,d){var c=Z(a);if(-1!==c){var e=this.H;e.P[(c&e.w)>>>e.ba].La(c&e.H,b&255,c);d&&id(a,d);I(this.f,!0)}};m.xb=function(a,b,d){var c=Z(a);if(-1!==c){var e=this.H,f=c&e.H,h=(c&e.w)>>>e.ba;f!=e.H?e.P[h].wb(f,b&65535,c):(e.P[h++].La(f,b&255,c),e.P[h&e.K].La(0,b>>8&255,c+1));d&&id(a,d);I(this.f,!0)}};function Y(a){return{D:a,oa:!1}}function jd(a){return[a.D,a.oa]}function kd(a){return{D:a[0],oa:a[1]}} +function hd(a,b,d){var c;d=(d?a.O:a.ua).D;if(void 0!==b){c=b=Wc(a,b);var e;if(c.match(/^[a-z_][a-z0-9_]*$/i))for(c=c.toUpperCase(),d=0;de&&(e+=d.length);0>e&&(e=0);for(var f=d.length;e>>c.ba],!1)}a.R=["br"];if(void 0!==a.J)for(b=1;b>>c.ba],!0);a.J=["bw"];a.Da=0} +m.wa=function(a,b,d){var c=!0;d||qd(this,a,b,!1,!0);if(a!=this.B){var e=Z(b);if(-1===e)this.g("invalid address: "+X(this,b.D)),c=!1;else{var f=this.H;f.P[e>>>f.ba].wa(e&f.H,a==this.J)}}c&&(a.push(b),d?b.oa=!0:(rd(this,a,a.length-1,"set"),bd(this)));return c};function qd(a,b,d,c,e){var f=!1;d=Z(d);for(var h=1;h>>c.ba],b==a.J));g.oa||bd(a);break}}return f} +function sd(a,b){for(var d=1;d>24,r=p.D+r&65535,x=t(r);else if(8192==r)r=(f&63)<<1,r=p.D-r&65535,x=t(r);else if(12288==r)r=f&7,x=q(r,2,!0);else if(24576==r)r=f&63,x=q(r,2,!0);else if(r=f&E,E&4032&&(r>>=6,E>>=6),E&63){var E=void 0,z=r&7;switch(r&56){case 0:x="R"+z;break;case 1:x= +"@R"+z;break;case 2:7>z?x="(R"+z+")+":(E=v.ta(p,2),x="#"+t(E));break;case 3:7>z?x="@(R"+z+")+":(E=v.ta(p,2),x="@#"+t(E));break;case 4:x="-(R"+z+")";break;case 5:x="@-R("+z+")";break;case 6:E=v.ta(p,2);x=t(E)+(7>z?"(R"+z+")":"(PC)");break;case 7:E=v.ta(p,2),x="@"+t(E)+(7>z?"(R"+z+")":"(PC)")}}v=x;if(!v||!v.length){g="INVALID";break}0>12&8;break;case "Z":d=a.f.u&65535?0:4;break;case "V":d=a.f.j&32768?2:0;break;case "C":d=a.f.C&65536?1:0;break;default:d=0}return b.charAt(0)+(d?"1":"0")+" "} +function Ud(a,b){var d="",c=a.f;8>b?d=(6>b?"R"+b:6==b?"SP":"PC")+("="+X(a,c.b[b])):13>b?d="A"+(b-8)+"="+X(a,c.Ya[b-8]):16<=b&&20>b?d="S"+(b-16)+"="+X(a,c.Ba[b-16]):20==b&&(d="PS="+X(a,Dc(c)));d&&(d+=" ");return d}m.hb=function(a,b){return a[0]>b[0]?1:a[0]>>0;for(b=0;b>>0,g=f.Cb;if(e>=h&&ee;e++)f+=Ud(a,e);f=f+"\n"+(Ud(a,6)+Ud(a,7));f+=vd(a,"T")+vd(a,"N")+vd(a,"Z")+vd(a,"V")+vd(a,"C");a.g(f);d&&(a.O=Y(c.b[7]),od(a,X(a,a.O.D)))}}function Zd(a,b){b=qa(b);var d=b.match(/^(['"])(.*?)\1$/);d?a.g(d[2]):Vc(a,b,!0)} +function $d(a,b,d){var c="t"!=b;d=Xc(a,d,null,!0)||1;var e=1==d?0:1;"tc"==b&&(e=d,d=1);Ja(d,function(){return pb(a,!0)&&a.Ka(e,c,!1)},function(){I(a.f);pb(a,!1)})} +function od(a,b,d,c){if(b=hd(a,b,!0)){void 0===c&&(c=1);var e=256;if(void 0!==d){c=hd(a,d,!0);if(!c||c.Dg[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=ud(a,b,h,f);a.g(f);a.O=b;e-=b.D-k;d++}}} +function td(a,b,d){var c=!0;try{b.length&&"end"!=b?d||a.g(">> "+b):(a.U&&(a.g("ended assemble at "+X(a,a.T.D)),a.O=a.T,a.U=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.ga=null;if(rb(a)&&0l||"z"da.length&&(a.g("note: only "+da.length+" available"),R=da.length);M-=R;0>M&&(null==da[da.length-1].D?(R=M+R,M=0):M+=da.length);var qc=[];"call"==Bd&&(Fa=1E5,qc=["CALL"]);for(void 0!==Ad&&a.g(R+" instructions earlier:");0=da.length&&(M= +0);a.Ea=R;Dd++;Fa--}}Dd||(a.g("no "+Cd+"history available"),a.Ea=void 0)}else{var Db=hd(a,ba);if(Db){var Eb=0;ra&&("l"==ra.charAt(0)&&(ra=ra.substr(1)||te),Eb=Xc(a,ra)>>>0,65536>4||1;ve--&&0Ib?String.fromCharCode(Ib):".";Gb--}sa&& +(sa+="\n");sa+=ba+" "+fb+(0==eb?" "+sc:"")}sa&&a.g(sa);a.ua=Db}}}}break;case "e":if("else"==f[0])break;var Jb=1,Gd=255,Hd=a.Za,Id=a.eb;"ew"==f[0]&&(Jb=2,Gd=65535,Hd=a.ta,Id=a.xb);var Jd=Jb<<1,Kd=f[1];if(null==Kd)a.g("edit memory commands:"),a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var Kb=hd(a,Kd);if(Kb)for(var Lb=2;Lbwc;){for(var ta=null,ze=256;65536>ib.D>>>0;){Md.D=a.ta(ib,2);if(null==ib.D||!ze--)break;for(var Ae=a,Mb=Md,Nd=null,jb=Mb.D,Od=jb,xc=1;6>=xc&&jb;xc++){if(2\nLicense: GPL version 3 or later ");this.g("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis ");for(b=0;bde){if(fe(c,this.N)){this.J=new J(this,"1.30.0","failsafe");fe(this.J)&&(le(this,c),a=2,me(this.J));K(this.J,"timestamp",wa());ne(this.J);var e=this.w&&!this.K;if(1==a||ya("Click OK to restore the previous PDP11js machine state, or CANCEL to reset the machine.")){if(d=je(c)){var f=ke(c,"code"),h=ke(c,"data");f&&("ok"==f?fe(c,h):("error"==f&& +"no machine state"!=h?(this.ea("Error: "+h),"unable to verify user"==h&&(Ha("user",""),this.B=null)):this.g(f+": "+h),me(c),fe(c)?(d=je(c),e=!0):d=!1))}e&&ie(this,d?c:null)}else 2==a&&c.clear()}else ie(this);delete this.N;delete this.O}e=bb(this.id);for(f=0;fa[1];a=a[2];this.Y=!0;this.A.Z=!0;var c=this.L.power;c&&(c.textContent="Shutdown");this.f&&(oe(this,this.f,b,d,a),this.f.Na());this.T&&(le(this,b),b.clear());!d&&this.J&&(this.J.clear(),delete this.J);this.F=0}; +function le(a,b){if(ya("There may be a problem with your PDP11js machine.\n\nTo help us diagnose it, click OK to send this PDP11js machine state to http://www.pcjs.org.")){var d=a.B||"",c=b.toString(),e={app:"PDP11js",ver:"1.30.0"};e.url=a.X;e.user=d;e.type="bug";e.data=c;xa("http://www.pcjs.org/api/v1/report",e,!0)}} +function ae(a,b,d){var c,e="none";if(a.F)return null;a.F--;var f=new J(a,"1.30.0"),h=new J(a,"1.30.0","validate"),g=wa();K(h,"timestamp",g);K(f,"timestamp",g);K(f,"version","1.30.0");K(f,"url",window?window.location.href:null);K(f,"browser",window?window.navigator.userAgent:"");a.f&&a.f.ra&&(d&&a.f.ca(),c=a.f.ra(b,d),"object"===typeof c&&K(f,a.f.id,c),d&&(a.f.A.Z=!1,!1===c&&(e=null)));for(var g=bb(a.id),k=0;kg.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);c?"}"==c.slice(-1)?(c=c.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+d+"$2"+(c?" parms='"+c+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDP11js$2"), +a=a.replace(/().*?(<\/xsl:variable>)/,"$1pdp11$2"));g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(p){g=null,a=p.message}else a="unrecognized XML: "+(255/g.exec(a)){var e=c[2];b("Loading "+e+"...");xa(e,null,!0,function(f,h,g){if(g||!h)d(a,"unable to resolve XML reference: "+c[0]+" ("+g+")");else{if(f=c[3])if(g=h.match(new RegExp("<"+c[1]+"[^>]*>"))){for(var k=g[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{d(a,"missing <"+c[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/, +"");a=a.replace(c[0],h);Ge(a,b,d)}})}else d(a,null)} +function He(a,b,d,c){function e(a){if(void 0===g){var b=h&&D(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=oa(a))}function f(a){e("Error: "+a);k&&(--se||Sa(!0));k=!1}var h,g,k=!0;se++;$a[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],p=document.createElement("style");p.type="text/css";p.styleSheet?p.styleSheet.cssText=l:p.appendChild(document.createTextNode(l));n.appendChild(p)}d|| +(d="/versions/pdp11/1.30.0/components.xsl");l=function(c,g){g?Ee(d,null,null,!1,e,function(c,k){if(k)if(ab(a,d,c),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--se||Sa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(l,h),--se||Sa(!0)):f("invalid machine element: "+ +a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(c)}):f(c)};"<"!=b.charAt(0)?Ee(b,a,c,!0,e,l):Fe(b,null,a,c,!1,e,l)}else f("missing machine element: "+a)}catch(v){f(v.message)}return k}window.embedPDP11=function(a,b,d,c){Sa(!1);return He(a,b,d,c)};window.enableEvents=Sa;window.sendEvent=Ta;})(); diff --git a/versions/pdp11/1.30.0/pdp11.js b/versions/pdp11/1.30.0/pdp11.js index c84c97807..d65efed91 100644 --- a/versions/pdp11/1.30.0/pdp11.js +++ b/versions/pdp11/1.30.0/pdp11.js @@ -19,7 +19,7 @@ this.w=function(a){this.H(a,this.ta)}),!0;default:return!1}},log:function(){},H: function Ea(a,b){b&&(a.h.ready?b():a.qa=b);return a.h.ready}var Fa="undefined"!==typeof ArrayBuffer;function Ga(a){w.call(this,"Panel",a,Ga)}y(Ga);m=Ga.prototype;m.L=function(a,b,c,d){return this.l&&this.l.L(a,b,c,d)||this.a&&this.a.L(a,b,c,d)?!0:this.parent.L.call(this,a,b,c,d)};m.ea=function(a,b,c,d){this.l=a;this.u=b;this.a=c;this.B=d};m.Y=function(a,b){b||Ha();return!0};m.X=function(){return!0};m.da=function(){}; function Ha(){for(var a=!1,b=D(document,"pdp11","panel"),c=0;c=this.g?10:20>=this.g?12:24>=this.g?14:15;this.c=1<>2;this.m=this.c-1;this.i=this.j/this.c|0;a=new F;Ja(a,this.B);this.b=Array(this.i);for(b=0;b>>a.f;0e&&(l=e);if(g&&g.size){if(g.type==d){if(f+e<=g.fa)return g.ra+=g.fa-f,g.fa=f,!0;if(f>=g.fa+g.ra){l=g.size-(f-k);l>e&&(l=e);g.ra=f-g.fa+l;f=k+a.c;e-=l;h++;continue}}return La(1,f,e)}f=new F(f,l,a.c,d);Ja(f,a.B,g);a.b[h++]=f;f=k+a.c;e-=l}return 0>=e?(a.status(Math.floor(c/1024)+"Kb "+Ma[d]+" at "+n(b,4,!0)),!0):La(2,b,c)} +function Ka(a,b,c,d){for(var f=b,e=c,h=f>>>a.f;0e&&(l=e);if(g&&g.size){if(g.type==d){if(f+e<=g.fa)return g.ra+=g.fa-f,g.fa=f,!0;if(f>=g.fa+g.ra){l=g.size-(f-k);l>e&&(l=e);g.ra=f-g.fa+l;f=k+a.c;e-=l;h++;continue}}return La(1,f,e)}f=new F(f,l,a.c,d);Ja(f,a.B,g);a.b[h++]=f;f=k+a.c;e-=l}return 0>=e?(a.status(Math.floor(c/1024)+"Kb "+Ma[d]+" at "+n(b,8,!0)),!0):La(2,b,c)} function La(a,b,c){t("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Na;if(Fa){var Oa=new ArrayBuffer(2);(new DataView(Oa)).setUint16(0,256,!0);Na=256===(new Uint16Array(Oa))[0]}else Na=!1;var Pa=Na; function F(a,b,c,d){this.id=Qa+=2;this.a=null;this.fa=a;this.ra=b;this.size=c||0;this.type=d||Ra;this.o=d==Sa;Ja(this);this.W=this.Wa=!1;if(c)if(Fa)this.c=new ArrayBuffer(c),this.f=new DataView(this.c,0,c),this.b=new Uint8Array(this.c,0,c),this.j=new Uint16Array(this.c,0,c>>1),this.a=new Int32Array(this.c,0,c>>2),Ta(this,Pa?Ua:Va);else{this.a=Array(c>>2);for(a=0;a>2),b=0;b>8,c)},G:function(a){return this.a[a>> @@ -36,22 +36,22 @@ m.Ea=function(){if(Da(this,!0)){if(!this.h.M){hb(this);this.l&&this.l.start(this 1;0<=e;e--){var h=this.ka[e];0>h[0]||(h[0]-=a,0>=h[0]&&(h[0]=-1,h[1]()))}this.ca+=f;this.F+=f;ib(this,0,!0);a=f;if(this.h.pa){var g=!1;this.na=this.na+this.Ia()|0;this.S-=a;0>=this.S&&(this.S+=this.$,g=!0);0<=this.aa&&this.aa<=kb(this)&&(this.$=this.aa=-1,eb(this),G(this),g=!0);g&&this.H(kb(this)+" cycles: checksum="+n(this.na))}this.ba-=f;if(0>=this.ba){this.ba+=this.ja;15<=++this.Qa&&(this.l&&this.l.da(),this.Qa=0);break}}while(this.h.M)}catch(k){G(this);fb(this);this.l&&this.l.stop(q(),kb(this)); Da(this,!1);b=k.stack||k.message;this.h.error=!0;this.w(b);return}b=setTimeout;c=this.Za;this.J=q();d=this.Pa;this.ca&&(d=Math.round(d*this.ca/this.ja));d=d-(this.J-this.ma);if(f=this.J-this.D)this.I=Math.round(this.F/(10*f))/100,864E5<=f&&(this.N=0,hb(this));if(0>d||this.Id&&(this.D-=d),d=0;this.Ba+=this.ca;this.J+=d;b(c,d)}else fb(this),this.l&&this.l.stop(q(),kb(this))};m.Ta=function(){return 0}; function G(a){a.h.ha&&(a.h.ua=!0);lb(a);ib(a,a.F);a.F=0;if(a.h.M){a.h.M=!1;a.Z&&a.Z.stop();var b=a.o.run;b&&(b.textContent="Run")}a.h.complete=void 0}function fb(a){a.l&&a.l.da(void 0)} -function mb(a){this.Ya=+a.model||1170;ab.call(this,a,1E6);this.Ja=0;this.g=65536;this.c=this.b=32768;this.f=65535;this.i=15;this.a=[0,0,0,0,0,0,0,0];this.Ca=[0,0,0,0,0,0];this.U=[0,0,0,0];this.memory=[];this.s=[];this.Da=this.Ra=0;this.O=2;this.P=255;this.m=0;this.V=-1;this.Oa=this.xa=this.Na=this.j=this.sa=this.C=this.v=0;this.la=[7,7,7,7];this.za=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535, -65535,65535,65535,65535,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];this.ab=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h.complete=this.h.Va=!1}y(mb,ab);m=mb.prototype;m.reset=function(){this.h.M&&G(this);nb(this);db(this);this.h.error=!1;this.parent.reset.call(this)}; -function nb(a){a.P=255;a.s=[];a.Ra=0;a.v=a.C=a.sa=a.Na=0;a.la[0]=a.la[1]=a.la[3]=7;a.xa=0}m.Ia=function(){return 0};m.save=function(){var a=new H(this);I(a,0,[]);I(a,1,[this.Ma,this.N,this.T]);for(var b=this.u,c=0,d=[],f=0;f>12&8|(this.f&65535?0:4)|(this.c&32768?2:0)|(this.g&65536?1:0),gb(this,"PSW",a,4),gb(this,"NF",a&8?1:0,1),gb(this,"ZF",a&4?1:0,1),gb(this,"VF",a&2?1:0,1),gb(this,"CF",a&1?1:0,1));if(a=this.o.speed)a.textContent=this.h.M&&this.I?this.I.toFixed(2)+"Mhz":"Stopped"}; function ob(a,b){a.b=b<<12;a.f=~b&4;a.c=b<<14;a.g=b<<16;if((b^a.i)&2048)for(var c=a.Ca.length;0<=--c;){var d=a.a[c];a.a[c]=a.Ca[c];a.Ca[c]=d}a.j=b>>14&3;c=a.i>>14&3;a.j!=c&&(a.U[c]=a.a[6],a.a[6]=a.U[a.j]);a.O=2;a.i=b} function J(a,b){var c,d,f=0;0>a.V?a.V=a.i=a.i&63728|a.b>>12&8|(a.f&65535?0:4)|(a.c&32768?2:0)|(a.g&65536?1:0):a.j||(b=4,f=1);a.v&57344||(a.C=63222);a.j=0;0<=(c=K(a,b|65536))&&0<=(d=K(a,b+2&65535|65536))&&(ob(a,d&53247|a.V>>2&12288),f&&(a.a[6]=4),0<=L(a,a.V)&&0<=L(a,a.a[7])&&(a.a[7]=c));a.m=0;return a.V=-1} -function pb(a,b,c){var d,f,e,h=0;if(c&a.Na){d=b>>13&a.la[a.j];f=a.za[a.j][d];e=(a.za[a.j][d+16]<<6)+(b&8191)&4194303;if(a.sa&16){if(3932160<=e&&4186112>e){e=e&262143;var g=e>>13&31;31>g?a.sa&32&&(e=a.ab[g]+(e&8190)&4194302,3932160<=e&&4186112>e&&console.log("panic(898)")):e|=4186112}}else e&=262143,253952<=e&&(e|=4186112);if(3932160>e&&(3915776<=e||e&1&&!(c&1)))return J(a,4);switch(f&7){case 1:h=4096;case 2:f|=128;c&4&&(h=8192);break;case 4:h=4096;case 5:c&4&&(h=4096);case 6:f|=c&4?192:128;break; +function pb(a,b,c){var d,f,e,h=0;if(c&a.Na){d=b>>13&a.la[a.j];f=a.za[a.j][d];e=(a.za[a.j][d+16]<<6)+(b&8191)&4194303;if(a.sa&16){if(3932160<=e&&4186112>e){e=e&262143;var g=e>>13&31;31>g?a.sa&32&&(e=a.bb[g]+(e&8190)&4194302,3932160<=e&&4186112>e&&console.log("panic(898)")):e|=4186112}}else e&=262143,253952<=e&&(e|=4186112);if(3932160>e&&(3915776<=e||e&1&&!(c&1)))return J(a,4);switch(f&7){case 1:h=4096;case 2:f|=128;c&4&&(h=8192);break;case 4:h=4096;case 5:c&4&&(h=4096);case 6:f|=c&4?192:128;break; default:h=32768}32512!==(f&32520)&&(f&8?f&32512&&(b&8128)<(f>>2&8128)&&(h|=16384):(b&8128)>(f>>2&8128)&&(h|=16384));a.za[a.j][d]=f;if(4194170!==e||a.j)a.xa=a.j,a.Oa=d;if(h){if(h&57344)return 0<=a.V&&(h|=128),a.v&57344||(a.v=a.v|h|a.xa<<5|a.Oa<<1),J(a,168);a.v&61440||!(4191360>e||4194239>1]:b} function N(a,b,c){c&=65535;return 4194304<=b?a.a[b-4194304]=c:3932160<=b?-1:0<=b?a.memory[b>>1]=c:b}function O(a,b){var c;return 4194304<=b?a.a[b-4194304]&255:3932160<=b?-1:0<=b?(c=a.memory[b>>1],b&1&&(c=c>>8),c&255):b}function P(a,b,c){c&=255;return 4194304<=b?a.a[b-4194304]=a.a[b-4194304]&65280|c:3932160<=b?-1:0<=b?b&1?a.memory[b>>1]=c<<8|a.memory[b>>1]&255:a.memory[b>>1]=a.memory[b>>1]&65280|c:b}function K(a,b){return M(a,pb(a,b,2))} function qb(a){var b=K(a,a.a[6]|65536);0<=b&&(a.a[6]=a.a[6]+2&65535);return b}function L(a,b){var c,d;a.a[6]=d=a.a[6]-2&65535;a.v&57344||(a.C=a.C<<8|246);if(!a.j&&d<=a.P&&4>3&7){case 0:return J(a,4);case 1:if(6===e&&!a.j&&c&4&&(a.a[6]<=a.P||65534<=a.a[6])){if(a.a[6]<=a.P-32||65534<=a.a[6])return a.a[6]=4,J(a,4);a.m|=4}return 7===e?a.a[e]:a.a[e]|65536;case 2:f=2;d=a.a[e];7!==e&&(d|=65536,6>e&&c&1&&(f=1));break;case 3:f=2;d=a.a[e];7!==e&&(d|=65536);if(0>(d=K(a,d)))return d;d|=65536;break;case 4:f=-2;6>e&&c&1&&(f=-1);d=a.a[e]+f&65535;7!==e&&(d|=65536);break;case 5:f=-2;d=a.a[e]-2&65535;7!==e&&(d|=65536);if(0>(d=K(a,d)))return d; d|=65536;break;case 6:if(0>(d=K(a,a.a[7])))return d;a.a[7]=a.a[7]+2&65535;d=d+a.a[e]&65535;return d|65536;case 7:if(0>(d=K(a,a.a[7])))return d;a.a[7]=a.a[7]+2&65535;d=d+a.a[e]&65535;return 0>(d=K(a,d|65536))?d:d|65536}a.a[e]=a.a[e]+f&65535;a.v&57344||(a.C=a.C<<8|f<<3&248|e);if(6===e&&!a.j&&c&4&&0>=f&&(a.a[6]<=a.P||65534<=a.a[6])){if(a.a[6]<=a.P-32)return a.a[6]=4,J(a,4);a.m|=4}return d}function S(a,b,c){var d;return b&56?(0<=(d=R(a,b,c))&&(d=pb(a,d,c)),d):4194304+(b&7)} function T(a,b){var c;b&56?0<=(c=S(a,b,2))&&(c=M(a,c)):c=a.a[b&7];return c}function U(a,b){var c;b&56?0<=(c=S(a,b,3))&&(c=O(a,c)):c=a.a[b&7]&255;return c}function V(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} -m.Ta=function(a){this.h.complete=!0;this.h.Va=!1;this.h.Sa=!1;this.K=this.G=a;this.Ma&256?(lb(this),a=!1):a=!0;if(a){do{var b,c,d,f,e;if(this.O)if(1===this.O)this.O=2;else{this.O=0;e=-1;b=this.Ra&224;if(0<(a=this.s.length))for(;0b&&(b=this.s[a].Xa,e=a)}b>(this.i&224)&&(0>e?J(this,160):(J(this,this.s[e].bb),this.s.splice(e,1)))}this.v&57344||(this.C= +m.Ta=function(a){this.h.complete=!0;this.h.Va=!1;this.h.Sa=!1;this.K=this.G=a;this.Ma&256?(lb(this),a=!1):a=!0;if(a){do{var b,c,d,f,e;if(this.O)if(1===this.O)this.O=2;else{this.O=0;e=-1;b=this.Ra&224;if(0<(a=this.s.length))for(;0b&&(b=this.s[a].Xa,e=a)}b>(this.i&224)&&(0>e?J(this,160):(J(this,this.s[e].cb),this.s.splice(e,1)))}this.v&57344||(this.C= 0);this.m=this.i&16;if(0<=(a=K(this,this.a[7])))switch(this.a[7]=this.a[7]+2&65535,a&61440){case 4096:0<=(b=T(this,a>>6))&&(a&56?0<=(d=S(this,a,4))&&0<=N(this,d,b)&&(this.b=this.f=b,this.c=0):(this.b=this.f=this.a[a&7]=b,this.c=0));break;case 8192:0<=(b=T(this,a>>6))&&0<=(c=T(this,a))&&(this.b=this.f=this.g=a=b-c,this.c=(b^c)&(b^a));break;case 12288:0<=(b=T(this,a>>6))&&0<=(c=T(this,a))&&(this.b=this.f=b&c,this.c=0);break;case 16384:0<=(b=T(this,a>>6))&&(a&56?0<=(c=M(this,d=S(this,a,6)))&&(a=c&~b, 0<=N(this,d,a)&&(this.b=this.f=a,this.c=0)):(this.b=this.f=a=this.a[a&7]&=~b,this.c=0));break;case 20480:0<=(b=T(this,a>>6))&&(a&56?0<=(c=M(this,d=S(this,a,6)))&&(a=c|b,0<=N(this,d,a)&&(this.b=this.f=a,this.c=0)):(this.b=this.f=a=this.a[a&7]|=b,this.c=0));break;case 24576:0<=(b=T(this,a>>6))&&(a&56?0<=(c=M(this,d=S(this,a,6)))&&(a=b+c,0<=N(this,d,a)&&(this.b=this.f=this.g=a,this.c=(b^a)&(c^a))):(e=a&7,c=this.a[e],this.a[e]=(a=b+c)&65535,this.b=this.f=this.g=a,this.c=(b^a)&(c^a)));break;case 36864:0<= (b=U(this,a>>6))&&(a&56?0<=(d=S(this,a,5))&&0<=P(this,d,b)&&(this.b=this.f=b<<8,this.c=0):(b&128&&(b|=65280),this.b=this.f=this.a[a&7]=b,this.c=0));break;case 40960:0<=(b=U(this,a>>6))&&0<=(c=U(this,a))&&(a=b-c,this.b=this.f=this.g=a<<8,this.c=((b^c)&(b^a))<<8);break;case 45056:0<=(b=U(this,a>>6))&&0<=(c=U(this,a))&&(this.b=this.f=(b&c)<<8,this.c=0);break;case 49152:0<=(b=U(this,a>>6))&&0<=(c=O(this,d=S(this,a,7)))&&(a=c&~b,0<=P(this,d,a)&&(this.b=this.f=a<<8,this.c=0));break;case 53248:0<=(b=U(this, @@ -76,8 +76,8 @@ this.a[7].toString(8)));break;case 1:e=0;if(0<(a=this.s.length))for(;0>8&255,a.b[d++]=h[c]>>16&255,a.b[d++]=h[c]>>24&255;else a.b=f;a.i=f.symbols;if(!a.b.length){t("Empty ROM: "+b);return}if(1==a.b.length){t(a.b[0]);return}}catch(g){a.w("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm, -" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),f=0;f>8&255;else if(e=g.data)for(a.b=Array(4*e.length),h=f=0;f>8&255,a.b[h++]=e[f]>>16&255,a.b[h++]=e[f]>>24&255;else a.b=g;a.i=g.symbols;if(!a.b.length){t("Empty ROM: "+b); +return}if(1==a.b.length){t(a.b[0]);return}}catch(k){a.w("ROM data error: "+k.message);return}else for(b=c.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.b=Array(b.length),f=0;f>>d.f].Ua(f&d.m,a.b[c]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(c=0;c>>f.f;0>>=f.f;0