Skip to content
This repository has been archived by the owner on Dec 24, 2020. It is now read-only.

Commit

Permalink
New blog post: TI-57
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffpar committed Nov 11, 2017
1 parent f14f259 commit efbdb66
Show file tree
Hide file tree
Showing 3 changed files with 320 additions and 4 deletions.
315 changes: 315 additions & 0 deletions _posts/2017-11-10-the-ti-57-programmable-calculator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,315 @@
---
layout: post
title: The TI-57 Programmable Calculator
date: 2017-11-10 15:00:00
permalink: /blog/2017/11/10/
machines:
- id: ti57
type: ti57
name: TI-57 Programmable Calculator
uncompiled: true
config: |
{
"ti57": {
"class": "Machine",
"type": "TI57",
"name": "TI-57 Emulator",
"bindings": {
"print": "printTI57"
}
},
"chip": {
"class": "Chip",
"type": "TMS-1500"
},
"clock": {
"class": "Time",
"cyclesPerSecond": 650000,
"bindings": {
"run": "runTI57",
"speed": "speedTI57",
"step": "stepTI57"
}
},
"display": {
"class": "LED",
"type": 3,
"cols": 12,
"rows": 1,
"color": "red",
"bindings": {
"container": "displayTI57"
}
},
"input": {
"class": "Input",
"map": [
["2nd", "inv", "lnx", "\\b", "clr"],
["lrn", "xchg", "sq", "sqrt", "rcp"],
["sst", "sto", "rcl", "sum", "exp"],
["bst", "ee", "(", ")", "/"],
["gto", "7", "8", "9", "*"],
["sbr", "4", "5", "6", "-"],
["rst", "1", "2", "3", "+"],
["r/s", "0", ".", "+/-", "=|\\r"]
],
"location": [139, 325, 368, 478, 0.34, 0.5, 640, 853, 418, 180, 75, 36],
"bindings": {
"surface": "imageTI57",
"power": "powerTI57",
"reset": "resetTI57",
"clear": "clearTI57"
}
},
"rom": {
"class": "ROM",
"wordSize": 13,
"valueSize": 16,
"valueTotal": 2048,
"littleEndian": true,
"file": "ti57le.bin",
"reference": "",
"values": [
4623,4386,5106,7051,3246,6152,5813,5628,5805,7051,4386,3246,7911,5132,1822,6798,
2600,1497,6539,6471,6642,6462,6899,6939,6660,3246,7587,4388,6648,4386,5634,7051,
4386,5692,7051,6154,6392,3246,7434,4388,3186,3197,7755,3194,8074,3495,3184,6731,
4065,6775,6300,6893,6327,3246,7273,4386,6768,4388,3246,8118,3186,7719,3879,6686,
2087,6236,6266,6890,6328,4386,3246,7317,6208,4388,3246,8140,3186,7761,3219,6743,
3261,6799,6679,6896,6755,3288,6240,3288,6311,4386,3246,8141,3238,6801,3188,6782,
3112,3246,6762,3290,3296,6314,4386,3217,7050,3250,6253,3194,6565,4386,6393,2079,
2241,5133,2079,1879,3588,1806,7051,5090,3329,7051,4388,3246,7300,3189,3186,7710,
3250,3237,7055,3587,5132,1793,3194,6325,5112,2272,2272,3310,6288,3584,1793,3590,
2273,3594,3310,7703,6277,5551,5511,3194,8075,1887,5587,7051,4386,3194,7172,5736,
3246,7051,804,8075,5813,5635,7051,3108,3246,6762,3359,4388,5132,3129,3133,3298,
7349,3128,3290,7349,3132,5234,7055,3308,3250,7590,4386,5426,3246,6335,3232,3194,
6342,3304,3298,6342,3246,7279,2271,3583,5276,3592,3551,2303,3877,6775,3298,6354,
3234,7280,3118,7799,2080,3114,6365,3118,7389,3110,3108,6367,3107,3115,3300,2055,
3594,5138,1815,1991,3298,7414,3310,6380,3234,6261,5230,6261,3306,3129,6384,3128,
3234,6388,5636,6389,5585,5138,5229,6799,3246,3296,6327,4224,5120,5136,2573,6406,
2657,5142,2656,5155,2657,6397,2777,5155,6475,5217,4224,5123,2599,3120,3124,2629,
6406,2656,5142,2657,5155,2656,6412,3186,3592,6427,5186,3225,1815,5537,3919,3587,
3246,6455,3250,6423,3250,3237,6431,3233,1505,2623,3194,6445,3116,3246,6450,3943,
3192,3848,2759,5123,5155,3234,7499,3233,5120,5136,2573,6678,2592,6469,4224,3246,
7463,5136,3233,2593,7499,3588,6475,3246,8095,3250,7702,3592,3248,5123,2593,7506,
544,6478,813,1028,808,6489,3589,2561,6469,5826,1991,3593,5142,3877,7184,3118,
6500,3117,3309,1255,3943,3192,3849,3877,6523,3292,3848,5255,3877,6526,1823,1061,
1281,557,2247,3232,3236,7660,3294,6633,6117,6045,6542,3849,3877,7530,2591,6056,
1535,1512,3134,6539,3130,3126,6539,3130,3122,7623,3841,5488,1528,1823,5416,616,
616,872,872,1061,7574,1127,2377,5826,872,872,5561,3234,7055,1384,3238,7055,
3233,5221,6706,4224,3308,3256,3237,3232,145,3194,6572,167,3495,3228,3220,3246,
6578,3488,3298,7608,3310,7464,3488,3488,3224,6440,3234,6450,3233,3258,7645,3118,
7474,3479,3903,165,7474,3116,6450,2599,2592,3124,3314,7631,4065,3128,3872,3318,
7635,3872,3321,3322,7638,3872,3232,3236,3310,3309,6527,1255,6527,1503,2623,3257,
3226,6447,3222,6630,3116,6447,3218,7621,6450,6118,6090,6542,3294,1312,6520,6115,
6096,6542,3250,7456,3246,7433,3252,6658,3262,7680,1999,5416,3591,3591,7676,1887,
3254,8079,3263,7055,3246,3296,7963,4388,5135,2561,3588,5133,3121,3125,6325,401,
257,3594,3588,2208,3590,6673,3249,4388,257,2193,329,473,3594,3588,1793,5416,
3184,1038,616,1038,3473,3877,7736,3218,7726,3216,679,672,680,592,3221,7055,
1320,5110,1328,7055,3250,7610,3186,6686,3222,7728,549,6718,3218,6727,719,744,
2024,2024,3282,7055,1038,616,1038,2055,1087,552,7055,3194,7726,3196,3220,1353,
7055,3222,6743,3308,5221,1144,5007,2121,2144,1896,79,3895,3122,7768,3167,2145,
8079,5492,6751,4386,3246,7287,3116,3194,6762,3288,4386,6019,3238,7799,3236,6801,
5127,3236,3872,3134,6777,3126,6777,3188,7050,5234,7054,5636,2079,6019,4065,6801,
4057,3594,2081,2085,2561,7815,2079,1815,3588,7054,3877,7843,3873,2277,3588,287,
7051,5127,2151,3877,2085,6807,2119,2149,7839,2141,6794,4064,3594,3322,7216,287,
3841,3105,6792,1887,1806,3162,6824,3128,2120,7854,2120,7803,5585,6780,2079,3588,
1999,1806,549,7870,5537,5736,1806,3589,5636,5805,5213,1999,2247,6780,3154,6849,
6124,613,6842,6137,5552,5537,6842,5132,3919,3090,2303,6861,3232,1887,5635,5112,
3189,5628,1822,5628,5691,3190,6872,3300,5112,3841,5857,1863,5133,613,7908,5628,
5112,1815,5627,7051,5485,1806,6260,3194,7879,3240,3120,3246,6176,3124,3246,6145,
3246,6173,5855,3250,6903,3246,6565,4386,3246,6973,5135,549,3094,7941,5108,3399,
3157,5583,3195,3588,6924,1793,6914,5132,5582,3298,6924,3090,549,7951,3232,3194,
6930,3235,1951,3234,7050,3262,3254,7050,5136,2592,7049,3250,6944,3246,3194,6564,
4386,3246,7943,5132,3194,8060,3262,3254,7980,3121,3125,6967,3126,7799,3872,3588,
3697,5211,3697,3588,5136,1807,3681,5234,3254,8026,3240,3262,8026,5426,5276,3877,
7034,3246,7002,2349,3527,5276,3877,3551,1535,1512,2055,3592,1528,7034,5136,2561,
3242,6996,3241,3260,1500,7799,1505,8073,2592,6998,2413,2413,1503,2687,2009,2265,
3551,5183,2629,2573,1504,7029,3593,296,296,3592,2272,3310,7010,3552,3294,8056,
3290,7007,3286,8032,7007,2408,2408,6990,2408,2408,2193,6775,3122,3123,3126,3125,
6224,3588,3665,5211,3665,3588,3697,5214,3681,3588,1815,3242,2193,7899,5426,3254,
7061,3262,3261,8085,3253,5276,3593,3877,2265,7732,3289,2305,1504,1508,3586,4386,
3194,8101,5426,5186,5253,3090,7080,2279,3089,5238,3194,7086,5253,7087,5574,5238,
3194,7091,5574,5221,3376,7051,4386,3300,5132,5627,3633,5213,5226,3681,5223,5106,
3697,5223,5133,3302,3303,8125,5552,3649,5223,3665,5223,7050,3296,4386,3194,8145,
3300,3681,5138,5136,3298,7333,1991,1807,5628,1806,5635,3697,1863,5138,5587,1806,
6309,1927,769,6093,6090,6099,6104,6112,6090,6045,6103,6101,5826,967,768,839,
768,3587,1991,5627,1865,103,2055,3587,5213,3588,1807,3587,0,0,0,0,
2663,3936,7164,5136,2631,1793,3587,3871,3594,455,3589,3587,1991,3649,6154,1991,
3665,6154,3302,7262,3584,6239,3293,6180,3294,6177,2591,3429,6187,3590,591,2687,
3587,2759,6174,3292,2639,639,3401,2575,5170,2145,7192,5488,1399,296,3424,1288,
7197,6185,2560,3130,6205,3126,6205,2085,7229,3114,8188,3872,2049,2119,3847,3594,
3584,3587,1100,3237,3185,3329,7241,3092,5570,621,1127,1120,616,97,7254,76,
7252,97,6561,3088,552,6220,616,5567,101,7254,6561,3589,3681,1863,3589,1806,
3587,5423,2592,3134,6241,2271,3587,1991,5138,1823,3855,5585,5138,1815,3302,7282,
3590,6259,3588,1823,2567,3587,5537,5551,5511,1822,5582,1822,1865,3156,3160,1901,
3156,1383,3855,3131,6826,5567,6591,3114,6293,3126,7309,3122,7317,3873,2080,3118,
6333,3126,7317,3841,2605,3587,2561,3588,3188,3261,3253,799,3192,3245,3195,3262,
3254,7364,975,3591,3591,7331,5411,3591,3591,6310,2623,3130,6318,3125,5420,5236,
1535,5255,3130,3877,7473,2085,6449,3122,6302,3126,7473,3247,6303,2080,3118,7316,
3872,3872,3872,6333,967,3593,3190,7321,3254,7389,3591,3591,6365,2623,3126,3130,
7389,2080,3118,6358,2081,6395,2080,3106,3110,7389,3114,6365,5217,5136,2592,3588,
2593,5170,3190,7318,2145,7400,296,6372,3877,7419,3118,6382,3117,3192,5488,3391,
3431,3160,3337,3365,3335,7419,3895,3337,3365,6417,3244,5235,1535,3877,7473,5255,
3877,6449,3246,3194,7430,5007,4375,3194,7435,799,4899,3246,7438,4954,2279,3308,
4208,2265,2193,3090,7447,3361,2215,3098,6426,3296,3094,7453,3308,3194,6432,3304,
1823,4375,4306,3190,6447,2592,3122,6444,841,3592,865,7471,3593,863,3592,3591,
3591,3587,3592,5537,3649,5213,1865,3156,5492,2009,3090,6461,3431,2119,3198,7494,
1479,992,992,1005,1509,7549,3284,2081,5490,5490,3118,6473,1028,6495,5491,711,
544,1252,6485,749,6481,741,6496,545,967,1815,5565,804,6452,799,6496,5491,
2149,6502,1061,6502,1125,7519,552,616,3286,6520,3094,6521,1120,3282,6513,3091,
3847,3587,2081,557,1901,3152,3164,3587,1377,1121,3587,5567,557,3094,7547,1317,
7495,621,5575,2081,6527,2049,6527,1814,841,3169,3094,7585,941,5575,3094,7580,
872,613,7572,3168,5527,552,6541,533,7629,529,864,6551,5567,936,3094,7585,
5527,3129,6567,37,6570,552,5575,549,6563,1793,3130,3129,8105,1927,6594,2007,
5108,783,3329,1281,3128,6563,1351,2121,1281,1377,8105,813,6585,513,39,3094,
7145,1313,1317,6597,3093,3587,5575,3094,8169,1313,6597,1319,3092,3587,1887,3128,
1806,3130,6612,3091,1423,3129,3158,7665,3094,1299,7670,1445,6608,1937,3090,6631,
3154,7657,525,7632,521,1887,6561,3154,7650,520,6687,557,877,5566,804,7653,
6687,3094,6608,1299,7632,1445,613,7645,557,5567,6612,1887,3129,6665,5553,1303,
3154,6561,5108,3128,3130,6652,549,8179,3095,1935,583,3338,3089,3154,6672,3088,
3217,3346,3222,7721,1288,8171,513,1425,1353,5570,677,7653,3130,7729,557,1185,
6633,685,677,7653,101,6686,872,5575,6687,1293,6701,3095,1294,1289,6678,905,
544,909,6703,37,6629,877,552,549,6705,5575,6705,5588,6138,1793,677,7585,
5108,1441,7755,1441,7751,1312,6721,3222,6730,1312,621,3217,2121,1287,2424,1281,
1425,6753,877,813,6752,897,897,776,901,6741,777,786,6749,165,6738,936,
877,869,6742,5554,3351,2383,1343,6629,3841,6138,1281,3088,549,8172,5558,841,
3122,6773,103,549,7678,798,769,2063,2081,7877,2081,7887,2081,7894,2081,7899,
39,6052,798,3122,6800,797,7829,793,655,534,6052,534,592,6789,535,856,
647,6052,534,530,6798,2144,749,741,6773,3122,7678,5814,1991,521,5554,1822,
3222,6819,3088,1895,1431,127,1453,621,1431,127,1806,5636,6612,3120,5813,5511,
3328,3170,8171,1423,6766,1863,1793,6106,6104,808,6106,6099,6090,6099,808,6112,
6104,808,808,808,3587,6098,6104,6045,808,6045,6093,6112,6090,5826,6786,6111,
6099,808,6104,6104,808,6860,6110,6099,5826,6106,6861,6109,6099,5825,6786,4386,
2303,3189,5537,3194,8019,3128,6058,5090,3189,768,5511,6005,5558,5089,768,3090,
6898,787,3329,5090,909,853,7930,3235,3126,6920,901,7936,897,3126,6912,3091,
3122,3877,6990,909,7944,787,3091,3235,925,7948,851,3128,791,3527,798,841,
913,167,3194,7958,6024,6935,6051,965,7976,963,798,3194,6946,6052,786,6024,
778,6930,6051,776,782,6052,897,6930,2144,741,6930,783,3130,6963,3194,6962,
5089,851,790,5554,5485,3194,8037,1814,5554,1879,5635,3089,5485,3126,6983,5106,
3125,5691,5634,5485,3190,6983,5545,3281,3234,6987,3280,2271,3967,5003,909,8017,
787,851,6920,6005,3527,3126,7005,5106,5587,5692,3190,8036,5635,3094,549,8034,
5634,3128,5558,6926,4751,3122,7020,5089,5553,1879,5587,3089,1927,3234,7027,5090,
3329,1879,5588,6058,6987,657,936,912,677,7597,3094,6573,3194,8037,3122,6987,
1991,5552,6987,3097,3290,6573,3096,6573,769,2063,2081,8085,2081,8095,39,2081,
7076,6108,6112,6095,7117,6111,6095,6090,6096,6099,6106,6101,6112,808,7145,6109,
6095,6095,7068,791,2063,813,2081,7077,2080,3587,5488,2175,5132,2349,2062,2600,
3182,8129,3178,7283,6099,6093,6106,6098,6092,6098,6045,6104,3329,808,6045,1879,
6660,6103,6095,6045,6112,6092,6106,6104,6093,7100,808,7138,6093,808,7139,6096,
808,7140,6112,808,7141,808,7142,6096,808,7143,808,7144,6112,6112,6112,6112,
808,800,800,800,800,800,800,800,800,1312,6597,3094,769,8177,801,3093,
8183,1313,8182,613,3343,7148,39,3188,6561,3130,3090,7165,3188,3587,0,0
]
}
}
styles:
ti57:
position: relative;
display: inline-block;
float: left;
displayTI57:
position: absolute;
top: 8%;
left: 24%;
width: 53%;
height: 4%;
powerTI57:
position: absolute;
left: 418px;
top: 180px;
width: 75px;
height: 36px;
opacity: 0;
printTI57:
font-family: Monaco,"Lucida Console",monospace;
---

