Skip to content

Commit ee21619

Browse files
committed
Initial CARD stubout
1 parent a170fa7 commit ee21619

File tree

5 files changed

+596
-61
lines changed

5 files changed

+596
-61
lines changed

CMakeLists.txt

Lines changed: 3 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ set(CMAKE_CXX_STANDARD 20)
55

66
add_subdirectory(extern)
77

8+
include(cmake/aurora_card.cmake)
89
include(cmake/aurora_core.cmake)
910
include(cmake/aurora_gx.cmake)
1011
include(cmake/aurora_pad.cmake)
@@ -13,69 +14,10 @@ include(cmake/aurora_main.cmake)
1314
include(cmake/aurora_mtx.cmake)
1415
include(cmake/aurora_vi.cmake)
1516

17+
include(cmake/kabufuda.cmake)
18+
1619
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
1720
add_subdirectory(examples)
1821
endif ()
1922

20-
if (NOT MSVC)
21-
set(CMAKE_CXX_STANDARD 20)
22-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
23-
endif()
24-
25-
add_library(kabufuda STATIC
26-
include/kabufuda/Constants.hpp
27-
include/kabufuda/AsyncIO.hpp
28-
include/kabufuda/BlockAllocationTable.hpp lib/kabufuda/BlockAllocationTable.cpp
29-
include/kabufuda/Card.hpp lib/kabufuda/Card.cpp
30-
include/kabufuda/Directory.hpp lib/kabufuda/Directory.cpp
31-
include/kabufuda/File.hpp lib/kabufuda/File.cpp
32-
include/kabufuda/Util.hpp lib/kabufuda/Util.cpp
33-
include/kabufuda/SRAM.hpp lib/kabufuda/SRAM.cpp
34-
)
35-
36-
if(WIN32)
37-
if (MSVC)
38-
target_compile_options(kabufuda PRIVATE
39-
# Enforce various standards compliant behavior.
40-
$<$<COMPILE_LANGUAGE:CXX>:/permissive->
41-
42-
# Enable standard volatile semantics.
43-
$<$<COMPILE_LANGUAGE:CXX>:/volatile:iso>
44-
45-
# Reports the proper value for the __cplusplus preprocessor macro.
46-
$<$<COMPILE_LANGUAGE:CXX>:/Zc:__cplusplus>
47-
48-
# Use latest C++ standard.
49-
$<$<COMPILE_LANGUAGE:CXX>:/std:c++latest>
50-
)
51-
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
52-
# Flags for MSVC (not clang-cl)
53-
target_compile_options(kabufuda PRIVATE
54-
# Allow constexpr variables to have explicit external linkage.
55-
$<$<COMPILE_LANGUAGE:CXX>:/Zc:externConstexpr>
56-
57-
# Assume that new throws exceptions, allowing better code generation.
58-
$<$<COMPILE_LANGUAGE:CXX>:/Zc:throwingNew>
59-
)
60-
endif()
61-
endif()
62-
63-
target_sources(kabufuda PRIVATE
64-
lib/kabufuda/AsyncIOWin32.cpp
65-
)
66-
elseif(NX OR EMSCRIPTEN)
67-
target_sources(kabufuda PRIVATE
68-
lib/kabufuda/AsyncIONX.cpp
69-
)
70-
else()
71-
target_sources(kabufuda PRIVATE
72-
lib/kabufuda/AsyncIOPosix.cpp
73-
)
74-
if(NOT APPLE)
75-
target_link_libraries(kabufuda PUBLIC rt)
76-
endif()
77-
endif()
78-
79-
target_include_directories(kabufuda PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
8023

81-
add_subdirectory(test)

cmake/aurora_card.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
add_library(aurora_card STATIC
2+
lib/dolphin/card.cpp
3+
)
4+
5+
add_library(aurora::card ALIAS aurora_card)
6+
7+
target_link_libraries(aurora_card PUBLIC aurora::core)
8+
target_include_directories(aurora_card PRIVATE include)

cmake/kabufuda.cmake

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
add_library(kabufuda STATIC
2+
include/kabufuda/Constants.hpp
3+
include/kabufuda/AsyncIO.hpp
4+
include/kabufuda/BlockAllocationTable.hpp lib/kabufuda/BlockAllocationTable.cpp
5+
include/kabufuda/Card.hpp lib/kabufuda/Card.cpp
6+
include/kabufuda/Directory.hpp lib/kabufuda/Directory.cpp
7+
include/kabufuda/File.hpp lib/kabufuda/File.cpp
8+
include/kabufuda/Util.hpp lib/kabufuda/Util.cpp
9+
include/kabufuda/SRAM.hpp lib/kabufuda/SRAM.cpp
10+
)
11+
12+
if (WIN32)
13+
if (MSVC)
14+
target_compile_options(kabufuda PRIVATE
15+
# Enforce various standards compliant behavior.
16+
$<$<COMPILE_LANGUAGE:CXX>:/permissive->
17+
18+
# Enable standard volatile semantics.
19+
$<$<COMPILE_LANGUAGE:CXX>:/volatile:iso>
20+
21+
# Reports the proper value for the __cplusplus preprocessor macro.
22+
$<$<COMPILE_LANGUAGE:CXX>:/Zc:__cplusplus>
23+
24+
# Use latest C++ standard.
25+
$<$<COMPILE_LANGUAGE:CXX>:/std:c++latest>
26+
)
27+
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
28+
# Flags for MSVC (not clang-cl)
29+
target_compile_options(kabufuda PRIVATE
30+
# Allow constexpr variables to have explicit external linkage.
31+
$<$<COMPILE_LANGUAGE:CXX>:/Zc:externConstexpr>
32+
33+
# Assume that new throws exceptions, allowing better code generation.
34+
$<$<COMPILE_LANGUAGE:CXX>:/Zc:throwingNew>
35+
)
36+
endif ()
37+
endif ()
38+
39+
target_sources(kabufuda PRIVATE
40+
lib/kabufuda/AsyncIOWin32.cpp
41+
)
42+
elseif (NX OR EMSCRIPTEN)
43+
target_sources(kabufuda PRIVATE
44+
lib/kabufuda/AsyncIONX.cpp
45+
)
46+
else ()
47+
target_sources(kabufuda PRIVATE
48+
lib/kabufuda/AsyncIOPosix.cpp
49+
)
50+
if (NOT APPLE)
51+
target_link_libraries(kabufuda PUBLIC rt)
52+
endif ()
53+
endif ()
54+
55+
target_include_directories(kabufuda PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
56+
57+
add_subdirectory(test)

include/dolphin/card.h

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
#ifndef _DOLPHIN_CARD
2+
#define _DOLPHIN_CARD
3+
4+
#include "dolphin/types.h"
5+
6+
#ifdef __cplusplus
7+
extern "C" {
8+
#endif
9+
#define CARD_ENCODE_ANSI 0u
10+
#define CARD_ENCODE_SJIS 1u
11+
12+
/* Sizes */
13+
#define CARD_WORKAREA_SIZE (5 * 8 * 1024)
14+
#define CARD_READ_SIZE 512
15+
#define CARD_MAX_FILE 127
16+
#define CARD_COMMENT_SIZE 64
17+
#define CARD_FILENAME_MAX 32
18+
#define CARD_ICON_MAX 8
19+
#define CARD_ICON_WIDTH 32
20+
#define CARD_ICON_HEIGHT 32
21+
#define CARD_BANNER_WIDTH 96
22+
#define CARD_BANNER_HEIGHT 32
23+
24+
/* Icon animation */
25+
#define CARD_MODE_NORMAL 0
26+
#define CARD_MODE_FAST 1
27+
28+
#define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK)
29+
#define CARDGetIconAnim(stat) (((stat)->bannerFormat) & CARD_STAT_ANIM_MASK)
30+
#define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK)
31+
#define CARDGetIconSpeed(stat, n) (((stat)->iconSpeed >> (2 * (n))) & CARD_STAT_SPEED_MASK)
32+
#define CARDSetBannerFormat(stat, f) \
33+
((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_BANNER_MASK) | (f)))
34+
#define CARDSetIconAnim(stat, f) \
35+
((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_ANIM_MASK) | (f)))
36+
#define CARDSetIconFormat(stat, n, f) \
37+
((stat)->iconFormat = \
38+
(u16)(((stat)->iconFormat & ~(CARD_STAT_ICON_MASK << (2 * (n)))) | ((f) << (2 * (n)))))
39+
#define CARDSetIconSpeed(stat, n, f) \
40+
((stat)->iconSpeed = \
41+
(u16)(((stat)->iconSpeed & ~(CARD_STAT_SPEED_MASK << (2 * (n)))) | ((f) << (2 * (n)))))
42+
#define CARDSetIconAddress(stat, addr) ((stat)->iconAddr = (u32)(addr))
43+
#define CARDSetCommentAddress(stat, addr) ((stat)->commentAddr = (u32)(addr))
44+
#define CARDGetFileNo(fileInfo) ((fileInfo)->fileNo)
45+
46+
#define CARD_RESULT_UNLOCKED 1
47+
#define CARD_RESULT_READY 0
48+
#define CARD_RESULT_BUSY -1
49+
#define CARD_RESULT_WRONGDEVICE -2
50+
#define CARD_RESULT_NOCARD -3
51+
#define CARD_RESULT_NOFILE -4
52+
#define CARD_RESULT_IOERROR -5
53+
#define CARD_RESULT_BROKEN -6
54+
#define CARD_RESULT_EXIST -7
55+
#define CARD_RESULT_NOENT -8
56+
#define CARD_RESULT_INSSPACE -9
57+
#define CARD_RESULT_NOPERM -10
58+
#define CARD_RESULT_LIMIT -11
59+
#define CARD_RESULT_NAMETOOLONG -12
60+
#define CARD_RESULT_ENCODING -13
61+
#define CARD_RESULT_CANCELED -14
62+
#define CARD_RESULT_FATAL_ERROR -128
63+
64+
#define CARD_STAT_ICON_NONE 0
65+
#define CARD_STAT_ICON_C8 1
66+
#define CARD_STAT_ICON_RGB5A3 2
67+
#define CARD_STAT_ICON_MASK 3
68+
69+
#define CARD_STAT_BANNER_NONE 0
70+
#define CARD_STAT_BANNER_C8 1
71+
#define CARD_STAT_BANNER_RGB5A3 2
72+
#define CARD_STAT_BANNER_MASK 3
73+
74+
#define CARD_STAT_ANIM_LOOP 0x00
75+
#define CARD_STAT_ANIM_BOUNCE 0x04
76+
#define CARD_STAT_ANIM_MASK 0x04
77+
78+
#define CARD_STAT_SPEED_END 0
79+
#define CARD_STAT_SPEED_FAST 1
80+
#define CARD_STAT_SPEED_MIDDLE 2
81+
#define CARD_STAT_SPEED_SLOW 3
82+
#define CARD_STAT_SPEED_MASK 3
83+
84+
#define CARD_ATTR_PUBLIC 0x04u
85+
#define CARD_ATTR_NO_COPY 0x08u
86+
#define CARD_ATTR_NO_MOVE 0x10u
87+
#define CARD_ATTR_GLOBAL 0x20u
88+
#define CARD_ATTR_COMPANY 0x40u
89+
90+
typedef struct CARDFileInfo {
91+
s32 chan;
92+
s32 fileNo;
93+
94+
s32 offset;
95+
s32 length;
96+
u16 iBlock;
97+
u16 __padding;
98+
} CARDFileInfo;
99+
100+
typedef struct CARDStat {
101+
char fileName[CARD_FILENAME_MAX];
102+
u32 length;
103+
u32 time; // seconds since 01/01/2000 midnight
104+
u8 gameName[4];
105+
u8 company[2];
106+
107+
u8 bannerFormat;
108+
u8 __padding;
109+
u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set.
110+
u16 iconFormat;
111+
u16 iconSpeed;
112+
u32 commentAddr; // offset to the pair of 32 byte character strings.
113+
114+
u32 offsetBanner;
115+
u32 offsetBannerTlut;
116+
u32 offsetIcon[CARD_ICON_MAX];
117+
u32 offsetIconTlut;
118+
u32 offsetData;
119+
} CARDStat;
120+
121+
typedef void (*CARDCallback)(s32 chan, s32 result);
122+
123+
#ifdef TARGET_PC
124+
void CARDInit(const char* memcardFile, const char* game, const char* maker);
125+
void CARDSetGameAndMaker(s32 chan, const char* game, const char* maker);
126+
#else
127+
void CARDInit(void);
128+
#endif
129+
BOOL CARDGetFastMode(void);
130+
BOOL CARDSetFastMode(BOOL enable);
131+
132+
s32 CARDCheck(s32 chan);
133+
s32 CARDCheckAsync(s32 chan, CARDCallback callback);
134+
s32 CARDCheckEx(s32 chan, s32* xferBytes);
135+
s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback);
136+
s32 CARDCreate(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo);
137+
s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo,
138+
CARDCallback callback);
139+
s32 CARDDelete(s32 chan, const char* fileName);
140+
s32 CARDDeleteAsync(s32 chan, const char* fileName, CARDCallback callback);
141+
s32 CARDFastDelete(s32 chan, s32 fileNo);
142+
s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback);
143+
s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo* fileInfo);
144+
s32 CARDFormat(s32 chan);
145+
s32 CARDFormatAsync(s32 chan, CARDCallback callback);
146+
s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed);
147+
s32 CARDGetAttributes(s32 chan, s32 fileNo, u8* attr);
148+
s32 CARDGetEncoding(s32 chan, u16* encode);
149+
s32 CARDGetMemSize(s32 chan, u16* size);
150+
s32 CARDGetResultCode(s32 chan);
151+
s32 CARDGetSectorSize(s32 chan, u32* size);
152+
s32 CARDGetSerialNo(s32 chan, u64* serialNo);
153+
s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat);
154+
s32 CARDGetXferredBytes(s32 chan);
155+
s32 CARDMount(s32 chan, void* workArea, CARDCallback detachCallback);
156+
s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback,
157+
CARDCallback attachCallback);
158+
s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo);
159+
BOOL CARDProbe(s32 chan);
160+
s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize);
161+
s32 CARDRename(s32 chan, const char* oldName, const char* newName);
162+
s32 CARDRenameAsync(s32 chan, const char* oldName, const char* newName, CARDCallback callback);
163+
s32 CARDSetAttributesAsync(s32 chan, s32 fileNo, u8 attr, CARDCallback callback);
164+
s32 CARDSetAttributes(s32 chan, s32 fileNo, u8 attr);
165+
s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat* stat);
166+
s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback);
167+
s32 CARDUnmount(s32 chan);
168+
s32 CARDGetCurrentMode(s32 chan, u32* mode);
169+
s32 CARDCancel(CARDFileInfo* fileInfo);
170+
s32 CARDClose(CARDFileInfo* fileInfo);
171+
s32 CARDRead(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset);
172+
s32 CARDReadAsync(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset,
173+
CARDCallback callback);
174+
s32 CARDWrite(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset);
175+
s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset,
176+
CARDCallback callback);
177+
178+
#ifdef __cplusplus
179+
}
180+
#endif
181+
#endif // _DOLPHIN_CARD

0 commit comments

Comments
 (0)