Использование ЯВУ для разработки программ для РК86

Перейти вниз

Использование ЯВУ для разработки программ для РК86

Сообщение  barsik в Чт Сен 07 2017, 15:07

Общеизвестно, что программирование на ассемблере очень неэффективно. В книге Эльфринга написано, что хороший программист в среднем за рабочий день создает всего 100 строк исходного текста (а программа объёмом в 14 кб имеет исходник в 7000 строк ассемблера). Понятно, что набрать в редакторе за один день можно и тысячи строк, только проблема в том, что это точно не будет работать.

Т.к программирование на ассемблере очень чревато ошибками, то требуется обязательно тестировать любую процедуру написанную на ассемблере. И в случае ошибки, приходится выяснять проблему путём долгой и кропотливой возни с отладчиком. Так что неэффективность ассемблера объясняется вовсе не сложностью хранить в голове конструкции, форматы данных, адреса и т.п (это-то как раз не проблема), а главным образом в том, что очень легко ошибиться, а найти потом эти ошибки сложно.

Поэтому и придумали языки высокого уровня (ЯВУ), т.к ЯВУ даже древний, намного более продуктивен, чем ассемблер. Впрочем, не надо обольщаться. Как написано в предисловии книги У.Морера, почти все коммерчески успешные программы для 8-ми разрядок были написаны именно на ассемблере, а на ЯВУ не было написано вообще ничего (кроме банковских программ на Коболе). Проблема в том, что 8-ми разрядки имеют мало памяти, а объём кода из под компилятора очень быстро нарастает с ростом сложности программы. Объём кода программы на ЯВУ в 4-8 раз больше, а скорость прогона во столько же ниже по сравнению с ассемблером.

Стоит заметить, что в литературе встречается утверждение, что есть один более эффективный, вероятно самый низкоуровневый ЯВУ - PL/M. Про который его автор Гарри Килэлл утверждал, что для больших программ он генерит более эффективный код, чем на ассемблере. Но для меня пока это остаётся непроверенным слухом и городской легендой, т.к CP/M-версии компилятора нет.

Но даже для критичных по скорости и объёму кода программ выход есть - это использование ЯВУ с заменой части процедур на ассемблер. Это удобно в BDS Си (не Aztec), а также в большинстве других ЯВУ (где используется линковка). Даже широко презираемый программистами бейсик имеет компиляторы с линковщиком, что позволяет встраивать в программу бейсика куски написанные на ассемблере без всяких ухищрений свойственных интерпретатору (за счёт загрузки кодов из операторов DATA).

Впрочем уверен, что для несложных по логике и графике программ, уровня XONIX, PACMAN даже возможностей голого ЯВУ без вкраплений ассемблера достаточно. Например, первый PACMAN для 8-ми разрядки вообще был написан на интерпретаторе бейсика, а это уж какая тормозятина.

Надеюсь, что вышенаписанного достаточно, чтобы показать, что использование ЯВУ при разработке ПО для РК86 имеет смысл. Но как это сделать, ведь компиляторы работают в CP/M и генерируют код рассчитанный для работы в CP/M? А нам требуется поиметь на выходе программу пригодную для запуска из среды монитора РК.

Из-за отсутствия в базовом РК86 входов BDOS и BIOS, в программе нельзя использовать стандартные функции ввода/вывода. Понятно, что программе рассчитанной для РК без CP/M не следует лезть к дискете. Но даже и без этого, т.к программы CP/M для ввода/вывода используют BDOS и BIOS, то странслированная традиционно программа всё-равно работать не будет.

Для решения проблемы есть куча вариантов. Во-первых, можно сделать эмуляцию CP/M, а именно пристроить к программе эмулятор BDOS/BIOS. Во-вторых, можно переписать в компиляторе некоторые процедуры низкого уровня в RUN-тайм библиотеке. Исходник RUN-тайм библитеки у Паскаля МТ+ и BDS Си включён в дистрибутив и изменить несложно (переадресовав вызовы BDOS на входы F812, F803 и F809).