The new [TI-57 Programmable Calculator](/devices/ti57/) emulator, shown below, is the latest addition to the
PCjs Machines collection.

Even though it's our smallest JavaScript-based emulator to date, it's still packed with goodies:

- Faithful speed and LED simulation
- Built-in disassembler and "mini-debugger"
- Works on desktop and mobile devices
- Saves and restores state automatically

Since it saves your calculator's state whenever the web page is closed, and restores that state when the page
is reopened, you shouldn't lose your work. However, just like a real calculator, if you turn it off and on again
(using the **Power** button), then everything will be reset.

The "mini-debugger" is connected to the Diagnostics window, so you can type commands there as well.
As the "?" command will tell you, available commands include:

b[c] break on condition c
bl list break conditions
g [addr] run (to addr)
h halt
r[a] dump (all) registers
t [n] step (n instructions)
u [addr] [n] disassemble (at addr)

Clicking the **Halt** button is equivalent to the "h" command, the **Run** button is equivalent to "g", and the
**Step** button is equivalent to "t". The **Reset** button has no equivalent; it's just a shortcut for cycling the
**Power** button. If you use the "t" command to step through a large number of instructions, the **Step** button
becomes a **Stop** button, allowing you to terminate the step operation.

In addition to supporting *touch* and *mouse* events, *keyboard* shortcuts are supported, too. The set
of shortcuts is configurable, based on the button *map* passed to the emulator. The default *map* looks like
this:

