Repository files navigation

Vapor Spec

A virtual game platform with capabilities similar to 80s game consoles. This repo contains the Windows/Linux implementation, some games, the compiler, assembler, and documentation.

A live version is available for the browser HERE

A Nintendo Switch Homebrew implementation exists HERE

Available as a RetroArch core INFO

The platform has:

  • A 16 bit instruction size
  • 16 different general purpose registers
  • 65536 bytes (64K) of addressable memory
  • An 8-bit color depth screen for a palette of 256 colors
  • Support for 256 concurrent sprites
  • Support for sprites with 4 colors or 3 colors + alpha
  • A screen resolution of 256 x 192 and a refresh rate of 60 Hz (16 ms)
  • A maximum of 65536 instructions per program
  • A speed of 500,000 instructions per second (0.5 MIPS)

An Added Bonus:

  • An assembler
  • A compiler and language
    • with vim syntax highlighting file in /etc
    • and a vscode extension, search the marketplace for vaporlang
  • Debugging functionality
  • Documentation (see /docs)

Included Programs:

Example programs in assembly and vaporlang are included.

Fallen Colony

This demo includes many sprites, multiple rooms, and a mini map. It does not have combat or win/loss states.

fallencolony3fallencolonyfallencolony2

Other Programs

These programs are much simpler and some do not use any rom.

marspongtetrisbreakout

Two programs demonstrate the ability to create sprites at runtime.

pong3lines

Why did you make this? Who is it for?

This is a hobby project to allow myself and others to write games for a very simple architecture without some of the annoyances that physical architectures impose.

This project can be viewed as a challenge to people like demoscene members. Please let me know if you make a program.

How do I build and run it?

Linux:

Install SDL2 and libpng if you don't already have them. Systems with apt should try:

sudo apt install libsdl2-dev libpng-dev

To build and test the platform on linux, run one of the included programs:

cd vm/games
./mars.sh
./pong.sh
./tetris.sh
./fallen.sh

Windows (x86):

See the Releases Section for a pre-built exe and pre-assembled games. I haven't built the assembler, sprite converter, or compiler for windows. If you want to build for Windows then you will need the SDL2 dev files and the Platform Toolset v120 (from Visual Studio 2013).

How do I make a program/game?

  1. Have some low level programming knowledge.
  2. Check out the /docs folder.
  3. Feel free to open an issue on github or ask me for help.

About

Virtual Game Platform

Topics

Resources

Stars

32 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Vapor Spec

A virtual game platform with capabilities similar to 80s game consoles. This repo contains the Windows/Linux implementation, some games, the compiler, assembler, and documentation.

A live version is available for the browser HERE

A Nintendo Switch Homebrew implementation exists HERE

Available as a RetroArch core INFO

The platform has:

  • A 16 bit instruction size
  • 16 different general purpose registers
  • 65536 bytes (64K) of addressable memory
  • An 8-bit color depth screen for a palette of 256 colors
  • Support for 256 concurrent sprites
  • Support for sprites with 4 colors or 3 colors + alpha
  • A screen resolution of 256 x 192 and a refresh rate of 60 Hz (16 ms)
  • A maximum of 65536 instructions per program
  • A speed of 500,000 instructions per second (0.5 MIPS)

An Added Bonus:

  • An assembler
  • A compiler and language
    • with vim syntax highlighting file in /etc
    • and a vscode extension, search the marketplace for vaporlang
  • Debugging functionality
  • Documentation (see /docs)

Included Programs:

Example programs in assembly and vaporlang are included.

Fallen Colony

This demo includes many sprites, multiple rooms, and a mini map. It does not have combat or win/loss states.

fallencolony3fallencolonyfallencolony2

Other Programs

These programs are much simpler and some do not use any rom.

marspongtetrisbreakout

Two programs demonstrate the ability to create sprites at runtime.

pong3lines

Why did you make this? Who is it for?

