Interrupt on keypress mode
This commit is contained in:
@@ -103,6 +103,25 @@ else:
|
||||
problems.append("%s (0x%02X) is a device class and has no row in the Devices"
|
||||
" table" % (name, value))
|
||||
|
||||
# ---- Every console status bit is described ----
|
||||
#
|
||||
# The status port is read by writing a mask and testing it, so a program can only use a bit
|
||||
# it has been told the number of. Adding one and forgetting to write it down leaves a bit
|
||||
# that works and that nobody can discover. The section names them as "bit N", so that is
|
||||
# what is looked for.
|
||||
status = {name: int(value, 16)
|
||||
for name, value in re.findall(r'^#define (CONSOLE_STATUS_[A-Z]+)\s+(0x[0-9A-Fa-f]{2})$',
|
||||
ioh, re.M)}
|
||||
if "## The Console:" not in pm:
|
||||
problems.append("the Programming Manual has lost its \"The Console\" section")
|
||||
else:
|
||||
console = pm.split("## The Console:")[1].split("\n## ")[0]
|
||||
for name, value in sorted(status.items(), key=lambda pair: pair[1]):
|
||||
bit = value.bit_length() - 1
|
||||
if "bit %d" % bit not in console:
|
||||
problems.append("%s is bit %d of the console status port and The Console does"
|
||||
" not mention it" % (name, bit))
|
||||
|
||||
# ---- Every directive the assembler knows is written down ----
|
||||
for directive in sorted(set(re.findall(r'"(#[A-Za-z]+)"', util))):
|
||||
if directive not in am:
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
console input interrupts
|
||||
asked for: 0D ready keys interrupts
|
||||
what arrived:
|
||||
keys
|
||||
at the end: 02 ended
|
||||
Execution halted after 1597 cycles.
|
||||
[exit 0]
|
||||
@@ -0,0 +1 @@
|
||||
keys
|
||||
@@ -164,6 +164,12 @@ consoleTest | testPrograms/consoleTest.asm | run | consoleTe
|
||||
# What it pins down is that READY is clear at the end of input while ENDED is set, so a
|
||||
# loop reading while READY stops on its own instead of taking imaginary bytes forever.
|
||||
consoleModeTest | testPrograms/consoleModeTest.asm | run | consoleModeTest.in | -
|
||||
# The console interrupting instead of being asked. The main program never touches the
|
||||
# console at all, so every byte in that output was delivered by a handler. It also pins
|
||||
# down the two things that make the feature usable rather than merely present: the end of
|
||||
# input raises the line once, so an interrupt-driven program is told when to stop, and a
|
||||
# handler that does not read the byte is not called again, so nothing storms.
|
||||
consoleInterruptTest | testPrograms/consoleInterruptTest.asm | run | consoleInterruptTest.in | -
|
||||
# Picking a typed line apart, which is how the shell understands anything. Includes a
|
||||
# string beginning with a zero: the assembler strips the quotes before deciding what a
|
||||
# token is, so such a string looked like a malformed literal and was refused.
|
||||
|
||||
Reference in New Issue
Block a user