GENERATOR PRZEBIEGÓW IMPULSOWYCHWyjście monitorowe sygnału AUDIO![]() Rys. 1 Układ wyjściowy fonii w ATARI
Podstawową funkcją tego wyjścia jest dostarczenie sygnału dźwięku do monitora. Można je wykorzystywać do rozmaitych innych celów. Układ wyjścia toru fonii znajdujący się w komputerze pokazano na rys. 1. Najłatwiej jest sterować częstotliwością i amplitudą sygnału z poziomu Atari Basic, lub Turbo Basic XL - instrukcje "SOUND ..." i "DSOUND ...". Przy programowym ustawieniu maximum amplitudy i minimum zniekształceń (np. SOUND 0,100,10,15) otrzymuje się przebieg zbliżony do prostokątnego o międzyszczytowęj wartości napięcia ok. 0,2V (rys. 8). Zastosowane wewnątrz komputera sprzężenie pojemnościowe powoduje wyraźne różniczkowanie przebiegów o częstotliwościach poniżej 1 kHz. Przy częstotliwościach ponadakustycznych zaczyna odgrywać rolę ograniczone pasmo przenoszenia i sygnał zaczyna mieć kształt bardziej zbliżony do sinusoidalnego, jednak następuje wyraźny spadek amplitudy - do ok. 0,1V przy 50kHz i ok. 0,02V przy 100kHz. Można oczywiście sterować układ POKEY generujący sygnał akustyczny z poziomu języka maszynowego, jednak kształt przebiegów na wyjściu komputera będzie taki, jak opisano powyżej. ![]() Rys. 2 Przebiegi na wyjściu monitorowym (AUDIO) Generowanie przebiegów na gniazdach joysticków![]() Rys. 3 Układ połączeń wewnętrznych Układ taki nie sprzyja dobremu przenoszeniu na wyjście szybkich przebiegów impulsowych. Znacznie poprawia się ich kształt przez połączenie wyjścia rezystorem ok. 2,2 kilooma do napięcia +5V (dostępne na gnieździe joysticka). Przy takim spolaryzowaniu przenoszone są bez większych zniekształceń impulsy o długości powyżej ok. 10 mikrosekund. Układ PIA może generować stany logiczne i ciągi impulsów dzięki sterowaniu bezpośrednio przez procesor. Po przeprogramowaniu danej linii PIA jako wyjścia, utrzymuje ona stan logiczny, jaki miał odpowiedni bit bajtu dostarczonego ostatnio przez procesor. Dostarczając na adres PA ($D300) kolejno odpowiednie bajty, można generować dowolne sekwencje stanów logicznych na poszczególnych liniach. Wszystko byłoby dalej proste, gdyby nie przerwania generowane w systemie przez rozmaite źródła. Wytrącają one procesor z rytmu i jego praca jest zbyt nieregularna jak na generację szybkich przebiegów okresowych. Radą na to jest zablokowanie przerwań: rozkazem SEI dla procesora oraz w rejestrach DMACTL ($D400) i NMIEN ($D40E). Nic nie zastąpi przykładu, oto zatem przykładowy przebieg prostokątny (rys. 4) oraz program umożliwiający jego wygenerowanie. Przebieg pojawia się na linii PAO. Pozostałe są nadal ustawione jako wejścia. ![]() Rys. 4 Przebieg impulsowy na wyjściu PA0
************************************
* GENERACJA IMPULSÓW PROSTOKĄTNYCH *
* (PRZEZ PORT JOYSTICKA) *
* Witold Prokopowicz *
* 1991 *
************************************
OPT %10101
CONSOL EQU $D01F
PA EQU $D300
PAC EQU $D302
ORG $600
LDA #$3 PROGRAMOWANIE PA
STA PAC
LDA #01
STA PA BIT 0 JAKO WYJSCIE
LDA #$34 KONIEC PROGRAMOWANIA
STA PAC
LDA #$01 STAN "l" NA WYJSCIE
STA PA
LDA #1
JSR $FDFC "BEEP" I CZEKAM NA
* NACISN. KALWISZA
LDY #0 BLOKADA PRZERWAN
STY $D40E
STY $D400 I DMA
SEI
* W "Y" JEST ZERO
* W "A" JEST JEDYNKA
LOOP STA PA "l" NA WYJSCIE
JSR DEL1M
JSR ICO SPR. PRZYCISK "START"
STY PA "0" NA WYJSCIE
JSR DEL05M
STA PA
JSR DEL01M
STY PA
JSR DEL01M
JMP LOOP
DEL1M JSR DEL05M 1 milisekunda
DEL05M LDX #174 0,5 milisekundy
DELP DEX
BNE DELP
RTS
DEL01M LDX #29 O,l milisekundy
DELSP DEX
BNE DELSP
DEL RTS
ICO BIT CONSOL NACISNIECIE "START"
BEQ OUT
RTS
OUT LDA #$30 PROGRAMOWANIE PA
STA PAC
LDA #00
STA PA WSZYSTKIE WEJSCIA
LDA #$34
STA PAC
LDA #$40 ODBLOKOWANIE PRZERWAN
STA $D40E
LDA #3
STA $D400 ORAZ DMA
CLI
PLA
PLA
BRK
END KONIEC
Wyłączenie w Atari przerwań i DMA powoduje m. in. zanik obrazu i brak reakcji na klawiaturę. Z tego też względu w programie umieszczono procedurę testowania przycisku "START". Jego naciśnięcie spowoduje przerwanie generacji i wyjście z programu po odtworzeniu stanu przerwań oraz przeprogramowaniu PIA. Bez tego przerwać program można by tylko przyciskiem "RESET", co nie wydaje się szczególnie eleganckie. Trzeba jednak pamiętać, że procedura sprawdzania stanu konsoli zabiera kilka mikrosekund i nie można tego faktu pominąć przy generowaniu bardzo szybkich przebiegów. Procedurę w języku maszynowym można łatwo przystosować do współpracy z Basicem (PLA na początku i zamiana BRK na RTS). Przytoczony listing programu przygotowano za pomocą Quick Assemblera. Z moich doświadczeń wynika, że QA dobrze się nadaje do takich eksperymentów - jest możliwość natychmiastowego testowania programu, a assemblacja jest szybka."Primum non nocere"LITERATURA:2. Prokopowicz W., Sobolewski G. "Chronokomparator do sprawdzania chodu zegarków" - Radioelektronik nr 3 1991 3. m&a, J.B. Wiśniewski "Centronics dla ATARI XE/XL"; Komputer, nr 9 1988 4. Ian Chadwick, "Mapping the Atari", COMPUTE Books Publication 5. Zientara W. "Poradnik Programisty Atari" wyd. SOETO 1989 Witold Prokopowicz
|