init repo

This commit is contained in:
RomanRom2 committed 2025-02-22 18:50:46 +03:00
commit ae91df09e9
87 files changed
+99248

No files matched your search

+1
View File
@@ -0,0 +1 @@
//------------------------------------------------------------------------------------------------- //--- 010 Editor v13.0 Binary Template // // File: orcad21.bt // Author: RomanRom2 // E-mail: RomanRom2@gmail.com // Website: https://sprinter.ru/ // Version: 1.0 // Purpose: Parse OrCAD v2.10 database PCB (BRD?) files. // It probably allowed to any 16-bit OrCad versions 1.xx, 2.xx, 3.xx and 4.xx // Category: CAD // File Mask: *.pcb // ID Bytes: // History: // 1.0 2023-10-07 RomanRom2: Initial release // References: // https://reverse.sprinter.ru/orcad210 //------------------------------------------------------------------------------------------------- typedef enum <byte> { R_0 = 0, R_90 = 1, R_180 = 2, R_270 = 3, } TRotate; typedef enum <byte> { Bottom = 0, Top = 1, } TLayer; typedef enum <byte> { Begin = 0, Continue = 1, } TLineFlags; typedef struct THeader { char file_name[8]; short unk1; // version? always ADh short comp_count <bgcolor=cLtPurple>; // real count + 1, why? short unk3; short unk4; short unk5; short unk6; short unk7; short unk8; short unk9; short unk10; short unk11; short texts_ofs <bgcolor=cWhite>; short texts_size <bgcolor=cWhite>; // in bytes short brd_points_count <bgcolor=cLtBlue>; short net_points_count <bgcolor=cBlue>; short unk16; short unk17; short unk18; char file_ext[4]; }; THeader hdr; // components // ================================================================================================ SetBackColor( cLtPurple ); struct TComponent { char timestamp[8]; byte unk1; // version? always AAh TRotate rotate; TLayer lines_layer; byte unk3; short pos_x_left; short pos_x_right; short pos_y_bottom; short pos_y_top; short pos_x; short pos_y; short height; short width; short lines_ofs; short names_ofs; short pads_ofs; short next_ofs1; short next_ofs2; char pattern[8] <bgcolor=cRed>; short next_ofs3; // lines SetBackColor( cLtYellow ); local int lines_count = (names_ofs - lines_ofs) / 6; struct Tlines { byte unk1; TLineFlags flags; short pos_x; short pos_y; } line[lines_count]; // names SetBackColor( cLtGreen ); local short names_count = (pads_ofs - names_ofs) / 24; struct TNames { short unk1; short unk2; char str[8] <bgcolor=cRed>; short unk4; short unk5; short unk6; short unk7; short pos_x; short pos_y; } name[names_count] <comment = str>; // pads typedef enum <byte> { SMD = 1, Plated = 3, } TPadsFlags; SetBackColor( cGray ); local short pads_count = (next_ofs1 - pads_ofs) / 24; struct TPad { char des[4]; char net[8]; byte shape; short height; short width; TRotate rotate; TPadsFlags flags; byte hole_dia; short pos_x; short pos_y; local string des_net = des + net; } pad[pads_count] <optimize=false, comment = des_net>; local string name_pattern = name[0].str + pattern; } comp[hdr.comp_count-1] <optimize=false, comment = name_pattern>; // text strings // ================================================================================================ typedef enum <byte> { Flipped = 0, NotFlipped = 1, } TFlagsA; typedef enum <byte> { NotVisible = 0, Visible = 1, } TFlagsB; typedef struct { BigEndian(); byte raw <format=binary>; LittleEndian(); FSkip (-1); BitfieldLeftToRight(); TFlagsA PadType: 4; TFlagsB PinType: 4; } TTextsFlags; typedef struct { char unk[12]; byte len; short size_h; short size_v; TRotate rotate; TLayer layer; TTextsFlags flags; short pos_x; short pos_y; char str[len]; } TTextString; SetBackColor( cWhite ); local int index; index = 0; do { TTextString txt <comment = str>; index = index + 24 + txt.len; } while (index < hdr.texts_size); // board points // ================================================================================================ SetBackColor( cLtBlue ); typedef struct { TLineFlags flagLine truncated