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

; ───────────────────────────────────────────────────────────────────────────
; File Name   : RUNING.PIC.raw_uncr
; Format      : Binary file
; Base Address: 0000h Range: 0C00h - 31CEh Loaded length: 25CEh

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

.la 6000
; ═══════════════════════════════════════════════════════════════════════════
; Регистры на входе:
; R0 = 73125
; R1 = 20000
; R2 = 0
; R3 = 177716
; R4 = 0
; R5 = 30716
; SP = 716
PICTopStack = 5276

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

0ok$:           sub     #20, SP         ; SP = 676
                sub     #25472, R1      ; R1 = 13164
                add     #7000, R4       ; R4 = 7000
Cryptp2 = PicBgn + 5164
.SCRIPT "Pic Crypt"
        ; сперва внутреннее кодирование
        mov #7000, R4
        mov #Cryptp2, R1
1$:     mov (R1), R0
        dec R0
        com R0
        swab R0
        mov R0, (R1)+
        sob R4, 1$
        ; потом внешнее
        mov #5000, R0
        mov #PicBgn, R1
2$:     mov (R1), R2
        com R2
        inc R2
        mov R2, (R1)+
        sob R0, 2$
.ENDS
2$:             mov     (R1), R0        ; декодируем
                swab    R0
                com     R0
                inc     R0
                mov     R0, (R1)+
                sob     R4, 2$
                tst     R5              ; R5!=0
                bne     1ok$
                inc     R5

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

1ok$:           mov     @#177710, R1
                bic     #7, R1          ; пофиг, не используется
                add     #TLGMCAddr, R4  ; R4 = 400
                mov     #331, R2
TLOffset = TLPICAddr - TLGMCAddr
5$:             mov     TLOffset(R4), (R4)+ ; переносим магнитофонный загрузчик в новое место
                sob     R2, 5$
                ; патчим
                mov     #TrapTo14-TLOffset, @#TLGMCAddr+OffsTL01
                mov     #Retry$-TLOffset, @#TLGMCAddr+OffsTL02
                mov     #Name$-326-TLOffset, @#TLGMCAddr+OffsTL12
                mov     #40422, @#PatchML12 ; новый адрес вывода строки "RUNING"
                mov     #GMCLoad, @#TLGMCAddr+OffsTL06
                mov     #15240, @#TLGMCAddr+OffsTL05
                mov     (PC)+,@(PC)+
                        neg 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 ; новое начало экрана
                mov     #1011, @#PatchML05 ; новое значение скроллинга экрана
                ; выводим заставку
                mov     #PICTopStack, SP
                mov     #40000, R5
                mov     #20000, R4
6$:             clr     (R5)+
                sob     R4, 6$
                call    @#DrawPic
                ; продолжаем патчить
                mov     #140227, @#1412 ; это кажется для подгонки контрольной суммы нужно
                nop
                nop
                nop
                mov     #177555, @#1406 ; потому что попадает на массив второго блока закодированного загрузчика
                mov     (PC)+,@(PC)+
                        swab r0
                .word   TLGMCAddr+OffsTL07-2
                nop
                nop
                nop
                nop
                nop
                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 ; новый адрес вывода цифры 4
                mov     #3040, @#PatchML04 ; новое значение размера экрана для очистки
                mov     #43402, @#PatchML13 ; новый адрес вывода строки "GAME"
                mov     #1, @#TLGMCAddr+OffsTL10
                mov     #60, @#TLGMCAddr+OffsTL09
                halt

; ███████████████ S U B R O U T I N E ███████████████████████████████████████


DrawPic:        mov     #14, R5
                mov     #PicData, R0
                mov     (R0)+, R1

1$:             call    @#sub_6610
                mov     #40, R3

2$:             clr     (R1)+
                sob     R3, 2$
                sub     #1704, R0
                sob     R5, 1$

3$:             clr     (R1)+
                tst     R1
                bpl     3$
                mov     #4, R5
                add     #1704, R0

4$:             call    @#sub_6606
                sob     R5, 4$
                return
; End of function DrawPic


; ███████████████ S U B R O U T I N E ███████████████████████████████████████


sub_6606:       mov     (R0)+, R1
; End of function sub_6606


; ███████████████ S U B R O U T I N E ███████████████████████████████████████


sub_6610:       mov     (R0)+, R2
                mov     #100, R3
                sub     (R0), R3
                mov     R3, 0pitch$
                mov     (R0)+, 0width$

1$:             mov     (PC)+, R3
0width$:        .word 16

2$:             movb    (R0)+, (R1)+
                sob     R3, 2$
                add     (PC)+, R1
0pitch$:        .word 62

                sob     R2, 1$
                return
; End of function sub_6610

; ───────────────────────────────────────────────────────────────────────────
;PicData:
                .END
