TomHarte / CLK

A latency-hating emulator of: the Acorn Electron and Archimedes, Amstrad CPC, Apple II/II+/IIe and early Macintosh, Atari 2600 and ST, ColecoVision, Enterprise 64/128, Commodore Vic-20 and Amiga, MSX 1/2, Oric 1/Atmos, early PC compatibles, Sega Master System, Sinclair ZX80/81 and ZX Spectrum.
MIT License
922 stars 52 forks source link

Feature request: Command line parameters #871

Open leuat opened 3 years ago

leuat commented 3 years ago

Hi there! I'm the creator of TRSE (www.turborascal.com, see https://www.youtube.com/watch?v=9CtHHOtgvKU), a cross-platform development IDE + compiler for .. a lot of old computers. Would be lovely to condense some of the required emulators down to a more manageable size, and this project looks amazing!

Only thing is, in TRSE you press Ctrl+R to build your C64/VIC-20/PET/C128/BBC/ATARI2600/ATARIST/Amiga 500/MSX/Amstrad CPC/Gameboy/NES/OK64/MEGA65/Speccy/X86 project, and then it fires up the emulator with the compiled binary (or disk, or ROM, or whatever) with appropriate parameters.

What would it take to get this implemented into CLK?

TomHarte commented 3 years ago

I think the main obstacle is probably that I still don't support Windows?

Otherwise: all three bindings — macOS, SDL and Qt — should accept a file to open as a parameter and then act on it, and will pick a machine and configuration based purely on the file contents. Actually, the SDL version is probably the most applicable as it's optimised around just running the piece of software and not forcing a bunch of emulator-specific UI into your face, and it exposes machine selection and configuration as command-line options the better to fit into a UNIX-esque world of doing only one thing.

That said, I don't currently seem to support too many of your target platforms, really only the Vic-20, Atari 2600, MSX and CPC. Which is not a great hit rate. Though I've a few of the others in mind for the future.

More interesting question, and something I've always wondered: what would be the idea interface for a project such as yours in terms of offering a gdb-esque debugger? I'm still edging slowly up to a fully introspectable machine state; if I were to extend the emulator such that e.g. it listened on a port and could then vend current state, or proceed one cycle, one instruction, etc, at a time, would that be of interest to a project such as yours?

Or would it be more helpful more rigorously to push the CLK-as-a-library angle and forego the inter-process stuff?

Or is none of that of interest at all?

Speaking selfishly, if I was publishing full state and anybody at else were trying to code against it, that might really help me to figure out what my missteps have been with regard to achieving 100% accuracy...

TomHarte commented 3 years ago

So, quick further note on this; the output of clk-signal --help, i.e. the SDL build's help text is below. It's autogenerated so can vary from release to release but is hopefully self-explanatory.

Usage: Clock Signal Kiosk [file or --new={machine}] [OPTIONS] [--rompath={path to ROMs}] [--speed={speed multiplier, e.g. 1.5}]  [--logical-keyboard] [--volume={0.0 to 1.0}]
Use alt+enter to toggle full screen display. Use control+shift+V to paste text.
Required machine type **and all options** are determined from the file if specified; otherwise use:

    --new={AmstradCPC|AppleII|AppleIIgs|AtariST|Electron|Macintosh|MSX|Oric|Vic20|ZX8081}

Media is required to start the: Atari 2600, ColecoVision, Sega Master System.

Further machine options:

ColecoVision:
    --output={SVideo|CompositeColour}

Sega Master System:
    --output={RGB|SVideo|CompositeColour|CompositeMonochrome}
    --region={Japan|USA|Europe|Brazil}

Amstrad CPC:
    --model={CPC464|CPC664|CPC6128}
    --output={RGB|CompositeColour}

Apple II:
    --disk-controller={None|SixteenSector|ThirteenSector}
    --model={II|IIplus|IIe|EnhancedIIe}
    --output={CompositeColour|CompositeMonochrome}

Apple IIgs:
    --memory-model={TwoHundredAndFiftySixKB|OneMB|EightMB}
    --model={ROM00|ROM01|ROM03}

Atari ST:
    --output={RGB|CompositeColour}

Acorn Electron:
    --has-acorn-adfs
    --has-ap6-rom
    --has-dfs
    --has-pres-adfs
    --has-sideways-ram
    --output={RGB|CompositeColour|CompositeMonochrome}
    --quickload

Apple Macintosh:
    --model={Mac128k|Mac512k|Mac512ke|MacPlus}
    --quickboot

MSX:
    --has-disk-drive
    --output={RGB|SVideo|CompositeColour|CompositeMonochrome}
    --quickload
    --region={Japan|USA|Europe}

Oric:
    --disk-interface={None|Microdisc|Pravetz|Jasmin|BD500}
    --output={RGB|SVideo|CompositeColour|CompositeMonochrome}
    --processor={MOS6502|WDC65816}
    --quickload
    --rom={BASIC10|BASIC11|Pravetz}

Vic 20:
    --enabled-ram.bank0
    --enabled-ram.bank1
    --enabled-ram.bank2
    --enabled-ram.bank3
    --enabled-ram.bank5
    --has-c1540
    --output={SVideo|CompositeColour}
    --quickload
    --region={American|Danish|Japanese|European|Swedish}

ZX80/81:
    --ZX80-uses-ZX81-ROM
    --automatic-tape-motor-control
    --is-ZX81
    --memory-model={Unexpanded|SixteenKB|SixtyFourKB}
    --quickload