"map": [
["2nd", "inv", "lnx", "\\b", "clr"],
["lrn", "xchg", "sq", "sqrt", "rcp"],
["sst", "sto", "rcl", "sum", "exp"],
["bst", "ee", "(", ")", "/"],
["gto", "7", "8", "9", "*"],
["sbr", "4", "5", "6", "-"],
["rst", "1", "2", "3", "+"],
["r/s", "0", ".", "+/-", "=|\\r"]
]

Any button that corresponds to a single character can be triggered by typing that character (eg, "+" for the **Add**
button). Escape sequences are allowed, too; for example, `\\b` represents Backspace, which will trigger the **CE**
button. Buttons can have multiple mappings, too; for example, the **Equals** button can be triggered by typing either
"=" *or* the **Enter** key.

The LED display is configurable as well. The default JSON properties for the LED Device look like this:

"display": {
"class": "LED",
"type": 3,
"cols": 12,
"rows": 1,
"color": "red",
"bindings": {
"container": "displayTI57"
}
}

So if you prefer *green* or *blue* digits, change the *color* property. A *backgroundColor* property is supported,
too, but if it's omitted, a transparent background is used.

Since this emulator is still "hot off the press", don't be surprised if there are still a few lingering
bugs. If you run into any, or you have a browser or device where it doesn't work as expected,
[send me a note](mailto:[email protected]). If your web browser is "old" though, please try a newer browser first.

