11年7个月前修改于 11年7个月前IP:广西
768997
49楼
引用 cccyl:
哈哈,这个不错!玩出水平了,够牛逼!


KC-LS1u开机启动程序源码和ROM文件.
V1.0版本(不建议使用):

attachment icon KC-LS1u开机启动程序.rar 399.37KB RAR 85次下载
V1.1版本(可以不插4片VGA):

attachment icon KC-LS1u开机启动程序V1.1.rar 399.81KB RAR 98次下载


把开机启动程序ROM二进制文件烧到27c020, 然后装上... 从此就可以告别烧写器/编程器了~


开机启动程序说明:
开机启动程序的作用是-->在上电之后自动从外部存储器(TF/SD内存卡)加载程序数据到内存, 然后执行这个加载进来的程序;

1. 在内存卡根目录新建两个txt文本, "KC_LS1u_boot_0.txt"  和 "KC_LS1u_boot_1.txt" , 内存卡文件系统格式为FAT32;
2. 编辑 "KC_LS1u_boot_0.txt" 这个引导文本, 文本存放的是程序文件的路径, 路径格式为, 设备名称:文件路径,  比如, spi_device0:ROM.bin,  spi_device0的意思是选择SPI设备0(硬件SPI控制器上面有8根片选信号线, 接"S_CS0" 片选信号的设备会被选中),  ROM.bin就是根目录下的ROM.bin二进制程序文件;
3. 插上内存卡, 通电开机, 这时机器会把 "ROM.bin" 这个文件加载到内存里面并运行;

1.png

在这里, SPI设备0(spi_device0:)  和 SPI设备1(spi_device1:) 作为开机引导的对象,也就是可以接两张内存卡, 两张内存卡的片选信号(CS)分别接硬件SPI控制器的 "S_CS0" 片选信号 和 "S_CS1" 片选信号;

txt引导文本的路径可以写成如下几种格式,文件名称或文件夹名称可以有空格,但是路径前后不能有空格或换行.
spi_device0:ROM.bin         指定从SPI设备0加载根目录的程序文件
spi_device1:ROM.bin         指定从SPI设备1加载根目录的程序文件
spi_device_:ROM.bin         机器会从当前设备加载根目录的程序文件
spi_device0:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\ROM.bin    指定从SPI设备0加载指定目录的程序文件
spi_device1:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\ROM.bin    指定从SPI设备1加载指定目录的程序文件
spi_device_:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\ROM.bin    机器会从当前设备加载指定目录的程序文件

在有两张内存卡的情况下,开机的时候机器会先搜索SPI设备0根目录下的txt引导文本,如果没有找到文本,这时会搜索SPI设备1, 如果SPI设备1的txt引导文本里面路径指定的是SPI设备0(spi_device0:), 那么机器会从SPI设备0搜索程序文件, 也就是引导文本在SPI设备1,程序文件在SPI设备0;
如果txt引导文本里的设备名称写成 "spi_device_:" , 这时机器只会搜索存放这个引导文本的设备, 也就是引导文本在SPI设备0, 机器就在SPI设备0搜索程序文件, 文本在SPI设备1,机器就在SPI设备1搜索程序文件;

注意: 引导文本内容的大小不能超过512字节  


"KC_LS1u_boot_0.txt" 是作为开机时候的引导文本, 那 "KC_LS1u_boot_1.txt" 是干嘛用的~, 是给操作系统启动程序用的,  那么怎么控制呢..
内存地址C00007H是一个系统控制寄存器, 上电复位的时候会全部清0, 注意有两个空出来的"用户位";
bit0的这个用户位是控制开机画面的,  运行开机程序的时候, 程序会判断这个位, 如果为0, 就会出现外星人开机画面, 如果为1, 就不会出现外星人开机画面;
bit4这个用户位是控制txt引导文本的,  当开机程序执行到搜索txt引导文本这一步的时候, 会判断这个位, 如果为0, 就搜索 "KC_LS1u_boot_0.txt",  如果为1, 则搜索 "KC_LS1u_boot_1.txt" ;
2.png


顶楼资料有介绍, 本机有两组ROM, 分别为EPROM和SROM(由SRAM芯片组成), ROM就是装程序(机器码)的麻..
EPROM这组ROM里面的程序是按下开机键的时候, 立刻就运行的, 开机程序就装在这组ROM里面;
SROM这组ROM要先装程序进去, 装完了之后, 再通过硬件切换机制, 让CPU跳到SROM, 执行SROM里面的程序,  当然, CPU也可以跳回EPROM, 执行EPROM里的程序, 那么问题就来了, EPROM装的是外星人开机程序, 跳回去有什么用呢,  ~ -_,- ~ 这个是我觉得设计得比较得意的地方~~~,  由于在SROM里面运行的用户程序是不能读写SROM的, 只有在EPROM运行的程序才可以访问SROM,  那么, 如果现在SROM里面运行的程序想从外部存储器加载一个程序进来运行怎么办呢,
可以这样做,
第1步,修改SPI设备0内存卡的 "KC_LS1u_boot_1.txt" 引导文本, 把这个文本的路径修改为需要启动运行的程序文件的路径;
第2步,往内存地址C00007H这个系统控制寄存器写入0x11, 这时两个用户位都被置1;
第3步,执行 "rom_run;" 语句, 这时CPU会跳到EPROM里面执行程序, 由于bit0和bit4两个用户位被置1, EPROM里面的开机程序将不执行外星人开机画面, 而直接执行 "SROM数据装载服务程序" , 这时程序会搜索 "KC_LS1u_boot_1.txt" 引导文本, 然后按照路径把目标程序文件装载到SROM, 然后运行;
经过上面3个步骤, 已经达到了用户程序加载程序运行的目的;
3.png


假设EPROM和SROM都装有下图所示的程序,将会出现什么现象呢,结果就是CPU在EPROM里面执行到 "rom_run;" 的时候会跳到SROM执行程序,然后CPU在SROM执行到 "rom_run;" 的时候,又会跳回EPROM执行"rom_run;"  然后又跳到SROM执行"rom_run;" 。。。。。。死循环, 切来切去。。
4.png
评论
文号 / 768997

千古风流
名片发私信
学术分 4
总主题 71 帖总回复 1168 楼拥有证书:学者 机友 笔友
注册于 2011/08/12 17:13:20最后登录 2022/12/22 11:43:34
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的