Skip to main content

A compiler that transforms ByteCore assembly code into executable memory bytes, seamlessly bridging the gap between high-level assembly instructions and the ByteCore Emulator's low-level functionality.

Project description

ByteCoreCompiler

The ByteCoreCompiler transforms ByteCore assembly code into a 64KB memory byte array, compatible with the ByteCore Emulator. It includes features to identify syntax errors and guide developers through debugging their code.

Overview

The compiler process involves several steps to convert text-based assembly code into executable memory bytes:

  1. Lexical Analysis: Converts raw text into tokens.
  2. Syntax Analysis: Checks token structure and builds a syntax tree.
  3. Semantic Analysis: Further inspects the syntax tree for logical consistency.

Successful compilation results in a memory byte array ready for emulation; errors during any stage will generate exceptions to highlight issues.

ByteCore Assembly Language

The ByteCore assembly language represents instructions in a format that the ByteCore Emulator can execute directly, consisting of:

  • MSB (Most Significant Byte)
  • LSB (Least Significant Byte)
  • DATA: Can be either a valid hexadecimal number or an opcode.

Rules

The compiler adheres to specific rules to ensure the correct interpretation of ByteCore assembly:

  • Strips leading, trailing, and extra spaces.
  • Treats line breaks (\n, \r, \r\n) as new lines.
  • Ignores text after a semicolon (;), which denotes a comment.
  • Requires lines to have exactly 0 or 3 tokens, not counting comments.
  • Expects the first two tokens of a line to represent numbers in hexadecimal format (0-255).
  • Requires the third token to be a valid opcode or a hexadecimal number corresponding to one of the specific opcodes (0, 1, 2, 4, 8, 16, 32).
  • Prohibits assigning data to a memory address that has already been set.

Instructions

Refer to the ByteCore Emulator README for a detailed list of supported instructions.

Installation and Setup

Prerequisites

Ensure Python 3.11 or newer is installed. Clone the repository and navigate to the root directory. Consider setting up a Python virtual environment to manage dependencies.

Dependencies

Install required dependencies with:

pip3 install -r requirements.txt

Gitpod

Alternatively, use Gitpod for a pre-configured environment by clicking here.

Usage

To compile ByteCore assembly code into memory bytes and execute it, follow these steps:

Example 1: Simple Program

from bytecorecompiler.compiler import Compiler
from bytecore.emulator import ByteCore

bytecore_assembly = """
00 00 LOAD
00 01 00
00 02 0A
00 03 ADD
00 04 00
00 05 0B
00 06 STORE
00 07 FF
00 08 FF
00 09 HALT
00 0A 14; 20
00 0B 1E; 30
"""

memory_bytes = Compiler(bytecore_assembly).get_memory_bytes()
byte_core = ByteCore(memory_bytes)
byte_core.cycle_until_halt()
dump = byte_core.dump()

dump.memory[-1]  # equals 50

Example 2: Advanced Program

This example uses all defined opcodes to demonstrate the compiler's capabilities with a more complex program structure.

from bytecorecompiler.compiler import Compiler
from bytecore.emulator import ByteCore

bytecore_assembly = """
00 00 JMP
00 01 FE
00 02 00

01 00 37; 55
01 01 14; 20
01 02 02;  2
01 03 01;  1

FE 00 LOAD
FE 01 01
FE 02 00
FE 03 ADD
FE 04 01
FE 05 02
FE 06 STORE
FE 07 01
FE 08 00
FE 09 LOAD
FE 0A 01
FE 0B 01
FE 0C SUB
FE 0D 01
FE 0E 03
FE 0F STORE
FE 10 01
FE 11 01
FE 12 LOAD
FE 13 01
FE 14 01
FE 15 JZ
FE 16 FF
FE 17 00
FE 18 JMP
FE 19 FE
FE 1A 00

FF 00 LOAD
FF 01 01
FF 02 00
FF 03 STORE
FF 04 FF
FF 05 FF
FF 06 HALT
"""

memory_bytes = Compiler(bytecore_assembly).get_memory_bytes()
byte_core = ByteCore(memory_bytes)
byte_core.cycle_until_halt()
dump = byte_core.dump()

dump.memory[-1]  # equals 95

License

This project is licensed under the terms of the MIT License. See the LICENSE file for the full text.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bytecorecompiler-1.0.0.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

bytecorecompiler-1.0.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file bytecorecompiler-1.0.0.tar.gz.

File metadata

  • Download URL: bytecorecompiler-1.0.0.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.9

File hashes

Hashes for bytecorecompiler-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f442432228abae3cbb7d7dd696eb031e356e991480cc394ef15f6287517faf26
MD5 fe98fd2931b6edd2e70e59c2a4cc8e36
BLAKE2b-256 1bd0e0a884c451c25501c9da5b055934d7c912240b13bcef5924c83693e32170

See more details on using hashes here.

File details

Details for the file bytecorecompiler-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for bytecorecompiler-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 92def2cf75dfc2d1995ee83311fc1a95252dce3213c8a7c8706919e46cd9f8f2
MD5 2977f1bb0fd47d86e443c345b17a9a77
BLAKE2b-256 6798b42aa3f203e61b15407c4be91bdb1c1f808cb91d22f4b95263f7a3070a2a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page