randyrossi / bmc64

A bare metal Commodore 64 emulator for the Raspberry Pi with true 50hz/60hz smooth scrolling, low input latency and better audio/video sync.
GNU General Public License v3.0
490 stars 59 forks source link

system architecture documentation #279

Open nnako opened 3 weeks ago

nnako commented 3 weeks ago

Hi,

I was wondering if there exist any "diagrams" describing the technical architecture of BMC64 and its interfaces. There exist some standard diagramming means (like within UML and SysML) where a partial system can be described on a suitable level to promote understanding the architecture and interfaces. I would be interested in drawn descriptions of e.g.:

background for this request is the goal to lower the bar for contributors intending to add some functionality (like integration of RPi's Ethernet capabilities). The diagrams don't have to be conforming to existing standards but could even be hand-drawn sketches. As long as they correctly represent an aspect of the BMC64 system, anything would be helpful for building up technical understanding.

Thanks.

mcgurk commented 3 weeks ago

BMC64 is "bare metal" software, so there is no underlying operating system like linux or kernel. If I'm not totally wrong, all hardware interfacing is made through environment named Circle. https://github.com/rsta2/circle

Biggest current hold up for new hardware features might be fact that BMC64 uses quite old version of Circle. I can imagine that integrating more updated Circle to BMC64 would need guite a work, so that would propably be most important thing to do. Before that there is no possibility to add any new hardware dependant features (like Ethernet) to BMC64.

So with new features workflow goes like this:

  1. Add feature to Circle (if it is not there already). This work is purely done in Circle github.
  2. Update Circle with needed features to BMC64 (this is probably most hardest task)
  3. Add feature to BMC64

Edit: I'm not actually sure if Ethernet is already supported in Circle version that BMC64 uses. It might be supported (I didn't remember that earlier (<Pi4) Ethernet interface was behind USB-bus): https://github.com/smuehlst/circle-stdlib/tree/49fddf66e49f48c6368c477ed54e31c463100fff?tab=readme-ov-file https://github.com/rsta2/circle/tree/fe24b6bebd1532f2a0ee981af12eaf50cc9e97fb