Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Gaming > Core War > Part V - qScans...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 1 Topic 2200 of 2284
Post > Topic >>

Part V - qScansearch

by pauldkline@[EMAIL PROTECTED] Feb 16, 2008 at 09:47 AM

qScansearch.  You can run it as is to see the generated parameters and
search locations for the first pair of qM/qMod numbers, change Mode to
inspect all the pairs in the table with the results in p-space.  Or
you can fiddle with it and roll your own results.  Just save a good
copy before tinkering :-)

I put the documentation in the code, if you understand the principle
of qscan you are advanced enough to understand this :-)

;redcode-94
;name qScansearch
;author P.Kline
;assert CORESIZE == 8000
;;; Redcode program to configure pdQscan values
;   Does a brute force search of permutations to identify
;   qualifying search values based on parameters below.
;--------------------------------------------------------------------
Mode       equ  1
;               0 = fast search of 3200 qM/qMod pairs, no details
;                   takes a few rounds to complete
;                   output in pSpace is a table of (qM+1) values
;               1 = examine a single qM/qMod pair with details
;                   takes a few seconds
;                   output in core is successive tables with matching
parameters
; Using CoreWin:
;   set maxcycles = 2000000000
;   set maxlen    = 4000
;   set rounds    = 100
;   after starting, click Max speed
;   when finished, uncheck Max speed, View Core/Pspace
;                  may have to page up and down to refresh the display

;;; The starting key parameters go here
tsize      equ  240                 ; minimum distance between
generated values
                                    ; > 200 ensures most efficient
scanning
tMax       equ  7700                ; do not scan this close to self
tMin       equ  200                 ; do not scan this close to self
qM         dat    0,   0            ; (qM-1)*qMod = 1 mod 8000
qMod       dat    0,   0            ; so qM-1 and qMod are imp pairs
ptABCD     dat    0,   0            ; where A,B,C,D go
ptScan     dat    0,   5            ; where scanning block goes
ptDecode   dat    0,  46            ; where decode block goes
ptLaunch   dat    0,  54            ; where launch code goes

;;; Table of imp pairs (a*b=1 mod 8000)
;   There are 3200 imp pairs, to search them quickly without details
;   paste them all here, set Mode (above) to 0.  After finish,
examine
;   pSpace for qualifying values and remove all the others from the
table.
;   To examine each remaining pair set Mode to 1 and run.  After
running
;   and copying down the results, comment out the first entry and run
the next.
;   These values are the results of setting tsize = 240 and running
against all 3200 pairs.
;   They were transcribed by hand and may contain errors.

mPtr       dat    0, Mode + (1-Mode)*(mEnd-1)
dat 6249,4249
dat 6411,6691
dat 6511,591
dat 6543,7407
dat 6639,7759
dat 693,6557
dat 7009,1889
dat 7047,3383
dat 7057,6193
dat 7717,3053
dat 7719,1879
dat 7749,4749
dat 7753,7417
dat 3987,923
dat 281,6121
dat 2891,2211
dat 3053,7717
dat 3189,7709
dat 323,1387
dat 3253,5917
dat 3353,7017
dat 3631,271
dat 3659,739
dat 3663,7727
dat 371,1531
dat 3921,2481
dat 3959,2439
dat 3983,1647
dat 4013,7077
dat 4047,6383
dat 4057,1193
dat 4079,5519
dat 4111,2991
dat 4119,5479
dat 4147,7483
dat 4167,503
dat 4369,7729
dat 4811,291
dat 4909,5989
dat 4951,551
dat 4991,2111
dat 5039,1359
dat 5109,5789
dat 5603,267
dat 5609,3289
dat 5749,6749
dat 5751,7751
dat 1353,1017
dat 1361,241
dat 1467,2803
dat 1517,2853
dat 1701,301
dat 1729,2369
dat 1817,2153
dat 1979,5619
dat 2107,243
dat 2249,249
dat 2289,6609
dat 2397,7733
dat 241,1361
dat 247,583
mEnd dat 0,0

;;; Temp holders
tA         dat   0,0
tB         dat   0,0
tC         dat   0,0
tD         dat   0,0
tE         dat   0,0
tF         dat   0,0
tG         dat   0,0
tH         dat   0,0
tI         dat   0,0
tJ         dat   0,0
qA         dat   0,0
qB         dat   0,0
qC         dat   0,0
qD         dat   0,0
qE         dat   0,0
qF         dat   0,0
qG         dat   0,0
qH         dat   0,0
qI         dat   0,0
qJ         dat   0,0
dest       dat   0,0

;;; Table of search values
TabSize    equ   20
TabEnd     equ   (TabPtr+TabSize)    ; number of search values
tp
TabPtr     dat   0  ,0
Tab        dat   0  ,0
       for TabSize+5                 ; little padding in case of typo
           dat   0  ,0
       rof
