incremental
diff --git a/include/regs-video.h b/include/regs-video.h
new file mode 100644
index 0000000..379fa9c
--- /dev/null
+++ b/include/regs-video.h
@@ -0,0 +1,264 @@
+#pragma once
+
+
+#define PASS 0
+#define TRUE 0
+#define FALSE 1
+#define FAIL 1
+#define FIX 0
+#define STEP 1
+#define SEQ_ADDRESS_REGISTER 0x3C4
+#define SEQ_DATA_REGISTER 0x3C5
+#define CRTC_ADDRESS_REGISTER 0x3D4
+#define CRTC_DATA_REGISTER 0x3D5
+#define DAC_INDEX_REGISTER 0x3C8
+#define DAC_DATA_REGISTER 0x3C9
+
+#define VIDEOBASE_OFFSET 0x1E700000
+#define KEY_CONTROL 0x00 + VIDEOBASE_OFFSET
+#define VIDEOENGINE_SEQUENCE_CONTROL 0x04 + VIDEOBASE_OFFSET
+#define VIDEOENGINE_PASS1_CONTROL 0x08 + VIDEOBASE_OFFSET
+#define VIDEOENGINE_MODEDETECTIONSETTING_H 0x0C + VIDEOBASE_OFFSET
+#define VIDEOENGINE_MODEDETECTIONSETTING_V 0x10 + VIDEOBASE_OFFSET
+#define SCALE_FACTOR_REGISTER 0x14 + VIDEOBASE_OFFSET
+#define SCALING_FILTER_PARAMETERS_1 0x18 + VIDEOBASE_OFFSET
+#define SCALING_FILTER_PARAMETERS_2 0x1C + VIDEOBASE_OFFSET
+#define SCALING_FILTER_PARAMETERS_3 0x20 + VIDEOBASE_OFFSET
+#define SCALING_FILTER_PARAMETERS_4 0x24 + VIDEOBASE_OFFSET
+#define MODEDETECTION_STATUS_READBACK 0x98 + VIDEOBASE_OFFSET
+#define VIDEOPROCESSING_CONTROL 0x2C + VIDEOBASE_OFFSET
+#define VIDEO_CAPTURE_WINDOW_SETTING 0x30 + VIDEOBASE_OFFSET
+#define VIDEO_COMPRESS_WINDOW_SETTING 0x34 + VIDEOBASE_OFFSET
+#define VIDEO_COMPRESS_READ 0x3C + VIDEOBASE_OFFSET
+#define VIDEO_IN_BUFFER_BASEADDRESS 0x44 + VIDEOBASE_OFFSET
+#define VIDEO_IN_BUFFER_OFFSET 0x48 + VIDEOBASE_OFFSET
+#define VIDEOPROCESS_BUFFER_BASEADDRESS 0x4C + VIDEOBASE_OFFSET
+#define VIDEOCOMPRESS_SOURCE_BUFFER_BASEADDRESS 0x44 + VIDEOBASE_OFFSET
+#define VIDEOPROCESS_OFFSET 0x48 + VIDEOBASE_OFFSET
+#define VIDEOPROCESS_REFERENCE_BUFFER_BASEADDRESS 0x4C + VIDEOBASE_OFFSET
+#define FLAG_BUFFER_BASEADDRESS 0x50 + VIDEOBASE_OFFSET
+#define VIDEO_COMPRESS_DESTINATION_BASEADDRESS 0x54 + VIDEOBASE_OFFSET
+#define STREAM_BUFFER_SIZE_REGISTER 0x58 + VIDEOBASE_OFFSET
+#define VIDEO_CAPTURE_BOUND_REGISTER 0x5C + VIDEOBASE_OFFSET
+#define VIDEO_COMPRESS_CONTROL 0x60 + VIDEOBASE_OFFSET
+#define VIDEO_QUANTIZATION_TABLE_REGISTER 0x64 + VIDEOBASE_OFFSET
+#define BLOCK_SHARPNESS_DETECTION_CONTROL 0x6C + VIDEOBASE_OFFSET
+#define POST_WRITE_BUFFER_DRAM_THRESHOLD 0x68 + VIDEOBASE_OFFSET
+#define DETECTION_STATUS_REGISTER 0x98 + VIDEOBASE_OFFSET
+#define H_DETECTION_STATUS 0x90 + VIDEOBASE_OFFSET
+#define V_DETECTION_STATUS 0x94 + VIDEOBASE_OFFSET
+#define VIDEO_CONTROL_REGISTER 0x300 + VIDEOBASE_OFFSET
+#define VIDEO_INTERRUPT_CONTROL 0x304 + VIDEOBASE_OFFSET
+#define VIDEO_INTERRUPT_STATUS 0x308 + VIDEOBASE_OFFSET
+#define MODE_DETECTION_REGISTER 0x30C + VIDEOBASE_OFFSET
+
+#define FRONT_BOUND_REGISTER 0x310 + VIDEOBASE_OFFSET
+#define END_BOUND_REGISTER 0x314 + VIDEOBASE_OFFSET
+#define CRC_1_REGISTER 0x320 + VIDEOBASE_OFFSET
+#define CRC_2_REGISTER 0x324 + VIDEOBASE_OFFSET
+#define REDUCE_BIT_REGISTER 0x328 + VIDEOBASE_OFFSET
+#define BIOS_SCRATCH_REGISTER 0x34C + VIDEOBASE_OFFSET
+#define COMPRESS_DATA_COUNT_REGISTER 0x70 + VIDEOBASE_OFFSET
+#define COMPRESS_BLOCK_COUNT_REGISTER 0x74 + VIDEOBASE_OFFSET
+#define VIDEO_SCRATCH_REGISTER_34C 0x34C + VIDEOBASE_OFFSET
+#define VIDEO_SCRATCH_REGISTER_35C 0x35C + VIDEOBASE_OFFSET
+#define RC4KEYS_REGISTER 0x400 + VIDEOBASE_OFFSET
+#define VQHUFFMAN_TABLE_REGISTER 0x300 + VIDEOBASE_OFFSET
+
+//  Parameters
+#define SAMPLE_RATE 24000000.0
+#define MODEDETECTION_VERTICAL_STABLE_MAXIMUM 0x6
+#define MODEDETECTION_HORIZONTAL_STABLE_MAXIMUM 0x6
+#define MODEDETECTION_VERTICAL_STABLE_THRESHOLD 0x2
+#define MODEDETECTION_HORIZONTAL_STABLE_THRESHOLD 0x2
+#define HORIZONTAL_SCALING_FILTER_PARAMETERS_LOW 0xFFFFFFFF
+#define HORIZONTAL_SCALING_FILTER_PARAMETERS_HIGH 0xFFFFFFFF
+#define VIDEO_WRITE_BACK_BUFFER_THRESHOLD_LOW 0x08
+#define VIDEO_WRITE_BACK_BUFFER_THRESHOLD_HIGH 0x04
+#define VQ_Y_LEVELS 0x10
+#define VQ_UV_LEVELS 0x05
+#define EXTERNAL_VIDEO_HSYNC_POLARITY 0x01
+#define EXTERNAL_VIDEO_VSYNC_POLARITY 0x01
+#define VIDEO_SOURCE_FROM 0x01
+#define EXTERNAL_ANALOG_SOURCE 0x01
+#define USE_intERNAL_TIMING_GENERATOR 0x01
+#define WRITE_DATA_FORMAT 0x00
+#define SET_BCD_TO_WHOLE_FRAME 0x01
+#define ENABLE_VERTICAL_DOWN_SCALING 0x01
+#define BCD_TOLERENCE 0xFF
+#define BCD_START_BLOCK_XY 0x0
+#define BCD_END_BLOCK_XY 0x3FFF
+#define COLOR_DEPTH 16
+#define BLOCK_SHARPNESS_DETECTION_HIGH_THRESHOLD 0xFF
+#define BLOCK_SHARPNESS_DETECTION_LOE_THRESHOLD 0xFF
+#define BLOCK_SHARPNESS_DETECTION_HIGH_COUNTS_THRESHOLD 0x3F
+#define BLOCK_SHARPNESS_DETECTION_LOW_COUNTS_THRESHOLD 0x1F
+#define VQTABLE_AUTO_GENERATE_BY_HARDWARE 0x0
+#define VQTABLE_SELECTION 0x0
+#define JPEG_COMPRESS_ONLY 0x0
+#define DUAL_MODE_COMPRESS 0x1
+#define BSD_H_AND_V 0x0
+#define ENABLE_RC4_ENCRYPTION 0x1
+#define BSD_ENABLE_HIGH_THRESHOLD_CHECK 0x0
+#define VIDEO_PROCESS_AUTO_TRIGGER 0x0
+#define VIDEO_COMPRESS_AUTO_TRIGGER 0x0
+#define DIGITAL_SIGNAL 0x0
+#define ANALOG_SIGNAL 0x1
+
+/* AST_VIDEO_SCRATCH_35C	0x35C		Video Scratch Remap Read Back */
+#define SCRATCH_VGA_PWR_STS_HSYNC (1 << 31)
+#define SCRATCH_VGA_PWR_STS_VSYNC (1 << 30)
+#define SCRATCH_VGA_ATTRIBTE_INDEX_BIT5 (1 << 29)
+#define SCRATCH_VGA_MASK_REG (1 << 28)
+#define SCRATCH_VGA_CRT_RST (1 << 27)
+#define SCRATCH_VGA_SCREEN_OFF (1 << 26)
+#define SCRATCH_VGA_RESET (1 << 25)
+#define SCRATCH_VGA_ENABLE (1 << 24)
+
+typedef struct _VIDEO_MODE_INFO {
+  unsigned short X;
+  unsigned short Y;
+  unsigned short ColorDepth;
+  unsigned short RefreshRate;
+  unsigned char ModeIndex;
+} VIDEO_MODE_INFO, *PVIDEO_MODE_INFO;
+
+typedef struct _VQ_INFO {
+  unsigned char Y[16];
+  unsigned char U[32];
+  unsigned char V[32];
+  unsigned char NumberOfY;
+  unsigned char NumberOfUV;
+  unsigned char NumberOfInner;
+  unsigned char NumberOfOuter;
+} VQ_INFO, *PVQ_INFO;
+
+typedef struct _HUFFMAN_TABLE {
+  unsigned long HuffmanCode[32];
+} HUFFMAN_TABLE, *PHUFFMAN_TABLE;
+
+typedef struct _FRAME_HEADER {
+  unsigned long StartCode;   // 0
+  unsigned long FrameNumber; /// 4
+  unsigned short HSize;      // 8
+  unsigned short VSize;
+  unsigned long Reserved[2];         // 12 13 14
+  unsigned char DirectMode;          // 15
+  unsigned char CompressionMode;     // 15
+  unsigned char JPEGScaleFactor;     // 16
+  unsigned char Y_JPEGTableSelector; // 18 [[[[
+  unsigned char JPEGYUVTableMapping;
+  unsigned char SharpModeSelection;
+  unsigned char AdvanceTableSelector;
+  unsigned char AdvanceScaleFactor;
+  unsigned long NumberOfMB;
+  unsigned char VQ_YLevel;
+  unsigned char VQ_UVLevel;
+  VQ_INFO VQVectors;
+  unsigned char Mode420;
+  unsigned char Visual_Lossless;
+} FRAME_HEADER, *PFRAME_HEADER;
+
+typedef struct _INF_DATA {
+  unsigned char AST2500;
+  unsigned char Input_Signale; // 0: internel vga, 1, ext digital, 2, ext analog
+  unsigned char Trigger_Mode;  // 0: capture, 1, ext digital, 2, ext analog
+  unsigned char DownScalingEnable;
+  unsigned char DifferentialSetting;
+  unsigned short AnalogDifferentialThreshold;
+  unsigned short DigitalDifferentialThreshold;
+  unsigned char AutoMode;
+  unsigned char DirectMode; // 0: force sync mode 1: auto direct mode
+  unsigned short DelayControl;
+  unsigned char VQMode;
+  unsigned char JPEG_FILE;
+} INF_DATA, *PINF_DATA;
+
+typedef struct _COMPRESS_DATA {
+  unsigned long SourceFrameSize;
+  unsigned long CompressSize;
+  unsigned long HDebug;
+  unsigned long VDebug;
+} COMPRESS_DATA, *PCOMPRESS_DATA;
+
+// VIDEO Engine Info
+typedef struct _VIDEO_ENGINE_INFO {
+  INF_DATA INFData;
+  VIDEO_MODE_INFO SourceModeInfo;
+  VIDEO_MODE_INFO DestinationModeInfo;
+  VQ_INFO VQInfo;
+  FRAME_HEADER FrameHeader;
+  COMPRESS_DATA CompressData;
+  unsigned char ChipVersion;
+  unsigned char NoSignal;
+} VIDEO_ENGINE_INFO, *PVIDEO_ENGINE_INFO;
+
+typedef struct {
+  unsigned short HorizontalActive;
+  unsigned short VerticalActive;
+  unsigned short RefreshRate;
+  unsigned char ADCIndex1;
+  unsigned char ADCIndex2;
+  unsigned char ADCIndex3;
+  unsigned char ADCIndex5;
+  unsigned char ADCIndex6;
+  unsigned char ADCIndex7;
+  unsigned char ADCIndex8;
+  unsigned char ADCIndex9;
+  unsigned char ADCIndexA;
+  unsigned char ADCIndexF;
+  unsigned char ADCIndex15;
+  int HorizontalShift;
+  int VerticalShift;
+} ADC_MODE;
+
+typedef struct {
+  unsigned short HorizontalTotal;
+  unsigned short VerticalTotal;
+  unsigned short HorizontalActive;
+  unsigned short VerticalActive;
+  unsigned char RefreshRate;
+  double HorizontalFrequency;
+  unsigned short HSyncTime;
+  unsigned short HBackPorch;
+  unsigned short VSyncTime;
+  unsigned short VBackPorch;
+  unsigned short HLeftBorder;
+  unsigned short HRightBorder;
+  unsigned short VBottomBorder;
+  unsigned short VTopBorder;
+  ADC_MODE AdcMode;
+} VESA_MODE;
+
+
+
+typedef struct {
+  unsigned short HorizontalActive;
+  unsigned short VerticalActive;
+  unsigned short RefreshRateIndex;
+  double PixelClock;
+} INTERNAL_MODE;
+
+typedef struct _TRANSFER_HEADER {
+  unsigned long Data_Length;
+  unsigned long Blocks_Changed;
+  unsigned short User_Width;
+  unsigned short User_Height;
+  unsigned char Frist_frame;   // 1: first frame
+  unsigned char Compress_type; // 0:aspeed mode, 1:jpeg mode
+  unsigned char Trigger_mode;  // 0:capture, 1: compression, 2: buffer
+  unsigned char Data_format;   // 0:DCT, 1:DCTwVQ2 color, 2:DCTwVQ4 color
+  unsigned char RC4_Enable;
+  unsigned char RC4_Reset; // no use
+  unsigned char Y_Table;
+  unsigned char UV_Table;
+  unsigned char Mode_420;
+  unsigned char Direct_Mode;
+  unsigned char VQ_Mode;
+  unsigned char Disable_VGA;
+  unsigned char Differential_Enable;
+  unsigned char Auto_Mode;
+  unsigned char VGA_Status;
+  unsigned char RC4State;
+  unsigned char Advance_Table;
+} TRANSFER_HEADER, *PTRANSFER_HEADER;