Quote:
Мы сейчас попробуем разжалобить разрабов z88dk, чтобы они пошли нам навстречу и вернули взад 32-битность, как оно у них изначально и было.
Слушай, что-то мне твои подобные идеи перестают нравиться. Такое ощущение что это ТОЛЬКО ради меня(!) (во всяком случае в данный момент времени). А что далее ?!.. а вдруг мне это все не понравится и я не захочу этим пользоваться ?
попробуем разжалобить меня, чтобы я этим все таки пользовался ?!
Quote:
Дело в том, что в 64-битности z88dk нету особого смысла, они пошли на неё только из общего тренда.
От уж беда из-за этого "общего тренда", как бы дожить до тех времён когда вместо работы на тренд для реальных людей это будут делать. Или же тренд будет заключаться в том, чтобы оно работало где тольо можно, вплоть до утюгов!
По-моему такое давно пора.
Quote:
Но тебе я советую подумать хотя бы о 64-битной WinXP SP2 (такая есть, берётся на волшебных трекерах). У меня она стояла, потому что мне нужно было запускать 64-битные программы. По опыту скажу, что она чуть хуже переведена на русский (не всё переведено), но показала себя в работе даже стабильнее, чем 32-битная XP SP3. А по производительности я различий не заметил. Машинка, на которой стояла WinXP x64, двухъядерная, с процем Sempron и 2 Гб ОЗУ.
Спасибо за совет! Я просто не знал про существование WinXP 64. Надо как-то добраться и рассмотреть это все. Но это будет не сейчас это уж точно!
Quote:
Я понял особенность про экранное ОЗУ, но такого хитрого компилятора у нас нет, придётся этот момент учитывать вручную. Но я пока даже сам не знаю как можно задать в zcc произвольный адрес для кода и данных. Я до этого плотно работал только с SDCC (он для Z80).
Для начала я далее тебе накидаю документации, которая впринципе на форуме есть, однако её на форуме искать нужно. Ознакомься хотя-бы бегло с архитектурой ПК-01, подпрограммами ПЗУ, особенно экранным ОЗУ, как оно работает.
А по-поводу задать в zcc произвольный адрес для кода и данных, точно могу сказать, - как минимум один раз нужно будет переключить дальнейшую компиляцию з другого адреса.
Например, если компиляция начинается с $0000 то процедуры ввода на екран (спрайтов) должны находится в адресах $8000 - $C000. И вот когда компилятор скомпилировал все то что может быть в адресах с $0000, ему надо будет переключится на дальнейшую компиляцию с $8000 и продолжить компиляцию. Если быть уверенным, что программа и ее данные поместяться в $8000 - $C000, то можна начинать компиляцию с $8000 и как говориться не печалится.
Совсем уж в идеале компиляция должна происходить следующим образом.
Назовём RAM2 область $8000 - $C000.
1. Анализ всей программы, отбрасывание не используемых данных и процедур.
2. Нужные процедуры и данные должны быть как-то "меченные". что они должны быть компилированные в область RAM2. Толи эта помеченность в виде "RAM2;" или "RAM:=2;" или "{$RAM2}" сам понимаешь не суть важно. Автоматически это делать я (сейчас во всяком случае) слабо представляю как это возможно и возможно ли вообще.
3. Процесс компиляции начинаем с адреса $0000 причём с процедур которым не существенно область памяти . После того как компиляция таких процедур и данных закончена, "смотрим" адрес где это закончено, если он не привышает $8000, то переключаем адрес на дальнейшую компиляцию с $8000.
Как-то так.
Большинство игр построены на выводе спрайтов на экран, которые к тому же должны выводится быстро. Соответственно процедуры обработки спрайтов и данные спрайтов дожны находится в области $8000 - $C000, так как во время включения вывода в ВидеоОЗУ область $0000 - $7FFF становится недоступной (там в это время ВидеоОЗУ, в котором есть еще и прикол, что оно только "с_половины" той области т.е. $4000 - $7FFF. А $0000 - $3FFF - "глухо"). В процедуое вывода спрайта, в ёё начале должно включаться ВидеоОЗУ, а перед
RET, должно выключаться ВидеоОЗУ.
Из документации одной из подпрограмм ПЗУ
Quote:
16.Курсор в начало экрана
-------------------------
Точка входа EBE4.
Видимость курсора задаётся в ЯП BE3C (см. F809).
Примечание: перед обращением к подпрограммам EBBC, EBA5, EBE4 необхо-
----------- мо подключить экранное ОЗУ к шинам МП
MVI A, 0
OUT 0C2H
после обращения - отключить
MVI A,02
OUT 0C2H
Как оказалось (для меня новинка) что не каждая процедура ПЗУ это делает автоматически т.в. включение и отключение ВидеоОЗУ, хотя где-то в той же документации писалось, что ВСЕ процедуры корректно включают и выключают ВидеоОЗУ.
Тут еще один "прикол" есть. Я не знаю как в других Ретро-машинах, но в ПК-01, один байт ВидеоОЗУ - это четыре пиксела на экране и кодируются рассмотри как "прикольно".
Не, ну если писать "Охоту на лис" (как я понял это аналогия "Сапер" в винде), там быстрота вывода спрайта на экран не нужна, и при этом можно использовать процедуру ПЗУ, вывод точки на экран...
Quote:
1.Вывод точки на экран
----------------------
Точка входа F821.
Входные параметры:
BE50 - координата X (00...C7),
BE51 - координата Y (00...E0),
BE52 - цвет (00-фон,
01-"G",
02-"B",
03-"R").
То можна вполне компилировать программу с $0000, и не над чем не "париться". Но сам понимаешь, что процедура каждый раз включает и выключает ВидеоОЗУ (и это для вывода ОДНОЙ точки) а также высчитывает где та точка будет в ВидеоОЗУ так как один байт это четыре пикселя, то быстродействие вывода на экран одной точки приравнивается к БЕЙСИКовскому PAINT (правильно вроде команду назвал).
Вот такие пироги.
Quote:
Ошибки трансляции уровня "Оберон-в-Си" я оперативно исправляю. Но zcc это компонент третьих лиц, они с ним делают что хотят. Впрочем, там отзывчивые люди.
На данном этапе, это для меня "набор" фраз
сам понимаеш...
Quote:
Quote:
ты базовые конструкции предоставь чтобы компилрировать могло б такое как const, VAR, Byte, Word, Procedure ну и IF конечно!
и асм вставки (или как то так, чтобы "прямой" код КР580 можна было бы всю процедуру или частично делать) остальное "облахматить" не сложно!
Чтобы это все без ошибок работало!
Это всё есть. Даже куски кода на Си вставлять можно.
Ну вот и прекрасно! Если не считать, что в глаза это все не видел.
Quote:
Попробую сделать для Львова что-то осмысленное, если найду нужные подпрограммы. Встречный вопрос: а есть какие-то готовые подпрограммы на асме, которые можно использовать, взяв в качестве основы?
Не очень-то понят вопрос. Тебе чего например процедуры вывода спрайта на экран подкинуть ? (из своей игрушки "Лабиринт" и из "Пьяный лифтер").
Для начала ознакомься с документацией к ПК-01 которую кину в следующем сообщении. И после ты поймёшь чего тебе так не хватает. А я тем временем "наковыряю" вывод спрайта на экран.