vxWorksbsp分析之rominit.pdf

上传人:深夜****等你... 文档编号:84200412 上传时间:2023-04-04 格式:PDF 页数:7 大小:101.36KB
返回 下载 相关 举报
vxWorksbsp分析之rominit.pdf_第1页
第1页 / 共7页
vxWorksbsp分析之rominit.pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《vxWorksbsp分析之rominit.pdf》由会员分享,可在线阅读,更多相关《vxWorksbsp分析之rominit.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Rominit C 4 vxWorks.h sysLib.h BSP config.h BSP Asm.h:.globl copyright_wind_river.long copyright_wind_river/*the first in.data*/.globl romwait.globl _romInit.globl _sdata _romlnit_sdata 0start of data.text.align 16.text.align 1616 CPU rominit Cli jmp cold cold balign 1632-bit16-bit16-bit 32-bit romW

2、armHigh:Cli movl SP_ARG1(%esp),%ebx esp+SP_ARG1 ebx jmp warm warm.balign 1632-bit16-bit16-bit32-bit romWarmLow:cli cld movl$RAM_LOW_ADRS,%esi/*RAM_LOW_ADRS esi movl$ROM_TEXT_ADRS,%edi/*RAM_LOW_ADRS edi movl$ROM_SlZE,%ecx/*RAM_size ecx shrl$2,%ecx/*ecx 256 64 rep movsl esi-edi ecx=0 movl SP_ARG1(%esp

3、),%ebx esp+SP_ARG1 ebx jmp warm/*jump to warm*/.ascii Copyright 1984-2002 Wind River Systems,Inc.balign 16,0 x90 cold:/cold .byte 0 x67,0 x66 blign1 6 lidt%cs:(romIdtr-romInit)cs:(romIdtr-romInit).byte 0 x67,0 x66 blign1 6 Igdt%cs:(romGdtr-romInit)cs:(romGdtr-romInit)mov%cr0,%eax/*move CR0 to EAX*/.

4、byte 0 x66/*next inst has 32bit operand*/or$0 x00000001,%eax/*set the PE bit*/mov%eax,%cr0/*move EAX to CR0*/cr0PE1jmp romInit1/*rominit1 Rominit1:rominit1 .byte 0 x66/*next inst has 32bit operand*/mov$0 x0010,%eax/*set data segment 0 x10 is 3rd one*/mov%ax,%ds/*set DS*/mov%ax,%es/*set ES*/mov%ax,%f

5、s/*set FS*/mov%ax,%gs/*set GS*/mov%ax,%ss/*set SS*/.byte 0 x66/*next inst has 32bit operand*/mov$ROM_STACK,%esp/*set lower mem stack pointer*/.byte 0 x67,0 x66/*next inst has 32bit operand*/ljmp$0 x08,$ROM_ TEXT_ADRS+romInit2-romInit DS,ES,FS,GS,SS0 x0010GDT20DPL=0esp ROM_STACK,CS16-bit32-bitCSCS0 x

6、08GDT1DPL=0CS romIDT In terrupt Description TableromGdtr:.word 0 x0027.long ROM_TEXT_ADRS+ROM_GDT/balign 16,0 x90 romGdt:/*0(selector=0 x0000):Null descriptor*/.word.word.byte.byte.byte.byte 0 x0000 0 x0000 0 x00 0 x00 0 x00 0 x00 /*1(selector=0 x0008):Code descriptor*/.word.word.byte 0 xffff/*limit

7、:xffff*/16 0 x0000/*base:xxxx0000*/16 0 x00/*base:xx00 xxxx*/8 .byte.byte.byte 0 x9a/0 xcf/4 0 x00/*base:8 /*2(selector=0 x0010):Data descriptor*/.word.word.byte.byte.byte.byte 0 xffff/*limit:xffff*/0 x0000/*base:xxxx0000*/0 x00/*base:xx00 xxxx*/0 x92/*Data r/w,Present,DPL0*/0 xcf/*limit:fxxxx,Page

8、Gra,32bit*/0 x00/*base:00 xxxxxx*/*3(selector=0 x0018):Code descriptor,for the nesting interrupt*/.word.word.byte.byte.byte.byte 0 xffff/*limit:xffff*/0 x0000/*base:xxxx0000*/0 x00/*base:xx00 xxxx*/0 x9a/*Code e/r,Present,DPL0*/0 xcf/*limit:fxxxx,Page Gra,32bit*/0 x00/*base:00 xxxxxx*/*4(selector=0

9、x0020):Code descriptor,for the nesting interrupt*/.word 0 xffff/*limit:xffff*/.word 0 x0000/*base:xxxx0000*/.byte 0 x00/*base:xx00 xxxx*/.byte 0 x9a/*Code e/r,Present,DPL0*/.byte 0 xcf/*limit:fxxxx,Page Gra,32bit*/.byte 0 x00/*base:00 xxxxxx*/.balign 16,0 x90 romInit2:/rominit2 cli movl$ROM_STACK,%e

