gbdk/gbdk-lib/examples/gb/comm.c
2015-01-10 16:25:08 +01:00

94 lines
1.9 KiB
C
Executable file

#include <gb/gb.h>
#include <stdio.h>
const char * str = "Hello World!";
char buffer[32];
void main(void)
{
UBYTE i, n = 0;
char *s;
puts("Byte");
puts(" A : Send");
puts(" B : Receive");
puts("String");
puts(" START : Send");
puts(" SELECT : Receive");
while(1) {
i = waitpad(J_A | J_B | J_START | J_SELECT);
waitpadup();
if(i == J_A) {
/* Send 1 byte */
printf("Sending b... ");
_io_out = n++;
send_byte();
/* Wait for IO completion... */
while(_io_status == IO_SENDING && joypad() == 0)
;
if(_io_status == IO_IDLE)
printf("OK\n");
else
printf("#%d\n", _io_status);
} else if(i == J_B) {
/* Receive 1 byte */
printf("Receiving b... ");
receive_byte();
/* Wait for IO completion... */
while(_io_status == IO_RECEIVING && joypad() == 0)
;
if(_io_status == IO_IDLE)
printf("OK\n%d\n", _io_in);
else
printf("#%d\n", _io_status);
} else if(i == J_START) {
/* Send a string */
printf("Sending s... ");
s = str;
while(1) {
_io_out = *s;
do {
send_byte();
/* Wait for IO completion... */
while(_io_status == IO_SENDING && joypad() == 0)
;
} while(_io_status != IO_IDLE && joypad() == 0);
if(_io_status != IO_IDLE) {
printf("#%d\n", _io_status);
break;
}
if(*s == 0)
break;
s++;
}
if(_io_status == IO_IDLE)
printf("OK\n");
} else if(i == J_SELECT) {
/* Receive a string */
printf("Receiving s... ");
s = buffer;
while(1) {
receive_byte();
/* Wait for IO completion... */
while(_io_status == IO_RECEIVING && joypad() == 0)
;
if(_io_status != IO_IDLE) {
printf("#%d\n", _io_status);
break;
}
putchar(_io_in);
*s = _io_in;
if(*s == 0)
break;
s++;
}
if(_io_status == IO_IDLE)
printf("OK\n%s\n", buffer);
}
/* In case of user cancellation */
waitpadup();
}
}