fadden / 6502bench

A workbench for developing 6502 code
https://6502bench.com/
Apache License 2.0
168 stars 32 forks source link

Allow mass import of symbols #86

Closed ssuukk closed 4 years ago

ssuukk commented 4 years ago

It seems that C64 config is missing a lot of symbols i.e. from zero page. If I could import them from CSV or whatever, that would be great!

fadden commented 4 years ago

The way to specify symbols is with ".sym65" files. They can be specified per-project or included with the SourceGen distribution. For example, the Apple II has several defined: https://github.com/fadden/6502bench/tree/master/SourceGen/RuntimeData/Apple

The C64 has relatively few definitions for the simple reason that I grew up with an Apple II rather than a C64. I don't feel that I know enough to get it right.

It's important to have all the symbols that matter, but sometimes having extra zero page symbols can be more distracting than helpful. Users can split the symbol lists into separate files and just include the ones they need, but if you do it too fine-grained you end up having to include 17 different files, which is annoying. It's hard to set the files up right if you know almost nothing about the system in question. Rearranging the contents of the files in the Runtime directory can break existing projects, so you really want to get it right the first time.

I was fine to create symbol files for NES and VCS because those systems aren't that complicated compared to the home computer systems. I need somebody with extensive C64 (and ideally C128 and maybe Pet) system experience to figure out the details for the Commodore systems.

The .sym65 format is straightforward, and has some additional information beyond what's in a simple symbol dump (see documentation), such as identification of address labels vs. numeric constants, and some fancy stuff for memory-mapped I/O and address mirroring. Not quite as simple as a .CSV import, but easier for humans to edit.

FWIW, a CSV to SYM65 converter would be pretty easy to do if that's a common way of sharing symbols.