10、sp esp rom_stack 0 x8000h#if defined(TGT_CPU)&defined(SYMMETRIC_IO_MODE)movl$MP_N_CPU,%eax lock incl(%eax)#endif TGT_CPU SYMMETRIC_IO_MODE#ifdef INCLUDE_WINDML/*WindML+VesaBIOS initialization*/Movl$VESA_BIOS_DATA_PREFIX,%ebx/*move BIOS prefix addr to EBX*/movl$VESA_BIOS_KEY_1,(%ebx)/*store BIOS*/add

11、l$4,%ebx/*increment EBX*/movl$VESA_BIOS_KEY_2,(%ebx)/*store DATA*/movl$VESA_BIOS_DATA_SIZE,%ecx/*load ECX with nBytes to copy*/shrl$2,%ecx/*get nLongs to copy*/movl$0,%esi/*load ESI with source addr*/movl$VESA_BIOS_DATA_ADDRESS,%edi/*load EDI with dest addr*/rep movsl/*copy BIOS data to VRAM*/#endif

12、/*INCLUDE_WINDML*/*/INCLUDE_WINDML VesaBIOS#ifndef INCLUDE_IACSFL call FUNC(romA20on)cmpl$0,%eax jne romInitHlt/*#endif INCLUDE_IACSFL warm:/warm ARCH_REGS_INIT/*DR0-7*/#if(CPU=PENTIUM)|(CPU=PENTIUM2)|(CPU=PENTIUM3)|(CPU=PENTIUM4)xorl%eax,%eax/*zero EAX*/movl%eax,%cr4/*enable A20*/*is A20 enabled?*/

13、no:jump romInitHlt*/#endif cr4 movl$romGdtr,%eax romGdt subl$FUNC(romInit),%eax addl$ROM_TEXT_ADRS,%eax pushl%eax call FUNC(romLoadGdt)movl$STACK_ADRS,%esp/*initialise the stack pointer*/movl$ROM_TEXT_ADRS,%esi/*get src addr(ROM_TEXT_ADRS)movl$romInit,%edi/*get dst addr(romInit)*/cmpl%esi,%edi/*is s

14、rc and dst same?*/je romInit4 rom_text_adrsrominitrominit4 movl$FUNC(end),%ecx/*get end addr*/subl%edi,%ecx/*get nBytes to copy*/shrl$2,%ecx/*get nLongs to copy*/cld/*clear the direction bit*/rep/*repeat next inst ECX time*/movsl rom_text_adrsrominitrom_text_adrs(en d-romi nit)romlnit4:rominit4 xorl

15、%ebp,%ebp ebp pushl$0 popfl/pushl%ebx ebx movl$FUNC(romStart),%eax/*jump to romStart*/call*%eax/romStart romInitHlt:pushl%eax call FUNC(romEaxShow)/romEaxShow eax hlt jmp romInitHlt .balign 16,0 x90 FUNC_LABEL(romA20on)/romA20on:a20call FUNC(romWait)/romwait movl$0 xd1,%eax/*64h d1h*/outb%al,$0 x64

16、call FUNC(romWait)60h dfh*/romwait movl$0 xff,%eax 64h ffh*/outb%al,$0 x64 call FUNC(romWait)romwait movl$0 x000000,%eax/*Check if it worked*/movl$0 x100000,%edx pushl(%eax)pushl(%edx)movl$0 x0,(%eax)movl$0 x0,(%edx)movl$0 x01234567,(%eax)cmpl$0 x01234567,(%edx)popl(%edx)popl(%eax)jne romA20on0 A20O

17、OOOOOh100000,20 0 A20/*another way to enable A20*/movl$0 x02,%eax outb%al,$0 x92/92H 02 xorl%ecx,%ecx ecx romA20on1:/92H 02 inb$0 x92,%al andb$0 x02,%al loopz romA20on1/92H 02 movl$0 xdf,%eax/*Enable A20*/outb%al,$0 x60 call FUNC(romWait)movl$0 x000000,%eax/*Check if it worked*/movl$0 x100000,%edx p

18、ushl(%eax)pushl(%edx)movl$0 x0,(%eax)movl$0 x0,(%edx)movl$0 x01234567,(%eax)cmpl$0 x01234567,(%edx)popl(%edx)popl(%eax)jne romA20on0 movl$0 xdeaddead,%eax/*error,cant enable A20*/ret A20OOOOOOh100000,20 0 A20 A20 romA20on0:xorl%eax,%eax ret/A20 EAX .balign 16,0 x90 FUNC_LABEL(romLoadGdt)movl SP_ARG1

19、(%esp),%eax lgdt(%eax)movw$0 x0010,%ax/*a selector 0 x10 is 3rd one*/movw%ax,%ds movw%ax,%es movw%ax,%fs movw%ax,%gs movw%ax,%ss ret DS,ES,FS,GS,SS0 x0010GDT20DPL=0 FUNC_LABEL(romWait)/xorl%ecx,%ecx ecx romWait0:movl$0 x64,%edx/*Check if it is ready to write*/inb%dx,%al andb$2,%al loopnz romWait0/64h 02 ret.balign 16,0 x90 FUNC_LABEL(romEaxShow)/eax /*show EAX register in your display device available*/ret

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