PDA

Просмотр полной версии : Управление эмулятором из zx-программы



Spectre
05.03.2006, 23:53
За этим загадочным заголовком кроется просьба к уважаемым авторам эмуляторов сделать возможность немного управлять эмулятором из эмулируемой программы. Конкретно интересует возможность включения/выключения максимальной скорости (удобно будет аласм подправить на включение во время компиляции), режимов экрана (в том же аласме включать/выключать режим Anti64).

Чтобы не было ложных срабатываний можно в конфиге ввести настройку отключающую эту фичу.

Как будет выглядеть само управление? Например так:

LD HL,#0102
LD HL,(#1234)

Где в H-номер операции, в L-значение этой операции, а по кодам #21 xx yy 21 34 12 эмулятор определяет что это к нему стучаться.

Можно дать возможность и читать текущие настройки, для этого в H или L устанавливаем 7-ой бит.

Разумеется вариантов реализации куча, я подправлю аласм под любой и выложу для всех.

p.s. Насколько я помню в US когда-то было что-то подобное...

Sinus
06.03.2006, 00:03
а зачем городить эмуляторскую фигню если давно есть KAY (турбо висит на порту)

Spectre
06.03.2006, 12:14
Есть еще и Скорпион, где турбо программно включается и выключается, но эмуляторы это все равно не поддерживают.

А вообще вопрос стоял шире, не из-за одной турбы "городить эмуляторскую фигню". Читай внимательно первое сообщение.

Vladimir Kladov
06.03.2006, 12:31
Если делаять, то мне такой интерфейс не нравится. Зачем замедлять даже одну команду (LD HL,(xxxx)), добавляя проверку адреса там или еще каких-то условий, когда в ZX есть куча не использованных команд. Как например сделан SLT Trap для подгрузки уровней: ED FB .

Точно так же лучше сделать ED FF - проверка наличия поддержки набора функций, меняет значение A. Т.е. если ничего не делается, и ничего не поддерживается, то ничего эта команда и не меняет. Если есть поддержка расширений (управление эмулятором), то XOR A: DB $ED, $FF - и в A - набор до 8 флажков. Пусть допустим бит 0 - поддержка управлением скоростью. И тогда LD HL,xxxx : ED FE - меняет скорость. Значения xx например такие:
0 - пауза, 10 - 10%, 50 - 50%, 100 - 100%, 255 - 255%, 65000 - 65000%, 65535 - full throttle.

SMT
06.03.2006, 13:27
фигня всё это, потому что надо унифицировать интерфейс для всех эмуляторов, что вряд ли возможно из-за различий в фичах, которые авторы эмулей захотят включать через API (EDFF, кстати был раньше в unreal)

Spectre
06.03.2006, 14:17
фигня всё это, потому что надо унифицировать интерфейс для всех эмуляторов, что вряд ли возможно из-за различий в фичах, которые авторы эмулей захотят включать через API (EDFF, кстати был раньше в unreal)

Абсолютно верно. Я думаю надо что-то в таком роде:

Функции 0..#3f - общие для всех эмулей, типа управления скоростью, растактовки, модели памяти, etc

Функции #40..#4f - специфические фичи US

Функции #50..#5f - специфические фичи EMUZWIN

и т.д.

Что-бы было с чего начать, давайтe сделаем функцию №0, управление скоростью эмулятора, где 0..250 - скорость Z80 в процентах от "стандартной", 255 - максимально возможная.

Vladimir Kladov
06.03.2006, 15:56
Давайте ED 00 - ED 3F не трогать, а (или наоборот ED C0 - ED FF, но там уже все равно SLT Trap, он вроде как стандарт де-факто)? Тем более что в каком-то древнем эмуле ED 00 - ED 3F они были под завязку. Вообще надо задействовать меньше поменьше "трапов". Номер функции можно передавать например в A, доп. параметры если надо в DC, DE, HL, так же и на выходе если надо что-то получать. Тогда в этом смысле ED FF - проверка наличия фичи, а ED FE - функции (номер в A - можно и те же номера сохранить, и еще запас будет). Так пойдет?

Тогда A=0 - управление скоростью, A=1 - "чтение" скорости в HL (можно было бы за 1 раз сделать, в HL - возвращать предыдущую, но если этого вдруг делать не нужно, лучше эмулятор не дергать, или надо тогда выделять какое-то значение - "оставить скорость" неизменной).

Насчет 254 максимум - маловато будет. Я сегодня как раз гонял RZX-ы, у меня почти все на 1500%, некоторые на 3000%, а отдельные на 5000% бегают. Почему бы и не задавать тогда в HL. Лет через 10 65000% будет нормуль.

Vladimir Kladov
06.03.2006, 16:18
Думаю чего не хватает: это определения типа эмуля. Пусть в той же ED FF в HL возвращает две буквы: H='U', L='S', если SMT поддержит и в моем H='E', L='W'. А уже в A - набор флажков по группам поддержанных операций.

Знахарь
06.03.2006, 16:47
Наконец-ТО!!! Давно пора!!!

SMT
06.03.2006, 18:04
надо использовать минимум трэпов (то есть один, например, #EDFF) и перепровериться 100 раз (например, у меня раньше были 6-байтная сигнатура 'unreal' в регистрах bc,de,hl), чтобы какой-нить супер-тест недокументированных команд случайно не напоролся на трэп. с другой стороны, кодеры скажут, что неудобно пользоваться очень длинными процедурами обращения в api. сейчас я подумал о таком варианте - сделать 1 функцию, которая проверяет кучу условий (во избежание случайного срабатывания), возвращает тип и версию эмулятора и устанавливает флажок, который позволяет обращаться к EDFF с облегченными параметрами (без перепроверок). флажок сбрасывается при reset или загрузке нового снепшота


Функции #40..#4f - специфические фичи US
Функции #50..#5f - специфические фичи EMUZWINодин человек хочет, чтобы в его редакторе можно было авто-включить функцию text64, причём в регистрах указать адрес и другие параметры фонта. а потом эта функция появиться в другом эмуле, ес-но, с другим кодом включения. вот будет радости детектить тип эмуля и включать режим по-разному ;-)

Spectre
06.03.2006, 18:16
Сдались вам эти ED nn команды. Мне больше нравится последовательность которая состоит из документированных команд (чтобы с ассемблерами и отладчиками проблем не было), но с околонулевой вероятностью встречается в реальном коде.

Смысл детектировать эмулятор я вообще не вижу. Да и что должна сделать программа если она хочет включить режим пентагона, но ей это не удается? Ничего!

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

Vladimir Kladov
06.03.2006, 19:47
2Smt: Вообще- то EDFF - это NOP чистой воды. Так что 100 раз перепроверяться не надо. Если этот трап что-то изменил, то это трап :)

2Spectre: если что-то делать, то пусть будет на отдельных командах, и не влияет ни на долю микросекунды на скорость выполнения других команд. А мы раньше ничего не делали, и все было хорошо. А пусть теперь будет. Всегда можно опцией/конфигурацией вырубить/врубить.

SMT
06.03.2006, 20:23
Вообще- то EDFF - это NOP чистой воды. Так что 100 раз перепроверяться не надо. Если этот трап что-то изменил, то это трап
надо. этот #EDFF может быть среди мусора внутри ксорки. если влияет на регистры, не расксорится же

Vladimir Kladov
06.03.2006, 20:55
если такое чудо попадется, отрубить недолго - в опциях (особенно если опции отрубаются конфигом на лету). Это же когда сама ED FF в этой ксорке исполняется. А зачем ее в здравом уме выполнять? Только чтобы замутить покруче разве...

SMT
06.03.2006, 21:32
если такое чудо попадется, отрубить недолго - в опциях (особенно если опции отрубаются конфигом на лету). Это же когда сама ED FF в этой ксорке исполняетсяа попробуй догадайся, что именно надо отрубить. особенно когда этот #EDFF был сделан полгода назад и подобных проблем раньше не было

А зачем ее в здравом уме выполнять?а зачем в здравом уме в загрузчики между ксорками помещать приветы? а зачем на эти приветы передавать управление, вываливаться в ПЗУ-48 по ошибке или в калькулятор и запускать следующую расксорку как обработчик сообщения rst#08? пойди пойми этих спектрумистов. причём зарубежные ничем не отличались ;-)

Vladimir Kladov
07.03.2006, 12:57
я по умолчанию сделаю выключено. Если включит и не догадается зачем это сделал, это проблемы юзера. Но серьезно вряд ли будет проблема.

Well. Можно сделать такую штуку: пусть при вызове этих фич IX показывает на строку в памяти: 'Emulator traps'. Так - достаточно?

SMT
07.03.2006, 13:13
строка - нормально. а может, действительно, сделать так, чтобы эмулируемая машина не имела возможности узнать, что сработал TRAP? все нужные функции (даже гипотетические) не требуют возврата данных: скорость, режимы постобработки изображения/звука, раскладка стерео для AY

Vladimir Kladov
07.03.2006, 15:33
ну почему же, скороть текущую как раз можно сделать чтобы узнавать. Например - узнал, сохранил, выставил новую (большую) сделал дела, врубил прежнюю. Другое дело что для этой фичи еще опцию можно добавить - типа не реагировать. А прикольно например: аудиоплеер, который читает скорость эмуляции, подгоняет скорость аудио, чтобы оно шло как с обычной скоростью хе-хе.

По идее через трапы много чего можно сделать. Попросить подрубить оборудование. Включить нужную модель. Да хоть движок графический 3D реализовать. :)

