////////////////////////////////////////////////////////////////////////////////////////
// OVERVIEW
////////////////////////////////////////////////////////////////////////////////////////
/*
DESCRIPTION: This code is for hacking and testing only.

AUTHOR: Andre' LaMothe

COMMENTS: 


HISTORY: 

*/


////////////////////////////////////////////////////////////////////////////////////////
// INCLUDES 
////////////////////////////////////////////////////////////////////////////////////////

#include <Arduino.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <avr/pgmspace.h> 

using namespace std;

////////////////////////////////////////////////////////////////////////////////////////
// STRUCTS AND CLASSES
////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////
// PROTOTYPES
////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////
// DEFINES AND MACROS
////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////
// GLOBALS
////////////////////////////////////////////////////////////////////////////////////////

 

////////////////////////////////////////////////////////////////////////////////////////
// FUNCTIONS, API, METHODS
////////////////////////////////////////////////////////////////////////////////////////

// normally, you could just use extern for each prototype, but C++ "name mangles" the symbols
// so we need to use the "extern C" syntax to tell the compiler to leave the symbols alone, so
// they match up to the external ASM file symbols without any funky business


extern "C" 
{
int16_t Multiply(int16_t x, int16_t y);
void DigitalSetASM( uint8_t port, uint8_t bit );
void DigitalClrASM( uint8_t port, uint8_t bit );
void TurnLEDOn();
void TurnLEDOff();
void SetLED( uint8_t state );
int8_t PrimeNth( uint8_t number );
int16_t PlayerFitness();
} // end externals

char stringBuffer[ 80 ];

volatile int16_t x = 2;
volatile int16_t y = 10;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup() 
{
// the setup function runs once when you press reset or power the board  

// initialize serial port
Serial.begin(115200);
Serial.print( "\n\rIn Setup()...\n\r" );

sprintf(stringBuffer, "\nCalling External ASM Multiply(%d, %d) = %d", x, y, Multiply( x, y ) );
Serial.print( stringBuffer );

for (int index = 0; index < 16; index++)
    {
    sprintf(stringBuffer, "\nCalling External ASM PrimeNth(%d) = %d",index, PrimeNth( index ) );
    Serial.print( stringBuffer );
    } // end for index

sprintf(stringBuffer, "\nCalling External ASM PlayerFitness() = %d",PlayerFitness() );
Serial.print( stringBuffer );

} // end setup

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void loop() 
{

SetLED( HIGH );
//TurnLEDOn();
delay(200);

SetLED( LOW );
//TurnLEDOff();
delay(200);

} // end loop

////////////////////////////////////////////////////////////////////////////////////////