+ .set SECT_PER_TRACK, 18
+
+ .set ARG_NSECT, 6
+ .set ARG_SIDX, 4
+ .set VAR_NTRACKS, -2
+
+# readsect(first, num)
+readsect:
+ push %bp
+ mov %sp, %bp
+ sub $2, %sp
+
+ # calculate how many tracks to read
+ mov ARG_NSECT(%bp), %ax
+ xor %dx, %dx
+ mov $SECT_PER_TRACK, %cx
+ div %cx
+ cmp $0, %dx
+ jz 0f
+ inc %ax
+0: mov %ax, VAR_NTRACKS(%bp)
+
+ xor %cx, %cx
+0: cmp VAR_NTRACKS(%bp), %cx
+ jz 0f
+ push %cx
+ call read_track
+ pop %cx
+ jmp 0b
+0:
+ # TODO cont.
+ pop %bp
+ ret
+
+read_track:
+ ret
+
+clearscr:
+ push %es
+ pushw $0xb800
+ pop %es
+ xor %eax, %eax
+ xor %di, %di
+ movl $500, %ecx
+ rep stosl
+ pop %es
+ ret
+
+print_num:
+ # save es
+ push %es
+
+ xor %cx, %cx
+ movw $numbuf, %si
+ mov $10, %ebx
+
+0: xor %edx, %edx
+ div %ebx
+ add $48, %dl
+ mov %dl, (%si)
+ inc %si
+ inc %cx
+ cmp $0, %eax
+ jnz 0b
+
+ # print the backwards string
+ pushw $0xb800
+ pop %es
+ xor %di, %di
+
+0: dec %si
+ mov (%si), %al
+ movb %al, %es:(%di)
+ inc %di
+ mov $7, %al
+ movb %al, %es:(%di)
+ inc %di
+ dec %cx
+ jnz 0b
+
+ # restore es
+ pop %es
+ ret
+
+numbuf: .space 10