Spectre
07.03.2006, 15:37
строка - нормально.

Строка - это дико. Одно дело впихнуть STS'кой в код программы 5 байт, включающих турбо, совсем другое дело созранить IX, вызвать трап, подсчитать CRC полученной строки, сравнить с нужным, восстановить IX. Это уже байт на 50 потянет. А значит по памяти их не вспомнишь, да и место выискать придется.

Тем более еще раз повторюсь: не надо ED и прочие префиксы, если я этот код захочу дизассемблировать, поймет ли его дизассемблер? Плюс в разных ассемблерах разные обозначения недокументированных команд.


а может, действительно, сделать так, чтобы эмулируемая машина не имела возможности узнать, что сработал TRAP? все нужные функции (даже гипотетические) не требуют возврата данных: скорость, режимы постобработки изображения/звука, раскладка стерео для AY

Вот, все ближе и ближе к спектрумским программистам. :)

SMT
07.03.2006, 16:14
По идее через трапы много чего можно сделать. Попросить подрубить оборудование. Включить нужную модельмодель - некорректно. по хорошему, после смены модели (т.е. пзу и портов памяти) нужен reset. трап, вызывающий reset, бесполезен. если только не модель, а времянки (нафига это кодерам)

Да хоть движок графический 3D реализоватьи под этот движок будет ровно 1 игра, написанная автором эмулятора ;-)