This is a hobby project to allow myself and others to write games for a very simple architecture without some of the annoyances that physical architectures impose.

This project can be viewed as a challenge to people like demoscene members. Please let me know if you make a program.

How do I build and run it?

Linux:

Install SDL2 and libpng if you don't already have them. Systems with apt should try:

sudo apt install libsdl2-dev libpng-dev

To build and test the platform on linux, run one of the included programs:

cd vm/games
./mars.sh
./pong.sh
./tetris.sh
./fallen.sh

Windows (x86):

See the Releases Section for a pre-built exe and pre-assembled games. I haven't built the assembler, sprite converter, or compiler for windows. If you want to build for Windows then you will need the SDL2 dev files and the Platform Toolset v120 (from Visual Studio 2013).

How do I make a program/game?

  1. Have some low level programming knowledge.
  2. Check out the /docs folder.
  3. Feel free to open an issue on github or ask me for help.

About

Virtual Game Platform

Topics

Resources

Stars

32 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Vapor Spec

A virtual game platform with capabilities similar to 80s game consoles. This repo contains the Windows/Linux implementation, some games, the compiler, assembler, and documentation.

A live version is available for the browser HERE

A Nintendo Switch Homebrew implementation exists HERE

Available as a RetroArch core INFO

The platform has:

  • A 16 bit instruction size
  • 16 different general purpose registers
  • 65536 bytes (64K) of addressable memory
  • An 8-bit color depth screen for a palette of 256 colors
  • Support for 256 concurrent sprites
  • Support for sprites with 4 colors or 3 colors + alpha
  • A screen resolution of 256 x 192 and a refresh rate of 60 Hz (16 ms)
  • A maximum of 65536 instructions per program
  • A speed of 500,000 instructions per second (0.5 MIPS)

An Added Bonus:

  • An assembler
  • A compiler and language
    • with vim syntax highlighting file in /etc
    • and a vscode extension, search the marketplace for vaporlang
  • Debugging functionality
  • Documentation (see /docs)

Included Programs:

Example programs in assembly and vaporlang are included.

Fallen Colony

This demo includes many sprites, multiple rooms, and a mini map. It does not have combat or win/loss states.

fallencolony3fallencolonyfallencolony2

Other Programs

These programs are much simpler and some do not use any rom.

marspongtetrisbreakout

Two programs demonstrate the ability to create sprites at runtime.

pong3lines

Why did you make this? Who is it for?

This is a hobby project to allow myself and others to write games for a very simple architecture without some of the annoyances that physical architectures impose.

This project can be viewed as a challenge to people like demoscene members. Please let me know if you make a program.

How do I build and run it?

Linux:

Install SDL2 and libpng if you don't already have them. Systems with apt should try:

sudo apt install libsdl2-dev libpng-dev

To build and test the platform on linux, run one of the included programs:

cd vm/games
./mars.sh
./pong.sh
./tetris.sh
./fallen.sh

Windows (x86):

See the Releases Section for a pre-built exe and pre-assembled games. I haven't built the assembler, sprite converter, or compiler for windows. If you want to build for Windows then you will need the SDL2 dev files and the Platform Toolset v120 (from Visual Studio 2013).

How do I make a program/game?

  1. Have some low level programming knowledge.
  2. Check out the /docs folder.
  3. Feel free to open an issue on github or ask me for help.

About

Virtual Game Platform

Topics

Resources

Stars

32 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Vapor Spec

A virtual game platform with capabilities similar to 80s game consoles. This repo contains the Windows/Linux implementation, some games, the compiler, assembler, and documentation.

A live version is available for the browser HERE

A Nintendo Switch Homebrew implementation exists HERE

Available as a RetroArch core INFO

