Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## [Unreleased]

- [msdos] Add appkey support [Eric Carr]

## [4.9.0] 2025-11-23

- [coco] Implemented fuji_copy_file (Rich Stephens)
Expand Down
38 changes: 36 additions & 2 deletions msdos/src/fn_fuji/fuji_read_appkey.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,42 @@
#include "fujinet-fuji.h"
#include "fujinet-fuji-msdos.h"

typedef struct _appkey
{
unsigned short creator_id;
unsigned char app_id;
unsigned char key_id;
unsigned char open_mode;
unsigned char reserved;
} Appkey;

extern uint16_t ak_creator_id;
extern uint8_t ak_app_id;
extern uint8_t ak_appkey_size;
Appkey appkey;

bool fuji_read_appkey(uint8_t key_id, uint16_t *count, uint8_t *data)
{
// FIXME Implement.
return true;
short result;

// Setup full appkey identifier
appkey.creator_id = ak_creator_id;
appkey.app_id = ak_app_id;
appkey.key_id = key_id;
appkey.open_mode = 0; // read
appkey.reserved = 0;

// Open app key
int_f5_write(0x70,FUJICMD_OPEN_APPKEY,0,0,&appkey,sizeof(appkey));

// Read app key data
if (int_f5_read(0x70,FUJICMD_READ_APPKEY,0,0,data,66)) {
*count = *(uint16_t*)data;
memcpy(data,data+2, 64);
return true;
} else {
count=0;
}
return false;

}
28 changes: 26 additions & 2 deletions msdos/src/fn_fuji/fuji_write_appkey.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,32 @@
#include "fujinet-fuji.h"
#include "fujinet-fuji-msdos.h"

typedef struct _appkey
{
unsigned short creator_id;
unsigned char app_id;
unsigned char key_id;
unsigned char open_mode;
unsigned char reserved;
} Appkey;

extern uint16_t ak_creator_id;
extern uint8_t ak_app_id;
extern uint8_t ak_appkey_size;
extern Appkey appkey;

bool fuji_write_appkey(uint8_t key_id, uint16_t count, uint8_t *data)
{
// not implemented.
return true;
// Setup full appkey identifier
appkey.creator_id = ak_creator_id;
appkey.app_id = ak_app_id;
appkey.key_id = key_id;
appkey.open_mode = 1; // write
appkey.reserved = 0;

// Open app key
int_f5_write(0x70,FUJICMD_OPEN_APPKEY,0,0,&appkey,sizeof(appkey));

// Write data to app key
return int_f5_write(0x70,FUJICMD_WRITE_APPKEY,64,0,data,64) > 0;
}