Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Интегралды схема
Integrated circuit
6526/8520 кешенді интерфейс адаптері (CIA) – MOS Technology компаниясы жасаған интегралды схема. Ол 6502 микропроцессорлар отбасы үшін I/O порт контроллері ретінде қызмет етті, параллель және сериялық I/O мүмкіндіктерін, сондай-ақ таймерлер мен күндізгі уақыт (TOD) сағатын қамтамасыз етті. Бұл құрылғы ең көп қолданылғаны Commodore 64 және Commodore 128(D) компьютерлерінде болды, олардың әрқайсысында екі CIA чипі орналасқан. Commodore 1570 және Commodore 1571 дискеттік жетектерінде әрқайсысында бір CIA чипі болды. Сонымен қатар, Amiga үй компьютерлері мен Commodore 1581 дискеттік жетегі CIA схемасының 8520 деп аталатын өңделген нұсқасын пайдаланды. 8520, TOD схемаларын оңайлатудан басқа, функционалдық тұрғыдан 6526-ға тең. CIA-ның алдында PIA болған.
The 6526/8520 Complex Interface Adapter (CIA) was an integrated circuit made by MOS Technology. It served as an I/O port controller for the 6502 family of microprocessors, providing for parallel and serial I/O capabilities as well as timers and a Time of Day (TOD) clock. The device's most prominent use was in the Commodore 64 and Commodore 128(D), each of which included two CIA chips. The Commodore 1570 and Commodore 1571 floppy disk drives contained one CIA each. Furthermore, the Amiga home computers and the Commodore 1581 floppy disk drive employed a modified variant of the CIA circuit called 8520. 8520 is functionally equivalent to the 6526 except for the simplified TOD circuitry. Predecessor to CIA was PIA.
Параллельді I/O
ЦРУ-да екі 8 биттік екі бағытты параллельді I/O порты болған. Әрбір портқа сәйкес дерек бағытын реттегіш регистрі болды, ол әрбір дерек желісін жеке-жеке кіріс немесе шығыс режиміне орнатуға мүмкіндік берді. Бұл порттардан мәлімет оқу әрқашан жеке жолдардың күйін қайтаратын, дерек бағыты қалай орнатылғанына қарамастан.
The CIA had two 8 bit bidirectional parallel I/O ports. Each port had a corresponding Data Direction Register, which allowed each data line to be individually set to input or output mode. A read of these ports always returned the status of the individual lines, regardless of the data direction that had been set.
Ілеспе I/O
Ішкі екі бағытты 8 биттік ауысу тізілімі ЦРУ-ға тізбекті I/O басқаруға мүмкіндік берді. Чип сыртқы көзден синхрондалған тізбекті кірісті қабылдай алады және кіріктірілген бағдарламаланатын таймерлердің бірімен синхрондалған тізбекті шығысты жібере алады. 8 биттік тізбектік деректерді жіберу аяқталғанда үзіліс туды. Бірнеше компьютердің ауысу тізілімі мен синхрондау шығыстарын қосу арқылы қарапайым "желі" құруға болады. 2 МГц нұсқасы үшін максималды деректер беру жылдамдығы 500 кбит/с. ЦРУ 6522 VIA-ның алдыңғы нұсқасындағы тізбектік ауысу тізіліміндегі қателікті жойды. ЦРУ бастапқыда дискімен жылдам байланыс құру үшін жасалған, бірақ VIC 20 дискісімен үйлесімділікті сақтау қажеттілігінен оны қолдану мүмкін болмады. Іс жүзінде, 1541 дискісінің микробағдарламасы C64 бейне процессорының әрекетін реттеу үшін VIC 20-нің алдыңғы нұсқасынан тіпті баяулау болуы керек еді, себебі ол экранды салу кезінде CPU-ны 512 микросекунд сайын 40 микросекундқа өшіріп тастайды және осы уақыт аралығында шинаны тыңдай алмайды, соның салдарынан кейбір деректерді жоғалту қаупі туындайды.
An internal bidirectional 8 bit shift register enabled the CIA to handle serial I/O. The chip could accept serial input clocked from an external source, and could send serial output clocked with one of the built in programmable timers. An interrupt was generated whenever an 8 bit serial transfer had completed. It was possible to implement a simple "network" by connecting the shift register and clock outputs of several computers together. The maximum bitrate is 500 kbit/s for the 2 MHz version. The CIA incorporates a fix to a bug in the serial shift register in the earlier 6522 VIA. The CIA was originally intended to allow fast communication with a disk drive, but in the end couldn't be used because of a desire to keep disk drive compatibility with the VIC 20; in practice the firmware of 1541 drive had to be made even slower than its VIC 20 predecessor to workaround a behaviour of the C64's video processor, that, when drawing the screen, turned off the CPU for 40 microseconds every 512 microseconds and in that timeslice can't listen to the bus, risking to miss some bit .
Интервалдық таймерлер
Екі бағдарламаланатын интервалдық таймер қол жетімді болды, олардың әрқайсысы субмикросекундтық дәлдікке ие. Әр таймер 16 биттік, тек оқуға арналған, алдын ала орнатылатын төмен санағыштан және сәйкес 16 биттік, тек жазуға арналған, құлыптан тұрады. Таймер іске қосылғанда, таймердің құлыптық мәні автоматты түрде оның санағышына көшіріледі, содан кейін санағыш әр сағат циклында төмендеп, ағып кеткенде, егер ЦРУ осылай конфигурацияланған болса, үзіліс тудырады. Таймер "бір реттік" режимде, ағып кеткеннен кейін тоқтатыла отырып, немесе "үздіксіз" режимде, құлыптық мәнді қайта жүктеу арқылы таймер циклын жаңадан бастай алады. Үзілістерді тудырудан басқа, таймердің шығысы екінші I/O портына да жіберілуі мүмкін. Commodore 64 және Commodore 128 конфигурациясында ЦРУ-ның уақытын Ø2 жүйелік сағаты, шамамен бір МГц, басқарады. Бұл таймерлердің шамамен бір микросекундтық интервалмен төмендеуін білдіреді, нақты уақыт аралығы жүйенің NTSC немесе PAL бейне стандартын қолдануына байланысты анықталады. C 128-де сағатты созу әдісі қолданылды, сондықтан ЦРУ-ның уақытына жүйенің SLOW немесе FAST режимде жұмыс істеуі әсер етпейді. Таймер B-ні таймер A-ның ағып кетуін санауға бағдарламалау арқылы салыстырмалы түрде ұзақ уақыт аралықтарын жасауға болады. Егер екі таймер де максималды интервалдық мәнге, яғни 65535-ке орнатылса, бір сағат, 11 минут, 34 секундқа тең уақыт аралығы пайда болады.
Two programmable interval timers were available, each with sub microsecond precision. Each timer consisted of a 16 bit read only presettable down counter and a corresponding 16 bit write only latch. Whenever a timer was started, the timer's latch was automatically copied into its counter, and the counter would then decrement with each clock cycle until underflow, at which an interrupt would be generated if the CIA was configured to do so. The timer could run in either "one shot" mode, halting after underflowing, or "continuous" mode, reloading the latch value and starting the timer cycle anew. In addition to generating interrupts, the timer output could also be gated to the second I/O port. As configured in the Commodore 64 and Commodore 128, the CIA's timing was controlled by the Ø2 system clock, nominally one MHz. This meant that the timers decremented at approximately one microsecond intervals, the exact time period being determined by whether the system used the NTSC or PAL video standard. In the C 128, clock stretching was employed so the CIA's timing was unaffected by whether the system was running in SLOW or FAST mode. It was possible to generate relatively long timing intervals by programming timer B to count timer A underflows. If both timers were loaded with the maximum interval value of 65,535, a timing interval of one hour, 11 minutes, 34 seconds would result.
Күндізгі уақыт (TOD) сағаты
CIA-да нақты уақыт сағаты енгізілген, бұл интервалдық таймерлердің микросекундтық дәлдігіне қарағанда адам қажеттіліктеріне сәйкес келетін уақытты өлшеу құрылғысын қамтамасыз етеді. Уақыт американдық 12 сағаттық AM/PM форматында сақталады. TOD сағаты төрт оқу/жазу тіркелімінен тұрады: сағат (7-биті AM/PM белгісі ретінде қолданылады), минут, секунд және секундтың оннан бір бөлігі. Барлық тіркелімдер BCD форматында оқылады, бұл кодтау/декодтау процесін жеңілдетеді. Тіркелімдерді оқу әрқашан күннің уақытын көрсетеді. Уақытты алу кезінде қателерді болдырмау үшін сағат тіркелімін оқу дереу тіркелімді жаңартуды тоқтатады, бұл ішкі уақыт өлшеудің дәлдігіне әсер етпейді. Ондықтар тіркелімі оқылғаннан кейін жаңарту қайта басталады. Сағат тіркелімінен басқа кез келген тіркелімді "ұшып" оқуға болады, бұл жұмыс істеп тұрған TOD сағатын таймер ретінде пайдалануды практикалық етеді. Дегенмен, егер сағат тіркелімі оқылса, ондықтар тіркелімін оқу қажет. Әйтпесе, уақыт туралы мәліметтер "қатып" қалады. Уақытты орнату үшін тіркелімдерге тиісті BCD мәндерін жазу қажет. Сағат тіркеліміне жазу сағатты толығымен тоқтатады. Сағат ондықтар тіркеліміне мән жазылмайынша қайтадан іске қосылмайды. Тіркелімдер жүйелік жад картасында орналасқан реттілікке сәйкес, тіркелімдерді дұрыс реттілікпен жазу үшін қарапайым цикл жеткілікті. Сағатты іске қосу үшін тек ондықтар тіркеліміне жазуға болады, мұнда аппараттық қайта орналастырудан кейін сағат 1:00:00.0-де басталады. Уақытты есептеу мүмкіндігінен басқа, TOD-ді кез келген уақытта үзіліс сұранысын жасау үшін белгілеп, дабыл сағаты ретінде де пайдалануға болады. Көптеген 6526 чиптеріндегі қатеге байланысты (төмендегі қателерді де қараңыз), дабыл IRQ дабыл уақытының секундтық бөлігі дәл нөлге тең болғанда әрқашан туындамайды. Бұл жағдайда дабылдың ондық мәнін 0,1 секундқа орнату керек. TOD сағатының ішкі схемасы 50 немесе 60 Гц синустық толқынмен басқарылуға арналған. C 64 және C 128 (D) компьютерлерінде қуат көзі желіден осындай сигнал берді, нәтижесінде тұрақты уақыт өлшегіш пайда болды. Екі электр желісінің жиілігімен жұмыс істеу мүмкіндігі 6526 чипінің бір нұсқасын 50 немесе 60 Гц қуаты бар елдерде қолдануға мүмкіндік берді. NTSC немесе PAL бейне стандарттарының электр желісінің жиілігіне тікелей байланысты еместігін атап өту маңызды. Сонымен қатар, кейбір компьютерлер TOD сағатының жиілігін электр желісінен алған жоқ. Мысалы, Commodore SX 64-тің NTSC және PAL нұсқалары арнайы кристаллмен қамтамасыз етілген 60 Гц TOD сағатын қолданады. Мысалы, Commodore 64 операциялық жүйесіндегі KERNAL жүйе іске қосылған кезде бейне стандартты анықтайды, бірақ 50 Гц жетекті машиналарда берілген TOD сағаттық жиілігін анықтауға немесе CIA-ны дұрыс іске қосуға тырыспайды. Осылайша, берілген жиілікті анықтау және сәйкесінше CIA-ның флагын орнату үшін CIA-ның TOD функциясын пайдалануды қалаған кез келген қолданбалық бағдарламалық жасақтама жауапты. Бұл істелмесе, сағат дұрыс уақыттан тез ауытқуы мүмкін. Amiga және Commodore 1581 дискілік дискісінде қолданылған CIA-ның 8520 нұсқасы күндізгі уақыт сағатын 24 биттік бинарлық сағаттаушыға өзгертіп, 6526-ның BCD форматын алмастырды. Дегенмен, басқа да мінез-құлықтары ұқсас болды.
A real time clock is incorporated in the CIA, providing a timekeeping device more conducive to human needs than the microsecond precision of the interval timers. Time is kept in the American 12 hour AM/PM format. The TOD clock consists of four read/write registers: hours (with bit 7 acting as the AM/PM flag), minutes, seconds and tenths of a second. All registers read out in BCD format, thus simplifying the encoding/decoding process. Reading from the registers will always return the time of day. In order to avoid a carry error while fetching the time, reading the hours register will immediately halt register updating, with no effect on internal timekeeping accuracy. Once the tenths register has been read, updating will resume. It is possible to read any register other than the hours register "on the fly," making the use of a running TOD clock as a timer a practical application. If the hours register is read, however, it is essential to subsequently read the tenths register. Otherwise, all TOD registers will remain "frozen." Setting the time involves writing the appropriate BCD values into the registers. A write access to the hours register will completely halt the clock. The clock will not start again until a value has been written into the tenths register. Owing to the order in which the registers appear in the system's memory map, a simple loop is all that is required to write the registers in the correct order. It is permissible to write to only the tenths register to "nudge" the clock into action, in which following a hardware reset, the clock will start at 1:00:00.0. In addition to its timekeeping features, the TOD can be configured to act as an alarm clock, by arranging for it to generate an interrupt request at any desired time. Due to a bug in many 6526s (see also errata below), the alarm IRQ would not always occur when the seconds component of the alarm time is exactly zero. The workaround is to set the alarm's tenths value to 0.1 seconds. The TOD clock's internal circuitry is designed to be driven by either a 50 or 60 Hz sine wave signal. As used in the C 64 and C 128(D), the computer's power supply supplied such a signal from the mains, resulting in a stable timekeeper with little long term drift. The ability to work with both power line frequencies allowed a single version of the 6526 to be used in computers operated in countries with either 50 or 60 Hz power. It is important to note that contrary to the popular belief, NTSC or PAL video standards are not directly linked to mains power frequency. Additionally, some computers did not derive their TOD clock frequency from the mains power source. For example, both NTSC and PAL variants of Commodore SX 64 use 60 Hz TOD clock supplied by a dedicated crystal. KERNAL operating system in Commodore 64 for example will determine the video standard during system startup, but tries neither to identify the supplied TOD clock frequency nor to initialise the CIAs correctly on 50 Hz driven machines. Thus, it is the responsibility of any application software that wants to use either CIA's TOD function to determine the supplied frequency and set the CIA(s) flag accordingly itself. Failure to do so may cause the clock to deviate quickly from the correct time. The 8520 revision of the CIA, as used in the Amiga and the Commodore 1581 disk drive, modified the time of day clock to be a 24 bit binary counter, replacing the BCD format of the 6526. Other behavior was similar, however.
Нұсқалар
CIA 1 МГц (6526), 2 МГц (6526A) және 3 МГц (6526B) нұсқаларында қол жетімді болды. Ол JEDEC стандарты бойынша 40 қосқышты керамикалық немесе пластикалық DIP корпусында келді. 8520 CIA, өзгертілген уақыт сағатымен, Amiga компьютерлерінде пайдаланылды. Commodore компаниясы C128DCR (Коммодор 128-ге қараңыз) ішіндегі Commodore 1571 құрылғысының құнын төмендету үшін 5710 деп аталатын қақпа массивіне CIA сияқты логиканы (тек 4 регистр) енгізді. 5710 CIA жылдам сериялық интерфейс үшін сериялық сағатын CIA6526 эквивалентті Таймер A мәні 5-ке бекітілген күйде ұсынады, бұл бір бит уақытын 5 мкс-қа дейін қысқартады. Бұл түпнұсқа Commodore 1571 құрылғысындағы 6526 CIA-дағы Таймер A мәні 6 болғаннан өзгеше. 5710 CIA таймер немесе таймерді басқару регистрлерін қамтымайды. Ол тек екі порт регистрінен және сериялық ауыстырғышты басқару және оның оқиғасын басқару регистрінен тұрады.
The CIA was available in 1 MHz (6526), 2 MHz (6526A) and 3 MHz (6526B) versions. The package was a JEDEC standard 40 pin ceramic or plastic DIP. The 8520 CIA, with its modified time of day clock, was used in the Amiga computers. Commodore embedded reduced (just 4 registers) CIA like logic for the cost reduced Commodore 1571 inside the C128DCR (See Commodore 128) in a gate array called 5710 which also contains other functions. The 5710 CIA has the serial clock for the fast serial interface hardwired to a CIA6526 equivalent Timer A value of 5, leading to a per bit time of 5μs on transmission. This is different from what used to be a Timer A value of 6 in the 6526 CIA in the original Commodore 1571. The 5710 CIA does not contain timer or timer control registers. It only contains two port registers and the register to control the serial shifter and its event.
Қателік
Жоғарыда айтылған сағаттық дабыл үзілісінің қатесінен өзге, көптеген ЦИА-да бөлшек үзіліс болуға тиіс уақыттан бір немесе екі цикл бұрын үзіліс басқару тізілімі (ICR) оқылғанда, B аппараттық үзілісін жасамайтын жағдайлар кездесетін. Осы ақаулық, сондай-ақ Commodore ұсынған (8 биттік) операциялық жүйедегі логикалық қателер Commodore 64 және Commodore 128 компьютерлері жоғары жылдамдықпен жұмыс істегенде жиі жалған RS 232 қателеріне әкеп соқты.
In addition to the aforementioned alarm clock interrupt bug, many CIAs exhibited a defect in which the part would fail to generate a timer B hardware interrupt if the interrupt control register (ICR) was read one or two clock cycles before the time when the interrupt should have actually occurred. This defect, as well as logic errors in the Commodore provided (8 bit) operating system, caused frequent pseudo RS 232 errors in the Commodore 64 and Commodore 128 computers when running at higher baud rates.