patch with Fredi's lp fix (and others)
This commit is contained in:
@@ -28,29 +28,30 @@ ENTITY blitter IS
|
||||
-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
|
||||
PORT
|
||||
(
|
||||
nRSTO : IN STD_LOGIC;
|
||||
MAIN_CLK : IN STD_LOGIC;
|
||||
FB_ALE : IN STD_LOGIC;
|
||||
nFB_WR : IN STD_LOGIC;
|
||||
nFB_OE : IN STD_LOGIC;
|
||||
FB_SIZE0 : IN STD_LOGIC;
|
||||
FB_SIZE1 : IN STD_LOGIC;
|
||||
VIDEO_RAM_CTR : IN STD_LOGIC_VECTOR(15 downto 0);
|
||||
BLITTER_ON : IN STD_LOGIC;
|
||||
FB_ADR : IN STD_LOGIC_VECTOR(31 downto 0);
|
||||
nFB_CS1 : IN STD_LOGIC;
|
||||
nFB_CS2 : IN STD_LOGIC;
|
||||
nFB_CS3 : IN STD_LOGIC;
|
||||
DDRCLK0 : IN STD_LOGIC;
|
||||
BLITTER_DIN : IN STD_LOGIC_VECTOR(127 downto 0);
|
||||
BLITTER_DACK : IN STD_LOGIC_VECTOR(4 downto 0);
|
||||
BLITTER_RUN : OUT STD_LOGIC;
|
||||
BLITTER_DOUT : OUT STD_LOGIC_VECTOR(127 downto 0);
|
||||
BLITTER_ADR : OUT STD_LOGIC_VECTOR(31 downto 0);
|
||||
BLITTER_SIG : OUT STD_LOGIC;
|
||||
BLITTER_WR : OUT STD_LOGIC;
|
||||
BLITTER_TA : OUT STD_LOGIC;
|
||||
FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0)
|
||||
nRSTO : IN std_logic;
|
||||
MAIN_CLK : IN std_logic;
|
||||
FB_ALE : IN std_logic;
|
||||
nFB_WR : IN std_logic;
|
||||
nFB_OE : IN std_logic;
|
||||
FB_SIZE0 : IN std_logic;
|
||||
FB_SIZE1 : IN std_logic;
|
||||
VIDEO_RAM_CTR : IN std_logic_vector(15 DOWNTO 0);
|
||||
BLITTER_ON : IN std_logic;
|
||||
FB_ADR : IN std_logic_vector(31 DOWNTO 0);
|
||||
nFB_CS1 : IN std_logic;
|
||||
nFB_CS2 : IN std_logic;
|
||||
nFB_CS3 : IN std_logic;
|
||||
DDRCLK0 : IN std_logic;
|
||||
BLITTER_DIN : IN std_logic_vector(127 DOWNTO 0);
|
||||
BLITTER_DACK : IN std_logic_vector(4 DOWNTO 0);
|
||||
SR_BLITTER_DACK : IN std_logic;
|
||||
BLITTER_RUN : OUT std_logic;
|
||||
BLITTER_DOUT : OUT std_logic_vector(127 DOWNTO 0);
|
||||
BLITTER_ADR : OUT std_logic_vector(31 DOWNTO 0);
|
||||
BLITTER_SIG : OUT std_logic;
|
||||
BLITTER_WR : OUT std_logic;
|
||||
BLITTER_TA : OUT std_logic;
|
||||
FB_AD : INOUT std_logic_vector(31 DOWNTO 0)
|
||||
);
|
||||
-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
|
||||
|
||||
|
||||
6
Video/BLITTER/altsyncram0.qip
Normal file
6
Video/BLITTER/altsyncram0.qip
Normal file
@@ -0,0 +1,6 @@
|
||||
set_global_assignment -name IP_TOOL_NAME "ALTSYNCRAM"
|
||||
set_global_assignment -name IP_TOOL_VERSION "9.1"
|
||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altsyncram0.tdf"]
|
||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altsyncram0.bsf"]
|
||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altsyncram0.inc"]
|
||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altsyncram0.cmp"]
|
||||
6
Video/BLITTER/lpm_clshift0.qip
Normal file
6
Video/BLITTER/lpm_clshift0.qip
Normal file
@@ -0,0 +1,6 @@
|
||||
set_global_assignment -name IP_TOOL_NAME "LPM_CLSHIFT"
|
||||
set_global_assignment -name IP_TOOL_VERSION "9.1"
|
||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift0.tdf"]
|
||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift0.bsf"]
|
||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift0.inc"]
|
||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift0.cmp"]
|
||||
@@ -1,4 +1,4 @@
|
||||
TITLE "VIDEO MODI AND CLUT CONTROL";
|
||||
TITLE "VIDEO MODUSE UND CLUT CONTROL";
|
||||
|
||||
-- CREATED BY FREDI ASCHWANDEN
|
||||
|
||||
@@ -98,12 +98,12 @@ VARIABLE
|
||||
VDL_LWD[15..0] :DFFE;
|
||||
VDL_LWD_CS :NODE;
|
||||
-- DIV. CONTROL REGISTER
|
||||
CLUT_TA :DFF; -- needs one wait state
|
||||
CLUT_TA :DFF; -- BRAUCHT EIN WAITSTAT
|
||||
HSYNC :DFF;
|
||||
HSYNC_I[7..0] :DFF;
|
||||
HSY_LEN[7..0] :DFF; -- length of hsync pulse in pixel_clk
|
||||
HSY_LEN[7..0] :DFF; -- L<EFBFBD>NGE HSYNC PULS IN PIXEL_CLK
|
||||
HSYNC_START :DFF;
|
||||
LAST :DFF; -- reached last pixel of a line
|
||||
LAST :DFF; -- LETZTES PIXEL EINER ZEILE ERREICHT
|
||||
VSYNC :DFF;
|
||||
VSYNC_START :DFFE;
|
||||
VSYNC_I[2..0] :DFFE;
|
||||
@@ -191,7 +191,6 @@ VARIABLE
|
||||
VDL_VCT_CS :NODE;
|
||||
VDL_VMD[3..0] :DFFE;
|
||||
VDL_VMD_CS :NODE;
|
||||
ACP_VCTR6_DUP : NODE;
|
||||
|
||||
BEGIN
|
||||
-- BYT SELECT 32 BIT
|
||||
@@ -204,75 +203,46 @@ BEGIN
|
||||
FB_B3 = FB_ADR[1..0] == 3 -- ADR==3
|
||||
# FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD
|
||||
# FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
|
||||
|
||||
-- BYT SELECT 16 BIT
|
||||
FB_16B0 = FB_ADR[0] == 0; -- ADR==0
|
||||
FB_16B1 = FB_ADR[0] == 1 -- ADR==1
|
||||
# !(!FB_SIZE1 & FB_SIZE0); -- NOT BYT
|
||||
|
||||
-- ACP CLUT --
|
||||
ACP_CLUT_CS = !nFB_CS2 & FB_ADR[27..10] == H"0"; -- 0-3FF/1024
|
||||
ACP_CLUT_RD = ACP_CLUT_CS & !nFB_OE;
|
||||
ACP_CLUT_WR[] = FB_B[] & ACP_CLUT_CS & !nFB_WR;
|
||||
|
||||
CLUT_TA.CLK = MAIN_CLK;
|
||||
CLUT_TA = (ACP_CLUT_CS # FALCON_CLUT_CS # ST_CLUT_CS) & !VIDEO_MOD_TA;
|
||||
|
||||
|
||||
--FALCON CLUT --
|
||||
FALCON_CLUT_CS = !nFB_CS1 & FB_ADR[19..10] == H"3E6"; -- $F9800/$400
|
||||
FALCON_CLUT_RDH = FALCON_CLUT_CS & !nFB_OE & !FB_ADR1; -- HIGH WORD
|
||||
FALCON_CLUT_RDL = FALCON_CLUT_CS & !nFB_OE & FB_ADR1; -- LOW WORD
|
||||
FALCON_CLUT_WR[1..0] = FB_16B[] & !FB_ADR1 & FALCON_CLUT_CS & !nFB_WR;
|
||||
FALCON_CLUT_WR[3..2] = FB_16B[] & FB_ADR1 & FALCON_CLUT_CS & !nFB_WR;
|
||||
|
||||
|
||||
-- ST CLUT --
|
||||
ST_CLUT_CS = !nFB_CS1 & FB_ADR[19..5] == H"7C12"; -- $F8240/$20
|
||||
ST_CLUT_RD = ST_CLUT_CS & !nFB_OE;
|
||||
ST_CLUT_WR[] = FB_16B[] & ST_CLUT_CS & !nFB_WR;
|
||||
|
||||
|
||||
-- ST SHIFT MODE
|
||||
ST_SHIFT_MODE[].CLK = MAIN_CLK;
|
||||
ST_SHIFT_MODE_CS = !nFB_CS1 & FB_ADR[19..1] == H"7C130"; -- $F8260/2
|
||||
ST_SHIFT_MODE[] = FB_AD[25..24];
|
||||
ST_SHIFT_MODE[].ENA = ST_SHIFT_MODE_CS & !nFB_WR & FB_B0;
|
||||
|
||||
COLOR1 = ST_SHIFT_MODE[] == B"10" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- MONO
|
||||
COLOR2 = ST_SHIFT_MODE[] == B"01" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- 4 FARBEN
|
||||
COLOR4 = ST_SHIFT_MODE[] == B"00" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- 16 FARBEN
|
||||
|
||||
|
||||
-- FALCON SHIFT MODE
|
||||
FALCON_SHIFT_MODE[].CLK = MAIN_CLK;
|
||||
FALCON_SHIFT_MODE_CS = !nFB_CS1 & FB_ADR[19..1] == H"7C133"; -- $F8266/2
|
||||
FALCON_SHIFT_MODE[] = FB_AD[26..16];
|
||||
FALCON_SHIFT_MODE[10..8].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR & FB_B2;
|
||||
FALCON_SHIFT_MODE[7..0].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR & FB_B3;
|
||||
|
||||
CLUT_OFF[3..0] = FALCON_SHIFT_MODE[3..0] & COLOR4;
|
||||
|
||||
COLOR1 = FALCON_SHIFT_MODE10 & !COLOR16 & !COLOR8 & FALCON_VIDEO & !ACP_VIDEO_ON;
|
||||
COLOR8 = FALCON_SHIFT_MODE4 & !COLOR16 & FALCON_VIDEO & !ACP_VIDEO_ON;
|
||||
COLOR16 = FALCON_SHIFT_MODE8 & FALCON_VIDEO & !ACP_VIDEO_ON;
|
||||
COLOR4 = !COLOR1 & !COLOR16 & !COLOR8 & FALCON_VIDEO & !ACP_VIDEO_ON;
|
||||
|
||||
|
||||
-- ACP VIDEO CONTROL
|
||||
-- BIT 0=ACP VIDEO ON,
|
||||
-- 1=POWER ON VIDEO DAC,
|
||||
-- 2=ACP 24BIT,
|
||||
-- 3=ACP 16BIT,
|
||||
-- 4=ACP 8BIT,
|
||||
-- 5=ACP 1BIT,
|
||||
-- 6=FALCON SHIFT MODE,
|
||||
-- 7=ST SHIFT MODE,
|
||||
-- 9..8= VCLK FREQUENZ,
|
||||
-- 15=-SYNC ALLOWED,
|
||||
-- 31..16=VIDEO_RAM_CTR,
|
||||
-- 25=RANDFARBE EINSCHALTEN,
|
||||
-- 26=STANDARD ATARI SYNCS
|
||||
-- ACP VIDEO CONTROL BIT 0=ACP VIDEO ON, 1=POWER ON VIDEO DAC, 2=ACP 24BIT,3=ACP 16BIT,4=ACP 8BIT,5=ACP 1BIT, 6=FALCON SHIFT MODE;7=ST SHIFT MODE;9..8= VCLK FREQUENZ;15=-SYNC ALLOWED; 31..16=VIDEO_RAM_CTR,25=RANDFARBE EINSCHALTEN, 26=STANDARD ATARI SYNCS
|
||||
ACP_VCTR[].CLK = MAIN_CLK;
|
||||
ACP_VCTR_CS = !nFB_CS2 & FB_ADR[27..2] == H"100"; -- $400/4
|
||||
ACP_VCTR[31..8] = FB_AD[31..8];
|
||||
@@ -283,10 +253,8 @@ BEGIN
|
||||
ACP_VCTR[5..0].ENA = ACP_VCTR_CS & FB_B3 & !nFB_WR;
|
||||
ACP_VIDEO_ON = ACP_VCTR0;
|
||||
nPD_VGA = ACP_VCTR1;
|
||||
|
||||
-- ATARI MODUS
|
||||
ATARI_SYNC = ACP_VCTR26; -- WENN 1 AUTOMATISCHE AUFL<46>SUNG
|
||||
|
||||
ATARI_SYNC = ACP_VCTR26; -- WENN 1 AUTOMATISCHE AUFL<46>SUNG
|
||||
-- HORIZONTAL TIMING 640x480
|
||||
ATARI_HH[].CLK = MAIN_CLK;
|
||||
ATARI_HH_CS = !nFB_CS2 & FB_ADR[27..2]==H"104"; -- $410/4
|
||||
@@ -295,7 +263,6 @@ BEGIN
|
||||
ATARI_HH[23..16].ENA = ATARI_HH_CS & FB_B1 & !nFB_WR;
|
||||
ATARI_HH[15..8].ENA = ATARI_HH_CS & FB_B2 & !nFB_WR;
|
||||
ATARI_HH[7..0].ENA = ATARI_HH_CS & FB_B3 & !nFB_WR;
|
||||
|
||||
-- VERTIKAL TIMING 640x480
|
||||
ATARI_VH[].CLK = MAIN_CLK;
|
||||
ATARI_VH_CS = !nFB_CS2 & FB_ADR[27..2]==H"105"; -- $414/4
|
||||
@@ -304,7 +271,6 @@ BEGIN
|
||||
ATARI_VH[23..16].ENA = ATARI_VH_CS & FB_B1 & !nFB_WR;
|
||||
ATARI_VH[15..8].ENA = ATARI_VH_CS & FB_B2 & !nFB_WR;
|
||||
ATARI_VH[7..0].ENA = ATARI_VH_CS & FB_B3 & !nFB_WR;
|
||||
|
||||
-- HORIZONTAL TIMING 320x240
|
||||
ATARI_HL[].CLK = MAIN_CLK;
|
||||
ATARI_HL_CS = !nFB_CS2 & FB_ADR[27..2]==H"106"; -- $418/4
|
||||
@@ -313,7 +279,6 @@ BEGIN
|
||||
ATARI_HL[23..16].ENA = ATARI_HL_CS & FB_B1 & !nFB_WR;
|
||||
ATARI_HL[15..8].ENA = ATARI_HL_CS & FB_B2 & !nFB_WR;
|
||||
ATARI_HL[7..0].ENA = ATARI_HL_CS & FB_B3 & !nFB_WR;
|
||||
|
||||
-- VERTIKAL TIMING 320x240
|
||||
ATARI_VL[].CLK = MAIN_CLK;
|
||||
ATARI_VL_CS = !nFB_CS2 & FB_ADR[27..2]==H"107"; -- $41C/4
|
||||
@@ -322,8 +287,6 @@ BEGIN
|
||||
ATARI_VL[23..16].ENA = ATARI_VL_CS & FB_B1 & !nFB_WR;
|
||||
ATARI_VL[15..8].ENA = ATARI_VL_CS & FB_B2 & !nFB_WR;
|
||||
ATARI_VL[7..0].ENA = ATARI_VL_CS & FB_B3 & !nFB_WR;
|
||||
|
||||
|
||||
-- VIDEO PLL CONFIG
|
||||
VIDEO_PLL_CONFIG_CS = !nFB_CS2 & FB_ADR[27..9]==H"3" & FB_B0 & FB_B1; -- $(F)000'0600-7FF ->6/2 WORD RESP LONG ONLY
|
||||
VR_WR.CLK = MAIN_CLK;
|
||||
@@ -335,28 +298,21 @@ BEGIN
|
||||
VR_FRQ[].CLK = MAIN_CLK;
|
||||
VR_FRQ[].ENA = VR_WR & FB_ADR[8..0]==H"04";
|
||||
VR_FRQ[] = FB_AD[23..16];
|
||||
|
||||
-- VIDEO PLL RECONFIG
|
||||
VIDEO_PLL_RECONFIG_CS = !nFB_CS2 & FB_ADR[27..0]==H"800" & FB_B0; -- $(F)000'0800
|
||||
VIDEO_RECONFIG.CLK = MAIN_CLK;
|
||||
VIDEO_RECONFIG = VIDEO_PLL_RECONFIG_CS & !nFB_WR & !VR_BUSY & !VIDEO_RECONFIG;
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
VIDEO_RAM_CTR[] = ACP_VCTR[31..16];
|
||||
|
||||
-------------- COLOR MODE IM ACP SETZEN
|
||||
COLOR1 = ACP_VCTR5 & !ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON;
|
||||
COLOR8 = ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON;
|
||||
COLOR16 = ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON;
|
||||
COLOR24 = ACP_VCTR2 & ACP_VIDEO_ON;
|
||||
ACP_CLUT = ACP_VIDEO_ON & (COLOR1 # COLOR8) # ST_VIDEO & COLOR1;
|
||||
|
||||
-- ST ODER FALCON SHIFT MODE SETZEN WENN WRITE X..SHIFT REGISTER
|
||||
ACP_VCTR7 = FALCON_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON;
|
||||
|
||||
-- duplicate ACP_VCTR6 according to TimeQuest recommendations
|
||||
ACP_VCTR6_DUP = ST_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON;
|
||||
ACP_VCTR6 = ACP_VCTR6_DUP;
|
||||
ACP_VCTR6 = ST_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON;
|
||||
ACP_VCTR[7..6].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR # ST_SHIFT_MODE_CS & !nFB_WR # ACP_VCTR_CS & FB_B3 & !nFB_WR & FB_AD0;
|
||||
FALCON_VIDEO = ACP_VCTR7;
|
||||
FALCON_CLUT = FALCON_VIDEO & !ACP_VIDEO_ON & !COLOR16;
|
||||
@@ -369,9 +325,7 @@ BEGIN
|
||||
# B"101" & COLOR16
|
||||
# B"110" & COLOR24
|
||||
# B"111" & RAND_ON;
|
||||
|
||||
-- DIVERSE (VIDEO)-REGISTER ----------------------------
|
||||
|
||||
-- RANDFARBE
|
||||
CCR[].CLK = MAIN_CLK;
|
||||
CCR_CS = !nFB_CS2 & FB_ADR[27..2]==H"101"; -- $404/4
|
||||
@@ -379,129 +333,109 @@ BEGIN
|
||||
CCR[23..16].ENA = CCR_CS & FB_B1 & !nFB_WR;
|
||||
CCR[15..8].ENA = CCR_CS & FB_B2 & !nFB_WR;
|
||||
CCR[7..0].ENA = CCR_CS & FB_B3 & !nFB_WR;
|
||||
|
||||
--SYS CTR
|
||||
SYS_CTR_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C003"; -- $8006/2
|
||||
SYS_CTR[].CLK = MAIN_CLK;
|
||||
SYS_CTR[6..0] = FB_AD[22..16];
|
||||
SYS_CTR[6..0].ENA = SYS_CTR_CS & !nFB_WR & FB_B3;
|
||||
BLITTER_ON = !SYS_CTR3;
|
||||
|
||||
--VDL_LOF
|
||||
VDL_LOF_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C107"; -- $820E/2
|
||||
VDL_LOF[].CLK = MAIN_CLK;
|
||||
VDL_LOF[] = FB_AD[31..16];
|
||||
VDL_LOF[15..8].ENA = VDL_LOF_CS & !nFB_WR & FB_B2;
|
||||
VDL_LOF[7..0].ENA = VDL_LOF_CS & !nFB_WR & FB_B3;
|
||||
|
||||
--VDL_LWD
|
||||
VDL_LWD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C108"; -- $8210/2
|
||||
VDL_LWD[].CLK = MAIN_CLK;
|
||||
VDL_LWD[] = FB_AD[31..16];
|
||||
VDL_LWD[15..8].ENA = VDL_LWD_CS & !nFB_WR & FB_B0;
|
||||
VDL_LWD[7..0].ENA = VDL_LWD_CS & !nFB_WR & FB_B1;
|
||||
|
||||
-- HORIZONTAL
|
||||
|
||||
-- VDL_HHT
|
||||
VDL_HHT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C141"; -- $8282/2
|
||||
VDL_HHT[].CLK = MAIN_CLK;
|
||||
VDL_HHT[] = FB_AD[27..16];
|
||||
VDL_HHT[11..8].ENA = VDL_HHT_CS & !nFB_WR & FB_B2;
|
||||
VDL_HHT[7..0].ENA = VDL_HHT_CS & !nFB_WR & FB_B3;
|
||||
|
||||
-- VDL_HBE
|
||||
VDL_HBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C143"; -- $8286/2
|
||||
VDL_HBE[].CLK = MAIN_CLK;
|
||||
VDL_HBE[] = FB_AD[27..16];
|
||||
VDL_HBE[11..8].ENA = VDL_HBE_CS & !nFB_WR & FB_B2;
|
||||
VDL_HBE[7..0].ENA = VDL_HBE_CS & !nFB_WR & FB_B3;
|
||||
|
||||
-- VDL_HDB
|
||||
VDL_HDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C144"; -- $8288/2
|
||||
VDL_HDB[].CLK = MAIN_CLK;
|
||||
VDL_HDB[] = FB_AD[27..16];
|
||||
VDL_HDB[11..8].ENA = VDL_HDB_CS & !nFB_WR & FB_B0;
|
||||
VDL_HDB[7..0].ENA = VDL_HDB_CS & !nFB_WR & FB_B1;
|
||||
|
||||
-- VDL_HDE
|
||||
VDL_HDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C145"; -- $828A/2
|
||||
VDL_HDE[].CLK = MAIN_CLK;
|
||||
VDL_HDE[] = FB_AD[27..16];
|
||||
VDL_HDE[11..8].ENA = VDL_HDE_CS & !nFB_WR & FB_B2;
|
||||
VDL_HDE[7..0].ENA = VDL_HDE_CS & !nFB_WR & FB_B3;
|
||||
|
||||
-- VDL_HBB
|
||||
VDL_HBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C142"; -- $8284/2
|
||||
VDL_HBB[].CLK = MAIN_CLK;
|
||||
VDL_HBB[] = FB_AD[27..16];
|
||||
VDL_HBB[11..8].ENA = VDL_HBB_CS & !nFB_WR & FB_B0;
|
||||
VDL_HBB[7..0].ENA = VDL_HBB_CS & !nFB_WR & FB_B1;
|
||||
|
||||
-- VDL_HSS
|
||||
VDL_HSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C146"; -- $828C/2
|
||||
VDL_HSS[].CLK = MAIN_CLK;
|
||||
VDL_HSS[] = FB_AD[27..16];
|
||||
VDL_HSS[11..8].ENA = VDL_HSS_CS & !nFB_WR & FB_B0;
|
||||
VDL_HSS[7..0].ENA = VDL_HSS_CS & !nFB_WR & FB_B1;
|
||||
|
||||
-- VERTIKAL
|
||||
|
||||
-- VDL_VBE
|
||||
VDL_VBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C153"; -- $82A6/2
|
||||
VDL_VBE[].CLK = MAIN_CLK;
|
||||
VDL_VBE[] = FB_AD[26..16];
|
||||
VDL_VBE[10..8].ENA = VDL_VBE_CS & !nFB_WR & FB_B2;
|
||||
VDL_VBE[7..0].ENA = VDL_VBE_CS & !nFB_WR & FB_B3;
|
||||
|
||||
-- VDL_VDB
|
||||
VDL_VDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C154"; -- $82A8/2
|
||||
VDL_VDB[].CLK = MAIN_CLK;
|
||||
VDL_VDB[] = FB_AD[26..16];
|
||||
VDL_VDB[10..8].ENA = VDL_VDB_CS & !nFB_WR & FB_B0;
|
||||
VDL_VDB[7..0].ENA = VDL_VDB_CS & !nFB_WR & FB_B1;
|
||||
|
||||
-- VDL_VDE
|
||||
VDL_VDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C155"; -- $82AA/2
|
||||
VDL_VDE[].CLK = MAIN_CLK;
|
||||
VDL_VDE[] = FB_AD[26..16];
|
||||
VDL_VDE[10..8].ENA = VDL_VDE_CS & !nFB_WR & FB_B2;
|
||||
VDL_VDE[7..0].ENA = VDL_VDE_CS & !nFB_WR & FB_B3;
|
||||
|
||||
-- VDL_VBB
|
||||
VDL_VBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C152"; -- $82A4/2
|
||||
VDL_VBB[].CLK = MAIN_CLK;
|
||||
VDL_VBB[] = FB_AD[26..16];
|
||||
VDL_VBB[10..8].ENA = VDL_VBB_CS & !nFB_WR & FB_B0;
|
||||
VDL_VBB[7..0].ENA = VDL_VBB_CS & !nFB_WR & FB_B1;
|
||||
|
||||
-- VDL_VSS
|
||||
VDL_VSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C156"; -- $82AC/2
|
||||
VDL_VSS[].CLK = MAIN_CLK;
|
||||
VDL_VSS[] = FB_AD[26..16];
|
||||
VDL_VSS[10..8].ENA = VDL_VSS_CS & !nFB_WR & FB_B0;
|
||||
VDL_VSS[7..0].ENA = VDL_VSS_CS & !nFB_WR & FB_B1;
|
||||
|
||||
-- VDL_VFT
|
||||
VDL_VFT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C151"; -- $82A2/2
|
||||
VDL_VFT[].CLK = MAIN_CLK;
|
||||
VDL_VFT[] = FB_AD[26..16];
|
||||
VDL_VFT[10..8].ENA = VDL_VFT_CS & !nFB_WR & FB_B2;
|
||||
VDL_VFT[7..0].ENA = VDL_VFT_CS & !nFB_WR & FB_B3;
|
||||
|
||||
-- VDL_VCT
|
||||
VDL_VCT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C160"; -- $82C0/2
|
||||
VDL_VCT[].CLK = MAIN_CLK;
|
||||
VDL_VCT[] = FB_AD[24..16];
|
||||
VDL_VCT[8].ENA = VDL_VCT_CS & !nFB_WR & FB_B0;
|
||||
VDL_VCT[7..0].ENA = VDL_VCT_CS & !nFB_WR & FB_B1;
|
||||
|
||||
-- VDL_VMD
|
||||
VDL_VMD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C161"; -- $82C2/2
|
||||
VDL_VMD[].CLK = MAIN_CLK;
|
||||
VDL_VMD[] = FB_AD[19..16];
|
||||
VDL_VMD[3..0].ENA = VDL_VMD_CS & !nFB_WR & FB_B3;
|
||||
|
||||
--- REGISTER OUT
|
||||
FB_AD[31..16] = lpm_bustri_WORD(
|
||||
ST_SHIFT_MODE_CS & (0,ST_SHIFT_MODE[],B"00000000")
|
||||
@@ -550,9 +484,8 @@ BEGIN
|
||||
# ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS
|
||||
# VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS;
|
||||
|
||||
|
||||
-- VIDEO AUSGABE SETZEN
|
||||
CLK17M.CLK = MAIN_CLK;
|
||||
CLK17M.CLK = CLK33M;
|
||||
CLK17M = !CLK17M;
|
||||
CLK13M.CLK = CLK25M;
|
||||
CLK13M = !CLK13M;
|
||||
@@ -563,9 +496,8 @@ BEGIN
|
||||
# CLK25M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00"
|
||||
# CLK33M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01"
|
||||
# CLK_VIDEO & ACP_VIDEO_ON & ACP_VCTR[9];
|
||||
|
||||
--------------------------------------------------------------
|
||||
-- HORIZONTALE SYNC L<>NGE in PIXEL_CLK
|
||||
-- HORIZONTALE SYNC L<>NGE in PIXEL_CLK
|
||||
----------------------------------------------------------------
|
||||
HSY_LEN[].CLK = MAIN_CLK;
|
||||
HSY_LEN[] = 14 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0)
|
||||
@@ -585,7 +517,6 @@ BEGIN
|
||||
HDIS_LEN[] = 320 & VDL_VMD2 -- BREITE IN PIXELN
|
||||
# 640 & !VDL_VMD2;
|
||||
|
||||
|
||||
-- DOPPELZEILENMODUS
|
||||
DOP_ZEI.CLK = MAIN_CLK;
|
||||
DOP_ZEI = VDL_VMD0 & ST_VIDEO; -- ZEILENVERDOPPELUNG EIN AUS
|
||||
@@ -593,7 +524,7 @@ BEGIN
|
||||
INTER_ZEI = DOP_ZEI & VVCNT0!=VDIS_START0 & VVCNT[]!=0 & VHCNT[]<(HDIS_END[]-1) -- EINSCHIEBEZEILE AUF "DOPPEL" ZEILEN UND ZEILE NULL WEGEN SYNC
|
||||
# DOP_ZEI & VVCNT0==VDIS_START0 & VVCNT[]!=0 & VHCNT[]>(HDIS_END[]-2); -- EINSCHIEBEZEILE AUF "NORMAL" ZEILEN UND ZEILE NULL WEGEN SYNC
|
||||
DOP_FIFO_CLR.CLK = PIXEL_CLK;
|
||||
DOP_FIFO_CLR = INTER_ZEI & HSYNC_START # SYNC_PIX; -- DOPPELZEILENFIFO L<>SCHEN AM ENDE DER DOPPELZEILE UND BEI MAIN FIFO START
|
||||
DOP_FIFO_CLR = INTER_ZEI & HSYNC_START # SYNC_PIX; -- DOPPELZEILENFIFO L<>SCHEN AM ENDE DER DOPPELZEILE UND BEI MAIN FIFO START
|
||||
|
||||
RAND_LINKS[] = VDL_HBE[] & ACP_VIDEO_ON
|
||||
# 21 & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2
|
||||
@@ -635,8 +566,7 @@ BEGIN
|
||||
# ATARI_VL[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2
|
||||
# ATARI_VH[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2
|
||||
# (0,VDL_VFT[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC;
|
||||
|
||||
-- Z<>HLER
|
||||
-- Z<>HLER
|
||||
LAST.CLK = PIXEL_CLK;
|
||||
LAST = VHCNT[]==(H_TOTAL[]-2);
|
||||
VHCNT[].CLK = PIXEL_CLK;
|
||||
@@ -644,11 +574,10 @@ BEGIN
|
||||
VVCNT[].CLK = PIXEL_CLK;
|
||||
VVCNT[].ENA = LAST;
|
||||
VVCNT[] = (VVCNT[] + 1) & (VVCNT[]!=V_TOTAL[]-1);
|
||||
|
||||
-- DISPLAY ON OFF
|
||||
DPO_ZL.CLK = PIXEL_CLK;
|
||||
DPO_ZL = (VVCNT[]>RAND_OBEN[]-1) & (VVCNT[]<RAND_UNTEN[]-1); -- 1 ZEILE DAVOR ON OFF
|
||||
DPO_ZL.ENA = LAST; -- AM ZEILENENDE <20>BERNEHMEN
|
||||
DPO_ZL.ENA = LAST; -- AM ZEILENENDE <20>BERNEHMEN
|
||||
DPO_ON.CLK = PIXEL_CLK;
|
||||
DPO_ON = VHCNT[]==RAND_LINKS[]; -- BESSER EINZELN WEGEN TIMING
|
||||
DPO_OFF.CLK = PIXEL_CLK;
|
||||
@@ -656,34 +585,30 @@ BEGIN
|
||||
DISP_ON.CLK = PIXEL_CLK;
|
||||
DISP_ON = DISP_ON & !DPO_OFF
|
||||
# DPO_ON & DPO_ZL;
|
||||
|
||||
-- DATENTRANSFER ON OFF
|
||||
VDO_ON.CLK = PIXEL_CLK;
|
||||
VDO_ON = VHCNT[]==(HDIS_START[]-1); -- BESSER EINZELN WEGEN TIMING
|
||||
VDO_OFF.CLK = PIXEL_CLK;
|
||||
VDO_OFF = VHCNT[]==HDIS_END[];
|
||||
VDO_ZL.CLK = PIXEL_CLK;
|
||||
VDO_ZL.ENA = LAST; -- AM ZEILENENDE <20>BERNEHMEN
|
||||
VDO_ZL.ENA = LAST; -- AM ZEILENENDE <20>BERNEHMEN
|
||||
VDO_ZL = (VVCNT[]>=(VDIS_START[]-1)) & (VVCNT[]<VDIS_END[]); -- 1 ZEILE DAVOR ON OFF
|
||||
VDTRON.CLK = PIXEL_CLK;
|
||||
VDTRON = VDTRON & !VDO_OFF
|
||||
# VDO_ON & VDO_ZL;
|
||||
|
||||
-- VERZ<52>GERUNG UND SYNC
|
||||
-- VERZ<52>GERUNG UND SYNC
|
||||
HSYNC_START.CLK = PIXEL_CLK;
|
||||
HSYNC_START = VHCNT[]==HS_START[]-3;
|
||||
HSYNC_I[].CLK = PIXEL_CLK;
|
||||
HSYNC_I[] = HSY_LEN[] & HSYNC_START
|
||||
# (HSYNC_I[]-1) & !HSYNC_START & HSYNC_I[]!=0;
|
||||
|
||||
VSYNC_START.CLK = PIXEL_CLK;
|
||||
VSYNC_START.ENA = LAST;
|
||||
VSYNC_START = VVCNT[]==(VS_START[]-3); -- start am ende der Zeile vor dem vsync
|
||||
VSYNC_I[].CLK = PIXEL_CLK;
|
||||
VSYNC_I[].ENA = LAST; -- start am ende der Zeile vor dem vsync
|
||||
VSYNC_I[] = 3 & VSYNC_START -- 3 zeilen vsync length
|
||||
# (VSYNC_I[]-1) & !VSYNC_START & VSYNC_I[]!=0; -- runterz<72>hlen bis 0
|
||||
|
||||
# (VSYNC_I[]-1) & !VSYNC_START & VSYNC_I[]!=0; -- runterz<72>hlen bis 0
|
||||
VERZ[][].CLK = PIXEL_CLK;
|
||||
VERZ[][1] = VERZ[][0];
|
||||
VERZ[][2] = VERZ[][1];
|
||||
@@ -694,24 +619,19 @@ BEGIN
|
||||
VERZ[][7] = VERZ[][6];
|
||||
VERZ[][8] = VERZ[][7];
|
||||
VERZ[][9] = VERZ[][8];
|
||||
|
||||
VERZ[0][0] = DISP_ON;
|
||||
VERZ[1][0] = HSYNC_I[]!=0;
|
||||
-- VERZ[1][0] = HSYNC_I[]!=0;
|
||||
VERZ[1][0] = (!ACP_VCTR15 # !VDL_VCT6) & HSYNC_I[]!=0
|
||||
# ACP_VCTR15 & VDL_VCT6 & HSYNC_I[]==0; -- NUR M<>GLICH WENN BEIDE
|
||||
# ACP_VCTR15 & VDL_VCT6 & HSYNC_I[]==0; -- NUR M<>GLICH WENN BEIDE
|
||||
VERZ[2][0] = (!ACP_VCTR15 # !VDL_VCT5) & VSYNC_I[]!=0
|
||||
# ACP_VCTR15 & VDL_VCT5 & VSYNC_I[]==0; -- NUR M<>GLICH WENN BEIDE
|
||||
|
||||
# ACP_VCTR15 & VDL_VCT5 & VSYNC_I[]==0; -- NUR M<>GLICH WENN BEIDE
|
||||
nBLANK.CLK = PIXEL_CLK;
|
||||
nBLANK = VERZ[0][8];
|
||||
|
||||
HSYNC.CLK = PIXEL_CLK;
|
||||
HSYNC = VERZ[1][9];
|
||||
VSYNC.CLK = PIXEL_CLK;
|
||||
VSYNC = VERZ[2][9];
|
||||
|
||||
nSYNC = GND;
|
||||
|
||||
-- RANDFARBE MACHEN ------------------------------------
|
||||
RAND[].CLK = PIXEL_CLK;
|
||||
RAND[0] = DISP_ON & !VDTRON & ACP_VCTR25;
|
||||
@@ -722,20 +642,19 @@ BEGIN
|
||||
RAND[5] = RAND[4];
|
||||
RAND[6] = RAND[5];
|
||||
RAND_ON = RAND[6];
|
||||
|
||||
----------------------------------------------------------
|
||||
CLR_FIFO.CLK = PIXEL_CLK;
|
||||
CLR_FIFO.ENA = LAST;
|
||||
CLR_FIFO = VVCNT[]==V_TOTAL[]-2; -- IN LETZTER ZEILE L<>SCHEN
|
||||
CLR_FIFO = VVCNT[]==V_TOTAL[]-2; -- IN LETZTER ZEILE L<>SCHEN
|
||||
START_ZEILE.CLK = PIXEL_CLK;
|
||||
START_ZEILE.ENA = LAST;
|
||||
START_ZEILE = VVCNT[]==0; -- ZEILE 1
|
||||
SYNC_PIX.CLK = PIXEL_CLK;
|
||||
SYNC_PIX = VHCNT[]==3 & START_ZEILE; -- SUB PIXEL Z<>HLER SYNCHRONISIEREN
|
||||
SYNC_PIX = VHCNT[]==3 & START_ZEILE; -- SUB PIXEL Z<>HLER SYNCHRONISIEREN
|
||||
SYNC_PIX1.CLK = PIXEL_CLK;
|
||||
SYNC_PIX1 = VHCNT[]==5 & START_ZEILE; -- SUB PIXEL Z<>HLER SYNCHRONISIEREN
|
||||
SYNC_PIX1 = VHCNT[]==5 & START_ZEILE; -- SUB PIXEL Z<>HLER SYNCHRONISIEREN
|
||||
SYNC_PIX2.CLK = PIXEL_CLK;
|
||||
SYNC_PIX2 = VHCNT[]==7 & START_ZEILE; -- SUB PIXEL Z<>HLER SYNCHRONISIEREN
|
||||
SYNC_PIX2 = VHCNT[]==7 & START_ZEILE; -- SUB PIXEL Z<>HLER SYNCHRONISIEREN
|
||||
SUB_PIXEL_CNT[].CLK = PIXEL_CLK;
|
||||
SUB_PIXEL_CNT[].ENA = VDTRON # SYNC_PIX;
|
||||
SUB_PIXEL_CNT[] = (SUB_PIXEL_CNT[] + 1) & !SYNC_PIX; --count up if display on sonst clear bei sync pix
|
||||
@@ -746,7 +665,7 @@ BEGIN
|
||||
# SUB_PIXEL_CNT[3..0]==1 & COLOR8
|
||||
# SUB_PIXEL_CNT[2..0]==1 & COLOR16
|
||||
# SUB_PIXEL_CNT[1..0]==1 & COLOR24) & VDTRON
|
||||
# SYNC_PIX # SYNC_PIX1 # SYNC_PIX2; -- 3 CLOCK ZUS<55>TZLICH F<>R FIFO SHIFT DATAOUT UND SHIFT RIGTH POSITION
|
||||
# SYNC_PIX # SYNC_PIX1 # SYNC_PIX2; -- 3 CLOCK ZUS<55>TZLICH F<>R FIFO SHIFT DATAOUT UND SHIFT RIGTH POSITION
|
||||
|
||||
CLUT_MUX_ADR[].CLK = PIXEL_CLK;
|
||||
CLUT_MUX_AV[][].CLK = PIXEL_CLK;
|
||||
|
||||
4080
Video/Video.bdf
4080
Video/Video.bdf
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user