Hello everyone, I am trying to work on emulating 6502 processor (very early stage, basically just started) and I am following tutorial in C++. I know Nim is not fully object-oriented, so how could I solve following please?
I have a problem with recursive dependency, specifically where Olc6502 object in one file has ref of Bus inside and Bus object in another file has ref to Olc6502 obj:
olc6502.nim file
import bus
type
Olc6502* = object of RootObj
bus : ref Bus ###############################
proc read*(cpu: Olc6502, x: uint16) : uint8 =
result = read(cpu.bus, x, false)
bus.nim file
import algorithm
import olc6502
type
Ram = array[64*1024, uint8]
Bus* = object of RootObj
# Devieces on bus
cpu* : Olc6502 ##############################
ram* : Ram
# Bus read & write
proc newBus* : ref Bus =
result.new()
result.ram.fill(0x00'u8)
proc write*(bus: var Bus, address: uint16, data: uint8) : void =
if address in 0x0000'u16 .. 0xFFFF'u16:
bus.ram[address] = data
proc read*(bus: ref Bus, address: uint16, bReadOnly : bool = false) : uint8 =
if address in 0x0000'u16 .. 0xFFFF'u16:
result = bus.ram[address]
result = 0x00'u8
Don't mind mistakes in my code, I just want to get rid of that recursive dependency for now. If there is a way to create something like header files in Nim (however I didn't find anything about it) maybe that would help. When I write it as a single file it gives no error, but I want to keep it separated preferably. Also I am trying to use refs instead of pointers, but I don't know if it's completely avoidable. https://github.com/blmvxerHax/randip/blob/master/snap/src/tools/randip_import.nim
This was my solution when I ran into the same problem, A "header" of sorts