В третьих, можно написать процедуры и функции на ассемблере делающие вызовы ПЗУ F800. Проще всего это делается в компиляторах, где есть оператор INLINE (или #ASM...#ENDASM). Компиляторы Паскаль МТ+ и AZTEC Си это свойство имеют. Тогда тратится всего 3 минуты, чтобы вставив маш.коды команды CALL на стандартные входы ПЗУ, получить процедуры и функции для вызова из Паскаля подпрограмм ПЗУ.

Т.е используя INLINE-ассемблер пишутся интерфейсные функции типа CONOUT, GETKEY, GOTOXY, MSSG, что и позволяет делать интерфейс с железом РК, не используя стандартные функции ЯВУ. Если же в ЯВУ нет встроенного ассемблера, можно это сделать внешними процедурами на ассемблере.

Эмулятор BDOS, BIOS это возможное решение для тех ЯВУ, в которых сложно что-то изменить. Программа транслируется для CP/M, используя стандартные процедуры. А затем к коду программы подключается блок эмулятора BDOS и BIOS, это всего 0.5 кб кода. Например, на Паскале МТ+ это сделать легко, т.к код странслированной программы в начале специально имеет 16 NOP-ов, куда пользователь может вставить свой код инициализации. Как выглядит эмулятор BDOS/BIOS можно посмотреть на программе DDT, что я адаптировал для РК86 от CP/M.

СИ даёт больше возможностей, генерит несколько более компактный и скоростной код, хотя Паскаль легче в освоении и симпатичен для тех, кто ранее имел дело с бейсиком. Тут для Z80 выбор есть, а вот для КР580 выбора практически нет. Есть всего три Паскаля выдающих код КР580, из них два - МТ+ и JRT хорошо документированы. МТ+ довольно эффективный, хотя слышал мнение, что он даёт код более объёмный, чем BDS Си. Зато Паскаль проще и его учат в школе и ВУЗ-е. В любом случае код от компилятора прогоняется на порядок быстрее, чем в бейсик интерпретаторе.

В 80-тые годы, в эпоху популярности РК, ЯВУ были недоступны, но меня удивляет почему сейчас, когда всё это доступно и есть живые любители РК86, никто не начал использовать ЯВУ. Смысл этого поста в том, чтобы убедить фанатов РК, что даже с небольшими трудозатратами можно писать игры. Т.к написание игр для РК на ассемблере более трудоёмко, то использование ЯВУ это выход. Можно писать новые игры. Но есть смысл даже в переписывании старых игр РК86, потому что теперь можно использовать цвет (оцветить старые игры) и путём использования специального фонта с фигурками, состоящими из тайлов (например в матрице 2*2 знакоместа), получить визуально на экране полноценную графику, причём не имея скоростных ограничений, как это на графических ЭВМ, которые тормозят.

Надеюсь, что через полгода мне и самому удастся продолжить эту тему и показать, как можно написать XONIX или PACMAN на ЯВУ. Мучает только проблема выбора - Си, Паскаль, бейсик-компилятор или PL/M. Каждый из них имеет свои преимущества.

И нужен компилятор с хорошей документацией. Пока нашёл документацию по бейсикам-компиляторам CBASIC и BASCOM, Паскалю МТ+ и BDS Си и, читая пытаюсь что-нибудь вспомнить, т.к уже ничего не помню и по уровню знаний равен полному чайнику в программировании на ЯВУ.

На первый взгляд кажется, что даже на бейсике компиляторе можно бы написать вполне приличное ПО для РК86, а скорость разработки будет даже выше. Но пока с бейсиком-компилятором некоторая неясность, - надо разобраться как делать ПО, работающее без ДОС, т.к обычно бейсики компиляторы генерируют не машинный, а промежуточный код и используют BRUN-модуль, из-за чего без ДОС работать вообще не могут, исходников RUN-тайм библиотеки нет и базовые процедуры не изменить. Кажется всё-же можно компоновать одномодульные CP/M-программы, и тогда за счёт вызова USR-подпрограмм можно выкрутиться, т.е делать программы на бейсике не использующие вызовов BDOS или BIOS CP/M.

Но вы не ждите когда я что-нибудь "рожу", вы можете легко сами сделать то же самое и начать делать игры для РК86 на каком нибудь ЯВУ. Для этого достаточно найти какую-нибудь среду, где работает любой из перечисленных выше компиляторов ЯВУ для CP/M. В простейшем случае - это эмулятор какого-нибудь компьютера, где есть CP/M и можно прогонять CP/M компиляторы. И проверять результирующий код для начала удобнее в эмуляторе РК86, т.к обычно очень хлопотно пересылать коды из IBM PC на реал.

Для использования корректных CP/M-программ, таких как компиляторы, удобнее всего пользоваться резидентными эмуляторами CP/M, типа 22NICE. Они позволяют запускать программы CP/M в MSDOS и Windows XP так, как будто это программы для IBM PC (в более новых Windows - нет, там нет поддержки MSDOS). Благодаря BAT-файлам получается очень удобно, хлоп по кнопке и всё транслируется и через секунду Вы уже в эмуляторе, проверяете результат. Такого удобства никогда не получить используя компиляцию на реальной ЭВМ (даже если бы в РК для этого хватало ОЗУ и скорости).

Кстати, собственно нехватка ОЗУ в РК уже не стоит остро, как это было в 80-тые, т.к даже для программы написанной на ЯВУ объёма 29 кб для загрузки кода и ещё 8 или 15 кб (в области 8400...BFFF) под буфер данных достаточно. Но, если сплошные 48К по принципу Микроши получить легко, то почему нет? Например, CP/M-Нортон написанный на BDS СИ занимает 32 кб. А игры написанные на ЯВУ и содержащие много лабиринтов уж точно превысят размер в 29 кб.

Интересно, что загрузка программ размера большего чем 29 кб с магнитофона в системе, где ОЗУ расширено в в окне A000...BFFF (тогда ОЗУ занимает два несмежные участка), должна происходить в три этапа. Для этого пишется стартёр, автоматически перехватывающий управление при загрузке по I, который и грузит два блока кодов в ОЗУ A000...BFFF и 0...7600. Стартёр перехватывает управление (за счёт загрузки кода в стек), выводит на 4 секунды мигающую надпись "Do not stop tape" и затем два блока считываются и стартуют. Естественно, если ОЗУ имеет сплошной блок ОЗУ, то загрузка программы размером более 29 кб и одним сплошным куском не проблема.

Однако для тех РК, где ОЗУ расширено до сплошных 48 кб, для загрузки больших программ удобнее использовать двухрежимный монитор, который работает в двух режимах на 32 кб и на 48 кб. Тогда в режиме 48 кб можно грузить большие программы под 45 кб одним блоком. Физически это достигается тем, что на РФ2 с ROM-BIOS напаивается второе ПЗУ РФ2. И, если в момент нажатия кнопки сброс удерживается клавиша <УС>, то стартует монитор на 48 кб. Это удобно, не требуется доп.управление и сохраняется совместимость. Два компьютера в одном флаконе.

Так как, в качестве языка программирования очень перспективен PL/M, прилагаю ссылку на подборку материалов по языку PL/M и по языку PL1 для программирования для КР580.

Для PL1 есть версия компилятора для CP/M. Хотя PL/M похож на PL1, про его эффективность ничего не известно. Точнее некоторые, начитавшись Википедии, PL1 ругают, но сомневаюсь, что для 8-ми разрядки стали бы писать неэффективнуй компилятор. Возможно он такой же тормозной как Си или Паскаль, но скорее всего, т.к основы языка те же, он также эффективен, как и PL/M. Но для начала освоения PL/M он тоже годится, т.к в нём можно использовать только те операторы, что есть и в PL/M.


Последний раз редактировалось: barsik (Пт Апр 27 2018, 15:12), всего редактировалось 1 раз(а)

_________________
***
avatar
barsik
новичёк

Сообщения : 85
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

Паскаль для разработки программ РК86

Сообщение  barsik в Пт Апр 27 2018, 14:46

Дилемма Паскаль или Си отравила жизнь многим дилетантам в программировании. В 90-тые, пытаясь освоить программирование, я постоянно разрывался, занимался и тем и этим. В итоге метания между компилятором BASIC-а, Си и Паскалем сильно мне вредили. В итоге неэффективно потрачено время. Лучше не повторять этой ошибки и строго заниматься только СИ или только Паскалем.

После долгого обдумывания, для программирования для РК86 выбираю Паскаль. Хотя на Си я программировал больше, и Си считается лучшим. Пусть Си популярнее, а компиляторы Си для 8-ми разрядки эффективнее и возможности Си выше, но для меня бОльшее значение имеет приятность программирования, да и бОльшая лёгкость в освоении тоже важна, т.к я очень давно не программировал и из-за возраста "входное сопротивление" моего мозга резко повысилось. Мне важнее более приятный процесс, чем более качественный результат.

Далее необходимо сделать выбор компилятора. Для КР580 есть 4 альтернативы. Это три компилятора для CP/M и родной компилятор для РК86 (работающий без ДОС). Для начала, чтобы убедиться в их работоспособности попробовал написать Hello World на всех этих компиляторах. Эти компиляторы я сложил здесь. Если у Вас есть другой Паскаль, что компилирует в код для КР580, дайте знать. Вроде бы были популярны PascalP и USCD Pascal, оба использующие P-код, но пока их не нашёл.

Родной компилятор Паскаля для РК86 у меня есть, но сейчас он недоступен, т.к остался на архивных дискетах RK-DOS, которые не считать на PC. Это не важно, т.к этот компилятор сразу-же отпадает по следующим причинам.

Для РК86 есть Паскаль от Микроши (а также Best-Си и Фортран). Но этот Паскаль не полноценный компилятор, т.к вместо маленькой RUN-тайм библиотеки, использует в качестве неё сам компилятор, отчего объём странслированной программы увеличивается не на 1-2 кб библиотеки времени исполнения, а разбухает аж на целых 16 кб кода всего компилятора. Что делает этот Паскаль пригодным лишь для знакомства с Паскалем.

Трансляция происходит сначала в текст на ассемблере, который затем ассемблируется ассемблером МИКРОН. Это приводит к тому, что в ОЗУ РК должны одновременно умещаться: текстов редактор (2 кб), компилятор Паскаля, компилятор ассемблера (2 кб), исходный текст на Паскале, промежуточный текст на ассемблере и результирующий объектный код странслированной программы. С учётом мизерности размера ОЗУ в РК максимальный размер программы ограничен в 200 строк Паскаля. То же самое относится и РК-компилятору Best-Си, хотя на ОРИОНЕ на нём писали игры.

На других отечественных компьютерах с бОльшим ОЗУ (Партнёр и Вектор) с успехом использовался ЛС-паскаль, который использует P-код. Но увы, его версий для РК или ОРИОНА не встречал.

Один из трёх CP/M компиляторов Паскаля для КР580 также отпал, т.к мне не удалось странслировать на нём Hello World. Разобраться не смог, т.к к этому Паскалю нет никакой документации.

Из 4-х попробованных версий JRT-паскаля одна (3.0) оказалась дохлой. JRT-паскаль оказался очень эфективным по объёму кода (код Hello World всего 32 байта) и документация к нему хорошая. Но увы, этот компилятор транслирует не в COM-файл, а в INT-файл, для запуска которого используется программа EXEC.COM размером в 24 кб. Это не годится не только из-за огромного размера кода, а то, что без CP/M программа EXEC не может загрузить INT-файл и следовательно это не удастся использовать на РК86 без CP/M. Жалко, что JR-Паскаль не годится, т.к в нём есть многие вещи, что отсутствуют в МТ+.

В итоге, как ни крути, остался всего один компилятор Паскаля, который позволяет транслировать программы для РК86. Это Паскаль МТ+. Дополнительным плюсом МТ+ является наличие отладчика, возможность анализа ассемблерного кода полученного от каждого оператора Паскаля и возможность трансляции кода на любые адреса и для ПЗУ. Hello World транслируется в программу объёмом в 4 кб (использование ключа $K позволяет исключить ненужные стандартные операторы из кода, что сокращает объём, но пока в этом не разбирался).).

