適当ブートセクタ
ディスク情報は無意味にアレスタ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
最終更新:2009年02月15日 15:27