Где я могу найти список RTC, используемых в российских ZX клонов ?
Мне нужен список портов + описание. (или код драйвера)
Где я могу найти список RTC, используемых в российских ZX клонов ?
Мне нужен список портов + описание. (или код драйвера)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Стандартом стало подключение по Глюку
#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[свернуть]
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[свернуть]
Извещение лички отключено, захожу редко.
Вернее позволяет задать желаемую структуру цифрового устройства в виде принципиальной электрической схемы или программы.
Пример:
I2C Interface SoftCore:Код:; ----------------------------------------------------------------------------- ; 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
Manual I2CКод:-------------------------------------------------------------------[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;
VELESOFT, если есть стандарт, то я его просто поддержу в конфигурации для ReVerSE.
А много ли часов подключено по Глюку? Есть ещё ведь стандарты СМУКа и Мультикарты.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)