BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
BM33은 Raspberry Pi Zero용 소형 레트로 게임 콘솔로, 하드웨어와 저수준 코드만으로 동작합니다
Hi! 👋I'm building **BM33**, a tiny bare-metal retro game console for the **Raspberry Pi Zero**.No Linux. No desktop. Just hardware, low-level code, pixels, sound, and games. 🎮BM33 is an experim
게임C · LuaGitHub @f-accomando온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Bare Metal Pi Zero w1.1 Console
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A game from scratch, with bm alone (30 s): pixel art and a 3D model in bm Studio, skeleton
and walk in bm Animator, then on the console the map in the SDK, the code in bm Code with the AI assistant,
and the game. The console scenes are recorded in QEMU ( -M raspi0 ) with the same kernel as the Pi.
MP4 1280×720 · rebuilt by make showreelREADME 전문 보기 ↗bm (BareMetal) is an open-source games console and development environment. It runs on the Raspberry Pi Zero W (main target, also the other Pi 1 boards) and on the PowKiddy RGB30 (make TARGET=rgb30) with no underlying operating system. The Pi Zero 2 W kernel (kernel7.img) is off in the default build.
Power on and the console boots straight into the games menu. Games are written in Lua 5.4, powered by a custom bare-metal runtime with 2D and 3D pipelines, V3D hardware rendering on the Pi, a polyphonic synthesizer, network multiplayer, and an on-device creative suite.
kernel.img (C, ARM assembly, and Lua 5.4) communicates directly with hardware registers. Size on 25 Oct 2026: about 4.5 MB for the Pi (kernel.img, with the editors built in) and about 2.3 MB for the RGB30 (kernel8.img).gpu_mem=64, see docs/HARDWARE.md).docs/RISOLUZIONI.md)..bm):
bm/ folder of the SD card: Lua source, sprite sheets, tile maps, 3D meshes, skeletal animations and sound banks (docs/BM-FORMAT.md)..bm runs on the Pi Zero W and on the RGB30. Its header lists the kernels it runs on (the targets key in bm.info). A cartridge made for the other device shows a faded cover. The design is in docs/design/single-bm-and-adaptive-screen.md..p8, .p8.png) play through the built-in nano8 cartridge.local x = 320
function _update() -- 60 fps fixed update
if btn(0) then x = x - 2 end -- Left pad / arrow
if btn(1) then x = x + 2 end -- Right pad / arrow
end
function _draw()
cls(0x102030)
spr(1, x, 180) -- Draw sprite from cartridge sheet
end
Hardware target: Raspberry Pi Zero W (ARM1176 @ 1.0 GHz, VideoCore IV V3D GPU). All numbers are from the 3D Bench reports of 22 and 24 Oct 2026, at 640×360 RGB565, and show what one 60 fps frame (16.6 ms) holds. The full tables, with the report of each number, are in docs/PERF-BUDGET.md. RGB30: not verified on hardware with the current drivers.
| Thing | One 60 fps frame holds |
|---|---|
| Map layer, opaque, full screen (8×8 tiles) | 5 layers (3.08 ms each) |
| Sprites 16×16, ARM | 2,574 |
| Sprites 16×16, GPU in the 2D job | 3,569 or more |
| Hero of 1,536 triangles, GPU with vertex shader | 66 |
| Spheres of 96 faces, GPU with vertex shader | 783 |
| Draw calls (one cube each), GPU with vertex shader | 1,386 |
Hero sets with map, 2D and logic (herotris), GPU + vertex shader + queue | 49,956 triangles (13.7 ms) |
| Hero Stress, 640×360, animated heroes | 50 heroes, 52,992 triangles (59-60 fps) |
| Hero Stress, 1080p | 24 heroes, 27,408 triangles (60 fps) |
The same herotris scene on the ARM rasterizer holds 2,385 triangles (40.8 ms).
bm integrates bm3d (version 7.7 in src/gpu/version3d.h), a dual-path 3D engine:
gpu3d): the V3D fills pixels with custom QPU assembly shaders (tools/qpuasm.py) at 811 Mpixel/s (full-screen render only). The vertex shader (gpu3d_vs, default 2) places the corners on the GPU. 4× MSAA is available (gpu3d_aa, off by default). The 2D draws in the same GPU job (gpu3d_2d, on by default).r3d): software rasterizer with per-face LOD, screen-door transparency, and planar shadows, used when the GPU is absent or in emulators.gpu3d) and 3D on the ARM (r3d_fast). Every other graphics key is set in config.txt (docs/progress/v3d-flags.md).j key of the monitor) runs every 3D test with every driver and saves a report on the SD card (docs/BENCH3D.md).carts/bench3d): a Lua edition. It has its own numbers, not comparable with the C bench.carts/herocart): a plaza with walking heroes. Change the hero count, the polygon level and the 3D options in real time, and read the cost.carts/bmweb): 723 frames at 59.6 fps on the Pi Zero W, no late frame (report of 24 Oct, docs/PERF-BUDGET.md).Older measurements (Sep-Oct 2026) stay as history in
docs/GPU-BENCHMARK-REPORT.md,docs/PERFORMANCE.mdanddocs/STRESS.md. The tools they used (stress test, Texture Room, Stack bench, GPU test) were removed from the kernel on 24 Oct 2026.
Everything in a cartridge can be created with the bm editors. They are built into the kernel or installed from Market > Apps, and open from the Dev tab (next to bm Code, the Assistant, the Monitor and the Lua prompt):
| Tool | Focus | Capabilities |
|---|---|---|
| bm SDK | Project Hub | Templates (2D platformer, top-down, shooter, versus, online, stages; 3D scene, 3D with models), maps, tiles, budgets (tokens, Lua, assets), build of the game. |
| bm Code | IDE | Lua editor with tabs, two pages, 6×12, 8×14 and 8×16 fonts, completion, API help and API lint on save. |
| bm Pixel | 2D Art | Sprite sheet editor with palette, sprite stacks and onion skin. |
| bm Studio | 3D Modeling | Models from tiles and blocks, with vertex editing, right on the console. |
| bm Animator | Animation | Skeletons and animations for the models, with IK on a two-bone handle. |
| bm Mesh | Geometry | The meshes of a .bm, its models and those its code builds. |
| bm Sound | Audio | 8-voice synth: instruments, sound effects, patterns and songs. |
| bm Write | Documents | Word processor for styled documents on A4 pages; exports to MD, HTML, TXT and PDF. |
| AI Assistant | Assistant | On-device INT8 assistant answering questions about bm, with recipes for sprites and low-poly models with skeletons. |
nano8 (PICO-8 carts), Pad Typing, bm Write, bm Web (a web browser for HTML5, CSS and JavaScript pages, https only), Hero Stress and the 3D Bench. The covers are drawn by scripts/mkartcovers.py.market/README.md).Requires arm-none-eabi-gcc, Python 3, dosfstools, mtools, and QEMU (for emulation tests). This is the package list of the CI (.github/workflows/ci.yml). The RGB30 kernel needs aarch64-linux-gnu-gcc and picolibc (docs/RGB30.md).
# Ubuntu / Debian
sudo apt-get install -y gcc-arm-none-eabi libnewlib-arm-none-eabi binutils-arm-none-eabi \
qemu-system-arm make python3 python3-numpy python3-pil dosfstools mtools
# 1. Fetch the Pi firmware once, then build the bootable disk image (dist/bm.img)
make firmware && make image
# 2. Run the host tests and the QEMU regression tests (all of them)
make test
# 3. Launch the Pi kernel in QEMU
make qemu
make builds the kernel and the game cartridges. Run only the tests a change affects, for example python3 tests/qemu_test.py --build build -k <name> or make test-b3d. A cartridge is built by one rule in the Makefile: add a carts/<id>/ folder and its name to GAMES (docs/PROJECT-LAYOUT.md). Change a game or app in its .bme project, then build the .bm from it.
dist/bm.img to a microSD card using Raspberry Pi Imager ("Use Custom"), balenaEtcher, or dd. From WSL, ./easy_install.sh also updates the kernel on a card or over the network.docs/progress.md (the canonical navigation root).docs/API.md (complete draw, input, audio, 3D, and netplay reference).docs/GAME-GUIDE.md (Italian: docs/GUIDA-GIOCHI.md).docs/design/.docs/PERF-BUDGET.md (what a frame holds), docs/BENCH3D.md, docs/PERFORMANCE.md, docs/DRIVERS.md, and docs/HARDWARE.md.docs/NEXT.md and the plan in docs/ROADMAP.md.bm is developed by F. Accomando and licensed under the BM Community License 1.0 (LICENSE).