ReC98/th04/formats/scoredat_decode_both.asm

95 lines
1.9 KiB
NASM
Raw Normal View History

public SCOREDAT_DECODE_BOTH
scoredat_decode_both proc near
@@byte = byte ptr -1
enter 2, 0
push si
mov si, scoredat_section_t.score
jmp short @@1_decode_more?
; ---------------------------------------------------------------------------
@@1_decode_loop:
mov al, byte ptr _hi+1[si]
mov [bp+@@byte], al
mov al, _hi.key2
ror [bp+@@byte], 3
xor [bp+@@byte], al
mov al, byte ptr _hi+0[si]
mov dl, _hi.key1
add dl, [bp+@@byte]
add al, dl
mov byte ptr _hi+0[si], al
inc si
@@1_decode_more?:
cmp si, size scoredat_section_t - 1
jl short @@1_decode_loop
mov al, _hi.key1
add byte ptr _hi+0[si], al
xor cx, cx
mov si, scoredat_section_t.score
jmp short @@1_sum_more?
; ---------------------------------------------------------------------------
@@1_sum_loop?:
mov al, byte ptr _hi+0[si]
mov ah, 0
add cx, ax
inc si
@@1_sum_more?:
cmp si, size scoredat_section_t
jl short @@1_sum_loop?
cmp _hi.sum, cx
jz short @@1_sum_matches
mov al, 1
jmp short @@ret
; ---------------------------------------------------------------------------
@@1_sum_matches:
mov si, scoredat_section_t.score
jmp short @@2_decode_more?
; ---------------------------------------------------------------------------
@@2_decode_loop:
mov al, byte ptr _hi2+1[si]
mov [bp+@@byte], al
mov al, _hi2.key2
ror [bp+@@byte], 3
xor [bp+@@byte], al
mov al, byte ptr _hi2+0[si]
mov dl, _hi2.key1
add dl, [bp+@@byte]
add al, dl
mov byte ptr _hi2+0[si], al
inc si
@@2_decode_more?:
cmp si, size scoredat_section_t - 1
jl short @@2_decode_loop
mov al, _hi2.key1
add byte ptr _hi2+0[si], al
xor cx, cx
mov si, scoredat_section_t.score
jmp short @@2_sum_more?
; ---------------------------------------------------------------------------
@@2_sum_loop:
mov al, byte ptr _hi2+0[si]
mov ah, 0
add cx, ax
inc si
@@2_sum_more?:
cmp si, size scoredat_section_t
jl short @@2_sum_loop
mov al, byte ptr _hi2.sum
sub al, cl
@@ret:
pop si
leave
retn
scoredat_decode_both endp