Skip to content

16 位 CPU 的Excel模拟 16-bit CPU for Excel, and related files

License

Notifications You must be signed in to change notification settings

yuanzhongqiao/excelCPU

 
 

Repository files navigation

Excel 16 位 CPU

Excel 16 位 CPU 存储库包含以下主要文件:

CPU.xlsx - The main spreadsheet which contains the CPU
ROM.xlsx - The ROM spreadsheet used read by the CPU when the read ROM switch is turned on
InstructionSet.xlsx - Explains the ISA of the CPU
compileExcelASM16.py - The Excel-ASM16 compiler
Excel-ASM16.xml - Markdown for the Excel-ASM16 language compatible with Notepad  
Sample Programs - Folder of sample programs for the Excel CPU

CPU.xlsx 文件具有 16 位 CPU、16 个通用寄存器、128KB RAM 和 128x128 显示屏。

必须打开迭代计算。这可以通过转到文件 -> 选项 -> 公式 -> 然后启用迭代计算并将最大迭代次数设置为 1 来完成

CPU 根据 B2 中设置的时钟信号运行。该时钟信号将在 Excel 电子表格内重新计算的正常条件下更新。按 F9 键将重新计算电子表格。

F2 单元中的重置按钮如果设置为 true,会将 PC 寄存器重置回 0。

CPU.xlsx 文件中的计算机可以以自动或手动模式进行控制。这是由 J2 中的按钮控制的。如果设置为 true,则当来自 B2 的时钟信号为高电平时,CPU 将执行单元格 D8 中的取指单元中的覆盖槽中指定的操作。如果为 false,则 CPU 将执行从 PC 寄存器指定的内存表中检索的操作。

Reset RAM 按钮,如果设置为 true,会将每个内存单元重置为 0。

如果将“读取 ROM”按钮设置为 true,则会将 ROM.xlsx 电子表格中的内存表的值复制到 CPU.xlsx 电子表格的 RAM 表中。

CPU 的正常操作包括将 Reset 按钮设置为高电平,再次打开和关闭 Reset RAM 或 Read ROM 按钮(导致 RAM 重置或 ROM 读入 RAM 表),然后关闭重置按钮。然后,CPU 将被设置为在手动模式下运行程序,或者执行 RAM 中指定的程序。

CPU 设计为根据InstructionSet.xlsx 电子表格中指定的指令集架构运行。

警告:简单地按 F9 键是不可能尽快完成的,Excel 更新这么多单元格需要时间,建议等到 Excel 左下角看到“Ready”文本后即可继续按 F9 键之前可以看到。

或者,可以使用 Excel-ASM16 语言编写程序并将其编译为 ROM.xlsx 电子表格。

Excel-ASM16 具有 24 种不同的不区分大小写的指令。每条指令使用三个不同的操作数

	REG	; refers to any of the 16 general purpose registers
	E.G. R0, R1, R15 &c.
MEM	; refers to any 16-bit addressable memory unit (formatted in hexadecimal)
E.G. @0000, @F000, @FFFF, &c.

IMD	; refers to an immediate number usually 16-bits long, except in the case of ROL and ROR
	; can be defined either in decimal or hexadecimal
E.G. #0000, $0CCC, #60340, $FF10, &c.

<clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 tooltipped-no-delay d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w" value=" REG ; refers to any of the 16 general purpose registers E.G. R0, R1, R15 &c.

MEM	; refers to any 16-bit addressable memory unit (formatted in hexadecimal)
E.G. @0000, @F000, @FFFF, &amp;c.

IMD	; refers to an immediate number usually 16-bits long, except in the case of ROL and ROR
	; can be defined either in decimal or hexadecimal
E.G. #0000, $0CCC, #60340, $FF10, &amp;c." tabindex="0" role="button">
  <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>

加载

	LOAD REG MEM	; loads the specified memory unit into REG
	LOAD REG IMD	; load specified 16-bit immediate value into REG
	LOAD REG REG	; loads memory unit at the address stored in REGB into REGA

店铺

	STORE REG MEM	; stores the value of REG to the address specified
	STORE REG REG 	; stores the value of REGA into the memory unit at the address in REGB

	JMP IMD		; sets PC to the immediate 16-bit value
	JEQ IMD		; if ZF = 0, sets PC to the immediate 16-bit value
	JLT IMD		; if CF = 0, sets PC to the immediate 16-bit value 
	JGE IMD		; if CF = 1 or ZF = 1, sets PC to the immediate 16-bit value 

特兰

	TRAN REG REG	; transfers value from REGA to REGB

代数指令

添加

	ADD REG REG	; REGA   REGB   CF, result stored in REGA

子系统

	SUB REG REG	; (REGA - REGB) - CF, result stored in REGA

多特

	MULT REG REG	; REGA * REGB, low 16-bit result stored in REGA, high 16-bit result stored in REGB

DIV

	DIV REG REG	; REGA / REGB result stored in REGA, REGA MOD REGB stored in REGB

有限公司

	INC REG	; REGA  , CF not affected

十二月

	DEC REG	; REGA--, CF not affected

位指令

	AND REG REG	; REGA AND REGB, result stored in REGA

或者

	OR REG REG		; REGA OR REGB, result stored in REGA

异或

	XOR REG REG	; REGA XOR REGB, result stored in REGA

不是

	NOT REG 		; NOT REGA, result stored in REGA

滚动说明

罗尔

	ROL REG IMD	; leftwise roll of bits of REGA carried out IMD times
				; IMD is a 4-bit value

相对回报率

	ROR REG IMD	; rightwise roll of bits of REGA carried out IMD times
				; IMD is a 4-bit value

标记说明

	CLC			; sets CF to 0
	STC			; sets CF to 1 

诺普

	NOP			; does not effect any registers or memory

奥格

	ORG IMD		; sets the location of the next instruction
				; must be further than the current length of program

有限公司

	INC "file.bin"	; copies the binary file into the program

编译

编写程序后,使用命令行指令对其进行编译

	py compileExcelASM16.py program.s ROM.xlsx

其中program.s是用户的程序文件,ROM.xlsx是ROM电子表格

编译成功后,可以通过翻转电子表格顶部的Read ROM按钮将程序传输到CPU.xlsx程序中。请注意,必须打开 ROM.xlsx 文件才能正确更新数据。

About

16 位 CPU 的Excel模拟 16-bit CPU for Excel, and related files

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 90.4%
  • Assembly 9.6%