comparison decoder.c @ 156:a68751e6e84f src

Use more common sense values for div 0. I.E. As close to infinity as a 16 bit number can get! Also avoid div 0 exception for MOD operation. I.E. 10 % 0 gives a crash with the message "Floating point exception" on my PC.
author jcdutton
date Sat, 05 Apr 2003 21:23:02 +0000
parents 3492d41dc247
children 3bfaec0c1288
comparison
equal deleted inserted replaced
155:840e99bfb57d 156:a68751e6e84f
424 if(tmp < 0) tmp = 0; 424 if(tmp < 0) tmp = 0;
425 set_GPRM(command->registers, reg, (uint16_t)tmp); 425 set_GPRM(command->registers, reg, (uint16_t)tmp);
426 break; 426 break;
427 case 5: 427 case 5:
428 tmp = get_GPRM(command->registers, reg) * data; 428 tmp = get_GPRM(command->registers, reg) * data;
429 if(tmp >= shortmax) tmp = shortmax; 429 if(tmp > shortmax) tmp = shortmax;
430 set_GPRM(command->registers, reg, (uint16_t)tmp); 430 set_GPRM(command->registers, reg, (uint16_t)tmp);
431 break; 431 break;
432 case 6: 432 case 6:
433 if (data != 0) { 433 if (data != 0) {
434 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) / data) ); 434 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) / data) );
435 } else { 435 } else {
436 set_GPRM(command->registers, reg, 0); /* Avoid that divide by zero! */ 436 set_GPRM(command->registers, reg, 0xffff); /* Avoid that divide by zero! */
437 } 437 }
438 break; 438 break;
439 case 7: 439 case 7:
440 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) % data) ); 440 if (data != 0) {
441 break; 441 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) % data) );
442 case 8: /* SPECIAL CASE - RND! */ 442 } else {
443 set_GPRM(command->registers, reg, ((uint16_t) ((float) data * rand()/(RAND_MAX+1.0))) ); 443 set_GPRM(command->registers, reg, 0xffff); /* Avoid that divide by zero! */
444 }
445 break;
446 case 8: /* SPECIAL CASE - RND! Return numbers between 1 and data. */
447 set_GPRM(command->registers, reg, 1 + ((uint16_t) ((float) data * rand()/(RAND_MAX+1.0))) );
444 break; 448 break;
445 case 9: 449 case 9:
446 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) & data) ); 450 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) & data) );
447 break; 451 break;
448 case 10: 452 case 10: