Skip to content

sethmlarson/gba-link-connection-c

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

GBA Link Connection (C Port)

This is a C port of gba-link-connection by rodri042, a library which makes it easy to add multiplayer support to Game Boy Advance homebrew games.

Notes:

  • Depends on libtonc.
  • Uses malloc when creating the connection with lc_init, to allocate internal buffers.
  • The example uses devkitARM, but it could work with any compatible toolchain.

Usage

A Link Cable connection for Multi-player mode.

Usage:

1) Include this header in your main.c file, then declare and initialise a connection.

#include "link_connection.h"

LinkConnection conn;

// ...
  
  LinkConnectionSettings settings = {
    .baud_rate = BAUD_RATE_1,
    .timeout = 3,
    .remote_timeout = 5,
    .buffer_len = 30,
    .interval = 50,
    .send_timer_id = 3,
  };
  conn = lc_init(settings);
  
  // Alternatively you can pass in memory for 5 buffers manually:
  //
  // EWRAM_DATA u16 buffers[LINK_TOTAL_BUFFERS * 30];
  // ...
  // conn = lc_init_manual(settings, buffers);

2) Add the required interrupt service routines:

void onVBlank() {
  lc_on_vblank(&conn);
}
void onSerial() {
  lc_on_serial(&conn);
}
void onTimer() {
  lc_on_timer(&conn);
}

// ...

  irq_init(NULL);
  
  irq_add(II_VBLANK, onVBlank);
  irq_add(II_SERIAL, onSerial);
  irq_add(II_TIMER3, onTimer);

3) Start the library with:

lc_activate(&conn);

4) Send/read messages by using:

lc_send(&conn, data)
lc_is_connected(&conn)
lc_has_message(&conn, player_id)
lc_read_message(&conn, player_id)

Restrictions on sent data: 0xFFFF and 0x0000 are reserved values, so don't use them (they mean 'disconnected' and 'no data' respectively).

5) If you used lc_init, be sure to free the internal buffers:

lc_destroy(&conn);