The platform has:

  • A 16 bit instruction size
  • 16 different general purpose registers
  • 65536 bytes (64K) of addressable memory
  • An 8-bit color depth screen for a palette of 256 colors
  • Support for 256 concurrent sprites
  • Support for sprites with 4 colors or 3 colors + alpha
  • A screen resolution of 256 x 192 and a refresh rate of 60 Hz (16 ms)
  • A maximum of 65536 instructions per program
  • A speed of 500,000 instructions per second (0.5 MIPS)

An Added Bonus:

  • An assembler
  • A compiler and language
    • with vim syntax highlighting file in /etc
    • and a vscode extension, search the marketplace for vaporlang
  • Debugging functionality
  • Documentation (see /docs)

Included Programs:

Example programs in assembly and vaporlang are included.

Fallen Colony

This demo includes many sprites, multiple rooms, and a mini map. It does not have combat or win/loss states.

fallencolony3fallencolonyfallencolony2

Other Programs

These programs are much simpler and some do not use any rom.

marspongtetrisbreakout

Two programs demonstrate the ability to create sprites at runtime.

pong3lines

Why did you make this? Who is it for?

This is a hobby project to allow myself and others to write games for a very simple architecture without some of the annoyances that physical architectures impose.

This project can be viewed as a challenge to people like demoscene members. Please let me know if you make a program.

How do I build and run it?

Linux:

Install SDL2 and libpng if you don't already have them. Systems with apt should try:

sudo apt install libsdl2-dev libpng-dev

To build and test the platform on linux, run one of the included programs:

cd vm/games
./mars.sh
./pong.sh
./tetris.sh
./fallen.sh

Windows (x86):

See the Releases Section for a pre-built exe and pre-assembled games. I haven't built the assembler, sprite converter, or compiler for windows. If you want to build for Windows then you will need the SDL2 dev files and the Platform Toolset v120 (from Visual Studio 2013).

How do I make a program/game?

  1. Have some low level programming knowledge.
  2. Check out the /docs folder.
  3. Feel free to open an issue on github or ask me for help.

About

Virtual Game Platform

Topics

Resources

Stars

32 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Vapor Spec

A virtual game platform with capabilities similar to 80s game consoles. This repo contains the Windows/Linux implementation, some games, the compiler, assembler, and documentation.

A live version is available for the browser HERE

A Nintendo Switch Homebrew implementation exists HERE

Available as a RetroArch core INFO

The platform has:

  • A 16 bit instruction size
  • 16 different general purpose registers
  • 65536 bytes (64K) of addressable memory
  • An 8-bit color depth screen for a palette of 256 colors
  • Support for 256 concurrent sprites
  • Support for sprites with 4 colors or 3 colors + alpha
  • A screen resolution of 256 x 192 and a refresh rate of 60 Hz (16 ms)
  • A maximum of 65536 instructions per program
  • A speed of 500,000 instructions per second (0.5 MIPS)

An Added Bonus:

  • An assembler
  • A compiler and language
    • with vim syntax highlighting file in /etc
    • and a vscode extension, search the marketplace for vaporlang
  • Debugging functionality
  • Documentation (see /docs)

Included Programs:

Example programs in assembly and vaporlang are included.

Fallen Colony

This demo includes many sprites, multiple rooms, and a mini map. It does not have combat or win/loss states.

fallencolony3fallencolonyfallencolony2

Other Programs

These programs are much simpler and some do not use any rom.

marspongtetrisbreakout

Two programs demonstrate the ability to create sprites at runtime.

pong3lines

Why did you make this? Who is it for?

This is a hobby project to allow myself and others to write games for a very simple architecture without some of the annoyances that physical architectures impose.

This project can be viewed as a challenge to people like demoscene members. Please let me know if you make a program.

How do I build and run it?

Linux:

Install SDL2 and libpng if you don't already have them. Systems with apt should try:

sudo apt install libsdl2-dev libpng-dev

To build and test the platform on linux, run one of the included programs:

cd vm/games
./mars.sh
./pong.sh
./tetris.sh
./fallen.sh