скороть текущую как раз можно сделать чтобы узнавать. Например - узнал, сохранил, выставил новую (большую) сделал дела, врубил прежнююочень сомневаюсь, что будут пользоваться значениями, отличными от normal/max. интерактивную прогу или демо немного ускорить нет смысла (если есть, юзер сам это сделает в настройках эмуля. а принудительно не надо), на реалах будет тормозить. проще тогда писать полноценную писишную версию

другое дело созранить IX, вызвать трап, подсчитать CRC полученной строки, сравнить с нужным, восстановить IX. Это уже байт на 50 потянетчуть поменьше -
call nn
db 'emulator traps'
nn: pop ix
dw #FFEDтак и знал, что кодеры накинутся считать байты ;)

Знахарь
07.03.2006, 17:22
Ну а чем не катит как в унреале было ? Правильно : можно дизасмить и тп. тоже сомневаюсь в необходимости скоростей нормал и макс... ну мож еще турбо 200% ???

так же поддержу независимость от эмуля. просто функции. чего авторам эмулейне сделать стандарт, так сказать. номеров функций в 1 байте мнооого вот их поделить, одинакоавые поддержать, разные поделить и все дела...

короче Spectre - давай как оно конкретно будет... я всеми конечностями ЗА!

offt: SPECTRE!!! - как там QC 311B c sprView ??? :confused:

