~/intro
sajjad@braz-sadid:~$ whoami

سجاد سبحانی

sajjad@braz-sadid:~$ cat intro.txt

عاشق ساخت چیزهای تازه، خراب کردنشان و یادگیری از آن‌ها.

Computer Engineering Embedded C / C++
sajjad@braz-sadid:~$ ./menu.sh
sajjad@braz-sadid:~$ █
system online | uptime: 0s | mem: 4.2KB / 520KB
~/neofetch
$ neofetch
        ████          ████
      ████████      ████████
    ████    ████████████    ██
   ██                        ██
  ██                          ██
  ██    ████████    ████████  ██
  ██    ██●  ●██    ██●  ●██  ██
  ██    ████████    ████████  ██
  ██                          ██
   ██            ████         ██
    ████                  ████
      ██████████████████████
user@sajjad
─────────────────────────
OS:Shiraz University · CE
Kernel:Embedded Systems 5.x
Uptime:5 semesters
Shell:/bin/c
Editor:VS Code + PlatformIO
Chip:ESP32 (soon™)
Location:Shiraz, IR
$ cat about.md

من سجاد سبحانی هستم، دانشجوی مهندسی کامپیوتر در دانشگاه شیراز. عاشق ساخت چیزهای تازه، خراب کردنشان و یادگیری از اینکه چطور کار می‌کنند.

مسیرم از C و Assembly شروع شد، و الان روی Embedded Systems متمرکز شدم. در حال مهاجرت از Arduino به ESP32 و ESP-IDF.

~/skills/ · explorer
$ open skills/
◈ ~/skills/C-Cpp.md

برنامه‌نویسی C / C++

زبان اصلی من برای پیاده‌سازی الگوریتم‌ها، ساختار داده‌ها و کار با سیستم‌های سطح پایین. از مدیریت حافظه دستی تا نوشتن درایورهای ساده.

PROFICIENCY 60%
pointers memory algorithms data-structures
~/projects/ · 4 windows open
$ ls -la projects/
~/projects/pixel-runner ↗ github

🎮 Pixel Runner

Pixel Runner is a retro-style endless runner game built for Arduino and other microcontroller platforms. It runs on a 16×2 LCD display and is controlled using a joystick module.

The project is developed with PlatformIO and written in C++, following a modular architecture to keep the source code clean and maintainable.

✨ Features

  • 🎮 Joystick controls
  • 🏃 Endless runner gameplay
  • ⚡ Multiple difficulty levels
  • 📈 Score tracking
  • 🎨 Custom LCD characters
  • 🧩 Modular code structure

🛠 Hardware

  • Arduino Uno R3
  • 16×2 LCD (HD44780 compatible)
  • Joystick Module (KY-023 or compatible)
  • Jumper wires

🔌 Wiring

LCD 16×2

LCD PinArduino Pin
RSD7
ED6
D4D5
D5D4
D6D3
D7D2
VSSGND
VDD5V
RWGND
VO10k Potentiometer (Contrast)
A (LED+)5V (through 220Ω)
K (LED−)GND

Joystick Module

Joystick PinArduino Pin
VRxA0
VRyA1
VCC5V
GNDGND

Note: If your hardware connections are different, update the pin definitions in the source code accordingly.

📁 Project Structure

include/
├── characters.h
├── constants.h
├── enum.h
├── functions.h
├── structures.h
└── variables.h

src/
├── characters.cpp
├── functions.cpp
├── main.cpp
└── variables.cpp

🚀 Getting Started

  1. Clone the repository:
    git clone https://github.com/plutron/pixel-runner-Arduino.git
  2. Open the project in PlatformIO.
  3. Connect your Arduino Uno.
  4. Build and upload the project.

🎮 How to Play

  • Select the game speed.
  • Move the joystick to control the player.
  • Avoid incoming obstacles.
  • Survive as long as possible and achieve the highest score.

🤝 Contributing

Contributions, suggestions, and bug reports are welcome. Feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License.

Made with ❤️ using Arduino, PlatformIO, and C++.

main ◆ C++ Arduino
README.md
~/projects/sky-vm ↗ github

Sky Machine

Bubble Operating System and Sky Machine Virtual CPU

Sky Machine is a university-level educational project simulating a virtual machine environment on Windows. This virtual machine runs a minimalist Operating System called Bubble, implemented using a unique assembly-like programming language designed specifically for this platform.

