GENERATOR PRZEBIEGÓW IMPULSOWYCHWyjście monitorowe sygnału AUDIORys. 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ówRys. 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 KONIECWyłą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
|