Vladimir Kladov
07.03.2006, 17:52
Сразу скажу: по-хорошему это или не по-хорошему, но я нарочно делал так, чтобы модель можно было менять на ходу и по возможности при этом не делать ресета. По крайней мере если ишра уже работает - нафига ей ПЗУ. А по ОЗУ многие ОЗУ и так сходятся. "Смена модели" в этом случае - это просто переход к другой дешифрации портов, другому мультиколору, таймингу, звуку. Мне вообще здорово помогало при отладке мультиколора, когда я еще не знал под какую колору та или иная дема заточена. Правдя в этом случае я тайминг сенял, моделей как таковых у меня тогда и не было. Ресет пусть юзер делает, если хочет.

Vladimir Kladov
07.03.2006, 18:40
и мне абсолютно по барабану поймет или не поймет конкретный дизассемблер эту инструкцию (мой-то поймет, он умный :) ). Мне важнее, что с префиксом ED - я просто перехожу по таблице jump-ов в эмуляторе, если траповский, то он начинает там чего-то делать, а если не траповский, то и делать ничего не надо. С какой стати я должен добавлять такты ПЦ на анализ дополнительных условий в обычной команде. Она должна сделать то, что ей полагается - за минимальное число тактов, и бежать дальше. Это только кажется, что у эмулятора море времени на эмуляцию кадра (70000 тактов - подумаешь делов-то). А если включен какой-нибудь режим графики типа HQM или Blur motion? А если эмулятор запущен на медленном ПЦ - до 200МГц? Я согласен только на префиксы ED (другие неиспользуемые команды тоже подошли бы, но их не так много, эквивалентных NOP'у). Собственно, я уже и сделал, осталось только добавить, что по IX лежит "та строка". А код правда, чего вы начинаете байты-то считать. Зато уже 99.999999% что никакие ксорки не сломаются. Насчет CRC я не понял. Какое еще CRC? Вот интерфейс, который я реализовал, дословно:

PUSH IX:LD A,0:LD IX,strap:DEFB $ED,$FF:POP IX
RRCA:JR NC,@1;если нет перехода, то есть поддержка speed-control, HL='EW'

PUSH IX:LD A,1:LD IX,strap:DEFB $ED,$FE:POP IX
;HL=текущая скорость

HL=new_speed
PUSH IX:LD A,0:LD IX,strap:DEFB $ED,$FE:POP IX
;установлена новая скорость

strap: DEFB 'Emulator traps';финальный байт или флаг не нужен в строке

(Не, ну можно оптимизировать, это я так, для ясности написал по-простому. Уже проглядывается, что это один и тот же код, и его самомодификацией можно переиспользовать, чтобы 3 раза не дублировать).

Еще одна потенциальная возможность: плагин сделать, который будет дополнительные трапы обрабатывать. Передавать этому плагину адреса блоков памяти и регистров процессора, и пусть с ними делает чего хочет. Возможное применение: трап-заглушка будущей какой-либо фукнциональности, которую проще реализовать на первых порах пока прога отлаживается не кодом в спеке, а кодом в ПЦ. Или трап-заглушка обращения к некоторому внешнему оборудованию, которое еще не готово к реальному подключению к спеку (но есть шанс проэмулировать его на ПЦ или просто обатиться к нему на ПЦ), а протестировать хочется, и софт делать надо (и возможно) одновременно или "до того как".

Spectre
09.03.2006, 10:21
Вот интерфейс, который я реализовал, дословно:

PUSH IX:LD A,0:LD IX,strap:DEFB $ED,$FF:POP IX
RRCA:JR NC,@1;если нет перехода, то есть поддержка speed-control, HL='EW'

PUSH IX:LD A,1:LD IX,strap:DEFB $ED,$FE:POP IX
;HL=текущая скорость

HL=new_speed
PUSH IX:LD A,0:LD IX,strap:DEFB $ED,$FE:POP IX
;установлена новая скорость

strap: DEFB 'Emulator traps';финальный байт или флаг не нужен в строке

Ну если так удобнее авторам эмуляторов, то делайте так. Я, как писал в первом сообщении, поддержу любой стандарт. Только один вопрос: обязательно ли проводить проверку наличия трапов (мне было бы удобнее не проводить) перед началом работы с ними?

Осталось определится с нужными операциями и их номерами. Мой вариант такой:

Memory model: PENTAGON, SCORPION, KAY, PROFI, ATM450, ATM710
Memory size: 0 = 0Кб, 255 = 4096Кб (то есть каждая единичка соответствует 16Кб)
CMOS type: none, DALLAS, 512Bu1
CMOS size: 0..32Кб (с шагом 1Кб)

EFF7mask
SMUC features

RESET to: BASIC,DOS,MENU,SYS,CACHE,...

Keyboard Layout
Mouse type: NONE/KEMPSTON/AY/emulate kempston joystick on mouse
Mouse Scale
Swap mouse buttons

Frame ; t-states in frame
Paper ; t-states before paper
Line ; t-states in line
int ; int freq
intlen ; int length in t-states
EvenM1 ; align M1 cycle to even T-state (for scorpion)
4TBorder ; update border every 4T states (for scorpion)
FloatBus ; unstable data bus, unstable data bus in TR-DOS mode

AtmPalette

VSync
Full Screen
Border size

[...]

Короче практически весь конфиг US нужно сюда переписать. Выкинуть только возможность сменить частоту экрана, диск и прочие системные фичи, то есть то что должен менять только сам пользователь.

SMT
09.03.2006, 10:44
Короче практически весь конфиг US нужно сюда переписатьда вы чего, люди! что кроме макс. скорости будет реально использоваться в программах? ага, ты лучше пользователя знаешь, что ему просто необходим FullScr, и что с vsync у него хватает производительности и не глючит видеокарта
Только один вопрос: обязательно ли проводить проверку наличия трапов никто не заставляет. включай скорость сразу, без проверок на то, что получилось (а если не получилось, кому жаловаться?) разве что реализовать идею с флажком, когда трап #EDFF требует строку в IX и отдаёт версию эмуля, ставит флажок. а последующие вызовы #EDFE уже не требуют использования IX (если флажок установлен)

Знахарь
09.03.2006, 11:34
Реально использоваться ? Anti64 - обязательно!

Vladimir Kladov
09.03.2006, 20:04
Щаз. На что нас хватит, то и поддержим. Что есть анти64? Против чего 64? Видеоэффекты и полный экран включать - это прерогатива юзера все-таки, а не программы спековской. Спековские проги вообще-то для реала должны (гм, как бы) делаться, а не для эмуля. Эмуль я так понимаю - для людей, которые не переносят запаха горелой канифоли, и наоборот для разработчиков железа, чтобы свои идеи воплотить быстрее и аккуратнее.

Знахарь
09.03.2006, 21:05
Да ну ты чего, Володь ???

Это нужно многим нам для 1 лишь АЛАСМА с шрифтом 64 символа. И всё. Чтоб аласм это дело при запуске сам включал, при ОТпуске сам выключал. Это мечта идиота :) ... Spectre, я правильно говорю???. То же для макс. скорости при компиляции того же аласма. Конечно, лучше в ZXemuASMe - так не все хотят чего-то... А вот остальные лпции... имхо опционально, наверное...

