Ext2

by Javantea
June 9, 2020

This blog post will be a bit weird but I'm trying to find my voice besides the IRC world and the inner world that I've been navigating for more than 20 years. I don't think it's going to be easy, so think of this more as a reference than a blog post. In other words, don't read this blog post unless you're on a path like mine where your stuff has become a deep rabbit hole. Today's rabbit hole, as well as monday and sunday's rabbit hole has been EXT2.

Backstory: I'm writing a kernel and I need a filesystem. A simple one would make my life easier but would then make everyone else's life harder. Do I want to do that when I'm writing a game that is intended to teach people how to write hundreds, even thousands of kernels? Do we want everyone in this tree of learning to be harmed because I wanted to play my game sooner? Maybe. Maybe.

Why do I write? I don't want money, I don't want mental health (though I do want mental health), I want someone to be able to write an AI based on my private and public information. Seq2seq is improving dramatically, so I think it's a matter of time until I write a pretty good bot that models my experience. That would mean that I could type into chat and the bot would be able to respond with my entire history of experience behind it.

Also Black Lives Matter and Defund the SPD.

IRC log this morning. No one was in the channel for the most part (that doesn't matter, the IRC log is for this blog).

07:02 <@Javantea> can't get a song I heard on Sunday out of my head: "When will we be paid for the work we've done?"
07:03 <@Javantea> realizing that without a functioning puts...
07:03 <@Javantea> interrupt1.c uses puts..
07:07 <@Javantea> but it doesn't work?
07:07 <@Javantea> nor does..
07:08 <@Javantea> /tmp/cc0VKBmK.s:406: Warning: 756870 shortened to 35974
07:08 <@Javantea> unclear wth
07:09 <@Javantea>         movb    %al, 756870
07:09 <@Javantea>         movb    %bl, 756872
07:09 <@Javantea>         movb    %cl, 756874
07:09 <@Javantea>         movb    %dl, 756876
07:09 <@Javantea> uhh you should shorted in considerbly more than 35974
07:10 <@Javantea> that's in updateDt
07:11 <@Javantea> DRAW(8, 20, tmp[0]); probably..
07:12 <@Javantea> surprising that updateDt works with thaat bug
07:12 <@Javantea> oh duh
07:12 <@Javantea> hex(756870)
07:12 <@Javantea> '0xb8c86'
07:12 <@Javantea> that's an address in vram
07:13 <@Javantea> hex(35974)
07:13 <@Javantea> '0x8c86'
07:13 <@Javantea> what a mess
07:14 <@Javantea> how is it possible to write to vram in this?
07:14 <@Javantea> mov %es:(%ebx), %cl
07:15 <@Javantea> this is fascinating
07:15 <@Javantea> that explains why puts isn't working
07:15 <@Javantea> #mov $0x0, %ax
07:15 <@Javantea> #mov %ax, %es
07:15 <@Javantea> yeah.. commented that out
07:16 <@Javantea> mext step...
07:17 <@Javantea> multisector.S:213: Warning: .space, .nops or .fill with negative value, ignored
07:17 <@Javantea> we don't have enough room for those two movs
07:17 <@Javantea> tons of room in second sector, so...
07:19 <@Javantea> got "shock" but not the thing before it. because I forgot puts yay
07:19 <@Javantea> err I forgot push
07:19 <@Javantea> 1 shock
07:19 <@Javantea> finally
07:20 <@Javantea> now we make this a subroutine and then call it
07:20 <@Javantea> or we copy and paste it or we put a loop around it.
07:20 <@Javantea> all 3? nonono
07:24 <@Javantea> WW shock
07:24 <@Javantea> jle becomes jg
07:24 <@Javantea> 00 shock
07:25 <@Javantea> getting there..
07:25 <@Javantea> add $0x30, %%al is wrong I think
07:25 <@Javantea> no no
07:26 <@Javantea> it's fine. so the value in ah is 00?
07:26 <@Javantea> AH Return Code
07:26 <@Javantea> oh okay.
07:27 <@Javantea> wish I could write c code for this..
07:27 <@Javantea> let's just get the values for now.. no need to actually make this work.
07:29 <@Javantea> 0 hard drive disks?
07:30 <@Javantea> at least cx is nonzero: 30
07:31 <@Javantea> so.. all other return values are 0 which means..
07:32 <@Javantea> I need to track down the source
07:35 <@Javantea> sure am glad I got real-mode puts to work
07:35 <@Javantea> none of the code from sunday or monday got committed
07:45 <@Javantea> mood music The Staple Singers - When Will We Be Paid https://www.youtube.com/watch?v=QWhcTu5El0c
07:56 <@Javantea> okay done with read drive code...
08:00 <@Javantea> regs->cl = ((nlc >> 2) & 0xc0) | (nls & 0x3f);
08:01 <@Javantea> so nls is 0x30
08:03 <@Javantea> if we look at the ...
08:03 <@Javantea> gonna guess that I got the lsb wrong
08:03 <@Javantea> the lower nibble
08:04 <@Javantea> wait, that wouldn't...
08:04 <@Javantea> let's see what happens when I put f1 in.
08:04 <@Javantea> f0 shock
08:04 <@Javantea> =/
08:05 <@Javantea> fixing
08:05 <@Javantea> mov %%ah, %%al
08:05 <@Javantea> that would do it
08:06 <@Javantea> f1 shock
08:06 <@Javantea> now we do..
08:07 <@Javantea> dl = 01
08:07 <@Javantea> dh = 0f
08:07 <@Javantea> ch = 00
08:07 <@Javantea> cl = 3f
08:08 <@Javantea> bl = 00
08:08 <@Javantea> so nls is exactly what it should be, which makes this a simple computation.
08:11 <@Javantea> when someone covers a song and fails the instrumental so badly that they actually fuck up the song, but make up the loss 
                  by doing the vocals correctly..
08:12 <@Javantea> let's try 3f and then 40
08:12 <@Javantea> err no..
08:13 <@Javantea> 512*0x3f
08:13 <@Javantea> 32256
08:14 <@Javantea> (gdb) x/16bx 0x7e00
08:14 <@Javantea> 0x7e00: 0x00    0x00    0x00    0x00    0x00    0x04    0x00    0x00
08:14 <@Javantea> 0x7e08: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
08:14 <@Javantea> we can work with thata..
08:16 <@Javantea> gonna work on a blog for this content. I think it'll work.
08:17 <@Javantea> so instead of typing here, I'm gonna type into a markdown file
(gdb) x/16bx 0x7e00
0x7e00: 0x00    0x00    0x00    0x00    0x00    0x04    0x00    0x00
0x7e08: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e10: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e18: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e20: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e28: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e30: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e38: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e40: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e48: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e50: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e58: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e60: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e68: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e70: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e78: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e80: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e88: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) 
0x7e90: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e98: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
hex(0x3f*512)
'0x7e00'
hexdump -C ext2t.bin |less
00007c00  00 00 00 00 00 04 00 00  00 00 00 00 00 00 00 00  |................|
00007c10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00008000  00 00 00 00 00 04 00 00  00 00 00 00 00 00 00 00  |................|
00008010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

These two values don't match.

But the fact that we found one close by makes me think that we're pretty close. let's try to give it another value.

I assumed the output of this would be worthless to me, but then just copying it I see there's a non-fatal error.

make ext2t.bin
cc -m32 -c -o split_multi_pm_ext2.o multisector.S -ffreestanding -nostdlib -Wall -O2 -fno-pie -fno-toplevel-reorder -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -mno-red-zone -DPROTECTED_MODE -DSPLIT_MODE -DEXT2
ld -m elf_i386 -static -Tmbr1split_ext2.ld -nostdlib --nmagic -o ext21_p1 split_multi_pm_ext2.o vga3.o
cp ext21_p1 ext21
dd if=ext21_p2 of=ext21 bs=512 seek=2
23+1 records in
23+1 records out
11932 bytes (12 kB, 12 KiB) copied, 0.000207945 s, 57.4 MB/s
dd if=/dev/zero bs=1024 count=1024 of=ext2t.bin
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00440824 s, 238 MB/s
mke2fs -L ext2_1_t ext2t.bin
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done                            
Creating filesystem with 1024 1k blocks and 128 inodes

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done

./e2info -w -t ext2t.bin ext21
inodes: 00000080
blocks: 00000400
r_blocks: 00000033
free_blocks: 000003da
free_inodes: 00000075
Errors on filesystem 0001
log_block_size: 00000000
block_size: 00000400
block_bitmap: 1111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
inode_bitmap: 11111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
inode[0]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 5edfab4f
        ctime: 5edfab4f
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
inode[1]:
b: 24 0 
ftp: 0
                name: .
                inode: 2
                rec_len: 12
                name_len: 1
ftp: 12
                name: ..
                inode: 2
                rec_len: 12
                name_len: 2
ftp: 24
                name: lost+found
                inode: 11
                rec_len: 1000
                name_len: 10
        mode: 41ed
        uid: 0000
        size: 00000400
        atime: 5edfab4f
        ctime: 5edfab4f
        dtime: 00000000
        gid: 0000
        links_count: 0003
        blocks: 0002
        flags: 0000
inode[2]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
inode[3]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
inode[4]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
inode[5]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
inode[6]:
b: 0 0 0 0 0 0 0 0 
        mode: 8180
        uid: 0000
        size: 04043000
        atime: 5edfab4f
        ctime: 5edfab4f
        dtime: 00000000
        gid: 0000
        links_count: 0001
        blocks: 0008
        flags: 0000
inode[7]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
inode[8]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
inode[9]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
inode[10]:
b: 25 26 27 28 29 30 31 32 33 34 35 36 
Error: We can't write to the root block so we're screwed until we get more code (blocks)
ftp: 0
                name: .
                inode: 11
                rec_len: 12
                name_len: 1
ftp: 12
                name: ..
                inode: 2
                rec_len: 1012
                name_len: 2
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
ftp: 1024
                name: 
                inode: 0
                rec_len: 1024
                name_len: 0
        mode: 41c0
        uid: 0000
        size: 00003000
        atime: 5edfab4f
        ctime: 5edfab4f
        dtime: 00000000
        gid: 0000
        links_count: 0002
        blocks: 0018
        flags: 0000
inode[11]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000
Writing kernel
kernel_block: 37
dd if=ext21 of=ext2t.bin bs=512 count=2 of=ext2t.bin conv=notrunc
2+0 records in
2+0 records out
1024 bytes (1.0 kB, 1.0 KiB) copied, 0.000136157 s, 7.5 MB/s

As you can probably see, this is a pretty strong bug. So we're gonna fix it.

Switching my monitor to portrait mode:

~/scripts/benq_portrait1.sh
sudo mount -o loop,ro ext2t.bin /mnt/sd/
Password: 
sudo ls -laR /mnt/sd/
/mnt/sd/:
ls: reading directory '/mnt/sd/': Input/output error
total 0
sudo umount /mnt/sd

This means we have an unexpected regression on our hands. (Note that I'll use we/our for only the reason because I type it and don't want to erase it even though I mean I, but I have been using the pronoun we for so many years that it has become a habit I can't break. There is only me behind this project unless I specifically talk about contributors.).

So what do we do? Well we know it's caused by the writing. The error is our first clue. Let's try to learn about it. The error is in our reading though, which is a little odd.

    size: 00003000

This size is definitely wrong. So why is that? Let's try to figure out what's going on.

dd if=/dev/zero bs=1024 count=1024 of=ext2t.bin
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00476458 s, 220 MB/s

hexdump -C ext2t.bin |head
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00100000

mke2fs -L ext2_1_t ext2t.bin
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done                            
Creating filesystem with 1024 1k blocks and 128 inodes

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done

e2info -w -t ext2t.bin ext21
...
<same as above>

Now that it's clear, it might be a minor change I made. It's unclear whether 12 or 13 is the correct number for this error, so... I just now realized that this is just junk from lost+found. We can ignore it. So let's change it so that it doesn't print an error message.

Now we're ready to go.

make ext21emu
qemu-system-x86_64 -soundhw adlib -serial pty -drive "if=ide,file=ext2t.bin,format=raw" -boot c
char device redirected to /dev/pts/23 (label serial0)
gdb
GNU gdb (Gentoo 9.1 vanilla) 9.1
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://bugs.gentoo.org/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) target remote tcp::1234
Remote debugging using tcp::1234
warning: No executable has been specified and target does not support
determining executable automatically.  Try using the "file" command.
0x0000000000009200 in ?? ()
(gdb) b *0x7c00
Breakpoint 1 at 0x7c00
(gdb) b *0x8000
Breakpoint 2 at 0x8000
(gdb) c
Continuing.
[Inferior 1 (process 1) exited normally]
(gdb) target remote tcp::1234
Remote debugging using tcp::1234
warning: No executable has been specified and target does not support
determining executable automatically.  Try using the "file" command.
0x000000000000ff53 in ?? ()
(gdb) c
Continuing.

Breakpoint 1, 0x0000000000007c00 in ?? ()
(gdb) c
Continuing.

So now we're at the point where we need to step through, so we need assembly to work through. GDB won't help us because we're in real-mode, so we need objdump. This is our toolchain, get used to it.

objdump -D -b binary -m i8086 --adjust-vma=0x7c00 ext2t.bin >ext2t.bin.dis

less ext2t.bin.dis
ext2t.bin:     file format binary


Disassembly of section .data:
00007c00 <.data>:
    7c00:       fa                      cli    
    7c01:       b8 c0 07                mov    $0x7c0,%ax
    7c04:       31 c0                   xor    %ax,%ax
    7c06:       8e d8                   mov    %ax,%ds
    7c08:       8e c0                   mov    %ax,%es
    7c0a:       8e d0                   mov    %ax,%ss
    7c0c:       66 bd f0 1f 00 00       mov    $0x1ff0,%ebp
    7c12:       66 89 ec                mov    %ebp,%esp
    7c15:       bb 00 00                mov    $0x0,%bx
    7c18:       b8 e0 07                mov    $0x7e0,%ax
    7c1b:       8e c0                   mov    %ax,%es
    7c1d:       b9 03 00                mov    $0x3,%cx
    7c20:       ba 80 00                mov    $0x80,%dx
    7c23:       b0 80                   mov    $0x80,%al
    7c25:       b4 02                   mov    $0x2,%ah
    7c27:       cd 13                   int    $0x13
    7c29:       e9 d4 01                jmp    0x7e00

So we should break at 7c29.

(gdb) b *0x7c29
Breakpoint 3 at 0x7c29
(gdb) c
Continuing.

Breakpoint 3, 0x0000000000007c29 in ?? ()
(gdb) x/16bx 0x7e00
0x7e00: 0x80    0x00    0x00    0x00    0x00    0x04    0x00    0x00
0x7e08: 0x33    0x00    0x00    0x00    0xda    0x03    0x00    0x00

We can work with that. let's figure it out.

hexdump -C ext2t.bin |grep '  80 00 00 00 00 04'
00000400  80 00 00 00 00 04 00 00  33 00 00 00 da 03 00 00  |........3.......|

That is when cyl_sec is 0x3. That makes little sense, but we're ready to try more values.

.equ cyl_sec, 0x3 #0x4c

The fact that ext2t.bin can't actually be read by linux means that e2info is broken for kernels larger than 12*1024 = 12288 bytes. And our kernel just graduated to 12956 Jun 9 08:31 ext21. We could fix it or we could make our kernel a little slimmer. Let's do neither until multisector.S (our very small boot sector in assembly) is done.

incrementing cyl_sec. Now it's 0x4

(gdb) x/16bx 0x7e00
0x7e00: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e08: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) x/16bx 0x8000
0x8000: 0x06    0x00    0x00    0x00    0x07    0x00    0x00    0x00
0x8008: 0x08    0x00    0x00    0x00    0xda    0x03    0x75    0x00