Есть 3 версии компилятора MT+. Есть версия 5.5 от фирмы MicroSystems и есть DR версия 5.5 от Digital Research (она отличается наличием SPP, пакета для оптимизации по скорости и анализатора) и есть DR версия 5.6. Компилятор МТ+ отлично документирован и экспертами признавался намного более мощным и профессиональным инструментом, чем борландовский ТP 3.0, хотя TP благодаря IDE и позволяет значительно ускорить разработку и отладку программ. Но увы, TP не генерит код для КР580, только для Z80. Пока для освоения Паскаля использую самую древнюю версию MT+ от СМ-1800, т.к она русифицирована, а ускоритель SPP пока не нужен.

Для получения кода пригодного для РК86, несложно переписать в RUN-тайм библиотеке процедуру @BDOS так, чтобы в соответствии с передаваемым номером функции происходил вызов ПЗУ F800 по адресу высчитанному по формуле (F800 + func*3). Но это мне пока не надо, т.к отлаживать удобнее на CP/M-машине (точнее в эмуляторе ОРИОНА с CP/M). Малый объём ОЗУ РК не проблема (пока сама странслированная программа умещается в ОЗУ), т.к ключ $Z позволяет задать RAMTOP. Ограничения Паскаля по скорости можно устранить вкраплениями ассемблера (это также немного сокращает объём кода).

