rename ports
This commit is contained in:
parent
496b55b45b
commit
ece51a4ced
93
console.txt
93
console.txt
|
@ -1,15 +1,16 @@
|
||||||
CONSOLE DEVICE
|
CONSOLE DEVICE
|
||||||
|
|
||||||
0x10 vector 0x18 stdout+
|
0x10 vector* 0x18 @stdout
|
||||||
0x11 (vector) 0x19 stderr+
|
0x11 (vector) 0x19 @stderr
|
||||||
0x12 stdin 0x1a send+
|
0x12 stdin 0x1a @proc-put
|
||||||
0x13 0x1b
|
0x13 0x1b
|
||||||
0x14 proc-get 0x1c param
|
0x14 proc-get 0x1c param*
|
||||||
0x15 host-get 0x1d (param)
|
0x15 host-get 0x1d (param)
|
||||||
0x16 0x1e opts
|
0x16 0x1e opts
|
||||||
0x17 type 0x1f action+
|
0x17 type 0x1f @host-put
|
||||||
|
|
||||||
(+ denotes a register that causes an immediate effect)
|
(* denotes a short register, i.e. two bytes wide)
|
||||||
|
(@ denotes a register that causes an immediate effect)
|
||||||
|
|
||||||
vector ports (0x10-0x11) contain an address to jump to when input is
|
vector ports (0x10-0x11) contain an address to jump to when input is
|
||||||
available. when the vector fires one byte can be read from the read
|
available. when the vector fires one byte can be read from the read
|
||||||
|
@ -22,7 +23,7 @@ the proc-get port (0x14) contains one byte of data to be read. the byte
|
||||||
represents input read from one of the emulator's subprocesses.
|
represents input read from one of the emulator's subprocesses.
|
||||||
|
|
||||||
the host-get port (0x15) contains one byte of data to be read. the byte
|
the host-get port (0x15) contains one byte of data to be read. the byte
|
||||||
represents part of a response to a system action.
|
represents part of a response to a host-put (0x1f).
|
||||||
|
|
||||||
the type (0x17) field explains how to interpret calls to the console
|
the type (0x17) field explains how to interpret calls to the console
|
||||||
vector (0x10) and where data can be read from:
|
vector (0x10) and where data can be read from:
|
||||||
|
@ -48,7 +49,7 @@ the emulator's stdout.
|
||||||
writing a byte to the stderr port (0x19) will send one byte of data to
|
writing a byte to the stderr port (0x19) will send one byte of data to
|
||||||
the emulator's stderr.
|
the emulator's stderr.
|
||||||
|
|
||||||
writing a byte to the send port (0x1a) will send one byte of data to
|
writing a byte to the proc-put port (0x1a) will send one byte of data to
|
||||||
one of the emulator's child processes. the lower 2 bits of the opts
|
one of the emulator's child processes. the lower 2 bits of the opts
|
||||||
port (0x1e) determine which one:
|
port (0x1e) determine which one:
|
||||||
- 0x00: child 0
|
- 0x00: child 0
|
||||||
|
@ -57,7 +58,7 @@ port (0x1e) determine which one:
|
||||||
- 0x03: child 3
|
- 0x03: child 3
|
||||||
|
|
||||||
the param ports (0x1c-0x1d) specify the a value to use as a parameter
|
the param ports (0x1c-0x1d) specify the a value to use as a parameter
|
||||||
for a system action (0x1f). the meaning values by action value:
|
for a host-put (0x1f). the meaning values by host-put value:
|
||||||
- 0x00 - (nop) unused
|
- 0x00 - (nop) unused
|
||||||
- 0x01 - (execute) command string (e.g. 'gcc -o "demo" demo.c')
|
- 0x01 - (execute) command string (e.g. 'gcc -o "demo" demo.c')
|
||||||
- 0x02 - (pid) unused
|
- 0x02 - (pid) unused
|
||||||
|
@ -70,8 +71,8 @@ for a system action (0x1f). the meaning values by action value:
|
||||||
- 0x21 - (tty-unset-raw) unused
|
- 0x21 - (tty-unset-raw) unused
|
||||||
strings must be null-terminated. commands are parsed by /bin/sh -c.
|
strings must be null-terminated. commands are parsed by /bin/sh -c.
|
||||||
|
|
||||||
the opts port (0x1e) specifies options that affect system actions run
|
the opts port (0x1e) specifies options that affect host actions run
|
||||||
using the action port (0x1f):
|
using the host-put port (0x1f):
|
||||||
- lower 2 bits control which child process to use (when applicable)
|
- lower 2 bits control which child process to use (when applicable)
|
||||||
+ 0x00 - child 0
|
+ 0x00 - child 0
|
||||||
+ 0x01 - child 1
|
+ 0x01 - child 1
|
||||||
|
@ -83,7 +84,7 @@ using the action port (0x1f):
|
||||||
+ 0x20 - read from child's stdout
|
+ 0x20 - read from child's stdout
|
||||||
+ 0x10 - write to child's stdin
|
+ 0x10 - write to child's stdin
|
||||||
|
|
||||||
the action port (0x1f) specifies which system action to take:
|
the host-put port (0x1f) specifies which host action to take:
|
||||||
- 0x00 - nop: does nothing
|
- 0x00 - nop: does nothing
|
||||||
- 0x01 - execute: reads command string, starts a subprocess
|
- 0x01 - execute: reads command string, starts a subprocess
|
||||||
- 0x02 - pid: responds with child process pid (if any)
|
- 0x02 - pid: responds with child process pid (if any)
|
||||||
|
@ -110,14 +111,14 @@ EXAMPLE PROGRAM FRAGMENTS
|
||||||
... BRK ( ; handle other console input )
|
... BRK ( ; handle other console input )
|
||||||
|
|
||||||
@on-child-exit ( -- BRK )
|
@on-child-exit ( -- BRK )
|
||||||
.Console/host-get DEI ( ; read child 1's exit code )
|
.Console/host-get DEI ( ; read child 1's exit code )
|
||||||
?{ display-success-msg BRK } ( ; zero exit code means success )
|
?{ display-success-msg BRK } ( ; zero exit code means success )
|
||||||
display-failure-msg BRK ( ; non-zero exit code means failure )
|
display-failure-msg BRK ( ; non-zero exit code means failure )
|
||||||
|
|
||||||
@run-make ( -- )
|
@run-make ( -- )
|
||||||
;make-cmd .Console/param DEO2 ( ; set up make to run )
|
;make-cmd .Console/param DEO2 ( ; set up make to run )
|
||||||
#01 .Console/opts DEO ( ; use child without pipelines )
|
#01 .Console/opts DEO ( ; use child without pipelines )
|
||||||
#01 .Console/action DEO JMP2r ( ; run the command now and return )
|
#01 .Console/host-put DEO JMP2r ( ; run the command now and return )
|
||||||
|
|
||||||
@make-cmd "make $3c ( ; buffer containing cmd to run )
|
@make-cmd "make $3c ( ; buffer containing cmd to run )
|
||||||
|
|
||||||
|
@ -152,7 +153,7 @@ EXAMPLE PROGRAM FRAGMENTS
|
||||||
;mpg123-cmd/buf scpy ( ; copy path into cmd buffer )
|
;mpg123-cmd/buf scpy ( ; copy path into cmd buffer )
|
||||||
;mpg123-cmd .Console/param DEO2 ( ; set up `mpg123 <path>` cmd to run )
|
;mpg123-cmd .Console/param DEO2 ( ; set up `mpg123 <path>` cmd to run )
|
||||||
#02 .Console/opts DEO ( ; use child 2 without pipelines )
|
#02 .Console/opts DEO ( ; use child 2 without pipelines )
|
||||||
#01 .Console/action DEO JMP2r ( ; start playing mp3 now and return )
|
#01 .Console/host-put DEO JMP2r ( ; start playing mp3 now and return )
|
||||||
|
|
||||||
@mpg123-cmd "mpg123 20 &buf $100
|
@mpg123-cmd "mpg123 20 &buf $100
|
||||||
|
|
||||||
|
@ -168,45 +169,45 @@ EXAMPLE PROGRAM FRAGMENTS
|
||||||
The following fragment uses `ispell -a` to implement a basic spell checker:
|
The following fragment uses `ispell -a` to implement a basic spell checker:
|
||||||
|
|
||||||
|0000
|
|0000
|
||||||
@spelled-ok? $1
|
@spelled-ok? $1 ( ; was the last word spelled ok? )
|
||||||
@resume $2 ( when set should have signature: -- BRK )
|
@resume $2 ( ; if set should have effect ` -- BRK` )
|
||||||
|
|
||||||
|0100 ( -- BRK )
|
|0100 ( -- BRK )
|
||||||
init-ispell ( ; set up ispell child process )
|
init-ispell ( ; set up ispell child process )
|
||||||
;on-ispell-init .Console/vector DEO2 ( ; set up console vector callback )
|
;on-ispell-init .Console/vector DEO2 ( ; set up console vector callback )
|
||||||
... BRK ( ; do other initialization )
|
... BRK ( ; do other initialization )
|
||||||
|
|
||||||
@init-ispell ( -- )
|
@init-ispell ( -- )
|
||||||
;ispell-cmd .Console/param DEO2 ( ; set up `ispell -a` to run )
|
;ispell-cmd .Console/param DEO2 ( ; set up `ispell -a` to run )
|
||||||
#61 .Console/opts DEO ( ; child 1: write to stdin, read from stdout )
|
#61 .Console/opts DEO ( ; child 1: write to stdin, read from stdout )
|
||||||
#01 .Console/action DEO JMP2r ( ; run the command now and return )
|
#01 .Console/host-put DEO JMP2r ( ; run the command now and return )
|
||||||
|
|
||||||
@ispell-cmd "ispell 20 "-a 00 ( ; "ispell -a" )
|
@ispell-cmd "ispell 20 "-a 00 ( ; "ispell -a" )
|
||||||
|
|
||||||
@on-ispell-init ( -- BRK )
|
@on-ispell-init ( -- BRK )
|
||||||
.Console/type DEI #81 EQU ?{ BRK } ( ; 0x81 signals input from child 1 )
|
.Console/type DEI #81 EQU ?{ BRK } ( ; 0x81 signals input from child 1 )
|
||||||
.Console/proc-get #0a EQU ?{ BRK } ( ; skip ispell's one line banner )
|
.Console/proc-get #0a EQU ?{ BRK } ( ; skip ispell's one line banner )
|
||||||
;on-ispell-ready .Console/vector DEO2 ( ; finished banner, checker is ready )
|
;on-ispell-ready .Console/vector DEO2 ( ; finished banner, checker is ready )
|
||||||
|
|
||||||
@on-ispell-ready ( -- BRK )
|
@on-ispell-ready ( -- BRK )
|
||||||
.Console/type DEI #81 EQU ?{ BRK } ( ; 0x81 signals input from child 1 )
|
.Console/type DEI #81 EQU ?{ BRK } ( ; 0x81 signals input from child 1 )
|
||||||
.Console/proc-get LIT "* EQU ( ; line starting with "*" means ok )
|
.Console/proc-get LIT "* EQU ( ; line starting with "*" means ok )
|
||||||
.spelled-ok STZ ( ; store spelling result )
|
.spelled-ok STZ ( ; store spelling result )
|
||||||
#00 ,on-spell-drain/done STR ( ; drain two lines )
|
#00 ,on-spell-drain/done STR ( ; drain two lines )
|
||||||
;on-ispell-drain .Console/vector DEO2 ( ; ignore rest of line )
|
;on-ispell-drain .Console/vector DEO2 ( ; ignore rest of line )
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
@on-spell-drain ( -- BRK )
|
@on-spell-drain ( -- BRK )
|
||||||
.Console/type DEI #81 EQU ?{ BRK } ( ; 0x81 signals input from child 1 )
|
.Console/type DEI #81 EQU ?{ BRK } ( ; 0x81 signals input from child 1 )
|
||||||
.Console/proc-get #0a EQU ?{ BRK } ( ; skip ispell's outupt )
|
.Console/proc-get #0a EQU ?{ BRK } ( ; skip ispell's outupt )
|
||||||
LIT [ &done $1 ] ?{ ( ; is this the second newline? )
|
LIT [ &done $1 ] ?{ ( ; is this the second newline? )
|
||||||
#01 ,on-spell-drain/done STR BRK ( ; no, but next one will be. )
|
#01 ,on-spell-drain/done STR BRK ( ; no, but next one will be. )
|
||||||
}
|
}
|
||||||
;on-ispell-ready .Console/vector DEO2 ( ; drain finished, checker is ready )
|
;on-ispell-ready .Console/vector DEO2 ( ; drain finished, checker is ready )
|
||||||
!resume ( ; resume whatever we wanted to do after checking )
|
!resume ( ; resume whatever we wanted to do after checking )
|
||||||
|
|
||||||
@check-spelling ( word* continuation* -- )
|
@check-spelling ( word* continue* -- )
|
||||||
#01 .Console/opts DEO ( ; act on child 1 )
|
#01 .Console/opts DEO ( ; act on child 1 )
|
||||||
.resume STZ2 ( ; write continuation to resume )
|
.resume STZ2 ( ; write continuation to resume )
|
||||||
&loop LDAk ?{ POP2 JMP2r } ( ; when we read \0 we are done )
|
&loop LDAk ?{ POP2 JMP2r } ( ; when we read \0 we are done )
|
||||||
LDAk .Console/send DEO INC2 !&loop ( ; send byte to child 1 )
|
LDAk .Console/proc-put DEO INC2 !&loop ( ; send byte to child 1 and loop )
|
||||||
|
|
Loading…
Reference in New Issue