So it's blank for the first 16 bytes, 8000 has data though.

hexdump -C ext2t.bin |grep '  06 00 00 00 07'
00000800  06 00 00 00 07 00 00 00  08 00 00 00 da 03 75 00  |..............u.|

Linear regression:

cyl_sec offset
0x3 0400
0x4 0600
offset = 0x200 * (cyl_sec - 1)

So a value of 0 would give us negative offset.

It's acting sanely except for edges, so now we can move to an edge and do the math. I think we're done. We just need to add or subtract 1 to where we want to go.

Because the bit packed nature of INT 13H, we have to compute this in a weird way, but it's easy enough:

hex(37*2)
'0x4a'

# We take our value, and it with 0x3f to get sectors
sectors = (37*2) & 0x3f
hex(sectors)
'0xa'

# Now to get cylinders, we just get the rest of the bits and put them into a ten bit number.

cylinders = (37*2) >> 5
2

# Now we take the lowest 8 bits and put that into the high byte.

cyl_sec_1 = (cylinders << 8) | sectors

# Now we take the highest 2 bits of cylinders and put them in the highest two bits of the low byte.
cyl_sec_2 = (cylinders >> 8) << 6
# which is equivalent to:
cyl_sec_2 = cylinders >> 2
cyl_sec = cyl_sec_1 | cyl_sec_2
hex(cyl_sec)
'0x20a'

.equ cyl_sec 0x020a

And we know we want to add or subtract, so that's easy with this number since it's not an edge, so it's 0x0209 or 0x020b. Whichever works we're going to accept. Of course we may be off by 2.

0x020a:

(gdb) x/16bx 0x7e00
0x7e00: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e08: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00

Nope.

Same with 0x0209. Same with 0x020b.

(gdb) i r ah
ah             0x1                 1

Unclear what that return code is. Let's see what it is for sector 3.

(gdb) i r ah
ah             0x0                 0

So let's head to the edge.

0x0100 is the cyl = 1, sectors = 0. I'm pretty sure that's incorrect. I think sectors should be 1.

(gdb) i r ah
ah             0x1                 1

Do we not get to read any sector above 0x3f? That would suck. Let's try 0x101.

(gdb) i r ah
ah             0x0                 0

0x101 is acceptable. Which means..

Where is this?

512 * (0x3f ± 3)

hex(512*0x3f) '0x7e00'

Whole lot of zeros at that offset. EXT2 is full of 0s. It's like it's power armor.

If we get to 9400 we will see fab8c00731c0, so let's search for that.

00009400  fa b8 c0 07 31 c0 8e d8  8e c0 8e d0 66 bd f0 1f  |....1.......f...|
(gdb) find /w 0x7e00, +10000, 0xfab8c007
Pattern not found.
(gdb) find /w 0x7e00, +10000, 0x07c0b8fa
Pattern not found.

Gonna assume that means that 0 return means something bad happened.

Stansislav's HelpPC is pretty useful in this. I dunno why I didn't check it earlier.

00  no error
01  bad command passed to driver

Okay so now we can assume that 0 is good and 1 is very bad. Wait, status is in al, not ah. Wait. Oh this is a bug in the documentation.

Let's check al for number of sectors read.

(gdb) i r ah
ah             0x0                 0
(gdb) i r al
al             0x80                -128

I find it a little weird..

0x80*512
65536

That explains that. Let's see if we can figure this out by decrementing. This is my process.

cyl_seq = 0x3f:

(gdb) x/16bx 0x7e00
0x7e00: 0x00    0x00    0x00    0x00    0x00    0x04    0x00    0x00
0x7e08: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) i r ah
ah             0x0                 0
(gdb) i r al
al             0x80                -128

Okay, so where is our 9400?

00006800  00 00 00 00 00 04 00 00  00 00 00 00 00 00 00 00  |................|
00006810  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00006c00  00 00 00 00 00 04 00 00  00 00 00 00 00 00 00 00  |................|
00006c10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*

(gdb) x/16bx (0x9600)
0x9600: 0xfa    0xb8    0xc0    0x07    0x31    0xc0    0x8e    0xd8
0x9608: 0x8e    0xc0    0x8e    0xd0    0x66    0xbd    0xf0    0x1f

So we're pretty close to solving this mystery..

Rereading HELPPC. It's got a slightly different and easier interpretation. I assume it is wrong, but that's okay.

CH = track/cylinder number  (0-1023 dec., see below)
CL = sector number  (1-17 dec.)

This can't actually be correct because sectors go from 1-0x3f which is 1-63 but this depends on number of sectors per cylinder. My research in read_drive determined a value of 0x3f from SeaBIOS/Qemu.

So if 0x9400 is at 9600 with cl = 0x3f, then we're off by 1 sector from lining it up. Let's try 0x101 again.

(gdb) x/16bx (0x9400)
0x9400: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x9408: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) x/16bx (0x9600)
0x9600: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x9608: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) x/16bx (0x7e00)
0x7e00: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7e08: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) x/16bx (0x8000)
0x8000: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x8008: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00

No luck. Why? Let's do the LBA calculation again.

    u16 nlc=chs.cylinder, nlh=chs.head, nls=chs.sector;

    // translate lchs to lba
    dop.lba = (((((u32)cylinder * (u32)nlh) + (u32)head) * (u32)nls)
               + (u32)sector - 1);
head = 0
cylinder = 1
sector = 1
nls = 0x3f
nlh = 0xf
lba = (((cylinder * nlh) + head) * nls) + sector - 1
hex(lba)
'0x3b1'
hex(0x3f-1)
'0x3e'

So it skips from sector 0x3e to sector 0x3b1. Let's see where that is.

hex(0x3b1*512)
'0x76200'

That's why. There's no data there. So we want to change the head, not the cylinder.

With head = 0x01 and sector = 0x01

(gdb) x/16bx (0x9400)
0x9400: 0xfa    0xb8    0xc0    0x07    0x31    0xc0    0x8e    0xd8
0x9408: 0x8e    0xc0    0x8e    0xd0    0x66    0xbd    0xf0    0x1f

Now I know: sector << head << cylinder << disk

10:14 <@Javantea> dh is head.
10:16 <@Javantea> that took entirely too long.

So now we do the math again. This is going to be convoluted because it's 0x3e sectors per head.

hex(37*2)
'0x4a'

# We take our value, and it with 0x3f to get sectors
sectors = (37*2) % 0x3e
hex(sectors)
'0xc'

# instead of putting c into sectors we add 1.

# Now to get head, we just get the rest of the bits and put them into a ten bit number.

head = (37*2) // 0x3e
1

# Now we take the lowest 8 bits and put that into the high byte.

.equ cyl_sec 0x0d
.equ head_disk 0x0180
(gdb) x/16bx (0x7e00)
0x7e00: 0xb8    0x00    0x00    0x8e    0xd8    0xe8    0x08    0x00
0x7e08: 0xf4    0x0f    0x0b    0x00    0x00    0x00    0x00    0x00

Off by 1 or 2 or 3. Not a big deal, we got data.

hexdump -C ext2t.bin |grep '  b8 00 00 8e d8 e8 '
00000200  b8 00 00 8e d8 e8 08 00  f4 0f 0b 00 00 00 00 00  |................|
00009600  b8 00 00 8e d8 e8 08 00  f4 0f 0b 00 00 00 00 00  |................|

The reason this appears twice is because it is the start of the second sector of the thing. It appears in the file kernel which is in the filesystem. I decided to put it twice to be easier to code and so that people could use dd to rewrite their boot sector. So which direction? I think I should increment.

(gdb) x/16bx (0x7e00)
0x7e00: 0xfa    0xb8    0xc0    0x07    0x31    0xc0    0x8e    0xd8
0x7e08: 0x8e    0xc0    0x8e    0xd0    0x66    0xbd    0xf0    0x1f

So the question now is what do we want to execute?

objdump -D -b binary -m i8086 --adjust-vma=0x7c00 --start-addr 0x11000 ext2t.bin >ext2t.bin.dis

00011000 <.data+0x9400>:
   11000:       fa                      cli    
   11001:       b8 c0 07                mov    $0x7c0,%ax
   11004:       31 c0                   xor    %ax,%ax
   11006:       8e d8                   mov    %ax,%ds
   11008:       8e c0                   mov    %ax,%es
   1100a:       8e d0                   mov    %ax,%ss
   1100c:       66 bd f0 1f 00 00       mov    $0x1ff0,%ebp
   11012:       66 89 ec                mov    %ebp,%esp
   11015:       bb 00 00                mov    $0x0,%bx
   11018:       b8 e0 07                mov    $0x7e0,%ax
   1101b:       8e c0                   mov    %ax,%es
   1101d:       b9 0e 00                mov    $0xe,%cx
   11020:       ba 80 01                mov    $0x180,%dx
   11023:       b0 80                   mov    $0x80,%al
   11025:       b4 02                   mov    $0x2,%ah
   11027:       cd 13                   int    $0x13

It looks like fa is cli, so that means.. this looks like the boot sector. so we want to increment by 1 or 2?

.equ cyl_sec, 0x0f
(gdb) x/16bx (0x7e00)
0x7e00: 0xc3    0x8d    0xb4    0x26    0x00    0x00    0x00    0x00
0x7e08: 0x8d    0xb4    0x26    0x00    0x00    0x00    0x00    0x90

Running Interrupt 1 to see what it should look like.

(gdb) x/16bx (0x7e00)
0x7e00: 0xb8    0x00    0x00    0x8e    0xd8    0xe8    0xe8    0x02
0x7e08: 0x8d    0xb4    0x00    0x00    0x8d    0xb4    0x00    0x00

I'm assuming that's mov $0x0, %ax in _start of interrupt1.c.

So we should look at ext21_p2

objdump -D -b binary -m i8086 ext21_p2 >ext21_p2.dis

00000000 <.data>:
       0:       fa                      cli    
       1:       b8 c0 07                mov    $0x7c0,%ax
       4:       31 c0                   xor    %ax,%ax
       6:       8e d8                   mov    %ax,%ds
       8:       8e c0                   mov    %ax,%es
       a:       8e d0                   mov    %ax,%ss
       c:       66 bd f0 1f 00 00       mov    $0x1ff0,%ebp
      12:       66 89 ec                mov    %ebp,%esp
      15:       bb 00 00                mov    $0x0,%bx
      18:       b8 e0 07                mov    $0x7e0,%ax
      1b:       8e c0                   mov    %ax,%es
      1d:       b9 0c 01                mov    $0x10c,%cx
      20:       ba 80 00                mov    $0x80,%dx
      23:       b0 80                   mov    $0x80,%al
      25:       b4 02                   mov    $0x2,%ah
      27:       cd 13                   int    $0x13
      29:       e9 d4 7f                jmp    0x8000

Well that's funny. How did it end up with.. wait a second, that's the wrong cx. Let's fix this.

ext21_p2: ext21kernel.o vga3pci.o vga3stdlib.o interrupt2pic.o serial.o idt.o split.o
    $(LD) -m elf_i386 -static -Tmbr1pm_ext2_p2.ld -nostdlib --nmagic -o $@ $^

Little shock.