Windows (x86):

See the Releases Section for a pre-built exe and pre-assembled games. I haven't built the assembler, sprite converter, or compiler for windows. If you want to build for Windows then you will need the SDL2 dev files and the Platform Toolset v120 (from Visual Studio 2013).

How do I make a program/game?

  1. Have some low level programming knowledge.
  2. Check out the /docs folder.
  3. Feel free to open an issue on github or ask me for help.

About

Virtual Game Platform

Topics

Resources

Stars

32 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Vapor Spec

A virtual game platform with capabilities similar to 80s game consoles. This repo contains the Windows/Linux implementation, some games, the compiler, assembler, and documentation.

A live version is available for the browser HERE

A Nintendo Switch Homebrew implementation exists HERE

Available as a RetroArch core INFO

The platform has:

  • A 16 bit instruction size
  • 16 different general purpose registers
  • 65536 bytes (64K) of addressable memory
  • An 8-bit color depth screen for a palette of 256 colors
  • Support for 256 concurrent sprites
  • Support for sprites with 4 colors or 3 colors + alpha
  • A screen resolution of 256 x 192 and a refresh rate of 60 Hz (16 ms)
  • A maximum of 65536 instructions per program
  • A speed of 500,000 instructions per second (0.5 MIPS)

An Added Bonus:

  • An assembler
  • A compiler and language
    • with vim syntax highlighting file in /etc
    • and a vscode extension, search the marketplace for vaporlang
  • Debugging functionality
  • Documentation (see /docs)

Included Programs:

Example programs in assembly and vaporlang are included.

Fallen Colony

This demo includes many sprites, multiple rooms, and a mini map. It does not have combat or win/loss states.

fallencolony3fallencolonyfallencolony2

Other Programs

These programs are much simpler and some do not use any rom.

marspongtetrisbreakout

Two programs demonstrate the ability to create sprites at runtime.

pong3lines

Why did you make this? Who is it for?

This is a hobby project to allow myself and others to write games for a very simple architecture without some of the annoyances that physical architectures impose.

This project can be viewed as a challenge to people like demoscene members. Please let me know if you make a program.

How do I build and run it?

Linux:

Install SDL2 and libpng if you don't already have them. Systems with apt should try:

sudo apt install libsdl2-dev libpng-dev

To build and test the platform on linux, run one of the included programs:

cd vm/games
./mars.sh
./pong.sh
./tetris.sh
./fallen.sh

Windows (x86):

See the Releases Section for a pre-built exe and pre-assembled games. I haven't built the assembler, sprite converter, or compiler for windows. If you want to build for Windows then you will need the SDL2 dev files and the Platform Toolset v120 (from Visual Studio 2013).

How do I make a program/game?

  1. Have some low level programming knowledge.
  2. Check out the /docs folder.
  3. Feel free to open an issue on github or ask me for help.

About

Virtual Game Platform

Topics

Resources

Stars

32 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Vapor Spec

A virtual game platform with capabilities similar to 80s game consoles. This repo contains the Windows/Linux implementation, some games, the compiler, assembler, and documentation.

A live version is available for the browser HERE

A Nintendo Switch Homebrew implementation exists HERE

Available as a RetroArch core INFO

The platform has:

  • A 16 bit instruction size
  • 16 different general purpose registers
  • 65536 bytes (64K) of addressable memory
  • An 8-bit color depth screen for a palette of 256 colors
  • Support for 256 concurrent sprites
  • Support for sprites with 4 colors or 3 colors + alpha
  • A screen resolution of 256 x 192 and a refresh rate of 60 Hz (16 ms)
  • A maximum of 65536 instructions per program
  • A speed of 500,000 instructions per second (0.5 MIPS)

An Added Bonus:

  • An assembler
  • A compiler and language
    • with vim syntax highlighting file in /etc
    • and a vscode extension, search the marketplace for vaporlang
  • Debugging functionality
  • Documentation (see /docs)