Vladimir Kladov
09.03.2006, 21:39
Дык не понял. Пусть врубает видеорежим текстовой под АТМ-кой и все дела. Или чего я не дорубаю?

Знахарь
09.03.2006, 22:14
Так под АТМ ку нет асма - Аласма :( А кто его перепишет ? АлКо ? Не думаю...

Пытаюсь разъяснить:

Вот как выглядит просто аласм ... и аласм с фильтром anti64 - совсем другое дело :) гораздо читабельнее.

Vladimir Kladov
09.03.2006, 22:37
А, ну так то для unreal-а. У меня такого фильтра не предвидится. Автор аласма жив-здоров, а переделать аласм под АТМ не хочет? Нехорошо это. Есть еще Пентагон с 512х192, тоже высокое разрешение. (Есть еще 384х304, немного поменьше будет, вот сейчас ZX-Guide качаю, - типа кто-то где-то дал кому-то в качетсве ответа на вопрос по этому режиму на него намек. Что-то мне это все не нравится. Электронные СМИ должны бы быть более доступными. Типа нажал в гугле - и загрузил текст. Трудно что ли авторам своих "сми" выложить тексты. Нет, пусть мучаются, загружают в эмулятор и читают в оригинале, бедным квадратным шрифтом, убогой клавишной управлялкой... А главное - не индексирует гугль содержимое архивов, да еще в виде scl-trd-файлов!)

