;
; ╔═════════════════════════════════════════════════════════════════════════╗
; ║     This file is generated by The Interactive Disassembler (IDA)        ║
; ║     Copyright (c) 2006 by DataRescue sa/nv, <ida@datarescue.com>        ║
; ║ Licensed to: Nikto                                                      ║
; ╚═════════════════════════════════════════════════════════════════════════╝
;
; Input MD5   : 722D6AF2A1233785977D4AD4632540B6

; ───────────────────────────────────────────────────────────────────────────
; File Name   : SUPERMAN.PIC.raw_uncr
; Format      : Binary file
; Base Address: 0000h Range: 1000h - 3CE8h Loaded length: 2CE8h

; Processor:        К1801ВМ1
; Target assembler: BKTurbo8 Cross Assembler


.la 10000
; ═══════════════════════════════════════════════════════════════════════════
; регистры на входе
; R0 = 5
; R1 = 33020
; R2 = 0
; R3 = 177716
; R4 = 0
; R5 = 36350
; SP = 716
PICTopStack = 5276

PicBgn:         mov     #20, @#177712
                add     R3, R5          ; R5 = 36266
                clr     R4
                add     R1, R5          ; R5 = 71306
                add     #170022, R5     ; R5 = 61330
                mov     R5, R1          ; R1 = 61330
                mov     R3, R2          ; R2 = 177716
                add     @#177706, R4    ; R4 = 2330
                add     #271, R4        ; R4 = 2621
                call    @#116622        ; Подсчёт контрольной суммы. R0 = 0, R2 = 0
                                        ; Вход:  R4 - длина массива
                                        ;        R5 - адрес начала массива
                                        ; Выход: R0 - контрольная сумма
                                        ;        R4 == 0
                                        ;        R5 - адрес за концом массива R5 = 64151
                                        ; R0 = 0
                add     @#754, R0       ; R0 = 1000
                bne     0ok$
                return
; ───────────────────────────────────────────────────────────────────────────

0ok$:           sub     #20, SP         ; SP = 676
                sub     #51030, R1      ; R1 = 10300
                add     #5555, R4       ; R4 = 5555

1$:             mov     (R1), R0        ; декодируем
                inc     R0
                swab    R0
                inc     R0
                mov     R0, (R1)+
                sob     R4, 1$
                tst     R5              ; R5 != 0
                bne     1ok$
                inc     R5

2$:             mov     (R2), R0
                rol     R0
                mov     R0, (R2)+
                sob     R2, 2$
                return
; ───────────────────────────────────────────────────────────────────────────

1ok$:           mov     @#177710, R1
                bic     #7, R1          ; R1 = 170, пофиг, не используется
                add     #TLGMCAddr, R4        ; R4 = 400
                mov     #331, R2
TLOffset = TLPICAddr - TLGMCAddr
3$:             mov     TLOffset(R4), (R4)+ ; переносим магнитофонный загрузчик в новое место
                sob     R2, 3$
                ; патчим
                mov     #TrapTo14-TLOffset, @#TLGMCAddr+OffsTL01
                mov     #Retry$-TLOffset, @#TLGMCAddr+OffsTL02
                mov     #Name$-326-TLOffset, @#TLGMCAddr+OffsTL12
                mov     #40730, @#PatchML12 ; новый адрес вывода строки "SUPERMAN"
                mov     #GMCLoad, @#TLGMCAddr+OffsTL06
                mov     #15240, @#TLGMCAddr+OffsTL05
                mov     (PC)+,@(PC)+
                        com r0
                .word   TLGMCAddr+OffsTL07
                mov     #137, @#TLGMCAddr+OffsTL08-2
                mov     #GMCLoad, @#TLGMCAddr+OffsTL08
                mov     #Retry$-TLOffset, @#TLGMCAddr+OffsTL11
                movb    #'G, @#TLGMCAddr+OffsTL13
                mov     #46500, @#PatchML11 ; новый адрес вывода логотипа
                mov     #PICTopStack, @#PatchML15 ; новая вершина указателя стека
                mov     #WrongFile$-TLOffset, @#26
                mov     #40000, @#PatchML03 ; новое начало экрана

.SCRIPT "Pic Crypt"
        ; сперва внутреннее кодирование
        mov #5555, R4
        mov #Crypt2, R1
1$:     mov (R1), R0
        dec R0
        swab R0
        dec R0
        mov R0, (R1)+
        sob R4, 1$
        ; потом внешнее
        mov #11410, R0
        mov #PicBgn, R1
2$:     mov (R1), R2
        swab R2
        neg R2
        mov R2, (R1)+
        sob R0, 2$
.ENDS


Crypt2:         mov     #1011, @#PatchML05 ; новое значение скроллинга экрана
                ; выводим заставку
                mov     #PICTopStack, SP
                mov     #46100, R5      ; адрес экрана
                mov     #PicData, R4    ; данные
4$:             mov     #1, R2          ; счётчик повторяющихся байтов
                movb    (R4)+, R0       ; берём очередной байт
                cmpb    R0, (R4)        ; он совпадает со следующим?
                bne     5$              ; нет
                inc     R4              ; да - его пропустим
                movb    (R4)+, R2       ; вот таким нерациональным способом
                bic     #177400, R2     ; берём слово
                swab    R2
                movb    (R4)+, R3
                bic     #177400, R3
                add     R3, R2
                swab    R2              ; это счётчик повторяющихся байтов

5$:             movb    R0, (R5)+       ; выведем байт
                cmp     #100000, R5     ; до границы экрана дошли?
                beq     6$              ; да - конец работы
                sob     R2, 5$          ; столько раз, сколько надо.
                br      4$              ; и повторяем
; ───────────────────────────────────────────────────────────────────────────
                ; продолжаем патчить
6$:             mov     #GMCLoad, @#TLGMCAddr+OffsTL04
                mov     #12707, R5
                bic     #7, R5
                mov     R5, @#177706
                clr     @#177712
                mov     #GMCLoad, @#TLGMCAddr+OffsTL03
                mov     #1456, @#PatchML10 ; новое значение счётчика.
                mov     #Digit0$-20, @#PatchML08 ; новое значение 0-го разряда счётчика
                mov     #Digit2$, @#PatchML09 ; новое значение 2-го разряда счётчика
                clr     @#PatchML01  ; сюда переход по неверной КС в магнитофонном загрузчике
                movb    #'M, @#TLGMCAddr+OffsTL13+1
                mov     #40006, @#PatchML14 ; новый адрес вывода цифры 5
                mov     #3040, @#PatchML04 ; новое значение размера экрана для очистки
                mov     #43402, @#PatchML13 ; новый адрес вывода строки "GAME"
                mov     #0, @#TLGMCAddr+OffsTL10
                mov     #23, @#TLGMCAddr+OffsTL09
                mov     #76234, @#PatchML06 ; новый адрес экрана вывода счётчика
                mov     #72025, @#PatchML07 ; новый адрес вывода окошка счётчика
                mov     #40, @#PatchML17
                mov     #14, @#TLGMCAddr+OffsTL14

                mov     #326, R1
                mov     #20, R2
7$:             movb    #40, (R1)+
                sob     R2, 7$
                add     #2103, @#2          ; !!! секретная часть, в яч.2 число 2103
                halt

                .END
