大家好,我是雨轩菌

废话不多说,进入正题。我正在开发一个名为AssemblyProgramCraft的MOD(懂英语的应该略知其二了吧),
目前情况是各种跳票中,但最近有更多时间来弄这MOD了,进度应该会快一点。
在此MOD里,你可以制作一个电脑在MC里,并用汇编语言,甚至机器语言去操作它(别担心,如果你不会编程,到时候肯定有很多的模板和现成品让你玩)。
目前所有计划如下:
32位CPU
十进制的数字识别为带符号整数,十六进制则识别为无符号整数,无八进制数表示方法
0-65535的内存寻址范围
操作方面,机箱和显示器分离,可以把机箱连接到数据接口,从数据接口延伸出数据线,在数据线末端再放置数据接口,程序通过操纵RAM地址段,让末端的数据接口输出、输入其连接的外设。通过显示RAM(改为外设方式)操作显示器的输出,显示器是256色的,可以完全操作显示器的输出(不像电脑MOD一样只能显示字符,而且十分有限),键盘通过GUI实现,靠鼠标点击键盘按键来输入,也可是设置成实体键盘直接输入(PS:键盘方块,PPS:完全有可能实现)。
提供声卡RAM(改为外设方式),可以通过操作它实现播放声音(播放些稀奇古怪,不和谐的东西=w=?大雾)(音质估计略渣,而且第一版不会放出此功能,在以后版本实现)。
提供网卡,通过操作网卡RAM(改为外设方式),实现发送数据和接受数据,分普通网卡和无线网卡,无线网卡根据数据传输基站的大小和与它的距离,决定是否能访问到虚拟无线基站,在非常近的情况下,可以两台虚拟计算机直接连接,有线网卡就不用说了把(当然网卡可以内置到电脑里(外设改内设很容易),当然也是后期的东西,第一版只有显示器、键盘、机箱、数据线、数据接口)。断开游戏地图或游戏关闭后,所有设备的状态会保存(这里要吐槽一下电脑MOD了,卧槽为啥关游戏后就不能花点功夫写几行代码来保存当前设备的状态呢,每次都要重新运行程序......)虚拟的计算机将是在硬件上支持多线程的(有相关的汇编指令。虽然说到底还是软件,PS:JAVA的多线程的语言级支持是我的福气=.=),但是同步等操作还是需要自己做(线程间的寄存器、内存互通,并具有完全访问权)。更多功能尽请期待。
目前这玩意我已经开始做了,而且汇编器和虚拟机都是自己做的,
VM结构图:
![]() |
进度向:
2012.10.8日更新:
更新内容: 1.编译器已经有雏形。 2.支持2条基本汇编指令 使用的汇编测试代码:
![]() |
2012.10.9日更新:
更新内容: 1.添加一个实用函数 使用的Java测试代码:
![]() |
2012.10.10日更新(重要):
更新内容: 0.洒家暴走了 1.支持所有汇编指令 2.编译效率+10^5451233 3.fixed:编译器错误“参数2不能为寄存器”。 4.fixed:JSR指令错误的将寄存器A而不是PC修改值 使用的汇编测试代码:
![]() |
2012.10.12日更新:
更新内容: 1.语法兼容性测试 使用的汇编语句:
|
2012.10.19日更新(重要):
更新内容:重写编译器...... 我发现编译器实在是太乱了,所以无奈重写,这次我会吸取教训= =......先写个构思...... 构思: 1.先把传入的字符串的多余空格缩为一个 2.删除逗号旁边的空格 3.再检查语法({:10_527:}又要写坑爹的正则表达式......) |
2012.10.24日更新:
更新内容: 1.编译器先对语句进行格式规范化和去除注释(去除注释待完成) 2.支持最多4个参数的汇编语句 3.支持5种参数类型( 无参数 | 寄存器地址 | 内存地址 | 数值(10HexOr16Hex) | 字符串 ) 4.准备划分内存区域和支持栈、I\O端口操作(好吧,我发现65535的内存不够用了,特别是显存...) |
2012.10.26日更新:
更新内容: 1.UnsignedTools、BitTool工具包类完成。 |
2012.11.9日更新(重要):
更新内容: 1.编译器部分完成对RAM、RAMREG、Number16Radix、Number10Radix、Registers、Lable的支持,还差String(我发现单用一个int数组不行了,所以创建了一个新类:ProgramPackage,用于表示一个编译后的程序,字节部分先是程序内容,然后将要写入字符串静态储存区内存块的内容) 以下为这个类的字段部分:
2.一个小程序的测试:
|
2012.11.23日更新:
更新内容: 1.编译器修复若干BUG。 2.虚拟机已经能用。 测试汇编代码:
|
2012.11.29日更新:
更新内容: 1.编译器提供API,以供添加新的指令时方便,所有目前有的指令都移植到这个API上(众人:不就等于重写么?楼主:......)(PS:编译器模板化之前的代码行数:3 6 3 8行,模板化之后目前的行数7 1 1行。众人:我去...) 摘录一段添加指令的JAVA代码:
|
2012.12.2日更新(重要):
更新内容: 1.编译器完成=w=! 2.虚拟机添加IExternalDevices接口类用于表示一个IO设备。 3.虚拟机添加SUB指令支持。 4.修复BUG若干。 测试代码:
|
2012.12.4日更新:
更新内容: 1.fixed编译器无法识别十六进制数字的问题(前缀0x的大小写问题导致的) 2.修复众多BUG 3.目前支持的指令:所有基础指令和JSR指令,还差线程和IO端口操作指令 |
2012.12.9日更新(重要):
更新内容: 1.修复编译器把不带参数的指令后跟一条标签定义,识别为 (操作符+标签类型参数) 的问题,比如:
2.虚拟机线程部分完成。 3.修复执行线程时CPU时间分配不均匀 4.修复∞个小BUG 使用的测试程序:
|
2012.12.24日更新:
更新内容: 1.编译器无法处理特殊字符串问题(30%修复) 2.开发环境更新至1.4.6 3.更新至1.4.6后的小发现: ![]() 这是什么,这不科学啊....为啥net.minecraft包下的类被分类得如此工整、清晰、简介、明了。新手Modder的福音、老手Modder的强大助手?再也不用在一堆java文件里找自己需要的类了,YAHO~! |
2012.12.25日更新(重要):
更新内容: 1.fixed 编译器无法处理特殊字符串问题(我认为已经完全修复,测试Ing) 2.fixed StringTools类的ReadIntToString无法正常使用。 使用的测试程序:
|
2012.12.31日更新(重要):
更新内容: 1.虚拟机执行代码部分重写,预计代码将少3000行左右,效率提高20%左右。 2.各种编译器的小BUG被修复。 3.添加对外部设备的支持(已经可用)。 |
2013.1.1日更新(重要)(元旦节快乐=w=):
更新内容: 1.虚拟机重写完毕,代码少了5000行= =... 2.修复载入外部设备时导致的问题。 3.修复一些小BUG。 测试设备代码:
|
2013.1.1日更新(重要):
更新内容: 1.支持INS和OUTS命令 2.修复IF系列命令无效 使用的测试代码和输出(前方检测到高能核聚变反应,无关人员请迅速撤离): 测试代码:
|
2013.1.2日更新:
更新内容: 1.修复OUTS命令无法正确执行 2.修复CRT命令无法正确执行 3.修复STT命令无法正确执行 4.改进INS和OUTS的效率 |
2013.1.3日更新:
更新内容: 1.添加SLT指令,用于让指定线程休眠X秒 2.改进INS和OUTS的效率,使用System.arraycopy复制数据 |
2013.1.21日更新:
更新内容: 1.洒家即将(一天后)有更多时间弄这个MOD。 2.在VM中一个用一个类来表示内存,替代现有直接使用数组(工作中) 3.添加异步的INS后OUTS指令(工作中) 4.异步INS和OUTS使用某种方法进行完成处理(工作中) 5.添加映射外设内存到主存的功能(工作中) |
2013.1.24日更新(重要):
更新内容: 1.内存用一个类来包装完成。 2.添加映射功能。 3.添加获取外部设备类型的操作符:GDT。 4.fixed 一些BUG。 |
2013.2.8日更新:
更新内容: 1.修复超过20个BUG 2.添加注释语法支持 |
2013.2.10日更新(重要)(自备狗眼):
更新内容: 1.修复一些BUG 2.完成电脑的模型 :D(啊,我刚买的源质氪金狗眼... XD) ![]() |
2013.2.11日更新(重要)
更新内容: 1.在虚拟机部分添加TickLock线程,以实现和游戏的Tick同步。 2.电脑模型的碰撞箱问题被修复。 3.计算机的开关机通过右键方块上的电源键实现™。 4.计算机可以在游戏关闭时保存当前工作,并在下次开始游戏时继续运行程序(不像CompurterCraft需要手动启动程序,所以不适合做密码门之类的东西)。 5.计算机能够在游戏暂停时也暂停。 6.一些BUG修复。 |
2013.2.12日更新:
更新内容: 1.修复一个虚拟机的空指针BUG。 2.如图所示: (解析: ①创造模式选项卡 ②物品栏上3D渲染的主机 ③玩家手上3D渲染的主机 .... ⑨バカ) ![]() 3.修复主机在世界中环境光照无规律的问题。 4.fixed 3处内存溢出 5.fixed 在不关闭主机的情况下退出,虚拟机线程不会停止(一直处于等待互斥锁状态)(说白了就是线程死锁) 6.准备整理代码... |
2013.2.13日更新:
更新内容: 1.分别为虚拟机和编译器添加一个debugMode,当值为false时可以让它们安静下来。 |
2013.3.15日更新(重要)
更新内容: 1.add 数据接口 2.add 数据线 3.add CMOS芯片 4.add 电擦写BIOS设备 5.fix 虚拟机线程偶尔(经常 ?)在登出地图时不终止 6.fix onWorldUnload函数在保存地图,但没有保存NBT信息的时候不会调用(导致问题⑤) 7.fix 错把computer写成compurter。 8.fix 某严重内存泄露。 9.remove HIM。 10.WIP:电擦写BIOS设备的文本编辑器GUI(多行文本实现亚历山大) |
2013.4.2日更新(重要)
更新内容: 1.单字可裁剪渲染函数完成(亚历山大) 2.GUI类继承结构改进 3.WIP:多行文本横向、纵向滚动条 4.WIP:文本渲染实现遮罩效果(更新①应用) |
2013.4.3日更新(重要)
更新内容: 1.文本显示部分完成(我去年买了个大金表) 2.WIP:滚动条 3.WIP:文本选中、编辑、删除等功能。 4.上图: ![]() 补充:对了这玩意支持中文 |
2013.4.9日更新(重要)
更新内容: 1.滚动条完成。 2.绑定滚动条到多行文本组件上。 3.WIP:文本选中、编辑、删除等功能。 |
2013.4.11日更新:
更新内容: 1.文本支持各方向离边框的间隔、字间距和行间距的设置。 2.WIP:文本框是否被选中的判断。 |
2013.4.12日更新(重要)
更新内容: 1.文本框是否被选中的判断。 2.光标绘制。 3.鼠标滚轮控制滚动条 4.当鼠标移动到文本框时图标从箭头变成光标 已知问题:当点击文本框时鼠标会变回箭头 解决方法:在鼠标事件中重新设置成光标 导致问题:光标在鼠标点击时闪烁 由于没找到合适的方法来解决此问题,因此暂时就这样,或者换成跟MC一样不变成光标 5.可以通过鼠标点击来改变文本光标位置 |
2013.4.13日更新:
更新内容: 1.支持方向键移动光标(纵向移动坑死人)。 2.目前GUI总体进度70% |
2013.4.14日更新:
更新内容: 1.fixed 当末尾字符不为换行符时死循环 |
2013.4.15日更新(重要)
更新内容(上午): 1.add 删除文本功能。 2.add 换行功能。 3.bug 有时候删除文本时会崩溃,正在查找BUG中。 4.fixed 有时用方向键移动光标时崩溃 5.目前MOD整体进度60%左右,考虑以后发布此MOD时进行混淆处理,防止反编译 ![]() (PS:因为某小学生说他也能做出来 XD) 更新内容(下午): 1.修复鼠标定位文本光标时闪烁的问题。 2.修复换行不管用。 3.修复一个文本选择错误。 4.多行文本控件终于完成= =(这是个大坑不解释) |
2013.4.16日更新(重要)
更新内容: 1.修复多行文本的一个问题。 2.暂时禁用编译器的注释消除功能(因为存在问题)(无法使用注释) 3.开始施工逻辑部分。 |
2013.4.17更新:
更新内容: 1.源码可以被发送到服务器编译,并返回结果。 ![]() |
2013.4.26更新:
更新内容: 1.修复了多线程环境下频繁开关机导致崩溃的问题。 2.准备清理虚拟机部分的代码,同步块太多,效率低下。 |
2013.5.5日更新(重要)
更新内容: 1.移植目前进度到1.5.2。 2.物品栏还有些问题。 3.准备在修复物品栏问题后清理代码(代码有点乱了=.=) |
2013.4.26更新:
更新内容: 1.fixed 物品栏问题。 |
2013.6.13更新:
更新内容: 1.代码清理完毕。 2.WIP 外设部分。 |
2013.6.16更新:
更新内容: 1.WIP 外设部分。 2.WIP 地图、区块的加载、卸载导致很多问题,解决中 |
2013.6.18日更新(重要)
更新内容: 1.剩余设备掉线检测部分。 2.剩余区块加载卸载导致的问题部分。 3.剩余少量渲染部分。 4.基础功能除以上部分全部完成。 5.WIP 添加 键盘、屏幕、储存器外设。 |
2013.7.19更新:
更新内容: 1.设备掉线、连接检测部分太乱,重写中。 2.干脆直接把线路系统重写,准备改造成贴底线(PS:可以在其他方块表面贴线。PPS:参考redpower中...) |
2013.7.21更新:
更新内容: 1.线路放置和方块框架计算绘制部分完毕(数学是体育老师教的,准星是否Hit方块框架判断整整耗时10分钟) 2.WIP 方块内单个电线破坏并触发方块更新。 3.方块内单个电线破坏完成(╯-_-)╯︵_|______|_ 。 4.破坏后物品掉落完成(╯° Д °)╯︵_|______|_ 。 5.触发方块更新完成(/#=皿=)/_|______|_ 。 6.WIP 数据线渲染(顽皮狗求贴图时间)。 |
2013.7.24更新:
1.数据线渲染完成。 2.WIP 新的线路遍历系统。 |
2013.8.16更新:
1.线路遍历部分和外设坐标存储部分再次重写(/#=皿=)/_|______|_ 。 |
2013.9.24日更新(重要)
1.端口(port)不再由Connector储存,只有外设才有端口。 2.线路遍历逻辑完成。 3.当wire被放置时会更新与其相关的所有设备(也就是外设部分已经可以玩了)。 4.WIP 当设备(外设和Computer)状态改变时,更新与其相关的所有设备。 5.这MOD哪有那么容易坑(喵,就是有点跳票严重XD) |
2013.9.25日更新(基本API完成)
1.fix 判断Connector是否连接有Wire时,未判断Wire方块是否底部有subBlock 2.fix 当Wire被动掉落(粘附方块被破坏)时没有重新搜索Connector 3.fix 虚拟机IN指令无效(我去,测试外设时才发现) 4.当设备状态改变时,更新与其相关的所有设备 .done。 5.外设支持部分完成(可能还有BUG),我能说在加上键盘、显示器啥的就可以撸点东西粗出来了么。 6.WIP 优化代码、找BUG。 7.fix 编译器十进制数字不支持负数 8.fix 编译器十六进制数字解析不正确 9.fix 文本编辑器在退格前启用鼠标拖动选择,并在按下退格后移动鼠标,再次按下退格程序崩溃。 10.fix 打开文本编辑器并键入至少2个空行后,鼠标点击任意一个非末尾空行程序崩溃。 11.测试效果: ![]() ![]() |
2013.9.26日更新(重要)
1.更换版本为1.6.4 2.暂时移除编辑器的鼠标光标效果 3.修复电擦写BIOS设备吞BIOS芯片 4.修复破坏Computer后吞BIOS芯片 5.临时保存文本编辑器的程序文本 6.修复虚拟机重启后没有调用外设的Start函数 |
2013.9.27更新:
1.fix 在专用服务端中碰撞箱没有正确计算。 2.fix ID重复的外设没有正确的进行ID排斥计算。 3.WIP 键盘外设。 |
2013.9.28日更新(基本外设完成)
1.键盘外设GUI完成。 2.键盘物品栏渲染完成。 3.外设端口分配器完成。 4.fix 误把部分变量名的external写成exteral。 5.键盘外设功能完成。 6.修复放置虚拟机后保存退出地图,并再次进入地图,放入BIOS芯片,开机,无法正确执行代码。 7.提供外设数据保存接口。 8.已经能玩,开始测试XD。 9.WIP 显示器外设 |
2013.9.29更新:
1.取消游戏执行一tick虚拟机执行一tick,效率影响过大 2.虚拟机不随游戏一起暂停。 |
2013.10.1日更新(国庆节快乐=w=):
1.fix 键盘无法正常计算所索引。 2.add 数字显示器 3.WIP 字符显示器 |
2013.10.3更新:
1.字符显示器完工 2.WIP 编译器“字符型”支持 3.add 编译器char型支持 |
2013.10.4日更新(重要)
1.fix 字符显示器行距少1。 2.WIP 编译器伪指令支持。 3.fix 编译器编译机器指令时若遇到参数大于4的情况崩溃。 4.add 编译器伪指令处理框架。 5.add 编译器机器指令插入函数,用于支持伪指令 6.fix 编译器在词法分析阶段无法正确识别字符串 7.fix 编译器在语法分析阶段无法正确识别字符串结束后是否有其他参数 8.add 编译器伪指令支持 9.add DAT伪指令。 10.DAT伪指令测试: 测试代码: DAT A,'A',0xFFF00000,'B',0xFFF00000 OUT 0,0,[A] ADD A,1 OUT 0,1,[A] ADD A,1 OUT 0,2,[A] ADD A,1 OUT 0,3,[A] 字符显示器输出: ![]() |
2013.10.5更新:
1.WIP 修复游戏保存问题,区块卸载问题。 2.add 在保证效率的情况下在游戏暂停时暂停 3.WIP 重复外设同步数据包过滤。 4.WIP 重启游戏后设备锁定问题。 5.add 重启游戏后设备优先被重启前的虚拟机锁定。 6.fix 设备切换Port导致ConcurrentModificationException。 |
2013.10.6日更新(开坑周年纪念日=w=)
1.fix切换自身Port导致被解锁 |
2013.10.7更新:
1.WIP VCPU-32字节码反编译器 |
2013.10.9更新:
1.add VCPU-32字节码反编译器,暂时无法反编译静态储存区的内容,如果遇到伪指令DAT则无法保证反编译结果和源程序一致 |
2013.10.12更新:
1.WIP 红石控制器 |
2013.10.13日更新(重要)
1.add 红石控制器外设,支持获取、输出红石信号,包括强度 |
2013.10.15日更新(重要)
1.开始在cthuwork小组内内测 alpha 1.0.0版 2.fixed 红石控制器外设接收红石信号非主动 |
2013.10.16日更新(重要)
1.大改VM结构 ①add 所用寄存器线程私有 ②WIP 栈指令集 ③WIP 子程序指令集 |
2013.10.17日更新(重要)
1.添加指令:PUSH、POP、DUP、SWAP、CALL、RET 2.除PC寄存器线程私有外,所有寄存器子程序(当前堆栈)私有。 3.改进调试信息输出,支持输出当前堆栈的信息 4.fixed 一堆BUG 5.WIP 虚拟机和编译器的浮点数支持,使用IEEE 754规范来实现 |
2013.10.22日更新(重要)
1.虚拟机浮点数支持,使用IEEE 754规范来实现 2.新增指令ITF、FTI用于浮点数到整形转换。 3.新增浮点数运算指令FADD、FSUB、FMUL、FDIV、FMOD 4.新增浮点数比较指令FIFE、FIFN、FIFA、FIFU 5.电擦写BIOS设备支持反编译。 6.反编译器支持静态储存区反编译。 7.WIP反编译器浮点数识别 |
2013.11.16日更新(重要)
1.Alpha版发布 XD:http://www.mcbbs.net/thread-197233-1-1.html |
以上。
BY yuxuanchiadm 2012.10.6