×

使用Arduino MKR1000为BBC Micro添加Internet连接

消耗积分:0 | 格式:zip | 大小:0.98 MB | 2022-11-18

学电超人

分享资料个

描述

该项目使用带有 WiFi 的 Arduino MKR1000 为 1980 年代的 BBC Micro 添加了 Internet 连接。

BBC Micro 可以在bbcmicro.co.uk存档中搜索游戏光盘图像,并直接从网络加载它们。

还有更多工作要做,但到目前为止,Chuckie Egg、Frak、Repton、Pac-Man、Knight Lore、Jetset Willy 的测试还可以。:)

 
poYBAGN27R6AYsbCAAESPHV6jW0404.jpg
在 BBC Micro 上搜索和加载游戏

背景

我最近得到了我的第一台 Arduino MKR1000,并注意到它非常适合戳到我的 BBC 微型键盘侧面的“烟灰缸”孔中(该孔自 80 年代以来一直存在......)。所以,我想我会尝试连接它们。

该项目建立在Acorn 社区努力在 Arduino 中实现 BBC Micro 文件系统主机的基础上。HostFS 非常强大——在这种情况下,它使 Arduino 能够为 BBC Micro 执行文件系统命令。

bbcmicro.co.uk上有数百款游戏以 Acorn DFS 磁盘映像 (.SSD) 形式存储。该项目使 BBC 能够支持两个新命令,*SEARCH 和 *MOUNT,允许 BBC Micro 搜索这些图像中的任何一个并将其安装为虚拟“软盘”。

当 BBC Micro 发出 *LOAD 时,它会向 Arduino 发送请求。通过使用 HTTP 范围请求,Arduino 可以从 Web 服务器加载光盘映像的特定内存区域 - 并将它们中继到 BBC Micro。

设置

阿杜诺素描

Arduino 需要连接到您的 WiFi 接入点。您需要在 secrets.h 文件中定义 SSID 和密码

在 ArduinoHost.ino 中编辑代码中定义的 IP 地址、网关和 DNS 或删除它们以启用 DHCP 客户端。在 ArduinoHost.ino 中查找这一行:

//Edit this section for static IP, remove for DHCP

根据需要进行编辑,编译并上传到 Arduino MKR1000。

BBC 微型ROM

在我们的项目中,BBC Micro 成为 Arduino 的文件系统客户端。换句话说,您在 BBC 中键入的每个磁盘命令都会发送到 Arduino 进行处理。这开辟了很多可能性!

为此,必须下载UPURSFS 客户端 ROM 映像,烧录EPROM并插入备用 BBC Micro ROM 插槽。

BBC micro 有一个内部 PSU,因此存在电源电压。务必关闭机器并在操作时小心。我发现 BBC micro 是一台强大的机器,但您所做的任何修改或添加都需要您自担风险!

将 Arduino 连接到 BBC Micro

然后将 Arduino 连接到 BBC 用户端口以进行UPURS连接——这为我们提供了 115200 波特串行。

所有信号都进行电平转换:BBC 为 5v,Arduino 为 3.3v——我们使用双向电平转换器来实现。在 BBC 方面,ROM 假定 RX 和 TX 电平是相反的。我们使用外部十六进制逆变器 (SN74ACT14N),因此 Arduino 提供标准 115200 波特串行。

因此,您将 Arduino 连接到面包板,并将面包板连接到 BBC 微型用户端口 - 有关如何将面包板放在一起的信息,请参阅硬件部分。

用法

加载游戏

在 BBC Micro 开机的情况下

  • 您应该在启动时看到 HostFS:UPURS。如果没有,请按 +U
  • 搜索 bbcmicro.co.uk(目前返回的结果数量有限)
> *SEARCH ARCADI
  • 从搜索结果中选择要安装的光盘映像编号。
> *MOUNT 3
  • 运行游戏!
CHAIN"ARCADIA"

节省

*SAVE 当前将 BBC 内存区域发送到 Arduino 串行监视器。

所以当在 MODE 7 中,输入

> *SAVE A 7c00 8000 

将 BBC 屏幕发送到 Arduino 控制台

去做

这是我的第一个 MKR1000 项目,我对开始非常满意!

但是还有很多事情要做。仍然需要大量的整理、调试和优化。而且很多 TubeHost 功能还需要实现。

(是的,您可以将游戏从 PC 下载到 SD 卡上,然后为 beeb 购买 MMC 插件,但这有什么好玩的!)

电子邮件、网络浏览……图文电视浏览!?有很多可能性...

希望这个项目能激发该领域的更多发展。:-)


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'使用Arduino MKR1000为BBC Micro添加Internet连接',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);