*[@jeffpar](http://twitter.com/jeffpar)*
*Nov 10, 2017*

{% include machine.html id="ti57" config="json" %}

<div id="ti57">
<img id="imageTI57" src="/devices/ti57/images/TI-57-640.png"/>
<div id="displayTI57"></div>
<button id="powerTI57">Power</button>
</div>
<div style="float:left;">
<div style="width:100%;">
<p>Diagnostics</p>
<textarea id="printTI57" cols="78" rows="16"></textarea>
</div>
<button id="runTI57">Run</button>
<button id="stepTI57">Step</button><span id="speedTI57">Stopped</span>
<button id="resetTI57">Reset</button>
<button id="clearTI57">Clear</button>
</div>
3 changes: 2 additions & 1 deletion devices/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ All PCjs machines are built from devices organized by CPU:
- [PDP-10 (Model KA10)](pdp10/machine/ka10/)
* [PDP-11](pdp11/)
- [PDP-11/20](pdp11/machine/1120/), [PDP-11/45](pdp11/machine/1145/), [PDP-11/70](pdp11/machine/1170/)
* [TI-57 Programmable Calculator](ti57/)
* Other
- [TI-57 Programmable Calculator](ti57/)

These devices are user-installable components that you would typically find in a real personal computer,
such as keyboards, disk drive controllers with one or more drives, video cards, etc.
6 changes: 3 additions & 3 deletions modules/devices/tms1500.js
Original file line number Diff line number Diff line change
Expand Up @@ -1540,12 +1540,12 @@ Chip.SFORMAT = {
Chip.OP_INPUTS = ["A","B","C","D","1","?","R5L","R5"];

Chip.COMMANDS = [
"b[c]\t\tbreak on condition",
"b[c]\t\tbreak on condition c",
"bl\t\tlist break conditions",
"g [addr]\trun (to addr)",
"h\t\thalt",
"r[a]\t\tdump registers",
"t\t\tstep",
"r[a]\t\tdump (all) registers",
"t [n]\t\tstep (n instructions)",
"u [addr] [n]\tdisassemble (at addr)"
];

Expand Down

0 comments on commit efbdb66

Please sign in to comment.