我一直在为MOS 6502设计仿真器,但我似乎无法让ADC和SBC正常工作.我正在使用在模拟内存中加载到0x4000 的AllSuiteA程序测试我的模拟器,而对于test09,我当前的ADC和SBC实现只是没有得到正确的标志.我已经尝试过无数次更改算法,但每次,进位标志和溢出标志都足够重要,并导致测试分支/不分支.
内存[0x10000]是累加器.它存储在存储器范围之外,因此我可以使用单独的寻址开关语句.
这是我对这些功能的一种实现:
case "ADC":
var t = memory[0x10000] + memory[address] + getFlag(flag_carry);
(memory[0x10000] & 0x80) != (t & 0x80) ? setFlag(flag_overflow) : clearFlag(flag_overflow);
signCalc(memory[0x10000]);
zeroCalc(t);
t > 255 ? setFlag(flag_carry) : clearFlag(flag_carry);
memory[0x10000] = t & 0xFF;
break;
case "SBC":
var t = memory[0x10000] - memory[address] - (!getFlag(flag_carry));
(t > 127 || t < -128) ? setFlag(flag_overflow) : clearFlag(flag_overflow);
t >= 0 ? setFlag(flag_carry) : clearFlag(flag_carry);
signCalc(t);
zeroCalc(t);
memory[0x10000] = t & 0xFF;
break; …Run Code Online (Sandbox Code Playgroud) 最近,我一直试图打破我在编程中的一个主要弱点,即随机生成.我认为这样做很容易,但缺乏简单的信息会让我感到害怕.我不想音哑,但感觉对我来说,大部分信息来自类似的地方这是为谁去上大学理论数学毕业数学家写的.我只是不明白我对这些信息的意图,以便将它应用于使用python等语言进行编程.
我已经工作了几天盯着方程式并试图尝试尝试,但仍然在所有那些日子之后,一次又一次地撕开我的代码之后,所有这一切都正常工作,这个噪声发生器产生基本的噪音:
import random
import math
random.seed(0)
def generateWhiteNoise(width,height):
noise = [[r for r in range(width)] for i in range(height)]
for i in range(0,height):
for j in range(0,width):
noise[i][j] = random.randint(0,1)
return noise
noise = generateWhiteNoise(50,12)
for i in noise:
print()
for o in i:
if(o == 0):
print('-',end='')
else:
print('#',end='')
Run Code Online (Sandbox Code Playgroud)
此代码生成此结果:
##-######--#--#-#--##-###-###---#-##-#-----#--##-#
#-#-##-##-#----##------##--#####-#-##---#--#-##---
-------#-#------#---#-#---###--#--#-###-----##-#--
######--#-#-#--####-###---#---###-##--#-#-##--####
-#----###--------##--##--##-#-#--#----###-####--##
---####-#--#--###-#-#--#--#####--####-#-##-##--#--
----#--####-#-#-#-#-#---#--###------###--#-######-
--###--#-###-------#-##--###---#-####----###-#####
#----##--##-#--##-###--#----#-#-##--##-#-##---###-
##---##----##--##--#--#--###-###-#--#-##---#------
-##----#-###---######---#-#---#---###---#---###-##
#--##-##-###-###---#--##-##--##-##-#-#-##--#-#-##-
Run Code Online (Sandbox Code Playgroud)
我希望它最终产生这样的东西:
--------------------------------------------------
------------------####----------------------------
-----------------#####----------------------------
----------------#####-----------------------------
---------------#####--------------###-------------
---------------#####--------------###-------------
---------------------------------####-------------
---######------------------------####-------------
---######------------###--------------------------
----########---------###--------------------------
-----#######---------###--------------------------
------###-----------------------------------------
Run Code Online (Sandbox Code Playgroud)
如何设法消除我产生的白噪声并将其变成岛屿?任何人都能以一种非常简单的方式为我解释它吗? …
在处理在JQuery上运行的语法高亮显示器时,我发现了一个相当奇怪的问题.我创建的函数似乎几乎破坏了它所放置的任何循环.但是,在循环之外,它的工作完全正常.
有问题的功能是:
function findQuoted(s)
{
var Quote = 0;
var F = 0;
var L = 0;
var Strings = Array();
for(i = 0;i < s.length;i++)
{
if(s.charAt(i) == '"' && Quote == 0)
{
Quote = 1;
F = i;
}
else if(s.charAt(i) == '"' && Quote == 1)
{
Strings[Strings.length] = s.substring(F, i + 1);
Quote = 0;
}
}
return Strings;
}
Run Code Online (Sandbox Code Playgroud)
如果在任何循环中执行此操作,由于某些奇怪的原因,循环就会停止工作,并且只运行一次.
在此示例中,警报消息在继续执行程序之前仅显示一次.请记住,程序永远不会卡住或无响应,循环停止运行.
for(i = 0;i < 5;i++)
{
alert(findQuoted('"Test" this is a test "test" …Run Code Online (Sandbox Code Playgroud) 我对char指针有一种奇怪的行为.根据我对指针的了解,我应该能够通过向其添加一个指向我的char指针的每个指向字符,因为char是一个字节.但是,似乎并非如此,使用增量运算符+ =,++,甚至将char指针设置为等于自身加一.这些都没有像人们想象的那样影响指针.如果我只是在我的char指针中添加一个数字或一个变量,它就像人们期望的那样完美地工作.
这不起作用:
void getNextWord(FILE * pFile)
{
char * w = (char *)malloc(MAX_WORD_SIZE * sizeof(char *));
char c;
while(c != ' ')
{
c = fgetc(pFile);
if(c != ' ')
{
*(w++) = c;
}
}
*(w++) = '\0';
printf("%s",w);
}
Run Code Online (Sandbox Code Playgroud)
这确实有效:
void getNextWord(FILE * pFile)
{
char * w = (char *)malloc(MAX_WORD_SIZE * sizeof(char *));
int i = 0;
char c;
while(c != ' ')
{
c = fgetc(pFile);
if(c != ' ')
{
*(w + i) = …Run Code Online (Sandbox Code Playgroud) 我一直用kbhit()测试一些东西,并发现了一个带有延迟无限循环的奇怪行为.在此代码示例中,我将循环延迟为每秒运行30次.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
_Bool IsKeyDown(char c)
{
if(kbhit())
{
char ch1 = getch();
if(ch1 == c)
return 1;
}
return 0;
}
/*
*
*/
int main(int argc, char** argv) {
while(1)
{
if(IsKeyDown('a'))
{
printf("HELLO\n");
}
if(IsKeyDown('b'))
{
printf("HI\n");
}
Sleep(1000 / 30);
}
return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
问题是,虽然循环中的第一个if语句工作正常,但第二个if语句几乎不起作用.如果在此示例中按住"a"键,则会无限期地打印HELLO.如果您按住'b'键,HI几乎不会打印出来,如果有的话.
为什么会出现这种情况?