Чтобы получить программу в кодах КР580 работающую на РК86 без наличия на ней CP/M, надо решить проблему ввода/вывод, т.к ввод/вывод самого компилятора рассчитан на CP/M, т.е наличие в ОЗУ входа в CP/M BDOS и входов в CP/M-BIOS. Проще всего встроить вызовы ПЗУ F800 в виде INLINE-процедур написанных на ассемблере. Встроенный в MT+ ассемблер позволяет прямо в Паскаль программу встраивать куски на ассемблере (и даже двумя способами - в виде HEX-дампов и в виде мнемоник ассемблера).

Нужные для программирования РК простейшие процедуры COUT, MSSG, GOTOXY, XF81B, CONIN, RD_SCR... я написал в INLINE ассемблере в мнемониках КР580 быстро. К сожалению, INLINE ассемблер использует маловразумительные мнемоники КР580, а не всем понятные мнемоники Z80. Потому большие вкрапления ассемблера удобнее делать в виде прилинковываемого внешнего ассемблерного модуля, который можно писать в мнемониках Z80 (естественно избегая команд, которых в КР580 нет).

Не освоив полностью сам Паскаль, нет смысла сразу начинать писать игру для РК86. Сначала разумнее пописать простенькие программки и полностью разобраться в работе всех операторов, стандартных процедур и функций. Затем надо разработать "движок", т.е набор подпрограмм позволяющий выводить движущиеся динамически меняющиеся спрайты (спрайты состоящие из тайлов-символов). Но предварительно надо написать редактор спрайтов, позволяющий нарисовать 8 фаз спрайта и посмотреть как они выводятся на экран в динамике.

