1

Obrazy kart CF które były "sformatowane" w Atari Portfolio przy użyciu prostego interface opartego na 74HC138 (link - webarchive) są dostępne przez zamontowanie poszczególnych "partycji". Piszę w cudzysłowie bo nie ma takim obrazie tablicy partycji, a dostęp jest przez opcję offset do komendy mount. Mam tylko problem z ostatnią częścią która wypełnia resztę dostępnej pamięci, np. dla karty 192MB ostatnia część (dysk i:) jest o wielkości 25296896 bajtów zamiast jak wszystkie inne poprzednie 33423360 bajtów.

simon@nb:~/Documents/atari/pofo/transpofo (master)*
$ hexdump -C --skip $(( 0 * 33423360 )) --length 32 sandisk_192MB.img
00000000  e9 29 00 50 6f 46 6f 43  46 2d 33 00 02 10 01 00  |.).PoFoCF-3.....|
00000010  01 80 00 00 ff f8 0c 00  08 00 02 00 00 00 00 00  |................|
00000020
simon@nb:~/Documents/atari/pofo/transpofo (master)*
$ hexdump -C --skip $(( 1 * 33423360 )) --length 32 sandisk_192MB.img
01fe0000  e9 29 00 50 6f 46 6f 43  46 2d 33 00 02 10 01 00  |.).PoFoCF-3.....|
01fe0010  01 80 00 00 ff f8 0c 00  08 00 02 00 00 00 00 00  |................|
01fe0020
simon@nb:~/Documents/atari/pofo/transpofo (master)*
$ hexdump -C --skip $(( 2 * 33423360 )) --length 32 sandisk_192MB.img
03fc0000  e9 29 00 50 6f 46 6f 43  46 2d 33 00 02 10 01 00  |.).PoFoCF-3.....|
03fc0010  01 80 00 00 ff f8 0c 00  08 00 02 00 00 00 00 00  |................|
03fc0020
simon@nb:~/Documents/atari/pofo/transpofo (master)*
$ hexdump -C --skip $(( 3 * 33423360 )) --length 32 sandisk_192MB.img
05fa0000  e9 29 00 50 6f 46 6f 43  46 2d 33 00 02 10 01 00  |.).PoFoCF-3.....|
05fa0010  01 80 00 00 ff f8 0c 00  08 00 02 00 00 00 00 00  |................|
05fa0020
simon@nb:~/Documents/atari/pofo/transpofo (master)*
$ hexdump -C --skip $(( 4 * 33423360 )) --length 32 sandisk_192MB.img
07f80000  e9 29 00 50 6f 46 6f 43  46 2d 33 00 02 10 01 00  |.).PoFoCF-3.....|
07f80010  01 80 00 00 ff f8 0c 00  08 00 02 00 00 00 00 00  |................|
07f80020
simon@nb:~/Documents/atari/pofo/transpofo (master)*
$ hexdump -C --skip $(( 5 * 33423360 )) --length 32 sandisk_192MB.img
09f60000  e9 29 00 50 6f 46 6f 43  46 2d 33 00 02 0d 01 00  |.).PoFoCF-3.....|
09f60010  01 80 00 00 c1 f8 0c 00  08 00 02 00 00 00 00 00  |................|
09f60020

Ta ostania część ma w nagłówku na pozycji 13 : 0x0d - wartość która jest ponoć niewłaściwa (link):

13      Number of sectors per cluster (1)
        Must be one of 1, 2, 4, 8, 16, 32, 64, 128.
        A cluster should have at most 32768 bytes. In rare cases 65536 is OK.

Dla innej karty (o pojemności 64MB), ostatnia (druga) partycja miała w tym miejscu wartość 0x0f, więc podejrzewam że jest to wartość ustalona podczas wykonywania mkfs na poszczególnych dyskach zamontowanych w PoFo.
Ustawienie tego pola w edytorze na wartość 0x10 (16) pozwala na podmontowanie, ale po nagraniu jakichś danych, pod PoFo poprawnie widoczny jest tylko katalog /.

Po pocięciu splitem ("split -b 33423360") na osobne pliki, file prawidłowo rozpoznaje poszczególne "kawałki" i podaje dla ostatniej części "sectors/cluster 13":

