Just an update, I’ve been working on an app to connect to the VB from the parallel port to the link port… right now it has 5 options… read memory (any memory location, including dumping ROMs and SRAM), write memory (again, any location, including SRAM), erase flash (waits for flash erased signal), write flash (self explanatory 😛 ), and execute instruction (I’ve been using this to execute the app by jumping to the reset vector, but could be used for seeing how the hardware reacts to an instruction, or jumping to some memory location in a retail ROM by hot-swapping). The whole VB side runs from WRAM, so this allows hot-swapping carts and of course to actually still work when the flash chips are erased.
About performance… I wrote a whole retail ROM in about 2 minutes, and most of my homebrew games in several seconds… since erasing the chips makes the flash all 0xFFFF, consecutive 0xFFFF’s are skipped, which GREATLY speeds things up. I also verified the flash w/ my Willem and there were no errors, but I’m still going to (re)add CRC32 checks.
So, my next thing to do is (re)add CRC32 checks, then probably block erase so if there’s a bad flash, I can just erase the single block instead of the whole chip… if I see errors are more common I’ll copy to memory first, CRC32 check, then write to flash, but I’d rather not if it’s pretty uncommon. After that I’ll probably get it so you can write small apps to WRAM and execute from there instead of having to flash every time, but of course there’s only 512kbit of WRAM (and you still need room for variables 😉 ), so it’s pretty limited. I’d like to add a debugger, especially one that is activated by a link interrupt that can be executed from a retail game, but I doubt I’ll get to that anytime soon 😛 .
I’ve also made a link loader in ASM that only takes up 48 bytes… of course 16 bytes for the reset vector, then 32 more bytes in one of the unused vectors. If I can chop out another 2 bytes somewhere, I can add a longer jump to get the 32 bytes in the game ID section… but then of course you still need another 16 bytes immediately after that for the original reset vector, or add another jump at the end (so the game will execute normally if there’s no app sent). I haven’t tested this, or even assembled it, but it looks like it should work 🙂 .
Anyone else have any specific things they’d like added? Of course I can’t guarantee they’ll be added, but if it’s doable, I can try 😉 .
You’ve pretty much included all I’ve thought of over the years.
Only thing I can think of is releasing your code so we can all make custom skins/OSs. 😛
LOL! Well you know I always release my code… well, I never keep any code private at least 😛 … I guess I don’t always actually get around to posting it out there without someone asking for it 😉 .
Not sure about skins/OS… feel free to do whatever you want for that… right now I’ve got no graphics on the VB side, just a red screen when the VB boots, and the PC side is a console app 😛 . If you want to make a GUI or a cool VB side app, feel free 😉 .