Project Overview

  • The virtual machine architecture simulates memory, registers, hard disk, and CPU operation logic fully implemented in C.
  • It supports a custom assembly-like language with concise syntax for programming the virtual CPU.
  • This is a single-threaded virtual CPU capable of executing only one program at a time.

How It Works

  1. Simulates virtual hardware components including registers and memory heaps.
  2. Uses a unique low-level programming language with instructions similar to assembly for system and user-level programming.
  3. Provides facilities for arithmetic, logical, control flow, I/O, and file operations in the custom language.
  4. Maintains separate memory spaces for OS (Bubble) and user programs, switching execution context accordingly.

Instruction Set Overview

InstructionDescriptionExample
ASSN Rn ValueAssigns a literal value to register Rn.ASSN 1 100
MOVE Rn Addr TypeMoves data from virtual RAM address to register Rn.MOVE 2 15 I
ASSV Rn RmCopies the contents from register Rm to Rn.ASSV 1 2
COMP Rn Rm RzCompares if Rn < Rm, stores 1 in Rz if true.COMP 1 2 3
EQAL Pn Pm PzChecks equality of registers, stores result in Pz.EQAL 1 2 3
NEQL Pn Pm PzChecks inequality of registers, stores result in Pz.NEQL 1 2 3
CJMP Pn LineConditional jump to line if Pn is 1 (true).CJMP 0 100
JUMP LineUnconditional jump to line.JUMP 50
HALTTerminates the running program, returns to OS.HALT
PUTC PnOutputs the character stored in register Pn.PUTC 3
PUTS Pn PmOutputs the string starting at address Pn.PUTS 4 5
PUTI PnOutputs the integer value stored in Pn.PUTI 6
PUSH Pn Pm PxStores the Pm-th index of string into Px.PUSH 1 2 3
ADDN Pn Pm PzAdds values, stores result in Pz.ADDN 1 2 3
ADDO PnIncrements the value in Pn by 1.ADDO 1
MULT Pn Pm PzMultiplies values, stores in Pz.MULT 1 2 3
DIVI Pn Pm PzDivides Pn by Pm, stores quotient in Pz.DIVI 1 2 3
MODE Pn Pm PzCalculates Pn mod Pm, stores remainder in Pz.MODE 1 2 3
GETC PnReads a single character input to Pn.GETC 1
GETI PnReads a single digit (0-9), stores value in Pn.GETI 1
GETS Pn PmReads a string, stores length in Pm.GETS 1 2
ANDC Pn Pm PzLogical AND, stores in Pz.ANDC 1 2 3
ORLC Pn Pm PzLogical OR, stores in Pz.ORLC 1 2 3
NOTC PnLogical NOT of Pn.NOTC 1

Advantages

  • Educational Value: Fully coded in C, providing insight into low-level system programming and CPU simulation.
  • Unique Language: Dedicated assembly-like language designed for precise control and demonstration of virtual CPU concepts.
  • Single-threaded Simplicity: Focus on sequential execution helps emphasize CPU instruction processing mechanics.

Limitations

  • Single-process Execution: Only one program can execute at a time on the virtual CPU.
  • Early Development State: Some API features are planned but not yet implemented.
  • Platform Specific: Implemented primarily for Windows.

Usage and Safety Notes

This project is intended strictly for educational and research use within controlled university or development environments. Running unverified code or modifying system settings outside isolated virtual machines is not recommended.

Team Members

main ◆ C + Assembly
README.md
~/projects/tsp-algorithms ↗ github

Algo_mini_project

A mini project for TSP algorithms!

main ◆ Python Algorithms
README.md
~/projects/ds-for-no-reason ↗ github

DS-FOR-NO-REASON

just for fun!!!!

main ◆ C Data Structures
README.md
~/in-progress/
$ ps aux --user=sajjad | grep embedded
PID STATUS PROJECT PROGRESS
1024 ● RUNNING ESP32 Retro Handheld Console // کنسول دستی با نمایشگر TFT رنگی 35%
1025 ◐ LEARNING ESP-IDF Bare-Metal Drivers // نوشتن درایور SPI و LCD از صفر 20%
1026 ○ PLANNED ESP32 Logic Analyzer // ابزار دیباگ پروتکل‌های I2C / SPI / UART 0%
1027 ◇ IDEA LoRa Weather Station // ایستگاه هواشناسی با ارتباط برد بلند 0%
$ echo "4 processes listed · 1 active · 1 learning · 2 queued"
4 processes listed · 1 active · 1 learning · 2 queued
~/contact/
$ cat contacts.json
$ ./send-message.sh
name>
email>
msg>