name	boot2_asm
	.radix	16

n_000100:
	inc	word ptr [7DF3]
	mov	bx,[7DF3]
	add	byte ptr [7EB2],2
	call	n_FFFF9D
	jmp	short n_00014B

n_000112:
	mov	ax,3
	test	byte ptr [7DF7],4
	je	n_00011D
	inc	ax
n_00011D:
	mul	si
	shr	ax,1
	sub	ah,byte ptr [7EB2]
	mov	bx,ax
	cmp	bx,1FF
	jnb	n_000100
	mov	dx,[bx+8000]
	test	byte ptr [7DF7],4
	jne	n_000145
	mov	cl,4
	test	si,1
	je	n_000142
	shr	dx,cl
n_000142:
	and	dh,0F
n_000145:
	test	dx,0FFFF
	jz	n_000151
n_00014B:
	inc	si
	cmp	si,di
	jbe	n_000112
	ret

n_000151:
	mov	dx,0FFF7
	test	byte ptr [7DF7],4
	jnz	n_000168
	and	dh,0F
	mov	cl,4
	test	si,1
	je	n_000168
	shl	dx,cl
n_000168:
	or	[bx+8000],dx
	mov	bx,[7DF3]
	call	n_FFFF98
	mov	ax,si
	sub	ax,2
	mov	bl,byte ptr [7C0Dh]
	xor	bh,bh
	mul	bx
	add	ax,[7DF5]
	mov	si,ax
	mov	bx,0
	call	n_FFFF9D
	mov	bx,si
	inc	bx
	call	n_FFFF98
	mov	bx,si
	mov	[7DF9],si
	push	cs
	pop	ax
	sub	ax,20
	mov	es,ax
	call	n_FFFF98
	push	cs
	pop	ax
	sub	ax,40
	mov	es,ax
	mov	bx,0
	call	n_FFFF98
	ret

	mov	ch,23
	add	dh,dh
	push	es
	idiv	word ptr [di+2]
	jne	n_0001DE
	or	byte ptr [7DF7],2
	mov	ax,0
	mov	ds,ax
	mov	ax,[20]
	mov	bx,[22]
	mov	[20],7EDF
	mov	[22],cs
	push	cs
	pop	ds
	mov	[7FC9],ax
	mov	[7FCBh],bx
n_0001DE:
	ret

	push	ds
	push	ax
	push	bx
	push	cx
	push	dx
	push	cs
	pop	ds
	mov	ah,0F		;Get video mode
	int	10
	mov	bl,al
	cmp	bx,[7FD4]
	je	n_000227
	mov	[7FD4],bx
	dec	ah
	mov	byte ptr [7FD6],ah
	mov	ah,1
	cmp	bl,7
	jne	n_000205
	dec	ah
n_000205:
	cmp	bl,4
	jnb	n_00020C
	dec	ah
n_00020C:
	mov	byte ptr [7FD3],ah
	mov	word ptr [7FCF],101
	mov	word ptr [7FD1],101
	mov	ah,3		;Read cursor position
	int	10
	push	dx
	mov	dx,[7FCF]
	jmp	short n_00024A

n_000227:
	mov	ah,3		;Read cursor position
	int	10
	push	dx
	mov	ah,2		;Set cursor position
	mov	dx,[7FCF]
	int	10
	mov	ax,[7FCDh]
	cmp	byte ptr [7FD3],1
	jne	n_000241
	mov	ax,8307
n_000241:
	mov	bl,ah
	mov	cx,1
	mov	ah,9		;Write character with attribute
	int	10
n_00024A:
	mov	cx,[7FD1]
	cmp	dh,0
	jne	n_000258
	xor	ch,0FF
	inc	ch
n_000258:
	cmp	dh,18
	jne	n_000262
	xor	ch,0FF
	inc	ch
n_000262:
	cmp	dl,0
	jne	n_00026C
	xor	cl,0FF
	inc	cl
n_00026C:
	cmp	dl,byte ptr [7FD6]
	jne	n_000277
	xor	cl,0FF
	inc	cl
n_000277:
	cmp	cx,[7FD1]
	jne	n_000294
	mov	ax,[7FCDh]
	and	al,7
	cmp	al,3
	jne	n_00028B
	xor	ch,0FF
	inc	ch
n_00028B:
	cmp	al,5
	jne	n_000294
	xor	cl,0FF
	inc	cl
n_000294:
	add	dl,cl
	add	dh,ch
	mov	[7FD1],cx
	mov	[7FCF],dx
	mov	ah,2		;Set cursor position
	int	10
	mov	ah,8		;Read character with attribute
	int	10
	mov	[7FCDh],ax
	mov	bl,ah
	cmp	byte ptr [7FD3],1
	jne	n_0002B6
	mov	bl,83
