问题标签 [65816]

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.

0 投票
2 回答
569 浏览

c - 这个汇编代码中的进位标志是如何设置的?

给定以下 16 位 PRNG 函数的汇编代码,

名为@sagara 的用户将代码翻译为 C:

我对两件事感到困惑。

  1. 在这一行...

    为什么有一个+ 1?我认为是ADC操作的原因,但是我们如何确定进位标志设置为 1?以前的哪些操作可以保证这一点?XBC? _ 我阅读了一些帖子,例如Assembly ADC (Add with carry) to C++Overflow and Carry flags on Z80但我不清楚,因为指令集似乎不同我不熟悉65C816 汇编。(这是 1994 年流行的 SNES 游戏,它的北美发行周年纪念日刚刚过去;免费投票给正确的猜测 :-)

  2. 在下一行...

    为什么会这样?我将其读作“当且仅当高字节非零时设置进位标志”。但是,如果高字节为零,难道不是溢出的指示(我可能误解了这条线在做什么。)

提前感谢您的任何见解。

0 投票
1 回答
474 浏览

assembly - How to modify sprite position using 65c816 Assembly for the SNES?

I am trying to modify my sprite's position, but I can't figure out how to

I have spent hours searching for answers, but none of which work with the assembler I am using: WLA-DX. I am extremely new to 6502 assembly, so forgive me if my logic is really skewed. I was following the tutorial on georgjz's tutorial on GitHub. My sprite is just a single colored square and the pallet is the default pallet that comes with yy-chr

Header.inc

Snes_Init.asm

Testing.asm

I am trying to at least get the sprite to move to the right 1 pixel per frame, but the sprite isn't moving at all

===========================================================================

Edit: I added the code from the comment by @Michael, and nothing has changed. Here is the code that I updated:

Snes_Init.asm

Testing.asm

and I added the MoveSprite subroutine after CGRAMLoop

0 投票
0 回答
42 浏览

assembly - “beq [label]”如何产生超出范围的错误?

我正在尝试编译此代码片段,但我一生都无法理解汇编程序错误:

在这段代码提取中,我得到了这个汇编错误:

第 264 行将指:

RW_forced 是在一个库中实现的,实际上他们应该做的就是输出应该可以工作的 sep/rep 指令和 .a8/.a16 宏。但这是他们的实现,对我来说看起来不错:

我的问题是,到底是怎么回事,beq col_d或者它周围的任何东西超出了范围?130在哪里?这是汇编程序中的错误吗?

作为参考,如果我将 EITHER callflag 调用更改为没有 RW_forced 调用的另一个版本,则代码会组装(但错误)。

0 投票
1 回答
59 浏览

commodore - 如何重新定位 65816 上的零页面

背景资料

作为一个对 8 位技术有过兴趣的现代 PHP 开发人员,我对真正的低级东西有点粗略。虽然我曾使用过 Z80 处理器,并在大学完成了一些 MIP 组装,但我对 65x 处理器系列的了解最少。

我想要达到的目标

我想要做的是将我的应用程序的零页面重新定位到 0xd300 - 我有一个强制性的互联网搜索,但我无法找到一个我能够理解的好例子。我在 65c02 但在 65816 处理器上工作;感谢一位朋友,我发现您只能在本机模式下重新定位零页面,而不是模拟模式,因为 65c02 不支持它。这不是问题,因为我可以切换到本机模式来执行我正在做的事情,并在我想优雅地返回到 BASIC 时恢复到仿真模式(嗯,不仅仅是我知道的)。

如果有人也可以提供 8502 (Commodore C128) 的示例,我知道它有一个可重定位的零页。我知道这是两个问题,但这与我想做的事情有关。