В связи с тремя работами и собственным проектом времени на Z80 нет совершенно, и весь фанатизм канул куда-то в лету.
За прошлое время накопилось множество всякого интересного - например, кооперативно-многозадачный планировщик ZX RTK (RealTime Kernel) достиг ревизии 2 (Gen.2), но так и не был опубликован.
В надежде, что кому-нибудь в конечном итоге пригодится - выкладываю под лицензией GPLv2 исходники планировщика, документации, и всех имеющихся наработок (примеров) к нему. Есть еще пара вещей, но их надо причесать, прежде чем выкладывать.
Ссылка на архив: http://alex-at.ru/files/zxrtk2-alexat.rar
---
Вкратце о том, что находится в архиве:
- SJASMPlus включен в комплект. Новые версии не пробовал, но должны нормально компилить.
- build_demo_* - быстрые батнички для компиляции демонстраций ZXRTK Gen.2
Все демонстрации и так уже скомпилены, и лежат в виде .sna-файлов
- Примеры есть следующие:
*** worms - начатая, но так и брошенная триколорная версия ZX Worms. Работает вывод экрана, просмотр экрана, вывод статичных спрайтов червей, водичка-стрелочки, CS+SS переключает червя, черви ползают (без учета ландшафта), выводится курсор прицела, поползав, пробелом можно переключиться на следующую команду. Попрыгать-пострелять, увы, низя
Модули: kernel/scheduler_g2.a80 - планировщик, всё остальное (многА) - в подкаталоге worms. Поскольку шансов доделать уже нет - исходники выкладываю целиком, вплоть до "сырых" исходных бинарников всякой графики и парсера к ним
*** taskdemo / taskdemo_onlysync - самая простая для понимания демонстрация ZXRTK Gen.2
Модули: demo/taskdemo.a80 / demo/taskdemo_onlysync.a80 и планировщик kernel/scheduler_g2.a80, для расчета MD5 используется модуль routines/md5.a80 либо md5_border.a80 (с раскраской бордера во время выполнения)
В taskdemo бордюр раскрашивается каждой задачей, в taskdemo_onlysync - только специальными синхрозадачами.
Собственно задач в коде - 5 (с разным приоритетом и разными функциями), синхрозадач - тоже 5 (все настроены на особые тайминги).
Задачи Task55/TaskAA непрерывно XOR'ят область экрана #4800-#4FFF значениями #55 и #AA соответственно. Задача TaskFF непрерывно XOR'ит область экрана #5000-#57FF значением #FF. У всех этих задач разный приоритет.
Задача MD5 считает силами Z80 MD5 от меняющейся (меняется только 1 символ) строки в 16 символов, и выводит его на экран по окончании расчёта. Задача Timer выводит на экран время, получаемое от ZXRTK.
Синхрозадачи следующие: одна играет музыку, остальные - выводят на бордюр цветные линии. Тайминги в 16-тактовых единицах для синхрозадач подобраны по Pentagon'у, и выставлены так, чтобы первая белая полоса совпадала с началом видимого бордюра, вторая - с началом экрана, третья - с белой полосой посередке экрана, и четвертая - с красной полосой внизу экрана.
Поскольку задачи не совсем точно возвращают ZXRTK время выполнения - совпадение синхрозадач по тактам примерное, но должно быть достаточно точным. Можете поиграться с набором задач - выключение (достаточно закомментить Add_Task) какой-либо (или всех) из них скажется на синхронизации не сильно.
*** console4/6/8 - демонстрация работы с консолью с размером символов 4x8, 6x8 и 8x8 соответственно
Модули: demo/console*.a80, kernel/scheduler_g2.a80, console/* - драйверы консоли, kernel/pagemgr-128k.a80 - драйвер переключения страниц 128K, modules/keyboard.a80 - драйвер клавиатуры
Для 4x8 и 6x8 цвет - построчный. Для 8x8 - посимвольный. Переключение с английского на русский и назад - CS+SS.
Что же до имеющихся реюзабельных модулей, то раскладка следующая:
Ядро:
kernel/scheduler_g2.a80 - планировщик, в kernel/taskschd.txt - кратенькое описание. В коде много комментов, плюс полная растактовка.
kernel/pagemgr-128k.a80 - хук-драйвер для работы со страницами памяти 128K, сделать на его основе драйвер для любой архитектуры - легко и ненавязчиво
Консоль - как использовать - смотрите в demo/console*.a80
console/console-base.a80
console/console-4x8.a80
console/console-6x8.a80
console/console-8x8.a80
Клавиатура:
modules/keyboard.a80
Расчет MD5-хеша:
routines/md5.a80