mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-26 10:49:17 +00:00
refactored keyboard stuff
This commit is contained in:
parent
7441196b2e
commit
8cb1338364
29
src/emu.ts
29
src/emu.ts
@ -27,7 +27,7 @@ export function setNoiseSeed(x : number) {
|
|||||||
_random_state = x;
|
_random_state = x;
|
||||||
}
|
}
|
||||||
|
|
||||||
type KeyboardCallback = (which:number, charCode:number, flags:number) => void;
|
type KeyboardCallback = (which:number, charCode:number, flags:KeyFlags) => void;
|
||||||
|
|
||||||
function __createCanvas(mainElement:HTMLElement, width:number, height:number) : HTMLCanvasElement {
|
function __createCanvas(mainElement:HTMLElement, width:number, height:number) : HTMLCanvasElement {
|
||||||
var canvas = document.createElement('canvas');
|
var canvas = document.createElement('canvas');
|
||||||
@ -39,15 +39,25 @@ function __createCanvas(mainElement:HTMLElement, width:number, height:number) :
|
|||||||
return canvas;
|
return canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum KeyFlags {
|
||||||
|
KeyDown = 1,
|
||||||
|
Shift = 2,
|
||||||
|
Ctrl = 4,
|
||||||
|
Alt = 8,
|
||||||
|
Meta = 16,
|
||||||
|
KeyUp = 64,
|
||||||
|
KeyPress = 128,
|
||||||
|
}
|
||||||
|
|
||||||
function _setKeyboardEvents(canvas:HTMLElement, callback:KeyboardCallback) {
|
function _setKeyboardEvents(canvas:HTMLElement, callback:KeyboardCallback) {
|
||||||
canvas.onkeydown = function(e) {
|
canvas.onkeydown = function(e) {
|
||||||
callback(e.which, 0, 1|_metakeyflags(e));
|
callback(e.which, 0, KeyFlags.KeyDown|_metakeyflags(e));
|
||||||
};
|
};
|
||||||
canvas.onkeyup = function(e) {
|
canvas.onkeyup = function(e) {
|
||||||
callback(e.which, 0, 0|_metakeyflags(e));
|
callback(e.which, 0, KeyFlags.KeyUp|_metakeyflags(e));
|
||||||
};
|
};
|
||||||
canvas.onkeypress = function(e) {
|
canvas.onkeypress = function(e) {
|
||||||
callback(e.which, e.charCode, 1|_metakeyflags(e));
|
callback(e.which, e.charCode, KeyFlags.KeyPress|_metakeyflags(e));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -396,7 +406,10 @@ export const Keys = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function _metakeyflags(e) {
|
function _metakeyflags(e) {
|
||||||
return (e.shiftKey?2:0) | (e.ctrlKey?4:0) | (e.altKey?8:0) | (e.metaKey?16:0);
|
return (e.shiftKey?KeyFlags.Shift:0) |
|
||||||
|
(e.ctrlKey?KeyFlags.Ctrl:0) |
|
||||||
|
(e.altKey?KeyFlags.Alt:0) |
|
||||||
|
(e.metaKey?KeyFlags.Meta:0);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setKeyboardFromMap(video, switches, map, func?) {
|
export function setKeyboardFromMap(video, switches, map, func?) {
|
||||||
@ -410,11 +423,11 @@ export function setKeyboardFromMap(video, switches, map, func?) {
|
|||||||
var mask = o.mask;
|
var mask = o.mask;
|
||||||
if (mask < 0) { // negative mask == active low
|
if (mask < 0) { // negative mask == active low
|
||||||
mask = -mask;
|
mask = -mask;
|
||||||
flags ^= 1;
|
flags ^= KeyFlags.KeyDown;
|
||||||
}
|
}
|
||||||
if (flags & 1) {
|
if (flags & KeyFlags.KeyDown) {
|
||||||
switches[o.index] |= mask;
|
switches[o.index] |= mask;
|
||||||
} else {
|
} else if (flags & KeyFlags.KeyUp) {
|
||||||
switches[o.index] &= ~mask;
|
switches[o.index] &= ~mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
import { Platform, Base6502Platform, BaseMAMEPlatform, getOpcodeMetadata_6502, getToolForFilename_6502 } from "../baseplatform";
|
import { Platform, Base6502Platform, BaseMAMEPlatform, getOpcodeMetadata_6502, getToolForFilename_6502 } from "../baseplatform";
|
||||||
import { PLATFORMS, RAM, newAddressDecoder, padBytes, noise, setKeyboardFromMap, AnimationTimer, RasterVideo, Keys, makeKeycodeMap, dumpRAM } from "../emu";
|
import { PLATFORMS, RAM, newAddressDecoder, padBytes, noise, setKeyboardFromMap, AnimationTimer, RasterVideo, Keys, KeyFlags, makeKeycodeMap, dumpRAM } from "../emu";
|
||||||
import { hex, lzgmini } from "../util";
|
import { hex, lzgmini } from "../util";
|
||||||
import { SampleAudio } from "../audio";
|
import { SampleAudio } from "../audio";
|
||||||
|
|
||||||
@ -164,27 +164,28 @@ const _Apple2Platform = function(mainElement) {
|
|||||||
audio = new SampleAudio(cpuFrequency);
|
audio = new SampleAudio(cpuFrequency);
|
||||||
video.create();
|
video.create();
|
||||||
video.setKeyboardEvents((key,code,flags) => {
|
video.setKeyboardEvents((key,code,flags) => {
|
||||||
if (flags & 1) {
|
if (flags & KeyFlags.KeyPress) {
|
||||||
if (code) {
|
// convert to uppercase for Apple ][
|
||||||
// convert to uppercase for Apple ][
|
if (code >= 0x61 && code <= 0x7a)
|
||||||
if (code >= 0x61 && code <= 0x7a)
|
code -= 32;
|
||||||
code -= 0x20;
|
if (code >= 32) {
|
||||||
|
if (code >= 65 && code < 65+26) {
|
||||||
|
if (flags & KeyFlags.Ctrl)
|
||||||
|
code -= 64; // ctrl
|
||||||
|
}
|
||||||
kbdlatch = (code | 0x80) & 0xff;
|
kbdlatch = (code | 0x80) & 0xff;
|
||||||
} else if (key) {
|
|
||||||
switch (key) {
|
|
||||||
case 16: return; // shift
|
|
||||||
case 17: return; // ctrl
|
|
||||||
case 18: return; // alt
|
|
||||||
case 37: key=8; break; // left
|
|
||||||
case 39: key=21; break; // right
|
|
||||||
case 38: key=11; break; // up
|
|
||||||
case 40: key=10; break; // down
|
|
||||||
}
|
|
||||||
if (key >= 65 && key < 65+26) {
|
|
||||||
if (flags & 5) key -= 64; // ctrl
|
|
||||||
}
|
|
||||||
kbdlatch = (key | 0x80) & 0xff;
|
|
||||||
}
|
}
|
||||||
|
} else if (flags & KeyFlags.KeyDown) {
|
||||||
|
code = 0;
|
||||||
|
switch (key) {
|
||||||
|
case 13: code=13; break; // return
|
||||||
|
case 37: code=8; break; // left
|
||||||
|
case 39: code=21; break; // right
|
||||||
|
case 38: code=11; break; // up
|
||||||
|
case 40: code=10; break; // down
|
||||||
|
}
|
||||||
|
if (code)
|
||||||
|
kbdlatch = (code | 0x80) & 0xff;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var idata = video.getFrameData();
|
var idata = video.getFrameData();
|
||||||
|
Loading…
Reference in New Issue
Block a user