标签: dcpu-16

I和J寄存器在DCPU-16中是否特殊?

DCPU-16包括8个名为A, B, C, X, Y, Z, I和的通用寄存器J.这是一个程序员"比喻"使用IJ循环计数器.在DCPU-16,是IJ专业化的寄存器,只应在循环使用-或者他们都最终到底相同的颜色?

assembly dcpu-16

25
推荐指数
1
解决办法
2028
查看次数

在无中断DCPU-16上是否可以使用抢占式多任务操作系统?

我正在研究各种OS设计,希望为DCPU-16编写简单的多任务操作系统.但是,我读到的关于抢先式多任务处理的所有内容都以中断为中心.听起来在16位硬件和软件时代,协作式多任务处理更为常见,但这需要考虑每个程序的多任务处理.

有没有办法在无中断架构上实现抢占式多任务处理?我能想到的只是一个可以动态切换任务的解释器,但这会产生巨大的性能损失(如果它必须解析每个操作并且不让任何东西本地运行,可能会大约10-20x +,我是想象).

interrupt multitasking dcpu-16

10
推荐指数
1
解决办法
1848
查看次数

用于不同存储器寻址方案的C代码的可移植性

如果我理解正确的话,DCPU-16规格0x10c描述了一个16位的地址空间,每个偏移地址的16位字,而不是字节,与许多其他存储架构.这有一些奇怪的后果,例如我想象sizeof(char)并且sizeof(short)都会回归1.

在这种不同的内存寻址方案之间保持C代码可移植是否可行?要记住的问题是什么?

编辑:也许我应该给出一个更具体的例子.假设您有一些处理字节流的网络代码.你是通过在每个地址只放一个字节来丢弃你的一半内存,这样代码可以保持不变,或者你是否通过位移来推广所有内容以处理每个偏移的N个字节?

edit2:答案似乎集中在数据类型大小的问题上,这不是重点 - 我甚至不应该提到它.问题是如何应对失去用指针解决内存中任何字节的能力.期望代码对此不可知是否合理?

c dcpu-16

10
推荐指数
2
解决办法
520
查看次数

如何理解DCPU-16规格组装示例的第一行?

我试图理解规范,但未能理解给出的示例的第一行:

SET A, 0x30              ; 7c01 0030
Run Code Online (Sandbox Code Playgroud)

以下是我从规格中理解的内容:

  • 第一个字(7c01)完全定义了指令
  • 运算符是0x1,这是命令 SET a, b
  • b = 111100 = 0x3C(当我转换为十六进制时)=字面值0x3C
  • a = 000000 =登记册A.

所以我理解指令为SET A,0x3C

任何人都可以建议我哪里出错了?

assembly dcpu-16

9
推荐指数
1
解决办法
882
查看次数

这段代码的球拍/方案成语是什么?

我是球拍/方案的新手,所以我决定通过为DCPU-16(一个简单的16位处理器)实现仿真器来学习.

我的问题是:实施我的解决方案的更好方法是什么?

这是我一起攻击控制cpu寄存器的解决方案.重点是允许修改寄存器的函数链接在一起.例如:

; Increment value stored in register r-id
; returns the updated register
;
; Reg - the register structure 
; (reg-inc Reg 'SP)
(define (reg-inc reg r-id)
    (reg-write reg r-id (+ (reg-read reg r-id) 1 )))

; chain them together
;(reg-inc (reg-inc Reg 'SP)
;         'PC)
;
; returns structure with both 'SP and 'PC incremented
Run Code Online (Sandbox Code Playgroud)

我的注册解决方案的全文如下.我的完整程序也在github上.有这么多重复的逻辑,我知道必须有一个更简单的方法:

(struct registers (A B C X Y Z I J SP PC O Pa Pb Paadr …
Run Code Online (Sandbox Code Playgroud)

scheme racket dcpu-16

8
推荐指数
1
解决办法
572
查看次数

你能写信给[PC]吗?

根据DCPU规范,SET指令失败的唯一时间是a值是文字.

那么下面的工作呢?

SET [PC],0x1000
Run Code Online (Sandbox Code Playgroud)

一个更有用的版本是设置偏移量PC,所以一个相当奇怪的无限循环将是:

SET [PC+0x2],0x89C3 ; = SUB PC,0x2
Run Code Online (Sandbox Code Playgroud)

dcpu-16

7
推荐指数
1
解决办法
796
查看次数

是DCPU-16汇编程序'dat',字符串应该为每个字符生成一个字节或单词?

我不清楚是否

dat "Hello"

应该生成5个字或3个(填充一个字节)

dcpu-16

6
推荐指数
1
解决办法
1457
查看次数

DCPU-16中的有符号算术/控制流程?

DCPU-16 (在CPU 缺口的新游戏)并不似乎有任何签字IF/ MUL/ DIV指令.

还有办法做一些非常难以置信的签名算术/控制流吗?

dcpu-16

6
推荐指数
1
解决办法
260
查看次数

Turbo Pascal覆盖层是如何工作的?

我正在游戏0x10c 实现16位DCPU的一个assemblinker.

有人向我建议的一种技术是使用"叠加,就像在当天回来的Turbo Pascal",以便在运行时交换代码.

我得到了基本的想法(链接覆盖符号到同一个内存,在ref之前交换),但是它们的实现是什么?

这是编译器在引用之前插入的函数吗?这是陷阱吗?叠加层的数据是存储在叠加层的位置,还是存放在某个大表中?它运作良好,还是经常破裂?是否有用于组装的接口与覆盖的Pascal链接(反之亦然),还是不兼容?

谷歌基本上没有给我任何信息(除了它是现代Pascal编译器的禁止).而且,我只是,就像,五年太年轻,以至于他们当前都不需要它们.

pascal dcpu-16

5
推荐指数
1
解决办法
1226
查看次数

DCPU-16 DIV指令

我正在查看DCPU-16 的规范,我无法通过DIV指令理解溢出值的用途:

DIV a,b - 将a设置为a/b,将O设置为((a << 16)/ b)&0xffff.

任何人都可以在这里解释O的语义,它对什么有用?

assembly dcpu-16

4
推荐指数
1
解决办法
342
查看次数

标签 统计

dcpu-16 ×10

assembly ×3

c ×1

interrupt ×1

multitasking ×1

pascal ×1

racket ×1

scheme ×1