Знахарь
10.03.2006, 18:40
SMT!!!! а чего ты молчишь, когда "коллега" вопрошает ? мне кажется никто тут лучше тебя не объяснит Володе что к чему... тем более он явно неспроста интересуется :) , т.е. видимо будет реализовывать. Помоги прогрессу!

SMT
11.03.2006, 17:57
да не до этого мне. такая видеокарта сгорела :-( и других делов навалилось :-(

Spectre
12.03.2006, 20:40
Собственно я согласен с тем что "весь конфиг US" не нужен. ;) Лично мне бы хватило:

1. normal speed
2. max speed
3. anti64
4. default video mode (то есть который в конфиге прописан, у кого-то это double, у меня quadro)
5. Memory model
6. Memory size

Может потом что-нибудь еще понадобится в процессе претворения в жизнь.

Жду от авторов эмуляторов поддержки...

Spectre
12.03.2006, 20:47
Автор аласма жив-здоров,

Это не автор, а 5-ый "продолжатель". Глобальные изменения Аласма AlCo не потянет (сам как-то говорил).


а переделать аласм под АТМ не хочет? Нехорошо это. Есть еще Пентагон с 512х192, тоже высокое разрешение.

Переделка Аласма под АТМ примерно сопоставима с переделкой EmuZWin'а под MS-DOS... А может и на порядок тяжелее.

Под пентагон 512 проще, но стоит ли эти усилия конечного результата?

Знахарь
16.03.2006, 16:51
Действительно, переделка аласма - весьма мрачная задача. Слава богу, что хотя бы импрувится потихоньку то, что есть...

Кроме того АлКо гнет линию максимальной совместимости и "максимального минимализма" т.е. идти должно под 128к и занимать МИНИМУМ памяти. Предложение развернуть шрифт 6х6 в отд страницу для ускорения не принялось именно по этим соображениям... Мда... Но в этом своя логика, конечно есть... (хотя для себя я всё ж шрифт разверну :) )

