ディスク起動時のブートセクタ

適当ブートセクタ
ディスク情報は無意味にアレスタ2からコピペ
なので適当に変更すること

ちなみに DOS2 フォーマットにしてあるので
turboR で起動すると R800 モードになる

コード自体はブート時に読み込まれる 0xC000 から始まる 256 バイトのアレ

2回呼ばれ、
初回は ret nc のとこで何もせずにリターン

2回目は
de にページ 1 を DISK ROM へ切り替えるコードのアドレス
hl にページ 1 を RAM へ切り替えるコードのアドレスが入ってコールされる
で、そのアドレスへのコールを BASIC のファンクションキーの文字列を入れとくワークに適当にコピる

なのでこれ以降

call 0xf87f
で、ページ1がディスクROMに

call 0xf87f+4
で、ページ1が RAM になる

その後 RAM の 0x8000 へ 論理セクタ 2 から 16k を読み込んでジャンプする

なのでアプリケーション本体は 0x8000 から始まるように作成し、
ディスクイメージの論理セクタ 2 から書き込んでおく

;boot loader
	.module boot

	.area _HEADER (ABS)
	.org 0xc000

	.db		0xEB, 0xFE, 0x90
	.ascii	\ALESTE20\
	.dw		0x0200	; Sector size.
	.db		0x02	; Cluster size.
	.dw		0x0001	; 
	.db		0x02	; FAT
	.dw		0x0070	; Directory entry.
	.dw		0x05A0	; Sector.
	.db		0xF9	; Media ID.
	.dw		0x0003	; FAT size.
	.dw		0x0009	; Sectors per track.
	.dw		0x0002	; side.
	.dw		0x0000	; hide

	jr		BOOT
	
	.db		"V","O","L","_","I","D"
	.db		0x00
	.db		"H","O","G","E"
	.db		0x00, 0x00, 0x00, 0x00, 0x00

BOOT:
	ret		nc
	ld		(PAGE1DISKROM+1),de	

	ld		hl,#3
	add		hl,de
	ld		(PAGE1RAMPATCH+1),hl	
	
	ld		hl,#PAGE1DISKROM
	ld		de,#0xf87f
	ld		bc,#4
	ldir

	ld		hl,#PAGE1RAMPATCH
	ld		de,#0xf87f+4
	ld		bc,#4
	ldir

	ld		de,	#0x8000
	ld		c,	#0x1a
	call	0xf37d
	
	ld		de,	#0x0002	; sec 0002
	ld		hl,	#0x2000	; 32 sector = 16k
	ld		c,	#0x2f
	call	0xf37d

	call	0xf87f
	call	0xf87f+4

	jp		0x8000

PAGE1DISKROM:
	call	0x0000
	ret
	
PAGE1RAMPATCH:
	call	0x0000
	ret

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年02月15日 15:27
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。