TADx base support

This commit is contained in:
d0k3 2021-09-02 11:45:37 +02:00
parent 1b8bd121b6
commit 8164c4d945
2 changed files with 54 additions and 0 deletions

15
arm9/source/game/tadx.c Normal file
View File

@ -0,0 +1,15 @@
#include "tadx.h"
#include "cia.h"
u32 ValidateTadXHeader(TadXHeader* header) {
// super strict validation
if ((getbe32(header->size_header) != TADX_HEADER_SIZE) ||
(getbe32(header->size_cert) != TADX_CERT_SIZE) ||
(getbe32(header->size_ticket) != TICKET_TWL_SIZE) ||
(getbe32(header->size_tmd) != TMD_SIZE_TWL) ||
(getbe32(header->reserved0) != 0) ||
(getbe32(header->reserved1) != 0) ||
(getbe32(header->size_content) == 0))
return 1;
return 0;
}

39
arm9/source/game/tadx.h Normal file
View File

@ -0,0 +1,39 @@
#pragma once
#include "common.h"
#include "ticket.h"
#include "tmd.h"
#define TADX_HEADER_SIZE sizeof(TadXHeader)
#define TADX_CERT_SIZE 0xE80
#define TADX_OFFSET_CERT align(TADX_HEADER_SIZE, 40)
#define TADX_OFFSET_TICKET (TADX_OFFSET_CERT + align(TADX_CERT_SIZE, 40))
#define TADX_OFFSET_TMD (TADX_OFFSET_TICKET + align(TICKET_TWL_SIZE, 40))
#define TADX_OFFSET_CONTENT (TADX_OFFSET_TMD + align(TMD_SIZE_TWL, 40))
#define TADX_OFFSET_CHUNK (TADX_OFFSET_TMD + TMD_SIZE_STUB)
// this describes the TWL TAD exchangable format (similar to CIA)
// see: https://wiibrew.org/wiki/WAD_files#WAD_format
typedef struct {
u8 size_header[4];
u8 type[2];
u8 version[2];
u8 size_cert[4];
u8 reserved0[4];
u8 size_ticket[4];
u8 size_tmd[4];
u8 size_content[4];
u8 reserved1[4];
} PACKED_STRUCT TadXHeader;
typedef struct {
TadXHeader header;
u8 header_padding[0x40 - (TADX_HEADER_SIZE % 0x40)];
u8 cert[TADX_CERT_SIZE];
// cert is aligned and needs no padding
Ticket ticket;
u8 ticket_padding[0x40 - (TICKET_TWL_SIZE % 0x40)];
u8 tmd[TMD_SIZE_TWL];
u8 tmd_padding[0x40 - (TMD_SIZE_TWL % 40)];
} PACKED_ALIGN(16) TadXStub;