При загрузке программы через BLOAD PROGRAM.BAS она будет скомпилирована в памяти и все дальнейшее редактирование текста программы будут вызывать построчную инкрементальную компиляцию.
Также можно создать программу с нуля выполнив NEW и затем добавляя строки одну за другой - при этом каждая новая строка будет запускать инкрементальную компиляцию этой строки и связанные с этим действия (как например замену всех ссылок на эту строку, если адрес компиляции изменился).
Дальнейшее сохранение программы BSAVE PROGRAM.BAS сохранит только текстовую часть, проигнорировав откомпилированную. Для сохранения откомпилированной части надо будет сделать сохранение в перемещаемом EXE-формате: BSAVE PROGRAM.EXE
ShaOS предоставляет сервис по аллокации блоков памяти, привязанных к процессу (в данном случае SHABASIC) - блоки выделяются размерами кратными 256 байт. У нас будет 2 типа аллокаций - для строк текста программы и для откомпилированного "шитого" кода. На все эти аллокации будет указывать карта ссылок, где каждой строке программы может быть отведено 8 байт:
2 байта - номер Бейсик строки (1...32767);
2 байта - адрес строки в текстовом виде (#0000...#FFFF);
2 байта - адрес откомпилированного "шитого" кода для этой строки (#0000...#FFFF);
2 байта - длина откомпилированного кода (может быть больше 256 байт).
В один 256-байтный блок влезает 32 таких записи - в начале работы, когда бейсик программа пустая, весь этот блок заполнен нулями.
Далее пользователь вводит первую строку:
10 CLS
После чего в карте ссылок появится первая запись:
10,#7F00,#7E00,9
где #7F00 является адресом строки "10 CLS",0
а #7E00 является адресом подпрограммы
CALL CHECK_BREAK
CALL BAS_CLS
JMP BAS_STOP
(адреса #7E00 и #7F00 взяты для примера - они просто указывают на два разных выделенных через систему 256-байтных блока памяти)
При добавлении пользователем следующей строки JMP в конце предыдущей строки будет заменён на адрес скомпилированной подпрограммы для вновь введённой строки.
Если пользователь меняет уже введённую строку, то её строковое представление и откомпилированное представление заменяется на новое - оно может занимать меньше места, чем занимало старое представление либо больше места - в этом случае строка создаётся в новом месте, а старое место освобождается и высвободившиеся в обоих случаях байты объявляются свободными для возможного дальнейшего использования (наверное где-то отдельно надо вести учёт этим свободным цепочкам байтов либо подразумевать, что любая цепочка байт, где идёт три или более #FF подряд считается свободной).