comm.c (2805B)
1#include <gb/gb.h> 2#include <stdint.h> 3#include <stdio.h> 4 5unsigned char str[] = "Hello World!"; 6unsigned char buffer[32]; 7 8void main(void) 9{ 10 uint8_t i, n = 0; 11 unsigned char *s; 12 13 puts("Byte"); 14 puts(" A : Send"); 15 puts(" B : Receive"); 16 puts("String"); 17 puts(" START : Send"); 18 puts(" SELECT : Receive"); 19 20 CRITICAL { 21 add_SIO(nowait_int_handler); // disable waiting VRAM state before return 22 } 23 set_interrupts(SIO_IFLAG); // disable other interrupts. note: this disables sprite movement 24 25 while(1) { 26 i = waitpad(J_A | J_B | J_START | J_SELECT); 27 waitpadup(); 28 29 if (i == J_A) { 30 /* Send 1 byte */ 31 printf("Sending b... "); 32 _io_out = n++; 33 send_byte(); 34 /* Wait for IO completion... */ 35 while((_io_status == IO_SENDING) && (joypad() == 0)); 36 if(_io_status == IO_IDLE) 37 printf("OK\n"); 38 else 39 printf("#%d\n", _io_status); 40 } else if (i == J_B) { 41 /* Receive 1 byte */ 42 printf("Receiving b... "); 43 receive_byte(); 44 /* Wait for IO completion... */ 45 while((_io_status == IO_RECEIVING) && (joypad() == 0)); 46 if(_io_status == IO_IDLE) 47 printf("OK\n%d\n", _io_in); 48 else 49 printf("#%d\n", _io_status); 50 } else if (i == J_START) { 51 /* Send a string */ 52 printf("Sending s... "); 53 s = str; 54 while(1) { 55 _io_out = *s; 56 do { 57 send_byte(); 58 /* Wait for IO completion... */ 59 while((_io_status == IO_SENDING) && (joypad() == 0)); 60 } while((_io_status != IO_IDLE) && (joypad() == 0)); 61 if(_io_status != IO_IDLE) { 62 printf("#%d\n", _io_status); 63 break; 64 } 65 if(*s == 0) break; 66 s++; 67 } 68 if(_io_status == IO_IDLE) printf("OK\n"); 69 } else if (i == J_SELECT) { 70 /* Receive a string */ 71 printf("Receiving s... "); 72 s = buffer; 73 while(1) { 74 receive_byte(); 75 /* Wait for IO completion... */ 76 while((_io_status == IO_RECEIVING) && (joypad() == 0)); 77 if(_io_status != IO_IDLE) { 78 printf("#%d\n", _io_status); 79 break; 80 } 81 *s = _io_in; 82 if(*s == 0) break; 83 s++; 84 } 85 if(_io_status == IO_IDLE) printf("OK\n%s\n", buffer); 86 } 87 /* In case of user cancellation */ 88 waitpadup(); 89 } 90}