⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ci.h

📁 VoyagerGX display driver for Windows CE .NET 5.XX Silicon Motion, Inc. VoyagerGX Driver is architec
💻 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 + -