Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. ; Macros for defining the test vectors.
  2. ;
  3. ; Copyright (C) 2012 Patrik Rak (patrik@raxoft.cz)
  4. ;
  5. ; This source code is released under the MIT license, see included license.txt.
  6.  
  7.             macro   db8 b7,b6,b5,b4,b3,b2,b1,b0
  8.             db      (b7<<7)|(b6<<6)|(b5<<5)|(b4<<4)|(b3<<3)|(b2<<2)|(b1<<1)|b0
  9.             endm
  10.            
  11.             macro   ddbe n
  12.             db      (n>>24)&0xff
  13.             db      (n>>16)&0xff
  14.             db      (n>>8)&0xff
  15.             db      n&0xff
  16.             endm
  17.  
  18.             macro   inst op1,op2,op3,op4,tail
  19.             ; Unfortunately, elseifidn doesn't seem to work properly.
  20.             ifidn   op4,stop
  21.             db      op1,op2,op3,tail,0
  22.             else
  23.             ifidn   op3,stop
  24.             db      op1,op2,tail,op4,0
  25.             else
  26.             ifidn   op2,stop
  27.             db      op1,tail,op3,op4,0
  28.             else
  29.             db      op1,op2,op3,op4,tail
  30.             endif
  31.             endif
  32.             endif
  33.             endm
  34.  
  35.             macro   flags sn,s,zn,z,f5n,f5,hcn,hc,f3n,f3,pvn,pv,nn,n,cn,c
  36.             if      maskflags
  37.             db8     s,z,f5,hc,f3,pv,n,c
  38.             else
  39.             db      0xff
  40.             endif
  41.             endm
  42.  
  43. .veccount := 0
  44.  
  45.             macro   vec op1,op2,op3,op4,memn,mem,an,a,fn,f,bcn,bc,den,de,hln,hl,ixn,ix,iyn,iy,spn,sp
  46.  
  47.             if      postccf
  48.  
  49.             if      ( .@veccount % 3 ) == 0
  50.             inst    op1,op2,op3,op4,tail
  51. .@areg      :=      0
  52.             else
  53.             db      op1,op2,op3,op4,0
  54. .@areg      :=      .@areg | a
  55.             endif
  56.  
  57.             else
  58.             db      op1,op2,op3,op4
  59.             endif
  60.  
  61.             db      f
  62.  
  63.             if      postccf & ( ( .veccount % 3 ) == 2 )
  64.             db      a | ( ( ~ .@areg ) & 0x28 )
  65.             else
  66.             db      a
  67.             endif
  68.  
  69.             dw      bc,de,hl,ix,iy
  70.             dw      mem
  71.             dw      sp
  72.  
  73. .@veccount := .@veccount+1
  74.  
  75.             endm
  76.  
  77.             macro   crcs allflagsn,allflags,alln,all,docflagsn,docflags,docn,doc,ccfn,ccf,mptrn,mptr
  78.             if      postccf
  79.             ddbe    ccf
  80.             elseif    memptr
  81.             ddbe    mptr
  82.             else
  83.             if      maskflags
  84.             if      onlyflags
  85.             ddbe   docflags
  86.             else
  87.             ddbe   doc
  88.             endif
  89.             else
  90.             if      onlyflags
  91.             ddbe   allflags
  92.             else
  93.             ddbe   all
  94.             endif
  95.             endif
  96.             endif
  97.             endm
  98.            
  99.             macro   name n
  100.             dz      n
  101.             endm
  102.  
  103. ; EOF ;
  104.