mz700-js
Version:
MZ-700 Full JavaScript Emulator
223 lines (209 loc) • 9.23 kB
text/typescript
"use strict";
/* tslint:disable:class-name max-classes-per-file no-bitwise */
class mzkey {
strobe;
bit;
face;
code;
strcode;
constructor(strobe, bit, face?, code?, strcode?) {
this.strobe = strobe;
this.bit = bit;
this.face = face || " ";
this.code = code || [];
this.strcode = strcode || face;
}
}
//
// MZ-700 Key Matrix
//
export default class MZ700KeyMatrix {
keymap;
constructor() {
this.keymap = new Array(10).fill(0xff);
}
getKeyData(strobe:number):number {
let keydata = 0xff;
strobe &= 0x0f;
if (strobe < this.keymap.length) {
keydata = this.keymap[strobe];
}
return keydata;
}
setKeyMatrixState(strobe:number, bit:number, state:boolean):void {
if (state) {
// clear bit
this.keymap[strobe] &= ((~(1 << bit)) & 0xff);
} else {
// set bit
this.keymap[strobe] |= ((1 << bit) & 0xff);
}
}
static KeyCodes = {
"Escape" : 27,
"F1" : 112, "F2" : 113, "F3" : 114, "F4" : 115, "F5" : 116,
"F6" : 117, "F7" : 118, "F8" : 119, "F9" : 120, "F10" : 121,
"F11" : 122, "F12" : 123,
"Numlock" : 44,
"ScrollLock" : 145,
"Pause" : 19,
"D0" : 48, "D1" : 49, "D2" : 50, "D3" : 51, "D4" : 52,
"D5" : 53, "D6" : 54, "D7" : 55, "D8" : 56, "D9" : 57,
"A" : 65, "B" : 66, "C" : 67, "D" : 68, "E" : 69, "F" : 70, "G" : 71,
"H" : 72, "I" : 73, "J" : 74, "K" : 75, "L" : 76, "M" : 77, "N" : 78,
"O" : 79, "P" : 80, "Q" : 81, "R" : 82, "S" : 83, "T" : 84, "U" : 85,
"V" : 86, "W" : 87, "X" : 88, "Y" : 89, "Z" : 90,
"Subtract" : 109,
"Caret" : 107,
"Atmark" : 192,
"Yen" : 106,
"Colon" : 186,
"SemiColon" : 187,
"Comma" : 188,
"Decimal" : 190,
"Divide" : 111,
"Backslash" : 226,
"OpenBrackets" : 219,
"CloseBrackets" : 221,
"Shift" : 16,
"Control" : 17,
"Alternate" : 18,
"Enter" : 13,
"Tab" : 9,
"Space" : 32,
"Backspace" : 8,
"Insert" : 45,
"Delete" : 46,
"Home" : 36,
"End" : 35,
"PageUp" : 33,
"PageDown" : 34,
"Left" : 37,
"Up" : 38,
"Right" : 39,
"Down" : 40,
"NumPad0" : 96,
"NumPad1" : 97,
"NumPad2" : 98,
"NumPad3" : 99,
"NumPad4" : 100,
"NumPad5" : 101,
"NumPad6" : 102,
"NumPad7" : 103,
"NumPad8" : 104,
"NumPad9" : 105,
"NumPadDivide" : 191,
"NumPadMultiply" : 220,
"NumPadSubtract" : 189,
"NumPadPlus" : 222,
"NumPadDecimal" : 110,
"Hankaku" : 243,
"Zenkaku" : 244
};
static Keys = [
new mzkey(0,0,"CR", [MZ700KeyMatrix.KeyCodes.Enter]),
new mzkey(0,1,":", [MZ700KeyMatrix.KeyCodes.Colon]),
new mzkey(0,2,";", [MZ700KeyMatrix.KeyCodes.SemiColon]),
new mzkey(0,3),
new mzkey(0,4,"英数", [MZ700KeyMatrix.KeyCodes.F10, MZ700KeyMatrix.KeyCodes.End], "ALNUM"),
new mzkey(0,5,"=", [MZ700KeyMatrix.KeyCodes.Backspace]),
new mzkey(0,6,"GRAPH", [MZ700KeyMatrix.KeyCodes.F12, MZ700KeyMatrix.KeyCodes.PageDown, MZ700KeyMatrix.KeyCodes.Alternate], "GRAPH"),
new mzkey(0,7,"カナ", [MZ700KeyMatrix.KeyCodes.F11, MZ700KeyMatrix.KeyCodes.PageUp], "KANA"),
new mzkey(1,0),
new mzkey(1,1),
new mzkey(1,2),
new mzkey(1,3,")", [MZ700KeyMatrix.KeyCodes.CloseBrackets]),
new mzkey(1,4,"(", [MZ700KeyMatrix.KeyCodes.OpenBrackets]),
new mzkey(1,5,"@", [MZ700KeyMatrix.KeyCodes.Atmark]),
new mzkey(1,6,"Z", [MZ700KeyMatrix.KeyCodes.Z]),
new mzkey(1,7,"Y", [MZ700KeyMatrix.KeyCodes.Y]),
new mzkey(2,0,"X", [MZ700KeyMatrix.KeyCodes.X]),
new mzkey(2,1,"W", [MZ700KeyMatrix.KeyCodes.W]),
new mzkey(2,2,"V", [MZ700KeyMatrix.KeyCodes.V]),
new mzkey(2,3,"U", [MZ700KeyMatrix.KeyCodes.U]),
new mzkey(2,4,"T", [MZ700KeyMatrix.KeyCodes.T]),
new mzkey(2,5,"S", [MZ700KeyMatrix.KeyCodes.S]),
new mzkey(2,6,"R", [MZ700KeyMatrix.KeyCodes.R]),
new mzkey(2,7,"Q", [MZ700KeyMatrix.KeyCodes.Q]),
new mzkey(3,0,"P", [MZ700KeyMatrix.KeyCodes.P]),
new mzkey(3,1,"O", [MZ700KeyMatrix.KeyCodes.O]),
new mzkey(3,2,"N", [MZ700KeyMatrix.KeyCodes.N]),
new mzkey(3,3,"M", [MZ700KeyMatrix.KeyCodes.M]),
new mzkey(3,4,"L", [MZ700KeyMatrix.KeyCodes.L]),
new mzkey(3,5,"K", [MZ700KeyMatrix.KeyCodes.K]),
new mzkey(3,6,"J", [MZ700KeyMatrix.KeyCodes.J]),
new mzkey(3,7,"I", [MZ700KeyMatrix.KeyCodes.I]),
new mzkey(4,0,"H", [MZ700KeyMatrix.KeyCodes.H]),
new mzkey(4,1,"G", [MZ700KeyMatrix.KeyCodes.G]),
new mzkey(4,2,"F", [MZ700KeyMatrix.KeyCodes.F]),
new mzkey(4,3,"E", [MZ700KeyMatrix.KeyCodes.E]),
new mzkey(4,4,"D", [MZ700KeyMatrix.KeyCodes.D]),
new mzkey(4,5,"C", [MZ700KeyMatrix.KeyCodes.C]),
new mzkey(4,6,"B", [MZ700KeyMatrix.KeyCodes.B]),
new mzkey(4,7,"A", [MZ700KeyMatrix.KeyCodes.A]),
new mzkey(5,0,"8", [MZ700KeyMatrix.KeyCodes.D8, MZ700KeyMatrix.KeyCodes.NumPad8]),
new mzkey(5,1,"7", [MZ700KeyMatrix.KeyCodes.D7, MZ700KeyMatrix.KeyCodes.NumPad7]),
new mzkey(5,2,"6", [MZ700KeyMatrix.KeyCodes.D6, MZ700KeyMatrix.KeyCodes.NumPad6]),
new mzkey(5,3,"5", [MZ700KeyMatrix.KeyCodes.D5, MZ700KeyMatrix.KeyCodes.NumPad5]),
new mzkey(5,4,"4", [MZ700KeyMatrix.KeyCodes.D4, MZ700KeyMatrix.KeyCodes.NumPad4]),
new mzkey(5,5,"3", [MZ700KeyMatrix.KeyCodes.D3, MZ700KeyMatrix.KeyCodes.NumPad3]),
new mzkey(5,6,"2", [MZ700KeyMatrix.KeyCodes.D2, MZ700KeyMatrix.KeyCodes.NumPad2]),
new mzkey(5,7,"1", [MZ700KeyMatrix.KeyCodes.D1, MZ700KeyMatrix.KeyCodes.NumPad1]),
new mzkey(6,0,".", [MZ700KeyMatrix.KeyCodes.Decimal, 110]),
new mzkey(6,1,",", [MZ700KeyMatrix.KeyCodes.Comma]),
new mzkey(6,2,"9", [MZ700KeyMatrix.KeyCodes.D9, MZ700KeyMatrix.KeyCodes.NumPad9]),
new mzkey(6,3,"0", [MZ700KeyMatrix.KeyCodes.D0, MZ700KeyMatrix.KeyCodes.NumPad0]),
new mzkey(6,4,"SPC", [MZ700KeyMatrix.KeyCodes.Space], " "),
new mzkey(6,5,"-", [MZ700KeyMatrix.KeyCodes.Subtract, MZ700KeyMatrix.KeyCodes.NumPadSubtract]),
new mzkey(6,6,"+", [MZ700KeyMatrix.KeyCodes.Caret, MZ700KeyMatrix.KeyCodes.NumPadPlus]),
new mzkey(6,7,"*", [MZ700KeyMatrix.KeyCodes.Yen, MZ700KeyMatrix.KeyCodes.NumPadMultiply]),
new mzkey(7,0,"/", [MZ700KeyMatrix.KeyCodes.Divide, MZ700KeyMatrix.KeyCodes.NumPadDivide]),
new mzkey(7,1,"?", [MZ700KeyMatrix.KeyCodes.Backslash]),
new mzkey(7,2,"←", [MZ700KeyMatrix.KeyCodes.Left], "LEFT"),
new mzkey(7,3,"→", [MZ700KeyMatrix.KeyCodes.Right], "RIGHT"),
new mzkey(7,4,"↓", [MZ700KeyMatrix.KeyCodes.Down], "DOWN"),
new mzkey(7,5,"↑", [MZ700KeyMatrix.KeyCodes.Up], "UP"),
new mzkey(7,6,"DEL", [MZ700KeyMatrix.KeyCodes.Delete]),
new mzkey(7,7,"INS", [MZ700KeyMatrix.KeyCodes.Insert]),
new mzkey(8,0,"SHIFT", [MZ700KeyMatrix.KeyCodes.Shift]),
new mzkey(8,1,"(BS)"),
new mzkey(8,2),
new mzkey(8,3,"(→)", [MZ700KeyMatrix.KeyCodes.Tab]),
new mzkey(8,4,"(CR)"),
new mzkey(8,5,"(SHIFT)"),
new mzkey(8,6,"CTRL", [MZ700KeyMatrix.KeyCodes.Control]),
new mzkey(8,7,"BREAK", [MZ700KeyMatrix.KeyCodes.Escape,MZ700KeyMatrix.KeyCodes.Pause]),
new mzkey(9,0,"HOME", [MZ700KeyMatrix.KeyCodes.Home]),
new mzkey(9,1,"(SPC)"),
new mzkey(9,2,"(↓)"),
new mzkey(9,3,"F5", [MZ700KeyMatrix.KeyCodes.F5]),
new mzkey(9,4,"F4", [MZ700KeyMatrix.KeyCodes.F4]),
new mzkey(9,5,"F3", [MZ700KeyMatrix.KeyCodes.F3]),
new mzkey(9,6,"F2", [MZ700KeyMatrix.KeyCodes.F2]),
new mzkey(9,7,"F1", [MZ700KeyMatrix.KeyCodes.F1])
];
static KeyNames = ((obj) => {
Object.keys(MZ700KeyMatrix.KeyCodes).forEach((name) => {
const code = MZ700KeyMatrix.KeyCodes[name];
obj[code] = name;
});
return obj;
})({});
static Code2Key = (() => {
const code2key = new Array(256);
MZ700KeyMatrix.Keys.forEach((key) => {
key.code.forEach((code) => {
code2key[code] = key;
});
});
return code2key;
})();
static Str2Key = (() => {
const s2key = {};
MZ700KeyMatrix.Keys.forEach((key) => {
s2key[key.strcode] = key;
});
return s2key;
})();
}
module.exports = MZ700KeyMatrix;