From ec14b25b3717a63c551328d0ed02c773d749b32e Mon Sep 17 00:00:00 2001 From: Rodrigo Alfonso Date: Sun, 16 Feb 2025 09:36:43 -0300 Subject: [PATCH] Adding tutorial on how to create BMP --- examples/LinkCard_demo/#loader/README.md | 9 ++++++++- examples/LinkCard_demo/#loader/src/protocol.h | 13 ++++++------- .../bin-raw-bmp/testcard.jap.bin-01.bmp | Bin 0 -> 5518 bytes .../testcard.jap.bin-01.raw | Bin .../testcard.jap.bin.01.bin | Bin .../bin-raw-bmp/testcard.usa.bin-01.bmp | Bin 0 -> 5518 bytes .../testcard.usa.bin-01.raw | Bin .../testcard.usa.bin.01.bin | Bin 8 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 examples/LinkCard_demo/#testcards/bin-raw-bmp/testcard.jap.bin-01.bmp rename examples/LinkCard_demo/#testcards/{bin-raw => bin-raw-bmp}/testcard.jap.bin-01.raw (100%) rename examples/LinkCard_demo/#testcards/{bin-raw => bin-raw-bmp}/testcard.jap.bin.01.bin (100%) create mode 100644 examples/LinkCard_demo/#testcards/bin-raw-bmp/testcard.usa.bin-01.bmp rename examples/LinkCard_demo/#testcards/{bin-raw => bin-raw-bmp}/testcard.usa.bin-01.raw (100%) rename examples/LinkCard_demo/#testcards/{bin-raw => bin-raw-bmp}/testcard.usa.bin.01.bin (100%) diff --git a/examples/LinkCard_demo/#loader/README.md b/examples/LinkCard_demo/#loader/README.md index 5c32378..dfa592f 100644 --- a/examples/LinkCard_demo/#loader/README.md +++ b/examples/LinkCard_demo/#loader/README.md @@ -4,8 +4,10 @@ This loader scans cards with the **e-Reader** (or in Japan, the **e-Reader+**) a ## Required tools for compiling +- Windows - _devkitARM_ with _GCC 14.1.0_ -- `nevpk.exe`, `neflmake.exe`, `nedcmake.exe`, `nedcenc.exe`, `raw2bmp.exe` +- `nedcmake.exe`, `nevpk.exe`, `nedcenc.exe`, `raw2bmp.exe`, `neflmake.exe` + * Cross-platform versions are available [here](https://github.com/AkBKukU/e-reader-dev) and [here](https://github.com/breadbored/nedclib) - _Git Bash_ or some way to run Unix commands like `dd` ## Compile @@ -28,4 +30,9 @@ nedcmake -i testcard.txt -o testcard.bin -type 3 -bin -raw -fill 1 -region 1 -na # region 2 = JAP ``` +## Convert cards to BMP for distribution +```bash +raw2bmp -i testcard.bin-01.raw -o testcard.bin-01 +# generates testcard.bin-01.bmp +``` diff --git a/examples/LinkCard_demo/#loader/src/protocol.h b/examples/LinkCard_demo/#loader/src/protocol.h index ec9c6c3..6f36f82 100644 --- a/examples/LinkCard_demo/#loader/src/protocol.h +++ b/examples/LinkCard_demo/#loader/src/protocol.h @@ -1,16 +1,15 @@ #ifndef PROTOCOL_H #define PROTOCOL_H -#include "def.h" - // This protocol is only meant to be used by homebrew games using // gba-link-connection's LinkCard library and its loader. It's highly inspired -// by `4-e`, but not compatible with it since SMA4 sends the cards from offset -// `0x72`, and this sends them from offset `0x4E` (no-individual-titles format). -// That said, you could make it compatible by changing `CARD_OFFSET` and -// `CARD_SIZE` to the commented values. +// by `4-e`, but not compatible with it since SMA4 cards start from offset +// `0x72`, while cards generated with `nedcmake v1.4` start from offset `0x4e`. +// Both card formats are valid, though. That said, you could make it compatible +// by changing `CARD_OFFSET` and `CARD_SIZE` to the commented values, or by just +// recompiling `4-e` to skip 0x4e bytes (no pun intended) instead of 0x72. -#define CARD_OFFSET /*0x72*/ 0x4E +#define CARD_OFFSET /*0x72*/ 0x4e #define CARD_SIZE /*2112*/ 2076 #define HANDSHAKE_1 0xfbfb diff --git a/examples/LinkCard_demo/#testcards/bin-raw-bmp/testcard.jap.bin-01.bmp b/examples/LinkCard_demo/#testcards/bin-raw-bmp/testcard.jap.bin-01.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8835f2232fa35a4b421ece248c4a7b6bf5f8f2fb GIT binary patch literal 5518 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 literal 0 HcmV?d00001 diff --git a/examples/LinkCard_demo/#testcards/bin-raw/testcard.usa.bin-01.raw b/examples/LinkCard_demo/#testcards/bin-raw-bmp/testcard.usa.bin-01.raw similarity index 100% rename from examples/LinkCard_demo/#testcards/bin-raw/testcard.usa.bin-01.raw rename to examples/LinkCard_demo/#testcards/bin-raw-bmp/testcard.usa.bin-01.raw diff --git a/examples/LinkCard_demo/#testcards/bin-raw/testcard.usa.bin.01.bin b/examples/LinkCard_demo/#testcards/bin-raw-bmp/testcard.usa.bin.01.bin similarity index 100% rename from examples/LinkCard_demo/#testcards/bin-raw/testcard.usa.bin.01.bin rename to examples/LinkCard_demo/#testcards/bin-raw-bmp/testcard.usa.bin.01.bin