// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/atari-dsk.c
// Function: pasti_save_sector_data
static void pasti_save_sector_data(deark *c, struct pastictx *d,
	struct pasti_sector_ctx *secctx, i64 trknum, i64 sidenum)
{
	i64 dstpos;
	i64 len_to_copy;

	if(d->convert_errflag || secctx->size_in_bytes<=0) goto done;
	de_dbg2(c, "[recording sector %d,%d,%d]", (int)trknum, (int)sidenum,
		(int)secctx->n_secnum);

	d->num_nonempty_sectors_found++;
	if(trknum<0 || trknum>PASTI_MAX_TRACK_NUM ||
		sidenum<0 || sidenum>=d->fat_num_heads ||
		secctx->n_secnum<1 || secctx->n_secnum>d->fat_sectors_per_track)
	{
		de_dbg2(c, "[sector out of bounds]");
		d->oob_sector_count++;
		goto done;
	}

	if(!d->diskbuf) {
		d->diskbuf = dbuf_create_membuf(c, 0, 0);
	}

	dstpos =
		(d->fat_bytes_per_sector * d->fat_sectors_per_track * d->fat_num_heads) * trknum +
		(d->fat_bytes_per_sector * d->fat_sectors_per_track) * sidenum +
		(d->fat_bytes_per_sector) * (secctx->n_secnum-1);

	if(secctx->size_in_bytes > d->fat_bytes_per_sector) {
		de_warn(c, "Oversized sector");
		len_to_copy = d->fat_bytes_per_sector;
	}
	else {
		len_to_copy = secctx->size_in_bytes;
	}

	dbuf_copy_at(c->infile, secctx->data_offset_abs, len_to_copy, d->diskbuf, dstpos);

done:
	;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x30(%rax)
jne 0x278a1
movq -0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jg 0x278a6
jmp 0x27a27
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl %eax, %edx
movq -0x28(%rbp), %rax
movl %eax, %ecx
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movl %eax, %r8d
leaq 0x177979(%rip), %rsi    # 0x19f241
movb $0x0, %al
callq 0x15b350
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x38(%rax)
cmpq $0x0, -0x20(%rbp)
jl 0x27922
cmpq $0xff, -0x20(%rbp)
jg 0x27922
cmpq $0x0, -0x28(%rbp)
jl 0x27922
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jge 0x27922
movq -0x18(%rbp), %rax
cmpq $0x1, 0x20(%rax)
jl 0x27922
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jle 0x27949
movq -0x8(%rbp), %rdi
leaq 0x177930(%rip), %rsi    # 0x19f25d
movb $0x0, %al
callq 0x15b350
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x40(%rax)
jmp 0x27a27
movq -0x10(%rbp), %rax
cmpq $0x0, 0x48(%rax)
jne 0x2796e
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x168020
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x10(%rbp), %rcx
imulq 0x20(%rcx), %rax
movq -0x10(%rbp), %rcx
imulq 0x28(%rcx), %rax
imulq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x10(%rbp), %rdx
imulq 0x20(%rdx), %rcx
imulq -0x28(%rbp), %rcx
addq %rcx, %rax
movq -0x10(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x18(%rbp), %rdx
movq 0x20(%rdx), %rdx
subq $0x1, %rdx
imulq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x18(%rcx), %rax
jle 0x279f7
movq -0x8(%rbp), %rdi
leaq 0x177892(%rip), %rsi    # 0x19f274
movb $0x0, %al
callq 0x15bc10
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x27a03
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x38(%rbp), %rdx
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rcx
movq -0x30(%rbp), %r8
callq 0x166410
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)