1
0
Fork 0
mirror of https://github.com/imjasonh/nescript synced 2026-07-12 18:49:45 +00:00

IR codegen: Player 2 controller support

ReadInput now takes an explicit player index (0 = P1, 1 = P2). The IR
lowering for ButtonRead threads the player through, and the IR codegen
selects the correct zero-page input byte ($01 for P1, $08 for P2).

https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
This commit is contained in:
Claude 2026-04-12 10:40:42 +00:00
parent adf50aaa7f
commit 8a6441071e
No known key found for this signature in database
5 changed files with 17 additions and 10 deletions

View file

@ -544,11 +544,15 @@ impl LoweringContext {
self.emit(IrOp::Call(Some(t), name.clone(), arg_temps));
t
}
Expr::ButtonRead(_, button, _) => {
Expr::ButtonRead(player, button, _) => {
// Button reads: read the input byte, mask with the button bit.
// (Player selection is ignored here; IR codegen handles it.)
// Player 1 reads from $01, player 2 reads from $08.
let player_index = match player {
Some(Player::P2) => 1u8,
_ => 0u8,
};
let input = self.fresh_temp();
self.emit(IrOp::ReadInput(input));
self.emit(IrOp::ReadInput(input, player_index));
let mask = button_mask(button);
let mask_temp = self.fresh_temp();
self.emit(IrOp::LoadImm(mask_temp, mask));