Есть ли описание функций естекса? Надо бы знать на будущее для написания игрушки.
Есть ли описание функций естекса? Надо бы знать на будущее для написания игрушки.
¡Un momento, señor fiscal!
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Я вот тут давал кое-какие линки: https://zx-pk.ru/threads/33340-rabot...lo-world).html
В частности вот:
Функции DSS v1.60 и выше: https://web.archive.org/web/20030820...sslist1_60.htm
Функции BIOS v3.00 и выше: https://web.archive.org/web/20030820...r/bioslist.htm
Работа с Акселератором: https://web.archive.org/web/20030815...nter/accel.htm
Администратор сетевого сообщества nedoPC.org
Урал 8/64К, Sp2000, ZX48K+, ZX16K (спалил), TS1000 (американский ZX81), TS2068, Дельта-С, 20 лет собираю ATM Turbo 2+
Неспектрумы: Электроника МК-85 и МК-85М, ПК-01 Львов, БК-0011, Вектор-06Ц, Лик (спец), Апогеи, Radio-86RK SRAM 32K & 128K (всё ещё собираю)
Shaos, ух... на английском. Долго ковыряться...
¡Un momento, señor fiscal!
Есть старая документашка на русском, но там могут быть ошибки - я больше верю англоязычному варианту![]()
Администратор сетевого сообщества nedoPC.org
Урал 8/64К, Sp2000, ZX48K+, ZX16K (спалил), TS1000 (американский ZX81), TS2068, Дельта-С, 20 лет собираю ATM Turbo 2+
Неспектрумы: Электроника МК-85 и МК-85М, ПК-01 Львов, БК-0011, Вектор-06Ц, Лик (спец), Апогеи, Radio-86RK SRAM 32K & 128K (всё ещё собираю)
Smalovsky (19.07.2021)
Shaos, возник вопрос по Memory Management Functions.
Что такое memory block handle? Индекс блока?
В блоке номера страниц свои абстрактные от 0 до n? А как узнать из системы номера свободных физических страниц?
¡Un momento, señor fiscal!
> А как узнать из системы номера свободных физических страниц?
ну тут принято просить память у системы - тебе надо N страниц по 16кб - выделяешь столько через систему и потом берёшь у неё список физических номеров выделенных блоков, с которыми далее и работаешь (т.е. нет такого типа "дайте номера свободных" - есть "дайте сколько надо").
> Что такое memory block handle? Индекс блока?
Это идентификатор памяти, запрошенной у системы - он используется для обращения к отдельным страницам этой памяти по индексу через DSS.
P.S. Список страниц через биос забирается (см. 0C5h - EMM_FN5), а так можно всё через DSS API делать не заморачиваясь с физическими номерами страниц - типа:
Код:ld bc,033Dh ; allocate 3 pages rst 10h jr c,error ld (handle),a ld bc,003Bh ; page #0 to window 3 rst 10h jr c,error
Последний раз редактировалось Shaos; 20.07.2021 в 01:48.
Администратор сетевого сообщества nedoPC.org
Урал 8/64К, Sp2000, ZX48K+, ZX16K (спалил), TS1000 (американский ZX81), TS2068, Дельта-С, 20 лет собираю ATM Turbo 2+
Неспектрумы: Электроника МК-85 и МК-85М, ПК-01 Львов, БК-0011, Вектор-06Ц, Лик (спец), Апогеи, Radio-86RK SRAM 32K & 128K (всё ещё собираю)
Shaos, получается, блок выделяем через ОС, а физические номера страниц блока узнаём через БИОС?
Для хорошей игры надо бы иметь все 4 окна в памяти, и это значит, что к обращение к ОС будет затруднительно, поэтому лучше работать с физическими страницами, а не с логическими через ОС.
Как использовать все 4 окна в памяти не мешая ОС? То есть как используя все 4 окна для своей программы вызвать функцию ОС? Что там надо - вернуть системную страницу в нулевое окно и восстановить системный стек?
¡Un momento, señor fiscal!
можешь исходники поглядеть DSS - все эти вызовы затем перевызывают BIOS - можно и только через биос с аллокациями работать:
https://gitlab.com/sprinter-computer/dos/-/tree/v1.60R
для обращения к биос надо в своём нулевом окне поставить небольшую программку в определённых адресах - она будет переключать ОЗУ на ПЗУ при передаче управления и возвращать всё обратно при возвращении
Администратор сетевого сообщества nedoPC.org
Урал 8/64К, Sp2000, ZX48K+, ZX16K (спалил), TS1000 (американский ZX81), TS2068, Дельта-С, 20 лет собираю ATM Turbo 2+
Неспектрумы: Электроника МК-85 и МК-85М, ПК-01 Львов, БК-0011, Вектор-06Ц, Лик (спец), Апогеи, Radio-86RK SRAM 32K & 128K (всё ещё собираю)
а в чём сложность?
вызвать ОС для запроса нужного кол-ва страниц.
вызвать БИОС для декодирования (получения) полученного ИД в номера страниц.
запомнить страницу окна0 в переменную.
включить туда нужную страницу.
при необходимости повторного обращения к ОС, обменять текущее значение окна0 на значение из переменной. отработав, вернуть туда свою страницу.
при выходе из программы, восстановить страницу Ос из переменной в окно0, сделать ld bc,0x0041:rst 0x10:jp $ (глюкоуловитель).
ничего сложного.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)