Запустил и даже немного поиграл. Итак, защита была не по цвету, а по байту в копирайте строки "МДОС 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
Собственно сам подозрительный код:
Код:
RAM:F07F                 mvi     a, 0
RAM:F081                 sta     byte_DA82
По адресу DA82h как раз тот самый пробел в копирайте МДОС. Если заменить 0 на 3, то игра запускается. В файле CAS это смещение 011Eh. Одно но, на экране лезут какие-то артефакты
В принципе можно дальше поковыряться, да попробовать подправить код. Но это после праздников. Ну или заново написать, таблицы знакогенераторов и цветов сохранились и я могу их легко вытянуть.
PS: определять оставшуюся жизнь игрока по цвету его корабля - это оригинально

- - - Добавлено - - -

Вот теперь полностью разобрался в защите.
Защита в следующем. Из ячейки 0DA82h берется байт. К нему прибавляется 7Fh и полученный результат пишется на адрес 9BC8h. В этом адресе находится старший байт параметра команды CALL (младший байт постоянный и равен 1Bh). То есть, происходит вызов подпрограммы по адресу (([0DA82]+7Fh) << 8) | 1Bh.
Пробежался по все адресам XX1Bh, начиная с 7F1Bh. По адресу 9B1Bh весьма "подозрительная" подпрограмма. Поставил в ячейку DA82h значение 9Bh-7Fh = 1Ch. И все, работает
Для не программистов. В файле SWING.CAS нужно в ячейку по адресу 011Eh прописать значение 1Ch.