我正在制作一个6502仿真器,并且我已经在开始时(或者我认为我至少)(实现ADC操作).问题是我必须确定是否存在进位或溢出.问题是,在我的实现中,我无法真正理解它们之间的区别.我知道进位是在操作后出现第9位的时候,我知道当结果大于255时会发生溢出.这不是确定进位和溢出标志是一样的吗?
if(result > 255) {
carry = 1;
overflow = 1;
} else {
carry = 0;
overflow = 0;
}
Run Code Online (Sandbox Code Playgroud)
这不正确吗?如果不是,那么什么是正确的,为什么?
我有这个简单的服务器/客户端应用程序 我正在尝试让服务器通过OutputStream(FileOutputStream,OutputStream,ObjectOutputStream等)发送文件,并在将其保存到实际文件之前在客户端接收它.问题是,我已经尝试过这样做,但它一直在失败.每当我创建文件并将从服务器收到的对象写入其中时,我都会得到一个破碎的图像(我只是将它保存为jpg,但这无关紧要).以下是最有可能出现故障的代码部分(您在此处看到的所有看似未声明的对象都已预先声明):
服务器:
ObjectOutputStream outToClient = new ObjectOutputStream(
connSocket.getOutputStream());
File imgFile = new File(dir + children[0]);
outToClient.writeObject(imgFile);
outToClient.flush();
Run Code Online (Sandbox Code Playgroud)
客户:
ObjectInputStream inFromServer = new ObjectInputStream(
clientSocket.getInputStream());
ObjectOutputStream saveImage = new ObjectOutputStream(
new FileOutputStream("D:/ServerMapCopy/gday.jpg"));
saveImage.writeObject(inFromServer.readObject());
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是我无法在没有损坏文件的情况下正确地通过流获取对象.
我已经成功地模拟了任天堂娱乐系统的(稍微交替的)6502 核心,现在我在 PPU 模拟上有点卡住了。
在各种文档中,PPU 有 0x4000 (16KB) 字节的可用内存。其中只有 2KB 是内部 RAM,而其余部分在墨盒上(或类似的东西)。我不明白的是,PPU 使用了模式表、名称表、属性表、背景调色板和精灵调色板(在我的脑海中)。所有这些东西都存放在哪里?我知道一个 CHR 内存条的大小是 8KB,所以即使 ROM 有多个图形内存条,PPU 怎么知道在哪条内存条中,要找到这些表/调色板中的哪一个?而且有的游戏甚至没有CHR内存,一切都存储在PRG内存中。我怎样才能找出所有图形的存储位置以进行仿真?
编辑:我已经添加了我自己的解释作为答案,因为我现在对 NES 的内部工作有了更多的经验。
我在Java中有一些文本,我想使用模式和匹配器从中提取一些东西.这是我的计划:
public String getItemsByType(String text, String start, String end) {
String patternHolder;
StringBuffer itemLines = new StringBuffer();
patternHolder = start + ".*" + end;
Pattern pattern = Pattern.compile(patternHolder);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
itemLines.append(text.substring(matcher.start(), matcher.end())
+ "\n");
}
return itemLines.toString();
}
Run Code Online (Sandbox Code Playgroud)
当搜索到的文本在同一行时,此代码完全有效,例如:
String text = "My name is John and I am 18 years Old";
getItemsByType(text, "My", "John");
Run Code Online (Sandbox Code Playgroud)
立即从文本中抓取"我的名字是约翰"的文字.但是,当我的文字看起来像这样:
String text = "My name\nis John\nand I'm\n18 years\nold";
getItemsByType(text, "My", "John");
Run Code Online (Sandbox Code Playgroud)
它没有抓住任何东西,因为"我的"和"约翰"在不同的行上.我该如何解决这个问题?
我之前曾问过一个类似的问题,关于如何编写模拟器,当我看到答案并查找一些开源游戏模拟器时,我发现除了对"低级"语言的中间理解之外,还有更多的需要. (即C).我真正想知道的是,我需要了解HARDWARE才能编程这样的模拟器.我正在接近Java的"相当不错",但这对我没什么帮助.我已经开始学习C了,我现在已经走了很长一段路,但我很想知道我必须要在硬件上学习什么才能编写这样的控制台模拟器.
我问这个问题的原因是我一直在互联网上搜索关于模拟的书籍和来源,每当我遇到一个模拟器教程时,它总是喜欢"你需要对C的基本理解能够跟随本教程"当我尝试遵循它时,我不能,因为我不知道到底是怎么编程的.我对硬件一无所知.(我的父亲努力将他的显示器连接到他的电脑上可能更了解它)
所以我的问题是,我需要学习什么(微处理器,内存等?)并且有没有任何好的资源可以教我这些东西,而不必为了它或其他东西上大学(已经做软件工程) )?
如果这不是一个真正的问题,或者不够清楚,或者类似的话,我道歉.我对这个问题非常感兴趣.
我正在摆弄按位运算符,我试图将负字节转换为无符号 8 位值,这就是人们的建议:
System.out.println(-20 & 0xFF); //bitwise AND on negative number and 255
Run Code Online (Sandbox Code Playgroud)
所以,这工作得很完美,并返回 236,但为什么呢?就我而言:
00010100 //binary representation of -20
11111111 //binary representation of 0xFF or 255
--------
00010100 //it returns the same exact thing, so it's either -20 or 20
Run Code Online (Sandbox Code Playgroud)
为什么它有效?我想我错过了一些非常简单的事情,但我似乎无法理解它。
另外,如果我使用低于 256 的正数,它会返回相同的数字。我似乎无法理解 Java 如何处理这些数字。
我试图通过地图项目的列表进行迭代,即包含HashMap或类似的东西的一个ArrayList,我试图做到这一点在primefaces数据表.这基本上就是我要做的事情:
<body>
<h:form>
<p:dataTable value="#{customerBean.list}" var="map">
<c:forEach items="#{map}" var="entry">
<p:column headerText="#{entry.key}">
#{entry.value}
</p:column>
</c:forEach>
</p:dataTable>
</h:form>
</body>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,customerBean.list是List<Map<String, String>>和条目是一个Map<String, String>.
我想要做的,是营造列的动态量的基础上,在条目数量Map<String, String>使用的标题名称映射条目的键的同时,和值作为输出.c:forEach当我使用硬编码时Map<String, String>,这个东西似乎工作正常,但显然它无法循环通过变量p:dataTable.我假设该程序采取预防措施,以避免必须循环不同大小的地图.那么我怎么能做这项工作呢?如何根据Map中的条目数创建任意数量的列?请注意,我100%肯定每个人Map<String, String>的身材都相同List<Map<String, String>>
编辑:
这是我的豆源.代码工作正常,一切,问题只是循环不愿意通过我的地图:
@ManagedBean
@SessionScoped
public class CustomerBean {
private List<Map<String, String>> list = new ArrayList<Map<String, String>>();
private Mapper mapper = new Mapper();
public CustomerBean() {
list = mapper.all(); //gets data from database
}
public List<Map<String, String>> getList() { …Run Code Online (Sandbox Code Playgroud) 看,我必须检查50多个URL的有效性,我假设捕获超过50个例外是有点超过顶部.有没有办法检查一堆URL是否有效而不将其包装在try catch中以捕获异常?另外,只是fyi,在Android中,类"UrlValidator"不存在(但它确实存在于标准java中),而且还有UrlUtil.isValidUrl(String url),但是这个方法似乎很满意你扔的任何东西只要它包含http:// ...任何建议?
我通过套接字发送一个字节数组,我通过DataInputStream接收它.我不知道字节数组的大小,也没办法检查.我试过这样做:
byte[] content = new byte[ARRAY_SIZE];
int something;
while((something = inFromStream.read()) > 0)
output.write(something);
Run Code Online (Sandbox Code Playgroud)
但是,这仍然意味着我需要知道字节数组的大小.我不想只填写一个巨大的数字(因为从流中接收的字节数组可能是100或甚至5000000000).我该如何处理(最好使用标准的Java API /库)?
我需要一个 Java 中的无符号 8 位整数,而 char 似乎是唯一接近于此的东西。虽然它的大小是原来的两倍,但它是无符号的,这使得我想用它来做什么(编写一个需要无符号字节的基本模拟器)很实用。问题是我听其他程序员说不应该以那种方式使用 char 而应该只使用 int 左右。这是真的吗,为什么会这样?
我在这里有一个基于XScale/ARMv5的小型设备,尽管ARM是一种流行的架构,但我找不到基于中间操作系统的ARM组件上的教程或任何简单的教程.例如,有一些X86"Hello World"教程显示了存储字符串的位置以及如何中断CPU以刷新屏幕,但我找不到类似ARM的任何内容.
在哪里可以找到有关编程裸机ARM处理器(基于系统)的信息?我想写一个简单的"Hello World"程序,但我不知道如何继续.
在几个月或一年内(如果可能的话)我希望能够为Gameboy编写一个模拟器(我听说这是最简单的模拟器之一).我知道要学习这一点,我首先需要了解各种硬件,以及一切如何工作以及诸如此类的东西.你能告诉我从哪里开始学习吗?我知道Java,但我假设我需要学习像C这样的低级语言.
那么,你能告诉我从哪里开始学习吗?我知道我需要了解一般情况下模拟虚拟机,但是我开始学习如何编程呢?
; We now have about 30,000 cycles to burn before the PPU stabilizes.
; One thing we can do with this time is put RAM in a known state.
; Here we fill it with $00, which matches what (say) a C compiler
; expects for BSS. Conveniently, X is still 0.
txa
@clrmem:
sta $000,x
sta $100,x
sta $300,x
sta $400,x
sta $500,x
sta $600,x
sta $700,x ; Remove this if you're storing reset-persistent data
; We skipped $200,x …Run Code Online (Sandbox Code Playgroud) java ×7
emulation ×5
hardware ×3
6502 ×2
assembly ×2
byte ×2
c ×2
inputstream ×2
android ×1
arm ×1
bare-metal ×1
bit ×1
bytearray ×1
carryflag ×1
char ×1
connection ×1
console ×1
datatable ×1
file ×1
flags ×1
graphics ×1
jsf ×1
loops ×1
map ×1
matcher ×1
newline ×1
nintendo ×1
object ×1
outputstream ×1
primefaces ×1
regex ×1
reset ×1
stream ×1
unsigned ×1
url ×1
validation ×1