YABUS.ZXISA
Interfejs służący do podłączania kart ISA jako urządzeń wejścia/wyjścia w trybie 8bit. Karty z pamięcią nie mogą zostać użyte. Głównym zastosowaniem jest użycie tanich kart Multi I/O jako interfejsu szeregowego, równoległego oraz kontrolera dyskowego.
ZX Spectrum musi mieć możliwość blokowania wszystkich wewnętrznych adresów portów w przedziale #40..#7F (linią /IORQGE).
Zewnętzne interfejsy, jeśli używają portów w tym zakresie, muszą być podłączone za YABUS.ZXISA i podawać stan wysoki na linię przelotową /IORQGE, aby zablokować porty ISA dla wszystkich swoich portów (np. #5B, #5F, #7B, #7F).
YABUS.ZXISA jest krokiem w stronę powstania YABUS.ZXAT -
mostu łączącego ZX Spectrum z płytą główną PC AT.
Mapa portów
Interfejs szeregowy / modem - 8 portów jest mapowane na porty #50..#57 Z80. Starszy bajt adresu portu wybiera numer urządzenia (zwykle 0..3).
Interfejs równoległy (niestety, tylko SPP) - 3 porty są mapowane na porty #58..#5A Z80. Starszy bajt adresu portu wybiera numer urządzenia (zwykle 0..1).
Kontroler dyskowy (FDC) - 4 porty są mapowane na porty #72, #74, #75, #77 Z80. Starszy bajt adresu portu jest ignorowany.
Karta dźwiękowa - porty są mapowane następująco:
Port kontrolny (370h..371h) - #78..#79, starszy bajt ignorowany.
Sound Blaster (220h..23Fh) - #0148..#074F.
MIDI (330h..331h) - #0448..#0449 lub (300h..301h) - #0668..#0669.
AD-LIB (388h..38Bh) - #0260..#0263.
Joystick (201h) - #0769.
Przerwania
Karty mogą generować przerwania INT w trybie IM1 oraz IM2. Dla IM2 generowany jest wektor o wartości z przedziału #02..#7E.
Bit | Opis |
7 | zawsze 0 |
6 | stan na linii IRQ9 |
5 | stan na linii IRQ7 |
4 | stan na linii IRQ6 |
3 | stan na linii IRQ5 |
2 | stan na linii IRQ4 |
1 | stan na linii IRQ3 |
0 | zawsze 0 |
Jeśli wywoływane jest tylko jedno przerwanie, dla
poszczególnych przerwań generowane są przesunięcia w tabeli IM2 okreslone jako wektor bazowy:
Linia | Wektor bazowy | Wszystkie możliwe wektory |
IRQ3 | +#02 |
#02, #06, #0A, #0E, #12, #16, #1A, #1E,
#22, #26, #2A, #2E, #32, #36, #3A, #3E,
#62, #66, #6A, #6E, #72, #76, #7A, #7E,
#62, #66, #6A, #6E, #72, #76, #7A, #7E |
IRQ4 | +#04 |
#04, #06, #0C, #0E, #14, #16, #1C, #5E,
#24, #26, #2C, #2E, #34, #36, #3C, #3E,
#44, #46, #4C, #4E, #54, #56, #5C, #5E,
#64, #66, #6C, #6E, #74, #76, #7C, #7E |
IRQ5 | +#08 |
#08, #0A, #0C, #0E, #18, #1A, #1C, #1E,
#28, #2A, #2C, #2E, #38, #3A, #3C, #3E,
#48, #4A, #4C, #4E, #58, #5A, #5C, #5E,
#68, #6A, #6C, #6E, #78, #7A, #7C, #7E |
IRQ6 | +#10 |
#10, #12, #14, #16, #18, #1A, #1C, #1E,
#30, #32, #34, #36, #38, #3A, #3C, #3E,
#50, #52, #54, #56, #58, #5A, #5C, #5E,
#60, #72, #74, #76, #78, #7A, #7C, #7E |
IRQ7 | +#20 |
#20, #22, #24, #26, #28, #2A, #2C, #2E,
#30, #32, #34, #36, #38, #3A, #3C, #3E,
#60, #62, #64, #66, #68, #6A, #6C, #6E,
#70, #72, #74, #76, #78, #7A, #7C, #7E |
IRQ9 | +#40 |
#40, #42, #44, #46, #48, #4A, #4C, #4E,
#50, #52, #54, #56, #58, #5A, #5C, #5E,
#60, #62, #64, #66, #68, #6A, #6C, #6E,
#70, #72, #74, #76, #78, #7A, #7C, #7E |
Przesunięcie +#00 nie będzie nigdy używane. Możesz więc
wypełnić bajty +#00..+#01 taką zawartością, jak dla
normalnej, "bezpiecznej" tabeli wektorów IM2. Oczywiście
bajty +#80..+#100 też powinny być wypełnione tą samą
zawartością. (Pod adresem powstałym ze złożenia wartości
wypełniającej tabelę IM2, np. #BFBF dla wartości #BF,
powinna być procedura obsługi przerwań ramkowych.)
Wzajemne priorytety przerwań określa się wpisując odpowiednie
adresy pod przesunięcia wypadkowe. Na przykład, jeśli wystąpią
jednocześnie IRQ3 i IRQ4, to wypadkowe przesunięcie jest +#06.
Jeśli wyższy priorytet ma mieć IRQ3, wpisz pod +#06 taki sam
adres, jak pod +#02. Jeśli IRQ4 ma być obsłużone w pierwszej
kolejności, wpisz adres taki, jak pod +#04. Kod obsługi musi
odblokowywać przerwania (EI) po zakończeniu.
Dla każdego żródła przerwania (IRQ3..IRQ7,IRQ9) muszą być
wpisane adresy w 32 pozycjach tabeli IM2!
Jak to działa?
Adres w złączu ISA jest generowany następująco:
Linia ISA | Linia Z80 lub stan |
A4=0 lub A5=0 | A4=1 i A5=1 |
IA9 | zawsze wysoki (1) |
IA8 | /A8 | wysoki (1) |
IA7 | /A3 |
IA6 | A4 |
IA5 | /A5 | wysoki (1) |
IA4 | /A9 | wysoki (1) |
IA3 | /A10 | niski (0) |
IA2 | A2 |
IA1 | A1 |
IA0 | A0 |
Płytka drukowana
Płytka przeznaczona jest dla interfejsu Split. Ma dwie strony z metalizacją otworów. Cztery układy logiki (74LS00, 74LS139, 74LS158, 74LS244) są zamontowane od spodu, dwa złącza ISA-8 są montowane od góry.

Pliki do pobrania
- zxisa005.zip 66.4kB (2006-04-03 22:46)
- Projekt płytki przeznaczony do produkcji. Pliki danych Eagle oraz Tango PCB.
- zxisa.txt 5.8kB (2006-03-31 13:12)
- [en] Opis techniczny interfejsu.
- modem.zip 10.9kB (1999-07-06 17:04)
- [pl] Opis podłączenia interfejsu szeregowego ISA albo UART 8250 do ZX Spectrum.
Linki do innych stron
Zobacz również
- ZX.SPLIT : Sinclair bus splitter
- Pozwala budować rozgałęźniki szyny oraz interfejsy przelotowe.
- YAMOD.FDC765A
- Interfejs FDC 765A, zgodny z ZX Spectrum +3 oraz YABUS.ZXISA.
- DSKHNDLR
- Sterowniki niskiego poziomu do napędów dyskietowych i dysków twardych dla Z80.
| Apple
Atari
Commodore
CPC
PC
Sam Coupé
YAMOD
Timex
ZX81
ZX Spectrum
| |