Конечно редактор спрайтов удобнее сделать программой для PC, т.к сам РК86 не позволяет загружать тайлы спрайтов в фонт. Но я (для тренировки) собираюсь написать на Паскале редактор спрайтов именно для РК86 в графическом режиме 128*129 (который требует альтернативный фонт, который как раз есть у меня на реале и поддержан в моём эмуляторе РК86 на ОРИОНЕ).

Ближайшее время (несколько недель) для освоения Паскаля буду писать простенькие программки. Пока на второй день изучения странслировал несколько программок уровня Hello World (чтобы освоить интерефейс с подпрограммами ПЗУ РК) и начал писать нечто вроде монитора РК86 на Паскале (не трудно сделать и с записью на МГ). Пока написал просмотр дампа. Это пригодится для отладки Паскаль программ. Добавлю к этому еще мини дизассемблер, это позволит удобно отлаживать. Для начала хочу понять насколько быстро разбухает код Паскаля.

Затем собираюсь написать текстов редактор, а потом, возможно, и ассемблер в мнемониках Z80. Может быть ещё что-нибудь простенькое, типа микро-ОС для ROM-диска или прошивателя ПЗУ 573 РФ2 или 556 РТ4. И только затем, набравшись немного опыта в Паскале, возьмусь за разработку редактора спрайтов и графических процедур для их динамического вывода.

