Source code for src.chip8.machine
import sys
import time
from typing import List
from src.chip8.display import Display
from src.chip8.keyboard import Keyboard
from src.chip8.cpu import CPU
from src.chip8.conf import CLOCK_SPEED, TIMER_SPEED
[docs]def load_file(filepath: str) -> List[int]:
data = []
with open(filepath, "rb") as f:
file_bytes = f.read()
for i in range(len(file_bytes)):
data.append(int(file_bytes[i]))
return data
[docs]class Machine:
def __init__(self):
self.display = Display()
self.keyboard = Keyboard()
self.cpu = CPU()
[docs] def load_rom(self, rom_file: str):
data = load_file(rom_file)
self.cpu.load_rom(data)
[docs] def run(self):
cycles = 0
while True:
self.cpu.cycle()
self.keyboard.poll_event(self.cpu.keys_pressed_buf)
if self.cpu.draw_flag:
self.display.render(self.cpu.screen_buf)
self.cpu.draw_flag = False
cycles += 1
time.sleep(1 / CLOCK_SPEED)
if cycles >= CLOCK_SPEED / TIMER_SPEED:
cycles = 0
self.cpu.ticker()
[docs] def exit(self):
self.display.quit()
sys.exit()