diff --git a/Gruntfile.js b/Gruntfile.js index 05d2b76446..6dcbdf8c38 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -525,7 +525,7 @@ module.exports = function(grunt) { options: { process: function(content, srcPath) { var s = content.replace(/()[^<]*(<\/xsl:variable>)/g, "$1pdp11$2"); - s = s.replace(/()[^<]*(<\/xsl:variable>)/g, "$1PDP11$2"); + s = s.replace(/()[^<]*(<\/xsl:variable>)/g, "$1PDPjs$2"); s = s.replace(/()[^<]*(<\/xsl:variable>)/g, "$1" + pkg.version + "$2"); s = s.replace(/"[^"]*\/?(common.css|common.xsl|components.css|components.xsl|document.css|document.xsl)"/g, '"/versions/pdpjs/' + pkg.version + '/$1"'); s = s.replace(/[ \t]*\/\*[^*][\s\S]*?\*\//g, "").replace(/[ \t]*[ \t]*\n?/g, ""); diff --git a/README.md b/README.md index b1a8a6510b..0b8db57f95 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ includes: * [PCx86](/docs/pcx86/), an x86-based IBM PC and PC-compatible emulator * [PC8080](/modules/pc8080/), an 8080 machine emulator (e.g., [Space Invaders](/devices/pc8080/machine/invaders/), [VT100 Terminal](/devices/pc8080/machine/vt100/)) * [C1Pjs](/docs/c1pjs/), an emulation of the 6502-based Ohio Scientific [Challenger 1P](/devices/c1p/) -* [PDPjs](/modules/pdp11/), a PDP-11 machine emulator currently in development (e.g., [PDP-11/70](/devices/pdp11/machine/1170/)) +* [PDPjs](/modules/pdp11/), a PDP-11 machine emulator currently in development (e.g., [PDP-11/20 and PDP-11/70](/devices/pdp11/machine/)) All PCjs computer simulations are written entirely in [JavaScript](/modules/). No Flash, Java or other plugins are required. Supported browsers include modern versions of Chrome, Safari, Firefox, Internet Explorer (v9.0 and up), Edge, diff --git a/apps/README.md b/apps/README.md index 8ff75e04d7..d59631c2d4 100644 --- a/apps/README.md +++ b/apps/README.md @@ -1,15 +1,17 @@ --- layout: page -title: Application Archives +title: Software Archives permalink: /apps/ --- -Application Archives ---- -Browse these PCjs Application Archives: +Software Archives +----------------- + +Browse these PCjs Software Archives: - [IBM PC](pcx86/) - [Challenger 1P](c1p/) +- [PDP-11](pdp11/) --- diff --git a/apps/c1p/README.md b/apps/c1p/README.md index 57f83f566c..1ec0f2c3bc 100644 --- a/apps/c1p/README.md +++ b/apps/c1p/README.md @@ -12,7 +12,7 @@ Challenger 1P Applications - [BASIC](BASIC/) - [6502 Machine-Language](6502/) -To make it easy for our machines to load our applications, we provide the following **Serial** configuration files: +To make it easy for our C1Pjs machines to load these applications, we provide the following **Serial** configuration files: - [all.xml](all.xml) - [samples.xml](samples.xml) diff --git a/apps/c1p/all.xml b/apps/c1p/all.xml index 12a8067174..c48efa11b5 100644 --- a/apps/c1p/all.xml +++ b/apps/c1p/all.xml @@ -1,5 +1,5 @@ - + 6502 4K Assembler (JP) 6502 8K Assembler (JP) diff --git a/apps/c1p/samples.xml b/apps/c1p/samples.xml index 70d76a9df9..8f0fec3388 100644 --- a/apps/c1p/samples.xml +++ b/apps/c1p/samples.xml @@ -1,5 +1,5 @@ - + BASIC MATH CHECKING diff --git a/apps/pdp11/README.md b/apps/pdp11/README.md new file mode 100644 index 0000000000..b380080213 --- /dev/null +++ b/apps/pdp11/README.md @@ -0,0 +1,13 @@ +--- +layout: page +title: PDP-11 Software +permalink: /apps/pdp11/ +--- + +PDP-11 Software +--------------- + +We have archived the following selected PDP-11 software: + +- [Boot Code](boot/) +- [DEC PDP-11 Tapes](tapes/) diff --git a/apps/pdp11/boot/README.md b/apps/pdp11/boot/README.md new file mode 100644 index 0000000000..5ab057babb --- /dev/null +++ b/apps/pdp11/boot/README.md @@ -0,0 +1,24 @@ +--- +layout: page +title: PDP-11 Boot Code +permalink: /apps/pdp11/boot/ +--- + +PDP-11 Boot Code +---------------- + +The project contains the following PDP-11 boot code images: + +* [PDP-11 Boot Test](test/) +* [DEC PDP-11 Bootstrap Loader](bootstrap/) + +Boot code can be pre-loaded into any machine by including a `` component in the machine XML configuration file +with the *file* attribute set to the filename of the image, along with optional *load* and *exec* addresses; eg: + +```xml + +``` + +If no *load* address is specified, the `` component relies on the "load" property of the JSON-encoded RAM image; +otherwise, the starting RAM address is used. If no *exec* address is specified, the CPU will begin execution at its usual +reset address. diff --git a/devices/pdp11/loader/bootstrap.json b/apps/pdp11/boot/bootstrap/BOOTSTRAP-16KB.json similarity index 86% rename from devices/pdp11/loader/bootstrap.json rename to apps/pdp11/boot/bootstrap/BOOTSTRAP-16KB.json index edc54ec3eb..0120e2f27d 100644 --- a/devices/pdp11/loader/bootstrap.json +++ b/apps/pdp11/boot/bootstrap/BOOTSTRAP-16KB.json @@ -1,4 +1,4 @@ -{"words":[ +{"load":0x3FE4,"exec":0x3FE4,"words":[ 0x1DC1 /*016701*/,0x0016 /*000026*/,0x15C2 /*012702*/,0x00EA /*000352*/,0x0A89 /*005211*/,0x8BC9 /*105711*/,0x80FE /*100376*/,0x9C72 /*116162*/, 0x0002 /*000002*/,0x3F00 /*037400*/,0x0AB7 /*005267*/,0xFFEE /*177756*/,0x01F5 /*000765*/,0xFF68 /*177550*/] -} \ No newline at end of file +} diff --git a/devices/pdp11/loader/bootstrap.lst b/apps/pdp11/boot/bootstrap/BOOTSTRAP-16KB.lst similarity index 100% rename from devices/pdp11/loader/bootstrap.lst rename to apps/pdp11/boot/bootstrap/BOOTSTRAP-16KB.lst diff --git a/apps/pdp11/boot/bootstrap/README.md b/apps/pdp11/boot/bootstrap/README.md new file mode 100644 index 0000000000..8b1b8da0e9 --- /dev/null +++ b/apps/pdp11/boot/bootstrap/README.md @@ -0,0 +1,83 @@ +--- +layout: page +title: DEC PDP-11 Bootstrap Loader +permalink: /apps/pdp11/boot/bootstrap/ +--- + +DEC PDP-11 Bootstrap Loader +--------------------------- + +The **Bootstrap Loader** is a small program that loads the **[Absolute Loader](/apps/pdp11/tapes/absloader/)**, +which is then used to load other PDP-11 tapes, such as **[BASIC (Single User)](/apps/pdp11/tabes/basic/)**. + +Here's what the **Bootstrap Loader** looks like: + + Location Instruction + 037744 016701 + 037746 000026 + 037750 012702 + 037752 000352 + 037754 005211 + 037756 105711 + 037760 100376 + 037762 116162 + 037764 000002 + 037766 037400 + 037770 005267 + 037772 177756 + 037774 000765 + 037776 177550 + +Using any [PDPjs](/modules/pdpjs/) machine with the built-in Debugger, such as this +[PDP-11/20 Test Machine with Debugger](/devices/pdp11/machine/1120/test/debugger/), the **Bootstrap Loader** +is easily entered with a single Debugger EDIT ("e") command: + + e 037744 016701 000026 012702 000352 005211 105711 100376 116162 000002 037400 005267 177756 000765 177550 + +You can immediately disassemble the code using the Debugger's UNASSEMBLE ("u") command `u 037744 040000`: + + 037744: 016701 000026 MOV 26(PC),R1 ; @037776 + 037750: 012702 000352 MOV #352,R2 + 037754: 005211 INC @R1 + 037756: 105711 TSTB @R1 + 037760: 100376 BPL 037756 + 037762: 116162 000002 037400 MOVB 2(R1),37400(R2) + 037770: 005267 177756 INC 177756(PC) ; @037752 + 037774: 000765 BR 037750 + 037776: 177550 .WORD 177550 + +To run the above code, set the PC to 037744 and start the machine: + + r pc=037744 + g + +Pre-loading DEC's Bootstrap Loader +---------------------------------- + +I pasted the disassembled code (above) into a listing file, [BOOTSTRAP-16KB.lst](BOOTSTRAP-16KB.lst), +and then ran [FileDump](/modules/filedump) to produce a [BOOTSTRAP-16KB.json](BOOTSTRAP-16KB.json) that can +be automatically pre-loaded into any machine: + + filedump --file=BOOTSTRAP-16KB.lst --format=octal --output=BOOTSTRAP-16KB.json + +For example, this [PDP-11/20 16Kb Machine](/devices/pdp11/machine/1120/bootstrap/debugger/) pre-loads +the **Bootstrap Loader** using the `` component's optional *file* attribute: + + + +I also edited [BOOTSTRAP-16KB.json](BOOTSTRAP-16KB.json) to include the following properties: + + "load": 0x3FE4, + "exec": 0x3FE4, + +so that the `` component knows exactly where to load and execute the file. However, the `` component can also +specify those value(s) itself, if needed: + + + +Finally, if you prefer octal *and* you're sure everyone will be using an ES6-capable browser, you can do this: + + + +All PCjs configuration files use hex and/or decimal exclusively, since those number formats have always been supported, +but as time goes by, the new octal and binary formats will be almost as universal. diff --git a/apps/pdp11/boot/test/BOOTTEST.json b/apps/pdp11/boot/test/BOOTTEST.json new file mode 100644 index 0000000000..ac05ede125 --- /dev/null +++ b/apps/pdp11/boot/test/BOOTTEST.json @@ -0,0 +1,94 @@ +{"load":0xC000 /*140000*/,"exec":0xC000 /*140000*/, +"words":[ +0x0005 /*000005*/,0x0A1F /*005037*/,0xFFFE /*177776*/,0x15C6 /*012706*/,0xC000 /*140000*/,0x0A1F /*005037*/,0xFF74 /*177564*/,0x15C0 /*012700*/, +0xC251 /*141121*/,0x09F7 /*004767*/,0x0052 /*000122*/,0x15DF /*012737*/,0xC054 /*140124*/,0x0040 /*000100*/,0x15DF /*012737*/,0x00E0 /*000340*/, +0x0042 /*000102*/,0x55DF /*052737*/,0x0040 /*000100*/,0xFF66 /*177546*/,0x15C0 /*012700*/,0xC2AC /*141254*/,0x09F7 /*004767*/,0x0038 /*000070*/, +0xE5C6 /*162706*/,0x00AE /*000256*/,0x1180 /*010600*/,0x09F7 /*004767*/,0x006A /*000152*/,0x0A00 /*005000*/,0x0001 /*000001*/,0x0A80 /*005200*/, +0x0BF7 /*005767*/,0x000C /*000014*/,0x03FB /*001773*/,0x15E6 /*012746*/,0x5800 /*054000*/,0x1DE6 /*016746*/,0x0002 /*000002*/,0x0002 /*000002*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0AB7 /*005267*/,0xFFFA /*177772*/,0x0002 /*000002*/,0x8BDF /*105737*/,0xFF74 /*177564*/,0x80FD /*100375*/, +0x901F /*110037*/,0xFF76 /*177566*/,0x0087 /*000207*/,0x0000 /*000000*/,0xB5DF /*132737*/,0x0040 /*000100*/,0xFF74 /*177564*/,0x02FC /*001374*/, +0x1037 /*010067*/,0xFFF2 /*177762*/,0x15DF /*012737*/,0xC088 /*140210*/,0x0034 /*000064*/,0x15DF /*012737*/,0x0080 /*000200*/,0x0036 /*000066*/, +0xD5DF /*152737*/,0x0040 /*000100*/,0xFF74 /*177564*/,0x0087 /*000207*/,0x8BFF /*105777*/,0xFFDA /*177732*/,0x0306 /*001406*/,0x9FDF /*117737*/, +0xFFD4 /*177724*/,0xFF76 /*177566*/,0x0AB7 /*005267*/,0xFFCE /*177716*/,0x0002 /*000002*/,0x8A1F /*105037*/,0xFF74 /*177564*/,0x0002 /*000002*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x1037 /*010067*/,0xFFF8 /*177770*/,0x0A37 /*005067*/,0xFFF6 /*177766*/,0x15DF /*012737*/,0xC0C0 /*140300*/, +0x0030 /*000060*/,0x15DF /*012737*/,0x0080 /*000200*/,0x0032 /*000062*/,0xD5DF /*152737*/,0x0040 /*000100*/,0xFF70 /*177560*/,0x0087 /*000207*/, +0x1026 /*010046*/,0x97C0 /*113700*/,0xFF72 /*177562*/,0xA017 /*120027*/,0x000D /*000015*/,0x032D /*001455*/,0xA017 /*120027*/,0x007F /*000177*/, +0x0303 /*001403*/,0xA017 /*120027*/,0x0008 /*000010*/,0x020A /*001012*/,0x0BF7 /*005767*/,0xFFC6 /*177706*/,0x0306 /*001406*/,0x0AF7 /*005367*/, +0xFFC0 /*177700*/,0x15C0 /*012700*/,0xC21F /*141037*/,0x09F7 /*004767*/,0xFF7E /*177576*/,0x012B /*000453*/,0xA017 /*120027*/,0x0020 /*000040*/, +0x0528 /*002450*/,0xA017 /*120027*/,0x007F /*000177*/,0x0425 /*002045*/,0x09F7 /*004767*/,0xFF5E /*177536*/,0xA017 /*120027*/,0x007A /*000172*/, +0x0605 /*003005*/,0xA017 /*120027*/,0x0061 /*000141*/,0x0502 /*002402*/,0xC5C0 /*142700*/,0x0020 /*000040*/,0x2DD7 /*026727*/,0xFF92 /*177622*/, +0x00AC /*000254*/,0x0417 /*002027*/,0x9026 /*110046*/,0x1DC0 /*016700*/,0xFF86 /*177606*/,0x6DC0 /*066700*/,0xFF84 /*177604*/,0x9588 /*112610*/, +0x0AB7 /*005267*/,0xFF7E /*177576*/,0x010E /*000416*/,0x1DC0 /*016700*/,0xFF76 /*177566*/,0x6DC0 /*066700*/,0xFF74 /*177564*/,0x8A08 /*105010*/, +0x15DF /*012737*/,0xC146 /*140506*/,0x00A0 /*000240*/,0x15DF /*012737*/,0x0040 /*000100*/,0x00A2 /*000242*/,0x15DF /*012737*/,0x0400 /*002000*/, +0xFFFA /*177772*/,0x1580 /*012600*/,0x0002 /*000002*/,0x0A1F /*005037*/,0xFFFA /*177772*/,0x1026 /*010046*/,0x1066 /*010146*/,0x10A6 /*010246*/, +0x10E6 /*010346*/,0x1126 /*010446*/,0x15C0 /*012700*/,0xC21C /*141034*/,0x09F7 /*004767*/,0xFF0C /*177414*/,0xB5DF /*132737*/,0x0040 /*000100*/, +0xFF74 /*177564*/,0x02FC /*001374*/,0x0A04 /*005004*/,0x15C3 /*012703*/,0xC223 /*141043*/,0x94C0 /*112300*/,0x0319 /*001431*/,0x1DC2 /*016702*/, +0xFF2E /*177456*/,0x9481 /*112201*/,0x0319 /*001431*/,0xA057 /*120127*/,0x0020 /*000040*/,0x03FB /*001773*/,0xA001 /*120001*/,0x0208 /*001010*/, +0x94C0 /*112300*/,0x030A /*001412*/,0x9481 /*112201*/,0x0308 /*001410*/,0xA057 /*120127*/,0x0020 /*000040*/,0x02F7 /*001367*/,0x0104 /*000404*/, +0x94C0 /*112300*/,0x02FE /*001376*/,0x0A84 /*005204*/,0x01E9 /*000751*/,0x0CC4 /*006304*/,0x09FC /*004774*/,0xC1C0 /*140700*/,0x0104 /*000404*/, +0x15C0 /*012700*/,0xC23F /*141077*/,0x09F7 /*004767*/,0xFEC0 /*177300*/,0x0A37 /*005067*/,0xFEF6 /*177366*/,0x15C0 /*012700*/,0xC2AC /*141254*/, +0x09F7 /*004767*/,0xFEB4 /*177264*/,0x1584 /*012604*/,0x1583 /*012603*/,0x1582 /*012602*/,0x1581 /*012601*/,0x1580 /*012600*/,0x0002 /*000002*/, +0xC46C /*142154*/,0xC2E8 /*141350*/,0xC2F4 /*141364*/,0xC338 /*141470*/,0xC2DE /*141336*/,0x4F43 /*047503*/,0x4D4D /*046515*/,0x4E41 /*047101*/, +0x5344 /*051504*/,0x4120 /*040440*/,0x4552 /*042522*/,0x4220 /*041040*/,0x4F4F /*047517*/,0x2C54 /*026124*/,0x4820 /*044040*/,0x4C41 /*046101*/, +0x2C54 /*026124*/,0x4C20 /*046040*/,0x4749 /*043511*/,0x5448 /*052110*/,0x2C53 /*026123*/,0x5420 /*052040*/,0x5345 /*051505*/,0x2054 /*020124*/, +0x4E41 /*047101*/,0x2044 /*020104*/,0x4548 /*042510*/,0x504C /*050114*/,0x0A0D /*005015*/,0x4F42 /*047502*/,0x544F /*052117*/,0x4420 /*042040*/, +0x5645 /*053105*/,0x4349 /*041511*/,0x5345 /*051505*/,0x4120 /*040440*/,0x4552 /*042522*/,0x5220 /*051040*/,0x3F4B /*037513*/,0x5220 /*051040*/, +0x3F4C /*037514*/,0x4F20 /*047440*/,0x2052 /*020122*/,0x5052 /*050122*/,0x0D3F /*006477*/,0x000A /*000012*/,0x0A0D /*005015*/,0x0800 /*004000*/, +0x0820 /*004040*/,0x4200 /*041000*/,0x4F4F /*047517*/,0x0054 /*000124*/,0x4148 /*040510*/,0x544C /*052114*/,0x5400 /*052000*/,0x5345 /*051505*/, +0x0054 /*000124*/,0x494C /*044514*/,0x4847 /*044107*/,0x5354 /*051524*/,0x4800 /*044000*/,0x4C45 /*046105*/,0x0050 /*000120*/,0x5500 /*052400*/, +0x4B4E /*045516*/,0x4F4E /*047516*/,0x4E57 /*047127*/,0x4320 /*041440*/,0x4D4F /*046517*/,0x414D /*040515*/,0x444E /*042116*/,0x0D0A /*006412*/, +0x5000 /*050000*/,0x5044 /*050104*/,0x312D /*030455*/,0x2031 /*020061*/,0x4F42 /*047502*/,0x544F /*052117*/,0x5420 /*052040*/,0x5345 /*051505*/, +0x2054 /*020124*/,0x4F46 /*047506*/,0x2052 /*020122*/,0x4450 /*042120*/,0x6A50 /*065120*/,0x0A73 /*005163*/,0x410D /*040415*/,0x4144 /*040504*/, +0x5450 /*052120*/,0x4445 /*042105*/,0x4620 /*043040*/,0x4F52 /*047522*/,0x204D /*020115*/,0x4F43 /*047503*/,0x4544 /*042504*/,0x4220 /*041040*/, +0x2059 /*020131*/,0x4150 /*040520*/,0x4C55 /*046125*/,0x4E20 /*047040*/,0x4E41 /*047101*/,0x454B /*042513*/,0x5652 /*053122*/,0x5349 /*051511*/, +0x3C20 /*036040*/,0x4150 /*040520*/,0x4C55 /*046125*/,0x414E /*040516*/,0x4B4E /*045516*/,0x4840 /*044100*/,0x544F /*052117*/,0x414D /*040515*/, +0x4C49 /*046111*/,0x432E /*041456*/,0x4D4F /*046517*/,0x0A3E /*005076*/,0x0A0D /*005015*/,0x000D /*000015*/,0x4F42 /*047502*/,0x544F /*052117*/, +0x203E /*020076*/,0x5500 /*052400*/,0x4B4E /*045516*/,0x4F4E /*047516*/,0x4E57 /*047127*/,0x4220 /*041040*/,0x4F4F /*047517*/,0x2054 /*020124*/, +0x4544 /*042504*/,0x4956 /*044526*/,0x4543 /*042503*/,0x0D0A /*006412*/,0x2000 /*020000*/,0x2020 /*020040*/,0x2020 /*020040*/,0x4320 /*041440*/, +0x4F4C /*047514*/,0x4B43 /*045503*/,0x5420 /*052040*/,0x4349 /*041511*/,0x534B /*051513*/,0x0D0A /*006412*/,0x0000 /*000000*/,0x15C0 /*012700*/, +0xC1CA /*140712*/,0x09F7 /*004767*/,0xFD82 /*176602*/,0x0087 /*000207*/,0x0000 /*000000*/,0x15C0 /*012700*/,0xC21C /*141034*/,0x09F7 /*004767*/, +0xFD76 /*176566*/,0x0087 /*000207*/,0x0A37 /*005067*/,0xFD5A /*176532*/,0x15C5 /*012705*/,0x1A00 /*015000*/,0x115F /*010537*/,0xFF78 /*177570*/, +0x1144 /*010504*/,0x0C84 /*006204*/,0x0A00 /*005000*/,0x1141 /*010501*/,0x7204 /*071004*/,0x1002 /*010002*/,0x7084 /*070204*/,0x60C1 /*060301*/, +0x2045 /*020105*/,0x0301 /*001401*/,0x0000 /*000000*/,0x7F0A /*077412*/,0x7F4F /*077517*/,0x15C0 /*012700*/,0xC2CE /*141316*/,0x1DC3 /*016703*/, +0xFD30 /*176460*/,0x0A02 /*005002*/,0x7297 /*071227*/,0x0008 /*000010*/,0x65C3 /*062703*/,0x0030 /*000060*/,0x90E0 /*110340*/,0x1083 /*010203*/, +0x02F8 /*001370*/,0x09F7 /*004767*/,0xFD32 /*176462*/,0x0087 /*000207*/,0x15C3 /*012703*/,0x7F06 /*077406*/,0x0A02 /*005002*/,0x0A01 /*005001*/, +0x15C0 /*012700*/,0x0008 /*000010*/,0x10F1 /*010361*/,0xF4C0 /*172300*/,0x10B1 /*010261*/,0xF4E0 /*172340*/,0x10F1 /*010361*/,0xF4D0 /*172320*/, +0x10B1 /*010261*/,0xF4F0 /*172360*/,0x10F1 /*010361*/,0xF480 /*172200*/,0x10B1 /*010261*/,0xF4A0 /*172240*/,0x10F1 /*010361*/,0xF490 /*172220*/, +0x10B1 /*010261*/,0xF4B0 /*172260*/,0x10F1 /*010361*/,0xFF80 /*177600*/,0x10B1 /*010261*/,0xFFA0 /*177640*/,0x10F1 /*010361*/,0xFF90 /*177620*/, +0x10F1 /*010361*/,0xFFB0 /*177660*/,0x65C2 /*062702*/,0x0080 /*000200*/,0x65C1 /*062701*/,0x0002 /*000002*/,0x7E1D /*077035*/,0x55DF /*052737*/, +0xFC00 /*176000*/,0xF4FE /*172376*/,0x55DF /*052737*/,0xFC00 /*176000*/,0xF4BE /*172276*/,0x55DF /*052737*/,0xFC00 /*176000*/,0xFFBE /*177676*/, +0x15DF /*012737*/,0x003F /*000077*/,0xF54E /*172516*/,0x15DF /*012737*/,0x0001 /*000001*/,0xFF7A /*177572*/,0x15DF /*012737*/,0x03C0 /*001700*/, +0xF4A4 /*172244*/,0x15DF /*012737*/,0x03C0 /*001700*/,0xF4B4 /*172264*/,0x15DF /*012737*/,0x1000 /*010000*/,0xFFFE /*177776*/,0x15C3 /*012703*/, +0x4080 /*040200*/,0x15C2 /*012702*/,0xC3C8 /*141710*/,0x14A6 /*012246*/,0x0D93 /*006623*/,0x2097 /*020227*/,0xC46C /*142154*/,0x87FB /*103773*/, +0x15F7 /*012767*/,0x4080 /*040200*/,0xFC8A /*176212*/,0x0087 /*000207*/,0x15C0 /*012700*/,0x001F /*000037*/,0x15C1 /*012701*/,0xF800 /*174000*/, +0x35DF /*032737*/,0x0001 /*000001*/,0xFF78 /*177570*/,0x030C /*001414*/,0x15C0 /*012700*/,0x0F0F /*007417*/,0x1001 /*010001*/,0x0A41 /*005101*/, +0x35DF /*032737*/,0x0002 /*000002*/,0xFF78 /*177570*/,0x0304 /*001404*/,0x15C0 /*012700*/,0x3C73 /*036163*/,0x15C1 /*012701*/,0x3E00 /*037000*/, +0x1042 /*010102*/,0xE5C2 /*162702*/,0x0002 /*000002*/,0x45C2 /*042702*/,0x0001 /*000001*/,0x1083 /*010203*/,0x45C3 /*042703*/,0xFFC1 /*177701*/, +0x15F3 /*012763*/,0x0001 /*000001*/,0x4000 /*040000*/,0x65C3 /*062703*/,0x0002 /*000002*/,0x15F3 /*012763*/,0x004B /*000113*/,0x4000 /*040000*/, +0x1084 /*010204*/,0x7517 /*072427*/,0xFFFA /*177772*/,0x45C4 /*042704*/,0xFF80 /*177600*/,0x15C5 /*012705*/,0x03C0 /*001700*/,0xE105 /*160405*/, +0x1084 /*010204*/,0x7517 /*072427*/,0xFFF4 /*177764*/,0x45C4 /*042704*/,0xFFF1 /*177761*/,0x1174 /*010564*/,0xF4A0 /*172240*/,0x1043 /*010103*/, +0x74D7 /*072327*/,0xFFF4 /*177764*/,0x45C3 /*042703*/,0xFFF1 /*177761*/,0x20C4 /*020304*/,0x030A /*001412*/,0x1044 /*010104*/,0x7517 /*072427*/, +0xFFFA /*177772*/,0x45C4 /*042704*/,0xFF80 /*177600*/,0x15C5 /*012705*/,0x03C0 /*001700*/,0xE105 /*160405*/,0x1173 /*010563*/,0xF4A0 /*172240*/, +0x15C4 /*012704*/,0x0003 /*000003*/,0x67C4 /*063704*/,0xFF78 /*177570*/,0x15C3 /*012703*/,0x0002 /*000002*/,0x61C3 /*060703*/,0x004A /*000112*/, +0x7F02 /*077402*/,0x1002 /*010002*/,0x0C02 /*006002*/,0x0C41 /*006101*/,0x0C00 /*006000*/,0x01C2 /*000702*/,0x0A03 /*005003*/,0x9481 /*112201*/, +0x0365 /*001545*/,0xA057 /*120127*/,0x0020 /*000040*/,0x03FB /*001773*/,0xA057 /*120127*/,0x0052 /*000122*/,0x0305 /*001405*/,0x15C0 /*012700*/, +0xC2B3 /*141263*/,0x09F7 /*004767*/,0xFBE2 /*175742*/,0x0087 /*000207*/,0x9481 /*112201*/,0x9480 /*112200*/,0x030E /*001416*/,0xA017 /*120027*/, +0x0020 /*000040*/,0x030B /*001413*/,0xA017 /*120027*/,0x0037 /*000067*/,0x0619 /*003031*/,0xE5C0 /*162700*/,0x0030 /*000060*/,0x0516 /*002426*/, +0x0CC3 /*006303*/,0x0CC3 /*006303*/,0x0CC3 /*006303*/,0x5003 /*050003*/,0x01F0 /*000760*/,0x0A02 /*005002*/,0x15D2 /*012722*/,0x005F /*000137*/, +0x15D2 /*012722*/,0xC000 /*140000*/,0x15D2 /*012722*/,0xC000 /*140000*/,0x0A12 /*005022*/,0xA057 /*120127*/,0x004B /*000113*/,0x033E /*001476*/, +0xA057 /*120127*/,0x004C /*000114*/,0x0308 /*001410*/,0xA057 /*120127*/,0x0050 /*000120*/,0x034F /*001517*/,0x15C0 /*012700*/,0xC23F /*141077*/, +0x09F7 /*004767*/,0xFB94 /*175624*/,0x0087 /*000207*/,0x0005 /*000005*/,0x00C3 /*000303*/,0x15C1 /*012701*/,0xF900 /*174400*/,0x15F1 /*012761*/, +0x000B /*000013*/,0x0004 /*000004*/,0x55C3 /*052703*/,0x0004 /*000004*/,0x10C9 /*010311*/,0x8BC9 /*105711*/,0x80FE /*100376*/,0x8A03 /*105003*/, +0x55C3 /*052703*/,0x0008 /*000010*/,0x10C9 /*010311*/,0x8BC9 /*105711*/,0x80FE /*100376*/,0x1C42 /*016102*/,0x0006 /*000006*/,0x45C2 /*042702*/, +0x003F /*000077*/,0x0A82 /*005202*/,0x10B1 /*010261*/,0x0004 /*000004*/,0x8A03 /*105003*/,0x55C3 /*052703*/,0x0006 /*000006*/,0x10C9 /*010311*/, +0x8BC9 /*105711*/,0x80FE /*100376*/,0x0A31 /*005061*/,0x0002 /*000002*/,0x0A31 /*005061*/,0x0004 /*000004*/,0x15F1 /*012761*/,0xFE00 /*177000*/, +0x0006 /*000006*/,0x8A03 /*105003*/,0x55C3 /*052703*/,0x000C /*000014*/,0x10C9 /*010311*/,0x8BC9 /*105711*/,0x80FE /*100376*/,0x45C9 /*042711*/, +0x00FF /*000377*/,0x0A02 /*005002*/,0x0A03 /*005003*/,0x0A04 /*005004*/,0x0A05 /*005005*/,0x0A07 /*005007*/,0x0005 /*000005*/,0x00C3 /*000303*/, +0x0CC3 /*006303*/,0x0CC3 /*006303*/,0x0CC3 /*006303*/,0x0CC3 /*006303*/,0x0CC3 /*006303*/,0x15C1 /*012701*/,0xFF0A /*177412*/,0x10C9 /*010311*/, +0x0A21 /*005041*/,0x15E1 /*012741*/,0xFE00 /*177000*/,0x15E1 /*012741*/,0x0005 /*000005*/,0x0A02 /*005002*/,0x0A03 /*005003*/,0x0A04 /*005004*/, +0x0A05 /*005005*/,0x8BC9 /*105711*/,0x80FE /*100376*/,0x8A09 /*105011*/,0x0A07 /*005007*/,0x0005 /*000005*/,0x15C1 /*012701*/,0xFDC0 /*176700*/, +0x15F1 /*012761*/,0x0020 /*000040*/,0x0008 /*000010*/,0x10F1 /*010361*/,0x0008 /*000010*/,0x15C9 /*012711*/,0x0011 /*000021*/,0x15F1 /*012761*/, +0x1000 /*010000*/,0x001A /*000032*/,0x15F1 /*012761*/,0xFE00 /*177000*/,0x0002 /*000002*/,0x0A31 /*005061*/,0x0004 /*000004*/,0x0A31 /*005061*/, +0x0006 /*000006*/,0x0A31 /*005061*/,0x001C /*000034*/,0x15C9 /*012711*/,0x0039 /*000071*/,0x8BC9 /*105711*/,0x80FE /*100376*/,0x8A09 /*105011*/, +0x10C0 /*010300*/,0x0A07 /*005007*/] +} \ No newline at end of file diff --git a/apps/pdp11/boot/test/BOOTTEST.lst b/apps/pdp11/boot/test/BOOTTEST.lst new file mode 100644 index 0000000000..1372a0a08f --- /dev/null +++ b/apps/pdp11/boot/test/BOOTTEST.lst @@ -0,0 +1,555 @@ + 1 ; BOOT LOADER CODE + 2 ; + 3 ; REBASE HIGHER LINK/BOT:140000 + 4 ; WANT PERFORMANCE COUNTER - CLOCK TICKS TO DO SOMETHING? + 5 + 6 177776 PSW = 177776 + 7 177564 DL11XCSR = 177564 + 8 000064 DL11VEC = 64 + 9 + 10 177546 KW11LKS = 177546 + 11 000100 KW11VEC = 100 + 12 + 13 .ASECT + 14 140000 .=140000 + 15 140000 000005 START: RESET ; 140000 + 16 140002 005037 177776 CLR @#PSW + 17 140006 012706 140000 MOV #START,SP + 18 140012 005037 177564 CLR @#DL11XCSR ; CLEAR THE XCSR + 19 140016 012700 141121 MOV #BANNER,R0 + 20 140022 004767 140150' JSR PC,PRINT + 21 140026 012737 140124 000100 MOV #CLKAST,@#KW11VEC + 22 140034 012737 000340 000102 MOV #340,@#KW11VEC+2 + 23 140042 052737 000100 177546 BIS #100,@#KW11LKS ; SET CLOCK TICKING + 24 + 25 140050 012700 141254 MOV #PROMPT,R0 + 26 140054 004767 140150' JSR PC,PRINT + 27 140060 162706 000256 SUB #256,SP + 28 140064 010600 MOV SP,R0 + 29 140066 004767 140244' JSR PC,INPUT + 30 140072 005000 CLR R0 + 31 140074 000001 1$: WAIT + 32 140076 005200 INC R0 + 33 140100 005767 140120' TST LGHTON + 34 140104 001773 BEQ 1$ + 35 140106 012746 054000 MOV #054000,-(SP) ; SUPER PRIORITY 0 ALT REG + 36 140112 016746 140120' MOV LGHTON,-(SP) ; CALL SUPER LOOP START + 37 140116 000002 RTI + 38 + 39 140120 000000 LGHTON: .WORD 0 + 40 140122 000000 CLKTIC: .WORD 0 + 41 + 42 CLKAST: ; 140124 + 43 140124 005267 140122' INC CLKTIC + 44 140130 000002 RTI + 45 + 46 ONECHR: + 47 140132 105737 177564 TSTB @#DL11XCSR ; 140132 + 48 140136 100375 BPL ONECHR + 49 140140 110037 177566 MOVB R0,@#177566 + 50 140144 000207 RTS PC + 51 + 52 140146 000000 PRTPTR: .WORD 0 ; 140146 + 53 + 54 PRINT: ; 140150 + 55 140150 132737 000100 177564 BITB #100,@#DL11XCSR + 56 140156 001374 BNE PRINT + 57 140160 010067 140146' MOV R0,PRTPTR + 58 140164 012737 140210 000064 MOV #PRTAST,@#DL11VEC + 59 140172 012737 000200 000066 MOV #200,@#DL11VEC+2 + 60 140200 152737 000100 177564 BISB #100,@#DL11XCSR + 61 140206 000207 RTS PC + 62 + 63 PRTAST: ; 140210 + 64 140210 105777 140146' TSTB @PRTPTR + 65 140214 001406 BEQ 2$ + 66 140216 117737 140146' 177566 MOVB @PRTPTR,@#177566 + 67 140224 005267 140146' INC PRTPTR + 68 140230 000002 RTI + 69 140232 105037 177564 2$: CLRB @#177564 + 70 140236 000002 RTI + 71 + 72 140240 000000 BUFFER: .WORD 0 ; INPUT BUFFER POINTER + 73 140242 000000 LENGTH: .WORD 0 ; INPUT BUFFER LENGTH + 74 + 75 INPUT: + 76 140244 010067 140240' MOV R0,BUFFER ; 140244 + 77 140250 005067 140242' CLR LENGTH + 78 140254 012737 140300 000060 MOV #INPAST,@#60 + 79 140262 012737 000200 000062 MOV #200,@#62 + 80 140270 152737 000100 177560 BISB #100,@#177560 + 81 140276 000207 RTS PC + 82 + 83 INPAST: ; 140300 + 84 140300 010046 MOV R0,-(SP) + 85 140302 113700 177562 MOVB @#177562,R0 + 86 140306 120027 000015 CMPB R0,#15 + 87 140312 001455 BEQ 7$ ; CARRIAGE RETURN + 88 140314 120027 000177 CMPB R0,#127. + 89 140320 001403 BEQ 2$ ; + 90 140322 120027 000010 CMPB R0,#10 + 91 140326 001012 BNE 4$ ; BACK SPACE + 92 140330 005767 140242' 2$: TST LENGTH ; DATA IN BUFFER? + 93 140334 001406 BEQ 3$ + 94 140336 005367 140242' DEC LENGTH ; LENGTH + 95 140342 012700 141037 MOV #DEL,R0 + 96 140346 004767 140150' JSR PC,PRINT + 97 140352 000453 3$: BR 9$ + 98 140354 120027 000040 4$: CMPB R0,#40 + 99 140360 002450 BLT 9$ ; BELOW SPACE + 100 140362 120027 000177 CMPB R0,#177 + 101 140366 002045 BGE 9$ ; SKIP STUFF TOO BIG + 102 140370 004767 140132' JSR PC,ONECHR ; ECHO CHAR + 103 140374 120027 000172 CMPB R0,#172 + 104 140400 003005 BGT 5$ ; ABOVE Z + 105 140402 120027 000141 CMPB R0,#141 + 106 140406 002402 BLT 5$ ; BELOW A + 107 140410 142700 000040 BICB #40,R0 ; CONVERT TO UPPER CASE + 108 140414 026727 140242' 000254 5$: CMP LENGTH,#254 + 109 140422 002027 BGE 9$ + 110 140424 110046 MOVB R0,-(SP) + 111 140426 016700 140240' MOV BUFFER,R0 + 112 140432 066700 140242' ADD LENGTH,R0 + 113 140436 112610 MOVB (SP)+,(R0) + 114 140440 005267 140242' INC LENGTH + 115 140444 000416 BR 9$ + 116 + 117 140446 016700 140240' 7$: MOV BUFFER,R0 + 118 140452 066700 140242' ADD LENGTH,R0 + 119 140456 105010 CLRB (R0) + 120 140460 012737 140506 000240 MOV #CMD,@#240 ; CALL CMD AT PRIORITY 2 + 121 140466 012737 000100 000242 MOV #100,@#242 + 122 140474 012737 002000 177772 MOV #2000,@#177772 + 123 140502 012600 9$: MOV (SP)+,R0 + 124 140504 000002 RTI + 125 + 126 CMD: ; 140506 + 127 140506 005037 177772 CLR @#177772 ; NO MORE PIR CALLS + 128 140512 010046 MOV R0,-(SP) + 129 140514 010146 MOV R1,-(SP) + 130 140516 010246 MOV R2,-(SP) + 131 140520 010346 MOV R3,-(SP) + 132 140522 010446 MOV R4,-(SP) + 133 140524 012700 141034 MOV #EOL,R0 + 134 140530 004767 140150' JSR PC,PRINT + 135 140534 132737 000100 177564 1$: BITB #100,@#177564 + 136 140542 001374 BNE 1$ + 137 140544 005004 CLR R4 + 138 140546 012703 141043 MOV #CMDLST,R3 ; CMD LIST + 139 140552 112300 3$: MOVB (R3)+,R0 + 140 140554 001431 BEQ 13$ + 141 140556 016702 140240' MOV BUFFER,R2 ; USER CMD + 142 140562 112201 4$: MOVB (R2)+,R1 + 143 140564 001431 BEQ 15$ ; NULL COMMAND? + 144 140566 120127 000040 CMPB R1,#40 + 145 140572 001773 BEQ 4$ ; SKIP SPACE + 146 140574 120001 5$: CMPB R0,R1 + 147 140576 001010 BNE 7$ + 148 140600 112300 MOVB (R3)+,R0 + 149 140602 001412 BEQ 9$ + 150 140604 112201 MOVB (R2)+,R1 + 151 140606 001410 BEQ 9$ + 152 140610 120127 000040 CMPB R1,#40 + 153 140614 001367 BNE 5$ + 154 140616 000404 BR 9$ + 155 140620 112300 7$: MOVB (R3)+,R0 + 156 140622 001376 BNE 7$ + 157 140624 005204 INC R4 + 158 140626 000751 BR 3$ + 159 140630 006304 9$: ASL R4 + 160 140632 004774 140700 JSR PC,@CMDTBL(R4) ; EXECUTE + 161 140636 000404 BR 15$ + 162 + 163 140640 012700 141077 13$: MOV #UNKMSG,R0 + 164 140644 004767 140150' JSR PC,PRINT + 165 + 166 140650 005067 140242' 15$: CLR LENGTH + 167 140654 012700 141254 MOV #PROMPT,R0 + 168 140660 004767 140150' JSR PC,PRINT + 169 140664 012604 MOV (SP)+,R4 + 170 140666 012603 MOV (SP)+,R3 + 171 140670 012602 MOV (SP)+,R2 + 172 140672 012601 MOV (SP)+,R1 + 173 140674 012600 MOV (SP)+,R0 + 174 140676 000002 RTI + 175 + 176 + 177 140700 142154 141350 141364 CMDTBL: .WORD BOOT,HALT,TEST,LIGHTS,HELP + 140706 141470 141336 + 178 140712 103 117 115 HLPMSG: .ASCIZ 'COMMANDS ARE BOOT, HALT, LIGHTS, TEST AND HELP'<15><12>'BOOT DEVICES ARE RK? RL? OR RP?'<15><12> + 140715 115 101 116 + 140720 104 123 040 + 140723 101 122 105 + 140726 040 102 117 + 140731 117 124 054 + 140734 040 110 101 + 140737 114 124 054 + 140742 040 114 111 + 140745 107 110 124 + 140750 123 054 040 + 140753 124 105 123 + 140756 124 040 101 + 140761 116 104 040 + 140764 110 105 114 + 140767 120 015 012 + 140772 102 117 117 + 140775 124 040 104 + 141000 105 126 111 + 141003 103 105 123 + 141006 040 101 122 + 141011 105 040 122 + 141014 113 077 040 + 141017 122 114 077 + 141022 040 117 122 + 141025 040 122 120 + 141030 077 015 012 + 141033 000 + 179 141034 015 012 000 EOL: .BYTE 15,12,0 + 180 141037 010 040 010 DEL: .BYTE 10,40,10,0 + 141042 000 + 181 141043 102 117 117 CMDLST: .ASCIZ 'BOOT' + 141046 124 000 + 182 141050 110 101 114 .ASCIZ 'HALT' + 141053 124 000 + 183 141055 124 105 123 .ASCIZ 'TEST' + 141060 124 000 + 184 141062 114 111 107 .ASCIZ 'LIGHTS' + 141065 110 124 123 + 141070 000 + 185 141071 110 105 114 .ASCIZ 'HELP' + 141074 120 000 + 186 141076 000 .BYTE 0 + 187 141077 125 116 113 UNKMSG: .ASCIZ 'UNKNOWN COMMAND'<12><15> + 141102 116 117 127 + 141105 116 040 103 + 141110 117 115 115 + 141113 101 116 104 + 141116 012 015 000 + 188 141121 120 104 120 BANNER: .ASCIZ 'PDP-11 BOOT TEST FOR PDPjs'<12><15>'ADAPTED FROM CODE BY PAUL NANKERVIS '<12><15><12><15> + 141124 055 061 061 + 141127 040 102 117 + 141132 117 124 040 + 141135 124 105 123 + 141140 124 040 106 + 141143 117 122 040 + 141146 120 104 120 + 141151 152 163 012 + 141154 015 101 104 + 141157 101 120 124 + 141162 105 104 040 + 141165 106 122 117 + 141170 115 040 103 + 141173 117 104 105 + 141176 040 102 131 + 141201 040 120 101 + 141204 125 114 040 + 141207 116 101 116 + 141212 113 105 122 + 141215 126 111 123 + 141220 040 074 120 + 141223 101 125 114 + 141226 116 101 116 + 141231 113 100 110 + 141234 117 124 115 + 141237 101 111 114 + 141242 056 103 117 + 141245 115 076 012 + 141250 015 012 015 + 141253 000 + 189 141254 102 117 117 PROMPT: .ASCIZ 'BOOT> ' + 141257 124 076 040 + 141262 000 + 190 141263 125 116 113 BADBOO: .ASCIZ 'UNKNOWN BOOT DEVICE'<12><15> + 141266 116 117 127 + 141271 116 040 102 + 141274 117 117 124 + 141277 040 104 105 + 141302 126 111 103 + 141305 105 012 015 + 141310 000 + 191 141311 040 040 040 PERMSG: .ASCIZ ' CLOCK TICKS'<12><15> + 141314 040 040 040 + 141317 103 114 117 + 141322 103 113 040 + 141325 124 111 103 + 141330 113 123 012 + 141333 015 000 + 192 + 193 141335 000 .EVEN + 194 + 195 HELP: ; 141244 + 196 141336 012700 140712 MOV #HLPMSG,R0 + 197 141342 004767 140150' JSR PC,PRINT + 198 141346 000207 RTS PC + 199 + 200 HALT: ; 141260 + 201 141350 000000 HALT + 202 141352 012700 141034 MOV #EOL,R0 + 203 141356 004767 140150' JSR PC,PRINT + 204 141362 000207 RTS PC + 205 + 206 TEST: ; 141272 + 207 141364 005067 140122' CLR CLKTIC + 208 + 209 141370 012705 015000 MOV #15000,R5 + 210 141374 010537 177570 10$: MOV R5,@#177570 ; DISPLAY + 211 141400 010504 MOV R5,R4 + 212 141402 006204 ASR R4 + 213 141404 005000 15$: CLR R0 + 214 141406 010501 MOV R5,R1 + 215 141410 071004 DIV R4,R0 + 216 141412 010002 MOV R0,R2 + 217 141414 070204 MUL R4,R2 + 218 141416 060301 ADD R3,R1 + 219 141420 020105 CMP R1,R5 + 220 141422 001401 BEQ 20$ + 221 141424 000000 HALT + 222 141426 077412 20$: SOB R4,15$ + 223 141430 077517 SOB R5,10$ + 224 + 225 141432 012700 141316 MOV #PERMSG+5,R0 + 226 141436 016703 140122' MOV CLKTIC,R3 + 227 + 228 141442 005002 25$: CLR R2 ; 141350 + 229 141444 071227 000010 DIV #10,R2 + 230 141450 062703 000060 ADD #'0,R3 + 231 141454 110340 MOVB R3,-(R0) + 232 141456 010203 MOV R2,R3 + 233 141460 001370 BNE 25$ + 234 + 235 141462 004767 140150' JSR PC,PRINT + 236 141466 000207 RTS PC + 237 + 238 + 239 177572 MMR0=177572 + 240 177574 MMR1=177574 + 241 177576 MMR2=177576 + 242 172516 MMR3=172516 + 243 + 244 LIGHTS: ; 141376 + 245 141470 012703 077406 MOV #77406,R3 ; DEFAULT PDR + 246 141474 005002 CLR R2 + 247 141476 005001 CLR R1 + 248 141500 012700 000010 MOV #8.,R0 + 249 141504 010361 172300 1$: MOV R3,172300(R1) ; KERNEL I PDR + 250 141510 010261 172340 MOV R2,172340(R1) ; KERNEL I PAR + 251 141514 010361 172320 MOV R3,172320(R1) ; KERNEL D PDR + 252 141520 010261 172360 MOV R2,172360(R1) ; KERNEL D PAR + 253 141524 010361 172200 MOV R3,172200(R1) ; SUPER I PDR + 254 141530 010261 172240 MOV R2,172240(R1) ; SUPER I PAR + 255 141534 010361 172220 MOV R3,172220(R1) ; SUPER D PDR + 256 141540 010261 172260 MOV R2,172260(R1) ; SUPER D PAR + 257 141544 010361 177600 MOV R3,177600(R1) ; USER I PDR + 258 141550 010261 177640 MOV R2,177640(R1) ; USER I PAR + 259 141554 010361 177620 MOV R3,177620(R1) ; USER D PDR + 260 141560 010361 177660 MOV R3,177660(R1) ; USER D PAR + 261 141564 062702 000200 ADD #200,R2 + 262 141570 062701 000002 ADD #2,R1 + 263 141574 077035 SOB R0,1$ + 264 141576 052737 176000 172376 BIS #176000,@#172376 ; KERNEL D POINTS TO I/O SPACE + 265 141604 052737 176000 172276 BIS #176000,@#172276 ; SUPER D POINTS TO I/O SPACE + 266 141612 052737 176000 177676 BIS #176000,@#177676 ; USER D POINTS TO I/O SPACE + 267 141620 012737 000077 172516 MOV #77,@#MMR3 ; 77 FOR 22 BIT + 268 141626 012737 000001 177572 MOV #1,@#MMR0 + 269 + 270 141634 012737 001700 172244 MOV #1700,@#172244 ; BASE SUPER I (PAR 2) #40000 AT #170000 + 271 141642 012737 001700 172264 MOV #1700,@#172264 ; BASE SUPER D (PAR 2) #40000 AT #170000 + 272 141650 012737 010000 177776 MOV #010000,@#177776 ; SET PM TO SUPER + 273 + 274 141656 012703 040200 MOV #40200,R3 ; SUPER CODE ADDRESS + 275 141662 012702 141710 MOV #SUPERS,R2 ; ADDRESS SUPER CODE + 276 141666 012246 10$: MOV (R2)+,-(SP) + 277 141670 006623 MTPI (R3)+ + 278 141672 020227 142154 CMP R2,#SUPERE + 279 141676 103773 BLO 10$ + 280 + 281 141700 012767 040200 140120' MOV #40200,LGHTON ; CHANGE IDLE TASK + 282 141706 000207 RTS PC + 283 + 284 ; + 285 ; TO BE COPIED TO SUPER #40200 AT PHYSICAL #170000 + 286 ; #40000 TO #40200 FOR WAIT & JMP INSTRUCTIONS + 287 ; + 288 SUPERS: ; 141616 + 289 141710 012700 000037 MOV #37,R0 ; LOAD PATTERN + 290 141714 012701 174000 MOV #174000,R1 + 291 141720 032737 000001 177570 BIT #1,@#177570 + 292 141726 001414 BEQ 10$ + 293 141730 012700 007417 MOV #7417,R0 + 294 141734 010001 MOV R0,R1 + 295 141736 005101 COM R1 + 296 141740 032737 000002 177570 BIT #2,@#177570 + 297 141746 001404 BEQ 10$ + 298 141750 012700 036163 MOV #36163,R0 + 299 141754 012701 037000 MOV #37000,R1 + 300 141760 010102 10$: MOV R1,R2 + 301 141762 162702 000002 SUB #2,R2 + 302 141766 042702 000001 BIC #1,R2 ; WAIT ADDRESS + 303 141772 010203 MOV R2,R3 + 304 141774 042703 177701 BIC #177701,R3 ; ADDRESS OFFSET + 305 142000 012763 000001 040000 MOV #0000001,40000(R3) ; WRITE WAIT + 306 142006 062703 000002 ADD #2,R3 + 307 142012 012763 000113 040000 MOV #0000113,40000(R3) ; WRITE JMP (R3) + 308 + 309 142020 010204 MOV R2,R4 + 310 142022 072427 177772 ASH #-6,R4 + 311 142026 042704 177600 BIC #177600,R4 + 312 142032 012705 001700 MOV #1700,R5 + 313 142036 160405 SUB R4,R5 ; PAR ADDRESS BASE FOR WAIT + 314 142040 010204 MOV R2,R4 + 315 142042 072427 177764 ASH #-12.,R4 + 316 142046 042704 177761 BIC #177761,R4 ; PAR SELECT OFFSET + 317 142052 010564 172240 MOV R5,172240(R4) ; SUPER I SPACE + 318 + 319 142056 010103 MOV R1,R3 + 320 142060 072327 177764 ASH #-12.,R3 + 321 142064 042703 177761 BIC #177761,R3 ; PAR SELECT OFFSET + 322 142070 020304 CMP R3,R4 ; SAME PAR + 323 142072 001412 BEQ 30$ + 324 142074 010104 MOV R1,R4 + 325 142076 072427 177772 ASH #-6,R4 + 326 142102 042704 177600 BIC #177600,R4 + 327 142106 012705 001700 MOV #1700,R5 + 328 142112 160405 SUB R4,R5 ; PAR ADDRESS BASE FOR JMP + 329 142114 010563 172240 MOV R5,172240(R3) ; SUPER I SPACE + 330 30$: + 331 142120 012704 000003 MOV #3,R4 + 332 142124 063704 177570 ADD @#177570,R4 + 333 142130 012703 000002 MOV #2,R3 + 334 142134 060703 ADD PC,R3 + 335 142136 000112 40$: JMP (R2) + 336 142140 077402 SOB R4,40$ + 337 142142 010002 MOV R0,R2 + 338 142144 006002 ROR R2 ; ROTATE PATTERN + 339 142146 006101 ROL R1 + 340 142150 006000 ROR R0 + 341 142152 000702 BR 10$ + 342 SUPERE: + 343 + 344 BOOT: ; 142062 + 345 142154 005003 CLR R3 ; UNIT + 346 142156 112201 1$: MOVB (R2)+,R1 + 347 142160 001545 BEQ BOOTRK ; DEFAULT DEVICE IS RK0 + 348 142162 120127 000040 CMPB R1,#40 + 349 142166 001773 BEQ 1$ + 350 142170 120127 000122 CMPB R1,#'R + 351 142174 001405 BEQ 5$ + 352 + 353 142176 012700 141263 MOV #BADBOO,R0 + 354 142202 004767 140150' JSR PC,PRINT + 355 142206 000207 RTS PC + 356 + 357 142210 112201 5$: MOVB (R2)+,R1 ; HOPEFULLY K, L OR P + 358 142212 112200 7$: MOVB (R2)+,R0 ; DIGIT + 359 142214 001416 BEQ 9$ + 360 142216 120027 000040 CMPB R0,#40 + 361 142222 001413 BEQ 9$ + 362 142224 120027 000067 CMPB R0,#'7 + 363 142230 003031 BGT 11$ + 364 142232 162700 000060 SUB #'0,R0 + 365 142236 002426 BLT 11$ + 366 142240 006303 ASL R3 + 367 142242 006303 ASL R3 + 368 142244 006303 ASL R3 + 369 142246 050003 BIS R0,R3 ; PUT DIGIT INTO UNIT + 370 142250 000760 BR 7$ + 371 142252 005002 9$: CLR R2 + 372 142254 012722 000137 MOV #137,(R2)+ + 373 142260 012722 140000 MOV #START,(R2)+ + 374 142264 012722 140000 MOV #START,(R2)+ + 375 142270 005022 CLR (R2)+ + 376 142272 120127 000113 CMPB R1,#'K + 377 142276 001476 BEQ BOOTRK + 378 142300 120127 000114 CMPB R1,#'L + 379 142304 001410 BEQ BOOTRL + 380 142306 120127 000120 CMPB R1,#'P + 381 142312 001517 BEQ BOOTRP + 382 + 383 142314 012700 141077 11$: MOV #UNKMSG,R0 + 384 142320 004767 140150' JSR PC,PRINT + 385 142324 000207 RTS PC + 386 + 387 174400 RLCS=174400 + 388 BOOTRL: ; 142234 + 389 142326 000005 RESET + 390 142330 000303 SWAB R3 ; UNIT NUMBER + 391 142332 012701 174400 MOV #RLCS,R1 ; CSR + 392 142336 012761 000013 000004 MOV #13,4(R1) ; CLR ERR + 393 142344 052703 000004 BIS #4,R3 ; UNIT+GSTAT + 394 142350 010311 MOV R3,(R1) ; ISSUE CMD + 395 142352 105711 TSTB (R1) ; WAIT + 396 142354 100376 BPL .-2 + 397 142356 105003 CLRB R3 + 398 142360 052703 000010 BIS #10,R3 ; UNIT+RDHDR + 399 142364 010311 MOV R3,(R1) ; ISSUE CMD + 400 142366 105711 TSTB (R1) ; WAIT + 401 142370 100376 BPL .-2 + 402 142372 016102 000006 MOV 6(R1),R2 ; GET HDR + 403 142376 042702 000077 BIC #77,R2 ; CLR SECTOR + 404 142402 005202 INC R2 ; MAGIC BIT + 405 142404 010261 000004 MOV R2,4(R1) ; SEEK TO 0 + 406 142410 105003 CLRB R3 + 407 142412 052703 000006 BIS #6,R3 ; UNIT+SEEK + 408 142416 010311 MOV R3,(R1) ; ISSUE CMD + 409 142420 105711 TSTB (R1) ; WAIT + 410 142422 100376 BPL .-2 + 411 142424 005061 000002 CLR 2(R1) ; CLR BA + 412 142430 005061 000004 CLR 4(R1) ; CLR DA + 413 142434 012761 177000 000006 MOV #-512.,6(R1) ; SET WC + 414 142442 105003 CLRB R3 + 415 142444 052703 000014 BIS #14,R3 ; UNIT+READ + 416 142450 010311 MOV R3,(R1) ; ISSUE CMD + 417 142452 105711 TSTB (R1) ; WAIT + 418 142454 100376 BPL .-2 + 419 142456 042711 000377 BIC #377,(R1) + 420 142462 005002 CLR R2 + 421 142464 005003 CLR R3 + 422 142466 005004 CLR R4 + 423 142470 005005 CLR R5 + 424 142472 005007 CLR PC + 425 + 426 177412 RKDA=177412 + 427 000005 READGO=5 + 428 BOOTRK: + 429 142474 000005 RESET ; 142402 + 430 142476 000303 SWAB R3 ; UNIT NUMBER + 431 142500 006303 ASL R3 + 432 142502 006303 ASL R3 + 433 142504 006303 ASL R3 + 434 142506 006303 ASL R3 + 435 142510 006303 ASL R3 + 436 142512 012701 177412 MOV #RKDA,R1 ; CSR + 437 142516 010311 MOV R3,(R1) ; LOAD DA + 438 142520 005041 CLR -(R1) ; CLEAR BA + 439 142522 012741 177000 MOV #-256.*2,-(R1) ; LOAD WC + 440 142526 012741 000005 MOV #READGO,-(R1) ; READ & GO + 441 142532 005002 CLR R2 + 442 142534 005003 CLR R3 + 443 142536 005004 CLR R4 + 444 142540 005005 CLR R5 + 445 142542 105711 TSTB (R1) + 446 142544 100376 BPL .-2 + 447 142546 105011 CLRB (R1) + 448 142550 005007 CLR PC + 449 + 450 176700 RPCSR=0176700 + 451 BOOTRP: ; 142460 + 452 142552 000005 RESET + 453 142554 012701 176700 MOV #RPCSR, R1 + 454 142560 012761 000040 000010 MOV #0000040, 10(R1) ; RESET + 455 142566 010361 000010 MOV R3, 10(R1) ; SET UNIT + 456 142572 012711 000021 MOV #0000021, (R1) ; PACK ACK + 457 142576 012761 010000 000032 MOV #0010000, 32(R1) ; 16B MODE + 458 142604 012761 177000 000002 MOV #-512., 2(R1) ; SET WC + 459 142612 005061 000004 CLR 4(R1) ; CLR BA + 460 142616 005061 000006 CLR 6(R1) ; CLR DA + 461 142622 005061 000034 CLR 34(R1) ; CLR CYL + 462 142626 012711 000071 MOV #0000071, (R1) ; READ + 463 142632 105711 TSTB (R1) ; WAIT + 464 142634 100376 BPL .-2 + 465 142636 105011 CLRB (R1) + 466 142640 010300 MOV R3,R0 + 467 142642 005007 CLR PC + 468 + 469 .END START + 469 diff --git a/devices/pdp11/rom/test/boot.mac b/apps/pdp11/boot/test/BOOTTEST.mac similarity index 98% rename from devices/pdp11/rom/test/boot.mac rename to apps/pdp11/boot/test/BOOTTEST.mac index e713034d37..fc808cbaa1 100644 --- a/devices/pdp11/rom/test/boot.mac +++ b/apps/pdp11/boot/test/BOOTTEST.mac @@ -185,7 +185,7 @@ CMDLST: .ASCIZ 'BOOT' .ASCIZ 'HELP' .BYTE 0 UNKMSG: .ASCIZ 'UNKNOWN COMMAND'<12><15> -BANNER: .ASCIZ 'PAUL NANKERVIS - PAULNANK@HOTMAIL.COM'<12><15><12><15> +BANNER: .ASCIZ 'PDP-11 BOOT TEST FOR PDPjs'<12><15>'ADAPTED FROM CODE BY PAUL NANKERVIS '<12><15><12><15> PROMPT: .ASCIZ 'BOOT> ' BADBOO: .ASCIZ 'UNKNOWN BOOT DEVICE'<12><15> PERMSG: .ASCIZ ' CLOCK TICKS'<12><15> diff --git a/apps/pdp11/boot/test/README.md b/apps/pdp11/boot/test/README.md new file mode 100644 index 0000000000..73db43d2c3 --- /dev/null +++ b/apps/pdp11/boot/test/README.md @@ -0,0 +1,489 @@ +--- +layout: page +title: PDP-11 Boot Test +permalink: /apps/pdp11/boot/test/ +redirect_from: + - /devices/pdp11/rom/test/ +--- + +PDP-11 Boot Test +---------------- + +[BOOTTEST.mac](BOOTTEST.mac) is based on [boot.mac](http://skn.noip.me/pdp11/boot.mac) written by [Paul Nankervis](mailto:paulnank@hotmail.com). + +[BOOTTEST.mac](BOOTTEST.mac) was cross-assembled with [MACRO11](https://github.com/shattered/macro11) to produce [BOOTTEST.lst](BOOTTEST.lst), +which was then processed by [FileDump](/modules/filedump/) to produce [BOOTTEST.json](BOOTTEST.json). + +To see the Boot Test in action, try the [PDP-11/70 Boot Test with Debugger](/devices/pdp11/machine/1170/test/debugger/). + +The source code is shown below. + + ; BOOT LOADER CODE + ; + ; REBASE HIGHER LINK/BOT:140000 + ; WANT PERFORMANCE COUNTER - CLOCK TICKS TO DO SOMETHING? + + PSW = 177776 + DL11XCSR = 177564 + DL11VEC = 64 + + KW11LKS = 177546 + KW11VEC = 100 + + .ASECT + .=140000 + START: RESET ; 140000 + CLR @#PSW + MOV #START,SP + CLR @#DL11XCSR ; CLEAR THE XCSR + MOV #BANNER,R0 + JSR PC,PRINT + MOV #CLKAST,@#KW11VEC + MOV #340,@#KW11VEC+2 + BIS #100,@#KW11LKS ; SET CLOCK TICKING + + MOV #PROMPT,R0 + JSR PC,PRINT + SUB #256,SP + MOV SP,R0 + JSR PC,INPUT + CLR R0 + 1$: WAIT + INC R0 + TST LGHTON + BEQ 1$ + MOV #054000,-(SP) ; SUPER PRIORITY 0 ALT REG + MOV LGHTON,-(SP) ; CALL SUPER LOOP START + RTI + + LGHTON: .WORD 0 + CLKTIC: .WORD 0 + + CLKAST: ; 140124 + INC CLKTIC + RTI + + ONECHR: + TSTB @#DL11XCSR ; 140132 + BPL ONECHR + MOVB R0,@#177566 + RTS PC + + PRTPTR: .WORD 0 ; 140146 + + PRINT: ; 140150 + BITB #100,@#DL11XCSR + BNE PRINT + MOV R0,PRTPTR + MOV #PRTAST,@#DL11VEC + MOV #200,@#DL11VEC+2 + BISB #100,@#DL11XCSR + RTS PC + + PRTAST: ; 140210 + TSTB @PRTPTR + BEQ 2$ + MOVB @PRTPTR,@#177566 + INC PRTPTR + RTI + 2$: CLRB @#177564 + RTI + + BUFFER: .WORD 0 ; INPUT BUFFER POINTER + LENGTH: .WORD 0 ; INPUT BUFFER LENGTH + + INPUT: + MOV R0,BUFFER ; 140244 + CLR LENGTH + MOV #INPAST,@#60 + MOV #200,@#62 + BISB #100,@#177560 + RTS PC + + INPAST: ; 140300 + MOV R0,-(SP) + MOVB @#177562,R0 + CMPB R0,#15 + BEQ 7$ ; CARRIAGE RETURN + CMPB R0,#127. + BEQ 2$ ; + CMPB R0,#10 + BNE 4$ ; BACK SPACE + 2$: TST LENGTH ; DATA IN BUFFER? + BEQ 3$ + DEC LENGTH ; LENGTH + MOV #DEL,R0 + JSR PC,PRINT + 3$: BR 9$ + 4$: CMPB R0,#40 + BLT 9$ ; BELOW SPACE + CMPB R0,#177 + BGE 9$ ; SKIP STUFF TOO BIG + JSR PC,ONECHR ; ECHO CHAR + CMPB R0,#172 + BGT 5$ ; ABOVE Z + CMPB R0,#141 + BLT 5$ ; BELOW A + BICB #40,R0 ; CONVERT TO UPPER CASE + 5$: CMP LENGTH,#254 + BGE 9$ + MOVB R0,-(SP) + MOV BUFFER,R0 + ADD LENGTH,R0 + MOVB (SP)+,(R0) + INC LENGTH + BR 9$ + + 7$: MOV BUFFER,R0 + ADD LENGTH,R0 + CLRB (R0) + MOV #CMD,@#240 ; CALL CMD AT PRIORITY 2 + MOV #100,@#242 + MOV #2000,@#177772 + 9$: MOV (SP)+,R0 + RTI + + CMD: ; 140506 + CLR @#177772 ; NO MORE PIR CALLS + MOV R0,-(SP) + MOV R1,-(SP) + MOV R2,-(SP) + MOV R3,-(SP) + MOV R4,-(SP) + MOV #EOL,R0 + JSR PC,PRINT + 1$: BITB #100,@#177564 + BNE 1$ + CLR R4 + MOV #CMDLST,R3 ; CMD LIST + 3$: MOVB (R3)+,R0 + BEQ 13$ + MOV BUFFER,R2 ; USER CMD + 4$: MOVB (R2)+,R1 + BEQ 15$ ; NULL COMMAND? + CMPB R1,#40 + BEQ 4$ ; SKIP SPACE + 5$: CMPB R0,R1 + BNE 7$ + MOVB (R3)+,R0 + BEQ 9$ + MOVB (R2)+,R1 + BEQ 9$ + CMPB R1,#40 + BNE 5$ + BR 9$ + 7$: MOVB (R3)+,R0 + BNE 7$ + INC R4 + BR 3$ + 9$: ASL R4 + JSR PC,@CMDTBL(R4) ; EXECUTE + BR 15$ + + 13$: MOV #UNKMSG,R0 + JSR PC,PRINT + + 15$: CLR LENGTH + MOV #PROMPT,R0 + JSR PC,PRINT + MOV (SP)+,R4 + MOV (SP)+,R3 + MOV (SP)+,R2 + MOV (SP)+,R1 + MOV (SP)+,R0 + RTI + + + CMDTBL: .WORD BOOT,HALT,TEST,LIGHTS,HELP + HLPMSG: .ASCIZ 'COMMANDS ARE BOOT, HALT, LIGHTS, TEST AND HELP'<15><12>'BOOT DEVICES ARE RK? RL? OR RP?'<15><12> + EOL: .BYTE 15,12,0 + DEL: .BYTE 10,40,10,0 + CMDLST: .ASCIZ 'BOOT' + .ASCIZ 'HALT' + .ASCIZ 'TEST' + .ASCIZ 'LIGHTS' + .ASCIZ 'HELP' + .BYTE 0 + UNKMSG: .ASCIZ 'UNKNOWN COMMAND'<12><15> + BANNER: .ASCIZ 'PAUL NANKERVIS - PAULNANK@HOTMAIL.COM'<12><15><12><15> + PROMPT: .ASCIZ 'BOOT> ' + BADBOO: .ASCIZ 'UNKNOWN BOOT DEVICE'<12><15> + PERMSG: .ASCIZ ' CLOCK TICKS'<12><15> + + .EVEN + + HELP: ; 141244 + MOV #HLPMSG,R0 + JSR PC,PRINT + RTS PC + + HALT: ; 141260 + HALT + MOV #EOL,R0 + JSR PC,PRINT + RTS PC + + TEST: ; 141272 + CLR CLKTIC + + MOV #15000,R5 + 10$: MOV R5,@#177570 ; DISPLAY + MOV R5,R4 + ASR R4 + 15$: CLR R0 + MOV R5,R1 + DIV R4,R0 + MOV R0,R2 + MUL R4,R2 + ADD R3,R1 + CMP R1,R5 + BEQ 20$ + HALT + 20$: SOB R4,15$ + SOB R5,10$ + + MOV #PERMSG+5,R0 + MOV CLKTIC,R3 + + 25$: CLR R2 ; 141350 + DIV #10,R2 + ADD #'0,R3 + MOVB R3,-(R0) + MOV R2,R3 + BNE 25$ + + JSR PC,PRINT + RTS PC + + + MMR0=177572 + MMR1=177574 + MMR2=177576 + MMR3=172516 + + LIGHTS: ; 141376 + MOV #77406,R3 ; DEFAULT PDR + CLR R2 + CLR R1 + MOV #8.,R0 + 1$: MOV R3,172300(R1) ; KERNEL I PDR + MOV R2,172340(R1) ; KERNEL I PAR + MOV R3,172320(R1) ; KERNEL D PDR + MOV R2,172360(R1) ; KERNEL D PAR + MOV R3,172200(R1) ; SUPER I PDR + MOV R2,172240(R1) ; SUPER I PAR + MOV R3,172220(R1) ; SUPER D PDR + MOV R2,172260(R1) ; SUPER D PAR + MOV R3,177600(R1) ; USER I PDR + MOV R2,177640(R1) ; USER I PAR + MOV R3,177620(R1) ; USER D PDR + MOV R3,177660(R1) ; USER D PAR + ADD #200,R2 + ADD #2,R1 + SOB R0,1$ + BIS #176000,@#172376 ; KERNEL D POINTS TO I/O SPACE + BIS #176000,@#172276 ; SUPER D POINTS TO I/O SPACE + BIS #176000,@#177676 ; USER D POINTS TO I/O SPACE + MOV #77,@#MMR3 ; 77 FOR 22 BIT + MOV #1,@#MMR0 + + MOV #1700,@#172244 ; BASE SUPER I (PAR 2) #40000 AT #170000 + MOV #1700,@#172264 ; BASE SUPER D (PAR 2) #40000 AT #170000 + MOV #010000,@#177776 ; SET PM TO SUPER + + MOV #40200,R3 ; SUPER CODE ADDRESS + MOV #SUPERS,R2 ; ADDRESS SUPER CODE + 10$: MOV (R2)+,-(SP) + MTPI (R3)+ + CMP R2,#SUPERE + BLO 10$ + + MOV #40200,LGHTON ; CHANGE IDLE TASK + RTS PC + + ; + ; TO BE COPIED TO SUPER #40200 AT PHYSICAL #170000 + ; #40000 TO #40200 FOR WAIT & JMP INSTRUCTIONS + ; + SUPERS: ; 141616 + MOV #37,R0 ; LOAD PATTERN + MOV #174000,R1 + BIT #1,@#177570 + BEQ 10$ + MOV #7417,R0 + MOV R0,R1 + COM R1 + BIT #2,@#177570 + BEQ 10$ + MOV #36163,R0 + MOV #37000,R1 + 10$: MOV R1,R2 + SUB #2,R2 + BIC #1,R2 ; WAIT ADDRESS + MOV R2,R3 + BIC #177701,R3 ; ADDRESS OFFSET + MOV #0000001,40000(R3) ; WRITE WAIT + ADD #2,R3 + MOV #0000113,40000(R3) ; WRITE JMP (R3) + + MOV R2,R4 + ASH #-6,R4 + BIC #177600,R4 + MOV #1700,R5 + SUB R4,R5 ; PAR ADDRESS BASE FOR WAIT + MOV R2,R4 + ASH #-12.,R4 + BIC #177761,R4 ; PAR SELECT OFFSET + MOV R5,172240(R4) ; SUPER I SPACE + + MOV R1,R3 + ASH #-12.,R3 + BIC #177761,R3 ; PAR SELECT OFFSET + CMP R3,R4 ; SAME PAR + BEQ 30$ + MOV R1,R4 + ASH #-6,R4 + BIC #177600,R4 + MOV #1700,R5 + SUB R4,R5 ; PAR ADDRESS BASE FOR JMP + MOV R5,172240(R3) ; SUPER I SPACE + 30$: + MOV #3,R4 + ADD @#177570,R4 + MOV #2,R3 + ADD PC,R3 + 40$: JMP (R2) + SOB R4,40$ + MOV R0,R2 + ROR R2 ; ROTATE PATTERN + ROL R1 + ROR R0 + BR 10$ + SUPERE: + + BOOT: ; 142062 + CLR R3 ; UNIT + 1$: MOVB (R2)+,R1 + BEQ BOOTRK ; DEFAULT DEVICE IS RK0 + CMPB R1,#40 + BEQ 1$ + CMPB R1,#'R + BEQ 5$ + + MOV #BADBOO,R0 + JSR PC,PRINT + RTS PC + + 5$: MOVB (R2)+,R1 ; HOPEFULLY K, L OR P + 7$: MOVB (R2)+,R0 ; DIGIT + BEQ 9$ + CMPB R0,#40 + BEQ 9$ + CMPB R0,#'7 + BGT 11$ + SUB #'0,R0 + BLT 11$ + ASL R3 + ASL R3 + ASL R3 + BIS R0,R3 ; PUT DIGIT INTO UNIT + BR 7$ + 9$: CLR R2 + MOV #137,(R2)+ + MOV #START,(R2)+ + MOV #START,(R2)+ + CLR (R2)+ + CMPB R1,#'K + BEQ BOOTRK + CMPB R1,#'L + BEQ BOOTRL + CMPB R1,#'P + BEQ BOOTRP + + 11$: MOV #UNKMSG,R0 + JSR PC,PRINT + RTS PC + + RLCS=174400 + BOOTRL: ; 142234 + RESET + SWAB R3 ; UNIT NUMBER + MOV #RLCS,R1 ; CSR + MOV #13,4(R1) ; CLR ERR + BIS #4,R3 ; UNIT+GSTAT + MOV R3,(R1) ; ISSUE CMD + TSTB (R1) ; WAIT + BPL .-2 + CLRB R3 + BIS #10,R3 ; UNIT+RDHDR + MOV R3,(R1) ; ISSUE CMD + TSTB (R1) ; WAIT + BPL .-2 + MOV 6(R1),R2 ; GET HDR + BIC #77,R2 ; CLR SECTOR + INC R2 ; MAGIC BIT + MOV R2,4(R1) ; SEEK TO 0 + CLRB R3 + BIS #6,R3 ; UNIT+SEEK + MOV R3,(R1) ; ISSUE CMD + TSTB (R1) ; WAIT + BPL .-2 + CLR 2(R1) ; CLR BA + CLR 4(R1) ; CLR DA + MOV #-512.,6(R1) ; SET WC + CLRB R3 + BIS #14,R3 ; UNIT+READ + MOV R3,(R1) ; ISSUE CMD + TSTB (R1) ; WAIT + BPL .-2 + BIC #377,(R1) + CLR R2 + CLR R3 + CLR R4 + CLR R5 + CLR PC + + RKDA=177412 + READGO=5 + BOOTRK: + RESET ; 142402 + SWAB R3 ; UNIT NUMBER + ASL R3 + ASL R3 + ASL R3 + ASL R3 + ASL R3 + MOV #RKDA,R1 ; CSR + MOV R3,(R1) ; LOAD DA + CLR -(R1) ; CLEAR BA + MOV #-256.*2,-(R1) ; LOAD WC + MOV #READGO,-(R1) ; READ & GO + CLR R2 + CLR R3 + CLR R4 + CLR R5 + TSTB (R1) + BPL .-2 + CLRB (R1) + CLR PC + + RPCSR=0176700 + BOOTRP: ; 142460 + RESET + MOV #RPCSR, R1 + MOV #0000040, 10(R1) ; RESET + MOV R3, 10(R1) ; SET UNIT + MOV #0000021, (R1) ; PACK ACK + MOV #0010000, 32(R1) ; 16B MODE + MOV #-512., 2(R1) ; SET WC + CLR 4(R1) ; CLR BA + CLR 6(R1) ; CLR DA + CLR 34(R1) ; CLR CYL + MOV #0000071, (R1) ; READ + TSTB (R1) ; WAIT + BPL .-2 + CLRB (R1) + MOV R3,R0 + CLR PC + + .END START diff --git a/apps/pdp11/boot/test/makefile b/apps/pdp11/boot/test/makefile new file mode 100644 index 0000000000..6d6b10b83a --- /dev/null +++ b/apps/pdp11/boot/test/makefile @@ -0,0 +1,11 @@ +# +# Don't have macro11? Make yourself a copy from https://github.com/shattered/macro11 +# + +all: BOOTTEST.json + +BOOTTEST.lst: BOOTTEST.mac + macro11 BOOTTEST.mac -l BOOTTEST.lst + +BOOTTEST.json: BOOTTEST.lst + node ../../../../modules/filedump/bin/filedump --file=BOOTTEST.lst --format=octal --output=BOOTTEST.json --overwrite diff --git a/apps/pdp11/tapes/README.md b/apps/pdp11/tapes/README.md new file mode 100644 index 0000000000..b1af34d923 --- /dev/null +++ b/apps/pdp11/tapes/README.md @@ -0,0 +1,25 @@ +--- +layout: page +title: DEC PDP-11 Tape Images +permalink: /apps/pdp11/tapes/ +--- + +DEC PDP-11 Tape Images +---------------------- + +We have archived the following DEC PDP-11 Tapes: + +- [Absolute Loader](absloader/) +- [BASIC (Single User)](basic/) + +To make it easy for PDPjs machines to load these tapes, we created the following High-Speed +Paper Tape Reader (PC11) configurations: + +- [demo.xml](/devices/pdp11/pc11/demo.xml) + +which is typically instantiated by a Machine XML file using: + + + +These configuration files create UI controls that allow you to choose from a set of tapes that are automatically sent +to the machine's PC11 device. diff --git a/apps/pdp11/tapes/absloader/DEC-11-L2PC-PO.json b/apps/pdp11/tapes/absloader/DEC-11-L2PC-PO.json new file mode 100644 index 0000000000..6b5f2ad510 --- /dev/null +++ b/apps/pdp11/tapes/absloader/DEC-11-L2PC-PO.json @@ -0,0 +1,14 @@ +{"words":[ +0xE9E9 /*164751*/,0x3DE9 /*036751*/,0x0000 /*000000*/,0x11C6 /*010706*/,0x29A6 /*024646*/,0x11C5 /*010705*/,0x65C5 /*062705*/,0x004A /*000112*/, +0x0A01 /*005001*/,0x17CE /*013716*/,0xFF78 /*177570*/,0x0C0E /*006016*/,0x8702 /*103402*/,0x0A0E /*005016*/,0x0103 /*000403*/,0x0CCE /*006316*/, +0x0201 /*001001*/,0x104E /*010116*/,0x0A00 /*005000*/,0x09CD /*004715*/,0x8AC3 /*105303*/,0x02FC /*001374*/,0x09CD /*004715*/,0x09F7 /*004767*/, +0x003C /*000074*/,0x1102 /*010402*/,0xE5C2 /*162702*/,0x0004 /*000004*/,0x25C2 /*022702*/,0x0002 /*000002*/,0x0321 /*001441*/,0x09F7 /*004767*/, +0x002C /*000054*/,0x6384 /*061604*/,0x1101 /*010401*/,0x09CD /*004715*/,0x0404 /*002004*/,0x8BC0 /*105700*/,0x03EB /*001753*/,0x0000 /*000000*/, +0x01E9 /*000751*/,0x90D1 /*110321*/,0x01F8 /*000770*/,0x1DC3 /*016703*/,0x006A /*000152*/,0x8A8B /*105213*/,0x8BCB /*105713*/,0x80FE /*100376*/, +0x9CC3 /*116303*/,0x0002 /*000002*/,0x60C0 /*060300*/,0x45C3 /*042703*/,0xFF00 /*177400*/,0x0AC2 /*005302*/,0x0087 /*000207*/,0x15B7 /*012667*/, +0x0026 /*000046*/,0x09CD /*004715*/,0x10C4 /*010304*/,0x09CD /*004715*/,0x00C3 /*000303*/,0x50C4 /*050304*/,0x1DC7 /*016707*/,0x0018 /*000030*/, +0x09F7 /*004767*/,0xFFEA /*177752*/,0x09CD /*004715*/,0x8BC0 /*105700*/,0x02E2 /*001342*/,0x0C84 /*006204*/,0x8602 /*103002*/,0x0000 /*000000*/, +0x01C0 /*000700*/,0x0CC4 /*006304*/,0x6384 /*061604*/,0x004C /*000114*/,0x0000 /*000000*/,0x15F7 /*012767*/,0x00EA /*000352*/,0x0010 /*000020*/, +0x15F7 /*012767*/,0x01F5 /*000765*/,0x001C /*000034*/,0x0077 /*000167*/,0xFF5A /*177532*/,0x1DC1 /*016701*/,0x0016 /*000026*/,0x15C2 /*012702*/, +0xEBFB /*165773*/,0x0000 /*000000*/,0x0000 /*000000*/] +} \ No newline at end of file diff --git a/apps/pdp11/tapes/absloader/README.md b/apps/pdp11/tapes/absloader/README.md new file mode 100644 index 0000000000..cedbefa901 --- /dev/null +++ b/apps/pdp11/tapes/absloader/README.md @@ -0,0 +1,19 @@ +--- +layout: page +title: DEC PDP-11 Absolute Loader +permalink: /apps/pdp11/tapes/absloader/ +--- + +DEC PDP-11 Absolute Loader +-------------------------- + +The Absolute Loader is a special tape image that must be loaded in order to load *other* tapes +which use the Absolute Loader format. + +To see the Absolute Loader in action, start with the [Bootstrap Loader Demo](/devices/pdp11/machine/1120/bootstrap/debugger/). + +PCjs has archived the following DEC resources: + +- [Absolute Loader](DEC-11-L2PC-PO.json) +- [LISTING OF PDP-11 ABSOLUTE LOADER (June 1975)](http://archive.pcjs.org/pubs/dec/pdp11/other/DEC-11-UABLA-A-LA_PDP-11AbsoluteLoaderListing_Jun75.pdf) +- "APPENDIX D: THE BOOTSTRAP AND ABSOLUTE LOADERS" from the [PDP-11 BASIC PROGRAMMING MANUAL (December 1970)](http://archive.pcjs.org/pubs/dec/pdp11/basic/DEC-11-AJPB-D_PDP-11_BASIC_Programming_Manual_Dec70.pdf) diff --git a/apps/pdp11/tapes/basic/DEC-11-AJPB-PB.json b/apps/pdp11/tapes/basic/DEC-11-AJPB-PB.json new file mode 100644 index 0000000000..2024937e2f --- /dev/null +++ b/apps/pdp11/tapes/basic/DEC-11-AJPB-PB.json @@ -0,0 +1,639 @@ +{"words":[ +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0001 /*000001*/,0x0008 /*000010*/,0x0022 /*000042*/, +0x4107 /*040407*/,0x018D /*000615*/,0x2600 /*023000*/,0x0000 /*000000*/,0x7700 /*073400*/,0x2000 /*020000*/,0x0606 /*003006*/,0x0000 /*000000*/, +0x0A00 /*005000*/,0x0000 /*000000*/,0x0E00 /*007000*/,0x0000 /*000000*/,0x1200 /*011000*/,0x0000 /*000000*/,0x1600 /*013000*/,0x0000 /*000000*/, +0x1A00 /*015000*/,0x0000 /*000000*/,0x4000 /*040000*/,0x0000 /*000000*/,0x9C00 /*116000*/,0x0001 /*000001*/,0x000E /*000016*/,0x0028 /*000050*/, +0x002E /*000056*/,0x005F /*000137*/,0x002E /*000056*/,0x8935 /*104465*/,0x0150 /*000520*/,0x1600 /*013000*/,0x3000 /*030000*/,0x5E00 /*057000*/, +0x0002 /*000002*/,0x3600 /*033000*/,0x0000 /*000000*/,0x3A00 /*035000*/,0x0000 /*000000*/,0x3E00 /*037000*/,0x0000 /*000000*/,0xAB00 /*125400*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x0040 /*000100*/,0x13B6 /*011666*/,0x0002 /*000002*/,0xE5CE /*162716*/,0x0002 /*000002*/,0x17A6 /*013646*/, +0x0C8E /*006216*/,0x8704 /*103404*/,0x0CCE /*006316*/,0x65CE /*062716*/,0x77AC /*073654*/,0x1787 /*013607*/,0x45CE /*042716*/,0xFF80 /*177600*/, +0x1582 /*012602*/,0x2097 /*020227*/,0x0040 /*000100*/,0x0609 /*003011*/,0x0A37 /*005067*/,0x1756 /*013526*/,0x15F7 /*012767*/,0x0001 /*000001*/, +0x1754 /*013524*/,0x1DC6 /*016706*/,0x0123 /*000443*/,0x3400 /*032000*/,0x6E00 /*067000*/,0x5A00 /*055000*/,0xE617 /*163027*/,0x5215 /*051025*/, +0x6608 /*063010*/,0x8110 /*100420*/,0xC010 /*140020*/,0x9B15 /*115425*/,0x6600 /*063000*/,0x0A10 /*005020*/,0x0289 /*001211*/,0xC089 /*140211*/, +0x9615 /*113025*/,0x3600 /*033000*/,0x0489 /*002211*/,0x0289 /*001211*/,0xD689 /*153211*/,0x010B /*000413*/,0x4E02 /*047002*/,0x8189 /*100611*/, +0x8715 /*103425*/,0x4500 /*042400*/,0x5252 /*051122*/,0x524F /*051117*/,0xC820 /*144040*/,0x0001 /*000001*/,0x0015 /*000025*/,0x009C /*000234*/, +0x2020 /*020040*/,0x2020 /*020040*/,0x2020 /*020040*/,0x5441 /*052101*/,0x4C20 /*046040*/,0x4E49 /*047111*/,0x2045 /*020105*/,0x9100 /*110400*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x00AC /*000254*/,0x013E /*000476*/,0x017C /*000574*/,0x04CA /*002312*/,0x103C /*010074*/,0x1320 /*011440*/, +0x1346 /*011506*/,0x1376 /*011566*/,0x13EA /*011752*/,0x148E /*012216*/,0x1522 /*012442*/,0x1540 /*012500*/,0x1568 /*012550*/,0x15FE /*012776*/, +0x16C8 /*013310*/,0x16D4 /*013324*/,0x1676 /*013166*/,0x173E /*013476*/,0x1738 /*013470*/,0x19A6 /*014646*/,0x19E4 /*014744*/,0x19B6 /*014666*/, +0x195E /*014536*/,0x16EC /*013354*/,0x017D /*000575*/,0x3400 /*032000*/,0xDA00 /*155000*/,0xB200 /*131000*/,0x0E19 /*007031*/,0xFE1C /*177034*/, +0x1E13 /*017023*/,0x8614 /*103024*/,0x1801 /*014001*/,0x9401 /*112001*/,0xAE02 /*127002*/,0x9003 /*110003*/,0xA403 /*122003*/,0xA601 /*123001*/, +0x5603 /*053003*/,0x0804 /*004004*/,0x9E04 /*117004*/,0xE002 /*160002*/,0x1E02 /*017002*/,0xAE03 /*127003*/,0x8802 /*104002*/,0x5E03 /*057003*/, +0xFA03 /*175003*/,0xD403 /*152003*/,0xE603 /*163003*/,0x6404 /*062004*/,0x2604 /*023004*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0108 /*000410*/, +0x04F2 /*002362*/,0x097C /*004574*/,0x0500 /*002400*/,0x050C /*002414*/,0x0C08 /*006010*/,0x02C2 /*001302*/,0x02D2 /*001322*/,0x1E0A /*017012*/, +0x2097 /*020227*/,0x0030 /*000060*/,0x050D /*002415*/,0x2097 /*020227*/,0x0039 /*000071*/,0x0602 /*003002*/,0x00B4 /*000264*/,0x0087 /*000207*/, +0x2097 /*020227*/,0x0041 /*000101*/,0x0505 /*002405*/,0x2097 /*020227*/,0x005A /*000132*/,0x0602 /*003002*/,0x00AF /*000257*/,0x0167 /*000547*/, +0x3400 /*032000*/,0x3600 /*033000*/,0x8701 /*103401*/,0xAF00 /*127400*/,0xB200 /*131000*/,0x8700 /*103400*/,0x6600 /*063000*/,0xC110 /*140420*/, +0x7415 /*072025*/,0xF7FF /*173777*/,0x760B /*073013*/,0x0316 /*001426*/,0xC103 /*140403*/,0x781D /*074035*/,0x0E16 /*007026*/,0xB701 /*133401*/, +0x660A /*063012*/,0xD716 /*153426*/,0x622D /*061055*/,0x4816 /*044026*/,0x0500 /*002400*/,0xA607 /*123007*/,0x2610 /*023020*/,0x0210 /*001020*/, +0x8089 /*100211*/,0x3E15 /*037025*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0164 /*000544*/,0x1582 /*012602*/,0x0BF7 /*005767*/,0x1656 /*013126*/, +0x0306 /*001406*/,0x0AB7 /*005267*/,0x1658 /*013130*/,0x8BC9 /*105711*/,0x80FC /*100374*/,0x90B1 /*110261*/,0x0002 /*000002*/,0x1581 /*012601*/, +0x0087 /*000207*/,0x15F7 /*012767*/,0xFFFE /*177776*/,0x1638 /*013070*/,0x15C0 /*012700*/,0x0843 /*004103*/,0x9402 /*112002*/,0x03F8 /*001770*/, +0x8900 /*104400*/,0x01FC /*000774*/,0x0BF7 /*005767*/,0x162A /*013052*/,0x0129 /*000451*/,0x3400 /*032000*/,0x9200 /*111000*/,0x0A01 /*005001*/, +0xC302 /*141402*/,0x6025 /*060045*/,0x0517 /*002427*/,0xC286 /*141206*/,0x5C15 /*056025*/,0x0000 /*000000*/,0xC389 /*141611*/,0x020A /*001012*/, +0xC301 /*141401*/,0x6015 /*060025*/,0xF717 /*173427*/,0x100B /*010013*/,0x1F16 /*017426*/,0x3703 /*033403*/,0x0E0A /*007012*/,0xC216 /*141026*/, +0x0E1D /*007035*/,0x9716 /*113426*/,0x7020 /*070040*/,0x02FF /*001377*/,0x3702 /*033402*/,0xB00A /*130012*/,0x9DFD /*116775*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x01C0 /*000700*/,0x8A8A /*105212*/,0x0AB7 /*005267*/,0x1602 /*013002*/,0x0BCA /*005712*/,0x8142 /*100502*/,0x8BCA /*105712*/, +0x80FA /*100372*/,0x1C82 /*016202*/,0x0002 /*000002*/,0x03EA /*001752*/,0x45C2 /*042702*/,0xFF80 /*177600*/,0xA097 /*120227*/,0x0010 /*000020*/, +0x032F /*001457*/,0xA5C2 /*122702*/,0x000D /*000015*/,0x0209 /*001011*/,0x8902 /*104402*/,0x15C2 /*012702*/,0x000A /*000012*/,0x010F /*000417*/, +0x0A37 /*005067*/,0x01EE /*000756*/,0x3400 /*032000*/,0xEE00 /*167000*/,0x8001 /*100001*/,0xC2FD /*141375*/,0x7015 /*070025*/,0xE6FF /*163377*/, +0xC201 /*141001*/,0x7FA5 /*077645*/,0xC900 /*144400*/,0xC203 /*141003*/,0x60A5 /*060245*/,0x2500 /*022400*/,0xC207 /*141007*/,0x15A5 /*012645*/, +0x1200 /*011000*/,0x0003 /*000003*/,0x9389 /*111611*/,0x9790 /*113620*/,0x0AA0 /*005240*/,0x0400 /*002000*/,0xD703 /*153403*/,0xAF20 /*127440*/, +0xC817 /*144027*/,0x1987 /*014607*/,0xC189 /*140611*/,0x8415 /*102025*/,0x0001 /*000001*/,0x0034 /*000064*/,0x021C /*001034*/,0x1760 /*013540*/, +0x15F7 /*012767*/,0x0001 /*000001*/,0x159C /*012634*/,0x55F7 /*052767*/,0x0040 /*000100*/,0xFD46 /*176506*/,0x0087 /*000207*/,0x95C2 /*112702*/, +0x005E /*000136*/,0x8900 /*104400*/,0x95C2 /*112702*/,0x0055 /*000125*/,0x8900 /*104400*/,0x8902 /*104402*/,0x01B4 /*000664*/,0x15F7 /*012767*/, +0x0040 /*000100*/,0xFD2E /*176456*/,0x0A26 /*005046*/,0x15E6 /*012746*/,0x062E /*003056*/,0x10A6 /*010246*/,0x01E3 /*000743*/,0x3400 /*032000*/, +0x4A00 /*045000*/,0x1302 /*011402*/,0x0701 /*003401*/,0x3789 /*033611*/,0x6A0A /*065012*/,0xF715 /*173425*/,0x0115 /*000425*/,0x6800 /*064000*/, +0xD615 /*153025*/,0x770B /*073413*/,0xEC00 /*166000*/,0xA603 /*123003*/,0xC210 /*141020*/,0x0E9D /*007235*/,0xC2FD /*141375*/,0x8045 /*100105*/, +0x97FF /*113777*/,0x10A0 /*010240*/,0x0200 /*001000*/,0x8203 /*101003*/,0x0215 /*001025*/,0xE600 /*163000*/,0x4A1D /*045035*/,0xF715 /*173425*/, +0x5115 /*050425*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0278 /*001170*/,0x0001 /*000001*/,0x1544 /*012504*/,0x15C2 /*012702*/,0x005E /*000136*/, +0x8900 /*104400*/,0x15C2 /*012702*/,0x0050 /*000120*/,0x8900 /*104400*/,0x15B7 /*012667*/,0x1534 /*012464*/,0x15F7 /*012767*/,0x0001 /*000001*/, +0x1530 /*012460*/,0x01ED /*000755*/,0x9442 /*112102*/,0xA5C2 /*122702*/,0x0020 /*000040*/,0x03FC /*001774*/,0x0087 /*000207*/,0xA257 /*121127*/, +0x003A /*000072*/,0x0304 /*001404*/,0xA457 /*122127*/,0x011C /*000434*/,0x3400 /*032000*/,0xA600 /*123000*/,0x0A02 /*005002*/,0xFA00 /*175000*/, +0xC102 /*140402*/,0x870A /*103412*/,0x3700 /*033400*/,0x060A /*003012*/,0xF715 /*173425*/,0x000B /*000013*/,0x0415 /*002025*/,0xC503 /*142403*/, +0xFA1D /*175035*/,0x3714 /*033424*/,0xF60A /*173012*/,0x8714 /*103424*/,0x4A00 /*045000*/,0x0089 /*000211*/,0x4A0A /*045012*/,0x4089 /*040211*/, +0x4A11 /*045021*/,0x4A89 /*045211*/,0x4A89 /*045211*/,0x8789 /*103611*/,0x8000 /*100000*/,0xFE10 /*177020*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x02D4 /*001324*/,0x894A /*104512*/,0x10C0 /*010300*/,0x894A /*104512*/,0x1100 /*010400*/,0x894A /*104512*/,0x0087 /*000207*/,0x1126 /*010446*/, +0x1144 /*010504*/,0x65C4 /*062704*/,0x0014 /*000024*/,0x2106 /*020406*/,0x860C /*103014*/,0x0BF7 /*005767*/,0x14C6 /*012306*/,0x0206 /*001006*/, +0x1177 /*010567*/,0x14C0 /*012300*/,0x0A85 /*005205*/,0x0C85 /*006205*/,0x00A1 /*000241*/,0x0CC5 /*006305*/,0x1015 /*010025*/,0x1584 /*012604*/, +0x0102 /*000402*/,0x3400 /*032000*/,0x0200 /*001000*/,0x8703 /*103403*/,0x0100 /*000400*/,0xC089 /*140211*/,0x8012 /*100022*/,0x0443 /*002103*/, +0x1320 /*011440*/,0xC003 /*140003*/,0xFF45 /*177505*/,0xC01F /*140037*/,0x0025 /*000045*/,0x1240 /*011100*/,0xC302 /*141402*/,0x1065 /*010145*/, +0x0600 /*003000*/,0xC301 /*141401*/,0x0C0B /*006013*/,0x4603 /*043003*/,0xEF21 /*167441*/,0x6686 /*063206*/,0x2610 /*023020*/,0xC610 /*143020*/, +0xEB20 /*165440*/,0xC586 /*142606*/,0xAA20 /*125040*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0330 /*001460*/,0x87EA /*103752*/,0x0A03 /*005003*/, +0x1580 /*012600*/,0x1581 /*012601*/,0x0BC3 /*005703*/,0x0087 /*000207*/,0x0605 /*003005*/,0x65C3 /*062703*/,0x0002 /*000002*/,0x65C3 /*062703*/, +0x0004 /*000004*/,0x01F1 /*000761*/,0x0BC0 /*005700*/,0x0302 /*001402*/,0x0BD3 /*005723*/,0x01ED /*000755*/,0x9CC0 /*116300*/,0x0002 /*000002*/, +0x9CC1 /*116301*/,0x0003 /*000003*/,0x8952 /*104522*/,0x6003 /*060003*/,0x01F2 /*000762*/,0x01BC /*000674*/,0x3400 /*032000*/,0x5E00 /*057000*/, +0xC003 /*140003*/,0x0045 /*000105*/,0xC1FF /*140777*/,0x0045 /*000105*/,0x80FF /*100377*/,0x810A /*100412*/,0x260A /*023012*/,0xE611 /*163021*/, +0x0E10 /*007020*/,0x8389 /*101611*/,0x8415 /*102025*/,0xC115 /*140425*/,0x060B /*003013*/,0x1702 /*013402*/,0x0020 /*000040*/,0x0324 /*001444*/, +0x5886 /*054206*/,0xAF89 /*127611*/,0x8700 /*103400*/,0xB200 /*131000*/,0x8700 /*103400*/,0xC100 /*140400*/,0x4210 /*041020*/,0x2C10 /*026020*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x038C /*001614*/,0x6101 /*060401*/,0x0104 /*000404*/,0x894E /*104516*/,0x1043 /*010103*/,0x1042 /*010102*/, +0x8942 /*104502*/,0x2045 /*020105*/,0x8602 /*103002*/,0x9453 /*112123*/,0x01FC /*000774*/,0x10C5 /*010305*/,0x1081 /*010201*/,0x0087 /*000207*/, +0xA457 /*122127*/,0x000A /*000012*/,0x02FD /*001375*/,0x0087 /*000207*/,0x1DC1 /*016701*/,0x1400 /*012000*/,0x8942 /*104502*/,0x2045 /*020105*/, +0x860B /*103013*/,0x1026 /*010046*/,0x015C /*000534*/,0x3400 /*032000*/,0xBA00 /*135000*/,0x6603 /*063003*/,0x0810 /*004020*/,0x8189 /*100611*/, +0x0215 /*001025*/,0x8010 /*100020*/,0x0215 /*001025*/,0x0220 /*001040*/,0xF403 /*172003*/,0xAF06 /*127406*/,0x8700 /*103400*/,0xAF00 /*127400*/, +0xB200 /*131000*/,0x8700 /*103400*/,0x3A00 /*035000*/,0x3889 /*034211*/,0x0E89 /*007211*/,0x0D03 /*006403*/,0xC285 /*141205*/,0xC045 /*140105*/, +0x84FF /*102377*/,0xC410 /*142020*/,0x8400 /*102000*/,0x840C /*102014*/,0x260C /*023014*/,0x0001 /*000001*/,0x0034 /*000064*/,0x03E8 /*001750*/, +0x893A /*104472*/,0x8938 /*104470*/,0x0202 /*001002*/,0x5084 /*050204*/,0x893A /*104472*/,0x00AF /*000257*/,0x0087 /*000207*/,0x00B2 /*000262*/, +0x0087 /*000207*/,0x0BC0 /*005700*/,0x05E6 /*002746*/,0x2017 /*020027*/,0x00FF /*000377*/,0x06E3 /*003343*/,0x00B4 /*000264*/,0x0087 /*000207*/, +0x893A /*104472*/,0x8938 /*104470*/,0x020D /*001015*/,0x0AC1 /*005301*/,0x8908 /*104410*/,0x1026 /*010046*/,0x893A /*104472*/,0x015A /*000532*/, +0x3400 /*032000*/,0x1600 /*013000*/,0xC204 /*141004*/,0x2C25 /*026045*/,0x0800 /*004000*/,0x0802 /*004002*/,0xC089 /*140211*/,0x050B /*002413*/, +0x0403 /*002003*/,0x8310 /*101420*/,0x8715 /*103425*/,0x2600 /*023000*/,0xF50A /*172412*/,0x0401 /*002001*/,0xFA0A /*175012*/,0xF701 /*173401*/, +0x0115 /*000425*/,0x8800 /*104000*/,0x7713 /*073423*/,0xE600 /*163000*/,0xF700 /*173400*/,0x0115 /*000425*/,0x7C00 /*076000*/,0xC513 /*142423*/, +0x6E1D /*067035*/,0xCA13 /*145023*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0444 /*002104*/,0x0A85 /*005205*/,0x0A37 /*005067*/,0x136C /*011554*/, +0x0A37 /*005067*/,0x1374 /*011564*/,0x0A37 /*005067*/,0x135E /*011536*/,0x0077 /*000167*/,0x019C /*000634*/,0x1144 /*010504*/,0x6004 /*060004*/, +0x1183 /*010603*/,0xE5C3 /*162703*/,0x0038 /*000070*/,0x20C4 /*020304*/,0x0087 /*000207*/,0x10E6 /*010346*/,0x895E /*104536*/,0x851F /*102437*/, +0xA257 /*121127*/,0x002C /*000054*/,0x0221 /*001041*/,0x09F7 /*004767*/,0x0145 /*000505*/,0x3400 /*032000*/,0x7200 /*071000*/,0x4204 /*041004*/, +0x3A00 /*035000*/,0x2689 /*023211*/,0x5E10 /*057020*/,0x1B89 /*015611*/,0x2084 /*020204*/,0x1A89 /*015211*/,0x8281 /*101201*/,0x8415 /*102025*/, +0x001F /*000037*/,0xC400 /*142000*/,0x0045 /*000105*/,0x04FF /*002377*/,0x1320 /*011440*/,0x6606 /*063006*/,0x8110 /*100420*/,0x2610 /*023020*/, +0x0010 /*000020*/,0x8011 /*100021*/,0x0E0A /*007012*/,0x8089 /*100211*/,0x5865 /*054145*/,0x8189 /*100611*/,0x0615 /*003025*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x04A0 /*002240*/,0x6380 /*061600*/,0x0BD0 /*005720*/,0x1583 /*012603*/,0x0087 /*000207*/,0x09F7 /*004767*/,0x000A /*000012*/, +0x1002 /*010002*/,0x0A00 /*005000*/,0x01E8 /*000750*/,0x890B /*104413*/,0x890D /*104415*/,0x8920 /*104440*/,0x81FD /*100775*/,0x1F84 /*017604*/, +0x0002 /*000002*/,0x00C4 /*000304*/,0x45C4 /*042704*/,0xFF00 /*177400*/,0x2004 /*020004*/,0x06F6 /*003366*/,0x0087 /*000207*/,0xE5C6 /*162706*/, +0x0008 /*000010*/,0x011F /*000437*/,0x3400 /*032000*/,0xCE00 /*147000*/,0x8004 /*100004*/,0xC111 /*140421*/,0xDC1D /*156035*/,0x0A12 /*005022*/, +0x8089 /*100211*/,0xD011 /*150021*/,0x360B /*033013*/,0x078A /*003612*/,0x3600 /*033000*/,0xC689 /*143211*/,0x0865 /*004145*/,0x8700 /*103400*/, +0xA100 /*120400*/,0xC000 /*140000*/,0x260C /*023014*/,0xC010 /*140020*/,0x800C /*100014*/,0x8765 /*103545*/,0xC300 /*141400*/,0xC01D /*140035*/, +0x8312 /*101422*/,0x830A /*101412*/,0xA10C /*120414*/,0x1300 /*011400*/,0x0001 /*000001*/,0x0034 /*000064*/,0x04FC /*002374*/,0x0CC3 /*006303*/, +0x0087 /*000207*/,0x893A /*104472*/,0x1084 /*010204*/,0x00C4 /*000304*/,0x893A /*104472*/,0x5084 /*050204*/,0x0087 /*000207*/,0x10E6 /*010346*/, +0x10A6 /*010246*/,0x1DA6 /*016646*/,0x0004 /*000004*/,0x1136 /*010466*/,0x0006 /*000006*/,0x2146 /*020506*/,0x8601 /*103001*/,0x0087 /*000207*/, +0x8901 /*104401*/,0x894E /*104516*/,0x8946 /*104506*/,0x10C0 /*010300*/,0x0230 /*001060*/,0x1DC3 /*016703*/,0x01F5 /*000765*/,0x3400 /*032000*/, +0x2A00 /*025000*/,0x8605 /*103005*/,0xC412 /*142022*/,0x320B /*031013*/,0x4402 /*042002*/,0xF711 /*173421*/,0x8C0B /*106013*/,0x3E12 /*037022*/, +0xC202 /*141002*/,0x9794 /*113624*/,0x60A0 /*060240*/,0x1100 /*010400*/,0xC205 /*141005*/,0x60E5 /*060345*/,0xC000 /*140000*/,0x9615 /*113025*/, +0x8107 /*100407*/,0xC110 /*140420*/,0x040A /*002012*/,0x1705 /*013405*/,0x24A4 /*022244*/,0xFD00 /*176400*/,0xFA02 /*175002*/,0x0201 /*001001*/, +0x7C94 /*076224*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0558 /*002530*/,0xA097 /*120227*/,0x0024 /*000044*/,0x03EA /*001752*/,0x8900 /*104400*/, +0x01FA /*000772*/,0xA097 /*120227*/,0x000A /*000012*/,0x0302 /*001402*/,0x8900 /*104400*/,0x01E3 /*000743*/,0x8902 /*104402*/,0x20C4 /*020304*/, +0x87E0 /*103740*/,0x0BF7 /*005767*/,0x1248 /*011110*/,0x0306 /*001406*/,0x0A02 /*005002*/,0x15C1 /*012701*/,0x0040 /*000100*/,0x8900 /*104400*/, +0x0AC1 /*005301*/,0x02FD /*001375*/,0x0077 /*000167*/,0x01C8 /*000710*/,0x3400 /*032000*/,0x8600 /*103000*/,0xBE05 /*137005*/,0x2600 /*023000*/, +0x3C11 /*036021*/,0x8489 /*102211*/,0x4515 /*042425*/,0xCB20 /*145440*/,0x4382 /*041602*/,0x0010 /*000020*/,0x0721 /*003441*/,0x0007 /*000007*/, +0xE611 /*163021*/,0x3C10 /*036020*/,0x0689 /*003211*/,0x8302 /*101402*/,0x4515 /*042425*/,0xC520 /*142440*/,0x4282 /*041202*/,0x4489 /*042211*/, +0xC310 /*141420*/,0x8301 /*101401*/,0x4515 /*042425*/,0xBF20 /*137440*/,0xFA82 /*175202*/,0x8501 /*102401*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x05B4 /*002664*/,0x0077 /*000167*/,0x0076 /*000166*/,0x894E /*104516*/,0x8946 /*104506*/,0x1DC1 /*016701*/,0x11F2 /*010762*/,0x0BC4 /*005704*/, +0x0201 /*001001*/,0x10C4 /*010304*/,0x1126 /*010446*/,0x10E6 /*010346*/,0x8942 /*104502*/,0x2045 /*020105*/,0x860A /*103012*/,0x1066 /*010146*/, +0x8908 /*104410*/,0x1581 /*012601*/,0x200E /*020016*/,0x05F8 /*002770*/,0x2036 /*020066*/,0x0002 /*000002*/,0x0602 /*003002*/,0x893E /*104476*/, +0x011C /*000434*/,0x3400 /*032000*/,0xE200 /*161000*/,0xF405 /*172005*/,0x9601 /*113001*/,0x3125 /*030445*/,0x4E01 /*047001*/,0x3C89 /*036211*/, +0x0B89 /*005611*/,0x3E02 /*037002*/,0x0989 /*004611*/,0xF701 /*173401*/,0x9E09 /*117011*/,0xC2FC /*141374*/,0x3AA5 /*035245*/,0x5000 /*050000*/, +0xC203 /*141003*/,0x0AA5 /*005245*/,0x0100 /*000400*/,0x0703 /*003403*/,0xF789 /*173611*/,0xAC0B /*126013*/,0x2511 /*022421*/,0xF703 /*173403*/, +0xA80B /*124013*/,0x0311 /*001421*/,0x4D03 /*046403*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0610 /*003020*/,0x2077 /*020167*/,0x11A2 /*010642*/, +0x0101 /*000401*/,0x2045 /*020105*/,0x864C /*103114*/,0x09F7 /*004767*/,0x0D02 /*006402*/,0x1037 /*010067*/,0x118E /*010616*/,0x013C /*000474*/, +0x1DC5 /*016705*/,0x118A /*010612*/,0x0A85 /*005205*/,0x0A37 /*005067*/,0x1188 /*010610*/,0x1DC6 /*016706*/,0x1198 /*010630*/,0x0A37 /*005067*/, +0x1186 /*010606*/,0x0A37 /*005067*/,0x1188 /*010610*/,0x0A37 /*005067*/,0x1172 /*010562*/,0x0118 /*000430*/,0x3400 /*032000*/,0x3E00 /*037000*/, +0xF706 /*173406*/,0x0115 /*000425*/,0x7C00 /*076000*/,0x0211 /*001021*/,0x3789 /*033611*/,0x740A /*072012*/,0x3711 /*033421*/,0x660A /*063012*/, +0xC011 /*140021*/,0x3E15 /*037025*/,0x3608 /*033010*/,0x3789 /*033611*/,0x6A0A /*065012*/,0x4011 /*040021*/,0x3A89 /*035211*/,0x9789 /*113611*/, +0x0A20 /*005040*/,0xF900 /*174400*/,0xC103 /*140403*/,0x6015 /*060025*/,0x0817 /*004027*/,0x5789 /*053611*/,0x0AA2 /*005242*/,0x2400 /*022000*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x066C /*003154*/,0x03BD /*001675*/,0x1043 /*010103*/,0x15C0 /*012700*/,0x0796 /*003626*/,0x0A02 /*005002*/, +0xA4D7 /*122327*/,0x0020 /*000040*/,0x03FD /*001775*/,0xA8D0 /*124320*/,0x0205 /*001005*/,0x0A83 /*005203*/,0xA217 /*121027*/,0x0024 /*000044*/, +0x0318 /*001430*/,0x01F6 /*000766*/,0xA417 /*122027*/,0x0024 /*000044*/,0x02FD /*001375*/,0xA217 /*121027*/,0x0024 /*000044*/,0x0310 /*001420*/, +0x1043 /*010103*/,0x0A82 /*005202*/,0x0185 /*000605*/,0x3400 /*032000*/,0x9A00 /*115000*/,0xED06 /*166406*/,0xF701 /*173401*/,0x220B /*021013*/, +0xC611 /*143021*/,0xF702 /*173402*/,0xEE09 /*167011*/,0xC2FB /*141373*/,0x60E5 /*060345*/,0x0500 /*002400*/,0xC281 /*141201*/,0x7A0C /*075014*/, +0x1000 /*010000*/,0x7708 /*073410*/,0x9000 /*110000*/,0x0301 /*001401*/,0xC289 /*141211*/,0x6065 /*060145*/,0x9100 /*110400*/,0x4490 /*042220*/, +0xD110 /*150420*/,0xD792 /*153622*/,0x0AA4 /*005244*/,0xFC00 /*176000*/,0xF402 /*172002*/,0x0001 /*000001*/,0x0034 /*000064*/,0x06C8 /*003310*/, +0xA097 /*120227*/,0x0063 /*000143*/,0x0335 /*001465*/,0x2097 /*020227*/,0x006D /*000155*/,0x021D /*001035*/,0x1101 /*010401*/,0x893A /*104472*/, +0xA097 /*120227*/,0x0054 /*000124*/,0x0212 /*001022*/,0x893A /*104472*/,0xA097 /*120227*/,0x0048 /*000110*/,0x020E /*001016*/,0x893A /*104472*/, +0xA097 /*120227*/,0x0045 /*000105*/,0x020A /*001012*/,0x893A /*104472*/,0xA097 /*120227*/,0x004E /*000116*/,0x0206 /*001006*/,0x0187 /*000607*/, +0x3400 /*032000*/,0xF600 /*173000*/,0x3A06 /*035006*/,0xC189 /*140611*/,0x440A /*042012*/,0x3810 /*034020*/,0x0789 /*003611*/,0xB603 /*133003*/, +0x9701 /*113401*/,0x0AA0 /*005240*/,0x1800 /*014000*/,0x9703 /*113403*/,0x3AA0 /*035240*/,0xE400 /*162000*/,0x0102 /*000402*/,0x5711 /*053421*/, +0x22A2 /*021242*/,0x0800 /*004000*/,0x5703 /*053403*/,0x3AA4 /*035244*/,0xED00 /*166400*/,0x5703 /*053403*/,0x0AA8 /*005250*/,0x0A00 /*005000*/, +0x8103 /*100403*/,0xBA0A /*135012*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0724 /*003444*/,0x01F5 /*000765*/,0x0A81 /*005201*/,0xA257 /*121127*/, +0x0022 /*000042*/,0x03FA /*001772*/,0xA257 /*121127*/,0x000A /*000012*/,0x02F9 /*001371*/,0x8933 /*104463*/,0x0A81 /*005201*/,0x1043 /*010103*/, +0x15C1 /*012701*/,0x1760 /*013540*/,0x893A /*104472*/,0x8938 /*104470*/,0x0302 /*001402*/,0x0AC1 /*005301*/,0x01AA /*000652*/,0x894E /*104516*/, +0x15C1 /*012701*/,0x1760 /*013540*/,0xE043 /*160103*/,0x10E6 /*010346*/,0x01E6 /*000746*/,0x3400 /*032000*/,0x5200 /*051000*/,0x0807 /*004007*/, +0xC089 /*140211*/,0x1E0B /*017013*/,0x1703 /*013403*/,0xFF20 /*177440*/,0x1B1F /*015437*/,0x3C06 /*036006*/,0x0189 /*000611*/,0x3E02 /*037002*/, +0x8389 /*101611*/,0x4E15 /*047025*/,0xC089 /*140211*/,0x4410 /*042020*/,0x0389 /*001611*/,0x0186 /*000606*/,0x0589 /*002611*/,0x0860 /*004140*/, +0x4501 /*042401*/,0xFC20 /*176040*/,0x4286 /*041206*/,0x0511 /*002421*/,0x4460 /*042140*/,0xA411 /*122021*/,0x3398 /*031630*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x0780 /*003600*/,0x2042 /*020102*/,0x83FD /*101775*/,0x15C2 /*012702*/,0x1760 /*013540*/,0x9291 /*111221*/,0xA497 /*122227*/, +0x000A /*000012*/,0x02FC /*001374*/,0x0077 /*000167*/,0xFE70 /*177160*/,0x8921 /*104441*/,0x494C /*044514*/,0x5453 /*052123*/,0x4C24 /*046044*/, +0x5445 /*052105*/,0x5224 /*051044*/,0x4145 /*040505*/,0x2444 /*022104*/,0x4552 /*042522*/,0x244D /*022115*/,0x5552 /*052522*/,0x244E /*022116*/, +0x4552 /*042522*/,0x01BE /*000676*/,0x3400 /*032000*/,0xAE00 /*127000*/,0x5307 /*051407*/,0x4F54 /*047524*/,0x4552 /*042522*/,0x5224 /*051044*/, +0x5445 /*052105*/,0x5255 /*051125*/,0x244E /*022116*/,0x4144 /*040504*/,0x4154 /*040524*/,0x4424 /*042044*/,0x4D49 /*046511*/,0x4424 /*042044*/, +0x4C45 /*046105*/,0x5445 /*052105*/,0x2445 /*022105*/,0x5250 /*051120*/,0x4E49 /*047111*/,0x2454 /*022124*/,0x4F47 /*047507*/,0x5553 /*052523*/, +0x2442 /*022102*/,0x4F47 /*047507*/,0x4F54 /*047524*/,0x9C24 /*116044*/,0x0001 /*000001*/,0x0034 /*000064*/,0x07DC /*003734*/,0x4649 /*043111*/, +0x4624 /*043044*/,0x524F /*051117*/,0x4E24 /*047044*/,0x5845 /*054105*/,0x2454 /*022124*/,0x4E49 /*047111*/,0x5550 /*052520*/,0x2454 /*022124*/, +0x4153 /*040523*/,0x4556 /*042526*/,0x5324 /*051444*/,0x4F54 /*047524*/,0x2450 /*022120*/,0x4E45 /*047105*/,0x2444 /*022104*/,0x4544 /*042504*/, +0x2446 /*022106*/,0x4C4F /*046117*/,0x2444 /*022104*/,0x4152 /*040522*/,0x444E /*042116*/,0x4D4F /*046517*/,0x01A4 /*000644*/,0x0B00 /*005400*/, +0x0A00 /*005000*/,0x4908 /*044410*/,0x455A /*042532*/,0x2424 /*022044*/,0x01B2 /*000662*/,0x3400 /*032000*/,0x1000 /*010000*/,0x2008 /*020010*/, +0x3805 /*034005*/,0x680C /*064014*/,0xD40E /*152016*/,0x680C /*064014*/,0xA008 /*120010*/,0xA608 /*123010*/,0xD408 /*152010*/,0xDA0C /*155014*/, +0xB808 /*134010*/,0x1805 /*014005*/,0x840D /*102015*/,0x8E08 /*107010*/,0x6008 /*060010*/,0xC20C /*141014*/,0x900E /*110016*/,0xB00F /*130017*/, +0x300D /*030015*/,0x4604 /*043004*/,0x4608 /*043010*/,0x3C08 /*036010*/,0x3A09 /*035011*/,0x2C04 /*026004*/,0x4110 /*040420*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x083E /*004076*/,0x4552 /*042522*/,0x4441 /*042101*/,0x0D59 /*006531*/,0x000A /*000012*/,0x8902 /*104402*/,0x15C0 /*012700*/, +0x085A /*004132*/,0x8936 /*104466*/,0x8904 /*104404*/,0x8902 /*104402*/,0x0A37 /*005067*/,0x0F5A /*007532*/,0x0077 /*000167*/,0xFDF0 /*176760*/, +0x5453 /*052123*/,0x504F /*050117*/,0x4120 /*040440*/,0x2054 /*020124*/,0x494C /*044514*/,0x454E /*042516*/,0x0020 /*000040*/,0x894E /*104516*/, +0x0A37 /*005067*/,0x01D7 /*000727*/,0x3400 /*032000*/,0x6C00 /*066000*/,0x4208 /*041010*/,0xC10F /*140417*/,0x401D /*040035*/,0x810F /*100417*/, +0xF70A /*173412*/,0x4715 /*043425*/,0xAE17 /*127027*/,0xF707 /*173407*/,0x0115 /*000425*/,0x3400 /*032000*/,0x770F /*073417*/,0x8000 /*100000*/, +0xC0FD /*140375*/,0x281D /*024035*/,0xC00F /*140017*/,0x0055 /*000125*/,0x4A20 /*045040*/,0x0889 /*004211*/,0x3C89 /*036211*/,0x0589 /*002611*/, +0xF702 /*173402*/,0x0115 /*000425*/,0x1A00 /*015000*/,0x3C0F /*036017*/,0x0001 /*000001*/,0x0034 /*000064*/,0x089A /*004232*/,0x0077 /*000167*/, +0xFD7C /*176574*/,0x8905 /*104405*/,0x0A37 /*005067*/,0x0F14 /*007424*/,0x0147 /*000507*/,0x0A26 /*005046*/,0x15C4 /*012704*/,0x2000 /*020000*/, +0x895C /*104534*/,0x0314 /*001424*/,0x15C0 /*012700*/,0x1FFF /*017777*/,0x894C /*104514*/,0x0303 /*001403*/,0x10CE /*010316*/,0x0BD3 /*005723*/, +0x01FB /*000773*/,0x1583 /*012603*/,0x030B /*001413*/,0x12C0 /*011300*/,0x4100 /*040400*/,0x0A80 /*005200*/,0x0111 /*000421*/,0x3400 /*032000*/, +0xC800 /*144000*/,0xC408 /*142010*/,0x0215 /*001025*/,0x5000 /*050000*/,0x1789 /*013611*/,0x0120 /*000440*/,0xBF00 /*137400*/,0x3C03 /*036003*/, +0xDE89 /*157211*/,0x0901 /*004401*/,0x6489 /*062211*/,0x1789 /*013611*/,0x2D85 /*026605*/,0x2602 /*023002*/,0x3A11 /*035021*/,0x9789 /*113611*/, +0x2820 /*024040*/,0x1100 /*010400*/,0x0802 /*004002*/,0x5489 /*052211*/,0x0E89 /*007211*/,0x2602 /*023002*/,0xCE10 /*147020*/,0x3A00 /*035000*/, +0x2E89 /*027211*/,0x0001 /*000001*/,0x0034 /*000064*/,0x08F6 /*004366*/,0xA097 /*120227*/,0x002C /*000054*/,0x0205 /*001005*/,0x8908 /*104410*/, +0x8954 /*104524*/,0x0205 /*001005*/,0x500E /*050016*/,0x893A /*104472*/,0x2097 /*020227*/,0x0029 /*000051*/,0x0301 /*001401*/,0x891B /*104433*/, +0x1582 /*012602*/,0x1580 /*012600*/,0x1066 /*010146*/,0x894A /*104512*/,0x1080 /*010200*/,0x894A /*104512*/,0x1081 /*010201*/,0x00C1 /*000301*/, +0x8952 /*104522*/,0x850B /*102413*/,0x8944 /*104504*/,0x01E3 /*000743*/,0x3400 /*032000*/,0x2400 /*022000*/,0x0909 /*004411*/,0x0587 /*002607*/, +0x8160 /*100540*/,0x3A15 /*035025*/,0x9789 /*113611*/,0x2C20 /*026040*/,0xD400 /*152000*/,0xC103 /*140403*/,0x770A /*073412*/,0xBA00 /*135000*/, +0x1DFC /*016774*/,0x2389 /*021611*/,0x6089 /*060211*/,0x1789 /*013611*/,0x4E21 /*047041*/,0x1B46 /*015506*/,0x3A02 /*035002*/,0x3889 /*034211*/, +0x1889 /*014211*/,0x1703 /*013403*/,0xC285 /*141205*/,0x0055 /*000125*/,0x8060 /*100140*/,0x3810 /*034020*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x0952 /*004522*/,0x894A /*104512*/,0x893A /*104472*/,0x2097 /*020227*/,0x0028 /*000050*/,0x020F /*001017*/,0x8956 /*104526*/,0x850D /*102415*/, +0x1100 /*010400*/,0x894A /*104512*/,0x2097 /*020227*/,0x0029 /*000051*/,0x0208 /*001010*/,0x893A /*104472*/,0x2097 /*020227*/,0x003D /*000075*/, +0x0204 /*001004*/,0x1040 /*010100*/,0x894A /*104512*/,0x8948 /*104510*/,0x01DD /*000735*/,0x891F /*104437*/,0x0A00 /*005000*/,0x894A /*104512*/, +0x0197 /*000627*/,0x3400 /*032000*/,0x8000 /*100000*/,0xE609 /*163011*/,0xFF15 /*177425*/,0x44FF /*042377*/,0x7189 /*070611*/,0x3A87 /*035207*/, +0x9789 /*113611*/,0x2B20 /*025440*/,0x0800 /*004000*/,0x9703 /*113403*/,0x2D20 /*026440*/,0x0600 /*003000*/,0x8002 /*100002*/,0x0210 /*001020*/, +0x030A /*001412*/,0x040A /*002012*/,0x080A /*004012*/,0x3A01 /*035001*/,0x9789 /*113611*/,0x2820 /*024040*/,0x0700 /*003400*/,0x2602 /*023002*/, +0xB50A /*132412*/,0xFE0A /*177012*/,0x91FF /*110777*/,0x0001 /*000001*/,0x0034 /*000064*/,0x09AE /*004656*/,0x01EA /*000752*/,0x8962 /*104542*/, +0x1026 /*010046*/,0x01F5 /*000765*/,0x0AC1 /*005301*/,0x1966 /*014546*/,0x09F7 /*004767*/,0x00C2 /*000302*/,0x1595 /*012625*/,0x10A6 /*010246*/, +0x893A /*104472*/,0x15C0 /*012700*/,0x0A73 /*005163*/,0xA802 /*124002*/,0x0307 /*001407*/,0x2017 /*020027*/,0x0A6D /*005155*/,0x82FB /*101373*/, +0x0A00 /*005000*/,0x0AC1 /*005301*/,0x1582 /*012602*/,0x0102 /*000402*/,0x1080 /*010200*/,0x01B3 /*000663*/,0x3400 /*032000*/,0xDC00 /*156000*/, +0xFC09 /*176011*/,0xCE01 /*147001*/,0x2F0B /*027413*/,0x6607 /*063007*/,0xC110 /*140420*/,0x7315 /*071425*/,0x400A /*040012*/,0xFEA8 /*177250*/, +0x8102 /*100402*/,0x550C /*052414*/,0xC110 /*140420*/,0x7315 /*071425*/,0x760A /*073012*/,0x02A8 /*001250*/,0xFD00 /*176400*/,0x8102 /*100402*/, +0x550C /*052414*/,0x8110 /*100420*/,0x6515 /*062425*/,0xD629 /*153051*/,0x1505 /*012405*/,0xC010 /*140020*/,0x7315 /*071425*/,0x5D0A /*056412*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x0A0A /*005012*/,0xA80E /*124016*/,0x02FE /*001376*/,0xE5C0 /*162700*/,0x0A6E /*005156*/,0x0CC0 /*006300*/, +0x65C0 /*062700*/,0x0A74 /*005164*/,0x1015 /*010025*/,0x0BD6 /*005726*/,0x1180 /*010600*/,0x8962 /*104542*/,0x1066 /*010146*/,0x1181 /*010601*/, +0x0BD1 /*005721*/,0x1942 /*014502*/,0x1966 /*014546*/,0x09FA /*004772*/,0x0000 /*000000*/,0x1580 /*012600*/,0x1581 /*012601*/,0x65C6 /*062706*/, +0x0006 /*000006*/,0x1582 /*012602*/,0x013F /*000477*/,0x3400 /*032000*/,0x3800 /*034000*/,0x830A /*101412*/,0x8415 /*102025*/,0xCE15 /*147025*/, +0xD10B /*150413*/,0x1706 /*013406*/,0x2920 /*024440*/,0x0800 /*004000*/,0xC003 /*140003*/,0xB30B /*131413*/,0xE506 /*162406*/,0x030B /*001413*/, +0xD602 /*153002*/,0xAF0B /*127413*/,0x8700 /*103400*/,0x0F00 /*007400*/,0xE589 /*162611*/,0x030B /*001413*/,0xD602 /*153002*/,0xB20B /*131013*/, +0x8700 /*103400*/,0xCE00 /*147000*/,0xFB0B /*175413*/,0xD605 /*153005*/,0x4C0B /*046013*/,0x0001 /*000001*/,0x0013 /*000023*/,0x0A66 /*005146*/, +0x0AD5 /*005325*/,0x01AB /*000653*/,0x8901 /*104401*/,0x2900 /*024400*/,0x2D2B /*026453*/,0x2F2A /*027452*/,0x2F5E /*027536*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x0A74 /*005164*/,0x148E /*012216*/,0x1522 /*012442*/,0x15FE /*012776*/,0x1568 /*012550*/,0x17CC /*013714*/,0x8937 /*104467*/, +0x1066 /*010146*/,0x893A /*104472*/,0x8938 /*104470*/,0x850F /*102417*/,0x0212 /*001022*/,0x1581 /*012601*/,0xE5C6 /*162706*/,0x0006 /*000006*/, +0x1180 /*010600*/,0x8906 /*104406*/,0x85F4 /*102764*/,0x1582 /*012602*/,0x1583 /*012603*/,0x1584 /*012604*/,0x0087 /*000207*/,0x1402 /*012002*/, +0x1403 /*012003*/,0x0143 /*000503*/,0x3400 /*032000*/,0xA200 /*121000*/,0x040A /*002012*/,0x8714 /*103424*/,0x9700 /*113400*/,0x2E20 /*027040*/, +0xEF00 /*167400*/,0x3903 /*034403*/,0x9701 /*113401*/,0x4620 /*043040*/,0x3B00 /*035400*/,0xE603 /*163003*/,0xC015 /*140025*/,0x82FF /*101377*/, +0x8043 /*100103*/,0x5810 /*054020*/,0x5889 /*054211*/,0x3A89 /*035211*/,0x3889 /*034211*/,0x2C89 /*026211*/,0x2B85 /*025605*/,0x8203 /*101003*/, +0x8043 /*100103*/,0x5860 /*054140*/,0x5889 /*054211*/,0x9989 /*114611*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0AD0 /*005320*/,0x893A /*104472*/, +0x8938 /*104470*/,0x8524 /*102444*/,0x0323 /*001443*/,0x4582 /*042602*/,0x6080 /*060200*/,0x15C3 /*012703*/,0x0BDC /*005734*/,0x24C0 /*022300*/, +0x0304 /*001404*/,0x20D7 /*020327*/,0x0BF2 /*005762*/,0x87FB /*103773*/,0x016A /*000552*/,0x893A /*104472*/,0x2097 /*020227*/,0x0028 /*000050*/, +0x0266 /*001146*/,0x1CE6 /*016346*/,0x0014 /*000024*/,0x895E /*104536*/,0x8413 /*102023*/,0x1580 /*012600*/,0x0139 /*000471*/,0x3400 /*032000*/, +0xFE00 /*177000*/,0x620A /*061012*/,0x0289 /*001211*/,0x8010 /*100020*/,0x6611 /*063021*/,0x0110 /*000420*/,0xC610 /*143020*/,0x06E5 /*003345*/, +0x8000 /*100000*/,0xCA11 /*145021*/,0x8209 /*101011*/,0x8315 /*101425*/,0x8415 /*102025*/,0x8115 /*100425*/,0xC615 /*143025*/,0x0865 /*004145*/, +0x8700 /*103400*/,0xD600 /*153000*/,0x4F0B /*047413*/,0x9701 /*113401*/,0x8423 /*102043*/,0x1E1E /*017036*/,0xE902 /*164402*/,0x3A01 /*035001*/, +0x2789 /*023611*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0B2C /*005454*/,0x2097 /*020227*/,0x004E /*000116*/,0x0247 /*001107*/,0x893A /*104472*/, +0x8938 /*104470*/,0x8544 /*102504*/,0x0343 /*001503*/,0x895C /*104534*/,0x0347 /*001507*/,0x0A00 /*005000*/,0x55C2 /*052702*/,0x6000 /*060000*/, +0x1084 /*010204*/,0x894C /*104514*/,0x033B /*001473*/,0x0BD3 /*005723*/,0x14C4 /*012304*/,0x14E6 /*012346*/,0x895C /*104534*/,0x894C /*104514*/, +0x0217 /*001027*/,0x893A /*104472*/,0x2097 /*020227*/,0x015F /*000537*/,0x3400 /*032000*/,0x5A00 /*055000*/,0x280B /*024013*/,0xE000 /*160000*/, +0x2602 /*023002*/,0x5E11 /*057021*/,0x0189 /*000611*/,0x0F85 /*007605*/,0x8089 /*100211*/,0x6615 /*063025*/,0x4A11 /*045021*/,0x0089 /*000211*/, +0x4A0A /*045012*/,0x6889 /*064211*/,0x6689 /*063211*/,0x8110 /*100420*/,0x041D /*002035*/,0x5E00 /*057000*/,0xF489 /*172211*/,0x8185 /*100605*/, +0x8515 /*102425*/,0x9615 /*113025*/,0x8725 /*103445*/,0xD300 /*151400*/,0x8024 /*100044*/,0xFD15 /*176425*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x0B88 /*005610*/,0x14E6 /*012346*/,0x14E6 /*012346*/,0x14E6 /*012346*/,0x10E6 /*010346*/,0x1026 /*010046*/,0x893A /*104472*/,0x2097 /*020227*/, +0x0028 /*000050*/,0x021E /*001036*/,0x895E /*104536*/,0x84E3 /*102343*/,0x1040 /*010100*/,0x1D81 /*016601*/,0x0002 /*000002*/,0x1121 /*010441*/, +0x10E1 /*010341*/,0x10A1 /*010241*/,0x1581 /*012601*/,0x1026 /*010046*/,0x895E /*104536*/,0x85D9 /*102731*/,0x1581 /*012601*/,0x1580 /*012600*/, +0x010E /*000416*/,0x3400 /*032000*/,0xB600 /*133000*/,0xA00B /*120013*/,0xA015 /*120025*/,0xA015 /*120025*/,0xD615 /*153025*/,0x870B /*103413*/, +0x8100 /*100400*/,0x6415 /*062025*/,0x0389 /*001611*/,0x0285 /*001205*/,0x7703 /*073403*/,0xD200 /*151000*/,0xF7FE /*173776*/,0x0289 /*001211*/, +0x030A /*001412*/,0x040A /*002012*/,0x870A /*103412*/,0xC600 /*143000*/,0x0A65 /*005145*/,0xF200 /*171000*/,0x8201 /*101001*/,0x5F61 /*057541*/, +0xEE11 /*167021*/,0xC007 /*140007*/,0xB21C /*131034*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0BE4 /*005744*/,0x3EE3 /*037343*/,0x056B /*002553*/, +0x62A6 /*061246*/,0x2F9C /*027634*/,0x5D1C /*056434*/,0x613A /*060472*/,0x1CB6 /*016266*/,0x1A10 /*015020*/,0x1A72 /*015162*/,0x1AB0 /*015260*/, +0x18B0 /*014260*/,0x17F4 /*013764*/,0x1538 /*012470*/,0x1BA2 /*015642*/,0x16FA /*013372*/,0x1004 /*010004*/,0x1552 /*012522*/,0x1E84 /*017204*/, +0x8956 /*104526*/,0x8512 /*102422*/,0x0AC1 /*005301*/,0x0A00 /*005000*/,0x895C /*104534*/,0x01D8 /*000730*/,0x3400 /*032000*/,0x1200 /*011000*/, +0x0D0C /*006414*/,0x4C03 /*046003*/,0x0B89 /*005611*/,0x9703 /*113403*/,0xDC23 /*156043*/,0x0B08 /*005410*/,0xD303 /*151403*/,0x570B /*053413*/, +0x28A2 /*024242*/,0x0600 /*003000*/,0x8102 /*100402*/,0x260A /*023012*/,0x5A11 /*055021*/,0x8489 /*102211*/,0xC015 /*140025*/,0x870B /*103413*/, +0xD300 /*151400*/,0xC00B /*140013*/,0x8710 /*103420*/,0x6400 /*062000*/,0x1089 /*010211*/,0x0285 /*001205*/,0x0002 /*000002*/,0xAB11 /*125421*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x0C40 /*006100*/,0x8966 /*104546*/,0x1026 /*010046*/,0x893A /*104472*/,0x2097 /*020227*/,0x003D /*000075*/, +0x0208 /*001010*/,0x895E /*104536*/,0x8507 /*102407*/,0x1580 /*012600*/,0x1090 /*010220*/,0x10D0 /*010320*/,0x1110 /*010420*/,0x0077 /*000167*/, +0xF996 /*174626*/,0x8911 /*104421*/,0x890F /*104417*/,0x895E /*104536*/,0x85FD /*102775*/,0x8962 /*104542*/,0x8960 /*104540*/,0x2097 /*020227*/, +0x003E /*000076*/,0x0305 /*001405*/,0x017E /*000576*/,0x3400 /*032000*/,0x6E00 /*067000*/,0x970C /*113414*/,0x3D20 /*036440*/,0x0200 /*001000*/, +0xC103 /*140403*/,0x040A /*002012*/,0xC28A /*141212*/,0xA815 /*124025*/,0x120C /*011014*/,0x0421 /*002041*/,0x9703 /*113403*/,0xB420 /*132040*/, +0xFB0C /*175414*/,0x1387 /*011607*/,0xC289 /*141211*/,0x5665 /*053145*/,0xC2F3 /*141363*/,0xC20C /*141014*/,0xB465 /*132145*/,0xA60C /*123014*/, +0x5E10 /*057020*/,0xE389 /*161611*/,0x6685 /*063205*/,0x8110 /*100420*/,0x7311 /*071421*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0C9C /*006234*/, +0x2451 /*022121*/,0x8962 /*104542*/,0x1180 /*010600*/,0x891C /*104434*/,0x007E /*000176*/,0x0008 /*000010*/,0x3C3E /*036076*/,0x3C3D /*036075*/, +0x3C00 /*036000*/,0x3E3D /*037075*/,0x3E00 /*037000*/,0x3D00 /*036400*/,0x0213 /*001023*/,0x0109 /*000411*/,0x0711 /*003421*/,0x0107 /*000407*/, +0x050F /*002417*/,0x0105 /*000405*/,0x040D /*002015*/,0x0103 /*000403*/,0x060B /*003013*/,0x0101 /*000401*/,0x0309 /*001411*/,0x0155 /*000525*/, +0x3400 /*032000*/,0xCA00 /*145000*/,0xC60C /*143014*/,0x0665 /*003145*/,0x8100 /*100400*/,0xC615 /*143025*/,0x0865 /*004145*/,0x4200 /*041000*/, +0xC189 /*140611*/,0x770A /*073412*/,0x1600 /*013000*/,0xC6F9 /*143371*/,0x0665 /*003145*/,0x8100 /*100400*/,0xC615 /*143025*/,0x0865 /*004145*/, +0x6000 /*060000*/,0x1789 /*013611*/,0x4821 /*044041*/,0x0D54 /*006524*/,0x6002 /*060002*/,0x1789 /*013611*/,0x4E21 /*047041*/,0x1045 /*010105*/, +0x3A02 /*035002*/,0x9089 /*110211*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0CF8 /*006370*/,0x0AC1 /*005301*/,0x8938 /*104470*/,0x8503 /*102403*/, +0x020B /*001013*/,0x0077 /*000167*/,0xFB8A /*175612*/,0x0077 /*000167*/,0xF994 /*174624*/,0x2117 /*020427*/,0x474F /*043517*/,0x0204 /*001004*/, +0x8960 /*104540*/,0x2117 /*020427*/,0x544F /*052117*/,0x03F5 /*001765*/,0x8915 /*104425*/,0x0A26 /*005046*/,0x15C0 /*012700*/,0x001C /*000034*/, +0x8944 /*104504*/,0x8746 /*103506*/,0x893A /*104472*/,0xA097 /*120227*/,0x01C3 /*000703*/,0x3400 /*032000*/,0x2600 /*023000*/,0x2C0D /*026015*/, +0x1C00 /*016000*/,0x9703 /*113403*/,0x3BA0 /*035640*/,0x2A00 /*025000*/,0x9703 /*113403*/,0x22A0 /*021240*/,0x2B00 /*025400*/,0x9703 /*113403*/, +0x3AA0 /*035240*/,0x3300 /*031400*/,0x9703 /*113403*/,0x0AA0 /*005240*/,0x3000 /*030000*/,0xCE03 /*147003*/,0x220B /*021013*/,0xC105 /*140405*/, +0x5E0A /*057012*/,0x1F89 /*017611*/,0x6685 /*063205*/,0xF710 /*173420*/,0x7C09 /*076011*/,0x8004 /*100004*/,0x2F11 /*027421*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x0D54 /*006524*/,0x8936 /*104466*/,0x65C6 /*062706*/,0x0014 /*000024*/,0x1581 /*012601*/,0x15CE /*012716*/,0xFFFF /*177777*/, +0x01DC /*000734*/,0x1DC0 /*016700*/,0x0A54 /*005124*/,0x2017 /*020027*/,0x0038 /*000070*/,0x0502 /*002402*/,0x8902 /*104402*/,0x010A /*000412*/, +0x0B00 /*005400*/,0x0603 /*003003*/,0x65C0 /*062700*/,0x000E /*000016*/,0x01FC /*000774*/,0x95C2 /*112702*/,0x0020 /*000040*/,0x8900 /*104400*/, +0x0AC0 /*005300*/,0x01C3 /*000703*/,0x3400 /*032000*/,0x8200 /*101000*/,0xFD0D /*176415*/,0xCE06 /*147006*/,0x0115 /*000425*/,0xC800 /*144000*/, +0x1701 /*013401*/,0x4289 /*041211*/,0x0094 /*000224*/,0x5789 /*053611*/,0x0AA2 /*005242*/,0xFA00 /*175000*/,0x5703 /*053403*/,0x22A2 /*021242*/, +0xF800 /*174000*/,0x8102 /*100402*/,0x0E0A /*007012*/,0xBC0A /*136012*/,0xD601 /*153001*/,0x010B /*000413*/,0x0206 /*001006*/,0xC189 /*140611*/, +0x770A /*073412*/,0x4400 /*042000*/,0x01F8 /*000770*/,0x9D89 /*116611*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0DB0 /*006660*/,0x0A26 /*005046*/, +0x09F7 /*004767*/,0x0080 /*000200*/,0x8401 /*102001*/,0x8925 /*104445*/,0x0A26 /*005046*/,0x1066 /*010146*/,0x15C2 /*012702*/,0x003F /*000077*/, +0x8900 /*104400*/,0x8940 /*104500*/,0x09F7 /*004767*/,0x002A /*000052*/,0x8512 /*102422*/,0x060D /*003015*/,0x050E /*002416*/,0x1581 /*012601*/, +0x0BD6 /*005726*/,0x0BD6 /*005726*/,0x02FE /*001376*/,0x0AC1 /*005301*/,0x0BF7 /*005767*/,0x09D6 /*004726*/,0x0132 /*000462*/,0x3400 /*032000*/, +0xDE00 /*157000*/,0x020D /*001015*/,0xC902 /*144402*/,0x0A95 /*005225*/,0x7700 /*073400*/,0x0A00 /*005000*/,0xF5F8 /*172770*/,0xE989 /*164611*/, +0xF301 /*171401*/,0xE789 /*163611*/,0xF101 /*170401*/,0xE589 /*162611*/,0x8401 /*102001*/,0x1411 /*012021*/,0xD425 /*152045*/,0xD40B /*152013*/, +0xFE0B /*177013*/,0xE402 /*162002*/,0x000B /*000013*/,0x1519 /*012431*/,0x2603 /*023003*/,0x0611 /*003021*/,0x1489 /*012211*/,0x8485 /*102205*/, +0x2B15 /*025425*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0E0C /*007014*/,0xA257 /*121127*/,0x002C /*000054*/,0x0308 /*001410*/,0xA257 /*121127*/, +0x003A /*000072*/,0x0307 /*001407*/,0xA257 /*121127*/,0x000A /*000012*/,0x0304 /*001404*/,0x00B2 /*000262*/,0x0087 /*000207*/,0x0A81 /*005201*/, +0x01ED /*000755*/,0x1900 /*014400*/,0x03FB /*001773*/,0x00B8 /*000270*/,0x0087 /*000207*/,0x00AF /*000257*/,0x0087 /*000207*/,0x0BD6 /*005726*/, +0x01F4 /*000764*/,0x8964 /*104544*/,0x8514 /*102424*/,0x01A0 /*000640*/,0x3400 /*032000*/,0x3A00 /*035000*/,0x020E /*001016*/,0x0002 /*000002*/, +0x6611 /*063021*/,0x8289 /*101211*/,0x2615 /*023025*/,0xC010 /*140020*/,0x0415 /*002025*/,0x4400 /*042000*/,0x0D89 /*006611*/,0xA687 /*123207*/, +0x3A10 /*035020*/,0x9789 /*113611*/,0x2CA0 /*026240*/,0xF000 /*170000*/,0x9703 /*113403*/,0x3AA0 /*035240*/,0x0400 /*002000*/,0x9703 /*113403*/, +0x0AA0 /*005240*/,0x0100 /*000400*/,0xB203 /*131003*/,0x8700 /*103400*/,0x0100 /*000400*/,0x2989 /*024611*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x0E68 /*007150*/,0x15E6 /*012746*/,0x0001 /*000001*/,0x0A26 /*005046*/,0x09F7 /*004767*/,0xFFC4 /*177704*/,0x8401 /*102001*/,0x8927 /*104447*/, +0x0A26 /*005046*/,0x1066 /*010146*/,0x1DC1 /*016701*/,0x093A /*004472*/,0x0203 /*001003*/,0x1DC1 /*016701*/,0x092E /*004456*/,0x0116 /*000426*/, +0xA257 /*121127*/,0x000A /*000012*/,0x0313 /*001423*/,0x09F7 /*004767*/,0xFF64 /*177544*/,0x8517 /*102427*/,0x050B /*002413*/,0x1077 /*010167*/, +0x018A /*000612*/,0x3400 /*032000*/,0x9600 /*113000*/,0x200E /*020016*/,0x8109 /*100411*/,0xD615 /*153025*/,0xD60B /*153013*/,0xFE0B /*177013*/, +0xD602 /*153002*/,0xFE0B /*177013*/,0xC103 /*140403*/,0x770A /*073412*/,0x4800 /*044000*/,0xD4F7 /*152367*/,0x140B /*012013*/,0xCC0A /*146012*/, +0xFD0B /*176413*/,0x5C02 /*056002*/,0xD189 /*150611*/,0x67A5 /*063645*/,0xE600 /*163000*/,0x4303 /*041403*/,0xFB20 /*175440*/,0x2987 /*024607*/, +0x2B89 /*025611*/,0x5689 /*053211*/,0x9B89 /*115611*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0EC4 /*007304*/,0x2097 /*020227*/,0x003D /*000075*/, +0x024F /*001117*/,0x0A00 /*005000*/,0x1126 /*010446*/,0x895C /*104534*/,0x894C /*104514*/,0x0203 /*001003*/,0x1100 /*010400*/,0x8966 /*104546*/, +0x0102 /*000402*/,0x10C0 /*010300*/,0x2410 /*022020*/,0x1026 /*010046*/,0x0A00 /*005000*/,0x895C /*104534*/,0x55C4 /*052704*/,0x4000 /*040000*/, +0x894C /*104514*/,0x0307 /*001407*/,0x1126 /*010446*/,0x1066 /*010146*/,0x15C4 /*012704*/,0x01CA /*000712*/,0x3400 /*032000*/,0xF200 /*171000*/, +0x100E /*010016*/,0x5000 /*050000*/,0x8189 /*100611*/,0x8415 /*102025*/,0x0015 /*000025*/,0x4A11 /*045021*/,0xC089 /*140211*/,0xAE1D /*127035*/, +0x4A08 /*045010*/,0x5E89 /*057211*/,0x8089 /*100211*/,0x9013 /*110023*/,0xD010 /*150020*/,0x1010 /*010020*/,0x6011 /*060021*/,0x1789 /*013611*/, +0x4F21 /*047441*/,0x2954 /*024524*/,0x5E02 /*057002*/,0x6889 /*064211*/,0x5789 /*053611*/,0x53A2 /*051642*/,0x0B00 /*005400*/,0x2E02 /*027002*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x0F20 /*007440*/,0x8960 /*104540*/,0x2117 /*020427*/,0x5354 /*051524*/,0x0220 /*001040*/,0x8960 /*104540*/, +0x2117 /*020427*/,0x4550 /*042520*/,0x021C /*001034*/,0x895E /*104536*/,0x8968 /*104550*/,0x0106 /*000406*/,0x0A02 /*005002*/,0x15C3 /*012703*/, +0x4000 /*040000*/,0x15C4 /*012704*/,0x8001 /*100001*/,0x01F8 /*000770*/,0x1380 /*011600*/,0x1066 /*010146*/,0x1141 /*010501*/,0xE5C1 /*162701*/, +0x000C /*000014*/,0x1066 /*010146*/,0x0105 /*000405*/,0x3400 /*032000*/,0x4E00 /*047000*/,0x1C0F /*016017*/,0x0689 /*003211*/,0x0B03 /*005403*/, +0x8105 /*100405*/,0xF115 /*170425*/,0x080B /*004013*/,0x0B00 /*005400*/,0x0105 /*000405*/,0xD601 /*153001*/,0x810B /*100413*/,0x9615 /*113025*/, +0x7725 /*073445*/,0x8A00 /*105000*/,0x2DF6 /*026766*/,0x8189 /*100611*/,0xF115 /*170425*/,0x080B /*004013*/,0xF700 /*173400*/,0x8105 /*100405*/, +0xD615 /*153025*/,0x5C0B /*056013*/,0x5789 /*053611*/,0x6FA4 /*067644*/,0xC900 /*144400*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0F7C /*007574*/, +0x0303 /*001403*/,0x2043 /*020103*/,0x87FB /*103773*/,0x892F /*104457*/,0x8956 /*104526*/,0x210E /*020416*/,0x02F7 /*001367*/,0x0BD6 /*005726*/, +0x0AC1 /*005301*/,0x01EA /*000752*/,0x0A00 /*005000*/,0x8956 /*104526*/,0x1126 /*010446*/,0x895C /*104534*/,0x894C /*104514*/,0x0329 /*001451*/, +0x10E6 /*010346*/,0x55C4 /*052704*/,0x4000 /*040000*/,0x895C /*104534*/,0x894C /*104514*/,0x0323 /*001443*/,0x1066 /*010146*/,0x0154 /*000524*/, +0x3400 /*032000*/,0xAA00 /*125000*/,0xD30F /*151417*/,0xC124 /*140444*/,0xC110 /*140420*/,0x0665 /*003145*/,0x8000 /*100000*/,0x021D /*001035*/, +0xE600 /*163000*/,0x1010 /*010020*/,0x2624 /*023044*/,0x1010 /*010020*/,0x8089 /*100211*/,0x8315 /*101425*/,0xC113 /*140423*/,0xF310 /*171420*/, +0x080B /*004013*/,0x0300 /*001400*/,0x1C80 /*016200*/,0x1189 /*010611*/,0x0206 /*001006*/,0x1C01 /*016001*/,0x0E89 /*007211*/,0x8005 /*100005*/, +0xD615 /*153025*/,0x140B /*012013*/,0x0001 /*000001*/,0x0034 /*000064*/,0x0FD8 /*007730*/,0x1026 /*010046*/,0x0BE0 /*005740*/,0x1200 /*011000*/, +0x893C /*104474*/,0x8948 /*104510*/,0x1044 /*010104*/,0x1581 /*012601*/,0x1380 /*011600*/,0x1126 /*010446*/,0x2410 /*022020*/,0x01AF /*000657*/, +0x8931 /*104461*/,0x1581 /*012601*/,0x65C1 /*062701*/,0x0006 /*000006*/,0x1D80 /*016600*/,0x0002 /*000002*/,0x2410 /*022020*/,0x8912 /*104422*/, +0x1581 /*012601*/,0x2596 /*022626*/,0x01C4 /*000704*/,0x1026 /*010046*/,0x014D /*000515*/,0x3400 /*032000*/,0x0600 /*003000*/,0xC010 /*140020*/, +0x1E1D /*017035*/,0xC100 /*140400*/,0x1C1D /*016035*/,0x0E00 /*007000*/,0xC089 /*140211*/,0x0045 /*000105*/,0x3780 /*033600*/,0x1010 /*010020*/, +0x0100 /*000400*/,0x8010 /*100020*/,0x1E13 /*017023*/,0x8089 /*100211*/,0xF015 /*170025*/,0x0FE5 /*007745*/,0x0400 /*002000*/,0x8700 /*103400*/, +0x4700 /*043400*/,0x0317 /*001427*/,0xF701 /*173401*/,0x981D /*114035*/,0xF607 /*173007*/,0xF7FF /*173777*/,0xA855 /*124125*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x1034 /*010064*/,0x0001 /*000001*/,0xFFF0 /*177760*/,0x0077 /*000167*/,0xF5B6 /*172666*/,0x1166 /*010546*/,0x1026 /*010046*/, +0x0A10 /*005020*/,0x0A10 /*005020*/,0x0A08 /*005010*/,0x0A26 /*005046*/,0x0A26 /*005046*/,0x0A26 /*005046*/,0x893A /*104472*/,0xA5C2 /*122702*/, +0x0045 /*000105*/,0x033C /*001474*/,0xA5C2 /*122702*/,0x002D /*000055*/,0x034A /*001512*/,0xA5C2 /*122702*/,0x002B /*000053*/,0x0344 /*001504*/, +0xA5C2 /*122702*/,0x0123 /*000443*/,0x3400 /*032000*/,0x6200 /*061000*/,0x2E10 /*027020*/,0x3B00 /*035400*/,0x3803 /*034003*/,0x5589 /*052611*/, +0xC202 /*141002*/,0x30E5 /*030345*/,0x6600 /*063000*/,0xF610 /*173020*/,0x0435 /*002065*/,0x0200 /*001000*/,0x1B00 /*015400*/,0xC602 /*143002*/, +0x06E5 /*003345*/,0x8000 /*100000*/,0x8111 /*100421*/,0x1E10 /*017020*/,0x8089 /*100211*/,0x0E1D /*007035*/,0xC100 /*140400*/,0xB015 /*130025*/, +0x1811 /*014021*/,0x5689 /*053211*/,0x8085 /*100205*/,0x651D /*062435*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1090 /*010220*/,0x000E /*000016*/, +0x1181 /*010601*/,0x8910 /*104420*/,0x35F6 /*032766*/,0x0008 /*000010*/,0x0008 /*000010*/,0x0302 /*001402*/,0x0AF6 /*005366*/,0x000A /*000012*/, +0x65C6 /*062706*/,0x0006 /*000006*/,0x1581 /*012601*/,0x55CE /*052716*/,0x0001 /*000001*/,0x0134 /*000464*/,0x10A6 /*010246*/,0x1D83 /*016603*/, +0x0008 /*000010*/,0x15C5 /*012705*/,0x000A /*000012*/,0x0A02 /*005002*/,0x0A04 /*005004*/,0x20D7 /*020327*/,0x0135 /*000465*/,0x3400 /*032000*/, +0xBE00 /*137000*/,0xD410 /*152020*/,0x4003 /*040003*/,0x3206 /*031006*/,0x8389 /*101611*/,0xF665 /*173145*/,0x0610 /*003020*/,0xED00 /*166400*/, +0xCE01 /*147001*/,0x0435 /*002065*/,0x3100 /*030400*/,0xCE02 /*147002*/,0x0455 /*002125*/,0xCE00 /*147000*/,0x0145 /*000505*/,0x1D00 /*016400*/, +0xCE01 /*147001*/,0x0C35 /*006065*/,0x2900 /*024400*/,0xCE02 /*147002*/,0x0855 /*004125*/,0x1700 /*013400*/,0xCE01 /*147001*/,0x0045 /*000105*/, +0x1F01 /*017401*/,0x0001 /*000001*/,0x0034 /*000064*/,0x10EC /*010354*/,0x0101 /*000401*/,0x55CE /*052716*/,0x0100 /*000400*/,0x35CE /*032716*/, +0x0004 /*000004*/,0x0210 /*001020*/,0x35CE /*032716*/,0x0001 /*000001*/,0x020B /*001013*/,0x35CE /*032716*/,0x0018 /*000030*/,0x0218 /*001030*/, +0x55CE /*052716*/,0x0010 /*000020*/,0x35CE /*032716*/,0x0100 /*000400*/,0x0304 /*001404*/,0x55CE /*052716*/,0x0040 /*000100*/,0x0101 /*000401*/, +0x0118 /*000430*/,0x019A /*000632*/,0x35CE /*032716*/,0x01F0 /*000760*/,0x3400 /*032000*/,0x1A00 /*015000*/,0x0111 /*000421*/,0xFB00 /*175400*/, +0x9702 /*113402*/,0x2033 /*020063*/,0x0800 /*004000*/,0xCE02 /*147002*/,0x2055 /*020125*/,0xCE00 /*147000*/,0x0035 /*000065*/,0xF401 /*172001*/, +0xCE03 /*147003*/,0x8055 /*100125*/,0xF100 /*170400*/,0xCE01 /*147001*/,0x0255 /*001125*/,0xED00 /*166400*/,0xC601 /*143001*/,0x0865 /*004145*/, +0x8100 /*100400*/,0xF915 /*174425*/,0x9601 /*113001*/,0xF725 /*173445*/,0x6601 /*063001*/,0xDC10 /*156020*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x1148 /*010510*/,0x35F6 /*032766*/,0x0040 /*000100*/,0x0002 /*000002*/,0x0304 /*001404*/,0x1D80 /*016600*/,0x0008 /*000010*/,0x1001 /*010001*/, +0x8914 /*104424*/,0x35F6 /*032766*/,0x0080 /*000200*/,0x0002 /*000002*/,0x0307 /*001407*/,0x0B36 /*005466*/,0x0006 /*000006*/,0x8404 /*102004*/, +0x55F6 /*052766*/,0x0002 /*000002*/,0x0002 /*000002*/,0x0116 /*000426*/,0x6DB6 /*066666*/,0x0004 /*000004*/,0x0006 /*000006*/,0x0312 /*001422*/, +0x017D /*000575*/,0x3400 /*032000*/,0x7600 /*073000*/,0x0911 /*004421*/,0x8005 /*100005*/,0x081D /*004035*/,0xC100 /*140400*/,0xB015 /*130025*/, +0x1811 /*014021*/,0xF689 /*173211*/,0x060A /*003012*/,0xF800 /*174000*/,0x0806 /*004006*/,0x8001 /*100001*/,0x081D /*004035*/,0xC100 /*140400*/, +0xB015 /*130025*/,0x1611 /*013021*/,0xB689 /*133211*/,0x060A /*003012*/,0xF800 /*174000*/,0x8105 /*100405*/,0xC115 /*140425*/,0x840A /*102012*/, +0xC615 /*143025*/,0x0665 /*003145*/,0x8300 /*101400*/,0x0001 /*000001*/,0x0034 /*000064*/,0x11A4 /*010644*/,0x1585 /*012605*/,0x35C4 /*032704*/, +0x0002 /*000002*/,0x0301 /*001401*/,0x00B2 /*000262*/,0x0087 /*000207*/,0x0000 /*000000*/,0x5000 /*050000*/,0x8004 /*100004*/,0x0000 /*000000*/, +0x4000 /*040000*/,0x8001 /*100001*/,0x0000 /*000000*/,0x7A12 /*075022*/,0x8014 /*100024*/,0x4000 /*040000*/,0x4C4B /*046113*/,0x8018 /*100030*/, +0x0000 /*000000*/,0x4000 /*040000*/,0x8000 /*100000*/,0x15C0 /*012700*/,0x000A /*000012*/,0x0181 /*000601*/,0x3400 /*032000*/,0xD200 /*151000*/, +0x2611 /*023021*/,0xC00A /*140012*/,0xFD0A /*176412*/,0x6206 /*061006*/,0xF689 /*173211*/,0x2015 /*020025*/,0x0830 /*004060*/,0xF600 /*173000*/, +0x2095 /*020225*/,0x0A00 /*005000*/,0xC300 /*141400*/,0x660B /*063013*/,0x0603 /*003003*/,0x8006 /*100006*/,0x0111 /*000421*/,0x1410 /*012020*/, +0xF689 /*173211*/,0x2D95 /*026625*/,0x0800 /*004000*/,0xC100 /*140400*/,0xBC15 /*136025*/,0x8011 /*100021*/,0x1C11 /*016021*/,0xCD89 /*146611*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x1200 /*011000*/,0x060C /*003014*/,0x15C0 /*012700*/,0x11C2 /*010702*/,0x1181 /*010601*/,0x891C /*104434*/, +0x050E /*002416*/,0x15C1 /*012701*/,0x11B0 /*010660*/,0x1180 /*010600*/,0x8916 /*104426*/,0x0AB6 /*005266*/,0x0006 /*000006*/,0x01F4 /*000764*/, +0x15C1 /*012701*/,0x11B0 /*010660*/,0x1180 /*010600*/,0x8918 /*104430*/,0x0AF6 /*005366*/,0x0006 /*000006*/,0x01E8 /*000750*/,0x15C1 /*012701*/, +0x11C8 /*010710*/,0x1180 /*010600*/,0x013B /*000473*/,0x3400 /*032000*/,0x2E00 /*027000*/,0x1012 /*010022*/,0xF689 /*173211*/,0x1FE5 /*017745*/, +0x0480 /*002200*/,0xB600 /*133000*/,0x020C /*001014*/,0x0E00 /*007000*/,0xB60C /*133014*/,0x040A /*002012*/,0xFA00 /*175000*/,0x8002 /*100002*/, +0xC011 /*140021*/,0x0E65 /*007145*/,0x8100 /*100400*/,0x2611 /*023021*/,0x0C10 /*006020*/,0x8089 /*100211*/,0xC015 /*140025*/,0x0365 /*001545*/, +0xC800 /*144000*/,0x20A5 /*020245*/,0x0300 /*001400*/,0xB603 /*133003*/,0xA50A /*122412*/,0x0001 /*000001*/,0x0034 /*000064*/,0x125C /*011134*/, +0x0006 /*000006*/,0x0101 /*000401*/,0x0A80 /*005200*/,0x65F6 /*062766*/,0x0007 /*000007*/,0x0006 /*000006*/,0x15C1 /*012701*/,0x0008 /*000010*/, +0x1002 /*010002*/,0x65C2 /*062702*/,0x0007 /*000007*/,0x0AC1 /*005301*/,0xA5E2 /*122742*/,0x0030 /*000060*/,0x03FC /*001774*/,0x1184 /*010604*/, +0x65C4 /*062704*/,0x0009 /*000011*/,0x25F6 /*022766*/,0x0008 /*000010*/,0x0006 /*000006*/,0x0728 /*003450*/,0x25F6 /*022766*/,0x018A /*000612*/, +0x3400 /*032000*/,0x8A00 /*105000*/,0xF812 /*174022*/,0x06FF /*003377*/,0x2400 /*022000*/,0x4304 /*041404*/,0x0310 /*001420*/,0x830B /*101413*/, +0x066D /*003155*/,0xC300 /*141400*/,0x0765 /*003545*/,0x1D00 /*016400*/,0x8305 /*101405*/,0x061D /*003035*/,0x0D00 /*006400*/,0x1305 /*011405*/, +0xD406 /*152006*/,0x2E95 /*027225*/,0x1400 /*012000*/,0x0294 /*001224*/,0xFD20 /*176440*/,0xD483 /*152203*/,0x2095 /*020225*/,0x0C00 /*006000*/, +0xC68A /*143212*/,0x6665 /*063145*/,0x0001 /*000001*/,0x0034 /*000064*/,0x12B8 /*011270*/,0x0008 /*000010*/,0x1D87 /*016607*/,0x0012 /*000022*/, +0x95D4 /*112724*/,0x002E /*000056*/,0x95D4 /*112724*/,0x0030 /*000060*/,0x0A83 /*005203*/,0x05FC /*002774*/,0x01EF /*000757*/,0x9414 /*112024*/, +0x0AC3 /*005303*/,0x06FD /*003375*/,0x2002 /*020002*/,0x83E8 /*101750*/,0x01EC /*000754*/,0x95D4 /*112724*/,0x002E /*000056*/,0x9414 /*112024*/, +0x2002 /*020002*/,0x83FD /*101775*/,0x95D4 /*112724*/,0x0045 /*000105*/,0x0114 /*000424*/,0x3400 /*032000*/,0xE600 /*163000*/,0xC612 /*143022*/, +0x0665 /*003145*/,0x8100 /*100400*/,0x8013 /*100023*/,0xC011 /*140021*/,0x0C65 /*006145*/,0x2600 /*023000*/,0x2610 /*023020*/,0x0A11 /*005021*/, +0x8489 /*102211*/,0x8015 /*100025*/,0x1715 /*013425*/,0x20A4 /*020244*/,0xFD00 /*176400*/,0x1703 /*013403*/,0x2DA8 /*026650*/,0x0200 /*001000*/, +0xD403 /*152003*/,0x2095 /*020225*/,0x1400 /*012000*/,0x1794 /*013624*/,0x20A2 /*020242*/,0xFC00 /*176000*/,0x4A02 /*045002*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x1314 /*011424*/,0x95D4 /*112724*/,0x0020 /*000040*/,0x8A0C /*105014*/,0x0BD6 /*005726*/,0x1D87 /*016607*/,0x0012 /*000022*/, +0x0A00 /*005000*/,0x09F7 /*004767*/,0xEF6E /*167556*/,0x09F7 /*004767*/,0xEDEE /*166756*/,0x020B /*001013*/,0xE5C2 /*162702*/,0x0030 /*000060*/, +0x0CC0 /*006300*/,0x6002 /*060002*/,0x0CC0 /*006300*/,0x0CC0 /*006300*/,0x6080 /*060200*/,0x35C0 /*032700*/,0xE000 /*160000*/,0x03F1 /*001761*/, +0x8921 /*104441*/,0x01AF /*000657*/,0x3400 /*032000*/,0x4200 /*041000*/,0xC113 /*140423*/,0x870A /*103412*/,0x2600 /*023000*/,0x2610 /*023020*/, +0x660A /*063012*/,0x0210 /*001020*/,0x7604 /*073004*/,0x020A /*001012*/,0x8100 /*100400*/,0xC611 /*143021*/,0x0CE5 /*006345*/,0x8000 /*100000*/, +0x0C11 /*006021*/,0x8189 /*100611*/,0x8011 /*100021*/,0x101D /*010035*/,0xC100 /*140400*/,0x0565 /*002545*/,0xC200 /*141000*/,0x0715 /*003425*/, +0x5000 /*050000*/,0xC294 /*141224*/,0xFD0A /*176412*/,0x5606 /*053006*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1370 /*011560*/,0x65C6 /*062706*/, +0x0012 /*000022*/,0x0087 /*000207*/,0x1166 /*010546*/,0x1026 /*010046*/,0x0A26 /*005046*/,0x1443 /*012103*/,0x1242 /*011102*/,0x0404 /*002004*/, +0x0B02 /*005402*/,0x0B03 /*005403*/,0x0B82 /*005602*/,0x0A8E /*005216*/,0x15C5 /*012705*/,0x000A /*000012*/,0x0A04 /*005004*/,0x15E6 /*012746*/, +0xFFFF /*177777*/,0x0A00 /*005000*/,0x0A01 /*005001*/,0x8934 /*104464*/,0x1066 /*010146*/,0x5080 /*050200*/,0x01B1 /*000661*/,0x3400 /*032000*/, +0x9E00 /*117000*/,0xC013 /*140023*/,0xC050 /*140120*/,0xF80B /*174013*/,0x8502 /*102402*/,0x8411 /*102021*/,0xD50A /*152412*/,0xFD0B /*176413*/, +0xC404 /*142004*/,0xC30A /*141412*/,0x0B15 /*005425*/,0x0300 /*001400*/,0xC3E1 /*141741*/,0x400A /*040012*/,0x021D /*001035*/,0xC300 /*141400*/, +0x040B /*002013*/,0xD007 /*150007*/,0x2095 /*020225*/,0xC300 /*141400*/,0xFA0A /*175012*/,0xCD01 /*146401*/,0x030B /*001413*/,0xD003 /*150003*/, +0x1695 /*013225*/,0x0001 /*000001*/,0x0034 /*000064*/,0x13CC /*011714*/,0x002D /*000055*/,0x0102 /*000402*/,0x95D0 /*112720*/,0x0020 /*000040*/, +0x65CE /*062716*/,0x0030 /*000060*/,0x9590 /*112620*/,0x0BCE /*005716*/,0x04FB /*002373*/,0x95C8 /*112710*/,0x0020 /*000040*/,0x65C6 /*062706*/, +0x0006 /*000006*/,0x1585 /*012605*/,0x0087 /*000207*/,0x1166 /*010546*/,0x1003 /*010003*/,0x1045 /*010105*/,0x0A02 /*005002*/,0x0A04 /*005004*/, +0x8932 /*104462*/,0x10C0 /*010300*/,0x1081 /*010201*/,0x01F3 /*000763*/,0x3400 /*032000*/,0xFA00 /*175000*/,0x8513 /*102423*/,0x8715 /*103425*/, +0x0000 /*000000*/,0x010A /*000412*/,0xE60A /*163012*/,0x2115 /*020425*/,0x0000 /*000000*/,0x010C /*000414*/,0x020C /*001014*/,0x030C /*001414*/, +0x030C /*001414*/,0x4186 /*040606*/,0x4061 /*040141*/,0x000B /*000013*/,0xCE61 /*147141*/,0xF60A /*173012*/,0xD602 /*153002*/,0x870B /*103413*/, +0xE600 /*163000*/,0x2015 /*020025*/,0x2600 /*023000*/,0x6611 /*063021*/,0x3611 /*033021*/,0x1D0B /*016413*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x1428 /*012050*/,0x0002 /*000002*/,0x0B0E /*005416*/,0x0BB6 /*005666*/,0x0002 /*000002*/,0x6381 /*061601*/,0x0B40 /*005500*/,0x6D80 /*066600*/, +0x0002 /*000002*/,0x8725 /*103445*/,0x0A26 /*005046*/,0x0C43 /*006103*/,0x0C42 /*006102*/,0x0C41 /*006101*/,0x0C40 /*006100*/,0x0BCE /*005716*/, +0x0308 /*001410*/,0x0A0E /*005016*/,0x6D81 /*066601*/,0x0002 /*000002*/,0x0B40 /*005500*/,0x0B4E /*005516*/,0x6D80 /*066600*/,0x0004 /*000004*/, +0x0100 /*000400*/,0x3400 /*032000*/,0x5600 /*053000*/,0x0414 /*002024*/,0x4101 /*040401*/,0x4061 /*040141*/,0x4E0B /*047013*/,0x000B /*000013*/, +0x4E61 /*047141*/,0xCE0B /*147013*/,0x010B /*000413*/,0x8303 /*101403*/,0xF60A /*173012*/,0x060A /*003012*/,0xE700 /*163400*/,0x0306 /*001406*/, +0x040C /*002014*/,0x4187 /*040607*/,0x4061 /*040141*/,0x000B /*000013*/,0xA161 /*120541*/,0x4300 /*041400*/,0xC60C /*143014*/,0x0865 /*004145*/, +0xA200 /*121000*/,0x8700 /*103400*/,0xCB00 /*145400*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1484 /*012204*/,0x65C6 /*062706*/,0x0006 /*000006*/, +0x89FB /*104773*/,0x00B2 /*000262*/,0x0087 /*000207*/,0x1166 /*010546*/,0x1026 /*010046*/,0x1466 /*012146*/,0x1466 /*012146*/,0x1266 /*011146*/, +0x1402 /*012002*/,0x1401 /*012001*/,0x1200 /*011000*/,0x200E /*020016*/,0x830A /*101412*/,0x1184 /*010604*/,0x1003 /*010003*/,0x1300 /*011400*/, +0x10D4 /*010324*/,0x1043 /*010103*/,0x1301 /*011401*/,0x10D4 /*010324*/,0x1083 /*010203*/,0x01B7 /*000667*/,0x3400 /*032000*/,0xB200 /*131000*/, +0x0214 /*001024*/,0xD413 /*152023*/,0x8010 /*100020*/,0x19E3 /*014743*/,0x0303 /*001403*/,0x1780 /*013600*/,0xE120 /*160440*/,0x05FF /*002777*/, +0x8504 /*102404*/,0x021D /*001035*/,0x8300 /*101400*/,0x041D /*002035*/,0x1C00 /*016000*/,0x1701 /*013401*/,0xF020 /*170040*/,0x07FF /*003777*/, +0xC006 /*140006*/,0x1065 /*010145*/,0x4200 /*041000*/,0x0110 /*000420*/,0xC20A /*141012*/,0x010B /*000413*/,0x4180 /*040600*/,0x270A /*023412*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x14E0 /*012340*/,0x0BC0 /*005700*/,0x0304 /*001404*/,0x0C81 /*006201*/,0x0C02 /*006002*/,0x0A80 /*005200*/, +0x02FC /*001374*/,0x1D85 /*016605*/,0x0002 /*000002*/,0x1D83 /*016603*/,0x0004 /*000004*/,0x6083 /*060203*/,0x0B45 /*005505*/,0x8511 /*102421*/, +0x6045 /*060105*/,0x8403 /*102003*/,0x0C05 /*006005*/,0x0C03 /*006003*/,0x0A8E /*005216*/,0x1D80 /*016600*/,0x0006 /*000006*/,0x1001 /*010001*/, +0x10D0 /*010320*/,0x1150 /*010520*/,0x01F8 /*000770*/,0x3400 /*032000*/,0x0E00 /*007000*/,0x9015 /*110025*/,0x4013 /*040023*/,0xC610 /*143020*/, +0x0865 /*004145*/,0x8500 /*102400*/,0x7715 /*073425*/,0x6600 /*063000*/,0x4501 /*042401*/,0xF260 /*171140*/,0xEE87 /*167207*/,0x0401 /*002001*/, +0xC610 /*143020*/,0x06E5 /*003345*/,0x8000 /*100000*/,0x1411 /*012021*/,0x0089 /*000211*/,0x8111 /*100421*/,0x1011 /*010021*/,0xC689 /*143211*/, +0x0665 /*003145*/,0x8700 /*103400*/,0x1A00 /*015000*/,0xF189 /*170611*/,0x770B /*073413*/,0x0001 /*000001*/,0x0034 /*000064*/,0x153C /*012474*/, +0x0002 /*000002*/,0x0408 /*002010*/,0x1442 /*012102*/,0x1443 /*012103*/,0x0B03 /*005403*/,0x0B02 /*005402*/,0x0B83 /*005603*/,0x1090 /*010220*/, +0x10D0 /*010320*/,0x1450 /*012120*/,0x0087 /*000207*/,0x891A /*104432*/,0x15C1 /*012701*/,0x11B6 /*010666*/,0x0BF0 /*005760*/,0x0002 /*000002*/, +0x0603 /*003003*/,0x0303 /*001403*/,0x8914 /*104424*/,0x0087 /*000207*/,0x891A /*104432*/,0x0087 /*000207*/,0x1166 /*010546*/,0x019A /*000632*/, +0x3400 /*032000*/,0x6A00 /*065000*/,0x2615 /*023025*/,0x2610 /*023020*/,0x450A /*042412*/,0x4414 /*042024*/,0xC414 /*142024*/,0x3F0B /*037413*/, +0x0403 /*002003*/,0x0404 /*002004*/,0x050B /*002413*/,0x840B /*102013*/,0x8E0B /*107013*/,0x030A /*001412*/,0x0214 /*001024*/,0x7314 /*071424*/, +0x0403 /*002003*/,0x0206 /*001006*/,0x030B /*001413*/,0x820B /*101013*/,0xCE0B /*147013*/,0x410A /*040412*/,0x0112 /*000422*/,0x010B /*000413*/, +0x0162 /*000542*/,0xDA0C /*155014*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1598 /*012630*/,0x0C41 /*006101*/,0x842C /*102054*/,0x65C1 /*062701*/, +0x8000 /*100000*/,0x1066 /*010146*/,0x10C1 /*010301*/,0x1080 /*010200*/,0x0A02 /*005002*/,0x0A03 /*005003*/,0x0C00 /*006000*/,0x0C01 /*006001*/, +0x0C02 /*006002*/,0x8934 /*104464*/,0x0B04 /*005404*/,0x0B05 /*005405*/,0x0B84 /*005604*/,0x0CC1 /*006301*/,0x0C40 /*006100*/,0x6141 /*060501*/, +0x0B40 /*005500*/,0x6100 /*060400*/,0x0503 /*002403*/,0x65C3 /*062703*/,0x0162 /*000542*/,0x3400 /*032000*/,0xC600 /*143000*/,0x0115 /*000425*/, +0x4200 /*041000*/,0xA10B /*120413*/,0x0200 /*001000*/,0x030C /*001414*/,0x8E0C /*107014*/,0xF60A /*173012*/,0x020B /*001013*/,0x0300 /*001400*/, +0x0203 /*001003*/,0x030B /*001413*/,0x820B /*101013*/,0x800B /*100013*/,0x041D /*002035*/,0xD000 /*150000*/,0x9010 /*110020*/,0x8810 /*104020*/, +0x9615 /*113025*/,0x8525 /*102445*/,0x2015 /*020025*/,0x0128 /*000450*/,0x7710 /*073420*/,0x8E00 /*107000*/,0x2A00 /*025000*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x15F4 /*012764*/,0x2596 /*022626*/,0x89FB /*104773*/,0x1585 /*012605*/,0x00B2 /*000262*/,0x0087 /*000207*/,0x1166 /*010546*/, +0x1026 /*010046*/,0x1445 /*012105*/,0x1444 /*012104*/,0x1241 /*011101*/,0x0A26 /*005046*/,0x0BC4 /*005704*/,0x032F /*001457*/,0x8004 /*100004*/, +0x0B04 /*005404*/,0x0B05 /*005405*/,0x0B84 /*005604*/,0x0ACE /*005316*/,0x1403 /*012003*/,0x1402 /*012002*/,0x0327 /*001447*/,0x8004 /*100004*/, +0x0B02 /*005402*/,0x01DC /*000734*/,0x3400 /*032000*/,0x2200 /*021000*/,0x0316 /*001426*/,0x820B /*101013*/,0x8E0B /*107013*/,0x010A /*000412*/, +0x0162 /*000542*/,0x410C /*040414*/,0xE20C /*161014*/,0xC184 /*140604*/,0x0065 /*000145*/,0x6680 /*063200*/,0x3210 /*031020*/,0x8E89 /*107211*/, +0x420A /*041012*/,0x410C /*040414*/,0x400C /*040014*/,0x020C /*001014*/,0xCE85 /*147205*/,0xFA0A /*175012*/,0x0001 /*000001*/,0x010C /*000414*/, +0x410C /*040414*/,0x400B /*040013*/,0x020B /*001013*/,0x5784 /*053604*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1650 /*013120*/,0x0A8E /*005216*/, +0x01F9 /*000771*/,0x1582 /*012602*/,0x0BD6 /*005726*/,0x0303 /*001403*/,0x0B00 /*005400*/,0x0B01 /*005401*/,0x0B80 /*005600*/,0x1583 /*012603*/, +0x1053 /*010123*/,0x1013 /*010023*/,0x108B /*010213*/,0x1585 /*012605*/,0x0087 /*000207*/,0x0A00 /*005000*/,0x0A01 /*005001*/,0x0A02 /*005002*/, +0x0BD6 /*005726*/,0x01F5 /*000765*/,0x0A10 /*005020*/,0x1050 /*010120*/,0x15C8 /*012710*/,0x800F /*100017*/,0x01FB /*000773*/,0x3400 /*032000*/, +0x7E00 /*077000*/,0x2016 /*020026*/,0x0128 /*000450*/,0x4410 /*042020*/,0x4214 /*041024*/,0x4314 /*041424*/,0xC114 /*140424*/,0xC210 /*141020*/, +0x040B /*002013*/,0xC402 /*142002*/,0x020B /*001013*/,0x0302 /*001402*/,0x100A /*010012*/,0x8301 /*101401*/,0xC30A /*141412*/,0xC40A /*142012*/, +0x420C /*041014*/,0xFC0C /*176014*/,0x0884 /*004204*/,0x0786 /*003606*/,0xC402 /*142002*/,0x040B /*002013*/,0xB102 /*130402*/,0x0200 /*001000*/, +0x210C /*020414*/,0x0001 /*000001*/,0x0034 /*000064*/,0x16AC /*013254*/,0x0A83 /*005203*/,0x0A81 /*005201*/,0x00B1 /*000261*/,0x0C02 /*006002*/, +0x0C04 /*006004*/,0x1110 /*010420*/,0x1090 /*010220*/,0x10D0 /*010320*/,0x20C1 /*020301*/,0x8202 /*101002*/,0x00A2 /*000242*/,0x0087 /*000207*/, +0x00B2 /*000262*/,0x0087 /*000207*/,0x1042 /*010102*/,0x1004 /*010004*/,0x1494 /*012224*/,0x1494 /*012224*/,0x1494 /*012224*/,0x0087 /*000207*/, +0x1066 /*010146*/,0x892C /*104454*/,0x1180 /*010600*/,0x0119 /*000431*/,0x3400 /*032000*/,0xDA00 /*155000*/,0x8116 /*100426*/,0x061D /*003035*/, +0x1200 /*011000*/,0x8189 /*100611*/,0x021D /*001035*/,0xC600 /*143000*/,0x0865 /*004145*/,0x0100 /*000400*/,0x870B /*103413*/,0x8200 /*101000*/, +0xC015 /*140025*/,0x0665 /*003145*/,0x2600 /*023000*/,0x2618 /*023030*/,0x2618 /*023030*/,0x8718 /*103430*/,0x4310 /*041420*/,0x4214 /*041024*/, +0x4414 /*042024*/,0x1112 /*010422*/,0x6180 /*060600*/,0x1728 /*013450*/,0x1F21 /*017441*/,0x2F80 /*027600*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x1708 /*013410*/,0x86DF /*103337*/,0xE5C4 /*162704*/,0x801F /*100037*/,0x0C82 /*006202*/,0x0C03 /*006003*/,0x0A84 /*005204*/,0x05FC /*002774*/, +0x1001 /*010001*/,0x10D0 /*010320*/,0x1090 /*010220*/,0x15C8 /*012710*/,0x801F /*100037*/,0x1040 /*010100*/,0x01AF /*000657*/,0x0BC2 /*005702*/, +0x8004 /*100004*/,0x15C1 /*012701*/,0x11B6 /*010666*/,0x0077 /*000167*/,0xFE10 /*177020*/,0x0A10 /*005020*/,0x0A10 /*005020*/,0x0A08 /*005010*/, +0x010D /*000415*/,0x3400 /*032000*/,0x3600 /*033000*/,0x8717 /*103427*/,0x4200 /*041000*/,0x4314 /*041424*/,0x4414 /*042024*/,0x1712 /*013422*/, +0x0F21 /*007441*/,0x0B80 /*005600*/,0x0882 /*004202*/,0x1703 /*013403*/,0x0021 /*000041*/,0x0880 /*004200*/,0xC487 /*142207*/,0x0FE5 /*007745*/, +0x8380 /*101600*/,0x840C /*102014*/,0xFD0A /*176412*/,0xC002 /*140002*/,0x8710 /*103420*/,0xF900 /*174400*/,0x0089 /*000211*/,0x870A /*103412*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x9000 /*110000*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1764 /*013544*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0150 /*000520*/,0x3400 /*032000*/,0x9200 /*111000*/, +0x0017 /*000027*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x2200 /*021000*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x17C0 /*013700*/,0x0001 /*000001*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0001 /*000001*/, +0x17B0 /*013660*/,0x1066 /*010146*/,0x1026 /*010046*/,0xE5C6 /*162706*/,0x0006 /*000006*/,0x1001 /*010001*/,0x1180 /*010600*/,0x09F7 /*004767*/, +0x0018 /*000030*/,0x1D81 /*016601*/,0x0008 /*000010*/,0x1180 /*010600*/,0x8918 /*104430*/,0x1D80 /*016600*/,0x0006 /*000006*/,0x1181 /*010601*/, +0x09F7 /*004767*/,0x00C2 /*000302*/,0x0145 /*000505*/,0x3400 /*032000*/,0xEE00 /*167000*/,0xC617 /*143027*/,0x0A65 /*005145*/,0x8700 /*103400*/, +0x2E00 /*027000*/,0xF089 /*170211*/,0x020B /*001013*/,0x0400 /*002000*/,0xFF06 /*177406*/,0xC689 /*143211*/,0x0465 /*002145*/,0x8700 /*103400*/, +0x0100 /*000400*/,0xD110 /*150420*/,0x0C0B /*006013*/,0x5702 /*053402*/,0x0024 /*000044*/,0x0940 /*004500*/,0x5702 /*053402*/,0x0124 /*000444*/, +0x0680 /*003200*/,0x1002 /*010002*/,0x100A /*010012*/,0x100A /*010012*/,0xFB0A /*175412*/,0x0001 /*000001*/,0x0034 /*000064*/,0x181C /*014034*/, +0x65C6 /*062706*/,0x0004 /*000004*/,0x0087 /*000207*/,0x1C26 /*016046*/,0x0004 /*000004*/,0x65CE /*062716*/,0x8000 /*100000*/,0x15F0 /*012760*/, +0x8000 /*100000*/,0x0004 /*000004*/,0x1381 /*011601*/,0xE5C6 /*162706*/,0x0006 /*000006*/,0x1180 /*010600*/,0x891E /*104436*/,0x1D80 /*016600*/, +0x0008 /*000010*/,0x892C /*104454*/,0x15C1 /*012701*/,0x188C /*014214*/,0x8912 /*104422*/,0x1180 /*010600*/,0x15C1 /*012701*/,0x010C /*000414*/, +0x3400 /*032000*/,0x4A00 /*045000*/,0x8C18 /*106030*/,0x1018 /*010030*/,0x8089 /*100211*/,0x0E1D /*007035*/,0x8100 /*100400*/,0x1611 /*013021*/, +0xC489 /*142211*/,0x9815 /*114025*/,0x8018 /*100030*/,0x0E1D /*007035*/,0xC300 /*141400*/,0x0415 /*002025*/,0x2800 /*024000*/,0x2A89 /*025211*/, +0x8089 /*100211*/,0x0E1D /*007035*/,0xC100 /*140400*/,0x4615 /*043025*/,0x1219 /*011031*/,0xC689 /*143211*/,0x0665 /*003145*/,0x8000 /*100000*/, +0xC111 /*140421*/,0xC915 /*144425*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1878 /*014170*/,0x1892 /*014222*/,0x8918 /*104430*/,0x1181 /*010601*/, +0x1D80 /*016600*/,0x0008 /*000010*/,0x8910 /*104420*/,0x65C6 /*062706*/,0x000C /*000014*/,0x00A2 /*000242*/,0x0087 /*000207*/,0x7996 /*074626*/, +0x5A82 /*055202*/,0x8000 /*100000*/,0x0BFE /*005776*/,0x58B9 /*054271*/,0x8000 /*100000*/,0xAA4A /*125112*/,0x4D0C /*046414*/,0x7FFF /*077777*/, +0x0F09 /*007411*/,0x6650 /*063120*/,0x7FFF /*077777*/,0x6CDB /*066333*/,0x015D /*000535*/,0x3400 /*032000*/,0xA600 /*123000*/,0x5518 /*052430*/, +0x0055 /*000125*/,0xFA80 /*175200*/,0xFFFF /*177777*/,0x017F /*000577*/,0x2E80 /*027200*/,0x1789 /*013611*/,0x042C /*002054*/,0x0E00 /*007000*/, +0xA180 /*120600*/,0xC182 /*140602*/,0x4015 /*040025*/,0x2619 /*023031*/,0x8089 /*100211*/,0x021D /*001035*/,0xC100 /*140400*/,0x4615 /*043025*/, +0x1819 /*014031*/,0x8089 /*100211*/,0x021D /*001035*/,0x2C00 /*026000*/,0x2C89 /*026211*/,0x8089 /*100211*/,0x4F11 /*047421*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x18D4 /*014324*/,0x15C1 /*012701*/,0x194C /*014514*/,0x8910 /*104420*/,0x1180 /*010600*/,0x1001 /*010001*/,0x8914 /*104424*/, +0x0AB6 /*005266*/,0x000A /*000012*/,0x1D80 /*016600*/,0x000E /*000016*/,0x1001 /*010001*/,0x8918 /*104430*/,0x1D80 /*016600*/,0x000E /*000016*/, +0x15C1 /*012701*/,0x1958 /*014530*/,0x8910 /*104420*/,0x15C0 /*012700*/,0x1952 /*014522*/,0x892C /*104454*/,0x1180 /*010600*/,0x1D81 /*016601*/, +0x0014 /*000024*/,0x01E2 /*000742*/,0x3400 /*032000*/,0x0200 /*001000*/,0x1619 /*013031*/,0x8089 /*100211*/,0x0111 /*000421*/,0xC110 /*140420*/, +0x0665 /*003145*/,0x1000 /*010000*/,0x8189 /*100611*/,0x4011 /*040021*/,0xC010 /*140020*/,0x0C65 /*006145*/,0x1600 /*013000*/,0xC689 /*143211*/, +0x0C65 /*006145*/,0x8000 /*100000*/,0xC111 /*140421*/,0xB615 /*133025*/,0x1011 /*010021*/,0x8089 /*100211*/,0x0111 /*000421*/,0x1810 /*014020*/, +0x8189 /*100611*/,0x8011 /*100021*/,0x081D /*004035*/,0x8000 /*100000*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1930 /*014460*/,0x891A /*104432*/, +0x1D80 /*016600*/,0x0008 /*000010*/,0x6DB0 /*066660*/,0x0006 /*000006*/,0x0004 /*000004*/,0x0077 /*000167*/,0xFF44 /*177504*/,0x1D94 /*016624*/, +0x5C55 /*056125*/,0x8001 /*100001*/,0x0BFE /*005776*/,0x58B9 /*054271*/,0x7FFF /*077777*/,0x3EE7 /*037347*/,0x9FE1 /*117741*/,0x8004 /*100004*/, +0x4375 /*041565*/,0xB4C6 /*132306*/,0x800A /*100012*/,0x2D78 /*026570*/,0x782E /*074056*/,0x8006 /*100006*/,0x0128 /*000450*/,0x3400 /*032000*/, +0x5E00 /*057000*/,0xF619 /*173031*/,0x02E5 /*001345*/,0x0200 /*001000*/,0x8000 /*100000*/,0x081D /*004035*/,0x8100 /*100400*/,0x0A1D /*005035*/, +0x2600 /*023000*/,0x1810 /*014020*/,0xF689 /*173211*/,0x0665 /*003145*/,0x0C00 /*006000*/,0x8000 /*100000*/,0x8113 /*100423*/,0x0C1D /*006035*/, +0x1000 /*010000*/,0xF689 /*173211*/,0x040B /*002013*/,0x0700 /*003400*/,0x8003 /*100003*/,0x8113 /*100423*/,0x081D /*004035*/,0x1800 /*014000*/, +0x2589 /*022611*/,0x0001 /*000001*/,0x0034 /*000064*/,0x198C /*014614*/,0x0AF6 /*005366*/,0x0004 /*000004*/,0x01EF /*000757*/,0x1380 /*011600*/, +0x1D81 /*016601*/,0x0006 /*000006*/,0x8918 /*104430*/,0x0BD6 /*005726*/,0x1583 /*012603*/,0x65C6 /*062706*/,0x0016 /*000026*/,0x10E6 /*010346*/, +0x0087 /*000207*/,0x1583 /*012603*/,0x0A26 /*005046*/,0x1066 /*010146*/,0x1026 /*010046*/,0x891A /*104432*/,0x10C7 /*010307*/,0x1583 /*012603*/, +0x01FA /*000772*/,0x1581 /*012601*/,0x892C /*104454*/,0x0157 /*000527*/,0x3400 /*032000*/,0xBA00 /*135000*/,0x6619 /*063031*/,0x2610 /*023020*/, +0xE611 /*163021*/,0x2610 /*023020*/,0x0110 /*000420*/,0x1810 /*014020*/,0x8089 /*100211*/,0x8315 /*101425*/,0x8415 /*102025*/,0x8115 /*100425*/, +0x2C15 /*026025*/,0x2689 /*023211*/,0x2611 /*023021*/,0xA610 /*123020*/,0xCE11 /*147021*/,0x0665 /*003145*/,0xA600 /*123000*/,0xCE11 /*147021*/, +0x0E65 /*007145*/,0xE600 /*163000*/,0x4710 /*043420*/,0x8010 /*100020*/,0x021D /*001035*/,0x1B00 /*015400*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x19E8 /*014750*/,0x8918 /*104430*/,0x15B6 /*012666*/,0x0002 /*000002*/,0x1381 /*011601*/,0x8922 /*104442*/,0x1026 /*010046*/,0x1381 /*011601*/, +0xE5C6 /*162706*/,0x0006 /*000006*/,0x1180 /*010600*/,0x891E /*104436*/,0x1181 /*010601*/,0x1D80 /*016600*/,0x0008 /*000010*/,0x8912 /*104422*/, +0x65C6 /*062706*/,0x0006 /*000006*/,0x1DA6 /*016646*/,0x0004 /*000004*/,0x0087 /*000207*/,0x8924 /*104444*/,0x0BF0 /*005760*/,0x0002 /*000002*/, +0x016F /*000557*/,0x3400 /*032000*/,0x1600 /*013000*/,0x051A /*002432*/,0x0104 /*000404*/,0x1410 /*012020*/,0xB689 /*133211*/,0x040A /*002012*/, +0x0400 /*002000*/,0x0301 /*001401*/,0xC602 /*143002*/,0x0665 /*003145*/,0x8700 /*103400*/,0xC100 /*140400*/,0x8615 /*103025*/,0x261A /*023032*/, +0x8289 /*101211*/,0xC215 /*141025*/,0xFC45 /*176105*/,0xC2FF /*141377*/,0xC20C /*141014*/,0x7E65 /*077145*/,0x871A /*103432*/,0xC112 /*140422*/, +0xB615 /*133025*/,0x8011 /*100021*/,0x4A13 /*045023*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1A44 /*015104*/,0x8912 /*104422*/,0x1380 /*011600*/, +0x1001 /*010001*/,0x8914 /*104424*/,0x0104 /*000404*/,0x15C1 /*012701*/,0x11B6 /*010666*/,0x1380 /*011600*/,0x8912 /*104422*/,0x1380 /*011600*/, +0x15C4 /*012704*/,0x1A8C /*015214*/,0x15C3 /*012703*/,0x0006 /*000006*/,0x8928 /*104450*/,0x892A /*104452*/,0x0BF6 /*005766*/,0x0004 /*000004*/, +0x03DD /*001735*/,0x1380 /*011600*/,0x1001 /*010001*/,0x8914 /*104424*/,0x01D9 /*000731*/,0x016D /*000555*/,0x3400 /*032000*/,0x7200 /*071000*/, +0x241A /*022032*/,0xC189 /*140611*/,0xAA15 /*125025*/,0x101A /*010032*/,0x8089 /*100211*/,0xCA13 /*145023*/,0x5601 /*053001*/,0x3E1A /*037032*/, +0x461A /*043032*/,0x4E1A /*047032*/,0xB91A /*134432*/,0x7CC1 /*076301*/,0x0051 /*000121*/,0xBE80 /*137200*/,0x4E1F /*047037*/,0xEE8D /*167215*/, +0xCE7F /*147177*/,0xFFFA /*177772*/,0xF453 /*172123*/,0x8C7F /*106177*/,0x4BDC /*045734*/,0xF9B3 /*174663*/,0xFE7F /*177177*/,0x2EEE /*027356*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x1AA0 /*015240*/,0x519A /*050632*/,0x7FFD /*077775*/,0x0C75 /*006165*/,0xAD51 /*126521*/,0x8000 /*100000*/, +0xED4E /*166516*/,0x6487 /*062207*/,0x8001 /*100001*/,0x0A26 /*005046*/,0x8924 /*104444*/,0x0BF0 /*005760*/,0x0002 /*000002*/,0x0358 /*001530*/, +0x0404 /*002004*/,0x0AB6 /*005266*/,0x0006 /*000006*/,0x1001 /*010001*/,0x8914 /*104424*/,0x15C1 /*012701*/,0x11B6 /*010666*/,0x1380 /*011600*/, +0x891C /*104434*/,0x040F /*002017*/,0x016B /*000553*/,0x3400 /*032000*/,0xCE00 /*147000*/,0xB61A /*133032*/,0x040A /*002012*/,0xC000 /*140000*/, +0xB615 /*133025*/,0x2C11 /*026021*/,0x8089 /*100211*/,0x8111 /*100421*/,0x061D /*003035*/,0x1600 /*013000*/,0x8189 /*100611*/,0x8011 /*100021*/, +0x061D /*003035*/,0x1A00 /*015000*/,0xC689 /*143211*/,0x0665 /*003145*/,0xC100 /*140400*/,0x7215 /*071025*/,0x801B /*100033*/,0x1C13 /*016023*/, +0x0489 /*002211*/,0x2607 /*023007*/,0x260A /*023012*/,0x260A /*023012*/,0xBB0A /*135412*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1AFC /*015374*/, +0x0118 /*000430*/,0x15C0 /*012700*/,0x1B7E /*015576*/,0x892C /*104454*/,0x1D80 /*016600*/,0x0006 /*000006*/,0x892C /*104454*/,0x15C1 /*012701*/, +0x1B78 /*015570*/,0x8918 /*104430*/,0x1D80 /*016600*/,0x000C /*000014*/,0x15C1 /*012701*/,0x11B6 /*010666*/,0x8912 /*104422*/,0x1180 /*010600*/, +0x15C1 /*012701*/,0x1B78 /*015570*/,0x8910 /*104420*/,0x1D80 /*016600*/,0x000C /*000014*/,0x1181 /*010601*/,0x8916 /*104426*/,0x01C9 /*000711*/, +0x3400 /*032000*/,0x2A00 /*025000*/,0xC61B /*143033*/,0x0665 /*003145*/,0x8000 /*100000*/,0x061D /*003035*/,0xC400 /*142000*/,0x8415 /*102025*/, +0xC31B /*141433*/,0x0515 /*002425*/,0x2800 /*024000*/,0x2A89 /*025211*/,0x8189 /*100611*/,0x8011 /*100021*/,0x061D /*003035*/,0x1000 /*010000*/, +0xC689 /*143211*/,0x0665 /*003145*/,0xF600 /*173000*/,0x040B /*002013*/,0x0700 /*003400*/,0x8003 /*100003*/,0xC113 /*140423*/,0xAA15 /*125025*/, +0x121A /*011032*/,0x2389 /*021611*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1B58 /*015530*/,0x1380 /*011600*/,0x1001 /*010001*/,0x8914 /*104424*/, +0x0BF6 /*005766*/,0x0006 /*000006*/,0x0303 /*001403*/,0x1380 /*011600*/,0x1001 /*010001*/,0x8914 /*104424*/,0x65C6 /*062706*/,0x0008 /*000010*/, +0x00A2 /*000242*/,0x0087 /*000207*/,0x517C /*050574*/,0x4498 /*042230*/,0x7FFF /*077777*/,0xEBA0 /*165640*/,0x6ED9 /*067331*/,0x8001 /*100001*/, +0x48DE /*044336*/,0x4305 /*041405*/,0x8000 /*100000*/,0x9720 /*113440*/,0x014E /*000516*/,0x3400 /*032000*/,0x8600 /*103000*/,0x321B /*031033*/, +0xFD61 /*176541*/,0xCF7F /*147577*/,0x6E8F /*067217*/,0xFEB7 /*177267*/,0xA67F /*123177*/,0x61DB /*060733*/,0xFE66 /*177146*/,0x0A7F /*005177*/, +0xAAB2 /*125262*/,0xFFAA /*177652*/,0xFE7F /*177177*/,0xFFFF /*177777*/,0x007F /*000177*/,0x2480 /*022200*/,0xF089 /*170211*/,0x020B /*001013*/, +0x2E00 /*027000*/,0x0403 /*002003*/,0xB604 /*133004*/,0x040A /*002012*/,0x0100 /*000400*/,0x1410 /*012020*/,0x7889 /*074211*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x1BB4 /*015664*/,0x0A36 /*005066*/,0x0002 /*000002*/,0x1380 /*011600*/,0x2410 /*022020*/,0x65C8 /*062710*/,0x8000 /*100000*/, +0x0C88 /*006210*/,0x0B76 /*005566*/,0x0002 /*000002*/,0x1226 /*011046*/,0x15C8 /*012710*/,0x8000 /*100000*/,0x1D80 /*016600*/,0x0002 /*000002*/, +0x892C /*104454*/,0x15C1 /*012701*/,0x1C3E /*016076*/,0x8918 /*104430*/,0x1D80 /*016600*/,0x0008 /*000010*/,0x15C1 /*012701*/,0x1C38 /*016070*/, +0x8910 /*104420*/,0x010D /*000415*/,0x3400 /*032000*/,0xE200 /*161000*/,0x301B /*030033*/,0x3089 /*030211*/,0x3089 /*030211*/,0xB089 /*130211*/, +0x066D /*003155*/,0x0400 /*002000*/,0xC600 /*143000*/,0x0865 /*004145*/,0xF600 /*173000*/,0x020B /*001013*/,0x0300 /*001400*/,0xC103 /*140403*/, +0x3215 /*031025*/,0x181C /*014034*/,0xF689 /*173211*/,0x040B /*002013*/,0x0100 /*000400*/,0xFD03 /*176403*/,0xC689 /*143211*/,0x0665 /*003145*/, +0xA200 /*121000*/,0x8700 /*103400*/,0x8000 /*100000*/,0x0111 /*000421*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1C10 /*016020*/,0x0BD0 /*005720*/, +0x892C /*104454*/,0x1180 /*010600*/,0x1D81 /*016601*/,0x0010 /*000020*/,0x8916 /*104426*/,0x1181 /*010601*/,0x1D80 /*016600*/,0x0010 /*000020*/, +0x8910 /*104420*/,0x1D80 /*016600*/,0x0010 /*000020*/,0x0AF0 /*005360*/,0x0004 /*000004*/,0x65C6 /*062706*/,0x0006 /*000006*/,0x0087 /*000207*/, +0x7996 /*074626*/,0x5A82 /*055202*/,0x8001 /*100001*/,0xABBA /*125672*/,0x6AD4 /*065324*/,0x7FFF /*077777*/,0x0169 /*000551*/,0x0C00 /*006000*/, +0x3E00 /*037000*/,0x421C /*041034*/,0x8A6E /*105156*/,0x004B /*000113*/,0x9480 /*112200*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1C44 /*016104*/, +0x1DC6 /*016706*/,0xFB82 /*175602*/,0x8902 /*104402*/,0x15F7 /*012767*/,0x1C56 /*016126*/,0xE3B4 /*161664*/,0x1DC1 /*016701*/,0xE314 /*161424*/, +0x0102 /*000402*/,0x0AB7 /*005267*/,0x02DA /*001332*/,0x15F7 /*012767*/,0x1C66 /*016146*/,0xE3A4 /*161644*/,0x29A6 /*024646*/,0x15C1 /*012701*/, +0xE000 /*160000*/,0x2596 /*022626*/,0x1849 /*014111*/,0xE5C1 /*162701*/,0x00C2 /*000302*/,0x1077 /*010167*/,0x02C0 /*001300*/,0x018F /*000617*/, +0x3400 /*032000*/,0x7200 /*071000*/,0xC01C /*140034*/,0x6015 /*060025*/,0x6A17 /*065027*/,0xC289 /*141211*/,0x4CA5 /*046245*/,0x1B00 /*015400*/, +0xC203 /*141003*/,0x44A5 /*042245*/,0x1D00 /*016400*/,0xC203 /*141003*/,0x45A5 /*042645*/,0x1800 /*014000*/,0xC203 /*141003*/,0x48A5 /*044245*/, +0x1A00 /*015000*/,0xC203 /*141003*/,0x0AA5 /*005245*/,0x4300 /*041400*/,0x3803 /*034003*/,0x1889 /*014211*/,0xC102 /*140402*/,0x080A /*004012*/, +0x3789 /*033611*/,0x9A10 /*115020*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1CA0 /*016240*/,0x0286 /*001206*/,0x893A /*104472*/,0xA5C2 /*122702*/, +0x000A /*000012*/,0x0339 /*001471*/,0xA5C2 /*122702*/,0x002C /*000054*/,0x02F9 /*001371*/,0x893A /*104472*/,0x01E2 /*000742*/,0x0AB7 /*005267*/, +0x0272 /*001162*/,0x01F4 /*000764*/,0x0AB7 /*005267*/,0x0270 /*001160*/,0x0AB7 /*005267*/,0x026A /*001152*/,0x01EF /*000757*/,0x0AF7 /*005367*/, +0x0268 /*001150*/,0x01EC /*000754*/,0x0A37 /*005067*/,0x025A /*001132*/,0x0174 /*000564*/,0x3400 /*032000*/,0xCE00 /*147000*/,0x371C /*033434*/, +0x580A /*054012*/,0x3702 /*033402*/,0x560A /*053012*/,0x3702 /*033402*/,0x540A /*052012*/,0x3702 /*033402*/,0x520A /*051012*/,0xC002 /*140002*/, +0xC415 /*142025*/,0x6A1E /*065036*/,0xF789 /*173611*/,0x4410 /*042020*/,0x0502 /*002402*/,0xC007 /*140007*/,0x9C15 /*116025*/,0x6A1E /*065036*/, +0xF789 /*173611*/,0x3A10 /*035020*/,0xF702 /*173402*/,0x3C0B /*036013*/,0x0502 /*002402*/,0xC002 /*140002*/,0x9D15 /*116425*/,0x0001 /*000001*/, +0x0034 /*000064*/,0x1CFC /*016374*/,0x1EE8 /*017350*/,0x896A /*104552*/,0x10F7 /*010367*/,0x0226 /*001046*/,0x15C0 /*012700*/,0x1F01 /*017401*/, +0x896A /*104552*/,0x10F7 /*010367*/,0x0222 /*001042*/,0x15C0 /*012700*/,0x1F1F /*017437*/,0x8936 /*104466*/,0x8940 /*104500*/,0x8908 /*104410*/, +0x1037 /*010067*/,0x020C /*001014*/,0x6DF7 /*066767*/,0x0214 /*001024*/,0x0208 /*001010*/,0x0BF7 /*005767*/,0x0204 /*001004*/,0x0707 /*003407*/, +0x15F7 /*012767*/,0x0151 /*000521*/,0x3400 /*032000*/,0x2A00 /*025000*/,0x701D /*070035*/,0x96FF /*113377*/,0xF7FA /*173772*/,0x7415 /*072025*/, +0x92FF /*111377*/,0x06FA /*003372*/,0xF701 /*173401*/,0x6815 /*064025*/,0x88FF /*104377*/,0xF7FA /*173772*/,0x6C15 /*066025*/,0x84FF /*102377*/, +0xC1FA /*140772*/,0xEC1D /*166035*/,0xC001 /*140001*/,0xDE1D /*157035*/,0x0C01 /*006001*/,0xC003 /*140003*/,0xC000 /*140000*/,0xC00C /*140014*/, +0xC00C /*140014*/,0xC00C /*140014*/,0xFF45 /*177505*/,0xC407 /*142007*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1D58 /*016530*/,0x2017 /*020027*/, +0x2000 /*020000*/,0x87B6 /*103666*/,0x2001 /*020001*/,0x8201 /*101001*/,0x1001 /*010001*/,0x1046 /*010106*/,0x15F7 /*012767*/,0x0006 /*000006*/, +0xE298 /*161230*/,0x1077 /*010167*/,0xFA5A /*175132*/,0x15C1 /*012701*/,0x1C44 /*016104*/,0x0BF7 /*005767*/,0x01B4 /*000664*/,0x071B /*003433*/, +0x0A37 /*005067*/,0xEE5E /*167136*/,0x0A37 /*005067*/,0xEE5C /*167134*/,0x0A37 /*005067*/,0xEE5A /*167132*/,0x01A0 /*000640*/,0x3400 /*032000*/, +0x8600 /*103000*/,0x371D /*033435*/,0x5E0A /*057012*/,0xC1EE /*140756*/,0x1015 /*010025*/,0xF71A /*173432*/,0x9C0B /*116013*/,0x0E01 /*007001*/, +0x3707 /*033407*/,0x4A0A /*045012*/,0x37EE /*033756*/,0x480A /*044012*/,0xC0EE /*140356*/,0x5E15 /*057025*/,0x8000 /*100000*/,0xC10C /*140414*/, +0xCC15 /*146025*/,0xC217 /*141027*/,0x2615 /*023025*/,0x911E /*110436*/,0xC014 /*140024*/,0xFD0A /*176412*/,0xF706 /*173406*/,0x7C0B /*076013*/, +0x7301 /*071401*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1DB4 /*016664*/,0x041E /*002036*/,0x15F7 /*012767*/,0x1DC2 /*016702*/,0xE270 /*161160*/, +0x1077 /*010167*/,0xFA02 /*175002*/,0x0000 /*000000*/,0x1DC1 /*016701*/,0xF9FC /*174774*/,0x15C0 /*012700*/,0x0018 /*000030*/,0x0C80 /*006200*/, +0x15C2 /*012702*/,0x1E84 /*017204*/,0x1077 /*010167*/,0xEE32 /*167062*/,0x1077 /*010167*/,0xED4C /*166514*/,0x15C3 /*012703*/,0x000E /*000016*/, +0x6043 /*060103*/,0x10F7 /*010367*/,0xE24A /*161112*/,0x0130 /*000460*/,0x3400 /*032000*/,0xE200 /*161000*/,0x911D /*110435*/,0xC014 /*140024*/, +0xFD0A /*176412*/,0xC606 /*143006*/,0x3C1D /*036035*/,0xB7E2 /*133742*/,0xDA11 /*155021*/,0x02F9 /*001371*/,0x3701 /*033401*/,0xFA0A /*175012*/, +0x77ED /*073755*/,0xB810 /*134020*/,0xC5F9 /*142771*/,0xB41D /*132035*/,0xD5F9 /*152771*/,0x0A95 /*005225*/,0x3700 /*033400*/,0xBC0A /*136012*/, +0x77F9 /*073771*/,0x4000 /*040000*/,0x36E8 /*033350*/,0x4089 /*040211*/,0x3A89 /*035211*/,0x7889 /*074211*/,0x0001 /*000001*/,0x0034 /*000064*/, +0x1E10 /*017020*/,0x0A03 /*005003*/,0xA097 /*120227*/,0x0059 /*000131*/,0x0202 /*001002*/,0x0AC3 /*005303*/,0x0087 /*000207*/,0xA097 /*120227*/, +0x004E /*000116*/,0x02FC /*001374*/,0x0A83 /*005203*/,0x0087 /*000207*/,0x1026 /*010046*/,0x892C /*104454*/,0x1040 /*010100*/,0x892C /*104454*/, +0x15C1 /*012701*/,0x11B6 /*010666*/,0x1D80 /*016600*/,0x000C /*000014*/,0x891A /*104432*/,0x1180 /*010600*/,0x1026 /*010046*/,0x1026 /*010046*/, +0x013B /*000473*/,0x3400 /*032000*/,0x3E00 /*037000*/,0xCE1E /*147036*/,0x0665 /*003145*/,0x8000 /*100000*/,0x021D /*001035*/,0x0100 /*000400*/, +0xDF10 /*157420*/,0xFA09 /*175011*/,0xF616 /*173026*/,0x060B /*003013*/,0x0500 /*002400*/,0x0E06 /*007006*/,0xC605 /*143005*/,0x1265 /*011145*/, +0xA200 /*121000*/,0x8700 /*103400*/,0x8100 /*100400*/,0x8013 /*100023*/,0x101D /*010035*/,0x1800 /*014000*/,0xC189 /*140611*/,0xB615 /*133025*/, +0x8011 /*100021*/,0x021D /*001035*/,0xE500 /*162400*/,0x0001 /*000001*/,0x0034 /*000064*/,0x1E6C /*017154*/,0x8912 /*104422*/,0x01EE /*000756*/, +0x1381 /*011601*/,0x1D80 /*016600*/,0x0010 /*000020*/,0x8916 /*104426*/,0x15C1 /*012701*/,0x11B6 /*010666*/,0x1D80 /*016600*/,0x0002 /*000002*/, +0x8910 /*104420*/,0x01E4 /*000744*/,0x65C6 /*062706*/,0x0008 /*000010*/,0x1040 /*010100*/,0x1581 /*012601*/,0x17C2 /*013702*/,0x0028 /*000050*/, +0x004A /*000112*/,0x1582 /*012602*/,0x1583 /*012603*/,0x1584 /*012604*/,0x005F /*000137*/,0x0192 /*000622*/,0x0800 /*004000*/,0x9A00 /*115000*/, +0x181E /*014036*/,0x1C0B /*016013*/,0x0001 /*000001*/,0x0026 /*000046*/,0x1760 /*013540*/,0x4450 /*042120*/,0x2D50 /*026520*/,0x3131 /*030461*/, +0x4220 /*041040*/,0x5341 /*051501*/,0x4349 /*041511*/,0x202C /*020054*/,0x4556 /*042526*/,0x5352 /*051522*/,0x4F49 /*047511*/,0x204E /*020116*/, +0x3030 /*030060*/,0x4137 /*040467*/,0x0A0D /*005015*/,0x4F2A /*047452*/,0x0020 /*000040*/,0x0153 /*000523*/,0x3400 /*032000*/,0x9C00 /*116000*/, +0x441E /*042036*/,0x204F /*020117*/,0x4F59 /*047531*/,0x2055 /*020125*/,0x4552 /*042522*/,0x5551 /*052521*/,0x5249 /*051111*/,0x2045 /*020105*/, +0x5845 /*054105*/,0x2050 /*020120*/,0x524F /*051117*/,0x4C20 /*046040*/,0x474F /*043517*/,0x2820 /*024040*/,0x4C46 /*046106*/,0x414F /*040517*/, +0x4954 /*044524*/,0x474E /*043516*/,0x5E20 /*057040*/,0x3F29 /*037451*/,0x4400 /*042000*/,0x204F /*020117*/,0x4F59 /*047531*/,0x2255 /*021125*/, +0x0001 /*000001*/,0x0034 /*000064*/,0x1ECA /*017312*/,0x4E20 /*047040*/,0x4545 /*042505*/,0x2044 /*020104*/,0x4854 /*044124*/,0x2045 /*020105*/, +0x5845 /*054105*/,0x4554 /*042524*/,0x444E /*042116*/,0x4445 /*042105*/,0x4620 /*043040*/,0x4E55 /*047125*/,0x5443 /*052103*/,0x4F49 /*047511*/, +0x534E /*051516*/,0x003F /*000077*/,0x4948 /*044510*/,0x4847 /*044107*/,0x532D /*051455*/,0x4550 /*042520*/,0x4445 /*042105*/,0x5220 /*051040*/, +0x4145 /*040505*/,0x4544 /*042504*/,0x01DE /*000736*/,0x3400 /*032000*/,0xF800 /*174000*/,0x521E /*051036*/,0x502F /*050057*/,0x4E55 /*047125*/, +0x4843 /*044103*/,0x003F /*000077*/,0x4553 /*042523*/,0x2054 /*020124*/,0x5055 /*050125*/,0x5420 /*052040*/,0x4548 /*042510*/,0x4520 /*042440*/, +0x5458 /*052130*/,0x5245 /*051105*/,0x414E /*040516*/,0x204C /*020114*/,0x5546 /*052506*/,0x434E /*041516*/,0x4954 /*044524*/,0x4E4F /*047117*/, +0x003F /*000077*/,0x454D /*042515*/,0x4F4D /*047515*/,0x5952 /*054522*/,0x653F /*062477*/,0x0001 /*000001*/,0x0007 /*000007*/,0x1F26 /*017446*/, +0xB300 /*131400*/,0x0001 /*000001*/,0x0014 /*000024*/,0x1F28 /*017450*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x01A4 /*000644*/,0x0600 /*003000*/,0x4400 /*042000*/,0x991C /*114434*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x8100 /*100400*/,0x2442 /*022102*/,0x2418 /*022030*/,0x8142 /*100502*/,0x2442 /*022102*/,0x2418 /*022030*/,0x8142 /*100502*/, +0x2442 /*022102*/,0x2418 /*022030*/,0x8142 /*100502*/,0x0000 /*000000*/,0xCC00 /*146000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/,0x0000 /*000000*/, +0x0000 /*000000*/,0xFF00 /*177400*/] +} diff --git a/apps/pdp11/tapes/basic/README.md b/apps/pdp11/tapes/basic/README.md new file mode 100644 index 0000000000..ced484b8f7 --- /dev/null +++ b/apps/pdp11/tapes/basic/README.md @@ -0,0 +1,258 @@ +--- +layout: page +title: DEC PDP-11 BASIC +permalink: /apps/pdp11/tapes/basic/ +--- + +DEC PDP-11 BASIC +---------------- + +Try the [DEC BASIC Demo](/devices/pdp11/machine/1120/basic/debugger/). + +PCjs has archived the following DEC resources: + +- [BASIC (Single User) Tape Image](DEC-11-AJPB-PB.json) +- [PDP-11 BASIC PROGRAMMING MANUAL (December 1970)](http://archive.pcjs.org/pubs/dec/pdp11/basic/DEC-11-AJPB-D_PDP-11_BASIC_Programming_Manual_Dec70.pdf) + +Third-party resources include: + +- "[PDP-11 Paper Tape BASIC](http://www.avitech.com.au/ptb/ptb.html)", written March 24, 2013 + +--- + +Debugging Notes +--------------- + +### PDPjs Debugger vs. SIMH + +When I first tried to run BASIC in a PDPjs machine, it crashed almost immediately. It was attempting to use memory beyond +the 16Kb of installed RAM. After a bit of poking around, I found BASIC's memory sizing code here: + + 016142: 012701 160000 MOV #160000,R1 + 016146: 022626 CMP (SP)+,(SP)+ + 016150: 014111 MOV -(R1),@R1 + +The code sets R1 to highest possible RAM address and starts scanning backwards for the first valid memory location. However, +the scanning process wasn't clear to me at first glance, and the `CMP (SP)+,(SP)+` was a bit of a head-scratcher, so I decided +to do an instruction-by-instruction comparison with SIMH. + +After cloning the [SIMH project](https://github.com/simh/simh) and building the *pdp11* binary, I created a *pdp11.ini* text file +that contained: + + ECHO Configuring PDP-11/20 with 16Kb of RAM... + SET CPU 11/20 + SET CPU 16K + + ; Throttle SIMH to limit CPU usage, heat and fan noise + SET THROTTLE 5% + + ; Disable devices that we don't need + SET HK DISABLE + ; SET RHA DISABLE + SET DZ DISABLE + SET RL DISABLE + SET RX DISABLE + SET RP DISABLE + SET RQ DISABLE + SET TM DISABLE + SET TQ DISABLE + SET RK DISABLE + + ; Enable the high-speed paper tape reader + SET PTR ENABLE + ; SET PTP ENABLE + + ECHO Loading BASIC paper tape image directly into memory... + LOAD DEC-11-AJPB-PB.ptap + + ECHO Setting breakpoint at 016142... + break -e 016142 + +along with a *tr* text file that contained: + + step + examine r0,r1,r2,r3,r4,r5,sp,psw + +Then I ran *pdp11* and typed "g" to start the machine: + + PDP-11 simulator V4.0-0 Beta git commit id: 592deb8f + Configuring PDP-11/20 with 16Kb of RAM... + Disabling XQ + Loading BASIC paper tape image directly into memory... + Setting breakpoint at 016142... + sim> g + + Breakpoint, PC: 016142 (MOV #160000,R1) + sim> do tr + + Step expired, PC: 016146 (CMP (SP)+,(SP)+) + R0: 004106 + R1: 160000 + R2: 000000 + R3: 000000 + R4: 000000 + R5: 000000 + SP: 013654 + PSW: 000010 CM=K PM=K RS0 FPD0 IPL=0 TBIT0 N1 Z0 V0 C0 + sim> do tr + + Step expired, PC: 016150 (MOV -(R1),(R1)) + R0: 004106 + R1: 160000 + R2: 000000 + R3: 000000 + R4: 000000 + R5: 000000 + SP: 013660 + PSW: 000011 CM=K PM=K RS0 FPD0 IPL=0 TBIT0 N1 Z0 V0 C1 + sim> do tr + + Step expired, PC: 016152 (SUB #302,R1) + R0: 004106 + R1: 157776 + R2: 000000 + R3: 000000 + R4: 000000 + R5: 000000 + SP: 013660 + PSW: 000011 CM=K PM=K RS0 FPD0 IPL=0 TBIT0 N1 Z0 V0 C1 + sim> do tr + + Step expired, PC: 016150 (MOV -(R1),(R1)) + R0: 004106 + R1: 157776 + R2: 000000 + R3: 000000 + R4: 000000 + R5: 000000 + SP: 013660 + PSW: 000000 CM=K PM=K RS0 FPD0 IPL=0 TBIT0 N0 Z0 V0 C0 + +After typing several "do tr" commands, I was surprised to see SIMH execution continually returning to this instruction: + + Step expired, PC: 016150 (MOV -(R1),(R1)) + +until I remembered that when the PDP-11 accesses an invalid address, it's supposed to trap to vector 000004, and that BASIC +must have modified vector 000004 to jump into the middle of this code. + +This code fragment was simply marching down the address space until it reached an address that didn't trap. The odd-looking +`CMP (SP)+,(SP)+` instruction was throwing away the PC and PSW that each trap pushed onto the stack, by effectively adding +4 to SP. + +The problem with PDPjs was that it wasn't generating a trap to vector 000004 when an invalid address was accessed. After fixing +that, I verified with the PDPjs Debugger that the memory sizing code was working properly: + + PDPjs v1.30.1 + Copyright © 2012-2016 Jeff Parsons + License: GPL version 3 or later + Portions adapted from the PDP-11/70 Emulator v1.4 by Paul Nankervis + bus: 00016Kb RAM at 000000 + bus: 00008Kb H/W at 160000 + cpu: model 1120 + Type ? for help with PDP11 Debugger commands + R0=000000 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000 + SP=000000 PC=016104 PS=000013 T0 N1 Z0 V1 C1 + 016104: 016706 175602 MOV 013712,SP + >> bp 016142 + bp 016142 set + >> g + running + + bp 016142 hit + stopped (821 instructions, 7443 cycles, 23 ms, 323609 hz) + R0=004106 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000 + SP=013654 PC=016142 PS=000000 T0 N0 Z0 V0 C0 + 016142: 012701 160000 MOV #160000,R1 + >> u + 016146: 022626 CMP (SP)+,(SP)+ + 016150: 014111 MOV -(R1),@R1 + 016152: 162701 000302 SUB #302,R1 + 016156: 010167 001300 MOV R1,017462 + 016162: 012700 013540 MOV #13540,R0 + 016166: 104552 TRAP 152 + 016170: 122702 000114 CMPB #114,R2 + 016174: 001433 BEQ 016264 + >> dw 4 l2 + 000004 016146 000000 + >> tr + R0=004106 R1=160000 R2=000000 R3=000000 R4=000000 R5=000000 + SP=013654 PC=016146 PS=000010 T0 N1 Z0 V0 C0 + 016146: 022626 CMP (SP)+,(SP)+ ;cycles=7 + >> tr + R0=004106 R1=160000 R2=000000 R3=000000 R4=000000 R5=000000 + SP=013660 PC=016150 PS=000011 T0 N1 Z0 V0 C1 + 016150: 014111 MOV -(R1),@R1 ;cycles=11 + >> tr + trapped to 004 (157776) + R0=004106 R1=157776 R2=000000 R3=000000 R4=000000 R5=000000 + SP=013654 PC=016146 PS=000000 T0 N0 Z0 V0 C0 + 016146: 022626 CMP (SP)+,(SP)+ ;cycles=0 + >> tr + R0=004106 R1=157776 R2=000000 R3=000000 R4=000000 R5=000000 + SP=013660 PC=016150 PS=000000 T0 N0 Z0 V0 C0 + 016150: 014111 MOV -(R1),@R1 ;cycles=11 + >> tr + trapped to 004 (157774) + R0=004106 R1=157774 R2=000000 R3=000000 R4=000000 R5=000000 + SP=013654 PC=016146 PS=000000 T0 N0 Z0 V0 C0 + 016146: 022626 CMP (SP)+,(SP)+ ;cycles=0 + >> tr + R0=004106 R1=157774 R2=000000 R3=000000 R4=000000 R5=000000 + SP=013660 PC=016150 PS=000000 T0 N0 Z0 V0 C0 + 016150: 014111 MOV -(R1),@R1 ;cycles=11 + >> g + running + PDP-11 BASIC, VERSION 007A + *O + READY + +I like to think that the PDPjs Debugger (and in fact, *all* PCjs Debuggers) is considerably simpler to use, and more +informative, too. For example, when you're single-stepping ("t" or "tr"), the Debugger will alert you if the previous +instruction triggered a trap. + +There are also a variety of diagnostic "bus" and "memory" messages that can be enabled, if you want to see more detail +about each instruction's operation; see the Debugger's "m" command for details. + +### TRAP Handling + +One of the first things I noticed when debugging PDP-11 BASIC was its heavy reliance on TRAP instructions. +For example, `TRAP 000` is used to output the character in R2 to the terminal. Let's take a closer look at how +its TRAP handler works. + +Since the trap vector for TRAP instructions is fixed at address 000034, we need to dump the contents of that vector: + + >> dw 034 l2 + 000034 000100 000000 + +This tells us that the BASIC TRAP handler is at 000100: + + >> u 000100 + 000100: 011666 000002 MOV @SP,2(SP) + 000104: 162716 000002 SUB #2,@SP + 000110: 013646 MOV @(SP)+,-(SP) + 000112: 006216 ASR @SP + 000114: 103404 BCS 000126 + 000116: 006316 ASL @SP + 000120: 062716 073654 ADD #73654,@SP + 000124: 013607 MOV @(SP)+,PC + +When the code starts, the TRAP instruction has already pushed two words onto the stack: + + 0(SP): previous PC + 2(SP): previous PSW + +The first instruction, `MOV @SP,2(SP)`, copies the *previous PC* onto the *previous PSW*, which is where we'll eventually want +*previous PC*, so that the handler can eventually return with a simple `RTS PC`. + +The next instruction, `SUB #2,@SP`, subtracts 2 from the original *previous PC*, so that it now points to the TRAP instruction. + +Then `@(SP)+,-(SP)` fetches the TRAP instruction while also "popping" the original *previous PC* and then "pushing" TRAP +instruction onto the stack, overwriting the original *previous PC*. + +The next few instructions shift the TRAP right to see if bit 0 is set, and if it is not, then the TRAP instruction is restored +by shifting it left again, and then a large offset is added to it, transforming the TRAP instruction (which is now known to be +an *even* value) into a jump table index. + +The final instruction, `MOV @(SP)+,PC`, moves the address at the jump table index into PC, while also removing the TRAP +instruction from the stack, leaving only the *previous PC* on the stack, so that when the TRAP handler is done, it can execute +`RTS PC` to return to the caller. diff --git a/devices/c1p/machine/32kb/machine.xml b/devices/c1p/machine/32kb/machine.xml index bf328e8372..44030af5b0 100644 --- a/devices/c1p/machine/32kb/machine.xml +++ b/devices/c1p/machine/32kb/machine.xml @@ -1,6 +1,6 @@ - + OSI Challenger 1P (32Kb) with Disk Support @@ -22,7 +22,7 @@ - + CTRL-C CTRL-O BREAK diff --git a/devices/c1p/machine/8kb/all/debugger/machine.xml b/devices/c1p/machine/8kb/all/debugger/machine.xml index de23306ffa..ecc5ff602d 100644 --- a/devices/c1p/machine/8kb/all/debugger/machine.xml +++ b/devices/c1p/machine/8kb/all/debugger/machine.xml @@ -1,6 +1,6 @@ - + OSI Challenger 1P (8Kb, Additional Software) @@ -21,7 +21,7 @@ - + CTRL-C CTRL-O BREAK diff --git a/devices/c1p/machine/8kb/all/machine.xml b/devices/c1p/machine/8kb/all/machine.xml index 25b39f339b..4e3b988ad3 100644 --- a/devices/c1p/machine/8kb/all/machine.xml +++ b/devices/c1p/machine/8kb/all/machine.xml @@ -20,7 +20,7 @@ - + CTRL-C CTRL-O BREAK diff --git a/devices/c1p/machine/8kb/embed/machine.xml b/devices/c1p/machine/8kb/embed/machine.xml index d8cabb67bf..ba45b52533 100644 --- a/devices/c1p/machine/8kb/embed/machine.xml +++ b/devices/c1p/machine/8kb/embed/machine.xml @@ -16,7 +16,7 @@ diff --git a/devices/pc8080/machine/exerciser/machine-8080pre.xml b/devices/pc8080/machine/exerciser/machine-8080pre.xml index c43b27344d..248ef7bff2 100644 --- a/devices/pc8080/machine/exerciser/machine-8080pre.xml +++ b/devices/pc8080/machine/exerciser/machine-8080pre.xml @@ -4,8 +4,7 @@ 8080 Exerciser Preliminary Test Machine - - + diff --git a/devices/pc8080/machine/exerciser/machine-cputest.xml b/devices/pc8080/machine/exerciser/machine-cputest.xml index 7d65f4b52f..c4773ab71a 100644 --- a/devices/pc8080/machine/exerciser/machine-cputest.xml +++ b/devices/pc8080/machine/exerciser/machine-cputest.xml @@ -4,8 +4,7 @@ 8080 CPUTEST Machine - - + diff --git a/devices/pc8080/machine/exerciser/machine-test.xml b/devices/pc8080/machine/exerciser/machine-test.xml index 14bb853d49..fc3e6d7641 100644 --- a/devices/pc8080/machine/exerciser/machine-test.xml +++ b/devices/pc8080/machine/exerciser/machine-test.xml @@ -4,8 +4,7 @@ 8080 "Kelly Smith" Test Machine - - + diff --git a/devices/pc8080/machine/exerciser/machine.xml b/devices/pc8080/machine/exerciser/machine.xml index d15f5cc0c8..734dfa5d30 100644 --- a/devices/pc8080/machine/exerciser/machine.xml +++ b/devices/pc8080/machine/exerciser/machine.xml @@ -4,8 +4,7 @@ 8080 Exerciser Test Machine - - + diff --git a/devices/pc8080/machine/invaders/debugger/machine.xml b/devices/pc8080/machine/invaders/debugger/machine.xml index 6d5b3ea364..61f698dd44 100644 --- a/devices/pc8080/machine/invaders/debugger/machine.xml +++ b/devices/pc8080/machine/invaders/debugger/machine.xml @@ -14,7 +14,7 @@ 224x256 Screen (Rotated) - Full Screen + Full Screen diff --git a/devices/pc8080/machine/invaders/machine.xml b/devices/pc8080/machine/invaders/machine.xml index de56787d87..a13e01fc14 100644 --- a/devices/pc8080/machine/invaders/machine.xml +++ b/devices/pc8080/machine/invaders/machine.xml @@ -14,7 +14,7 @@ 224x256 Screen (Rotated) - Full Screen + Full Screen diff --git a/devices/pc8080/machine/vt100/debugger/machine.xml b/devices/pc8080/machine/vt100/debugger/machine.xml index 814c90b647..04e8db8dfa 100644 --- a/devices/pc8080/machine/vt100/debugger/machine.xml +++ b/devices/pc8080/machine/vt100/debugger/machine.xml @@ -12,23 +12,23 @@ VT100 Screen - - - - - - - - Full Screen + + + + + + + + Full Screen - SET-UP + SET-UP - TEST RECEIVER + TEST RECEIVER diff --git a/devices/pc8080/machine/vt100/machine.xml b/devices/pc8080/machine/vt100/machine.xml index 9565f1e3ac..b1e90f3ac8 100644 --- a/devices/pc8080/machine/vt100/machine.xml +++ b/devices/pc8080/machine/vt100/machine.xml @@ -12,22 +12,22 @@ VT100 Screen - - - - - - - - Full Screen + + + + + + + + Full Screen - SET-UP + SET-UP - TEST RECEIVER + TEST RECEIVER diff --git a/devices/pc8080/panel/left.xml b/devices/pc8080/panel/left.xml index b8126d5117..1611dcb8a5 100644 --- a/devices/pc8080/panel/left.xml +++ b/devices/pc8080/panel/left.xml @@ -1,28 +1,28 @@ Control Panel - + - - 00 - 0000 - 0000 - 0000 - 0000 - 0000 + + 00 + 0000 + 0000 + 0000 + 0000 + 0000 - 0 - 0 - 0 - 0 - 0 - 0 + 0 + 0 + 0 + 0 + 0 + 0 - Speed: - Stopped + Speed: + Stopped - + Run Step Reset diff --git a/devices/pc8080/panel/wide.xml b/devices/pc8080/panel/wide.xml index 674d25f6c6..e202f0c8ac 100644 --- a/devices/pc8080/panel/wide.xml +++ b/devices/pc8080/panel/wide.xml @@ -1,32 +1,32 @@ Control Panel - + - - 00 - 0000 - 0000 - 0000 - 0000 - 0000 + + 00 + 0000 + 0000 + 0000 + 0000 + 0000 - 0 - 0 - 0 - 0 - 0 - 0 + 0 + 0 + 0 + 0 + 0 + 0 - Speed: - Stopped + Speed: + Stopped - + Enter Clear - Run + Run Step Reset Fast diff --git a/devices/pc8080/ram/README.md b/devices/pc8080/ram/README.md new file mode 100644 index 0000000000..95e98bc538 --- /dev/null +++ b/devices/pc8080/ram/README.md @@ -0,0 +1,23 @@ +--- +layout: page +title: 8080-Based RAM Images +permalink: /devices/pc8080/ram/ +--- + +8080-Based RAM Images +--------------------- + +RAM images are added to machines by including a `` component in the machine XML configuration file +with the *file* attribute set to the filename of the image, along with optional *load* and *exec* addresses; eg: + +```xml + +``` + +If no *load* address is specified, the `` component relies on the "load" property of the JSON-encoded RAM image; +otherwise, the starting RAM address is used. If no *exec* address is specified, the CPU will begin execution at its usual +reset address. + +The project currently contains the following 8080-based RAM images: + +* [8080 Exerciser Tests](exerciser/) diff --git a/devices/pc8080/rom/exerciser/8080EX1.MAC b/devices/pc8080/ram/exerciser/8080EX1.MAC similarity index 100% rename from devices/pc8080/rom/exerciser/8080EX1.MAC rename to devices/pc8080/ram/exerciser/8080EX1.MAC diff --git a/devices/pc8080/rom/exerciser/8080EX1.json b/devices/pc8080/ram/exerciser/8080EX1.json similarity index 100% rename from devices/pc8080/rom/exerciser/8080EX1.json rename to devices/pc8080/ram/exerciser/8080EX1.json diff --git a/devices/pc8080/rom/exerciser/8080EXER.MAC b/devices/pc8080/ram/exerciser/8080EXER.MAC similarity index 100% rename from devices/pc8080/rom/exerciser/8080EXER.MAC rename to devices/pc8080/ram/exerciser/8080EXER.MAC diff --git a/devices/pc8080/rom/exerciser/8080EXER.json b/devices/pc8080/ram/exerciser/8080EXER.json similarity index 100% rename from devices/pc8080/rom/exerciser/8080EXER.json rename to devices/pc8080/ram/exerciser/8080EXER.json diff --git a/devices/pc8080/rom/exerciser/8080PRE.MAC b/devices/pc8080/ram/exerciser/8080PRE.MAC similarity index 100% rename from devices/pc8080/rom/exerciser/8080PRE.MAC rename to devices/pc8080/ram/exerciser/8080PRE.MAC diff --git a/devices/pc8080/rom/exerciser/8080PRE.json b/devices/pc8080/ram/exerciser/8080PRE.json similarity index 100% rename from devices/pc8080/rom/exerciser/8080PRE.json rename to devices/pc8080/ram/exerciser/8080PRE.json diff --git a/devices/pc8080/rom/exerciser/CPUTEST.json b/devices/pc8080/ram/exerciser/CPUTEST.json similarity index 100% rename from devices/pc8080/rom/exerciser/CPUTEST.json rename to devices/pc8080/ram/exerciser/CPUTEST.json diff --git a/devices/pc8080/rom/exerciser/README.md b/devices/pc8080/ram/exerciser/README.md similarity index 70% rename from devices/pc8080/rom/exerciser/README.md rename to devices/pc8080/ram/exerciser/README.md index 1a385bb28f..279935e763 100644 --- a/devices/pc8080/rom/exerciser/README.md +++ b/devices/pc8080/ram/exerciser/README.md @@ -1,7 +1,9 @@ --- layout: page title: 8080 Exerciser Tests -permalink: /devices/pc8080/rom/exerciser/ +permalink: /devices/pc8080/ram/exerciser/ +redirect_from: + - /devices/pc8080/rom/exerciser/ --- 8080 Exerciser Tests @@ -12,4 +14,4 @@ permalink: /devices/pc8080/rom/exerciser/ * [8080PRE](8080PRE.MAC) Our [8080 Exerciser Test Machine](/devices/pc8080/machine/exerciser/) runs [8080EX1](8080EX1.MAC), -since it is the most comprehensive test and verifies strict compatibilty with the original Intel 8080. +since it is the most comprehensive test and verifies strict compatibility with the original Intel 8080. diff --git a/devices/pc8080/rom/exerciser/TEST.ASM b/devices/pc8080/ram/exerciser/TEST.ASM similarity index 100% rename from devices/pc8080/rom/exerciser/TEST.ASM rename to devices/pc8080/ram/exerciser/TEST.ASM diff --git a/devices/pc8080/rom/exerciser/TEST.json b/devices/pc8080/ram/exerciser/TEST.json similarity index 100% rename from devices/pc8080/rom/exerciser/TEST.json rename to devices/pc8080/ram/exerciser/TEST.json diff --git a/devices/pc8080/rom/README.md b/devices/pc8080/rom/README.md index 0288823ff5..dc09e6fd89 100644 --- a/devices/pc8080/rom/README.md +++ b/devices/pc8080/rom/README.md @@ -1,21 +1,20 @@ --- layout: page -title: 8080-Based ROMs +title: 8080-Based ROM Images permalink: /devices/pc8080/rom/ --- -8080-Based ROMs ---- +8080-Based ROM Images +--------------------- -ROMs are added to machines by including one *[ROM](/docs/pcx86/rom/)* component in the machine XML configuration file +ROMs are added to machines by including one `` component in the machine XML configuration file for each ROM in the machine; eg: ```xml ``` -The project currently contains the following 8080-based ROMs: +The project currently contains the following 8080-based ROM images: -* [8080 Exerciser Tests](exerciser/) * [Space Invaders (1978)](invaders/) * [DEC VT100 Terminal](vt100/) diff --git a/devices/pcx86/chipset/5150-cga-max.xml b/devices/pcx86/chipset/5150-cga-max.xml index 13cfce1930..1335068ba1 100644 --- a/devices/pcx86/chipset/5150-cga-max.xml +++ b/devices/pcx86/chipset/5150-cga-max.xml @@ -1,5 +1,5 @@ - + diff --git a/devices/pcx86/chipset/att6300-cga-max.xml b/devices/pcx86/chipset/att6300-cga-max.xml index e3d736f85e..b4a4da3f55 100644 --- a/devices/pcx86/chipset/att6300-cga-max.xml +++ b/devices/pcx86/chipset/att6300-cga-max.xml @@ -1,5 +1,5 @@ - + diff --git a/devices/pcx86/chipset/mpc1600-cga-max.xml b/devices/pcx86/chipset/mpc1600-cga-max.xml index 0692bdb559..6bf974074f 100644 --- a/devices/pcx86/chipset/mpc1600-cga-max.xml +++ b/devices/pcx86/chipset/mpc1600-cga-max.xml @@ -1,5 +1,5 @@ - + diff --git a/devices/pcx86/chipset/z150-cga-max.xml b/devices/pcx86/chipset/z150-cga-max.xml index e470dc5110..c92267f6f9 100644 --- a/devices/pcx86/chipset/z150-cga-max.xml +++ b/devices/pcx86/chipset/z150-cga-max.xml @@ -1,5 +1,5 @@ - + diff --git a/devices/pcx86/keyboard/us83-buttons-arrows.xml b/devices/pcx86/keyboard/us83-buttons-arrows.xml index 2fb5326f19..98efe9b1f2 100644 --- a/devices/pcx86/keyboard/us83-buttons-arrows.xml +++ b/devices/pcx86/keyboard/us83-buttons-arrows.xml @@ -1,5 +1,5 @@ - + ESC F1 diff --git a/devices/pcx86/keyboard/us83-buttons-functions.xml b/devices/pcx86/keyboard/us83-buttons-functions.xml index dd2fdef098..923343c9c2 100644 --- a/devices/pcx86/keyboard/us83-buttons-functions.xml +++ b/devices/pcx86/keyboard/us83-buttons-functions.xml @@ -1,5 +1,5 @@ - + ESC CTRL-C CTRL-ALT-DEL diff --git a/devices/pcx86/keyboard/us83-buttons-minimal.xml b/devices/pcx86/keyboard/us83-buttons-minimal.xml index d76721f3bf..af693bdd8d 100644 --- a/devices/pcx86/keyboard/us83-buttons-minimal.xml +++ b/devices/pcx86/keyboard/us83-buttons-minimal.xml @@ -1,5 +1,5 @@ - + ESC F1 F10 diff --git a/devices/pcx86/keyboard/us83-buttons-mpc1600.xml b/devices/pcx86/keyboard/us83-buttons-mpc1600.xml index 6d5d8f31a7..d8596c3eeb 100644 --- a/devices/pcx86/keyboard/us83-buttons-mpc1600.xml +++ b/devices/pcx86/keyboard/us83-buttons-mpc1600.xml @@ -1,5 +1,5 @@ - + ESC F1 F10 diff --git a/devices/pcx86/keyboard/us83-buttons-z150.xml b/devices/pcx86/keyboard/us83-buttons-z150.xml index f52426838a..da3c614453 100644 --- a/devices/pcx86/keyboard/us83-buttons-z150.xml +++ b/devices/pcx86/keyboard/us83-buttons-z150.xml @@ -1,5 +1,5 @@ - + ESC F1 F10 diff --git a/devices/pcx86/keyboard/us83-softkeys.xml b/devices/pcx86/keyboard/us83-softkeys.xml index dfbf2e824b..297762aae9 100644 --- a/devices/pcx86/keyboard/us83-softkeys.xml +++ b/devices/pcx86/keyboard/us83-softkeys.xml @@ -1,4 +1,4 @@ - + F1 F2 diff --git a/devices/pcx86/keyboard/us84-buttons-arrows.xml b/devices/pcx86/keyboard/us84-buttons-arrows.xml index 26b1db5b5c..8b78ba87c0 100644 --- a/devices/pcx86/keyboard/us84-buttons-arrows.xml +++ b/devices/pcx86/keyboard/us84-buttons-arrows.xml @@ -1,5 +1,5 @@ - + ESC F1 SysReq diff --git a/devices/pcx86/keyboard/us84-buttons-functions.xml b/devices/pcx86/keyboard/us84-buttons-functions.xml index 14f0d62654..86bfac8af8 100644 --- a/devices/pcx86/keyboard/us84-buttons-functions.xml +++ b/devices/pcx86/keyboard/us84-buttons-functions.xml @@ -1,5 +1,5 @@ - + ESC CTRL-C CTRL-ALT-DEL diff --git a/devices/pcx86/keyboard/us84-buttons-test.xml b/devices/pcx86/keyboard/us84-buttons-test.xml index 268871c668..0072577464 100644 --- a/devices/pcx86/keyboard/us84-buttons-test.xml +++ b/devices/pcx86/keyboard/us84-buttons-test.xml @@ -1,5 +1,5 @@ - + ESC F1 SysReq diff --git a/devices/pcx86/machine/5150/cga/384kb/softkbd/machine.xml b/devices/pcx86/machine/5150/cga/384kb/softkbd/machine.xml index 56f39065e7..5311b2ae63 100644 --- a/devices/pcx86/machine/5150/cga/384kb/softkbd/machine.xml +++ b/devices/pcx86/machine/5150/cga/384kb/softkbd/machine.xml @@ -12,7 +12,7 @@ - + diff --git a/devices/pcx86/machine/5150/cga/64kb/donkey/machine.xml b/devices/pcx86/machine/5150/cga/64kb/donkey/machine.xml index 4d58066845..721aafa481 100644 --- a/devices/pcx86/machine/5150/cga/64kb/donkey/machine.xml +++ b/devices/pcx86/machine/5150/cga/64kb/donkey/machine.xml @@ -8,7 +8,7 @@