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)
-CTC
Channel
0
当前的计数器值。 -
OUT (4)
-CTC
Channel
0
控制。 -
IN (5)
-CTC
Channel
1
当前的计数器值。 -
OUT (5)
-CTC
Channel
1
控制。 -
IN (6)
-CTC
Channel
2
当前的计数器值。 -
OUT (6)
-CTC
Channel
2
控制。 -
IN (7)
-CTC
Channel
3
当前的计数器值。 -
OUT (7)
-CTC
Channel
3
控制。
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