10:50 <@Javantea> another make bug
10:50 <@Javantea> =O
mv -i ext21_p2 ext21_p2.wtf
make ext21emu
hexdump -C ext21_p2 |head
00000000  c3 8d b4 26 00 00 00 00  8d b4 26 00 00 00 00 90  |...&......&.....|
00000010  0f b6 05 bd ac 00 00 84  c0 0f 88 b9 00 00 00 3c  |...............<|
objdump -D -b binary -m i386 ext21_p2 >ext21_p2.dis
00000000 <.data>:
       0:       c3                      ret    
       1:       8d b4 26 00 00 00 00    lea    0x0(%esi,%eiz,1),%esi
       8:       8d b4 26 00 00 00 00    lea    0x0(%esi,%eiz,1),%esi
       f:       90                      nop
      10:       0f b6 05 bd ac 00 00    movzbl 0xacbd,%eax
      17:       84 c0                   test   %al,%al
      19:       0f 88 b9 00 00 00       js     0xd8
      1f:       3c 2a                   cmp    $0x2a,%al

No sir, that's not the right code. Let's check the split code from zlib 1.

zlib1_p2: zlib1kernel.o vga3pci.o vga3video.o vga3stdlib.o interrupt2pic.o serial.o font1ale.o split.o 2020-05-26.bin.zlib.o
    $(LD) -m elf_i386 -static -Tmbr1pm_p2.ld -nostdlib --nmagic -o $@ $^ $(PWD)/zlib-1.2.11/libz.a
    .text :
    {
        *(.startup)
        *(.text)
    }

Woops. Looking from past hex it should be the one that starts with fa I think.

10:52 <@Javantea> got it

.equ cyl_sec 0xd worked.

So now I have some ext2 stuff to do in this custom kernel =O. I always like to take snapshots when I make a significant improvement to the code. So...

ls -l ext21
-rwxr-xr-x 1 user user 12444 Jun  9 10:56 ext21
Ext2 1 2020-06-09 10:59:07 PDT

Ext2 1 2020-06-09 10:59:07 PDT

The code from Ext2 1 is equal to ATA 1 with a minor addition: #include <ext2fs.h>

-rwxr-xr-x 1 user user 11984 Jun  9 10:56 ata1

So why is ext21 larger? It's probably global variables defined by ext2fs.h or its dependencies.

Because this file is slightly larger than the 12 blocks that EXT2 has in the inode block array structure (i_block), it won't be the same as the file I tried to put in, so let's fix that now. Right now it isn't causing any trouble, but it will very soon.

sudo mount -o loop,ro ext2t.bin /mnt/sd/
Password: 
sudo ls -laR /mnt/sd/
/mnt/sd/:
ls: reading directory '/mnt/sd/': Input/output error
total 0
sudo umount /mnt/sd
dmesg |less
[1463343.596994] EXT2-fs (loop1): error: ext2_check_page: bad entry in directory #2: : rec_len is smaller than minimal - offset=1024, inode=0, rec_len=0, name_len=0
[1463343.596997] EXT2-fs (loop1): error: ext2_readdir: bad page in #2
[1472247.103823] EXT2-fs (loop1): error: ext2_check_page: bad entry in directory #2: : rec_len is smaller than minimal - offset=1024, inode=0, rec_len=0, name_len=0
[1472247.103825] EXT2-fs (loop1): error: ext2_readdir: bad page in #2

So this is interesting.. Let's run our program to find out what's going on.

./e2info -t ext2t.bin 
...
Error with block. probably size related.. pos=1024 pos2=1024 size=12288
        mode: 41ed
        uid: 0000
        size: 00003000

So we corrupted our root dir. Let's check the input (original value).

        size: 00000400

Okay, let's fix that bug.

inode_table needs to be read from disk. Not sure how that got missed. Oh well. It is read from disk. And then it's updated:

inode_table.i_size = ((pos2 + 8+6) + (block_size - 1)) & block_mask;

pos2 is incorrect. It must be a bug I fixed or something weird. More variables.

sudo mount -o loop,ro ext2t.bin /mnt/sd/
Password: 
sudo ls -laR /mnt/sd/
/mnt/sd/:
total 17
drwxr-xr-x  3 root root  1024 Jun  9 11:16 .
drwxr-xr-x 11 root root  4096 Jan 18 15:53 ..
drwx------  2 root root 12288 Jun  9 11:16 lost+found

/mnt/sd/lost+found:
total 13
drwx------ 2 root root 12288 Jun  9 11:16 .
drwxr-xr-x 3 root root  1024 Jun  9 11:16 ..
sudo umount /mnt/sd

Better, but now we don't have a directory entry in root for kernel, which is a little weird. So the way this simple program works is that it reads an ext2 filesystem looking for a file anywhere named kernel and it prints it's first block if you give it the flag -t. If you give it the flag -w it will write a kernel file you give it to the filesystem. It's equivalent to the commands:

sudo mount -o loop,rw ext2t.bin /mnt/sd/
sudo cp ext21 /mnt/sd/kernel
sudo umount /mnt/sd

So why don't I just call those three commands? As you can see, it uses root. If I was hacking, I would just use root and that would be that. But I'm trying to release a piece of software. I can't use root if there's a better solution. So here we are writing EXT2 code in userland and kernel land. It only took 1.5 days to write 564 lines of code, so it's not too big a deal. But those 1.5 days could have been spent making this game better. Which do you prefer?

fls ext2t.bin 
d/d 11: lost+found
V/V 129:        $OrphanFiles

fls is worthless.

Let's check the dir entry code and the .. I know the problem. We're modifying the wrong entry.. Fixed a lot of bugs.

...
root block 1024
...

Nope. That's not the right value. The only valid value for root block is 24 according to the code:

b: 24 0 

It's a buffer overflow. After setting root_block, it's 24. Then it gets corrupted later:

root block 24
root block 24
root block 24
root block 24
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root block 1024
root_block = inode_table.i_block[blocks - 1];

I didn't see this line of code. Fixed. Now I have an error. This should be easier to fix.

11:50 <@Javantea> =/

Endless loop. I didn't think that was possible. Fixed.

root prev pos 24 pos 44

ftp: 24
                name: lost+found
                inode: 11
                rec_len: 18
                name_len: 10
root block 24
ftp: 42
                name: ^F
                inode: 786432
                rec_len: 0
                name_len: 212

So it's off by 2. I forgot alignment.

sudo mount -o loop,ro ext2t.bin /mnt/sd/
Password: 
sudo ls -laR /mnt/sd/
/mnt/sd/:
total 24
drwxr-xr-x  3 root root  1024 Jun  9 12:28 .
drwxr-xr-x 11 root root  4096 Jan 18 15:53 ..
--wx------  1 root root 12444 Dec 31  1969 kernel
drwx------  2 root root 12288 Jun  9 12:28 lost+found

/mnt/sd/lost+found:
total 13
drwx------ 2 root root 12288 Jun  9 12:28 .
drwxr-xr-x 3 root root  1024 Jun  9 12:28 ..
sudo sha512sum /mnt/sd/kernel 
86ad4279c37c84b78780afcbc7a204dfcdfda967ac33bcf4d525ed39c62ac2bbf9884685c47ef105f83f51d9ac6eaf8bd6c9774ea5104338f61afd06e7e729aa  /mnt/sd/kernel
sudo umount /mnt/sd

Now we're working with a valid ext2 partition.

Mood music: profundo

sha512sum ext21
86ad4279c37c84b78780afcbc7a204dfcdfda967ac33bcf4d525ed39c62ac2bbf9884685c47ef105f83f51d9ac6eaf8bd6c9774ea5104338f61afd06e7e729aa  ext21

It's a little surprising that this fits in 12 blocks since it shouldn't according to these docs. Let's do the math. We'll need to implement this code in a few minutes, so it doesn't matter too much.

12444/1024
12.15234375

So let's look at the code that makes it happen. Oh I implemented yesterday I guess. I forgot until I looked at it. It's only going to support files up to 274432 bytes, which is 268 KiB. Since our zlib files could get to be 268 KiB pretty quickly, it makes sense to implement the double redirected block array, which should support files of size 67383296 bytes, which is more than 64 MB. Since we're trying to be reasonable, there's only one reason to go the next level and that is to support arbitrary ext2 filesystems which we are definitely not trying to do. This is week 6 of this project. This project was supposed to take 4 weeks. I'm letting it go a while longer to deal with the obvious time prediction failure. We're going onto a new project at a day in the future and I'd like to publish this.

Got the magic out.

Ext2 1 2020-06-09 12:50:11 PDT

Ext2 1 2020-06-09 12:50:11 PDT

Copied code from e2info, ported it to my limited kernel style -- no printf, no fread, no fseek. Instead I used puts_current (a puts-alike), puts_u32 (a thing that prints unsigned 32-bit ints hex like %08x), and ata_read (a function that reads a sector from disk given its LBA using direct port IO). You'd be surprised how easy and powerful this code is. When we get to reading whole files at once (almost never), we might need something that reads more than 512 bytes at a time.

    // Read the superblock
    ata_read((u8 *)superblock, 0x2);
    ata_read(((u8 *)superblock)+512, 0x3);
Ext2 1 2020-06-09 13:02:47 PDT

Ext2 1 2020-06-09 13:02:47 PDT

13:17 <@Javantea> so why did I need a filesystem again?

I was thinking about how I need to read and write to disk for save/load. That was it. Tracker 1 was at the point where I had pretty good setup. And I wanted a log on disk.

So the first thing I should do is grab a file's data by name. This is going to require a valid malloc I think. I don't have a good malloc right now, so let's try out dlmalloc. We'll need to provide it a valid mmap I think...

Let's get it to work for files of a static size and then work our way up. Slow but steady. Since this code is going to be very messy, I might as well start with Linux kernel and libc on my side so that I can debug with code. First function is int get_block(u8 *out, char *filename).

I just refactored write_kernel out of main and now it's a mess. Finally done 14:05.

After a break, I implemented get_block in 117 lines of code. It was mostly copy and paste. 15:06. So now we're ready to copy and paste into our kernel.

I forgot more than two of my important projects to work on this project day and night. I suppose I hoped that most of the projects would continue, but I guess I excused them falling behind due to the duration of this project being limited and those being "until I finish".

15:18 <@Javantea> thinking about a weird malloc...
15:19 <@Javantea> so you write size and then you return a pointer after.
15:19 <@Javantea> on free, you go back the size of size, and you free that. done, right?
15:20 <@Javantea> you have to walk the list to find a free block and how do you know if it's free? you need a byte for that, okay now we've 
                  got an array of (size, free, data) right?
15:21 <@Javantea> so now to allocate you need to find the right free one and put it there, right?
15:21 <@Javantea> seems like keeping a pointer would help.

15:22 <@Javantea> gonna stop here since I've been working since 7am. that's 8+ hours
15:22 <@Javantea> I want to reward myself for doing a good day of work...
15:23 <@Javantea> need better rewards

I defeated master mode Eye of Cthulhu on first try. It was actually not too difficult. Brain should be much more difficult. I know skeletron pretty well, but I'll have to use sleep to get a good run at him. I didn't use good armor for Eye since I knew the pattern pretty well for phase 1. Phase 2 was pretty easy. He killed one of my NPCs because I ran back and forth over my two forest houses.

I think I can write kernel code now. I'm not afraid of consequences of not knowing stuff anymore. Anything I want to work better I can contribute. And if I fail, I'll learn more.

I just realized I have everything I need for save and load. It's gonna take a bit of code, but it's just this and that.

Software is really getting to a weird point... While I go deeper, others are going further.

[OPL2] The Secret of Monkey Island - Title (Oscilloscope View)

viva la revolución tramp stamp

2020-06-10

09:14 <@Javantea> letting an unvetted program have port io is foolish, but vetting a pretty large program so that you can play VGMs without 
                  infecting your program with malware is also weird.
09:15 <@Javantea> so it makes sense to instead write port io malware, then publish while listening to VGMs emulated.
09:16 <@Javantea> gonna listen to pixelated audio. hopefully that will keep me going for >8h
09:17 <@Javantea> they have good patreon rewards
09:18 <@Javantea> I think improving alsa and/or pulseaudio is in the cards for me. maybe writing a compliant replacement for pulseaudio.
09:21 <@Javantea> Episode 128 is Psycho World, MSX FM, MSX PSG, and SMS PSG (Sega Master System). MSX FM is YM2413 
                  https://en.wikipedia.org/wiki/Yamaha_YM2413

09:22 <@Javantea> let's get this code written.
09:22 <@Javantea> still gonna work on the blog.

Since the OPLL is a cost-reduced version of the OPL2, it seems sensible that the OPL2 could emulate the OPLL.

"the channels are not mixed using an adder; instead, the chip's DAC uses time-division multiplexing to play short segments of each channel in sequence, as also done in the YM2612."

Addition is cheap, isn't it?

So we're porting from C with linux kernel and libc to our kernel. I ported fread and printf. It'd be nice to have these functions now.

ext21kernel.c:(.text+0x4bf): undefined reference to `__memcpy_chk'
ld: ext21kernel.c:(.text+0x4d8): undefined reference to `strcmp'
ld: ext21kernel.c:(.text+0x57e): undefined reference to `align'
ld: ext21kernel.c:(.text+0x600): undefined reference to `align'
09:53 <@Javantea> strcmp is hard to understand.
09:54 <@Javantea> it seems quite contradictory.

09:56 <@Javantea> the pixel art in Psycho World is great. I hope my pixel art lives up to the this..

Psycho World - Playthrough - Normal Mode

