PSG (Programable Sound Generator) AY-3-8910. -------------------------------------------- 0A0h - Adres port. 0A1h - Data Write port. 0A2h - Data read port. De PSG heeft 16 registers #00 tot #0F deze zijn voor het instellen van de juiste geluid instellingen, ook de Joystick en de Cassette input worden door de PSG geregeld en zijn ook op de registers af telezen. Registers #00 en #01: 7 6 5 4 3 2 1 0 X-------------------------------Y V Channel A frequency LSB V #00 T---U---U---U---U---U---U---U---S V X V X V X V X VCh. A Freq. MSBV #01 Z---Q---Q---Q---Q---Q---Q---Q---[ Met deze twee registers kan de toon hoogte van het huidige kanaal ingestelt worden. Voor kanaal B Zijn dit de registers #02, #03. Voor kanaal C Zijn dit #04, #05. Register #06: 7 6 5 4 3 2 1 0 X---R---R---R---R---R---R---R---Y V X V X V X V Noice-Frequency V #06 Z---Q---Q---Q---Q---Q---Q---Q---[ Bit 4 tot 0 voor het instellen van de ruis-frequency, deze geld voor elk kanaal waarbij het "Noice" bit 0 is. Inhoud R6 Noice-frequency Inhoud R6 Noice-frequency 1 111860 Hz 17 6580 Hz 2 55930 Hz 18 6214 Hz 3 37286 Hz 19 5887 Hz 4 27965 Hz 20 5593 Hz 5 22372 Hz 21 5326 Hz 6 18643 Hz 22 5084 Hz 7 15980 Hz 23 4863 Hz 8 13982 Hz 24 4660 Hz 9 12428 Hz 25 4474 Hz 10 11186 Hz 26 4302 Hz 11 10169 Hz 27 4142 Hz 12 9321 Hz 28 3995 Hz 13 8604 Hz 29 3857 Hz 14 7990 Hz 30 3728 Hz 15 7457 Hz 31 3608 Hz 16 6991 Hz Register #07: 7 6 5 4 3 2 1 0 X---R---R---R---R---R---R---R---Y VBdrVAdrVCNCVBNCVANCVCTNVBTNVATNV #07 Z---Q---Q---Q---Q---Q---Q---Q---[ ANC/BNC/CNC: Noice on channel A/B/C (Ruis) ATN/BTN/CTN: Tone on channel A/B/C (Toon) Dit register "Enables" of "Disables" de geluids en ruis kanalen A to C: 0=Enable, 1=Disable. Voor Port A en Port B (Bdr/Adr) kan de richting (Direction) worden bepaald: 0=Input, 1=Output. Register moet altijd 10xxxxxx bevatten anders is er kans op beschadinging van de PSG, als er bepaalde apparaten aan de in of outputs van de PSG hangen. Register #08: 7 6 5 4 3 2 1 0 X---R---R---R---R---------------Y V X V X V X VMODVCH. A AmplitudeV #08 Z---Q---Q---Q---Q---Q---Q---Q---[ De 4 Amplitude bit bepaalen het volume van kanaal A ( 0 -15 ). De MODE bit bepaald of de amplitude gelijk blijft of ge moduleerd wordt. 0=Fixed, 1=Modulated. Als gekozen wordt voor modelatie dan zal dit gebeuren volgens het "Envelope Shape" tabel ( #13), de snelheid van de modelatie staat in de "Envelope Frequency" tabellen ( #11, #12) zal het volume worden gemoduleerd. Voor de kanalen B en C zullen voor de Amplitude de registers #9 en #10 worden gebruikt. Register #11 en #12: 7 6 5 4 3 2 1 0 X-------------------------------Y V Envelope Frequency LSB V #11 T---Q---Q---Q---Q---Q---Q---Q---S V Envelope Frequency MSB V #12 Z---Q---Q---Q---Q---Q---Q---Q---[ De Envelope Frequency is de Frequentie waar op de Modulatie vorm (te selecteren met Register #13) afgespeeld wordt bepaalt. De registers #11 en #12 vormen samen een 16-bits getal van 0 tot 65535, Register #11 bevan het Laagst Significante Byte en register #12 het Meest Sigú nificante Byte. Een hoge frequency wordt verkregen door laage inhoud van registers #11 en #12. Een Lage frequency door een hoge inhoud van deze registers. De Frequency by 1 is 6991 Hz, van 65535 is deze 0.11 Hz. Register #13: 7 6 5 4 3 2 1 0 X---R---R---R---R---------------Y V X V X V X V X VEnvelope Shape V #13 Z---Q---Q---Q---Q---Q---Q---Q---[ Dit Register bevat de code van de Modelatie vorm. Een code van 0-15, Sommige Code's bevatten de zelfde vormen. S0,S1,S2,S3,S9 S4-S7,S15 S8 | |\ | /| | |\ |\ |\ |\ |____| \______ |____/ |_____ |____| \| \| \| S10 S11 S12 _____ | |\ /\ / | |\ | | /| /| /| / |____| \/ \/ |____| \| |____/ |/ |/ |/ S13 S14 ____ | /\ /\ | / |____/ \/ \/ |_______/ Register #14: 7 6 5 4 3 2 1 0 X---R---R---R---R---R---R---R---Y VCsIVKbdVTrBVTrAVRigVLefVDowVUp V #14 Z---Q---Q---Q---Q---Q---Q---Q---[ Dit register is voor het lezen van PSG Port A. De zes Joystick bits geven de richting en de vuurknoppen aan. Voor deze bits gelt: 0=Ingeú drukt, 1=Niet ingedrukt. De Keyboard Mode bit (Kbd) wordt niet geú bruikt op Europesche machines, op Japansche computers is dit verbonden met een Jumper om het Character set te bepalen. De Cassette Input (Csi) word Gebruikt voor het lezen van een signaal van de Cassette EAR output. Register #15: 7 6 5 4 3 2 1 0 X---R---R---R---R---R---R---R---Y VKLdVJSlVPl2VPl1V 1 V 1 V 1 V 1 V #14 Z---Q---Q---Q---Q---Q---Q---Q---[ Dit register is voor het Schrijven naar PSG Port B. De vier laagste bits zijn verbonden via de TTL open-collector buffers met pin 6 en 7 van elk van de twee Joystick connectors. De twee Pulse bits (Pl2/Pl1) worden gebruikt om een korte positive puls te genereren naar een Paddle op Joystick-port 1 of 2. Elke paddle bevat een monostable timer die de lengte van de puls neemt. Pas als de timer is geTriggered kan de positie van de paddle bepaalt worden door te tellen tot de Monoú stable is uit getelt. De Joystick select bit bepaalt welke Joystick poort verbonden is met de PSG: 0=Connector 1, 1=Connector 2. De Kana LED wordt niet gebruikt op europesche machines, op Japansche machines wordt het gebruikt om een Keyboard mode indicator aan te sturen. Voorbeeld voor het instellen en lezen van PSG-register's: We proberen register #08 in testellen (Amplitude van kanaal A) in machine taal zal dit zijn: SETPSG: LD A,B ; Zet Register nummer in A OUT (0A0h),A ; Register naar PSG port 0A0h LD A,C ; Zet Data in A OUT (0A1h),A ; Data naar PSG port 0A1h RET ; Spring terug ; Waarbij Z80 register -B- het nummer van het PSG register moet be- ; vatten en Z80 register -C- de data Dus: ---- ---- LD B,08h ; Register #08 LD C,00001110b ; Amplitude (binair ) = 14 CALL SETPSG ; Start Routine "SETPSG" ---- ---- Voor het lezen kunnen we het volgende proberen: READPSG: OUT (0A0h),A ; Register naar PSG port 0A0h IN (0A2h),A ; Lees Data van PSG port 0A2h RET ; Spring terug ; Waarbij in Z80 register -A- het telezen register nummer moet gezet ; worden, naar afloop zal de routine in Z80 register -A- de inhoud ; van het gevraagde register zetten. Dus: ---- ---- LD A,08h ; Register #08 CALL READPSG ; Start Routine "READPSG" ----- -----