{"id":12781,"date":"2026-09-22T22:20:55","date_gmt":"2026-09-22T13:20:55","guid":{"rendered":"https:\/\/www.webcyou.com\/?p=12781"},"modified":"2026-09-22T22:20:56","modified_gmt":"2026-09-22T13:20:56","slug":"%e3%80%90r-chr%e3%80%91rust-egui-%e3%81%a7%e3%83%95%e3%82%a1%e3%83%9f%e3%82%b3%e3%83%b3%e7%94%a8%e3%82%b9%e3%83%97%e3%83%a9%e3%82%a4%e3%83%88%e3%82%a8%e3%83%87%e3%82%a3%e3%82%bf%e3%82%92%e4%bd%9c","status":"publish","type":"post","link":"https:\/\/www.webcyou.com\/?p=12781","title":{"rendered":"\u3010R-CHR\u3011Rust + egui \u3067\u30d5\u30a1\u30df\u30b3\u30f3\u7528\u30b9\u30d7\u30e9\u30a4\u30c8\u30a8\u30c7\u30a3\u30bf\u3092\u4f5c\u3063\u305f\u8a71 \u305d\u306e1 \u6982\u8981\u3068\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3"},"content":{"rendered":"\n<p>\u3069\u3082\u3067\u3059\u3002<\/p>\n<p>\u3061\u3087\u3063\u3068\u524d\u306e\u4e8b\u306b\u306a\u308a\u307e\u3059\u304c\u3001Rust \u3067\u30d5\u30a1\u30df\u30b3\u30f3\uff08NES\uff09\u7528\u306e\u30b9\u30d7\u30e9\u30a4\u30c8\uff08CHR\uff09\u30a8\u30c7\u30a3\u30bf\u3092\u4f5c\u3063\u305f\u8a71\u3067\u3082\u3064\u3089\u3064\u3089\u3068\u8a18\u4e8b\u3092\u66f8\u3044\u3066\u3044\u3053\u3046\u304b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u540d\u524d\u306f <strong>R-CHR<\/strong>\u3002Rust \u3067\u66f8\u3044\u305f CHR \u30a8\u30c7\u30a3\u30bf\u306a\u306e\u3067\u3001\u305d\u306e\u307e\u3093\u307e\u306e\u540d\u524d\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<p align=\"center\"><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/raw.githubusercontent.com\/retrodig\/r-chr\/main\/design\/R-CHR.png\" width=\"699\" height=\"410\" \/><\/p>\n<p>\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u3053\u3061\u3089\u3002<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/retrodig\/r-chr\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/retrodig\/r-chr<\/a><\/li>\n<\/ul>\n<p>\u30d5\u30a1\u30df\u30b3\u30f3\u306e\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u3044\u3058\u308a\u3068\u3044\u3048\u3070 <strong>YY-CHR<\/strong> \u304c\u5b9a\u756a\u4e2d\u306e\u5b9a\u756a\u3067\u3057\u3066\u3001\u81ea\u5206\u3082\u305a\u3063\u3068\u304a\u4e16\u8a71\u306b\u306a\u3063\u3066\u3044\u305f\u306e\u3067\u3059\u304c\u3001\u300c\u63cf\u753b\u30c4\u30fc\u30eb\u304c\u3082\u3046\u5c11\u3057\u6b32\u3057\u3044\u300d\u300cPNG \u3092\u3082\u3063\u3068\u96d1\u306b\u653e\u308a\u8fbc\u307f\u305f\u3044\u300d\u300cMac \u3067\u3082\u30cd\u30a4\u30c6\u30a3\u30d6\u306b\u52d5\u3044\u3066\u307b\u3057\u3044\u300d\u3068\u3044\u3063\u305f\u6b32\u304c\u51fa\u3066\u304d\u307e\u3057\u3066\u3002\u3060\u3063\u305f\u3089\u81ea\u5206\u3067\u4f5c\u3063\u3066\u3057\u307e\u3048\u3001\u3068\u3002<\/p>\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u4eca\u56de\u304b\u3089\u6570\u56de\u306b\u5206\u3051\u3066\u3001\u3053\u306e R-CHR \u306e\u6280\u8853\u7684\u306a\u4e2d\u8eab\u3092\u9806\u3092\u8ffd\u3063\u3066\u89e3\u8aac\u3057\u3066\u3044\u304f\u5f62\u306b\u306a\u308a\u307e\u3059\u3002\u30d5\u30a1\u30df\u30b3\u30f3\u306e\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u5f62\u5f0f\u306e\u8a71\u304b\u3089\u3001egui \u3067\u306e UI \u69cb\u7bc9\u3001\u63cf\u753b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3001PNG \u30a4\u30f3\u30dd\u30fc\u30c8\u3001macOS \u30cd\u30a4\u30c6\u30a3\u30d6\u5bfe\u5fdc\u3001GitHub Actions \u3067\u306e\u30ea\u30ea\u30fc\u30b9\u307e\u3067\u3001\u4e00\u901a\u308a\u89e6\u308c\u3066\u3044\u304f\u4e88\u5b9a\u3067\u3059\u3002<\/p>\n<h4>\u9023\u8f09\u306e\u4e88\u5b9a<\/h4>\n<ol>\n<li>\u6982\u8981\u3068\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\uff08\u3053\u306e\u8a18\u4e8b\uff09<\/li>\n<li>NES \u306e CHR \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\uff082BPP\uff09\u3068 iNES \u30d8\u30c3\u30c0\u3001\u30d1\u30ec\u30c3\u30c8<\/li>\n<li>egui \u3067\u7d44\u3080 3 \u30d1\u30cd\u30eb UI \u3068\u30d0\u30f3\u30af\u30d3\u30e5\u30fc<\/li>\n<li>\u30c9\u30c3\u30c8\u30a8\u30c7\u30a3\u30bf\u306e\u57fa\u790e\u3068\u30a2\u30f3\u30c9\u30a5\u8a2d\u8a08<\/li>\n<li>\u56f3\u5f62\u30c4\u30fc\u30eb\uff08Bresenham\u30fb\u6955\u5186\u30fb\u5857\u308a\u3064\u3076\u3057\u30fb\u30b9\u30bf\u30f3\u30d7\uff09<\/li>\n<li>PNG \u30a4\u30f3\u30dd\u30fc\u30c8\u3068 3 \u3064\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u6226\u7565<\/li>\n<li>macOS \u30cd\u30a4\u30c6\u30a3\u30d6\u30e1\u30cb\u30e5\u30fc\u30fb\u591a\u8a00\u8a9e\u5bfe\u5fdc\u30fbGitHub Actions \u3067\u306e\u30ea\u30ea\u30fc\u30b9<\/li>\n<\/ol>\n<h4>R-CHR \u3067\u3067\u304d\u308b\u3053\u3068<\/h4>\n<p>\u307e\u305a\u306f\u3069\u3093\u306a\u3082\u306e\u304b\u3092\u3056\u3063\u304f\u308a\u3068\u3002<\/p>\n<p class=\"image\"><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/raw.githubusercontent.com\/retrodig\/r-chr\/main\/design\/r-chr-ss01-ja.png\" width=\"650\" height=\"407\" \/><\/p>\n<ul>\n<li><code>.nes<\/code>\uff08iNES \u5f62\u5f0f\uff09\/ <code>.bin<\/code>\uff08\u751f\u306e CHR \u30d0\u30a4\u30ca\u30ea\uff09\/ <code>.zip<\/code>\uff08\u4e2d\u306e <code>.nes<\/code> \u3092\u81ea\u52d5\u5c55\u958b\uff09\u3092\u958b\u3044\u3066\u7de8\u96c6\u30fb\u4fdd\u5b58<\/li>\n<li>CHR \u30c7\u30fc\u30bf\u5168\u4f53\u3092 16 \u30bf\u30a4\u30eb\u5e45\u306e\u7e26\u9577\u30c6\u30af\u30b9\u30c1\u30e3\u3068\u3057\u3066<strong>\u9023\u7d9a\u30b9\u30af\u30ed\u30fc\u30eb\u8868\u793a<\/strong><\/li>\n<li>8 \/ 16 \/ 32 \/ 64 \/ 128px \u306e 5 \u6bb5\u968e\u3067\u7de8\u96c6\u5358\u4f4d\uff08\u30d5\u30a9\u30fc\u30ab\u30b9\u30b5\u30a4\u30ba\uff09\u3092\u5207\u308a\u66ff\u3048<\/li>\n<li>\u30da\u30f3\u30fb\u30d1\u30bf\u30fc\u30f3\u30da\u30f3\u30fb\u76f4\u7dda\u30fb\u77e9\u5f62\uff08\u67a0 \/ \u5857\u308a \/ \u30d1\u30bf\u30fc\u30f3\uff09\u30fb\u6955\u5186\uff08\u67a0 \/ \u5857\u308a\uff09\u30fb\u5857\u308a\u3064\u3076\u3057\u30fb\u30b9\u30bf\u30f3\u30d7\u306e <strong>10 \u7a2e\u985e\u306e\u63cf\u753b\u30c4\u30fc\u30eb<\/strong><\/li>\n<li>1 \u30b9\u30c8\u30ed\u30fc\u30af = 1 \u30a2\u30f3\u30c9\u30a5\u5358\u4f4d\u306e Undo\uff08\u6700\u5927 100 \u30b9\u30c6\u30c3\u30d7\uff09<\/li>\n<li>\u30bf\u30a4\u30eb\u30d6\u30ed\u30c3\u30af\u306e\u30b3\u30d4\u30fc &amp; \u30da\u30fc\u30b9\u30c8<\/li>\n<li>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30ab\u30e9\u30fc \/ \u30d5\u30eb\u30ab\u30e9\u30fc \/ \u900f\u904e PNG \u306e\u30a4\u30f3\u30dd\u30fc\u30c8\uff083 \u7a2e\u985e\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u6226\u7565\uff09<\/li>\n<li>YY-CHR \u4e92\u63db\u306e <code>.pal<\/code> \/ <code>.dat<\/code> \u30d1\u30ec\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u66f8\u304d<\/li>\n<li>macOS \u306f\u30cd\u30a4\u30c6\u30a3\u30d6\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u3001\u65e5\u672c\u8a9e \/ \u82f1\u8a9e\u306e UI \u5207\u308a\u66ff\u3048<\/li>\n<\/ul>\n<p>YY-CHR \u306e\u57fa\u672c\u6a5f\u80fd\u306f\u62bc\u3055\u3048\u3064\u3064\u3001\u63cf\u753b\u5468\u308a\u3068\u753b\u50cf\u306e\u53d6\u308a\u8fbc\u307f\u3092\u539a\u304f\u3057\u305f\u3001\u3068\u3044\u3046\u611f\u3058\u3067\u3059\u306d\u3002<\/p>\n<h4>\u6280\u8853\u30b9\u30bf\u30c3\u30af<\/h4>\n<p>\u8a00\u8a9e\u306f Rust\uff08edition 2024\uff09\u3001GUI \u306f <strong>egui \/ eframe<\/strong> \u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><code>Cargo.toml<\/code> \u306e\u4f9d\u5b58\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"ini\">[package]\nname = \"R-CHR\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[dependencies]\neframe = \"0.31\"\negui = \"0.31\"\negui_extras = { version = \"0.31\", features = [\"svg\"] }\nrfd = \"0.15\"\nzip = { version = \"2\", default-features = false, features = [\"deflate\"] }\nimage = { version = \"0.25\", default-features = false, features = [\"png\", \"bmp\"] }\npng = \"0.17\"\n\n[target.'cfg(target_os = \"macos\")'.dependencies]\nmuda = \"0.15\"\nobjc2-app-kit    = { version = \"0.2\", default-features = false, features = [\"NSAlert\", \"NSAppearance\", \"NSApplication\"] }\nobjc2-foundation = { version = \"0.2\", default-features = false, features = [\"NSThread\"] }<\/pre>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<thead>\n<tr>\n<th>\u30af\u30ec\u30fc\u30c8<\/th>\n<th>\u7528\u9014<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>eframe<\/code> \/ <code>egui<\/code><\/td>\n<td>\u30cd\u30a4\u30c6\u30a3\u30d6\u30a6\u30a3\u30f3\u30c9\u30a6\u3068\u30a4\u30d9\u30f3\u30c8\u30eb\u30fc\u30d7\u3001\u5373\u6642\u30e2\u30fc\u30c9 GUI<\/td>\n<\/tr>\n<tr>\n<td><code>egui_extras<\/code><\/td>\n<td>SVG \u30a2\u30a4\u30b3\u30f3\u306e\u8aad\u307f\u8fbc\u307f\uff08<code>svg<\/code> feature\uff09<\/td>\n<\/tr>\n<tr>\n<td><code>rfd<\/code><\/td>\n<td>OS \u30cd\u30a4\u30c6\u30a3\u30d6\u306e\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0\uff08\u958b\u304f \/ \u4fdd\u5b58\uff09<\/td>\n<\/tr>\n<tr>\n<td><code>zip<\/code><\/td>\n<td>ZIP \u5185\u306e <code>.nes<\/code> \u3092\u53d6\u308a\u51fa\u3059<\/td>\n<\/tr>\n<tr>\n<td><code>image<\/code><\/td>\n<td>PNG \/ BMP \u3092 RGBA \u306b\u5c55\u958b\u3059\u308b\u3002\u30a2\u30a4\u30b3\u30f3\u8aad\u307f\u8fbc\u307f\u306b\u3082\u4f7f\u7528<\/td>\n<\/tr>\n<tr>\n<td><code>png<\/code><\/td>\n<td>PNG \u306e PLTE \/ tRNS \u30c1\u30e3\u30f3\u30af\u306a\u3069\u4f4e\u30ec\u30d9\u30eb\u60c5\u5831\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b<\/td>\n<\/tr>\n<tr>\n<td><code>muda<\/code><\/td>\n<td>macOS \u306e\u30cd\u30a4\u30c6\u30a3\u30d6 NSMenu \u69cb\u7bc9\uff08macOS \u306e\u307f\uff09<\/td>\n<\/tr>\n<tr>\n<td><code>objc2-app-kit<\/code> \/ <code>objc2-foundation<\/code><\/td>\n<td>NSAppearance\uff08\u30c0\u30fc\u30af\u30e2\u30fc\u30c9\uff09\u3084 NSAlert \u306e\u547c\u3073\u51fa\u3057\uff08macOS \u306e\u307f\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>\u306a\u305c egui \u306a\u306e\u304b<\/h5>\n<p>Rust \u306e GUI \u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3044\u304f\u3064\u304b\u9078\u629e\u80a2\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u4eca\u56de\u306f egui \u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u7406\u7531\u306f\u30b7\u30f3\u30d7\u30eb\u3067\u3001<strong>\u5373\u6642\u30e2\u30fc\u30c9\uff08immediate mode\uff09GUI<\/strong> \u306a\u306e\u3067\u3001\u30c9\u30c3\u30c8\u30a8\u30c7\u30a3\u30bf\u306e\u3088\u3046\u306a\u300c\u6bce\u30d5\u30ec\u30fc\u30e0\u72b6\u614b\u304b\u3089\u7d75\u3092\u63cf\u304d\u76f4\u3059\u300d\u30bf\u30a4\u30d7\u306e\u30a2\u30d7\u30ea\u3068\u76f8\u6027\u304c\u3068\u3066\u3082\u826f\u3044\u304b\u3089\u3067\u3059\u3002\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u30c4\u30ea\u30fc\u3092\u4fdd\u6301\u3057\u3066\u5dee\u5206\u66f4\u65b0\u3059\u308b\u3001\u307f\u305f\u3044\u306a\u3053\u3068\u3092\u8003\u3048\u306a\u304f\u3066\u826f\u3044\u3002<code>update()<\/code> \u306e\u4e2d\u3067\u300c\u4eca\u306e\u72b6\u614b\u300d\u3092\u305d\u306e\u307e\u307e\u63cf\u3051\u3070\u3001\u305d\u308c\u304c\u753b\u9762\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u3042\u3068\u306f\u5358\u4e00\u30d0\u30a4\u30ca\u30ea\u3067 Windows \/ macOS \/ Linux \u306b\u914d\u308c\u308b\u3068\u3044\u3046\u70b9\u3082\u5927\u304d\u3044\u3067\u3059\u306d\u3002\u3053\u3053\u306f\u5f8c\u306e\u56de\u3067 GitHub Actions \u306e\u30d3\u30eb\u30c9\u3068\u5408\u308f\u305b\u3066\u89e6\u308c\u307e\u3059\u3002<\/p>\n<p>\u3061\u306a\u307f\u306b\u3001macOS \u306e\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u3060\u3051\u306f egui \u306e\u30e1\u30cb\u30e5\u30fc\u3067\u306f\u306a\u304f\u30cd\u30a4\u30c6\u30a3\u30d6 NSMenu \u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8fba\u308a\u306e\u300cegui \u3067\u8db3\u308a\u306a\u3044\u3068\u3053\u308d\u3092\u3069\u3046\u57cb\u3081\u305f\u304b\u300d\u306f\u6700\u7d42\u56de\u3067\u3002<\/p>\n<h4>\u5168\u4f53\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/h4>\n<p>\u69cb\u9020\u306f\u3053\u3093\u306a\u5f62\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\">\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  eframe\uff08\u30cd\u30a4\u30c6\u30a3\u30d6\u30a6\u30a3\u30f3\u30c9\u30a6\u30fbOpenGL \/ Metal\uff09           \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\n\u2502  \u2502  egui\uff08\u5373\u6642\u30e2\u30fc\u30c9 GUI \u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\uff09               \u2502  \u2502\n\u2502  \u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502  \u2502\n\u2502  \u2502  \u2502  editor::app::RChrApp\uff08\u30a2\u30d7\u30ea\u72b6\u614b\uff09          \u2502  \u2502  \u2502\n\u2502  \u2502  \u2502    update() \u2500 \u6bce\u30d5\u30ec\u30fc\u30e0\u547c\u3070\u308c\u308b UI \u69cb\u7bc9     \u2502  \u2502  \u2502\n\u2502  \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502  \u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n         \u2502                    \u2502\n    io \u30e2\u30b8\u30e5\u30fc\u30eb          model \u30e2\u30b8\u30e5\u30fc\u30eb\n    \u251c\u2500\u2500 chr.rs              \u2514\u2500\u2500 palette.rs\n    \u251c\u2500\u2500 nes.rs\n    \u2514\u2500\u2500 png.rs\n\n[macOS \u306e\u307f]\nnative_menu.rs \u2500\u2500\u2500\u2500 muda\uff08NSMenu\uff09\n                \u2514\u2500\u2500 objc2-app-kit\uff08NSAppearance\uff09<\/pre>\n<p>\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u5927\u304d\u304f 3 \u5c64\u306b\u5206\u304b\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<thead>\n<tr>\n<th>\u5c64<\/th>\n<th>\u8cac\u52d9<\/th>\n<th>\u4f9d\u5b58\u5148<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>model<\/code><\/td>\n<td>NES \u30d1\u30ec\u30c3\u30c8\u306e\u30c7\u30fc\u30bf\u8868\u73fe\uff08<code>MasterPalette<\/code> \/ <code>DatPalette<\/code>\uff09<\/td>\n<td>\u306a\u3057<\/td>\n<\/tr>\n<tr>\n<td><code>io<\/code><\/td>\n<td>CHR \u306e\u30c7\u30b3\u30fc\u30c9 \/ \u30a8\u30f3\u30b3\u30fc\u30c9\u3001iNES \u30d1\u30fc\u30b9\u3001PNG \u5909\u63db<\/td>\n<td><code>model<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>editor<\/code><\/td>\n<td>egui \u306e UI \u3068\u3001\u30a2\u30d7\u30ea\u72b6\u614b <code>RChrApp<\/code><\/td>\n<td><code>io<\/code>, <code>model<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4f9d\u5b58\u306e\u65b9\u5411\u306f\u5e38\u306b <code>editor \u2192 io \u2192 model<\/code> \u306e\u4e00\u65b9\u901a\u884c\u3067\u3001\u30e2\u30c7\u30eb\u5c64\u306f egui \u306b\u3082\u4ed6\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u3082\u4f9d\u5b58\u3057\u307e\u305b\u3093\u3002CHR \u306e 2BPP \u5909\u63db\u3084 PNG \u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3068\u3044\u3063\u305f\u300c\u7d14\u7c8b\u306a\u30c7\u30fc\u30bf\u51e6\u7406\u300d\u304c UI \u304b\u3089\u5207\u308a\u96e2\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u3053\u306e\u5f8c\u306e\u8a18\u4e8b\u3067\u3082\u305d\u306e\u9806\u756a\u3067\u89e3\u8aac\u3057\u3066\u3044\u3051\u308b\u3068\u3044\u3046\u5bf8\u6cd5\u3067\u3059\u3002<\/p>\n<h5>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210<\/h5>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\">src\/\n  main.rs              \u2014 \u30a8\u30f3\u30c8\u30ea\u30dd\u30a4\u30f3\u30c8 &amp; \u30a6\u30a3\u30f3\u30c9\u30a6\u8a2d\u5b9a\n  native_menu.rs       \u2014 macOS \u30cd\u30a4\u30c6\u30a3\u30d6\u30e1\u30cb\u30e5\u30fc\uff08muda\uff09\n  editor\/\n    app.rs             \u2014 \u30a2\u30d7\u30ea\u72b6\u614b &amp; \u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\uff08eframe::App\uff09\n    bank_view.rs       \u2014 \u30d0\u30f3\u30af\u30d3\u30e5\u30fc\uff08CHR \u5168\u4f53\u8868\u793a &amp; \u30bf\u30a4\u30eb\u9078\u629e\uff09\n    clipboard.rs       \u2014 \u30bf\u30a4\u30eb\u306e\u30b3\u30d4\u30fc &amp; \u30da\u30fc\u30b9\u30c8\n    dot_editor.rs      \u2014 \u30c9\u30c3\u30c8\u30a8\u30c7\u30a3\u30bf &amp; 10 \u7a2e\u985e\u306e\u63cf\u753b\u30c4\u30fc\u30eb\n    file_ops.rs        \u2014 \u958b\u304f \/ \u4fdd\u5b58 \/ \u65b0\u898f\u4f5c\u6210\n    i18n.rs            \u2014 \u65e5\u672c\u8a9e \/ \u82f1\u8a9e\u306e UI \u6587\u5b57\u5217\n    info_panel.rs      \u2014 \u53f3\u30d1\u30cd\u30eb\uff08\u30d1\u30ec\u30c3\u30c8\u30fb\u63cf\u753b\u8272\u30fb\u60c5\u5831\u8868\u793a\uff09\n    keyboard.rs        \u2014 \u30ad\u30fc\u30dc\u30fc\u30c9\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\n    png_import.rs      \u2014 PNG \u30a4\u30f3\u30dd\u30fc\u30c8\u30c0\u30a4\u30a2\u30ed\u30b0\n    setup.rs           \u2014 \u30d5\u30a9\u30f3\u30c8\u8a2d\u5b9a\n    theme.rs           \u2014 \u8272\u30fb\u30d5\u30a9\u30f3\u30c8\u30fb\u30b5\u30a4\u30ba\u5b9a\u6570\n    mac\/\n      menu_bar.rs      \u2014 egui \u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\uff08macOS \u4ee5\u5916\uff09\n      menu_events.rs   \u2014 macOS \u30cd\u30a4\u30c6\u30a3\u30d6\u30e1\u30cb\u30e5\u30fc\u306e\u30a4\u30d9\u30f3\u30c8\u51e6\u7406\n  io\/\n    chr.rs             \u2014 CHR \u306e\u30c7\u30b3\u30fc\u30c9 \/ \u30a8\u30f3\u30b3\u30fc\u30c9 \/ \u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\n    nes.rs             \u2014 iNES \u30d1\u30fc\u30b5 \/ RomData \u578b\n    png.rs             \u2014 PNG \/ BMP \u30a4\u30f3\u30dd\u30fc\u30c8\uff08\u30de\u30c3\u30d4\u30f3\u30b0 &amp; CHR \u66f8\u304d\u8fbc\u307f\uff09\n  model\/\n    palette.rs         \u2014 NES \u30d1\u30ec\u30c3\u30c8\uff08MasterPalette \/ DatPalette\uff09\n\nassets\/\n  rchr.pal             \u2014 \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30de\u30b9\u30bf\u30fc\u30d1\u30ec\u30c3\u30c8\uff08YY-CHR \u4e92\u63db .pal\uff09\n  rchr.dat             \u2014 \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d1\u30ec\u30c3\u30c8\u30bb\u30c3\u30c8\uff08YY-CHR \u4e92\u63db .dat\uff09\n  rchr.bin             \u2014 \u8d77\u52d5\u6642\u306b\u8868\u793a\u3059\u308b CHR \u30c7\u30fc\u30bf\uff08R-CHR \u30ed\u30b4\uff09\n  nes.pal              \u2014 NES \u6a19\u6e96 64 \u8272\u30d1\u30ec\u30c3\u30c8\uff08\u30ea\u30bb\u30c3\u30c8\u7528\uff09\n  icons\/               \u2014 \u30c4\u30fc\u30eb\u30d0\u30fc\u7528 SVG \u30a2\u30a4\u30b3\u30f3\n  fonts\/               \u2014 Noto Sans JP\uff08\u65e5\u672c\u8a9e\u8868\u793a\u7528\uff09<\/pre>\n<p><code>editor\/<\/code> \u914d\u4e0b\u306f\u300c<code>app.rs<\/code> \u3092\u8584\u3044\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30bf\u30fc\u306b\u4fdd\u3061\u3001\u6a5f\u80fd\u3054\u3068\u306b <code>impl RChrApp<\/code> \u30d6\u30ed\u30c3\u30af\u3092\u5225\u30d5\u30a1\u30a4\u30eb\u3078\u5206\u5272\u3059\u308b\u300d\u3068\u3044\u3046\u65b9\u91dd\u3067\u66f8\u3044\u3066\u3044\u307e\u3059\u3002Rust \u306f\u540c\u3058\u69cb\u9020\u4f53\u306e <code>impl<\/code> \u3092\u8907\u6570\u30d5\u30a1\u30a4\u30eb\u306b\u5206\u3051\u3066\u66f8\u3051\u308b\u306e\u3067\u3001<code>app.rs<\/code> \u306b\u306f\u69cb\u9020\u4f53\u5b9a\u7fa9\u3068 <code>update()<\/code> \u306e\u9aa8\u683c\u3060\u3051\u3092\u7f6e\u304d\u3001\u30d0\u30f3\u30af\u30d3\u30e5\u30fc\u306f <code>bank_view.rs<\/code>\u3001\u30c9\u30c3\u30c8\u30a8\u30c7\u30a3\u30bf\u306f <code>dot_editor.rs<\/code>\u3001\u3068\u3044\u3063\u305f\u5177\u5408\u306b\u8cac\u52d9\u3054\u3068\u306b\u5206\u3051\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u6700\u521d\u306f 1 \u30d5\u30a1\u30a4\u30eb\u306b\u30d9\u30bf\u66f8\u304d\u3060\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u63cf\u753b\u30c4\u30fc\u30eb\u3092\u5897\u3084\u3057\u3066\u3044\u304f\u3046\u3061\u306b 1,700 \u884c\u3092\u8d85\u3048\u3066\u304d\u3066\u3001\u3044\u304b\u3041\u30fc\u3093\u3001\u3068\u306a\u3063\u3066\u5206\u5272\u3057\u305f\u7d4c\u7def\u304c\u3042\u308a\u307e\u3059\u3002\u3002<\/p>\n<h5>\u753b\u9762\u30ec\u30a4\u30a2\u30a6\u30c8<\/h5>\n<p>\u753b\u9762\u306f\u5de6\u304b\u3089\u9806\u306b 3 \u3064\u306e\u30d1\u30cd\u30eb\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<thead>\n<tr>\n<th>\u30d1\u30cd\u30eb<\/th>\n<th>\u4f4d\u7f6e<\/th>\n<th>\u5e45<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u30d0\u30f3\u30af\u30d3\u30e5\u30fc<\/td>\n<td>\u5de6<\/td>\n<td>\u6700\u4f4e 410px\u3002\u30a6\u30a3\u30f3\u30c9\u30a6\u5e45\u306b\u5408\u308f\u305b\u3066\u6574\u6570\u500d\u3067\u62e1\u5927<\/td>\n<\/tr>\n<tr>\n<td>\u30c9\u30c3\u30c8\u30a8\u30c7\u30a3\u30bf<\/td>\n<td>\u4e2d\u592e<\/td>\n<td>\u30ea\u30b5\u30a4\u30ba\u53ef\u80fd\u3002\u6700\u4f4e 180px<\/td>\n<\/tr>\n<tr>\n<td>\u60c5\u5831\u30d1\u30cd\u30eb<\/td>\n<td>\u53f3<\/td>\n<td>245px \u56fa\u5b9a<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u30d0\u30f3\u30af\u30d3\u30e5\u30fc\u3067\u7de8\u96c6\u3057\u305f\u3044\u30bf\u30a4\u30eb\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u30c9\u30c3\u30c8\u30a8\u30c7\u30a3\u30bf\u306b\u305d\u306e\u30d6\u30ed\u30c3\u30af\u304c\u62e1\u5927\u8868\u793a\u3055\u308c\u3001\u53f3\u306e\u60c5\u5831\u30d1\u30cd\u30eb\u3067\u30d1\u30ec\u30c3\u30c8\u3084\u63cf\u753b\u8272\u3092\u9078\u3076\u3001\u3068\u3044\u3046\u6d41\u308c\u3067\u3059\u3002\u3053\u306e\u8fba\u308a\u306e egui \u3067\u306e\u7d44\u307f\u65b9\u306f\u7b2c 3 \u56de\u3067\u3002<\/p>\n<h4>\u30d3\u30eb\u30c9\u3068\u8d77\u52d5<\/h4>\n<p>Rust 1.80 \u4ee5\u964d\u304c\u3042\u308c\u3070\u30d3\u30eb\u30c9\u3067\u304d\u307e\u3059\u3002\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306f Cargo \u304c\u52dd\u624b\u306b\u53d6\u3063\u3066\u304d\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">git clone https:\/\/github.com\/retrodig\/r-chr.git\ncd r-chr\ncargo run --release<\/pre>\n<p>\u8d77\u52d5\u3059\u308b\u3068 <code>assets\/rchr.bin<\/code> \u306b\u57cb\u3081\u8fbc\u3093\u3067\u3042\u308b R-CHR \u30ed\u30b4\u5165\u308a\u306e CHR \u30c7\u30fc\u30bf\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30a6\u30a3\u30f3\u30c9\u30a6\u306b <code>.nes<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0 &amp; \u30c9\u30ed\u30c3\u30d7\u3059\u308c\u3070\u3001\u305d\u306e\u307e\u307e\u4e2d\u8eab\u306e CHR-ROM \u304c\u958b\u304d\u307e\u3059\u3002<\/p>\n<p>\u30d3\u30eb\u30c9\u6e08\u307f\u306e\u30d0\u30a4\u30ca\u30ea\u306f GitHub \u306e Releases \u306b Windows \/ macOS \/ Linux \u5411\u3051\u3092\u7f6e\u3044\u3066\u3042\u308a\u307e\u3059\u306e\u3067\u3001Rust \u74b0\u5883\u304c\u7121\u3044\u65b9\u306f\u305d\u3061\u3089\u304b\u3089\u3069\u3046\u305e\u3002<\/p>\n<h4>\u307e\u3068\u3081<\/h4>\n<ul>\n<li>R-CHR \u306f Rust + egui \u3067\u4f5c\u3063\u305f NES \u7528 CHR \u30bf\u30a4\u30eb\u30a8\u30c7\u30a3\u30bf<\/li>\n<li>YY-CHR \u306e\u57fa\u672c\u6a5f\u80fd\u306b\u52a0\u3048\u3066\u300110 \u7a2e\u985e\u306e\u63cf\u753b\u30c4\u30fc\u30eb\u3001PNG \u30a4\u30f3\u30dd\u30fc\u30c8\u3001\u9023\u7d9a\u30b9\u30af\u30ed\u30fc\u30eb\u8868\u793a\u306a\u3069\u3092\u642d\u8f09<\/li>\n<li>\u69cb\u6210\u306f <code>editor \u2192 io \u2192 model<\/code> \u306e 3 \u5c64\u3067\u3001\u30c7\u30fc\u30bf\u51e6\u7406\u306f UI \u304b\u3089\u5206\u96e2<\/li>\n<li>\u6a5f\u80fd\u3054\u3068\u306b <code>impl RChrApp<\/code> \u3092\u30d5\u30a1\u30a4\u30eb\u5206\u5272\u3057\u3001<code>app.rs<\/code> \u306f\u8584\u304f\u4fdd\u3064<\/li>\n<\/ul>\n<p>\u6b21\u56de\u306f\u3001\u305d\u3082\u305d\u3082\u30d5\u30a1\u30df\u30b3\u30f3\u306e\u7d75\u304c\u3069\u3046\u3044\u3046\u30d0\u30a4\u30c8\u5217\u3067\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u306e\u304b\u3001\u3068\u3044\u3046 <strong>CHR \u306e 2BPP \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068 iNES \u30d8\u30c3\u30c0\u3001\u30d1\u30ec\u30c3\u30c8<\/strong>\u306e\u8a71\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u3053\u304c\u5206\u304b\u308b\u3068\u3001\u3042\u3068\u306e\u63cf\u753b\u30c4\u30fc\u30eb\u3084 PNG \u30a4\u30f3\u30dd\u30fc\u30c8\u306e\u5b9f\u88c5\u304c\u3059\u3093\u306a\u308a\u8aad\u3081\u308b\u3088\u3046\u306b\u306a\u308b\u306e\u3067\u3001\u307e\u305a\u306f\u30c7\u30fc\u30bf\u306e\u8a71\u304b\u3089\u3002<\/p>\n<p>\u3067\u306f\u3067\u306f\u3041\u3002<\/p>\n<p>\u307e\u305f\u307e\u305f\u3041\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3069\u3082\u3067\u3059\u3002 \u3061\u3087\u3063\u3068\u524d\u306e\u4e8b\u306b\u306a\u308a\u307e\u3059\u304c\u3001Rust \u3067\u30d5\u30a1\u30df\u30b3\u30f3\uff08NES\uff09\u7528\u306e\u30b9\u30d7\u30e9\u30a4\u30c8\uff08CHR\uff09\u30a8\u30c7\u30a3\u30bf\u3092\u4f5c\u3063\u305f\u8a71\u3067\u3082\u3064\u3089\u3064\u3089\u3068\u8a18\u4e8b\u3092\u66f8\u3044\u3066\u3044\u3053\u3046\u304b\u3068\u601d\u3044\u307e\u3059\u3002 \u540d\u524d\u306f R-CHR\u3002Rust \u3067\u66f8\u3044\u305f CHR \u30a8\u30c7\u30a3\u30bf\u306a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":12803,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[299],"tags":[308,169,381,39,389,388,78,118],"class_list":["post-12781","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rust","tag-gui","tag-mac","tag-nes","tag-39","tag-389","tag-388","tag-78","tag-118"],"_links":{"self":[{"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/posts\/12781","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12781"}],"version-history":[{"count":3,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/posts\/12781\/revisions"}],"predecessor-version":[{"id":12804,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/posts\/12781\/revisions\/12804"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/media\/12803"}],"wp:attachment":[{"href":"https:\/\/www.webcyou.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}