10:04 <@Javantea> got it running..
10:04 <@Javantea>  -D_FORTIFY_SOURCE=0
Error: root_block_i is not big enough for block size.

Not bad. I can only guess what this standin for an assert found. block_size got set to 0 somehow. Nifty.

My temperature: 36.3°C

There's only one thing between printing of block_size when it's 0x400 and when it's 0x0. So let's debug that:

read_items = partial_read((u8 *)group_desc, 0x4, sizeof(struct ext2_group_desc));

So it's blank before the first function call in partial read. So.. I'm guessing we've got some very weird stuff.

    puts_u32(&block_size);

block_size is at 0000c1a0

Okay, so we now know the address of it. Let's find out where the stack is.

Stack is at 61de0, so that isn't our problem.

Fixed. We double-defined it. One in global scope, one in local scope. That was not intended. Now we should have this.

Now there's no error except our Error: Couldn't find "kernel"; I bet it's strcmp.

root_inode_ob never gets read. That would do it.

So now I'm splitting up the code into root and kernel.

I wrote the code, now let's make it happen. Block bitmap is not working, inode bitmap is. So half done?

11:17 <@Javantea> Pac-Man music is 5 seconds long =O
11:17 <@Javantea> that seems weird, let's see what it looks like.
11:18 <@Javantea> oh dear. that's terrible.
11:19 <@Javantea> I should add music to my pac-man rom

block_bitmap_location is 0. That's not supposed to be that way.

Okay, group_desc[0].bg_block_bitmap is flipping back and forth from correct value and 0. Mostly 0.

Debugging ata_read. ugh. Let's use serial.

qemu-system-x86_64 -soundhw adlib -S -serial pty -drive "if=ide,file=ext2t.bin,format=raw" -boot c
char device redirected to /dev/pts/23 (label serial0)

cat /dev/pts/23
 log_block_size: 00000000 block_size: 00000400               read-->disk disk d0; d0; drq \x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\xda\x03u\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<-- s 00000006 s 00000007  debug 00000006 debug 00000007                read-->disk disk d0; d0; d0; drq \xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\
xff\xff\xff\
xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--               read-->disk disk d0; drq \xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--block_bitmap: 
inode_bitmap: 
Error: Bitmap is full?

--reset--

 log_block_size: 00000000 block_size: 00000400               read-->disk disk d0; d0; drq \x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\xda\x03u\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<-- s 00000006 s 00000007  debug 00000006 debug 00000007                read-->disk disk d0; drq \xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\
xff\xff\xff\
xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--               read-->disk disk d0; drq \xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--block_bitmap: 
inode_bitmap: 
               read-->disk disk d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xedA\x00\x00\x00\x04\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000000]:
        mode: 0000      uid: 0000       size: 00000000  atime: 5ee13094 ctime: 5ee13094 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000               read-->disk disk d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xedA\x00\x00\x00\x04\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000001]:b: 00000018 00000000 
        mode: 41ed      uid: 0000       size: 00000400  atime: 5ee13094 ctime: 5ee13094 dtime: 00000000 gid: 0000       links_count: 0003       blocks: 0002   flags: 0000               read-->disk disk d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xedA\x00\x00\x00\x04\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000002]:
        mode: 0000      uid: 0000       size: 00000000  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000               read-->disk disk drq \x00\x00\x00\x00\x00\x00\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xedA\x00\x00\x00\x04\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000003]:
        mode: 0000      uid: 0000       size: 00000000  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000               read-->disk disk d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x81\x00\x00\x000\x04\x04\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000004]:
        mode: 0000      uid: 0000       size: 00000000  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000               read-->disk disk drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x81\x00\x00\x000\x04\x04\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000005]:
        mode: 0000      uid: 0000       size: 00000000  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000               read-->disk disk drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x81\x00\x00\x000\x04\x04\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000006]:b: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
        mode: 8180      uid: 0000       size: 04043000  atime: 5ee13094 ctime: 5ee13094 dtime: 00000000 gid: 0000       links_count: 0001       blocks: 0008   flags: 0000               read-->disk disk d0; d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x81\x00\x00\x000\x04\x04\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000007]:
        mode: 0000      uid: 0000       size: 00000000  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000               read-->disk disk d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0A\x00\x00\x000\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x02\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00 \x00\x00\x00!\x00\x00\x00"\x00\x00\x00#\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\x00\x00\x10B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00&\x00\x00\x00'\x00\x00\x00(\x00\x00\x00)\x00\x00\x00*\x00\x00\x00+\x00\x00\x00,\x00\x00\x00-\x00\x00\x00.\x00\x00\x00/\x00\x00\x000\x00\x00\x006\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000008]:
        mode: 0000      uid: 0000       size: 00000000  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000               read-->disk disk d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0A\x00\x00\x000\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x02\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00 \x00\x00\x00!\x00\x00\x00"\x00\x00\x00#\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\x00\x00\x10B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00&\x00\x00\x00'\x00\x00\x00(\x00\x00\x00)\x00\x00\x00*\x00\x00\x00+\x00\x00\x00,\x00\x00\x00-\x00\x00\x00.\x00\x00\x00/\x00\x00\x000\x00\x00\x006\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[00000009]:
        mode: 0000      uid: 0000       size: 00000000  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000               read-->disk disk d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0A\x00\x00\x000\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x02\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00 \x00\x00\x00!\x00\x00\x00"\x00\x00\x00#\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\x00\x00\x10B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00&\x00\x00\x00'\x00\x00\x00(\x00\x00\x00)\x00\x00\x00*\x00\x00\x00+\x00\x00\x00,\x00\x00\x00-\x00\x00\x00.\x00\x00\x00/\x00\x00\x000\x00\x00\x006\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[0000000a]:b: 00000019 0000001a 0000001b 0000001c 0000001d 0000001e 0000001f 00000020 00000021 00000022 00000023 00000024 
TODO: more than 12 blocks
        mode: 41c0      uid: 0000       size: 00003000  atime: 5ee13094 ctime: 5ee13094 dtime: 00000000 gid: 0000       links_count: 0002       blocks: 0018   flags: 0000               read-->disk disk d0; drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0A\x00\x00\x000\x00\x00\x940\xe1^\x940\xe1^\x940\xe1^\x00\x00\x00\x00\x00\x00\x02\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00 \x00\x00\x00!\x00\x00\x00"\x00\x00\x00#\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\x00\x00\x10B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00&\x00\x00\x00'\x00\x00\x00(\x00\x00\x00)\x00\x00\x00*\x00\x00\x00+\x00\x00\x00,\x00\x00\x00-\x00\x00\x00.\x00\x00\x00/\x00\x00\x000\x00\x00\x006\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[0000000b]:b: 00000025 00000026 00000027 00000028 00000029 0000002a 0000002b 0000002c 0000002d 0000002e 0000002f 00000030 
        mode: 80c0      uid: 0000       size: 00004210  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0001       blocks: 0011   flags: 0000               read-->disk disk drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--inode[0000000c]:
        mode: 0000      uid: 0000       size: 00000000  atime: 00000000 ctime: 00000000 dtime: 00000000 gid: 0000       links_count: 0000       blocks: 0000   flags: 0000
#"

What a gigantic mess. So we've got some pretty serious bugs.

An example of when ata_read fails. It looks like drq is failing. Found a big bug in ata_read.

cat /dev/pts/23
 log_block_size: 00000000 block_size: 00000400               read-->disk disk drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<-- s 00000000 s 00000000  debug 00000000 debug 00000000                read-->disk disk d0; d0; d0; d0; drq \xfa\xb8\xc0\x071\xc0\x8e\xd8\x8e\xc0\x8e\xd0f\xbd\xf0\x1f\x00\x00f\x89\xec\xbb\x00\x00\xb8\xe0\x07\x8e\xc0\xb9\x0d\x00\xba\x80\x01\xb0\x80\xb4\x02\xcd\x13\xe9\xd4\x01Uf\x89\xe5fSfQf1\xdbg\x8b]\x04&g\x8a\x0b\xeb\x0ff\x89\xd8&g\x8a\x00\x88\xc1\xb4\x0e\xcd\x10fC\x80\xf9\x00u\xecf1\xc0fYf[\xc9\xc3f\x90\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x9a\xcf\x00\xff\xff\x00\x00\x00\x92\xcf\x00\xff\xff\x00\x00\x00\xfa\x00\x00\xff\xff\x00\x00\x00\xf2\x00\x00\xeb\x16\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x90'\x00`|\x00\x00\xfa\x0f\x01\x16\xa0|\xe4\x92\x0c\x02\xe6\x92\x0f \xc0\x0c\x01\x0f"\xc0\xea\xbf|\x08\x00f\xb8\x10\x00\x8e\xd8\x8e\xc0\x8e\xe0\x8e\xe8\x8e\xd0\xbc  \x06\x00\xe9)\x03\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa               end read<--               read-->disk disk d0; d0; d0; d0; drq \xfa\xb8\xc0\x071\xc0\x8e\xd8\x8e\xc0\x8e\xd0f\xbd\xf0\x1f\x00\x00f\x89\xec\xbb\x00\x00\xb8\xe0\x07\x8e\xc0\xb9\x0d\x00\xba\x80\x01\xb0\x80\xb4\x02\xcd\x13\xe9\xd4\x01Uf\x89\xe5fSfQf1\xdbg\x8b]\x04&g\x8a\x0b\xeb\x0ff\x89\xd8&g\x8a\x00\x88\xc1\xb4\x0e\xcd\x10fC\x80\xf9\x00u\xecf1\xc0fYf[\xc9\xc3f\x90\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x9a\xcf\x00\xff\xff\x00\x00\x00\x92\xcf\x00\xff\xff\x00\x00\x00\xfa\x00\x00\xff\xff\x00\x00\x00\xf2\x00\x00\xeb\x16\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x90'\x00`|\x00\x00\xfa\x0f\x01\x16\xa0|\xe4\x92\x0c\x02\xe6\x92\x0f \xc0\x0c\x01\x0f"\xc0\xea\xbf|\x08\x00f\xb8\x10\x00\x8e\xd8\x8e\xc0\x8e\xe0\x8e\xe8\x8e\xd0\xbc  \x06\x00\xe9)\x03\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa               end read<--block_bitmap: 
inode_bitmap: 
               read-->disk disk d0; drq \xfa\xb8\xc0\x071\xc0\x8e\xd8\x8e\xc0\x8e\xd0f\xbd\xf0\x1f\x00\x00f\x89\xec\xbb\x00\x00\xb8\xe0\x07\x8e\xc0\xb9\x0d\x00\xba\x80\x01\xb0\x80\xb4\x02\xcd\x13\xe9\xd4\x01Uf\x89\xe5fSfQf1\xdbg\x8b]\x04&g\x8a\x0b\xeb\x0ff\x89\xd8&g\x8a\x00\x88\xc1\xb4\x0e\xcd\x10fC\x80\xf9\x00u\xecf1\xc0fYf[\xc9\xc3f\x90\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x9a\xcf\x00\xff\xff\x00\x00\x00\x92\xcf\x00\xff\xff\x00\x00\x00\xfa\x00\x00\xff\xff\x00\x00\x00\xf2\x00\x00\xeb\x16\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x90'\x00`|\x00\x00\xfa\x0f\x01\x16\xa0|\xe4\x92\x0c\x02\xe6\x92\x0f \xc0\x0c\x01\x0f"\xc0\xea\xbf|\x08\x00f\xb8\x10\x00\x8e\xd8\x8e\xc0\x8e\xe0\x8e\xe8\x8e\xd0\xbc  \x06\x00\xe9)\x03\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa               end read<--

when it's working we see: read-->disk disk d0; d0; drq when it's not: read-->disk disk drq So we need it to do 2 d0. So the code is in ata_ready_wait not drq. I failed to understand the code. Let's figure this out.

cat /dev/pts/23
 log_block_size: 00000000 block_size: 00000400               read-->disk 58; 58; disk 58; 58; drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<-- s 00000000 s 00000000  debug 00000000 debug 00000000                read-->disk 50; 50; disk 58; 58; drq \xfa\xb8\xc0\x071\xc0\x8e\xd8\x8e\xc0\x8e\xd0f\xbd\xf0\x1f\x00\x00f\x89\xec\xbb\x00\x00\xb8\xe0\x07\x8e\xc0\xb9\x0d\x00\xba\x80\x01\xb0\x80\xb4\x02\xcd\x13\xe9\xd4\x01Uf\x89\xe5fSfQf1\xdbg\x8b]\x04&g\x8a\x0b\xeb\x0ff\x89\xd8&g\x8a\x00\x88\xc1\xb4\x0e\xcd\x10fC\x80\xf9\x00u\xecf1\xc0fYf[\xc9\xc3f\x90\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x9a\xcf\x00\xff\xff\x00\x00\x00\x92\xcf\x00\xff\xff\x00\x00\x00\xfa\x00\x00\xff\xff\x00\x00\x00\xf2\x00\x00\xeb\x16\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x90'\x00`|\x00\x00\xfa\x0f\x01\x16\xa0|\xe4\x92\x0c\x02\xe6\x92\x0f \xc0\x0c\x01\x0f"\xc0\xea\xbf|\x08\x00f\xb8\x10\x00\x8e\xd8\x8e\xc0\x8e\xe0\x8e\xe8\x8e\xd0\xbc  \x06\x00\xe9)\x03\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa               end read<--               read-->disk 50; 50; disk d0; d0; d0; drq \xfa\xb8\xc0\x071\xc0\x8e\xd8\x8e\xc0\x8e\xd0f\xbd\xf0\x1f\x00\x00f\x89\xec\xbb\x00\x00\xb8\xe0\x07\x8e\xc0\xb9\x0d\x00\xba\x80\x01\xb0\x80\xb4\x02\xcd\x13\xe9\xd4\x01Uf\x89\xe5fSfQf1\xdbg\x8b]\x04&g\x8a\x0b\xeb\x0ff\x89\xd8&g\x8a\x00\x88\xc1\xb4\x0e\xcd\x10fC\x80\xf9\x00u\xecf1\xc0fYf[\xc9\xc3f\x90\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x9a\xcf\x00\xff\xff\x00\x00\x00\x92\xcf\x00\xff\xff\x00\x00\x00\xfa\x00\x00\xff\xff\x00\x00\x00\xf2\x00\x00\xeb\x16\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x90'\x00`|\x00\x00\xfa\x0f\x01\x16\xa0|\xe4\x92\x0c\x02\xe6\x92\x0f \xc0\x0c\x01\x0f"\xc0\xea\xbf|\x08\x00f\xb8\x10\x00\x8e\xd8\x8e\xc0\x8e\xe0\x8e\xe8\x8e\xd0\xbc  \x06\x00\xe9)\x03\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa               end read<--block_bitmap: 
inode_bitmap: 
               read-->disk 50; 50; disk d0; d0; d0; drq \xfa\xb8\xc0\x071\xc0\x8e\xd8\x8e\xc0\x8e\xd0f\xbd\xf0\x1f\x00\x00f\x89\xec\xbb\x00\x00\xb8\xe0\x07\x8e\xc0\xb9\x0d\x00\xba\x80\x01\xb0\x80\xb4\x02\xcd\x13\xe9\xd4\x01Uf\x89\xe5fSfQf1\xdbg\x8b]\x04&g\x8a\x0b\xeb\x0ff\x89\xd8&g\x8a\x00\x88\xc1\xb4\x0e\xcd\x10fC\x80\xf9\x00u\xecf1\xc0fYf[\xc9\xc3f\x90\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x9a\xcf\x00\xff\xff\x00\x00\x00\x92\xcf\x00\xff\xff\x00\x00\x00\xfa\x00\x00\xff\xff\x00\x00\x00\xf2\x00\x00\xeb\x16\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x8d\xb4&\x00\x00\x00\x00\x90'\x00`|\x00\x00\xfa\x0f\x01\x16\xa0|\xe4\x92\x0c\x02\xe6\x92\x0f \xc0\x0c\x01\x0f"\xc0\xea\xbf|\x08\x00f\xb8\x10\x00\x8e\xd8\x8e\xc0\x8e\xe0\x8e\xe8\x8e\xd0\xbc  \x06\x00\xe9)\x03\x00\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa               end read<--

So we need to know what the 58 means.

OSDev ATA Status register

BSY RDY DF SRV DRQ CORR IDX ERR

So 58 is 0 1 0 1 1 0 0 0

Ready, Overlapped Mode Service Request, Has data to transfer.

So this is weird. Maybe there is some sort of flush?

Added flush. Now to test this sob.

13:54 <@Javantea> sunny, I should go tan..
14:09 <@Javantea> went out for a few minutes

So it thinks it got the kernel, but it's all zeros. Which means we're almost there. Let's test reliability. It's reliable.

kernel inode: 0000000c
Is this it?

I spent a while considering the Capitol Hill Autonomous Zone. I have not seen it but I like it and I think I will support it. Tomorrow I'll spend the day trying to understand it and document it.

Now let's make this work sheesh.

kernel inode: 0000000c
offset: 00002600

Surprising, that is indeed a legitimately blank block.

000025e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00006000  02 00 00 00 0c 00 01 02  2e 00 00 00 02 00 00 00  |................|
inode_table offset: 00002000

0x600/0xc
128.0
./e2info -t ext2t.bin
...
inode[11]:
kernel_block: 37
b: 37 38 39 40 41 42 43 44 45 46 47 48 
        mode: 80c0
        uid: 0000
        size: 00004570
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0001
        blocks: 0012
        flags: 0000

I forgot to subtract 1. That should fix this.

Unclear why inodes are 128 bytes. u32 * 14 would do it. 56 bytes.

16:20 <@Javantea> did it. finally got the first block out of kernel from my kernel.

So it was that I had kernel_inode from the root dir. Inode values are always 1 larger than the correct value. So kernel_inode = 0xc means offset 0xb.

ASMA Atari music

Wow that's a lot of music.

So now we have a function that grabs a block from a file. Let's create a function that creates a file ala fopen(filename, "wb"). We can create directories eventually, but all in good time.

SHA512 would let me confirm the values are all correct, but it isn't really necessary. Let's do CRC32 instead. =]

