📄 ci.h
字号:
/**********************************************************************
*
* CommandInterpreter.h
*
* This file contains the command interpreter defines.
*
* (C) 2002 Silicon Motion, Inc.
* Written by Frido Garritsen
*
* Version 1.11 @ 11/04/02 14:34:49
*
**********************************************************************/
// ABS or REL for GOTO and GOSUB commands
#define ABS 0x00000000
#define REL 0x00000001
// 128-bit aligned address macros - used for base addresses.
#define LCL(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, LOCAL) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFF0)
#define CS0(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, EXTERNAL) | \
FIELD_INIT(CMD_INTPR_CTRL, CS, 0) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFF0)
#define CS1(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, EXTERNAL) | \
FIELD_INIT(CMD_INTPR_CTRL, CS, 1) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFF0)
#define REG(reg) ((reg) & 0x001FFFFC)
// 64-bit aligned address macros - used for program counter.
#define PC_LCL(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, LOCAL) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFF8)
#define PC_CS0(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, EXTERNAL) | \
FIELD_INIT(CMD_INTPR_CTRL, CS, 0) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFF8)
#define PC_CS1(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, EXTERNAL) | \
FIELD_INIT(CMD_INTPR_CTRL, CS, 1) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFF8)
#define PC_REL(pc, dest) (((dest) - ((pc) + 8)) & 0x0FFFFFF8)
// 32-bit aligned address macros - used for memory access.
#define MEM_LCL(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, LOCAL) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFFC)
#define MEM_CS0(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, EXTERNAL) | \
FIELD_INIT(CMD_INTPR_CTRL, CS, 0) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFFC)
#define MEM_CS1(adr) FIELD_INIT(CMD_INTPR_CTRL, EXT, EXTERNAL) | \
FIELD_INIT(CMD_INTPR_CTRL, CS, 1) | \
FIELD_SET(0, CMD_INTPR_CTRL_ADDRESS, (adr) & 0x03FFFFFC)
#define MEM_REG(reg) (((reg) & 0x001FFFFC) | 0x03E00000)
// Command Interpreter commands.
#define LOADMEM_D(adr, value) (0x00000000 | (adr)), (value)
#define LOADMEM_E(adr, count) (0x20000000 | (adr)), (count)
#define LOADMEM_I(adr, src, count) (0x40000000 | (adr)), (count), (src), 0
#define LOADREG_D(reg, value) (0x10000000 | REG(reg)), (value)
#define LOADREG_E(reg, count) (0x30000000 | REG(reg)), (count)
#define LOADREG_I(reg, src, count) (0x50000000 | REG(reg)), (count), (src), 0
#define STATUS(mask, value) (0x60000000 | (mask)), (value)
#define FINISH(int) (0x80000000 | ((int) ? 1 : 0)), 0
#define GOTO(pc, rel) (0x90000000 | (pc)), ((rel) ? 1 : 0)
#define GOSUB(pc, rel) (0xA0000000 | (pc)), ((rel) ? 1 : 0)
#define RETURN() (0xB0000000), 0
#define COND_JUMP(cond, pc) (0xC0000000 | (pc)), (cond)
// Command Interpreter Semi Language instructions.
#define STREAM(adr) 0xFFFFFFFF, (adr)
#define DATA(count) 0xFFFFDEAD, (count)
#define END_OF_STREAM() 0xFFFFFFFF, 0xFFFFFFFF
#define END_OF_DATA() 0xFFFFFFFF
//
// NOTES
// =====
//
// A command list consists of multiple streams, initialization data, and compare data.
//
// For normal command lists, the initialization and compare data should be 0; everything
// should be initialized inside the command list itself.
//
// The first stream specifies the startaddress of the command list.
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -