SAS Emulator (эмулятор «ПК-01 Львов»)
Когда-то, года два-три назад, один хороший человек, на одном из форумов выложил Дельфи-исходники эмулятора ретро машины «ПК-01 «Львов». Я используя их, решил написать свой эмулятор «ПК-01 «Львов» для ОС Windows.
Некоторое время я тот эмулятор дорабатывал, после чего забросил и забыл.
Когда я познакомился с КОС и решил написать, что либо для КОС, вспомнил о том эмуляторе, но не сразу решился реализовать его для КОС, так как в программировании на ассемблере, я очень слабоват, а в других ЯВУ, таких как VS6 и прочих, которые можно бы было использовать для написания программ для КОС, я «абсолютный ноль».
Я делал всевозможные пробы и попытки создать хоть какую-то игру для КОС и всё время меня мысль наталкивала на написание эмулятора, так как, если написать ОДНУ игру или программу, - будет всего лишь ОДНА игра (программа). Если написать эмулятор, то будет, - десятки, сотни игр и программ для какой либо ОС.
Понятное дело, что эмулятор такой же как для Windows, я написать не смог бы для КОС, ни за что и никогда. Понимая это я поступил следующим образом: Почему бы не написать эмулятор который будет уже со встроенной в него игрой (программой)?!... а создавать такие «кос-екзешники» можно будет с помощью доработанного эмулятора который для Windows.
Прошу внимания, почтенную публику, познакомится с эмулятором-со-встроенной-игрой
данный эмулятор, не является полноценным для использования. Он ещё в очень «сыром» виде и будет дорабатываться.
Пока, для примера, реализованы, лишь некоторые игры, такие как «Aerocobra», «Arcanoid», «King Valey», «Rick1», «Пьяный лифтёр». Да и клавиатура реализована не полностью и «со смещением» клавиш, так как я еще не разобрался как использовать дополнительные клавиши в SCANCODE. Надеюсь на помощь форумчан.
Реализованы следующие клавиши:
ВВЕРХ — “P” (scancode: 25/153)
ВЛЕВО — “L” (scancode: 38/166)
ВНИЗ — “;” (scancode: 39/167)
ВПРАВО — “'” (scancode: 40/168)
ПРОБЕЛ и ВВОД, - соответвуют расположению на клавиатуре.
Остальные пока не реализованы.
Прошу все оценить моё творение, с учётом того, что это всё таки «черновик», а так же хотелось бы конструктивной критики и пожеланий, а самое главное помощи в совершенствовании этого творения.
SAS Emulator (эмулятор «ПК-01 Львов»)
P.S. онлайн антивирус https://www.virustotal.com , опять чего-то там жалуется на наличие вирусов в "SASEmulator for Windows.7z". Ну уж незнаю! Установленый на компьютере Avast, - не жалуется!
P.S. забыл написать: архив "SASEmulator for Windows.7z" [3.26 МБ] с играми в комплекте, точнее говоря прямо в эмуляторе.
Получается, что с каждой игрой, будет дублироваться эмулятор. Как-то расточительно, помоему. Эмулятор наверно больше весит, чем один файл с игрой?ALEXS1983 wrote:Понимая это я поступил следующим образом: Почему бы не написать эмулятор который будет уже со встроенной в него игрой (программой)?!... а создавать такие «кос-екзешники» можно будет с помощью доработанного эмулятора который для Windows.
А почему бы, не отдельно эмулятор? А игры, можно было бы, загружать в эмулятор, через ассоциации в assoc.ini, при помощи файлового менеджера.
Как по мне - так стрелочки, были бы удобнее. Но, пишущему виднее.ALEXS1983 wrote:ВВЕРХ — “P” (scancode: 25/153)
ВЛЕВО — “L” (scancode: 38/166)
ВНИЗ — “;” (scancode: 39/167)
ВПРАВО — “'” (scancode: 40/168)
P.S. Не плохо бы расширение .bin, из файлов убрать. А то неудобно, переименовывать каждый файл, перед началом игры.
P.P.S.А ещё, 100% загрузка ЦПУ игрой, напрягает!
P.P.P.S. Эх, жаль масштабирования нет! А так, не плохо.
Ну сейчас приблизительно подсчитаем: запускной файл в целом 377600 байт, если убрать массивы, которые могут быть созданы во время запуска (может выделяться им память), то можно вычесть из операривки-эмуля 48000 Байт,(остальное биос 16000Байт всё равно должен оставаться), можно еще вычесть видеопямять 16000 байт, можно вычистить «черновую» (предыдущего кадра) видеопамять 16000 байт которая тоже может выделятся при запуске, ну там, порты - 256 байт, флаги - 256 байт........Yason wrote:Получается, что с каждой игрой, будет дублироваться эмулятор. Как-то расточительно, помоему. Эмулятор наверно больше весит, чем один файл с игрой?
О-о-о-о-о! Тут на остальном можно и не заморачиваться, сама картинка для вывода на экран содержится в файле и её масив занимает 262144 байт.
Ну вот теперь подсчитаем:
если сделать, что картинке будет выделяться память во время запуска то размер запускного станет, 377600- 262144 = 115456 байт вот это по существу! Ну остальное если отминусовать то 115456 — 48000 - 16000 - 16000 — 256 — 256 = 34935 — получается что это мог бы занимать сам код с биосом (16000 байт) (но без игры), если вычесть биос (для интереса) то сам код исполнительный код («в чистую») приблизительно равен 18935.
Сама игра со «всеми патрохами» (и с биосом) занимает 65536(RAM и ROM) +16384(VIDEO картинка изначальная, иногда можно обойтись)+256(порты)+256(флаги)+(ну 100 байт на регистры и прочее)= ну скажем 82532.
А вот теперь объясню очень существенные вещи.
Ассемблер я как таково не знаю. Точнее говоря знаю поверхностно. А про функции КОС я вообще молчу. Если ты, Yason, готов предоставить мне готовую часть кода которая будет выделять и освобождать массив...
Code: Select all
; размеры области для рисования
CanvasWidth = 256*1
CanvasHeight = 256*1
ImageData rd (CanvasWidth * CanvasHeight) ; сюда рисовать перед выводом на экран
Code: Select all
PutPixel_x: rd 1
PutPixel_y rd 1
PutPixel_color rd 1
PutPixel:
mov eax, [PutPixel_x]
mov ebx ,[PutPixel_y]
mov ecx ,[PutPixel_color]
imul ebx, CanvasWidth * 4
mov [ImageData+eax*4+ebx], ecx
ret
Об остальном позже.
Продолжение.
2. Считаю, (может быть по себе любимому ), что люди не любят «заморачиваться» на «прибамбацах» эмуляторов, - Файл/отркыть/закрыть и т. д. И вот решил пойти таким путём, который в сочетании с моими «нулевыми» знаниями о том, как создавать меню в форме «файл\открыть\закрыть и т.д», как загружать, сохранять файл и т. д. можно написать эмулятор со встроенной игрой, без всяких «прибамбацов», а генерировать это будет «SASEmulator for Windows.7z». Если ты его (SASEmulator for Windows.7z) рассматривал, то мысленно можешь представить, что, - выбрал игрушку, даже выбрал момент с которого можно сохранить в запускной-КОС-файл, жмёшь «Generate for KOS” (или что-то подобное, “save for KOS”, оно еще пока не реализовано). И вуа-ля! Готовый кос-«ексзешник»»! Причём, что хорошо, что всё в единственном файле(!), “носись с ним” как “дурень со ступой” по каталогам как с готовым и единственным файлом в котором «всё при нём»!
Также планируется тот генератор сделать с настройками быстродействия, «легкой» калибровкой цветов, и калибровкой клавиатуры и т. д.
3.Ты и впрям думаешь, что для КОС это творение нужно в виде эмулятора ?!... рассмотри игрушки в SASEmulator for Windows.7z, задай себе вопрос,- какое количество ты хотел бы, чтобы они были под КОС ?!... думаю, 2 или 3 или 5, да пусть даже и 10. Ну вот, сгенерировал бы нужные игры под КОС и вуа-ля, «забрасывай» SASEmulator for Windows.7z в архив или «на мусорку», играй только в те, что выбрал, со временем и те поудаляешь при необходимости.
Продолжение следует.
1.Как я уже говорил, - я новичок в программировании для КОС и не знаю как это делать! Yason, ты готов помогать кусками готового кода ?Yason wrote:А почему бы, не отдельно эмулятор? А игры, можно было бы, загружать в эмулятор, через ассоциации в assoc.ini, при помощи файлового менеджера.
2. Считаю, (может быть по себе любимому ), что люди не любят «заморачиваться» на «прибамбацах» эмуляторов, - Файл/отркыть/закрыть и т. д. И вот решил пойти таким путём, который в сочетании с моими «нулевыми» знаниями о том, как создавать меню в форме «файл\открыть\закрыть и т.д», как загружать, сохранять файл и т. д. можно написать эмулятор со встроенной игрой, без всяких «прибамбацов», а генерировать это будет «SASEmulator for Windows.7z». Если ты его (SASEmulator for Windows.7z) рассматривал, то мысленно можешь представить, что, - выбрал игрушку, даже выбрал момент с которого можно сохранить в запускной-КОС-файл, жмёшь «Generate for KOS” (или что-то подобное, “save for KOS”, оно еще пока не реализовано). И вуа-ля! Готовый кос-«ексзешник»»! Причём, что хорошо, что всё в единственном файле(!), “носись с ним” как “дурень со ступой” по каталогам как с готовым и единственным файлом в котором «всё при нём»!
Также планируется тот генератор сделать с настройками быстродействия, «легкой» калибровкой цветов, и калибровкой клавиатуры и т. д.
3.Ты и впрям думаешь, что для КОС это творение нужно в виде эмулятора ?!... рассмотри игрушки в SASEmulator for Windows.7z, задай себе вопрос,- какое количество ты хотел бы, чтобы они были под КОС ?!... думаю, 2 или 3 или 5, да пусть даже и 10. Ну вот, сгенерировал бы нужные игры под КОС и вуа-ля, «забрасывай» SASEmulator for Windows.7z в архив или «на мусорку», играй только в те, что выбрал, со временем и те поудаляешь при необходимости.
Продолжение следует.
Yason wrote: Как по мне - так стрелочки, были бы удобнее. Но, пишущему виднее.
Ответ всё тот же: я не знаю как это делать! Но этим я конечно займусь в первую очередь.
Вот смотри код:
(
Пояснение к коду.
В начале программы переключаю в сканкоды, вот так вот