mck Usage Guide

This document explains how to use every major component of mck, including the C core, utilities, C++ wrappers, assembly files, Rust integration, and the kernel structure.


1. Core (C89)

Files

Purpose

Usage

core_init();
core_set_logger(my_logger);
core_log("message");

2. Drivers

Files

Purpose

Static driver registry.

Usage

mck_driver drv = { "driver", driver_init };
drivers_register(&drv);
drivers_init_all();

3. Modules

Files

Purpose

Static module registry.

Usage

mck_module mod = { "module", module_init };
modules_register(&mod);
modules_init_all();

4. Utilities

4.1 Memory Utilities

Files

Usage

mck_arena arena;
mck_arena_init(&arena, buffer, size);
void* p = mck_arena_alloc(&arena, 128);

4.2 Static List

Files

Usage

void* storage[16];
mck_list list;
mck_list_init(&list, storage, 16);
mck_list_push(&list, item);

4.3 String Utilities

Files

Usage

mck_str_len("abc");
mck_str_cmp("a", "b");

5. Math

Files

Usage

mck_min_u32(a, b);
mck_clamp_u32(v, min, max);

6. Logging

Files

Usage

mck_log_set_callback(my_logger);
mck_log_msg(MCK_LOG_INFO, "message");

7. Config

Files

Usage

mck_config cfg = { "project", 1, 0, 0 };
mck_config_set(&cfg);

8. Debug

8.1 Assert

Files

Usage

mck_assert(x != 0, "x must not be zero");

8.2 Panic (kernel)

Files

Usage

kernel_panic("fatal error");

9. Buffer Utilities

9.1 Ring Buffer

Files

Usage

mck_ringbuffer rb;
mck_ringbuffer_init(&rb, buffer, capacity);
mck_ringbuffer_push(&rb, value);
mck_ringbuffer_pop(&rb, &out);

10. Bitset

Files

Usage

mck_bitset bs;
mck_bitset_init(&bs, storage, 128);
mck_bitset_set(&bs, 5);

11. Hash Table

Files

Usage

mck_table t;
mck_table_init(&t, entries, capacity);
mck_table_set(&t, "key", value);
void* v = mck_table_get(&t, "key");

12. Event Queue

Files

Usage

mck_event_queue q;
mck_event_queue_init(&q, buffer, capacity);
mck_event_push(&q, handler, userdata);
mck_event_dispatch(&q);

13. Time System

Files

Usage

mck_time_init(1);
mck_time_tick();
mck_time_ms();
mck_time_seconds();

14. Assembly (x86)

Directories

Purpose

These files must be integrated into a real boot pipeline.


15. Assembly (x86_64)

Directories

Purpose

Requires a bootloader that already enabled long mode.


16. C++ Layer

Files

Purpose

Minimal C++ core helpers (no exceptions, no RTTI, no STL).


17. Kernel

Directories

Key Files

Usage

void kmain(void) {
    kernel_init();
    kernel_run();
}

18. Linker Script

Files

Purpose

Defines memory layout, kernel entry, sections, and alignment rules.


19. Build System

mck does not impose a build system. You may use Make, CMake, custom scripts, or any other method.

19.1 Tools

Files

Purpose

Build scripts, helper utilities, and automation.


20. Extending mck

You can add:

mck is designed to be extended freely.


21. Rust Integration

Files

Purpose

Provides optional Rust modules compiled as a static library (libmck_rust.a) usable from C.

Usage (C side)

extern unsigned int mck_rust_add(unsigned int a, unsigned int b);
unsigned int v = mck_rust_add(2, 3);

22. Installer

Files

Purpose

Packaging, distribution, or installation helpers for mck.


23. Documentation System

Files

Purpose

Static documentation pages for mck (HTML, CSS, wiki-style layout).


24. Build Directory

Files

Purpose

Intermediate build artifacts, object files, and generated binaries.


25. Root Source Directory

Files

Purpose

Shared C sources not tied to kernel or utilities.


26. Repository Rules

Files

Purpose

Forces LF line endings across all platforms for OSDev compatibility.


27. Git Ignore Rules

Files

Purpose

Excludes build artifacts, Rust target/, temporary files, and editor caches.