mirror of
https://github.com/whscullin/apple2js.git
synced 2024-01-12 14:14:38 +00:00
Initial checkin
Initial checkin, still pretty rough around the edges.
This commit is contained in:
parent
55a0c68165
commit
4d80f9f28e
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.*~
|
11
Makefile
Normal file
11
Makefile
Normal file
@ -0,0 +1,11 @@
|
||||
default:
|
||||
$(MAKE) -C js
|
||||
|
||||
index:
|
||||
./scripts/index.pl > json/disks/index.js
|
||||
|
||||
clean:
|
||||
$(MAKE) -C js clean
|
||||
|
||||
lint:
|
||||
$(MAKE) -C js lint
|
236
about.html
Normal file
236
about.html
Normal file
@ -0,0 +1,236 @@
|
||||
<!DOCTYPE html>
|
||||
<!-- -*- mode: HTML; indent-tabs-mode: nil -*- -->
|
||||
<!-- Copyright 2010 Will Scullin -->
|
||||
<html>
|
||||
<head>
|
||||
<base href="/apple" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="keywords" content="apple2,apple,ii,javascript,emulator,html5" />
|
||||
<link rel="shortcut icon" href="logoicon.png" />
|
||||
<link rel="stylesheet" type="text/css" href="css/apple2.css" />
|
||||
<title>About Apple ][js/Apple //jse</title>
|
||||
<script type="text/javascript">
|
||||
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-19205057-1']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
|
||||
</script>
|
||||
<meta property="og:title" content="About Apple ][js" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:description" content="Apple ][js is an Apple ][ (or Apple II or Apple2) emulator written using only JavaScript and HTML5." />
|
||||
<meta property="og:url" content="http://www.scullinsteel.com/apple2/about.html" />
|
||||
<meta property="og:image" content="http://www.scullinsteel.com/apple2/img/image.png" />
|
||||
<meta property="fb:admins" content="700585391" />
|
||||
</head>
|
||||
<body id="about">
|
||||
<div style="text-align: center">
|
||||
<span class="motter" style="font-size: 2em">Apple ][js and //jse</span>
|
||||
</div>
|
||||
<div style="max-width: 800px; margin: auto">
|
||||
<h2>What is this?</h2>
|
||||
<span class="motter"><a href="../apple2/">Apple ][js</a></span> and
|
||||
<span class="motter"><a href="../apple//e">Apple //jse</a></span>
|
||||
are Apple ][ and Apple //e emulators written entirely in JavaScript
|
||||
and HTML5.
|
||||
<h2>Updates (2013-07-04)</h2>
|
||||
<ul>
|
||||
<li><h3>RAMFactor Emulation (//jse)</h3>
|
||||
I now simulate having a 1 Megabyte RAMFactor card in slot 2.
|
||||
<li><h3>Thunderclock Emulation (//jse)</h3>
|
||||
There is cursory emulation of the Thunderclock card, enough
|
||||
to keep ProDOS applications from asking you to enter the date
|
||||
all the time. ProDOS attempts to guess the year from the month,
|
||||
the day and the day of the week, something that needs to be
|
||||
patched every 6 years. This means newer versions think it's 1996,
|
||||
older versions are stuck in the 80s.
|
||||
<li><h3>Firefox Nightly Joystick Support</h3>
|
||||
Joystick support has yet to officially land, but the latest
|
||||
nightlies support the gamepad API.
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Updates (2013-03-20)</h2>
|
||||
<ul>
|
||||
<li><h3>Animation Frames</h3>
|
||||
I've switched from using setInterval() to requestAnimationFrame() where
|
||||
supported. This, in conjunction with the graphics re-write, seems
|
||||
to smooth performance and provide a more stable CPU speed.
|
||||
<li><h3>Graphics Re-Write</h3>
|
||||
This (third) re-write of the graphics system should improve performance
|
||||
with graphics intensive programs. Rather than rendering each graphics
|
||||
update as it happens, updates are rendered each animation frame.
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Updates (2013-03-12)</h2>
|
||||
<ul>
|
||||
<li><h3>Apple //e</h3>
|
||||
After much flailing, and much staring at MMU emulation code in
|
||||
despair, I've finally published my Apple //e emulator. It's probably
|
||||
a little more rough than I'd hoped, but it has a lot of features
|
||||
that I really wanted to get into it, like basic double hires support,
|
||||
and it uses the enhanced Apple //e ROMs.
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Updates (2013-02-25)</h2>
|
||||
<ul>
|
||||
<li><h3>Joystick Support</h3>
|
||||
Chrome only so far, the nascent gamepad API has finally allowed me
|
||||
to add basic joystick support. I can now re-live my glory days
|
||||
of Skyfox.
|
||||
</li>
|
||||
<li><h3>Re-written CPU emulator</h3>
|
||||
I finally got around to applying some of the many lessons I learned
|
||||
along the way writing my first CPU emulator in Javascript. The
|
||||
last re-working gave me about a 100% performance gain.
|
||||
</li>
|
||||
<li><h3>Finally Fixed Oregon Trail</h3>
|
||||
This seems to have been a major disappointment for many people.
|
||||
I was able to make it as a banker, but I'm embarassed to reveal my
|
||||
score.
|
||||
</li>
|
||||
<li><h3>Competition</h3>
|
||||
Now in addition to
|
||||
<a href="http://www.megidish.net/apple2js/">Gil Megidish's</a>
|
||||
Apple2JS, there's a couple of new kids on the block, including
|
||||
<a href="http://porkrind.org/a2/">David Caldwell's</a> Apple II+
|
||||
emulator where he's put a lot more thought into the graphics rendering
|
||||
than I have, and
|
||||
<a href="https://github.com/nicholasbs/appletoo">appletoo</a>,
|
||||
which I just stumbled across while looking for David's emulator and
|
||||
haven't had much time to look at.
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Requirements</h2>
|
||||
<ul>
|
||||
<li><h3>A Browser with HTML5 Support</h3>
|
||||
The most recent versions of
|
||||
<a href="http://www.google.com/chrome/" target="_blank">
|
||||
Google Chrome</a>,
|
||||
<a href="http://www.apple.com/safari/" target="_blank">
|
||||
Safari</a>,
|
||||
<a href="http://www.firefox.com/" target="_blank" >
|
||||
Firefox</a>, and
|
||||
<a href="http://www.opera.com/" target="_blank">
|
||||
Opera</a>
|
||||
all seem to work reasonably well these days, although
|
||||
variations in HTML5 support pop up, and occasionally a major release
|
||||
will move things around out from under me.
|
||||
IE prior to 9 lacks canvas tag support and is unsupported.
|
||||
<a href="http://windows.microsoft.com/ie9">IE 9+</a> renders nicely on
|
||||
a modern machine.<br/>
|
||||
<br />
|
||||
In updating this section I realized just how long
|
||||
I've been doing this, since I used to have to specify Firefox 3+ and
|
||||
Google Chrome 5+, and I'm now running Chrome 23 and Firefox 19.
|
||||
</li>
|
||||
<li><h3>Basic Knowledge of the Apple ][</h3>
|
||||
If you don't know how to use an Apple ][, this won't be much fun for
|
||||
you.
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Known Limitations</h2>
|
||||
<ul>
|
||||
<li><h3>Lame Audio</h3>
|
||||
<span class="motter">Apple ][js</span>
|
||||
is written entirely using HTML5 and JavaScript, so I've avoiding using
|
||||
any Flash audio plugins. Most reputable browsers
|
||||
now provide some sort of audio API, but no standard really seems to have
|
||||
emerged. I should probably add a volume control.
|
||||
</li>
|
||||
<li><h3>Poor Printer Support</h3>
|
||||
I currently only support sending text characters to a separate window.
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Acknowlegements</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<h3>I'm using the following libraries:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="http://jquery.com">jQuery</a> and
|
||||
<a href="http://jqueryui.com">jQuery UI</a>
|
||||
</li>
|
||||
<li>
|
||||
Base64 Utilities via
|
||||
<a href="http://kevin.vanzonneveld.net/">KvZ</a>
|
||||
</li>
|
||||
<li>
|
||||
LED graphics from <a href="http://modernl.com/">Modern Life</a>.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<h3>I heavily referenced:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="http://www.scribd.com/doc/200679/Beneath-Apple-DOS-By-Don-Worth-and-Pieter-Lechner">
|
||||
<i>Beneath Apple DOS</i>
|
||||
</a>
|
||||
by Don Worth and Pieter Lechner
|
||||
</li>
|
||||
<li>
|
||||
<i>Inside the Apple //e</i> by Gary B. Little
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/DOS.3.3.ANATOMY/">
|
||||
<i>DOS 3.3 Anatomy</i>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://www.doc.ic.ac.uk/~ih/doc/stepper/others/example3/diskii_specs.html">
|
||||
<i>Apple II Disk Drive Article</i>
|
||||
</a>
|
||||
by Neil Parker
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://6502.org/">6502.org</a>
|
||||
</li>
|
||||
<li>
|
||||
The
|
||||
<a href="http://www.faqs.org/faqs/apple2/programmerfaq/part1/">
|
||||
comp.sys.apple2.programmer
|
||||
</a>
|
||||
FAQ
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<h3>And special thanks to:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="http://adtpro.sourceforge.net/">ADTPro</a>
|
||||
for allowing me to pull some of my circa
|
||||
1980 programming efforts off some ancient floppies.
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://kegs.sourceforge.net/">KEGS</a>, because at some
|
||||
point I got so tired of futzing with ADC/SBC code I just ported
|
||||
the KEGS C code for those opcodes to Javascript so I could stop
|
||||
worrying about it.
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://apple2history.org/">Apple II History</a>,
|
||||
for a lovely, informative site.
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://www.megidish.net/apple2js/">Gil Megidish</a>,
|
||||
for the kick in the pants to finally post my version, once I
|
||||
realized there was, in fact, another apple2js in the world.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<h2>Contact</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="mailto:apple2js@scullinsteel.com">apple2js@scullinsteel.com</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
1076
apple2js.html
Normal file
1076
apple2js.html
Normal file
File diff suppressed because it is too large
Load Diff
422
css/apple2.css
Normal file
422
css/apple2.css
Normal file
@ -0,0 +1,422 @@
|
||||
/* Copyright 2010-2013 Will Scullin */
|
||||
|
||||
.disklabel {
|
||||
color: #000;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
img#badge {
|
||||
padding: 0px 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
h1#subtitle {
|
||||
margin: 0px;
|
||||
padding: 3px 0px 0px 10px;
|
||||
color: black;
|
||||
font-family: "Adobe Garamond Pro",Garamond,Times;
|
||||
font-size: 13px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.motter {
|
||||
font-family: "Motter Tektura";
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
input[type="button"] {
|
||||
width: 75px;
|
||||
}
|
||||
|
||||
input[type="text"] {
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 16px 0px;
|
||||
font-size: 10px;
|
||||
background-color: #c4c1a0; /* Pantone 453 */
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#display {
|
||||
margin: 5px 0px;
|
||||
}
|
||||
|
||||
.overscan {
|
||||
margin: auto;
|
||||
position: relative;
|
||||
background-color: black;
|
||||
padding: 16px;
|
||||
width: 560px;
|
||||
height: 384px;
|
||||
border: 6px inset #f0edd0;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#power {
|
||||
padding: 2px;
|
||||
border: 1px inset #888;
|
||||
}
|
||||
|
||||
.disk {
|
||||
margin: 5px;
|
||||
float: left;
|
||||
background-image: url(red-off-16.png);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.disklabel {
|
||||
font-size: 11px;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
.disksave {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.code {
|
||||
font-family: Courier;
|
||||
font-size: 14px;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
table.debug_page {
|
||||
padding: 0px;
|
||||
font-family: Courier;
|
||||
font-size: 10px;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
.inset {
|
||||
width: 594px;
|
||||
border-radius: 6px;
|
||||
border: 3px inset #f0edd0;
|
||||
padding: 6px;
|
||||
margin: 10px 0px;
|
||||
}
|
||||
|
||||
#speed {
|
||||
margin: 9px 0px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
#khz {
|
||||
margin-right: 4px;
|
||||
padding: 4px;
|
||||
float: left;
|
||||
font-family: Courier;
|
||||
font-size: 12px;
|
||||
width: 60px;
|
||||
height: 15px;
|
||||
text-align: right;
|
||||
background: #000;
|
||||
color: #0f0;
|
||||
border: 2px inset #888;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
top: 16px;
|
||||
left: 16px;
|
||||
cursor: crosshair;
|
||||
width: 560px;
|
||||
height: 384px;
|
||||
image-rendering: -moz-crisp-edges;
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
image-rendering: optimize-contrast;
|
||||
}
|
||||
|
||||
:-webkit-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
/*
|
||||
@media screen and (min-device-width:1120px) {
|
||||
:-webkit-full-screen {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
:-moz-full-screen .overscan {
|
||||
border: 0px none !important;
|
||||
width: 1120px;
|
||||
height: 768px;
|
||||
margin: auto;
|
||||
}
|
||||
:-webkit-full-screen .overscan {
|
||||
border: 0px none !important;
|
||||
width: 1120px;
|
||||
height: 768px;
|
||||
}
|
||||
|
||||
:-moz-full-screen canvas {
|
||||
width: 1120px;
|
||||
height: 768px;
|
||||
}
|
||||
:-webkit-full-screen canvas {
|
||||
width: 1120px;
|
||||
height: 768px;
|
||||
}
|
||||
|
||||
:-webkit-full-screen #scanlines {
|
||||
width: 1120px;
|
||||
height: 768px;
|
||||
}
|
||||
:-moz-full-screen #scanlines {
|
||||
width: 1120px;
|
||||
height: 768px;
|
||||
}
|
||||
}
|
||||
*/
|
||||
#scanlines {
|
||||
position: absolute;
|
||||
top: 16px;
|
||||
left: 16px;
|
||||
cursor: crosshair;
|
||||
z-index: 1;
|
||||
width: 560px;
|
||||
height: 384px;
|
||||
}
|
||||
|
||||
#page1 {
|
||||
visibility: display;
|
||||
}
|
||||
|
||||
#page2 {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
#about iframe {
|
||||
border: 1px inset #666;
|
||||
width: 99%;
|
||||
height: 99%;
|
||||
}
|
||||
|
||||
#about {
|
||||
padding: 16px;
|
||||
margin: 0px;
|
||||
font-family: "Adobe Garamond Pro",Garamond,Times;
|
||||
font-size: 14px;
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#about a {
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#load select {
|
||||
width: 250px;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
#keyboard .row {
|
||||
display: block;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
height: 42px;
|
||||
font-family: Helvetica;
|
||||
width: 605px;
|
||||
}
|
||||
|
||||
#keyboard .row0 {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
#keyboard .row2 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
#keyboard .row3 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
#keyboard .row4 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.apple2e #keyboard .row0 {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.apple2e #keyboard .row2 {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.apple2e #keyboard .row3 {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.apple2e #keyboard .row4 {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
#keyboard .key {
|
||||
display: block;
|
||||
float: left;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
background-color: #44372C;
|
||||
color: white;
|
||||
vertical-align: bottom;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
border: 5px outset #66594E;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#keyboard .pressed {
|
||||
background-color: #22150A;
|
||||
border: 5px outset #44372C;
|
||||
}
|
||||
|
||||
#keyboard .key div {
|
||||
border-radius: 3px;
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#keyboard .vcenter div {
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
#keyboard .vcenter2 div {
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
#keyboard .key span {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#keyboard .key span.small {
|
||||
font-size: 7px;
|
||||
}
|
||||
|
||||
#keyboard .key-SHIFT {
|
||||
width: 53px;
|
||||
}
|
||||
|
||||
#keyboard .active {
|
||||
color: #4f4;
|
||||
}
|
||||
|
||||
#keyboard .key-RETURN {
|
||||
width: 52px;
|
||||
}
|
||||
|
||||
#keyboard .key-DELETE {
|
||||
width: 47px;
|
||||
}
|
||||
|
||||
#keyboard .key-TAB {
|
||||
width: 47px;
|
||||
}
|
||||
|
||||
#keyboard .key-POWER {
|
||||
width: 38px;
|
||||
height: 38px;
|
||||
border: 2px groove black;
|
||||
background-color: #ffd;
|
||||
color: black;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
#keyboard .key-POWER div {
|
||||
bottom: 15px;
|
||||
}
|
||||
|
||||
#keyboard .key-nbsp {
|
||||
margin-left: 62px;
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
.apple2e table#display {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.apple2e .inset {
|
||||
width: 604px;
|
||||
}
|
||||
|
||||
.apple2e #keyboard .key-CTRL {
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.apple2e #keyboard .key-RETURN {
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.apple2e #keyboard .key-SHIFT {
|
||||
width: 81px;
|
||||
}
|
||||
|
||||
.apple2e #keyboard .key-nbsp {
|
||||
margin-left: 0px;
|
||||
width: 215px;
|
||||
}
|
||||
|
||||
#keyboard .key-POW {
|
||||
width: 38px;
|
||||
height: 38px;
|
||||
border: 2px groove black;
|
||||
background-color: #ffd;
|
||||
color: black;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
#keyboard .key-POW div {
|
||||
bottom: 15px;
|
||||
}
|
||||
|
||||
#keyboard .key-POW span {
|
||||
background: #4f4;
|
||||
color: #4f4;
|
||||
}
|
||||
|
||||
#keyboard .key-OPEN_APPLE div {
|
||||
background-image: url(../img/open-apple24.png);
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
bottom: 1px;
|
||||
left: 4px;
|
||||
}
|
||||
|
||||
#keyboard .key-OPEN_APPLE span {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#keyboard .key-OPEN_APPLE.active div {
|
||||
background-image: url(../img/open-apple24-green.png);
|
||||
}
|
||||
|
||||
#keyboard .key-CLOSED_APPLE div {
|
||||
background-image: url(../img/closed-apple24.png);
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
bottom: 1px;
|
||||
left: 4px;
|
||||
}
|
||||
|
||||
#keyboard .key-CLOSED_APPLE.active div {
|
||||
background-image: url(../img/closed-apple24-green.png);
|
||||
}
|
||||
|
||||
#keyboard .key-CLOSED_APPLE span {
|
||||
display: none;
|
||||
}
|
BIN
css/red-off-16.png
Executable file
BIN
css/red-off-16.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 764 B |
BIN
css/red-on-16.png
Executable file
BIN
css/red-on-16.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 869 B |
BIN
img/badge.png
Normal file
BIN
img/badge.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
1
js/.gitignore
vendored
Normal file
1
js/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
all*.js
|
8219
js/6502test.js
Normal file
8219
js/6502test.js
Normal file
File diff suppressed because it is too large
Load Diff
35
js/Makefile
Normal file
35
js/Makefile
Normal file
@ -0,0 +1,35 @@
|
||||
COMPRESS = java -jar $(HOME)/bin/compiler.jar --warning_level QUIET
|
||||
JSLINT = jshint
|
||||
|
||||
JSFILES = copyright.js util.js prefs.js ram.js langcard.js fpbasic.js apple2char.js canvas2.js apple2io.js parallel.js ramfactor.js disk2.js cpu6502.js base64.js
|
||||
|
||||
JSFILES2E = copyright.js util.js prefs.js ram.js mmu.js apple2e.js apple2e-enhanced.js apple2echar.js canvas2e.js apple2io.js parallel.js slot3.js ramfactor.js thunderclock.js disk2.js cpu6502.js base64.js
|
||||
|
||||
ALLJS = ${JSFILES} ${JSFILES2E}
|
||||
CHECKEDJS := $(patsubst %.js,.checked-%.js,${ALLJS})
|
||||
|
||||
default: all.min.js all2e.min.js
|
||||
$(MAKE) -C ui
|
||||
|
||||
all.min.js: all.js
|
||||
$(COMPRESS) < all.js > all.min.js
|
||||
|
||||
all2e.min.js: all2e.js
|
||||
$(COMPRESS) < all2e.js > all2e.min.js
|
||||
|
||||
all.js: $(JSFILES) Makefile
|
||||
cat $(JSFILES) > all.js
|
||||
|
||||
all2e.js: $(JSFILES2E) Makefile
|
||||
cat $(JSFILES2E) > all2e.js
|
||||
|
||||
clean:
|
||||
$(RM) -f all.js all.min.js all2e.js all2e.min.js .checked-*
|
||||
$(MAKE) -C ui clean
|
||||
|
||||
lint: $(CHECKEDJS)
|
||||
$(MAKE) -C ui lint
|
||||
|
||||
.checked-%.js: %.js
|
||||
$(JSLINT) $<
|
||||
@touch $@
|
262
js/apple2char.js
Normal file
262
js/apple2char.js
Normal file
@ -0,0 +1,262 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
|
||||
/*exported charset */
|
||||
|
||||
var charset = [
|
||||
0x00,0x1c,0x22,0x2a,0x2e,0x2c,0x20,0x1e,
|
||||
0x00,0x08,0x14,0x22,0x22,0x3e,0x22,0x22,
|
||||
0x00,0x3c,0x22,0x22,0x3c,0x22,0x22,0x3c,
|
||||
0x00,0x1c,0x22,0x20,0x20,0x20,0x22,0x1c,
|
||||
0x00,0x3c,0x22,0x22,0x22,0x22,0x22,0x3c,
|
||||
0x00,0x3e,0x20,0x20,0x3c,0x20,0x20,0x3e,
|
||||
0x00,0x3e,0x20,0x20,0x3c,0x20,0x20,0x20,
|
||||
0x00,0x1e,0x20,0x20,0x20,0x26,0x22,0x1e,
|
||||
0x00,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,
|
||||
0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,
|
||||
0x00,0x02,0x02,0x02,0x02,0x02,0x22,0x1c,
|
||||
0x00,0x22,0x24,0x28,0x30,0x28,0x24,0x22,
|
||||
0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x3e,
|
||||
0x00,0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,
|
||||
0x00,0x22,0x22,0x32,0x2a,0x26,0x22,0x22,
|
||||
0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,
|
||||
0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,0x20,
|
||||
0x00,0x1c,0x22,0x22,0x22,0x2a,0x24,0x1a,
|
||||
0x00,0x3c,0x22,0x22,0x3c,0x28,0x24,0x22,
|
||||
0x00,0x1c,0x22,0x20,0x1c,0x02,0x22,0x1c,
|
||||
0x00,0x3e,0x08,0x08,0x08,0x08,0x08,0x08,
|
||||
0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x1c,
|
||||
0x00,0x22,0x22,0x22,0x22,0x22,0x14,0x08,
|
||||
0x00,0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,
|
||||
0x00,0x22,0x22,0x14,0x08,0x14,0x22,0x22,
|
||||
0x00,0x22,0x22,0x14,0x08,0x08,0x08,0x08,
|
||||
0x00,0x3e,0x02,0x04,0x08,0x10,0x20,0x3e,
|
||||
0x00,0x3e,0x30,0x30,0x30,0x30,0x30,0x3e,
|
||||
0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,
|
||||
0x00,0x3e,0x06,0x06,0x06,0x06,0x06,0x3e,
|
||||
0x00,0x00,0x00,0x08,0x14,0x22,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,
|
||||
0x00,0x14,0x14,0x14,0x00,0x00,0x00,0x00,
|
||||
0x00,0x14,0x14,0x3e,0x14,0x3e,0x14,0x14,
|
||||
0x00,0x08,0x1e,0x28,0x1c,0x0a,0x3c,0x08,
|
||||
0x00,0x30,0x32,0x04,0x08,0x10,0x26,0x06,
|
||||
0x00,0x10,0x28,0x28,0x10,0x2a,0x24,0x1a,
|
||||
0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,
|
||||
0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,
|
||||
0x00,0x08,0x04,0x02,0x02,0x02,0x04,0x08,
|
||||
0x00,0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,
|
||||
0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x10,
|
||||
0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
|
||||
0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x00,
|
||||
0x00,0x1c,0x22,0x26,0x2a,0x32,0x22,0x1c,
|
||||
0x00,0x08,0x18,0x08,0x08,0x08,0x08,0x1c,
|
||||
0x00,0x1c,0x22,0x02,0x0c,0x10,0x20,0x3e,
|
||||
0x00,0x3e,0x02,0x04,0x0c,0x02,0x22,0x1c,
|
||||
0x00,0x04,0x0c,0x14,0x24,0x3e,0x04,0x04,
|
||||
0x00,0x3e,0x20,0x3c,0x02,0x02,0x22,0x1c,
|
||||
0x00,0x0e,0x10,0x20,0x3c,0x22,0x22,0x1c,
|
||||
0x00,0x3e,0x02,0x04,0x08,0x10,0x10,0x10,
|
||||
0x00,0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,
|
||||
0x00,0x1c,0x22,0x22,0x1e,0x02,0x04,0x38,
|
||||
0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00,
|
||||
0x00,0x00,0x00,0x08,0x00,0x08,0x08,0x10,
|
||||
0x00,0x04,0x08,0x10,0x20,0x10,0x08,0x04,
|
||||
0x00,0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,
|
||||
0x00,0x10,0x08,0x04,0x02,0x04,0x08,0x10,
|
||||
0x00,0x1c,0x22,0x04,0x08,0x08,0x00,0x08,
|
||||
0x80,0x9c,0xa2,0xaa,0xae,0xac,0xa0,0x9e,
|
||||
0x80,0x88,0x94,0xa2,0xa2,0xbe,0xa2,0xa2,
|
||||
0x80,0xbc,0xa2,0xa2,0xbc,0xa2,0xa2,0xbc,
|
||||
0x80,0x9c,0xa2,0xa0,0xa0,0xa0,0xa2,0x9c,
|
||||
0x80,0xbc,0xa2,0xa2,0xa2,0xa2,0xa2,0xbc,
|
||||
0x80,0xbe,0xa0,0xa0,0xbc,0xa0,0xa0,0xbe,
|
||||
0x80,0xbe,0xa0,0xa0,0xbc,0xa0,0xa0,0xa0,
|
||||
0x80,0x9e,0xa0,0xa0,0xa0,0xa6,0xa2,0x9e,
|
||||
0x80,0xa2,0xa2,0xa2,0xbe,0xa2,0xa2,0xa2,
|
||||
0x80,0x9c,0x88,0x88,0x88,0x88,0x88,0x9c,
|
||||
0x80,0x82,0x82,0x82,0x82,0x82,0xa2,0x9c,
|
||||
0x80,0xa2,0xa4,0xa8,0xb0,0xa8,0xa4,0xa2,
|
||||
0x80,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xbe,
|
||||
0x80,0xa2,0xb6,0xaa,0xaa,0xa2,0xa2,0xa2,
|
||||
0x80,0xa2,0xa2,0xb2,0xaa,0xa6,0xa2,0xa2,
|
||||
0x80,0x9c,0xa2,0xa2,0xa2,0xa2,0xa2,0x9c,
|
||||
0x80,0xbc,0xa2,0xa2,0xbc,0xa0,0xa0,0xa0,
|
||||
0x80,0x9c,0xa2,0xa2,0xa2,0xaa,0xa4,0x9a,
|
||||
0x80,0xbc,0xa2,0xa2,0xbc,0xa8,0xa4,0xa2,
|
||||
0x80,0x9c,0xa2,0xa0,0x9c,0x82,0xa2,0x9c,
|
||||
0x80,0xbe,0x88,0x88,0x88,0x88,0x88,0x88,
|
||||
0x80,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0x9c,
|
||||
0x80,0xa2,0xa2,0xa2,0xa2,0xa2,0x94,0x88,
|
||||
0x80,0xa2,0xa2,0xa2,0xaa,0xaa,0xb6,0xa2,
|
||||
0x80,0xa2,0xa2,0x94,0x88,0x94,0xa2,0xa2,
|
||||
0x80,0xa2,0xa2,0x94,0x88,0x88,0x88,0x88,
|
||||
0x80,0xbe,0x82,0x84,0x88,0x90,0xa0,0xbe,
|
||||
0x80,0xbe,0xb0,0xb0,0xb0,0xb0,0xb0,0xbe,
|
||||
0x80,0x80,0xa0,0x90,0x88,0x84,0x82,0x80,
|
||||
0x80,0xbe,0x86,0x86,0x86,0x86,0x86,0xbe,
|
||||
0x80,0x80,0x80,0x88,0x94,0xa2,0x80,0x80,
|
||||
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xbe,
|
||||
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
|
||||
0x80,0x88,0x88,0x88,0x88,0x88,0x80,0x88,
|
||||
0x80,0x94,0x94,0x94,0x80,0x80,0x80,0x80,
|
||||
0x80,0x94,0x94,0xbe,0x94,0xbe,0x94,0x94,
|
||||
0x80,0x88,0x9e,0xa8,0x9c,0x8a,0xbc,0x88,
|
||||
0x80,0xb0,0xb2,0x84,0x88,0x90,0xa6,0x86,
|
||||
0x80,0x90,0xa8,0xa8,0x90,0xaa,0xa4,0x9a,
|
||||
0x80,0x88,0x88,0x88,0x80,0x80,0x80,0x80,
|
||||
0x80,0x88,0x90,0xa0,0xa0,0xa0,0x90,0x88,
|
||||
0x80,0x88,0x84,0x82,0x82,0x82,0x84,0x88,
|
||||
0x80,0x88,0xaa,0x9c,0x88,0x9c,0xaa,0x88,
|
||||
0x80,0x80,0x88,0x88,0xbe,0x88,0x88,0x80,
|
||||
0x80,0x80,0x80,0x80,0x80,0x88,0x88,0x90,
|
||||
0x80,0x80,0x80,0x80,0xbe,0x80,0x80,0x80,
|
||||
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x88,
|
||||
0x80,0x80,0x82,0x84,0x88,0x90,0xa0,0x80,
|
||||
0x80,0x9c,0xa2,0xa6,0xaa,0xb2,0xa2,0x9c,
|
||||
0x80,0x88,0x98,0x88,0x88,0x88,0x88,0x9c,
|
||||
0x80,0x9c,0xa2,0x82,0x8c,0x90,0xa0,0xbe,
|
||||
0x80,0xbe,0x82,0x84,0x8c,0x82,0xa2,0x9c,
|
||||
0x80,0x84,0x8c,0x94,0xa4,0xbe,0x84,0x84,
|
||||
0x80,0xbe,0xa0,0xbc,0x82,0x82,0xa2,0x9c,
|
||||
0x80,0x8e,0x90,0xa0,0xbc,0xa2,0xa2,0x9c,
|
||||
0x80,0xbe,0x82,0x84,0x88,0x90,0x90,0x90,
|
||||
0x80,0x9c,0xa2,0xa2,0x9c,0xa2,0xa2,0x9c,
|
||||
0x80,0x9c,0xa2,0xa2,0x9e,0x82,0x84,0xb8,
|
||||
0x80,0x80,0x80,0x88,0x80,0x88,0x80,0x80,
|
||||
0x80,0x80,0x80,0x88,0x80,0x88,0x88,0x90,
|
||||
0x80,0x84,0x88,0x90,0xa0,0x90,0x88,0x84,
|
||||
0x80,0x80,0x80,0xbe,0x80,0xbe,0x80,0x80,
|
||||
0x80,0x90,0x88,0x84,0x82,0x84,0x88,0x90,
|
||||
0x80,0x9c,0xa2,0x84,0x88,0x88,0x80,0x88,
|
||||
0x00,0x1c,0x22,0x2a,0x2e,0x2c,0x20,0x1e,
|
||||
0x00,0x08,0x14,0x22,0x22,0x3e,0x22,0x22,
|
||||
0x00,0x3c,0x22,0x22,0x3c,0x22,0x22,0x3c,
|
||||
0x00,0x1c,0x22,0x20,0x20,0x20,0x22,0x1c,
|
||||
0x00,0x3c,0x22,0x22,0x22,0x22,0x22,0x3c,
|
||||
0x00,0x3e,0x20,0x20,0x3c,0x20,0x20,0x3e,
|
||||
0x00,0x3e,0x20,0x20,0x3c,0x20,0x20,0x20,
|
||||
0x00,0x1e,0x20,0x20,0x20,0x26,0x22,0x1e,
|
||||
0x00,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,
|
||||
0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,
|
||||
0x00,0x02,0x02,0x02,0x02,0x02,0x22,0x1c,
|
||||
0x00,0x22,0x24,0x28,0x30,0x28,0x24,0x22,
|
||||
0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x3e,
|
||||
0x00,0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,
|
||||
0x00,0x22,0x22,0x32,0x2a,0x26,0x22,0x22,
|
||||
0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,
|
||||
0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,0x20,
|
||||
0x00,0x1c,0x22,0x22,0x22,0x2a,0x24,0x1a,
|
||||
0x00,0x3c,0x22,0x22,0x3c,0x28,0x24,0x22,
|
||||
0x00,0x1c,0x22,0x20,0x1c,0x02,0x22,0x1c,
|
||||
0x00,0x3e,0x08,0x08,0x08,0x08,0x08,0x08,
|
||||
0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x1c,
|
||||
0x00,0x22,0x22,0x22,0x22,0x22,0x14,0x08,
|
||||
0x00,0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,
|
||||
0x00,0x22,0x22,0x14,0x08,0x14,0x22,0x22,
|
||||
0x00,0x22,0x22,0x14,0x08,0x08,0x08,0x08,
|
||||
0x00,0x3e,0x02,0x04,0x08,0x10,0x20,0x3e,
|
||||
0x00,0x3e,0x30,0x30,0x30,0x30,0x30,0x3e,
|
||||
0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,
|
||||
0x00,0x3e,0x06,0x06,0x06,0x06,0x06,0x3e,
|
||||
0x00,0x00,0x00,0x08,0x14,0x22,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,
|
||||
0x00,0x14,0x14,0x14,0x00,0x00,0x00,0x00,
|
||||
0x00,0x14,0x14,0x3e,0x14,0x3e,0x14,0x14,
|
||||
0x00,0x08,0x1e,0x28,0x1c,0x0a,0x3c,0x08,
|
||||
0x00,0x30,0x32,0x04,0x08,0x10,0x26,0x06,
|
||||
0x00,0x10,0x28,0x28,0x10,0x2a,0x24,0x1a,
|
||||
0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,
|
||||
0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,
|
||||
0x00,0x08,0x04,0x02,0x02,0x02,0x04,0x08,
|
||||
0x00,0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,
|
||||
0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x10,
|
||||
0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
|
||||
0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x00,
|
||||
0x00,0x1c,0x22,0x26,0x2a,0x32,0x22,0x1c,
|
||||
0x00,0x08,0x18,0x08,0x08,0x08,0x08,0x1c,
|
||||
0x00,0x1c,0x22,0x02,0x0c,0x10,0x20,0x3e,
|
||||
0x00,0x3e,0x02,0x04,0x0c,0x02,0x22,0x1c,
|
||||
0x00,0x04,0x0c,0x14,0x24,0x3e,0x04,0x04,
|
||||
0x00,0x3e,0x20,0x3c,0x02,0x02,0x22,0x1c,
|
||||
0x00,0x0e,0x10,0x20,0x3c,0x22,0x22,0x1c,
|
||||
0x00,0x3e,0x02,0x04,0x08,0x10,0x10,0x10,
|
||||
0x00,0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,
|
||||
0x00,0x1c,0x22,0x22,0x1e,0x02,0x04,0x38,
|
||||
0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00,
|
||||
0x00,0x00,0x00,0x08,0x00,0x08,0x08,0x10,
|
||||
0x00,0x04,0x08,0x10,0x20,0x10,0x08,0x04,
|
||||
0x00,0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,
|
||||
0x00,0x10,0x08,0x04,0x02,0x04,0x08,0x10,
|
||||
0x00,0x1c,0x22,0x04,0x08,0x08,0x00,0x08,
|
||||
0x80,0x9c,0xa2,0xaa,0xae,0xac,0xa0,0x9e,
|
||||
0x80,0x88,0x94,0xa2,0xa2,0xbe,0xa2,0xa2,
|
||||
0x80,0xbc,0xa2,0xa2,0xbc,0xa2,0xa2,0xbc,
|
||||
0x80,0x9c,0xa2,0xa0,0xa0,0xa0,0xa2,0x9c,
|
||||
0x80,0xbc,0xa2,0xa2,0xa2,0xa2,0xa2,0xbc,
|
||||
0x80,0xbe,0xa0,0xa0,0xbc,0xa0,0xa0,0xbe,
|
||||
0x80,0xbe,0xa0,0xa0,0xbc,0xa0,0xa0,0xa0,
|
||||
0x80,0x9e,0xa0,0xa0,0xa0,0xa6,0xa2,0x9e,
|
||||
0x80,0xa2,0xa2,0xa2,0xbe,0xa2,0xa2,0xa2,
|
||||
0x80,0x9c,0x88,0x88,0x88,0x88,0x88,0x9c,
|
||||
0x80,0x82,0x82,0x82,0x82,0x82,0xa2,0x9c,
|
||||
0x80,0xa2,0xa4,0xa8,0xb0,0xa8,0xa4,0xa2,
|
||||
0x80,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xbe,
|
||||
0x80,0xa2,0xb6,0xaa,0xaa,0xa2,0xa2,0xa2,
|
||||
0x80,0xa2,0xa2,0xb2,0xaa,0xa6,0xa2,0xa2,
|
||||
0x80,0x9c,0xa2,0xa2,0xa2,0xa2,0xa2,0x9c,
|
||||
0x80,0xbc,0xa2,0xa2,0xbc,0xa0,0xa0,0xa0,
|
||||
0x80,0x9c,0xa2,0xa2,0xa2,0xaa,0xa4,0x9a,
|
||||
0x80,0xbc,0xa2,0xa2,0xbc,0xa8,0xa4,0xa2,
|
||||
0x80,0x9c,0xa2,0xa0,0x9c,0x82,0xa2,0x9c,
|
||||
0x80,0xbe,0x88,0x88,0x88,0x88,0x88,0x88,
|
||||
0x80,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0x9c,
|
||||
0x80,0xa2,0xa2,0xa2,0xa2,0xa2,0x94,0x88,
|
||||
0x80,0xa2,0xa2,0xa2,0xaa,0xaa,0xb6,0xa2,
|
||||
0x80,0xa2,0xa2,0x94,0x88,0x94,0xa2,0xa2,
|
||||
0x80,0xa2,0xa2,0x94,0x88,0x88,0x88,0x88,
|
||||
0x80,0xbe,0x82,0x84,0x88,0x90,0xa0,0xbe,
|
||||
0x80,0xbe,0xb0,0xb0,0xb0,0xb0,0xb0,0xbe,
|
||||
0x80,0x80,0xa0,0x90,0x88,0x84,0x82,0x80,
|
||||
0x80,0xbe,0x86,0x86,0x86,0x86,0x86,0xbe,
|
||||
0x80,0x80,0x80,0x88,0x94,0xa2,0x80,0x80,
|
||||
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xbe,
|
||||
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
|
||||
0x80,0x88,0x88,0x88,0x88,0x88,0x80,0x88,
|
||||
0x80,0x94,0x94,0x94,0x80,0x80,0x80,0x80,
|
||||
0x80,0x94,0x94,0xbe,0x94,0xbe,0x94,0x94,
|
||||
0x80,0x88,0x9e,0xa8,0x9c,0x8a,0xbc,0x88,
|
||||
0x80,0xb0,0xb2,0x84,0x88,0x90,0xa6,0x86,
|
||||
0x80,0x90,0xa8,0xa8,0x90,0xaa,0xa4,0x9a,
|
||||
0x80,0x88,0x88,0x88,0x80,0x80,0x80,0x80,
|
||||
0x80,0x88,0x90,0xa0,0xa0,0xa0,0x90,0x88,
|
||||
0x80,0x88,0x84,0x82,0x82,0x82,0x84,0x88,
|
||||
0x80,0x88,0xaa,0x9c,0x88,0x9c,0xaa,0x88,
|
||||
0x80,0x80,0x88,0x88,0xbe,0x88,0x88,0x80,
|
||||
0x80,0x80,0x80,0x80,0x80,0x88,0x88,0x90,
|
||||
0x80,0x80,0x80,0x80,0xbe,0x80,0x80,0x80,
|
||||
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x88,
|
||||
0x80,0x80,0x82,0x84,0x88,0x90,0xa0,0x80,
|
||||
0x80,0x9c,0xa2,0xa6,0xaa,0xb2,0xa2,0x9c,
|
||||
0x80,0x88,0x98,0x88,0x88,0x88,0x88,0x9c,
|
||||
0x80,0x9c,0xa2,0x82,0x8c,0x90,0xa0,0xbe,
|
||||
0x80,0xbe,0x82,0x84,0x8c,0x82,0xa2,0x9c,
|
||||
0x80,0x84,0x8c,0x94,0xa4,0xbe,0x84,0x84,
|
||||
0x80,0xbe,0xa0,0xbc,0x82,0x82,0xa2,0x9c,
|
||||
0x80,0x8e,0x90,0xa0,0xbc,0xa2,0xa2,0x9c,
|
||||
0x80,0xbe,0x82,0x84,0x88,0x90,0x90,0x90,
|
||||
0x80,0x9c,0xa2,0xa2,0x9c,0xa2,0xa2,0x9c,
|
||||
0x80,0x9c,0xa2,0xa2,0x9e,0x82,0x84,0xb8,
|
||||
0x80,0x80,0x80,0x88,0x80,0x88,0x80,0x80,
|
||||
0x80,0x80,0x80,0x88,0x80,0x88,0x88,0x90,
|
||||
0x80,0x84,0x88,0x90,0xa0,0x90,0x88,0x84,
|
||||
0x80,0x80,0x80,0xbe,0x80,0xbe,0x80,0x80,
|
||||
0x80,0x90,0x88,0x84,0x82,0x84,0x88,0x90,
|
||||
0x80,0x9c,0xa2,0x84,0x88,0x88,0x80,0x88
|
||||
];
|
2082
js/apple2e-enhanced.js
Normal file
2082
js/apple2e-enhanced.js
Normal file
File diff suppressed because it is too large
Load Diff
2083
js/apple2e.js
Normal file
2083
js/apple2e.js
Normal file
File diff suppressed because it is too large
Load Diff
518
js/apple2echar.js
Normal file
518
js/apple2echar.js
Normal file
@ -0,0 +1,518 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
|
||||
/*exported charset */
|
||||
|
||||
var charset = [
|
||||
0x1c,0x22,0x2a,0x3a,0x1a,0x02,0x3c,0x00,
|
||||
0x08,0x14,0x22,0x22,0x3e,0x22,0x22,0x00,
|
||||
0x1e,0x22,0x22,0x1e,0x22,0x22,0x1e,0x00,
|
||||
0x1c,0x22,0x02,0x02,0x02,0x22,0x1c,0x00,
|
||||
0x1e,0x22,0x22,0x22,0x22,0x22,0x1e,0x00,
|
||||
0x3e,0x02,0x02,0x1e,0x02,0x02,0x3e,0x00,
|
||||
0x3e,0x02,0x02,0x1e,0x02,0x02,0x02,0x00,
|
||||
0x3c,0x02,0x02,0x02,0x32,0x22,0x3c,0x00,
|
||||
0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x00,
|
||||
0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,
|
||||
0x20,0x20,0x20,0x20,0x20,0x22,0x1c,0x00,
|
||||
0x22,0x12,0x0a,0x06,0x0a,0x12,0x22,0x00,
|
||||
0x02,0x02,0x02,0x02,0x02,0x02,0x3e,0x00,
|
||||
0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,0x00,
|
||||
0x22,0x22,0x26,0x2a,0x32,0x22,0x22,0x00,
|
||||
0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
|
||||
0x1e,0x22,0x22,0x1e,0x02,0x02,0x02,0x00,
|
||||
0x1c,0x22,0x22,0x22,0x2a,0x12,0x2c,0x00,
|
||||
0x1e,0x22,0x22,0x1e,0x0a,0x12,0x22,0x00,
|
||||
0x1c,0x22,0x02,0x1c,0x20,0x22,0x1c,0x00,
|
||||
0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x1c,0x00,
|
||||
0x22,0x22,0x22,0x22,0x22,0x14,0x08,0x00,
|
||||
0x22,0x22,0x22,0x2a,0x2a,0x36,0x22,0x00,
|
||||
0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00,
|
||||
0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x00,
|
||||
0x3e,0x20,0x10,0x08,0x04,0x02,0x3e,0x00,
|
||||
0x3e,0x06,0x06,0x06,0x06,0x06,0x3e,0x00,
|
||||
0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,
|
||||
0x3e,0x30,0x30,0x30,0x30,0x30,0x3e,0x00,
|
||||
0x00,0x00,0x08,0x14,0x22,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x00,
|
||||
0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,
|
||||
0x14,0x14,0x3e,0x14,0x3e,0x14,0x14,0x00,
|
||||
0x08,0x3c,0x0a,0x1c,0x28,0x1e,0x08,0x00,
|
||||
0x06,0x26,0x10,0x08,0x04,0x32,0x30,0x00,
|
||||
0x04,0x0a,0x0a,0x04,0x2a,0x12,0x2c,0x00,
|
||||
0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
|
||||
0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00,
|
||||
0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,
|
||||
0x08,0x2a,0x1c,0x08,0x1c,0x2a,0x08,0x00,
|
||||
0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x00,
|
||||
0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
|
||||
0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
|
||||
0x1c,0x22,0x32,0x2a,0x26,0x22,0x1c,0x00,
|
||||
0x08,0x0c,0x08,0x08,0x08,0x08,0x1c,0x00,
|
||||
0x1c,0x22,0x20,0x18,0x04,0x02,0x3e,0x00,
|
||||
0x3e,0x20,0x10,0x18,0x20,0x22,0x1c,0x00,
|
||||
0x10,0x18,0x14,0x12,0x3e,0x10,0x10,0x00,
|
||||
0x3e,0x02,0x1e,0x20,0x20,0x22,0x1c,0x00,
|
||||
0x38,0x04,0x02,0x1e,0x22,0x22,0x1c,0x00,
|
||||
0x3e,0x20,0x10,0x08,0x04,0x04,0x04,0x00,
|
||||
0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00,
|
||||
0x1c,0x22,0x22,0x3c,0x20,0x10,0x0e,0x00,
|
||||
0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
|
||||
0x00,0x00,0x08,0x00,0x08,0x08,0x04,0x00,
|
||||
0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00,
|
||||
0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00,
|
||||
0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,
|
||||
0x1c,0x22,0x10,0x08,0x08,0x00,0x08,0x00,
|
||||
0xef,0xf7,0xc9,0x80,0xc0,0xc0,0x81,0xc9,
|
||||
0xef,0xf7,0xc9,0xbe,0xde,0xde,0xb5,0xc9,
|
||||
0xff,0xff,0xfd,0xf9,0xf1,0xe1,0xc9,0xbd,
|
||||
0x80,0xdd,0xeb,0xf7,0xf7,0xeb,0xd5,0x80,
|
||||
0xff,0xbf,0xdf,0xee,0xf5,0xfb,0xfb,0xff,
|
||||
0x80,0xc0,0xa0,0x93,0x8a,0x84,0x84,0x80,
|
||||
0x8f,0x9f,0x81,0xce,0x86,0xcf,0xc0,0xfd,
|
||||
0xff,0xe7,0xf8,0xff,0xf8,0xf3,0xf7,0x8f,
|
||||
0xf7,0xfb,0xfd,0x80,0xfd,0xfb,0xf7,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,
|
||||
0xf7,0xf7,0xf7,0xf7,0xb6,0xd5,0xe3,0xf7,
|
||||
0xf7,0xe3,0xd5,0xb6,0xf7,0xf7,0xf7,0xf7,
|
||||
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xbf,0xbf,0xbf,0xbb,0xb9,0x80,0xf9,0xfb,
|
||||
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
|
||||
0xec,0xe7,0xe3,0x81,0xe3,0xe7,0xef,0x90,
|
||||
0x9b,0xf3,0xe3,0xc0,0xe3,0xf3,0xfb,0x84,
|
||||
0xbf,0xb7,0xf7,0x80,0xc1,0xe3,0xb7,0xbf,
|
||||
0xbf,0xb7,0xe3,0xc1,0x80,0xf7,0xb7,0xbf,
|
||||
0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,
|
||||
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x80,
|
||||
0xf7,0xef,0xdf,0x80,0xdf,0xef,0xf7,0xff,
|
||||
0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,
|
||||
0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,0xaa,0xd5,
|
||||
0xff,0xc1,0xbe,0xfe,0xfe,0xfe,0x80,0xff,
|
||||
0xff,0xff,0xc0,0xbf,0xbf,0xbf,0x80,0xff,
|
||||
0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,
|
||||
0xf7,0xe3,0xc1,0x80,0xc1,0xe3,0xf7,0xff,
|
||||
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
|
||||
0xeb,0xeb,0x88,0xff,0x88,0xeb,0xeb,0xff,
|
||||
0x80,0xbf,0xbf,0xb3,0xb3,0xbf,0xbf,0x80,
|
||||
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
|
||||
0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x1c,0x20,0x3c,0x22,0x3c,0x00,
|
||||
0x02,0x02,0x1e,0x22,0x22,0x22,0x1e,0x00,
|
||||
0x00,0x00,0x3c,0x02,0x02,0x02,0x3c,0x00,
|
||||
0x20,0x20,0x3c,0x22,0x22,0x22,0x3c,0x00,
|
||||
0x00,0x00,0x1c,0x22,0x3e,0x02,0x3c,0x00,
|
||||
0x18,0x24,0x04,0x1e,0x04,0x04,0x04,0x00,
|
||||
0x00,0x00,0x1c,0x22,0x22,0x3c,0x20,0x1c,
|
||||
0x02,0x02,0x1e,0x22,0x22,0x22,0x22,0x00,
|
||||
0x08,0x00,0x0c,0x08,0x08,0x08,0x1c,0x00,
|
||||
0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c,
|
||||
0x02,0x02,0x22,0x12,0x0e,0x12,0x22,0x00,
|
||||
0x0c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,
|
||||
0x00,0x00,0x36,0x2a,0x2a,0x2a,0x22,0x00,
|
||||
0x00,0x00,0x1e,0x22,0x22,0x22,0x22,0x00,
|
||||
0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00,
|
||||
0x00,0x00,0x1e,0x22,0x22,0x1e,0x02,0x02,
|
||||
0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x20,
|
||||
0x00,0x00,0x3a,0x06,0x02,0x02,0x02,0x00,
|
||||
0x00,0x00,0x3c,0x02,0x1c,0x20,0x1e,0x00,
|
||||
0x04,0x04,0x1e,0x04,0x04,0x24,0x18,0x00,
|
||||
0x00,0x00,0x22,0x22,0x22,0x32,0x2c,0x00,
|
||||
0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00,
|
||||
0x00,0x00,0x22,0x22,0x2a,0x2a,0x36,0x00,
|
||||
0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00,
|
||||
0x00,0x00,0x22,0x22,0x22,0x3c,0x20,0x1c,
|
||||
0x00,0x00,0x3e,0x10,0x08,0x04,0x3e,0x00,
|
||||
0x38,0x0c,0x0c,0x06,0x0c,0x0c,0x38,0x00,
|
||||
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
|
||||
0x0e,0x18,0x18,0x30,0x18,0x18,0x0e,0x00,
|
||||
0x2c,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x2a,0x14,0x2a,0x14,0x2a,0x00,0x00,
|
||||
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,
|
||||
0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
|
||||
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,
|
||||
0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
|
||||
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,
|
||||
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
|
||||
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,
|
||||
0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
|
||||
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,
|
||||
0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
|
||||
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,
|
||||
0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
|
||||
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,
|
||||
0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
|
||||
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,
|
||||
0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
|
||||
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,
|
||||
0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
|
||||
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,
|
||||
0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
|
||||
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,
|
||||
0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
|
||||
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,
|
||||
0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
|
||||
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,
|
||||
0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
|
||||
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,
|
||||
0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
|
||||
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,
|
||||
0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
|
||||
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0xf7,0xff,
|
||||
0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff,
|
||||
0xeb,0xeb,0xc1,0xeb,0xc1,0xeb,0xeb,0xff,
|
||||
0xf7,0xc3,0xf5,0xe3,0xd7,0xe1,0xf7,0xff,
|
||||
0xf9,0xd9,0xef,0xf7,0xfb,0xcd,0xcf,0xff,
|
||||
0xfb,0xf5,0xf5,0xfb,0xd5,0xed,0xd3,0xff,
|
||||
0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,
|
||||
0xf7,0xfb,0xfd,0xfd,0xfd,0xfb,0xf7,0xff,
|
||||
0xf7,0xef,0xdf,0xdf,0xdf,0xef,0xf7,0xff,
|
||||
0xf7,0xd5,0xe3,0xf7,0xe3,0xd5,0xf7,0xff,
|
||||
0xff,0xf7,0xf7,0xc1,0xf7,0xf7,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xf7,0xf7,0xfb,0xff,
|
||||
0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,
|
||||
0xff,0xdf,0xef,0xf7,0xfb,0xfd,0xff,0xff,
|
||||
0xe3,0xdd,0xcd,0xd5,0xd9,0xdd,0xe3,0xff,
|
||||
0xf7,0xf3,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
|
||||
0xe3,0xdd,0xdf,0xe7,0xfb,0xfd,0xc1,0xff,
|
||||
0xc1,0xdf,0xef,0xe7,0xdf,0xdd,0xe3,0xff,
|
||||
0xef,0xe7,0xeb,0xed,0xc1,0xef,0xef,0xff,
|
||||
0xc1,0xfd,0xe1,0xdf,0xdf,0xdd,0xe3,0xff,
|
||||
0xc7,0xfb,0xfd,0xe1,0xdd,0xdd,0xe3,0xff,
|
||||
0xc1,0xdf,0xef,0xf7,0xfb,0xfb,0xfb,0xff,
|
||||
0xe3,0xdd,0xdd,0xe3,0xdd,0xdd,0xe3,0xff,
|
||||
0xe3,0xdd,0xdd,0xc3,0xdf,0xef,0xf1,0xff,
|
||||
0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,0xff,
|
||||
0xff,0xff,0xf7,0xff,0xf7,0xf7,0xfb,0xff,
|
||||
0xef,0xf7,0xfb,0xfd,0xfb,0xf7,0xef,0xff,
|
||||
0xff,0xff,0xc1,0xff,0xc1,0xff,0xff,0xff,
|
||||
0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xff,
|
||||
0xe3,0xdd,0xef,0xf7,0xf7,0xff,0xf7,0xff,
|
||||
0xe3,0xdd,0xd5,0xc5,0xe5,0xfd,0xc3,0xff,
|
||||
0xf7,0xeb,0xdd,0xdd,0xc1,0xdd,0xdd,0xff,
|
||||
0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1,0xff,
|
||||
0xe3,0xdd,0xfd,0xfd,0xfd,0xdd,0xe3,0xff,
|
||||
0xe1,0xdd,0xdd,0xdd,0xdd,0xdd,0xe1,0xff,
|
||||
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xc1,0xff,
|
||||
0xc1,0xfd,0xfd,0xe1,0xfd,0xfd,0xfd,0xff,
|
||||
0xc3,0xfd,0xfd,0xfd,0xcd,0xdd,0xc3,0xff,
|
||||
0xdd,0xdd,0xdd,0xc1,0xdd,0xdd,0xdd,0xff,
|
||||
0xe3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
|
||||
0xdf,0xdf,0xdf,0xdf,0xdf,0xdd,0xe3,0xff,
|
||||
0xdd,0xed,0xf5,0xf9,0xf5,0xed,0xdd,0xff,
|
||||
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc1,0xff,
|
||||
0xdd,0xc9,0xd5,0xd5,0xdd,0xdd,0xdd,0xff,
|
||||
0xdd,0xdd,0xd9,0xd5,0xcd,0xdd,0xdd,0xff,
|
||||
0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
|
||||
0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,0xfd,0xff,
|
||||
0xe3,0xdd,0xdd,0xdd,0xd5,0xed,0xd3,0xff,
|
||||
0xe1,0xdd,0xdd,0xe1,0xf5,0xed,0xdd,0xff,
|
||||
0xe3,0xdd,0xfd,0xe3,0xdf,0xdd,0xe3,0xff,
|
||||
0xc1,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,
|
||||
0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3,0xff,
|
||||
0xdd,0xdd,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,
|
||||
0xdd,0xdd,0xdd,0xd5,0xd5,0xc9,0xdd,0xff,
|
||||
0xdd,0xdd,0xeb,0xf7,0xeb,0xdd,0xdd,0xff,
|
||||
0xdd,0xdd,0xeb,0xf7,0xf7,0xf7,0xf7,0xff,
|
||||
0xc1,0xdf,0xef,0xf7,0xfb,0xfd,0xc1,0xff,
|
||||
0xc1,0xf9,0xf9,0xf9,0xf9,0xf9,0xc1,0xff,
|
||||
0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xff,
|
||||
0xc1,0xcf,0xcf,0xcf,0xcf,0xcf,0xc1,0xff,
|
||||
0xff,0xff,0xf7,0xeb,0xdd,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
|
||||
0xfb,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xe3,0xdf,0xc3,0xdd,0xc3,0xff,
|
||||
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xe1,0xff,
|
||||
0xff,0xff,0xc3,0xfd,0xfd,0xfd,0xc3,0xff,
|
||||
0xdf,0xdf,0xc3,0xdd,0xdd,0xdd,0xc3,0xff,
|
||||
0xff,0xff,0xe3,0xdd,0xc1,0xfd,0xc3,0xff,
|
||||
0xe7,0xdb,0xfb,0xe1,0xfb,0xfb,0xfb,0xff,
|
||||
0xff,0xff,0xe3,0xdd,0xdd,0xc3,0xdf,0xe3,
|
||||
0xfd,0xfd,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,
|
||||
0xf7,0xff,0xf3,0xf7,0xf7,0xf7,0xe3,0xff,
|
||||
0xef,0xff,0xe7,0xef,0xef,0xef,0xed,0xf3,
|
||||
0xfd,0xfd,0xdd,0xed,0xf1,0xed,0xdd,0xff,
|
||||
0xf3,0xf7,0xf7,0xf7,0xf7,0xf7,0xe3,0xff,
|
||||
0xff,0xff,0xc9,0xd5,0xd5,0xd5,0xdd,0xff,
|
||||
0xff,0xff,0xe1,0xdd,0xdd,0xdd,0xdd,0xff,
|
||||
0xff,0xff,0xe3,0xdd,0xdd,0xdd,0xe3,0xff,
|
||||
0xff,0xff,0xe1,0xdd,0xdd,0xe1,0xfd,0xfd,
|
||||
0xff,0xff,0xc3,0xdd,0xdd,0xc3,0xdf,0xdf,
|
||||
0xff,0xff,0xc5,0xf9,0xfd,0xfd,0xfd,0xff,
|
||||
0xff,0xff,0xc3,0xfd,0xe3,0xdf,0xe1,0xff,
|
||||
0xfb,0xfb,0xe1,0xfb,0xfb,0xdb,0xe7,0xff,
|
||||
0xff,0xff,0xdd,0xdd,0xdd,0xcd,0xd3,0xff,
|
||||
0xff,0xff,0xdd,0xdd,0xdd,0xeb,0xf7,0xff,
|
||||
0xff,0xff,0xdd,0xdd,0xd5,0xd5,0xc9,0xff,
|
||||
0xff,0xff,0xdd,0xeb,0xf7,0xeb,0xdd,0xff,
|
||||
0xff,0xff,0xdd,0xdd,0xdd,0xc3,0xdf,0xe3,
|
||||
0xff,0xff,0xc1,0xef,0xf7,0xfb,0xc1,0xff,
|
||||
0xc7,0xf3,0xf3,0xf9,0xf3,0xf3,0xc7,0xff,
|
||||
0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,
|
||||
0xf1,0xe7,0xe7,0xcf,0xe7,0xe7,0xf1,0xff,
|
||||
0xd3,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xd5,0xeb,0xd5,0xeb,0xd5,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0xff,0xff,
|
||||
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0xff,0xff,
|
||||
0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0xff,0xff,
|
||||
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0xff,0xff,
|
||||
0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0xff,0xff,
|
||||
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0xff,0xff,
|
||||
0xf8,0xf8,0x88,0x22,0xf8,0xf8,0xff,0xff,
|
||||
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0xff,0xff,
|
||||
0xf6,0xf6,0x66,0x99,0xf6,0xf6,0xff,0xff,
|
||||
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0xff,0xff,
|
||||
0xf4,0xf4,0x44,0x11,0xf4,0xf4,0xff,0xff,
|
||||
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0xff,0xff,
|
||||
0xf2,0xf2,0x22,0x88,0xf2,0xf2,0xff,0xff,
|
||||
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0xff,0xff,
|
||||
0xf0,0xf0,0x00,0x00,0xf0,0xf0,0xff,0xff,
|
||||
0xef,0xef,0xff,0xff,0xef,0xef,0xee,0xbb,
|
||||
0xee,0xee,0xee,0xbb,0xee,0xee,0xee,0xbb,
|
||||
0xed,0xed,0xdd,0x77,0xed,0xed,0xee,0xbb,
|
||||
0xec,0xec,0xcc,0x33,0xec,0xec,0xee,0xbb,
|
||||
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0xee,0xbb,
|
||||
0xea,0xea,0xaa,0xaa,0xea,0xea,0xee,0xbb,
|
||||
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0xee,0xbb,
|
||||
0xe8,0xe8,0x88,0x22,0xe8,0xe8,0xee,0xbb,
|
||||
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0xee,0xbb,
|
||||
0xe6,0xe6,0x66,0x99,0xe6,0xe6,0xee,0xbb,
|
||||
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0xee,0xbb,
|
||||
0xe4,0xe4,0x44,0x11,0xe4,0xe4,0xee,0xbb,
|
||||
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0xee,0xbb,
|
||||
0xe2,0xe2,0x22,0x88,0xe2,0xe2,0xee,0xbb,
|
||||
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0xee,0xbb,
|
||||
0xe0,0xe0,0x00,0x00,0xe0,0xe0,0xee,0xbb,
|
||||
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0xdd,0x77,
|
||||
0xde,0xde,0xee,0xbb,0xde,0xde,0xdd,0x77,
|
||||
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0xdd,0x77,
|
||||
0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0xdd,0x77,
|
||||
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0xdd,0x77,
|
||||
0xda,0xda,0xaa,0xaa,0xda,0xda,0xdd,0x77,
|
||||
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0xdd,0x77,
|
||||
0xd8,0xd8,0x88,0x22,0xd8,0xd8,0xdd,0x77,
|
||||
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0xdd,0x77,
|
||||
0xd6,0xd6,0x66,0x99,0xd6,0xd6,0xdd,0x77,
|
||||
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0xdd,0x77,
|
||||
0xd4,0xd4,0x44,0x11,0xd4,0xd4,0xdd,0x77,
|
||||
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0xdd,0x77,
|
||||
0xd2,0xd2,0x22,0x88,0xd2,0xd2,0xdd,0x77,
|
||||
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0xdd,0x77,
|
||||
0xd0,0xd0,0x00,0x00,0xd0,0xd0,0xdd,0x77,
|
||||
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0xcc,0x33,
|
||||
0xce,0xce,0xee,0xbb,0xce,0xce,0xcc,0x33,
|
||||
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0xcc,0x33,
|
||||
0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0xcc,0x33,
|
||||
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0xcc,0x33,
|
||||
0xca,0xca,0xaa,0xaa,0xca,0xca,0xcc,0x33,
|
||||
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0xcc,0x33,
|
||||
0xc8,0xc8,0x88,0x22,0xc8,0xc8,0xcc,0x33,
|
||||
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0xcc,0x33,
|
||||
0xc6,0xc6,0x66,0x99,0xc6,0xc6,0xcc,0x33,
|
||||
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0xcc,0x33,
|
||||
0xc4,0xc4,0x44,0x11,0xc4,0xc4,0xcc,0x33,
|
||||
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0xcc,0x33,
|
||||
0xc2,0xc2,0x22,0x88,0xc2,0xc2,0xcc,0x33,
|
||||
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0xcc,0x33,
|
||||
0xc0,0xc0,0x00,0x00,0xc0,0xc0,0xcc,0x33,
|
||||
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0xbb,0xee,
|
||||
0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0xbb,0xee,
|
||||
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0xbb,0xee,
|
||||
0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0xbb,0xee,
|
||||
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0xbb,0xee,
|
||||
0xba,0xba,0xaa,0xaa,0xba,0xba,0xbb,0xee,
|
||||
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0xbb,0xee,
|
||||
0xb8,0xb8,0x88,0x22,0xb8,0xb8,0xbb,0xee,
|
||||
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0xbb,0xee,
|
||||
0xb6,0xb6,0x66,0x99,0xb6,0xb6,0xbb,0xee,
|
||||
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0xbb,0xee,
|
||||
0xb4,0xb4,0x44,0x11,0xb4,0xb4,0xbb,0xee,
|
||||
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0xbb,0xee,
|
||||
0xb2,0xb2,0x22,0x88,0xb2,0xb2,0xbb,0xee,
|
||||
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0xbb,0xee,
|
||||
0xb0,0xb0,0x00,0x00,0xb0,0xb0,0xbb,0xee,
|
||||
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0xaa,0xaa,
|
||||
0xae,0xae,0xee,0xbb,0xae,0xae,0xaa,0xaa,
|
||||
0xad,0xad,0xdd,0x77,0xad,0xad,0xaa,0xaa,
|
||||
0xac,0xac,0xcc,0x33,0xac,0xac,0xaa,0xaa,
|
||||
0xab,0xab,0xbb,0xee,0xab,0xab,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0xaa,0xaa,
|
||||
0xa8,0xa8,0x88,0x22,0xa8,0xa8,0xaa,0xaa,
|
||||
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0xaa,0xaa,
|
||||
0xa6,0xa6,0x66,0x99,0xa6,0xa6,0xaa,0xaa,
|
||||
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0xaa,0xaa,
|
||||
0xa4,0xa4,0x44,0x11,0xa4,0xa4,0xaa,0xaa,
|
||||
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0xaa,0xaa,
|
||||
0xa2,0xa2,0x22,0x88,0xa2,0xa2,0xaa,0xaa,
|
||||
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0xaa,0xaa,
|
||||
0xa0,0xa0,0x00,0x00,0xa0,0xa0,0xaa,0xaa,
|
||||
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x99,0x66,
|
||||
0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x99,0x66,
|
||||
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x99,0x66,
|
||||
0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x99,0x66,
|
||||
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x99,0x66,
|
||||
0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x99,0x66,
|
||||
0x99,0x99,0x99,0x66,0x99,0x99,0x99,0x66,
|
||||
0x98,0x98,0x88,0x22,0x98,0x98,0x99,0x66,
|
||||
0x97,0x97,0x77,0xdd,0x97,0x97,0x99,0x66,
|
||||
0x96,0x96,0x66,0x99,0x96,0x96,0x99,0x66,
|
||||
0x95,0x95,0x55,0x55,0x95,0x95,0x99,0x66,
|
||||
0x94,0x94,0x44,0x11,0x94,0x94,0x99,0x66,
|
||||
0x93,0x93,0x33,0xcc,0x93,0x93,0x99,0x66,
|
||||
0x92,0x92,0x22,0x88,0x92,0x92,0x99,0x66,
|
||||
0x91,0x91,0x11,0x44,0x91,0x91,0x99,0x66,
|
||||
0x90,0x90,0x00,0x00,0x90,0x90,0x99,0x66,
|
||||
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x88,0x22,
|
||||
0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x88,0x22,
|
||||
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x88,0x22,
|
||||
0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x88,0x22,
|
||||
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x88,0x22,
|
||||
0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x88,0x22,
|
||||
0x89,0x89,0x99,0x66,0x89,0x89,0x88,0x22,
|
||||
0x88,0x88,0x88,0x22,0x88,0x88,0x88,0x22,
|
||||
0x87,0x87,0x77,0xdd,0x87,0x87,0x88,0x22,
|
||||
0x86,0x86,0x66,0x99,0x86,0x86,0x88,0x22,
|
||||
0x85,0x85,0x55,0x55,0x85,0x85,0x88,0x22,
|
||||
0x84,0x84,0x44,0x11,0x84,0x84,0x88,0x22,
|
||||
0x83,0x83,0x33,0xcc,0x83,0x83,0x88,0x22,
|
||||
0x82,0x82,0x22,0x88,0x82,0x82,0x88,0x22,
|
||||
0x81,0x81,0x11,0x44,0x81,0x81,0x88,0x22,
|
||||
0x80,0x80,0x00,0x00,0x80,0x80,0x88,0x22,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xdd,
|
||||
0xfe,0xfe,0xee,0xbb,0xfe,0xfe,0x77,0xdd,
|
||||
0xfd,0xfd,0xdd,0x77,0xfd,0xfd,0x77,0xdd,
|
||||
0xfc,0xfc,0xcc,0x33,0xfc,0xfc,0x77,0xdd,
|
||||
0xfb,0xfb,0xbb,0xee,0xfb,0xfb,0x77,0xdd,
|
||||
0xfa,0xfa,0xaa,0xaa,0xfa,0xfa,0x77,0xdd,
|
||||
0xf9,0xf9,0x99,0x66,0xf9,0xf9,0x77,0xdd,
|
||||
0xf8,0xf8,0x88,0x22,0xf8,0xf8,0x77,0xdd,
|
||||
0xf7,0xf7,0x77,0xdd,0xf7,0xf7,0x77,0xdd,
|
||||
0xf6,0xf6,0x66,0x99,0xf6,0xf6,0x77,0xdd,
|
||||
0xf5,0xf5,0x55,0x55,0xf5,0xf5,0x77,0xdd,
|
||||
0xf4,0xf4,0x44,0x11,0xf4,0xf4,0x77,0xdd,
|
||||
0xf3,0xf3,0x33,0xcc,0xf3,0xf3,0x77,0xdd,
|
||||
0xf2,0xf2,0x22,0x88,0xf2,0xf2,0x77,0xdd,
|
||||
0xf1,0xf1,0x11,0x44,0xf1,0xf1,0x77,0xdd,
|
||||
0xf0,0xf0,0x00,0x00,0xf0,0xf0,0x77,0xdd,
|
||||
0xef,0xef,0xff,0xff,0xef,0xef,0x66,0x99,
|
||||
0xee,0xee,0xee,0xbb,0xee,0xee,0x66,0x99,
|
||||
0xed,0xed,0xdd,0x77,0xed,0xed,0x66,0x99,
|
||||
0xec,0xec,0xcc,0x33,0xec,0xec,0x66,0x99,
|
||||
0xeb,0xeb,0xbb,0xee,0xeb,0xeb,0x66,0x99,
|
||||
0xea,0xea,0xaa,0xaa,0xea,0xea,0x66,0x99,
|
||||
0xe9,0xe9,0x99,0x66,0xe9,0xe9,0x66,0x99,
|
||||
0xe8,0xe8,0x88,0x22,0xe8,0xe8,0x66,0x99,
|
||||
0xe7,0xe7,0x77,0xdd,0xe7,0xe7,0x66,0x99,
|
||||
0xe6,0xe6,0x66,0x99,0xe6,0xe6,0x66,0x99,
|
||||
0xe5,0xe5,0x55,0x55,0xe5,0xe5,0x66,0x99,
|
||||
0xe4,0xe4,0x44,0x11,0xe4,0xe4,0x66,0x99,
|
||||
0xe3,0xe3,0x33,0xcc,0xe3,0xe3,0x66,0x99,
|
||||
0xe2,0xe2,0x22,0x88,0xe2,0xe2,0x66,0x99,
|
||||
0xe1,0xe1,0x11,0x44,0xe1,0xe1,0x66,0x99,
|
||||
0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x66,0x99,
|
||||
0xdf,0xdf,0xff,0xff,0xdf,0xdf,0x55,0x55,
|
||||
0xde,0xde,0xee,0xbb,0xde,0xde,0x55,0x55,
|
||||
0xdd,0xdd,0xdd,0x77,0xdd,0xdd,0x55,0x55,
|
||||
0xdc,0xdc,0xcc,0x33,0xdc,0xdc,0x55,0x55,
|
||||
0xdb,0xdb,0xbb,0xee,0xdb,0xdb,0x55,0x55,
|
||||
0xda,0xda,0xaa,0xaa,0xda,0xda,0x55,0x55,
|
||||
0xd9,0xd9,0x99,0x66,0xd9,0xd9,0x55,0x55,
|
||||
0xd8,0xd8,0x88,0x22,0xd8,0xd8,0x55,0x55,
|
||||
0xd7,0xd7,0x77,0xdd,0xd7,0xd7,0x55,0x55,
|
||||
0xd6,0xd6,0x66,0x99,0xd6,0xd6,0x55,0x55,
|
||||
0xd5,0xd5,0x55,0x55,0xd5,0xd5,0x55,0x55,
|
||||
0xd4,0xd4,0x44,0x11,0xd4,0xd4,0x55,0x55,
|
||||
0xd3,0xd3,0x33,0xcc,0xd3,0xd3,0x55,0x55,
|
||||
0xd2,0xd2,0x22,0x88,0xd2,0xd2,0x55,0x55,
|
||||
0xd1,0xd1,0x11,0x44,0xd1,0xd1,0x55,0x55,
|
||||
0xd0,0xd0,0x00,0x00,0xd0,0xd0,0x55,0x55,
|
||||
0xcf,0xcf,0xff,0xff,0xcf,0xcf,0x44,0x11,
|
||||
0xce,0xce,0xee,0xbb,0xce,0xce,0x44,0x11,
|
||||
0xcd,0xcd,0xdd,0x77,0xcd,0xcd,0x44,0x11,
|
||||
0xcc,0xcc,0xcc,0x33,0xcc,0xcc,0x44,0x11,
|
||||
0xcb,0xcb,0xbb,0xee,0xcb,0xcb,0x44,0x11,
|
||||
0xca,0xca,0xaa,0xaa,0xca,0xca,0x44,0x11,
|
||||
0xc9,0xc9,0x99,0x66,0xc9,0xc9,0x44,0x11,
|
||||
0xc8,0xc8,0x88,0x22,0xc8,0xc8,0x44,0x11,
|
||||
0xc7,0xc7,0x77,0xdd,0xc7,0xc7,0x44,0x11,
|
||||
0xc6,0xc6,0x66,0x99,0xc6,0xc6,0x44,0x11,
|
||||
0xc5,0xc5,0x55,0x55,0xc5,0xc5,0x44,0x11,
|
||||
0xc4,0xc4,0x44,0x11,0xc4,0xc4,0x44,0x11,
|
||||
0xc3,0xc3,0x33,0xcc,0xc3,0xc3,0x44,0x11,
|
||||
0xc2,0xc2,0x22,0x88,0xc2,0xc2,0x44,0x11,
|
||||
0xc1,0xc1,0x11,0x44,0xc1,0xc1,0x44,0x11,
|
||||
0xc0,0xc0,0x00,0x00,0xc0,0xc0,0x44,0x11,
|
||||
0xbf,0xbf,0xff,0xff,0xbf,0xbf,0x33,0xcc,
|
||||
0xbe,0xbe,0xee,0xbb,0xbe,0xbe,0x33,0xcc,
|
||||
0xbd,0xbd,0xdd,0x77,0xbd,0xbd,0x33,0xcc,
|
||||
0xbc,0xbc,0xcc,0x33,0xbc,0xbc,0x33,0xcc,
|
||||
0xbb,0xbb,0xbb,0xee,0xbb,0xbb,0x33,0xcc,
|
||||
0xba,0xba,0xaa,0xaa,0xba,0xba,0x33,0xcc,
|
||||
0xb9,0xb9,0x99,0x66,0xb9,0xb9,0x33,0xcc,
|
||||
0xb8,0xb8,0x88,0x22,0xb8,0xb8,0x33,0xcc,
|
||||
0xb7,0xb7,0x77,0xdd,0xb7,0xb7,0x33,0xcc,
|
||||
0xb6,0xb6,0x66,0x99,0xb6,0xb6,0x33,0xcc,
|
||||
0xb5,0xb5,0x55,0x55,0xb5,0xb5,0x33,0xcc,
|
||||
0xb4,0xb4,0x44,0x11,0xb4,0xb4,0x33,0xcc,
|
||||
0xb3,0xb3,0x33,0xcc,0xb3,0xb3,0x33,0xcc,
|
||||
0xb2,0xb2,0x22,0x88,0xb2,0xb2,0x33,0xcc,
|
||||
0xb1,0xb1,0x11,0x44,0xb1,0xb1,0x33,0xcc,
|
||||
0xb0,0xb0,0x00,0x00,0xb0,0xb0,0x33,0xcc,
|
||||
0xaf,0xaf,0xff,0xff,0xaf,0xaf,0x22,0x88,
|
||||
0xae,0xae,0xee,0xbb,0xae,0xae,0x22,0x88,
|
||||
0xad,0xad,0xdd,0x77,0xad,0xad,0x22,0x88,
|
||||
0xac,0xac,0xcc,0x33,0xac,0xac,0x22,0x88,
|
||||
0xab,0xab,0xbb,0xee,0xab,0xab,0x22,0x88,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x22,0x88,
|
||||
0xa9,0xa9,0x99,0x66,0xa9,0xa9,0x22,0x88,
|
||||
0xa8,0xa8,0x88,0x22,0xa8,0xa8,0x22,0x88,
|
||||
0xa7,0xa7,0x77,0xdd,0xa7,0xa7,0x22,0x88,
|
||||
0xa6,0xa6,0x66,0x99,0xa6,0xa6,0x22,0x88,
|
||||
0xa5,0xa5,0x55,0x55,0xa5,0xa5,0x22,0x88,
|
||||
0xa4,0xa4,0x44,0x11,0xa4,0xa4,0x22,0x88,
|
||||
0xa3,0xa3,0x33,0xcc,0xa3,0xa3,0x22,0x88,
|
||||
0xa2,0xa2,0x22,0x88,0xa2,0xa2,0x22,0x88,
|
||||
0xa1,0xa1,0x11,0x44,0xa1,0xa1,0x22,0x88,
|
||||
0xa0,0xa0,0x00,0x00,0xa0,0xa0,0x22,0x88,
|
||||
0x9f,0x9f,0xff,0xff,0x9f,0x9f,0x11,0x44,
|
||||
0x9e,0x9e,0xee,0xbb,0x9e,0x9e,0x11,0x44,
|
||||
0x9d,0x9d,0xdd,0x77,0x9d,0x9d,0x11,0x44,
|
||||
0x9c,0x9c,0xcc,0x33,0x9c,0x9c,0x11,0x44,
|
||||
0x9b,0x9b,0xbb,0xee,0x9b,0x9b,0x11,0x44,
|
||||
0x9a,0x9a,0xaa,0xaa,0x9a,0x9a,0x11,0x44,
|
||||
0x99,0x99,0x99,0x66,0x99,0x99,0x11,0x44,
|
||||
0x98,0x98,0x88,0x22,0x98,0x98,0x11,0x44,
|
||||
0x97,0x97,0x77,0xdd,0x97,0x97,0x11,0x44,
|
||||
0x96,0x96,0x66,0x99,0x96,0x96,0x11,0x44,
|
||||
0x95,0x95,0x55,0x55,0x95,0x95,0x11,0x44,
|
||||
0x94,0x94,0x44,0x11,0x94,0x94,0x11,0x44,
|
||||
0x93,0x93,0x33,0xcc,0x93,0x93,0x11,0x44,
|
||||
0x92,0x92,0x22,0x88,0x92,0x92,0x11,0x44,
|
||||
0x91,0x91,0x11,0x44,0x91,0x91,0x11,0x44,
|
||||
0x90,0x90,0x00,0x00,0x90,0x90,0x11,0x44,
|
||||
0x8f,0x8f,0xff,0xff,0x8f,0x8f,0x00,0x00,
|
||||
0x8e,0x8e,0xee,0xbb,0x8e,0x8e,0x00,0x00,
|
||||
0x8d,0x8d,0xdd,0x77,0x8d,0x8d,0x00,0x00,
|
||||
0x8c,0x8c,0xcc,0x33,0x8c,0x8c,0x00,0x00,
|
||||
0x8b,0x8b,0xbb,0xee,0x8b,0x8b,0x00,0x00,
|
||||
0x8a,0x8a,0xaa,0xaa,0x8a,0x8a,0x00,0x00,
|
||||
0x89,0x89,0x99,0x66,0x89,0x89,0x00,0x00,
|
||||
0x88,0x88,0x88,0x22,0x88,0x88,0x00,0x00,
|
||||
0x87,0x87,0x77,0xdd,0x87,0x87,0x00,0x00,
|
||||
0x86,0x86,0x66,0x99,0x86,0x86,0x00,0x00,
|
||||
0x85,0x85,0x55,0x55,0x85,0x85,0x00,0x00,
|
||||
0x84,0x84,0x44,0x11,0x84,0x84,0x00,0x00,
|
||||
0x83,0x83,0x33,0xcc,0x83,0x83,0x00,0x00,
|
||||
0x82,0x82,0x22,0x88,0x82,0x82,0x00,0x00,
|
||||
0x81,0x81,0x11,0x44,0x81,0x81,0x00,0x00,
|
||||
0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00
|
||||
];
|
337
js/apple2io.js
Normal file
337
js/apple2io.js
Normal file
@ -0,0 +1,337 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*globals debug: false, toHex: false, each: false */
|
||||
/*exported Apple2IO */
|
||||
|
||||
function Apple2IO(cpu, callbacks)
|
||||
{
|
||||
var SAMPLE_RATE = 64;
|
||||
|
||||
var _buffer = [];
|
||||
var _key = 0;
|
||||
var _keyDown = false;
|
||||
var _button = [false, false, false];
|
||||
var _paddle = [0.0, 0.0, 0.0, 0,0];
|
||||
var _phase = -1;
|
||||
var _sample = [];
|
||||
var _oldSample = [];
|
||||
var _sampleTime = 0;
|
||||
|
||||
var _high = "%A0";
|
||||
var _low = "%60";
|
||||
|
||||
var _trigger = 0;
|
||||
|
||||
var LOC = {
|
||||
KEYBOARD: 0x00, // keyboard data (latched) (Read),
|
||||
CLR80VID: 0x0C, // clear 80 column mode
|
||||
SET80VID: 0x0D, // set 80 column mode
|
||||
CLRALTCH: 0x0E, // clear 80 column mode
|
||||
SETALTCH: 0x0F, // set 80 column mode
|
||||
STROBE: 0x10, // clear bit 7 of keyboard data ($C000)
|
||||
|
||||
RDTEXT: 0x1A, // using text mode
|
||||
RDMIXED: 0x1B, // using mixed mode
|
||||
RDPAGE2: 0x1C, // using text/graphics page2
|
||||
RDHIRES: 0x1D, // using Hi-res graphics mode
|
||||
RDALTCH: 0x1E, // using alternate character set
|
||||
RD80VID: 0x1F, // using 80-column display mode
|
||||
|
||||
TAPEOUT: 0x20, // toggle the cassette output.
|
||||
SPEAKER: 0x30, // toggle speaker diaphragm
|
||||
CLRTEXT: 0x50, // display graphics
|
||||
SETTEXT: 0x51, // display text
|
||||
CLRMIXED: 0x52, // clear mixed mode- enable full graphics
|
||||
SETMIXED: 0x53, // enable graphics/text mixed mode
|
||||
PAGE1: 0x54, // select text/graphics page1
|
||||
PAGE2: 0x55, // select text/graphics page2
|
||||
CLRHIRES: 0x56, // select Lo-res
|
||||
SETHIRES: 0x57, // select Hi-res
|
||||
CLRAN0: 0x58, // Set annunciator-0 output to 0
|
||||
SETAN0: 0x59, // Set annunciator-0 output to 1
|
||||
CLRAN1: 0x5A, // Set annunciator-1 output to 0
|
||||
SETAN1: 0x5B, // Set annunciator-1 output to 1
|
||||
CLRAN2: 0x5C, // Set annunciator-2 output to 0
|
||||
SETAN2: 0x5D, // Set annunciator-2 output to 1
|
||||
CLRAN3: 0x5E, // Set annunciator-3 output to 0
|
||||
SETAN3: 0x5F, // Set annunciator-3 output to 1
|
||||
TAPEIN: 0x60, // bit 7: data from cassette
|
||||
PB0: 0x61, // game Pushbutton 0 / open apple (command) key data
|
||||
PB1: 0x62, // game Pushbutton 1 / closed apple (option) key data
|
||||
PB2: 0x63, // game Pushbutton 2 (read)
|
||||
PADDLE0: 0x64, // bit 7: status of pdl-0 timer (read)
|
||||
PADDLE1: 0x65, // bit 7: status of pdl-1 timer (read)
|
||||
PADDLE2: 0x66, // bit 7: status of pdl-2 timer (read)
|
||||
PADDLE3: 0x67, // bit 7: status of pdl-3 timer (read)
|
||||
PDLTRIG: 0x70, // trigger paddles
|
||||
SETIOUDIS:0x7E, // Enable double hires
|
||||
CLRIOUDIS:0x7F // Disable double hires
|
||||
};
|
||||
|
||||
function _debug() {
|
||||
// debug.apply(arguments);
|
||||
}
|
||||
|
||||
var _locs = [];
|
||||
|
||||
function _access(off) {
|
||||
var result = 0;
|
||||
var now = cpu.cycles();
|
||||
var delta = now - _trigger;
|
||||
switch (off) {
|
||||
case LOC.CLR80VID:
|
||||
// _debug("80 Column Mode off");
|
||||
if ('_80col' in callbacks) callbacks._80col(false);
|
||||
break;
|
||||
case LOC.SET80VID:
|
||||
// _debug("80 Column Mode on");
|
||||
if ('_80col' in callbacks) callbacks._80col(true);
|
||||
break;
|
||||
case LOC.CLRALTCH:
|
||||
// _debug("Alt Char off");
|
||||
if ('altchar' in callbacks) callbacks.altchar(false);
|
||||
break;
|
||||
case LOC.SETALTCH:
|
||||
// _debug("Alt Char on");
|
||||
if ('altchar' in callbacks) callbacks.altchar(true);
|
||||
break;
|
||||
case LOC.CLRTEXT:
|
||||
_debug("Graphics Mode");
|
||||
callbacks.text(false);
|
||||
break;
|
||||
case LOC.SETTEXT:
|
||||
_debug("Text Mode");
|
||||
callbacks.text(true);
|
||||
break;
|
||||
case LOC.CLRMIXED:
|
||||
_debug("Mixed Mode off");
|
||||
callbacks.mixed(false);
|
||||
break;
|
||||
case LOC.SETMIXED:
|
||||
_debug("Mixed Mode on");
|
||||
callbacks.mixed(true);
|
||||
break;
|
||||
case LOC.CLRHIRES:
|
||||
_debug("LoRes Mode");
|
||||
callbacks.hires(false);
|
||||
break;
|
||||
case LOC.SETHIRES:
|
||||
_debug("HiRes Mode");
|
||||
callbacks.hires(true);
|
||||
break;
|
||||
case LOC.PAGE1:
|
||||
callbacks.page(1);
|
||||
break;
|
||||
case LOC.PAGE2:
|
||||
callbacks.page(2);
|
||||
break;
|
||||
case LOC.RDTEXT:
|
||||
if ('isText' in callbacks)
|
||||
result = callbacks.isText() ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.RDMIXED:
|
||||
if ('isMixed' in callbacks)
|
||||
result = callbacks.isMixed() ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.RDPAGE2:
|
||||
if ('isPage2' in callbacks)
|
||||
result = callbacks.isPage2() ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.RDHIRES:
|
||||
if ('isHires' in callbacks)
|
||||
result = callbacks.isHires() ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.RD80VID:
|
||||
if ('is80Col' in callbacks)
|
||||
result = callbacks.is80Col() ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.RDALTCH:
|
||||
if ('isAltChar' in callbacks)
|
||||
result = callbacks.isAltChar() ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.SETAN0:
|
||||
_debug('Annunciator 0 on');
|
||||
if ('annunciator' in callbacks) callbacks.annunicator(0, true);
|
||||
break;
|
||||
case LOC.SETAN1:
|
||||
_debug('Annunciator 1 on');
|
||||
if ('annunciator' in callbacks) callbacks.annunicator(1, true);
|
||||
break;
|
||||
case LOC.SETAN2:
|
||||
_debug('Annunciator 2 on');
|
||||
if ('annunciator' in callbacks) callbacks.annunicator(2, true);
|
||||
break;
|
||||
case LOC.SETAN3:
|
||||
_debug('Annunciator 3 on');
|
||||
if ('annunciator' in callbacks) callbacks.annunicator(3, true);
|
||||
if ('doublehires' in callbacks) callbacks.doublehires(false);
|
||||
break;
|
||||
case LOC.CLRAN0:
|
||||
_debug('Annunciator 0 off');
|
||||
if ('annunciator' in callbacks) callbacks.annunicator(0, false);
|
||||
break;
|
||||
case LOC.CLRAN1:
|
||||
_debug('Annunciator 1 off');
|
||||
if ('annunciator' in callbacks) callbacks.annunicator(1, false);
|
||||
break;
|
||||
case LOC.CLRAN2:
|
||||
_debug('Annunciator 2 off');
|
||||
if ('annunciator' in callbacks) callbacks.annunicator(2, false);
|
||||
break;
|
||||
case LOC.CLRAN3:
|
||||
_debug('Annunciator 3 off');
|
||||
if ('annunciator' in callbacks) callbacks.annunicator(3, false);
|
||||
if ('doublehires' in callbacks) callbacks.doublehires(true);
|
||||
break;
|
||||
case LOC.SPEAKER:
|
||||
if (_sampleTime) {
|
||||
var phase = _phase > 0 ? _high : _low;
|
||||
for (; _sampleTime < now; _sampleTime += SAMPLE_RATE) {
|
||||
_sample.push(phase);
|
||||
}
|
||||
_phase = -_phase;
|
||||
}
|
||||
break;
|
||||
case LOC.STROBE:
|
||||
_key &= 0x7f;
|
||||
if (_buffer.length > 0) {
|
||||
_key = _buffer.shift().charCodeAt(0) | 0x80;
|
||||
}
|
||||
result = _keyDown ? 0x80 : 0x00;
|
||||
break;
|
||||
case LOC.KEYBOARD:
|
||||
result = _key;
|
||||
break;
|
||||
case LOC.PB0:
|
||||
result = _button[0] ? 0x80 : 0;
|
||||
break;
|
||||
case LOC.PB1:
|
||||
result = _button[1] ? 0x80 : 0;
|
||||
break;
|
||||
case LOC.PB2:
|
||||
result = _button[2] ? 0x80 : 0;
|
||||
break;
|
||||
case LOC.PADDLE0:
|
||||
result = (delta < (_paddle[0] * 2560) ? 0x80 : 0x00);
|
||||
break;
|
||||
case LOC.PADDLE1:
|
||||
result = (delta < (_paddle[1] * 2560) ? 0x80 : 0x00);
|
||||
break;
|
||||
case LOC.PADDLE2:
|
||||
result = (delta < (_paddle[2] * 2560) ? 0x80 : 0x00);
|
||||
break;
|
||||
case LOC.PADDLE3:
|
||||
result = (delta < (_paddle[3] * 2560) ? 0x80 : 0x00);
|
||||
break;
|
||||
case LOC.PDLTRIG:
|
||||
_trigger = cpu.cycles();
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
return {
|
||||
registerSwitches: function apple2io_registerSwitches(a, locs) {
|
||||
each(locs, function(key) {
|
||||
var val = locs[key];
|
||||
if (_locs[val]) {
|
||||
debug('duplicate switch! ' + toHex(val));
|
||||
}
|
||||
_locs[val] = a;
|
||||
});
|
||||
},
|
||||
start: function apple2io_start() {
|
||||
this.registerSwitches(this, LOC);
|
||||
return 0xc0;
|
||||
},
|
||||
end: function apple2io_end() {
|
||||
return 0xc0;
|
||||
},
|
||||
read: function apple2io_read(page, off) {
|
||||
var result = 0;
|
||||
if (_locs[off]) {
|
||||
result = _locs[off].ioSwitch(off);
|
||||
} else {
|
||||
debug("I/O read: C0" + toHex(off));
|
||||
}
|
||||
return result;
|
||||
},
|
||||
write: function apple2io_write(page, off, val) {
|
||||
if (_locs[off]) {
|
||||
_locs[off].ioSwitch(off, val);
|
||||
} else {
|
||||
debug("I/O write: C0" + toHex(off));
|
||||
}
|
||||
},
|
||||
getState: function apple2io_getState() { return {}; },
|
||||
setState: function apple2io_setState() { },
|
||||
ioSwitch: function apple2io_ioSwitch(off, val) {
|
||||
return _access(off, val);
|
||||
},
|
||||
keyDown: function apple2io_keyDown(ascii) {
|
||||
_keyDown = true;
|
||||
_key = ascii | 0x80;
|
||||
},
|
||||
keyUp: function apple2io_keyUp() {
|
||||
_keyDown = false;
|
||||
_key = 0;
|
||||
},
|
||||
|
||||
buttonDown: function apple2io_buttonDown(b) {
|
||||
_button[b] = true;
|
||||
},
|
||||
buttonUp: function apple2io_buttonUp(b) {
|
||||
_button[b] = false;
|
||||
},
|
||||
paddle: function apple2io_paddle(p, v) {
|
||||
_paddle[p] = v;
|
||||
},
|
||||
getSample: function apple2io_getSample(stop) {
|
||||
var result = _sample;
|
||||
var now = cpu.cycles();
|
||||
|
||||
//if (_sampleTime) {
|
||||
// var phase = _phase > 0 ? _high : _low;
|
||||
// for (; _sampleTime < now; _sampleTime += SAMPLE_RATE)
|
||||
// _sample.push(phase);
|
||||
//}
|
||||
|
||||
_sample = _oldSample;
|
||||
_sample.length = 0;
|
||||
_sampleTime = stop ? 0 : now;
|
||||
|
||||
_oldSample = result;
|
||||
|
||||
return result;
|
||||
},
|
||||
floatAudio: function apple2io_floatAudio(rate) {
|
||||
_low = -0.5;
|
||||
_high = 0.5;
|
||||
|
||||
SAMPLE_RATE = 1023000.0 / rate;
|
||||
},
|
||||
byteAudio: function apple2io_floatAudio(rate) {
|
||||
_low = 0xa0;
|
||||
_high = 0x60;
|
||||
|
||||
SAMPLE_RATE = 1023000.0 / rate;
|
||||
},
|
||||
setKeyBuffer: function apple2io_setKeyBuffer(buffer) {
|
||||
_buffer = buffer.split("");
|
||||
if (_buffer.length > 0) {
|
||||
_keyDown = true;
|
||||
_key = _buffer.shift().charCodeAt(0) | 0x80;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
112
js/base64.js
Normal file
112
js/base64.js
Normal file
@ -0,0 +1,112 @@
|
||||
/*exported base64_encode, base64_decode */
|
||||
|
||||
function base64_encode (data) {
|
||||
// Twacked by Will Scullin to handle arrays of "bytes"
|
||||
|
||||
// http://kevin.vanzonneveld.net
|
||||
// + original by: Tyler Akins (http://rumkin.com)
|
||||
// + improved by: Bayron Guevara
|
||||
// + improved by: Thunder.m
|
||||
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||
// + bugfixed by: Pellentesque Malesuada
|
||||
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||
// - depends on: utf8_encode
|
||||
// * example 1: base64_encode('Kevin van Zonneveld');
|
||||
// * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
|
||||
|
||||
// mozilla has this native
|
||||
// - but breaks in 2.0.0.12!
|
||||
//if (typeof this.window['atob'] == 'function') {
|
||||
// return atob(data);
|
||||
//}
|
||||
|
||||
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];
|
||||
|
||||
if (!data) {
|
||||
return data;
|
||||
}
|
||||
|
||||
do { // pack three octets into four hexets
|
||||
o1 = data[i++];
|
||||
o2 = data[i++];
|
||||
o3 = data[i++];
|
||||
|
||||
bits = o1<<16 | o2<<8 | o3;
|
||||
|
||||
h1 = bits>>18 & 0x3f;
|
||||
h2 = bits>>12 & 0x3f;
|
||||
h3 = bits>>6 & 0x3f;
|
||||
h4 = bits & 0x3f;
|
||||
|
||||
// use hexets to index into b64, and append result to encoded string
|
||||
tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
|
||||
} while (i < data.length);
|
||||
|
||||
enc = tmp_arr.join('');
|
||||
|
||||
switch (data.length % 3) {
|
||||
case 1:
|
||||
enc = enc.slice(0, -2) + '==';
|
||||
break;
|
||||
case 2:
|
||||
enc = enc.slice(0, -1) + '=';
|
||||
break;
|
||||
}
|
||||
|
||||
return enc;
|
||||
}
|
||||
|
||||
function base64_decode(data) {
|
||||
// Twacked by Will Scullin to handle arrays of "bytes"
|
||||
|
||||
// http://kevin.vanzonneveld.net
|
||||
// + original by: Tyler Akins (http://rumkin.com)
|
||||
// + improved by: Thunder.m
|
||||
// + input by: Aman Gupta
|
||||
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||
// + bugfixed by: Onno Marsman
|
||||
// + bugfixed by: Pellentesque Malesuada
|
||||
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||
// + input by: Brett Zamir (http://brett-zamir.me)
|
||||
// + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||
// - depends on: utf8_decode
|
||||
// * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
|
||||
// * returns 1: 'Kevin van Zonneveld'
|
||||
|
||||
// mozilla has this native
|
||||
// - but breaks in 2.0.0.12!
|
||||
//if (typeof this.window['btoa'] == 'function') {
|
||||
// return btoa(data);
|
||||
//}
|
||||
|
||||
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, tmp_arr = [];
|
||||
|
||||
if (!data) {
|
||||
return data;
|
||||
}
|
||||
|
||||
do { // unpack four hexets into three octets using index points in b64
|
||||
h1 = b64.indexOf(data.charAt(i++));
|
||||
h2 = b64.indexOf(data.charAt(i++));
|
||||
h3 = b64.indexOf(data.charAt(i++));
|
||||
h4 = b64.indexOf(data.charAt(i++));
|
||||
|
||||
bits = h1<<18 | h2<<12 | h3<<6 | h4;
|
||||
|
||||
o1 = bits>>16 & 0xff;
|
||||
o2 = bits>>8 & 0xff;
|
||||
o3 = bits & 0xff;
|
||||
|
||||
tmp_arr[ac++] = o1;
|
||||
if (h3 != 64) {
|
||||
tmp_arr[ac++] = o2;
|
||||
}
|
||||
if (h4 != 64) {
|
||||
tmp_arr[ac++] = o3;
|
||||
}
|
||||
} while (i < data.length);
|
||||
|
||||
return tmp_arr;
|
||||
}
|
412
js/canvas2.js
Normal file
412
js/canvas2.js
Normal file
@ -0,0 +1,412 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*globals allocMemPages: false,
|
||||
charset: false,
|
||||
base64_encode: false, base64_decode: false */
|
||||
/*exported LoresPage, HiresPage, VideoModes*/
|
||||
|
||||
/*
|
||||
* Text Page 1 Drawing
|
||||
*/
|
||||
|
||||
var textMode = true;
|
||||
var mixedMode = true;
|
||||
var hiresMode = false;
|
||||
var pageMode = 1;
|
||||
var pages = [];
|
||||
var context = null;
|
||||
|
||||
function LoresPage(page)
|
||||
{
|
||||
var _page = page;
|
||||
var _buffer = [];
|
||||
var _refreshing = false;
|
||||
var _greenMode = false;
|
||||
|
||||
var _black = [0x00,0x00,0x00];
|
||||
var _white = [0xff,0xff,0xff];
|
||||
var _green = [0x00,0xff,0x00];
|
||||
|
||||
var _colors = [
|
||||
[0x00,0x00,0x00], // 0 Black 0000 0 0
|
||||
[0x90,0x17,0x40], // 1 Red 0001 8 1
|
||||
[0x3c,0x22,0xa5], // 2 Dark Blue 1000 1
|
||||
[0xd0,0x43,0xe5], // 3 Purple 1001 9
|
||||
[0x00,0x69,0x40], // 4 Dark Green 0100 4
|
||||
[0xb0,0xb0,0xb0], // 5 Gray 1 0101 5
|
||||
[0x2f,0x95,0xe5], // 6 Medium Blue 1100 12
|
||||
[0xbf,0xab,0xff], // 7 Light Blue 1101 13
|
||||
[0x40,0x54,0x00], // 8 Brown 0010 2
|
||||
[0xd0,0x6a,0x1a], // 9 Orange 0011 3
|
||||
[0x40,0x40,0x40], // 10 Gray 2 1010 10
|
||||
[0xff,0x96,0xbf], // 11 Pink 1011 11
|
||||
[0x2f,0xbc,0x1a], // 12 Light Green 0110 6
|
||||
[0xb9,0xd0,0x60], // 13 Yellow 0111 7
|
||||
[0x6f,0xe8,0xbf], // 14 Aqua 1110 14
|
||||
[0xff,0xff,0xff] // 15 White 1111 15
|
||||
|
||||
/* Alternate from http://mrob.com/pub/xapple2/colors.html
|
||||
[ 0, 0, 0], // 0 Black
|
||||
[227, 30, 96], // 1 Red
|
||||
[ 96, 78,189], // 2 Dark Blue
|
||||
[255, 68,253], // 3 Purple
|
||||
[ 0,163, 96], // 4 Dark Green
|
||||
[156,156,156], // 5 Grey
|
||||
[ 20,207,253], // 6 Med Blue
|
||||
[208,195,255], // 7 Light Blue
|
||||
[ 96,114, 3], // 8 Brown
|
||||
[255,106, 60], // 9 Orange
|
||||
[156,156,156], // 10 Grey
|
||||
[255,160,208], // 11 Pink
|
||||
[ 20,245, 60], // 12 Light Green
|
||||
[208,221,141], // 13 Yellow
|
||||
[114,255,208], // 14 Aqua
|
||||
[255,255,255] // 15 White
|
||||
*/
|
||||
];
|
||||
|
||||
function _init() {
|
||||
_buffer = allocMemPages(0x4);
|
||||
|
||||
for (var idx = 0; idx < 0x400; idx++) {
|
||||
_buffer[idx] = 0; // Math.floor(Math.random()*256);
|
||||
}
|
||||
}
|
||||
|
||||
_init();
|
||||
|
||||
return {
|
||||
start: function() { return (0x04 * _page); },
|
||||
end: function() { return (0x04 * _page) + 0x03; },
|
||||
read: function(page, off) {
|
||||
var addr = (page << 8) | off,
|
||||
base = addr - 0x400 * _page;
|
||||
return _buffer[base];
|
||||
},
|
||||
write: function(page, off, val) {
|
||||
var addr = (page << 8) | off,
|
||||
base = addr - 0x400 * _page;
|
||||
|
||||
if (_buffer[base] === val && !_refreshing)
|
||||
return;
|
||||
_buffer[base] = val;
|
||||
|
||||
var col = (base % 0x80) % 0x28,
|
||||
adj = off - col;
|
||||
|
||||
// 000001cd eabab000 -> 000abcde
|
||||
var ab = (adj & 0x18),
|
||||
cd = (page & 0x03) << 1,
|
||||
e = adj >> 7;
|
||||
|
||||
var row = ab | cd | e, color, idx, jdx, b;
|
||||
|
||||
if ((row < 24) && (col < 40)) {
|
||||
if (!textMode && hiresMode && !(mixedMode && row > 19))
|
||||
return;
|
||||
|
||||
var data = pages[_page].data, fore, back;
|
||||
off = (col * 7 + row * 280 * 8) * 4;
|
||||
|
||||
if (textMode || (mixedMode && row > 19)) {
|
||||
if (val & 0x80) {
|
||||
fore = _greenMode ? _green : _white;
|
||||
back = _black;
|
||||
} else {
|
||||
fore = _black;
|
||||
back = _greenMode ? _green : _white;
|
||||
}
|
||||
for (jdx = 0; jdx < 8; jdx++) {
|
||||
b = charset[(val & 0x3f) * 8 + jdx];
|
||||
b <<= 1;
|
||||
for (idx = 0; idx < 7; idx++) {
|
||||
color = (b & 0x80) ? fore : back;
|
||||
data[off + 0] = color[0];
|
||||
data[off + 1] = color[1];
|
||||
data[off + 2] = color[2];
|
||||
b <<= 1;
|
||||
off += 4;
|
||||
}
|
||||
off += 273 * 4;
|
||||
}
|
||||
} else {
|
||||
for (jdx = 0; jdx < 8; jdx++) {
|
||||
color = _colors[(jdx < 4) ? (val & 0x0f) : (val >> 4)];
|
||||
for (idx = 0; idx < 7; idx++) {
|
||||
data[off + 0] = color[0];
|
||||
data[off + 1] = color[1];
|
||||
data[off + 2] = color[2];
|
||||
off += 4;
|
||||
}
|
||||
off += 273 * 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
refresh: function() {
|
||||
var addr = 0x400 * _page;
|
||||
_refreshing = true;
|
||||
for (var idx = 0; idx < 0x400; idx++, addr++) {
|
||||
this.write(addr >> 8, addr & 0xff, _buffer[idx]);
|
||||
}
|
||||
_refreshing = false;
|
||||
},
|
||||
green: function(on) {
|
||||
_greenMode = on;
|
||||
this.refresh();
|
||||
},
|
||||
blit: function() {
|
||||
context.putImageData(pages[_page], 0, 0);
|
||||
},
|
||||
getState: function() {
|
||||
return {
|
||||
page: _page,
|
||||
green: _green,
|
||||
buffer: base64_encode(_buffer)
|
||||
};
|
||||
},
|
||||
setState: function(state) {
|
||||
_page = state.page;
|
||||
_green = state.green;
|
||||
_buffer = base64_decode(state.buffer);
|
||||
|
||||
this.refresh();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function HiresPage(page)
|
||||
{
|
||||
var _page = page;
|
||||
var orangeCol = [0xff, 0x65, 0x00];
|
||||
var greenCol = [0x00, 0xff, 0x00];
|
||||
var blueCol = [0x09, 0x2a, 0xff];
|
||||
var violetCol = [0xc9, 0x39, 0xc7];
|
||||
var whiteCol = [0xff, 0xff, 0xff];
|
||||
var blackCol = [0x00, 0x00, 0x00];
|
||||
|
||||
var _buffer = [];
|
||||
var _refreshing = false;
|
||||
|
||||
var _green = false;
|
||||
|
||||
function _init() {
|
||||
_buffer = allocMemPages(0x20);
|
||||
|
||||
for (var idx = 0; idx < 0x2000; idx++)
|
||||
_buffer[idx] = 0; // Math.floor(Math.random()*256);
|
||||
}
|
||||
|
||||
_init();
|
||||
|
||||
return {
|
||||
start: function() { return (0x20 * _page); },
|
||||
end: function() { return (0x020 * _page) + 0x1f; },
|
||||
read: function(page, off) {
|
||||
var addr = (page << 8) | off,
|
||||
base = addr - 0x2000 * _page;
|
||||
return _buffer[base];
|
||||
},
|
||||
write: function(page, off, val) {
|
||||
var addr = (page << 8) | off,
|
||||
base = addr - 0x2000 * _page;
|
||||
if (_buffer[base] === val && !_refreshing)
|
||||
return;
|
||||
_buffer[base] = val;
|
||||
|
||||
var hbs = val & 0x80;
|
||||
val &= 0x7f;
|
||||
|
||||
var col = (base % 0x80) % 0x28,
|
||||
adj = off - col;
|
||||
|
||||
// 000001cd eabab000 -> 000abcde
|
||||
var ab = (adj & 0x18),
|
||||
cd = (page & 0x03) << 1,
|
||||
e = adj >> 7;
|
||||
|
||||
var rowa = ab | cd | e,
|
||||
rowb = base >> 10;
|
||||
|
||||
if ((rowa < 24) && (col < 40)) {
|
||||
if (textMode || !hiresMode || (mixedMode && rowa > 19))
|
||||
return;
|
||||
|
||||
var data = pages[_page].data,
|
||||
dy = rowa * 8 + rowb,
|
||||
dx = col * 7 - 1,
|
||||
b0 = col > 0 ? _buffer[base - 1] : 0,
|
||||
b2 = col < 39 ? _buffer[base + 1] : 0;
|
||||
val |= (b2 & 0x3) << 7;
|
||||
var v0 = b0 & 0x20, v1 = b0 & 0x40, v2 = val & 0x1,
|
||||
odd = !(col & 0x1),
|
||||
color,
|
||||
oddCol = (hbs ? orangeCol : greenCol),
|
||||
evenCol = (hbs ? blueCol : violetCol);
|
||||
|
||||
off = dx * 4 + dy * 280 * 4;
|
||||
for (var idx = 0; idx < 9; idx++, off += 4) {
|
||||
val >>= 1;
|
||||
|
||||
if (v1) {
|
||||
if (_green) {
|
||||
color = greenCol;
|
||||
} else if (v0 || v2) {
|
||||
color = whiteCol;
|
||||
} else {
|
||||
color = odd ? oddCol : evenCol;
|
||||
}
|
||||
} else {
|
||||
if (_green) {
|
||||
color = blackCol;
|
||||
} else if (odd && v0 && v2) {
|
||||
color = evenCol;
|
||||
} else if (!odd && v0 && v2) {
|
||||
color = oddCol;
|
||||
} else {
|
||||
color = blackCol;
|
||||
}
|
||||
}
|
||||
|
||||
if (dx > -1 && dx < 280) {
|
||||
data[off + 0] = color[0];
|
||||
data[off + 1] = color[1];
|
||||
data[off + 2] = color[2];
|
||||
}
|
||||
dx++;
|
||||
|
||||
v0 = v1;
|
||||
v1 = v2;
|
||||
v2 = val & 0x01;
|
||||
odd = !odd;
|
||||
}
|
||||
}
|
||||
},
|
||||
refresh: function() {
|
||||
var addr = 0x2000 * _page;
|
||||
_refreshing = true;
|
||||
for (var idx = 0; idx < 0x2000; idx++, addr++) {
|
||||
this.write(addr >> 8, addr & 0xff, _buffer[idx]);
|
||||
}
|
||||
_refreshing = false;
|
||||
},
|
||||
green: function(on) {
|
||||
_green = on;
|
||||
this.refresh();
|
||||
},
|
||||
blit: function() {
|
||||
context.putImageData(pages[_page], 0, 0);
|
||||
},
|
||||
getState: function() {
|
||||
return {
|
||||
page: _page,
|
||||
green: _green,
|
||||
buffer: base64_encode(_buffer)
|
||||
};
|
||||
},
|
||||
setState: function(state) {
|
||||
_page = state.page;
|
||||
_green = state.green;
|
||||
_buffer = base64_decode(state.buffer);
|
||||
|
||||
this.refresh();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function VideoModes(gr,hgr,gr2,hgr2) {
|
||||
var _grs = [gr, gr2];
|
||||
var _hgrs = [hgr, hgr2];
|
||||
|
||||
function _refresh() {
|
||||
_grs[0].refresh();
|
||||
_grs[1].refresh();
|
||||
_hgrs[0].refresh();
|
||||
_hgrs[1].refresh();
|
||||
}
|
||||
|
||||
return {
|
||||
refresh: function() {
|
||||
_refresh();
|
||||
},
|
||||
text: function(on) {
|
||||
var old = textMode;
|
||||
textMode = on;
|
||||
if (old != on) {
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
hires: function(on) {
|
||||
var old = hiresMode;
|
||||
hiresMode = on;
|
||||
if (old != on) {
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
mixed: function(on) {
|
||||
var old = mixedMode;
|
||||
mixedMode = on;
|
||||
if (old != on) {
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
page: function(pageNo) {
|
||||
pageMode = pageNo;
|
||||
},
|
||||
setContext: function(c) {
|
||||
context = c;
|
||||
|
||||
pages[1] = context.createImageData(280, 192);
|
||||
pages[2] = context.createImageData(280, 192);
|
||||
for (var idx = 0; idx < 280 * 192 * 4; idx++) {
|
||||
pages[1].data[idx] = 0xff;
|
||||
pages[2].data[idx] = 0xff;
|
||||
}
|
||||
},
|
||||
blit: function() {
|
||||
if (hiresMode && !textMode) {
|
||||
_hgrs[pageMode - 1].blit();
|
||||
} else {
|
||||
_grs[pageMode - 1].blit();
|
||||
}
|
||||
},
|
||||
getState: function() {
|
||||
return {
|
||||
grs: [_grs[0].getState(), _grs[1].getState()],
|
||||
hgrs: [_hgrs[0].getState(), _hgrs[1].getState()],
|
||||
textMode: textMode,
|
||||
mixedMode: mixedMode,
|
||||
hiresMode: hiresMode,
|
||||
pageMode: pageMode
|
||||
};
|
||||
},
|
||||
setState: function(state) {
|
||||
textMode = state.textMode;
|
||||
mixedMode = state.mixedMode;
|
||||
hiresMode = state.hiresMode;
|
||||
pageMode = state.pageMode;
|
||||
|
||||
_grs[0].setState(state.grs[0]);
|
||||
_grs[1].setState(state.grs[1]);
|
||||
_hgrs[0].setState(state.hgrs[0]);
|
||||
_hgrs[1].setState(state.hgrs[1]);
|
||||
},
|
||||
green: function(on) {
|
||||
_grs[0].green(on);
|
||||
_grs[1].green(on);
|
||||
_hgrs[0].green(on);
|
||||
_hgrs[1].green(on);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
698
js/canvas2e.js
Normal file
698
js/canvas2e.js
Normal file
@ -0,0 +1,698 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*globals allocMemPages: false, charset: false, base64_encode: false, base64_decode: false */
|
||||
/*exported LoresPage, HiresPage, VideoModes */
|
||||
|
||||
var GREEN = [0x00,0xff,0x00];
|
||||
// var WHITE = [0xff,0xff,0xff];
|
||||
var MONO = GREEN;
|
||||
|
||||
var textMode = true;
|
||||
var mixedMode = false;
|
||||
var hiresMode = false;
|
||||
var pageMode = 1;
|
||||
var _80colMode = false;
|
||||
var altCharMode = false;
|
||||
var doubleHiresMode = false;
|
||||
var pages = [];
|
||||
var context = null;
|
||||
|
||||
/****************************************************************************
|
||||
*
|
||||
* Text/Lores Graphics
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
function LoresPage(page)
|
||||
{
|
||||
var _page = page;
|
||||
var _buffer = [];
|
||||
var _refreshing = false;
|
||||
var _greenMode = false;
|
||||
|
||||
var _black = [0x00,0x00,0x00];
|
||||
var _white = [0xff,0xff,0xff];
|
||||
var _green = [0x00,0xff,0x00];
|
||||
|
||||
var _colors = [
|
||||
[0x00,0x00,0x00], // 0 Black 0000 0 0
|
||||
[0x90,0x17,0x40], // 1 Red 0001 8 1
|
||||
[0x3c,0x22,0xa5], // 2 Dark Blue 1000 1
|
||||
[0xd0,0x43,0xe5], // 3 Purple 1001 9
|
||||
[0x00,0x69,0x40], // 4 Dark Green 0100 4
|
||||
[0xb0,0xb0,0xb0], // 5 Gray 1 0101 5
|
||||
[0x2f,0x95,0xe5], // 6 Medium Blue 1100 12
|
||||
[0xbf,0xab,0xff], // 7 Light Blue 1101 13
|
||||
[0x40,0x54,0x00], // 8 Brown 0010 2
|
||||
[0xd0,0x6a,0x1a], // 9 Orange 0011 3
|
||||
[0x40,0x40,0x40], // 10 Gray 2 1010 10
|
||||
[0xff,0x96,0xbf], // 11 Pink 1011 11
|
||||
[0x2f,0xbc,0x1a], // 12 Light Green 0110 6
|
||||
[0xb9,0xd0,0x60], // 13 Yellow 0111 7
|
||||
[0x6f,0xe8,0xbf], // 14 Aqua 1110 14
|
||||
[0xff,0xff,0xff] // 15 White 1111 15
|
||||
];
|
||||
|
||||
function _init() {
|
||||
_buffer[0] = allocMemPages(0x4);
|
||||
_buffer[1] = allocMemPages(0x4);
|
||||
|
||||
for (var idx = 0; idx < 0x400; idx++) {
|
||||
_buffer[0][idx] = 0; // idx & 0x2 ? 0xff : 0x00;
|
||||
_buffer[1][idx] = 0; // idx & 0x2 ? 0xff : 0x00;
|
||||
}
|
||||
}
|
||||
|
||||
_init();
|
||||
|
||||
return {
|
||||
bank0: function() {
|
||||
var self = this;
|
||||
return {
|
||||
start: function() {
|
||||
return self._start();
|
||||
},
|
||||
end: function() {
|
||||
return self._end();
|
||||
},
|
||||
read: function(page, off) {
|
||||
return self._read(page, off, 0);
|
||||
},
|
||||
write: function(page, off, val) {
|
||||
return self._write(page, off, val, 0);
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
bank1: function() {
|
||||
var self = this;
|
||||
return {
|
||||
start: function() {
|
||||
return self._start();
|
||||
},
|
||||
end: function() {
|
||||
return self._end();
|
||||
},
|
||||
read: function(page, off) {
|
||||
return self._read(page, off, 1);
|
||||
},
|
||||
write: function(page, off, val) {
|
||||
return self._write(page, off, val, 1);
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
// These are used by both bank 0 and 1
|
||||
|
||||
_start: function() { return (0x04 * _page); },
|
||||
_end: function() { return (0x04 * _page) + 0x03; },
|
||||
_read: function(page, off, bank) {
|
||||
var addr = (page << 8) | off,
|
||||
base = addr - 0x400 * _page;
|
||||
return _buffer[bank][base];
|
||||
},
|
||||
_write: function(page, off, val, bank) {
|
||||
var addr = (page << 8) | off,
|
||||
base = addr - 0x400 * _page,
|
||||
fore, back;
|
||||
|
||||
if (_buffer[bank][base] == val && !_refreshing)
|
||||
return;
|
||||
_buffer[bank][base] = val;
|
||||
|
||||
if (bank !== 0 && !_80colMode)
|
||||
return;
|
||||
|
||||
var col = (base % 0x80) % 0x28,
|
||||
adj = off - col;
|
||||
|
||||
// 000001cd eabab000 -> 000abcde
|
||||
var ab = (adj & 0x18),
|
||||
cd = (page & 0x03) << 1,
|
||||
e = adj >> 7;
|
||||
var idx, jdx;
|
||||
var row = ab | cd | e;
|
||||
|
||||
var data = pages[_page].data;
|
||||
if ((row < 24) && (col < 40)) {
|
||||
if (!textMode && hiresMode && !(mixedMode && row > 19))
|
||||
return;
|
||||
|
||||
var color;
|
||||
if (textMode || (mixedMode && row > 19)) {
|
||||
var b;
|
||||
fore = _greenMode ? _green : _white;
|
||||
back = _black;
|
||||
|
||||
if (!altCharMode && !_80colMode) {
|
||||
val = (val >= 0x40 && val < 0x80) ? val - 0x40 : val;
|
||||
}
|
||||
|
||||
if (_80colMode) {
|
||||
off = (col * 14 + (bank ? 0 : 1) * 7 + row * 560 * 8) * 4;
|
||||
for (jdx = 0; jdx < 8; jdx++) {
|
||||
b = charset[val * 8 + jdx];
|
||||
for (idx = 0; idx < 7; idx++) {
|
||||
color = (b & 0x01) ? back : fore;
|
||||
data[off + 0] = color[0];
|
||||
data[off + 1] = color[1];
|
||||
data[off + 2] = color[2];
|
||||
b >>= 1;
|
||||
off += 4;
|
||||
}
|
||||
off += 553 * 4;
|
||||
}
|
||||
} else {
|
||||
off = (col * 14 + row * 560 * 8) * 4;
|
||||
|
||||
for (jdx = 0; jdx < 8; jdx++) {
|
||||
b = charset[val * 8 + jdx];
|
||||
for (idx = 0; idx < 7; idx++) {
|
||||
color = (b & 0x01) ? back : fore;
|
||||
data[off + 0] = color[0];
|
||||
data[off + 1] = color[1];
|
||||
data[off + 2] = color[2];
|
||||
data[off + 4] = color[0];
|
||||
data[off + 5] = color[1];
|
||||
data[off + 6] = color[2];
|
||||
b >>= 1;
|
||||
off += 8;
|
||||
}
|
||||
off += 546 * 4;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (_80colMode) {
|
||||
off = (col * 14 + (bank ? 0 : 1) * 7 + row * 560 * 8) * 4;
|
||||
for (jdx = 0; jdx < 8; jdx++) {
|
||||
color = _colors[(jdx < 4) ?
|
||||
(val & 0x0f) : (val >> 4)];
|
||||
for (idx = 0; idx < 7; idx++) {
|
||||
data[off + 0] = color[0];
|
||||
data[off + 1] = color[1];
|
||||
data[off + 2] = color[2];
|
||||
off += 4;
|
||||
}
|
||||
off += 553 * 4;
|
||||
}
|
||||
} else {
|
||||
off = (col * 14 + row * 560 * 8) * 4;
|
||||
|
||||
for (jdx = 0; jdx < 8; jdx++) {
|
||||
color = _colors[(jdx < 4) ?
|
||||
(val & 0x0f) : (val >> 4)];
|
||||
for (idx = 0; idx < 7; idx++) {
|
||||
data[off + 0] = color[0];
|
||||
data[off + 1] = color[1];
|
||||
data[off + 2] = color[2];
|
||||
data[off + 4] = color[0];
|
||||
data[off + 5] = color[1];
|
||||
data[off + 6] = color[2];
|
||||
off += 8;
|
||||
}
|
||||
off += 546 * 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
refresh: function() {
|
||||
var page, off, addr = 0x400 * _page;
|
||||
_refreshing = true;
|
||||
for (var idx = 0; idx < 0x400; idx++, addr++) {
|
||||
page = addr >> 8;
|
||||
off = addr & 0xff;
|
||||
this._write(addr >> 8, addr & 0xff, _buffer[0][idx], 0);
|
||||
if (_80colMode)
|
||||
this._write(addr >> 8, addr & 0xff, _buffer[1][idx], 1);
|
||||
}
|
||||
_refreshing = false;
|
||||
},
|
||||
green: function(on) {
|
||||
_greenMode = on;
|
||||
},
|
||||
blit: function() {
|
||||
context.putImageData(pages[_page], 0, 0);
|
||||
},
|
||||
getState: function() {
|
||||
return {
|
||||
page: _page,
|
||||
green: _green,
|
||||
buffer: [base64_encode(_buffer[0]),
|
||||
base64_encode(_buffer[1])]
|
||||
};
|
||||
},
|
||||
setState: function(state) {
|
||||
_page = state.page;
|
||||
_green = state.green;
|
||||
_buffer[0] = base64_decode(state.buffer[0]);
|
||||
_buffer[1] = base64_decode(state.buffer[1]);
|
||||
|
||||
this.refresh();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
*
|
||||
* Hires Graphics
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
function HiresPage(page)
|
||||
{
|
||||
var _page = page;
|
||||
|
||||
var r4 = [0, // Black
|
||||
2, // Dark Blue
|
||||
4, // Dark Green
|
||||
6, // Medium Blue
|
||||
|
||||
8, // Brown
|
||||
5, // Gray 1
|
||||
12, // Light Green
|
||||
14, // Aqua
|
||||
|
||||
1, // Red
|
||||
3, // Purple
|
||||
10, // Gray 2
|
||||
7, // Pink
|
||||
|
||||
9, // Orange
|
||||
11, // Light Blue
|
||||
13, // Yellow
|
||||
15]; // White
|
||||
|
||||
var dcolors = [
|
||||
[0x00,0x00,0x00], // 0 Black 0000 0 0
|
||||
[0x90,0x17,0x40], // 1 Red 0001 8 1
|
||||
[0x3c,0x22,0xa5], // 2 Dark Blue 1000 1
|
||||
[0xd0,0x43,0xe5], // 3 Purple 1001 9
|
||||
[0x00,0x69,0x40], // 4 Dark Green 0100 4
|
||||
[0xb0,0xb0,0xb0], // 5 Gray 1 0101 5
|
||||
[0x2f,0x95,0xe5], // 6 Medium Blue 1100 12
|
||||
[0xbf,0xab,0xff], // 7 Light Blue 1101 13
|
||||
[0x40,0x54,0x00], // 8 Brown 0010 2
|
||||
[0xd0,0x6a,0x1a], // 9 Orange 0011 3
|
||||
[0x40,0x40,0x40], // 10 Gray 2 1010 10
|
||||
[0xff,0x96,0xbf], // 11 Pink 1011 11
|
||||
[0x2f,0xbc,0x1a], // 12 Light Green 0110 6
|
||||
[0xb9,0xd0,0x60], // 13 Yellow 0111 7
|
||||
[0x6f,0xe8,0xbf], // 14 Aqua 1110 14
|
||||
[0xff,0xff,0xff] // 15 White 1111 15
|
||||
];
|
||||
|
||||
// hires colors
|
||||
var orangeCol = [0xff, 0x65, 0x00];
|
||||
var greenCol = [0x00, 0xff, 0x00];
|
||||
var blueCol = [0x09, 0x2a, 0xff];
|
||||
var violetCol = [0xc9, 0x39, 0xc7];
|
||||
var whiteCol = [0xff, 0xff, 0xff];
|
||||
var blackCol = [0x00, 0x00, 0x00];
|
||||
|
||||
var _buffer = [];
|
||||
var _refreshing = false;
|
||||
|
||||
var _green = false;
|
||||
var _garish = false;
|
||||
|
||||
function _init() {
|
||||
_buffer[0] = allocMemPages(0x20);
|
||||
_buffer[1] = allocMemPages(0x20);
|
||||
for (var idx = 0; idx < 0x2000; idx++) {
|
||||
_buffer[0][idx] = 0; // idx & 0x2 ? 0xff : 0x00;
|
||||
_buffer[1][idx] = 0; // idx & 0x2 ? 0xff : 0x00;
|
||||
}
|
||||
}
|
||||
|
||||
_init();
|
||||
|
||||
return {
|
||||
bank0: function() {
|
||||
var self = this;
|
||||
return {
|
||||
start: function() {
|
||||
return self._start();
|
||||
},
|
||||
end: function() {
|
||||
return self._end();
|
||||
},
|
||||
read: function(page, off) {
|
||||
return self._read(page, off, 0);
|
||||
},
|
||||
write: function(page, off, val) {
|
||||
return self._write(page, off, val, 0);
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
bank1: function() {
|
||||
var self = this;
|
||||
return {
|
||||
start: function() {
|
||||
return self._start();
|
||||
},
|
||||
end: function() {
|
||||
return self._end();
|
||||
},
|
||||
read: function(page, off) {
|
||||
return self._read(page, off, 1);
|
||||
},
|
||||
write: function(page, off, val) {
|
||||
return self._write(page, off, val, 1);
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
_start: function() { return (0x20 * _page); },
|
||||
_end: function() { return (0x020 * _page) + 0x1f; },
|
||||
_read: function(page, off, bank) {
|
||||
var addr = (page << 8) | off, base = addr - 0x2000 * _page;
|
||||
return _buffer[bank][base];
|
||||
},
|
||||
_write: function(page, off, val, bank) {
|
||||
var addr = (page << 8) | off, base = addr - 0x2000 * _page,
|
||||
idx, jdx;
|
||||
if (_buffer[bank][base] == val && !_refreshing)
|
||||
return;
|
||||
_buffer[bank][base] = val;
|
||||
|
||||
if (bank !== 0 && !doubleHiresMode)
|
||||
return;
|
||||
|
||||
var hbs = val & 0x80;
|
||||
val &= 0x7f;
|
||||
|
||||
var col = (base % 0x80) % 0x28,
|
||||
adj = off - col;
|
||||
|
||||
// 000001cd eabab000 -> 000abcde
|
||||
var ab = (adj & 0x18),
|
||||
cd = (page & 0x03) << 1,
|
||||
e = adj >> 7;
|
||||
|
||||
var rowa = ab | cd | e,
|
||||
rowb = base >> 10;
|
||||
|
||||
var dx, dy, data = pages[_page].data;
|
||||
if ((rowa < 24) && (col < 40)) {
|
||||
if (textMode || !hiresMode || (mixedMode && rowa > 19))
|
||||
return;
|
||||
|
||||
dy = rowa * 16 + rowb * 2;
|
||||
var b0, b1, b2, b3, b4, c;
|
||||
if (doubleHiresMode) {
|
||||
// Every 4 bytes is 7 pixels
|
||||
// 2 bytes per bank
|
||||
var mod = col % 2, mcol = col - mod;
|
||||
b0 = _buffer[1][base - mod];
|
||||
b1 = _buffer[0][base - mod];
|
||||
b2 = _buffer[1][base - mod + 1];
|
||||
b3 = _buffer[0][base - mod + 1];
|
||||
b4 = _buffer[1][base - mod + 2];
|
||||
c = [((b0 & 0x0f) >> 0), // 0
|
||||
((b0 & 0x70) >> 4) | ((b1 & 0x01) << 3), // 1
|
||||
((b1 & 0x1e) >> 1), // 2
|
||||
((b1 & 0x60) >> 5) | ((b2 & 0x03) << 2), // 3
|
||||
((b2 & 0x3c) >> 2), // 4
|
||||
((b2 & 0x40) >> 6) | ((b3 & 0x07) << 1), // 5
|
||||
((b3 & 0x78) >> 3), // 6
|
||||
0]; // 7
|
||||
if (col < 39) {
|
||||
c[7] = b4 & 0x0f;
|
||||
}
|
||||
dx = mcol * 14;
|
||||
off = dx * 4 + dy * 280 * 4;
|
||||
|
||||
for (idx = 0; idx < 7; idx++) {
|
||||
var dcolor = _green ? MONO : dcolors[r4[c[idx]]];
|
||||
var bits = c[idx] | (c[idx + 1] << 4);
|
||||
for (jdx = 0; jdx < 4; jdx++, off += 4) {
|
||||
var saturate = !MONO && (_garish || bits & 0xe);
|
||||
if (bits & 0x1 || saturate) {
|
||||
data[off + 0] = dcolor[0];
|
||||
data[off + 1] = dcolor[1];
|
||||
data[off + 2] = dcolor[2];
|
||||
} else {
|
||||
data[off + 0] = 0; // dcolor[0] >> 1;
|
||||
data[off + 1] = 0; // dcolor[1] >> 1;
|
||||
data[off + 2] = 0; // dcolor[2] >> 1;
|
||||
}
|
||||
bits >>= 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dx = col * 14 - 2;
|
||||
b0 = col > 0 ? _buffer[bank][base - 1] : 0;
|
||||
b2 = col < 39 ? _buffer[bank][base + 1] : 0;
|
||||
val |= (b2 & 0x3) << 7;
|
||||
var v0 = b0 & 0x20, v1 = b0 & 0x40, v2 = val & 0x1,
|
||||
odd = !(col & 0x1), color,
|
||||
oddCol = (hbs ? orangeCol : greenCol),
|
||||
evenCol = (hbs ? blueCol : violetCol);
|
||||
|
||||
off = dx * 4 + dy * 280 * 4;
|
||||
for (idx = 0; idx < 9; idx++, off += 8) {
|
||||
val >>= 1;
|
||||
if (v1) {
|
||||
if (_green) {
|
||||
color = MONO;
|
||||
} else if (v0 || v2) {
|
||||
color = whiteCol;
|
||||
} else {
|
||||
color = odd ? oddCol : evenCol;
|
||||
}
|
||||
} else {
|
||||
if (_green) {
|
||||
color = blackCol;
|
||||
} else if (odd && v2 && (_garish || v0)) {
|
||||
color = evenCol;
|
||||
} else if (!odd && v0 && (_garish || v2)) {
|
||||
color = oddCol;
|
||||
} else {
|
||||
color = blackCol;
|
||||
}
|
||||
}
|
||||
|
||||
if (dx > -1 && dx < 560) {
|
||||
data[off + 0] = color[0];
|
||||
data[off + 1] = color[1];
|
||||
data[off + 2] = color[2];
|
||||
data[off + 4] = color[0];
|
||||
data[off + 5] = color[1];
|
||||
data[off + 6] = color[2];
|
||||
}
|
||||
dx += 2;
|
||||
|
||||
v0 = v1;
|
||||
v1 = v2;
|
||||
v2 = val & 0x01;
|
||||
odd = !odd;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
refresh: function() {
|
||||
var page, off, idx, addr = 0x2000 * _page;
|
||||
_refreshing = true;
|
||||
for (idx = 0; idx < 0x2000; idx++, addr++) {
|
||||
page = addr >> 8;
|
||||
off = addr & 0xff;
|
||||
this._write(page, off, _buffer[0][idx], 0);
|
||||
if (_80colMode)
|
||||
this._write(page, off, _buffer[1][idx], 1);
|
||||
}
|
||||
_refreshing = false;
|
||||
},
|
||||
green: function(on) {
|
||||
_green = on;
|
||||
this.refresh();
|
||||
},
|
||||
garish: function(on) {
|
||||
_garish = on;
|
||||
this.refresh();
|
||||
},
|
||||
blit: function() {
|
||||
context.putImageData(pages[_page], 0, 0);
|
||||
},
|
||||
getState: function() {
|
||||
return {
|
||||
page: _page,
|
||||
green: _green,
|
||||
garish: _garish,
|
||||
buffer: [base64_encode(_buffer[0]),
|
||||
base64_encode(_buffer[1])]
|
||||
};
|
||||
},
|
||||
setState: function(state) {
|
||||
_page = state.page;
|
||||
_green = state.green;
|
||||
_garish = state.garish;
|
||||
_buffer[0] = base64_decode(state.buffer[0]);
|
||||
_buffer[1] = base64_decode(state.buffer[1]);
|
||||
|
||||
this.refresh();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function VideoModes(gr,hgr,gr2,hgr2) {
|
||||
var _grs = [gr, gr2];
|
||||
var _hgrs = [hgr, hgr2];
|
||||
|
||||
function _refresh() {
|
||||
gr.refresh();
|
||||
gr2.refresh();
|
||||
hgr.refresh();
|
||||
hgr2.refresh();
|
||||
}
|
||||
|
||||
return {
|
||||
refresh: function() {
|
||||
_refresh();
|
||||
},
|
||||
reset: function() {
|
||||
textMode = true;
|
||||
mixedMode = false;
|
||||
hiresMode = true;
|
||||
pageMode = 1;
|
||||
_80colMode = false;
|
||||
altCharMode = false;
|
||||
doubleHiresMode = false;
|
||||
|
||||
_refresh();
|
||||
},
|
||||
text: function(on) {
|
||||
var old = textMode;
|
||||
textMode = on;
|
||||
if (old != on) {
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
_80col: function(on) {
|
||||
var old = _80colMode;
|
||||
_80colMode = on;
|
||||
if (old != on) {
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
altchar: function(on) {
|
||||
var old = altCharMode;
|
||||
altCharMode = on;
|
||||
if (old != on) {
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
hires: function(on) {
|
||||
var old = hiresMode;
|
||||
hiresMode = on;
|
||||
if (old != on) {
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
doublehires: function(on) {
|
||||
var old = doubleHiresMode;
|
||||
doubleHiresMode = on;
|
||||
if (old != on) {
|
||||
if (on) {
|
||||
this.page(1);
|
||||
}
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
mixed: function(on) {
|
||||
var old = mixedMode;
|
||||
mixedMode = on;
|
||||
if (old != on) {
|
||||
_refresh();
|
||||
}
|
||||
},
|
||||
page: function(pageNo) {
|
||||
pageMode = pageNo;
|
||||
},
|
||||
isText: function() {
|
||||
return textMode;
|
||||
},
|
||||
isMixed: function() {
|
||||
return mixedMode;
|
||||
},
|
||||
isPage2: function() {
|
||||
return pageMode == 2;
|
||||
},
|
||||
isHires: function() {
|
||||
return hiresMode;
|
||||
},
|
||||
is80Col: function() {
|
||||
return _80colMode;
|
||||
},
|
||||
isAltChar: function() {
|
||||
return altCharMode;
|
||||
},
|
||||
setContext: function(c) {
|
||||
context = c;
|
||||
|
||||
pages[1] = c.createImageData(560, 192);
|
||||
pages[2] = c.createImageData(560, 192);
|
||||
for (var idx = 0; idx < 560 * 192 * 4; idx++) {
|
||||
pages[1].data[idx] = 0xff;
|
||||
pages[2].data[idx] = 0xff;
|
||||
}
|
||||
},
|
||||
blit: function() {
|
||||
if (hiresMode && !textMode) {
|
||||
_hgrs[pageMode - 1].blit();
|
||||
} else {
|
||||
_grs[pageMode - 1].blit();
|
||||
}
|
||||
},
|
||||
getState: function() {
|
||||
return {
|
||||
grs: [_grs[0].getState(), _grs[1].getState()],
|
||||
hgrs: [_hgrs[0].getState(), _hgrs[1].getState()],
|
||||
textMode: textMode,
|
||||
mixedMode: mixedMode,
|
||||
hiresMode: hiresMode,
|
||||
pageMode: pageMode,
|
||||
_80colMode: _80colMode,
|
||||
altCharMode: altCharMode,
|
||||
doubleHiresMode: doubleHiresMode
|
||||
};
|
||||
},
|
||||
setState: function(state) {
|
||||
textMode = state.textMode;
|
||||
mixedMode = state.mixedMode;
|
||||
hiresMode = state.hiresMode;
|
||||
pageMode = state.pageMode;
|
||||
_80colMode = state._80colMode;
|
||||
altCharMode = state.altCharMode;
|
||||
doubleHiresMode = state.doubleHiresMode;
|
||||
|
||||
_grs[0].setState(state.grs[0]);
|
||||
_grs[1].setState(state.grs[1]);
|
||||
_hgrs[0].setState(state.hgrs[0]);
|
||||
_hgrs[1].setState(state.hgrs[1]);
|
||||
},
|
||||
green: function(on) {
|
||||
_grs[0].green(on);
|
||||
_grs[1].green(on);
|
||||
_hgrs[0].green(on);
|
||||
_hgrs[1].green(on);
|
||||
},
|
||||
garish: function(on) {
|
||||
_hgrs[0].garish(on);
|
||||
_hgrs[1].garish(on);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
11
js/copyright.js
Normal file
11
js/copyright.js
Normal file
@ -0,0 +1,11 @@
|
||||
/*!
|
||||
* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
1342
js/cpu6502.js
Normal file
1342
js/cpu6502.js
Normal file
File diff suppressed because it is too large
Load Diff
795
js/disk2.js
Normal file
795
js/disk2.js
Normal file
@ -0,0 +1,795 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*jshint browser: true */
|
||||
/*globals extend: false, base64_encode: false, base64_decode: false, each: false */
|
||||
/*exported DiskII */
|
||||
|
||||
function DiskII(io, callbacks, slot)
|
||||
{
|
||||
slot = slot || 6;
|
||||
var _drives = [
|
||||
{ // Drive 1
|
||||
format: "dsk",
|
||||
volume: 254,
|
||||
tracks: [],
|
||||
track: 0,
|
||||
head: 0,
|
||||
phase: 0,
|
||||
readOnly: false,
|
||||
dirty: false
|
||||
},
|
||||
{ // Drive 2
|
||||
format: "dsk",
|
||||
volume: 254,
|
||||
tracks: [],
|
||||
track: 0,
|
||||
head: 0,
|
||||
phase: 0,
|
||||
readOnly: false,
|
||||
dirty: false
|
||||
}];
|
||||
|
||||
var _skip = 0;
|
||||
var _latch = 0;
|
||||
var _writeMode = false;
|
||||
var _on = false;
|
||||
var _drive = 1;
|
||||
var _cur = _drives[_drive - 1];
|
||||
|
||||
var LOC = {
|
||||
// Disk II Stuff
|
||||
PHASE0OFF: 0x80,
|
||||
PHASE0ON: 0x81,
|
||||
PHASE1OFF: 0x82,
|
||||
PHASE1ON: 0x83,
|
||||
PHASE2OFF: 0x84,
|
||||
PHASE2ON: 0x85,
|
||||
PHASE3OFF: 0x86,
|
||||
PHASE3ON: 0x87,
|
||||
|
||||
DRIVEOFF: 0x88,
|
||||
DRIVEON: 0x89,
|
||||
DRIVE1: 0x8A,
|
||||
DRIVE2: 0x8B,
|
||||
DRIVEREAD: 0x8C, // Q6L
|
||||
DRIVEWRITE: 0x8D, // Q6H
|
||||
DRIVEREADMODE: 0x8E, // Q7L
|
||||
DRIVEWRITEMODE: 0x8F // Q7H
|
||||
};
|
||||
|
||||
// var DO = [0x0,0x7,0xE,0x6,0xD,0x5,0xC,0x4,
|
||||
// 0xB,0x3,0xA,0x2,0x9,0x1,0x8,0xF];
|
||||
var _DO = [0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,
|
||||
0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF];
|
||||
|
||||
// var PO = [0x0,0x8,0x1,0x9,0x2,0xa,0x3,0xb,
|
||||
// 0x4,0xc,0x5,0xd,0x6,0xe,0x7,0xf];
|
||||
var _PO = [0x0,0x2,0x4,0x6,0x8,0xa,0xc,0xe,
|
||||
0x1,0x3,0x5,0x7,0x9,0xb,0xd,0xf];
|
||||
|
||||
var _trans = [0x96, 0x97, 0x9a, 0x9b, 0x9d, 0x9e, 0x9f, 0xa6,
|
||||
0xa7, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb2, 0xb3,
|
||||
0xb4, 0xb5, 0xb6, 0xb7, 0xb9, 0xba, 0xbb, 0xbc,
|
||||
0xbd, 0xbe, 0xbf, 0xcb, 0xcd, 0xce, 0xcf, 0xd3,
|
||||
0xd6, 0xd7, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde,
|
||||
0xdf, 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xeb, 0xec,
|
||||
0xed, 0xee, 0xef, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
|
||||
0xf7, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff];
|
||||
|
||||
var _detrans = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x02, 0x03, 0x00, 0x04, 0x05, 0x06,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08,
|
||||
0x00, 0x00, 0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
|
||||
0x00, 0x00, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13,
|
||||
0x00, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x1B, 0x00, 0x1C, 0x1D, 0x1E,
|
||||
0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x20, 0x21,
|
||||
0x00, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x2A, 0x2B,
|
||||
0x00, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32,
|
||||
0x00, 0x00, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
|
||||
0x00, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F];
|
||||
|
||||
function _debug() {
|
||||
// debug.apply(this, arguments);
|
||||
}
|
||||
|
||||
function _init() {
|
||||
each(LOC, function(key) {
|
||||
LOC[key] += slot * 0x10;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* From Beneath Apple DOS
|
||||
*/
|
||||
|
||||
function _fourXfour(val) {
|
||||
var xx = val & 0xaa;
|
||||
var yy = val & 0x55;
|
||||
|
||||
xx >>= 1;
|
||||
xx |= 0xaa;
|
||||
yy |= 0xaa;
|
||||
|
||||
return [xx, yy];
|
||||
}
|
||||
|
||||
function _defourXfour(xx, yy) {
|
||||
return ((xx << 1) | 0x01) & yy;
|
||||
}
|
||||
|
||||
function _explodeSector(volume, track, sector, data) {
|
||||
var checksum;
|
||||
|
||||
var buf = [], idx;
|
||||
|
||||
var gap;
|
||||
|
||||
/*
|
||||
* Gap 1/3 (40/0x28 bytes)
|
||||
*/
|
||||
|
||||
if (sector === 0) // Gap 1
|
||||
gap = 0x80;
|
||||
else { // Gap 3
|
||||
gap = track === 0 ? 0x28 : 0x26;
|
||||
}
|
||||
|
||||
for (idx = 0; idx < gap; idx++) {
|
||||
buf.push(0xff);
|
||||
}
|
||||
|
||||
/*
|
||||
* Address Field
|
||||
*/
|
||||
|
||||
checksum = volume ^ track ^ sector;
|
||||
extend(buf, [0xd5, 0xaa, 0x96]); // Address Prolog D5 AA 96
|
||||
extend(buf, _fourXfour(volume));
|
||||
extend(buf, _fourXfour(track));
|
||||
extend(buf, _fourXfour(sector));
|
||||
extend(buf, _fourXfour(checksum));
|
||||
extend(buf, [0xde, 0xaa, 0xeb]); // Epilog DE AA EB
|
||||
|
||||
/*
|
||||
* Gap 2 (5 bytes)
|
||||
*/
|
||||
|
||||
for (idx = 0; idx < 0x05; idx++) {
|
||||
buf.push(0xff);
|
||||
}
|
||||
|
||||
/*
|
||||
* Data Field
|
||||
*/
|
||||
|
||||
extend(buf, [0xd5, 0xaa, 0xad]); // Data Prolog D5 AA AD
|
||||
|
||||
var nibbles = [];
|
||||
var ptr2 = 0;
|
||||
var ptr6 = 0x56;
|
||||
var idx2, idx6;
|
||||
|
||||
for (idx = 0; idx < 0x156; idx++) {
|
||||
nibbles[idx] = 0;
|
||||
}
|
||||
|
||||
idx2 = 0x55;
|
||||
for (idx6 = 0x101; idx6 >= 0; idx6--) {
|
||||
var val6 = data[idx6 % 0x100];
|
||||
var val2 = nibbles[ptr2 + idx2];
|
||||
|
||||
val2 = (val2 << 1) | (val6 & 1);
|
||||
val6 >>= 1;
|
||||
val2 = (val2 << 1) | (val6 & 1);
|
||||
val6 >>= 1;
|
||||
|
||||
nibbles[ptr6 + idx6] = val6;
|
||||
nibbles[ptr2 + idx2] = val2;
|
||||
|
||||
if (--idx2 < 0)
|
||||
idx2 = 0x55;
|
||||
}
|
||||
|
||||
var last = 0;
|
||||
for (idx = 0; idx < 0x156; idx++) {
|
||||
var val = nibbles[idx];
|
||||
buf.push(_trans[last ^ val]);
|
||||
last = val;
|
||||
}
|
||||
buf.push(_trans[last]);
|
||||
|
||||
extend(buf, [0xde, 0xaa, 0xeb]); // Epilog DE AA EB
|
||||
|
||||
/*
|
||||
* Gap 3
|
||||
*/
|
||||
|
||||
buf.push(0xff);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
function _json_encode(drive, pretty) {
|
||||
var cur = _drives[drive - 1];
|
||||
var data = [];
|
||||
var format = "dsk";
|
||||
for (var t = 0; t < cur.tracks.length; t++) {
|
||||
data[t] = [];
|
||||
if (cur.format === "nib") {
|
||||
format = "nib";
|
||||
data[t] = base64_encode(cur.tracks[t]);
|
||||
} else {
|
||||
for (var s = 0; s < 0x10; s++) {
|
||||
data[t][s] = base64_encode(_readSector(drive, t, _DO[s]));
|
||||
}
|
||||
}
|
||||
}
|
||||
return JSON.stringify({"type": format,
|
||||
"encoding": "base64",
|
||||
"volume": cur.volume,
|
||||
"data": data},
|
||||
null,
|
||||
pretty ? " " : null);
|
||||
}
|
||||
|
||||
function _compactArray(ary) {
|
||||
var result = ary;
|
||||
if (window.Uint8Array) {
|
||||
result = new Uint8Array(ary);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function _json_decode(drive, data) {
|
||||
var _cur = _drives[drive - 1];
|
||||
var tracks = [];
|
||||
var json = JSON.parse(data);
|
||||
var v = json.volume;
|
||||
for (var t = 0; t < json.data.length; t++) {
|
||||
var track = [];
|
||||
for (var s = 0; s < json.data[t].length; s++) {
|
||||
var _s = 15 - s;
|
||||
var d = base64_decode(json.data[t][_s]);
|
||||
extend(track, _explodeSector(v, t, _DO[_s], d));
|
||||
}
|
||||
tracks[t] = _compactArray(track);
|
||||
}
|
||||
_cur.volume = v;
|
||||
_cur.format = json.type;
|
||||
_cur.tracks = tracks;
|
||||
}
|
||||
|
||||
function _readNext() {
|
||||
var result = 0;
|
||||
if (_skip || _writeMode) {
|
||||
var t = _cur.tracks[_cur.track >> 1];
|
||||
if (t && t.length) {
|
||||
if (_cur.head >= t.length)
|
||||
_cur.head = 0;
|
||||
|
||||
if (_writeMode) {
|
||||
t[_cur.head] = _latch;
|
||||
} else
|
||||
result = t[_cur.head];
|
||||
|
||||
++_cur.head;
|
||||
}
|
||||
}
|
||||
_skip = (++_skip % 4);
|
||||
return result;
|
||||
}
|
||||
|
||||
function _writeNext(val) {
|
||||
if (_writeMode) {
|
||||
_latch = val;
|
||||
if (!_cur.dirty) {
|
||||
_updateDirty(_drive, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _readSector(drive, track, sector) {
|
||||
var val, state = 0;
|
||||
var idx = 0;
|
||||
var retry = 0;
|
||||
var cur = _drives[drive - 1].tracks[track];
|
||||
|
||||
function _readNext() {
|
||||
var result = cur[idx++];
|
||||
if (idx >= cur.length) {
|
||||
idx = 0;
|
||||
retry++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function _skipBytes(count) {
|
||||
idx += count;
|
||||
if (idx >= cur.length) {
|
||||
idx %= cur.length;
|
||||
retry++;
|
||||
}
|
||||
}
|
||||
var t = 0, s = 0, jdx, kdx;
|
||||
var data = [];
|
||||
while (retry < 4) {
|
||||
switch (state) {
|
||||
case 0:
|
||||
val = _readNext();
|
||||
state = (val === 0xd5) ? 1 : 0;
|
||||
break;
|
||||
case 1:
|
||||
val = _readNext();
|
||||
state = (val === 0xaa) ? 2 : 0;
|
||||
break;
|
||||
case 2:
|
||||
val = _readNext();
|
||||
state = (val === 0x96) ? 3 : (val === 0xad ? 4 : 0);
|
||||
break;
|
||||
case 3: // Address
|
||||
_defourXfour(_readNext(), _readNext()); // Volume
|
||||
t = _defourXfour(_readNext(), _readNext());
|
||||
s = _defourXfour(_readNext(), _readNext());
|
||||
_skipBytes(5); // Skip checksum and footer
|
||||
state = 0;
|
||||
break;
|
||||
case 4: // Data
|
||||
if (s === sector && t === track) {
|
||||
var data2 = [];
|
||||
var last = 0;
|
||||
for (jdx = 0x55; jdx >= 0; jdx--) {
|
||||
val = _detrans[_readNext() - 0x80] ^ last;
|
||||
data2[jdx] = val;
|
||||
last = val;
|
||||
}
|
||||
for (jdx = 0; jdx < 0x100; jdx++) {
|
||||
val = _detrans[_readNext() - 0x80] ^ last;
|
||||
data[jdx] = val;
|
||||
last = val;
|
||||
}
|
||||
for (kdx = 0, jdx = 0x55; kdx < 0x100; kdx++) {
|
||||
data[kdx] <<= 1;
|
||||
if (data2[jdx] & 0x01) data[kdx] |= 0x01;
|
||||
data2[jdx] >>= 1;
|
||||
|
||||
data[kdx] <<= 1;
|
||||
if (data2[jdx] & 0x01) data[kdx] |= 0x01;
|
||||
data2[jdx] >>= 1;
|
||||
|
||||
if (--jdx < 0) jdx = 0x55;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
else
|
||||
_skipBytes(0x159); // Skip data, checksum and footer
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
var _phase_delta = [[ 0, 1, 2,-1],
|
||||
[-1, 0, 1, 2],
|
||||
[-2,-1, 0, 1],
|
||||
[ 1,-2,-1, 0]];
|
||||
|
||||
function setPhase(phase, on) {
|
||||
_debug("phase " + phase + (on ? " on" : " off"));
|
||||
if (on) {
|
||||
_cur.track += _phase_delta[_cur.phase][phase];
|
||||
_cur.phase = phase;
|
||||
|
||||
if (_cur.track > _cur.tracks.length * 2 - 1)
|
||||
_cur.track = _cur.tracks.length * 2 - 1;
|
||||
if (_cur.track < 0x0)
|
||||
_cur.track = 0x0;
|
||||
|
||||
/* _debug("Drive " + _drive +
|
||||
", track " + toHex(_cur.track >> 1) +
|
||||
" (" + toHex(_cur.track) + ")" +
|
||||
" [" + (_cur.track % 4) + "/" + phase + "]"); */
|
||||
}
|
||||
}
|
||||
|
||||
function _access(off, val) {
|
||||
var result = 0;
|
||||
switch (off) {
|
||||
case LOC.PHASE0OFF:
|
||||
setPhase(0, false);
|
||||
break;
|
||||
case LOC.PHASE0ON:
|
||||
setPhase(0, true);
|
||||
break;
|
||||
case LOC.PHASE1OFF:
|
||||
setPhase(1, false);
|
||||
break;
|
||||
case LOC.PHASE1ON:
|
||||
setPhase(1, true);
|
||||
break;
|
||||
case LOC.PHASE2OFF:
|
||||
setPhase(2, false);
|
||||
break;
|
||||
case LOC.PHASE2ON:
|
||||
setPhase(2, true);
|
||||
break;
|
||||
case LOC.PHASE3OFF:
|
||||
setPhase(3, false);
|
||||
break;
|
||||
case LOC.PHASE3ON:
|
||||
setPhase(3, true);
|
||||
break;
|
||||
|
||||
case LOC.DRIVEOFF:
|
||||
_debug("Drive Off");
|
||||
_on = false;
|
||||
if (callbacks.driveLight) { callbacks.driveLight(_drive, false); }
|
||||
break;
|
||||
case LOC.DRIVEON:
|
||||
_debug("Drive On");
|
||||
_on = true;
|
||||
if (callbacks.driveLight) { callbacks.driveLight(_drive, true); }
|
||||
break;
|
||||
|
||||
case LOC.DRIVE1:
|
||||
_debug("Disk 1");
|
||||
_drive = 1;
|
||||
_cur = _drives[_drive - 1];
|
||||
if (_on && callbacks.driveLight) {
|
||||
callbacks.driveLight(2, false);
|
||||
callbacks.driveLight(1, true);
|
||||
}
|
||||
break;
|
||||
case LOC.DRIVE2:
|
||||
_debug("Disk 2");
|
||||
_drive = 2;
|
||||
_cur = _drives[_drive - 1];
|
||||
if (_on && callbacks.driveLight) {
|
||||
callbacks.driveLight(1, false);
|
||||
callbacks.driveLight(2, true);
|
||||
}
|
||||
break;
|
||||
|
||||
case LOC.DRIVEREAD:
|
||||
result = _readNext();
|
||||
// _debug("read: " + toHex(result));
|
||||
break;
|
||||
|
||||
case LOC.DRIVEWRITE:
|
||||
// _debug("write: " + toHex(val));
|
||||
if (val !== undefined) {
|
||||
_writeNext(val);
|
||||
}
|
||||
break;
|
||||
case LOC.DRIVEREADMODE:
|
||||
_debug("Read Mode");
|
||||
_writeMode = false;
|
||||
result = (_readNext() & 0x7f) | (_cur.readOnly ? 0x80 : 0x00);
|
||||
break;
|
||||
case LOC.DRIVEWRITEMODE:
|
||||
_debug("Write Mode");
|
||||
_writeMode = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function _updateDirty(drive, dirty) {
|
||||
_drives[drive - 1].dirty = dirty;
|
||||
if (callbacks.dirty) { callbacks.dirty(_drive, dirty); }
|
||||
}
|
||||
|
||||
var diskII_16 = [
|
||||
0xa2,0x20,0xa0,0x00,0xa2,0x03,0x86,0x3c,
|
||||
0x8a,0x0a,0x24,0x3c,0xf0,0x10,0x05,0x3c,
|
||||
0x49,0xff,0x29,0x7e,0xb0,0x08,0x4a,0xd0,
|
||||
0xfb,0x98,0x9d,0x56,0x03,0xc8,0xe8,0x10,
|
||||
0xe5,0x20,0x58,0xff,0xba,0xbd,0x00,0x01,
|
||||
0x0a,0x0a,0x0a,0x0a,0x85,0x2b,0xaa,0xbd,
|
||||
0x8e,0xc0,0xbd,0x8c,0xc0,0xbd,0x8a,0xc0,
|
||||
0xbd,0x89,0xc0,0xa0,0x50,0xbd,0x80,0xc0,
|
||||
0x98,0x29,0x03,0x0a,0x05,0x2b,0xaa,0xbd,
|
||||
0x81,0xc0,0xa9,0x56,0x20,0xa8,0xfc,0x88,
|
||||
0x10,0xeb,0x85,0x26,0x85,0x3d,0x85,0x41,
|
||||
0xa9,0x08,0x85,0x27,0x18,0x08,0xbd,0x8c,
|
||||
0xc0,0x10,0xfb,0x49,0xd5,0xd0,0xf7,0xbd,
|
||||
0x8c,0xc0,0x10,0xfb,0xc9,0xaa,0xd0,0xf3,
|
||||
0xea,0xbd,0x8c,0xc0,0x10,0xfb,0xc9,0x96,
|
||||
0xf0,0x09,0x28,0x90,0xdf,0x49,0xad,0xf0,
|
||||
0x25,0xd0,0xd9,0xa0,0x03,0x85,0x40,0xbd,
|
||||
0x8c,0xc0,0x10,0xfb,0x2a,0x85,0x3c,0xbd,
|
||||
0x8c,0xc0,0x10,0xfb,0x25,0x3c,0x88,0xd0,
|
||||
0xec,0x28,0xc5,0x3d,0xd0,0xbe,0xa5,0x40,
|
||||
0xc5,0x41,0xd0,0xb8,0xb0,0xb7,0xa0,0x56,
|
||||
0x84,0x3c,0xbc,0x8c,0xc0,0x10,0xfb,0x59,
|
||||
0xd6,0x02,0xa4,0x3c,0x88,0x99,0x00,0x03,
|
||||
0xd0,0xee,0x84,0x3c,0xbc,0x8c,0xc0,0x10,
|
||||
0xfb,0x59,0xd6,0x02,0xa4,0x3c,0x91,0x26,
|
||||
0xc8,0xd0,0xef,0xbc,0x8c,0xc0,0x10,0xfb,
|
||||
0x59,0xd6,0x02,0xd0,0x87,0xa0,0x00,0xa2,
|
||||
0x56,0xca,0x30,0xfb,0xb1,0x26,0x5e,0x00,
|
||||
0x03,0x2a,0x5e,0x00,0x03,0x2a,0x91,0x26,
|
||||
0xc8,0xd0,0xee,0xe6,0x27,0xe6,0x3d,0xa5,
|
||||
0x3d,0xcd,0x00,0x08,0xa6,0x2b,0x90,0xdb,
|
||||
0x4c,0x01,0x08,0x00,0x00,0x00,0x00,0x00 ];
|
||||
/*
|
||||
var diskII_13 = [
|
||||
0xa2,0x20,0xa0,0x00,0xa9,0x03,0x85,0x3c,
|
||||
0x18,0x88,0x98,0x24,0x3c,0xf0,0xf5,0x26,
|
||||
0x3c,0x90,0xf8,0xc0,0xd5,0xf0,0xed,0xca,
|
||||
0x8a,0x99,0x00,0x08,0xd0,0xe6,0x20,0x58,
|
||||
0xff,0xba,0xbd,0x00,0x01,0x48,0x0a,0x0a,
|
||||
0x0a,0x0a,0x85,0x2b,0xaa,0xa9,0xd0,0x48,
|
||||
0xbd,0x8e,0xc0,0xbd,0x8c,0xc0,0xbd,0x8a,
|
||||
0xc0,0xbd,0x89,0xc0,0xa0,0x50,0xbd,0x80,
|
||||
0xc0,0x98,0x29,0x03,0x0a,0x05,0x2b,0xaa,
|
||||
0xbd,0x81,0xc0,0xa9,0x56,0x20,0xa8,0xfc,
|
||||
0x88,0x10,0xeb,0xa9,0x03,0x85,0x27,0xa9,
|
||||
0x00,0x85,0x26,0x85,0x3d,0x18,0x08,0xbd,
|
||||
0x8c,0xc0,0x10,0xfb,0x49,0xd5,0xd0,0xf7,
|
||||
0xbd,0x8c,0xc0,0x10,0xfb,0xc9,0xaa,0xd0,
|
||||
0xf3,0xea,0xbd,0x8c,0xc0,0x10,0xfb,0xc9,
|
||||
0xb5,0xf0,0x09,0x28,0x90,0xdf,0x49,0xad,
|
||||
0xf0,0x1f,0xd0,0xd9,0xa0,0x03,0x84,0x2a,
|
||||
0xbd,0x8c,0xc0,0x10,0xfb,0x2a,0x85,0x3c,
|
||||
0xbd,0x8c,0xc0,0x10,0xfb,0x25,0x3c,0x88,
|
||||
0xd0,0xee,0x28,0xc5,0x3d,0xd0,0xbe,0xb0,
|
||||
0xbd,0xa0,0x9a,0x84,0x3c,0xbc,0x8c,0xc0,
|
||||
0x10,0xfb,0x59,0x00,0x08,0xa4,0x3c,0x88,
|
||||
0x99,0x00,0x08,0xd0,0xee,0x84,0x3c,0xbc,
|
||||
0x8c,0xc0,0x10,0xfb,0x59,0x00,0x08,0xa4,
|
||||
0x3c,0x91,0x26,0xc8,0xd0,0xef,0xbc,0x8c,
|
||||
0xc0,0x10,0xfb,0x59,0x00,0x08,0xd0,0x8d,
|
||||
0x60,0xa8,0xa2,0x00,0xb9,0x00,0x08,0x4a,
|
||||
0x3e,0xcc,0x03,0x4a,0x3e,0x99,0x03,0x85,
|
||||
0x3c,0xb1,0x26,0x0a,0x0a,0x0a,0x05,0x3c,
|
||||
0x91,0x26,0xc8,0xe8,0xe0,0x33,0xd0,0xe4,
|
||||
0xc6,0x2a,0xd0,0xde,0xcc,0x00,0x03,0xd0,
|
||||
0x03,0x4c,0x01,0x03,0x4c,0x2d,0xff,0xff
|
||||
];
|
||||
*/
|
||||
var diskII = diskII_16;
|
||||
|
||||
_init();
|
||||
|
||||
return {
|
||||
start: function disk2_start() {
|
||||
io.registerSwitches(this, LOC);
|
||||
return 0xc0 + slot;
|
||||
},
|
||||
end: function disk2_end() {
|
||||
return 0xc0 + slot;
|
||||
},
|
||||
ioSwitch: function disk2_ioSwitch(off, val) {
|
||||
return _access(off, val);
|
||||
},
|
||||
read: function disk2_read(page, off) {
|
||||
return diskII[off];
|
||||
},
|
||||
reset: function disk2_reset() {
|
||||
if (_on) {
|
||||
_writeMode = false;
|
||||
_on = false;
|
||||
callbacks.driveLight(_drive, false);
|
||||
}
|
||||
},
|
||||
getState: function disk2_getState() {
|
||||
function getDriveState(drive) {
|
||||
var result = {
|
||||
format: drive.format,
|
||||
volume: drive.volume,
|
||||
tracks: [],
|
||||
track: drive.track,
|
||||
head: drive.head,
|
||||
phase: drive.phase,
|
||||
readOnly: drive.readOnly,
|
||||
dirty: drive.dirty
|
||||
};
|
||||
for (var idx = 0; idx < drive.tracks.length; idx++) {
|
||||
result.tracks.push(base64_encode(drive.tracks[idx]));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
var result = {
|
||||
drives: [],
|
||||
skip: _skip,
|
||||
latch: _latch,
|
||||
writeMode: _writeMode,
|
||||
on: _on,
|
||||
drive: _drive
|
||||
};
|
||||
_drives.forEach(function (drive, idx) {
|
||||
result.drives[idx] = getDriveState(drive);
|
||||
});
|
||||
return result;
|
||||
},
|
||||
setState: function disk2_setState(state) {
|
||||
function setDriveState(state) {
|
||||
var result = {
|
||||
format: state.format,
|
||||
volume: state.volume,
|
||||
tracks: [],
|
||||
track: state.track,
|
||||
head: state.head,
|
||||
phase: state.phase,
|
||||
readOnly: state.readOnly,
|
||||
dirty: state.dirty
|
||||
};
|
||||
for (var idx = 0; idx < state.tracks.length; idx++) {
|
||||
result.tracks.push(base64_decode(state.tracks[idx]));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
state.drives.forEach(function(drive, idx) {
|
||||
_drives[idx] = setDriveState(state);
|
||||
});
|
||||
_skip = state.skip;
|
||||
_latch = state.latch;
|
||||
_writeMode = state.writeMode;
|
||||
_on = state.on;
|
||||
_drive = state.drive;
|
||||
_cur = _drives[_drive - 1];
|
||||
},
|
||||
rwts: function disk2_rwts(disk, track, sector) {
|
||||
return _readSector(disk, track, sector);
|
||||
},
|
||||
setDisk: function disk2_setDisk(drive, disk) {
|
||||
var fmt = disk.type, readOnly = disk.readOnly;
|
||||
|
||||
var data, t, s;
|
||||
if (disk.encoding == "base64") {
|
||||
data = [];
|
||||
for (t = 0; t < disk.data.length; t++) {
|
||||
if (fmt == "nib") {
|
||||
data[t] = base64_decode(disk.data[t]);
|
||||
} else {
|
||||
data[t] = [];
|
||||
for (s = 0; s < disk.data[t].length; s++) {
|
||||
data[t][s] = base64_decode(disk.data[t][s]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
data = disk.data;
|
||||
}
|
||||
var cur = _drives[drive - 1];
|
||||
|
||||
// var v = (fmt === "dsk" ? data[0x11][0x00][0x06] : 0xfe);
|
||||
// if (v == 0x00) {
|
||||
var v = disk.volume || 0xfe;
|
||||
// }
|
||||
|
||||
cur.volume = v;
|
||||
cur.readOnly = readOnly;
|
||||
cur.format = fmt;
|
||||
var tracks = [];
|
||||
|
||||
for (t = 0; t < data.length; t++) {
|
||||
var track = [];
|
||||
if (fmt === "nib") {
|
||||
track = data[t];
|
||||
} else {
|
||||
for (s = 0; s < data[t].length; s++) {
|
||||
var _s = 15 - s;
|
||||
if (fmt === "po") { // ProDOS Order
|
||||
extend(track,
|
||||
_explodeSector(v, t, _PO[s], data[t][s]));
|
||||
} else if (fmt === "dsk") { // DOS Order
|
||||
extend(track,
|
||||
_explodeSector(v, t, _DO[_s], data[t][_s]));
|
||||
} else { // flat
|
||||
extend(track,
|
||||
_explodeSector(v, t, s, data[t][s]));
|
||||
}
|
||||
}
|
||||
}
|
||||
tracks[t] = _compactArray(track);
|
||||
}
|
||||
cur.tracks = tracks;
|
||||
_updateDirty(_drive, false);
|
||||
},
|
||||
getJSON: function disk2_getJSON(drive, pretty) {
|
||||
return _json_encode(drive, pretty);
|
||||
},
|
||||
setJSON: function disk2_setJSON(drive, data) {
|
||||
_json_decode(drive, data);
|
||||
return true;
|
||||
},
|
||||
setBinary: function disk2_setBinary(drive, name, fmt, data) {
|
||||
var _cur = _drives[drive - 1];
|
||||
var tracks = [];
|
||||
var v = 254;
|
||||
if (fmt === "do") {
|
||||
fmt = "dsk";
|
||||
}
|
||||
for (var t = 0; t < 35; t++) {
|
||||
var track, off, d;
|
||||
if (fmt === "nib") {
|
||||
off = t * 0x1a00;
|
||||
track = new Uint8Array(data.slice(off, off + 0x1a00));
|
||||
} else {
|
||||
track = [];
|
||||
for (var s = 0; s < 16; s++) {
|
||||
var _s = 15 - s;
|
||||
if (fmt == "po") { // ProDOS Order
|
||||
off = (16 * t + s) * 256;
|
||||
d = new Uint8Array(data.slice(off, off + 256));
|
||||
extend(track,
|
||||
_explodeSector(v, t, _PO[s], d));
|
||||
} else if (fmt == "dsk") { // DOS Order
|
||||
off = (16 * t + _s) * 256;
|
||||
d = new Uint8Array(data.slice(off, off + 256));
|
||||
extend(track,
|
||||
_explodeSector(v, t, _DO[_s], d));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
tracks[t] = track;
|
||||
}
|
||||
_cur.volume = v;
|
||||
_cur.format = fmt;
|
||||
_cur.tracks = tracks;
|
||||
|
||||
_updateDirty(drive, true);
|
||||
return true;
|
||||
},
|
||||
|
||||
getBinary: function disk2_getBinary(drive) {
|
||||
var cur = _drives[drive - 1];
|
||||
var len = (16 * cur.tracks.length * 256);
|
||||
var data = new Uint8Array(len);
|
||||
var idx = 0;
|
||||
|
||||
for (var t = 0; t < cur.tracks.length; t++) {
|
||||
if (cur.format === "nib") {
|
||||
data[idx++] = cur.tracks[t];
|
||||
} else {
|
||||
for (var s = 0; s < 0x10; s++) {
|
||||
var sector = _readSector(drive, t, _DO[s]);
|
||||
for (var b = 0; b < 256; b++) {
|
||||
data[idx++] = sector[b];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
},
|
||||
|
||||
getBase64: function disk2_getBase64(drive) {
|
||||
var cur = _drives[drive - 1];
|
||||
var data = [];
|
||||
for (var t = 0; t < cur.tracks.length; t++) {
|
||||
data[t] = [];
|
||||
if (cur.format === "nib") {
|
||||
data += base64_encode(cur.tracks[t]);
|
||||
} else {
|
||||
for (var s = 0; s < 0x10; s++) {
|
||||
data += base64_encode(_readSector(drive, t, _DO[s]));
|
||||
}
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
};
|
||||
}
|
1569
js/fpbasic.js
Normal file
1569
js/fpbasic.js
Normal file
File diff suppressed because it is too large
Load Diff
1558
js/intbasic.js
Normal file
1558
js/intbasic.js
Normal file
File diff suppressed because it is too large
Load Diff
222
js/langcard.js
Normal file
222
js/langcard.js
Normal file
@ -0,0 +1,222 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*globals RAM */
|
||||
/*exported LanguageCard */
|
||||
|
||||
function LanguageCard(io, rom) {
|
||||
var _io = io;
|
||||
var _rom = rom;
|
||||
var _bank1 = null;
|
||||
var _bank2 = null;
|
||||
var _ram = null;
|
||||
|
||||
var _readbsr = false;
|
||||
var _writebsr = false;
|
||||
var _bsr2 = false;
|
||||
|
||||
var _last = 0x00;
|
||||
|
||||
var _read1 = null;
|
||||
var _read2 = null;
|
||||
|
||||
var _write1 = null;
|
||||
var _write2 = null;
|
||||
|
||||
function _init() {
|
||||
_bank1 = new RAM(0xd0, 0xdf);
|
||||
_bank2 = new RAM(0xd0, 0xdf);
|
||||
_ram = new RAM(0xe0, 0xff);
|
||||
|
||||
_write1 = _rom;
|
||||
_write2 = _rom;
|
||||
|
||||
_read1 = _rom;
|
||||
_read2 = _rom;
|
||||
}
|
||||
|
||||
function _debug() {
|
||||
// debug.apply(arguments);
|
||||
}
|
||||
|
||||
_init();
|
||||
|
||||
var LOC = {
|
||||
// Status
|
||||
BSRBANK2: 0x11,
|
||||
BSRREADRAM: 0x12,
|
||||
|
||||
// Bank 2
|
||||
READBSR2: 0x80,
|
||||
WRITEBSR2: 0x81,
|
||||
OFFBSR2: 0x82,
|
||||
READWRBSR2: 0x83,
|
||||
|
||||
// Shadow Bank 2
|
||||
_READBSR2: 0x84,
|
||||
_WRITEBSR2: 0x85,
|
||||
_OFFBSR2: 0x86,
|
||||
_READWRBSR2: 0x87,
|
||||
|
||||
// Bank 1
|
||||
READBSR1: 0x88,
|
||||
WRITEBSR1: 0x89,
|
||||
OFFBSR1: 0x8a,
|
||||
READWRBSR1: 0x8b,
|
||||
|
||||
// Shadow Bank 1
|
||||
_READBSR1: 0x8c,
|
||||
_WRITEBSR1: 0x8d,
|
||||
_OFFBSR1: 0x8e,
|
||||
_READWRBSR1: 0x8f
|
||||
};
|
||||
|
||||
function _access(off) {
|
||||
var result = 0;
|
||||
switch (off) {
|
||||
case LOC.READBSR2:
|
||||
case LOC._READBSR2:
|
||||
_readbsr = true;
|
||||
_writebsr = false;
|
||||
_bsr2 = true;
|
||||
_debug("Bank 2 Read");
|
||||
break;
|
||||
case LOC.WRITEBSR2:
|
||||
case LOC._WRITEBSR2:
|
||||
_readbsr = false;
|
||||
_writebsr = ((_last & 0xF3) == (off & 0xF3));
|
||||
_bsr2 = true;
|
||||
_debug("Bank 2 Write");
|
||||
break;
|
||||
case LOC.OFFBSR2:
|
||||
case LOC._OFFBSR2:
|
||||
_readbsr = false;
|
||||
_writebsr = false;
|
||||
_bsr2 = true;
|
||||
_debug("Bank 2 Off");
|
||||
break;
|
||||
case LOC.READWRBSR2:
|
||||
case LOC._READWRBSR2:
|
||||
_readbsr = true;
|
||||
_writebsr = ((_last & 0xF3) == (off & 0xF3));
|
||||
_bsr2 = true;
|
||||
_debug("Bank 2 Read/Write");
|
||||
break;
|
||||
|
||||
case LOC.READBSR1:
|
||||
case LOC._READBSR1:
|
||||
_readbsr = true;
|
||||
_writebsr = false;
|
||||
_bsr2 = false;
|
||||
_debug("Bank 1 Read");
|
||||
break;
|
||||
case LOC.WRITEBSR1:
|
||||
case LOC._WRITEBSR1:
|
||||
_readbsr = false;
|
||||
_writebsr = ((_last & 0xF3) == (off & 0xF3));
|
||||
_bsr2 = false;
|
||||
_debug("Bank 1 Write");
|
||||
break;
|
||||
case LOC.OFFBSR1:
|
||||
case LOC._OFFBSR1:
|
||||
_readbsr = false;
|
||||
_writebsr = false;
|
||||
_bsr2 = false;
|
||||
_debug("Bank 1 Off");
|
||||
break;
|
||||
case LOC.READWRBSR1:
|
||||
case LOC._READWRBSR1:
|
||||
_readbsr = true;
|
||||
_writebsr = ((_last & 0xF3) == (off & 0xF3));
|
||||
_bsr2 = false;
|
||||
_debug("Bank 1 Read/Write");
|
||||
break;
|
||||
|
||||
case LOC.BSRBANK2:
|
||||
result = _bsr2 ? 0x80 : 0x00;
|
||||
_debug("Bank 2 Read " + _bsr2);
|
||||
break;
|
||||
case LOC.BSRREADRAM:
|
||||
result = _readbsr ? 0x80 : 0x00;
|
||||
_debug("Bank SW RAM Read " + _readbsr);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
_last = off;
|
||||
|
||||
if (_readbsr) {
|
||||
_read1 = _bsr2 ? _bank2 : _bank1;
|
||||
_read2 = _ram;
|
||||
} else {
|
||||
_read1 = _rom;
|
||||
_read2 = _rom;
|
||||
}
|
||||
|
||||
if (_writebsr) {
|
||||
_write1 = _bsr2 ? _bank2 : _bank1;
|
||||
_write2 = _ram;
|
||||
} else {
|
||||
_write1 = rom;
|
||||
_write2 = rom;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
return {
|
||||
start: function() {
|
||||
_io.registerSwitches(this, LOC);
|
||||
return 0xd0;
|
||||
},
|
||||
end: function() {
|
||||
return 0xff;
|
||||
},
|
||||
ioSwitch: function(off, val) {
|
||||
return _access(off, val);
|
||||
},
|
||||
read: function(page, off, dbg) {
|
||||
var result = 0;
|
||||
if (page < 0xe0) {
|
||||
result = _read1.read(page, off, dbg);
|
||||
} else {
|
||||
result = _read2.read(page, off, dbg);
|
||||
}
|
||||
return result;
|
||||
},
|
||||
write: function(page, off, val) {
|
||||
if (page < 0xe0) {
|
||||
_write1.write(page, off, val);
|
||||
} else {
|
||||
_write2.write(page, off, val);
|
||||
}
|
||||
},
|
||||
getState: function() {
|
||||
return {
|
||||
readbsr: _readbsr,
|
||||
writebsr: _writebsr,
|
||||
bsr2: _bsr2,
|
||||
last: _last,
|
||||
bank1: _bank1.getState(),
|
||||
bank2: _bank2.getState()
|
||||
};
|
||||
},
|
||||
setState: function(state) {
|
||||
_readbsr = state.readbsr;
|
||||
_writebsr = state.writebsr;
|
||||
_bsr2 = state.bsr2;
|
||||
_bank1.setState(state.bank1);
|
||||
_bank2.setState(state.bank2);
|
||||
_access(-1);
|
||||
_last = state.last;
|
||||
}
|
||||
};
|
||||
}
|
680
js/mmu.js
Normal file
680
js/mmu.js
Normal file
@ -0,0 +1,680 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*globals RAM: false, toHex: false, hiresMode: false, debug: false */
|
||||
/*exported MMU */
|
||||
function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
||||
{
|
||||
var idx;
|
||||
|
||||
var _auxRom = 0x00;
|
||||
|
||||
var _readPages = new Array(0x100);
|
||||
var _writePages = new Array(0x100);
|
||||
var _pages = new Array(0x100);
|
||||
|
||||
// Language Card RAM Softswitches
|
||||
var _bank1;
|
||||
var _readbsr;
|
||||
var _writebsr;
|
||||
|
||||
// Auxilliary ROM
|
||||
var _intcxrom;
|
||||
var _slot3rom;
|
||||
|
||||
// Auxilliary RAM
|
||||
var _auxRamRead;
|
||||
var _auxRamWrite;
|
||||
var _altzp;
|
||||
|
||||
// Video
|
||||
var _80store = false;
|
||||
var _page2;
|
||||
|
||||
var _vbEnd = 0;
|
||||
|
||||
function _initSwitches() {
|
||||
_bank1 = true;
|
||||
_readbsr = false;
|
||||
_writebsr = false;
|
||||
|
||||
_auxRamRead = false;
|
||||
_auxRamWrite = false;
|
||||
_altzp = false;
|
||||
|
||||
_intcxrom = false;
|
||||
_slot3rom = false;
|
||||
|
||||
_80store = false;
|
||||
_page2 = false;
|
||||
}
|
||||
|
||||
function _debug() {
|
||||
// debug.apply(arguments);
|
||||
}
|
||||
|
||||
var _last = 0x00;
|
||||
|
||||
function EmptySlots() {
|
||||
return {
|
||||
start: function slot_start() {
|
||||
return 0xC1;
|
||||
},
|
||||
end: function slot_end() {
|
||||
return 0xCF;
|
||||
},
|
||||
read: function slot_read() {
|
||||
return 0x00;
|
||||
},
|
||||
write: function slot_write() {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var emptyslots = new EmptySlots();
|
||||
|
||||
var mem00_01 = [new RAM(0x0, 0x1), new RAM(0x0, 0x1)];
|
||||
var mem02_03 = [new RAM(0x2, 0x3), new RAM(0x2, 0x3)];
|
||||
var mem04_07 = [lores1.bank0(), lores1.bank1()];
|
||||
var mem08_0B = [lores2.bank0(), lores2.bank1()];
|
||||
var mem0C_1F = [new RAM(0xC, 0x1F), new RAM(0xC, 0x1F)];
|
||||
var mem20_3F = [hires1.bank0(), hires1.bank1()];
|
||||
var mem40_5F = [hires2.bank0(), hires2.bank1()];
|
||||
var mem60_BF = [new RAM(0x60,0xBF), new RAM(0x60,0xBF)];
|
||||
var memC0_C0 = [io];
|
||||
// var memC1_CF = [emptyslots, rom];
|
||||
var memD0_DF = [rom,
|
||||
new RAM(0xD0,0xDF), new RAM(0xD0,0xDF),
|
||||
new RAM(0xD0,0xDF), new RAM(0xD0,0xDF)];
|
||||
var memE0_FF = [rom, new RAM(0xE0,0xFF), new RAM(0xE0,0xFF)];
|
||||
|
||||
/*
|
||||
* Initialize read/write banks
|
||||
*/
|
||||
|
||||
// Zero Page/Stack
|
||||
for (idx = 0x0; idx < 0x2; idx++) {
|
||||
_pages[idx] = mem00_01;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// 0x300-0x400
|
||||
for (idx = 0x2; idx < 0x4; idx++) {
|
||||
_pages[idx] = mem02_03;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// Text Page 1
|
||||
for (idx = 0x4; idx < 0x8; idx++) {
|
||||
_pages[idx] = mem04_07;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// Text Page 2
|
||||
for (idx = 0x8; idx < 0xC; idx++) {
|
||||
_pages[idx] = mem08_0B;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// 0xC00-0x2000
|
||||
for (idx = 0xC; idx < 0x20; idx++) {
|
||||
_pages[idx] = mem0C_1F;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// Hires Page 1
|
||||
for (idx = 0x20; idx < 0x40; idx++) {
|
||||
_pages[idx] = mem20_3F;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// Hires Page 2
|
||||
for (idx = 0x40; idx < 0x60; idx++) {
|
||||
_pages[idx] = mem40_5F;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// 0x6000-0xc000
|
||||
for (idx = 0x60; idx < 0xc0; idx++) {
|
||||
_pages[idx] = mem60_BF;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// I/O Switches
|
||||
idx = 0xc0;
|
||||
_pages[idx] = memC0_C0;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
// Slots
|
||||
for (idx = 0xc1; idx < 0xd0; idx++) {
|
||||
_pages[idx] = [emptyslots, rom]; // memC1_CF;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// Basic ROM
|
||||
for (idx = 0xd0; idx < 0xe0; idx++) {
|
||||
_pages[idx] = memD0_DF;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
// Monitor ROM
|
||||
for (idx = 0xe0; idx < 0x100; idx++) {
|
||||
_pages[idx] = memE0_FF;
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
|
||||
/*
|
||||
* I/O Switch locations
|
||||
*/
|
||||
|
||||
var LOC = {
|
||||
// 80 Column
|
||||
_80STOREOFF: 0x00,
|
||||
_80STOREON: 0x01,
|
||||
|
||||
// Aux RAM
|
||||
RAMRDOFF: 0x02,
|
||||
RAMRDON: 0x03,
|
||||
|
||||
RAMWROFF: 0x04,
|
||||
RAMWRON: 0x05,
|
||||
|
||||
// Bank switched ROM
|
||||
INTCXROMOFF: 0x06,
|
||||
INTCXROMON: 0x07,
|
||||
ALTZPOFF: 0x08,
|
||||
ALTZPON: 0x09,
|
||||
SLOTC3ROMOFF: 0x0A,
|
||||
SLOTC3ROMON: 0x0B,
|
||||
|
||||
// Status
|
||||
BSRBANK2: 0x11,
|
||||
BSRREADRAM: 0x12,
|
||||
RAMRD: 0x13,
|
||||
RAMWRT: 0x14,
|
||||
INTCXROM: 0x15,
|
||||
ALTZP: 0x16,
|
||||
SLOTC3ROM: 0x17,
|
||||
_80STORE: 0x18,
|
||||
VERTBLANK: 0x19,
|
||||
|
||||
PAGE1: 0x54, // select text/graphics page1 main/aux
|
||||
PAGE2: 0x55, // select text/graphics page2 main/aux
|
||||
|
||||
// Bank 2
|
||||
READBSR2: 0x80,
|
||||
WRITEBSR2: 0x81,
|
||||
OFFBSR2: 0x82,
|
||||
READWRBSR2: 0x83,
|
||||
|
||||
// Shadow Bank 2
|
||||
_READBSR2: 0x84,
|
||||
_WRITEBSR2: 0x85,
|
||||
_OFFBSR2: 0x86,
|
||||
_READWRBSR2: 0x87,
|
||||
|
||||
// Bank 1
|
||||
READBSR1: 0x88,
|
||||
WRITEBSR1: 0x89,
|
||||
OFFBSR1: 0x8a,
|
||||
READWRBSR1: 0x8b,
|
||||
|
||||
// Shadow Bank 1
|
||||
_READBSR1: 0x8c,
|
||||
_WRITEBSR1: 0x8d,
|
||||
_OFFBSR1: 0x8e,
|
||||
_READWRBSR1: 0x8f
|
||||
};
|
||||
|
||||
function _updateBanks() {
|
||||
if (_auxRamRead) {
|
||||
for (idx = 0x02; idx < 0xC0; idx++) {
|
||||
_readPages[idx] = _pages[idx][1];
|
||||
}
|
||||
} else {
|
||||
for (idx = 0x02; idx < 0xC0; idx++) {
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
}
|
||||
}
|
||||
|
||||
if (_auxRamWrite) {
|
||||
for (idx = 0x02; idx < 0xC0; idx++) {
|
||||
_writePages[idx] = _pages[idx][1];
|
||||
}
|
||||
} else {
|
||||
for (idx = 0x02; idx < 0xC0; idx++) {
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
}
|
||||
|
||||
if (_80store) {
|
||||
if (_page2) {
|
||||
for (idx = 0x4; idx < 0x8; idx++) {
|
||||
_readPages[idx] = _pages[idx][1];
|
||||
_writePages[idx] = _pages[idx][1];
|
||||
}
|
||||
if (hiresMode) {
|
||||
for (idx = 0x20; idx < 0x40; idx++) {
|
||||
_readPages[idx] = _pages[idx][1];
|
||||
_writePages[idx] = _pages[idx][1];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (idx = 0x4; idx < 0x8; idx++) {
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
if (hiresMode) {
|
||||
for (idx = 0x20; idx < 0x40; idx++) {
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_intcxrom) {
|
||||
for (idx = 0xc1; idx < 0xd0; idx++) {
|
||||
_readPages[idx] = _pages[idx][1];
|
||||
}
|
||||
} else {
|
||||
for (idx = 0xc1; idx < 0xd0; idx++) {
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
}
|
||||
if (_slot3rom) {
|
||||
_readPages[0xc3] = _pages[0xc3][1];
|
||||
} else {
|
||||
_readPages[0xc3] = _pages[0xc3][0];
|
||||
}
|
||||
}
|
||||
|
||||
if (_altzp) {
|
||||
for (idx = 0x0; idx < 0x2; idx++) {
|
||||
_readPages[idx] = _pages[idx][1];
|
||||
_writePages[idx] = _pages[idx][1];
|
||||
}
|
||||
} else {
|
||||
for (idx = 0x0; idx < 0x2; idx++) {
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
}
|
||||
|
||||
if (_readbsr) {
|
||||
if (_bank1) {
|
||||
for (idx = 0xd0; idx < 0xe0; idx++) {
|
||||
_readPages[idx] = _pages[idx][_altzp ? 2 : 1];
|
||||
}
|
||||
} else {
|
||||
for (idx = 0xd0; idx < 0xe0; idx++) {
|
||||
_readPages[idx] = _pages[idx][_altzp ? 4 : 3];
|
||||
}
|
||||
}
|
||||
for (idx = 0xe0; idx < 0x100; idx++) {
|
||||
_readPages[idx] = _pages[idx][_altzp ? 2 : 1];
|
||||
}
|
||||
} else {
|
||||
for (idx = 0xd0; idx < 0x100; idx++) {
|
||||
_readPages[idx] = _pages[idx][0];
|
||||
}
|
||||
}
|
||||
|
||||
if (_writebsr) {
|
||||
if (_bank1) {
|
||||
for (idx = 0xd0; idx < 0xe0; idx++) {
|
||||
_writePages[idx] = _pages[idx][_altzp ? 2 : 1];
|
||||
}
|
||||
} else {
|
||||
for (idx = 0xd0; idx < 0xe0; idx++) {
|
||||
_writePages[idx] = _pages[idx][_altzp ? 4 : 3];
|
||||
}
|
||||
}
|
||||
for (idx = 0xe0; idx < 0x100; idx++) {
|
||||
_writePages[idx] = _pages[idx][_altzp ? 2 : 1];
|
||||
}
|
||||
} else {
|
||||
for (idx = 0xd0; idx < 0x100; idx++) {
|
||||
_writePages[idx] = _pages[idx][0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The Big Switch
|
||||
*/
|
||||
|
||||
function _access(off, val) {
|
||||
var result;
|
||||
switch (off) {
|
||||
|
||||
// Apple //e memory management
|
||||
|
||||
case LOC._80STOREOFF:
|
||||
if (typeof val != 'undefined') {
|
||||
_80store = false;
|
||||
// _debug("80 Store Off");
|
||||
} else {
|
||||
// Chain to io for keyboard
|
||||
result = io.ioSwitch(off, val);
|
||||
}
|
||||
break;
|
||||
case LOC._80STOREON:
|
||||
if (typeof val != 'undefined') {
|
||||
_80store = true;
|
||||
// _debug("80 Store On");
|
||||
} else
|
||||
result = 0;
|
||||
break;
|
||||
case LOC.RAMRDOFF:
|
||||
if (typeof val != 'undefined') {
|
||||
_auxRamRead = false;
|
||||
_debug("Aux RAM Read Off");
|
||||
} else
|
||||
result = 0;
|
||||
break;
|
||||
case LOC.RAMRDON:
|
||||
if (typeof val != 'undefined') {
|
||||
_auxRamRead = true;
|
||||
_debug("Aux RAM Read On");
|
||||
} else
|
||||
result = 0;
|
||||
break;
|
||||
case LOC.RAMWROFF:
|
||||
if (typeof val != 'undefined') {
|
||||
_auxRamWrite = false;
|
||||
_debug("Aux RAM Write Off");
|
||||
} else
|
||||
result = 0;
|
||||
break;
|
||||
case LOC.RAMWRON:
|
||||
if (typeof val != 'undefined') {
|
||||
_auxRamWrite = true;
|
||||
_debug("Aux RAM Write On");
|
||||
} else
|
||||
result = 0;
|
||||
break;
|
||||
|
||||
case LOC.INTCXROMOFF:
|
||||
if (typeof val != 'undefined') {
|
||||
_intcxrom = false;
|
||||
// _debug("Int CX ROM Off");
|
||||
}
|
||||
break;
|
||||
case LOC.INTCXROMON:
|
||||
if (typeof val != 'undefined') {
|
||||
_intcxrom = true;
|
||||
// _debug("Int CX ROM On");
|
||||
}
|
||||
break;
|
||||
case LOC.ALTZPOFF: // 0x08
|
||||
if (typeof val != 'undefined') {
|
||||
_altzp = false;
|
||||
_debug("Alt ZP Off");
|
||||
}
|
||||
break;
|
||||
case LOC.ALTZPON: // 0x09
|
||||
if (typeof val != 'undefined') {
|
||||
_altzp = true;
|
||||
_debug("Alt ZP On");
|
||||
}
|
||||
break;
|
||||
case LOC.SLOTC3ROMOFF:
|
||||
if (typeof val != 'undefined') {
|
||||
_slot3rom = false;
|
||||
_debug("Slot 3 ROM Off");
|
||||
}
|
||||
break;
|
||||
case LOC.SLOTC3ROMON:
|
||||
if (typeof val != 'undefined') {
|
||||
_slot3rom = true;
|
||||
_debug("Slot 3 ROM On");
|
||||
}
|
||||
break;
|
||||
|
||||
// Graphics Switches
|
||||
|
||||
case LOC.PAGE1:
|
||||
_page2 = false;
|
||||
if (!_80store) result = io.ioSwitch(off, val);
|
||||
break;
|
||||
case LOC.PAGE2:
|
||||
_page2 = true;
|
||||
if (!_80store) result = io.ioSwitch(off, val);
|
||||
break;
|
||||
|
||||
// Language Card Switches
|
||||
|
||||
case LOC.READBSR2: // 0xC080
|
||||
case LOC._READBSR2:
|
||||
_bank1 = false;
|
||||
_readbsr = true;
|
||||
_writebsr = false;
|
||||
_debug("Bank 2 Read");
|
||||
break;
|
||||
case LOC.WRITEBSR2: // 0xC081
|
||||
case LOC._WRITEBSR2:
|
||||
_bank1 = false;
|
||||
_readbsr = false;
|
||||
_writebsr = _writebsr || ((_last & 0xF3) == (off & 0xF3));
|
||||
_debug("Bank 2 Write");
|
||||
break;
|
||||
case LOC.OFFBSR2: // 0xC082
|
||||
case LOC._OFFBSR2:
|
||||
_bank1 = false;
|
||||
_readbsr = false;
|
||||
_writebsr = false;
|
||||
_debug("Bank 2 Off");
|
||||
break;
|
||||
case LOC.READWRBSR2: // 0xC083
|
||||
case LOC._READWRBSR2:
|
||||
_bank1 = false;
|
||||
_readbsr = true;
|
||||
_writebsr = _writebsr || ((_last & 0xF3) == (off & 0xF3));
|
||||
_debug("Bank 2 Read/Write");
|
||||
break;
|
||||
case LOC.READBSR1: // 0xC088
|
||||
case LOC._READBSR1:
|
||||
_bank1 = true;
|
||||
_readbsr = true;
|
||||
_writebsr = false;
|
||||
_debug("Bank 1 Read");
|
||||
break;
|
||||
case LOC.WRITEBSR1: // 0xC089
|
||||
case LOC._WRITEBSR1:
|
||||
_bank1 = true;
|
||||
_readbsr = false;
|
||||
_writebsr = _writebsr || ((_last & 0xF3) == (off & 0xF3));
|
||||
_debug("Bank 1 Write");
|
||||
break;
|
||||
case LOC.OFFBSR1: // 0xC08A
|
||||
case LOC._OFFBSR1:
|
||||
_bank1 = true;
|
||||
_readbsr = false;
|
||||
_writebsr = false;
|
||||
_debug("Bank 1 Off");
|
||||
break;
|
||||
case LOC.READWRBSR1: // 0xC08B
|
||||
case LOC._READWRBSR1:
|
||||
_bank1 = true;
|
||||
_readbsr = true;
|
||||
_writebsr = _writebsr || ((_last & 0xF3) == (off & 0xF3));
|
||||
_debug("Bank 1 Read/Write");
|
||||
break;
|
||||
|
||||
// Status registers
|
||||
|
||||
case LOC.BSRBANK2:
|
||||
_debug("Bank 2 Read " + !_bank1);
|
||||
result = !_bank1 ? 0x80 : 0x00;
|
||||
break;
|
||||
case LOC.BSRREADRAM:
|
||||
_debug("Bank SW RAM Read " + _readbsr);
|
||||
result = _readbsr ? 0x80 : 0x00;
|
||||
break;
|
||||
case LOC.RAMRD: // 0xC013
|
||||
_debug("Aux RAM Read " + _auxRamRead);
|
||||
result = _auxRamRead ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.RAMWRT: // 0xC014
|
||||
_debug("Aux RAM Write " + _auxRamWrite);
|
||||
result = _auxRamWrite ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.INTCXROM: // 0xC015
|
||||
// _debug("Int CX ROM " + _intcxrom);
|
||||
result = _intcxrom ? 0x80 : 0x00;
|
||||
break;
|
||||
case LOC.ALTZP: // 0xC016
|
||||
_debug("Alt ZP " + _altzp);
|
||||
result = _altzp ? 0x80 : 0x0;
|
||||
break;
|
||||
case LOC.SLOTC3ROM: // 0xC017
|
||||
_debug("Slot C3 ROM " + _slot3rom);
|
||||
result = _slot3rom ? 0x80 : 0x00;
|
||||
break;
|
||||
case LOC._80STORE: // 0xC018
|
||||
result = _80store ? 0x80 : 0x00;
|
||||
break;
|
||||
case LOC.VERTBLANK: // 0xC018
|
||||
// result = cpu.cycles() % 20 < 5 ? 0x80 : 0x00;
|
||||
result = (cpu.cycles() < _vbEnd) ? 0x80 : 0x00;
|
||||
break;
|
||||
|
||||
default:
|
||||
debug("MMU missing register " + toHex(off));
|
||||
break;
|
||||
}
|
||||
_last = off;
|
||||
|
||||
if (result !== undefined)
|
||||
return result;
|
||||
|
||||
result = 0;
|
||||
|
||||
_updateBanks();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return {
|
||||
start: function mmu_start() {
|
||||
// Fake call start to register switches
|
||||
io.start();
|
||||
|
||||
// Do us afterward because we override some of the above
|
||||
io.registerSwitches(this, LOC);
|
||||
|
||||
return 0x00;
|
||||
},
|
||||
end: function mmu_end() {
|
||||
return 0xff;
|
||||
},
|
||||
ioSwitch: function mmu_ioswitch(off, val) {
|
||||
return _access(off, val);
|
||||
},
|
||||
reset: function() {
|
||||
_initSwitches();
|
||||
_updateBanks();
|
||||
for (idx = 0xc1; idx < 0xc8; idx++) {
|
||||
if ('reset' in _pages[idx][0]) {
|
||||
_pages[idx][0].reset();
|
||||
}
|
||||
}
|
||||
},
|
||||
read: function mmu_read(page, off, debug) {
|
||||
return _readPages[page].read(page, off, debug);
|
||||
},
|
||||
write: function mmu_write(page, off, val) {
|
||||
_writePages[page].write(page, off, val);
|
||||
},
|
||||
addSlot: function mmu_addSlot(slot, card) {
|
||||
if (slot == 3) {
|
||||
_pages[0xc0 + slot][1] = card;
|
||||
}
|
||||
_pages[0xc0 + slot][0] = card;
|
||||
card.start();
|
||||
},
|
||||
auxRom: function mmu_auxRom(slot, rom) {
|
||||
var idx;
|
||||
if (_auxRom != slot) {
|
||||
_debug("Slot " + slot + " expansion rom added");
|
||||
_auxRom = slot;
|
||||
for (idx = 0xc8; idx < 0xd0; idx++) {
|
||||
_pages[idx][0] = rom;
|
||||
}
|
||||
_updateBanks();
|
||||
}
|
||||
},
|
||||
resetVB: function mmu_resetVB() {
|
||||
_vbEnd = cpu.cycles() + 1000;
|
||||
},
|
||||
getState: function() {
|
||||
return {
|
||||
readbsr: _readbsr,
|
||||
writebsr: _writebsr,
|
||||
bank1: _bank1,
|
||||
last: _last,
|
||||
|
||||
auxRom: _auxRom,
|
||||
intcxrom: _intcxrom,
|
||||
slot3rom: _slot3rom,
|
||||
auxRamRead: _auxRamRead,
|
||||
auxRamWrite: _auxRamWrite,
|
||||
altzp: _altzp,
|
||||
|
||||
_80store: _80store,
|
||||
page2: _page2,
|
||||
|
||||
mem00_01: [mem00_01[0].getState(), mem00_01[1].getState()],
|
||||
mem02_03: [mem02_03[0].getState(), mem02_03[1].getState()],
|
||||
mem0C_1F: [mem0C_1F[0].getState(), mem0C_1F[1].getState()],
|
||||
mem60_BF: [mem60_BF[0].getState(), mem60_BF[1].getState()],
|
||||
memD0_DF: [memD0_DF[0].getState(), memD0_DF[1].getState(),
|
||||
memD0_DF[2].getState(), memD0_DF[3].getState()],
|
||||
memE0_FF: [memE0_FF[0].getState(), memE0_FF[1].getState()]
|
||||
};
|
||||
},
|
||||
setState: function(state) {
|
||||
_readbsr = state.readbsr;
|
||||
_writebsr = state.writebsr;
|
||||
_bank1 = state.bank1;
|
||||
|
||||
_auxRom = state.auxRom;
|
||||
_intcxrom = state.intcxrom;
|
||||
_slot3rom = state.slot3rom;
|
||||
_auxRamRead = state.auxRamRead;
|
||||
_auxRamWrite = state.auxRamWrite;
|
||||
_altzp = state.altzp;
|
||||
|
||||
_80store = state._80store;
|
||||
_page2 = state.page2;
|
||||
|
||||
mem00_01[0].setState(state.mem00_01[0]);
|
||||
mem00_01[1].setState(state.mem00_01[1]);
|
||||
mem02_03[0].setState(state.mem02_03[0]);
|
||||
mem02_03[1].setState(state.mem02_03[1]);
|
||||
mem0C_1F[0].setState(state.mem0C_1F[0]);
|
||||
mem0C_1F[1].setState(state.mem0C_1F[1]);
|
||||
mem60_BF[0].setState(state.mem60_BF[0]);
|
||||
mem60_BF[1].setState(state.mem60_BF[1]);
|
||||
memD0_DF[0].setState(state.memD0_DF[0]);
|
||||
memD0_DF[1].setState(state.memD0_DF[1]);
|
||||
memD0_DF[2].setState(state.memD0_DF[2]);
|
||||
memD0_DF[3].setState(state.memD0_DF[3]);
|
||||
memE0_FF[0].setState(state.memE0_FF[0]);
|
||||
memE0_FF[1].setState(state.memE0_FF[1]);
|
||||
|
||||
_access(-1);
|
||||
_last = state.last;
|
||||
}
|
||||
};
|
||||
}
|
79
js/parallel.js
Normal file
79
js/parallel.js
Normal file
@ -0,0 +1,79 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*exported Parallel */
|
||||
|
||||
function Parallel(io, cbs, slot) {
|
||||
slot = slot || 1;
|
||||
|
||||
var LOC = {
|
||||
IOREG: 0x80
|
||||
};
|
||||
|
||||
var _cbs = cbs;
|
||||
|
||||
var rom = [
|
||||
0x18,0xb0,0x38,0x48,0x8a,0x48,0x98,0x48,
|
||||
0x08,0x78,0x20,0x58,0xff,0xba,0x68,0x68,
|
||||
0x68,0x68,0xa8,0xca,0x9a,0x68,0x28,0xaa,
|
||||
0x90,0x38,0xbd,0xb8,0x05,0x10,0x19,0x98,
|
||||
0x29,0x7f,0x49,0x30,0xc9,0x0a,0x90,0x3b,
|
||||
0xc9,0x78,0xb0,0x29,0x49,0x3d,0xf0,0x21,
|
||||
0x98,0x29,0x9f,0x9d,0x38,0x06,0x90,0x7e,
|
||||
0xbd,0xb8,0x06,0x30,0x14,0xa5,0x24,0xdd,
|
||||
0x38,0x07,0xb0,0x0d,0xc9,0x11,0xb0,0x09,
|
||||
0x09,0xf0,0x3d,0x38,0x07,0x65,0x24,0x85,
|
||||
0x24,0x4a,0x38,0xb0,0x6d,0x18,0x6a,0x3d,
|
||||
0xb8,0x06,0x90,0x02,0x49,0x81,0x9d,0xb8,
|
||||
0x06,0xd0,0x53,0xa0,0x0a,0x7d,0x38,0x05,
|
||||
0x88,0xd0,0xfa,0x9d,0xb8,0x04,0x9d,0x38,
|
||||
0x05,0x38,0xb0,0x43,0xc5,0x24,0x90,0x3a,
|
||||
0x68,0xa8,0x68,0xaa,0x68,0x4c,0xf0,0xfd,
|
||||
0x90,0xfe,0xb0,0xfe,0x99,0x80,0xc0,0x90,
|
||||
0x37,0x49,0x07,0xa8,0x49,0x0a,0x0a,0xd0,
|
||||
0x06,0xb8,0x85,0x24,0x9d,0x38,0x07,0xbd,
|
||||
0xb8,0x06,0x4a,0x70,0x02,0xb0,0x23,0x0a,
|
||||
0x0a,0xa9,0x27,0xb0,0xcf,0xbd,0x38,0x07,
|
||||
0xfd,0xb8,0x04,0xc9,0xf8,0x90,0x03,0x69,
|
||||
0x27,0xac,0xa9,0x00,0x85,0x24,0x18,0x7e,
|
||||
0xb8,0x05,0x68,0xa8,0x68,0xaa,0x68,0x60,
|
||||
0x90,0x27,0xb0,0x00,0x10,0x11,0xa9,0x89,
|
||||
0x9d,0x38,0x06,0x9d,0xb8,0x06,0xa9,0x28,
|
||||
0x9d,0xb8,0x04,0xa9,0x02,0x85,0x36,0x98,
|
||||
0x5d,0x38,0x06,0x0a,0xf0,0x90,0x5e,0xb8,
|
||||
0x05,0x98,0x48,0x8a,0x0a,0x0a,0x0a,0x0a,
|
||||
0xa8,0xbd,0x38,0x07,0xc5,0x24,0x68,0xb0,
|
||||
0x05,0x48,0x29,0x80,0x09,0x20,0x2c,0x58,
|
||||
0xff,0xf0,0x03,0xfe,0x38,0x07,0x70,0x84
|
||||
];
|
||||
|
||||
return {
|
||||
start: function() {
|
||||
LOC.IOREG += 0x10 * slot;
|
||||
io.registerSwitches(this, LOC);
|
||||
return 0xc0 + slot;
|
||||
},
|
||||
end: function() {
|
||||
return 0xc0 + slot;
|
||||
},
|
||||
ioSwitch: function(off, val) {
|
||||
if (off == LOC.IOREG && val && 'putChar' in _cbs)
|
||||
_cbs.putChar(val);
|
||||
},
|
||||
read: function(page, off) {
|
||||
return rom[off];
|
||||
},
|
||||
write: function() {}
|
||||
};
|
||||
}
|
||||
|
||||
|
32
js/prefs.js
Normal file
32
js/prefs.js
Normal file
@ -0,0 +1,32 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*jshint browser: true */
|
||||
/*exported Prefs */
|
||||
|
||||
function Prefs()
|
||||
{
|
||||
return {
|
||||
havePrefs: function() {
|
||||
return typeof(localStorage) != "undefined";
|
||||
},
|
||||
readPref: function(name) {
|
||||
if (localStorage)
|
||||
return localStorage.getItem(name);
|
||||
return null;
|
||||
},
|
||||
writePref: function(name, value) {
|
||||
if (localStorage)
|
||||
localStorage.setItem(name, value);
|
||||
}
|
||||
};
|
||||
}
|
57
js/ram.js
Normal file
57
js/ram.js
Normal file
@ -0,0 +1,57 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*globals allocMemPages, base64_encode, base64_decode */
|
||||
/*exported RAM */
|
||||
|
||||
function RAM(sp, ep) {
|
||||
var mem;
|
||||
var start_page = sp;
|
||||
var end_page = ep;
|
||||
|
||||
mem = allocMemPages(ep - sp + 1);
|
||||
|
||||
for (var page = 0; page <= ep; page++) {
|
||||
for (var off = 0; off < 0x100; off++) {
|
||||
mem[page * 0x100 + off] = 0; // Math.floor(Math.random()*256);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
start: function() {
|
||||
return start_page;
|
||||
},
|
||||
end: function() {
|
||||
return end_page;
|
||||
},
|
||||
read: function(page, off) {
|
||||
return mem[(page - start_page) * 0x100 + off];
|
||||
},
|
||||
write: function(page, off, val) {
|
||||
mem[(page - start_page) * 0x100 + off] = val;
|
||||
},
|
||||
|
||||
getState: function() {
|
||||
return {
|
||||
start: start_page,
|
||||
end: end_page,
|
||||
mem: base64_encode(mem)
|
||||
};
|
||||
},
|
||||
|
||||
setState: function(state) {
|
||||
start_page = state.start;
|
||||
end_page = state.end;
|
||||
mem = base64_decode(state.mem);
|
||||
}
|
||||
};
|
||||
}
|
1209
js/ramfactor.js
Normal file
1209
js/ramfactor.js
Normal file
File diff suppressed because it is too large
Load Diff
46
js/slot3.js
Normal file
46
js/slot3.js
Normal file
@ -0,0 +1,46 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*exported Slot3*/
|
||||
|
||||
function Slot3(mmu, rom)
|
||||
{
|
||||
var auxRomFn = {
|
||||
start: function auxRom_start() {
|
||||
return 0xc8;
|
||||
},
|
||||
end: function auxRom_end() {
|
||||
return 0xcf;
|
||||
},
|
||||
read: function auxRom_read(page, off) {
|
||||
return rom.read(page, off);
|
||||
},
|
||||
write: function auxRom_write() {}
|
||||
};
|
||||
|
||||
return {
|
||||
start: function slot3_start() {
|
||||
return 0xc3;
|
||||
},
|
||||
end: function slot3_end() {
|
||||
return 0xc3;
|
||||
},
|
||||
read: function slot3_read(page, off) {
|
||||
mmu.auxRom(0x3, auxRomFn);
|
||||
return rom.read(page, off);
|
||||
},
|
||||
write: function slot3_write() {
|
||||
mmu.auxRom(0x3, auxRomFn);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
671
js/symbols.js
Normal file
671
js/symbols.js
Normal file
@ -0,0 +1,671 @@
|
||||
var SYMBOLS = {
|
||||
/*
|
||||
0x00: "GOWARM",
|
||||
0x03: "GOSTROUT",
|
||||
0x0A: "USR",
|
||||
0x0D: "CHARAC",
|
||||
0x0E: "ENDCHR",
|
||||
0x0F: "TKN.CNTR",
|
||||
0x0F: "EOL.PNTR",
|
||||
0x0F: "NUMDIM",
|
||||
0x10: "DIMFLG",
|
||||
0x11: "VALTYP",
|
||||
0x13: "DATAFLG",
|
||||
0x13: "GARFLG",
|
||||
0x14: "SUBFLG",
|
||||
0x15: "INPUTFLG",
|
||||
0x16: "CPRMASK",
|
||||
0x16: "SIGNFLG",
|
||||
0x1A: "HGR.SHAPE",
|
||||
0x1C: "HGR.BITS",
|
||||
0x1D: "HGR.COUNT",
|
||||
0x24: "MON.CH",
|
||||
0x26: "MON.GBASL",
|
||||
0x27: "MON.GBASH",
|
||||
0x2C: "MON.H2",
|
||||
0x2D: "MON.V2",
|
||||
0x30: "MON.HMASK",
|
||||
0x32: "MON.INVFLG",
|
||||
0x33: "MON.PROMPT",
|
||||
0x3C: "MON.A1L",
|
||||
0x3D: "MON.A1H",
|
||||
0x3E: "MON.A2L",
|
||||
0x3F: "MON.A2H",
|
||||
0x50: "LINNUM",
|
||||
0x52: "TEMPPT",
|
||||
0x53: "LASTPT",
|
||||
0x55: "TEMPST",
|
||||
0x5E: "INDEX",
|
||||
0x60: "DEST",
|
||||
0x62: "RESULT",
|
||||
0x67: "TXTTAB",
|
||||
0x69: "VARTAB",
|
||||
0x6B: "ARYTAB",
|
||||
0x6D: "STREND",
|
||||
0x6F: "FRETOP",
|
||||
0x71: "FRESPC",
|
||||
0x73: "MEMSIZ",
|
||||
0x75: "CURLIN",
|
||||
0x77: "OLDLIN",
|
||||
0x79: "OLDTEXT",
|
||||
0x7B: "DATLIN",
|
||||
0x7D: "DATPTR",
|
||||
0x7F: "INPTR",
|
||||
0x81: "VARNAM",
|
||||
0x83: "VARPNT",
|
||||
0x85: "FORPNT",
|
||||
0x87: "TXPSV",
|
||||
0x87: "LASTOP",
|
||||
0x89: "CPRTYP",
|
||||
0x8A: "TEMP3",
|
||||
0x8A: "FNCNAM",
|
||||
0x8C: "DSCPTR",
|
||||
0x8F: "DSCLEN",
|
||||
0x90: "JMPADRS",
|
||||
0x91: "LENGTH",
|
||||
0x92: "ARG.EXTENSION",
|
||||
0x93: "TEMP1",
|
||||
0x94: "ARYPNT",
|
||||
0x94: "HIGHDS",
|
||||
0x96: "HIGHTR",
|
||||
0x98: "TEMP2",
|
||||
0x99: "TMPEXP",
|
||||
0x99: "INDX",
|
||||
0x9A: "EXPON",
|
||||
0x9B: "DPFLG",
|
||||
0x9B: "LOWTR",
|
||||
0x9C: "EXPSGN",
|
||||
0x9D: "FAC",
|
||||
0x9D: "DSCTMP",
|
||||
0xA0: "VPNT",
|
||||
0xA2: "FAC.SIGN",
|
||||
0xA3: "SERLEN",
|
||||
0xA4: "SHIFT.SIGN.EXT",
|
||||
0xA5: "ARG",
|
||||
0xAA: "ARG.SIGN",
|
||||
0xAB: "SGNCPR",
|
||||
0xAC: "FAC.EXTENSION",
|
||||
0xAD: "SERPNT",
|
||||
0xAB: "STRNG1",
|
||||
0xAD: "STRNG2",
|
||||
0xAF: "PRGEND",
|
||||
0xB1: "CHRGET",
|
||||
0xB7: "CHRGOT",
|
||||
0xB8: "TXTPTR",
|
||||
0xC9: "RNDSEED",
|
||||
0xD0: "HGR.DX",
|
||||
0xD2: "HGR.DY",
|
||||
0xD3: "HGR.QUADRANT",
|
||||
0xD4: "HGR.E",
|
||||
0xD6: "LOCK",
|
||||
0xD8: "ERRFLG",
|
||||
0xDA: "ERRLIN",
|
||||
0xDC: "ERRPOS",
|
||||
0xDE: "ERRNUM",
|
||||
0xDF: "ERRSTK",
|
||||
0xE0: "HGR.X",
|
||||
0xE2: "HGR.Y",
|
||||
0xE4: "HGR.COLOR",
|
||||
0xE5: "HGR.HORIZ",
|
||||
0xE6: "HGR.PAGE",
|
||||
0xE7: "HGR.SCALE",
|
||||
0xE8: "HGR.SHAPE.PNTR",
|
||||
0xEA: "HGR.COLLISIONS",
|
||||
0xF0: "FIRST",
|
||||
0xF1: "SPEEDZ",
|
||||
0xF2: "TRCFLG",
|
||||
0xF3: "FLASH.BIT",
|
||||
0xF4: "TXTPSV",
|
||||
0xF6: "CURLSV",
|
||||
0xF8: "REMSTK",
|
||||
0xF9: "HGR.ROTATION",
|
||||
0x0100: "STACK",
|
||||
0x0200: "INPUT.BUFFER",
|
||||
0x03F5: "AMPERSAND.VECTOR",
|
||||
*/
|
||||
0xC000: "KEYBOARD",
|
||||
0xC050: "SW.TXTCLR",
|
||||
0xC052: "SW.MIXCLR",
|
||||
0xC053: "SW.MIXSET",
|
||||
0xC054: "SW.LOWSCR",
|
||||
0xC055: "SW.HISCR",
|
||||
0xC056: "SW.LORES",
|
||||
0xC057: "SW.HIRES",
|
||||
0xD000: "TOKEN.ADDRESS.TABLE",
|
||||
0xD080: "UNFNC",
|
||||
0xD0B2: "MATHTBL",
|
||||
0xD0C7: "M.NEG",
|
||||
0xD0CA: "M.EQU",
|
||||
0xD0CD: "M.REL",
|
||||
0xD0D0: "TOKEN.NAME.TABLE",
|
||||
0xD260: "ERROR.MESSAGES",
|
||||
0xD350: "QT.ERROR",
|
||||
0xD358: "QT.IN",
|
||||
0xD35D: "QT.BREAK",
|
||||
0xD365: "GTFORPNT",
|
||||
0xD393: "BLTU",
|
||||
0xD39A: "BLTU2",
|
||||
0xD3D6: "CHKMEM",
|
||||
0xD3E3: "REASON",
|
||||
0xD410: "MEMERR",
|
||||
0xD412: "ERROR",
|
||||
0xD431: "PRINT.ERROR.LINNUM",
|
||||
0xD43C: "RESTART",
|
||||
0xD45C: "NUMBERED.LINE",
|
||||
0xD4B5: "PUT.NEW.LINE",
|
||||
0xD4F2: "FIX.LINKS",
|
||||
0xD52C: "INLIN",
|
||||
0xD52E: "INLIN2",
|
||||
0xD553: "INCHR",
|
||||
0xD559: "PARSE.INPUT.LINE",
|
||||
0xD56C: "PARSE",
|
||||
0xD61A: "FNDLIN",
|
||||
0xD61E: "FL1",
|
||||
0xD648: "RTS.1",
|
||||
0xD649: "NEW",
|
||||
0xD64B: "SCRTCH",
|
||||
0xD665: "SETPTRS",
|
||||
0xD66A: "CLEAR",
|
||||
0xD66C: "CLEARC",
|
||||
0xD683: "STKINI",
|
||||
0xD696: "RTS.2",
|
||||
0xD697: "STXTPT",
|
||||
0xD6A5: "LIST",
|
||||
0xD6DA: "LIST.0",
|
||||
0xD6FE: "LIST.1",
|
||||
0xD702: "LIST.2",
|
||||
0xD724: "LIST.3",
|
||||
0xD72C: "GETCHR",
|
||||
0xD734: "LIST.4",
|
||||
0xD766: "FOR",
|
||||
0xD7AF: "STEP",
|
||||
0xD7D2: "NEWSTT",
|
||||
0xD805: "TRACE.",
|
||||
0xD826: "GOEND",
|
||||
0xD828: "EXECUTE.STATEMENT",
|
||||
0xD82A: "EXECUTE.STATEMENT.1",
|
||||
0xD842: "COLON.",
|
||||
0xD846: "SYNERR.1",
|
||||
0xD849: "RESTORE",
|
||||
0xD853: "SETDA",
|
||||
0xD857: "RTS.3",
|
||||
0xD858: "ISCNTC",
|
||||
0xD863: "CONTROL.C.TYPED",
|
||||
0xD86E: "STOP",
|
||||
0xD870: "END",
|
||||
0xD871: "END2",
|
||||
0xD88A: "END4",
|
||||
0xD896: "CONT",
|
||||
0xD8AF: "RTS.4",
|
||||
0xD8B0: "SAVE",
|
||||
0xD8C9: "LOAD",
|
||||
0xD8F0: "VARTIO",
|
||||
0xD901: "PROGIO",
|
||||
0xD912: "RUN",
|
||||
0xD921: "GOSUB",
|
||||
0xD935: "GO.TO.LINE",
|
||||
0xD93E: "GOTO",
|
||||
0xD96A: "RTS.5",
|
||||
0xD96B: "POP",
|
||||
0xD97C: "UNDERR",
|
||||
0xD981: "SYNERR.2",
|
||||
0xD984: "RETURN",
|
||||
0xD995: "DATA",
|
||||
0xD998: "ADDON",
|
||||
0xD9A2: "RTS.6",
|
||||
0xD9A3: "DATAN",
|
||||
0xD9A6: "REMN",
|
||||
0xD9C5: "PULL3",
|
||||
0xD9C9: "IF",
|
||||
0xD9DC: "REM",
|
||||
0xD9E1: "IF.TRUE",
|
||||
0xD9EC: "ONGOTO",
|
||||
0xD9F4: "ON.1",
|
||||
0xD9F8: "ON.2",
|
||||
0xDA0B: "RTS.7",
|
||||
0xDA0C: "LINGET",
|
||||
0xDA46: "LET",
|
||||
0xDA63: "LET2",
|
||||
0xDA7A: "LET.STRING",
|
||||
0xDA7B: "PUTSTR",
|
||||
0xDACF: "PR.STRING",
|
||||
0xDAD5: "PRINT",
|
||||
0xDAD7: "PRINT2",
|
||||
0xDAFB: "CRDO",
|
||||
0xDB00: "NEGATE",
|
||||
0xDB02: "RTS.8",
|
||||
0xDB03: "PR.COMMA",
|
||||
0xDB16: "PR.TAB.OR.SPC",
|
||||
0xDB2C: "NXSPC",
|
||||
0xDB2F: "PR.NEXT.CHAR",
|
||||
0xDB35: "DOSPC",
|
||||
0xDB3A: "STROUT",
|
||||
0xDB3D: "STRPRT",
|
||||
0xDB57: "OUTSP",
|
||||
0xDB5A: "OUTQUES",
|
||||
0xDB5C: "OUTDO",
|
||||
0xDB71: "INPUTERR",
|
||||
0xDB7B: "READERR",
|
||||
0xDB7F: "ERLIN",
|
||||
0xDB86: "INPERR",
|
||||
0xDB87: "RESPERR",
|
||||
0xDBA0: "GET",
|
||||
0xDBB2: "INPUT",
|
||||
0xDBDC: "NXIN",
|
||||
0xDBE2: "READ",
|
||||
0xDBE9: "INPUT.FLAG.ZERO",
|
||||
0xDBEB: "PROCESS.INPUT.LIST",
|
||||
0xDBF1: "PROCESS.INPUT.ITEM",
|
||||
0xDC2B: "INSTART",
|
||||
0xDC69: "INPUT.DATA",
|
||||
0xDC72: "INPUT.MORE",
|
||||
0xDC99: "INPFIN",
|
||||
0xDCA0: "FINDATA",
|
||||
0xDCC6: "INPDONE",
|
||||
0xDCDF: "ERR.EXTRA",
|
||||
0xDCEF: "ERR.REENTRY",
|
||||
0xDCF9: "NEXT",
|
||||
0xDCFF: "NEXT.1",
|
||||
0xDD02: "NEXT.2",
|
||||
0xDD0D: "GERR",
|
||||
0xDD0F: "NEXT.3",
|
||||
0xDD67: "FRMNUM",
|
||||
0xDD6A: "CHKNUM",
|
||||
0xDD6C: "CHKSTR",
|
||||
0xDD6D: "CHKVAL",
|
||||
0xDD78: "JERROR",
|
||||
0xDD7B: "FRMEVL",
|
||||
0xDD86: "FRMEVL.1",
|
||||
0xDD95: "FRMEVL.2",
|
||||
0xDDCD: "FRM.PRECEDENCE.TEST",
|
||||
0xDDD6: "NXOP",
|
||||
0xDDD7: "SAVOP",
|
||||
0xDDE4: "FRM.RELATIONAL",
|
||||
0xDDF6: "PREFNC",
|
||||
0xDDFD: "FRM.RECURSE",
|
||||
0xDE0D: "SNTXERR",
|
||||
0xDE10: "FRM.STACK.1",
|
||||
0xDE15: "FRM.STACK.2",
|
||||
0xDE20: "FRM.STACK.3",
|
||||
0xDE35: "NOTMATH",
|
||||
0xDE38: "GOEX",
|
||||
0xDE3A: "FRM.PERFORM.1",
|
||||
0xDE43: "FRM.PERFORM.2",
|
||||
0xDE5D: "EXIT",
|
||||
0xDE60: "FRM.ELEMENT",
|
||||
0xDE81: "STRTXT",
|
||||
0xDE90: "NOT.",
|
||||
0xDE98: "EQUOP",
|
||||
0xDEA4: "FN.",
|
||||
0xDEAB: "SGN.",
|
||||
0xDEB2: "PARCHK",
|
||||
0xDEB8: "CHKCLS",
|
||||
0xDEBB: "CHKOPN",
|
||||
0xDEBE: "CHKCOM",
|
||||
0xDEC0: "SYNCHR",
|
||||
0xDEC9: "SYNERR",
|
||||
0xDECE: "MIN",
|
||||
0xDED0: "EQUL",
|
||||
0xDED5: "FRM.VARIABLE",
|
||||
0xDED7: "FRM.VARIABLE.CALL",
|
||||
0xDEF9: "SCREEN",
|
||||
0xDF0C: "UNARY",
|
||||
0xDF4F: "OR",
|
||||
0xDF55: "AND",
|
||||
0xDF5D: "FALSE",
|
||||
0xDF60: "TRUE",
|
||||
0xDF65: "RELOPS",
|
||||
0xDF7D: "STRCMP",
|
||||
0xDFAA: "STRCMP.1",
|
||||
0xDFB0: "NUMCMP",
|
||||
0xDFB5: "STRCMP.2",
|
||||
0xDFC1: "CMPDONE",
|
||||
0xDFCD: "PDL",
|
||||
0xDFD6: "NXDIM",
|
||||
0xDFD9: "DIM",
|
||||
0xDFE3: "PTRGET",
|
||||
0xDFE8: "PTRGET2",
|
||||
0xDFEA: "PTRGET3",
|
||||
0xDFF4: "BADNAM",
|
||||
0xDFF7: "NAMOK",
|
||||
0xE007: "PTRGET4",
|
||||
0xE07D: "ISLETC",
|
||||
0xE087: "NAME.NOT.FOUND",
|
||||
0xE09A: "C.ZERO",
|
||||
0xE09C: "MAKE.NEW.VARIABLE",
|
||||
0xE0DE: "SET.VARPNT.AND.YA",
|
||||
0xE0ED: "GETARY",
|
||||
0xE0EF: "GETARY2",
|
||||
0xE0FE: "NEG32768",
|
||||
0xE102: "MAKINT",
|
||||
0xE108: "MKINT",
|
||||
0xE10C: "AYINT",
|
||||
0xE119: "MI1",
|
||||
0xE11B: "MI2",
|
||||
0xE11E: "ARRAY",
|
||||
0xE196: "SUBERR",
|
||||
0xE199: "IQERR",
|
||||
0xE19B: "JER",
|
||||
0xE19E: "USE.OLD.ARRAY",
|
||||
0xE1B8: "MAKE.NEW.ARRAY",
|
||||
0xE24B: "FIND.ARRAY.ELEMENT",
|
||||
0xE253: "FAE.1",
|
||||
0xE269: "GSE",
|
||||
0xE26C: "GME",
|
||||
0xE26F: "FAE.2",
|
||||
0xE270: "FAE.3",
|
||||
0xE2AC: "RTS.9",
|
||||
0xE2AD: "MULTIPLY.SUBSCRIPT",
|
||||
0xE2B6: "MULTIPLY.SUBS.1",
|
||||
0xE2DE: "FRE",
|
||||
0xE2F2: "GIVAYF",
|
||||
0xE2FF: "POS",
|
||||
0xE301: "SNGFLT",
|
||||
0xE306: "ERRDIR",
|
||||
0xE30E: "UNDFNC",
|
||||
0xE313: "DEF",
|
||||
0xE341: "FNC.",
|
||||
0xE354: "FUNCT",
|
||||
0xE3AF: "FNCDATA",
|
||||
0xE3C5: "STR",
|
||||
0xE3D5: "STRINI",
|
||||
0xE3DD: "STRSPA",
|
||||
0xE3E7: "STRLIT",
|
||||
0xE3ED: "STRLT2",
|
||||
0xE42A: "PUTNEW",
|
||||
0xE432: "JERR",
|
||||
0xE435: "PUTEMP",
|
||||
0xE452: "GETSPA",
|
||||
0xE484: "GARBAG",
|
||||
0xE488: "FIND.HIGHEST.STRING",
|
||||
0xE519: "CHECK.SIMPLE.VARIABLE",
|
||||
0xE523: "CHECK.VARIABLE",
|
||||
0xE552: "CHECK.BUMP",
|
||||
0xE55D: "CHECK.EXIT",
|
||||
0xE562: "MOVE.HIGHEST.STRING.TO.TOP",
|
||||
0xE597: "CAT",
|
||||
0xE5D4: "MOVINS",
|
||||
0xE5E2: "MOVSTR",
|
||||
0xE5E6: "MOVSTR.1",
|
||||
0xE5FD: "FRESTR",
|
||||
0xE600: "FREFAC",
|
||||
0xE604: "FRETMP",
|
||||
0xE635: "FRETMS",
|
||||
0xE646: "CHRSTR",
|
||||
0xE65A: "LEFTSTR",
|
||||
0xE660: "SUBSTRING.1",
|
||||
0xE667: "SUBSTRING.2",
|
||||
0xE668: "SUBSTRING.3",
|
||||
0xE686: "RIGHTSTR",
|
||||
0xE691: "MIDSTR",
|
||||
0xE6B9: "SUBSTRING.SETUP",
|
||||
0xE6D6: "LEN",
|
||||
0xE6DC: "GETSTR",
|
||||
0xE6E5: "ASC",
|
||||
0xE6F2: "GOIQ",
|
||||
0xE6F5: "GTBYTC",
|
||||
0xE6F8: "GETBYT",
|
||||
0xE6FB: "CONINT",
|
||||
0xE707: "VAL",
|
||||
0xE73D: "POINT",
|
||||
0xE746: "GTNUM",
|
||||
0xE74C: "COMBYTE",
|
||||
0xE752: "GETADR",
|
||||
0xE764: "PEEK",
|
||||
0xE77B: "POKE",
|
||||
0xE784: "WAIT",
|
||||
0xE79F: "RTS.10",
|
||||
0xE7A0: "FADDH",
|
||||
0xE7A7: "FSUB",
|
||||
0xE7AA: "FSUBT",
|
||||
0xE7B9: "FADD.1",
|
||||
0xE7BE: "FADD",
|
||||
0xE7C1: "FADDT",
|
||||
0xE7CE: "FADD.2",
|
||||
0xE7FA: "FADD.3",
|
||||
0xE829: "NORMALIZE.FAC.1",
|
||||
0xE82E: "NORMALIZE.FAC.2",
|
||||
0xE84E: "ZERO.FAC",
|
||||
0xE850: "STA.IN.FAC.SIGN.AND.EXP",
|
||||
0xE852: "STA.IN.FAC.SIGN",
|
||||
0xE855: "FADD.4",
|
||||
0xE874: "NORMALIZE.FAC.3",
|
||||
0xE880: "NORMALIZE.FAC.4",
|
||||
0xE88D: "NORMALIZE.FAC.5",
|
||||
0xE88F: "NORMALIZE.FAC.6",
|
||||
0xE89D: "RTS.11",
|
||||
0xE89E: "COMPLEMENT.FAC",
|
||||
0xE8A4: "COMPLEMENT.FAC.MANTISSA",
|
||||
0xE8C6: "INCREMENT.FAC.MANTISSA",
|
||||
0xE8D4: "RTS.12",
|
||||
0xE8D5: "OVERFLOW",
|
||||
0xE8DA: "SHIFT.RIGHT.1",
|
||||
0xE8DC: "SHIFT.RIGHT.2",
|
||||
0xE8F0: "SHIFT.RIGHT",
|
||||
0xE8FD: "L",
|
||||
0xE8FD: "SHIFT.RIGHT.3",
|
||||
0xE907: "SHIFT.RIGHT.4",
|
||||
0xE911: "SHIFT.RIGHT.5",
|
||||
0xE913: "CON.ONE",
|
||||
0xE918: "POLY.LOG",
|
||||
0xE92D: "CON.SQR.HALF",
|
||||
0xE932: "CON.SQR.TWO",
|
||||
0xE937: "CON.NEG.HALF",
|
||||
0xE93C: "CON.LOG.TWO",
|
||||
0xE941: "LOG",
|
||||
0xE948: "GIQ",
|
||||
0xE94B: "LOG.2",
|
||||
0xE97F: "FMULT",
|
||||
0xE982: "FMULTT",
|
||||
0xE9B0: "MULTIPLY.1",
|
||||
0xE9B5: "MULTIPLY.2",
|
||||
0xE9E2: "RTS.13",
|
||||
0xE9E3: "LOAD.ARG.FROM.YA",
|
||||
0xEA0E: "ADD.EXPONENTS",
|
||||
0xEA10: "ADD.EXPONENTS.1",
|
||||
0xEA2B: "OUTOFRNG",
|
||||
0xEA31: "ZERO",
|
||||
0xEA36: "JOV",
|
||||
0xEA39: "MUL10",
|
||||
0xEA50: "CON.TEN",
|
||||
0xEA55: "DIV10",
|
||||
0xEA5E: "DIV",
|
||||
0xEA66: "FDIV",
|
||||
0xEA69: "FDIVT",
|
||||
0xEAE6: "COPY.RESULT.INTO.FAC",
|
||||
0xEAF9: "LOAD.FAC.FROM.YA",
|
||||
0xEB1E: "STORE.FAC.IN.TEMP2.ROUNDED",
|
||||
0xEB21: "STORE.FAC.IN.TEMP1.ROUNDED",
|
||||
0xEB27: "SETFOR",
|
||||
0xEB2B: "STORE.FAC.AT.YX.ROUNDED",
|
||||
0xEB53: "COPY.ARG.TO.FAC",
|
||||
0xEB55: "MFA",
|
||||
0xEB63: "COPY.FAC.TO.ARG.ROUNDED",
|
||||
0xEB66: "MAF",
|
||||
0xEB71: "RTS.14",
|
||||
0xEB72: "ROUND.FAC",
|
||||
0xEB7A: "INCREMENT.MANTISSA",
|
||||
0xEB82: "SIGN",
|
||||
0xEB86: "SIGN1",
|
||||
0xEB88: "SIGN2",
|
||||
0xEB8F: "RTS.15",
|
||||
0xEB90: "SGN",
|
||||
0xEB93: "FLOAT",
|
||||
0xEB9B: "FLOAT.1",
|
||||
0xEBA0: "FLOAT.2",
|
||||
0xEBAF: "ABS",
|
||||
0xEBB2: "FCOMP",
|
||||
0xEBB4: "FCOMP2",
|
||||
0xEBF2: "QINT",
|
||||
0xEC11: "RTS.16",
|
||||
0xEC12: "QINT.2",
|
||||
0xEC23: "INT",
|
||||
0xEC40: "QINT.3",
|
||||
0xEC49: "RTS.17",
|
||||
0xEC4A: "FIN",
|
||||
0xEC61: "FIN.1",
|
||||
0xEC64: "FIN.2",
|
||||
0xEC66: "FIN.3",
|
||||
0xEC87: "FIN.4",
|
||||
0xEC8A: "FIN.5",
|
||||
0xEC8C: "FIN.6",
|
||||
0xEC98: "FIN.10",
|
||||
0xEC9E: "FIN.7",
|
||||
0xECA0: "FIN.8",
|
||||
0xECC1: "FIN.9",
|
||||
0xECD5: "ADDACC",
|
||||
0xECE8: "GETEXP",
|
||||
0xED0A: "CON.99999999.9",
|
||||
0xED0F: "CON.999999999",
|
||||
0xED14: "CON.BILLION",
|
||||
0xED19: "INPRT",
|
||||
0xED24: "LINPRT",
|
||||
0xED2E: "PRINT.FAC",
|
||||
0xED31: "GO.STROUT",
|
||||
0xED34: "FOUT",
|
||||
0xED36: "FOUT.1",
|
||||
0xED8C: "FOUT.2",
|
||||
0xEE17: "FOUT.3",
|
||||
0xEE57: "FOUT.4",
|
||||
0xEE5A: "FOUT.5",
|
||||
0xEE5F: "FOUT.6",
|
||||
0xEE64: "CON.HALF",
|
||||
0xEE69: "DECTBL",
|
||||
0xEE8D: "DECTBL.END",
|
||||
0xEE8D: "SQR",
|
||||
0xEE97: "FPWRT",
|
||||
0xEED0: "NEGOP",
|
||||
0xEEDA: "RTS.18",
|
||||
0xEEDB: "CON.LOG.E",
|
||||
0xEEE0: "POLY.EXP",
|
||||
0xEF09: "EXP",
|
||||
0xEF5C: "POLYNOMIAL.ODD",
|
||||
0xEF72: "POLYNOMIAL",
|
||||
0xEF76: "SERMAIN",
|
||||
0xEFA5: "RTS.19",
|
||||
0xEFA6: "CON.RND.1",
|
||||
0xEFAA: "CON.RND.2",
|
||||
0xEFAE: "RND",
|
||||
0xEFE7: "GO.MOVMF",
|
||||
0xEFEA: "COS",
|
||||
0xEFF1: "SIN",
|
||||
0xF023: "SIN.1",
|
||||
0xF026: "SIN.2",
|
||||
0xF03A: "TAN",
|
||||
0xF062: "TAN.1",
|
||||
0xF066: "CON.PI.HALF",
|
||||
0xF06B: "CON.PI.DOUB",
|
||||
0xF070: "QUARTER",
|
||||
0xF075: "POLY.SIN",
|
||||
0xF09E: "ATN",
|
||||
0xF0CD: "RTS.20",
|
||||
0xF0CE: "POLY.ATN",
|
||||
0xF10B: "GENERIC.CHRGET",
|
||||
0xF128: "COLD.START",
|
||||
0xF128: "GENERIC.END",
|
||||
0xF1D5: "CALL",
|
||||
0xF1DE: "IN.NUMBER",
|
||||
0xF1E5: "PR.NUMBER",
|
||||
0xF1EC: "PLOTFNS",
|
||||
0xF206: "GOERR",
|
||||
0xF209: "LINCOOR",
|
||||
0xF225: "PLOT",
|
||||
0xF232: "HLIN",
|
||||
0xF241: "VLIN",
|
||||
0xF24F: "COLOR",
|
||||
0xF256: "VTAB",
|
||||
0xF262: "SPEED",
|
||||
0xF26D: "TRACE",
|
||||
0xF26F: "NOTRACE",
|
||||
0xF273: "NORMAL",
|
||||
0xF277: "INVERSE",
|
||||
0xF279: "N.I.",
|
||||
0xF27B: "N.I.F.",
|
||||
0xF280: "FLASH",
|
||||
0xF286: "HIMEM",
|
||||
0xF296: "JMM",
|
||||
0xF299: "SETHI",
|
||||
0xF2A6: "LOMEM",
|
||||
0xF2CB: "ONERR",
|
||||
0xF2E9: "HANDLERR",
|
||||
0xF318: "RESUME",
|
||||
0xF32E: "JSYN",
|
||||
0xF331: "DEL",
|
||||
0xF390: "GR",
|
||||
0xF399: "TEXT",
|
||||
0xF39F: "STORE",
|
||||
0xF3BC: "RECALL",
|
||||
0xF3D8: "HGR2",
|
||||
0xF3E2: "HGR",
|
||||
0xF3EA: "SETHPG",
|
||||
0xF3F2: "HCLR",
|
||||
0xF3F6: "BKGND",
|
||||
0xF411: "HPOSN",
|
||||
0xF457: "HPLOT0",
|
||||
0xF465: "MOVE.LEFT.OR.RIGHT",
|
||||
0xF46E: "LR.1",
|
||||
0xF471: "LR.2",
|
||||
0xF476: "LR.3",
|
||||
0xF478: "LR.4",
|
||||
0xF47E: "COLOR.SHIFT",
|
||||
0xF48A: "MOVE.RIGHT",
|
||||
0xF49C: "LRUDX1",
|
||||
0xF49D: "LRUDX2",
|
||||
0xF4B3: "LRUD1",
|
||||
0xF4B4: "LRUD2",
|
||||
0xF4C4: "LRUD3",
|
||||
0xF4C8: "LRUD4",
|
||||
0xF4CD: "CON.03",
|
||||
0xF4D3: "MOVE.UP.OR.DOWN",
|
||||
0xF501: "UD.1",
|
||||
0xF505: "MOVE.DOWN",
|
||||
0xF508: "CON.04",
|
||||
0xF530: "HLINRL",
|
||||
0xF53A: "HGLIN",
|
||||
0xF57C: "MOVEX",
|
||||
0xF581: "MOVEX2",
|
||||
0xF5B2: "MSKTBL",
|
||||
0xF5B9: "CON.1C",
|
||||
0xF5BA: "COSINE.TABLE",
|
||||
0xF5CB: "HFIND",
|
||||
0xF600: "RTS.22",
|
||||
0xF601: "DRAW0",
|
||||
0xF605: "DRAW1",
|
||||
0xF65D: "XDRAW0",
|
||||
0xF661: "XDRAW1",
|
||||
0xF6B9: "HFNS",
|
||||
0xF6E6: "GGERR",
|
||||
0xF6E9: "HCOLOR",
|
||||
0xF6F5: "RTS.23",
|
||||
0xF6F6: "COLORTBL",
|
||||
0xF6FE: "HPLOT",
|
||||
0xF721: "ROT",
|
||||
0xF727: "SCALE",
|
||||
0xF72D: "DRWPNT",
|
||||
0xF769: "DRAW",
|
||||
0xF76F: "XDRAW",
|
||||
0xF775: "SHLOAD",
|
||||
0xF7BC: "TAPEPNT",
|
||||
0xF7D9: "GETARYPT",
|
||||
0xF7E7: "HTAB",
|
||||
0xF800: "MON.PLOT",
|
||||
0xF819: "MON.HLINE",
|
||||
0xF828: "MON.VLINE",
|
||||
0xF864: "MON.SETCOL",
|
||||
0xF871: "MON.SCRN",
|
||||
0xFB1E: "MON.PREAD",
|
||||
0xFB39: "MON.SETTXT",
|
||||
0xFB40: "MON.SETGR",
|
||||
0xFB5B: "MON.TABV",
|
||||
0xFC58: "MON.HOME",
|
||||
0xFCA8: "MON.WAIT",
|
||||
0xFCFA: "MON.RD2BIT",
|
||||
0xFD0C: "MON.RDKEY",
|
||||
0xFD6A: "MON.GETLN",
|
||||
0xFDED: "MON.COUT",
|
||||
0xFE8B: "MON.INPORT",
|
||||
0xFE95: "MON.OUTPORT",
|
||||
0xFECD: "MON.WRITE",
|
||||
0xFEFD: "MON.READ",
|
||||
0xFF02: "MON.READ2"
|
||||
};
|
380
js/thunderclock.js
Normal file
380
js/thunderclock.js
Normal file
@ -0,0 +1,380 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*exported Thunderclock */
|
||||
|
||||
function Thunderclock(mmu, io, slot)
|
||||
{
|
||||
var rom = [
|
||||
0x08,0x78,0x28,0x2c,0x58,0xff,0x70,0x05, // 00
|
||||
0x38,0xb0,0x01,0x18,0xb8,0x08,0x78,0x48,
|
||||
0x8a,0x48,0x98,0x48,0xad,0xff,0xcf,0x20, // 10
|
||||
0x1a,0xc8,0x68,0x68,0xba,0x8d,0xf8,0x07,
|
||||
0x0a,0x0a,0x0a,0x0a,0x8d,0x78,0x07,0x68, // 20
|
||||
0x68,0x68,0xa8,0x68,0x9a,0x09,0x04,0x48,
|
||||
0x28,0x98,0xac,0x78,0x07,0xae,0xf8,0x07, // 30
|
||||
0x29,0x7f,0x48,0x50,0x0e,0xb8,0xa5,0x36,
|
||||
0xd0,0x04,0xe4,0x37,0xf0,0x0a,0xa9,0x08, // 40
|
||||
0x85,0x38,0x38,0x90,0x16,0x4c,0x50,0xc9,
|
||||
0xa9,0x0b,0x85,0x36,0xa9,0x5e,0x9d,0xb8, // 50
|
||||
0x04,0xa9,0x0a,0x9d,0x38,0x04,0xa9,0x00,
|
||||
0x9d,0x38,0x05,0x68,0xc9,0x25,0xf0,0x5c, // 60
|
||||
0xc9,0x26,0xf0,0x58,0xc9,0x3c,0xf0,0x54,
|
||||
0xc9,0x3e,0xf0,0x50,0xc9,0x23,0xf0,0x4c, // 70
|
||||
0xc9,0x5e,0xf0,0x5a,0xc9,0x21,0xf0,0x4a,
|
||||
0xc9,0x2a,0xf0,0x52,0xa2,0x20,0xc9,0x2c, // 80
|
||||
0xf0,0x52,0xa2,0x28,0xc9,0x2e,0xf0,0x4c,
|
||||
0xa2,0x30,0xc9,0x2f,0xf0,0x46,0xae,0xf8, // 90
|
||||
0x07,0x48,0xbd,0xb8,0x04,0xc9,0x21,0xf0,
|
||||
0x41,0xc9,0x5e,0xf0,0x0e,0x68,0x29,0x1f, // A0
|
||||
0x0a,0x38,0xe9,0x01,0x9d,0x38,0x04,0xa9,
|
||||
0x5e,0xd0,0x23,0x68,0x38,0xe9,0x41,0x30, // B0
|
||||
0x20,0xc9,0x16,0x10,0x1c,0xaa,0xbd,0x8d,
|
||||
0xcb,0x4c,0x04,0xcb,0x9d,0x38,0x05,0x4c, // C0
|
||||
0x2f,0xc9,0xa9,0x20,0x20,0xb7,0xca,0xa9,
|
||||
0x08,0x20,0xb7,0xca,0xa9,0x21,0x9d,0xb8, // D0
|
||||
0x04,0x4c,0x2f,0xc9,0x8a,0x20,0xb7,0xca,
|
||||
0xd0,0xf7,0x68,0xc9,0x0d,0xf0,0x13,0xc9, // E0
|
||||
0x20,0xf0,0x44,0x29,0x0f,0x20,0xcf,0xca,
|
||||
0xf0,0x02,0xa9,0x0a,0x9d,0x38,0x07,0x18, // F0
|
||||
0x90,0x35,0x20,0xcf,0xca,0x7d,0x38,0x07,
|
||||
0x48,0xa9,0x09,0x9d,0x38,0x06,0x20,0xcf, // 00
|
||||
0xca,0x48,0xde,0x38,0x06,0xd0,0xf7,0xa9,
|
||||
0x0a,0x9d,0x38,0x06,0x68,0x20,0xcf,0xca,
|
||||
0xde,0x38,0x06,0xd0,0xf7,0xa9,0x10,0x20,
|
||||
0xb7,0xca,0xd0,0xb2,0xba,0x68,0x68,0x98,
|
||||
0x48,0x68,0x68,0xa9,0x8d,0x48,0x9a,0xae,
|
||||
0xf8,0x07,0xac,0x78,0x07,0xbd,0xb8,0x03,
|
||||
0xdd,0x38,0x07,0xd0,0x0c,0x1d,0x38,0x07,
|
||||
0xf0,0x07,0xc9,0x40,0xd0,0x03,0x99,0x80,
|
||||
0xc0,0x68,0xa8,0x68,0xaa,0x68,0x28,0x60,
|
||||
0x68,0xa9,0x18,0x20,0xb7,0xca,0xa9,0x08,
|
||||
0x20,0xb7,0xca,0xa9,0x09,0x9d,0x38,0x06,
|
||||
0x20,0xcf,0xca,0xc9,0x0a,0x30,0x02,0xa9,
|
||||
0x00,0x48,0xde,0x38,0x06,0xd0,0xf1,0x20,
|
||||
0xcf,0xca,0xc9,0x0d,0x30,0x02,0xa9,0x00,
|
||||
0x48,0xbd,0x38,0x05,0xf0,0x04,0xc9,0x23,
|
||||
0xd0,0x5e,0xa0,0x00,0x68,0xc9,0x0a,0x30,
|
||||
0x04,0xc8,0x38,0xe9,0x0a,0x48,0x98,0xa2,
|
||||
0x00,0x20,0xa6,0xca,0x68,0x20,0xa6,0xca,
|
||||
0xac,0xf8,0x07,0xb9,0x38,0x05,0xd0,0x2a,
|
||||
0xa9,0xaf,0x20,0xa8,0xca,0x68,0xa0,0x04,
|
||||
0x68,0x20,0xa6,0xca,0x68,0x20,0xa6,0xca,
|
||||
0x88,0xf0,0x07,0xa9,0x3b,0x20,0xa8,0xca,
|
||||
0xd0,0xee,0xa9,0xa0,0x8d,0x05,0x02,0xb9,
|
||||
0xf3,0xcb,0xf0,0x19,0x20,0xa8,0xca,0xc8,
|
||||
0xd0,0xf5,0xa9,0x00,0x48,0xa0,0x05,0x20,
|
||||
0xaf,0xca,0x68,0x20,0xa6,0xca,0x68,0x20,
|
||||
0xa6,0xca,0x88,0xd0,0xf2,0x4c,0x9a,0xca,
|
||||
0x68,0xaa,0x68,0x0a,0x0a,0xa8,0x8a,0x0a,
|
||||
0x0a,0x48,0xae,0xf8,0x07,0xbd,0x38,0x05,
|
||||
0xa2,0xa0,0xc9,0x3c,0xb0,0x02,0xa2,0xa2,
|
||||
0x8a,0xa2,0x00,0x20,0xa8,0xca,0xb9,0xa3,
|
||||
0xcb,0xc8,0x20,0xa8,0xca,0xc9,0xa0,0xd0,
|
||||
0xf5,0x68,0xa8,0xb9,0xbf,0xcb,0xc8,0x20,
|
||||
0xa8,0xca,0xc9,0xa0,0xd0,0xf5,0x68,0x20,
|
||||
0xa4,0xca,0x68,0x20,0xa6,0xca,0x20,0xb3,
|
||||
0xca,0xa0,0x03,0x68,0x20,0xa4,0xca,0xd0,
|
||||
0x03,0x20,0xa6,0xca,0x68,0x20,0xa6,0xca,
|
||||
0x88,0xf0,0x09,0xa9,0xba,0x20,0xa8,0xca,
|
||||
0x68,0x4c,0x29,0xca,0xac,0xf8,0x07,0xb9,
|
||||
0x38,0x05,0xc9,0x25,0xf0,0x04,0xc9,0x3e,
|
||||
0xd0,0x50,0xa0,0x41,0xad,0x0c,0x02,0xc9,
|
||||
0xa0,0xd0,0x02,0xa9,0x30,0x0a,0x0a,0x0a,
|
||||
0x0a,0x8d,0x20,0x02,0xad,0x0d,0x02,0x29,
|
||||
0x0f,0x0d,0x20,0x02,0xc9,0x12,0x30,0x02,
|
||||
0xa0,0x50,0xc9,0x00,0xd0,0x04,0xa9,0x12,
|
||||
0xd0,0x09,0xc9,0x13,0x30,0x16,0xf8,0x38,
|
||||
0xe9,0x12,0xd8,0xa2,0x0c,0x48,0x20,0xff,
|
||||
0xca,0x29,0x0f,0x20,0xa4,0xca,0x68,0x29,
|
||||
0x0f,0x20,0xa6,0xca,0xa2,0x14,0x20,0xb3,
|
||||
0xca,0x98,0x20,0xa8,0xca,0xa9,0x4d,0x20,
|
||||
0xa8,0xca,0x8a,0xa8,0xa9,0x8d,0x20,0xa8,
|
||||
0xca,0x4c,0x24,0xc9,0xf0,0x0d,0x09,0x30,
|
||||
0x09,0x80,0x9d,0x00,0x02,0xe8,0x60,0xa9,
|
||||
0xac,0xd0,0xf5,0xa9,0xa0,0xd0,0xf1,0x99,
|
||||
0x80,0xc0,0x09,0x04,0x99,0x80,0xc0,0x20,
|
||||
0xc7,0xca,0x49,0x04,0x99,0x80,0xc0,0x20,
|
||||
0xca,0xca,0x48,0x48,0x68,0x68,0x60,0x48,
|
||||
0xa9,0x04,0x9d,0xb8,0x06,0xa9,0x00,0x9d,
|
||||
0xb8,0x05,0xb9,0x80,0xc0,0x0a,0x7e,0xb8,
|
||||
0x05,0x68,0x48,0x29,0x01,0x99,0x80,0xc0,
|
||||
0x09,0x02,0x99,0x80,0xc0,0x49,0x02,0x99,
|
||||
0x80,0xc0,0x68,0x6a,0x48,0xde,0xb8,0x06,
|
||||
0xd0,0xe0,0x68,0xbd,0xb8,0x05,0x18,0x6a,
|
||||
0x6a,0x6a,0x6a,0x60,0x48,0xae,0xf8,0x07,
|
||||
0xbd,0x38,0x04,0x9d,0xb8,0x06,0x20,0x50,
|
||||
0xcb,0x68,0x48,0x20,0x4c,0xcb,0x68,0x48,
|
||||
0x49,0xf8,0x20,0x4c,0xcb,0xa2,0xa0,0x20,
|
||||
0x69,0xcb,0xa2,0xa0,0x20,0x69,0xcb,0xa0,
|
||||
0x18,0x20,0x60,0xcb,0xae,0xf8,0x07,0xde,
|
||||
0xb8,0x06,0xd0,0xda,0x68,0xa0,0xbc,0xca,
|
||||
0xd0,0xfd,0x88,0xd0,0xfa,0x4c,0x2f,0xc9,
|
||||
0x48,0x90,0x05,0x20,0x50,0xcb,0xf0,0x03,
|
||||
0x20,0x59,0xcb,0x68,0x0a,0xd0,0xf1,0x60,
|
||||
0xa2,0x50,0x20,0x69,0xcb,0xa0,0x28,0xd0,
|
||||
0x07,0xa2,0x18,0x20,0x69,0xcb,0xa0,0x44,
|
||||
0xa2,0x13,0xca,0xd0,0xfd,0x88,0xd0,0xf8,
|
||||
0x60,0xac,0x78,0x07,0xa9,0x20,0x99,0x80,
|
||||
0xc0,0xea,0xea,0xea,0x49,0x20,0x99,0x80,
|
||||
0xc0,0xea,0xea,0xea,0x49,0x20,0x99,0x80,
|
||||
0xc0,0xea,0xea,0xea,0x49,0x20,0x99,0x80,
|
||||
0xc0,0xca,0xd0,0xe0,0x60,0x64,0xe4,0x24,
|
||||
0xa4,0x14,0x94,0x54,0xd4,0x74,0xf4,0x34,
|
||||
0xb4,0x04,0x84,0x44,0xc4,0x2c,0x3c,0x5c,
|
||||
0x4c,0x1c,0x0c,0x53,0x55,0x4e,0x20,0x4d,
|
||||
0x4f,0x4e,0x20,0x54,0x55,0x45,0x20,0x57,
|
||||
0x45,0x44,0x20,0x54,0x48,0x55,0x20,0x46,
|
||||
0x52,0x49,0x20,0x53,0x41,0x54,0x20,0x45,
|
||||
0x52,0x52,0x20,0x4a,0x41,0x4e,0x20,0x46,
|
||||
0x45,0x42,0x20,0x4d,0x41,0x52,0x20,0x41,
|
||||
0x50,0x52,0x20,0x4d,0x41,0x59,0x20,0x4a,
|
||||
0x55,0x4e,0x20,0x4a,0x55,0x4c,0x20,0x41,
|
||||
0x55,0x47,0x20,0x53,0x45,0x50,0x20,0x4f,
|
||||
0x43,0x54,0x20,0x4e,0x4f,0x56,0x20,0x44,
|
||||
0x45,0x43,0x20,0xae,0xb0,0xb0,0xb0,0x00,
|
||||
0xae,0xb0,0xb0,0xb0,0x00,0xa0,0xa0,0xc1,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
];
|
||||
|
||||
var LOC = {
|
||||
CONTROL: 0x80
|
||||
};
|
||||
|
||||
var FLAGS = {
|
||||
DATA: 0x01,
|
||||
CLOCK: 0x02,
|
||||
STROBE: 0x04
|
||||
};
|
||||
|
||||
function _init() {
|
||||
LOC.CONTROL += slot * 0x10;
|
||||
}
|
||||
|
||||
var auxRomFn = {
|
||||
start: function auxRom_start() {
|
||||
return 0xc8;
|
||||
},
|
||||
end: function auxRom_end() {
|
||||
return 0xcf;
|
||||
},
|
||||
read: function auxRom_read(page, off) {
|
||||
return rom[(page - 0xc8) * 256 + off];
|
||||
},
|
||||
write: function auxRom_write() {}
|
||||
};
|
||||
|
||||
var _command = 0;
|
||||
var _bits = [];
|
||||
|
||||
function _calcbits() {
|
||||
function shift(val) {
|
||||
for (var idx = 0; idx < 4; idx++) {
|
||||
_bits.push((val & 0x08) !== 0);
|
||||
val <<= 1;
|
||||
}
|
||||
}
|
||||
function shiftBCD(val) {
|
||||
shift(parseInt(val / 10, 10));
|
||||
shift(parseInt(val % 10, 10));
|
||||
}
|
||||
|
||||
var now = new Date();
|
||||
var day = now.getDate();
|
||||
var weekday = now.getDay();
|
||||
var month = now.getMonth() + 1;
|
||||
var hour = now.getHours();
|
||||
var minutes = now.getMinutes();
|
||||
var seconds = now.getSeconds();
|
||||
|
||||
_bits = [];
|
||||
shift(month);
|
||||
shift(weekday);
|
||||
shiftBCD(day);
|
||||
shiftBCD(hour);
|
||||
shiftBCD(minutes);
|
||||
shiftBCD(seconds);
|
||||
}
|
||||
|
||||
function _access(off, val) {
|
||||
switch (off) {
|
||||
case LOC.CONTROL:
|
||||
if (val !== undefined) {
|
||||
if (val & FLAGS.STROBE) {
|
||||
if ((_command & 0x78) == 0x18) {
|
||||
_calcbits();
|
||||
}
|
||||
}
|
||||
_command = val;
|
||||
} else {
|
||||
if (_bits.pop()) {
|
||||
_command |= 0x80;
|
||||
} else {
|
||||
_command &= 0x7f;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return _command;
|
||||
}
|
||||
|
||||
_init();
|
||||
|
||||
return {
|
||||
start: function thunderclock_start() {
|
||||
io.registerSwitches(this, LOC);
|
||||
return 0xc0 + slot;
|
||||
},
|
||||
end: function thunderclock_end() {
|
||||
return 0xc0 + slot;
|
||||
},
|
||||
read: function thunderclock_read(page, off) {
|
||||
mmu.auxRom(slot, auxRomFn);
|
||||
|
||||
return rom[off];
|
||||
},
|
||||
write: function thunderclock_write() {
|
||||
mmu.auxRom(slot, auxRomFn);
|
||||
},
|
||||
ioSwitch: function thunderclock_ioSwitch(off, val) {
|
||||
return _access(off, val);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
1
js/ui/.gitignore
vendored
Normal file
1
js/ui/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
ui-all*.js
|
32
js/ui/Makefile
Normal file
32
js/ui/Makefile
Normal file
@ -0,0 +1,32 @@
|
||||
COMPRESS = java -jar $(HOME)/bin/compiler.jar --warning_level QUIET
|
||||
JSLINT = jshint
|
||||
|
||||
JSFILES = copyright.js keyboard2.js printer.js
|
||||
|
||||
JSFILES2E = copyright.js keyboard2e.js printer.js
|
||||
|
||||
ALLJS = ${JSFILES} ${JSFILES2E}
|
||||
CHECKEDJS := $(patsubst %.js,.checked-%.js,${ALLJS})
|
||||
|
||||
default: ui-all.min.js ui-all2e.min.js
|
||||
|
||||
ui-all.min.js: ui-all.js
|
||||
$(COMPRESS) < ui-all.js > ui-all.min.js
|
||||
|
||||
ui-all2e.min.js: ui-all2e.js
|
||||
$(COMPRESS) < ui-all2e.js > ui-all2e.min.js
|
||||
|
||||
ui-all.js: $(JSFILES) Makefile
|
||||
cat $(JSFILES) > ui-all.js
|
||||
|
||||
ui-all2e.js: $(JSFILES2E) Makefile
|
||||
cat $(JSFILES2E) > ui-all2e.js
|
||||
|
||||
clean:
|
||||
$(RM) -f ui-all.js ui-all.min.js ui-all2e.js ui-all2e.min.js .checked-*
|
||||
|
||||
lint: $(CHECKEDJS)
|
||||
|
||||
.checked-%.js: %.js
|
||||
$(JSLINT) $<
|
||||
@touch $@
|
11
js/ui/copyright.js
Normal file
11
js/ui/copyright.js
Normal file
@ -0,0 +1,11 @@
|
||||
/*!
|
||||
* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
278
js/ui/keyboard2.js
Normal file
278
js/ui/keyboard2.js
Normal file
@ -0,0 +1,278 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*jshint jquery: true, browser: true */
|
||||
/*globals debug: false, toHex: false, reset: false */
|
||||
/*exported KeyBoard */
|
||||
|
||||
// keycode: [plain, cntl, shift]
|
||||
|
||||
function KeyBoard(io) {
|
||||
var keymap = {
|
||||
// Most of these won't happen
|
||||
0x00: [0x00, 0x00, 0x00], //
|
||||
0x01: [0x01, 0x01, 0x01], //
|
||||
0x02: [0x02, 0x02, 0x02], //
|
||||
0x03: [0x03, 0x03, 0x03], //
|
||||
0x04: [0x04, 0x04, 0x04], //
|
||||
0x05: [0x05, 0x05, 0x05], //
|
||||
0x06: [0x06, 0x06, 0x06], //
|
||||
0x07: [0x07, 0x07, 0x07], //
|
||||
0x08: [0x08, 0x08, 0x08], // BS
|
||||
0x09: [0x09, 0x09, 0x09], // TAB
|
||||
0x0A: [0x0A, 0x0A, 0x0A], //
|
||||
0x0B: [0x0B, 0x0B, 0x0B], //
|
||||
0x0C: [0x0C, 0x0C, 0x0C], //
|
||||
0x0D: [0x0D, 0x0D, 0x0D], // CR
|
||||
0x0E: [0x0E, 0x0E, 0x0E], //
|
||||
0x0F: [0x0F, 0x0F, 0x0F], //
|
||||
|
||||
0x10: [0xff, 0xff, 0xff], // SHIFT
|
||||
0x11: [0xff, 0xff, 0xff], // CTRL
|
||||
0x12: [0xff, 0xff, 0xff], // OPTION
|
||||
0x13: [0x13, 0x13, 0x13], //
|
||||
0x14: [0x14, 0x14, 0x14], //
|
||||
0x15: [0x15, 0x15, 0x15], //
|
||||
0x16: [0x16, 0x16, 0x16], //
|
||||
0x17: [0x17, 0x17, 0x18], //
|
||||
0x18: [0x18, 0x18, 0x18], //
|
||||
0x19: [0x19, 0x19, 0x19], //
|
||||
0x1A: [0x1A, 0x1A, 0x1A], //
|
||||
0x1B: [0x1B, 0x1B, 0x1B], // ESC
|
||||
0x1C: [0x1C, 0x1C, 0x1C], //
|
||||
0x1D: [0x1D, 0x1D, 0x1D], //
|
||||
0x1E: [0x1E, 0x1E, 0x1E], //
|
||||
0x1F: [0x1F, 0x1F, 0x1F], //
|
||||
|
||||
// Most of these besides space won't happen
|
||||
0x20: [0x20, 0x20, 0x20], //
|
||||
0x21: [0x21, 0x21, 0x21], //
|
||||
0x22: [0x22, 0x22, 0x22], //
|
||||
0x23: [0x23, 0x23, 0x23], //
|
||||
0x24: [0x24, 0x24, 0x24], //
|
||||
0x25: [0x08, 0x08, 0x08], // <- left
|
||||
0x26: [0x0B, 0x0B, 0x0B], // ^ up
|
||||
0x27: [0x15, 0x15, 0x15], // -> right
|
||||
0x28: [0x0A, 0x0A, 0x0A], // v down
|
||||
0x29: [0x29, 0x29, 0x29], // )
|
||||
0x2A: [0x2A, 0x2A, 0x2A], // *
|
||||
0x2B: [0x2B, 0x2B, 0x2B], // +
|
||||
0x2C: [0x2C, 0x2C, 0x3C], // , - <
|
||||
0x2D: [0x2D, 0x2D, 0x5F], // - - _
|
||||
0x2E: [0x2E, 0x2E, 0x3E], // . - >
|
||||
0x2F: [0x2F, 0x2F, 0x3F], // / - ?
|
||||
|
||||
0x30: [0x30, 0x30, 0x29], // 0 - )
|
||||
0x31: [0x31, 0x31, 0x21], // 1 - !
|
||||
0x32: [0x32, 0x00, 0x40], // 2 - @
|
||||
0x33: [0x33, 0x33, 0x23], // 3 - #
|
||||
0x34: [0x34, 0x34, 0x24], // 4 - $
|
||||
0x35: [0x35, 0x35, 0x25], // 5 - %
|
||||
0x36: [0x36, 0x36, 0x5E], // 6 - ^
|
||||
0x37: [0x37, 0x37, 0x26], // 7 - &
|
||||
0x38: [0x38, 0x38, 0x2A], // 8 - *
|
||||
0x39: [0x39, 0x39, 0x28], // 9 - (
|
||||
0x3A: [0x3A, 0x3A, 0x3A], // :
|
||||
0x3B: [0x3B, 0x3B, 0x3A], // ; - :
|
||||
0x3C: [0x3C, 0x3C, 0x3C], // <
|
||||
0x3D: [0x3D, 0x3D, 0x2B], // = - +
|
||||
0x3E: [0x3E, 0x3E, 0x3E], // >
|
||||
0x3F: [0x3F, 0x3F, 0x3F], // ?
|
||||
|
||||
// Alpha and control
|
||||
0x40: [0x40, 0x00, 0x40], // @
|
||||
0x41: [0x41, 0x01, 0x41], // A
|
||||
0x42: [0x42, 0x02, 0x42], // B
|
||||
0x43: [0x43, 0x03, 0x43], // C - BRK
|
||||
0x44: [0x44, 0x04, 0x44], // D
|
||||
0x45: [0x45, 0x05, 0x45], // E
|
||||
0x46: [0x46, 0x06, 0x46], // F
|
||||
0x47: [0x47, 0x07, 0x47], // G - BELL
|
||||
0x48: [0x48, 0x08, 0x48], // H
|
||||
0x49: [0x49, 0x09, 0x49], // I - TAB
|
||||
0x4A: [0x4A, 0x0A, 0x4A], // J - NL
|
||||
0x4B: [0x4B, 0x0B, 0x4B], // K - VT
|
||||
0x4C: [0x4C, 0x0C, 0x4C], // L
|
||||
0x4D: [0x4D, 0x0D, 0x4D], // M - CR
|
||||
0x4E: [0x4E, 0x0E, 0x4E], // N
|
||||
0x4F: [0x4F, 0x0F, 0x4F], // O
|
||||
|
||||
0x50: [0x50, 0x10, 0x50], // P
|
||||
0x51: [0x51, 0x11, 0x51], // Q
|
||||
0x52: [0x52, 0x12, 0x52], // R
|
||||
0x53: [0x53, 0x13, 0x53], // S
|
||||
0x54: [0x54, 0x14, 0x54], // T
|
||||
0x55: [0x55, 0x15, 0x55], // U
|
||||
0x56: [0x56, 0x16, 0x56], // V
|
||||
0x57: [0x57, 0x17, 0x57], // W
|
||||
0x58: [0x58, 0x18, 0x58], // X
|
||||
0x59: [0x59, 0x19, 0x59], // Y
|
||||
0x5A: [0x5A, 0x1A, 0x5A], // Z
|
||||
// 0x5B: [0x5B, 0x1B, 0x5B], // [ - ESC
|
||||
// 0x5C: [0x5C, 0x1C, 0x5C], // \
|
||||
// 0x5D: [0x5D, 0x1D, 0x5D], // ]
|
||||
0x5E: [0x5E, 0x1E, 0x5E], // ^
|
||||
0x5F: [0x5F, 0x1F, 0x5F], // _
|
||||
|
||||
// Stray keys
|
||||
0xBA: [0x3B, 0x3B, 0x3A], // ; - :
|
||||
0xBB: [0x3D, 0x3D, 0x2B], // = - +
|
||||
0xBC: [0x2C, 0x2C, 0x3C], // , - <
|
||||
0xBD: [0x2D, 0x2D, 0x5F], // - - _
|
||||
0xBE: [0x2E, 0x2E, 0x3E], // . - >
|
||||
0xBF: [0x2F, 0x2F, 0x3F], // / - ?
|
||||
0xDB: [0x5B, 0x5B, 0x5B], // [
|
||||
0xDC: [0x5C, 0x5C, 0x5C], // \
|
||||
0xDD: [0x5D, 0x5D, 0x5D], // ]
|
||||
0xDE: [0x27, 0x27, 0x22], // ' - "
|
||||
|
||||
0xFF: [0xFF, 0xFF, 0xFF] // No comma line
|
||||
};
|
||||
|
||||
var keys =
|
||||
[[['1','2','3','4','5','6','7','8','9','0',':','-','RESET'],
|
||||
['ESC','Q','W','E','R','T','Y','U','I','O','P','REPT','RETURN'],
|
||||
['CTRL','A','S','D','F','G','H','J','K','L',';','←','→'],
|
||||
['SHIFT','Z','X','C','V','B','N','M',',','.','/','SHIFT'],
|
||||
['POWER', ' ']],
|
||||
[['!','"','#','$','%','&',"'",'(',')','0','*','=','RESET'],
|
||||
['ESC','Q','W','E','R','T','Y','U','I','O','@','REPT','RETURN'],
|
||||
['CTRL','A','S','D','F','BELL','H','J','K','L','+','←','→'],
|
||||
['SHIFT','Z','X','C','V','B','^','M','<','>','?','SHIFT'],
|
||||
['POWER', ' ']]];
|
||||
|
||||
var shifted = false;
|
||||
var controlled = false;
|
||||
|
||||
return {
|
||||
mapKeyEvent: function keyboard_mapKeyEvent(evt) {
|
||||
var code = evt.keyCode;
|
||||
|
||||
if (code in keymap) {
|
||||
return keymap[code][evt.shiftKey ? 2 : (evt.ctrlKey ? 1 : 0)];
|
||||
}
|
||||
|
||||
debug("Unhandled key = " + toHex(code));
|
||||
return 0xFF;
|
||||
},
|
||||
|
||||
create: function keyboard_create(kb) {
|
||||
var x, y, row, key, key1, key2, label, label1, label2;
|
||||
|
||||
kb.disableSelection();
|
||||
|
||||
function buildLabel(k) {
|
||||
var span = $("<span>" + k + "</span>");
|
||||
if (k.length > 1 && k.substr(0,1) != '&')
|
||||
span.addClass("small");
|
||||
return span;
|
||||
}
|
||||
|
||||
function _mousedown() {
|
||||
$(this).addClass("pressed");
|
||||
}
|
||||
|
||||
function _mouseup() {
|
||||
$(this).removeClass("pressed");
|
||||
}
|
||||
|
||||
function _click() {
|
||||
var self = this,
|
||||
key = $(self).data(shifted ? "key2" : "key1");
|
||||
switch (key) {
|
||||
case "BELL":
|
||||
key = "G";
|
||||
break;
|
||||
case "RETURN":
|
||||
key = "\r";
|
||||
break;
|
||||
case "←":
|
||||
key = "\010";
|
||||
break;
|
||||
case "→":
|
||||
key = "\025";
|
||||
break;
|
||||
case " ":
|
||||
key = " ";
|
||||
break;
|
||||
case "ESC":
|
||||
key = "\033";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (key.length > 1) {
|
||||
switch (key) {
|
||||
case "SHIFT":
|
||||
shifted = !shifted;
|
||||
$("#keyboard .key-SHIFT").toggleClass("shifted");
|
||||
break;
|
||||
case "CTRL":
|
||||
controlled = !controlled;
|
||||
$("#keyboard .key-CTRL").toggleClass("controlled");
|
||||
break;
|
||||
case "RESET":
|
||||
reset();
|
||||
break;
|
||||
case "POWER":
|
||||
if (window.confirm("Power Cycle?"))
|
||||
window.location.reload();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (controlled && key >= "@" && key <= "_") {
|
||||
io.keyDown(key.charCodeAt(0) - 0x40);
|
||||
} else {
|
||||
io.keyDown(key.charCodeAt(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (y = 0; y < 5; y++) {
|
||||
row = $("<div class='row row" + y + "'/>");
|
||||
kb.append(row);
|
||||
for (x = 0; x < keys[0][y].length; x++) {
|
||||
key1 = keys[0][y][x];
|
||||
key2 = keys[1][y][x];
|
||||
|
||||
label = $("<div />");
|
||||
label1 = buildLabel(key1);
|
||||
label2 = buildLabel(key2);
|
||||
|
||||
key = $("<div class='key'>");
|
||||
key.addClass("key-" + key1.replace(/[&;]/g,""));
|
||||
|
||||
if (key1.length > 1)
|
||||
key.addClass("vcenter");
|
||||
|
||||
if (key1 != key2) {
|
||||
key.addClass("key-" + key2.replace(/[&;]/g,""));
|
||||
label.append(label2);
|
||||
label.append("<br/>");
|
||||
}
|
||||
label.append(label1);
|
||||
key.append(label);
|
||||
key.data({"key1": key1, "key2": key2});
|
||||
key.bind("mousedown", _mousedown);
|
||||
key.bind("mouseup mouseout", _mouseup);
|
||||
|
||||
key.click(_click);
|
||||
row.append(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
378
js/ui/keyboard2e.js
Normal file
378
js/ui/keyboard2e.js
Normal file
@ -0,0 +1,378 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*jshint jquery: true, browser: true */
|
||||
/*globals debug: false, toHex: false */
|
||||
/*exported KeyBoard */
|
||||
|
||||
function KeyBoard(io) {
|
||||
// keycode: [plain, cntl, shift]
|
||||
var keymap = {
|
||||
// Most of these won't happen
|
||||
0x00: [0x00, 0x00, 0x00], //
|
||||
0x01: [0x01, 0x01, 0x01], //
|
||||
0x02: [0x02, 0x02, 0x02], //
|
||||
0x03: [0x03, 0x03, 0x03], //
|
||||
0x04: [0x04, 0x04, 0x04], //
|
||||
0x05: [0x05, 0x05, 0x05], //
|
||||
0x06: [0x06, 0x06, 0x06], //
|
||||
0x07: [0x07, 0x07, 0x07], //
|
||||
0x08: [0x7F, 0x7F, 0x7F], // BS/DELETE
|
||||
0x09: [0x09, 0x09, 0x09], // TAB
|
||||
0x0A: [0x0A, 0x0A, 0x0A], //
|
||||
0x0B: [0x0B, 0x0B, 0x0B], //
|
||||
0x0C: [0x0C, 0x0C, 0x0C], //
|
||||
0x0D: [0x0D, 0x0D, 0x0D], // CR
|
||||
0x0E: [0x0E, 0x0E, 0x0E], //
|
||||
0x0F: [0x0F, 0x0F, 0x0F], //
|
||||
|
||||
0x10: [0xff, 0xff, 0xff], // SHIFT
|
||||
0x11: [0xff, 0xff, 0xff], // CTRL
|
||||
0x12: [0xff, 0xff, 0xff], // ALT/OPTION
|
||||
0x13: [0x13, 0x13, 0x13], //
|
||||
0x14: [0x14, 0x14, 0x14], //
|
||||
0x15: [0x15, 0x15, 0x15], //
|
||||
0x16: [0x16, 0x16, 0x16], //
|
||||
0x17: [0x17, 0x17, 0x18], //
|
||||
0x18: [0x18, 0x18, 0x18], //
|
||||
0x19: [0x19, 0x19, 0x19], //
|
||||
0x1A: [0x1A, 0x1A, 0x1A], //
|
||||
0x1B: [0x1B, 0x1B, 0x1B], // ESC
|
||||
0x1C: [0x1C, 0x1C, 0x1C], //
|
||||
0x1D: [0x1D, 0x1D, 0x1D], //
|
||||
0x1E: [0x1E, 0x1E, 0x1E], //
|
||||
0x1F: [0x1F, 0x1F, 0x1F], //
|
||||
|
||||
// Most of these besides space won't happen
|
||||
0x20: [0x20, 0x20, 0x20], //
|
||||
0x21: [0x21, 0x21, 0x21], //
|
||||
0x22: [0x22, 0x22, 0x22], //
|
||||
0x23: [0x23, 0x23, 0x23], //
|
||||
0x24: [0x24, 0x24, 0x24], //
|
||||
0x25: [0x08, 0x08, 0x08], // <- left
|
||||
0x26: [0x0B, 0x0B, 0x0B], // ^ up
|
||||
0x27: [0x15, 0x15, 0x15], // -> right
|
||||
0x28: [0x0A, 0x0A, 0x0A], // v down
|
||||
0x29: [0x29, 0x29, 0x29], // )
|
||||
0x2A: [0x2A, 0x2A, 0x2A], // *
|
||||
0x2B: [0x2B, 0x2B, 0x2B], // +
|
||||
0x2C: [0x2C, 0x2C, 0x3C], // , - <
|
||||
0x2D: [0x2D, 0x2D, 0x5F], // - - _
|
||||
0x2E: [0x2E, 0x2E, 0x3E], // . - >
|
||||
0x2F: [0x2F, 0x2F, 0x3F], // / - ?
|
||||
|
||||
0x30: [0x30, 0x30, 0x29], // 0 - )
|
||||
0x31: [0x31, 0x31, 0x21], // 1 - !
|
||||
0x32: [0x32, 0x00, 0x40], // 2 - @
|
||||
0x33: [0x33, 0x33, 0x23], // 3 - #
|
||||
0x34: [0x34, 0x34, 0x24], // 4 - $
|
||||
0x35: [0x35, 0x35, 0x25], // 5 - %
|
||||
0x36: [0x36, 0x36, 0x5E], // 6 - ^
|
||||
0x37: [0x37, 0x37, 0x26], // 7 - &
|
||||
0x38: [0x38, 0x38, 0x2A], // 8 - *
|
||||
0x39: [0x39, 0x39, 0x28], // 9 - (
|
||||
0x3A: [0x3A, 0x3A, 0x3A], // :
|
||||
0x3B: [0x3B, 0x3B, 0x3A], // ; - :
|
||||
0x3C: [0x3C, 0x3C, 0x3C], // <
|
||||
0x3D: [0x3D, 0x3D, 0x2B], // = - +
|
||||
0x3E: [0x3E, 0x3E, 0x3E], // >
|
||||
0x3F: [0x3F, 0x3F, 0x3F], // ?
|
||||
|
||||
// Alpha and control
|
||||
0x40: [0x40, 0x00, 0x40], // @
|
||||
0x41: [0x61, 0x01, 0x41], // A
|
||||
0x42: [0x62, 0x02, 0x42], // B
|
||||
0x43: [0x63, 0x03, 0x43], // C - BRK
|
||||
0x44: [0x64, 0x04, 0x44], // D
|
||||
0x45: [0x65, 0x05, 0x45], // E
|
||||
0x46: [0x66, 0x06, 0x46], // F
|
||||
0x47: [0x67, 0x07, 0x47], // G - BELL
|
||||
0x48: [0x68, 0x08, 0x48], // H
|
||||
0x49: [0x69, 0x09, 0x49], // I - TAB
|
||||
0x4A: [0x6A, 0x0A, 0x4A], // J - NL
|
||||
0x4B: [0x6B, 0x0B, 0x4B], // K - VT
|
||||
0x4C: [0x6C, 0x0C, 0x4C], // L
|
||||
0x4D: [0x6D, 0x0D, 0x4D], // M - CR
|
||||
0x4E: [0x6E, 0x0E, 0x4E], // N
|
||||
0x4F: [0x6F, 0x0F, 0x4F], // O
|
||||
|
||||
0x50: [0x70, 0x10, 0x50], // P
|
||||
0x51: [0x71, 0x11, 0x51], // Q
|
||||
0x52: [0x72, 0x12, 0x52], // R
|
||||
0x53: [0x73, 0x13, 0x53], // S
|
||||
0x54: [0x74, 0x14, 0x54], // T
|
||||
0x55: [0x75, 0x15, 0x55], // U
|
||||
0x56: [0x76, 0x16, 0x56], // V
|
||||
0x57: [0x77, 0x17, 0x57], // W
|
||||
0x58: [0x78, 0x18, 0x58], // X
|
||||
0x59: [0x79, 0x19, 0x59], // Y
|
||||
0x5A: [0x7A, 0x1A, 0x5A], // Z
|
||||
0x5B: [0xFF, 0xFF, 0xFF], // Left window
|
||||
0x5C: [0xFF, 0xFF, 0xFF], // Right window
|
||||
0x5D: [0xFF, 0xFF, 0xFF], // Select
|
||||
0x5E: [0x5E, 0x1E, 0x5E], //
|
||||
0x5F: [0x5F, 0x1F, 0x5F], // _
|
||||
|
||||
// Numeric pad
|
||||
0x60: [0x30, 0x30, 0x30], // 0
|
||||
0x61: [0x31, 0x31, 0x31], // 1
|
||||
0x62: [0x32, 0x32, 0x32], // 2
|
||||
0x63: [0x33, 0x33, 0x33], // 3
|
||||
0x64: [0x34, 0x34, 0x34], // 4
|
||||
0x65: [0x35, 0x35, 0x35], // 5
|
||||
0x66: [0x36, 0x36, 0x36], // 6
|
||||
0x67: [0x37, 0x37, 0x37], // 7
|
||||
0x68: [0x38, 0x38, 0x38], // 8
|
||||
0x69: [0x39, 0x39, 0x39], // 9
|
||||
|
||||
0x6A: [0x2A, 0x2A, 0x2A], // *
|
||||
0x6B: [0x2B, 0x2B, 0x2B], // +
|
||||
0x6D: [0x2D, 0x2D, 0x2D], // -
|
||||
0x6E: [0x2E, 0x2E, 0x2E], // .
|
||||
0x6F: [0x2F, 0x2F, 0x39], // /
|
||||
|
||||
// Stray keys
|
||||
0xBA: [0x3B, 0x3B, 0x3A], // ; - :
|
||||
0xBB: [0x3D, 0x3D, 0x2B], // = - +
|
||||
0xBC: [0x2C, 0x2C, 0x3C], // , - <
|
||||
0xBD: [0x2D, 0x2D, 0x5F], // - - _
|
||||
0xBE: [0x2E, 0x2E, 0x3E], // . - >
|
||||
0xBF: [0x2F, 0x2F, 0x3F], // / - ?
|
||||
0xC0: [0x60, 0x60, 0x7E], // ` - ~
|
||||
0xDB: [0x5B, 0x5B, 0x7B], // [
|
||||
0xDC: [0x5C, 0x5C, 0x7C], // \
|
||||
0xDD: [0x5D, 0x5D, 0x7D], // ]
|
||||
0xDE: [0x27, 0x22, 0x22], // ' - "
|
||||
|
||||
0xFF: [0xFF, 0xFF, 0xFF] // No comma line
|
||||
};
|
||||
|
||||
var keys =
|
||||
[[['ESC','1','2','3','4','5','6','7','8','9','0','-','=','DELETE'],
|
||||
['TAB','Q','W','E','R','T','Y','U','I','O','P','[',']','\\'],
|
||||
['CTRL','A','S','D','F','G','H','J','K','L',';','\'','RETURN'],
|
||||
['SHIFT','Z','X','C','V','B','N','M',',','.','/','SHIFT'],
|
||||
['LOCK','`','POW','OPEN_APPLE',' ','CLOSED_APPLE','←','→','↓','↑']],
|
||||
[['ESC','!','@','#','$','%','^','&',"*",'(',')','_','+','DELETE'],
|
||||
['TAB','Q','W','E','R','T','Y','U','I','O','P','{','}','|'],
|
||||
['CTRL','A','S','D','F','G','H','J','K','L',':','"','RETURN'],
|
||||
['SHIFT','Z','X','C','V','B','N','M','<','>','?','SHIFT'],
|
||||
['CAPS','~','POW','OPEN_APPLE',' ','CLOSED_APPLE','←','→','↓','↑']]];
|
||||
|
||||
var shifted = false;
|
||||
var controlled = false;
|
||||
var capslocked = true;
|
||||
var optioned = false;
|
||||
var commanded = false;
|
||||
|
||||
return {
|
||||
mapKeyEvent: function keyboard_mapKeyEvent(evt) {
|
||||
var code = evt.keyCode, key = 0xff;
|
||||
|
||||
if (code in keymap) {
|
||||
key = keymap[code][evt.shiftKey ? 2 : (evt.ctrlKey ? 1 : 0)];
|
||||
if (capslocked && key >= 0x61 && key <= 0x7A)
|
||||
key -= 0x20;
|
||||
} else {
|
||||
debug("Unhandled key = " + toHex(code));
|
||||
}
|
||||
|
||||
return key;
|
||||
},
|
||||
|
||||
shiftKey: function keyboard_shiftKey(down) {
|
||||
shifted = down;
|
||||
if (down) {
|
||||
io.buttonDown(2);
|
||||
$("#keyboard .key-SHIFT").addClass("active");
|
||||
} else {
|
||||
io.buttonUp(2);
|
||||
$("#keyboard .key-SHIFT").removeClass("active");
|
||||
}
|
||||
},
|
||||
|
||||
controlKey: function keyboard_controlKey(down) {
|
||||
controlled = down;
|
||||
if (down) {
|
||||
$("#keyboard .key-CTRL").addClass("active");
|
||||
} else {
|
||||
$("#keyboard .key-CTRL").removeClass("active");
|
||||
}
|
||||
},
|
||||
|
||||
commandKey: function keyboard_commandKey(down) {
|
||||
commanded = down;
|
||||
if (down) {
|
||||
io.buttonDown(0);
|
||||
$("#keyboard .key-OPEN_APPLE").addClass("active");
|
||||
} else {
|
||||
io.buttonUp(0);
|
||||
$("#keyboard .key-OPEN_APPLE").removeClass("active");
|
||||
}
|
||||
},
|
||||
|
||||
optionKey: function keyboard_optionKey(down) {
|
||||
optioned = down;
|
||||
if (down) {
|
||||
io.buttonDown(1);
|
||||
$("#keyboard .key-CLOSED_APPLE").addClass("active");
|
||||
} else {
|
||||
io.buttonUp(1);
|
||||
$("#keyboard .key-CLOSED_APPLE").removeClass("active");
|
||||
}
|
||||
},
|
||||
|
||||
capslockKey: function keyboard_caplockKey(down) {
|
||||
capslocked = down;
|
||||
if (down) {
|
||||
$("#keyboard .key-LOCK").addClass("active");
|
||||
} else {
|
||||
$("#keyboard .key-LOCK").removeClass("active");
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
create: function keyboard_create(kb) {
|
||||
var x, y, row, key, key1, key2, label, label1, label2, self = this;
|
||||
|
||||
kb.disableSelection();
|
||||
|
||||
function buildLabel(k) {
|
||||
var span = $("<span>" + k + "</span>");
|
||||
if (k.length > 1 && k.substr(0,1) != '&')
|
||||
span.addClass("small");
|
||||
return span;
|
||||
}
|
||||
|
||||
function _mousedown() {
|
||||
$(this).addClass("pressed");
|
||||
}
|
||||
|
||||
function _mouseup() {
|
||||
$(this).removeClass("pressed");
|
||||
}
|
||||
|
||||
function _click() {
|
||||
var key = $(this).data(shifted ? "key2" : "key1");
|
||||
switch (key) {
|
||||
case "BELL":
|
||||
key = "G";
|
||||
break;
|
||||
case "RETURN":
|
||||
key = "\r";
|
||||
break;
|
||||
case "TAB":
|
||||
key = "\t";
|
||||
break;
|
||||
case "DELETE":
|
||||
key = "\0177";
|
||||
break;
|
||||
case "←":
|
||||
key = "\010";
|
||||
break;
|
||||
case "→":
|
||||
key = "\025";
|
||||
break;
|
||||
case "↓":
|
||||
key = "\012";
|
||||
break;
|
||||
case "↑":
|
||||
key = "\013";
|
||||
break;
|
||||
case " ":
|
||||
key = " ";
|
||||
break;
|
||||
case "ESC":
|
||||
key = "\033";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (key.length > 1) {
|
||||
switch (key) {
|
||||
case "SHIFT":
|
||||
self.shiftKey(!shifted);
|
||||
break;
|
||||
case "CTRL":
|
||||
self.controlKey(!controlled);
|
||||
break;
|
||||
case "CAPS":
|
||||
case "LOCK":
|
||||
self.capslockKey(!capslocked);
|
||||
break;
|
||||
case "POW":
|
||||
if (window.confirm("Power Cycle?"))
|
||||
window.location.reload();
|
||||
break;
|
||||
case "OPEN_APPLE":
|
||||
self.commandKey(!commanded);
|
||||
break;
|
||||
case "CLOSED_APPLE":
|
||||
self.optionKey(!optioned);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (controlled && key >= "@" && key <= "_") {
|
||||
io.keyDown(key.charCodeAt(0) - 0x40);
|
||||
} else if (!shifted && !capslocked &&
|
||||
key >= 'A' && key <= 'Z') {
|
||||
io.keyDown(key.charCodeAt(0) + 0x20);
|
||||
} else {
|
||||
io.keyDown(key.charCodeAt(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (y = 0; y < 5; y++) {
|
||||
row = $("<div class='row row" + y + "e'/>");
|
||||
kb.append(row);
|
||||
for (x = 0; x < keys[0][y].length; x++) {
|
||||
key1 = keys[0][y][x];
|
||||
key2 = keys[1][y][x];
|
||||
|
||||
label = $("<div />");
|
||||
label1 = buildLabel(key1);
|
||||
label2 = buildLabel(key2);
|
||||
|
||||
key = $("<div class='key'>");
|
||||
key.addClass("key-" + key1.replace(/[&#;]/g,""));
|
||||
|
||||
if (key1.length > 1) {
|
||||
if (key1 == "LOCK")
|
||||
key.addClass("vcenter2");
|
||||
else
|
||||
key.addClass("vcenter");
|
||||
}
|
||||
if (key1 != key2) {
|
||||
key.addClass("key-" + key2.replace(/[&;]/g,""));
|
||||
label.append(label2);
|
||||
label.append("<br/>");
|
||||
}
|
||||
if (key1 == "LOCK")
|
||||
key.addClass("active");
|
||||
|
||||
label.append(label1);
|
||||
key.append(label);
|
||||
key.data({"key1": key1, "key2": key2});
|
||||
key.bind("mousedown", _mousedown);
|
||||
key.bind("mouseup mouseout", _mouseup);
|
||||
key.click(_click);
|
||||
row.append(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
26
js/ui/printer.js
Normal file
26
js/ui/printer.js
Normal file
@ -0,0 +1,26 @@
|
||||
/*jshint browser:true */
|
||||
/*exported Printer */
|
||||
|
||||
function Printer() {
|
||||
var _printer = null;
|
||||
return {
|
||||
putChar: function(val) {
|
||||
if (!_printer || _printer.closed) {
|
||||
_printer = window.open("", "_blank","toolbar=0,location=0");
|
||||
_printer.document.title = "Printer";
|
||||
_printer.document.write("<div style='font: 12px courier'>");
|
||||
_printer.document.write("<span>");
|
||||
window.focus();
|
||||
}
|
||||
var c = String.fromCharCode(val & 0x7f);
|
||||
if (c == '\r') {
|
||||
_printer.document.write("<br /></span>");
|
||||
} else if (c == ' ') {
|
||||
_printer.document.write(" ");
|
||||
} else {
|
||||
_printer.document.write(c);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
109
js/util.js
Normal file
109
js/util.js
Normal file
@ -0,0 +1,109 @@
|
||||
/* -*- mode: JavaScript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation. No representations are made about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*/
|
||||
|
||||
/*jshint rhino:true, browser: true, devel: true */
|
||||
/*exported allocMem, allocMemPages, debug, toHex, toBinary, extend, gup, hup, each */
|
||||
|
||||
if (!Date.now) {
|
||||
Date.now = function now() {
|
||||
return new Date().getTime();
|
||||
};
|
||||
}
|
||||
|
||||
var hex_digits = "0123456789ABCDEF";
|
||||
var bin_digits = "01";
|
||||
|
||||
function allocMem(size) {
|
||||
var result;
|
||||
if (window.Uint8Array) {
|
||||
result = new Uint8Array(size);
|
||||
} else {
|
||||
result = new Array(size);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function allocMemPages(pages) {
|
||||
return allocMem(pages * 0x100);
|
||||
}
|
||||
|
||||
function extend(ary1, ary2) {
|
||||
ary2.forEach(function(val) {
|
||||
ary1.push(val);
|
||||
});
|
||||
return ary1;
|
||||
}
|
||||
|
||||
function debug(msg) {
|
||||
if (typeof(console) != 'undefined' && 'log' in console) {
|
||||
console.log(msg);
|
||||
} else if (typeof(environment) == 'object') { // rhino shell
|
||||
print(msg);
|
||||
}
|
||||
}
|
||||
|
||||
function toHex(v, n) {
|
||||
if (!n) {
|
||||
n = v < 256 ? 2 : 4;
|
||||
}
|
||||
var result = "";
|
||||
for (var idx = 0; idx < n; idx++) {
|
||||
result = hex_digits[v & 0x0f] + result;
|
||||
v >>= 4;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function toBinary(v) {
|
||||
var result = "";
|
||||
for (var idx = 0; idx < 8; idx++) {
|
||||
result = bin_digits[v & 0x01] + result;
|
||||
v >>= 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// From http://www.netlobo.com/url_query_string_javascript.html
|
||||
function gup( name )
|
||||
{
|
||||
name = name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
|
||||
var regexS = "[\\?&]"+name+"=([^&#]*)";
|
||||
var regex = new RegExp( regexS );
|
||||
var results = regex.exec( window.location.href );
|
||||
if( !results )
|
||||
return "";
|
||||
else
|
||||
return results[1];
|
||||
}
|
||||
|
||||
function hup() {
|
||||
var regex = new RegExp("#(.*)");
|
||||
var results = regex.exec(window.location.hash);
|
||||
if ( !results )
|
||||
return "";
|
||||
else
|
||||
return results[1];
|
||||
}
|
||||
|
||||
function keys(obj) {
|
||||
var result = [];
|
||||
for (var key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function each(obj, fn) {
|
||||
keys(obj).forEach(fn);
|
||||
}
|
639
json/disks/dos33master.json
Normal file
639
json/disks/dos33master.json
Normal file
@ -0,0 +1,639 @@
|
||||
loadJSON({
|
||||
"name": "DOS 3.3 Master",
|
||||
"category": "System",
|
||||
"type": "dsk",
|
||||
"writeProtected": true,
|
||||
"encoding": "base64",
|
||||
"data":
|
||||
[
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"L7FC0A+tuzXJBPACOGAgNDFMIDGN1jXIsUKN1zUg3C+t5DWN4DWt5TWN4TUgEC+s5jUYYIydMyBEMqydM8iRQo3XNYit8TWRQo3WNSAQLyDWN6nADdU1jdU1YK7qNY69Na7rNY6+Na7sNaztNY6/NYzANejQAcjM6TXQEezoNdAMogCgAO7qNdAD7us1juw1jO01YO7mNdAI7uQ10APu5TVgrMM1rsQ1hEKGQ+7DNdAD7sQ1YKzBNdAIrsI18AfOwjXOwTVgTH8zIPcvrcM1hUKtxDWFQ6kBjZ0zqQCN2DUY7tg1IBEwsFGiAI6cM73GNPAfMCKgAOjo6LFC3cY00A==",
|
||||
"CsjAHtDzrpwzGGAgMDKQ27DPrJ0z0MGsnTPQ76AA6OjosUKdxjTIwB7Q9a6cMzhgGK2cM2kjquD1YKkArJ0z0JdMdzOt8TXwIc7wNTAXGKIEPvE1ytD6kPDu7jXQA+7vNa3wNWCpAI3xNakAjZ4zIPcvGK3rM23sM/AJze8zkBSp/9AKrZ4z0DepAY2eM43sMxhpEY3rM43xNagKCqiiBBi59jOd8TXwBjipAJn2M4jK0O6QvSD7L63wM43wNdCJTHczrfE10AFgSCD3L6zwNWgYIN0yqQCN8TVM+y+i/H72NOjQ+sjM8DPQ8goKqPAPogS98TUZ9jOZ9jOIytDzYA==",
|
||||
"rb01jeY1jeo1rb41jeQ1jes1qQCN5TWgEKqt5jVKsAOKkA4YreU1beg1jeU1im3pNWpu5TVu5DVu5jWI0NutvzWN7DVt5jWN5jWtwDWN7TVt5DWN5DWpAG3lNY3lNWCpAdAiqQLQHqkD0BqpBNAWqQXQEqkG0A5M7T/qqQrQBq3FNRiQATgIjcU1qQCFSCB+LiiumzOaYBENAAD1IwEAAAAA//8BCmTUycHC09LBwqDFzdXMz9agy9PJxAQRDwQAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAABEBAAAjEAABAAAAAAAAAAAAAAAA/w==",
|
||||
"/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsbAQD+AQYAdSoAAAAYABcAFgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGABAREAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"mM0rE6CgDxlRG1EdsKCJ0/CWw6CNoNKg6J+ghaCq09WZoKmg6KCMoKCgoO+z09DFw6Kg6KC5uumwoIqgjAGgswDRoE0ZoKKFxaCgoKCqAAHv2AKguAIAAAC5oKagoPC7qaCQiKCJw6nIsO+goqDloKSgoMigpaD6oHqghbOQyciloBEBAACg1gABxYOg6KCgsK6ioOagoM+g+6DnoKCAoKDFqqCCsaCJoPCgoLqkoKDooImgoMqxhaDMoKCfoMWyisjFhaCR06zGoIXFoKDooKDGoKKqqaCgz6CFzeWgoICg8KCBoKWwoJigpaCguqSAoIegiaCgr7KFoLqgyYXOgQ==",
|
||||
"08XD1M/S06DV08XEjY0AxM+g2c/VoNfJ08ig1M+g0sXQzMHDxaDJ1KDBztnXwdm/oACHh9XOw8/Q2cHCzMWgxsnMxY0AoKCgoKCgoKC8AL6goKAA18jJw8ig18/VzMSg2c/VoMzJy8W/oADJztbBzMnEoNPMz9QAyc7WwczJxKDE0snWxQDDz9DZoMbJzMXTjQDExczF1MWgxsnMxdONAMPB1MHMz8eNAMzPw8ugxsnMxdONANLF08XUoNPMz9SgpqDE0snWxY0A09DBw8Wgz86gxMnTy40A1c7Mz8PLoMbJzMXTjQDWxdLJxtmgxsnMxdONANHVydSNAKAAAQAAsA==",
|
||||
"oKqqoKCgoKCgoKCgoKCgoMbJxKDWxdLTyc/OoM2goKCgoKCgoKCgoKCqAKqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKqqoKDDz9DZ0snHyNSgsbm3uaDB0NDMxaDDz83Q1dTF0qDJzsOuoKCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo3DyM/P08Wgz87FoM/GoNTIxaDGz8zMz9fJzsegz9DUyc/O042NANDSxdPToMHO2aDLxdmg1M+gw8/O1MnO1cWgAMPBzsPFzMzFxI0AoNPFw9TP0tOgxtLFxY0AoA==",
|
||||
"YDjZGbAAAB3ZHLFkAHIeONkZsWsHHdkcsrcLciSxyAUDX7E8BQEUyAVcsRAEA2DEGcPEJLE8BQNbATn+/12gz9LJx8nOwcyg0NLPx9LBzaDDz9DZ0snHyNSgoLG5t7egwtmgwdDQzMWgw8/N0NXUxdKgAX3//13OxdegzcHUxdLJwcygw8/Q2dLJx8jUoMLS1cPFoNTPx87B2trJzsmgw6/PoMPB0tKgxczFw9TSz87Jw9Ogw8/S0K6gtbixsaDHxcHS2aDCzNbErqDTwc6gxtLBzsPJ08PPrMPBoLm0sbKxoKi0sbWptra4rbSytLMBYAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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",
|
||||
"n0wI5yA07qXOhchgIBXnpciRzmAgbO6lzoXmpc+F50xE4iDk7kw04SDk7rR4tVBp/rABiIXahNsYZc6VUJhlz5V4oAC1UNHayLV48dqwgEwj6CAV56VOIAjnpU/QBMVOaQApf4VPlaCgEaVPChhpQAomTiZPiNDypc4gCOelz5WgTHriIBXnpM7ESqXP5UuQHoRMpc+FTUyt5SAV56TOxEylz+VNsAiESqXPhUuQ6EzL7v//////////IHHhTL/vIAPuqf+FyKmAjQACYCA25+ggNue1UGCpAIVKhUypCIVLqRCFTUyt5dV40AEYTALhILflTDboILflTFvo4IDQAQ==",
|
||||
"YAO/HyCx5+jotU+F2rV3hdu0TpjVdrAJsdog7f3ITA/uqf+F1WDoqQCVeJWgtXc49U+VUEwj6P8gFeelz9Aopc5gIDTupMjJMLAhwCiwHUwA+CA07kxk+Eb4YCCz88kYsAqFJUwi/KB3TODjoHvQ+SBU4qXa0Ael29ADTH7nBs4mzybmJuel5sXapefl25AKheel5uXahebmzojQ4WD///////8gFedszgAgNO7FyJC7hSxgIDTuyTCwsaTITBn4IDTuxciQpYUtYCA07skosJuopchMKPiYqqBuIMTjiqggxOOgckxh8SA/8gbOJs8w+rDc0ATFzrDWYCAV57HOlA==",
|
||||
"qeSupQBHoqG0fw0wramkfw0jramkZ6ysoaPyp/S4pbQATcxnjGiM22ebaJtQjGOMfwFRB4gphIDEGVdxB4gUcQeMB4iusqOzcQiIo7OhcQiIrqWsaIMIaJ0IcQeIYHW0r651jXWLUQeIGbikrrLspLDzoqHup7PkrrLrpaWwUQeIOYHBT38PLwBRBogpwgyCV4xqjEKupai0YK6lqLRPfh41jCdRB4gJi/7kr63yr+SuodzenN2c3t2ew93Pys3LAEearaWtr6xnmq2lramo7qGtYIwgr7S1ofKso/elrmCMIKylpO61smCutbLur6PltqGz5KGvrHp+miIgAGADvw==",
|
||||
"6P///1AgT8D0oeSvrfKv5K6h8KW0s++07qWotFyAAEBgjWCLfx0gfowzAABgA78SR4OuqWeDsrDlo6GytHmws6RpsLOk5aOhsrSvrnmws6Svrmmws6SvrvCvsPSzqaxgjCC0s6msAECJyUedF2idClh7Z6KhtLZntKEHjAeuqay2Z7ShB4wHrqmsqGeMB7SvrLBnnbKvrK+jZ4wHpauvsPSuqbKwfw4ntK6psrB/Dii0rqmysGQHpqlnr7Svp3i0paxrfwKtpbJnorWzr6fusrW0pbJ+jDm0uKWuZ7CltLMnr7QHnRmyr6Z/BTe0tbCuqX8FKLS1sK6pfwUqtLWwrg=="
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AThokAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAHwaJQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCqGiYBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A2BonAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAAYbKAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uADoZHgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBoGR8Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AlhkgAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAMQZIQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDyGSIBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AIBojAYNcLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AVBgZAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAIIYGgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCwGBsBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A3hgcAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAAwZHQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uAEAXEwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBuFxQBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AnBcVAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAMoXFgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgD4FxcBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AJhgYAYNcLg==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"Fg0Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AWhYOAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAIgWDwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgC2FhABg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A5BYRAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uABIXEgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAEYVCAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgB0FQkBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AohUKAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uANAVCwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgD+FQwBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ALA==",
|
||||
"Li4uLgAyFAIBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AYBQDAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAI4UBAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgC8FAUBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A6hQGAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uABgVBwGDXC4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAEwT/QCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgB6E/4Ag1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AqBP/AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uANYTAAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAEFAEBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLgA4EvcAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AZhL4AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAJQS+QCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDCEvoAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A8BL7AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAB4T/ACDXC4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAFIR8gCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCAEfMAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ArhH0AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uANwR9QCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAKEvYAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLgA+EOwAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AbBDtAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAJoQ7gCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDIEO8Ag1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A9hDwAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uACQR8QCDXC4uLg==",
|
||||
"AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAFgP5wCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCGD+gAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AtA/pAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAOIP6gCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAQEOsAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLgBEDuEAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4Acg7iAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKAO4wCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDODuQAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A/A7lAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uACoP5g==",
|
||||
"Li4AMA3bAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAF4N3ACDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCMDd0Ag1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4Aug3eAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAOgN3wCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAWDuAAg1wuLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBKDNYAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AeAzXAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKYM2ACDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDUDNkAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AAg3aAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4ANgvQAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAGQL0QCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCSC9IAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AwAvTAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAO4L1ACDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAcDNUAg1wuLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBQCssAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AfgrMAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKwKzQCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDaCs4Ag1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ACAvPAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"U1MgICAqACMJbQCyKiAgICAgVEhBTiA0MDAhISAgICAgICoAQAluALIqICAgICAgICAgICAgICAgICAgICAgKgBdCW8AsiogICAgUFJPR1JBTSBXSUxMICAgICAqAHoJcACyKiAgIFNFTEYtREVTVFJVQ1QhICAgICoAlwlxALIqICAgICAgICAgICAgICAgICAgICAgKgC0CXIAsioqKioqKioqKioqKioqKioqKioqKioqALwJcwCyCgoAxgnIAIMxMDAxAPQJyQCDQVBQTEUgQ09NUFVURVIgSU5DLi4uLi4uLi4uLjQwOCA5OTYgMTAxMAAiCsoAg1wuLi4uLg==",
|
||||
"0jEeCGQAsioqKioqKioqKioqKioqKioqKioqKioqADsIZQCyKiAgICAgICAgICAgICAgICAgICAgICoAWAhmALIqICAgIFcgQSBSIE4gSSBOIEcgICAgKgB1CGcAsiogICAgLSAtIC0gLSAtIC0gLSAgICAqAJIIaACyKiAgICAgICAgICAgICAgICAgICAgICoArwhpALIqICAgIERPIE5PVCBNT0RJRlkgICAgKgDMCGoAsiogIEFOWSBMSU5FIElOIFRISVMgICAqAOkIawCyKiAgIFBST0dSQU0gV0lUSCBBICAgICoABglsALIqICBMSU5FIE5VTUJFUiBMRQ==",
|
||||
"AAAAAAAAAAAAAAAACg4KDQoMCgsKCgoJCggKBwoGCgUKBAoDCgIKAQoACQMJAgkBCQAMBgwFDAQMAwwCDAEMAA0MDQsNCg0JDQgNBw0GDQUNBA0DDQINAQ0AEg8SDhINEgwSCxIKEgkSCBIHEgYSBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"oNbF0tPJz86gxKCgoKCgoKCgoKCgqgCqoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCqqqCgw8/Q2dLJx8jUoLG5t7mgwdDQzMWgw8/N0NXUxdKgyc7DrqCgqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqNw8jPz9PFoM/OxaDPxqDUyMWgxs/MzM/Xyc7HoM/Q1MnPztONjQDQ0sXT06DBztmgy8XZoNTPoMPPztTJztXFoADDwc7DxczMxcSNAKDTxcPUz9LToMbSxcWNAKDTxcPUz9LToNXTxcSNjQDEz6DZzw==",
|
||||
"1MXEh40AxMnTy6DG1czMjQDEydPLoNfSydTFoNDSz9TFw9TFxI0AxsnMxaDMz8PLxcSNAMmvz6DF0tLP0o0Ayc7WwczJxKDGyczFzsHNxQCHh8nO09XGxsnDycXO1KDNxc3P0tmg1M+g0tXOoNDSz8fSwc2NAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoKDB0NDMxaDd26DEz9Ogs66yoNTPoLOus6DDz87WxdLUxdKgoKCqqqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgqqqgoKCgoKCgoKCgoM3VxsbJzg==",
|
||||
"w8/Q2aDP0o280sXU1dLOvqDUz6DSxdDMwcPFoMXYydPUyc7HoMbJzMWgz9KNvMPU0sytw7680sXU1dLOvqDUz6DDwc7Dxcygw8/Q2Y26AADF0tLP0q6goKDDz8TFvQCN18/VzMSg2c/VoMzJy8Wg1M+gzcHLxaDBzs/UyMXSoMPP0Nm/oACNyc7TxdLUoNPP1dLDxaDEydPLoMHOxKDQ0sXT06DBoMvF2QCNyc7TxdLUoMTF09TJzsHUyc/OoMTJ08ugwc7EoNDSxdPToMGgy8XZoADEz6DZz9Wg18HO1KDQ0s/N0NTJzse/oADEz87FjQDOz6DGyczF06DTxczFww==",
|
||||
"FPEUBRUQFSYVMxU+FU8VdRUWFrUW3xPQFtsW6hb6Fh0XMBc6Fz8XVhdjF3EXcRdxF3EXcReAF9PP1dLDxaDTzM/UvwCgoKCgoKDE0snWxb8AxMXT1MnOwdTJz86g08zP1L8AoKCgoKCgoKCgoKDE0snWxb8AxsnMxc7BzcW/AMnO08XS1KDEydPL066goNDSxdPToLzF08O+oNTPoNLF1NXSzqDUz6CgzcHJzqDNxc7VoM/SoMHO2aDP1MjF0qDLxdmg1M+gwsXHyc6NAI3BzNLFwcTZoMXYydPU066gjQDU2dDFoMnOoMGgzsXXoMbJzMWgzsHNxaDGz9Kg1MjFoA==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBQIUsBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AfiFMAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKwhTQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDaIU4Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ACCJPAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4APCBFAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAGogRgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCYIEcBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AxiBIAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAPQgSQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAiIUoBg1wuLi4uLg==",
|
||||
"XC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBWH0ABg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AhB9BAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uALIfQgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDgH0MBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ADiBEAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4AQh46AYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAHAeOwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCeHjwBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AzB49AYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAPoePgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAoHz8Bgw==",
|
||||
"AC4dNAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBcHTUBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4Aih02AYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uALgdNwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDmHTgBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AFB45AYNcLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ASBwvAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAHYcMAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCkHDEBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A0hwyAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAAAdMwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uADQbKQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBiGyoBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AkBsrAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAL4bLAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDsGy0Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AGhwuAYNcLi4uLi4uLi4uLi4uLg==",
|
||||
"////ogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"S0VUVEUgSVMgV1JJVEUgUFJPVEVDVEVELiAgUkVNT1ZFDVdSSVRFIFBST1RFQ1QgVEFCLo3///////////////v////////////////////7//8BYAEAAABgDgASAAAAAABgAQAB79gBYAEAAABgDgASAAAAAABgAVdSSVRURU4gQlkgSkFNRVMgUi4gSFVTVE9OIERFQ0VNQkVSIDE1LCAxOTc4IChUSElTIE1FU1NBR0UgSVMgRklMTEVSLCBXSFkgUkVBRCBJVD8p7////////////////////+/////////////////////v////////////////////7////w==",
|
||||
"RElTS0VUVEUgQU5EIFBSRVNTDVtSRVRVUk5dIFRPIFJFQk9PVCBET1OgDQcHByAgVU5BQkxFIFRPIFJFQUQgSU1BR0UuDY0NBwcHICBJTUFHRSBPRiBET1MgMy4zICAgKE1BU1RFUikgSVMgTk9UDQ1BVkFJTEFCTEUuICBDSEVDSyBJTlNUUlVDVElPTlMuDY0NBwcHICBVTkFCTEUgVE8gV1JJVEUuICBESVNLRVRURSBNVVNUIEJFDUlOSVRJQUxJWkVEIFBST1BFUkxZLiAgQ0hFQ0sgRElTS0VUVEUNRk9SIFBST1BFUiBJTlNFUlRJT04ujQ0HBwcgIERJUw==",
|
||||
"IEhBUyBCRUVOIFVQREFURUQsIFlPVSBNQVlSRU1PVkUgSVQgQVQgVEhJUyBUSU1FLg0NICBJRiBZT1UgV0lTSCBUTyAiTUFTVEVSIiBBTk9USEVSIERJU0stDUVUVEUsIFBSRVNTIFtSRVRVUk5dLg0NICBPVEhFUldJU0UgUFJFU1MgW0VTQ10gVE8gRVhJVCAiTUFTVEVSIo0NDSAgSUYgWU9VIFdJU0ggVE8gUkVUUlkgUFJFU1MgW1JFVFVSTl0NDSAgT1RIRVJXSVNFIFBSRVNTIFtFU0NdIFRPIEVYSVQgIk1BU1RFUiKNDSAgSU5TRVJUIEEgU1lTVEVNIA==",
|
||||
"UiBQTEFDRSBJVCBJTg1USEUgRElTSyBESVJFQ1RPUlkNDSAgVEhJUyBJUyBUSEUgRklMRSBOQU1FIFRIQVQgV0lMTCBCRQ1QTEFDRUQgV0lUSElOIFRIRSBJTUFHRToNDSAgIKANICBQTEFDRSBUSEUgRElTS0VUVEUgVE8gQkUgTUFTVEVSRUQgIElODVRIRSBESVNLIERSSVZFLg0NICBQUkVTUyBbUkVUVVJOXSBXSEVOIFJFQURZDQ1OT1RFOiBJRiBZT1UgV0FOVCBBIERJRkZFUkVOVCBGSUxFIE5BTUUsUFJFU1MgW0VTQ10ujQ0gIFRIRSBESVNLRVRURQ==",
|
||||
"RE9TIDMuMyAgIE1BU1RFUiAtIENSRUFURSBVVElMSVRZDQ0gIENPUFlSSUdIVCAxOTgwIEJZIEFQUExFIENPTVBVVEVSIElOQw0gICAgICAgICAgQUxMIFJJR0hUUyBSRVNFUlZFRC4NDQ0NICAgICAgICAoTk9XIExPQURJTkcgRE9TIElNQUdFKY0NUExFQVNFIElOUFVUIFRIRSAiR1JFRVRJTkciIFBST0dSQU0nUw1GSUxFIE5BTUU6oA0NUkVNRU1CRVIgVEhBVCAiTUFTVEVSIiBET0VTIE5PVCBDUkVBVEUNVEhFICJHUkVFVElORyIgUFJPR1JBTSwgTw==",
|
||||
"5vDQ7+bx0OtgSCBY/GiFJWCpoKIAIO394B7wBr0xDujQ86mNTO39qfCFNqkbhTip/YU3hTmN9AOph4UzYCAM/cmN8AbJm/AD0PMYYIrwLIbwoAC5AALIyaDw+MnBkByiAJ0xDujgHvAeuQACyY3wDcms8AnE8PAFyNDmOGCpoJ0xDujgHtD4GGCpAtACqQEgswmpDqBkINkDsBusaQ7IwBDQBaAA7mgOjGkO7m0OrW0OyTfQ3RhgSMkB0Bog4wOF8YTwoAGx8I1QDo1eDsix8I1RDo1fDqARuU8OmWQOiBD3aI1wDmD4CYgKugphC+0LlwzpDCYNQw2ODfMNDSAgIA==",
|
||||
"AAj/BqkMIAUJICMJqQAg4wggiQmQG6kIIAUJrQAcyUzwD0xGCOrq6uqpByDjCEy1CK0GHk0NHklu0A+tvjRJBNAIjWYrjesT8AipCCDjCEy1CKkKIAUJqQEg4wggav0gSAmw7qAduTEOmXUriBD3qQIgBQmpAiDjCCANCakDIOMIIDkJsMwghQmQSqkKIAUJrXEOCrADCpAEqQnQAqkKIOMIqQUg4wggOQmwCKkKIAUJTGsIqQogBQmpBiDjCCA5CbD7rWUOSkpKSgnAhfGpAIXwbPAAqQYgBQmpBCDjCCA5CbDVTE4ICqq94gmF8L3jCYXxoACx8EgJgCDt/WgwCA==",
|
||||
"AAAAAAAAAAAAAAAADA4MDQwMDAsMCgwJDAgMBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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",
|
||||
"q62qr95BTsRP0r69vFNHzklO1EFC01VT0kZSxVNDUk6oUETMUE/TU1HSUk7ETE/HRVjQQ0/TU0nOVEHOQVTOUEVFy0xFzlNUUqRWQcxBU8NDSFKkTEVGVKRSSUdIVKRNSUSkAE5FWFQgV0lUSE9VVCBGT9JTWU5UQdhSRVRVUk4gV0lUSE9VVCBHT1NVwk9VVCBPRiBEQVTBSUxMRUdBTCBRVUFOVElU2U9WRVJGTE/XT1VUIE9GIE1FTU9S2VVOREVGJ0QgU1RBVEVNRU7UQkFEIFNVQlNDUklQ1FJFRElNJ0QgQVJSQdlESVZJU0lPTiBCWSBaRVLPSUxMRUdBTA==",
|
||||
"zFBMT9RITEnOVkxJzkhHUrJIR9JIQ09MT1K9SFBMT9REUkHXWERSQddIVEHCSE9NxVJPVL1TQ0FMRb1TSExPQcRUUkFDxU5PVFJBQ8VOT1JNQcxJTlZFUlPFRkxBU8hDT0xPUr1QT9BWVEHCSElNRU26TE9NRU26T05FUtJSRVNVTcVSRUNBTMxTVE9SxVNQRUVEvUxF1EdPVM9SVc5JxlJFU1RPUsWmR09TVcJSRVRVUs5SRc1TVE/QT85XQUnUTE9BxFNBVsVERcZQT0vFUFJJTtRDT07UTElT1ENMRUHSR0XUTkXXVEFCqFTPRs5TUEOoVEhFzkHUTk/UU1RF0A==",
|
||||
"ANAAMG/YZdf43JTZsdsw89jf4duP85jz5PHd8dTxJPIx8kDy1/Ph8+j2/fZo92735vdX/CD3Jvd092zybvJy8nbyf/JO8mrZVfKF8qXyyvIX87vznvNh8kXaPdkR2cjZSNj0AyDZatnb2W3Y69mD58jYr9gS43rn1NqV2KTWadaf20jWkOsj7K/rCgDe4hLUzd//4o3uru9B6Qnv6u/x7zrwnvBk59bmxeMH5+XmRuZa5obmkeZ5wOd5qed7gel7aOp9lu5QVN9GTt9/z+5/l95kZN9FTsRGT9JORVjUREFUwUlOUFXUREXMREnNUkVBxEfSVEVY1FBSo0lOo0NBTA==",
|
||||
"AAAAAAAAAAAAAAAAEA4QDRAMEAsQChAJEAgQBxAGEAUQBBADEAIQARAABA4EDQQMBAsECgQJBAgEBwQGBAUEBAQDBAIEAQQABQ8FDgUNBQwFCwUKBQkFCAUHBQYFBQUEBQMFAgUBBQAGDwYOBg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"BBEPAwEA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAADf8AACMQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAA//8AAAAAAAAAfwAAAf8AAAAAAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABELAAAAAAAAAAALD4TN1cbGyc6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAbABwGgtDIz87FoMzJ09SgoKCgoKCgoKCgoKCgoKCgoKCgoDMAEgSC0sHOxM/NoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgCgATBILSxc7VzcLF0qCgoKCgoKCgoKCgoKCgoKCgoKCgoKANABUEgtLFztXNwsXSoMnO09TS1cPUyc/O06CgoKCgoKCgoCcAGwSC0sXU0snF1sWg1MXY1KCgoKCgoKCgoKCgoKCgoKCgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ABEMAAAAAAAAAAAhD4LF2MXDoMTFzc+goKCgoKCgoKCgoKCgoKCgoKCgoKAKACIPhMbJxKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoBQAEA+ExtDCwdPJw6CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgMgAPD4TJztTCwdPJw6CgoKCgoKCgoKCgoKCgoKCgoKCgoKAyAA4PgszJ1NTMxaDC0snDy6DP1dSgoKCgoKCgoKCgoKCgoBwADQ+CzcHLxaDUxdjUoKCgoKCgoKCgoKCgoKCgoKCgoKCgAwAMD4TNwdPUxdKgw9LFwdTFoKCgoKCgoKCgoKCgoKCgoKAJAA==",
|
||||
"ABENAAAAAAAAAAAaD4LC0snBzqfToNTIxc3FoKCgoKCgoKCgoKCgoKCgoKAGABsPhMPIwcnOoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAMAHA+Bw8/Mz9KgxMXNz6CgoKCgoKCgoKCgoKCgoKCgoKCgCQAdD4LDz8zP0qDExc3P08/G1KCgoKCgoKCgoKCgoKCgoKAJAB4PgcPP0NmgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAkAHw+Ew8/Q2a7PwsqwoKCgoKCgoKCgoKCgoKCgoKCgoKCgAwAgD4LDz9DZwaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAJAA==",
|
||||
"ABEOAAAAAAAAAAATD4LIxczMz6CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAGABQPgcHOyc3BzNOgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoBIAFQ+AwdDQzMWg0NLPzdOgoKCgoKCgoKCgoKCgoKCgoKCgAwAWD4HB0NDMxdPPxtSgoKCgoKCgoKCgoKCgoKCgoKCgoKAGABcPgcHQ0MzF1snTyc/OoKCgoKCgoKCgoKCgoKCgoKCgoBoAGA+BwsnP0sjZ1MjNoKCgoKCgoKCgoKCgoKCgoKCgoKCgEQAZD4TCz8/UsbOgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAKAA=="
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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",
|
||||
"T1QgRVhFQ1VURSBPTiI6uiJBIFdSSVRFLVBST1RFQ1RFRCBESVNLRVRURSBTVUNIIEFTIgCzDfwDuiJZT1VSIERPUyBTWVNURU0gTUFTVEVSIChWRVJTSU9OIDMuMykuICAgRk9SIFlPVVIgQ09OVkVOSUVOQ0UsIFBST1ZJU0lPTlMgSEFWRSAgIEJFRU4gTUFERSBUTyBDT1BZIFRISVMgUFJPR1JBTSBBTkQgSVQnUyIA1g0GBLoiREFUQSBUTyBBTk9USEVSIERJU0tFVFRFLiI6ugASDhAEhCJETyBZT1UgV0lTSCBUTyBETyBUSElTIE5PVz8gKFkgT1IgTg==",
|
||||
"IgATDKQBuiJMSVNUIiwiICAxIgAnDK4BuiJDSEFOR0UiLCIgIDIiADkMuAG6IkVYSVQiLCIgIDMiAGQMwgG6OoQiQ0hPT1NFIE5VTUJFUiAoMSAtIDMpICI7USQ6UdDlKFEkKQBzDMwBrVHPMM1R0TTEsQCJDNYBoigxNSk6uucoNyk7Oqs0NTAAlgzgAbpDTCQ7RkwkAJ4M6gGXOoAAwgz0AbJERU1PTlNUUkFUSU9OIE9GIFJBTkRPTSBBQ0NFU1MA3AzoA4ZBJCg5KSxCKDkpLEMoOSksRCg5KQA0DfIDlzq6OroiVEhJUyBERU1PTlNUUkFUSU9OIFdJTEwgTg==",
|
||||
"RAAHDA4BsgAXDBgBreIoNzY4KdAwxIAAagwiAbo6uiIuLi5MQU5HVUFHRSBDQVJEIENBTk5PVCBCRSBSRUxPQURFRCI6uiIgICBVTlRJTCBUSEUgU1lTVEVNIElTIFJFQk9PVEVELi4uIgBwDCwBgAAAAEgAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"NjoACwubAIw3NjkAHgugAK3iKDc2OCnRzzHEMjUwACULqgCyIABJC7QAsi0tSUYgVEhFUkUsIExPQUQgSU5URyBBTkQgUEEjMQBQC74AsiAAgAvIAKIxMDq6IihMT0FESU5HIElOVEVHRVIgSU5UTyBMQU5HVUFHRSBDQVJEKSIAngvSALoiBEJMT0FEIElOVEJBU0lDLEEkRDAwMCIAvQvcALIgLS1XUklURSBQUk9URUNUIFRIRSBDQVJEANYL5gBB0OIoyTE2MjU0KTqyICAkQzA4MgDcC/AAgADiC/oAsgABDAQBsi0tTk8gQ0FSRCBPUiBDQU4nVCBSRUxPQQ==",
|
||||
"uTgwNCwwOrk4MDUsMjA4Ork4MDYsMjA4Ork4MDcsMTA6uTgwOCwxNzM6uTgwOSwxMjk6uTgxMCwxOTI6uTgxMSwxNzM6uTgxMiwxMjk6AJwKcwC5ODEzLDE5Mjq5ODE0LDE2OTq5ODE1LDE6uTgxNiwyMDg6uTgxNywyOrk4MTgsMTY5Ork4MTksMDq5ODIwLDE0MTq5ODIxLDA6AOwKeAC5ODIyLDM6uTgyMywxMDQ6uTgyNCwyMDU6uTgyNSwwOrk4MjYsMjI0Ork4MjcsMjQwOrk4MjgsMzq5ODI5LDE3Mzq5ODMwLDEyODoAAgt9ALk4MzEsMTkyOrk4MzIsOQ==",
|
||||
"LDEwNDoAVwlfALk3NzcsNzI6uTc3OCwyMDU6uTc3OSwwOrk3ODAsMjI0Ork3ODEsMjA4Ork3ODIsMzU6uTc4MywxNzM6uTc4NCwxMzE6uTc4NSwxOTI6AKsJZAC5Nzg2LDE3Mzq5Nzg3LDEzMTq5Nzg4LDE5Mjq5Nzg5LDE2OTq5NzkwLDE2NTq5NzkxLDE0MTq5NzkyLDA6uTc5MywyMDg6uTc5NCwyMDU6APsJaQC5Nzk1LDA6uTc5NiwyMDg6uTc5NywyMDg6uTc5OCwxOTq5Nzk5LDc0Ork4MDAsMTQxOrk4MDEsMDq5ODAyLDIwODq5ODAzLDIwNToATgpuAA==",
|
||||
"cQQZCAoAsiAgLS0gRE9TIDMuMyBIRUxMTwAgCBQAsiAAKAgeAIk6ugAuCCgAlwBZCDIAuiJET1MgVkVSU0lPTiAzLjMgICAgICAgICAgICAwOC8yNS84MCIAiwg8ALo6uiJBUFBMRSBJSSBQTFVTIE9SIFJPTUNBUkQgICBTWVNURU0gTUFTVEVSIgCSCEYAsiAAtAhQALIgLS1QT0tFIExBTkdVQUdFIENBUkQgRklOREVSAAUJWgC5NzY4LDA6uTc2OSwxNzM6uTc3MCwwOrk3NzEsMjI0Ork3NzIsNzI6uTc3MywxNzM6uTc3NCwxMjk6uTc3NSwxOTI6uTc3Ng==",
|
||||
"AAAAAAAAAAAAAAAAEw4TDRMMEwsTCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"AQycBGHXxkBGswMAAQ2mBGEooc3Pz9PFKQEIsARfsWQAASLQB12tra2tra2tra2tra2tra2tra2tra2tra2tra2trQEb2gddoKCg0NLPx9LBzaDF2NDMwc7B1MnPzgEi5Addra2tra2tra2tra2tra2tra2tra2tra2tra2tra0BBe4HXQEd+AddoMLB08nDwczM2ayg1MjJ06DQ0s/H0sHNAR4CCF2gyczM1dPU0sHUxdOg1MjFoNXTxaDPxqDBASIMCF2gwsnOwdLZoNTSxcWg09TS1cPU1dLFrqDTyc7DxQEjFghdoNTIxaDBztPXxdKg1M+gwaDR1cXT1MnPzg==",
|
||||
"wc7JzcHM06DCxcbP0sW/KQFYVwRhKNTZ0MWgp87F18bJzMWnoMbP0qDNxaDUz6DGz9LHxdSg18jB1KDJKQNhKMjB1sWgzMXB0s7FxKDV0KDUz6DOz9egz9Kgycagzs+gz87FoMjB0ykBNFgEUyjUwdXHyNSgzcWgwc7Z1MjJzseg2cXUuqApJsFAA2DBQDoozsXXxsnMxSkksWQAAQxgBGHXxkBGsAAAAQpqBGEosqy0KQEMdARh18ZARrEBAAEqfgRhKMTPxdOgydSgzMnWxaDJzqDUyMWg18HUxdIpA2KyAgADYrMDAAEMiARh18ZARrICAAEMkgRhKKHG0s/HKQ==",
|
||||
"2aygwaDTyc3QzMWgp9mnoM/SKQNhKKfOp6DSxdPQz87TxaDJ06DT1cbGycPJxc7UqSkBV0IEYSjJxqDJoMTPoM7P1KDH1cXT06DXyMHUoNnP1dKgwc7JzcHMoMnTrCkDYSjJoNfJzMygwdPLoNnP1aDBoMbF16DR1cXT1MnPztOg08+g1MjB1CkBNkwEYSjOxdjUoNTJzcWgyaDXyczMoMvOz9eg18jB1KDZz9XSoMHOyc3BzCkDYSjJ064pA2MBUVYEYSjEz6DZz9Wg18HO1KDNxaDUz6DT1MHS1KDMxcHSzsnOx6ygz9IpA2EoyMHWxaDZz9Wg1MHVx8jUoM3FoA==",
|
||||
"JLFkAAFnJARjA2Eoyc7T1NLVw9TJz87TuikDYwNhKNnP1aDXyczMoNTIyc7LoM/GoMHOoMHOyc3BzKygwc7EoMmg18nMzCkDYSjU0tmg1M+gx9XF09Og18jB1KDBzsnNwcyg2c/VoMHSxSkBVS4EYSjUyMnOy8nOx6DPxq6goMmg18nMzKDEz6DUyMnToMLZoMHTy8nOxykDYSjZz9WgwaDTxdLJxdOgz8ag0dXF09TJz87ToMHCz9XUoNnP1dIpAXI4BGEowc7JzcHMrKDUz6DXyMnDyKDZz9Wg0sXT0M/OxKDFydTIxdIpA2Eo2cXToM/SoM7PrqCowcPU1cHMzA==",
|
||||
"1KDSxqSuoM7P1MWg1MjB1KDUyMWgoqzSoqDJ06DGz9Kg0sHOxM/NoMHDw8XT06DJztTPoMbJzMXTrgFdFQRhKKqg18HSzsnOx4e6oNnP1dKgxMnTy8XU1MWgzcHZoM7P1KDCxSkDYSjX0snUxaDQ0s/UxcPUxcSgyc6gz9LExdKg1M+g0MzB2aDUyMnTKQNhKMfBzcWhKQFtGgRvtQUAA2EooKqqqqqgwc7JzcHMoMzFwdLOyc7HoMfBzcWgqqqqqikDYwNhKMjB1sWg2c/VoMXWxdKg0MzB2cXEoMLFxs/Sxb8pRwNSwUADYDvBQHIlYMFAKrEBACOxAQByOSjZKQ==",
|
||||
"wczTxsnMxazSKQPXxkBwKITX0snUxaDBzsnNwczTxsnMxazSKQPDzEBwKITDzM/TxSkDz9BAcCiEz9DFzqDBzsnNwczTxsnMxazMuLApA2HP0EABdhEEXaDUyMWgwcLP1sWg09TSyc7H06DXxdLFoNPF1KDTz6DUyMHUoNfFoM/OzNmgzsXFxKDUz6DQ0snO1KDBoNPU0snOx6DSwdTIxdKg1MjBzqDU2dDFoNTIxaDXyM/MxaDP0MXSwdTJz86uoMXYwc3QzMW6AXESBF2g0sHUyMXSoNTIwc6g0NLJztSgxKS7otLFwcSgwc7JzcHM08bJzMWs0qKg18Wg0NLJzg==",
|
||||
"XaqgoKCgoKCgoLC2r7Cxr7e4oKCgoKCgoKCgqgEg9ANdqqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCqASD1A12qoKCg1dDEwdTFxLqgsa+xsq+3uaCgoKCgoKoBIPYDXaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgET/ANhKITOz83PzqDJrM+swykBXgYESwNNNrmoAwNOzsXXQCK3RgByQ8HOyc1AIrdGAHJD0UAit0YAckPBQCK3RgByQ9LGQCKyFAByQ9fGQCKyFAByQ8HOQCKxCgByQ8PMQCKyFAByQ8/QQCK0KAByAWYQBNLGQHAohNLFwcSgwc7JzQ==",
|
||||
"XaqgoNDSz8fSwc2g1MjB1NOgzMXB0s7ToKCgqgEg7ANdqqCgwcLP1dSg1sHSyc/V06DBzsnNwczToKCqASDtA12qoKDG0s/NoNTIxaDV08XSrqCgoKCgoKCgoKoBIO4DXaqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgqgEg7wNdqqCgoNPZ09TFzaDSxdHVydLFzcXO1NO6oKCqASDwA12qoKCxtsugzcXNz9LZrKDEydPLoMnJoKCgoKoBIPEDXaqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgqgEg8gNdqqCgoKCgoNKuoNfJx8fJztTPzqCgoKCgoKCqASDzAw==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"ICAgRVJST1IgTUVTU0FHRVMiADEL4gS6IjEzICAgICAgIE9USEVSIE1FU1NBR0VTIgBHC+wEuiIxNCAgICAgICBOT1RFUyIAXQv2BLoiMTUgICAgICAgTk9URVMiAHMLAAW6IjE2ICAgICAgIE5PVEVTIgB7CwoFojIzAJ8LFAW6IlBSRVNTIFJFVFVSTiBUTyBSVU4gUkVOVU1CRVIiAMQLHgW6IkhJVCBBTlkgS0VZIEZPUiBJTlNUUlVDVElPTlMiOwDMCygFvkEkANsLMgWt5ihBJCnQM8SAAO4LPAWt5ihBJCnQMTPEMzk1MAD0C0YFlwAHDFAFusBQVCkiUA==",
|
||||
"IgAwCpIEuiIgNiAgICAgTUVSR0UgICAgICAgICAgMTQgICAgVVNBR0UgTk9URVMiAF8KnAS6IiA3ICAgICBNRVJHRSAgICAgICAgICAxNSAgICBVU0FHRSBOT1RFUyIAjgqmBLoiIDggICAgIFNZTlRBWCAgICAgICAgIDE2ICAgIFVTQUdFIE5PVEVTIgCYCrAEqzEyOTAAtQq6BLoiOSAgICAgICAgSU5QVVQgU1lOVEFYIgDUCsQEuiIxMCAgICAgICBFUlJPUiBNRVNTQUdFUyIA8wrOBLoiMTEgICAgICAgRVJST1IgTUVTU0FHRVMiABIL2AS6IjEyICAgIA==",
|
||||
"ICAgUEFHRSAgIFRJVExFICAgICAiABsJVgS6AEkJYAS6IiAxICAgICBDT05URU5UUyAgICAgICAgOSAgICBTWU5UQVggICAgIgB3CWoEuiIgMiAgICAgV0FSTklORyAgICAgICAgMTAgICAgRVJST1IgTVNHUyIApQl0BLoiIDMgICAgIFJFTlVNQkVSICAgICAgIDExICAgIEVSUk9SIE1TR1MiANMJfgS6IiA0ICAgICBSRU5VTUJFUiAgICAgICAxMiAgICBFUlJPUiBNU0dTIgABCogEuiIgNSAgICAgUkVOVU1CRVIgICAgICAgMTMgICAgT1RIRVIgTVNHUw==",
|
||||
"bSUXCOgDsiAgICAgICAgUkVOVU1CRVIAHQjyA7oAKgj8A4k6lzqpMjU1ADoIBgRUVNAxNTpQVNAzNAB0CBAEuiImIjvAMDUpOyJBUFBMRVNPRlQgUkVOVU1CRVIgSU5TVFJVQ1RJT05TIjvANDApOyImIjsAeggaBLoAtggkBLoiJiI7wDQpOyJDT1BZUklHSFQgMTk4MCAgQVBQTEUgQ09NUFVURVIgSU5DIjvANDApOyImIjsAwAguBLo6ujq6AMYIOASdAOcIQgS6wFRUKSJDT05URU5UUyLAUFQpIlBBR0UgMSAiABUJTAS6IlBBR0UgICBUSVRMRSAgICAgIA==",
|
||||
"AAAAAAAAAAAAAAAAFQMVAhUBFQAWCRYIFgcWBhYFFgQWAxYCFgEWABkFGQQZAxkCGQEZABoJGggaBxoGGgUaBBoDGgIaARoAGwwbCxsKGwkbCBsHGwYbBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"TElORVMgSU4gUkFOR0WNSU5DUkVNRU5UIFRPTyBMQVJHRY1EVVBMSUNBVEUgTElORSBOVU1CRVJTjU9VVCBPRiBNRU1PUlmNUFJPR1JBTSBPTiBIT0xELCBVU0UgIiZNIiBUTyBSRUNPVkVSjUhPTEQgRklMRSBJTiBVU0WNTElNSVRFRCBNRU1PUlksIE1BWSBERVNUUk9ZIFBST0dSQU0gICAgIENPTlRJTlVFIChZL04pPweNU1lOVEFYjT4gNjM5OTmNTElORSBUT08gTE9OR41JTkNSRU1FTlQgPSAwjcnJ8AfJACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"ALGlyKqxpYalhaaxpWDmp9AC5qilp8VzpajldJAHaGigUkyghGCEq6WjhaelpIWooACxp0Wd0AfIsadFnvAVGKWnaQSFp5AC5qigAbGnyf/Q3vAKyLGnhZ3IsaeFnqSrYKVphaOlaoWkpKsYsaNFndAHyLGjRZ7wEqWjaQSFo5AC5qSgAbGjyf/Q3mC5AIdIyAmAIO39aBDzYO67htAD7ryGrQACyTqwBjjpMDjp0GAARVNJRoWrrLC8xAAAAAAYpaNloYWjpaRlooWksATJ+pAFoCdMoISlnaAC0aXIpZ7xpbC2pasQBU5PIFBST0dSQU0gSU4gTUVNT1JZjU5PIA==",
|
||||
"iBD7oGAgpIZMhoSt04YN1Ibw9Tikc6V06QHEaeVqsAWgUkyghKVnpmiFoYaioAGxofAHqoixoUxBhaWhhUKlooVDrdWGhT6t1oaFP6VzhTyldIU9oAAgLP6t1YaFc63WhoV0OK3ThukChaGt1IbpAIWiGKWvZaGFr4VppbBlooWwhWqpAI3Tho3UhqVnhaGlaIWiGKABsaHwHaAEyLGh0PvImGWhqqAAkaGlomkAyJGhhqGFopDdTGWDogCGp4aoqganJqiwMaWohaulpwomq7AmCiarsCFlp4WnpatlqIWosBWKKQ9lp4WnpahpAIWosAYgsoaQyWBoaKDWTKCEoA==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"AAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAYAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAABwAQAAAAAAcAEAAAAAAHABAAAAAABgAAAAAAAAYAAAAAAAAHwHAAAAAAB/DwAAAABAfx8AAAAAYH8/AAAAAHB5eQAAAABgeGEBAAAAQHlhAAAAAAB7MQAAAAAAfhkAAAAAAHwNAAAAAAB4CQAAAAAAeAEAAAAAAHwDAAAAAAB8BwAAAAAAfgcAAAAAAF8HAAAAAABPBwAAAAAABwcAAAAAAA8HAAAAAAAeAwAAAAAAfAMAAAAAAHAHAAAAAABADw==",
|
||||
"AAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAMAAAAAAAADgAAAD//wAAAAAAAAAAAAAAGAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAABgAAAAAAAAYAAAAAABwfwcAAAAAfH8fAAAAAH5/fwAAAAAGf2AAAAAAAz5AAQAAAAE+AAMAAAABPgACAAAAAT4AAwAAAAM+AAIAAAABfwEAAAAAAH8HAAAAAEB/HwAAAABAfz8AAAAAQA84AAAAAEAPGAAAAABADxgAAAAAAA8cAAAAAAAHDAAAAAAABwwAAAAAAAcEAAAAAAAHHAAAAAAABgAAAAAAAA4AAA==",
|
||||
"AAAAADAYAAAAAAAwEAAAAAAAEDAAAAAAABAwAAAAAAAwIAAAAAAAGCAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAB4AAAAAAAAeAAAAAAAAHgAAAAAAAAwAAAAAAAAMAAAAAAAQH8fAAAAAHB/fwAAAAB8f38BAAAADHxDAQAAAAZ4AQMAAAADeAECAAAAAXgBAgAAAAN4AQIAAAABeAEDAAAAAH4DAgAAAEB/AwAAAABwfwcAAAAAeH8HAAAAADhgBwAAAAAwYAcAAAAAMGAHAAAAAHBgAwAAAABgQAMAAAAAYEADAAAAAEBAAwAAAABwQAMAAAAAAEABAAAAAABgAQ==",
|
||||
"AAAAAEBhAAAAAABAYAAAAAAAYEAAAAAAAGBAAAAAAAAgYAAAAAAAIEABAAAAAAAAACAAAAAAAABgQAEAAAAAQGEDAAAAAABhAwAAAAAAYwMAAAAAAEYBAAAAAABOAQAAAAAAfA8AAAAAAHgfAAAAAAB4PwAAAAAAeHcBAAAAAHhjAwAAAABwAw8AAAAAcAM8AAAAAHADIAAAAABwBwAAAAAAcAcAAAAAAHAHAAAAAABwDwAAAAAAeA8AAAAAAHgOAAAAAAB4DgAAAAAAOA4AAAAAADgOAAAAAAA4DgAAAAAAOAwAAAAAADgcAAAAAAA4HAAAAAAAMBgAAAAAADAYAA==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"ra2trdygoKCgoKCgqqDEwdTFoMnO0NXUoNPVwtLP1dTJzsWgqqCgoKCgoKDcra2tra2tra2tra2tra2tra2tra2tra2vioqKigENKAXUwnEuP7MkAHIBOTwFZLMkAGXUwgNNNrhkAwPMz8NxsQEAA81xsAAAA8RxsAAAA1LJzkADYDvJzkByFrAAACSxPAUBGVAFXLF0BANgN9PJx84ksTwFA81xztXNARRkBWDNHLEBAB7NGbEMACSxPAUBGXgFXLF0BANgN9PJx84ksTwFA8RxztXNAQ6MBWDEHLEBACSxPAUBGaAFXLF0BANgN9PJx84ksTwFA9lxztXNASm0BQ==",
|
||||
"zkByFrAAACVbATecBGA7yc5AchzMz8MlWwPTycfOcbEBAANV08PSVszPw1c7yc5AcgPDyNJxPMnOQCrTw9JycgEQsARgw8jSFrGgACSxAAUBGMQEYMPI0hyxsAAew8jSGbG5ACSxFAUBK9gEYM7VzRyzzAweztXNFrPMDB3DyNIcsbgAJLHsBAPTycfOcbAAAANbARfsBM7VzXGxCgAUztXNE7GwABLDyNIBCAAFWdPD0gEyFAXTycfOcdPJx84UONPD0hfMz8NyA87VzXHTycfOFM7VzQPMz8Nx08PSErEBAANbAWUeBV2Kioqvra2tra2tra2tra2tra2tra2trQ==",
|
||||
"AAADZLIXAGW5YAABb0wEZLICAGWxrQADZLMDAGW0MAADZLQEAGWxwAADZLUFAGWxpQADZLYGAGWwAAADZLcHAGWzIAADZLgIAGWxqAADZLkJAGWy/AADZLEKAGWxpQADZLELAGWxAQADZLEMAGWy0AADZLENAGW0BAABCGAEX7hAAQFmdARdioqKr62tra2tra2tra2tra2tra2tra2tra2tra3coKCgoKCqoNPU0snOx6DWwczVxaDT1cLSz9XUyc7FoKqgoKCgoNytra2tra2tra2tra2tra2tra2tra2tra2tr4qKigEhiATO1c1xsAAAA9PJx85xsAAAA2A7yQ==",
|
||||
"xyXGzXHNErEBABOxDAAUOM0ZsQsAcgNgN83GzMHHHcbNFrEBACXG2XHZErEBAAPNxszBx3GwAAABCOgDXLgsAQER/APGzMHHcbEBAANfsQgCAVMQBMPEcbMfABOxAQAUOM0WuQkAHs0WtAQAHs0WtgYAHs0WsQsAchOzAwAUOM0WsgIAchKxAQAUODc42R+0BAByHTjZH7FkAHIdzRayAgByA1sBCiQEXaDJzsnUAV04BGSxDgBlscYAA2SxDwBlshgAA2SxEABlsvAAA2SxEQBltQUAA2SxEgBlscYAA2SxEwBlsQEAA2SyFABlt0wAA2SyFQBlsgIAA2SyFgBlsA==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"Q09NTUFORCBBUkUgSUdOT1JFRCIAHhvOCbAzODYwAEMb2Am6wFRUKSJJTlBVVCBTWU5UQVgiwFBUKSJQQUdFIDkgIgBJG+IJugB4G+wJuiIgICAgIFRIRSBGSVJTVCBMRVRURVIgQUZURVIgJyYnIE1VU1QgQkUiAJAb9gm6IkMsRSxGLEgsSSxNLE9SIFMiAL0bAAq6OroiICAgICBDLEgsQU5EIE0gRVhFQ1VURSBJTU1FRElBVEVMWS4iAOUbCgq6IlRIRSBSRVNUIE9GIFRIRSBMSU5FIElTIElHTk9SRUQuIgAQHBQKujq6IiAgICAgRSxGLEksQU5EIFMgIA==",
|
||||
"ACgadAm6IiAgICAgSSAgLSAgTElORSBOVU1CRVIgSU5DUkVNRU5UIgBJGn4JuiIgICAgIFMgIC0gIFNUQVJUIE9GIFJBTkdFIgBoGogJuiIgICAgIEUgIC0gIEVORCBPRiBSQU5HRSIAgRqSCbo6uiJDT01NQU5EIExFVFRFUlMiAJkanAm6IiAgICAgTSAgLSAgTUVSR0UiALAapgm6IiAgICAgSCAgLSAgSE9MRCIAyhqwCboiICAgICBDICAtICBDT05WRVJUIgD3GroJujq6IiAgICAgRVhUUkEgTEVUVEVSUyBBTkQgU1BBQ0VTIEFGVEVSIgAUG8QJuiJBIA==",
|
||||
"UFVUIFNZTlRBWCLAUFQpIlBBR0UgOCAiAB4ZLgm6AEsZOAm6IiAgICAgVEhFIEZJUlNUIENIQVJBQ1RFUiBPRiBBTlkgSU5QVVQiAF8ZQgm6Ik1VU1QgQkUgJyYnLiIAjhlMCbo6uiIgICAgIFJFTlVNQkVSIC8gTUVSR0UgT05MWSBSRUNPR05JWkVTIgC9GVYJuiJUSEUgRk9MTE9XSU5HIFNJTkdMRSBDSEFSQUNURVIgQ09NTUFORFMiANgZYAm6OroiUEFSQU1FVEVSIExFVFRFUlMiAAAaagm6IiAgICAgRiAgLSAgRklSU1QgTkVXIExJTkUgTlVNQkVSIg==",
|
||||
"OroiICAgKiBNRVJHSU5HIFdJVEggTk8gUFJPR1JBTSBJTiIATRjeCLoiICAgICBNRU1PUlkgUkVTVE9SRVMgVEhFIEhPTEQgRklMRSIAbRjoCLo6uiIgICAgICAgICAgICAgICBDT05WRVJUIgCAGPIIujq6IiYgQ09OVkVSVCIArBj8CLo6uiIgICAgIFdJTEwgQ09OVkVSVCBBTiBSQU0gQVBQTEVTT0ZUIgDWGAYJuiJQUk9HUkFNIFRPIFJVTiBXSVRIIEEgUk9NIENBUkQgQU5EIgDpGBAJuiJWSUNFIFZFUlNBLiIA8xgaCbAzODYwABgZJAm6wFRUKSJJTg==",
|
||||
"CLoALxeYCLoiICAgICBNRVJHRSBXSUxMIENPTUJJTkUgVEhFIEhPTEQgRklMRSIAXBeiCLoiV0lUSCBUSEUgUFJPR1JBTSBDVVJSRU5UTFkgSU4gTUVNT1JZLiIAhxesCLo6uiIgICAqIExJTkUgTlVNQkVSUyBBUkUgQVJSQU5HRUQgSU4iAKMXtgi6IiAgICAgQVNDRU5ESU5HIE9SREVSIgDSF8AIujq6IiAgICogRFVQTElDQVRFIExJTkUgTlVNQkVSUyBXSUxMIEJPVEgiAPoXygi6IiAgICAgQVBQRUFSLCBIT0xEIFZFUlNJT04gU0VDT05EIgAjGNQIug==",
|
||||
"RklSU1QgUFJPR1JBTSBBTkQiAB4WNAi6IlRZUEUiAC4WPgi6OroiJiBIT0xEIgBbFkgIujq6IiAgICAgTkVYVCwgTE9BRCBUSEUgU0VDT05EIFBST0dSQU0uIgCHFlIIuiJZT1UgTUFZIFJVTiBPUiBSRU5VTUJFUiBUSElTIFBST0dSQU0iAJkWXAi6IkFTIE5FRURFRC4iAMMWZgi6OroiICAgICBUSEVOLCBUTyBNRVJHRSBUSEUgVFdPIFRZUEUiANQWcAi6OroiJiBNRVJHRSIA3hZ6CLAzODYwAPwWhAi6wFRUKSJNRVJHRSLAUFQpIlBBR0UgNyAiAAIXjg==",
|
||||
"zR+ptSDNH6UvIL0fpUEgvR+lSyC9H6UvRUFFS0hKBUqdjcDdjMBoCaogzB+p3iDNH6mqIM0fqesgzR+p/yDNH6AChEagrdAGiPANSGjqSGidjcDdjMCw8MZG0PKkRxgkAJ2NwL2MwKVLaQqFS+kM8AqwASyFS6n/TOseSGikR72NwL2OwDAyiEhoSGhIaIjQ9yBlGbAEpS3wCqRHiMAQkBhMsh7mQaVBySOwEgogHhqkR8jIhEdMsh6pQEw5Hkw3HkhKBUqdjcDdjMBowQAJqupIaOqdjcDdjMBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"OR7wN6ADsUiFL0ygHqADsUhIpS+gDpFIaPAIxS/wBKkg0NugBaUt0UjQlSiQGCD9GAiwjCggwRmu+AUYJDigDZFIvYjAYCBqGJDwqRCw7kigAbE8amiQCAogXB5OeARghS4gfx65eAQkNTADufgEjXgEpS4kNTAFmfgEEAOZeARMHhqKSkpKSqhgSKACsUhqZjUgfx5oCiQ1MAWZ+AQQA5l4BGCpgI14BKkAhUEgHhqpqoVKoFCER6knhUu9jcC9jsCp/52PwN2MwCQAiPAPSGjqSGjq6p2NwN2MwLDuxkvQ8KRH6urQBkhoSGjBAOqdjcDdjMCI0PCp1SDMH6mqIA==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"KQAMMTwAgUrQMcFJABgxRgA6hEEkKEopAB8xUACCSgAzMVoAukQkOyJDTE9TRSAiO1okAEkxZAC6RCQ7Ik5PTU9OIEMsSSxPIgAAAApNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"SwEWMAoARCTQ5yg0KTqyIENUUkwgRAA/MAwAuiJUSElTIFBST0dSQU0gUkVUUklFVkVTIFRFWFQgRklMRVMiAGwwDgC6IkNSRUFURUQgQlkgVEhFICdDUkVBVEUgVEVYVCcgUFJPR1JBTS4iAIswEAC6Ik1PTiBDLEksTyBJUyBJTiBFRkZFQ1QuIgCRMBIAugCvMBQAhCJOQU1FIE9GIFRFWFQgRklMRT8gIjtaJADDMBYAukQkOyJNT04gQyxJLE8iAMkwGAC6ANwwHgC6RCQ7Ik9QRU4gIjtaJADvMCgAukQkOyJSRUFEICI7WiQA9jAyAIRJAAExNwCGQSQoSQ==",
|
||||
"AAAAAAAAAAAAAAAAGwMbAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"VCI7AAstKA++QSQAGi0yD63mKEEkKdAzxIAALS08D63mKEEkKdAyN8QzOTMwADMtRg+XADktUA+xAEMtWg+rMTAwMABJLWQPgABsLW4PojIwOroiIjqiMjA6uiIEUlVOIFJFTlVNQkVSIjqAAAAAAKIyMDq6IgRSVU4gUkVOVU1CRVIiOoAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"IgAyLMQOuiJDQU4gVVNFIFRISVMgTUVNT1JZIEZPUiBUSEVJUiBPUEVSQVRJT04uIjsAXyzODroiVEhFUkVGT1JFIEZPUiBNQVhJTVVNIFVTRUFCTEUgTUVNT1JZLCIAiyzYDroiVVNFIFRIRSBIT0xEIEZJTEUgT05MWSBXSElMRSBNRVJHSU5HIgCcLOIOuiJQUk9HUkFNUy4iAKYs7A6wMzg2MACwLPYOqzEwMDAAyCwAD7IgIDUzNjQ0MzcxMCA0QVBSODAAziwKD4AA1iwUD6IyNAADLR4PuiJQUkVTUyBTUEFDRSBGT1IgTU9SRSwgRVNDIFRPIFJFU1RBUg==",
|
||||
"UkVOVU1CRVIgSVMgUFJPQkFCTFkgSU5UQUNULiIATCuSDro6uiIgICAgIFRIRSBJTlRFTkRFRCBVU0UgRk9SIE1FUkdFIElTIFRPIgB4K5wOuiJCRSBBQkxFIFRPIElOU0VSVCBTVUJST1VUSU5FUyBJTlRPIEEiAKIrpg66IlBST0dSQU0gRlJPTSBBIFNVQlJPVVRJTkUgTElCUkFSWS4iANMrsA66OroiICAgICBUSEUgJ0hPTEQnIEZJTEUgSVMgQSBTRVBBUkFURSBQQVJUIgABLLoOuiJPRiBNRU1PUlkuICBORUlUSEVSIEJBU0lDIE5PUiBSRU5VTUJFUg==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"Li4AMA3bAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAF4N3ACDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCMDd0Ag1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4Aug3eAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAOgN3wCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAWDuAAg1wuLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBKDNYAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AeAzXAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKYM2ACDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDUDNkAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AAg3aAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4ANgvQAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAGQL0QCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCSC9IAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AwAvTAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAO4L1ACDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAcDNUAg1wuLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBQCssAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AfgrMAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKwKzQCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDaCs4Ag1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ACAvPAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"Li4uLgAyFAIBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AYBQDAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAI4UBAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgC8FAUBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A6hQGAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uABgVBwGDXC4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAEwT/QCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgB6E/4Ag1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AqBP/AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uANYTAAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAEFAEBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLgA4EvcAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AZhL4AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAJQS+QCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDCEvoAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A8BL7AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAB4T/ACDXC4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAFIR8gCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCAEfMAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ArhH0AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uANwR9QCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAKEvYAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLgA+EOwAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AbBDtAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAJoQ7gCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDIEO8Ag1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A9hDwAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uACQR8QCDXC4uLg==",
|
||||
"AINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAFgP5wCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCGD+gAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AtA/pAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAOIP6gCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAQEOsAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLgBEDuEAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4Acg7iAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKAO4wCDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDODuQAg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A/A7lAINcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uACoP5g==",
|
||||
"D5YyyknIMjq66ihBJCxJLDEpOwAcD7QPgkk6sQAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"Li4uLi4uADQbKQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBiGyoBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AkBsrAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAL4bLAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDsGy0Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AGhwuAYNcLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AThokAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAHwaJQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCqGiYBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A2BonAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAAYbKAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uADoZHgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBoGR8Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AlhkgAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAMQZIQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDyGSIBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AIBojAYNcLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AVBgZAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAIIYGgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCwGBsBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A3hgcAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAAwZHQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uAEAXEwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBuFxQBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AnBcVAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAMoXFgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgD4FxcBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AJhgYAYNcLg==",
|
||||
"Fg0Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AWhYOAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAIgWDwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgC2FhABg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A5BYRAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uABIXEgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAEYVCAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgB0FQkBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AohUKAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uANAVCwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgD+FQwBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ALA==",
|
||||
"oMTJ08ugwc7EoNDSxdPToNLF1NXSzilHA1LEy0ABCQgCTTa5qAMBBRICWwGgwc7EoNDSxdPToNLF1NXSzilHA1LEy0ABCQgCTTa5qAMBBRICWwFgA1LEy0ABCYEBTTa5qAMBBYYBWwEMAVsB0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"UExFQVNFIEVOVEVSIFRIRSBTRUFSQ0ggS0VZOiI6ojEzOpY1OoQiIjtTJDqtUyTQIiLEMjUwMDAATyj0A61QUsSwNzAwOroiICI6uiIgIgCvKPcDlzqiMTq6IiBOQU1FICAgICAgICAgICAgICAgICAgICAgIFBIT05FIE5VTUJFUiI6uiItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgC8KPkDrVBSxLA3NTAAyij6A61T0DLEMjUxMAD4KPwDojEyOozJODY4OpYxMjqeOroiPDwgU0VBUkNISU5HID4+IjqdOlZU0DIAASkBBK46hw==",
|
||||
"TiBTQVZFRCEhByI6ojIyOoAAHyd6A4k6lzqiMjI6gAAvJ+gDsgoKU0VBUkNICgoARCftA7AzMDAwOq1PUNAxxDEwMTAApCfuA5c6ojk6ljU6uiJXT1VMRCBZT1UgTElLRSBUTyBTRUFSQ0ggQlkiOro6ljEwOroiMSAgV09SRCAoRkFTVCkiOpY3OroiT1IgMiAgQ0hBUkFDVEVSIChTTE9XKSIA8CfvA6IxNDqMyTg2ODqWMjA6hCJXSElDSDogIjtTSyQ6U0vQ5ShTSyQpOq1TS9HPMc1TS9HPMs7jKFNLJCnPMcS6IgciOqsxMDA3ADgo8gOXOqIxMTqWNTq6Ig==",
|
||||
"OrEAFyYgA7IKCkVORCBST1VUSU5FCgoAJSYqA61NRtAwxDg5MABVJjQDrURJU0vEuucoNCkiU0FWRSBQSE9ORSBMSVNUIjqJOpc6ojIyOow5NzY6gAC2Jj4DlzqiMTE6uiJJTlNFUlQgQSBORVcgVEFQRSBJTlRPIFRIRSBSRUNPUkRFUiwgU0VUIjs6uiJPTiBSRUNPUkQsIEFORCBQUkVTUyAnUkVUVVJOJyAiOzqEIiI7UyQA1iZIA4FJ0DHBMTUwMDqCOrc6gUnQMcEyMDAwOoI6twARJ1IDlzqiMTI6uiJUSEUgUFJPR1JBTSBBTkQgREFUQSBIQVZFIEJFRQ==",
|
||||
"KcjiKDEwMDEp0DE5MsRESVNL0DEAMyXWAa1ESVNLxLrnKDQpIk5PTU9OIEMsSSxPIjqXAGAl9AGyCgpHRVQgQUREUkVTUyBPRiBGSVJTVCBEQVRBIFNUQVRFTUVOVAoKAIMl/gGqU1RBUlTQKOIoMTAzKcjiKDEwNCnKMjU2yDQ1OCkAoyUmArIKClNFVCBGQVNUL1NMT1cgU0VBUkNICwsKCgCtJTACqk9Q0DAAuCU6AqsyNTAwMADSJbwCsgoKQUNUSVZBVEUgUFJJTlRFUgoKANwlxgKKU0w6sQD5Je4CsgoKREUtQUNUSVZBVEUgUFJJTlRFUgoKAAIm+AKKMA==",
|
||||
"Li4AMCRbAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAF4kXAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCMJF0Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AuiReAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uANQkkAGyCgpTRVQgUFJJTlRFUiBTTE9UCgoA3iSaAapTTNAxAPUkwgGyCgpESVNLIFNZU1RFTT8/CgoAFCXMAa3iKDk5NA==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBKI1YBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AeCNXAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKYjWAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDUI1kBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AAiRaAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4ANiJQAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAGQiUQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCSIlIBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AwCJTAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAO4iVAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAcI1UBg1wuLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBQIUsBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AfiFMAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAKwhTQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDaIU4Bg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ACCJPAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4APCBFAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAGogRgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCYIEcBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AxiBIAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAPQgSQGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAiIUoBg1wuLi4uLg==",
|
||||
"XC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBWH0ABg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AhB9BAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uALIfQgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDgH0MBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ADiBEAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4AQh46AYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAHAeOwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCeHjwBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AzB49AYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAPoePgGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgAoHz8Bgw==",
|
||||
"AC4dNAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgBcHTUBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4Aih02AYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uALgdNwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgDmHTgBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4AFB45AYNcLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ASBwvAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAHYcMAGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgCkHDEBg1wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4A0hwyAYNcLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uAAAdMwGDXC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg==",
|
||||
"rccDrsgDrMkDYInppaCzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"wAILAUzXAkz3AkwXA7DLuaCwotPJgaClxAIBIKsDogGp/53RAp3TAsoQ96ABsTyNzgLIsTyN0AJMNAMgqwOiAb3RAjAIySOQBKkB0CggOAOwE6AOsTyNygKQDiCrA6IAIDgDkASpAtAMvc0ChQ+9zwKFEKkAjckCILwDYI7GA6zLAoiMygOpAKADkTzuygOtygPNzALwD73TAhAR/tECvdECySOQAhhgqQ+d0wKpAKAIkTytygPIkTy9zQKgAZE8vc8CyJE8yL3RAsiRPMi90wKRPKAMvdUCkTwg4wMg2QMgtAOQAWCuxgPe0wJMSAONxwOOyAOMyQMg4wOFPYQ8YA==",
|
||||
"AAAAAAAAAAAAAAAAHw4fDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"IEVESVQgQU5EIFBSRVNTIjq6IidSRVRVUk4nLiI6sDUwMjAAaTWEF6IxMzqMyTg2ODqEIkRPIFlPVSBXSVNIIFRPIEVESVQgVEhJUyBEQVRBIChZL04pICI7UyQ6rVMk0CIixDI1MDAwAIg1jhet6ChTJCwxKdAiWSLETk4k0E5BJDqrNjA1MACfNZMXregoUyQsMSnQIk4ixLA1MDcwAK41mBe6IgciOqs2MDIwAMg1oheyCgpHTyBFRElUIFRIRSBMSU5FCgoA4jWsF5c6ojg6uk5OJDqwNDAyMDqwNDM2MADtNbYXqzI1MDAwAA021BeyIAoKUkVNT1ZFIENPTg==",
|
||||
"KFMkLDEp0c8iTiLEuiIHIjqrNTEzMAAgNB4UqzUwODEAPDRQFLIKCk9LIFRIRU4sIEtJTEwgSVQhAQoKAE00WhSqVUTQyTE6sDQyNTAAazRkFKpDVdAoU1RBUlTIKChMTskyMDEpyjQ2KSkAfDRuFLlDVSzmKOcoOTIpKQCNNHgUsDQ0NTA6qzI1MDAwAKc0cBeyCgpFRElUIEEgREFUQSBMSU5FCgoAszR6F5c6sDMwMDAAIzV8F5c6ojEwOroiUExFQVNFIEVOVEVSIFRIRSBOQU1FIE9GIFRIRSBQQVJUWSBXSE9TRSI7OroiTElTVElORyBZT1UgV0lTSCBUTw==",
|
||||
"KE5BJCzjKEskKSnQSyTENTEwMAAzM9MTregoTkEkLDEp0OcoOTIpzVVV0dBOUsQ1MDcwAD8z2BNVVdBVVcgxAFAz2ROtVVXR0E5SxDUwNzAAXTPaE5c6qzI1MDAwAHQz7BOyCgpGT1VORCBBIE1BVENICgoAljP2E6pMTtDiKDEyMynI4igxMjQpyjI1NjpVVdBVVcgxAKwzABSXOqIxMTq6TkEkOq1T0DXEsQD5MwoUojEzOozJODY4OoQiRE8gWU9VIFdJU0ggVE8gREVMRVRFIFRISVMgREFUQSAoWS9OKSAiO1MkOq3oKFMkLDEp0CJZIsQ1MjAwABY0FBSt6A==",
|
||||
"CgpERUxFVEUgREFUQSBDT05URU5UUwoKACQyjROXOrAzMDAwAJIykhOXOqIxMDq6IlBMRUFTRSBFTlRFUiBUSEUgTkFNRSBPRiBUSEUgUEFSVFkgWU9VIjq6IldJU0ggREVMRVRFRCBGUk9NIFRIRSBESVJFQ1RPUlkgQU5EIjq6IlBSRVNTICdSRVRVUk4nLiIAuDKcE6IxNDqEIi0+ICI7SyQ6rUsk0CIizVPQNcShOqsyNTAwMADJMqYTrUsk0CIixDI1MDAwAOYyuhOyCgpGSU5EIEFOIEVYQUNUIE1BVENICgoA9DLEE646h1o6VVXQMQATM84Th05BJDqt6A==",
|
||||
"RQoKACAx1hCHVCQ6regoVCQsMSnRz+coOTIpxDQzMTAAOjHgEKpMTtDiKDEyMynI4igxMjQpyjI1NgBUMf4QsgoKQ0FMQ1VMQVRFIE9GRlNFVAoKAHIxCBGqQ1XQKFNUQVJUyCgoTE7JMjAxKco0NikpAIoxMBGyCgpQT0tFIERBVEEgTElORQoKAJwxOhGBSdBDVcEoQ1XIMzkpALgxRBG5SSzmKOooTk4kLEnIMclDVSwxKSk6ggDRMWIRsgoKU0VUIFVQREFURSBGTEFHCgoA6TFsEapNRtBNRsgxOq1T0DTOU9A1xLEA9DF2EasyNTAwMAD6MZMRswAYMogTsg==",
|
||||
"xDQyMDAADzBeEKpVRNAxAC0waBCyCgpQQUQgVE8gNDAgQ0hBUkFDVEVSUwoKAFUwchCBSdDjKE5OJCnBKDM5yeMoTlAkKSk6Tk4k0E5OJMgiLiI6ggBtMHwQqk5OJNBOTiTITlAkOq1T0DXEsQCJMJoQsgoKVVBEQVRFIERBVEEgTlVNQkVSCgoApzCkEK46h1Q6VNBUyFVEOkNV0ChTVEFSVMkxMSkAvzCuEKpUJNDkKFQpOoFJ0DHB4yhUJCkA2jC4ELkoQ1XISSks5ijqKFQkLEksMSkpOoIA5TDCEK1T0DTEsQADMcwQsgoKRklORCBFTVBUWSBEQVRBIExJTg==",
|
||||
"IERPTkUhISEiOp0AETiKAroAQDiUAroiWU9VUiBBUFBMRSdTIFJFQURZIFRPIERPJ0VSIElUJ1MgVEhJTkchIgBiOJ4CuiJBTEwgWU9VIEhBVkUgVE8gRE8gSVMgVFlQRSIAdDioAroiRVhFQyBETydFUiIAnziyAroiUFJFU1MgVEhFIFJFVFVSTiBLRVksIEFORCBTSVQgQkFDSy4iAAAAUlBSRVNTIFRIRSBSRVRVUk4gS0VZLCBBTkQgU0lUIEJBQ0suIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"IEkHBwcHB1QiUSQiABI3PwK6AEE3RAK6IkxJU1QgIDogUkVNICBFVkVOIE1PUkUgUkVDRU5UIFBST0dSQU0hISIAajdJAroiUkVNICBQQVVTRSBUTyBMT09LIEFUIE5FVyBMSVNUSU5HIgCIN04CuiJGT1IgWD0xIFRPIDgwMDA6TkVYVCBYIgCvN1gCuiJTQVZFIEVWRU4gTU9SRSBSRUNFTlQgUFJPR1JBTSEhIgDLN2ICuiJERUxFVEUgTkVXIFBST0dSQU0hISIA2jdsAroiQ0FUQUxPRyIA7zd2ArpEJCJDTE9TRSBETydFUiIACziAAro6ujqeOroiSVQnUw==",
|
||||
"/gG6IkNBTEwgLTE1NSAgOiBSRU0gIEpVTVBTIFRPIE1PTklUT1IiAEA2CAK6IjgwMC44MjAgSSA4MjEuODQwIgBKNhICuiJGUCIAfTYXAroiUFJJTlQiUSQiUEFVU0UgVE8gTE9PSyBBVCBNT05JVE9SIExJU1RJTkciUSQAmzYcAroiRk9SIFg9MSBUTyA0MDAwOk5FWFQgWCIArDYhAroiTU9OIEMsSSxPIgC7NiYCuiJDQVRBTE9HIgDUNjACuiJSVU4gTkVXIFBST0dSQU0hISIA2jY1AroADDc6AroiMTE1IFBSSU5UIlEkIldFIENBTiBFVkVOIENIQU5HRQ==",
|
||||
"VCA6IFJFTSAgTkVXIFBST0dSQU0hISIAOzWzAboiUkVNIFBBVVNFIFRPIExPT0sgQVQgTElTVElORyIAWjW4AboiRk9SIFg9MSBUTyA4MDAwOiBORVhUIFgiAGU1wgG6IklOVCIAdjXMAboiTU9OIEMsSSxPIgCNNdYBuiJMT0FEIENPTE9SIERFTU8iAJk14AG6IkxJU1QiAKM16gG6IkZQIgDONe8BuiJQUklOVCJRJCJQQVVTRSBUTyBMT09LIEFUIExJU1RJTkciUSQA7DX0AboiRk9SIFg9MSBUTyA0MDAwOk5FWFQgWCIA/TX5AboiTU9OIEMsSSxPIgAnNg==",
|
||||
"ABM0VAG6RCQiTU9OIEMsSSxPIgAnNF4BukQkIk9QRU4gRE8nRVIiADw0aAG6RCQiV1JJVEUgRE8nRVIiAEY0cgG6IkZQIgBXNHwBuiJNT04gQyxJLE8iAHQ0gQG6IlJFTSBIRVJFIElTIEEgUFJPR1JBTSIAejSGAboAljSLAboiMTAwIFRFWFQ6SE9NRTpWVEFCIDUiAME0kAG6IjExMCBQUklOVCJRJCJIRVJFJ1MgQSBORVcgUFJPR1JBTSJRJADQNJoBuiIxMjAgRU5EIgDWNJ8BugDwNKQBuiJTQVZFIE5FVyBQUk9HUkFNISEiAPY0qQG6ABc1rgG6IkxJUw==",
|
||||
"QU5EIFdBSVQgRk9SIEtFWSBUTyBCRSBQUkVTU0VELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAbTMiAb5BJDqtQSTQ5ygyNynEgDqyIEVTQyBLRVkgUFJFU1NFRACTMywBrUEk0OcoMzIpxDMyMDqyIFNQQUNFIEJBUiBQUkVTU0VEAMwzNgG65yg3KTs6qzI5MDqyICBCRUVQIEFORCBUUlkgQUdBSU4gICAgICAgICAgICAgICAgICAgAOszQAGXOro6siAgUFJPR1JBTSBTVEFSVFMgSEVSRQAANEoBqkQk0OcoNCk6skNUUkwtRA==",
|
||||
"Uk9HUkFNIElOIE1PUkUgREVUQUlMLiIAITLmALo6ljEwAEQy8ACeOroiPDwgSEFQUFkgRVhFQ1VUSU5HID4+IjqdOroAbDL6ALoiUFJFU1MgVEhFIFNQQUNFIEJBUiBUTyBNQUtFIFRISVMiAJIyBAG6IlBST0dSQU0gQ1JFQVRFIFRIRSBGSUxFIERPJ0VSLiIAmDIOAboAxTIYAboiSUYgWU9VIFdJU0ggVE8gU1RPUCBUSElTIFBST0dSQU0gTk9XLCIA5zIdAboiWU9VIE1BWSBQUkVTUyBUSEUgRVNDIEtFWS4iAEczIAGyICBFTkQgSU5TVFJVQ1RJT05TIA==",
|
||||
"SSBDT01NQU5ELiIAIjGgALo6uiJXSEVOIFlPVSBUWVBFIgA0MaoAuiJFWEVDIERPJ0VSIgBgMbQAuiJUSEVOIFRIRSBDT01NQU5EUyBJTiBGSUxFIERPJ0VSIFRBS0UiAI4xvgC6IkNPTlRST0wgT0YgWU9VUiBDT01QVVRFUi4gRUFDSCBDT01NQU5EIgC9McgAuiJXSUxMIEJFIEVYRUNVVEVEIEpVU1QgQVMgSUYgSVQgSEFEIEJFRU4iAOox0gC6IlRZUEVEIEFUIFRIRSBLRVlCT0FSRC4gVEhFIERPUyBNQU5VQUwiABcy3AC6IkRFU0NSSUJFUyBUSEUgUA==",
|
||||
"oAhLMGQAqlEk0OcoMzQpOrIgICAgICAzNCBJUyBUSEUgQVNDSUkgQ09ERSAgICAgIEZPUiBBIFFVT1RBVElPTiBNQVJLICgiKSAgAFowbgCJOpc6ojI6ljEyAHsweACeOroiPDwgIEVYRUMgREVNTyAgPj4iOp06ujq6AKkwggC6IlRISVMgUFJPR1JBTSBDUkVBVEVTIEEgU0VRVUVOVElBTCBURVhUIgDcMIwAuiJGSUxFIE5BTUVEICJRJCJETydFUiJRJCIgQ09OVEFJTklORyBTRVZFUkFMIgALMZYAuiJTVFJJTkdTLCBFQUNIIEEgTEVHQUwgQVBQTEUgSQ==",
|
||||
"AAAAAAAAAAAAAAAAIQ4hDSEMIQshCiEJIQghByEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"xM/OxY0Azs+gxsnMxdOg08XMxcPUxcSHjQDEydPLoMbVzMyNAMTJ08ug19LJ1MWg0NLP1MXD1MXEjQDGyczFoMzPw8vFxI0Aya/PoMXS0s/SjQDJztbBzMnEoMbJzMXOwc3FAIeHyc7T1cbGycPJxc7UoM3Fzc/S2aDUz6DS1c6g0NLPx9LBzY0AqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgoKCgoKCgoMHQ0MzFoN3boMbJzMWgxMXWxczP0MXSoKCgoKCgoKqqoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoA==",
|
||||
"16DGyczFoM7BzcWgxs/SoNTIxaDDz9DZoM/SjbzSxdTV0s6+oNTPoNLF0MzBw8WgxdjJ09TJzsegxsnMxaDP0o28w9TSzK3DvrzSxdTV0s6+oNTPoMPBzsPFzKDDz9DZjboAAMXS0s/SrqCgoMPPxMW9AI3Xz9XMxKDZz9WgzMnLxaDUz6DNwcvFoMHOz9TIxdKgw8/Q2b+gAI3JztPF0tSg08/V0sPFoMTJ08ugwc7EoNDSxdPToMGgy8XZAI3JztPF0tSgxMXT1MnOwdTJz86gxMnTy6DBzsSg0NLF09OgwaDLxdmgAMTPoNnP1aDXwc7UoNDSz83Q1MnOx7+gAA==",
|
||||
"Fb0V5xX/FQUWGRYkFjoWRxZSFmMWiRYqF8kX8xTkF+8X/hcOGDEYRBhOGFMYahh3GIUYhRiFGIUYhRifGMgY1xioGJEYtBjlGPMY08/V0sPFoNPMz9S/AKCgoKCgoMTSydbFvwDExdPUyc7B1MnPzqDTzM/UvwCgoKCgoKCgoKCgoMTSydbFvwDGyczFzsHNxb8Ayc7TxdLUoMTJ08vTrqCg0NLF09OgvMXTw76g1M+g0sXU1dLOoNTPoKDNwcnOoM3FztWgz9Kgwc7ZoM/UyMXSoMvF2aDUz6DCxcfJzo0AjcHM0sXBxNmgxdjJ09TTrqCNANTZ0MWgyc6gwaDOxQ==",
|
||||
"2v1M0wOiEyDNCq4cE5qiAI6tEyAdC0wOCM+goIGgpbHsoIOgoKKgxsnMxaCAoPCggaClsKCYoKWgoLqkgKCHoMigoK+ypaC6oMmgAMbJzMXOwc3FuqCgncyq06/YoKDUiaCMoKDIoICgoKCg5arSoKCgoOAAoLnFhKCGoKCwoK+grKCgz6DMoKSgoNDMoM6SoJCw6MiksKCgwcWgoKCquqDNoKCNusDjoKmuoK+iz4WxsrO0tba3uLkAt7kAtrK1s7S4ALEAsrezuQBlDqkN1w2WDYMNaA2yDb0Nyw1RGVEbURxRGlEdPBlKFFcUZBR2FIgUkhQmE+AUYxVyFUsTmQ==",
|
||||
"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"
|
||||
]
|
||||
]});
|
7
json/disks/index.js
Normal file
7
json/disks/index.js
Normal file
@ -0,0 +1,7 @@
|
||||
disk_index = [
|
||||
{
|
||||
"filename": "json/disks/dos33master.json",
|
||||
"name": "DOS 3.3 Master",
|
||||
"category": "System"
|
||||
}
|
||||
];
|
132
scripts/dsk2js.pl
Executable file
132
scripts/dsk2js.pl
Executable file
@ -0,0 +1,132 @@
|
||||
#!/usr/bin/perl -w
|
||||
# Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
#
|
||||
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||
# documentation for any purpose is hereby granted without fee, provided that
|
||||
# the above copyright notice appear in all copies and that both that
|
||||
# copyright notice and this permission notice appear in supporting
|
||||
# documentation. No representations are made about the suitability of this
|
||||
# software for any purpose. It is provided "as is" without express or
|
||||
# implied warranty.
|
||||
|
||||
use MIME::Base64 qw(encode_base64);
|
||||
use Getopt::Std;
|
||||
|
||||
$Getopt::Std::STANDARD_HELP_VERSION = 1;
|
||||
|
||||
my %opts;
|
||||
getopts('rn:c:t:', \%opts);
|
||||
|
||||
sub HELP_MESSAGE() {
|
||||
my $fh = shift;
|
||||
print $fh "dsk2js.pl [-c category] [-n name] [-t type] imagefile\n"
|
||||
};
|
||||
sub VERSION_MESSAGE() { my $fh = shift; print $fh "Version 1.0\n" };
|
||||
|
||||
open(DISK, $ARGV[0]) or die $!;
|
||||
binmode(DISK);
|
||||
|
||||
my ($name, $ext) = $ARGV[0] =~ /([^\/]+)\.(dsk|po|2mg)$/i;
|
||||
my $rv;
|
||||
my $buffer;
|
||||
my $readOnly = 0;
|
||||
my $volume = 0;
|
||||
|
||||
my $category = "Misc";
|
||||
|
||||
$name = $opts{'n'} if ($opts{'n'});
|
||||
$category = $opts{'c'} if ($opts{'c'});
|
||||
$ext = $opts{'t'} if ($opts{'t'});
|
||||
if ($opts{'r'}) {
|
||||
$readOnly = 1;
|
||||
}
|
||||
|
||||
$ext = lc($ext);
|
||||
|
||||
my $tmp;
|
||||
my $offset = 0;
|
||||
|
||||
if ($ext eq '2mg') {
|
||||
# $rv = read(DISK, $buffer, 0x40);
|
||||
# Format
|
||||
$offset += read(DISK, $buffer, 0x04);
|
||||
$tmp = unpack("a[4]", $buffer);
|
||||
if ($tmp ne '2IMG') {
|
||||
print STDERR "Invalid format";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
# Creator
|
||||
$offset += read(DISK, $buffer, 0x04);
|
||||
$tmp = unpack("a[4]", $buffer);
|
||||
print STDERR "Creator: " . $tmp . "\n";
|
||||
|
||||
# Header Length
|
||||
$offset += read(DISK, $buffer, 0x02);
|
||||
my $header_length = unpack("v", $buffer);
|
||||
|
||||
# Version Number
|
||||
$offset += read(DISK, $buffer, 0x02);
|
||||
my $version_number = unpack("v", $buffer);
|
||||
if ($version_number != 1) {
|
||||
print STDERR "Unknown version: " . $version_number . "\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
# Image Format
|
||||
$offset += read(DISK, $buffer, 0x04);
|
||||
my $image_format = unpack("V", $buffer);
|
||||
if ($image_format == 0) {
|
||||
$ext = "dsk";
|
||||
} elsif ($image_format == 1) {
|
||||
$ext = "po";
|
||||
} else {
|
||||
print STDERR "Handled image format: " . $image_format;
|
||||
exit(1);
|
||||
}
|
||||
print STDERR "Format: " . $ext . "\n";
|
||||
|
||||
# Flags
|
||||
$offset += read(DISK, $buffer, 0x04);
|
||||
my $flags = unpack("V", $buffer);
|
||||
if ($flags & 0x80000000) {
|
||||
$readOnly = 1;
|
||||
}
|
||||
if ($flags & 0x100) {
|
||||
$volume = $flags & 0xff;
|
||||
}
|
||||
|
||||
$rv = read(DISK, $buffer, $header_length - $offset);
|
||||
}
|
||||
|
||||
my $sector = 0;
|
||||
my $track = 0;
|
||||
|
||||
print "loadJSON({\n";
|
||||
print " \"name\": \"$name\",\n";
|
||||
print " \"type\": \"$ext\",\n";
|
||||
print " \"category\": \"$category\",\n";
|
||||
print " \"encoding\": \"base64\",\n";
|
||||
if ($readOnly) {
|
||||
print " \"readOnly\": true,\n";
|
||||
}
|
||||
if ($volume) {
|
||||
print " \"volume\": \"$volume\",\n";
|
||||
}
|
||||
print " \"data\":\n";
|
||||
print "[\n";
|
||||
for ($track = 0; $track < 0x23; $track++) {
|
||||
print ",\n" if ($track != 0);
|
||||
print " [\n";
|
||||
for ($sector = 0; $sector < 0x10; $sector++) {
|
||||
print ",\n" if ($sector != 0);
|
||||
$rv = read(DISK, $buffer, 0x100);
|
||||
print " \"";
|
||||
print encode_base64($buffer, "");
|
||||
print "\"";
|
||||
}
|
||||
print "\n ]";
|
||||
}
|
||||
print "\n]});\n";
|
||||
|
||||
close(DISK);
|
64
scripts/index.pl
Executable file
64
scripts/index.pl
Executable file
@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env perl -w
|
||||
# Copyright 2010-2013 Will Scullin <scullin@scullinsteel.com>
|
||||
#
|
||||
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||
# documentation for any purpose is hereby granted without fee, provided that
|
||||
# the above copyright notice appear in all copies and that both that
|
||||
# copyright notice and this permission notice appear in supporting
|
||||
# documentation. No representations are made about the suitability of this
|
||||
# software for any purpose. It is provided "as is" without express or
|
||||
# implied warranty.
|
||||
|
||||
use MIME::Base64 qw(encode_base64);
|
||||
use JSON qw(from_json);
|
||||
use Data::Dumper;
|
||||
use Getopt::Std;
|
||||
|
||||
my $disk;
|
||||
my @disks = ();
|
||||
|
||||
my %opts;
|
||||
getopts('pe', \%opts);
|
||||
|
||||
while (<json/disks/*.json>) {
|
||||
my $json;
|
||||
my $fn = $_;
|
||||
print STDERR "$fn\n";
|
||||
open(DISK, $fn) or die $!;
|
||||
while (<DISK>) {
|
||||
my $line = $_;
|
||||
|
||||
$line =~ s/^loadJSON\(//;
|
||||
$line =~ s/\);$//;
|
||||
|
||||
$json .= $line;
|
||||
}
|
||||
close(DISK);
|
||||
|
||||
$disk = from_json($json);
|
||||
$disk->{'filename'} = $fn;
|
||||
$disk->{'data'} = NULL;
|
||||
|
||||
push(@disks, $disk);
|
||||
}
|
||||
|
||||
@disks = sort { $a->{'category'} . $a->{'name'} cmp $b->{'category'} . $b->{'name'} } @disks;
|
||||
|
||||
my $first = 1;
|
||||
print "disk_index = [\n";
|
||||
foreach $disk (@disks) {
|
||||
next if $disk->{'private'} && !$opts{'p'};
|
||||
next if $disk->{'2e'} && !$opts{'e'};
|
||||
|
||||
print ",\n" unless ($first);
|
||||
print " {\n";
|
||||
print " \"filename\": \"" . $disk->{'filename'} . "\",\n";
|
||||
print " \"name\": \"" . $disk->{'name'} . "\",\n";
|
||||
if ($disk->{'disk'}) {
|
||||
print " \"disk\": \"" . $disk->{'disk'} . "\",\n";
|
||||
}
|
||||
print " \"category\": \"" . $disk->{'category'} . "\"\n";
|
||||
print " }";
|
||||
$first = 0;
|
||||
}
|
||||
print "\n];\n";
|
Loading…
x
Reference in New Issue
Block a user