И только потом можно будет начать делать игры для РК86 с тайловой графикой. Надеюсь к тому времени появится эмулятор РК86 с коммутируемыми фонтами. Без коммутации фонтов, т.е без минимальной графики, вообще нет смысла писать игры для РК86, т.к игры с бегающими по экрану ASCII-символами это просто уродство, которого достаточно написано ещё в 80-тые.

_________________
***
avatar
barsik
новичёк

Сообщения : 85
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

.

Сообщение  barsik в Ср Май 02 2018, 19:16

Прошедшие несколько дней разбирался с основами программирования на МТ-Паскале. Сам Паскаль работает великолепно, всё как в учебнике, да и находить и устранять ошибки удобно, диагностика достаточная. Но вот с ассемблером не всё оказалось так радужно, как казалось по документации.

С ассемблером при программировании для РК обязательно приходится разбираться, т.к все стандартные процедуры Паскаля для ввода/вывода недоступны (т.к они работают через CP/M, которая в ОЗУ РК отсутствует). Таким образом программа для РК86, написанная на Паскале, без вкраплений ассемблера вообще ничего не может.

Например, если хочется напечатать на экране значение переменной в десятичном виде, то облом. Без собственных процедур ввода/вывода это невозможно - попытка использовать процедуры WRITE или WRITELN приводит к кошмарному улету. Потому всё, что программа может делать, это то, что могут делать подпрограммы ПЗУ РК86, причём их ещё надо как-то вызвать из программы на Паскале.

Потому для начала, используя INLINE вставки на ассемблере написал несколько простейших процедур для интерфейса с подпрограммами ПЗУ РК86. Например, вот самые простейшие:

Код:

