mirror of
https://github.com/inexorabletash/jsbasic.git
synced 2024-11-27 12:49:56 +00:00
Expose more TTY CALL shims
This commit is contained in:
parent
e1d01b3706
commit
b1fb46a5fa
15
basic.js
15
basic.js
@ -468,6 +468,21 @@ this.basic = (function() {
|
||||
0xD683: function() { // Clear stack
|
||||
state.stack = [];
|
||||
},
|
||||
0xFBF4: function() { // Move cursor right
|
||||
if (env.tty.cursorRight) { env.tty.cursorRight(); }
|
||||
},
|
||||
0xFC10: function() { // Move cursor left
|
||||
if (env.tty.cursorLeft) { env.tty.cursorLeft(); }
|
||||
},
|
||||
0xFC1A: function() { // Move cursor up
|
||||
if (env.tty.cursorUp) { env.tty.cursorUp(); }
|
||||
},
|
||||
0xFC42: function() { // Clear text from cursor to bottom
|
||||
if (env.tty.clearEOS) { env.tty.clearEOS(); }
|
||||
},
|
||||
0xFC66: function() { // Move cursor down
|
||||
if (env.tty.cursorDown) { env.tty.cursorDown(); }
|
||||
},
|
||||
0xFC9C: function() { // Clear from cursor to right
|
||||
if (env.tty.clearEOL) { env.tty.clearEOL(); }
|
||||
}
|
||||
|
@ -215,6 +215,12 @@ can be literals (unquoted strings), strings, or numbers
|
||||
<li><code>CALL -3086</code> - clear current hi-res page to black
|
||||
<li><code>CALL -3082</code> - clear current hi-res page to current color
|
||||
<li><code>CALL 54951</code> - clear stack (cancel pending <code>FOR</code>-<code>NEXT</code> loops and <code>GOSUB</code>s)
|
||||
<li><code>CALL -1036</code> - move cursor right
|
||||
<li><code>CALL -1008</code> - move cursor left
|
||||
<li><code>CALL -998</code> - move cursor up
|
||||
<li><code>CALL -958</code> - clear text from cursor to bottom of window
|
||||
<li><code>CALL -922</code> - move cursor down
|
||||
<li><code>CALL -868</code> - clear text from cursor to end of line
|
||||
</ul>
|
||||
|
||||
<dt>PR# <var>aexpr</var><dd>Direct output to slot
|
||||
|
81
tty.js
81
tty.js
@ -6,6 +6,12 @@
|
||||
//
|
||||
// tty = new TTY( screen_element, keyboard_element, bell );
|
||||
// tty.clearScreen()
|
||||
// tty.clearEOL()
|
||||
// tty.clearEOS()
|
||||
// tty.cursorLeft()
|
||||
// tty.cursorRight()
|
||||
// tty.cursorUp()
|
||||
// tty.cursorDown()
|
||||
// tty.scrollScreen()
|
||||
// tty.setTextStyle( textStyle )
|
||||
// { width: w, height: h } = tty.getScreenSize()
|
||||
@ -216,6 +222,18 @@ function TTY(screenElement, keyboardElement, bell) {
|
||||
}
|
||||
};
|
||||
|
||||
// Clears from the cursor position to the end of the window
|
||||
this.clearEOS = function clearEOS() {
|
||||
var x, y;
|
||||
for (x = cursorX; x < self.textWindow.left + self.textWindow.width; x += 1) {
|
||||
setCellChar(x, cursorY, 0x20);
|
||||
}
|
||||
for (y = cursorY + 1; y < self.textWindow.top + self.textWindow.height; y += 1) {
|
||||
for (x = self.textWindow.left; x < self.textWindow.left + self.textWindow.width; x += 1) {
|
||||
setCellChar(x, y, 0x20);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.setFirmwareActive = function setFirmwareActive(active) {
|
||||
init(active, 24, active ? 80 : 40);
|
||||
@ -276,32 +294,46 @@ function TTY(screenElement, keyboardElement, bell) {
|
||||
}
|
||||
}
|
||||
|
||||
// Internal
|
||||
function lineFeed() {
|
||||
this.cursorDown = function cursorDown() {
|
||||
cursorY += 1;
|
||||
if (cursorY >= self.textWindow.top + self.textWindow.height) {
|
||||
cursorY = self.textWindow.top + self.textWindow.height - 1;
|
||||
|
||||
if (self.autoScroll) {
|
||||
self.scrollScreen();
|
||||
}
|
||||
}
|
||||
|
||||
updateCursor();
|
||||
}
|
||||
};
|
||||
|
||||
// Internal
|
||||
function advanceCursor() {
|
||||
// Advance the cursor
|
||||
this.cursorLeft = function cursorLeft() {
|
||||
cursorX -= 1;
|
||||
if (cursorX < self.textWindow.left) {
|
||||
cursorX += self.textWindow.width;
|
||||
cursorY -= 1;
|
||||
if (cursorY < self.textWindow.top) {
|
||||
cursorY = self.textWindow.top;
|
||||
}
|
||||
}
|
||||
updateCursor();
|
||||
};
|
||||
|
||||
this.cursorUp = function cursorUp() {
|
||||
cursorY -= 1;
|
||||
if (cursorY < self.textWindow.top) {
|
||||
cursorY = self.textWindow.top;
|
||||
}
|
||||
updateCursor();
|
||||
};
|
||||
|
||||
|
||||
this.cursorRight = function cursorRight() {
|
||||
cursorX += 1;
|
||||
|
||||
if (cursorX >= self.textWindow.left + self.textWindow.width) {
|
||||
cursorX = self.textWindow.left;
|
||||
lineFeed();
|
||||
self.cursorDown();
|
||||
}
|
||||
|
||||
updateCursor();
|
||||
}
|
||||
};
|
||||
|
||||
// Hookable
|
||||
this.writeChar = function writeChar(c) {
|
||||
@ -326,34 +358,19 @@ function TTY(screenElement, keyboardElement, bell) {
|
||||
break;
|
||||
|
||||
case 8: // (BS) backspace
|
||||
cursorX -= 1;
|
||||
if (cursorX < self.textWindow.left) {
|
||||
cursorX += self.textWindow.width;
|
||||
cursorY -= 1;
|
||||
if (cursorY < self.textWindow.top) {
|
||||
cursorY = self.textWindow.top;
|
||||
}
|
||||
}
|
||||
self.cursorLeft();
|
||||
break;
|
||||
|
||||
case 9:
|
||||
break;
|
||||
|
||||
case 10: // (LF) line feed
|
||||
lineFeed();
|
||||
self.cursorDown();
|
||||
break;
|
||||
|
||||
case 11: // (VT) clear EOS
|
||||
if (firmwareActive) {
|
||||
// Clears from the cursor position to the end of the window
|
||||
for (x = cursorX; x < self.textWindow.left + self.textWindow.width; x += 1) {
|
||||
setCellChar(x, cursorY, 0x20);
|
||||
}
|
||||
for (y = cursorY + 1; y < self.textWindow.top + self.textWindow.height; y += 1) {
|
||||
for (x = self.textWindow.left; x < self.textWindow.left + self.textWindow.width; x += 1) {
|
||||
setCellChar(x, y, 0x20);
|
||||
}
|
||||
}
|
||||
self.clearEOS();
|
||||
}
|
||||
break;
|
||||
|
||||
@ -366,7 +383,7 @@ function TTY(screenElement, keyboardElement, bell) {
|
||||
|
||||
case 13: // (CR) return
|
||||
cursorX = self.textWindow.left;
|
||||
lineFeed();
|
||||
self.cursorDown();
|
||||
break;
|
||||
|
||||
case 14: // (SO) normal
|
||||
@ -482,7 +499,7 @@ function TTY(screenElement, keyboardElement, bell) {
|
||||
|
||||
default:
|
||||
setCellChar(cursorX, cursorY, code);
|
||||
advanceCursor();
|
||||
self.cursorRight();
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user