Ну вот как-то так получилось. Файл BOOL - это игра МЯЧИК, файл без имени - это TEST, в котором название "Хобби" в начальной заставке заменено на "СУРА", KV - однобитная программа на бейсике, которая что-то вычисляет, ХИМИЯ - набросок на будущую таблицу Менделеева, а HELP - англо-русский словарь, построенный по принципу IF A$="CAT" THEN PRINT "КОТ".
Есть у меня такое подозрение, что вторая кассета была перезаписана владельцем. На WAV очень явно видны различия между сигналами, уровни у каждой пары файлов сильно отличаются.
Последний раз редактировалось scaraby; 08.11.2016 в 23:11.
Поскрёб тут по всем сусекам и сложил в одну папку все программы, которые у меня имеются для ПК8000. Набралось на сегодняшний день 300 файлов с хвостиком. Отсортировал по алфавиту, чтобы можно было в любой момент добавить файлы, если что-то новое отыщется. WAV не стал выкладывать, потому что есть утилита cas2wav. Выложил CAS. Кому надо, берите.
На Google Disk.
Там же в архиве zip.
в 1992году написал игру Space Wings - она в архиве Алексея под названием (SWING.HEX.cas)
в ней мной была сделана защита от копирования (при запуске с чужого диска, на втором этапе игра вылетала; при запуске с кассеты - на первом). к сожалению, ее так и не сломали.
в принципе, я помню, на чем основывалась защита, можно было бы ее убрать
к сожалению у меня уже нет ПК8000 (да и знаний не осталось),
но может кому-то из форумчан будет интересно подарить людям возможность поиграть в еще одну игру?
смысл защиты был в том что в дисковой системе (не синей с панелью файлов, а черно-зеленой, с командной строкой) менялся цвет символов; он где-то кодировался байтом, насколько помню там по умолчанию был 0x02 (зеленые буквы) на 0x03 (светло-зеленые буквы), или наоборот, сейчас уже не помню, но это можете посмотреть.
т.е. для простого пользователя это изменение было малозаметно, но игра правильно работала только при запуске с "правильной" (точнее - правленной) дискетой. После того как игра запускалась с диска, значение цвета оставалось в какой-то ячейке памяти (где-то в верхних адресах) - игра в начале каждого уровня брала это байт и использовала его как смещение для вызова какой-то своей процедуры или перехода.
как я уже говорил, все было рассчитано так, что первый уровень запускался, а на втором программа вылетала (но если используется файл с кассеты, то в этой ячейке наверное не 0x02 и не 0x03, а просто 0x00 или 0xff, поэтому вылет происходит сразу, на первом уровне).
т.е. лечение можно сделать просто :
1) найти где в загрузчике находится байт цвета символов,
2) посмотреть, где он остается в памяти,
3) в начале программы сделать вставочку - вызов процедуры, которая будет менять этот байт в памяти на нужный. (ну или заморочиться, найти то место в программе, где он читается и провести корректировку кода; хотя не помню, одно было такое место или может не одно).
ЗЫ. в игре пять этапов. после последнего - небольшой сюрприз
Последний раз редактировалось Valentinus; 21.12.2016 в 15:18. Причина: дополнил
Цвет текста и фона в системе МДОС задается командами:
mvi A, 2
out 88h
расположенными по адресам 0DA93h и 0DA95h соответственно. В образе диска это смещение 1713h и 1715h соответственно. То есть для изменения цвета достаточно поменять байт в файле образа по адресу 1714h. Например в файле DISK9.FDD. Цвет вполне себе меняется.
Однако, программа все равно вылетает после заставки. Как будет время - разберусь. Может даже сегодня вечерком попробую.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
хм. Алексей сказал, что он пробовал дважды считывать файл с кассеты, сравнил - ошибки при считывании нет. может кто-то уже наковырял до записи на кассету
а есть ли в программе чтение памяти по адресу 0DA94h (т.е. кода цвета)? хотя , признаться. я по молодости еще тот затейник был, мог не напрямую адрес использовать, а вычислять сложением.
может лучше пробежаться в турбодебаггере, до перехода к черту на кулички - по адресу вне адресного блока программы - понятно что где-то там и стоит эта "защита" (чорт бы ее побрал)
PS спасибо, что взялись !
Последний раз редактировалось Valentinus; 29.12.2016 в 21:47.
Запустил и даже немного поиграл. Итак, защита была не по цвету, а по байту в копирайте строки "МДОС 1.0 ". После версии стоит пробел, вот в этой ячейке и хранилось что-то нужное. Что именно - я пока не разобрался. Вообще складывается ощущение, что игрушка уже была кем то покоцана, либо попорчена. Например такой фрагмент:
Говорит о том, что здесь забили нопами запись в какой-то порт.Код:RAM:F007 mvi a, 82h RAM:F009 nop RAM:F00A nop RAM:F00B mvi a, 0FCh RAM:F00D out 80h
Или:
Собственно сам подозрительный код:Код:RAM:917E do_GAME: RAM:917E mvi a, ' ' RAM:9180 lxi bc, 768 ; 32*24 RAM:9183 lxi hl, 0 RAM:9186 call sv_FILLCHAR ; clear screen RAM:9189 call sub_9E74 ; clear variables RAM:918C ei RAM:918D nop RAM:918E nop RAM:918F nop RAM:9190 nop RAM:9191 nop RAM:9192 nop RAM:9193 nop RAM:9194 nop RAM:9195 nop RAM:9196 nop RAM:9197 nop RAM:9198 nop RAM:9199 nop RAM:919A nop RAM:919B nop RAM:919C nop RAM:919D nop RAM:919E nop RAM:919F nop RAM:91A0 nop RAM:91A1 nop RAM:91A2 nop RAM:91A3 nop RAM:91A4 nop RAM:91A5 nop RAM:91A6 nop RAM:91A7 nop RAM:91A8 nop RAM:91A9 nop RAM:91AA nop RAM:91AB nop RAM:91AC nop RAM:91AD nop RAM:91AE nop RAM:91AF nop RAM:91B0 nop RAM:91B1 nop RAM:91B2 nop RAM:91B3 nop RAM:91B4 nop RAM:91B5 nop RAM:91B6 nop RAM:91B7 nop RAM:91B8 nop RAM:91B9 nop RAM:91BA nop RAM:91BB nop RAM:91BC nop RAM:91BD nop RAM:91BE nop RAM:91BF nop RAM:91C0 nop RAM:91C1 nop RAM:91C2 nop RAM:91C3 nop RAM:91C4 nop RAM:91C5 nop RAM:91C6 nop RAM:91C7 nop RAM:91C8 nop RAM:91C9 nop RAM:91CA nop RAM:91CB nop RAM:91CC nop RAM:91CD nop RAM:91CE nop RAM:91CF nop RAM:91D0 nop RAM:91D1 nop RAM:91D2 nop RAM:91D3 nop RAM:91D4 nop RAM:91D5 nop RAM:91D6 nop RAM:91D7 nop RAM:91D8 nop RAM:91D9 nop RAM:91DA nop RAM:91DB lxi bc, 64 RAM:91DE lxi de, word_8F80 RAM:91E1 lxi hl, word_8FC0 RAM:91E4 call sv_MEMCOPY RAM:91E7 nop RAM:91E8 nop RAM:91E9 nop RAM:91EA mvi a, 26 RAM:91EC sta tmpData RAM:91EF lxi de, 0 RAM:91F2 RAM:91F2 loc_91F2: RAM:91F2 lxi bc, 32 ; bc = screen width RAM:91F5 lxi hl, screenBuffer ; 832 bytes RAM:91F8 call sv_MEMCOPY RAM:91FB lda tmpData RAM:91FE dcr a RAM:91FF sta tmpData RAM:9202 jnz loc_91F2 RAM:9205 ; put sprite Heroes
По адресу DA82h как раз тот самый пробел в копирайте МДОС. Если заменить 0 на 3, то игра запускается. В файле CAS это смещение 011Eh. Одно но, на экране лезут какие-то артефактыКод:RAM:F07F mvi a, 0 RAM:F081 sta byte_DA82
В принципе можно дальше поковыряться, да попробовать подправить код. Но это после праздников. Ну или заново написать, таблицы знакогенераторов и цветов сохранились и я могу их легко вытянуть.
PS: определять оставшуюся жизнь игрока по цвету его корабля - это оригинально
- - - Добавлено - - -
Вот теперь полностью разобрался в защите.
Защита в следующем. Из ячейки 0DA82h берется байт. К нему прибавляется 7Fh и полученный результат пишется на адрес 9BC8h. В этом адресе находится старший байт параметра команды CALL (младший байт постоянный и равен 1Bh). То есть, происходит вызов подпрограммы по адресу (([0DA82]+7Fh) << 8) | 1Bh.
Пробежался по все адресам XX1Bh, начиная с 7F1Bh. По адресу 9B1Bh весьма "подозрительная" подпрограмма. Поставил в ячейку DA82h значение 9Bh-7Fh = 1Ch. И все, работает
Для не программистов. В файле SWING.CAS нужно в ячейку по адресу 011Eh прописать значение 1Ch.
возможно это уже кто-то разобрался в защите и модернизировал ее, за собой я такого не помню, хотя давно было, может просто забыл ("позор на мои седины!"(С)). помню что когда продавал ее, покупатель попался дотошный хитрющий мужик, заставил меня показать где менять системный файл, чтоб он тоже мог ее копировать
сэкономил байт и бесконечное кол-во жизней сложнее вписать
попробовал
swings.hex.zip
ура, работает!
единственное - у меня подозрение, что стартует игра не с первого уровня, а с второго. мне кажется первый уровень я не такой хардкорный делал. хотя может это просто ложные воспоминания. точно сказать не могу - на четвертом уровне сейчас такой замес, что еще не прошел, представляю, что на пятом 0_0 (и в emu скорость эмуляции не понизить , к сожалению). вообще это моя беда была - делать слишком сложные уровни в играх надо было хоть количество жизней делать побольше
Андрей, большое вам спасибо и от меня, и от лица всех тех, кто еще играется с ПК8000!
Это просто шикарный Новогодний Подарок всем нам!!!!
Последний раз редактировалось Valentinus; 31.12.2016 в 09:16.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)