mirror of
https://github.com/MikhaelKaa/zx_cartridge.git
synced 2026-03-16 14:37:57 +03:00
Compare commits
12 Commits
a24c5d1045
...
c6c2fe5875
| Author | SHA1 | Date | |
|---|---|---|---|
| c6c2fe5875 | |||
| 21e0db2a10 | |||
| 55d234256c | |||
|
|
5cb930acfa | ||
| b96a6bc3ff | |||
|
|
6272cf23c4 | ||
| 3dc6d4a4e5 | |||
| eac97255e3 | |||
| 4a6e78458a | |||
| 5d6ecaa409 | |||
| 6865968f76 | |||
| 7aaf4a7b21 |
27
.gitignore
vendored
27
.gitignore
vendored
@ -1,11 +1,26 @@
|
|||||||
/FW/src/*.bak
|
*.bak
|
||||||
/FW/src/*.vcd
|
*.vcd
|
||||||
/HW/src/__Previews/*.SchDocPreview
|
*.bin
|
||||||
|
*.zx0
|
||||||
|
*.scr
|
||||||
|
*.qws
|
||||||
|
*.LOG
|
||||||
|
*.SchDocPreview
|
||||||
/FW/output_files
|
/FW/output_files
|
||||||
/FW/incremental_db
|
/FW/incremental_db
|
||||||
/FW/db
|
/FW/db
|
||||||
/HW/History
|
/HW/History
|
||||||
/FW/*.qws
|
|
||||||
/HW/Project Logs for fix/*.LOG
|
|
||||||
/HW/Project Logs for zx_cartridge/*.LOG
|
|
||||||
/FW/zx_cartrige_description.txt
|
/FW/zx_cartrige_description.txt
|
||||||
|
/Content/build
|
||||||
|
/Content/tools/zx0/build
|
||||||
|
/Content/Batty/batty.sna
|
||||||
|
/Content/Batty/loader.asm
|
||||||
|
/Content/Batty/loader0.bin
|
||||||
|
/Content/Batty/loader1.bin
|
||||||
|
/Content/Batty/main.asm
|
||||||
|
/Content/Batty/main.bin
|
||||||
|
/Content/Batty/main.bin.zx0
|
||||||
|
/Content/Batty/screen.scr
|
||||||
|
/Content/Batty/screen.scr.zx0
|
||||||
|
/HW/Project Outputs for zx_cartridge
|
||||||
|
|||||||
BIN
Docs/sch_22022026.pdf
Normal file
BIN
Docs/sch_22022026.pdf
Normal file
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
# Для тестирования модуля неодходимо чтобы тест назывался %имя_модуля%_tb
|
# Для тестирования модуля неодходимо чтобы тест назывался %имя_модуля%_tb
|
||||||
|
|
||||||
TARGET ?= zx_cartrige
|
TARGET ?= zx_cartridge
|
||||||
ICARUS = iverilog
|
ICARUS = iverilog
|
||||||
|
|
||||||
all:
|
all:
|
||||||
|
|||||||
142
FW/src/zx_cartridge.v
Normal file
142
FW/src/zx_cartridge.v
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
// Модуль картриджа для ZX Spectrum
|
||||||
|
// 19.02.2026 Mikhael Kaa
|
||||||
|
//
|
||||||
|
// Аппаратная часть:
|
||||||
|
// - 4 микросхем AM29F040 (по 512 КБ) -> всего 2 МБ = 256 страницы по 8 КБ.
|
||||||
|
// - Адресные линии CPU A0..A12 подключены напрямую ко всем микросхемам ПЗУ.
|
||||||
|
// - Старшие линии адреса A13..A18 формируются внутри этого модуля.
|
||||||
|
//
|
||||||
|
// Окно памяти 0x0000..0x3FFF (16 КБ) разделено на две 8‑килобайтные половины:
|
||||||
|
// - Нижняя половина (A13 = 0, 0x0000..0x1FFF) : всегда отображается на страницу 0 (BIOS картриджа).
|
||||||
|
// - Верхняя половина (A13 = 1, 0x2000..0x3FFF) : отображается на выбираемую страницу.
|
||||||
|
//
|
||||||
|
// Выбор страницы:
|
||||||
|
// 8‑битный номер страницы формируется как reg_bank[7:0].
|
||||||
|
// - биты [7:6] : выбор одной из четырех микросхем (0‑3).
|
||||||
|
// - биты [5:0] : выбор 8‑килобайтной страницы внутри выбранной микросхемы (0‑63).
|
||||||
|
// Таким образом, можно адресовать любую из 256 страниц.
|
||||||
|
//
|
||||||
|
// Регистр управления reg_ctl (8 бит):
|
||||||
|
// reg_ctl[7] : при установке в 1 отключает ПЗУ картриджа (все выходы пассивны).
|
||||||
|
// Остальные биты зарезервированы.
|
||||||
|
//
|
||||||
|
// Порты ввода‑вывода (запись/чтение, активный уровень низкий):
|
||||||
|
// bank : запись reg_bank (биты 7..0) – происходит, когда
|
||||||
|
// A15=1, A14=1, A13=0, A7=0, IORQ=0, WR=0. Порт 0xdf7f.
|
||||||
|
// control : запись регистра управления reg_ctl – происходит, когда
|
||||||
|
// A15=1, A14=0, A13=1, A7=0, IORQ=0, WR=0. Порт 0xbf7f.
|
||||||
|
// Чтение любого из этих портов возвращает значение соответствующего регистра.
|
||||||
|
//
|
||||||
|
// Выходы:
|
||||||
|
// ZX_ROM_blk – активный высокий уровень; блокирует внутреннее ПЗУ ZX Spectrum.
|
||||||
|
// CR_ROM_oe_n – выход разрешения выходов для всех микросхем ПЗУ (активный низкий).
|
||||||
|
// CR_ROM_A[5:0] – линии адреса A13..A18 для микросхем ПЗУ.
|
||||||
|
// Для нижнего окна (A13=0) на эту шину выставляется 0.
|
||||||
|
// Для верхнего окна (A13=1) на ней передаётся 6‑битное смещение страницы.
|
||||||
|
// CR_ROM_CS[3:0] – выбор микросхем (активный низкий). Одна линия становится низкой
|
||||||
|
// только при обращении к картриджу (cpu_use_rom, MREQ и RD активны,
|
||||||
|
// картридж не отключён) и совпадении выбранной микросхемы.
|
||||||
|
// В нижнем окне всегда выбирается микросхема 0.
|
||||||
|
//
|
||||||
|
// Сброс: почти все регистры асинхронно очищаются низким уровнем reset_n.
|
||||||
|
|
||||||
|
module zx_cartridge (
|
||||||
|
// Сброс
|
||||||
|
input reset_n,
|
||||||
|
// Управляющие сигналы CPU
|
||||||
|
input iorq_n,
|
||||||
|
input rd_n,
|
||||||
|
input wr_n,
|
||||||
|
input mreq_n,
|
||||||
|
// Часть адресной шины CPU
|
||||||
|
input A7,
|
||||||
|
input A13,
|
||||||
|
input A14,
|
||||||
|
input A15,
|
||||||
|
inout [7:0] D,
|
||||||
|
|
||||||
|
// Сигнал блокировки внутреннего ПЗУ ZX Spectrum
|
||||||
|
output ZX_ROM_blk,
|
||||||
|
// Выход разрешения для ПЗУ картриджа (активный низкий)
|
||||||
|
output CR_ROM_oe_n,
|
||||||
|
// Старшие биты адреса для ПЗУ (A13..A18)
|
||||||
|
output [5:0] CR_ROM_A,
|
||||||
|
// Выбор кристаллов для четырех ПЗУ 29040 (активный низкий)
|
||||||
|
output [3:0] CR_ROM_CS
|
||||||
|
);
|
||||||
|
|
||||||
|
// 8‑битный банковый регистр (хранит биты 7..0 номера страницы)
|
||||||
|
reg [7:0] reg_bank = 8'b0;
|
||||||
|
// 8‑битный регистр управления:
|
||||||
|
// reg_ctl[6:0] - доступны софтам после сброса
|
||||||
|
// reg_ctl[7] – отключение картриджа (1 = отключён)
|
||||||
|
reg [7:0] reg_ctl = 8'b0;
|
||||||
|
|
||||||
|
// В спектруме декодирование порта 7ffd идет по А1, А15 == 0.
|
||||||
|
// Декодирование портов ввода‑вывода картриджа
|
||||||
|
wire bank = iorq_n | A7 | A13 | ~A14 | ~A15; // A15=1, A14=1, A13=0, A7=0
|
||||||
|
wire control = iorq_n | A7 | ~A13 | A14 | ~A15; // A15=1, A14=0, A13=1, A7=0
|
||||||
|
|
||||||
|
// CPU обращается к области ПЗУ 0x0000..0x3FFF (A15=0, A14=0)
|
||||||
|
wire cpu_use_rom = ~(A14 | A15);
|
||||||
|
|
||||||
|
wire is_enable = reg_ctl[7];
|
||||||
|
|
||||||
|
|
||||||
|
wire write_bank = ~bank & ~wr_n;
|
||||||
|
always @(posedge write_bank or negedge reset_n) begin
|
||||||
|
if (!reset_n)
|
||||||
|
reg_bank <= 8'b0;
|
||||||
|
else
|
||||||
|
reg_bank <= D;
|
||||||
|
end
|
||||||
|
|
||||||
|
wire write_control = ~control & ~wr_n;
|
||||||
|
always @(posedge write_control or negedge reset_n) begin
|
||||||
|
if (!reset_n)
|
||||||
|
reg_ctl[7] <= 1'b0; // только бит отключения сбрасывается
|
||||||
|
else
|
||||||
|
reg_ctl <= D;
|
||||||
|
end
|
||||||
|
|
||||||
|
// Чтение регистров обратно в CPU
|
||||||
|
assign D = (~bank & ~rd_n) ? reg_bank[7:0] :
|
||||||
|
(~control & ~rd_n) ? reg_ctl : 8'bz;
|
||||||
|
|
||||||
|
|
||||||
|
// Разделение на выбор микросхемы (2 бита) и смещение страницы (6 бит)
|
||||||
|
wire [1:0] chip_sel = reg_bank[7:6]; // какая из 4 микросхем (0..3)
|
||||||
|
wire [5:0] page_offs = reg_bank[5:0]; // смещение внутри микросхемы (0..63)
|
||||||
|
|
||||||
|
// Условие доступа к картриджу:
|
||||||
|
// CPU читает область ПЗУ, MREQ и RD активны, картридж не отключён
|
||||||
|
wire rom_access = cpu_use_rom & ~mreq_n & ~rd_n & ~is_enable;
|
||||||
|
|
||||||
|
// Сигнал разрешения выходов и блокировки ПЗУ
|
||||||
|
assign CR_ROM_oe_n = ~rom_access;
|
||||||
|
assign ZX_ROM_blk = rom_access;
|
||||||
|
|
||||||
|
// CR_ROM_A зависит от окна:
|
||||||
|
// нижнее окно (A13=0) : принудительный адрес 0 (страница 0)
|
||||||
|
// верхнее окно (A13=1) : используется смещение из регистра
|
||||||
|
assign CR_ROM_A = (A13 == 1'b0) ? 6'b0 : page_offs;
|
||||||
|
|
||||||
|
// Формирование сигналов выбора микросхем:
|
||||||
|
// Для нижнего окна всегда включается микросхема 0.
|
||||||
|
// Для верхнего окна включается микросхема, выбранная chip_sel.
|
||||||
|
// CS активен низким уровнем и активен только при rom_access = истина.
|
||||||
|
// CS активен (0) только при rom_access = 1 и выполнении условий:
|
||||||
|
// - для микросхемы 0: либо нижнее окно (A13=0), либо верхнее окно с chip_sel = 0
|
||||||
|
// - для микросхем 1..3: только верхнее окно (A13=1) и chip_sel равен номеру микросхемы
|
||||||
|
assign CR_ROM_CS[0] = ~( rom_access &
|
||||||
|
( (A13 == 1'b0) || // нижнее окно всегда выбирает чип 0
|
||||||
|
( (A13 == 1'b1) && (chip_sel == 2'd0) ) ) );
|
||||||
|
assign CR_ROM_CS[1] = ~( rom_access &
|
||||||
|
( (A13 == 1'b1) && (chip_sel == 2'd1) ) );
|
||||||
|
assign CR_ROM_CS[2] = ~( rom_access &
|
||||||
|
( (A13 == 1'b1) && (chip_sel == 2'd2) ) );
|
||||||
|
assign CR_ROM_CS[3] = ~( rom_access &
|
||||||
|
( (A13 == 1'b1) && (chip_sel == 2'd3) ) );
|
||||||
|
|
||||||
|
endmodule
|
||||||
263
FW/src/zx_cartridge_tb.v
Normal file
263
FW/src/zx_cartridge_tb.v
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module tb_zx_cartridge();
|
||||||
|
// Управляющие сигналы
|
||||||
|
reg reset_n;
|
||||||
|
reg iorq_n;
|
||||||
|
reg rd_n;
|
||||||
|
reg wr_n;
|
||||||
|
reg mreq_n;
|
||||||
|
|
||||||
|
// Полная адресная шина (16 бит)
|
||||||
|
reg [15:0] address;
|
||||||
|
|
||||||
|
// Подключение отдельных бит к DUT
|
||||||
|
wire A7 = address[7];
|
||||||
|
wire A13 = address[13];
|
||||||
|
wire A14 = address[14];
|
||||||
|
wire A15 = address[15];
|
||||||
|
|
||||||
|
// Шина данных (8 бит) – двунаправленная
|
||||||
|
wire [7:0] D;
|
||||||
|
reg [7:0] D_drive; // данные для записи от тестбенча
|
||||||
|
wire [7:0] D_sample; // данные, читаемые из DUT
|
||||||
|
assign D = (wr_n == 0) ? D_drive : 8'bz;
|
||||||
|
assign D_sample = D;
|
||||||
|
|
||||||
|
// Выходы DUT
|
||||||
|
wire ZX_ROM_blk;
|
||||||
|
wire CR_ROM_oe_n;
|
||||||
|
wire [5:0] CR_ROM_A;
|
||||||
|
wire [3:0] CR_ROM_CS; // теперь 4 бита
|
||||||
|
|
||||||
|
// Вспомогательная переменная для чтения портов
|
||||||
|
reg [7:0] dummy;
|
||||||
|
|
||||||
|
// Тестируемый модуль (новая версия)
|
||||||
|
zx_cartridge uut (
|
||||||
|
.reset_n(reset_n),
|
||||||
|
.iorq_n(iorq_n),
|
||||||
|
.rd_n(rd_n),
|
||||||
|
.wr_n(wr_n),
|
||||||
|
.mreq_n(mreq_n),
|
||||||
|
.A7(A7),
|
||||||
|
.A13(A13),
|
||||||
|
.A14(A14),
|
||||||
|
.A15(A15),
|
||||||
|
.D(D),
|
||||||
|
.ZX_ROM_blk(ZX_ROM_blk),
|
||||||
|
.CR_ROM_oe_n(CR_ROM_oe_n),
|
||||||
|
.CR_ROM_A(CR_ROM_A),
|
||||||
|
.CR_ROM_CS(CR_ROM_CS)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Задачи для моделирования циклов Z80
|
||||||
|
|
||||||
|
// Запись в порт ввода-вывода
|
||||||
|
task write_port(input [15:0] addr, input [7:0] data);
|
||||||
|
begin
|
||||||
|
address = addr;
|
||||||
|
D_drive = data;
|
||||||
|
#10;
|
||||||
|
iorq_n = 0;
|
||||||
|
wr_n = 0;
|
||||||
|
#20;
|
||||||
|
iorq_n = 1;
|
||||||
|
wr_n = 1;
|
||||||
|
#10;
|
||||||
|
D_drive = 8'bz;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Чтение из порта ввода-вывода (возвращает прочитанные данные)
|
||||||
|
task read_port(input [15:0] addr, output [7:0] data);
|
||||||
|
begin
|
||||||
|
address = addr;
|
||||||
|
#10;
|
||||||
|
iorq_n = 0;
|
||||||
|
rd_n = 0;
|
||||||
|
#20;
|
||||||
|
data = D_sample;
|
||||||
|
iorq_n = 1;
|
||||||
|
rd_n = 1;
|
||||||
|
#10;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Чтение из памяти с проверкой CR_ROM_A и CR_ROM_CS (новые сигналы)
|
||||||
|
task read_mem_check(input [15:0] addr, input [5:0] exp_A, input [3:0] exp_CS);
|
||||||
|
begin
|
||||||
|
address = addr;
|
||||||
|
#10;
|
||||||
|
mreq_n = 0;
|
||||||
|
rd_n = 0;
|
||||||
|
#10; // ждём стабилизации
|
||||||
|
check_equal(exp_A, CR_ROM_A, "CR_ROM_A during read");
|
||||||
|
check_equal(exp_CS, CR_ROM_CS, "CR_ROM_CS during read");
|
||||||
|
#10;
|
||||||
|
mreq_n = 1;
|
||||||
|
rd_n = 1;
|
||||||
|
#10;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Чтение из памяти с проверкой CR_ROM_oe_n и ZX_ROM_blk
|
||||||
|
task read_mem_check_oe(input [15:0] addr, input exp_oe, input exp_blk);
|
||||||
|
begin
|
||||||
|
address = addr;
|
||||||
|
#10;
|
||||||
|
mreq_n = 0;
|
||||||
|
rd_n = 0;
|
||||||
|
#10;
|
||||||
|
check_equal(exp_oe, CR_ROM_oe_n, "CR_ROM_oe_n during read");
|
||||||
|
check_equal(exp_blk, ZX_ROM_blk, "ZX_ROM_blk during read");
|
||||||
|
#10;
|
||||||
|
mreq_n = 1;
|
||||||
|
rd_n = 1;
|
||||||
|
#10;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Простое чтение из памяти (без проверки, для установки адреса)
|
||||||
|
task read_mem(input [15:0] addr);
|
||||||
|
begin
|
||||||
|
address = addr;
|
||||||
|
#10;
|
||||||
|
mreq_n = 0;
|
||||||
|
rd_n = 0;
|
||||||
|
#20;
|
||||||
|
mreq_n = 1;
|
||||||
|
rd_n = 1;
|
||||||
|
#10;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Проверка равенства (поддерживает 4‑битные и 6‑битные аргументы)
|
||||||
|
task check_equal(input [31:0] expected, input [31:0] actual, input [80*8:0] msg);
|
||||||
|
if (expected !== actual) begin
|
||||||
|
$display("ERROR: %s. Expected %h, got %h", msg, expected, actual);
|
||||||
|
end else begin
|
||||||
|
$display("OK: %s", msg);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
$dumpfile("zx_cartridge.vcd");
|
||||||
|
$dumpvars(0, tb_zx_cartridge);
|
||||||
|
|
||||||
|
// Исходное состояние: сброс активен, все сигналы неактивны
|
||||||
|
reset_n = 0;
|
||||||
|
iorq_n = 1;
|
||||||
|
rd_n = 1;
|
||||||
|
wr_n = 1;
|
||||||
|
mreq_n = 1;
|
||||||
|
address = 16'h0000;
|
||||||
|
D_drive = 8'bz;
|
||||||
|
#100;
|
||||||
|
reset_n = 1;
|
||||||
|
#10;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// Test 1: Запись и чтение регистров через порты
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
$display("=== Test 1: Write and read registers via I/O ports ===");
|
||||||
|
|
||||||
|
// Запись в bank: адрес 0xC000 (A15=1, A14=1, A13=0, A7=0)
|
||||||
|
write_port(16'hC000, 8'hA5); // запись reg_bank = 0xA5
|
||||||
|
read_port(16'hC000, dummy);
|
||||||
|
check_equal(8'hA5, dummy, "Read bank returns written value");
|
||||||
|
|
||||||
|
// Запись в control: адрес 0xA000 (A15=1, A14=0, A13=1, A7=0)
|
||||||
|
write_port(16'hA000, 8'h80); // запись reg_ctl с битом 7 = 1 (отключение)
|
||||||
|
read_port(16'hA000, dummy);
|
||||||
|
check_equal(8'h80, dummy, "Read control returns written value");
|
||||||
|
|
||||||
|
// Сбрасываем бит disable (reg_ctl[7]=0) для дальнейших тестов
|
||||||
|
write_port(16'hA000, 8'h00);
|
||||||
|
read_port(16'hA000, dummy);
|
||||||
|
check_equal(8'h00, dummy, "Control = 0 after disable cleared");
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// Test 2: Формирование страницы и выбор микросхемы
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
$display("=== Test 2: Page and chip select formation ===");
|
||||||
|
|
||||||
|
// Записываем bank = 0xA5 -> chip_sel = 2'b10 = 2, page_offs = 6'b100101 = 37
|
||||||
|
write_port(16'hC000, 8'hA5);
|
||||||
|
|
||||||
|
// Верхнее окно (A13=1): адрес 0x2000
|
||||||
|
// Ожидаем CR_ROM_A = 37, активный CS2 (бит 2 = 0) -> 4'b1011 (младший бит = CS0)
|
||||||
|
read_mem_check(16'h2000, 6'd37, 4'b1011); // CS2 активен (0), остальные 1
|
||||||
|
|
||||||
|
// Нижнее окно (A13=0): адрес 0x1000
|
||||||
|
// Ожидаем CR_ROM_A = 0, активный CS0 -> 4'b1110
|
||||||
|
read_mem_check(16'h1000, 6'd0, 4'b1110);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// Test 3: Проверка всех вариантов chip_sel
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
$display("=== Test 3: Chip select generation for all chip_sel values ===");
|
||||||
|
|
||||||
|
// chip_sel = 0
|
||||||
|
write_port(16'hC000, 8'h00); // 0b00000000
|
||||||
|
read_mem_check(16'h2000, 6'd0, 4'b1110); // CS0 активен (0) -> 1110
|
||||||
|
read_mem_check(16'h1000, 6'd0, 4'b1110); // нижнее окно тоже CS0
|
||||||
|
|
||||||
|
// chip_sel = 1
|
||||||
|
write_port(16'hC000, 8'h40); // 0b01000000 -> chip_sel=1, offs=0
|
||||||
|
read_mem_check(16'h2000, 6'd0, 4'b1101); // CS1 активен -> 1101
|
||||||
|
read_mem_check(16'h1000, 6'd0, 4'b1110); // нижнее окно CS0
|
||||||
|
|
||||||
|
// chip_sel = 2
|
||||||
|
write_port(16'hC000, 8'h80); // 0b10000000 -> chip_sel=2, offs=0
|
||||||
|
read_mem_check(16'h2000, 6'd0, 4'b1011); // CS2 активен -> 1011
|
||||||
|
read_mem_check(16'h1000, 6'd0, 4'b1110);
|
||||||
|
|
||||||
|
// chip_sel = 3
|
||||||
|
write_port(16'hC000, 8'hC0); // 0b11000000 -> chip_sel=3, offs=0
|
||||||
|
read_mem_check(16'h2000, 6'd0, 4'b0111); // CS3 активен -> 0111
|
||||||
|
read_mem_check(16'h1000, 6'd0, 4'b1110);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// Test 4: Сигнал rom_access и CR_ROM_oe_n / ZX_ROM_blk
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
$display("=== Test 4: rom_access control ===");
|
||||||
|
|
||||||
|
// Включим картридж (reg_ctl[7]=0) – уже 0
|
||||||
|
// Чтение из области ROM (адрес 0x1000)
|
||||||
|
read_mem_check_oe(16'h1000, 1'b0, 1'b1); // CR_ROM_oe_n = 0, ZX_ROM_blk = 1
|
||||||
|
|
||||||
|
// Чтение из области не ROM (адрес 0x4000, A15=0, A14=1)
|
||||||
|
read_mem_check_oe(16'h4000, 1'b1, 1'b0); // оба неактивны
|
||||||
|
|
||||||
|
// Отключим картридж (установим бит 7)
|
||||||
|
write_port(16'hA000, 8'h80);
|
||||||
|
read_mem_check_oe(16'h1000, 1'b1, 1'b0); // неактивны, т.к. картридж отключён
|
||||||
|
|
||||||
|
// Снова включим
|
||||||
|
write_port(16'hA000, 8'h00);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// Test 5: Сброс
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
$display("=== Test 5: Reset ===");
|
||||||
|
reset_n = 0;
|
||||||
|
#20;
|
||||||
|
reset_n = 1;
|
||||||
|
#10;
|
||||||
|
|
||||||
|
// Проверим, что регистры сброшены в 0
|
||||||
|
read_port(16'hC000, dummy);
|
||||||
|
check_equal(8'h00, dummy, "bank reads 0 after reset");
|
||||||
|
read_port(16'hA000, dummy);
|
||||||
|
check_equal(8'h00, dummy, "control reads 0 after reset");
|
||||||
|
|
||||||
|
// Проверим поведение после сброса: нижнее окно CS0, страница 0
|
||||||
|
read_mem_check(16'h1000, 6'd0, 4'b1110); // нижнее окно: CS0 активен
|
||||||
|
read_mem_check(16'h2000, 6'd0, 4'b1110); // верхнее окно тоже должно быть CS0 (т.к. bank=0)
|
||||||
|
|
||||||
|
$display("=== All tests completed ===");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
@ -1,62 +0,0 @@
|
|||||||
`timescale 1ns / 1ps
|
|
||||||
// ZX SPECTRUM cartrige module
|
|
||||||
// 17.02.2026 Mikhael Kaa
|
|
||||||
// CPU adr bus A0...A12 connect directly to CR_ROM chip
|
|
||||||
module zx_cartrige #(
|
|
||||||
// default example parameter
|
|
||||||
parameter SELF_LOCK_VAL = 15
|
|
||||||
)(
|
|
||||||
// Reset
|
|
||||||
input reset_n,
|
|
||||||
// CPU ctrl signals
|
|
||||||
input iorq_n,
|
|
||||||
input rd_n,
|
|
||||||
input mreq_n,
|
|
||||||
// Part of CPU adr bus
|
|
||||||
input A7,
|
|
||||||
input A13,
|
|
||||||
input A14,
|
|
||||||
input A15,
|
|
||||||
|
|
||||||
// ZX ROM block
|
|
||||||
output ZX_ROM_blk,
|
|
||||||
// Cartrige ROM enable
|
|
||||||
output CR_ROM_oe_n,
|
|
||||||
// Up part cartrige ROM adr bus (A13...A18)
|
|
||||||
output [5:0] CR_ROM_A,
|
|
||||||
output [3:0] CR_ROM_CS
|
|
||||||
|
|
||||||
);
|
|
||||||
// CR_ROM 8kb bank counter
|
|
||||||
reg [5:0] CR_ROM_bank_cnt = 6'b0;
|
|
||||||
// Self lock register, disable all logic and CR_ROM
|
|
||||||
reg self_lock = 1'b0;
|
|
||||||
// rd or wr port 0x7f increment CR_ROM bank
|
|
||||||
wire rom_page_up = iorq_n | A7 | self_lock;
|
|
||||||
// CPU work with 0000...1fff adr
|
|
||||||
wire lower_rom = ({A13, A14, A15} == 3'b000) ? 1'b1 : 1'b0;
|
|
||||||
|
|
||||||
always @(negedge rom_page_up or negedge reset_n) begin
|
|
||||||
if(!reset_n) begin
|
|
||||||
CR_ROM_bank_cnt <= 6'b0;
|
|
||||||
self_lock <= 1'b0;
|
|
||||||
end else begin
|
|
||||||
// increment bank counter
|
|
||||||
CR_ROM_bank_cnt <= CR_ROM_bank_cnt + 1'b1;
|
|
||||||
// check self lock
|
|
||||||
if(CR_ROM_bank_cnt == SELF_LOCK_VAL) begin
|
|
||||||
self_lock <= 1'b1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
assign CR_ROM_oe_n = ~lower_rom | rd_n | mreq_n | self_lock ;
|
|
||||||
assign ZX_ROM_blk = ~CR_ROM_oe_n;
|
|
||||||
assign CR_ROM_CS[0] = CR_ROM_oe_n;
|
|
||||||
assign CR_ROM_CS[1] = 1'b1;
|
|
||||||
assign CR_ROM_CS[2] = 1'b1;
|
|
||||||
assign CR_ROM_CS[3] = 1'b1;
|
|
||||||
|
|
||||||
assign CR_ROM_A = CR_ROM_bank_cnt;
|
|
||||||
|
|
||||||
endmodule
|
|
||||||
@ -1,196 +0,0 @@
|
|||||||
`timescale 1ns / 1ps
|
|
||||||
|
|
||||||
module tb_zx_cartrige();
|
|
||||||
// Управляющие сигналы
|
|
||||||
reg reset_n;
|
|
||||||
reg iorq_n;
|
|
||||||
reg rd_n;
|
|
||||||
reg mreq_n;
|
|
||||||
|
|
||||||
// Полная адресная шина (16 бит)
|
|
||||||
reg [15:0] address;
|
|
||||||
|
|
||||||
// Подключение отдельных бит к DUT
|
|
||||||
wire A7 = address[7];
|
|
||||||
wire A13 = address[13];
|
|
||||||
wire A14 = address[14];
|
|
||||||
wire A15 = address[15];
|
|
||||||
|
|
||||||
// Выходы DUT
|
|
||||||
wire ZX_ROM_blk;
|
|
||||||
wire CR_ROM_oe_n;
|
|
||||||
wire [5:0] CR_ROM_A;
|
|
||||||
|
|
||||||
// Тестируемый модуль (с уменьшенным параметром для быстрой проверки)
|
|
||||||
zx_cartrige #(
|
|
||||||
.SELF_LOCK_VAL(3)
|
|
||||||
) uut (
|
|
||||||
.reset_n(reset_n),
|
|
||||||
.iorq_n(iorq_n),
|
|
||||||
.rd_n(rd_n),
|
|
||||||
.mreq_n(mreq_n),
|
|
||||||
.A7(A7),
|
|
||||||
.A13(A13),
|
|
||||||
.A14(A14),
|
|
||||||
.A15(A15),
|
|
||||||
.ZX_ROM_blk(ZX_ROM_blk),
|
|
||||||
.CR_ROM_oe_n(CR_ROM_oe_n),
|
|
||||||
.CR_ROM_A(CR_ROM_A)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Задачи для моделирования циклов Z80
|
|
||||||
// Запись в порт (активируется iorq_n, для инкремента важен его спад)
|
|
||||||
task write_port(input [15:0] addr);
|
|
||||||
begin
|
|
||||||
address = addr;
|
|
||||||
#10;
|
|
||||||
iorq_n = 0; // начало цикла IN/OUT
|
|
||||||
#10;
|
|
||||||
iorq_n = 1; // завершение цикла – отрицательный фронт
|
|
||||||
#10;
|
|
||||||
end
|
|
||||||
endtask
|
|
||||||
|
|
||||||
// Чтение из памяти
|
|
||||||
task read_mem(input [15:0] addr);
|
|
||||||
begin
|
|
||||||
address = addr;
|
|
||||||
#10;
|
|
||||||
mreq_n = 0; // запрос памяти
|
|
||||||
rd_n = 0; // чтение
|
|
||||||
#20; // удерживаем для проверки
|
|
||||||
mreq_n = 1;
|
|
||||||
rd_n = 1;
|
|
||||||
#10;
|
|
||||||
end
|
|
||||||
endtask
|
|
||||||
|
|
||||||
// Проверка с выводом сообщения
|
|
||||||
task check_equal(input [31:0] expected, input [31:0] actual, input [80*8:0] msg);
|
|
||||||
if (expected !== actual) begin
|
|
||||||
$display("ERROR: %s. Expected %d, got %d", msg, expected, actual);
|
|
||||||
end
|
|
||||||
endtask
|
|
||||||
|
|
||||||
initial begin
|
|
||||||
$dumpfile("zx_cartrige.vcd");
|
|
||||||
$dumpvars(0, tb_zx_cartrige);
|
|
||||||
|
|
||||||
// Исходное состояние: сброс активен, все сигналы неактивны
|
|
||||||
reset_n = 0;
|
|
||||||
iorq_n = 1;
|
|
||||||
rd_n = 1;
|
|
||||||
mreq_n = 1;
|
|
||||||
address = 16'h0000;
|
|
||||||
#100;
|
|
||||||
reset_n = 1;
|
|
||||||
#10;
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// Test 1: Инкремент происходит только при A7=0 и спаде iorq_n
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
$display("=== Test 1: Increment condition (A7=0 and iorq_n falling) ===");
|
|
||||||
check_equal(0, CR_ROM_A, "Initial CR_ROM_A");
|
|
||||||
|
|
||||||
// Попытка с A7=1 – не должен инкрементироваться
|
|
||||||
write_port(16'h0080); // A7=1 (адрес 0x80)
|
|
||||||
#10;
|
|
||||||
check_equal(0, CR_ROM_A, "After write to port 0x80 (A7=1)");
|
|
||||||
|
|
||||||
// Корректный инкремент с A7=0
|
|
||||||
write_port(16'h007F); // A7=0
|
|
||||||
#10;
|
|
||||||
check_equal(1, CR_ROM_A, "After first write to 0x7F");
|
|
||||||
|
|
||||||
write_port(16'h007F); // второй раз
|
|
||||||
#10;
|
|
||||||
check_equal(2, CR_ROM_A, "After second write to 0x7F");
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// Test 2: Достижение SELF_LOCK_VAL (3) блокирует дальнейшие инкременты
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
$display("=== Test 2: Self-lock at value 3 ===");
|
|
||||||
write_port(16'h007F); // третий раз -> lock
|
|
||||||
#10;
|
|
||||||
check_equal(3, CR_ROM_A, "After third write (should lock)");
|
|
||||||
|
|
||||||
// Попытка инкремента после блокировки
|
|
||||||
write_port(16'h007F);
|
|
||||||
#10;
|
|
||||||
check_equal(3, CR_ROM_A, "Write after lock - no increment");
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// Test 3: При self_lock=1 CR_ROM_oe_n не активируется даже в нижней ROM
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
$display("=== Test 3: CR_ROM_oe_n inactive while locked ===");
|
|
||||||
read_mem(16'h0100); // адрес в нижней области (0x100)
|
|
||||||
#10;
|
|
||||||
check_equal(1, CR_ROM_oe_n, "CR_ROM_oe_n during locked read");
|
|
||||||
check_equal(0, ZX_ROM_blk, "ZX_ROM_blk during locked read");
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// Test 4: Сброс обнуляет счётчик и снимает блокировку
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
$display("=== Test 4: Reset ===");
|
|
||||||
reset_n = 0;
|
|
||||||
#20;
|
|
||||||
reset_n = 1;
|
|
||||||
#10;
|
|
||||||
check_equal(0, CR_ROM_A, "After reset");
|
|
||||||
check_equal(1, CR_ROM_oe_n, "CR_ROM_oe_n after reset");
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// Test 5: Активация CR_ROM_oe_n при чтении нижних 8KB (self_lock=0)
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
$display("=== Test 5: CR_ROM_oe_n activation in lower ROM (0x0000-0x1FFF) ===");
|
|
||||||
|
|
||||||
// Чтение внутри нижней области
|
|
||||||
read_mem(16'h0100);
|
|
||||||
#10;
|
|
||||||
check_equal(1, CR_ROM_oe_n, "CR_ROM_oe_n at 0x100");
|
|
||||||
check_equal(0, ZX_ROM_blk, "ZX_ROM_blk at 0x100");
|
|
||||||
|
|
||||||
read_mem(16'h1FFF); // граница нижней области
|
|
||||||
#10;
|
|
||||||
check_equal(1, CR_ROM_oe_n, "CR_ROM_oe_n at 0x1FFF");
|
|
||||||
|
|
||||||
// Чтение вне нижней области
|
|
||||||
read_mem(16'h2000); // A13=1
|
|
||||||
#10;
|
|
||||||
check_equal(1, CR_ROM_oe_n, "CR_ROM_oe_n at 0x2000 (outside)");
|
|
||||||
|
|
||||||
read_mem(16'h4001); // A14=1
|
|
||||||
#10;
|
|
||||||
check_equal(1, CR_ROM_oe_n, "CR_ROM_oe_n at 0x4001 (outside)");
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// Test 6: Проверка влияния mreq_n и rd_n
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
$display("=== Test 6: Control signals mreq_n and rd_n ===");
|
|
||||||
address = 16'h0100;
|
|
||||||
#10;
|
|
||||||
|
|
||||||
// mreq_n=0, rd_n=1 – чтение не активно
|
|
||||||
mreq_n = 0; rd_n = 1;
|
|
||||||
#10;
|
|
||||||
check_equal(1, CR_ROM_oe_n, "CR_ROM_oe_n with rd_n=1");
|
|
||||||
|
|
||||||
// mreq_n=1, rd_n=0 – нет запроса памяти
|
|
||||||
mreq_n = 1; rd_n = 0;
|
|
||||||
#10;
|
|
||||||
check_equal(1, CR_ROM_oe_n, "CR_ROM_oe_n with mreq_n=1");
|
|
||||||
|
|
||||||
// Оба активны – должно включиться
|
|
||||||
mreq_n = 0; rd_n = 0;
|
|
||||||
#10;
|
|
||||||
check_equal(0, CR_ROM_oe_n, "CR_ROM_oe_n with both active");
|
|
||||||
|
|
||||||
// Возврат в исходное
|
|
||||||
mreq_n = 1; rd_n = 1;
|
|
||||||
#10;
|
|
||||||
|
|
||||||
$display("=== All tests completed ===");
|
|
||||||
$finish;
|
|
||||||
end
|
|
||||||
|
|
||||||
endmodule
|
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
set_global_assignment -name FAMILY MAX7000S
|
set_global_assignment -name FAMILY MAX7000S
|
||||||
set_global_assignment -name DEVICE "EPM7064SLC44-10"
|
set_global_assignment -name DEVICE "EPM7064SLC44-10"
|
||||||
set_global_assignment -name TOP_LEVEL_ENTITY zx_cartrige
|
set_global_assignment -name TOP_LEVEL_ENTITY zx_cartridge
|
||||||
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "13.0 SP1"
|
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "13.0 SP1"
|
||||||
set_global_assignment -name PROJECT_CREATION_TIME_DATE "14:32:59 FEBRUARY 06, 2026"
|
set_global_assignment -name PROJECT_CREATION_TIME_DATE "14:32:59 FEBRUARY 06, 2026"
|
||||||
set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1"
|
set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1"
|
||||||
@ -50,25 +50,34 @@ set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR "-1"
|
|||||||
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
|
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
|
||||||
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
|
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
|
||||||
set_global_assignment -name MAX7000_DEVICE_IO_STANDARD TTL
|
set_global_assignment -name MAX7000_DEVICE_IO_STANDARD TTL
|
||||||
set_location_assignment PIN_1 -to reset_n
|
set_global_assignment -name VERILOG_FILE src/zx_cartridge.v
|
||||||
set_global_assignment -name VERILOG_FILE src/zx_cartrige.v
|
|
||||||
set_global_assignment -name CDF_FILE output_files/Chain1.cdf
|
set_global_assignment -name CDF_FILE output_files/Chain1.cdf
|
||||||
set_location_assignment PIN_18 -to A7
|
set_location_assignment PIN_1 -to reset_n
|
||||||
set_location_assignment PIN_19 -to A13
|
set_location_assignment PIN_2 -to rd_n
|
||||||
set_location_assignment PIN_20 -to A14
|
set_location_assignment PIN_4 -to wr_n
|
||||||
set_location_assignment PIN_21 -to A15
|
set_location_assignment PIN_6 -to A14
|
||||||
set_location_assignment PIN_31 -to CR_ROM_A[5]
|
set_location_assignment PIN_8 -to A15
|
||||||
set_location_assignment PIN_29 -to CR_ROM_A[4]
|
set_location_assignment PIN_9 -to A13
|
||||||
set_location_assignment PIN_28 -to CR_ROM_A[3]
|
set_location_assignment PIN_11 -to CR_ROM_CS[0]
|
||||||
set_location_assignment PIN_9 -to CR_ROM_A[2]
|
set_location_assignment PIN_12 -to CR_ROM_CS[1]
|
||||||
set_location_assignment PIN_11 -to CR_ROM_A[1]
|
set_location_assignment PIN_14 -to CR_ROM_CS[2]
|
||||||
set_location_assignment PIN_12 -to CR_ROM_A[0]
|
set_location_assignment PIN_16 -to CR_ROM_A[5]
|
||||||
set_location_assignment PIN_34 -to CR_ROM_oe_n
|
set_location_assignment PIN_18 -to CR_ROM_A[4]
|
||||||
set_location_assignment PIN_27 -to ZX_ROM_blk
|
set_location_assignment PIN_19 -to CR_ROM_A[3]
|
||||||
set_location_assignment PIN_24 -to iorq_n
|
set_location_assignment PIN_20 -to CR_ROM_A[1]
|
||||||
set_location_assignment PIN_25 -to mreq_n
|
set_location_assignment PIN_21 -to CR_ROM_A[2]
|
||||||
set_location_assignment PIN_26 -to rd_n
|
set_location_assignment PIN_24 -to A7
|
||||||
set_location_assignment PIN_8 -to CR_ROM_CS[3]
|
set_location_assignment PIN_25 -to CR_ROM_A[0]
|
||||||
set_location_assignment PIN_6 -to CR_ROM_CS[2]
|
set_location_assignment PIN_26 -to CR_ROM_oe_n
|
||||||
set_location_assignment PIN_5 -to CR_ROM_CS[1]
|
set_location_assignment PIN_27 -to CR_ROM_CS[2]
|
||||||
set_location_assignment PIN_4 -to CR_ROM_CS[0]
|
set_location_assignment PIN_28 -to D[0]
|
||||||
|
set_location_assignment PIN_29 -to D[1]
|
||||||
|
set_location_assignment PIN_31 -to D[7]
|
||||||
|
set_location_assignment PIN_33 -to ZX_ROM_blk
|
||||||
|
set_location_assignment PIN_34 -to D[2]
|
||||||
|
set_location_assignment PIN_37 -to D[6]
|
||||||
|
set_location_assignment PIN_39 -to D[4]
|
||||||
|
set_location_assignment PIN_40 -to D[3]
|
||||||
|
set_location_assignment PIN_41 -to D[5]
|
||||||
|
set_location_assignment PIN_43 -to mreq_n
|
||||||
|
set_location_assignment PIN_44 -to iorq_n
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit c41200a6ad7d258b53d009f64863589a1fd4ec8b
|
Subproject commit d32899a31a641d1caf2bda05e2c799e5582739e4
|
||||||
Binary file not shown.
Binary file not shown.
@ -717,6 +717,22 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=PLYWCAJP
|
DocumentUniqueId=PLYWCAJP
|
||||||
|
|
||||||
|
[GeneratedDocument1]
|
||||||
|
DocumentPath=Project Outputs for zx_cartridge\Design Rule Check - pcb.html
|
||||||
|
DItemRevisionGUID=
|
||||||
|
|
||||||
|
[GeneratedDocument2]
|
||||||
|
DocumentPath=Project Outputs for zx_cartridge\pcb.DRR
|
||||||
|
DItemRevisionGUID=
|
||||||
|
|
||||||
|
[GeneratedDocument3]
|
||||||
|
DocumentPath=Project Outputs for zx_cartridge\pcb.LDP
|
||||||
|
DItemRevisionGUID=
|
||||||
|
|
||||||
|
[GeneratedDocument4]
|
||||||
|
DocumentPath=Project Outputs for zx_cartridge\pcb.TXT
|
||||||
|
DItemRevisionGUID=
|
||||||
|
|
||||||
[Configuration1]
|
[Configuration1]
|
||||||
Name=Sources
|
Name=Sources
|
||||||
ParameterCount=0
|
ParameterCount=0
|
||||||
@ -973,99 +989,99 @@ Name=Fabrication Outputs
|
|||||||
Description=
|
Description=
|
||||||
TargetPrinter=Microsoft Print to PDF
|
TargetPrinter=Microsoft Print to PDF
|
||||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
OutputType1=CompositeDrill
|
OutputType1=NC Drill
|
||||||
OutputName1=Composite Drill Drawing
|
OutputName1=NC Drill Files
|
||||||
OutputDocumentPath1=
|
OutputDocumentPath1=
|
||||||
OutputVariantName1=
|
OutputVariantName1=
|
||||||
OutputDefault1=0
|
OutputDefault1=0
|
||||||
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
Configuration1_Name1=ForceUpdateSettings
|
||||||
OutputType2=Drill
|
Configuration1_Item1=False
|
||||||
OutputName2=Drill Drawing/Guides
|
Configuration1_Name2=OutputConfigurationParameter1
|
||||||
|
Configuration1_Item2=BoardEdgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes
|
||||||
|
OutputType2=Mask
|
||||||
|
OutputName2=Solder/Paste Mask Prints
|
||||||
OutputDocumentPath2=
|
OutputDocumentPath2=
|
||||||
OutputVariantName2=
|
OutputVariantName2=
|
||||||
OutputDefault2=0
|
OutputDefault2=0
|
||||||
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=2.56|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
Configuration2_Name1=ForceUpdateSettings
|
OutputType3=IPC2581
|
||||||
Configuration2_Item1=False
|
OutputName3=IPC-2581 Files
|
||||||
Configuration2_Name2=OutputConfigurationParameter1
|
|
||||||
Configuration2_Item2=DesignatorDisplayMode=Physical|PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
|
|
||||||
Configuration2_Name3=OutputConfigurationParameter2
|
|
||||||
Configuration2_Item3=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=0|Mirror=False|Name=Drill Drawing For (Top Layer - Bottom Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
|
|
||||||
Configuration2_Name4=OutputConfigurationParameter3
|
|
||||||
Configuration2_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
|
|
||||||
Configuration2_Name5=OutputConfigurationParameter4
|
|
||||||
Configuration2_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
|
|
||||||
Configuration2_Name6=OutputConfigurationParameter5
|
|
||||||
Configuration2_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
|
|
||||||
Configuration2_Name7=OutputConfigurationParameter6
|
|
||||||
Configuration2_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
|
|
||||||
Configuration2_Name8=OutputConfigurationParameter7
|
|
||||||
Configuration2_Item8=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=1|Mirror=False|Name=Drill Guide For (Top Layer - Bottom Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
|
|
||||||
Configuration2_Name9=OutputConfigurationParameter8
|
|
||||||
Configuration2_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillGuide|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
|
|
||||||
Configuration2_Name10=OutputConfigurationParameter9
|
|
||||||
Configuration2_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
|
|
||||||
Configuration2_Name11=OutputConfigurationParameter10
|
|
||||||
Configuration2_Item11=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
|
|
||||||
Configuration2_Name12=OutputConfigurationParameter11
|
|
||||||
Configuration2_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
|
|
||||||
OutputType3=Board Stack Report
|
|
||||||
OutputName3=Report Board Stack
|
|
||||||
OutputDocumentPath3=
|
OutputDocumentPath3=
|
||||||
OutputVariantName3=
|
OutputVariantName3=
|
||||||
OutputDefault3=0
|
OutputDefault3=0
|
||||||
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
OutputType4=Test Points
|
||||||
OutputType4=Final
|
OutputName4=Test Point Report
|
||||||
OutputName4=Final Artwork Prints
|
|
||||||
OutputDocumentPath4=
|
OutputDocumentPath4=
|
||||||
OutputVariantName4=[No Variations]
|
OutputVariantName4=
|
||||||
OutputDefault4=0
|
OutputDefault4=0
|
||||||
PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
OutputType5=Plane
|
||||||
OutputType5=Gerber X2
|
OutputName5=Power-Plane Prints
|
||||||
OutputName5=Gerber X2 Files
|
|
||||||
OutputDocumentPath5=
|
OutputDocumentPath5=
|
||||||
OutputVariantName5=
|
OutputVariantName5=
|
||||||
OutputDefault5=0
|
OutputDefault5=0
|
||||||
Configuration5_Name1=ForceUpdateSettings
|
PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
Configuration5_Item1=False
|
|
||||||
Configuration5_Name2=OutputConfigurationParameter1
|
|
||||||
Configuration5_Item2=FileComment= |FileSubject=Autodetect|GenerateDRCRulesFile=True|GerberUnit=Imperial|MinusApertureTolerance=50|NumberOfDecimals=6|OptimizeChangeLocationCommands=True|PlotBackDrillingPairs=False|PlotBlindViasPairs=False|PlotBoardProfile=True|PlotDrillDrawingPair0_Backdrill=False|PlotDrillDrawingPair0_DrillType=Regular|PlotDrillDrawingPair0_HighLayer=Bottom Layer|PlotDrillDrawingPair0_LowLayer=Top Layer|PlotDrillDrawingPairs=False|PlotDrillGuidePair0_Backdrill=False|PlotDrillGuidePair0_DrillType=Regular|PlotDrillGuidePair0_HighLayer=Bottom Layer|PlotDrillGuidePair0_LowLayer=Top Layer|PlotDrillGuidePairs=False|PlotMicroViasPairs=False|PlotNPTHPair0_Backdrill=False|PlotNPTHPair0_DrillType=Regular|PlotNPTHPair0_HighLayer=Top Layer|PlotNPTHPair0_LowLayer=Bottom Layer|PlotNPTHPairs=False|PlotPTHPair0_Backdrill=False|PlotPTHPair0_DrillType=Regular|PlotPTHPair0_HighLayer=Top Layer|PlotPTHPair0_LowLayer=Bottom Layer|PlotPTHPairs=False|PlotX2.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean,16777217~1,16973831~1,16973849~1,16973835~1,16973830~1,16842751~1,16973834~1,16973837~1,16973848~1|PlusApertureTolerance=50|Record=GerberX2View|Sorted=False
|
|
||||||
OutputType6=ODB
|
OutputType6=ODB
|
||||||
OutputName6=ODB++ Files
|
OutputName6=ODB++ Files
|
||||||
OutputDocumentPath6=
|
OutputDocumentPath6=
|
||||||
OutputVariantName6=[No Variations]
|
OutputVariantName6=[No Variations]
|
||||||
OutputDefault6=0
|
OutputDefault6=0
|
||||||
OutputType7=Mask
|
OutputType7=Drill
|
||||||
OutputName7=Solder/Paste Mask Prints
|
OutputName7=Drill Drawing/Guides
|
||||||
OutputDocumentPath7=
|
OutputDocumentPath7=
|
||||||
OutputVariantName7=
|
OutputVariantName7=
|
||||||
OutputDefault7=0
|
OutputDefault7=0
|
||||||
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.92|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
OutputType8=NC Drill
|
Configuration7_Name1=ForceUpdateSettings
|
||||||
OutputName8=NC Drill Files
|
Configuration7_Item1=False
|
||||||
|
Configuration7_Name2=OutputConfigurationParameter1
|
||||||
|
Configuration7_Item2=DesignatorDisplayMode=Physical|PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
|
||||||
|
Configuration7_Name3=OutputConfigurationParameter2
|
||||||
|
Configuration7_Item3=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=0|Mirror=False|Name=Drill Drawing For (Top Layer - Bottom Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
|
||||||
|
Configuration7_Name4=OutputConfigurationParameter3
|
||||||
|
Configuration7_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
|
||||||
|
Configuration7_Name5=OutputConfigurationParameter4
|
||||||
|
Configuration7_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
|
||||||
|
Configuration7_Name6=OutputConfigurationParameter5
|
||||||
|
Configuration7_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
|
||||||
|
Configuration7_Name7=OutputConfigurationParameter6
|
||||||
|
Configuration7_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
|
||||||
|
Configuration7_Name8=OutputConfigurationParameter7
|
||||||
|
Configuration7_Item8=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=1|Mirror=False|Name=Drill Guide For (Top Layer - Bottom Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
|
||||||
|
Configuration7_Name9=OutputConfigurationParameter8
|
||||||
|
Configuration7_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillGuide|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
|
||||||
|
Configuration7_Name10=OutputConfigurationParameter9
|
||||||
|
Configuration7_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
|
||||||
|
Configuration7_Name11=OutputConfigurationParameter10
|
||||||
|
Configuration7_Item11=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
|
||||||
|
Configuration7_Name12=OutputConfigurationParameter11
|
||||||
|
Configuration7_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
|
||||||
|
OutputType8=CompositeDrill
|
||||||
|
OutputName8=Composite Drill Drawing
|
||||||
OutputDocumentPath8=
|
OutputDocumentPath8=
|
||||||
OutputVariantName8=
|
OutputVariantName8=
|
||||||
OutputDefault8=0
|
OutputDefault8=0
|
||||||
Configuration8_Name1=ForceUpdateSettings
|
PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
Configuration8_Item1=False
|
OutputType9=Board Stack Report
|
||||||
Configuration8_Name2=OutputConfigurationParameter1
|
OutputName9=Report Board Stack
|
||||||
Configuration8_Item2=BoardEdgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes
|
|
||||||
OutputType9=IPC2581
|
|
||||||
OutputName9=IPC-2581 Files
|
|
||||||
OutputDocumentPath9=
|
OutputDocumentPath9=
|
||||||
OutputVariantName9=
|
OutputVariantName9=
|
||||||
OutputDefault9=0
|
OutputDefault9=0
|
||||||
OutputType10=Plane
|
PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
OutputName10=Power-Plane Prints
|
OutputType10=Gerber X2
|
||||||
|
OutputName10=Gerber X2 Files
|
||||||
OutputDocumentPath10=
|
OutputDocumentPath10=
|
||||||
OutputVariantName10=
|
OutputVariantName10=
|
||||||
OutputDefault10=0
|
OutputDefault10=0
|
||||||
PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
Configuration10_Name1=ForceUpdateSettings
|
||||||
OutputType11=Test Points
|
Configuration10_Item1=False
|
||||||
OutputName11=Test Point Report
|
Configuration10_Name2=OutputConfigurationParameter1
|
||||||
|
Configuration10_Item2=FileComment= |FileSubject=Autodetect|GenerateDRCRulesFile=True|GerberUnit=Imperial|MinusApertureTolerance=50|NumberOfDecimals=6|OptimizeChangeLocationCommands=True|PlotBackDrillingPairs=False|PlotBlindViasPairs=False|PlotBoardProfile=True|PlotDrillDrawingPair0_Backdrill=False|PlotDrillDrawingPair0_DrillType=Regular|PlotDrillDrawingPair0_HighLayer=Bottom Layer|PlotDrillDrawingPair0_LowLayer=Top Layer|PlotDrillDrawingPairs=False|PlotDrillGuidePair0_Backdrill=False|PlotDrillGuidePair0_DrillType=Regular|PlotDrillGuidePair0_HighLayer=Bottom Layer|PlotDrillGuidePair0_LowLayer=Top Layer|PlotDrillGuidePairs=False|PlotMicroViasPairs=False|PlotNPTHPair0_Backdrill=False|PlotNPTHPair0_DrillType=Regular|PlotNPTHPair0_HighLayer=Top Layer|PlotNPTHPair0_LowLayer=Bottom Layer|PlotNPTHPairs=False|PlotPTHPair0_Backdrill=False|PlotPTHPair0_DrillType=Regular|PlotPTHPair0_HighLayer=Top Layer|PlotPTHPair0_LowLayer=Bottom Layer|PlotPTHPairs=False|PlotX2.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean,16777217~1,16973831~1,16973849~1,16973835~1,16973830~1,16842751~1,16973834~1,16973837~1,16973848~1|PlusApertureTolerance=50|Record=GerberX2View|Sorted=False
|
||||||
|
OutputType11=Final
|
||||||
|
OutputName11=Final Artwork Prints
|
||||||
OutputDocumentPath11=
|
OutputDocumentPath11=
|
||||||
OutputVariantName11=
|
OutputVariantName11=[No Variations]
|
||||||
OutputDefault11=0
|
OutputDefault11=0
|
||||||
|
PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
OutputType12=Gerber
|
OutputType12=Gerber
|
||||||
OutputName12=Gerber Files
|
OutputName12=Gerber Files
|
||||||
OutputDocumentPath12=
|
OutputDocumentPath12=
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user