Вот немного по ISA из официального документа sp2000.pdf:
Ещё помню был какой-то текстовый файл с более детальным описанием работы с ISA (я в 2003 было брался ISA-плату COM-порта делать для Спринтера и собирал у всех любую инфу по работе с ISA), но я его с ходу не нашёл - буду смотреть дальше...
Сигналы BDx, BAx подаются с процессора через буферы. IOCHRDY через диод подается на /WAIT процессора IRQi соединены вместе, подаются на порт 1Ch (параллельный порт Z84C15) DRQi соединены вместе, подаются на порт 1Ch (параллельный порт Z84C15) DACKi соединены вместе, подаются на порт 1Ch (параллельный порт Z84C15) Для каждого слота ISA свои биты для IRQ,DRQ,DACK ISARF подается с RFSH через буфер BALE подается с MERQ через буфер CLK14 - отсутствует CLKZ1 - частота с процессора TC - отсутствует /0WS - отсутствует
/MEMW - Подаются с дешифратора ИД7. /MEMR - Для каждого слота свои. /IOWR - Обращение, как к памяти, так и к портам ISA происходит через /IORD - специальные страницы ОЗУ.
Что бы получить доступ к ISA надо установить скорпионовскую страницу 8..15 в C000h..FFFFh, после этого в порт E2h заслать номер страницы, соответствующий портам/памяти ISA
;------------------------------------------------------------------------------- ;If you want to interaction with ISA devices, you have to make following steps: ;1) send 10h value to port 1FFDh(system port); ;2) send control byte to port 0E2h(third memory window port); ;control byte: ;D7...should be 1 ;D6...should be 1 ;D5...should be 0 ;D4...should be 1 ;D3...should be 0 ;D2...specify number of ISA slot ;D1...specify access mode (0 - ISA memory, 1 - ISA ports) ;D0...should be 0
;The read/write signals are forming from read/write signals memory range 0C000h-0FFFFh. ;And the address lines A13...A0 has taken from processor data-BUS. ;The other ISA-signals such as RESET, AEN, A19...A14 can be set in port 9FBDh. And default value is 00h. ;port 9FBDh: ;D7...RESET ;D6...AEN ;D5...A19 ;D4...A18 ;D3...A17 ;D2...A16 ;D1...A15 ;D0...A14
Code:
sc_port equ 0x1ffd isa_dir equ 0x9fbd
... call isa_init ... isa_init: call reset_isa call open_isa_ports ret
; reset ISA device reset_isa: ld bc,isa_dir ld a,0xc0 out (c),a push bc ld hl,20 call __delay pop bc ld a,0 out (c),a ret
open_isa_ports: in a,(mmu3) ld (save_mmu3),a ld bc,sc_port ld a,0x11 out (c),a ld a,0xd4 out (mmu3),a ld bc,isa_dir ld a,0 out (c),a ret
close_isa_ports: ld bc,sc_port ld a,1 out (c),a ld a,(save_mmu3) out (mmu3),a ret
и т.д. исходник собирается в sjasm и в orgasm. надо только dss.inc найти...
P.P.S. Если уже строить ISA-8 плату, то надо строить универсальную, чтобы в IBM PC тоже работало - поэтому надо будет делать защёлкивание адреса по BALE и т.д. http://www.hardwarebook.info/ISA
Вот немного по ISA из официального документа sp2000.pdf:
Ещё помню был какой-то текстовый файл с более детальным описанием работы с ISA (я в 2003 было брался ISA-плату COM-порта делать для Спринтера и собирал у всех любую инфу по работе с ISA), но я его с ходу не нашёл - буду смотреть дальше...
Сигналы BDx, BAx подаются с процессора через буферы. IOCHRDY через диод подается на /WAIT процессора IRQi соединены вместе, подаются на порт 1Ch (параллельный порт Z84C15) DRQi соединены вместе, подаются на порт 1Ch (параллельный порт Z84C15) DACKi соединены вместе, подаются на порт 1Ch (параллельный порт Z84C15) Для каждого слота ISA свои биты для IRQ,DRQ,DACK ISARF подается с RFSH через буфер BALE подается с MERQ через буфер CLK14 - отсутствует CLKZ1 - частота с процессора TC - отсутствует /0WS - отсутствует
/MEMW - Подаются с дешифратора ИД7. /MEMR - Для каждого слота свои. /IOWR - Обращение, как к памяти, так и к портам ISA происходит через /IORD - специальные страницы ОЗУ.
Что бы получить доступ к ISA надо установить скорпионовскую страницу 8..15 в C000h..FFFFh, после этого в порт E2h заслать номер страницы, соответствующий портам/памяти ISA
Это имеет какое-то отношение к реальности или это Sp97 ?...
Предположим, что это про Sp2000 - вот как по схеме подключен дешифратор ISA:
Attachment:
Screenshot from 2020-12-26 22-20-16.png [ 35.47 KiB | Viewed 8753 times ]
Сигнал CS_CACHE (как и CS_ROM) приходит из Альтеры. RA14, RA15, RA16, RA17 - тоже (интересно, что они участвуют в формировании адреса ПЗУ, быстрой памяти и ISA). Соответственно, этот дешифратор работает когда:
CS_CACHE=0 RA16=0 (когда оно в 1, то идёт разрешение быстрой памяти вместо исы) RA17=1
интересно, что сигнал /RD никак не участвует в формировании стробов /MEMRx:
Code:
RA14=0 /WR=0 RA15=0 -----> /MEMW1 (1000=08h должно устанавливаться через значение D0h) RA14=0 /WR=0 RA15=1 -----> /MEMW2 (1010=0Ah должно устанавливаться через значение D2h) RA14=0 /WR=1 RA15=0 -----> /MEMR1 (1000=08h должно устанавливаться через значение D0h) RA14=0 /WR=1 RA15=1 -----> /MEMR2 (1010=0Ah должно устанавливаться через значение D2h) RA14=1 /WR=0 RA15=0 -----> /IOWR1 (1001=09h должно устанавливаться через значение D4h) RA14=1 /WR=0 RA15=1 -----> /IOWR2 (1011=0Bh должно устанавливаться через значение D6h) RA14=1 /WR=1 RA15=0 -----> /IORD1 (1001=09h должно устанавливаться через значение D4h) RA14=1 /WR=1 RA15=1 -----> /IORD2 (1011=0Bh должно устанавливаться через значение D6h)
дока пишет, что F0...FF это КЭШ (1111xxxx), E0...EF это ПЗУ (1110xxxx), а D0...DF получается ISA (1101xxxx)? Надо поглядеть в исходники альтеровской прошивки как формируются CS_CACHE и CS_ROM...поглядел (под спойлером кусок UPDATE!=1 но по видимому это старый код, т.к. новый включается при UPDATE=1 - см.далее):
UPDATE_NOT_1
Code:
CASE ROM_WRITE_MODE IS WHEN 0 => CS_ROM = ROM_RG[4] or !/RF or LCELL(DECODE.CS_ROM or /RD or (DECODE.BLK_R & !LCELL(DECODE.PAGE[7..4] == 14))); XACS = VCC; WHEN 1 => CS_ROM = /MR or !/RF or DFF((/RD & /WR),CLK42,,); -- XACS = /MR or DFF((/WR or DECODE.MC_END),!CLK42,,); XACS = /MR or DFF(/WR or !DFF(/WR,!CT2,,!/WR),!CT2,,!/WR); END CASE;
-- CS_CASH = !DECODE.BLK_R or !(DECODE.PAGE[7..4] == 15);
LCELL(DECODE./IOM or /WR or !(DCPP[] == B"00011011")) -- 1B
);
-- Switcher for ISA/CASHE adress
ISA_CASH = LCELL(DECODE.BLK_R & (DECODE.PAGE[7..4] == B"11X1")) or !/IOWR;
CASE /IO IS WHEN 0 => ISA_A[3..2] = B"00"; -- for Write to A20 port ISA_A[1..0] = DECODE.PAGE[1..0]; -- ANY
WHEN 1 => -- ISA_A[3..2] = B"10"; -- for ISA Slots ISA_A[3..2] = (!DECODE.PAGE5,DECODE.PAGE5);
-- ISA_A[1..0] = DECODE.PAGE[1..0]; -- ISA select ISA_A[1..0] = (DECODE.PAGE2,DECODE.PAGE1); -- ISA select END CASE;
RD_RAM = !(DECODE.CS_RAM or /RD or DECODE.BLK_R);
CASE ROM_WRITE_MODE IS WHEN 0 => CASE (ISA_CASH,DECODE.RAM) IS WHEN 0 => RA[] = (B"01",A[15..14]); -- for CASHE in RAM WHEN 1 => RA[] = DECODE.RA[]; -- ROM Adresses WHEN 2,3 => RA[] = ISA_A[3..0]; -- CASHE & ISA END CASE; WHEN 1 => RA[] = ROM_RG[3..0]; END CASE; ROM_WRITE_MODE = DFF((ROM_RG[4] & !(A14 or A14)),CLK42,,);
Получается, что в режиме CACHE/ISA эти старшие адреса RA17...RA13 устанавливаются в !DECODE.PAGE5, DECODE.PAGE5, DECODE.PAGE2, DECODE.PAGE1 Значит бит 0 номера страницы и биты 3 и 4 попросту игнорируются, а наружу идёт RA17=1 RA16=0 для ISA и RA17=0 RA16=1 для CACHE, а биты 1 и 2 номера страницы сдвигаются в RA15 и RA14 Ну и ещё номер страницы должен быть 11X1nnnn где X равно 1 для CACHE и 0 для ISA А если поставить туда 1110nnnn то вероятно мы попадём на nnnn-ую страницу ПЗУ...
P.P. То что выше это когда UPDATE != 1 а если оно таки 1, то формулы другие:
Code:
CASE (PRE_ROM,PRE_CASH) IS WHEN B"00" => ISA_A[] = B"1000"; -- error -> ISA WHEN B"01" => ISA_A[] = ((ROM_RG3 xor !SYS_PG),ROM_RG[2..0]); -- ROM_ADRESS WHEN B"10" => ISA_A[] = (B"01",ROM_RG[1..0]); -- CASHE_ADRESS WHEN B"11" => ISA_A[] = (!PRE_ISA,GND,ISA_PORT[2..1]); -- for ISA_A20 END CASE;
и оно таки похоже всегда 1 т.к.:
Code:
PARAMETERS ( UPDATE = 1, -- 1 for UPDATE sheet MODE = "SPRINTER", -- or MODE = "SPECTRUM" NMI_ON = "OFF", -- "ON" - for use NMI SCREEN_OFF = "NOT_USE" -- "USE" - for use screen on/off );
P.P.S. Табличка неправильная - судя по раннему описанию и схеме, должно быть так:
Да, есть такая девайсина у меня. Лежит с лета. Пытаюсь чё-нить придумать, как работать с разными прерываниями у SID файлов.
Fagear, кстати, не производит их больше. Схема где то в инете есть в открытом виде, даже наверное файлы для производства есть. Надо искать, они есть точно. Мне с барахолки zx-pk товарищЬ собирал по свободным файлам этого девайса. В ПЦ он тыкал её, она рабочая. Я пока ещё никуда не тыкал её.
27 Dec 2020 01:13
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
Получается, что в режиме CACHE/ISA эти старшие адреса RA17...RA13 устанавливаются в !DECODE.PAGE5, DECODE.PAGE5, DECODE.PAGE2, DECODE.PAGE1 Значит бит 0 номера страницы и биты 3 и 4 попросту игнорируются, а наружу идёт RA17=1 RA16=0 для ISA и RA17=0 RA16=1 для CACHE, а биты 1 и 2 номера страницы сдвигаются в RA15 и RA14 Ну и ещё номер страницы должен быть 11X1nnnn где X равно 1 для CACHE и 0 для ISA А если поставить туда 1110nnnn то вероятно мы попадём на nnnn-ую страницу ПЗУ...
Проверил программно - к сожалению такой фокус срабатывает только с номерами D0,D2,D4,D6 - остальные номера (я пробовал E0...F6) открывают страницы обычной памяти с такими же номерами, даже не смотря на открытый скорпионовский порт...
P.S. Ещё момент, что в Knowledge Base написано засылать в Скорпионовский порт 0x10, чтобы получить доступ к ISA и 0x00, чтобы вернуть всё обратно - на самом деле после этого всё встаёт колом (даже после 0x00) и спасает только ребут. Надо как в примере Саймана писать 0x11 и 0x01 соответственно...
P.P.S. В описании к биусу описаны вот такие изменения:
Code:
;R0033 - В режиме Sprinter введен старый доступ к ISA через порт 1FFD и ; PAGE3=D0..DF ........... ;R0029 - Введено разделение Sprinter и Spectrum режимов. ; В режиме Spectrum и Sprinter-ZX все ПЗУ находятся в ОЗУ ; Изменен доступ к ПЗУ и Fast-RAM доступ стал быстрее. Изменилась ; адресация страниц Fast-RAM и ROM. Адресуются через порт 5F в режиме ; SYSTEM-on. Введен полный запрет доступа к RAM во время работы с ПЗУ ; ОЗУ в этот момент свободно для других функций (потребуется для DMA) ; Скорость работы в Fast-RAM выведена на максимум (без вайтов). ; Выкинуты ПЗУ Spectrum-а из BIOS.
Видимо только через SYSTEM режим (из биоса?) можно ПЗУ и КЭШ юзать...
Сделали, порезали, создали UPS тракинг, но посылку курьеру пока не отдали - я заплатил за "UPS Next Day Air Saver", но завтра 31 декабря вряд ли получу, значит уже после 1 января...
Attachment:
Screenshot from 2020-12-30 17-14-01.png [ 56.06 KiB | Viewed 8673 times ]
P.S. О - пишут курьер забрал в 5.33PM сегодня в Портланде штат Орегон - есть шанс, что завтра 31 декабря получу посылочку у себя в Пало Альто штат Калифорния до 9 вечера
на самом деле CLK14 (OSC) подключена к XTAL2 процессора, а XTAL1 подключен к маленькой Альтере, но судя по документации на Z84C15 если CLKIN заведено на процессор (а оно заведено), то XTAL1 должен быть подключен к 0 или к 1, а на XTAL2 соответственно небудет ничего - хотя там какой-то режим есть (с CGC блоком) где всё это используется:
Attachment:
Screenshot from 2020-12-31 19-09-43.png [ 25.41 KiB | Viewed 8601 times ]
RomanRom2 говорит на OSC есть ровно 14 МГц (маленькая альтера из 42 МГц видать получает) - пока пожалуй сойдёт и так, а для точности в будущем наверное можно перерезать дорожку идущую к B30 обоих разъёмов (оставив дорожку между разъёмами) и просто вставить во второй ISA-разъём макетную платку с 14.31818MHz TTL-осциллятором, тогда можно и AdLib попрограммировать со 100% точностью...
Сделали, порезали, создали UPS тракинг, но посылку курьеру пока не отдали - я заплатил за "UPS Next Day Air Saver", но завтра 31 декабря вряд ли получу, значит уже после 1 января...
Attachment:
The attachment Screenshot from 2020-12-30 17-14-01.png is no longer available
P.S. О - пишут курьер забрал в 5.33PM сегодня в Портланде штат Орегон - есть шанс, что завтра 31 декабря получу посылочку у себя в Пало Альто штат Калифорния до 9 вечера
Users browsing this forum: No registered users and 25 guests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum