Version of Robotron arcade game using LPC1768, a Gameduino shield, a serial EEPROM (for high scores), two microswitch joysticks and two buttons plus a box to put it in. 20 levels of mayhem.

Dependencies:   25LCxxx_SPI CommonTypes Gameduino mbed

Revision:
4:673eb9735d44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BCDNumber.cpp	Sat Jun 08 11:24:05 2013 +0000
@@ -0,0 +1,60 @@
+/*
+ * SOURCE FILE : BCDNumber.cpp
+ *
+ * A 4 byte unsigned BCD integer.
+ *
+ */
+
+#include "BCDNumber.h"
+
+/***********************/
+/* ADD TWO BCD NUMBERS */
+/***********************/
+// Pass first number in A.
+// Pass second number in B.
+// Pass pointer to result in result.
+// Pass carry flag in carry.
+// Remember numbers are BCD coded so 0x99999999 means 9 million,
+// 9 hundred and 99 thousand, 9 hundred and 99.
+// Returns carry flag. If this is set then overflow occurred.
+bool BCDNumber::Add( UInt32 numA, UInt32 numB, UInt32 *result, bool carry ) {
+  const UInt8 *ptrA = (const UInt8*)&numA;
+  const UInt8 *ptrB = (const UInt8*)&numB;
+  UInt8 *ptrR = (UInt8*)result;
+  UInt8 sum, digits;
+  for( UInt8 b = 0; b < ByteCount; ++b ) {
+    digits = 0;
+    // Add together lower 4 bits.
+    sum = ( *ptrA & 0xF ) + ( *ptrB & 0xF );
+    // If carry flag set then add one.
+    if( carry ) {
+      sum++;
+    }
+    // If result is >= 10 then set carry and subtract 10 from sum.
+    carry = ( sum >= 10 );
+    if( carry ) {
+      sum -= 10;
+    }
+    // Write lower 4 bits.
+    digits |= sum;
+    // Add together upper 4 bits and carry.
+    sum = ( ( *ptrA & 0xF0 ) >> 4 ) + ( ( *ptrB & 0xF0 ) >> 4 );
+    // If carry flag set then add one.
+    if( carry ) {
+      sum++;
+    }
+    // If result is >= 10 then set carry and subtract 10 from sum.
+    carry = ( sum >= 10 );
+    if( carry ) {
+      sum -= 10;
+    }
+    // Write upper 4 bits.
+    digits |= ( sum << 4 );
+    // Store digits in result and skip to next byte.
+    *ptrR++ = digits;
+    ptrA++;
+    ptrB++;
+  }
+  return carry;
+}
+