Hi!
I've tried to write something that decodes position of pointer in
q-scan, not the pointer itself. If we do it we won't have to look for
good parameter values and worry about separation etc. My math is not
very complicated. It goes like this:
My q-scan doesn't jump. Instead of it it bombs scanned location if it's
suspicious. So it's a q-shot rather... Anyway, MOV instruction which is
used for bombing can modify one field in decoding code. There are 5
possible modifications with modes: A-field increment, A-field decrement,
B-field increment, B-field decrement and no modification. OK, so I
wanted to have two numbers, one for A-field and one for B-field. I
wanted them to give five different values when modificated. I have used
numbers 13 and 31. Both can be incremented or decremented and then
decoded by multiplying, so we have pairs like this:
13 * 30 = 390 = 78 * 5 + 0
13 * 32 = 416 = 83 * 5 + 1
12 * 31 = 372 = 74 * 5 + 2
13 * 31 = 403 = 80 * 5 + 3
14 * 31 = 434 = 86 * 5 + 4
Then we would like to know which of these values comes from which MOV
instruction. Simply dividing modulo 5 we get values from 0 to 4.
Multiplying by 3 we can get offset in q-scan code where to pointer to
scanned location is.
One more thing is to find out which of scanning pair (SNE or SEQ). I use
modification of scanning pointer in MOV instruction which then is used
as additional offset. It is decoded in peculiar way, but it works.
There are some advantages and disadvantages of this idea. First: it
bombs immediatly instead of jumping and decoding, but it always takes
full scan even if found something early. Second: scanned locations can
be chosen almost randomly by author, there is no specific values set
which can be used only. But on the other hand decoding of the offset is
pretty long and slow. I guess it can be better, but I have no motivation
for using more complicated math. ;] Third: due to multiple found
locations possible decoding can make errors. Fourth: there is no
switching to another strategy if nothing is found.
I also have no idea how this warrior acts in real battles now. I might
send it to KOTH but even without it I know clear (what it actually is)
won't do good against papers on the hill.
Anyway maybe my idea will seem interesting for some of you, feel free to
exhaust. Maybe mixing it with other known coding/decoding methods will
be successful. Here is the code:
;redcode
;name Q-Shot
;author Lukasz Adamowski
;assert CORESIZE==8000
ptr3 dat $0, $0
FOR 5
dat $0, $0
ROF
clear spl #0, #0
mov bomb, >ptr3
mov bomb, >ptr3
djn.f $-1, >ptr3
FOR 60
dat $0, $0
ROF
bomb dat <2667, <15
boot
sne $3800, $3500
seq >1, $4200
mov.i <ptr1, $4600-2 ; 13 * 30
sne $5300, $5000
seq >1, $5700
mov.i >ptr1, $6100-2 ; 13 * 32
sne $6800, $6500
seq >1, $7200
mov.i {ptr1, $7600-2 ; 12 * 31
sne $800, $400
seq >1, $1200
mov.i @[EMAIL PROTECTED]
; 13 * 31
sne $2300, $2000
seq >1, $2700
mov.i }ptr1, $3100-2 ; 14 * 31
ptr1 mul.ab #13, #31
mod.ab #5, $ptr1
mul.ab #3, $ptr1
add.b $ptr1, $ptr2
mod.ab #100, @[EMAIL PROTECTED]
; where the q-scan table starts
end boot
Greetings!
Lukasz Adamowski
-= "War is a problem, never a solution" =-
-= "Wojna jest problemem, a nie rozwiazaniem" =-
----------------------------------------------------
P.S.
Zobacz koniecznie polską wersję Jozina z Bazin!
Naprawdę świetny kabaret :) - Kliknij:
http://klik.wp.pl/?adr=http%3A%2F%2Fcorto.www.wp.pl%2Fas%2FPojedynek-nie-na-zarty.html&sid=228


|