TabT1      dat   0  ,0

pStart     ldp.ab  #0             ,#0
;brea
           seq.ab  #-1            ,pStart
           jmp     pLoad
pPtr       stp.ab  #15            ,#2
           jmp     aStart
pLoad      ldp.ab  #4             ,qM
           ldp.ab  #5             ,qMod
           ldp.ab  #6             ,ptScan
           ldp.ab  #7             ,ptDecode
           ldp.ab  #8             ,ptLaunch
           ldp.ab  #9             ,mPtr
           slt.ab  #0             ,mPtr          ; check for done
           dat     0,0
           jmp     aLoad

;;; Begin a new qM/qMod pair
aStart     mov.ab @[EMAIL PROTECTED]
   ,qM
           add.ab #1      ,qM
           mov.b  @[EMAIL PROTECTED]
   ,qMod

;;; Save the current parameters
aLoad      stp.b   qM             ,#4
           stp.b   qMod           ,#5
           stp.b   ptScan         ,#6
           stp.b   ptDecode       ,#7
           stp.b   ptLaunch       ,#8
           stp.b   mPtr           ,#9
           ldp.ab  #2             ,pPtr
;;; Load the intermediate values
;   This section, plus reStart, plus the initialized values above
;   would have to be changed if you rearrange the code blocks
;   in pdQscan.
           mov.b  ptDecode,dest
           add.ab #5      ,dest
           mov.b  ptABCD  ,tA
           mov.b  tA      ,tB
           add.ab #1      ,tB
           mov.b  tB      ,tC
           add.ab #1      ,tC
           mov.b  tC      ,tD
           add.ab #1      ,tD
           mov.b  ptScan  ,tE
           add.ab #8      ,tE
           mov.b  ptScan  ,tF
           add.ab #23     ,tF
           mov.b  ptLaunch,tG
           add.ab #1      ,tG
           mov.b  tG      ,tH
           add.ab #1      ,tH
           mov.b  tH      ,tI
           add.ab #1      ,tI
           mov.b  ptScan  ,tJ
           add.ab #30     ,tJ
           mov.b  tA      ,qA
           sub.b  dest    ,qA
           mul.b  qMod    ,qA
           add.ab #1      ,qA
           mov.b  qA      ,qB
           add.b  qMod    ,qB
           mov.b  qB      ,qC
           add.b  qMod    ,qC
           mov.b  qC      ,qD
           add.b  qMod    ,qD
           mov.b  tE      ,qE
           sub.b  dest    ,qE
           mul.b  qMod    ,qE
           add.ab #1      ,qE
           mov.b  tF      ,qF
           sub.b  dest    ,qF
           mul.b  qMod    ,qF
           add.ab #1      ,qF
           mov.b  tG      ,qG
           sub.b  dest    ,qG
           mul.b  qMod    ,qG
           add.ab #1      ,qG
           mov.b  qG      ,qH
           add.b  qMod    ,qH
           mov.b  qH      ,qI
           add.b  qMod    ,qI
           mov.b  tJ      ,qJ
           sub.b  dest    ,qJ
           mul.b  qMod    ,qJ
           add.ab #1      ,qJ

;;; Prepare the hash table
;;; Quick way to see if any pairs are < tsize apart
;;;    divide a value by tsize, use that as a pointer to set a flag
;;;    if the flag was already set, go to reStart
;;; Not 100% effective, but lightning fast
;;; Eliminates over 90% of the unwanted lists
hFac       equ   (8000/tsize)
           mov.ab #hFac+1 ,hp
           mov.ab #1      ,@[EMAIL PROTECTED]
  ; set all the flags to 1
           djn.b  -1      ,hp

;;; Load the search values
;   Values are from pdQscan:
;       qPtr+qA*qM
;       qPtr+(qA-1)*qM
;   Shadow values, not inspected would be:
;       qPtr+qA*qM+qStep
;       qPtr+(qA-1)*qM+qStep
;   In pdQscan, qStep can be set to anything less than 'tsize'
;   so set tsize to twice the desired minimum separation (at least
2*100)
;   Algorithm:
;     generate the value
;     check for max/min to protect against self-attack
;     hash-check for tsize separation
           mov.ab #1      ,tp
