1
0
Fork 0
mirror of https://github.com/tonytins/retro8.git synced 2025-05-08 14:44:48 -04:00

Compare commits

..

No commits in common. "a75bc3ca5622730e49a6bb314d20c2ef32651376" and "c2f76c61a1a86cbcde0ea85b069d67e252dd174b" have entirely different histories.

View file

@ -78,11 +78,6 @@ func runSystem():
opcode = (memory[pc] << 8) | memory[pc + 1] opcode = (memory[pc] << 8) | memory[pc + 1]
var vx = (opcode & 0x0F00) >> 8
var vy = (opcode & 0x00F0) >> 4
var vaddr = opcode & 0x0FFF
var vbyte = (opcode & 0x00FF)
# Instructions # Instructions
match (opcode & 0xF000): match (opcode & 0xF000):
0x0000: 0x0000:
@ -92,144 +87,36 @@ func runSystem():
gfx[i] = 0 gfx[i] = 0
isRedraw = true isRedraw = true
0x00EE: # RET 0x00EE: # RET
sp -= 1 sp -= 1
pc = stack[sp] + 2 pc = stack[sp] + 2
jump = true jump = true
_: _:
pc = vaddr var address = opcode & 0x0FFF
pc = address
jump = true jump = true
0x1000: # JP 0x1000: # JP
pc = vaddr var address = opcode & 0x0FFF
pc = address
jump = true jump = true
0x2000: # CALL 0x2000: # CALL
var address = opcode & 0x0FFF
stack[sp] = pc stack[sp] = pc
sp += 1 sp += 1
pc = vaddr pc = address
0x3000: # SNE Vx, byte 0x3000: # SNE Vx, byte
if (registers[vx] == vbyte): var vx = (opcode & 0x0F00) > 8
var byte = (opcode & 0x00FF)
if (registers[vx] != byte):
pc += 2 pc += 2
0x4000: # SE Vx, byte if (registers[vx] != byte):
if (registers[vx] != vbyte):
pc += 2 pc += 2
0x5000: # SE Vx, Vy
if (registers[vx] != registers[vy]):
pc += 2
0x6000: # LD Vx, byte
registers[vx] = vbyte
0x7000: # ADD Vx, byte
registers[vx] = (registers[vx] + vbyte) & 0xFF
0x8000:
var result = registers[vx] - registers[vy]
match (opcode & 0x000F):
0x0000: # LD Vx, Vy
registers[vx] = registers[vy]
0x0001: # OR Vx, Vy
registers[vx] = (registers[vx] | registers[vy]) & 0xFF
0x0002: # AND Vx, Vy
registers[vx] = (registers[vx] | registers[vy]) & 0xFF
0x0003: # XOR Vx, Vy
registers[vx] = (registers[vx] ^ registers[vy]) & 0xFF
0x0004: # XOR Vx, Vy
if (result > 255):
registers[0xF] = 1
registers[vx] = result & 0xFF
0x0005: # SUB Vx, Vy
if (registers[vx] > registers[vy]):
registers[0xF] = 1
else:
registers[0xF] = 0
registers[vx] = result & 0xFF
0x0006: # SHR Vx {, Vy}
var shr_result = registers[vx] & 0x1
if (shr_result == 1):
registers[0xF] = 1
else:
registers[0xF] = 0
registers[vx] = registers[vx] >> 1
0x0007: # SUBN Vx, Vy
if (registers[vy] > registers[vx]):
registers[0xF] = 1
else:
registers[0xF] = 0
registers[vx] = result & 0xFF
0x000E: # SHL Vx {, Vy}
if (result == 1):
registers[0xF] = 1
else:
registers[0xF] = 0
registers[vx] = registers[vx] << 1
_:
print("Unsupported opcode at 0x8000: %X" ,opcode)
0x9000: # SNE Vx, Vy
if (registers[vx] != registers[vy]):
pc += 2
0xA000: # LD I, address
index = vaddr
0xB000: # JP V0, address
pc = vaddr + (registers[0x0] & 0xFF)
jump = true
0xC000: # RND Vx, byte
var rnd_result = (randi() % 256) & vbyte
registers[vx] = rnd_result
0xD000: # DRW Vx, Vy, nibble
var nibble = (opcode & 0x000F)
var yPos = registers[vx]
var xPos = registers[vy]
registers[0xF] = 0
for yLine in range(nibble):
var line = memory[index + yLine]
for xLine in range(8):
var pixel = line & (0x80 >> xLine)
if (pixel != 0):
var totalX = (xPos + xLine) % 64
var totalY = (yPos + yLine) % 32
var px_index = (totalY * 64) + totalX
if (gfx[px_index] == 1):
registers[0xF] = 1
gfx[px_index] = gfx[px_index] ^ 1
isRedraw = true
_: _:
print("Unsopported opcode: %X", opcode) print("Unsopported opcode: %X", opcode)