procedure cout(SYM: char);
begin
  INLINE( "LDA/SYM /
          "MOV C,A/
          "CALL/$F809 );
end;

function conin: char;
var RESULT:    integer;
begin
  INLINE( "CALL/$F803/
          "MOV L,A/
          "MVI H/0/
          "SHLD /RESULT );
  conin := chr(RESULT);
end;

procedure mssg(stradr: ukchar);
begin
  INLINE( "LHLD/STRADR/
          "CALL/$F818 );
end;

procedure hex(BYT: byte);
begin
  INLINE( "LDA/BYT /
          "CALL/$F815 );
end;

Уже эти простейшие процедуры позволяют тот же минимальный ввод/вывод, что есть в ПЗУ РК86. Например, можно выводить строки текста задав их такой же INLINE-вставкой с завершающим нулём. Вот программа Hello World для РК86.

Код:

prog HELLO;
type    ukchar = ^char;
var    ukch: ukchar;

procedure mssg(text: ukchar);
begin
  INLINE( "LHLD/text/
          "CALL/$F818 );
end;

procedure thello;
begin
  INLINE ( $1F/10/'Hello World !'/$0 );
end;

begin  (*  main  *)
        mssg(addr(thello));
  INLINE( "JMP/$F86C );
end.

А для вывода строк самого Паскаля процедура MSSG не годится, т.к в Паскале строки представлены иначе. Кстати, и вывести число в десятичном виде эти п/п-ммы всё-равно не позволяют (надо писать свою процедуру PR_DIG).

Как видите простейшие процедуры встроенный ассемблер позволяет написать. Но если попытаться написать чуть более сложную INLINE процедуру на ассемблере, то выясняется, что никак не задать адрес переходов.

В документации указано, что тогда можно использовать идентификатор звёздочка (*), что заменяет текущий адрес трансляции (аналог $ в обычном ассемблере). Т.е можно писать "JMP/*+25/. Но увы, компилятор не воспринимает звездочку, даёт на неё ошибку. А с префиксом $ (что вообще-то HEX-префикс), т.е JMP/$*+25 транслируется, но если посмотреть полученный код отладчиком, то адрес перехода подставляется неверный.

Таким образом, я остался практически без INLINE-ассемблера. Без переходов можно написать только простейшие линейные процедуры. Выходом остаётся вставлять в процедуру INLINE-вставку в кодах, предварительно странслировав её обычным ассемблером прямо на рабочий адрес. Адрес размещения процедуры можно узнать из PRN-файла (используя прилагаемый дизассемблер Паскаля) или проще контроллируя код отладчиком. При этом эта INLINE-процедура должна стоять в начале исходника, чтобы при дальнейшем написании программы адрес процедуры уже не сдвигался. Тогда с помощью INLINE вставляется готовый дамп странслированной программы.

Но т.к процедуру всё-равно надо транслировать обычным макроассемблером, то проще не вставлять её дампом (что вызывает необходимость контроллировать, чтобы адрес размещения совпал), а просто прилинковывать её при линковке, странслировав в виде внешнего модуля.

Да и вообще нашлось много нюансов, на которые пришлось потратить время. Например, надо писать не 'PUSH PSW', а 'PUSH P' , и не 'POP PSW', а 'POP PS', иначе возникает ошибка. Долго трахался с этим, а узнать это удалось только изучив дамп компилятора.

Но всё же надеюсь, что INLINE-ассемблер каким-то образом позволяет переходы. В документации на русском написано про звёздочку. Возможно переводная документация не соответствует, - от более раннней или более поздней версии. Видимо, надо читать читать документацию на английском, может быть там что-то найду.

_________________
***
avatar
barsik
новичёк

Сообщения : 85
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

.

Сообщение  barsik в Сб Май 12 2018, 23:49

Нашёл ещё один пригодный для программирования для РК86 компилятор Паскаля. Скачать можно здесь. Пока только бегло пролистав документацию, выяснил что этот компилятор тоже пригоден для РК86, т.к даёт код КР580 и может выдавать COM-файл (а не INT запускаемый отдельным стартёром). На практике не проверял. Так как пока меня вполне устраивает Паскаль МТ+, хотя документация (видимо, от другой версии и) местами не совпадает. Чуть позднее, изучив документацию к этому Паскалю, попробую написать Hello World на этом Паскале.

Также недавно нашёл примеры программ на Паскале. Это в основном исходники инструментальных программ для разных Паскалей, но с ними пока не разбирался. Выяснилось, что для CP/M несколько десятков программ любителей из 80-тых было написано именно на Паскале. Таким образом в качестве примера для целей изучения имеется около сотни исходников Паскаль-программ (в основном это исходники для Турбо-Паскаля, но для целей изучения это не особо важно, тем более, что конверсия для другого Паскаля минимальна).

А если Вы предпочитаете программировать для РК86 на Си, Коболе, Комале или других, то нет проблем, скачивайте здесь и начинайте писать.
avatar
barsik
новичёк

Сообщения : 85
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Использование ЯВУ для разработки программ для РК86

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения