PDA

Просмотр полной версии : Agon Light для начинающих



Shiny
24.04.2024, 18:32
Эмуляторы
astralaster,Сборка x86 (https://disk.yandex.ru/d/zkszlV70AXTZ-g)
fab-agon, x64 (https://github.com/tomm/fab-agon-emulator)
atralaster,x64 (https://github.com/astralaster/agon-light-emulator)

Программирование
Видео-уроки по ассемблеру (https://www.youtube.com/playlist?list=PL-WZxPxo1iaDnvHoGHXeCdKddYqwPaSUk)
Wiki (https://github.com/breakintoprogram/agon-docs/wiki)
AgDev x86 (https://disk.yandex.ru/d/6WXa-JqWm6jrrg)
Ассемблеры
ez80asm (https://github.com/envenomator/agon-ez80asm/releases)
Spasm-ng (https://github.com/alberthdev/spasm-ng/releases)
Еще примеры (https://github.com/schur/Agon-Light-Assembly)
Урок для ez80 Chibi Akumas (https://www.chibiakumas.com/ez80/)
статья nihirash о создании игры Rokky (https://nihirash.net/posts/making-of-rokky-pt2/)

C
исходный текст игры Snakes(z88dk) (https://github.com/TurBoss/agon-snakes)
описание платформы (https://github.com/z88dk/z88dk/wiki/Platform---AgonLight)

Софт
Список sabotrax (https://github.com/sabotrax/agon-software)

Документация
TheByteAttic (https://github.com/TheByteAttic/AgonLight/tree/main) понадобится Agon light Quick Start Guide.pdf и другое

FAQ/резерв/

прочие вопросы обсуждаем в этой теме. Уважайте друг друга, оффтоп и флейм не приветствуется.

andrews
25.04.2024, 12:25
Хотелось бы подробное описание архитектуры, включая графические возможности с примерами на ассемблере и/или С.

Shiny
25.04.2024, 13:05
Хотелось бы подробное описание архитектуры, включая графические возможности с примерами на ассемблере и/или С.

Примеры тут (https://www.youtube.com/playlist?list=PL-WZxPxo1iaDnvHoGHXeCdKddYqwPaSUk), в описании видео есть ссылка на GitHub с исходниками.
С описанием туго пока
https://habr.com/ru/articles/722234/
https://www.thebyteattic.com/p/agon.html

andrews
25.04.2024, 15:36
Пожалуйста, не надо ссылками отбиваться как из пулемета. Как хотя бы тогда из Бейсика стереть экран и нарисовать окружность каким-нибудь цветом?
CLS большими буквами вроде сработало. Походу CIRCLE у них в портированной версии вообще не поддержано, потому как на ввод без параметров отвечает не Syntax error, а Mistake. А вообще описание портированной версии Бейсика или отличия от оригинальной где-нибудь есть. Хотя этих версий как собак нерезанных. Так что на стандарт наверное глупо рассчитывать.

Shiny
25.04.2024, 15:47
Пожалуйста, не надо ссылками отбиваться как из пулемета. Как хотя бы тогда из Бейсика стереть экран и нарисовать окружность каким-нибудь цветом?
CLS большими буквами вроде сработало.

Для начала почитать документацию) Окружности у BBC нет в списке команд. Зато в списке есть CLS и CLG

andrews
25.04.2024, 15:52
Так я и прошу ссылку на документацию портированной версии Бейсика. А по поводу того, что CIRCLE нет...а как же это (http://www.rtrussell.co.uk/bbcwin/manual/bbcwin4.html)?

Тем же методом тыка PLOT есть! CLG это очистка графического экрана? То есть текстовый экран при этом сохраняется? Чем между ними переключаемся?
Вроде нечем и экран совмещенный.

ELLIPSE нет. Операций с матрицами непонятно. Поворотов графики нет. Спрайтов вроде бы тоже нет.

Играемся далее.
"Плавучка" есть. Стандартные функции есть. Гиперболических и экзотических скорее всего нет. Хотя 21 век, могли бы и добавить при такой огромной памяти.

Shiny
25.04.2024, 16:02
Нашел из архива
https://github-wiki-see.page/m/breakintoprogram/agon-docs/wiki/BBC-BASIC-for-Agon


PLOT
Syntax: PLOT mode,x,y

Plot supports the following operations:

4: Move
5: Line
80: Filled Triangle
144: Circle with radius specified either by x or y
148: Circle passing through point x,y

Фигня получилась.

Oleg N. Cher
25.04.2024, 16:03
На Agon нет текстового экрана в общепринятом смысле, Андрей. Там экран всегда графический

andrews
25.04.2024, 16:13
Там экран всегда графический
А зачем тогда два разных CLS и CLG?

Пикселей 640 на 480?( поддержанных VDU), надеюсь портированный Бейсик "плотно" на нем сидит? Можно ли к пикселям иметь программный доступ?
В смысле записи и считывания.

Сколько цветов на пиксель? Действительно ли не поддержаны спрайты и операции с ними?

"Плавучка" программная или аппаратная?

Какие вообще есть графические режимы? И в чем отличие с точки зрения программиста первой версии железа от второй?

Возможности sound-a. SOUND у меня нечто проиграл, а вот с WAIT не получилось. В VDU вроде встроенный RTC поддерживают. Хотя он же есть и в ESP32 и в eZ80.

Раз уж раздел для новичков решил не стесняться в вопросах.

Oleg N. Cher
25.04.2024, 16:15
Вот уж не знаю.
А Бейсик умеет работать в разных видео-режимах.

Shiny
25.04.2024, 16:26
Какие вообще есть графические режимы? И в чем отличие с точки зрения программиста первой версии железа от второй?

Раз уж раздел для новичков решил не стесняться в вопросах.

в вики описание - раздел VDP

andrews
25.04.2024, 16:33
В эмуляторе, который ты выкладывал, VDU не поддерживается ни в MOS, ни в Бейсике. Попросим Олега проверить на реале. Или кого-то еще, кто железом уже обзавелся, чтобы понять ограничения эмулятора.

Oleg N. Cher
25.04.2024, 16:36
Сколько цветов на пиксель?От 2 до 64 в зависимости от видеорежима.


Действительно ли не поддержаны спрайты и операции с ними?Да.


"Плавучка" программная или аппаратная?Только программная.


Какие вообще есть графические режимы?https://agonconsole8.github.io/agon-docs/VDP---Screen-Modes.html


И в чем отличие с точки зрения программиста первой версии железа от второй?Первая версия - это произведённая самим автором AgonLight. Вторая - от Olimex. По-моему, её также продвигает Mouser.

Для программиста отличий нет.

На базе Agon есть ещё игровая приставка Console8. Вот в ней отличия есть. Можно подключить джойстик(и?) и мышь.

Документации в инете по всему этому добру крайне мало. Что нарыл - тем делюсь.

https://www.youtube.com/watch?v=ENuuFFMVeC8
https://www.youtube.com/playlist?list=PLbGr1zhVbVUs4pt3SdBOQq3rxAnhXDWFw
https://github.com/pcawte/AgDev
https://agonconsole8.github.io/agon-docs/VDP.html
https://www.thebyteattic.com/p/agon.html
https://www.chibiakumas.com/ez80/

https://olimex.wordpress.com/tag/forth/

15 Graphics Viewport
https://www.youtube.com/watch?v=Z9Zr7XeocqM
09 Random number creation
https://www.youtube.com/watch?v=gN7gTYV5f6A
10 Registers
https://www.youtube.com/watch?v=YKstAsKodDw
08 Getting a pixel colour from VDP
https://www.youtube.com/watch?v=O_WOfrO7WlQ
07 Plotting graphics
https://www.youtube.com/watch?v=vh0cpcmHIqI
06 Displaying the registers
https://www.youtube.com/watch?v=IrY3dxc13LE
05 User Defined Graphics
https://www.youtube.com/watch?v=NemtPvF35mI

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


В эмуляторе, который ты выкладывал, VDU не поддерживается ни в MOS, ни в Бейсике.Agon-Fab должен всё поддерживать. Юзайте его.


Попросим Олега проверить на реале.Что проверить-то?

andrews
25.04.2024, 16:40
Что проверить-то?
команды VDU из описания работают?

Shiny
25.04.2024, 16:40
В эмуляторе, который ты выкладывал, VDU не поддерживается ни в MOS, ни в Бейсике. Попросим Олега проверить на реале. Или кого-то еще, кто железом уже обзавелся, чтобы понять ограничения эмулятора.

VDU 17,11 - выбор желтого цвета. Проверь.

andrews
25.04.2024, 16:44
Agon-Fab должен всё поддерживать. Юзайте его
не могу, он 64-битный. Вообще они оба на RUST реализованы. Прикололись как-будто над эмуляторщиками.
Это вообще неправильная тенденция. Девелоперу так удобней мультиплатформенность реализовать "а проблемы индейцев шерифа не касаются"

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


VDU 17,11 - выбор желтого цвета. Проверь
MOS тупо виснет. В Бейсике сработало. А вот чтение RTC не реализовали.
VDU 23, 0, 7, 0: Read the RTC

Shiny
25.04.2024, 16:45
хммм, в MOS прокатило, только цвет стал зеленым)

andrews
25.04.2024, 16:51
В Бейсике быстро отбивает в > без вывода. А в MOS зависатушки, а экран(бакгроунд) спустя какое-то время сделался серым. Это в Windows 7 32 bit.

Shiny
25.04.2024, 17:06
вечерком попробую Fab-Agon на 10ке х64.

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

Кстати
https://github.com/breakintoprogram/agon-mos/blob/main/src/vdp_protocol.asm
может поменять эту паршивку?

Oleg N. Cher
25.04.2024, 17:07
команды VDU из описания работают?

Работают.

80705

Может эмуль криво собрался?

Shiny
25.04.2024, 17:08
Прокатило, но ничего не выдало.

Oleg N. Cher
25.04.2024, 18:20
Действительно ли не поддержаны спрайты и операции с ними?Ой, упс. Поддержаны! Есть аппаратные спрайты. Ну как аппаратные. Они конечно выводятся программно через ESP32. Но прозрачно для пользователя.

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

Там, кстати, судя по видосам, эти спрайты вообще железно выводятся, можно даже Бейсик-листинг командой LIST получить, а спрайты будут поверх этого листинга. Так что, скорее всего, команда CLG как раз трёт спрайты.

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

3d Maze engine coming along... A few collectable objects to be found.

https://youtu.be/sLAT1Mhg8p0

Русскоязычная группа по Agon в телеге: t.me/agon_light (https://t.me/agon_light)

Кстати, nihirash (https://zx-pk.ru/members/469-nihirash.html) - вот кто хорошо знает Agon.

andrews
25.04.2024, 18:24
Работают.
VDU 23, 0, 7, 0: Read the RTC
Олег, вот эта как на железе в MOS и Бейсике работает?

Oleg N. Cher
25.04.2024, 18:25
В фейсбуке:

Agon™ (https://www.facebook.com/groups/970092390358810) - авторская группа по Agon от разработчика (The Byte Attic)Agon Programmers (https://www.facebook.com/groups/667325088311886/)

andrews
25.04.2024, 18:25
Кстати, nihirash - вот кто хорошо знает Agon
а кто Бейсик портировал неизвестно?

Oleg N. Cher
25.04.2024, 18:25
VDU 23, 0, 7, 0: Read the RTCА что такое RTC?

andrews
25.04.2024, 18:26
В фейсбуке
нам безопасней здесь

Shiny
25.04.2024, 18:26
на Fab-agon с версией 1.04 проходит команда VDU 23,0,7,0 выполняется, но не печатает сообщения.

Oleg N. Cher
25.04.2024, 18:27
а кто Бейсик портировал неизвестно?

Почему же неизвестно. Известно. Dean Belfield

https://github.com/breakintoprogram/agon-bbc-basic/

andrews
25.04.2024, 18:40
А что такое RTC?
часы реального времени. Естественно, чтобы их поддержать железкой надо было драйвера написать на ассемблере. А чтобы в эмуляторе - найти нужные DLL-ки наверное, а может прямой доступ запрещен и через службы я хз никогда не работал с этим.
Но у них в Бейсике даже и WAIT не реализован, хотя SOUND как-то работает.

Иногда только год, месяц, день, часы, минуты, иногда еще день недели и часовой пояс...у японцев может и что-то еще. Их там два в eZ80 и в ESP32. Про спрайты интересно, как с ними работать?

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


Почему же неизвестно. Известно. Dean Belfield
к сожалению он не описывает свой порт. Почему-то в документации ссылается только на BBC Basic for z80. Или eZ80 и ESP32 настолько слабо поддержаны? В общем куча вопросов.

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


VDU 23,0,7,0 выполняется, но не печатает сообщения
ну хотя бы не виснет. Хотя тогда нужно тест писать для RTC, чтобы убедится, что он поддержан.

Shiny
25.04.2024, 18:59
ну хотя бы не виснет. Хотя тогда нужно тест писать для RTC, чтобы убедится, что он поддержан.

А как вызов VDU вернет значения?

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

А, понял
https://github.com/breakintoprogram/agon-docs/wiki/MOS-API

andrews
25.04.2024, 19:03
В Бейсике наверное надо присвоить какой-нибудь переменной( скорее массиву)? А в MOS-е по идее должен просто вывести на консоль.

Ну что, есть желающие лезть в исходники Бейсика?

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


А как вызов VDU вернет значения?

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

А, понял
https://github.com/breakintoprogram/agon-docs/wiki/MOS-API

ну это на программном уровне. А на уровне команды по идее сама должна что-то выводить на консоль. Но тест написать с использованием MOS API можно.

Shiny
25.04.2024, 19:06
я бы на асме попробовал

andrews
25.04.2024, 19:10
я бы на асме попробовал
а как еще? У этого бейсика asm вставок судя по всему нет и выполняемые коды тоже не вставляются. Да я вообще на своей памяти только один такой Бейсик знал, от Искры-226. Там был модуль на 8080 и для него можно было в Бейсик-программу коды 8080 вставлять.

Было бы прикольно, если была бы версия бейсик-компилятора, которая линковалась с объектными модулями и библиотеками. А то что от Zilog, там исходников не раздобудешь и никак не допилишь. Только библиотеки если делать и из .hex .bin получать.

Shiny
25.04.2024, 19:21
а как еще?

Есть видеоуроки и примеры в виде исходников. Я бы от этого танцевал.

Насчет компиляции не знаю, может это поможет?
https://github.com/breakintoprogram/agon-bbc-basic-adl

andrews
25.04.2024, 19:40
Хорошо. Оставим пока Бейсик и попробуем запустить asm, который ты поместил в эмулятор. Как это сделать?


LOAD ez80asm.bin
RUN

как в случае с Бейсиком не прокатывает. К тому же надо как-то ему файл с исходником на вход подсунуть?
C tinyctx.bin аналогичный вопрос.



LOAD ez80asm.bin plot.asm
RUN

тоже не дает результата.



LOAD tinyctx.bin hello.ctx
RUN

просто виснет и как выйти в MOS непонятно.

Shiny
25.04.2024, 19:47
Создать папку mos и кинуть в нее ассемблер и nano(редактор). Тогда набрать ez80asm src.asm и заработает.

В видеоуроках есть часть насчет этих самых бинарей.

Oleg N. Cher
25.04.2024, 19:56
У этого бейсика asm вставок судя по всему нетНу вот, кстати, конкретно в этом агонском BBC Basic'е возможны асм-вставки: https://youtu.be/13zfEc67oYU?t=1013. Выглядит это извратно ;)


Было бы прикольно, если была бы версия бейсик-компилятора, которая линковалась с объектными модулями и библиотеками. А то что от Zilog, там исходников не раздобудешь и никак не допилишь. Только библиотеки если делать и из .hex .bin получать.Увы, но да.

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

Прошу извинить мой отсутствующий умеренный интерес к железу Agon, GPIO, MOS и VDP. Это для меня вынужденная часть. И учесть это, когда будете спрашивать у меня что-то по Agon. Я не железячник, я не ассемблерщик. Я люблю языки высокого уровня. С удовольствием писал бы для Agon на готовых библиотеках, но походу придётся их писать всё-таки мне.

andrews
25.04.2024, 20:18
Создать папку mos и кинуть в нее ассемблер и nano(редактор). Тогда набрать ez80asm src.asm и заработает
да, сработало. Но загружать результат plot.bin и выполнять приходится как бейсик.

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



Прошу извинить мой отсутствующий умеренный интерес к железу Agon, GPIO, MOS и VDP. Это для меня вынужденная часть. И учесть это, когда будете спрашивать у меня что-то по Agon. Я не железячник, я не ассемблерщик. Я люблю языки высокого уровня. С удовольствием писал бы для Agon на готовых библиотеках, но походу придётся их писать всё-таки мне.
Олег, напишите пожалуйста, как запустить tinyctx.bin ctx.bin, чтобы он откомпилировал hello.ctx ?
Его тоже надо размещать в MOS директорий?
hello.bin, полученное через батник под Win запускается как бейсик.
То есть


LOAD hello.bin
RUN

и выводит на консоль, что положено.

Shiny
25.04.2024, 20:19
Наверное, есть какой-то хитрый способ)


Кстати, в проектах на github упоминается ZDS II. Вчера скачал ZDS2 ez80Acclaim! - удобная штука. С компиляцией сплошные дебри, но можно создать проект для ассемблера, написать исходник, скомпилировать и гонять в симуляторе до посинения)

andrews
25.04.2024, 20:39
Вчера скачал ZDS2 ez80Acclaim! - удобная штука
а у меня не получилось. Опять менюшки не активные. Но поковырять можно конечно. Только все-равно про Agon они ничего не знают. Кому-то надо библиотеки и заголовочные файлы написать. Да и отладка будет без вывода на консоль Agon.

Shiny
25.04.2024, 20:46
https://www.zilog.com/index.php?option=com_zcm&task=view&soft_id=54&Itemid=74
менюшки доступны, регистрацию не требует.

andrews
25.04.2024, 20:54
А хотя да. Из отдельного файла не строит. А проект создается не через Project меню сверху, а сбоку через File->New Project. Вроде даже и С -файлы дает билдить.

Shiny
25.04.2024, 21:00
вот с Си я погряз почему-то( Требуется масса файлов для компиляции, и ничего не вышло(

гугл выдал кучу компиляторов Си, но они скомпилированы под х64. Можно попробовать собрать, но не факт, что получится.

Oleg N. Cher
25.04.2024, 21:07
Олег, напишите пожалуйста, как запустить tinyctx.bin ctx.bin, чтобы он откомпилировал hello.ctx ?Прикладные программы для MOS компилируются с адреса $40000. При этом они могут быть устроены внутри как в режиме совместимости с Z80, так и в 24-битном режиме ADL (eZ80). TinyContext пока поддерживает только режим Z80. Сам компилятор загружается тоже по адресу $40000 как прикладная программа:

LOAD ctx.bin
RUN . hello
LOAD hello.bin
RUN

В версии MOS от 1.04 и выше появилась возможность положить ctx.bin в папку bin и запускать его:

ctx hello
LOAD hello.bin
RUN

Вы можете положить hello.bin в папку bin и тоже запускать его командой hello

Эмулятор FAB-Agon поддерживает фичу с папкой bin. agon-light-emulator v.0.5.0 не поддерживает.

Системные программы MOS, которые обитают в папке mos, компилируются с адреса $B0000 и работают в ограниченном пространстве памяти. nihirash сказал, что для них отведено всего 32 Кб. Поэтому я решил не делать компилятор таким образом. Т.е. можно положить ctx.bin в папку mos и запускать его оттуда, но он может что-то сломать, т.к. использует 64 Кб.

А поскольку он собран в режиме совместимости с Z80, то старший байт адреса проигнорен. Поэтому и ctx.bin, и hello.bin запускаются из папки mos.

А не, стопэ. ctx не будет работать из папки mos. Да, я там сделал привязку к адресу $40000. Всего одну.

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

Андрей, у меня в планах есть сделать подсистему AgDev для написания софта на Обероне. Она будет работать через LLVM.

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

Я, в общем-то могу Вам сбросить то, что начал делать, оно уже даже как-то слегка работает. Но мне не очень удобно коммуницировать тут на форуме, тем более, оно всё ещё не доделано.

Oleg N. Cher
26.04.2024, 02:11
80710

Oleg N. Cher
26.04.2024, 04:57
Доки по Agon, весьма полезные:

https://github.com/AgonConsole8/agon-docs
Замутил некую базовую поддержку строк (https://github.com/Oleg-N-Cher/Context/commit/0cb9b7e0f425f2de8c174ac2286d2f4f522d3aae) в TinyContext. Пока не очень нравится как сделал. У Андрея Хохлова используется тип char[], у меня пока word.

80711

Shiny
26.04.2024, 06:57
Обновил MOS до 1.04, эмулятор перестал работать - выдает на все команды SDCard failure.
Вернул версию - работает.

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

Дальше непонятно по примеру(plot.asm)


SET_MODE 8


в доке указано только

8 320 240 64 60hz

Меняю SET_MODE 2, получаю бинарь размером 0 байт.

andrews
26.04.2024, 10:54
Вернул версию - работает
1.03 работает. Спасибо за предупреждение.

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


Меняю SET_MODE 2, получаю бинарь размером 0 байт
сырое всё. Багов полно. Плохо, если бросят их исправлять.

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


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

Shiny
26.04.2024, 10:58
мда, сегодня день не задался(
Взял ez80asm, кое-как скомпилил в VS2017, отдал ребятам проверить, те говорят. что кашперский блокирует. Может, это и есть вменяемый ассемблер.

Oleg N. Cher
26.04.2024, 14:48
Олег, не нужно ломать Ваши планы. Тем более видите, доступный мне эмулятор местами косячный. Срочности у меня никакой нет. Время всё вылечит(если люди продолжат работу) и тогда насладимся работой софта без багов.Планов, в общем-то, никаких нет, но что бы ни делал Олег - получается Оберон. А из Олега хотят выжать асм ;)
Объясню сложности с подсистемой. Я пока не понял как вызывать Си в командной строке. Там (в AgDev для LLVM) есть очень суровый мейкфайл со множественными включениями других мейкфайлов, и по нему для меня всё крайне туманно.

Андрей, а нет возможности установить 64-битную винду? Знаете, я в своё время был уверен, что 64-битка намного тормознее. Но потом посидел на XP64 и увидел, что она даже лучше 32-битной работает. Да и 64-битная 7 очень недурна.

andrews
26.04.2024, 15:19
а нет возможности установить 64-битную винду?
Да пришла как-то раз по моему безрассудству 64-битная Windows10 c недонетбуком Tbook10s. Только там памяти встроенной очень мало. Хотя на эмулятор конечно можно наскрести. Я конечно же как и все мы не предполагал в 2020г. что дальше произойдет с платежами. в валюте. А теперь вот не знаю, когда этот недонетбук превратится в кирпич( ведь нельзя исключать такую возможность). На десктопе же все надежно кастрировано так, что даже инопланетяне не смогут вмешаться :)
С Linux и ему подобными ОС наелся на всю оставшуюся жизнь. Поэтому по ОС "я в бункере" :) Собственно и z80 line ( и прочие ретро)этим всю жизнь привлекают. Стабильность. Надежность. Самоконтроль.

Shiny
26.04.2024, 15:26
Выражаясь чужим языком недоокружность


10 X=0
20 Y=128
30 FOR I=0 TO 512
40 X=X+Y/64
50 Y=Y-X/64
60 PLOT 69,X+200,Y+200
70 NEXT I

Y -радиус
в строке 30 число итераций, но это не точно.

Shiny
26.04.2024, 18:09
Запустил эмуль astralaster'а х64. Заменил MOS 1.04 - та же ошибка.
Закинул запрос на гитхабе, но вряд ли что-то решится.

andrews
27.04.2024, 14:26
Научился билдить для симулятора ZDSII. Открываем в проектах File->Open Project -> ...\samples\Quick Start\Simulator.zdsproj
Не забываем в Project->Settings в Debug Tool Current выбрать Simulator. Строим проект из трех файлов:
main.c


#include <stdio.h>
#include "QuickStart.h"
#include "console.h"


void main(void)
{
int ch;

system_init();

printf("Hello World!\n");
while (1)
{
if (kbhit())
{
ch = getchar();
putchar(ch);
}
}
}


console.c


#include <ez80.h>
#include "console.h"


extern unsigned long SysClkFreq;

/* UART parameters */
#define UART_BAUDRATE 57600
#define UART_DATA_BITS 8
#define UART_PARITY 0
#define UART_STOP_BITS 1
#ifdef _SIMULATE
#define UART 0
#else
#define UART 0
#endif

/* UART control register definitions */
#if (UART == 1)
#ifdef _EZ80190
#define UZI_CTL UZI1_CTL
#define UART1_BRG_L BRG1_DLR_L
#define UART1_BRG_H BRG1_DLR_H
#endif
#define UART_BRG_L UART1_BRG_L
#define UART_BRG_H UART1_BRG_H
#define UART_RBR UART1_RBR
#define UART_THR UART1_THR
#define UART_IER UART1_IER
#define UART_IIR UART1_IIR
#define UART_FCTL UART1_FCTL
#define UART_LCTL UART1_LCTL
#define UART_MCTL UART1_MCTL
#define UART_LSR UART1_LSR
#define UART_MSR UART1_MSR
#define UART_SPR UART1_SPR
#define PORT_DR PC_DR
#define PORT_DDR PC_DDR
#define PORT_ALT1 PC_ALT1
#define PORT_ALT2 PC_ALT2
#else
#ifdef _EZ80190
#define UZI_CTL UZI0_CTL
#define UART0_BRG_L BRG0_DLR_L
#define UART0_BRG_H BRG0_DLR_H
#endif
#define UART_BRG_L UART0_BRG_L
#define UART_BRG_H UART0_BRG_H
#define UART_RBR UART0_RBR
#define UART_THR UART0_THR
#define UART_IER UART0_IER
#define UART_IIR UART0_IIR
#define UART_FCTL UART0_FCTL
#define UART_LCTL UART0_LCTL
#define UART_MCTL UART0_MCTL
#define UART_LSR UART0_LSR
#define UART_MSR UART0_MSR
#define UART_SPR UART0_SPR
#define PORT_DR PD_DR
#define PORT_DDR PD_DDR
#define PORT_ALT1 PD_ALT1
#define PORT_ALT2 PD_ALT2
#endif

/* UART control register bit definitions */
#ifdef _EZ80190
#define UZI_MODE_UART (1 << 0)
#endif

#define LCTL_DLAB (1 << 7)
#define LSR_THRE (1 << 5)
#define LSR_DR (1 << 0)
#define MCTL_RTS (1 << 1)
#define MCTL_DTR (1 << 0)

#define FCTL_TRIG_1 (0 << 6)
#define FCTL_TRIG_4 (1 << 6)
#define FCTL_TRIG_8 (2 << 6)
#define FCTL_TRIG_14 (3 << 6)
#define FCTL_CLRTXF (1 << 2)
#define FCTL_CLRRXF (1 << 1)
#define FCTL_FIFOEN (1 << 0)

/* UART macros */
#define LCTL(d, p, s) (((d-5)&3) | (((s-1)&1)<<2) | (p&3))

#define RX_DATA_READY() (UART_LSR & (unsigned char)LSR_DR)
#define TX_FIFO_READY() (UART_LSR & (unsigned char)LSR_THRE)

#define KBHIT() (RX_DATA_READY() ? 1 : 0)
#define GETCH() (UART_RBR)
#define PUTCH(ch) (UART_THR = ch)

#define CONSOLE_END_LINE_CRLF 1

#define LF '\n'
#define CR '\r'


/* UART initialization */
void console_uart_init(void)
{
volatile unsigned char tmp;
union {
unsigned short word;
unsigned char byte[2];
} brg;

#ifdef _EZ80190
UZI_CTL = UZI_MODE_UART; /* Set UZI 0 device to UART mode */
#endif

/* calculate baudrate generator value */
brg.word = (SysClkFreq + (8UL * (unsigned long)UART_BAUDRATE)) /
(16UL * (unsigned long)UART_BAUDRATE);

/* set baudrate generator */
UART_LCTL |= LCTL_DLAB;
UART_BRG_H = brg.byte[1];
UART_BRG_L = brg.byte[0];
UART_LCTL &= ~LCTL_DLAB;

/* set line control */
UART_LCTL = LCTL(UART_DATA_BITS, UART_PARITY, UART_STOP_BITS);

/* clear any pending status information */
tmp = UART_LSR;
tmp = UART_MSR;
tmp = UART_IIR;
tmp = UART_RBR;

/* configure fifo for 14 bytes; clear fifos; enable fifo */
UART_FCTL = FCTL_TRIG_14 | FCTL_CLRTXF | FCTL_CLRRXF | FCTL_FIFOEN;

/* set modem control */
UART_MCTL = MCTL_RTS | MCTL_DTR;

/* configure port */
PORT_ALT2 |= 0x0F;
PORT_ALT1 &= 0xF0;
PORT_DDR |= 0x0F;
}


/* Console port initialization */
void console_init(void)
{
console_uart_init();
}


int putch(int ch)
{
if (CONSOLE_END_LINE_CRLF && (ch == LF))
{
while (!TX_FIFO_READY());
PUTCH(CR);
}

while (!TX_FIFO_READY());
PUTCH(ch);

return (ch);
}


int kbhit(void)
{
return (KBHIT());
}


int getch(void)
{
while (!RX_DATA_READY());
return (GETCH());
}


int getche(void)
{
return (putch(getch()));
}


Simulator.c


#include <stdio.h>
#include "QuickStart.h"
#include "console.h"


void system_init(void)
{
console_init();
}


Запускаем Debug ->Go
и видим результат вывода в консоль View->Debug Window->Simulatated Uart Output

Было бы неплохо теперь вместо консоли подключить симулятор консоли Agon-а. Но как это сделать, не залезая в код ZDSII? Есть идеи?

Shiny
27.04.2024, 15:22
менять код функции MOS в обмен на стандартные.

andrews
27.04.2024, 16:07
Покажите, пожалуйста, как?

Shiny
27.04.2024, 16:17
Покажите, пожалуйста, как?

Я в сях не шарю, тем более не копал в нюансы ZDS2. Накидал прогу на асме с комментариями. Жми Esc для выхода, Enter не обрабатывается.



.assume adl=1 ; ez80 ADL memory mode
.org $40000 ; Старт программы

jp start_here ; переход на начало кода

.align 64 ; заголовок программы MOS
.db "MOS",0,1


start_here:

push af ; сохранить все регистры - зачем?
push bc
push de
push ix
push iy

; ------------------
; поехали

; печать текста
ld hl, string ; HL=адрес строки в памяти
ld bc,0 ; BC=длина строки, или если BC=0, то ограничитель строки - байт 0
ld a,0 ; A=ограничитель
rst.lil $18 ; Вызов MOS API

startp:
ld a, $08 ; 0x08: mos_sysvars Возвращает IXU=указатель системных переменных
rst.lil $08 ; RST 08h: Выполнить команду MOS

getkey:
ld a, (ix + $05) ; получить код ASCII
or a
jr z,getkey ;0 - не нажата клавиша
cp 27
jr z, EXIT_HERE ; Если нажата Esc, то выход
ld (ix+5),0 ; моя отсебятина - записать 0 в переменную
rst.lil 10h ; печать символа с кодом
jr startp ; переход на начало

; ------------------
; Выход из программы
EXIT_HERE:
pop iy ; Восстановить все регистры
pop ix
pop de
pop bc
pop af
ld hl,0 ; возвращаемое значени 0 - нет ошибок
ret

; ------------------

string:
.db "Hello Agon World\r\n",0



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

Кстати, заявлено, что у этого эмуля есть отладчик. Только не разберусь с брякпойнтами. Может, не так пишу?

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

ага, отладчику надо добавлять $ для шестнадцатиричных чисел.

andrews
27.04.2024, 19:05
Тогда напишите как создавать сей проект в ZDS2( что выбирать в менюшках) или это для ассемблера MOS?

Shiny
27.04.2024, 19:26
Тогда напишите как создавать сей проект в ZDS2( что выбирать в менюшках) или это для ассемблера MOS?

да, то MOS.
в ZDS2 выбрать File->New Project.., указать Project Type "Assembly Only". Только синтаксис отличается

Shiny
28.04.2024, 08:19
andrews, глянь
https://disk.yandex.ru/d/ESFLC1FAyKx_EQ
папка AGexamples компилирует пример, examples - нифига
sprite-demos собирается, но на экране только часть(

andrews
28.04.2024, 10:30
Накидал прогу на асме с комментариями
а двойная печать символа только у меня в эмуляторе?

Shiny
28.04.2024, 10:44
сорян, ступил. Тот же код для MOS


.assume adl=1 ; ez80 ADL memory mode
.org $40000 ; Старт программы

jp start_here ; перенход на начало кодв

.align 64 ; заголовок программы MOS
.db "MOS",0,1


start_here:

push af ; сохранить все регистры - зачем?
push bc
push de
push ix
push iy

; ------------------
; поехали

; печать текста
ld hl, string ; HL=адрес строки в памяти
ld bc,0 ; BC=длина строки, или если BC=0, то ограничитель строки - байт 0
ld a,0 ; A=ограничитель
rst.lil $18 ; Вызов MOS API

startp:
; ld a, $08 ; 0x08: mos_sysvars ВозвращаетIXU=указатель системных переменных
; rst.lil $08 ; RST 08h: Выполнить команду MOS

getkey:
; ld a, (ix + $05) ; получить код ASCII
xor a
rst.lil 8 ; 0x00: mos_getkey
or a
jr z,getkey ;0 - не нажата клавиша
cp 27
jr z, EXIT_HERE ; Если нажата Esc, то выход
; ld (ix+5),0 ; моя отсебятина - записать 0 в переменную
rst.lil 10h ; печать символа с кодом
jr startp ; переход на начало

; ------------------
; Выход из программы
EXIT_HERE:
pop iy ; Восстановить все регистры
pop ix
pop de
pop bc
pop af
ld hl,0 ; возвращаемое значени 0 - нет ошибок
ret

; ------------------

string:
.db "Hello Agon World\r\n",0

andrews
28.04.2024, 10:57
@andrews, глянь
там я вижу ez80-clang "заточенный" под agon, работает под Win32, как раз то, что мне нужно.
Теперь портируй всё, что в Agon по памяти и быстродействию влезет.

Shiny
28.04.2024, 10:59
Там все тулзы собраны под win32. Только компиляция прошла непонятно.

andrews
28.04.2024, 16:10
Нормально всё. Поставьте для чистоты эксперимента нужные пути для BIN, INCLUDE, LIB в свои системные переменные впереди списков.
Теперь удалите файлы из директория ...\agdev\AgExamples\hello_world
Затем ( я во всяком случае чтобы не путались все прочие make.exe на моем компе) переименуйте make.exe из директория agdev\bin в agmake.exe
И наконец запускаем в директории ...\agdev\AgExamples\hello_world команду agmake. Должно построиться всё без ошибок, а в директории ...\agdev\AgExamples\hello_world
появятся свежие файлы: DEMO.bin и DEMO.map

Ну а дальше как всегда. Копируем на sdcard и запускаем


LOAD DEMO.BIN
RUN

и наблюдаем результат на консоли. Hello world! на С работает.

Shiny
28.04.2024, 17:23
примеры на асме странные. При запуске plot.asm эмулятор ругается unsupported plot mode и не рисует линии и прямоугольник

Oleg N. Cher
28.04.2024, 17:35
Там часть примеров не для Agon, а для калькулятора.

Shiny
28.04.2024, 20:05
Намалевал вывод 64 цветов. Любуйтес.

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

хм, а если выбрать режим 2(SET MODE 2), то цвета другие

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

https://disk.yandex.ru/d/PgeI5ZbwGLOwIQ

таки скомпилировал Fab-agon под х86. Но это падла требует не пойми какие .dll и размер выходит немаленький. Попробовать вычислить?(:

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

типа финал
https://disk.yandex.ru/d/8hCypQPysEOCZw

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

Итоги теста:
исходник plot.asm работает - рисуется линия и прямоугольник
ez80asm 1.6 повис, заменил на 1.4

andrews
28.04.2024, 20:49
исходник plot.asm работает - рисуется линия и прямоугольник
да, у меня сразу всё работало с 1.4

Цвета не впечатлили. Такое ощущение что выводится 8 цветов ярких, 8 темных, а потом снова все повторяется

Shiny
28.04.2024, 20:56
Да, с режимом 16 цветов загрубили) с 64 цвета повеселее

andrews
28.04.2024, 22:01
В общем есть и слабоватое место у этого компа. Обмен между eSP32 и eZ80 идет по последовательному( хотя и скорострельному >1Mb/sec) каналу. Может реальное железо и пошустрее чем эмуль.
Там и саунд, и графика, и текст и клавиатура. Поэтому для программиста ограничения есть. Не такие как в ZX Spectrum, но свои тоже есть.

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


с 64 цвета повеселее
да реально только 16 цветов использовать имхо.

Oleg N. Cher
28.04.2024, 22:33
Почему только 16? Просто есть режимы 16-цветные, а есть 64-цветные.

Последовательное соединение это не так плохо. Там графика - тайлы, спрайты - грузятся предварительно в видеопамять. Так что переброска графики происходит только при инициализации. Если сравнить с тем же NES с 256 тайлами 8x8 в ПЗУ (без мапперов), то в Agon всё намного веселее.

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

Я прикидывал как лучше будет портировать на Agon игры с ZX. В Agon есть видеорежим 512x384, фактически удвоенный Спектрум. Но, вероятно, будут накладные расходы по графике, хотя вряд ли серьёзные. И ещё этот режим уже назван устаревшим. Так что я бы юзал 320x240, 16 цветов (в виде бонуса палитры можно настроить не столь кислотно). Юзать окно 256x192, а остальное нерабочее пространство пустить под бордюр. Будет аутентичненько ;)

^m00h^
28.04.2024, 22:35
А если просто написать эмулятор спектрума для Агоня ?

Oleg N. Cher
28.04.2024, 22:47
Цвета не впечатлили. Такое ощущение что выводится 8 цветов ярких, 8 темных, а потом снова все повторяетсяТак цвета же можно настраивать кастомно. Хотя я пока не пробовал.

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


А если просто написать эмулятор спектрума для Агоня ?Вероятно, на слое eZ80 эмулятор Спектрума не получится из-за технических ограничений. Проц-то быстрее в 5 раз, и команды наверняка выполняются в других тактовках. Но можно запихать эмуль Спека в ESP32. Если кто-то займётся (чур, не я)

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

На слое eZ80, вероятно, и с эмуляцией экрана будут сложности. Нужно чтобы проц передавал видеоданные ESP32, а не просто записывал в память, как в Спеке. Вряд ли это можно повесить на DMA (даже не знаю, есть ли там DMA, но вряд ли). Надо распросить Нихираша как он себе это представляет, и представляет ли.

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

Впрочем, MSX как-то ограниченно сэмулировали.

MSX BIOS + BASIC on the Agon (https://www.youtube.com/watch?v=xqkY-FvFsC0)Kings Valley on the Agon Light (https://www.youtube.com/watch?v=oVHdhVJTzRo)CP/M and MSX running on Agon Light (https://www.youtube.com/watch?v=Ut0NBbgjizI)

Shiny
29.04.2024, 06:16
да реально только 16 цветов использовать имхо.

Уж не в играх ли?

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


https://www.youtube.com/watch?v=_2ZBuRnr8BM
Кстати о цветах.
Наверное, описание македонцы готовили)

andrews
29.04.2024, 09:28
А как обстоят дела со шрифтами? Можно ли в частности русифицировать?

Shiny
29.04.2024, 09:47
Есть такая команда загрузка UDG. И утилиты где-то мелькали.

andrews
29.04.2024, 10:56
Утилиты эти (https://github.com/lennart-benschop/agon-utilities)?
Вот пример с турецкой кодовой страницей
"// Like CP 1252, but for Turkish. Replaces some Icelandic letters with
// Turkish ones. Also used as iso8859-9 and latin5
"
как на русскую турецкую заменить?80730
Или может как добавить русскую?

Кто умеет создайте пожалуйста группу на этом форуме "Любители компьютера Agon Light", чтобы можно было вступить в неё.

Shiny
29.04.2024, 11:03
фиг его знает
Если понадобятся шрифты, то бери тут(1251, 866)
https://g0blinish.ucoz.ru/index/shrifty/0-25

Oleg N. Cher
29.04.2024, 16:23
Или может как добавить русскую?В одном примере файла autoexec.txt для MOS видел такую команду:

SET KEYBOARD 0

, которая вроде бы устанавливает британскую то ли раскладку, то ли кодовую страницу. Наверное есть смысл покопать где-то здесь.

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


А как обстоят дела со шрифтами? Можно ли в частности русифицировать?Точно можно. Там можно задать произвольный шрифт 8x8 всех печатных символов, включая те, что с кодами > 127

В новой версии VDP можно юзать шрифты других размеров.

Shiny
29.04.2024, 19:06
Или смотри исходники MOS - внесено 18 раскладок. Так что неизвестно, как поменять данные

Oleg N. Cher
30.04.2024, 01:59
Сделал в компиляторе TinyContext опции задания адресов данных и кода:

80732

andrews
30.04.2024, 16:38
фиг его знает
Если понадобятся шрифты, то бери тут(1251, 866)
https://g0blinish.ucoz.ru/index/shrifty/0-25

Эти не подошли для программульки font.asm



;
; Title: Font - Main
; Author: Lennart Benschop
; Created: 30/12/2022
;
; Modified 09/04/2024 adapter to ez80asm

.ASSUME ADL = 1

INCLUDE "mos_api.inc"

ORG $b0000 ; Is a moslet

MACRO PROGNAME
ASCIZ "font.bin"
ENDMACRO

INCLUDE "init.inc"


; A program to load an 8x8 font from a file into the VDP. Only codes 32..126 and 128..255 will be loaded.
; Optionally show the font just loaded.
;
; The main routine
; IXU: argv - pointer to array of parameters
; C: argc - number of parameters
; Returns:
; HL: Error code, or 0 if OK
;
_main: XOR A
LD (will_show), A
LD A, C
CP #2
JR Z, main1 ; Only load font, don't show
CP #3
JR NZ, main_usage
LD A, 1
LD (will_show),A ; Additional parameter present, do not check.
JR main1
main_usage:
LD HL, s_USAGE ; Number of args != 3, print usage string and exit
CALL PRSTR
LD HL, 19
RET
main1: LD HL, (IX+3) ; source file name
LD DE, font_buf
LD BC, 4096
MOSCALL mos_load
OR A
JR Z, main2
PUSH AF
LD HL, s_ERROR_SRC ; source file not opened, error
CALL PRSTR
POP AF
LD HL, 0
LD L, A
RET
main2: ; Font file loaded, now try to get them into VDP. We will also write char 127, but it cannot be shown.
LD E, 8 ; Assume font has 8 rows, always
LD C, 32
LD HL, font_buf + $100 ; Start at space.
main_fontloop: LD A, 23
RST.LIL 10h ; VDU 23
LD A, C
RST.LIL 10h ; followed by character code.
LD B, E
@@: LD A, (HL)
RST.LIL 10h ; followd by 8/16 bitmap bytes from font.
INC HL
DJNZ @B
INC C
LD A, C
AND A
JR NZ, main_fontloop ; End loop if encremented to 0
; Font is now loaded into VDP.
LD A, (will_show)
AND A
JR Z, main_end
; Show the font in 7 rows of 32 chars each.
LD C, 32
main_showloop: LD B, 32
main_showloop2: LD A, C
CP 127
JR Z, @F ; We will skip 127 when showing.
RST.LIL 10h ; It's at the endo of the row, no need to show something else instead..
@@: INC C
DJNZ main_showloop2 ; Inner loop, print 32 chars per row
LD A, 13
RST.LIL 10h
LD A, 10
RST.LIL 10h ; print newline after row.
LD A, C
AND A
JR NZ, main_showloop
main_end: LD HL, 0
RET


; Print a zero-terminated string
; Parameters:
; HL: Address of string (24-bit pointer)

;
PRSTR: LD A,(HL)
OR A
RET Z
RST.LIL 10h
INC HL
JR PRSTR

;
; Text messages
;
s_ERROR_SRC: DB " Cannot load font file\r\n", 0
s_USAGE: DB " Usage: font <fontfile> [show]\r\n", 0
c_MORE: DB 28 ;String length


; RAM
;

will_show: DS 1
font_buf: DS 2048


Получаем ее трансляцией в /MOS


*ez80asm font.asm

font.bin ( не забывая скопировать в /MOS mos_api.inc


;
; Title: AGON MOS - API for user projects
; Author: Dean Belfield
; Created: 03/08/2022
; Last Updated: 11/11/2023
;
; Modinfo:
; 05/08/2022: Added mos_feof
; 09/08/2022: Added system variables: cursorX, cursorY
; 18/08/2022: Added system variables: scrchar, scrpixel, audioChannel, audioSuccess, vpd_pflags
; 05/09/2022: Added mos_ren, vdp_pflag_mode
; 24/09/2022: Added mos_getError, mos_mkdir
; 13/10/2022: Added mos_oscli
; 23/02/2023: Added more sysvars, fixed typo in sysvar_audioSuccess, offsets for sysvar_scrCols, sysvar_scrRows
; 04/03/2023: Added sysvar_scrpixelIndex
; 08/03/2023: Renamed sysvar_keycode to sysvar_keyascii, added sysvar_vkeycode
; 15/03/2023: Added mos_copy, mos_getrtc, mos_setrtc, rtc, vdp_pflag_rtc
; 21/03/2023: Added mos_setintvector, sysvars for keyboard status, vdu codes for vdp
; 22/03/2023: The VDP commands are now indexed from 0x80
; 29/03/2023: Added mos_uopen, mos_uclose, mos_ugetc, mos_uputc
; 13/04/2023: Added FatFS file structures (FFOBJID, FIL, DIR, FILINFO)
; 15/04/2023: Added mos_getfil, mos_fread, mos_fwrite and mos_flseek
; 19/05/2023: Added sysvar_scrMode
; 05/06/2023: Added sysvar_rtcEnable
; 03/08/2023: Added mos_setkbvector
; 10/08/2023: Added mos_getkbmap
; 11/11/2023: Added mos_i2c_open, mos_i2c_close, mos_i2c_write and mos_i2c_read
; 09/04/2024: Adapter to ez80asm
; VDP control (VDU 23, 0, n)
;
vdp_gp: EQU 80h
vdp_keycode: EQU 81h
vdp_cursor: EQU 82h
vdp_scrchar: EQU 83h
vdp_scrpixel: EQU 84h
vdp_audio: EQU 85h
vdp_mode: EQU 86h
vdp_rtc: EQU 87h
vdp_keystate: EQU 88h
vdp_logicalcoords: EQU C0h
vdp_terminalmode: EQU FFh

; MOS high level functions
;
mos_getkey: EQU 00h
mos_load: EQU 01h
mos_save: EQU 02h
mos_cd: EQU 03h
mos_dir: EQU 04h
mos_del: EQU 05h
mos_ren: EQU 06h
mos_mkdir: EQU 07h
mos_sysvars: EQU 08h
mos_editline: EQU 09h
mos_fopen: EQU 0Ah
mos_fclose: EQU 0Bh
mos_fgetc: EQU 0Ch
mos_fputc: EQU 0Dh
mos_feof: EQU 0Eh
mos_getError: EQU 0Fh
mos_oscli: EQU 10h
mos_copy: EQU 11h
mos_getrtc: EQU 12h
mos_setrtc: EQU 13h
mos_setintvector: EQU 14h
mos_uopen: EQU 15h
mos_uclose: EQU 16h
mos_ugetc: EQU 17h
mos_uputc: EQU 18h
mos_getfil: EQU 19h
mos_fread: EQU 1Ah
mos_fwrite: EQU 1Bh
mos_flseek: EQU 1Ch
mos_setkbvector: EQU 1Dh
mos_getkbmap: EQU 1Eh
mos_i2c_open: EQU 1Fh
mos_i2c_close: EQU 20h
mos_i2c_write: EQU 21h
mos_i2c_read: EQU 22h


; FatFS file access functions
;
ffs_fopen: EQU 80h
ffs_fclose: EQU 81h
ffs_fread: EQU 82h
ffs_fwrite: EQU 83h
ffs_flseek: EQU 84h
ffs_ftruncate: EQU 85h
ffs_fsync: EQU 86h
ffs_fforward: EQU 87h
ffs_fexpand: EQU 88h
ffs_fgets: EQU 89h
ffs_fputc: EQU 8Ah
ffs_fputs: EQU 8Bh
ffs_fprintf: EQU 8Ch
ffs_ftell: EQU 8Dh
ffs_feof: EQU 8Eh
ffs_fsize: EQU 8Fh
ffs_ferror: EQU 90h

; FatFS directory access functions
;
ffs_dopen: EQU 91h
ffs_dclose: EQU 92h
ffs_dread: EQU 93h
ffs_dfindfirst: EQU 94h
ffs_dfindnext: EQU 95h

; FatFS file and directory management functions
;
ffs_stat: EQU 96h
ffs_unlink: EQU 97h
ffs_rename: EQU 98h
ffs_chmod: EQU 99h
ffs_utime: EQU 9Ah
ffs_mkdir: EQU 9Bh
ffs_chdir: EQU 9Ch
ffs_chdrive: EQU 9Dh
ffs_getcwd: EQU 9Eh

; FatFS volume management and system configuration functions
;
ffs_mount: EQU 9Fh
ffs_mkfs: EQU A0h
ffs_fdisk: EQU A1h
ffs_getfree: EQU A2h
ffs_getlabel: EQU A3h
ffs_setlabel: EQU A4h
ffs_setcp: EQU A5h

; File access modes
;
fa_read: EQU 01h
fa_write: EQU 02h
fa_open_existing: EQU 00h
fa_create_new: EQU 04h
fa_create_always: EQU 08h
fa_open_always: EQU 10h
fa_open_append: EQU 30h

; System variable indexes for api_sysvars
; Index into _sysvars in globals.asm
;
sysvar_time: EQU 00h ; 4: Clock timer in centiseconds (incremented by 2 every VBLANK)
sysvar_vpd_pflags: EQU 04h ; 1: Flags to indicate completion of VDP commands
sysvar_keyascii: EQU 05h ; 1: ASCII keycode, or 0 if no key is pressed
sysvar_keymods: EQU 06h ; 1: Keycode modifiers
sysvar_cursorX: EQU 07h ; 1: Cursor X position
sysvar_cursorY: EQU 08h ; 1: Cursor Y position
sysvar_scrchar: EQU 09h ; 1: Character read from screen
sysvar_scrpixel: EQU 0Ah ; 3: Pixel data read from screen (R,B,G)
sysvar_audioChannel: EQU 0Dh ; 1: Audio channel
sysvar_audioSuccess: EQU 0Eh ; 1: Audio channel note queued (0 = no, 1 = yes)
sysvar_scrWidth: EQU 0Fh ; 2: Screen width in pixels
sysvar_scrHeight: EQU 11h ; 2: Screen height in pixels
sysvar_scrCols: EQU 13h ; 1: Screen columns in characters
sysvar_scrRows: EQU 14h ; 1: Screen rows in characters
sysvar_scrColours: EQU 15h ; 1: Number of colours displayed
sysvar_scrpixelIndex: EQU 16h ; 1: Index of pixel data read from screen
sysvar_vkeycode: EQU 17h ; 1: Virtual key code from FabGL
sysvar_vkeydown: EQU 18h ; 1: Virtual key state from FabGL (0=up, 1=down)
sysvar_vkeycount: EQU 19h ; 1: Incremented every time a key packet is received
sysvar_rtc: EQU 1Ah ; 6: Real time clock data
sysvar_spare: EQU 20h ; 2: Spare, previously used by rtc
sysvar_keydelay: EQU 22h ; 2: Keyboard repeat delay
sysvar_keyrate: EQU 24h ; 2: Keyboard repeat reat
sysvar_keyled: EQU 26h ; 1: Keyboard LED status
sysvar_scrMode: EQU 27h ; 1: Screen mode
sysvar_rtcEnable: EQU 28h ; 1: RTC enable flag (0: disabled, 1: use ESP32 RTC)
sysvar_mouseX: EQU 29h ; 2: Mouse X position
sysvar_mouseY: EQU 2Bh ; 2: Mouse Y position
sysvar_mouseButtons: EQU 2Dh ; 1: Mouse button state
sysvar_mouseWheel: EQU 2Eh ; 1: Mouse wheel delta
sysvar_mouseXDelta: EQU 2Fh ; 2: Mouse X delta
sysvar_mouseYDelta: EQU 31h ; 2: Mouse Y delta

; Flags for the VPD protocol
;
vdp_pflag_cursor: EQU 00000001b
vdp_pflag_scrchar: EQU 00000010b
vdp_pflag_point: EQU 00000100b
vdp_pflag_audio: EQU 00001000b
vdp_pflag_mode: EQU 00010000b
vdp_pflag_rtc: EQU 00100000b
vdp_pflag_mouse: EQU 01000000b
; vdp_pflag_buffered: EQU 10000000b

;
; FatFS structures
; These mirror the structures contained in src_fatfs/ff.h in the MOS project
;
; Object ID and allocation information (FFOBJID)
;
;FFOBJID .STRUCT
; fs: DS 3 ; Pointer to the hosting volume of this object
; id: DS 2 ; Hosting volume mount ID
; attr: DS 1 ; Object attribute;
; stat: DS 1 ; Object chain status (b1-0: =0:not contiguous, =2:contiguous, =3:fragmented in this session, b2:sub-directory stretched)
; sclust: DS 4 ; Object data start cluster (0:no cluster or root directory)
; objsize: DS 4 ; Object size (valid when sclust != 0)
;FFOBJID_SIZE .ENDSTRUCT FFOBJID
;
; File object structure (FIL)
;
;FIL .STRUCT
; obj: .TAG FFOBJID ; Object identifier
; flag: DS 1 ; File status flags
; err: DS 1 ; Abort flag (error code)
; fptr: DS 4 ; File read/write pointer (Zeroed on file open)
; clust: DS 4 ; Current cluster of fpter (invalid when fptr is 0)
; sect: DS 4 ; Sector number appearing in buf[] (0:invalid)
; dir_sect: DS 4 ; Sector number containing the directory entry
; dir_ptr: DS 3 ; Pointer to the directory entry in the win[]
;FIL_SIZE .ENDSTRUCT FIL
;
; Directory object structure (DIR)
;
;DIR .STRUCT
; obj: .TAG FFOBJID ; Object identifier;
; dptr: DS 4 ; Current read/write offset
; clust: DS 4 ; Current cluster
; sect: DS 4 ; Current sector (0:Read operation has terminated)
; dir: DS 3 ; Pointer to the directory item in the win[]
; fn: DS 12 ; SFN (in/out) {body[8],ext[3],status[1]}
; blk_ofs: DS 4 ; Offset of current entry block being processed (0xFFFFFFFF:Invalid)
;DIR_SIZE .ENDSTRUCT DIR
;
; File information structure (FILINFO)
;
;FILINFO .STRUCT
; fsize: DS 4 ; File size
; fdate: DS 2 ; Modified date;
; ftime: DS 2 ; Modified time
; fattrib: DS 1 ; File attribute
; altname: DS 13 ; Alternative file name
; fname: DS 256 ; Primary file name
;FILINFO_SIZE .ENDSTRUCT FILINFO

;
; Macro for calling the API
; Parameters:
; - function: One of the function numbers listed above
;
MACRO MOSCALL function
LD A, function
RST.L 08h
ENDMACRO



и init.inc



;
; Title: Copy - Initialisation Code
; Author: Dean Belfield, Lennart Benschop
; Created: 06/11/2022
; Last Updated: 26/12/2022
;
; Modinfo:
; 17/12/2022: Added parameter processing
; 26/12/2022: Adapted to Copy program, use LEA instead of 3x INC IX, Save/restore MB
; Changed: 08/04/2924 adapt to ez80asm


argv_ptrs_max: EQU 16 ; Maximum number of arguments allowed in argv

;
; Start in ADL mode
;
JP _start ; Jump to start
;
; The header stuff is from byte 64 onwards
;

_exec_name:
PROGNAME ; The executable name, only used in argv

ALIGN 64

DB "MOS" ; Flag for MOS - to confirm this is a valid MOS command
DB 00h ; MOS header version 0
DB 01h ; Flag for run mode (0: Z80, 1: ADL)
;
; And the code follows on immediately after the header
;
_start: PUSH AF ; Preserve the registers
PUSH BC
PUSH DE
PUSH IX
PUSH IY
LD A, MB ; Save MB
PUSH AF
XOR A
LD MB, A ; Clear to zero so MOS API calls know how to use 24-bit addresses.

LD IX, argv_ptrs ; The argv array pointer address
PUSH IX
CALL _parse_params ; Parse the parameters
POP IX ; IX: argv
LD B, 0 ; C: argc
CALL _main ; Start user code

POP AF
LD MB, A
POP IY ; Restore registers
POP IX
POP DE
POP BC
POP AF
RET

; Parse the parameter string into a C array
; Parameters
; - HL: Address of parameter string
; - IX: Address for array pointer storage
; Returns:
; - C: Number of parameters parsed
;
_parse_params: LD BC, _exec_name
LD (IX+0), BC ; ARGV[0] = the executable name
LEA IX, IX+3
CALL _skip_spaces ; Skip HL past any leading spaces
;
LD BC, 1 ; C: ARGC = 1 - also clears out top 16 bits of BCU
LD B, argv_ptrs_max - 1 ; B: Maximum number of argv_ptrs
;
_parse_params_1:
PUSH BC ; Stack ARGC
PUSH HL ; Stack start address of token
CALL _get_token ; Get the next token
LD A, C ; A: Length of the token in characters
POP DE ; Start address of token (was in HL)
POP BC ; ARGC
OR A ; Check for A=0 (no token found) OR at end of string
RET Z
;
LD (IX+0), DE ; Store the pointer to the token
PUSH HL ; DE=HL
POP DE
CALL _skip_spaces ; And skip HL past any spaces onto the next character
XOR A
LD (DE), A ; Zero-terminate the token
LEA IX, IX+3 ; Advance to next pointer position
INC C ; Increment ARGC
LD A, C ; Check for C >= A
CP B
JR C, _parse_params_1 ; And loop
RET

; Get the next token
; Parameters:
; - HL: Address of parameter string
; Returns:
; - HL: Address of first character after token
; - C: Length of token (in characters)
;
_get_token: LD C, 0 ; Initialise length
@@: LD A, (HL) ; Get the character from the parameter string
OR A ; Exit if 0 (end of parameter string in MOS)
RET Z
CP 13 ; Exit if CR (end of parameter string in BBC BASIC)
RET Z
CP ' ' ; Exit if space (end of token)
RET Z
INC HL ; Advance to next character
INC C ; Increment length
JR @B

; Skip spaces in the parameter string
; Parameters:
; - HL: Address of parameter string
; Returns:
; - HL: Address of next none-space character
; F: Z if at end of string, otherwise NZ if there are more tokens to be parsed
;
_skip_spaces: LD A, (HL) ; Get the character from the parameter string
CP ' ' ; Exit if not space
RET NZ
INC HL ; Advance to next character
JR _skip_spaces ; Increment length

; Storage for the argv array pointers
;
argv_ptrs: BLKP argv_ptrs_max, 0


Берем из agon-utilites\fonts
файлы со шрифтами: bbcasc-8.bin, bbclat-8.bin, latin1-8.bin копируем их в \mos и опробуем font.bin в действии.
Например,
*font bbcasc-8.bin show


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

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


Сделал в компиляторе TinyContext опции задания адресов данных и кода
Олег, сделайте пожалуйста версию, которая запускается из \mos с входным файлом исходного текста на context в качестве параметра, ну или как-то еще с объяснением, как запускать.

Oleg N. Cher
30.04.2024, 17:25
Из mos не планируется. Там банально мало места для компиляции. Не будем распыляться. Совсем скоро никто не будет пользоваться MOS древнее 1.04, и все подобные усилия окажутся напрасными.

Если работаете со старым эмулятором, ну придётся тогда запускать через load ctx.bin и run . [опции]

80733

Shiny
30.04.2024, 17:51
Эти не подошли для программульки [B]font.asm


Шрифт сделан попроще - отличается от msdos

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

Забыл дописать.
Редактор шрифт: https://www.min.at/prinz/o/software/pixelfont/
или мой(лучше почитать справку): https://g0blinish.ucoz.ru/pb3/ch8x8v2_09d.zip

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

Вот пример загрузки шрифта 1251

andrews
30.04.2024, 18:51
Редактор шрифт: https://www.min.at/prinz/o/software/pixelfont/
да, я тоже этот нашел. Осталось нарисовать русские буквы.

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


Если работаете со старым эмулятором, ну придётся тогда запускать через load ctx.bin и run . [опции]
где эту (последнюю) версию скачать? Она со строчками работает уже?

Shiny
30.04.2024, 18:58
да, я тоже этот нашел. Осталось нарисовать русские буквы.
1251.FNT с тонкими буквами. смотрится так себе:
https://g0blinish.ucoz.ru/fonts/windos_u.zip

Oleg N. Cher
30.04.2024, 20:12
где эту (последнюю) версию скачать? Она со строчками работает уже?Работает, но пока минимально.

https://github.com/Oleg-N-Cher/Context/tree/master/Agon
Планов на TinyContext много, сейчас почти всё готово к релизу первой версии и показу буржуячьему сообществу. Посмотрим как встретят. Пока думаю: делать поддержку ADL в первой версии или не делать?

andrews
30.04.2024, 20:32
1251.FNT с тонкими буквами. смотрится так себе:
https://g0blinish.ucoz.ru/fonts/windos_u.zip
Работает!
по крайней мере есть с чем играться. А далее дизайнеры подтянутся...я так думаю.

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


делать поддержку ADL в первой версии или не делать?
зависит от общего функционала компилятора. На первом шаге можно и не делать. Других ЯВУ пока не портировали, поэтому конечно надо "столбить". Лучше сперва развить функционал, отсутствующий в их Бейсике.

Про MOS ничего не скажу. Да, какая в эмуляторе на 32 битных компах работает, та и будет в России популярна. 64-битные дома не у всех! Наш форум - не показателен в этом смысле. ЧиД начал продавать Agon Light от Olimex втридорога! Поэтому скорее всего пока китайцы на fpga не передерут ( увеличив скорость обмена данными по "горлышку") и не появится на Алике по $65, в России железо Agon Light не будет популярно. И в общем-то история повторяется, как с ZX Spectrum.

Shiny
30.04.2024, 20:48
Про MOS ничего не скажу. Да, какая в эмуляторе на 32 битных компах работает, та и будет в России популярна. 64-битные дома не у всех!
Наш человек) Эмуль, собранный под 32бит пока пашет.

Oleg N. Cher
30.04.2024, 20:53
Хотя бы нам догнать функционал, присутствующий в их Бейсике. И взять скоростью.
Дело за библиотеками тонкой поддержки фич MOS и VDP. Собсно, та обвязка, которую я терпеть ненавижу ;)
И примеры нужны. Если заинтересуется чел, который клепает видосы по Agon для ютуба, пойдёт в массы.
Но это Бейсик-мэн, у меня сложилось впечатление, что он и по асму не очень.

Надо делать на TinyContext игру и смотреть чего не хватает.

По поводу Вашего заявления насчёт 32-битных компов - я поражён. Мои знакомые уже все обзавелись 64-битными компами. Я им обзавёлся миллион лет назад, это был двухъядерный AMD какой-то один из первых.

Не, через эмули пользоваться Agon'ом точно не будут. Не тот случай. Там нет какого-то очень интересного или уникального софта. И у пипла нет тёплых домашних привязок.

Сам я купил Agon от Olimex, как сказал Нихираш, вдвадорога ;)

andrews
01.05.2024, 11:55
По поводу Вашего заявления насчёт 32-битных компов - я поражён
я под столом еще держу рабочий комп с Windows XP. Просто я давно сообразил, что комп, кстати любой, это в первую очередь софт, а не железо. А в мире есть простой закон: "то, что ещё вчера было бесплатным - завтра с ненулевой вероятностью станет платным". А мой бывший шеф любил повторять "сэкономил - значит заработал" и еще "а прибыль какая?".

Agon от Olimex
в Австралии он стоит $50. Вот его "красная цена"! А у ЧиД >$150!!!


Не, через эмули пользоваться Agon'ом точно не будут. Не тот случай. Там нет какого-то очень интересного или уникального софта
Те, кто хочет наблюдать результат "сделанного на коленке за полчаса" - обязательно будут пользоваться при наличии документации и наставлений "как сделать?"
Чтобы освоить "от нуля до результатов", начиная с Windows'95 и Пентиумов надо было затратить в разы больше времени на них, чем на простые 8 битные компьютеры.
Когда появилась куча эмуляторов и бесплатного инструментального софта для старых 8-битных компов эта ситуация усугубилась.

На Западе люди готовы тратить месяцы и недели на освоение в расчете на то, что потом получат заказы на тысячи и десятки тысяч долларов. В России ситуация никогда не была такой и никогда такой не станет. В России основная цель большинства - с наименьшими потерями либо получить должность начальника, или хотя бы начальничка, или сесть на "денежные потоки"( чаще всего из одного следует другое). То есть сперва придется своего начальника подсадить на Agon Light. А еще лучше на его основе сделать нечто полезное для промышленности или быта, хотя бы дачного и загородного быта.

Хотя конечно маленькую коробочку проще незаметно украсть, но если она в разы меньше стоит...Может быть ноутбучок для сервисного обслуживания авто и электросамокатов? Тут надо сравнить трудоемкость производства софта и разнообразие его в наличии и в перспективе.

Поэтому бессмысленно тратить такое продолжительное время на освоение и бессмысленно этому учить своих детей.

Речь при этом конечно не идет об отдельных личностях с доходом от $30 000 и выше в год. Но среди них - увлекающиеся 8 битными компьютерами большая редкость, ведь они предпочитают тратиться на активы, приносящие прибыль, недвижимость, дорогие авто, красивых женщин, коллекционирование( когда коллекции с годами стремительно вырастают в цене и это не компьютерные музеи).

Короче, делаем софт для Agon Light и пусть он выполняется даже в эмуляторах на 32 битных компьютерах.
Хорошее занятие, пусть даже не подлежащее значительной монетизации. Незначительная за счет рекламы на своих страницах очевидно возможна, если иметь там что-то своё, авторское.
Успех ZX Spectrum в СССР повторить конечно же не удастся. Тогда это были сотни тысяч пользователей!

Если в России будет через год 1000 эмуляторщиков и через два года после появления клона на Алике еще 10 000 железячников - это имхо уже успех. А про буржуинов Вам конечно виднее. Мои знания про это нулевые. Возможно в Индии, в Африке и беднейших странах Латинской Америки где $50-100 это цена навороченного электровелосипеда, и будут сотни тысяч юзверей. Но тогда надо озадачится португальским и испанским. У меня они, как и французский нулевые.

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


Хотя бы нам догнать функционал, присутствующий в их Бейсике. И взять скоростью
Бейсик могут сделать инструментальным компилятором с выдачей в ассемблер MOS-а.

Shiny
01.05.2024, 12:39
Неважно, на каком эмуляторе написан софт, но лишь бы работал(:

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

Кстати, а каким будет аналог на ассемблере команды BBC Basic *FX 9 ?

andrews
01.05.2024, 14:07
а каким будет аналог на ассемблере команды BBC Basic *FX 9 ?
в эмуляторе, которым я пользуюсь, к сожалению, отладчика нет. Судя по всему это команда MOS?
У Бейсика > и операторы в режиме прямого выполнения, а не команды.

В версии 1.03 такой команды у MOS нет.

Shiny
01.05.2024, 14:18
в эмуляторе, которым я пользуюсь, к сожалению, отладчика нет. Судя по всему это команда MOS?
У Бейсика > и операторы в режиме прямого выполнения, а не команды.

В версии 1.03 такой команды у MOS нет.

мне попался исходник с комментарием


FX 19 : REM wait for refresh


Просто интересно, как это реализовать?

andrews
01.05.2024, 14:24
Тот исходник MOS что есть у меня нормально строится под ZDSII, только .hex на выходе. Чем бы в .bin конвертнуть?
Мне лично не достает в MOS возможности запуска из своей программы, программы с диска. Не нашел в mos_api.inc. Теперь решил покопаться в исходниках MOS или в .h файлах.

Oleg N. Cher
01.05.2024, 14:26
Короче, делаем софт для Agon Light и пусть он выполняется даже в эмуляторах на 32 битных компьютерах.Кстати, есть вариант скооперироваться с кем-то в Европе, кто сможет отсылать в РФ посылки. И заказать оптом сразу партию для всех желающих. Например, Нихираш в Испании. Ведь это будет гораздо интереснее, чем в эмуляторе.


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

Shiny
01.05.2024, 14:31
Тот исходник MOS что есть у меня нормально строится под ZDSII, только .hex на выходе. Чем бы в .bin конвертнуть?
Мне лично не достает в MOS возможности запуска из своей программы, программы с диска. Не нашел в mos_api.inc. Теперь решил покопаться в исходниках MOS или в .h файлах.

Нашел в исходниках BBC Basic 1.01. Просто и неожиданно)

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


Тот исходник MOS что есть у меня нормально строится под ZDSII, только .hex на выходе. Чем бы в .bin конвертнуть?
Мне лично не достает в MOS возможности запуска из своей программы, программы с диска. Не нашел в mos_api.inc. Теперь решил покопаться в исходниках MOS или в .h файлах.

Была какая-то команда, связанная с CLI - может прокатит?

andrews
01.05.2024, 14:36
Ведь это будет гораздо интереснее, чем в эмуляторе
лучше свою плату нарисовать. И ядро eZ80 сдуть. Тогда все законно. А так видимо ты не сталкивался с ТС РФ.

Shiny
01.05.2024, 15:01
в эмуляторе, которым я пользуюсь, к сожалению, отладчика нет. Судя по всему это команда MOS?

для Fab Agon и для старого нерабочего запуск с ключом -d. Долбагер не подарок, конечно.

Oleg N. Cher
01.05.2024, 23:47
Using the Font API (https://www.youtube.com/watch?v=ZbdRLrlbixw)

b2m
02.05.2024, 13:57
Замутил некую базовую поддержку строк в TinyContext. Пока не очень нравится как сделал. У Андрея Хохлова используется тип char[], у меня пока word.
Твой вариант можно чуть-чуть улучшить в плане компактности:

if eFlag=0 then
if Buff[0]='"' then
Emi1(0xCD); // CALL ?
word pCode:=nCode;
nCode:=nCode+2;

while Look()!='"' do
if Look()=char(0) then
Stop();
end
Emi1(Read());
end

Emi1(0);
Read();

Emi3(pCode, nCode);
Emi1(0xD1); // POP DE

eFlag:=1;
end
end


По поводу указателей. Можно их пока не делать, а вместо них разрешить такие конструкции: char[addr] и word[addr]. Как раз следом за вышеприведённым кодом идёт обработка type(expr), её можно расширить:

if eFlag =0 then
word I:=Find(0);
if Cls[I]=1 then
Push(I);
Scan(); // (
Push(Buff[0]);
Scan();
Expr();
word J:=Pop();
I:=Pop();
if J='[' then
Emi1(0xEB); // XCHG
Emi1(0x5E); // MOV E,M
if Size[I]=1 then
Emi1(0x16); // MVI D,0
Emi1(0);
end
if Size[I]=2 then
Emi1(0x23); // INX H
Emi1(0x56); // MOV D,M
end
end
end


Тогда вот такая программа:

char putc(char C) is
inline 0x0E, 0x02; // mvi C, 2
inline 0xCD, 0x05, 0x00; // call 5
end

word puts(word s) is
while char[s]!=0 do
putc(char[s]);
s:=s+1;
end
end

begin
puts("Hello, world!");
end

будет скомпилирована так:

ORG 100h

L0005 EQU 5

JMP L014E
L0103:
MVI C,2
CALL L0005
RET
L0109:
LXI H,4101h
MOV E,M
INX H
MOV D,M
XCHG
MOV E,M
MVI D,0
PUSH D
LXI D,0
POP H
MOV A,L
SUB E
JNZ L0122
MOV A,H
SUB D
JZ L014D
L0122:
LXI H,4101h
MOV E,M
INX H
MOV D,M
XCHG
MOV E,M
MVI D,0
LXI H,4100h
MOV M,E
CALL L0103
LXI H,4101h
MOV E,M
INX H
MOV D,M
PUSH D
LXI D,1
POP H
MOV A,L
ADD E
MOV E,A
MOV A,H
ADC D
MOV D,A
LXI H,4101h
MOV M,E
INX H
MOV M,D
JMP L0109
L014D:
RET
L014E:
CALL L015F
DB 'Hello, world!',0
L015F:
POP D
LXI H,4101h
MOV M,E
INX H
MOV M,D
CALL L0109
RET

Shiny
02.05.2024, 15:48
ребзя, мы обсуждаем Agon.

b2m
02.05.2024, 17:01
Я ж не виноват, что он в этой теме про поддержку строк писал. Можно было бы в теме про TinyContext ответить, но заниматься кросс-постингом не в моих правилах.

Shiny
02.05.2024, 18:25
Я ж не виноват, что он в этой теме про поддержку строк писал. Можно было бы в теме про TinyContext ответить, но заниматься кросс-постингом не в моих правилах.

Кажется, тут был трэд обсуждения твоего эмулятора? Начни там.

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

В общем, решил написать бестолковую программу и резко встал на грабли ADL :v2_dizzy_facepalm:
Теперь программа выводит номер режима и разрешение экрана.

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

в том самом старом примере plot.asm ввел код


; FOR A LINE

.db 18, 0, bright_magenta ; set graphics colour: mode (0), colour

.db 25, 69 ; PLOT: mode (69 is a point in current colour),
.dw 0, 0 ; X; Y;

.db 25, 13 ; PLOT: mode (13 is a line),
.dw 320,240 ; X; Y;


и эмуль просто вылетел.

andrews
02.05.2024, 19:48
был трэд обсуждения твоего эмулятора?
было бы неплохо, если бы b2m заинтересовался поддержкой Agon Light! Было бы кому задавать вопросы по эмулятору.
Общаться с буржуинами удовольствие еще то. Они русского не знают, мы в массе своей английского на приличном уровне.

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


резко встал на грабли ADL
а для чего пока ADL нужен? Наверняка там траблов больше, чем в эмуляции z80. Нужны тесты выполнения инструкций и памяти. Что-то мне они не попадались. А еще системы прерывания и I2C и второго COM-порта ( завороток хотя бы). Хотя к большинству эмуляторов пользовательские внешние девайсы редко можно подключать.

Shiny
02.05.2024, 20:14
было бы неплохо, если бы b2m заинтересовался поддержкой Agon Light! Было бы кому задавать вопросы по эмулятору.


ну не Tiny Context'ом же!



а для чего пока ADL нужен? Наверняка там траблов больше, чем в эмуляции z80. Нужны тесты выполнения инструкций и памяти. Что-то мне они не попадались. А еще системы прерывания и I2C и второго COM-порта ( завороток хотя бы). Хотя к большинству эмуляторов пользовательские внешние девайсы редко можно подключать.

проц работает в этом режиме - 512МБ памяти и все такое. Вангую, что траблы возникнут, но при коде.

Oleg N. Cher
03.05.2024, 01:22
512 Кб. Не Мб

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


Я ж не виноват, что он в этой теме про поддержку строк писал.Увы, но тему про TinyContext превратили в срач и перенесли во флейм, где её не видно половине форумчан.

С CALL для обхода строки получилось отлично. Про char[addr] и word[addr] ещё думаю.

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

Просто у Андрея Хохлова, автора TinyContext, в TinyContext v1.18 для DOS сделано по-другому - через char[]. И тогда можно адресовать строку просто как массив char.

Sayman
03.05.2024, 06:52
Вопрос: а у этой штуки какое-то расширение памяти имеется? или 512кб хватит всем?

andrews
03.05.2024, 08:59
512 Кб. Не Мб
адресная шина 24 бита и в режиме ADL ОЗУ SRAM теоретически( и на эмуляторах) может быть значительно >512 кБ На AgonLight2 от Olimex нужно посмотреть на опубликованной схеме. Если верить их схеме ADDR19-ADDR23 висят в воздухе, а не на разъеме, а D0-D7 выведены только на SRAM.

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


какое-то расширение памяти имеется?
вот какое ограничение на емкость microSD?

Sayman
03.05.2024, 09:13
вот какое ограничение на емкость microSD?
не очень понимаю, при при чём тут микросд? меня озу интересует. я же написал про 512кб постом ранее?!

goodboy
03.05.2024, 10:09
а у этой штуки какое-то расширение памяти имеется? или 512кб хватит всем?
пишут что "featuring a 24-bit address bus capable of directly addressing up to 16MB of memory"

Sayman
03.05.2024, 11:05
пишут что "featuring a 24-bit address bus capable of directly addressing up to 16MB of memory"

а готовые какие то расширения памяти есть?

andrews
03.05.2024, 12:48
а готовые какие то расширения памяти есть?
на железке от Olimex даже на разъем не вывели ADDR19-ADDR23. Наверно сэндвичем можно исхитрится поставить еще такой же чип(просто напаять проще параллельно ШД и ША) и будет 1 Mbyte(512K+512K), если найти что-то подходящее для ChipSelect1 и ChipSelect2. Например ADDR19 через инвертер ChipSelect2, а сам ADDR19 на ChipSelect1. Но это если в режиме не ADL он в z-состояние не переключается.

Про емкость microSD максимальную это уже был мой вопрос. Сколько MOS поддерживает, и сколько само железо?

Shiny
03.05.2024, 14:05
Про емкость microSD максимальную это уже был мой вопрос. Сколько MOS поддерживает, и сколько само железо?

в вики написано
A 32GB or less micro-SD card formatted FAT32
но во вракипедии инфа неточная.

Oleg N. Cher
04.05.2024, 00:30
вот какое ограничение на емкость microSD?Да. Максимум 32 Гб. Но, как сказал один из чуваков в фб: "В 32 Гб поместится вообще всё, что сделано для Agon, и останется ещё куча места"

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


Вопрос: а у этой штуки какое-то расширение памяти имеется? или 512кб хватит всем?На Спеке 128 Кб хватило почти всем, хорошо ещё, что не 48 ;)

Проц eZ80 максимум может адресовать 16 Мб, в сам Agon запаяно 512 Кб. Если будет развитие этой железяки - AgonLight 3, 4, 5 и т.д. - можем получить железку с бОльшим объёмом.

andrews
04.05.2024, 00:41
Проигрыватель музыки и видео на AgonLight уже есть?
32Гб проблематично забить кодом, но не данными. Для начала надо определиться с ограничениями MOS и её файловой системы.

Oleg N. Cher
04.05.2024, 00:48
Проигрыватель четырёхканальных mod-ов, как я понимаю, уже встроен в новые версии прошивки VDP.

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

Если будут такие огромные требования к объёму ОЗУ и карты памяти - и сами не заметим как получим треклятый пейсюк ;)

Shiny
16.05.2024, 07:08
полудемка


5 CLS
10 MODE 12
11 VDU 23,0,192,0
20 GCOL 0,5
30 MOVE 0,0
40 PLOT 5,319,199
45 *FX 19
46 VDU 23,7,2,3,1
47 GOTO 45

Shiny
18.05.2024, 06:53
Слепил тот же код. andrews, ты не мог бы на реале проверить?
Загрузка та же:
load box.bin
run

Esc - выход
курсор будет невидимым, надо набрать vdu 23 1 1

Oleg N. Cher
18.05.2024, 10:51
Шынни, агов. У andrews нет реала. Пока что ;)

Shiny
18.05.2024, 10:59
пичалька

andrews
18.05.2024, 11:04
Про сами чипы у меня уже есть несколько предложений и все они лучше по цене чем в Чип и Дип. Но, увы, все-равно дороже $20.
А теперь ищу поставщика вот на это
https://www.tindie.com/products/agon/zilog-cable-new-model-required-for-pcbs/
Конечно, в zilog можно было бы купить еще дешевле, но увы! Зато она загружает и чипы с рабочей частотой 50MHz, а не только 20MHz.

Сама отладочная плата стоит конечно по ощущениям в разы дороже, да и зачем она, если цель повторять судьбу ZX Spectrum( то надо научиться клепать самим тысячами штук).

Ибо, если клепать шелезяку самому, то ее надо через что-то загружать. Jtag-а у самого чипа нет! :( а есть ZDI.

Oleg N. Cher
19.05.2024, 19:04
19.05.2024, 03:36, "Oleg N. Cher":


Андрей Владимирович, а подскажите: почему Вы решили использовать в
TinyContext для 8080 регистровую пару DE в качестве основной? А не HL? В
этом есть какой-то особый смысл? Спасибо.


Добрый день.

Скорее всего это было первое, что пришло в голову. И вполне возможно, что использовать HL выгоднее.
Это стоит попробовать и оценить результат в байтах и в секундах.

С эмулятором у меня более-менее получилось, выполнил несколько тестов:

1. Поиск хода в игре nim (tiny context и basic) - 31 мин 50 сек. Это примерно в 55 раз быстрее, чем на Apple
и в 3 раза медленнее, чем на Arduino (gcc с отключенной оптимизацией). На васике результата при тех же начальных условиях пока нет, не факт что он справится за сутки. Но попробую. На Apple тест не может быть выполнен за разумное время.

2. Вычисление площади под полупериодом синуса (basic). Примерно в 40 раз быстрее, чем на Apple.

Сравнение корректно только если эмулятор работает с правильной скоростью. Это так?

Эти тесты выполнялись много на чем, но есть пробелы. Особенно во втором (о вычислениях с плавающей точкой я как-то мало задумывался - так сложилось). Какие у Вас есть в пределах досягаемости машины и с каими ОС?

Shiny
19.05.2024, 19:10
"Спроси у полуэльфа совет - в ответ получишь "да" и "нет" "
вроде в zdsii описано соглашение о передаче параметров.

andrews
24.05.2024, 22:50
А теперь ищу поставщика вот на это
https://www.tindie.com/products/agon...ired-for-pcbs/
обещали привезти за 8 недель. Значит до 15 июля надо склепать минималистичную платку.

andrews
25.06.2024, 01:45
В общем приехало сие чудо и сильно разочаровало. Через hub usb вообще ни разу не установилось из 100 попыток, при отключении всех usb устройств на компьютере хотя и включается 1 раз на 10 попыток, но в ZDSII ни разу не коннектится! Коробку я развинтил, там есть несколько джамперов, но поскольку нет схемы, то непонятно, что они устанавливают. Еще момент на выход 6 пиновый разъем я ему ничего не подключаю. Но было бы странно, чтобы без этого девайс оказывался неработоспособен. Да, возможно в ZDSII такой режим не задается и поэтому не может коннектиться. В самом девайсе ZUSBASC0200ZACG Aclaim! Smart Cable стоит процик eZ80F91NAA50SG, но как загружать свои проги в него( и как его "скормить" ZDSII)?

Oleg N. Cher
25.06.2024, 02:19
Почему нет схемы?

Андрей, Вы имеете в виду традиционный AgonLight2 от Olimex или что-то самопальное? (что-то там Вы собирались такое делать)

Насчёт самопала не подскажу, а вот у Olimex всё открыто: https://github.com/OLIMEX/AgonLight2

Что такое ZDSII - не понял...

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

А вот схема оригинального первого AgonLight от ByteAttic: https://github.com/TheByteAttic/AgonORIGINS

Чтобы загружать проги - создайте образ microSD. Можете готовый скачать (https://www.agonmite.com). У меня коннект по усб-кабелю без проблем.

Чтобы шить через усб - нужно переключить один джампер. Второй - переключать звук на внешний выход или встроенный спикер.

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

Шить - я имею в виду VDP. MOS через юсб не шьётся.

andrews
25.06.2024, 02:51
Почему нет схемы?
Я не AgonLight себе привез, а Acclaim! Smart Cable, чтобы можно было дебажить из ZDSII любые процики этой серии через 6 пиновый кабель в режиме ICE( In-Circuit Emulator). Хотя раз пинов всего 6, то не исключено, что это нечто другое.
Да, наверное надо было не в этом треде "делиться проблемами". Просто результат покупки вот какой( оно "из коробки не запустилось")

Откуда же мне знать почему не было схемы. Купили все официально у Digikey! Был вложен только листочек с текстом, в основном про то, что диск теперь не прикладывается, крутитесь как хотите через ZDSII. Вот вторые сутки и кручусь. Попробовал уже и на Windows XP(для чего пришлось старый десктоп из под стола реанимировать) Результат такой же.
Правда можно еще под 64 битной виндой завтра попробовать. Если только ZDSII под ней запустится. А впрочем, железяка устанавливается или не устанавливается независимо от проги. В ней там и флэшка своя имеется и Xilinx( последний правда пока не понял для чего). Вообще конечно платка своих денег стоит(на малых габаритах такие чипы установили и развели, надеюсь без ошибок).

Теперь я обратил внимание, что драйвер сам по себе подписан( цифровая подпись Zilog inc.), а вот два файла, которые устанавливаются в windows\sys32\drivers:
ZNcBulk.sys и ZNcGen.sys в строке цифровая подпись имеют оба Цифровая подпись отсутствует. Может поэтому ZDSII сконнектится не может? Если честно один раз мне как-то удалось без восклицательного знака в Диспетчере устройств подключить мой девайс. Но я не заглянул, что тогда там было в строке цифровая подпись у файлов. ZDSII даже в этом случае не законнектился. Вот уж как говорится "купил порося" или "кота в мешке" за 17 тыс. рублей.

Oleg N. Cher
25.06.2024, 11:44
А, гм. Даже не представляю о чём Вы. Но это имеет какое-то отношение к Agon?

andrews
25.06.2024, 13:55
Если у него есть шестипиновый разъем (штыри), то имеет. Но вообще он в списке таргетов у последней версии ZDSII_eZ80Acclaim!_5.3.5 не значится. Надо посмотреть по их схемам, есть ли у этих чипов jtag и если есть, то выведен ли он на разъем?
Ага, на схемах он есть ZDI 6 PIN.

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


Даже не представляю о чём Вы
С аппаратной эмуляцией или хотя бы загрузчиками кода Вы сталкивались?
Вот нашел описание ZDI
"The ZiLOG Debug Interface (ZDI) provides a built-in debugging interface to the eZ80
CPU. ZDI provides basic in-circuit emulation( О как! не ICE как прежде, а BICE) features including:
• Examining and modifying internal registers.
• Examining and modifying memory.
• Starting and stopping the user program.
• Setting program and data break points.
• Single-stepping the user program.
• Executing user-supplied instructions.
• Debugging the final product with the inclusion of one small connector.
• Downloading code into SRAM. ( а теперь еще и во FLASH)
• ‘C’ source-level debugging using ZiLOG Developer Studio (ZDS II)"
вот здесь "eZ80L92 MCU Product Specification" стр. 160-183

И еще вот вроде какой-то код (https://github.com/IoTInsights/ZDIMagic).

Понятно, что ESP32 в AgonLight это совершенно не касается.

Несколько часов спустя
----------------------------

Ну что ж, под Windows10 ZDSII запустился, драйверы железяки установились влет ( драйверы, на всякий случай переустановил посредством ZDSII_eZ80Acclaim!_5.3.5\device drivers\Usb\AcclaimSmartCable\AcclaimSmartCable.x6 4.exe). Установка прошла успешно( только делайте это с правами администратора!). После чего картина попытки коннекта разительно изменилась, но все же сконнектилось в результате неудачно.

Видимо надо как-то задать свой таргет. А вот как? Пока что не знаю. Но во всяком случае шелезяка как-то все же дышит. Можно ли ее использовать саму по себе и с какими установками?

А из внешнеподключаемых девайсов через 6 пиновый разъем через кабель самый интересный собссно Agon Light! Тогда можно будет заглянуть внутрь его любого софта и харда!!!

Тайна сия велика есть( особенно при отсутствии контакта с буржуями, использовавшими сей девайс и наверняка имевшими поддержку от Zilog производителей).

Oleg N. Cher
25.06.2024, 23:03
Я только краем уха слышал о каком-то хитром кабеле для прошивки Agon, и этот кабель дороже самого Agon, но все сходятся на том, что он не особо нужен. Можно при помощи уже написанного софта шить без этого кабеля.

Но я не железячник, так что толком не понял что Вы там приобрели, и почему ZDI. Но вроде в названии этого кабеля тоже было ZDI. Впрочем, это если я правильно запомнил. Просто отложил для себя, что оно мне не надо.

andrews
26.06.2024, 12:23
что оно мне не надо
хорошо, я тогда по ZDI отдельный тред создам во флейме

Smalovsky
29.06.2024, 16:48
andrews, контроллер вообще был не прошит? А файлы прошивки есть?

andrews
01.07.2024, 10:44
По идее законченное изделие, а не конструктор, и все должно быть прошито: и микроконтроллер, и Xilinx. Прошивок файлов нет. В сопровождающей бумажке было написано, что теперь с изделием диск не поставляется. Скачивайте. Вопрос откуда?
Было бы конечно интересно на этот диск взглянуть у того, кто купил относительно давно.

Smalovsky
02.07.2024, 14:15
andrews, так прошивки вроде тут есть https://github.com/OLIMEX/AgonLight2/tree/main/SOFTWARE
И тут в разделе Firmware https://github.com/sabotrax/agon-software

Пишут, что ВДП только из под Ардуино ИДЕ:


Чтобы скомпилировать и обновить Agon Quark VDP на чипе ESP32, вам необходимо установить IDE, пакет и библиотеки:
Arduino IDE
...

andrews
02.07.2024, 18:29
Smalovsky, я не про Agon Light писал, а про ZUSBASC0200ZACG Aclaim! Smart Cable. Как к нему подключить Agon Light через Aclaim! Smart Cable чтобы загружать и отлаживать программы в ZDSII. Это к теме имеет отношение. Ну а слегка оффтоп - как сие поделие( Aclaim! Smart Cable)использовать автономно без подключения чего-либо через ZDI ( 6 пиновый разъем и кабель). Если это возможно.