diff options
author | germeier <germeier> | 2002-09-11 13:44:29 +0000 |
---|---|---|
committer | germeier <germeier> | 2002-09-11 13:44:29 +0000 |
commit | ae0e177221c32b444f98d155b322f94e9cfeb64a (patch) | |
tree | 12903037dbc1883b716ab88665ebec1c2106cb74 /libmpio/fat.c | |
parent | 83ff4930c1a0407460b6ffa8bf3a551221e6d406 (diff) | |
download | mpiosh-ae0e177221c32b444f98d155b322f94e9cfeb64a.tar.gz mpiosh-ae0e177221c32b444f98d155b322f94e9cfeb64a.tar.bz2 mpiosh-ae0e177221c32b444f98d155b322f94e9cfeb64a.zip |
finished support for writing to internal memory
Diffstat (limited to 'libmpio/fat.c')
-rw-r--r-- | libmpio/fat.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/libmpio/fat.c b/libmpio/fat.c index 5392bee..aead3a7 100644 --- a/libmpio/fat.c +++ b/libmpio/fat.c @@ -1,6 +1,6 @@ /* * - * $Id: fat.c,v 1.9 2002/09/11 00:18:34 germeier Exp $ + * $Id: fat.c,v 1.10 2002/09/11 13:44:30 germeier Exp $ * * Library for USB MPIO-* * @@ -204,7 +204,7 @@ mpio_fatentry_new(mpio_t *m, mpio_mem_t mem, DWORD sector) { mpio_smartmedia_t *sm; mpio_fatentry_t *new; - + new = malloc (sizeof(mpio_fatentry_t)); if (new) @@ -212,6 +212,16 @@ mpio_fatentry_new(mpio_t *m, mpio_mem_t mem, DWORD sector) new->m = m; new->mem = mem; new->entry = sector; + + /* init FAT entry */ + memset(new->i_fat, 0xff, 0x10); + new->i_fat[0x00] = 0xaa; /* start of file */ + new->i_fat[0x06] = 0x01; /* filetype, hmm ... */ + new->i_fat[0x0b] = 0x00; + new->i_fat[0x0c] = 0x00; + new->i_fat[0x0d] = 0x00; + new->i_fat[0x0e] = 'P'; + new->i_fat[0x0f] = 'C'; } if (mem == MPIO_INTERNAL_MEM) @@ -496,8 +506,12 @@ mpio_fatentry_next_free(mpio_t *m, mpio_mem_t mem, mpio_fatentry_t *f) while(mpio_fatentry_plus_plus(f)) { - if (mpio_fatentry_free(m, mem, f)) - return 1; + if (mpio_fatentry_free(m, mem, f)) + { + if (mem == MPIO_INTERNAL_MEM) + f->i_fat[0x00] = 0xee; + return 1; + } } /* no free entry found, restore entry */ @@ -705,8 +719,8 @@ mpio_fatentry_set_eof(mpio_t *m, mpio_mem_t mem, mpio_fatentry_t *f) { sm = &m->internal; e = f->entry * 0x10; - memset((sm->fat+e), 0xff, 0x10); memset((f->i_fat+0x07), 0xff, 4); + memcpy((sm->fat+e), f->i_fat, 0x10); } if (mem == MPIO_EXTERNAL_MEM) @@ -729,10 +743,13 @@ mpio_fatentry_set_next(mpio_t *m, mpio_mem_t mem, { sm = &m->internal; e = f->entry * 0x10; - sm->fat[e+0x07]= value->hw_address / 0x1000000; - sm->fat[e+0x08]=(value->hw_address / 0x10000 ) & 0xff; - sm->fat[e+0x09]=(value->hw_address / 0x100 ) & 0xff; - sm->fat[e+0x0a]= value->hw_address & 0xff; + + f->i_fat[0x07]= value->hw_address / 0x1000000; + f->i_fat[0x08]=(value->hw_address / 0x10000 ) & 0xff; + f->i_fat[0x09]=(value->hw_address / 0x100 ) & 0xff; + f->i_fat[0x0a]= value->hw_address & 0xff; + + memcpy((sm->fat+e), f->i_fat, 0x10); } if (mem == MPIO_EXTERNAL_MEM) |