Add softswitch reads for display modes

Fixes #32

The RdAltChar (mousetext) is not accurate. Under Virtual II it seems
to always return true if the 80 column firmware is active, regardless
of which character set is active.
This commit is contained in:
Joshua Bell 2020-05-29 21:55:32 -07:00
parent 44e308f030
commit 17b0baf7e5
6 changed files with 56 additions and 5 deletions

View File

@ -412,7 +412,15 @@ this.basic = (function() {
0xC060: function() { return env.tty.getButtonState ? env.tty.getButtonState(3) : 0; },
0xC061: function() { return env.tty.getButtonState ? env.tty.getButtonState(0) : 0; },
0xC062: function() { return env.tty.getButtonState ? env.tty.getButtonState(1) : 0; },
0xC063: function() { return env.tty.getButtonState ? env.tty.getButtonState(2) : 0; }
0xC063: function() { return env.tty.getButtonState ? env.tty.getButtonState(2) : 0; },
// Graphics State
0xC01A: function() { return (env.display && !env.display.getState().graphics) * 128; },
0xC01B: function() { return (env.display && !env.display.getState().full) * 128; },
0xC01C: function() { return (env.display && !env.display.getState().page1) * 128; },
0xC01D: function() { return (env.display && !env.display.getState().lores) * 128; },
0xC01E: function() { return (env.tty.isAltCharset && env.tty.isAltCharset()) * 128; },
0xC01F: function() { return (env.tty.isFirmwareActive && env.tty.isFirmwareActive()) * 128; }
};
poke_table = {

View File

@ -58,6 +58,9 @@ window.addEventListener('DOMContentLoaded', function() {
hires2.show(false);
tty.splitScreen(0);
}
},
getState: function() {
return Object.assign({}, this.state);
}
};
var pdl = [0, 0, 0, 0];

View File

@ -304,6 +304,14 @@ can be literals (unquoted strings), strings, or numbers
<li><code>PEEK(230)</code> &mdash; Hi-Res plotting page (32 = page 1, 64 = page 2)
<li><code>PEEK(49152)</code> &mdash; Read Keyboard
<li><code>PEEK(49168)</code> &mdash; Clear Keyboard strobe
<li><code>PEEK(49178)</code> &mdash; See if text mode (&gt; 127) or graphics mode (&lt; 128)
<li><code>PEEK(49179)</code> &mdash; See if mixed mode (&gt; 127) or full mode (&lt; 128)
<li><code>PEEK(49180)</code> &mdash; See if page2 (&gt; 127) or page1 (&lt; 128)
<li><code>PEEK(49181)</code> &mdash; See if hires mode (&gt; 127) or lores mode (&lt; 128)
<li><code>PEEK(49182)</code> &mdash; See if mousetext mode (&gt; 127)
<li><code>PEEK(49188)</code> &mdash; See if 80-column mode (&gt; 127)
<li><code>PEEK(49200)</code> &mdash; Click Speaker (no-op)
<li><code>PEEK(49248)</code> &mdash; Read Paddle Button #3 &mdash; <em>Use the PageDown key</em>
<li><code>PEEK(49249)</code> &mdash; Read Paddle Button #0 &mdash; <em>Use the Home key</em>

View File

@ -403,9 +403,8 @@
7001 IF NOT LR THEN PRINT "<skipping GR tests>" : GOTO 8000
7010 T$ = "GR"
: U = PEEK(36) : V = PEEK(37)
: GR : S = (PEEK(37) = 23) : TEXT : POKE 36,U : POKE 37,V : GOSUB 1
: GR : S = (PEEK(34) = 20) : TEXT : POKE 36,U : POKE 37,V : GOSUB 1
: U = PEEK(36) : V = PEEK(37) : GR : S = (PEEK(37) = 23) : TEXT : POKE 36,U : POKE 37,V : GOSUB 1
: U = PEEK(36) : V = PEEK(37) : GR : S = (PEEK(34) = 20) : TEXT : POKE 36,U : POKE 37,V : GOSUB 1
7011 POKE 49232,0 : POKE 49234,0 : POKE 49238,0
@ -659,7 +658,7 @@
: DEF FN A$(X$) = X$ + X$ : S = (FN A$("ABC") = "ABCABC") : GOSUB 1
15000 PRINT : PRINT "PEEK Compatibility Shims ";
: PRINT "UNIT TESTS NOT YET IMPLEMENTED ";
: PRINT "UNIT TESTS NOT FULLY IMPLEMENTED ";
15001 X = PEEK(49152) : X = PEEK(-16384) : REM Read keyboard
15002 X = PEEK(49168) : X = PEEK(-16368) : REM Clear keyboard strobe
15003 X = PEEK(49200) : X = PEEK(-16336) : REM Toggle speaker (no-op)
@ -673,6 +672,29 @@
15010 REM Do as part of I/O follow-on module
15010 REM **********************************************
15020 T$ = "PEEK(49178) RdTEXT"
: S = (PEEK(49178) > 127) : GOSUB 1
: U = PEEK(36) : V = PEEK(37) : GR : S = (PEEK(49178) < 128) : TEXT : POKE 36,U : POKE 37,V : GOSUB 1
15030 T$ = "PEEK(49179) RdMIXED"
: HGR : S = (PEEK(49179) > 127) : TEXT : GOSUB 1
: HGR2 : S = (PEEK(49179) < 128) : TEXT : GOSUB 1
15040 T$ = "PEEK(49180) RdPage2"
: HGR2 : S = (PEEK(49180) > 127) : TEXT : GOSUB 1
: HGR : S = (PEEK(49180) < 128) : TEXT : GOSUB 1
15050 T$ = "PEEK(49181) RdHiRes"
: HGR : S = (PEEK(49181) > 127) : TEXT : GOSUB 1
: U = PEEK(36) : V = PEEK(37) : GR : S = (PEEK(49181) < 128) : TEXT : POKE 36,U : POKE 37,V : GOSUB 1
15060 T$ = "PEEK(49182) RdAltChar"
: S = (PEEK(49182) < 128) : GOSUB 1
: PRINT CHR$(15);CHR$(27); : S = (PEEK(49182) > 127) : PRINT CHR$(24);CHR$(14); : GOSUB 1
15070 T$ = "PEEK(49183) Rd80Col"
: S = (PEEK(49183) > 127) : GOSUB 1
16000 PRINT : PRINT "Operators ";

View File

@ -69,6 +69,9 @@
hires2.show(false);
tty.splitScreen(0);
}
},
getState: function() {
return Object.assign({}, this.state);
}
};
var pdl = [0, 0, 0, 0];

7
tty.js
View File

@ -239,6 +239,13 @@ function TTY(screenElement, keyboardElement) {
init(active, 24, active ? 80 : 40);
};
this.isFirmwareActive = function isFirmwareActive() {
return firmwareActive;
};
this.isAltCharset = function isAltCharset() {
return mousetext;
};
function scrollUp() {
var x, y, cell;