3 个稳定版本
| 2.0.1 | 2024 年 2 月 25 日 |
|---|---|
| 1.0.0 | 2024 年 2 月 11 日 |
#105 in 模拟器
每月下载量:32
在 z80emu 中使用
605KB
12K SLoC
RAL 1243
RAL 1243 是一个虚构的计算机,被引入虚拟存在,以提供基于 z80emu Z80 CPU 模拟器的模拟器实现示例。
这台计算机没有图形或键盘界面,而是通过板载 PIO 芯片组与用户通信。
库
RAL 1243 计算机是一个库,适用于嵌入式系统。
用法
在 z80emu/examples 中可以找到一个使用此库的示例,名为 terminal。
内存
RAL 1243 的内存映射
0x0000-0x1FFF占用ROM内核。0x2000-0x3FFF占用可交换的EX-ROM插槽,包含用户程序或仅可通过RAM页面访问的内核。0x4000-RAMTOP可用于用户程序的随机访问内存。
陷阱
如果程序计数器在 0x0000 和 0x1FFF(包含)之间,则 RAM 页正在交换到内存页 0x2000-0x3FFF。否则,当前交换的 ROM 可在此内存页上访问。
I/O
系统上的总线Bus通过级联的设备处理I/O,其中存在以下外围设备
内存控制器
IN (124)- 读取当前已交换的卡带编号。OUT (124)- 选择256个可交换卡带中的一个,将其映射到内存页0x2000-0x3FFF。如果卡带不存在,则显示一个全部为0xFF的字节填充页。
PIO Z8420
一个PIO Z8420芯片控制连接到其通道A的终端输入和从其通道B的输出。
注意:PIO芯片的实现仅模拟输入和输出通道模式。双向和控制模式目前不受支持。
IN (8)- 通过通道A从终端读取一个字符。OUT (9)-PIO通道A控制。OUT (10)- 通过通道B将一个字符输出到终端。OUT (11)-PIO通道B控制。
PIO芯片通过触发中断来指示终端输入和输出数据的可用性。
CTC Z8430
一个CTC Z8430芯片控制4个定时器/计数器。
-
通道
0和2的CLK/TRG线连接到一个(与CPU时钟无关)的100µs脉冲(10 kHz)时钟。 -
通道
0的ZT/CO线连接到通道1的CLK/TRG线。 -
通道
1的ZT/CO线目前未连接到任何设备。 -
通道
2的ZT/CO线连接到通道3的CLK/TRG线。 -
IN (4)-CTCChannel0当前的计数器值。 -
OUT (4)-CTCChannel0控制。 -
IN (5)-CTCChannel1当前的计数器值。 -
OUT (5)-CTCChannel1控制。 -
IN (6)-CTCChannel2当前的计数器值。 -
OUT (6)-CTCChannel2控制。 -
IN (7)-CTCChannel3当前的计数器值。 -
OUT (7)-CTCChannel3控制。
CTC 芯片可能在计数到 0 时触发中断。
中断
IM 2 中断模式必须始终开启。
系统
在地址 0x2000 到 0x3FFF 之间映射的 RAM 内存区域仅由 ROM 内核专用。
机器堆栈占用 RAM 内存区的最后字节。系统启动后,SP 被初始化为可用 RAM 的最后一个地址加 1。如果检测到没有用户 RAM 内存,系统将拒绝启动。
RST 00h- 软件系统复位。RST 08h- 将输入字符存入累加器,并通过ZF=0信号表示新字符。只有在新输入时,累加器寄存器A才会被修改。寄存器HL'也会被修改。当使用CF=1调用时,等待下一个字符可用,总是成功。当使用CF=0调用时,立即返回,并通过ZF=1信号表示可能失败。RST 10h- 将累加器中的单个字符输出,并通过ZF=1信号表示成功。寄存器HL'也会被修改。当使用CF=0调用时,等待字符可以被缓冲,总是成功。当使用CF=1调用时,立即返回,并通过ZF=0信号表示可能失败。RST 18h- 将调用转发到IX地址。RST 20h- 将调用转发到IY地址。RST 28h- 将调用转发到累加器中标识为8位函数向量的 syslib 函数。修改A和HL'。函数可能会修改更多寄存器。有关系统库例程的列表,请参考ROM内核源代码 rom/ral1243_rom.rb。RST 30h- 将调用转发到HL地址。RST 38h- 返回系统菜单。NMI- 如果正在运行EX-ROM代码,则返回系统菜单。
终端
终端将任何用户按键输入转发到 RAL 1243 PIO 输入设备。
连接到控制代码并发送到 PIO A
| 按键名称 | 数据 |
|---|---|
PgUp |
1 |
Home |
2 |
End |
3 |
PgDn |
4 |
Ins |
5 |
Backspace |
8 |
Tab |
9 |
Up |
17 |
Left |
18 |
Down |
19 |
Right |
20 |
Esc |
27 |
Del |
127 |
任何ASCII可打印字符都按原样转发。
PIO 输出(通道 Channel B)的数据正在转发到控制台。
终端解释的特殊输出控制代码
| 代码 | 动作 |
|---|---|
8 |
将光标向左移动。 |
10 |
将光标移到下一行。 |
12 |
清除终端。 |
13 |
将光标移到第一列。 |
16 |
将光标移动到绝对位置;后跟行索引,后跟列索引。 |
17 |
向上移动光标 ↑ |
18 |
向左移动光标 ← |
19 |
向下移动光标 ↓ |
20 |
移动光标→右 |
21 |
更改光标外观;后跟光标形状编号。 |
光标形状
0- 隐藏1- 下划线2- 块
根据终端能力,可能还有更多形状可用。
依赖项
~185–410KB