问题标签 [retro-computing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 用于像素混合的调色板量化
对于使用硬件调色板的图形模式,可以通过在两个图像之间快速切换来实现更多颜色的错觉(我不知道任何通用名称)。
有什么算法可以从普通的全彩色图像计算出最佳(或半最佳)调色板?两个目标图像要么共享相同的调色板,要么拥有自己的调色板。两种情况的算法都很有趣(如果它们根本不同)。
一个例子:假设我有一个随机的全彩色 PNG 图像,有数千种颜色(每个通道 8 位,完全不透明),并且想要创建两个 GIF 图像(非动画),每个图像有 256 种颜色。假设我每帧(以 60Hz 的帧速率)在这些 GIF 图像之间切换,因此结果显示为两个图像之间的混合。问题是:如何计算两个 GIF 文件之间共享的最佳调色板?或者两个不同的调色板,每个文件一个?(这两种情况都很有趣)。
更新:
只是为了创建一个我想要做的例子,我通过使用随机突变进化一个合适的调色板来强制一个结果。为了便于在 2D 中可视化,我使用了去除了蓝色通道的图像。这是原来的样子。
颜色分布如下所示。除了一些使用高达 90 次的深(几乎是黑色)灰色和一些使用约 30 次的亮黄色之外,使用的颜色之间的使用分布非常均匀。
这是我想出的 16 色调色板。我不知道它离最佳调色板有多远,但它似乎很接近。
混合来自两个图像的颜色会产生更大的颜色集。多大取决于颜色之间的允许距离(距离越大,闪烁越明显)。最大距离为 100。
这些混合颜色很好地覆盖了色彩空间,如图所示,它显示了从每种原始颜色到最近(混合)调色板颜色的距离。一些边缘颜色的距离可达 40。但几乎所有颜色的距离都不到该距离的一半。
这是然后将两个图像转换为使用此调色板的结果。首先是两个 16 色图像,然后是混合结果(理想情况下看起来完全没有任何可见闪烁)。
发现差异并不容易(当然取决于您拥有的显示器)。所以这里有两张只是差异的图像。左边的值与实际差异成正比,右边的值夸大了它们,以便在出现最大差异的区域变得更加直观。(显然,与在 3D 色彩空间中操作相比,会有更大的差异。)
我知道(但假设的)结果也可以通过应用抖动来改善。而且我知道颜色之间距离的视觉感知在整个色彩空间中并不是恒定的。更不用说那些依赖硬件的小东西了。但首先要做的事情...
javascript - Javascript 1.1 / HTML 3.0 音频播放器
我正在构建一个 Dreamcast 网站,但机器无法识别任何比 HTML 3.0 和 Javascript 1.1 更新的代码。我想在网站上有一个音频播放器,最好是可以从在线广播电台流式传输的音频播放器,但是所有基于 Flash 的播放器都失败了,我正在努力寻找不是 HTML5 或 CSS 的信息。
有谁知道如何将旧版播放器/流媒体放置到与无线电流链接兼容的站点中(任何使用 IP 和端口信息来收听流的东西都因 Flash 的死亡而失败)。
谢谢你。
assembly - 标签如何在 Assembly 中执行?
我对组装很陌生,所以请放轻松,但我对标签感到困惑。我只是不明白它们是如何工作的。它们是函数,还是一个结束另一个开始?我的意思是说有 2 个标签
Label1 会执行然后结束,还是会移动到 Label2 并执行它?对不起,如果这是一个非常基本的问题,但 io 并没有真正理解它。
string - 向串行错误发送字符串,6809 程序集,初学者
我已经构建了一个简单的单板计算机,并且正在尝试学习 6809 汇编语言。我有一些简单的事情正在运行,例如通过 6850 ACIA 进行 Echo。我正在尝试打印一个字符串并且被卡住了。
该字符串在 ROM 中并以空零终止。我加载 X 寄存器以指向字符串的开头。稍后我将 X 指向的字符加载到 A 寄存器,并且 X 递增。然后在将字符输出到 ACIA 之前测试空零。我已经将一个简单的逻辑分析仪连接到数据总线,并且知道没有任何内容输出到 ACIA,因为它看到的是零而不是第一个字符,并且认为字符串已经完成。我看不到代码中的错误,它可能与硬件有关,但需要有经验的眼睛来检查它,以防我犯了初学者错误。
这是组装:
sprite - MS-DOS 中的默认鼠标光标如何在不擦除其下方的任何内容的情况下工作?
我对VGA图形的理解可能有缺陷,但它似乎只有一层图形,而MS-DOS(或至少DOSBox)中的鼠标光标似乎与下面的图形无关,很像“精灵层”在当时的大多数视频游戏机上。然而 DOSBox 的 VGA 模式似乎是一层位图屏幕。鼠标是否位于只有它才能占据的单独图层上?此外,有没有办法让 VGA 输出硬件精灵?
assembly - 是否可以在 DOS 中使用“直接模式”播放 PCM 声音 (.WAV) 并同时显示动画?
我有这个工作代码,以便在 DOS 中使用“直接模式”播放 PCM 声音 (.WAV): ASM 代码在 DOS 中播放 .WAV
它完美地工作(包括时间等)。
但是我想改进这段代码,所以在播放 .WAV 文件的同时,我想以 320*200 视频模式显示动画。我也想更改内存页面,如下所示:
那么如何合并这两个代码呢?如何在 DOS 中播放 .WAV 文件并同时显示动画?这也很酷,如果显示的帧和播放的“音乐块”可以以某种方式同步,如果你的机器速度较慢,如果你可以显示例如 5 帧/秒,那么你应该听到 5 个“音乐块”/第二。换句话说:更少的帧/秒 -> 更慢的音乐。反之亦然:如果动画太慢,则跳过帧。上面提到的播放.WAV文件的代码有一个等待循环,可能我们可以把动画代码放在这里,但是两个代码都使用ES寄存器和东西,所以它们不能轻易合并。如何解决寄存器冲突?
c - 链接器插入不必要的操作码填充
我最近在为基于 Motorola 68000 的系统(SEGA Mega Drive)链接多个目标文件时遇到了一个小问题。问题是,当一个目标文件的输入段结束而下一个开始时,链接器用零填充内存地址,以便下一个目标文件开始在四字节边界上对齐。下面的文本是链接器输出的内存映射。如您所见,.text 输出部分包含三个目标文件。前两个(main.o、swap.o)是用 C 语言编写的,使用m68k-elf-gcc编译和组装。第三个(swap_asm.o)是用68000汇编手写的,使用vasm组装. swap.o 开头的函数通常从地址 0x0000001E 开始。但是,链接器用两个字节*填充*swap.o文件的开头,特别是0x0000。所以,swap.o 从 0x00000020 开始。但是,swap_asm.o 没有对齐,而是从一个非四字节对齐的地址 0x00000036 开始。有没有办法让链接器不添加任何填充并立即启动 swap.o?我知道有一些解决方法,比如用 NOP 填充空间,但我想知道是否有办法不做 *fill*?
mainframe - 60 年代的数据库只用胶带/打孔卡加入?
我们是一家大公司,通过电话向数以万计的客户销售冷冻服务。订单记录在打孔卡上,具有
- 客户 ID
- 一个约会
- 购买的美元金额。
为了将这些处理成每月给我们的用户的账单,我们准备购买足够现代的计算机设备来满足 60 年代的需求。我想我们会将我们的用户数据库存储在磁带上(......因为......你可以用 60 年代的技术存储大量数据,对吧?)。
销售记录打孔卡未分类。即使磁带上的记录是按例如客户 ID 排序的,对每个进入的穿孔卡/客户 ID 进行一次“搜索”/查找(以更新例如“总和”金额)也会非常慢。同时,如果您有例如 256k 的 RAM(甚至更少?),则数据集的重要部分将不适合。
我的问题是:如何在实践中完成这个数据库操作?您是否先对打孔卡进行分类,然后线性穿过胶带?您甚至如何对打孔卡进行分类?还是先将它们全部复制到磁带上?您是否需要多个批处理作业来完成所有这些工作?其中有多少是我们必须编写的代码与操作系统附带的东西?
(......是的,我听说过那些带有旋转金属盘的冰箱大小的设备,每秒可以随机搜索多次;我认为我们买不起这些。)
wii - 无法写入/读取 Wii 系统内存。错误追溯
我在 Retroarch 的 Xbox 上使用 Mario kart Wii,当我打开它时说无法写入/读取 Wii 系统内存。帮助?