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

; ───────────────────────────────────────────────────────────────────────────
; File Name   : SECOND.PIC.raw.uncr
; Format      : Binary file
; Base Address: 0000h Range: 1200h - 28FAh Loaded length: 16FAh

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


.la 11000
; ═══════════════════════════════════════════════════════════════════════════
; на входе:
; R0 = 52525
; R1 = 17220 = PICLoad + 3110 * 2
; R2 = 0
; R3 = 177716
; R4 = 0
; R5 = 24370 = PICLoad + PICLen
; SP = 716
PICTopStack = 5276

PicBgn:         mov     #20, @#177712
                add     R3, R5          ; R5 = 24306
                clr     R4
                add     R1, R5          ; R5 = 43526
                add     #170022, R5     ; R5 = 33550
                add     R5, R1          ; R1 = 52770
                mov     R3, R2
                add     @#177706, R3    ; R3 = 11716
                mov     #123, R4
                call    @#116622        ; Подсчёт контрольной суммы. R0 = 23730
                                        ; Вход:  R4 - длина массива
                                        ;        R5 - адрес начала массива
                                        ; Выход: R0 - контрольная сумма
                                        ;        R4 == 0
                                        ;        R5 - адрес за концом массива R5 = 33673
                add     @#754, R0       ; R0 = 24730
                bne     0ok$
                return
; ───────────────────────────────────────────────────────────────────────────

0ok$:           sub     #20, SP
                sub     #41550, R1      ; R1 = 11220
                add     #4120, R4

1$:             mov     (R1), R0        ; декодируем
                clc
                rol     R0
                adc     R0
                mov     R0, (R1)+
                sob     R4, 1$
                tst     R5
                bne     1ok$            ; переход
                inc     R5              ; тут будет некоторая фигня, если что-то не так

2$:             mov     (R2), R0
                rol     R0
                mov     R0, (R2)+
                sob     R2, 2$
                return
; ───────────────────────────────────────────────────────────────────────────
.SCRIPT "Pic Crypt"
        ; сперва внутреннее кодирование
        mov #4120, R0
        mov #Cryptp2, R1
1$:     rcr (R1)+
        sob R0, 1$
        ; потом внешнее
        mov #3110, R0
        mov #PicBgn, R1
2$:     mov (R1), R2
        com R2
        swab R2
        mov R2, (R1)+
        sob R0, 2$
.ENDS
1ok$:           mov     @#177710, R1
                bic     #7, R1
                add     #TLGMCAddr, R4
                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     #GMCLoad, @#TLGMCAddr+OffsTL06
                mov     #40067, @#PatchML07 ; новый адрес вывода окошка счётчика
                mov     #40422, @#PatchML12 ; новый адрес вывода строки "SECOND"
                mov     #15240, @#TLGMCAddr+OffsTL05
Cryptp2:        mov     (PC)+,@(PC)+
                        inc 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     #45376, @#PatchML06 ; новый адрес экрана вывода счётчика
                mov     #1011, @#PatchML05 ; новое значение скроллинга экрана
                mov     #PICTopStack, SP
                mov     #46000, 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     #10612, R5
                bic     #77, R5
                mov     R5, @#177706
                clr     @#177712
                mov     #GMCLoad, @#TLGMCAddr+OffsTL03
                mov     #2065, @#PatchML10 ; новое значение счётчика.
                mov     #Digit0$-20, @#PatchML08 ; новое значение 0-го разряда счётчика
                mov     #Digit2$, @#PatchML09 ; новое значение 2-го разряда счётчика
                clr     @#PatchML01  ; сюда переход по неверной КС в магнитофонном загрузчике
                movb    #'M, @#TLGMCAddr+OffsTL13+1
                mov     #40006, @#PatchML14 ; новый адрес вывода цифры 1
                mov     #40000, @#PatchML03 ; новое начало экрана
                mov     #3040, @#PatchML04 ; новое значение размера экрана для очистки
                mov     #43402, @#PatchML13 ; новый адрес вывода строки "GAME"
                mov     #2, @#TLGMCAddr+OffsTL10


                .END
