#include <stdint.h>

#include "lab_io.h"

#define H3_IO_BASE       ( 0xC0000000UL )
#define H3_IO_PRINT_CHAR ( *( ( volatile uint32_t * ) ( H3_IO_BASE + 0x0UL ) ) )
#define H3_IO_PRINT_U32  ( *( ( volatile uint32_t * ) ( H3_IO_BASE + 0x4UL ) ) )
#define H3_IO_EXIT       ( *( ( volatile uint32_t * ) ( H3_IO_BASE + 0x8UL ) ) )

void lab_puts( const char * text )
{
    while( *text != '\0' )
    {
        H3_IO_PRINT_CHAR = ( uint32_t ) ( unsigned char ) *text;
        ++text;
    }
}
void lab_put_u32( uint32_t value )
{
    H3_IO_PRINT_U32 = value;
}

void lab_exit( uint32_t code )
{
    H3_IO_EXIT = code;
    for( ; ; )
    {
        __asm volatile ( "wfi" );
    }
}