;;;dest+qA*qM
           mov.f  qA      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qA-1)*qM
           mov.f  qA      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qB      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qB-1)*qM
           mov.f  qB      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qC      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qC-1)*qM
           mov.f  qC      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qD      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qD-1)*qM
           mov.f  qD      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qE      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qE-1)*qM
           mov.f  qE      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qF      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qF-1)*qM
           mov.f  qF      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qG      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qG-1)*qM
           mov.f  qG      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qH      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qH-1)*qM
           mov.f  qH      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qI      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qI-1)*qM
           mov.f  qI      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
           mov.f  qJ      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
  ;dest+(qJ-1)*qM
           mov.f  qJ      ,@[EMAIL PROTECTED]
           sub.ab #1      ,@[EMAIL PROTECTED]
           mul.b  qM      ,@[EMAIL PROTECTED]
           add.b  dest    ,@[EMAIL PROTECTED]
           slt.ab #tMax   ,@[EMAIL PROTECTED]
           slt.ab #tMin   ,@[EMAIL PROTECTED]
           jmp    reStart
           mov.b  >tp     ,hp
           div.ab #tsize  ,hp
           add.ab #1      ,hp
           djn.b  reStart ,@[EMAIL PROTECTED]
 Slow way to see if any search pairs are < tsize apart
;;; Sort the values table into descending order
sStart     mov.ab  #TabSize       ,TabPtr
           mov.a   #0             ,@[EMAIL PROTECTED]
           djn.b   -1             ,TabPtr
           mov.a   #TabSize+1     ,TabPtr
sLoop1     djn.a   2              ,TabPtr
           jmp     tStart
           mov.ab  #1             ,TabPtr
sLoop2     sne.ba  TabPtr         ,TabPtr
           jmp     sLoop1
           mov     @[EMAIL PROTECTED]
        ,TabT1
           slt.b   >TabPtr        ,@[EMAIL PROTECTED]
           jmp     sLoop2
           mov     @[EMAIL PROTECTED]
        ,<TabPtr
           add.ab  #1             ,TabPtr
           mov     TabT1          ,@[EMAIL PROTECTED]
           jmp     sLoop2
;brea
;;; Calculate the distance between consecutive pairs
tStart     mov.ab  #TabSize         ,TabPtr
           mov.ab  #TabSize-1       ,tCount
           mov.a   #0               ,@[EMAIL PROTECTED]
      sub.ba  @[EMAIL PROTECTED]
          ,<TabPtr
           add.ba  @[EMAIL PROTECTED]
          ,@[EMAIL PROTECTED]
           slt.a   #tsize-1         ,@[EMAIL PROTECTED]
 ; absolutely not < tsize
           jmp     reStart
tCount     djn.b   tLoop            ,#TabSize-1
;brea
;;; If the values get this far, save them
;   save is skipped if Mode=0
;   When running the whole set of 3200 imp pairs, there would be too
many
;   results to save.
saveit     jmp     ((1-Mode)*saveP)+Mode
           slt.b   savePtr          ,#6500   ; don't overrun the
program
           dat     0,0
           mov.a   #1               ,@[EMAIL PROTECTED]
           mov.ab  #tsize           ,>savePtr
           mov     qM               ,>savePtr
           mov     qMod             ,>savePtr
           mov     ptScan           ,>savePtr
           mov     ptDecode         ,>savePtr
           mov     ptLaunch         ,>savePtr
           mov.ab  #TabSize         ,savectr
           mov.ab  #1               ,TabPtr
           mov     >TabPtr          ,>savePtr
savectr    djn     -1               ,#TabSize
;brea
saveP      ldp.a   #2               ,1
           ldp.ab  #0               ,1
           sne.b   qM               ,#0
           jmp     reStart
           ldp.ab  #2               ,psave
           add.ab  #1               ,psave
psave      stp.b   qM               ,#0
           stp.b   psave            ,#2

;;; Increment the parameters and try again
;   These are determined by the arrangement of code blocks within
;   pdQscan.  If you rearrange those, you MUST redo these.
;   Still, that would be a worthwhile task.  There probably
;   are better arrangements :-)
reStart    add.ab #1      ,ptLaunch
           slt.ab #85+1   ,ptLaunch
           jmp    aLoad

           add.ab #1      ,ptDecode
           mov.b  ptDecode,ptLaunch
           add.ab #9      ,ptLaunch
           slt.ab #85+1   ,ptLaunch
           jmp    aLoad

           add.ab #1      ,ptScan
           mov.b  ptScan  ,ptDecode
           add.ab #41     ,ptDecode
           mov.b  ptDecode,ptLaunch
           add.ab #9      ,ptLaunch
           slt.ab #85+1   ,ptLaunch
           jmp    aLoad

           mov.ab #5      ,ptScan
           mov.b  ptScan  ,ptDecode
           add.ab #41     ,ptDecode
           mov.b  ptDecode,ptLaunch
           add.ab #9      ,ptLaunch
           djn.b  aStart  ,mPtr
;done - just die

hp         dat   0  ,0    ; hash table
       for hFac
           dat   0  ,0
       rof
           dat   0  ,0

;;; Here go the saved values lists with their parameters
savePtr    dat     0                ,1

           end     pStart




 1 Posts in Topic:
Part V - qScansearch
pauldkline@[EMAIL PROTECT  2008-02-16 09:47:38 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Fri May 16 21:59:58 CDT 2008.