Udało mi się złożyć prosty komputerek z MOS6502AD. W tej chwili konfiguracja wygląda następująco:
- 32kB RAM, adresowany bezpośrednio (pierwsza połowa przestrzeni adresowej).
- 16 kB pamięci EPROM (ostatnia ćwiartka przestrzeni adresowej)
- dekoder adresów na układach TTL-LS
- szyna adresowa buforowana przez dwa układy 74LS245
- port równoległy 8255 Poza tym na płytce znajdują się na razie nie obsadzone podstawki pod:
- dodatkowy chip pamięci RAM, dostępny jako cztery banki po 8kB
- port wyjściowy na 74LS373 do sterowania powyższym
- timer 8253 oraz UART 8251
Sygnały !WR oraz !RD na potrzeby pamięci oraz intelowskich peryferiów są generowane przez następujący układ:
formatting link
Podczas wstępnego rozruchu nie obyło się bez wpadki - okazało się, że odwrotnie podłączyłem zasilanie do 8255. Popłynął za dużo prąd - nie na tyle duży, żeby przepalić 3A bezpiecnzik, ale drucik wewnątrz się lekko rozżarzył. Na wszelki wypadek po tym incydencie wymieniłem 8255 i CPU na inne egzemplarze.
Na chwilę obecną układ przeszedł test "pracy na luzie" - podciągnąłem linie danych za pomocą rezystorów, układając wartość 0xEA (NOP). Szyna adresowa w tej sytuacji zachowuje się prawidłowo - na kolejnych liniach pojawiają się impulsy o dwa razy większej długości niż na linii poprzedniej. Dekoder adresów w tej sytuacji także zdaje się działać prawidłowo, generując impulsy stanu niskiego we właściwej sekwencji.
Natomiast za nic nie udało mi się uruchomić programu. W EPROM-ie siedzi w tej chwili coś takiego:
CTRLREG EQU $9000 PA_8255 EQU $9200 PB_8255 EQU $9201 PC_8255 EQU $9202 CONF_8255 EQU $9203
.ORG $C000 INIT: LDX #$FF TXS LDA #$80 STA CONF_8255 ;tryb 0, wszystkie porty wyjsciowe LOOP: LDA #$01 STA PA_8255 JSR DELAY LDA #$00 STA PA_8255 JSR DELAY JMP LOOP DELAY: LDY #$FF DELAY_LOOP1: LDX #$FF DELAY_LOOP2: DEX BNE DELAY_LOOP2 DEY BNE DELAY_LOOP1 RTS IRQ: RTI
NMI: RTI .ORG $FFFA DW NMI DW INIT DW IRQ
Program powinien "machać" stanem pinu PA0 układu 8255. Niestety, nie robi tego. Oscyloskop pokazuje aktywność na liniach adresowych i danych, a także na !WR !RD. Niestety linia CS sterująca 8255 jest nieaktywna, podobnie jak wszystkie linie z obszaru I/O. Podczas pracy "na luzie" linie te regularnie przełączały się na moment w stan niski.
Wstępnie sprawdziłem połączenia, przedzwaniając połączenia multimetrem. Sprawdziłem też inny EPROM.
Ktoś ma jakiś pomysł? Może błąd tkwi w moim kodzie?