我想为Amiga编写一个应用程序,只是为了好玩!
请有人根据以下内容逐步发布howto吗?
有些事要注意......
我已经回答了我自己的问题,但在我打算扩展答案时,请提供更多答案.感谢迄今为止所做的一切,您一直非常乐于助人!
我正在为IDA的大型Amiga项目进行逆向工程,我取得了很大的进步.但是,有一些我无法弄清楚的东西.也就是说,我发现了几个使用我认为是"跳转表"的子程序 - 但我无法弄清楚它们是如何工作的.有人有建议吗?
moveq #0,d0
move.b d7,d0 ; set D0 to a byte from CTRL
subq.w #1,d0 ; subtract 1 from it
blt.w finish_29ABA ; if D0 is less than 1, branch
cmpi.w #$16,d0
bge.w finish_29ABA ; if D0 is greater than or equal to 16, branch
add.w d0,d0 ; otherwise, double D0
move.w dword_29918(pc,d0.w),d0
jmp dword_29918+2(pc,d0.w)
; ---------------------------------------------------------------------------
dword_29918: dc.l $400036 ; CODE XREF: serialCtrlCmd+E0j
dc.l $360036
dc.l $3601A0
dc.l $3601A0
dc.l $1A001A0
dc.l $360040
dc.l $2A01A0
dc.l $400036 …
Run Code Online (Sandbox Code Playgroud) 当我尝试使用EA iffw.c库来编写IFF文件时,我无法通过StartWGroup()调用.它在IFFWriteBytes()中失败,因为context-> ckHdr.ckSize为零.在IFFWriteBytes()里面有一个if(),它检查(size)!= szNotYetKnown.(szNotYetKnown是一个常量.)这个例子似乎表明它应该有效,但我看不出如何.IFFWriteBytes()返回CLIENT_ERROR因为nBytes是4 - 我试图保存32位int.
我失败的代码:
outfp = fopen(outfile, "wb");
ifferr = OpenWIFF(outfp, &filec, szNotYetKnown);
if (ifferr) {
return 2;
}
ifferr = StartWGroup(&filec, LIST, sizeof (ID_NATAMI_FLASH), ID_NATAMI_FLASH, &listc);
if (ifferr) {
printf("ifferr: %d\n", ifferr);
return 3;
}
Run Code Online (Sandbox Code Playgroud)
最后一次失败,StartWGroup().
IFF和XML一样简单,我可以在没有库的情况下生成它,但是使用曾经常见且经过良好测试的库会更好.
问题不是关于Amiga,但这种文件格式在Amiga上很受欢迎.顺便说一句,你知道DjVU,RMFF,AIFF,RIFF和许多其他格式是IFF还是略有变化?
更新: 易于阅读IFF描述.
我一直在阅读AROS,尤其是托管版本.AROS说如下.
Run Code Online (Sandbox Code Playgroud)kernel.resource contains AROS microkernel. It's the lowest level component, which is responsible for handling CPU and motherboard. For hosted ports kernel.resource contains a virtual machine.
从我读到的有关虚拟机的内容来看,有两种类型的系统虚拟机和进程虚拟机.我知道AROS不是一个系统虚拟机,但是所有的流程虚拟机都可以像Java JVM,Mono,Python,Ruby等一样.它们都是特定于语言的.AROS接缝是一个完整的系统/平台,在用户模式下运行,如用户模式Linux.
AROS托管:操作系统中的操作系统?
AROS最初是在基于Intel的计算机上运行的Linux上开发的.但它可以运行在更多的机器和操作系统上.这可能听起来很奇怪:运行在其他操作系统之上的操作系统,这是仿真,对吧?
AROS托管的一个很好的术语是"API仿真".API是Application Programmer接口的三个字母的缩写.用简单的英语:API提供程序员可以使用的(C语言)函数.AmigaOS API包含一系列库调用,Amiga程序员可以使用它来制作Amiga程序.AROS模拟AmigaOS API:它尝试提供与AmigaOS相同的库调用.Amiga仿真器,如阿联酋; 模拟Amiga计算机:处理器,连接的硬件,一切.这有其优点,例如能够在不同硬件上播放二进制Amiga游戏,以及它的缺点,例如无法在"真实"处理器上将模拟器用作"真实"OS.AROS托管在"真正的"处理器上运行.但它不是"真实的" 操作系统,除非你以不需要Linux的方式运行.这被称为"原生"AROS.
AROS可以在Intel和Amiga计算机上本机运行,但不如在Linux上运行.AROS库函数首先在Linux下运行,内部使用Linux内核和库调用.这样,程序员就有机会首先关注整个系统的实现,并在以后的体育场中打扰技术细节.人们正在努力使"原生"AROS更加有用.结果非常令人印象深刻,完全可以将AROS-native用作IBM PC兼容机器上的真实(且唯一)操作系统.
当然,AROS不仅仅是一个API模拟器.它还试图为所有AmigaOS 3.1系统软件提供替代品,你也会发现AROS附带的一些演示和游戏,只是为了表明它们有效 - 我们可能只占整个系统的77%,但我们已经有Quake运行了!
从这些信息中可以看出,当用作虚拟机时,AROS kernel.resource只是包装了Linux内核的系统调用接口?或者我错过了什么
另外还有像AROS这样的其他系统吗?
我想制作一些可以在许多操作系统上托管的东西.
继续" 如何编写和编译Amiga应用程序? "问题,需要哪个开发库才能从软盘启动Amiga应用程序?
更新:(2012-04-10)为了解决问题的解决,我编辑了标题和正文,只关注图书馆.仍然缺少从软盘部署工具启动,可以在另一个问题中询问.
我正在尝试解压缩一个最初使用AMOS Pro扩展压缩的数据文件,这是AMOS Pro编译器附带的旧Amiga BASIC语言.我仍然使用编程语言并可以访问压缩器和解压缩程序,但我正在尝试使用C解压缩文件.我最终希望能够在现代硬件上查看这些文件而无需使用Amiga首先是模拟器.
然而,没有关于压缩器如何工作的文档,所以我试图仅仅通过观察其行为来对其进行逆向工程.这是我到目前为止所得到的.
这是一个原始文件(ASCII):
AABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZ
Run Code Online (Sandbox Code Playgroud)
这是压缩版本(十六进制):
D802C6B5
05048584
4544C5C4
2524A5A4
6564E5E4
15149594
5554D5D4
3534B591
00000007
AD763363
00000051
Run Code Online (Sandbox Code Playgroud)
使用各种文件进行测试给了我一些见解:
前4个字节似乎代表序列长度.在上面的例子中,值0xD8
是11011000
二进制的; 镜像它(位是反向的)你得到的00011011
,0x1B
十六进制或十进制的27.这匹配序列长度.
但是,我没有取得任何进展.这看起来像标准压缩算法吗?接下来我该尝试什么?
很久以前,我为Commodore Amiga制作了一些游戏.全部在68000汇编完成(所以我仍有源)
我想将这些游戏移植到现代平台,而不是托管模拟器,我想到将Assembly转换为C,并添加SDL层.
关于如何处理68000 - > C转换部分的任何想法?(不是手动而是自动.如在转换器中)
我只想创建一堆与寄存器名称相似的变量,然后像这样转换:
MOVE.l #23, d7
Run Code Online (Sandbox Code Playgroud)
成
MOVEL(23, d7);
Run Code Online (Sandbox Code Playgroud)
我唯一不确定它是如何工作的是分支和子程序.我想我可以使用一个非常大的switch语句,并且有任何标签我可能会跳到case case语句.
有什么想法吗?我可以从任何现有技术中汲取灵感吗?
还记得Amiga boing演示吗?我正在读Amiga文章25周年,他们提到了这一点.带回了一些回忆.我记得一个WPF(当时称为Avalon)演示放在一起模仿它.我做了一些谷歌搜索,并在这里找到它.但是,当我尝试在VS 2010中构建(重新定位到CLR 4.0 Client Profile)时,XAML标记和代码隐藏充斥着错误似乎已经过时了.是否有任何能够并愿意将其带入这十年的WPF大师?这对我来说理解WPF/XAML堆栈有很长的路要走.谢谢!
编辑:我正在使用我刚才在这里找到的稍微更新的版本.
编辑第二个:我已经得到它编译并显示漂亮的渐变蓝色背景,但不是弹跳格仔球.问题是我找不到现代的等价物:
<x:Include x:Content="{ball}" />
Run Code Online (Sandbox Code Playgroud) 如果hyperion发布amiga到另一个平台,今天,它会做得好吗?我很乐意为amiga平台开发.我确实想念它.
我们需要什么?
顺便说一下,我意识到这不是一个问题,更多的是amiga未来的愿望清单.
HTML十六进制颜色用6位数字写成(3个字节,一个所谓的A hex三元组).Amiga的颜色寄存器采用一个字(2字节,16位)来定义颜色.
例:
必须有某种算法(或/和)一些工具,可以轻松地在HTML颜色和Amiga颜色注册表之间进行转换?或者?...请帮忙:)
任何人都可以发布一些源代码,当编译(如果需要)并运行时,将在Amiga上产生'Guru Meditation Error'.
汇编程序,C或ARexx都可以.
谢谢.
我有一个学校的编程项目,只要我们证明自己的编程技能,该课程是免费的,我身边有amiga 500,我想知道我是否可以为此做游戏?也许没有什么复杂的,我知道系统的局限性,但是是否可以在Windows 10 pc上使用仿真器对其进行测试,然后再将其刻录到磁盘上?我是否也可以将comodore disquette放在USB磁盘读取器中以读取代码?还是从中学到任何东西?谢谢 !
amiga ×12
68000 ×3
assembly ×3
c ×2
algorithm ×1
binary ×1
boot ×1
compression ×1
file-format ×1
floppy ×1
hex ×1
html ×1
interop ×1
kernel ×1
microkernel ×1
transpiler ×1
wpf ×1
xaml ×1