>для истинной многозадачности надо как минимум два окна памяти
Да и с одним окном жить можно. Например виртуализуя это окно для процесса, а при переключении задач копируя всю его память из банков в основное адресное пространство. Но разве ж это жизнь?..
>Но при этом будет ограничен размер кода на задачу.
Ну 16кб банки хватить должно на многое, и никто не мешает задаче свитчить банк самой.
>Про ограничение на размер стека даже молчу.
Тут, я думаю, драматизировать не надо, стека нужно скорее всего не так уж много - 6502 же как то жил.
>системные вызовы
Могут идти через RST или вообще напрямую в ПЗУху(которую делать всё равно придётся - не бейсик же оставлять?) а дальше, если вызов в код вне 0000-4000 танцевать с банками. Так же и с библиотеками.
>Или делать Forth-систему.
VM ,конечно, решение, но уж слишком радикальное. Без JIT будет слишком медленной, особенно при работе с памятью.