Been changing the code all the returns have thisbank or otherbank and all the gosubs are going to proper banks. Bank 16 still reports 0 bytes available and I'm still getting a black screen, even before any calls to any functions I have made are done. What I can do is start a new basic file and start transferring code little by little over to the new source and compiling it until things start going wrong to try to determine what's going on.
When I tried to call a user function last night, I was getting a black screen when trying to do it with bankswitching. I don't know if the reason's the same in your case, but in my case it was because I was trying to let batari Basic call the user routine but it was located in another bank and I hadn't yet figured out that I needed to call the function manually with inline assembly so I could switch banks. Thus, it was gosubbing to the correct ROM address for the user function, but not in the correct bank, causing the program to crash. You might be running into a similar type of issue-- trying to goto or gosub to a routine and you're ending up at the correct address but in the wrong bank.