n_0002B6:
	mov	cx,1
	mov	ax,907		;Write character '\7' with attribute
	int	10
	pop	dx
	mov	ah,2		;Set cursor position
	int	10
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	pop	ds
	jmp	far ptr f_000020

	add	byte ptr [bx+si],al
	add	word ptr [bx+di],ax
	add	word ptr [bx+di],ax
	add	bh,bh
	call	word ptr [bx+si-49]
	mov	bh,0B7
	mov	dh,40
	inc	ax
	mov	dh,bl
	out	5A,al
	lodsb
	shl	ah,cl
	jmp	far ptr f_0F05E6

	db	'@d\`R@@@@db^b`'

	pop	si
	jo	n_000368
	inc	ax
	inc	cx
	mov	bh,0B7
	mov	bh,0B6
	jmp	n_000336

	db	'IBM  3.3'
	dw	200
	db	2
	dw	1
	db	2
	dw	70
	dw	2D0
	db	0FDh
	dw	2
	dw	9
	dw	2
	dw	0

	db	0011h dup (000h)
	adc	al,byte ptr [bx][si]
	add	byte ptr [bx][si],al
	add	byte ptr [bx][di],al
	add	dl,bh

boot2:
	xor	ax,ax
	mov	ss,ax
	mov	sp,7C00
	push	ss
	pop	es
	mov	bx,78
	lds	si,ss:[bx]
	push	ds
	push	si
	push	ss
	push	bx
	mov	di,7C2Bh
	mov	cx,0Bh
	cld
n_000351:
	lodsb
	cmp	byte ptr es:[di],0
	je	n_00035B
	mov	al,byte ptr es:[di]
n_00035B:
	stosb
	mov	al,ah
	loop	n_000351
	push	es
	pop	ds
	mov	[bx+2],ax
	mov	[bx],7C2Bh
	sti
	int	13
	jc	n_0003D5
	mov	al,byte ptr [7C10]
	cbw
	mul	word ptr [7C16]
	add	ax,[7C1C]
	add	ax,[7C0E]
	mov	[7C3F],ax
	mov	[7C37],ax
	mov	ax,20
	mul	word ptr [7C11]
	mov	bx,[7C0Bh]
	add	ax,bx
	dec	ax
	div	bx
	add	[7C37],ax
	mov	bx,500
	mov	ax,[7C3F]
	call	n_000440
	mov	ax,201
	call	n_00045A
	jb	n_0003C2
	mov	di,bx
	mov	cx,0Bh
	mov	si,7DD6
	rep	cmpsb
	jne	n_0003C2
	lea	di,[bx+20]
	mov	si,7DE1
	mov	cx,0Bh
	rep	cmpsb
	je	n_0003DA
n_0003C2:
	mov	si,7D77
n_0003C5:
	call	n_000432
	xor	ah,ah
	int	16
	pop	si
	pop	ds
	pop	[si]
	pop	[si+2]
	int	19

n_0003D5:
	mov	si,7DC0
	jmp	n_0003C5

n_0003DA:
	mov	ax,[51C]
	xor	dx,dx
	div	word ptr [7C0Bh]
	inc	al
	mov	[7C3C],al
	mov	ax,[7C37]
	mov	[7C3Dh],ax
	mov	bx,700
n_0003F1:
	mov	ax,[7C37]
	call	n_000440
	mov	ax,[7C18]
	sub	al,[7C3Bh]
	inc	ax
	cmp	[7C3C],al
	jnb	n_000408
	mov	al,[7C3Ch]
n_000408:
	push	ax
	call	n_00045A
	pop	ax
	jb	n_0003D5
	sub	[7C3C],al
	je	n_000421
	add	[7C37],ax
	mul	word ptr [7C0Bh]
	add	bx,ax
	jmp	n_0003F1
n_000421:
	mov	ch,[7C15]
	mov	dl,[7DFDh]
	mov	bx,[7C3Dh]
	jmp	far ptr f_000700

n_000432:
	lodsb
	or	al,al
	je	n_000459
	mov	ah,0E		;Write character in TTY graphics mode
	mov	bx,7
	int	10
	jmp	n_000432

n_000440:
	xor	dx,dx
	div	word ptr [7C18]
	inc	dl
	mov	[7C3Bh],dl
	xor	dx,dx
	div	word ptr [7C1A]
	mov	[7C2A],dl
	mov	[7C39],ax
n_000459:
	ret

n_00045A:
	mov	ah,2
	mov	dx,[7C39]
	mov	cl,6
	shl	dh,cl
	or	dh,[7C3Bh]
	mov	cx,dx
	xchg	ch,cl
	mov	dl,[7DFDh]
	mov	dh,[7C2A]
	int	13
	ret

	db	0Dh,0A,'Non-System disk or disk error',0Dh,0A
	db	'Replace and strike any key when ready',0Dh,0A,0
	db	0Dh,0A,'Disk Boot failure',0Dh,0A,0
	db	'IBMBIO  SYS'
	db	'IBMDOS  SYS'
	db	12 dup (0)
	dw	0AA55

	extrn	f_000020:far,n_000336:near,n_000368:near
	extrn	n_FFFF9D:near,n_FFFF98:near
	extrn	f_000700:far,f_0F05E6:far,f_3FFF98:far
	extrn	f_3FFF9D:far