Есть ли способ программе определить на z80 она выполняется или на его эмуляторе?
Есть ли способ программе определить на z80 она выполняется или на его эмуляторе?
можно определить по некоторым неточностям\ошибкам эмуляции
но никто не гарантирует что защита от эмулятора потом не сработает на каком нибудь железном кривом клоне с железным кривым клоном z80
а эмуляторы потом вскоре пофиксят
и будет несколько обидно :)
в придачу в процессе определения что мы на эмуляторе
можно повесить как кривой эмулятор так и кривое железо...
можно ловить на хитрых командах, но результаты различаются на реальных NMOS/CMOS
применительно к спеку можно устроить порчу ячеек памяти манипулируя с R (эмули на такое не способны)
А если дополнительно установить на плату чип, который невозможно сэмулировать? Есть идея майнить на спектрумах специальную криптовалюту, чтобы ее невозможно было майнить на эмулях. Иначе на мощных компах процесс пойдет в сотни раз быстрее и она обесценится. Ее же ( эту крипту) использовать в целях расчета между спектрумистами. Заодно будет и дополнительный стимул железом с z80 обзаводиться.
как вариант - посмотреть как это делают для FUZIX:
https://github.com/EtchedPixels/FUZI...util/cpuinfo.c
если честно, разбираться самому - лень (ввиду сомнительной полезности данных знаний), но чототам следующее из LD A,R и подобного
- - - Добавлено - - -
Ахах, там по тексту "вот тут должны быть пустые строки и процедура строго раньше вызова because of bug in {лучшем компиляторе} SDCC" :)))
Есть, и достаточно нехитрый способ. Причём тип процессора вообще не важен (речь про детект работы ПО под эмулятором, а не на реале). Но свою "находку" пока не могу рассказать :) В своём ПО активно использую, достоверность 146% !
- - - Добавлено - - -
Найти и обезвредить причинный участок кода никакая не проблема.
- - - Добавлено - - -
Всё равно финал всех заморочек будет в виде: "if <чего-то там> then <туда-то> else <досвидос>"
В отладчике эмулятора это ловится на раз-два, вместо "if" записывается "goto" и gotoво дело :)
программно это можно запутать - компиляция/байткод - вычислить будет очень сложно.
..................
Denn, вот простой пример - адвентюра для +3 http://www.tzxvault.org/Spectrum/Disks/Myth.zip
попробуй обойти запрос на рег.данные