Коротко про 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" - нарисует линию