Как стать автором
Обновить

Комментарии 4

Спасибо, очень интересная статья, хотя подробностей и маловато.
Не знал, что Раст и на nes умеет
Может и на другие консоли?
Раст, с разными степенями геморроя, можно собрать везде, где есть LLVM. Меня вот это впечатлило больше: seri.tools/blog/compiling-rust-for-legacy-windows
Судя по статье, Rust здесь используется как странный ассемблер для 6502. Например, вот этот кусок кода:
b.inst(Lda(Immediate), 1);
b.inst(Sta(Absolute), CONTROLLER_REG); // set controller strobe
b.inst(Sta(ZeroPage), 255); // store a 1 at 255 - used to check when all bits are read
b.inst(Lsr(Accumulator), ()); // clear accumulator
b.inst(Sta(Absolute), CONTROLLER_REG); // clear controller strobe
на самом деле просто иное представление такого кода на ассемблере 6502:
LDA #1
STA CONTROLLER_REG
STA $FF
LSR A
STA CONTROLLER_REG
То есть, обычный код на Rust под 6502 вы таким образом не соберёте. Технически, конечно, можно обучить LLVM собирать код под 6502 (что используется в NES), но такой код вряд ли будет быстрым. Как минимум из-за того, что в 6502 нет инструкций для быстрого доступа к значениям на стеке, а локальные переменные и аргументы функций должны размещаться в стеке, если мы хотим сохранить реентерабельность функций.

Интересно, а реально ли сделать емулятор NES внутри NES.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории