cdshell支持真彩背景,bcdw支持gif动画。所以用cdshell+bcdw模块实现了上面的效果。
下面是cdshell.ini文件的内容:
boot:
cls
print "\n"
print "Press Enter to boot from CD... \n"
getkey 5 boot 0x80
if $lastKey == key[enter]; then goto menu
# When no key found...
goto boot
menu:
show image menu.csi
i01_active:
bcdw ShowGif arrow_a.gif 56 80 WaitKey
bcdw ShowGif arrow_p.gif 56 80
if $BCDW_LastKey == key[up]; then goto i09_active
if $BCDW_LastKey == key[down]; then goto i02_active
if $BCDW_LastKey == key[enter]; then chain /PRO1.DAT
if $BCDW_LastKey == key[1]; then chain /PRO1.DAT
if $BCDW_LastKey == key[2]; then goto i02_active
if $BCDW_LastKey == key[3]; then goto i03_active
if $BCDW_LastKey == key[4]; then goto i04_active
if $BCDW_LastKey == key[5]; then goto i05_active
if $BCDW_LastKey == key[6]; then goto i06_active
if $BCDW_LastKey == key[8]; then goto i08_active
if $BCDW_LastKey == key[esc]; then reboot
goto i01_active
i02_active:
bcdw ShowGif arrow_a.gif 56 122 WaitKey
bcdw ShowGif arrow_p.gif 56 122
if $BCDW_LastKey == key[up]; then goto i01_active
if $BCDW_LastKey == key[down]; then goto i03_active
if $BCDW_LastKey == key[enter]; then memdisk /PMagic.img
if $BCDW_LastKey == key[1]; then goto i01_active
if $BCDW_LastKey == key[2]; then memdisk /PMagic.img
if $BCDW_LastKey == key[3]; then goto i03_active
if $BCDW_LastKey == key[4]; then goto i04_active
if $BCDW_LastKey == key[5]; then goto i05_active
if $BCDW_LastKey == key[6]; then goto i06_active
if $BCDW_LastKey == key[8]; then goto i08_active
if $BCDW_LastKey == key[esc]; then reboot
goto i02_active
i03_active:
bcdw ShowGif arrow_a.gif 56 164 WaitKey
bcdw ShowGif arrow_p.gif 56 164
if $BCDW_LastKey == key[up]; then goto i02_active
if $BCDW_LastKey == key[down]; then goto i04_active
if $BCDW_LastKey == key[enter]; then memdisk /ghost.img
if $BCDW_LastKey == key[1]; then goto i01_active
if $BCDW_LastKey == key[2]; then goto i02_active
if $BCDW_LastKey == key[3]; then memdisk /ghost.img
if $BCDW_LastKey == key[4]; then goto i04_active
if $BCDW_LastKey == key[5]; then goto i05_active
if $BCDW_LastKey == key[6]; then goto i06_active
if $BCDW_LastKey == key[8]; then goto i08_active
if $BCDW_LastKey == key[esc]; then reboot
goto i03_active
i04_active:
bcdw ShowGif arrow_a.gif 56 206 WaitKey
bcdw ShowGif arrow_p.gif 56 206
if $BCDW_LastKey == key[up]; then goto i03_active
if $BCDW_LastKey == key[down]; then goto i05_active
if $BCDW_LastKey == key[enter]; then memdisk /xiao.img
if $BCDW_LastKey == key[1]; then goto i01_active
if $BCDW_LastKey == key[2]; then goto i02_active
if $BCDW_LastKey == key[3]; then goto i03_active
if $BCDW_LastKey == key[4]; then memdisk /xiao.img
if $BCDW_LastKey == key[5]; then goto i05_active
if $BCDW_LastKey == key[6]; then goto i06_active
if $BCDW_LastKey == key[8]; then goto i08_active
if $BCDW_LastKey == key[esc]; then reboot
goto i04_active
i05_active:
bcdw ShowGif arrow_a.gif 56 248 WaitKey
bcdw ShowGif arrow_p.gif 56 248
if $BCDW_LastKey == key[up]; then goto i04_active
if $BCDW_LastKey == key[down]; then goto i06_active
if $BCDW_LastKey == key[enter]; then chain /XPE1.DAT
if $BCDW_LastKey == key[1]; then goto i01_active
if $BCDW_LastKey == key[2]; then goto i02_active
if $BCDW_LastKey == key[3]; then goto i03_active
if $BCDW_LastKey == key[4]; then goto i04_active
if $BCDW_LastKey == key[5]; then chain /XPE1.DAT
if $BCDW_LastKey == key[6]; then goto i06_active
if $BCDW_LastKey == key[8]; then goto i08_active
if $BCDW_LastKey == key[esc]; then reboot
goto i05_active
i06_active:
bcdw ShowGif arrow_a.gif 56 290 WaitKey
bcdw ShowGif arrow_p.gif 56 290
if $BCDW_LastKey == key[up]; then goto i05_active
if $BCDW_LastKey == key[down]; then goto i08_active
if $BCDW_LastKey == key[enter]; then chain /XPE2.DAT
if $BCDW_LastKey == key[1]; then goto i01_active
if $BCDW_LastKey == key[2]; then goto i02_active
if $BCDW_LastKey == key[3]; then goto i03_active
if $BCDW_LastKey == key[4]; then goto i04_active
if $BCDW_LastKey == key[5]; then goto i05_active
if $BCDW_LastKey == key[6]; then chain /XPE2.DAT
if $BCDW_LastKey == key[8]; then goto i08_active
if $BCDW_LastKey == key[esc]; then reboot
goto i06_active
i08_active:
bcdw ShowGif cross_a.gif 56 354 WaitKey
bcdw ShowGif cross_p.gif 56 354
if $BCDW_LastKey == key[up]; then goto i06_active
if $BCDW_LastKey == key[down]; then goto i09_active
if $BCDW_LastKey == key[enter]; then boot 0x80
if $BCDW_LastKey == key[1]; then goto i01_active
if $BCDW_LastKey == key[2]; then goto i02_active
if $BCDW_LastKey == key[3]; then goto i03_active
if $BCDW_LastKey == key[4]; then goto i04_active
if $BCDW_LastKey == key[5]; then goto i05_active
if $BCDW_LastKey == key[6]; then goto i06_active
if $BCDW_LastKey == key[8]; then goto boot 0x80
if $BCDW_LastKey == key[esc]; then reboot
goto i08_active
i09_active:
bcdw ShowGif cross_a.gif 56 396 WaitKey
bcdw ShowGif cross_p.gif 56 396
if $BCDW_LastKey == key[up]; then goto i08_active
if $BCDW_LastKey == key[down]; then goto i01_active
if $BCDW_LastKey == key[enter]; then reboot
if $BCDW_LastKey == key[1]; then goto i01_active
if $BCDW_LastKey == key[2]; then goto i02_active
if $BCDW_LastKey == key[3]; then goto i03_active
if $BCDW_LastKey == key[4]; then goto i04_active
if $BCDW_LastKey == key[5]; then goto i05_active
if $BCDW_LastKey == key[6]; then goto i06_active
if $BCDW_LastKey == key[8]; then goto i08_active
if $BCDW_LastKey == key[esc]; then reboot
goto i08_active