Skip to content

Interactive shell mode (vamos's -x precedent) #20

Description

@sidick

Tracked from `docs/plan.md`'s "Future work: interactive shell mode (vamos's `-x` precedent)" section (raised by Simon, not yet scoped into any phase).

Motivation

`vamos` (amitools) can run a real Shell-Seg binary interactively rather than just one program to completion -- `vamos -x Shell-Seg` boots a genuine AmigaDOS Shell inside the emulator, which reads `S:Vamos-Startup` (if present) and drops into an interactive `0.SYS:>`-style prompt for further commands.

Why volamos can't do this today

`Runtime` is currently built around "load one program, run it to completion, exit" (see `crate::dispatch::Runtime::run`'s own doc comment). An analogous `--shell`/`-x` mode would need:

  1. An interactive host<->guest I/O loop -- this runtime's `Input()`/`Output()` are currently backed by fixed `out: &mut dyn Write` sinks per `run()` call, not a live terminal.
  2. `System()`/`Execute()` support for the Shell to invoke subsequent commands as nested guest processes -- `crate::dosseg`'s `system_runner` callback exists but a real Shell interactively issuing many commands in sequence is a different usage pattern than the current one-shot `System()`/`Execute()` support was built for; needs re-examination once this is scoped.
  3. A real `C:/Shell` (or `Shell-Seg`) binary from the Workbench 3.1.4 corpus already in use for the `C:` command testing.

When to revisit

Per the original note: worth revisiting once the empirical `C:` command corpus covers enough of `dos.library`/`exec.library` that Shell's own startup sequence has a reasonable chance of running without hitting a wall of gaps immediately. (Substantial `C:` command coverage has since landed -- see `tools/compare_three_way.py`'s corpus and this project's many closed gap-chain issues -- so this may be closer to viable than when originally raised.)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions