Важная информация

User Tag List

Показано с 1 по 7 из 7

Тема: RTC в российских ZX клонов

  1. #1
    Master Аватар для VELESOFT
    Регистрация
    04.04.2007
    Адрес
    Praha
    Сообщений
    752
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию RTC в российских ZX клонов

    Где я могу найти список RTC, используемых в российских ZX клонов ?

    Мне нужен список портов + описание. (или код драйвера)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Master Аватар для Djoni
    Регистрация
    20.02.2005
    Адрес
    Новосибирск
    Сообщений
    941
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    52
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Стандартом стало подключение по Глюку


    #DFF7 - задаёт номер регистра, с которым мы хотим работать;
    #BFF7 - порт данных, через него передаются данные в микросхему/из неё;
    #EFF7 - бит 7 этого порта управляет доступом к микросхеме (0 - доступа нет, 1 - доступ есть).

    Тут подробно http://zxbyte.ru/index.php?id=89

    Драйвер http://vrcp.ru/zx/systems/VRCPsys5.zip
    описание в vrcpcmos.W

    Скрытый текст

    Profi v5.03/1024k/палитра/FDD3,5""/FDD5,25"/HDD/XT-Keyb/Covox
    Pentagon-1024 sl v 1.4 upgrade #EFF7 Gluk RTC
    ZXM-Phoenix 1024k
    ATM Turbo 2+ v7.10 512k
    HIMAC HR42.04 48K
    HIMAC 128
    Ленинград 1
    [свернуть]

  4. #3
    Activist
    Регистрация
    21.07.2010
    Адрес
    Ukraine
    Сообщений
    276
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

  5. #4
    Master Аватар для VELESOFT
    Регистрация
    04.04.2007
    Адрес
    Praha
    Сообщений
    752
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Reverse эмулирует DIVMMC ? Я могу написать драйвер RTC для ESXDOS, но мне нужно знать адреса порты, увидеть обработчик для чтения RTC.

  6. #5
    Veteran Аватар для savelij
    Регистрация
    23.03.2007
    Адрес
    г. Сухиничи, Калужская обл.
    Сообщений
    1,793
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от VELESOFT Посмотреть сообщение
    Reverse эмулирует DIVMMC ? Я могу написать драйвер RTC для ESXDOS, но мне нужно знать адреса порты, увидеть обработчик для чтения RTC.
    CMOS_ON EQU 0X80
    CMOS_OFF EQU 0

    CMOS_SET_ADR EQU 0XDFF7 ;АДРЕС ПОРТА УСТАНОВКИ АДРЕСА CMOS ЯЧЕЙКИ
    CMOS_RD_WR EQU 0XBFF7 ;АДРЕС ПОРТА ЧТЕНИЯ/ЗАПИСИ БАЙТ CMOS
    PENT_CONF EQU 0XEFF7 ;АДРЕС ПОРТА КОНФИГА РЕЖИМА ПЕНТАГОНА

    ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
    ; L-ПРОЧИТАННОЕ ЗНАЧЕНИЕ
    READCMOS DI
    PUSH BC
    LD BC,PENT_CONF
    LD A,CMOS_ON ;РАЗРЕШЕНИЕ ДОСТУПА К КМОСУ
    OUT (C),A
    LD B,HIGH (CMOS_SET_ADR) ;СТАРШИЙ БАЙТ АДРЕСА
    OUT (C),H
    LD B,HIGH (CMOS_RD_WR) ;СТАРШИЙ БАЙТ АДРЕСА
    IN L,(C)
    JR OFF_CMOS

    ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
    ; L-ЧТО ТУДА ЗАПИСАТЬ
    WRITECMOS DI
    PUSH BC
    LD BC,PENT_CONF
    LD A,CMOS_ON ;РАЗРЕШЕНИЕ ДОСТУПА К КМОСУ
    OUT (C),A
    LD B,HIGH (CMOS_SET_ADR) ;СТАРШИЙ БАЙТ АДРЕСА
    OUT (C),H
    LD B,HIGH (CMOS_RD_WR) ;СТАРШИЙ БАЙТ АДРЕСА
    OUT (C),L
    OFF_CMOS LD A,CMOS_OFF ;ЗАПРЕТ ДОСТУПА К КМОСУ
    LD B,HIGH (PENT_CONF) ;СТАРШИЙ БАЙТ АДРЕСА
    OUT (C),A
    POP BC
    LD A,L
    AND A
    RET
    Последний раз редактировалось savelij; 23.07.2014 в 18:15.

    Скрытый текст

    Profi 4.02 512k
    Profi 5.04 1024k нижняя плата здесь
    Scorpion 256k+ProfROM+SMUC 1.3+SMUC 2.0+ZXMC2
    Pentagon v2.2+Z-controller+ZXMC2+NeoGS
    АТМ 7.10 1024k
    Pentagon 2.666LE
    ZX Evolution 4Mb rev B
    [свернуть]


    Извещение лички отключено, захожу редко.

  7. #6
    Activist
    Регистрация
    21.07.2010
    Адрес
    Ukraine
    Сообщений
    276
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от VELESOFT Посмотреть сообщение
    Reverse эмулирует DIVMMC ?
    Вернее позволяет задать желаемую структуру цифрового устройства в виде принципиальной электрической схемы или программы.

    Пример:
    Код:
    ; -----------------------------------------------------------------------------
    ; I2C PCF8583 to MC14818 loader
    ; -----------------------------------------------------------------------------
    RTC_INIT	LD BC,#0000
    		LD HL,#8000
    		CALL I2C_GET
    
    		LD A,#80
    		LD BC,#EFF7
    		OUT(C),A
    
    ; REGISTER B
    		LD A,#0B
    		LD B,#DF
    		OUT (C),A
    		LD A,#82
    		LD B,#BF
    		OUT (C),A
    ; SECONDS
    		LD A,#00
    		LD B,#DF
    		OUT (C),A
    		LD A,(#8002)
    		LD B,#BF
    		OUT (C),A
    ; MINUTES		
    		LD A,#02
    		LD B,#DF
    		OUT (C),A
    		LD A,(#8003)
    		LD B,#BF
    		OUT (C),A
    ; HOURS		
    		LD A,#04
    		LD B,#DF
    		OUT (C),A
    		LD A,(#8004)
    		AND #3F
    		LD B,#BF
    		OUT (C),A
    ; DAY OF THE WEEK		
    		LD A,#06
    		LD B,#DF
    		OUT (C),A
    		LD A,(#8006)
    		AND #E0
    		RLCA
    		RLCA
    		RLCA
    		INC A
    		LD B,#BF
    		OUT (C),A
    ; DATE OF THE MONTH
    		LD A,#07
    		LD B,#DF
    		OUT (C),A
    		LD A,(#8005)
    		AND #3F
    		LD B,#BF
    		OUT (C),A
    ; MONTH
    		LD A,#08
    		LD B,#DF
    		OUT (C),A
    		LD A,(#8006)
    		AND #1F
    		LD B,#BF
    		OUT (C),A
    ; YEAR
    		LD A,#09
    		LD B,#DF
    		OUT (C),A
    		LD A,(#8005)
    		AND #C0
    		RLCA
    		RLCA
    		LD HL,#8010	; ячейка для хранения года (8 бит)
    		ADD A,(HL)	; год из PCF + поправка из ячейки
    		LD B,#BF
    		OUT (C),A
    ; REGISTER B
    		LD A,#0B
    		LD B,#DF
    		OUT (C),A
    		LD A,#02
    		LD B,#BF
    		OUT (C),A
    
    		LD A,#00
    		LD BC,#EFF7
    		OUT(C),A
    
    ; -----------------------------------------------------------------------------	
    ; I2C PCF8583 
    ; -----------------------------------------------------------------------------
    ; Ports:
    ; #8C: Data (write/read)
    ;	bit 7-0	= Stores I2C read/write data
    ; #8C: Address (write)
    ; 	bit 7-1	= Holds the first seven address bits of the I2C slave device
    ; 	bit 0	= I2C 1:read/0:write bit
    
    ; #9C: Command/Status Register (write)
    ;	bit 7-2	= Reserved
    ;	bit 1-0	= 00: IDLE; 01: START; 10: nSTART; 11: STOP
    ; #9C: Command/Status Register (read)
    ;	bit 7-2	= Reserved
    ;	bit 1 	= 1:ERROR 	(I2C transaction error)
    ;	bit 0 	= 1:BUSY 	(I2C bus busy)
    
    ; HL= адрес буфера
    ; B = длина (0=256 байт)
    ; C = адрес
    I2C_GET	LD A,%11111101	; START
    		OUT (#9C),A
    		LD A,%10100000	; SLAVE ADDRESS W
    		OUT (#8C),A
    		CALL I2C_ACK
    		LD A,%11111110	; NSTART
    		OUT (#9C),A
    		LD A,C		; WORD ADDRESS
    		OUT (#8C),A
    		CALL I2C_ACK
    		LD A,%11111101	; START
    		OUT (#9C),A
    		LD A,%10100001	; SLAVE ADDRESS R
    		OUT (#8C),A
    		CALL I2C_ACK
    		LD A,%11111100	; IDLE
    		OUT (#9C),A
    		
    I2C_GET2	OUT (#8C),A
    		CALL I2C_ACK
    		IN A,(#8C)
    		LD (HL),A
    		INC HL
    		LD A,B
    		CP 2
    		JR NZ,I2C_GET1
    		LD A,%11111111	; STOP
    		OUT (#9C),A
    I2C_GET1	DJNZ I2C_GET2
    		RET
    
    ; Wait ACK
    I2C_ACK	IN A,(#9C)
    		RRCA		; ACK?
    		JR C,I2C_ACK
    		RRCA		; ERROR?
    		RET
    I2C Interface SoftCore:
    Код:
    -------------------------------------------------------------------[15.10.2011]
    -- I2C Controller for PCF8583
    -------------------------------------------------------------------------------
    -- V0.1 	15.10.2011	первая версия
    
    -- The I2C core provides for four register addresses 
    -- that the CPU can read or writen to:
    
    -- Address 0 -> DATA (write/read) or SLAVE ADDRESS (write)  
    -- Address 1 -> Command/Status Register (write/read)
    
    -- Data Buffer (write/read):
    --	bit 7-0	= Stores I2C read/write data
    -- or
    -- 	bit 7-1	= Holds the first seven address bits of the I2C slave device
    -- 	bit 0	= I2C 1:read/0:write bit
    
    -- Command/Status Register (write):
    --	bit 7-2	= Reserved
    --	bit 1-0	= 00: IDLE; 01: START; 10: nSTART; 11: STOP
    -- Command/Status Register (read):
    --	bit 7-2	= Reserved
    --	bit 1 	= ERROR 	(I2C transaction error)
    --	bit 0 	= BUSY 		(I2C bus busy)
    
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    
    entity i2c is
    port (
    	-- CPU Interface Signals
    	RESET			: in std_logic;
    	CLK			: in std_logic;
    	ENA			: in std_logic;		-- 400KHz (4T = SCL clock frequency 100 kHz)
    	A			: in std_logic;
    	DI			: in std_logic_vector(7 downto 0);
    	DO			: out std_logic_vector(7 downto 0);
    	WR			: in std_logic;
    	-- I2C Interface Signals
    	I2C_SCL		: inout std_logic;
    	I2C_SDA		: inout std_logic);
    end i2c;
    
    architecture rtc_arch of i2c is
    type state_t is (s_idle, s_start, s_data, s_ack, s_stop, s_done);
    signal state 		: state_t;
    signal data_buf	: std_logic_vector(7 downto 0);
    signal go		: std_logic;
    signal mode		: std_logic_vector(1 downto 0);
    signal shift_reg	: std_logic_vector(7 downto 0);
    signal ack		: std_logic;
    signal nbit 		: std_logic_vector(2 downto 0);
    signal phase 		: std_logic_vector(1 downto 0);
    signal scl 		: std_logic;
    signal sda 		: std_logic;
    signal rw_bit 	: std_logic;
    signal rw_flag	: std_logic;
    
    begin
    
    -- Read CPU bus into internal registers
    cpu_write : process (CLK, RESET, WR)
    begin
    	if CLK'event and CLK = '1' then
    		if WR = '1' then
    			if A = '0' then
    				data_buf <= DI;
    			else
    				mode <= DI(1 downto 0);
    			end if;
    		end if;
    	end if;
    end process;
    
    process (RESET, CLK, ENA, WR, A, state)
    begin
    	if RESET = '1' or state = s_data then
    		go <= '0';
    	elsif CLK'event and CLK = '1' then
    		if WR = '1' then
    			if A = '0' then
    				go <= '1';
    			end if;
    		end if;
    	end if;
    end process;
    
    -- Provide data for the CPU to read
    cpu_read : process (A, state, shift_reg, ack, go)
    begin
    	DO(7 downto 2) <= "111111";
    	if A = '0' then
    		DO <= shift_reg;
    	else
    		if (state = s_idle and go = '0') then
    			DO(0) <= '0';
    		else
    			DO(0) <= '1';
    		end if;
    		DO(1) <= ack;
    	end if;
    end process;
    
    --     0123  0123  01230123012301230123012301230123  0123  0123  0123
    -- SCL ----  ----  __--__--__--__--__--__--__--__--  __--  ----  ----     
    -- SDA ----  --__  _< 7 X 6 X 5 X 4 X 3 X 2 X 1 X 0   >x   x     ----  
    --     Reset Start Data/Slave address/Word address   Ack   Stop  Done
                                                             
    -- I2C transfer state machine
    i2c_proc : process (RESET, CLK, ENA, go)
    	begin
    		if RESET = '1' then
    			scl <= '1';
    			sda <= '1';
    			state <= s_idle;
    			ack <= '0'; -- No error
    			phase <= "00";
    	
    		elsif CLK'event and CLK = '1' then
    			if ENA = '1' then
    				phase <= phase + "01"; -- Next phase by default
    	
    				-- STATE: IDLE
    				if state = s_idle then
    					phase <= "00";
    					if go = '1' then
    						shift_reg <= data_buf;
    						nbit <= "000";
    						if mode = "01" then
    							rw_flag	<= data_buf(0);	-- 1= Read; 0= Write
    							rw_bit <= '0';
    							state <= s_start;
    						else
    							rw_bit <= rw_flag;
    							state <= s_data;
    						end if;
    					end if;
    					
    				-- STATE: START
    				elsif state = s_start then -- Generate START condition
    					case phase is
    						when "00" =>
    							scl <= '1';
    							sda <= '1';
    						when "10" =>
    							sda <= '0';
    						when "11" =>
    							state <= s_data; -- Advance to next state
    						when others => null;
    					end case;
    					
    				-- STATE: DATA
    				elsif state = s_data then -- Generate data
    					case phase is
    						when "00" =>
    							scl <= '0'; -- Drop SCL
    						when "01" =>
    							if rw_bit = '0' then -- Write Data
    								sda <= shift_reg(7); -- Output data and shift (MSb first)
    							else
    								sda <= '1';
    							end if;
    						when "10" =>
    							scl <= '1'; -- Raise SCL
    							shift_reg <= shift_reg(6 downto 0) & I2C_SDA; -- Input data and shift (MSb first)
    						when "11" =>
    							if nbit = "111" then -- Next bit or advance to next state when done
    								state <= s_ack;
    							else
    								nbit <= nbit + "001";
    							end if;
    						when others => null;
    					end case;
    								
    				-- STATE: ACK
    				elsif state = s_ack then -- Generate ACK clock and check for error condition
    					case phase is
    					when "00" =>
    						scl <= '0'; -- Drop SCL
    					when "01" =>
    						if (rw_bit = '0' or mode = "11") then
    							sda <= '1';
    						else
    							sda <= '0';
    						end if;
    					when "10" =>
    						scl <= '1';	-- Raise SCL
    						ack <= I2C_SDA; -- Sample ack bit
    					when "11" =>
    						if mode(1) = '0' then
    							state <= s_idle;
    						else
    							state <= s_stop;
    						end if;
    					when others => null;
    					end case;
    	
    				-- STATE: STOP
    				elsif state = s_stop then -- Generate STOP condition
    					case phase is
    					when "00" =>
    						scl <= '0';
    					when "01" =>
    						if mode = "11" then
    							sda <= '0';
    						else
    							sda <= '1';
    						end if;
    					when "10" =>
    						scl <= '1';
    					when "11" =>
    						state <= s_done;
    					when others => null;
    					end case; 
    				
    				-- STATE: DONE	
    				else	
    					scl <= '1';
    					sda <= '1';
    					if phase = "11" then
    						state <= s_idle;
    					end if;
    				end if;
    			end if;
    		end if;
    	end process;
    
    	-- Create open-drain outputs for I2C bus
    	I2C_SCL <= '0' when scl = '0' else 'Z';
    	I2C_SDA <= '0' when sda = '0' else 'Z';
    
    end rtc_arch;
    Manual I2C

    VELESOFT, если есть стандарт, то я его просто поддержу в конфигурации для ReVerSE.

  8. #7
    Veteran
    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,746
    Спасибо Благодарностей отдано 
    146
    Спасибо Благодарностей получено 
    53
    Поблагодарили
    39 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А много ли часов подключено по Глюку? Есть ещё ведь стандарты СМУКа и Мультикарты.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Логотипы клонов Спектрума
    от CodeMaster в разделе Разный софт
    Ответов: 10
    Последнее: 07.09.2010, 23:09
  2. О совместимости клонов с играми
    от ILoveSpeccy в разделе Несортированное железо
    Ответов: 1
    Последнее: 13.03.2008, 18:26

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •