; Macros for defining the test vectors. ; ; Copyright (C) 2012 Patrik Rak (patrik@raxoft.cz) ; ; This source code is released under the MIT license, see included license.txt. macro db8 b7,b6,b5,b4,b3,b2,b1,b0 db (b7<<7)|(b6<<6)|(b5<<5)|(b4<<4)|(b3<<3)|(b2<<2)|(b1<<1)|b0 endm macro ddbe n db (n>>24)&0xff db (n>>16)&0xff db (n>>8)&0xff db n&0xff endm macro inst op1,op2,op3,op4,tail ; Unfortunately, elseifidn doesn't seem to work properly. ifidn op4,stop db op1,op2,op3,tail,0 else ifidn op3,stop db op1,op2,tail,op4,0 else ifidn op2,stop db op1,tail,op3,op4,0 else db op1,op2,op3,op4,tail endif endif endif endm macro flags sn,s,zn,z,f5n,f5,hcn,hc,f3n,f3,pvn,pv,nn,n,cn,c if maskflags db8 s,z,f5,hc,f3,pv,n,c else db 0xff endif endm .veccount := 0 macro vec op1,op2,op3,op4,memn,mem,an,a,fn,f,bcn,bc,den,de,hln,hl,ixn,ix,iyn,iy,spn,sp if postccf if ( .@veccount % 3 ) == 0 inst op1,op2,op3,op4,tail .@areg := 0 else db op1,op2,op3,op4,0 .@areg := .@areg | a endif else db op1,op2,op3,op4 endif db f if postccf & ( ( .veccount % 3 ) == 2 ) db a | ( ( ~ .@areg ) & 0x28 ) else db a endif dw bc,de,hl,ix,iy dw mem dw sp .@veccount := .@veccount+1 endm macro crcs allflagsn,allflags,alln,all,docflagsn,docflags,docn,doc,ccfn,ccf,mptrn,mptr if postccf ddbe ccf elseif memptr ddbe mptr else if maskflags if onlyflags ddbe docflags else ddbe doc endif else if onlyflags ddbe allflags else ddbe all endif endif endif endm macro name n dz n endm ; EOF ;