Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Игра "Двигалка" на Апогей/РК

  1. #1
    Veteran Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,157
    Спасибо Благодарностей отдано 
    38
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    26 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Игра "Двигалка" на Апогей/РК

    Всем добрый день!
    Написал игру для РК-совместимых компьютеров - Двигалка.
    Написал её еще весной, но выложить сюда только сейчас руки дошли. В игре надо перемещая различные предметы сначала взять ключ (+), потом дойти до выхода (Яблочко).
    Игра написана на PL/M, исходники вместе с компилятором находятся в архиве. Приятной игры!
    Видео

    Скачать: http://events.retroscene.org/files/m...d/dvigalka.zip

  2. Эти 4 пользователя(ей) поблагодарили Kakos_nonos за это полезное сообщение:

    A_AVL (17.10.2022), DemonId7 (11.12.2022), Oleg N. Cher (19.09.2019), shapipovo (04.12.2021)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,181
    Спасибо Благодарностей отдано 
    875
    Спасибо Благодарностей получено 
    683
    Поблагодарили
    423 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Kakos_nonos Посмотреть сообщение
    Игра написана на PL/M
    Зачет!
    Больше игр нет

  5. #3
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    При запуске приведённого BAT-файла compile_it.bat в Win XP ничего не компилируется. Неверный BAT-файл. В итоге, чтобы откомпилировать мне пришлось переделать файл compile.bat в соответствие с требованиями к BAT-файлам. Вот такой текст сработал:

    @echo PL/M-80 Super Compiler
    .\compiler\lua52.exe .\compiler\plsc1.lua %1
    @cd .\compiler\
    lua52.exe plsc2.lua
    @move /Y out.rka ..\..\emu\dvig.rka
    @cd ..\..\emu
    emu.exe

    EMU не запускает файл по командной строке. Надо нажимать на сброс, затем вводить файл по I.

    Очевидно, собственно компиляцию делают строки:

    lua52.exe plsc1.lua prog.plm
    lua52.exe plsc2.lua

    Не могли бы Вы рассказать как пользоваться этим компилятором PL/M. Понятно, что lua52 это что-то вроде командного процессора ? Сам компилятор это plm81.exe и plm82.exe, они у всех есть, но никто не понял как ими пользоваться. А Вам удалось в этом разобраться. Не могли бы Вы на простейшем примере Hello World показать как компилировать программы? И рассказать про строчки в файлах plsc1.lua и plsc2.lua ?

    Имеет ли отношение содержимое этих файлов к компиляции именно этой программы? Если я напишу свою программу MYPOG.PLM и заменю в файле compile_it.bat слово GAME.PLM на MYPROG.PLM, то не понадобится ли менять также содержимое plsc1.lua и plsc2.lua ?
    Последний раз редактировалось barsik; 28.12.2017 в 02:06.

  6. #4
    Veteran Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,157
    Спасибо Благодарностей отдано 
    38
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    26 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нет, .lua файлы не надо менять. Это препроцессор, он обрабатывает наши плм сорцы так, чтоб они были понятны плм компилятору (он 1977 года, древний, там все по другому).
    А именно: добавляет регистронезависимость (в оригинале надо писать КАПСОМ)
    Добавляет систему модулей, чтоб программу можно было писать из нескольких файлов, а также правильно показывает ошибки (ошибка в файле N в строке K)
    Добавляет возможность писать ассемблерные вставки.

    Да, чтоб откомпилировать свою прогу нужно вписать compile_it hello.plm

    EMU не запускает файл по командной строке. Надо нажимать на сброс, затем вводить файл по I.
    У меня запускает, может не та версия
    При запуске приведённого BAT-файла compile_it.bat в Win XP ничего не компилируется. Неверный BAT-файл.
    Да, сорри за ошибку, неправильный символ переноса строки, на вин 7 все норм, поэтому не заметил.

    Завтра опишу как написать хелло вролд

  7. #5
    Veteran Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,157
    Спасибо Благодарностей отдано 
    38
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    26 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Извиняюсь за задержку Helloworld пишется так:

    Код:
     
    use lib.plm
    call putstr(.('hello world',0))
    goto 0f875h

    Сначала мы подключаем файлы с процедурами ввода-вывода (этот файл должен быть вместе с исходником), потом выводим строку, потом переходим обратно в монитор.

    Строка выводится так: В PL/M нет строкового типа, поэтому используется точечная нотация, то есть, мы размещаем в памяти строку и возвращаем её адрес: .('hello world',0)

    Можно и так написать
    Код:
    declare a address
    a=.('hello world',0)
    call putstr(a)
    goto 0f875h
    Правда, честно сказать, язык не очень понравился. Все очень раритетно, древне. Сейчас изучаю тему оберона, его тлже можно в i8080 транслировать, через си. Если будет получаться, напишу.

    вот правильный батник compile_it.bat
    Код:
    @echo off
    echo PL/M-80 Super Compiler 0.01 Use: compile.bat filename
    %~d0%~p0\lua52.exe %~d0%~p0\plsc1.lua %1
    cd "%~d0%~p0"
    lua52.exe plsc2.lua
    ..\..\emu\emu out.rka

  8. #6
    Member Аватар для mvg
    Регистрация
    25.02.2017
    Адрес
    г. Рязань
    Сообщений
    62
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Прикольно. В духе старых рк игр!
    А я своих марсиан никак не допишу... ЛЕНЬ ;(

  9. #7
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Пишите программы для РК на PL/M

    Цитата Сообщение от mvg
    А я своих марсиан никак не допишу...
    А это как раз потому, что на ассемблере программировать сложнее. Я уже предлагал всем программистам для РК86 переходить с ассемблера на PL/M, который из всех ЯВУ даёт самый эффективный код.

    Программа написанная на PL/M всего лишь в 1.2...1.5 раза тормознее и объёмнее, чем аналог написанный на ассемблере. А Гарри Килдэлл, автор PL/M, вообще утверждал, что большая программа написанная на PL/M эффективнее, чем программа на ассемблере. Теоретически такое невозможно, но в реальности программисты выдают на ассемблере менее эффективный код, в их коде встречаются дублирующиеся фрагменты, да и при разработке на ЯВУ структура и алгоритм программы получается более оптимальной.

    А улучшенный PL/M, т.е PLMX с оптимизацией кода, ещё более эффективен. В отличие от PL/M из 1973 года от Гарри Килдэлла, PLMX устраняет мелкие неудобства PL/M (например, не зависит от регистра символов), допускает многомодульность, объединение с кусками написанными на других ЯВУ или ассемблере и имеет поддержку BDOS функций CP/M. Кроме того, он даёт на выходе сразу ассемблерный исходник, пригодный для трансляции и линковки, а не кучу каких-то левых файлов, не пойми для чего предназначенных, как делает оригинал PL/M из 1973 года.

    Но самое главное в том, что PLMX работает в CP/M (хотя не работает под TSR эмуляторами CP/M для MSDOS, типа 22NICE, RUNCPM). Достаточно использовать любой эмулятор в котором есть CP/M c достаточным уровнем TPA. Можно также транслировать на реальном ОРИОНЕ с дисководом или винчестером (на РК86 и СПЕЦИАЛИСТЕ не получится, там TPA слишком маленький).

    Но оригинальной версии компилятора PL/M для CP/M до сих пор нет. Много людей пытались найти такой компилятор (в т.числе и иностранцы). Фирма Intell не перетранслировала компилятор PL/M для CP/M, чтобы не поддерживать конкурентов. Но компилятор PL/M для CP/M всё же был создан другой сторонней фирмой и, естественно, это не был оригинал от Гарри Килдэлла. Упоминания об этом встречал на англоязычных сайтах и даже ссылки на скачку (но они протухли более 10 лет назад). Вроде бы это написала фирма Tarbell, ставшая известной своим Tarbell Basic для CP/M.

    Недавно оригинальные исходники PL/M на Фортране-IV были опубликованы. Но остаётся проблемой странслировать эти имеющиеся исходники PL/M. Нужен компилятор фортрана, что даёт на выходе код КР580 или Z80 для CP/M. Пока безрезультатно опробовал 3 компилятора фортрана для CP/M. А интелловский компилятор PL/M для ISIS не работает в Windows, т.к эмулятор ISIS написан для MSDOS. Исходя из дат файлов, чтобы его использовать надо загрузиться в MSDOS 3.30 и компилировать на дискете или на партиции размером не более 32 мб.

    Итак, уже имеются две возможности писать на PL/M - это PLMX от Эммануля Роше и MSDOS кросс компилятор PL/M с предпроцессором на LUA от Kakos nonos-а. Последний, к сожалению, пока непонятно как переделать, чтобы транслировал не в формат RKA, а в формат RKS (понятно, лишние байты я забил, но как поменять порядок байтов в начальном, конечном адресе и КС, - неизвестно).

    Конечно удобно, что кусок на ассемблере встраивается прямо в PL/M код (это же делает и PLMX), но никакие имеющиеся исходники программ на PL/M не компилируются. Стандарт PL/M предусматривает наличие точки с запятой после оператора. Если это убрано (видимо подставляет препроцессор), то в одной строке д.быть всего один оператор.

    Кроме того, неудобно использовать TASM вместо нормального макроассемблера от Microsoft. С TASM непонятно как вставлять ассемблерные куски написанные в понятных мнемониках Z80. M80 позволяет, используя ключ .Z80 или .6502, вставлять куски в мнемониках Z80 или 6502. Возможно и TASM позволяет оперативно менять мнемоники в самом исходнике, но это неизвестно.

    Мне кажется, что компилятор PLMX из 1980 более выгоден, чем компилятор PL/M из 1973 года. Хорошо бы провести сравнение генерируемого кода двух компиляторов и решить, что лучше. Мне PLMX нравится больше, т.к без введения своих процедур сразу позволяет писать для CP/M, что удобнее. А главное, можно прилинковывать свои процедуры странслированные любым ассемблером, а не быть привязанным к убогому TASM, использующему моторолловские соглашения.

    Кстати, так и не понял, когда программисты всего мира собираются начать сбор денег на строительство памятника Гарри Килдэллу.
    Последний раз редактировалось barsik; 01.01.2018 в 16:17.

  10. #8
    Veteran Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,157
    Спасибо Благодарностей отдано 
    38
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    26 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А улучшенный PL/M, т.е PLMX с оптимизацией кода, ещё более эффективен.
    Не знал про PLMX, надо будет глянуть.

    Но самое главное в том, что PLMX работает в CP/M
    Сейчас уже, думаю не так важно, сейчас можно делвть кросс-компиляцию, писать в удобном редакторе и запускать эмуль хоть каждую секунду по F5.

    Но оригинальной версии компилятора PL/M для CP/M до сих пор нет.
    Тот, что я нашел, был странслирован с фортрана в си, а из него уже в екзешники. Можно поробовать эти си-файлы скомпилировать в си.

    Последний, к сожалению, пока непонятно как переделать, чтобы транслировал не в формат RKA, а в формат RKS
    Там во втором Lua-исходнике есть команда makerka. Она создает rka-начало и rka-конец. (golova.bin и hvost.bin) Потом эти части соединяются с бинарем программы (точнее двумя - один из оттранслированного пл/м, а другой - из ассемблерных вставок.)
    Можно переписать для специалиста/ориона, надо только знать формат их файлов.

    Кроме того, неудобно использовать TASM вместо нормального макроассемблера от Microsoft.
    Можно заменить, там особо сложного нет, луа скрипты несложные, как бейсик или паскаль.

    Возможно и TASM позволяет оперативно менять мнемоники в самом исходнике, но это неизвестно.
    В тасм можно подключать TAB файлы, описывающие ассемблер, и так можно кодить под любой проц.

    Мне кажется, что компилятор PLMX из 1980 более выгоден, чем компилятор PL/M из 1973 года.
    Да, я сейчас делаю транслятор паскаля, это будет еще удобнее, так как порог вхождения будет минимальный (почти все с паскалем баловались), а качество кода - на уровне (будет использоваться трансляция в си, а потом в асм, си будет использоваться от винксру, а оно хороший код генерирует.)

    А главное, можно прилинковывать свои процедуры странслированные любым ассемблером,
    Тут тоже можно, оттранслировать любым асмом, и подключить бинарь к исходнику, правда, с адресами будет морока, но можно. Но, в принципе, особо нет проблемы подключить другой асм, просто везде заменить Тасм на что-то другое, параметры вызова поменять, и все.
    Вот код компиляции
    Код:
    init()   
    os.execute('tasm -85 out1.asm >nul')   транслируем асмовый код  в бинарь, заодно в LST копируются адреса всех меток и переменных.
    getlabels()                                       Достаем метки из листинга
    os.execute('copy /b head.plm + out1.plm  fort.2 >nul')   Помещаем плм-исходник (приведенный к нужному виду, с добавленными метками из асма) в фаил, который компилирует плм-компилятор 
    doplm()                    Компилируем плм
    prsplm()                           Смотрим, были ли ошибки
    ff=io.open('fort.17')
    getvar()                         Достаем переменные, созданные плм-ом, чтоб вставить в асм исходник
    os.execute('copy /b vars.asm + out1.asm  out2.asm >nul')  Помещаем эти переменные в асм-исходник
    saveplm()                                Сохраняем откомпилированный плм-ом код в бинарь (он выдает хекс)
    ff:close()
    os.execute('tasm -b -85 out2.asm >nul')         Компилируем асм (опять, теперь с подключенными переменными из плм-а)
    prsasm()                 Смотрим, были ли ошибки
    makerka()                       Делаем заголовок и конец рка-файла
    os.execute('copy /b golova.bin + out2.obj + plm.obj + hvost.bin out.rka >nul')   Соединяем все (начало рка, асм-часть, плм-часть, конец рка)
    print('Done. '..counby..' bytes.')
    os.execute('del *.lst *.obj fort.* *.asm *.plm *.bin')
    Вот так. Благодоря этому можно писать на плм, на асме и переменные из асма доступны в плм и наоборот.

    - - - Добавлено - - -

    А это как раз потому, что на ассемблере программировать сложнее
    Да, я тоже забросил один хороший проект, потому что не осилил тысячи асмовых строк.
    Стандарт PL/M предусматривает наличие точки с запятой после оператора. Если это убрано (видимо подставляет препроцессор), то в одной строке д.быть всего один оператор.
    Да, препроцессор добавляет точку с запятой в конце.
    Можно писать несколько команд в строчку, ставя точку с запятой между ними.

  11. #9
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Kakos_nonos
    Да, я сейчас делаю транслятор Паскаля, это будет еще удобнее
    Было бы здорово.

    В 90-тые годы, когда использовал Паскаль в CP/M и MSDOS, он мне нравился больше, чем Си. Считаю себя пасквилянтом (плевать, что насильники обзывают пасквилянтов быдлокодерами), хотя с Си пришлось иметь дел намного больше. Кстати, все поделки на Паскале в CP/M без проблем (лишь переделкой Include-файлов в юниты) были конвертированы на TP для PC, а вот с Си так не вышло. Ещё позднее программки на TP без изменений были странслированы в Linux с помощью GPC (Gnu Pascal Compiler), который берёт исходники борландовского Паскаля (в действительности GPC не компилятор, а конвертор в Си).

    В CP/M с Паскалем было хуже, чем с Си. Турбо-Паскаль - почти игрушка, не линкует куски на ассемблере. А Паскаль МТ+ генерит раза в два более тормозной и объёмный код, чем Си (Aztec, BDS и Small). Был ещё паскаль PS80, но без доков. Альтернативы Паскалю МТ+ не было, а он менее эффективен, чем Си. Потому в CP/M все программисты для ОРИОНА предпочли Си. Знаю по каталогам в западных журналах в начале 90-тых, что существовала куча компиляторов Паскаля для Z80. Куда они делись?

    Если бы эффективный Паскаль был бы, я бы, естественно, предпочёл бы его, а не PL/M. Буду ждать Паскаля более эффективного или хотя бы с меньшей RUN-тайм библиотекой, чем Паскаль МТ+.
    Последний раз редактировалось barsik; 02.01.2018 в 04:12.

  12. #10
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    63
    Спасибо Благодарностей получено 
    108
    Поблагодарили
    93 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Музычка приятная. Это beeper или ВИ53?
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 51
    Последнее: 09.11.2019, 18:40
  2. Ответов: 17
    Последнее: 26.12.2015, 23:22
  3. Ответов: 0
    Последнее: 15.03.2015, 19:55
  4. Ответов: 0
    Последнее: 15.08.2010, 14:38
  5. Игра "Вера". Что еще можно ускорить?
    от axor в разделе Программирование
    Ответов: 45
    Последнее: 25.07.2005, 10:45

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •