Есть ли описание функций естекса? Надо бы знать на будущее для написания игрушки.
Вид для печати
Есть ли описание функций естекса? Надо бы знать на будущее для написания игрушки.
Я вот тут давал кое-какие линки: 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
Shaos, ух... на английском. Долго ковыряться...
Есть старая документашка на русском, но там могут быть ошибки - я больше верю англоязычному варианту ;)
Shaos, возник вопрос по Memory Management Functions.
Что такое memory block handle? Индекс блока?
В блоке номера страниц свои абстрактные от 0 до n? А как узнать из системы номера свободных физических страниц?
> А как узнать из системы номера свободных физических страниц?
ну тут принято просить память у системы - тебе надо 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, получается, блок выделяем через ОС, а физические номера страниц блока узнаём через БИОС?
Для хорошей игры надо бы иметь все 4 окна в памяти, и это значит, что к обращение к ОС будет затруднительно, поэтому лучше работать с физическими страницами, а не с логическими через ОС.
Как использовать все 4 окна в памяти не мешая ОС? То есть как используя все 4 окна для своей программы вызвать функцию ОС? Что там надо - вернуть системную страницу в нулевое окно и восстановить системный стек?
можешь исходники поглядеть DSS - все эти вызовы затем перевызывают BIOS - можно и только через биос с аллокациями работать:
https://gitlab.com/sprinter-computer/dos/-/tree/v1.60R
для обращения к биос надо в своём нулевом окне поставить небольшую программку в определённых адресах - она будет переключать ОЗУ на ПЗУ при передаче управления и возвращать всё обратно при возвращении
а в чём сложность?
вызвать ОС для запроса нужного кол-ва страниц.
вызвать БИОС для декодирования (получения) полученного ИД в номера страниц.
запомнить страницу окна0 в переменную.
включить туда нужную страницу.
при необходимости повторного обращения к ОС, обменять текущее значение окна0 на значение из переменной. отработав, вернуть туда свою страницу.
при выходе из программы, восстановить страницу Ос из переменной в окно0, сделать ld bc,0x0041:rst 0x10:jp $ (глюкоуловитель).
ничего сложного.