VOGONS


First post, by borichka

User metadata
Rank Newbie
Rank
Newbie

FloppoScope, a new floppy disk images analyzer, converter and file browser (HTML), no mounting required. Free and open source on GitHub: https://github.com/0ldStaph/FloppoScope
Give it a try!

The attachment disk_layout_only.png is no longer available
The attachment disk_layout_zoom_in.png is no longer available
The attachment image_folder_analyzed.png is no longer available
Last edited by borichka on 2026-10-08, 20:57. Edited 1 time in total.

Reply 1 of 8, by rasz_pl

User metadata
Rank l33t
Rank
l33t

That is actually pretty great, hardly a slop.

Found just one obvious bug so far

00000050  0E 21 D9 0B FE A4 00 00 20 A5 00 00 3E A5 00 00 | .!...... ...>...
000000D0 6A 20 D9 0B 6E 20 D9 0B 27 B1 00 00 55 B1 00 00 | j ..n ..'...U...
00000160 4E BD 00 00 22 15 D9 0B 26 15 D9 0B 2A 15 D9 0B | N..."...&...*...

but raw html
> ' " &
vacuum cleaner double escapes HTML Character Entities.

I see three PLL implementations, basic bad one, proper type 2 second order error carry forward loop, and a freaky type 1 multi 1st order exponential moving average filter :0 seeing there is no way of switching between them im guessing you are using second one bcause first was bad and third an experiment? 😀

Here is my take on disk pll with type 2 second order proportioanl-integral filter, good enough for decoding 5Mbit MFM / 10Mbit RLL HDD dumps
https://github.com/raszpl/sigrok-disk/blob/09 … mfm/pd.py#L1027

https://github.com/raszpl/sigrok-disk FM/MFM/RLL decoder
https://github.com/raszpl/FIC-486-GAC-2-Cache-Module (AT&T Globalyst)
https://github.com/raszpl/386RC-16 ram board
https://github.com/raszpl/Zenith_ZBIOS Zenith Z-386 MFM-300 ZBIOS disassembly

Reply 2 of 8, by ldeveraux

User metadata
Rank Member
Rank
Member

vibecoded?

Reply 3 of 8, by borichka

User metadata
Rank Newbie
Rank
Newbie
rasz_pl wrote on 2026-10-08, 08:31:
That is actually pretty great, hardly a slop. […]
Show full quote

That is actually pretty great, hardly a slop.

Found just one obvious bug so far

00000050  0E 21 D9 0B FE A4 00 00 20 A5 00 00 3E A5 00 00 | .!...... ...>...
000000D0 6A 20 D9 0B 6E 20 D9 0B 27 B1 00 00 55 B1 00 00 | j ..n ..'...U...
00000160 4E BD 00 00 22 15 D9 0B 26 15 D9 0B 2A 15 D9 0B | N..."...&...*...

but raw html
> ' " &
vacuum cleaner double escapes HTML Character Entities.

I see three PLL implementations, basic bad one, proper type 2 second order error carry forward loop, and a freaky type 1 multi 1st order exponential moving average filter :0 seeing there is no way of switching between them im guessing you are using second one bcause first was bad and third an experiment? 😀

Here is my take on disk pll with type 2 second order proportioanl-integral filter, good enough for decoding 5Mbit MFM / 10Mbit RLL HDD dumps
https://github.com/raszpl/sigrok-disk/blob/09 … mfm/pd.py#L1027

Thanks, glad you like it! And good catch on the bug. Will fix.

On the PLLs, you read them right. The basic one is the oldest and weakest. The second one (phase carry-forward) is the default for IBM and Amiga flux. The third one (adaptive interval classifier) is not an experiment, it gets tried when the first pass only gives a loose match. There's no manual switch, it just falls back through the different modes automatically when a track doesn't decode cleanly.

Reply 4 of 8, by borichka

User metadata
Rank Newbie
Rank
Newbie
ldeveraux wrote on 2026-10-08, 12:13:

vibecoded?

Yes, AI-assisted. I used an AI assistant for the coding, but I steer the design and test it against real disk images.

Reply 7 of 8, by bushy555

User metadata
Rank Newbie
Rank
Newbie

Curious : How do we go about requesting other disk images that are not yet supported?

VTech Laser210/310 VZ200/300 98kb and 99kb disk image.

Reply 8 of 8, by bushy555

User metadata
Rank Newbie
Rank
Newbie

(What kind of crazy forum is this where you can't edit your own posts?)

The VZ300 disk file format:

The VZ300 Double Density 5.25 Floppy Disk.
Each disk has a 78K capacity, a total of 640 sectors per disk
arranged as 40 tracks of 16 sectors per track in an interleaved arrangement.
The image file size is 98,560 bytes.
Track 0 (Sector 0 - 14) contains 112 directory entries; sector 15
of track 0 is a map of used sectors or write-protected sectors,
leaving 624 free sectors (78K) for programs.

Image File Layout with interleaved sectors
Track0 Track1 Track2 Track3 ...
Sector0 $9Abytes $9Abytes $9Abytes $9Abytes ...
Sector11 $9Abytes $9Abytes $9Abytes $9Abytes ...
Sector6 $9Abytes $9Abytes $9Abytes ...
Sector1 $9Abytes $9Abytes ...
... ... ...

Tracks
There are a total of 40 tracks per disk, each track is 2464 bytes
with the image starting at track 0 sector 0, tracks are arranged
0 to 39 with 16 interleaved Sectors per Track.

Sectors
There are a total of 640 sectors per disk, sectors are 154 bytes
arranged as in this Sector Order table.

Sector Order Table
0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5

Sectors consist of four sections; a newly formatted image has only
headers written on the image.

Sector Format
OFFSET BYTES SECTION
0 24 HEADER

24 126 DATA BYTES
150 2 NEXT TRACK AND SECTOR
152 2 16 BIT ADD CHECKSUM

Sectors begin with the sector header of 24 bytes, in each sector
header there are three variables TR, SC and T+S. TR is the track, SC
is the sector and T+S is track + sector used as a checksum.

Sector Header Format
GAP1 80 80 80 80 80 80 00
IDAM FE E7 18 C3 TR SC T+S
GAP2 80 80 80 80 80 00 C3 18 E7 FE

Sector Checksum Algorithm
The data section of each sector has a checksum found at the last two
bytes of each sector. The checksum is a simple 16bit add equation of
the data section (excluding the sector header).
Sectors use the 16 bit add checksum method
(Checksum ++Byte) && $FFFF

Sector Map
Track 0 sector 15 is the sector map, only the first 78 bytes are used
the DOS ROM does not in any way use the remaining 50 bytes.
The map sector should be found located at an offset 2310 bytes from
the start of the image file, two bytes are used per track, one bit per
sector; 0 empty and 1 used. The sector map begins at the first byte of
the data section; bytes 24 to 102.
Note that the sector map does not include track 0 and the sector maps
bits are not arranged out of order.

Map word
Low byte High byte
B7 B6 B5 B4 B3 B2 B1 B0 B7 B6 B5 B4 B3 B2 B1 B0
S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 SA SB SC SD SE SF

Directory
Track 0 sector 0 to 14 holds the directory information for the disk.
There are 112 entry places; 16 bytes per entry, 8 entries per sector.

Entry elements and their offsets
filetype delimiter filename track sector startaddr filesize
bytes 1 1 8 1 1 2 2
offset 0 1 2 10 11 12 13