Pin NTPL (pin 83) určuje televizní systém: - NTPL = '0' → PAL (evropská verze MZ-800) - NTPL = '1' → NTSC (japonská verze MZ-800)
V evropské verzi je NTPL připojen na GND (konstantně '0').
Signál i_NTPL se v GDG_core.vhd vyskytuje na 8 místech a ovlivňuje
5 hlavních subsystému: COLUMN čítač, HSYNC, VSYNC/VBLN, CPU clock
a ROW čítač.
NTPL přímo určuje předvolbu (preset) obou 4-bit čítačů COLUMN.
Řádky 6330–6352. Předvolby závislé na NTPL:
-- radek 6146:
net_F961_61_9_in2 <= NOT i_NTPL; -- PAL=1, NTSC=0
-- radek 6147:
net_F961_61_9_in4 <= NOT ( NOT i_NTPL ); -- PAL=0, NTSC=1
| Vstup | Signál | PAL (NTPL=0) | NTSC (NTPL=1) |
|---|---|---|---|
| I1 | net_F100_88_7_in | 1 (*) | závisí na CKSW |
| I2 | NOT i_NTPL | 1 | 0 |
| I3 | NOT i_NTPL | 1 | 0 |
| I4 | i_NTPL | 0 | 1 |
(*) Při CKSW=0: I1 = NTPL NAND CKSW = 0 NAND 0 = 1
Předvolba COLUMN(7:4): - PAL: I4 I3 I2 I1 = 0110 → preset 6 - NTSC: I4 I3 I2 I1 = 1001 → preset 9
Řádky 6596–6617. Předvolby při CKSW=0:
-- radek 6548:
net_F100_88_7_in <= i_NTPL NAND net_F961_61_7_in2;
-- radek 6545:
net_F431_89_8_out <= NOT ( ( i_NTPL OR net_F961_61_7_in2 )
AND net_F100_88_7_in );
-- radek 6678:
net_F100_88_7_out <= NOT net_F100_88_7_in;
| Vstup | Signál | PAL (NTPL=0, CKSW=0) | NTSC (NTPL=1, CKSW=0) |
|---|---|---|---|
| I1 | GND | 0 | 0 |
| I2 | CKSW | 0 | 0 |
| I3 | XNOR(NTPL,CKSW) | 1 | 0 |
| I4 | NOT(NTPL NAND CKSW) | 0 | 1 |
Předvolba COLUMN(3:0): - PAL: I4 I3 I2 I1 = 0100 → preset 4 - NTSC: I4 I3 I2 I1 = 1000 → preset 8
| Systém | COLUMN(7:4) | COLUMN(3:0) | Celkem | H-perioda |
|---|---|---|---|---|
| PAL | 0110 (6) | 0100 (4) | 0x64 = 100 | 1136 CLK0 (*) |
| NTSC | 1001 (9) | 1000 (8) | 0x98 = 152 | 910 CLK0 (*) |
(*) Čítač odpočítává od preset do přetečení (256). COLUMN je inkrementovan každou periodu CLK0 (po vydělení). Rozdíl v presetu přímo ovlivňuje délku řádku.
Pozn.: Přesná délka řádku závisí na dělicím poměru, který určuje jak často se COLUMN čítač inkrementuje. Hodnoty 1136 a 910 jsou orientační — skutečný timing je třeba ověřit simulací.
NTPL ovlivňuje HSYNC dvěma cestami:
HSYNC je generovan 4 flip-flopy xF615_141_20 až xF615_141_23, které porovnávají bus_COLUMN s pevnými hodnotami. Změna presetu COLUMN čítače posouvá pozici HSYNC v řádku.
Dva resety flip-flopu závisí na NTPL (řádky 2454–2461):
-- radek 2454:
net_F202_152_26_in1 <= NOT i_NTPL;
-- radek 2455:
net_F202_151_26_in1 <= NOT ( NOT i_NTPL );
-- radek 2458 (reset pro xF615_141_22 a xF615_141_21):
net_F100_76_20_in <= net_F202_152_26_in1 NOR net_F202_152_26_in2;
-- radek 2461 (reset pro xF615_141_23 a xF615_141_20):
net_F100_135_22_in <= net_F202_151_26_in1 NOR net_F202_152_26_in2;
Druhý vstup NOR brány (net_F202_152_26_in2) je buffer
signálu net_F112_128_13_in (řádek 2948), který pochází z
xF631_150_19 (TEST/MOD7/TEMP logika).
Efekt: Při PAL (NTPL=0) je NOT NTPL = 1, takže NOR brána na řádku 2458 dava výsledek 0 nezavisle na druhém vstupu → reset flip-flopu xF615_141_22/21 je trvale aktivní (nRES=0). Při NTSC (NTPL=1) se reset řídí signálem net_F202_152_26_in2.
Toto mění sadu flip-flopu, které se podílejí na generování HSYNC — fakticky se přepíná mezi dvěma různými HSYNC timingys.
| Flip-flop | Reset signál | PAL (NTPL=0) | NTSC (NTPL=1) |
|---|---|---|---|
| xF615_141_23 (řádek 3204) | net_F100_135_22_in | aktivní | závisí na F202 |
| xF615_141_22 (řádek 3479) | net_F100_76_20_in | trvale reset | závisí na F202 |
| xF615_141_21 (řádek 3751) | net_F100_76_20_in | trvale reset | závisí na F202 |
| xF615_141_20 (řádek 4018) | net_F100_135_22_in | aktivní | závisí na F202 |
D vstupy všech čtyř flip-flopu porovnávají bity bus_COLUMN s různými kombinacemi (AND-OR-NOT logika). Přesně pozice HSYNC pulsu jsou určený soucinem COLUMN bitu a stavu těchto flip-flopu.
-- radek 2451:
o_nHSYN <= net_F424_27_26_in4 NAND net_F424_37_26_in4;
HSYNC = NAND výstupu xF615_141_23 a xF615_141_22.
-- radek 3647:
o_nVSYN <= net_F424_56_19_in1 NAND net_F424_46_20_in1;
Zdroje: - net_F424_56_19_in1 — výstup xF612_58_19 (řádek 4406–4412) - D vstup: net_F424_56_19_out (zpětná vazba z bus_ROW bitu) - Reset: net_F612_73_19_rst = NOT net_F100_76_20_in (řádek 4140) - net_F424_46_20_in1 — výstup xF612_45_22 (řádek 3652–3658) - D vstup: net_F424_46_20_out (zpětná vazba z bus_ROW bitu) - Reset: net_F612_57_18_rst = NOT net_F100_135_22_in (řádek 3503)
VSYNC není přímo rizeno NTPL, ale neprime cesty existuji: 1. Resety flip-flopu závisí na net_F100_76_20_in / net_F100_135_22_in (které závisí na NTPL, viz výše) 2. D vstupy porovnávají bus_ROW, jehoz cyklovani je ovlivneno NTPL přes ROW čítač reset
-- radek 5798:
o_nVBLN <= NOT net_F100_111_13_in;
Flip-flop xF615_120_12 (řádek 5957–5962): - Reset: net_F114_17_19_in = NOT net_F105_139_19_in (řádek 4291) - net_F105_139_19_in pochází z xF631_150_19 (TEST/MOD7/TEMP logika)
VBLN není přímo ovlivneno NTPL. Změna poctu řádku (ROW čítač) vsak ovlivni, kdy se VBLN přepne.
Dva 4-bit čítače generuji bus_ROW(7:0):
Řádky 5730–5746:
| Vstup | Signál | Hodnota |
|---|---|---|
| I1 | net_F961_61_9_in4 | PAL=0, NTSC=1 |
| I2 | net_F961_61_9_in4 | PAL=0, NTSC=1 |
| I3 | VDD | 1 |
| I4 | VDD | 1 |
Řádky 6046–6062:
| Vstup | Signál | Hodnota |
|---|---|---|
| I1 | GND | 0 |
| I2 | net_F961_61_9_in4 | PAL=0, NTSC=1 |
| I3 | GND | 0 |
| I4 | VDD | 1 |
| Systém | ROW(7:4) | ROW(3:0) | Celkem | Řádku/snímek |
|---|---|---|---|---|
| PAL | 1100 (C) | 1000 (8) | 0xC8 = 200 | 312 (*) |
| NTSC | 1111 (F) | 1010 (A) | 0xFA = 250 | 262 (*) |
(*) Čítač odpočítává od preset (po přetečení) do dalšího přetečení: 256 - preset = počet viditelnych řádku... ne, správně: čítač cita od presetu do 255 a pak pretece → celkový počet = 256 - preset + 56 (zbytek). Přesný počet řádku je třeba ověřit simulací.
Standardní hodnoty: PAL = 312 řádku, NTSC = 262 řádku.
-- radek 5771:
xF114_137_13: F114_Buffer32 PORT MAP (
I => net_F114_137_13_in, O => net_F961_61_11_rst);
-- radek 5786:
net_F114_137_13_in <= NOT net_F112_128_13_in;
Reset signál net_F961_61_11_rst je sdileny s COLUMN reset logikou.
NTPL přímo ovlivňuje generování CPU clocku (řádky 6356, 6497):
-- radek 6356:
net_F302_141_8_in1 <= net_F615_10_13_d NAND i_NTPL;
-- radek 6500:
net_F302_141_8_in2 <= net_F612_131_6_out NOR net_F424_138_4_in1;
-- radek 6497:
o_CPU <= net_F302_141_8_in1 NAND net_F302_141_8_in2;
Při PAL (NTPL=0): net_F302_141_8_in1 = X NAND 0 = 1 (konstanta). CPU clock je pak určen pouze signálem net_F302_141_8_in2:
o_CPU = 1 NAND net_F302_141_8_in2 = NOT net_F302_141_8_in2
Při NTSC (NTPL=1): net_F302_141_8_in1 = NOT net_F615_10_13_d. CPU clock závisí na obou vstupech NAND brány — pridava se další podminka z COLUMN čítače (přes xF642_131_11 flip-flop).
Efekt: NTPL přepíná generování CPU clocku mezi dvěma režimy. V PAL režimu je CPU clock jednodussi funkce COLUMN stavu. V NTSC režimu je modulovan dalším signálem.
NTPL se přímo podílí na resetu COLUMN-related flip-flopu:
-- radek 5789:
net_F102_127_11_in <= net_F112_128_13_in NOR i_NTPL;
-- radek 6102:
net_F612_131_3_rst <= NOT net_F102_127_11_in;
Při PAL (NTPL=0): NOR brána propousti net_F112_128_13_in. Reset flip-flopu = NOT(NOT signál) = signál.
Při NTSC (NTPL=1): NOR brána dava vždy 0 (protože NTPL=1). Reset = NOT 0 = 1 → flip-flopy xF612_131_3/4/6 nikdy nejsou resetovany touto cestou v NTSC režimu.
Ovlivnene flip-flopy: - xF612_131_3 (řádek 7422) — O: net_F612_131_3_out - xF612_131_4 (řádek 7176) — O: net_F424_138_4_in1 (→ CPU clock) - xF612_131_6 (řádek 6741) — O: net_F612_131_6_out (→ CPU clock)
Následující hodnoty byly ověřený simulací C modelu GDG (diag_ntsc_timing.c), který je 1:1 prepis VHDL netlisu. Měření probehlo po plnem resetu a ustálení (2 snímky).
| Parametr | PAL (NTPL=0) | NTSC (NTPL=1) |
|---|---|---|
| CPU clock dělička | CLK0/5 (3.547 MHz) | CLK0/4 (4.434 MHz) |
| CPU duty cycle | 2:3 CLK0 (LOW:HIGH) | 2:2 CLK0 (symetricky) |
| CKMS dělička | CLK0/16 (1.108 MHz) | CLK0/16 (1.108 MHz) |
| CKMS duty cycle | 8:8 CLK0 | 8:8 CLK0 |
| line_ticks | 1136 CLK0 | 912 CLK0 |
| total_rows | 312 | 262 |
| frame_ticks | 354432 CLK0 | 238944 CLK0 |
| snimkova frekvence | 50.04 Hz | 74.27 Hz (*) |
| CPU cyklů na řádek | 227.2 | 228.0 |
(*) NTSC snimkova frekvence 74.27 Hz neodpovida standardnimu NTSC (59.94 Hz). Je možné, ze japonská verze pouzivala jiný krystal, nebo ze CKSW modifikuje timing další cestou. Hodnota 912 CLK0/řádek je overena, ale skutečný NTSC vyrobek mohl mit odlišný CLK0.
V PAL režimu je jeden vstup NAND brány (net_F302_141_8_in1) konstantní 1, takže CPU clock = NOT(net_F302_141_8_in2) = čistá CLK0/5 dělička.
V NTSC režimu jsou oba vstupy NAND brány aktivní — pridava se modulace z COLUMN čítače (přes xF642_131_11 flip-flop), což mění delici poměr na CLK0/4. CPU clock je v NTSC symetricky (2:2 CLK0), zatímco v PAL ma duty cycle 2:3 CLK0 (ale stále perioda 5 CLK0).
CKMS je odvozena z bus_COLUMN(0) přes flip-flop. Přesto ze COLUMN preset se mění (0x64 vs 0x98), CKMS zůstává CLK0/16 v obou režimech. Je to proto, ze COLUMN counter je inkrementovan 3-bitovou delickou (perioda 8 CLK0), a COLUMN(0) se mění kazdych 8 CLK0 nezavisle na presetu.
| Subsystém | Typ vlivu NTPL | Efekt |
|---|---|---|
| COLUMN čítač | přímý — preset I2,I3,I4 | PAL: preset 0x64, NTSC: preset 0x98 |
| HSYNC | přímý — reset flip-flopu | PAL: 2 FF trvale reset, NTSC: všechny 4 aktivní |
| ROW čítač | přímý — preset I1,I2 | PAL: preset 0xC8, NTSC: preset 0xFA |
| VSYNC | neprimo — přes ROW a reset | změna pozice VSYNC ve snímku |
| VBLN | neprimo — přes ROW | změna poctu řádku v canvas/border |
| CPU clock | přímý — NAND brána | PAL: CLK0/5 (3.547 MHz), NTSC: CLK0/4 (4.434 MHz) |
| COLUMN reset | přímý — NOR brána | PAL: reset aktivní, NTSC: reset blokovany |
| CKMS (pin 97) | neprimo — přes COLUMN | nemění se (CLK0/16 v obou režimech) |
Změna NTPL propojky z '0' na '1' kompletne přepne video timing z PAL (312 řádku, 50 Hz, 1136 CLK0/řádek, CPU CLK0/5) na NTSC (262 řádku, ~74 Hz, 912 CLK0/řádek, CPU CLK0/4).