칩 8 에뮬레이터를 만들었지 만 드로잉 할 때 충돌을 감지하는 데 문제가 발생했습니다. Chip8은 개별 픽셀을 화면으로 XOR하고 픽셀이 꺼져 있으면 플래그를 설정하여 화면을 그립니다.chip8 에뮬레이터에서의 충돌 감지
_DXYN: function(X, Y, N) {
console.log("_DXYN");
for (var i = 0; i < N; i++) {
for (var j = 0; j < 8; j++) {
var bitBefore = graphics[(i + cpu.registers.V[Y]) * 64 + j + cpu.registers.V[X]];
var bitAfter = bitBefore^cpu.getBits(memory[cpu.registers.I + i])[j];
graphics[(i + cpu.registers.V[Y]) * 64 + j + cpu.registers.V[X]] = bitAfter;
if ((bitBefore != bitAfter) && bitBefore == 1)
cpu.registers.V[0xF] = 0x1;
else
cpu.registers.V[0xF] = 0x0;
}
}
}
graphics
는 INT의 1 차원 배열이며, 각 화면의 화소에 대응하여 다음과 같이 내 코드이다. 배열의 해당 정수가 1이면 픽셀이 켜지고 꺼지면 0입니다. cpu
객체는 레지스터뿐 아니라이 메서드를 포함하여 모든 메서드를 포함합니다. X
은 그리기 할 스프라이트의 x 좌표를 포함하는 레지스터의 opcode 매개 변수이고 Y
은 y 좌표가있는 레지스터의 opcode 매개 변수입니다. I
레지스터는 메모리에서 읽을 위치입니다.
getBits: function(opcode) {
var bits = [];
for (var i = 0; i < 8; i++) {
bits.push((opcode >> i) & 1)
}
return bits.reverse();
}
전체 코드가 여기 GitHub의에서 찾을 수 있습니다 : 이행을위한 chip8cpu.js에서 https://github.com/ichub/Chip8 봐 다음과 같이 cpu.getBits
기능입니다.
어떤 문제가 발생 했습니까? – HBP
충돌이 작동하지 않았습니다. 내가 브레이크 아웃 ROM을 다운로드하고 그것을 연주하고, 충돌에 대한 반응이 없었다. 다른 모든 것은 잘했지만 아무 것도 충돌하지 않았습니다. –