1074 lines of code.

17896 Jun 10 16:48 ext21
16:47 <@Javantea> "FM synthesis is like programming a sythesizer with a broom through a mail slot." 1:45:00
crc32: 901627ab
17:02 <@Javantea> military helicopter flying overhead.

Using a public domain crc32 implementation from http://home.thep.lu.se/~bjorn/crc/. Thanks Björn.

Now we do the same with python.

import zlib
a = open('ext2t.bin','rb').read(1024)
hex(zlib.crc32(a))
'0x901627ab'

Good enough.

Day is just about over but I could keep going. Let's do some exercise and then continue.

Okay exercised a bit, more errands...

Errands done.

So now let's add files and read.

Wrote the code. First run:

Magic value is wrong 2228

Okay, easy fix. So now I can add arbitrary files.

./e2info -w --kname ext21kernel.c ext2t1.bin ext21kernel.c

Easy. So now I should port that code to my kernel.. But first.. I want to write the code to read... I guess I can get the first block, but I want the second block too. For cheaper than the first.

There are a ton of nulls in the first block of this partition. Like a lot.

So most of the function is spent trying to find the inode. So if we keep the inode or return it in some sort of struct, then we can pretty easily skip the hard part which we can of course split into its own function. Seems sensible.

Committed to git at 20:42.

So the next piece is to save. Which is very similar to ata_read but to do a save correctly, we need to port the code from e2info. Then I can save a song as a simple file, then I can load them after exit. The question then becomes how to retrieve those files. I guess I'll make a copy of e2info that grabs all files except kernel. Something similar to tar xvf. That way I can put them back in after overwriting the image file.

I need some good tea.

2020-06-11

07:47 <@Javantea> breakfast is a fuji apple and green tea
07:47 <@Javantea> first time in a while
07:51 <@Javantea> unclear why there are people on ww7psr this morning

I'm ready to work on the project this morning.

07:56 <@Javantea> 36.1°C

So let's write a file. Before that, I need to port my fix from Ext2 1 (the Ext2 demo kernel) to ATA 1 (the ATA demo kernel).

ext21kernel.c:667:29: warning: passing argument 1 of ‘partial_read_offset’ from incompatible pointer type [-Wincompatible-pointer-types]
  667 |         partial_read_offset(&inode_table, (block_size*group_desc[0].bg_inode_table) + (sizeof(struct ext2_inode) * i), sizeof(struct ext2_inode));
      |                             ^~~~~~~~~~~~
      |                             |
      |                             struct ext2_inode *
ext21kernel.c:98:29: note: expected ‘u8 *’ {aka ‘unsigned char *’} but argument is of type ‘struct ext2_inode *’
   98 | int partial_read_offset(u8 *out, int offset, size_t size);
      |                         ~~~~^~~

That seems like a pretty serious bug. Nope, just needs a cast to u8 *. Okay, so now we write a file. We also need the ability to overwrite a file. Overwriting a file is much like reading a file -- get_inode, then write to it. Creating a new file we've done already, so it's a matter of copying and porting.

get_root_block seems awfully similar to get_block now that I think of it. So that will eventually be merged.

Normal browsing hacker news I found an open source flask/react audio annotation software. That seems like it'll be useful to someone. I have something toward hundreds of hours of my speech recorded now, so it's a matter of time until I'll want a text copy and the ability to create a simple codec for my natural voice. It make sense to use Common Voice for a bunch of different uses like this, but so far I haven't done the plug in and turn on thing. I will eventually..

Thinking about setting my laptop up in such a way that I can ssh into it and do GPU stuff since it has a nice NVidia card. My desktop has a Radeon HD 7700, which can do OpenCL but not rOCM, so it's all CPU for any deep learning stuff I want to do.

LPCNet is a speech synthesizer for example that I could pretty easily run on my voice.

Realized that Ctags must update using inotify or something like that. How does that even work?

I just realized I can skip to the last block of the root dir if I wanted to. That would save some io and some cpu. That's gotta be the reason why they do what they do with the whole silly block-only records.

ext21kernel.c: In function ‘get_free_inode’:
ext21kernel.c:598:12: warning: ‘prev_pos’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  598 |     return ret;
      |            ^~~

These type of static analysis warnings are terribly useful when they are on the money.

Reading 111-1c.pdf to find out the correct value for ATA_WRITE.

2020-05-28:16:04 < Javantea> 111-1c.pdf from ftp://ftp.seagate.com/acrobat/reference/111-1c.pdf

This documentation is excellent. I should read it again.

Page 34.

Command name Type Code
Read Sectors (w/retry) PIOR 20H
Write Sectors (w/retry) PIOW 30H

I realize that there are better commands for different situations, but simplicity is important right now for me.

#define ATA_WRITE 0x30

I haven't worn deodorant in a long time. My roommates must think I'm a barbarian.

               write-->disk ; 4141; disk ; 5858; drq                end write<--               write-->disk ; 5050; disk ; 5858; drq                end write<--
               write-->disk ; 5050; disk ; 5858; drq                end write<--               write-->disk ; 5050; disk ; 5858; drq                end write<--
               write-->disk ; 5050; disk ; 5858; drq                end write<--               write-->disk ; 5050; disk ; 5858; drq                end write<--
               write-->disk ; 5050; disk ; 5858; drq                end write<--               write-->disk ; 5050; disk ; 5858; drq                end write<--
00010000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*

Wrote happened, but it got the wrong data. ffff instead of what it should have been..

Let's try 1212.

Looks like it's frozen. unclear what happened. Reset worked...

*
00010000  12 12 12 12 12 12 12 12  12 12 12 12 12 12 12 12  |................|
*
00010200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00010e00  12 12 12 12 12 12 12 12  12 12 12 12 12 12 12 12  |................|
*
00011000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

So it's taking data. Might be a vram problem. The fact that there aree nils in between means some of it failed.

First one succeeded, second one did not. third one...

               write-->disk ; 5050; disk ; 5858; drq                end write<--
               write-->disk ; d0d0; d0; d0; d0; d0; d0; d0; d0; d0; d0; disk ; d0d0; d0; d0; d0; d0; d0; d0; d0; d0; d0; drq d0; d0; d0; d0; d0; d0; d0; d0; d0;                end write<--
               write-->disk ; d0d0; d0; d0; d0; d0; d0; d0; d0; d0; d0; disk ; d0d0; d0; d0; d0; d0; d0; d0; d0; d0; d0; drq d0; d0; d0; d0; d0; d0; d0; 50; 50;                end write<--
               write-->disk ; 5050; disk ; 5858; drq                end write<--
               write-->disk ; 5050; disk ; 5858; drq                end write<--
               write-->disk ; 5050; disk ; 5858; drq                end write<--
               write-->disk ; 5050; disk ; 5858; drq                end write<--
               write-->disk ; d0d0; d0; disk ; 5858; drq                end write<--
wrote

Unclear what's going on... I think I need to read more. But you can probably guess that I'm excited to go to CHAZ today.

12:05 <@Javantea> ah twitter. is there no...
12:07 <@Javantea> here's a person begging for donations pretending to be CHAZ. https://twitter.com/chaz_funding
12:10 <@Javantea> I wonder how many scams that person has setup on twitter at the same time..

It feels like reading the new section of twitter is like... walking straight into the asylum of jerks and 13-year-olds shouting. Is that really how our Internet works? Smart people don't post enough, so... Maybe we could filter out the bullshit. All the accounts made in the past 5ish hours. All the people using racial slurs or ... Maybe I could write a simple piece of software that does this. That seems like an idea. Of course Twitter's API requires giving them my phone number, so.. Fat chance? I wonder if I could get Twitter to discuss the reason why I don't want my identity connected to my Twitter account and. Hahaha.

Okay so it seems pretty simple so... let's read for 5 minutes and then we can go to the utopia.

"The drive enters Sleep mode when a Sleep Immediate command has been received from the host. The heads are parked and the spindle is at rest. The drive leaves Sleep mode when a Hard Reset or Soft Reset command is sent from the host."

Seems legit. Reading and writing multiple should become a thing. That seems pretty easy, no? Was very easy. Now I support between 0 and 256 sectors at a time with ata_read_multi and ata_write_multi

00010000  12 12 12 12 12 12 12 12  12 12 12 12 12 12 12 12  |................|
*
00010600  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

Now we're having a problem of 3 sectors being written instead of 8. *shrug*

We should check status.

               write-->disk ; 4141; disk ; 5858; drq                end write<--
wrote status:58

I already did 58 before. it means data to transfer, which means we need to send it more data. Which means it didn't get our data. Simple pattern writing (i & 0xff).

00010000  00 00 01 00 02 00 03 00  04 00 05 00 06 00 07 00  |................|
00010010  08 00 09 00 0a 00 0b 00  0c 00 0d 00 0e 00 0f 00  |................|
00010020  10 00 11 00 12 00 13 00  14 00 15 00 16 00 17 00  |................|
00010030  18 00 19 00 1a 00 1b 00  1c 00 1d 00 1e 00 1f 00  |................|
00010040  20 00 21 00 22 00 23 00  24 00 25 00 26 00 27 00  | .!.".#.$.%.&.'.|
00010050  28 00 29 00 2a 00 2b 00  2c 00 2d 00 2e 00 2f 00  |(.).*.+.,.-.../.|

It's getting the start, so that's not the problem. Hmm

000107e0  9a 07 9b 07 9c 07 9d 07  9e 07 9f 07 a0 07 a1 07  |................|
000107f0  a2 07 a3 07 a4 07 a5 07  a6 07 a7 07 a8 07 a9 07  |................|
00010800  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

It's not... Let's make sure we're doing it right.

               write-->disk ; 5050; disk ; 5858; drq 00000800               end write<--
wrote status:58
cat: /dev/pts/23: Input/output error

i just happens to be the exact number of bytes written. How unlucky, huh? Let's check outw.

  __asm__ __volatile__ ("outw %w0,%w1": :"a" (__value), "Nd" (__port));

Looks fine.. Let's increment i and see what happens.

000105f0  a0 07 a1 07 a2 07 a3 07  a4 07 a5 07 a6 07 a7 07  |................|
00010600  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

It wrote less. Perhaps...

I added F8. It got further. Perhaps I should spam status?

000109e0  de 07 df 07 e0 07 e1 07  e2 07 e3 07 e4 07 e5 07  |................|
000109f0  e6 07 e7 07 e8 07 e9 07  ea 07 eb 07 ec 07 ed 07  |................|
00010a00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

Didn't help.

When the drive has completed processing of the block, it clears BSY and asserts INTRQ. If transfer of another block is required, the drive also sets DRQ.

That seems relevant to my interests.

data_request_wait();

At the top of my sector read/write loops did it.

00010fe0  f0 00 f1 00 f2 00 f3 00  f4 00 f5 00 f6 00 f7 00  |................|
00010ff0  f8 00 f9 00 fa 00 fb 00  fc 00 fd 00 fe 00 ff 00  |................|

Pretty clear I have something wrong here. It's worth reading a few edge cases.

After ff 00 it goes to 00 00. So it's doing bytes instead of.. Probably a flaw in outw. Fixing..

Oh it's not. i is just bound between 0 and 255. hahaha. Let's get the data now.

00010000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*

Okay, let's try something other than vram then.

I picked the stack and this looks stack-like. Now we need something that I want.. Like vram.

*
00010000  00 01 00 00 00 32 9c 00  00 01 00 00 00 6d 9c 00  |.....2.......m..|
00010010  00 00 00 00 00 00 00 00  00 00 00 00 00 f8 1f 06  |................|
00010020  00 00 00 00 00 00 00 00  00 ab 27 16 90 0c 00 00  |..........'.....|
00010030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00010040  00 00 00 00 00 00 00 00  00 f0 1f 00 00 05 80 00  |................|
00010050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

Tried (u8 *)0x8000 looks correct.

00010000  e8 1b 1b 00 00 00 00 00  f4 eb fd 66 90 66 90 90  |...........f.f..|
00010010  c3 8d b4 26 00 00 00 00  8d b4 26 00 00 00 00 90  |...&......&.....|
00010020  53 83 ec 08 0f b6 05 c5  ce 00 00 84 c0 0f 88 cd  |S...............|
00010030  00 00 00 3c 2a 0f 84 b5  00 00 00 3c 36 0f 84 ad  |...<*......<6...|
00010040  00 00 00 3c 1d 0f 84 05  01 00 00 3c 0e 0f 84 0d  |...<.......<....|

Compare to ext21 binary.

00000400  e8 1b 1b 00 00 00 00 00  f4 eb fd 66 90 66 90 90  |...........f.f..|
00000410  c3 8d b4 26 00 00 00 00  8d b4 26 00 00 00 00 90  |...&......&.....|
00000420  53 83 ec 08 0f b6 05 c5  ce 00 00 84 c0 0f 88 cd  |S...............|
00000430  00 00 00 3c 2a 0f 84 b5  00 00 00 3c 36 0f 84 ad  |...<*......<6...|

Good enough for me.

So now we have read and write. That's an excellent start. Let's convert our two sector reads to ata_read_multi now.

crc32: 901627ab

Not everything is implemented, but quite a lot is. So lunch and then utopia.

Next step of course is to get write_file working, which will use ata_write_multi to do the whole ext2 part, which I have not yet completed.

This is difficult, so I'm going to leave it for tomorrow.

Again I repeat that it would have been much easier to not implement Ext2 and just read/write from disk and we can create a list of files and their location/length, but I feel like implementing Ext2 has provided me a great role model -- don't go creating your own filesystem, there's one that was written by someone like you and they provided a header file.

So if I was going to work on it tonight, I would work on... maybe the first few pages of the game. Like:

Page 1 the hook Page 2 the new/continue/exit screen Page 3 the new game menu Page 4 the visual novel Page 5 the first level Page 6 the first level easy mode Page 7 the first level hard mode

If you think about how easy a game needs to be to get a literate person to play, it needs to provide them a simple question and a choice. But a simple question and a choice is not enough for it to be fun, right? So the visual novel has to provide some sort of interaction.

What does that interaction look like? I'd love for it to be all AI and I can do that to a pretty impressive level, but at this point I don't actually want to go down that rabbit hole. I created AI3 for that purpose and here we are, no AltSci Cell because I ran out of time.

Though now that I think of it, cell would be a lot easier now that I have... Actually I should play with godot. Let's create a user and install it.

mood music Soul Coughing - I Miss The Girl

2020-06-12

06:43 <@Javantea> subconscious brain came up with a solution to my partial_write_offset function issue I had yesterday evening. Impemented it in 7 minutes. now to test.

The code to make it so that partial_read and partial_read_offset also use the same optimization is very small and cheap.

An example of the changes I'm making to the code:

    fseek(f, block_size*root_block, SEEK_SET);
    read_items = fread(root_block_i, block_size, 1, f);
    // becomes
    ata_read_multi(root_block_i, root_block*2, 2);
ext21kernel.c:(.text+0x11ba): undefined reference to `strlen'
ld: ext21kernel.c:(.text+0x126a): undefined reference to `strlen'
ld: ext21kernel.c:(.text+0x139e): undefined reference to `strlen'
ld: ext21kernel.c:(.text+0x13b0): undefined reference to `strncpy'
ld: ext21kernel.c:(.text+0x13b8): undefined reference to `strlen'

Easy enough..

It almost worked. Cool!

ftp: 60
                name: 800
                inode: 13
                rec_len: 964
                name_len: 4

strlen appears to work. strncpy does not.

sudo mount -o loop,ro ext2t.bin /mnt/sd/
Password: 
sudo ls -laR /mnt/sd/
/mnt/sd/:
ls: cannot access '/mnt/sd/8000': Input/output error
total 29
drwxr-xr-x  3 root root  1024 Jun 12 07:41 .
drwxr-xr-x 11 root root  4096 Jan 18 15:53 ..
??????????  ? ?    ?        ?            ? 8000
--wx------  1 root root 23688 Dec 31  1969 kernel
drwx------  2 root root 12288 Jun 12 07:41 lost+found

/mnt/sd/lost+found:
total 13
drwx------ 2 root root 12288 Jun 12 07:41 .
drwxr-xr-x 3 root root  1024 Jun 12 07:41 ..

Not quite..

[1719204.943038] EXT2-fs (loop0): error: ext2_lookup: deleted inode referenced: 13

If we look at the code we can clearly see that inode bitmap didn't get updated. Let's fix that first..

I think the bg_block_bitmap is at block 6 and bg_inode_bitmap is at block 7, so...

hex(6*1024)
'0x1800'
hex(7*1024)
'0x1c00'
00001800  ff ff ff ff ff ff ff 3f  00 00 00 00 00 00 00 00  |.......?........|
00001810  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

00001c00  ff 0f 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001c10  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

Weird that 1c10 is ff all the way up to 2000. I think I know what might be going on.. No, it's a mystery.

ibl 00000007 bbl 00000006

As expected. So that means that piece of code is correct.

ibl 00000007 bbl 00000006
bp 0000003e ip-1 0000000c
inode[13]:

        mode: 0000
        uid: 0000
        size: 00000000
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0000
        blocks: 0000
        flags: 0000

Okay, so inode needs to be updated...

I got to a point where the superblock is being overwritten hahaha.

Writing file
               read-->disk ; 5050; disk ; d0d0; d0; drq drq \x02\x00\x00\x00\x0c\x00\x01\x02.\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x02\x02..\x00\x00\x0b\x00\x00\x00\x14\x00\x0a\x02lost+found\x00\x00\x0c\x00\x00\x00\xd4\x03\x06\x00kernel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\
x00\x00               end read<--    name: .
    inode: 00000002
    rec_len: 0000000c
    name_len: 00000001
    name: ..
    inode: 00000002
    rec_len: 0000000c
    name_len: 00000002
    name: lost+found
    inode: 0000000b
    rec_len: 00000014
    name_len: 0000000a
    name: kernel
    inode: 0000000c
    rec_len: 000003d4
    name_len: 00000006
               read-->disk ; 5050; disk ; d0d0; d0; drq drq \x00\x00\x00\x00\x00\x00\x00\x00\xc8\xa7\xe3^\xc8\xa7\xe3^\xc8\xa7\xe3^\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xedA\x00\x00\x00\x04\x00\x00\xc8\xa7\xe3^\xc8\xa7\xe3^\xc8\xa7\xe3^\x00\x00\x00\x00\x00\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--               read-->disk ; 5050; disk ; d0d0; drq drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--               read-->disk ; 5050; disk ; d058; drq drq \x02\x00\x00\x00\x0c\x00\x01\x02.\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x02\x02..\x00\x00\x0b\x00\x00\x00\x14\x00\x0a\x02lost+found\x00\x00\x0c\x00\x00\x00\xd4\x03\x06\x00kernel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00drq d0; \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--root prev pos 0000002c pos 0000003c
root block 00000018
               write-->00000030disk ; 5050; disk ; 5858; drq drq drq d0; 00000100               end write<--
written_block: 0000003e
               read-->disk ; 5050; disk ; d058; drq drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--
               write-->00000013disk ; 5050; disk ; 5858; drq drq 00000100               end write<--
               write-->0000007cdisk ; 5050; disk ; 5858; drq drq drq d0; d0; d0; d0; drq d0; d0; d0; d0; d0; d0; d0; d0; drq d0; drq d0; drq d0; drq d0; 00000100               end write<--
               write-->00000083disk ; 5050; disk ; 5858; drq drq 00000100               end write<--
ibl 00000007 bbl 00000006
bp 0000003e ip-1 0000000c
               read-->disk ; 5050; disk ; d0d0; d0; drq drq \xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--
               write-->0000000edisk ; 5050; disk ; 5858; drq drq 00000100               end write<--
               read-->disk ; 5050; disk ; d058; drq drq \xff\xff\xff\xff\xff\xff\xff?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--
               write-->0000000cdisk ; 5050; disk ; 5858; drq drq 00000100               end write<--
wrote status:50
disk ; 5050; cat: /dev/pts/23: Input/output error
write-->0000000e
write-->0000000c

So those aren't the problem. Let's look at all the writes. Now it isn't overwriting the superblock. Okay...

So what about the inode though? So we need to know which block is the inode block.

inode_table offset should tell us.

inode_table offset: 00002000

16 which is 0x10.

13 7c 83 0e 0c So the closest is 13. but that assumes that inode is pretty big and it is because of all the stuff in it. So let's look at 13 then..

cat /dev/pts/23
asdf
Writing file
               read-->disk ; 5050; disk ; d0d0; d0; drq drq \x02\x00\x00\x00\x0c\x00\x01\x02.\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x02\x02..\x00\x00\x0b\x00\x00\x00\x14\x00\x0a\x02lost+found\x00\x00\x0c\x00\x00\x00\xd4\x03\x06\x00kernel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\
x00\x00               end read<--    name: .
    inode: 00000002
    rec_len: 0000000c
    name_len: 00000001
    name: ..
    inode: 00000002
    rec_len: 0000000c
    name_len: 00000002
    name: lost+found
    inode: 0000000b
    rec_len: 00000014
    name_len: 0000000a
    name: kernel
    inode: 0000000c
    rec_len: 000003d4
    name_len: 00000006
               read-->disk ; 5050; disk ; 5858; drq drq \x00\x00\x00\x00\x00\x00\x00\x00h\xaa\xe3^h\xaa\xe3^h\xaa\xe3^\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xedA\x00\x00\x00\x04\x00\x00h\xaa\xe3^h\xaa\xe3^h\xaa\xe3^\x00\x00\x00\x00\x00\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--               read-->disk ; 5050; disk ; d058; drq drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--               read-->disk ; 5050; disk ; 5858; drq drq \x02\x00\x00\x00\x0c\x00\x01\x02.\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x02\x02..\x00\x00\x0b\x00\x00\x00\x14\x00\x0a\x02lost+found\x00\x00\x0c\x00\x00\x00\xd4\x03\x06\x00kernel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--root prev pos 0000002c pos 0000003c
root block 00000018

               write-->00000030disk ; 5050; disk ; 5858; drq drq drq d0; 00000100               end write<--
written_block: 0000003e
               read-->disk ; 5050; disk ; d0d0; drq drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--
               write-->00000013disk ; 5050; disk ; 5858; drq drq 00000100               end write<--

               write-->0000007cdisk ; 5050; disk ; 5858; drq drq drq d0; d0; d0; d0; d0; d0; d0; d0; d0; drq drq d0; drq d0; d0; drq d0; d0; drq d0; d0; 00000100               end write<--

               write-->00000083disk ; 5858; disk ; 5858; drq drq 00000100               end write<--
ibl 00000007 bbl 00000006
bp 0000003e ip-1 0000000c
               read-->disk ; 5050; disk ; d058; drq drq \xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--
               write-->0000000edisk ; 5050; disk ; 5858; drq drq 00000100               end write<--
               read-->disk ; 5050; disk ; d058; drq drq \xff\xff\xff\xff\xff\xff\xff?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--
               write-->0000000cdisk ; 5050; disk ; 5858; drq drq 00000100               end write<--
wrote status:50
disk ; 5050; 

13 matches.. oh uhh. where in 13 did it write? Gotta remember 13 is hex, not decimal.

00002600  c0 80 00 00 a0 0f 00 00  00 00 00 00 00 00 00 00  |................|
00002610  00 00 00 00 00 00 00 00  00 00 01 00 04 00 00 00  |................|
00002620  00 00 00 00 00 00 00 00  3e 00 00 00 3f 00 00 00  |........>...?...|
00002630  40 00 00 00 41 00 00 00  42 00 00 00 00 00 00 00  |@...A...B.......|
00002640  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*

Not much it could possibly write. If we match up the c080 to the 80c0 we see in inode[12], we can skip 128 bytes (sizeof(struct ext2_inode)) All zeros. Which means partial_write_offset is broken in a very interesting way.

Writing file
               read-->disk ; 5050; disk ; d0d0; d0; drq drq \x02\x00\x00\x00\x0c\x00\x01\x02.\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x02\x02..\x00\x00\x0b\x00\x00\x00\x14\x00\x0a\x02lost+found\x00\x00\x0c\x00\x00\x00\xd4\x03\x06\x00kernel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\
x00\x00               end read<--    name: .
    inode: 00000002
    rec_len: 0000000c
    name_len: 00000001
    name: ..
    inode: 00000002
    rec_len: 0000000c
    name_len: 00000002
    name: lost+found
    inode: 0000000b
    rec_len: 00000014
    name_len: 0000000a
    name: kernel
    inode: 0000000c
    rec_len: 000003d4
    name_len: 00000006
               read-->disk ; 5050; disk ; d058; drq drq \x00\x00\x00\x00\x00\x00\x00\x00\xad\xaf\xe3^\xad\xaf\xe3^\xad\xaf\xe3^\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xedA\x00\x00\x00\x04\x00\x00\xad\xaf\xe3^\xad\xaf\xe3^\xad\xaf\xe3^\x00\x00\x00\x00\x00\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--               read-->disk ; 5050; disk ; d0d0; d0; drq drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--               read-->disk ; 5050; disk ; d0d0; drq drq \x02\x00\x00\x00\x0c\x00\x01\x02.\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x02\x02..\x00\x00\x0b\x00\x00\x00\x14\x00\x0a\x02lost+found\x00\x00\x0c\x00\x00\x00\xd4\x03\x06\x00kernel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00drq d0; d0; \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--root prev pos 0000002c pos 0000003c
root block 00000018

               write-->00000030disk ; 5050; disk ; 5858; drq drq drq d0; 00000100               end write<--
written_block: 0000003e
               read-->disk ; 5050; disk ; d0d0; d0; drq drq \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00               end read<--pwo 00000000 data 000080c0 size 00000080

               write-->00000013disk ; 5050; disk ; 5858; drq drq 00000100               end write<--

               write-->0000007cdisk ; 5050; disk ; 5858; drq drq drq d0; d0; drq d0; d0; drq d0; d0; d0; d0; d0; d0; d0; d0; d0; drq drq drq d0; 00000100               end write<--

               write-->00000083disk ; 5858; disk ; 5858; drq drq 00000100               end write<--
ibl 00000007 bbl 00000006
bp 0000003e ip-1 0000000c
               read-->disk ; 5050; disk ; d058; drq drq \xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--
               write-->0000000edisk ; 5050; disk ; 5858; drq drq 00000100               end write<--
               read-->disk ; 5050; disk ; 5858; drq drq \xff\xff\xff\xff\xff\xff\xff?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff               end read<--
               write-->0000000cdisk ; 5050; disk ; 5858; drq drq 00000100               end write<--
wrote status:50
disk ; 5050; cat: /dev/pts/23: Input/output error

The part that we want:

pwo 00000000 data 000080c0 size 00000080

So it's writing 80c0 at offset 0 to 2600. Which we see. But it's at the wrong offset. or is it?

Let's figure out kernel's inode and where it is in the table.

ftp: 44
                name: kernel
                inode: 12
                rec_len: 16
                name_len: 6
ftp: 60
                name: 8000
                inode: 13
                rec_len: 964
                name_len: 4
...
inode[11]:
kernel_block: 37
b: 37 38 39 40 41 42 43 44 45 46 47 48 
        mode: 80c0
        uid: 0000
        size: 00005e48
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0001
        blocks: 0018
        flags: 0000
inode[12]:
b: 62 63 64 65 
        mode: 80c0
        uid: 0000
        size: 00000fa0
        atime: 00000000
        ctime: 00000000
        dtime: 00000000
        gid: 0000
        links_count: 0001
        blocks: 0004
        flags: 0000

Looks like everything is correct here. Let's check mount again.

sudo mount -o loop,ro ext2t.bin /mnt/sd/
Password: 
sudo ls -laR /mnt/sd/
/mnt/sd/:
total 31
drwxr-xr-x  3 root root  1024 Jun 12 09:39 .
drwxr-xr-x 11 root root  4096 Jan 18 15:53 ..
--wx------  1 root root  4000 Dec 31  1969 8000
--wx------  1 root root 24136 Dec 31  1969 kernel
drwx------  2 root root 12288 Jun 12 09:39 lost+found

/mnt/sd/lost+found:
total 13
drwx------ 2 root root 12288 Jun 12 09:39 .
drwxr-xr-x 3 root root  1024 Jun 12 09:39 ..
sudo hexdump -C /mnt/sd/8000 |head
00000000  e8 ab 22 00 00 00 00 00  f4 eb fd 66 90 66 90 90  |.."........f.f..|
00000010  c3 8d b4 26 00 00 00 00  8d b4 26 00 00 00 00 90  |...&......&.....|
00000020  53 83 ec 08 0f b6 05 85  da 00 00 84 c0 0f 88 dd  |S...............|
00000030  00 00 00 3c 2a 0f 84 bd  00 00 00 3c 36 0f 84 b5  |...<*......<6...|
00000040  00 00 00 3c 1d 0f 84 15  01 00 00 3c 0e 0f 84 1d  |...<.......<....|
00000050  01 00 00 3c 48 0f 84 95  01 00 00 3c 50 0f 84 45  |...<H......<P..E|
00000060  01 00 00 3c 4b 0f 84 05  01 00 00 3c 4d 0f 84 a8  |...<K......<M...|
00000070  01 00 00 3c 3b 0f 84 ae  01 00 00 3c 41 0f 84 c1  |...<;......<A...|
00000080  01 00 00 3c 42 0f 84 1d  02 00 00 3c 43 0f 84 61  |...<B......<C..a|
00000090  02 00 00 0f b6 d0 80 3d  c4 e3 00 00 00 a2 28 da  |.......=......(.|
sudo umount /mnt/sd

Okay now we have the ability to write data to a file. yay! 9:40

So 3 hours is what it took. There are some obvious bugs to work out, but I think we're almost there.. In fact, let's refactor and then include this into the tracker so we can save beats and load them.

dumpe2fs ext2t.bin
dumpe2fs 1.45.6 (20-Mar-2020)
Filesystem volume name:   ext2_1_t
Last mounted on:          <not available>
Filesystem UUID:          15a73336-6903-4613-91be-c136f8fadb36
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              128
Block count:              1024
Reserved block count:     51
Free blocks:              986
Free inodes:              117
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      3
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         128
Inode blocks per group:   16
Filesystem created:       Fri Jun 12 09:39:09 2020
Last mount time:          n/a
Last write time:          Fri Jun 12 09:39:09 2020
Mount count:              0
Maximum mount count:      -1
Last checked:             Fri Jun 12 09:39:09 2020
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Default directory hash:   half_md4
Directory Hash Seed:      2ebcdb31-0300-46f6-a0e4-cc33f1431a9b


Group 0: (Blocks 1-1023)
  Primary superblock at 1, Group descriptors at 2-2
  Reserved GDT blocks at 3-5
  Block bitmap at 6 (+5)
  Inode bitmap at 7 (+6)
  Inode table at 8-23 (+7)
  986 free blocks, 117 free inodes, 2 directories
  Free blocks: 67-1023
  Free inodes: 14-128
24136 Jun 12 09:39 ext21

Nice time for a snapshot I must say.

Refactored 10:19. It works.

Tested mount and hexdump. It still works. That means we can add it to tracker 1 without any worries.

In case you're curious like me about the size of the demo kernels and stuff:

ext21kernel.c: 393 lines of C ata.c: 1301 lines of C (includes all the ext2 stuff, which is the majority of the code) ata.h: 41 lines of C

24128 Jun 12 10:12 ext21

Unexpectedly, the file size has shrunk from when it was a single file. Why? Is gcc more sensible when given more files? Not my job to investigate this mystery.

hexdump -C ext2t.bin |wc 1755 31244 135726

What's really important is how many free blocks there are because that determines how much space we get to use on the filesystem.

block_bitmap: 1111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
a = '1111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001'
len([x for x in a if x == '0'])
961
961*1024
984064
_/(1024*1024)
0.9384765625

So we have 93.8% free blocks in a 1MiB filesystem. Each inode we add subtracts 128 bytes. Each entry we add to root loses 8+name_len bytes with of course the block size being the unit of that. Any file we add that is bigger than 12KiB uses an extra block in its block list.

So... Let's see about adding this to tracker 1.

The way I wrote this makes it difficult to write songs block by block. You have to give the whole file to write_file. Eventually I'll fix that, but it'll require a bit of code that functions almost like fwrite. Which I should have probably realized.

It works. Or at least it seems like it works.

ftp: 60
                name: song0
                inode: 13
                rec_len: 964
                name_len: 5
sudo mount -o loop,ro tracker1a.bin /mnt/sd/
Password: 
sudo ls -laR /mnt/sd/                       
/mnt/sd/:
total 48
drwxr-xr-x  3 root root  1024 Jun 12 10:49 .
drwxr-xr-x 11 root root  4096 Jan 18 15:53 ..
--wx------  1 root root 60864 Dec 31  1969 kernel
drwx------  2 root root 12288 Jun 12 10:49 lost+found
--wx------  1 root root   372 Dec 31  1969 song0

/mnt/sd/lost+found:
total 13
drwx------ 2 root root 12288 Jun 12 10:49 .
drwxr-xr-x 3 root root  1024 Jun 12 10:49 ..
sudo hexdump -C /mnt/sd/song0 
00000000  0a 00 00 00 20 82 07 00  00 00 00 00 20 28 07 00  |.... ....... (..|
00000010  20 29 07 00 20 2a 07 00  20 2b 07 00 20 2c 07 00  | ).. *.. +.. ,..|
00000020  20 2d 07 00 60 69 01 00  20 2f 07 00 20 30 07 00  | -..`i.. /.. 0..|
00000030  20 31 07 00 20 32 07 00  20 33 07 00 20 34 07 00  | 1.. 2.. 3.. 4..|
00000040  20 35 07 00 20 36 07 00  20 37 07 00 20 38 07 00  | 5.. 6.. 7.. 8..|
00000050  20 39 07 00 20 3a 07 00  20 3b 07 00 20 3c 07 00  | 9.. :.. ;.. <..|
00000060  20 3d 07 00 20 3e 07 00  20 3f 07 00 20 40 07 00  | =.. >.. ?.. @..|
00000070  20 41 07 00 20 42 07 00  20 43 07 00 20 44 07 00  | A.. B.. C.. D..|
00000080  20 45 07 00 20 46 07 00  20 47 07 00 20 48 07 00  | E.. F.. G.. H..|
00000090  20 49 07 00 20 4a 07 00  20 4b 07 00 20 4c 07 00  | I.. J.. K.. L..|
000000a0  20 4d 07 00 20 4e 07 00  20 4f 07 00 20 50 07 00  | M.. N.. O.. P..|
000000b0  20 51 07 00 20 52 07 00  20 53 07 00 20 54 07 00  | Q.. R.. S.. T..|
000000c0  20 55 07 00 20 56 07 00  20 57 07 00 20 58 07 00  | U.. V.. W.. X..|
000000d0  20 59 07 00 20 5a 07 00  20 5b 07 00 20 5c 07 00  | Y.. Z.. [.. \..|
000000e0  20 5d 07 00 20 5e 07 00  20 5f 07 00 20 60 07 00  | ].. ^.. _.. `..|
000000f0  20 61 07 00 20 62 07 00  20 63 07 00 20 64 07 00  | a.. b.. c.. d..|
00000100  20 65 07 00 20 66 07 00  20 67 07 00 20 68 07 00  | e.. f.. g.. h..|
00000110  20 69 07 00 20 6a 07 00  20 6b 07 00 20 6c 07 00  | i.. j.. k.. l..|
00000120  20 6d 07 00 20 6e 07 00  20 6f 07 00 20 70 07 00  | m.. n.. o.. p..|
00000130  20 71 07 00 20 72 07 00  20 73 07 00 20 74 07 00  | q.. r.. s.. t..|
00000140  20 75 07 00 20 76 07 00  20 77 07 00 20 78 07 00  | u.. v.. w.. x..|
00000150  20 79 07 00 20 7a 07 00  20 7b 07 00 20 7c 07 00  | y.. z.. {.. |..|
00000160  20 7d 07 00 20 7e 07 00  20 7f 07 00 20 80 07 00  | }.. ~.. ... ...|
00000170  20 81 07 00                                       | ...|
00000174

Seems possibly legit. Let's try to decode this using our struct.

struct song {
    int patterns;
    // Index into pattern
    u8 *pattern;
    u8 paused;
    u8 dt;
};


struct pattern {
    //u8 instrument[NUM_CHANNELS];
    // null if nothing, otherwise terminated with EOM.
    u8 *music[NUM_CHANNELS];
};

I forgot instruments. They are more important than the song or pattern in my opinion.

So patterns = 10. 0a 00 00 00 u8 *pattern is not worthwhile to save, but we don't care, so 20 82 07 00 So these are pointers.. yes. woops. paused is unuseful as well. 00 dt iis unuseful as well. 00 The rest are pointers from pattern, so let's fix that. While we're at it, let's... right, so I'll actually keep song pattern array and that's it.

Ran out of ram while saving. I could see the data on the vram. Probably overwrote the back buffer with the stack Let's use malloc. But we can't free, so let's create a function that functions like free.

unmalloc(song_size);

Seems legit. Let's look at the file.

sudo mount -o loop,ro tracker1a.bin /mnt/sd/  
Password: 
sudo ls -laR /mnt/sd/                    
/mnt/sd/:
total 48
drwxr-xr-x  3 root root  1024 Jun 12 12:04 .
drwxr-xr-x 11 root root  4096 Jan 18 15:53 ..
--wx------  1 root root 61536 Dec 31  1969 kernel
drwx------  2 root root 12288 Jun 12 12:04 lost+found
--wx------  1 root root   583 Dec 31  1969 song0

/mnt/sd/lost+found:
total 13
drwx------ 2 root root 12288 Jun 12 12:04 .
drwxr-xr-x 3 root root  1024 Jun 12 12:04 ..
sudo hexdump -C /mnt/sd/song0 
00000000  0a 00 01 02 03 04 05 06  07 08 09 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 f0 53 ff 00 00 00  |...........S....|
00000030  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
00000040  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 87  |...S.....S......|
00000050  e9 00 02 0f 11 0a 02 28  01 0a 02 28 09 0a 02 28  |.......(...(...(|
00000060  01 0a 02 0f 11 0a 02 0f  11 0a 02 28 09 0a 02 28  |...........(...(|
00000070  01 0a 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
00000080  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
00000090  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
000000a0  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
000000b0  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
000000c0  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
000000d0  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
000000e0  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
000000f0  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
00000100  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
00000110  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
00000120  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
00000130  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
00000140  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
00000150  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
00000160  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
00000170  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
00000180  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
00000190  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
000001a0  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
000001b0  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
000001c0  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
000001d0  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
000001e0  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
000001f0  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
00000200  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
00000210  00 00 f0 53 ff 00 00 00  f0 53 ff 00 00 00 f0 53  |...S.....S.....S|
00000220  ff 00 00 00 f0 53 ff 00  00 00 f0 53 ff 00 00 00  |.....S.....S....|
00000230  f0 53 ff 00 00 00 f0 53  ff 00 00 00 f0 53 ff 00  |.S.....S.....S..|
00000240  00 00 f0 53 ff 00 00                              |...S...|
00000247

So... What is this?

0a is number of patterns 00 01 02 03 04 05 06 07 08 09 is the patterns array 00 00 00 00 is the length of pattern 0 00 00 00 00 is the length of pattern 1 00 00 00 00 is the length of pattern 2 00 00 00 00 is the length of pattern 3 00 00 00 00 is the length of pattern 4 00 00 00 00 is the length of pattern 5 00 00 00 00 is the length of pattern 6 00 00 00 f0 is the length of pattern 7 Followed by the pattern data: Uhh naw.. 11+4*7 == 0x27

Unclear what 53 ff is.

 patterns[00000000].music[00000000] len 00000002 
 patterns[00000000].music[00000001] len 00000002 
 patterns[00000000].music[00000002] len 00000002 
 patterns[00000000].music[00000003] len 00000002 
 patterns[00000000].music[00000004] len 00000002 
 patterns[00000000].music[00000005] len 00000002 
 patterns[00000000].music[00000006] len 00000022 
 patterns[00000000].music[00000007] len 00000002 
 patterns[00000000].music[00000008] len 00000002 
 patterns[00000001].music[00000000] len 00000002 
 patterns[00000001].music[00000001] len 00000002 
 patterns[00000001].music[00000002] len 00000002 
 patterns[00000001].music[00000003] len 00000002 
 patterns[00000001].music[00000004] len 00000002 
 patterns[00000001].music[00000005] len 00000002 
 patterns[00000001].music[00000006] len 00000002 
 patterns[00000001].music[00000007] len 00000002 
 patterns[00000001].music[00000008] len 00000002 
 patterns[00000002].music[00000000] len 00000002 
 patterns[00000002].music[00000001] len 00000002 
 patterns[00000002].music[00000002] len 00000002 
 patterns[00000002].music[00000003] len 00000002 
 patterns[00000002].music[00000004] len 00000002 
 patterns[00000002].music[00000005] len 00000002 
 patterns[00000002].music[00000006] len 00000002 
 patterns[00000002].music[00000007] len 00000002 
 patterns[00000002].music[00000008] len 00000002 
 patterns[00000003].music[00000000] len 00000002 
 patterns[00000003].music[00000001] len 00000002 
 patterns[00000003].music[00000002] len 00000002 
 patterns[00000003].music[00000003] len 00000002 
 patterns[00000003].music[00000004] len 00000002 
 patterns[00000003].music[00000005] len 00000002 
 patterns[00000003].music[00000006] len 00000002 
 patterns[00000003].music[00000007] len 00000002 
 patterns[00000003].music[00000008] len 00000002 
 patterns[00000004].music[00000000] len 00000002 
 patterns[00000004].music[00000001] len 00000002 
 patterns[00000004].music[00000002] len 00000002 
 patterns[00000004].music[00000003] len 00000002 
 patterns[00000004].music[00000004] len 00000002 
 patterns[00000004].music[00000005] len 00000002 
 patterns[00000004].music[00000006] len 00000002 
 patterns[00000004].music[00000007] len 00000002 
 patterns[00000004].music[00000008] len 00000002 
 patterns[00000005].music[00000000] len 00000002 
 patterns[00000005].music[00000001] len 00000002 
 patterns[00000005].music[00000002] len 00000002 
 patterns[00000005].music[00000003] len 00000002 
 patterns[00000005].music[00000004] len 00000002 
 patterns[00000005].music[00000005] len 00000002 
 patterns[00000005].music[00000006] len 00000002 
 patterns[00000005].music[00000007] len 00000002 
 patterns[00000005].music[00000008] len 00000002 
 patterns[00000006].music[00000000] len 00000002 
 patterns[00000006].music[00000001] len 00000002 
 patterns[00000006].music[00000002] len 00000002 
 patterns[00000006].music[00000003] len 00000002 
 patterns[00000006].music[00000004] len 00000002 
 patterns[00000006].music[00000005] len 00000002 
 patterns[00000006].music[00000006] len 00000002 
 patterns[00000006].music[00000007] len 00000002 
 patterns[00000006].music[00000008] len 00000002 
 patterns[00000007].music[00000000] len 00000002 
 patterns[00000007].music[00000001] len 00000002 
 patterns[00000007].music[00000002] len 00000002 
 patterns[00000007].music[00000003] len 00000002 
 patterns[00000007].music[00000004] len 00000002 
 patterns[00000007].music[00000005] len 00000002 
 patterns[00000007].music[00000006] len 00000002 
 patterns[00000007].music[00000007] len 00000002 
 patterns[00000007].music[00000008] len 00000002 
 patterns[00000008].music[00000000] len 00000002 
 patterns[00000008].music[00000001] len 00000002 
 patterns[00000008].music[00000002] len 00000002 
 patterns[00000008].music[00000003] len 00000002 
 patterns[00000008].music[00000004] len 00000002 
 patterns[00000008].music[00000005] len 00000002 
 patterns[00000008].music[00000006] len 00000002 
 patterns[00000008].music[00000007] len 00000002 
 patterns[00000008].music[00000008] len 00000002 
 patterns[00000009].music[00000000] len 00000002 
 patterns[00000009].music[00000001] len 00000002 
 patterns[00000009].music[00000002] len 00000002 
 patterns[00000009].music[00000003] len 00000002 
 patterns[00000009].music[00000004] len 00000002 
 patterns[00000009].music[00000005] len 00000002 
 patterns[00000009].music[00000006] len 00000002 
 patterns[00000009].music[00000007] len 00000002 
 patterns[00000009].music[00000008] len 00000002

We should see 00000002 instead of 53 ff 00 00

That was caused by forgetting to referencing the variable in memcpy.

sudo hexdump -C /mnt/sd/song0 
00000000  0a 00 01 02 03 04 05 06  07 08 09 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 02 00 00 00 00 00 02  |................|
00000030  00 00 00 00 00 02 00 00  00 00 00 02 00 00 00 00  |................|
00000040  00 02 00 00 00 00 00 02  00 00 00 00 00 22 00 00  |............."..|
00000050  00 00 02 0f 11 0a 02 28  01 0a 02 28 09 0a 02 28  |.......(...(...(|
00000060  01 0a 02 0f 11 0a 02 0f  11 0a 02 28 09 0a 02 28  |...........(...(|
00000070  01 0a 00 02 00 00 00 00  00 02 00 00 00 00 00 02  |................|
00000080  00 00 00 00 00 02 00 00  00 00 00 02 00 00 00 00  |................|

So you can see length is 00 00 00 02. Then the value of the music is dt=0, command=EOL. We repeat this a few times until... Length 00 00 00 22 Realizing now... that little endian should give lsb first. So it should be 02 00 00 00, so let's redo the calculation.

16:30 <@Javantea> "What is democracy?" "Got something to do with young men killing each other."
16:31 <@Javantea> mood music Metallica - One https://www.youtube.com/watch?v=WM8bTdBs-cw

If we go backwards from 2, we can probably figure this out. it's at 29, so.. 0x29-11 30 So there are 30 bytes unaccounted for. That just happens to be... 3x 10. so I failed at offset. Easy enough to fix.

00000000  0a 00 01 02 03 04 05 06  07 08 09 02 00 00 00 00  |................|
00000010  00 02 00 00 00 00 00 02  00 00 00 00 00 02 00 00  |................|
00000020  00 00 00 02 00 00 00 00  00 02 00 00 00 00 00 22  |..............."|
00000030  00 00 00 00 02 0f 11 0a  02 28 01 0a 02 28 09 0a  |.........(...(..|
00000040  02 28 01 0a 02 0f 11 0a  02 0f 11 0a 02 28 09 0a  |.(...........(..|
00000050  02 28 01 0a 00 02 00 00  00 00 00 02 00 00 00 00  |.(..............|

Fixed. Now we get 02 00 00 00 We get length = 22 00 00 00 at 0x2f followed by dt=00, command=02, value=0f11. So now it's working.

dt=0a, command=02(VAL16), value=0f11
dt=0a, command=02, value=2801
dt=0a, command=02, value=2809
dt=0a, command=02, value=2801
dt=0a, command=02, value=0f11
dt=0a, command=02, value=0f11
dt=0a, command=02, value=2809
dt=0a, command=02, value=2801
dt=0a, command=EOL

So now we just do the reverse to get the file out. But first, instruments.

struct instrument {
    u8 attack : 4;
    u8 decay : 4;
    u8 sustain : 4;
    u8 release : 4;
    u8 waveform : 4;
    //u8 modulator : 4;
    u8 amp_mod : 1;
    u8 vibrato : 1;
    u8 eg_type : 1;
    u8 ksr : 1;
    u8 coarse : 4;
    u8 level; // kinda 8 bit.
};

Good enough to just keep it as is, no modification necessary.

16:44 <@Javantea> 583 bytes for pattern not bad..
16:46 <@Javantea> mood music RATM - Killing In The Name https://www.youtube.com/watch?v=CDHXOeIKTOA

583 bytes for the pattern means I need more than 1 block, right? Maybe, maybe no.

Code finished. Now to test and improve. It'd be nice to be able to load a song from the filesystem at any time. Would be nice to be able to pick the filename.

17:04 <@Javantea> pattern got loaded from the file, but not instrument.

File looks good. It's a single block. I think I know what's wrong.

Permissions on files are -wx------ =]

Yup, needed to call update_instruments. Now I have save/load...

I'm proud of the people of Seattle who got together and protested police brutality today.

ext2-doc i-mode

0x8180 should do it.

You might think: but then you lose your song every time you run this, right? Well, I've got a simple plan and it's easy to implement now:

make tracker1a.bin
./e2info -w --kname song0 tracker1a.bin song0
make tracker1kvm

That's it. And that's the end of this blog except making it pretty.

Tracker 1 2020-06-12 17:42:28

Tracker 1 2020-06-12 17:42:28

Javantea out.

Permalink

Comments: 0

Leave a reply »

 
  • Leave a Reply
    Your gravatar
    Your Name