$ for l in a b c d e f; do file sandisk_192MB.img_part_a${l}; done
sandisk_192MB.img_part_aa: , code offset 0x29+3, OEM-ID "PoFoCF-3", sectors/cluster 16, FAT  1, root entries 128, sectors 65280 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 12, sectors/track 8, reserved 0x1, dos < 4.0 BootSector (0), FAT (1Y bit by descriptor)
sandisk_192MB.img_part_ab: , code offset 0x29+3, OEM-ID "PoFoCF-3", sectors/cluster 16, FAT  1, root entries 128, sectors 65280 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 12, sectors/track 8, dos < 4.0 BootSector (0), FAT (1Y bit by descriptor)
sandisk_192MB.img_part_ac: , code offset 0x29+3, OEM-ID "PoFoCF-3", sectors/cluster 16, FAT  1, root entries 128, sectors 65280 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 12, sectors/track 8, dos < 4.0 BootSector (0), FAT (1Y bit by descriptor)
sandisk_192MB.img_part_ad: , code offset 0x29+3, OEM-ID "PoFoCF-3", sectors/cluster 16, FAT  1, root entries 128, sectors 65280 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 12, sectors/track 8, dos < 4.0 BootSector (0), FAT (1Y bit by descriptor)
sandisk_192MB.img_part_ae: , code offset 0x29+3, OEM-ID "PoFoCF-3", sectors/cluster 16, FAT  1, root entries 128, sectors 65280 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 12, sectors/track 8, dos < 4.0 BootSector (0), FAT (1Y bit by descriptor)
sandisk_192MB.img_part_af: , code offset 0x29+3, OEM-ID "PoFoCF-3", sectors/cluster 13, FAT  1, root entries 128, sectors 49408 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 12, sectors/track 8, dos < 4.0 BootSector (0), FAT (1Y bit by descriptor)

Czy któryś z kolegów lepiej zorientowanych w niuansach FAT12 wie jak podmontować taki "napęd" pod linux'em?


Pozdrawiam,
S.

poszukuje kwarcu 14.187576 MHz (CO70034)

2 Ostatnio edytowany przez Hrw (2022-09-19 07:28:44)

Spróbowałbym na początek tak:

mount /dev/sda /media/pofo1
mount /dev/sda /media/pofo2 -offset=$((32*1024*1024))
mount /dev/sda /media/pofo3 -offset=$((64*1024*1024))

Gdzie /dev/sda to karta CF. Bez cięcia na pliki.

3

Hrw napisał/a:

Spróbowałbym na początek tak:

mount /dev/sda /media/pofo1
mount /dev/sda /media/pofo2 -offset=$((32*1024*1024))
mount /dev/sda /media/pofo3 -offset=$((64*1024*1024))

Gdzie /dev/sda to karta CF. Bez cięcia na pliki.

Te pseudo-patrycje nie mają takiej długości. Offset wynosi dokładnie 33423360 i co tyle występuje w obrazie nagłówek kolejnej "patrycji".
Skrypt którym automatycznie montowałem oblicza i montuje o opcją offset mount_drive.sh. Problem jest właśnie z tą ostatnią która jest inna. Do analizy przydaje się pakiet mtools. Minfo z opcją -i wypisuje dużo więcej informacji niż file, którego wynik działania pokazałem w poprzednim wpisie. _aa to pierwsza część, _af to ostatnia (reszta):

$ diff -Nurw sandisk_192MB.img_part_aa_minfo sandisk_192MB.img_part_af_minfo 
--- sandisk_192MB.img_part_aa_minfo     2022-09-23 19:40:49.942632562 +0200
+++ sandisk_192MB.img_part_af_minfo     2022-09-23 19:40:54.754617909 +0200
@@ -1,24 +1,24 @@
 device information:
 ===================
-filename="sandisk_192MB.img_part_aa"
+filename="sandisk_192MB.img_part_af"
 sectors per track: 8
 heads: 2
-cylinders: 4080
+cylinders: 3088
 
 media byte: f8
 
 mformat command line:
-  mformat -t 4080 -h 2 -s 8 -d 1 -r 8 -c 16 -m 248 -i "sandisk_192MB.img_part_aa" ::
+  mformat -t 3088 -h 2 -s 8 -d 1 -r 8 -c 13 -m 248 -i "sandisk_192MB.img_part_af" ::
 
 bootsector information
 ======================
 banner:"PoFoCF-3"
 sector size: 512 bytes
-cluster size: 16 sectors
+cluster size: 13 sectors
 reserved (boot) sectors: 1
 fats: 1
 max available root directory slots: 128
-small size: 65280 sectors
+small size: 49408 sectors
 media descriptor byte: 0xf8
 sectors per fat: 12
 sectors per track: 8
poszukuje kwarcu 14.187576 MHz (CO70034)

4

W skrypcie, czemu zamiast

slimit=33423360
offset=0
p=${part}
echo "image ${img}"
echo "partition num ${p}"
while [ $p -gt 0 ]; do
    ((offset=offset+slimit))
    ((p=p-1))
done

nie wstawisz po prostu

slimit=33423360
p=${part}
echo "image ${img}"
echo "partition num ${p}"
offset=$[p*slimit]
Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

5 Ostatnio edytowany przez sq7bti (2022-09-24 19:59:59)

Pewnie można. Teraz już nie pamiętam dokładnie co miał oryginalnie kod robić, ale chyba w pętli while w oryginale więcej się działo (chyba coś ze sprawdzeniem czy suma nie przekroczyła już końca obrazu) i po uproszczeniu tak już zostało. Skoro działa to czemu ruszać?

ps. czemu nie dostałem powiadomienia? mam ten wątek zasubskrybowany.

poszukuje kwarcu 14.187576 MHz (CO70034)