38 lines
1 KiB
Nim
38 lines
1 KiB
Nim
# code for loading roms
|
|
import def
|
|
|
|
const FONT: array[FONT_SIZE, uint8] = [
|
|
0xF0, 0x90, 0x90, 0x90, 0xF0, # 0
|
|
0x20, 0x60, 0x20, 0x20, 0x70, # 1
|
|
0xF0, 0x10, 0xF0, 0x80, 0xF0, # 2
|
|
0xF0, 0x10, 0xF0, 0x10, 0xF0, # 3
|
|
0x90, 0x90, 0xF0, 0x10, 0x10, # 4
|
|
0xF0, 0x80, 0xF0, 0x10, 0xF0, # 5
|
|
0xF0, 0x80, 0xF0, 0x90, 0xF0, # 6
|
|
0xF0, 0x10, 0x20, 0x40, 0x40, # 7
|
|
0xF0, 0x90, 0xF0, 0x90, 0xF0, # 8
|
|
0xF0, 0x90, 0xF0, 0x10, 0xF0, # 9
|
|
0xF0, 0x90, 0xF0, 0x90, 0x90, # A
|
|
0xE0, 0x90, 0xE0, 0x90, 0xE0, # B
|
|
0xF0, 0x80, 0x80, 0x80, 0xF0, # C
|
|
0xE0, 0x90, 0x90, 0x90, 0xE0, # D
|
|
0xF0, 0x80, 0xF0, 0x80, 0xF0, # E
|
|
0xF0, 0x80, 0xF0, 0x80, 0x80, # F
|
|
]
|
|
|
|
proc load*(memory: var openArray[uint8], path: string): bool =
|
|
# loads the rom and font data into memory
|
|
# returns true on success
|
|
let f = open(path)
|
|
defer: f.close()
|
|
|
|
let filesize = f.getFileSize
|
|
if filesize > MEM_SIZE - ROM_OFFSET:
|
|
return false
|
|
|
|
discard f.readBytes(memory, ROM_OFFSET, MEM_SIZE - ROM_OFFSET)
|
|
|
|
for i in 0 .. FONT_SIZE - 1:
|
|
memory[i] = FONT[i]
|
|
|
|
return true
|