Experimental `platform-mcs51`

I’ve started a platform for the old-and-popular-and-all-forgotten mcs51.

Just because I want that Activate Power Mode while I code…

The setup is a bit tricky ATM, I’ve only tested it on Linux, which is my primary working platform.

The platform is in an experimental stage.

  1. use SDCC as it’s toolchain, and, no, we don’t have C++ support.
  2. I have only created board support for the one I’ve got, which is a Nuvoton n79e855…
  3. I haven’t found a way to upload the compiled code onto the board, yet. Nuvoton just don’t provide linux tool, so I’m pretty much on my own. Trying hard to figure it out.

However, it’s a start after all, I accept PR :smiley:


Wow!!! New 3-rd party development platform :clap: :smile:

A few hints:

  • “HOWTO (Setup Platform.io for MCS-51)” -is very complicated :slight_smile: Really, you need 1 magic command:
platformio platform install https://github.com/Palatis/platform-mcs51.git
  "name": "mcs51",
  "title": "MCS 8051/8052",
  "description": "Intel 8051/8052 8-bit and 3rd party compatible MCUs those which are used almost everywhere.",
  "url": "https://en.wikipedia.org/wiki/Intel_MCS-51",
  "homepage": "https://github.com/Palatis/platform-mcs51",
  "license": "Apache-2.0",
  "engines": {
    "platformio": "^3.0.0",
    "scons": ">=2.3.0,<2.6.0"
  "repository": {
    "type": "git",
    "url": "https://github.com/Palatis/platform-mcs51.git"
  "version": "0.0.1",
  "packageRepositories": [
      "framework-nakedmcs51": [
          "url": "https://github.com/Palatis/framework-nakedmcs51/archive/master.zip",
          "version": "0.0.1"
  "frameworks": {
    "naked": {
      "package": "framework-nakedmcs51",
      "script": "builder/frameworks/naked.py"
  "packages": {
    "toolchain-sdcc": {
      "type": "toolchain",
      "version": "~1.20500"
    "framework-nakedmcs51": {
      "type": "framework",
      "optional": true,
      "version": "~0.0.1"
    "tool-srecord": {
      "type": "uploader",
      "optional": true,
      "version": "~1.64"

Binary files

We use https://bintray.com and recommend it you. You can out here toolchains and manifest. See PlatformIO repositories:

If you finish with this development platform, we will add it to global registry.

the problem now bugs me are the toolchain and tools.

how do I provide these for different platforms (linux-amd64 / linux-i686 / windowns-x32 / windows-x64 / osx-whatever)?

See existing global manifest https://dl.bintray.com/platformio/dl-packages/manifest.json

Do you have these toolchains for mentioned archs?

SDCC is cross-platform, at least we get linux (i386/amd64), windows (x32/x64), and osx (ppc :scream:/i386).

i’m also having problem with the linter, Atom tries to lint using gcc (and of course it don’t work, it complains about SDCC flags…), how do I make it lint with SDCC?

or… disable linter FTM completely, anyway.

SDCC is cross-platform, at least we get linux (i386/amd64), windows (x32/x64), and osx (ppc :scream:/i386).

Please create own package repository on https://bintray.com with manifest for these packages

or… disable linter FTM completely, anyway.

Project contains .gcc-flags.json file. Try to set it to


Project contains .gcc-flags.json file. Try to set it to


is there anyway that I can tell it to use sdcc for execPath?

I created the manifest.json files for platforms and packages…


$ pio platform install https://github.com/Palatis/platform-mcs51.git
will just work.

well… at least on linux…
edit: and windows 10 x64.

We use this package. I’m not sure that non-GCC compiler will work here.

is it possible to add support in platformio, to disable the linter for a specific platform completely?
like "linter": "none" maybe?

I’ll check it automatically. Please open a feature request here Issues · platformio/platformio-core · GitHub

minor updates to platform-mcs51, tweaking iram/xram/code/heap size, etc.

majorly targeted on fixing linking issue.

I’m happy to report that the platform-mcs51 has been working great on the Nuvoton MS51FB9AE and MS51TC0AE chipsets.

I know it’s been awhile since the original post…but “nuvoprog” does work alright for Linux. It’s unfortunately coded in “Go”, which is lousy at best.