1 /* 2 Compare 3 */ 4 5 #include "compare.h" 6 7 #include "jump.h" 8 #include "mem.h" 9 #include "var.h" 10 compare(void)11void compare(void) 12 { 13 extern word param_stack[]; 14 15 word num_params = param_stack[0]; 16 word param1 = param_stack[1]; 17 word *param_ptr = ¶m_stack[2]; 18 19 while(--num_params != 0) 20 if(param1 == *param_ptr++) 21 { 22 ret_value(1); 23 return; 24 } 25 ret_value(0); 26 } 27 plus_compare2(void)28void plus_compare2(void) 29 { 30 extern word param_stack[]; 31 word data = param_stack[1]; 32 long_word address = param_stack[2]; 33 word num_words = param_stack[3]; 34 while(num_words-- != 0) 35 { 36 word val = rd_word_addr(address); 37 address += 2; 38 if(data == val) 39 { 40 store((word) address); 41 ret_value(1); 42 return; 43 } 44 } 45 store(0); 46 ret_value(0); 47 } 48 adv_compare2(void)49void adv_compare2(void) 50 { 51 extern word param_stack[]; 52 53 int params = param_stack[0]; 54 word data = param_stack[1]; 55 word address = param_stack[2]; 56 word num_words = param_stack[3]; 57 word inc = params > 3 ? param_stack[4] & 0x7F : 0x02; 58 word data_size = params > 3 ? param_stack[4] & 0x80 : 0x80; 59 60 while(num_words--) 61 { 62 if(data_size != 0 63 ? (data == rd_word_addr(address)) 64 : ((byte) data == rd_byte_addr(address))) 65 { 66 store(address); 67 ret_value(1); 68 return; 69 } 70 address += inc; 71 } 72 store(0); 73 ret_value(0); 74 } 75