Vladimir Kladov
16.03.2006, 19:38
Ну есть же еще условная компиляция. Символ MINIMAL_VERSION, и с ним максимальный минимализм, символ SUPPORT_EXTVIDEO, и используются дополнительные видеорежимы. Мне как программисту, много работающему с асмом проблема вообще не представляется сложной. Я ведь и эмуль делаю - основную часть - на асме. Именно благодаря условной компиляции и макросам мне удалось решить нерешаемую задачу: совместить скорость и поддержку такого огромного числа комбинаций всяких режимов. В итоге, мне не нужно отдельно выписавать код для режима 48 (чтобы оптимально было, и память адресовалась просто как 64К памяти подряд, по крайней мере на чтение), отдельно - на 128К с мультиколором, и отдельно - без мультиколора (я имею в виду именно фирменный мультиколор, отечественный мультиколор таких оптимизаций как раз не требует. А ведь раньше все было именно отдельно, даже для режима 256 цветов был отдельный код. (Я их просто устал синхронизировать с каждым изменением, проще оказалось сделать процедуру для компиляции PC-Asm в память на лету).

Или вывод текущей страницы текста настолько трудно выделить в отдельную процедуру, чтобы можно было задействовать раширенные режимы? В плане заменить эту процедуру хотя бы условной компиляцией и получить версию для АТМ того же или Пентагон 512х192 моно хотя бы.

Знахарь
17.03.2006, 16:49
это всё понятно, но есть еще 1 более страшная, что ли, проблема - места в странице аласма осталось чуть ли не 40 байт (точно щаз не вспомню, но сам факт) - т.е. как бы это культурнее... пукнуть там уже негде. Кстати, это бы в отд. ветку и хорошо подоить на ответы самого АлКо...

Vladimir Kladov
17.03.2006, 16:54
Чего-то вчера приключилось со связью - пропало сообщение. Повторяю:

Собственно я согласен с тем что "весь конфиг US" не нужен. Лично мне бы хватило:

1. normal speed
2. max speed
3. anti64
4. default video mode (то есть который в конфиге прописан, у кого-то это double, у меня quadro)
5. Memory model
6. Memory size

Может потом что-нибудь еще понадобится в процессе претворения в жизнь.

Жду от авторов эмуляторов поддержки...

1,2 я уже поддержал.
3,4 - это к SMT.
5,6 - такой вариант:

ED FF возвращает в A установленный бит 2 (не 1 и не 0, бит 1 оставлю SMT). И тогда:
ED FC регистр H, L - две буквы модели, DE - память в килобайтах. На входе - устанавливает модель / память, если соответствующий регистр не 0000, на выходе - возвращает модель и память, какие они были до вызова. Еще на выходе удобно сделать возврат номера модели. Можно и на входе по номеру, но мне кажется буквами удобнее:

S4 = Spectrum48
S1 = Spectrum128
S+ = Spectrum128+
S2 = Spectrum128+2
SA = Spectrum128+2A
SB = Spectrum128+2B
S3 = Spectrum+3
SE = SpectrumSE
T4 = Timex2048
T6 = Timex2068
SC = Sam Coupe
Di = Didaktik
Sc = Scorpion
Pe = Pentagon
Pr = Profi
A1 = ATM-1
A2 = ATM-2
A+ = ATM-2+
A3 = ATM-3
Sp = Sprinter
KA = KAY
Kv = Kvorum
Ho = Hobbit
PL = PLM Automatica
Le = Leningrad
Mo = Moskva
.....

Spectre
21.03.2006, 16:45
[наконец-то интернет у меня появился]

Идея с 2-мя буквами мне нравится, можно взять за основу. HL, DE для параметров годятся.

Только есть существенное замечание: не нужно возвращать предыдущее установленное значение, слишком неудобно запоминать и восстанавливать его. Лучше ввести команду "Сбросить все настройки в default'ные", так будет гораздо удобнее для программиста переделывающего чужие программы (добавил в начало программы установку нужного режима, при выходе сброс в default). При reset'е тоже есть смысл сбрасывать включенные програмно настройки в default'ные.

Vladimir Kladov
21.03.2006, 19:57
Непонятно, что такое default. Сохранить HL, DE сложно? Ну, извините, не знал. 8-]

(А зачем их вообще восстанавлиивать-то?)

Spectre
29.03.2006, 15:15
Непонятно, что такое default. Сохранить HL, DE сложно? Ну, извините, не знал. 8-]

Наверное уже очень давно не писал на реальном спектруме? ;) Я чередую: несколько месяцев пишу на пц, потом на спектруме. Так при переходе на спектрум некоторые вещи неприятно удивляют. Но что делать... :(


(А зачем их вообще восстанавлиивать-то?)

Культура. Поигрались с настройками, а при выходе из проги вернули те что юзер выставил.

Vitamin
29.08.2006, 12:58
Верну тему к жизни.
Продолжил доработку своего эмуля и в чисто практических целях пришлось ввести траповые команды. Почитал ветку и высказываю свои мысли:
1)траповые команды для отладочных целей
-определение возможности использования трапов
-получение счетчика тактов (от начала инта и всего тактов процессора)
-установка точек прерывания отладчика эмуля (прямые и отложенные)
-установка скорости работы
-и т.д.
2)трапы, определяющие тип компьютера (а тем более и тип памяти) НЕ НУЖНЫ!!! Стандартные тесты на размер памяти прокатят как на эмуле, так и на реале, а вот отдельные ветки только раздуют размер кода.
3)переключение разных режимов просмотра можно делать опционально эмулятором- по сигнатуре в памяти эмулятор сам включает нужный режим.