Коротко про IBASIC. Составил Иван Городецкий, 02.02.2019
1. Служебные директивы (только те, которые необычные, RUN и LIST не вижу смысла комментировать)
1.1 SCR - просто стирает текущую программу в памяти (в других бейсиках это часто NEW)
1.2 NEW[имя] - как SCR, но с заданием имени.
1.3 SAVE[имя] - выгрузка программы
1.4 OLD[имя] - загрузка программы
1.5 SYS - выход в дос
1.6.1 NAME - показывает текущее имя программы
1.6.2 NAMEимя - задает новое имя программы
1.7 UNSAVE[имя.BSC] или ERA[имя.BSC] - удаление программы с диска
1.8 LLIST - в данном бейсике синоним LIST, такие дела
1.9 NULLаргумент. Аргумент от 0 до 255. Задание задержки при переходе к новой строке или при скролле.
Замечание по поводу директив с именем в квадратных скобках. Это значит, что имя можно указывать, а можно не указывать, и тогда будет использовано имя заданное при старте программы или через NAME (или запрошено в случае OLD).
2. Звук
2.1. BELL - звонок
2.2. SOUND высота, длительность - задает параметры звука для BELL.
3. Графика
3.1 GRAF - очистка экрана, вместо CLS. Кроме того этот оператор установит 3й бит в BFDC и BFE6 и получится аналог CLS 8-15 (т.е. без скролла основого экрана) в MB.COM. Выйти из этого режима можно по директиве LIST
3.2 RECT x,y - прямоугольник из текущей точки до x,y
3.3 COL цвет
3.4 POS x,y - перемещение графического курсора
3.5 LINE x,y - линия из текущей точки до x,y
3.6 SET палитра,цвет_фона
3.7 SYM выражение для печати - аналог PRINT, но с возможностью задания места для печати с точностью до точки (позицию для печати задает предыдущий графический оператор, удобно использовать POS).
4. Cредства для взаимодействия с машиннокодовыми процедурами.
4.1 Функция ARG(значение) - задает значение пары BC, которое будет передано CALL
4.2 Функция CALL(адрес), про которую я уже упоминал. На входе: BC - значение заданное в ARG, DE - указатель на специальный стек. В качестве результата возвращает содержимое BA (т.е. B как бы старшая половина регистровой пары, A - младшая). Кроме того можно возвратить значение в "стеке", указатель на который был передан в DE.
4.3 Функция POP() - выбирает значение со "стека", с которым работал CALL. Т.е. CALL кроме результата в BA может вернуть и другие результаты работы машиннокодовой процедуры.
4.4 Функция UNTRAP(). Весьма специфическая. Машиннокодовая процедура, вызываемая по CALL или POKE могут изменить ячейку, отвечающую за "стек перехвата ошибок". Как я понимаю, это нужно для расширения возможностей бейсика, например так можно добавить работу со строковыми переменными. UNTRAP снимает с этого стека значение, т.е. убирает перехват.
Еще можно упомянуть, что есть функция INP для чтения портов. Оператора OUT для записи в порты (в отличие от MB.COM) в IBASIC нет.
Но благодаря мощным возможностям по взаимодействию с машиннокодовыми процедурами можно доопределить нужные вещи, хоть печать esc, хоть запись в порты.
Например, для печати esc можно использовать процедурку
4000h mvi c,1Bh
4002h jmp 0913h
Вызов:
5GRAF
10A=CALL(16384)
20PRINT"1234" - нарисует прямоугольник
или
20PRINT"2345" - нарисует линию
[свернуть]