Included Programs:

Example programs in assembly and vaporlang are included.

Fallen Colony

This demo includes many sprites, multiple rooms, and a mini map. It does not have combat or win/loss states.

fallencolony3fallencolonyfallencolony2

Other Programs

These programs are much simpler and some do not use any rom.

marspongtetrisbreakout

Two programs demonstrate the ability to create sprites at runtime.

pong3lines

Why did you make this? Who is it for?

This is a hobby project to allow myself and others to write games for a very simple architecture without some of the annoyances that physical architectures impose.

This project can be viewed as a challenge to people like demoscene members. Please let me know if you make a program.

How do I build and run it?

Linux:

Install SDL2 and libpng if you don't already have them. Systems with apt should try:

sudo apt install libsdl2-dev libpng-dev

To build and test the platform on linux, run one of the included programs:

cd vm/games
./mars.sh
./pong.sh
./tetris.sh
./fallen.sh

Windows (x86):

See the Releases Section for a pre-built exe and pre-assembled games. I haven't built the assembler, sprite converter, or compiler for windows. If you want to build for Windows then you will need the SDL2 dev files and the Platform Toolset v120 (from Visual Studio 2013).

How do I make a program/game?

  1. Have some low level programming knowledge.
  2. Check out the /docs folder.
  3. Feel free to open an issue on github or ask me for help.

About

Virtual Game Platform

Topics

Resources

Stars

32 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Vapor Spec

A virtual game platform with capabilities similar to 80s game consoles. This repo contains the Windows/Linux implementation, some games, the compiler, assembler, and documentation.

A live version is available for the browser HERE

A Nintendo Switch Homebrew implementation exists HERE

Available as a RetroArch core INFO

The platform has:

  • A 16 bit instruction size
  • 16 different general purpose registers
  • 65536 bytes (64K) of addressable memory
  • An 8-bit color depth screen for a palette of 256 colors
  • Support for 256 concurrent sprites
  • Support for sprites with 4 colors or 3 colors + alpha
  • A screen resolution of 256 x 192 and a refresh rate of 60 Hz (16 ms)
  • A maximum of 65536 instructions per program
  • A speed of 500,000 instructions per second (0.5 MIPS)

An Added Bonus:

  • An assembler
  • A compiler and language
    • with vim syntax highlighting file in /etc
    • and a vscode extension, search the marketplace for vaporlang
  • Debugging functionality
  • Documentation (see /docs)

Included Programs:

Example programs in assembly and vaporlang are included.

Fallen Colony

This demo includes many sprites, multiple rooms, and a mini map. It does not have combat or win/loss states.

fallencolony3fallencolonyfallencolony2

Other Programs

These programs are much simpler and some do not use any rom.

marspongtetrisbreakout

Two programs demonstrate the ability to create sprites at runtime.

pong3lines

Why did you make this? Who is it for?

This is a hobby project to allow myself and others to write games for a very simple architecture without some of the annoyances that physical architectures impose.

This project can be viewed as a challenge to people like demoscene members. Please let me know if you make a program.

How do I build and run it?

Linux:

Install SDL2 and libpng if you don't already have them. Systems with apt should try:

sudo apt install libsdl2-dev libpng-dev

To build and test the platform on linux, run one of the included programs:

cd vm/games
./mars.sh
./pong.sh
./tetris.sh
./fallen.sh

Windows (x86):

See the Releases Section for a pre-built exe and pre-assembled games. I haven't built the assembler, sprite converter, or compiler for windows. If you want to build for Windows then you will need the SDL2 dev files and the Platform Toolset v120 (from Visual Studio 2013).

How do I make a program/game?

  1. Have some low level programming knowledge.
  2. Check out the /docs folder.
  3. Feel free to open an issue on github or ask me for help.

About

Virtual Game Platform

Topics

Resources

Stars

32 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages