API calls…

You can control microM8 using an HTTP-based API. You make API calls to port 38911 and you need to start up microM8 with the -control-port command-line flag. If you would like to start microM8 without an application frame you can add the -disable-border flag.

POST /api/control/window/position

  • Handler: HandlePositionRequest
  • Purpose: Set Window position and size.
  • Payload: JSON:
    { 
        "x": number, 
        "y": number, 
        "w": number, 
        "h": number 
    }
    

POST /api/control/input/keyevent

  • Handler: HandleKeyRequest
  • Purpose: Notify a keypress/release event.
  • Payload: JSON:
    {
        "key": number,                // microM8 keycode
        "scancode": number,           // scancode (reserved)
        "action": number,             // 1 = Press, 0 = Release
        "modifier": number            // 1 = Shift, 2 = Ctrl, 4 = Alt
    }
    

GET /api/control/window/hide

  • Handler: HandleHideRequest
  • Purpose: Hide microM8 window and suspend execution.
  • Payload(none)

GET /api/control/window/show

  • Handler: HandleShowRequest
  • Purpose: Show microM8 window and resume execution.
  • Payload(none)

GET /api/control/system/reboot

  • Handler: HandleRebootRequest
  • Purpose: Reboot the current VM.
  • Payload(none)

POST /api/control/window/screen

  • Handler: HandleScreenRequest
  • Purpose: Write current screen in PNG to supplied filename.
  • Payload: JSON:
    {
        "path": string,              // png file path
    }
    

GET /api/control/window/focused

  • Handler: HandleFocusedRequest
  • Purpose: Return main window focus state.
  • Payload(none)
  • Returns: 1 if focussed, 0 if not focussed.

POST /api/control/hardware/disk/insert

  • Handler: HandleDiskInsertRequest
  • Purpose: Insert a disk image.
  • Payload: JSON:
    {
        "path": string,              // disk image file path
        "drive": number              // drive number (0/1 = Disk II, 2 = SmartPort)
    }
    

GET /api/control/hardware/disk/eject/{drive}

  • Handler: HandleDiskEjectRequest
  • Purpose: Eject disk in drive {drive}
  • Payload(none)

GET /api/control/hardware/disk/blank/{drive}

  • Handler: HandleDiskBlankRequest
  • Purpose: Insert blank unformatted disk in drive {drive} (0/1 only)
  • Payload(none)

GET /api/control/system/catalog

  • Handler: HandleCatalogRequest
  • Purpose: Launch microM8 catalog function.
  • Payload(none)

GET /api/control/interpreter/{name} (fp, int or logo)

  • Handler: HandleInterpRequest
  • Purpose: Start microM8 interpreter {name} in this VM.
  • Payload(none)

GET /api/control/input/meta/key/{key}/value/{value}

  • Handler: HandleMetaKeyRequest
  • Purpose: Simulate a meta key combination (Eg. Ctrl+Shift+{key}, then {value})
  • Payload(none)

POST /api/control/settings/update

  • Handler: HandleSettingsUpdateRequest
  • Purpose: Update (and optionally persist) a runtime setting.
  • Payload: JSON:
    {
        "path": string,              // settings path: Eg. "current.fullscreen"
        "scope": string,             // settings scope: Eg. "video"
        "value": string,             // value
        "persist": number            // 0 = false, 1 = true (save to defaults)
    }
    

POST /api/control/settings/get

  • Handler: HandleSettingsFetchRequest
  • Purpose: Get value of runtime setting.
  • Returnsvalue.
  • Payload: JSON:
    {
        "path": string,              // settings path: Eg. "current.fullscreen"
        "scope": string,             // settings scope: Eg. "video"
    }
    

POST /api/control/input/mouseevent

  • Handler: HandleMouseRequest
  • Purpose: Update mouse position within window.
  • Payload: JSON:
    {
        "x": number,                  // x mouse position (relative to window)
        "y": number,                  // y mouse position (relative to window)
    }
    

GET /api/control/hardware/disk/swap

  • Handler: HandleDiskSwapRequest
  • Purpose: Swap disks in drive 0 and drive 1.
  • Payload(none)

GET /api/control/system/profile/set/{profile} (apple2-plus, apple2e, apple2e-en, apple2e-en-cpm)

  • Handler: HandleProfileSetRequest
  • Purpose: Reboot VM into the specified system profile.
  • Payload(none)

GET /api/control/system/profile/get

  • Handler: HandleProfileGetRequest
  • Purpose: Return current system profile.
  • Returnsprofilename
  • Payload(none)

POST /api/control/system/freeze/restore

  • Handler: HandleFreezeRestoreRequest
  • Purpose: Restore VM state from a freeze state.
  • Payload: JSON:
    {
        "path": string,                  // freeze path
    }
    

POST /api/control/system/freeze/save

  • Handler: HandleFreezeSaveRequest
  • Purpose: Save VM state to a freeze state.
  • Payload: JSON:
    {
        "path": string,                  // freeze path
    }
    

GET /api/control/recorder/{action}

  • Handler: HandleRecordingRequest
  • Purpose: Perform recorder {action}:-
start-file-recording  Begin file based recording.
start-live-recording  Begin memory based recording.
stop-recording        Stop recording.
rewind                Rewind recording.
play                  Forward recording.
resume                Resume execution.
  • Payload(none)

GET /api/control/recorder

  • Handler: HandleRecordingRequest
  • Purpose: Return recorder state.
  • Returns: 0 if not recording, 1 if live rewind enabled, 2 if file recording.
  • Payload(none)

POST /api/control/system/launch

  • Handler: HandleLaunchRequest
  • Purpose: Launch a program or action.
  • Payload: JSON:
    {
      workingDir: string,     // Eg. /local
      disks      []string,    // floppy disks
      pakfile    string,      // microPak file
      smartport  string,      // smartport volume
      runfile    string,      // basic, shell or logo file
      runcommand string,      // basic, shell or logo command
      dialect    string       // dialect for runfile/runcommand
    }
    

GET /api/control/quit

  • Handler: HandleQuit
  • Purpose: Stop microM8.
  • Payload(none)

GET /api/control/health

  • Handler: HandleAlive
  • Purpose: Returns “ok” if microM8 responsive.
  • Payload(none)

GET /api/control/audio/{channel}/{action}

  • Handler: HandleAudioRequest
  • Purpose: Perform {action} on audio channel {channel}.
channel    One of "master" or "speaker". 
action     One of "up" or "down".
  • Payload(none)

GET /api/control/cpu/warp/{action}

  • Handler: HandleCPURequest
  • Purpose: Perform {action} on CPU warp level.
action     One of "up" or "down".
  • Payload(none)

GET /api/control/pause

  • Handler: HandlePauseRequest
  • Purpose: Toggle VM Paused state.
  • Payload(none)

GET /api/control/mouse/buttonstate

  • Handler: HandleMBRequest
  • Purpose: Read mousebutton state.
  • Returns: 0 = none, 1 = left, 2 = right, 4 = middle
  • Payload(none)

GET /api/control/mouse/buttonstate/{state}

  • Handler: HandleMBRequest
  • Purpose: Set mouse button state to {state}.
0 = none
1 = left
2 = right
4 = middle
  • Payload(none)

GET /api/control/vm

  • Handler: HandleVMRequest
  • Purpose: Get the current vm number (1-8).
  • Returns: 1-8
  • Payload(none)

GET /api/control/vm/{vm}

  • Handler: HandleVMRequest
  • Purpose: Set the current VM number (1-8)
  • Payload(none)

GET /api/control/system/help

  • Handler: HandleHelpRequest
  • Purpose: Launch help system.
  • Payload(none)

GET /api/control/window/screenshot

  • Handler: HandleShotRequest
  • Purpose: Take a screenshot.
  • Payload(none)

GET /api/control/hardware/disk/wp/{drive}

  • Handler: HandleDiskWPRequest
  • Purpose: Read write protect state of {drive}.
  • Returns: 0 = not write protected, 1 = write protected
  • Payload(none)

GET /api/control/hardware/disk/wp/{drive}/{verb}

  • Handler: HandleDiskWPRequest
  • Purpose: Perform {verb} on drives write protect state.
toggle    Toggles write protect.
  • Returns: 0 = not write protected, 1 = write protected
  • Payload(none)

POST /api/control/paste

  • Handler: HandlePasteRequest
  • Purpose: Paste text into VM.
  • Payload: TEXT

GET /api/control/memory/read/{address}

  • Handler: HandleMemoryReadRequest
  • Purpose: Read value from VM memory {address}
  • Returnsvalue
  • Payload(none)

GET /api/control/memory/write/{address}/{value}

  • Handler: HandleMemoryWriteRequest
  • Purpose: Write {value} to VM memory {address}
  • Payload(none)

GET /api/control/memory/screen/text

  • Handler: HandleTextScreenRequest
  • Purpose: Returns content of active text screen.
  • Payload(none)

POST /api/control/osd/send

  • Handler: HandleOSDRequest
  • Purpose: Send OSD message.
  • Payload: TEXT

GET /api/control/system/camera/{action}

  • Handler: HandleCameraRequest
  • Purpose: Perform action {action} on camera.
reset   Reset camera to defaults.
  • Payload(none)

GET /api/control/mouse/buttonclick

  • Handler: HandleButtonClickRequest
  • Purpose: Simulate a left mouse button press and release.
  • Payload(none)