;************************************** ; ; INTERRUPTGESTEUERTE TONAUSGABE * ; ;************************************** .z80 .phase 6000H ;TOKEN: ZUR EINFACHEN PROGRAMMIERUNG ;DES SOUND WERDEN TOKEN BENUTZT, DENEN ;BIS ZU DREI PARAMETER FOLGEN KOENNEN. ;DAS SOUNDPROGRAMM ARBEITET DIE TOKEN ;INTERPRETATIV AB. TON2 EQU 00 ;2 TOENE AUS CTC0, CTC1 GOTO EQU 0FFH ;UNBEDINGTER SPRUNG GOSUB EQU 0FEH ;UNTERPROGRAMMAUFRUF RETURN EQU 0FDH END EQU 0FCH ;SCHLEIFENENDE BEI ZAEHLSCHLEIFEN TON1 EQU 0FBH ;EIN TON AUS CTC0, CTC1 IST WAEHREND DIESER ZEIT INAKTIV PAUSE1 EQU 0FAH PAUSE2 EQU 0F9H PAUSE8 EQU 0F8H PAUSE16 EQU 0F7H PAUSE32 EQU 0F6H ;AUSGABE DES TIEFSTEN MOEGLICHEN TONES AUS CTC0 ZUR ZEIT- ;MESSUNG, WAEHREND LAUTSTAERKE AUF NULL ;GESTELLT IST. CTC1 INAKTIV. ;IO ADRESSEN CTC0 EQU 8CH CTC1 EQU 8DH PIO EQU 89H ;EINSTIEG IN DIE INTERRUPTGESTEUERTE ;TONAUSGABE DEFW 7F7FH DEFM 'TON' DEFB 1 TONST: PUSH AF PUSH BC PUSH DE PUSH HL LD HL,TABANF ;ANFANG DER ZU INTERPRETIERENDEN TOKEN LD (TPOS),HL ;MERKER FUER AKTUELLE POSITION LD HL,STACKANF ;DER INTERPRETER BENUTZT EINEN EIGENEN STACK LD (TSTACK),HL ;MERKER FUER AKTUELLE POSITION IM INTERPRETERSTACK LD HL,0 LD (PERIOD),HL ;MERKER FUER ABSOLVIERTE HALBSCHWINGUNGEN ;DIE FOLGENDEN AKTIVITAETEN DUERFEN ;NUR EINMALIG BEIM ERSTEN AUFRUF VON TON ;ERFOLGEN. DESHALB WERDEN SIE BEIM ;1. AUFRUF AUSGEFUEHRT UND DABEI VERRIEGELT EINM: LD HL,LAUTST LD A,0C3H ;JUMP LD (EINM),A LD HL,(0B7B2H) ;UMLEGEN DER TAB LD DE,NCTAB ;FUER STEUERKODES LD BC,3FH ;ZUM TOLERIEREN DES LD (0B7B2H),DE ;ERRORBEEPS LDIR LD HL,(BEEP) ;EINTRAGEN DER UP-ADRESSE LD (BEEP1),HL ;IN NEUES BEEP-PROGRAMM LD HL,NBEEP ;EINTRAGEN DES NEUEN BEEP- LD (BEEP),HL ;PROGRAMMES IN TAB LD HL,NRET ;UND VERBIETEN DES LD (CLICK),HL ;EINSCHALTENS DES LD HL,INTROUT ;TASTATURKLICKES LD (01E8H),HL ;EINTRAGEN DER NEUEN INTERRUPTADRESSE ;ES FOLGT EIN AENDERN DES UP'S TON (35H) ;DABEI WIRD DAVON AUSGEGANGEN, DASS SICH ;SUTAB BEREITS IM RAM BEFINDET Z.B. NACH ;FLOAD BASEX. IST DAS NICHT DER FALL, ;MUSS HIER EIN VERSCHIEBEN DER SUTAB ERFOLGEN. LD HL,(0B7B0H) ;ADRESSE VON SUTAB LD DE,06AH ;2*35H,(PROGNR) LD BC,NTON ADD HL,DE LD (ITON),HL LD E,(HL) LD (HL),C INC HL LD D,(HL) LD (HL),B LD (NTON1),DE JR LAUTST ;ES FOLGEN EINIGE NEUE PROGRAMME DIE ;AN STELLE DER BETRIEBSSYSTEMROUTINEN ;BENUTZT WERDEN SOUND (UP NR 35H) NTON: DEFB 0CDH ;CALL NTON1: DEFW 00 ;HIER WIRD ADRESSE DER ALTEN ;SOUNDROUTINE EINGETRAGEN NTON2: NOP ;HIER WIRD SO LANGE RET EINGE ;TRAGEN, BIS SOUND DURCH CTC INTERRUPT ;BEENDET WIRD (FUER GANZE BUENDEL VON ;SOUNDANWEISUNGEN, DIE SICH GEGENSEITIG ;UNTERBRECHEN) UMLEGEN DER ;INTERRUPTROUTINE FUER CTC2 LD HL,(01ECH) LD (NINT1),HL LD HL,NINT LD (01ECH),HL LD A,0C9H ;RET LD (NTON2),A NRET: RET ;NEUE ROUTINE FUER BEEP NBEEP: DEFB 0CDH ;CALL BEEP1: DEFW 00 PUSH AF PUSH BC PUSH DE PUSH HL JR LAUTST ;DANACH WEITER MIT TONAUSG. ;NEUE INTERRUPTROUTINE FUER CTC2 NINT: CALL EIRETI ;EINSPRUNG NACH PUSH AF ;TON (UNTERPROGRAMM 35H) PUSH BC PUSH DE PUSH HL ;ZURUECKSETZEN DES INTERRUPTVEKTORS FUER CTC2 LD HL,(NINT1) LD (01ECH),HL DEFB 0CDH ;CALL AUFRUF DER ORIGINAL INTERRUPTROUTINE NINT1: DEFW 00 XOR A ;EINTRAGEN VON NOP IN (NTON2) LD (NTON2),A JR LAUTST ;FREIHALTEN DES INTERRUPTS EIRETI: EI RETI ;INTERRUPTROUTINE FUER CTC0 INTROUT: CALL EIRETI TAUS: PUSH AF PUSH BC PUSH DE PUSH HL LD HL,(PERIOD) ;HERUNTERZAEHLEN DER DEC HL ;HALBPERIODEN DER TONAUSGABE LD (PERIOD),HL LD A,H OR L JP NZ,EXIT LAUTST: LD C,PIO ;EINSTELLEN DER LAUTST IN A,(C) ;UEBER PIO AND 0E0H OR LST OUT (C),A INTPRT: LD HL,(TPOS) ;INTERPRETIEREN DES LD A,(HL) ;NAECHSTEN TOKEN OR A JP Z,TPROG ;NORMALE TONAUSG. KANAL 0 U 1 INC A ;FF IST TOKEN FUER JUMP JP Z,JMP INC A ;FE IST DER TOKEN FUER GOSUB JR Z,GOSB INC A ;FD IST DER TOKEN FUER RETURN JR Z,RETUR INC A ;FC IST TOKEN FUER SCHLEIFENENDE JR Z,SEND INC A ;FB IST DER TOKEN FUER TONAUSGABE ;NUR UEBER KANAL 0 DES CTC JP Z,T1 INC A ;FA IST DER TOKEN FUER GANZTON- ;PAUSE ,DIE NACHSTEN TOKEN FUER HALBEN, ;VIERTEL, ACHTEL, SECHZEHNTEL UMD ZWEI- ;UNDDREISSIGSTEL TON JP Z,PAUS1 INC A JP Z,PAUS2 INC A JP Z,PAUS4 INC A JP Z,PAUS8 INC A JP Z,PAUS16 INC A JP Z,PAUS32 ;ALLE ANDEREN WERTE WERDEN ALS SCHLEI- ;FENANFANG UND GLEICHZEITIG ALS ANZAHL ;DER ZYKLEN FUER DIESE SCHLEIFE GEWER- ;TET LOOP: LD A,(HL) ;EINTRAGEN DER SCHLEI- INC HL ;FENANFANGSADRESSE UND DER ZYK- EX DE,HL ;LENZAHL IN STACK LD HL,(TSTACK) LD (HL),E INC HL LD (HL),D INC HL LD (HL),A INC HL DI LD (TSTACK),HL ;NEUE POS IM STACK EX DE,HL LD (TPOS),HL ;NAECHSTER TOKEN EI JR INTPRT SEND: INC HL ;SCHLEIFENENDE EX DE,HL LD HL,(TSTACK) ;IST SCHLEIFENANZ.=0? DEC HL DEC (HL) JR Z,SEND0 ;DANN ZUM NAECHSTEN TOKEN DEC HL ;ANSONSTEN ZUM SCHLEIFENANF. LD D,(HL) DEC HL LD E,(HL) DI JR SEND1 SEND0: DEC HL DEC HL DI LD (TSTACK),HL ;STACKPOS. ERNIEDRIGEN SEND1: EX DE,HL LD (TPOS),HL EI JR INTPRT RETUR: LD HL,(TSTACK) ;INTERPRETIERE DEC HL ;TOKEN, DER AUF RUECKKEHRADRESSE LD D,(HL) ;IM STACK STEHT DEC HL LD E,(HL) DI LD (TSTACK),HL ;STACKPOS. ERNIEDRIGEN EX DE,HL LD (TPOS),HL EI JR INTPRT GOSB: INC HL LD C,(HL) ;ADR FUER UNTERPR. AUF BC INC HL LD B,(HL) INC HL ;RETURNADRESSE EX DE,HL LD HL,(TSTACK) ;EINTRAGEN DERS. IN LD (HL),E ;STACK INC HL LD (HL),D INC HL DI LD (TSTACK),HL ;NEUE POS IM STACK LD (TPOS),BC ;NAECHSTER TOKEN (IM UP) EI JP INTPRT JMP: INC HL ;HOLT NEUE ADR. FUER NAECHST LD E,(HL) ;TOKEN INC HL LD D,(HL) EX DE,HL LD (TPOS),HL JP INTPRT T1: INC HL LD C,CTC1 ;SPERREN CTC1 LD A,3 OUT (C),A LD C,CTC0 ;TON NUR UEBER CTC0 LD A,(HL) OR 80H JR TX PAUS1: LD E,43 JR PAUS PAUS2: LD E,21 JR PAUS PAUS4: LD E,11 JR PAUS PAUS8: LD E,5 JR PAUS PAUS16: LD E,3 JR PAUS PAUS32: LD E,1 PAUS: LD C,PIO ;LAUTSTAERKE AUF 0 IN A,(C) AND 0E0H OUT (C),A LD C,CTC1 ;CTC1 BLOCKIEREN LD A,3 OUT (C),A LD C,CTC0 ;GROESSTMOEGL. ZEIT FUER CTC0 LD A,0A5H OUT (C),A LD A,0FEH OUT (C),A LD D,0 JR TY TPROG: INC HL LD C,CTC0 ;PROG. VON CTC0 LD A,(HL) ;STEUERWORT OR 80H ;ERLAUBE INTERRUPT OUT (C),A INC HL LD A,(HL) ;ZEITKONST. OUT (C),A LD C,CTC1 INC HL LD A,(HL) ;STEUERWORT TX: OUT (C),A INC HL LD A,(HL) ;ZEITKONST OUT (C),A INC HL LD E,(HL) ;ANZAHL DER HALBPERIODEN INC HL LD D,(HL) TY: LD (PERIOD),DE INC HL LD (TPOS),HL ;POS DES NAECHSTEN TOKEN EXIT: POP HL ;AUSGANG, WIEDEsRHERSTELLEN POP DE ;DER REGISTER POP BC POP AF RET ;BEREICH FUER DIE SYSTEMVARIABLEN TPOS: DEFW 00 ;POSITION IN TONTAB. TSTACK: DEFW 00 ;POSITION IM TONSTACK PERIOD: DEFW 00 ;ANZAHL DER NOCH ZU ABSOLVIERENDEN ;HALBPERIODEN BIS NAECHSTE ;TON ITON: DEFW 00 ;MERKER FUER TONROUT 35H STACKANF: DEFW 00 defs 40h ;DAMIT IST EINE SCHACHTELUNGS- ;TIEFE VON 11 MOEGLICH ;ES FOLGT EIN FREIER BEREICH FUER DIE ;NEUE CTAB NCTAB: DEFW 00 defs 12 BEEP: DEFW 00 defs 24 CLICK: DEFW 00 defs 22 ;ES FOLGT DIE TONTABELLE ;AUFBAU: ;1.BYTE=TOKEN (EIN BYTE LAENGE) ;TON2: 00 TONAUSGABE KANAL 0 UND 1 ; DANACH 6 BYTES ; ERSTES WORT FUER CTC0 ; ZWEITES WORT FUER CTC1 ; DRITTES WORT ANZAHL DER HALB- ; PERIODEN FUER TON 0 ;JUMP: FF GOTO ES FOLGT ADRESSE ZIEL ;GOSUB: FE GOSUB ES FOLGT DIE ADRESSE ; DES ANZUSPR. BEREICHES ;RETURN:FD RETURN, KEIN PARAMETER ;END: FC SCHLEIFENENDE, KEIN PARAMETER ;TON1: FB TONAUSGABE NUR UEBER CTC0 ; ES FOLGEN VIER BYTE ; ERSTES WORT FUER CTC0 ; ZWEITES WORT ANZAHL HALB- ; PERIODEN ;PAUSE1 BIS PAUSE32 GANZER BIS 1/32. ; TON PAUSE, KEIN PARAMETER ;JEDER ANDERE WERT: SCHLEIFENANFANG MIT ; DIESER ANZAHL WIEDERHOLUNGEN ;LAUTSTAERKE LST EQU 1BH ;TABELLE DER TOENE ;DAS ERSTE BYTE DES WORTES IST DAS ;STEUERBYTE FUER DIE CTC, DER ZWEITE ;DIE ZEITKONSTANTE ; CM2 EQU 61253 CISM2 EQU 57925 DM2 EQU 54597 DISM2 EQU 51525 EM2 EQU 48709 FM2 EQU 45893 FISM2 EQU 43333 GM2 EQU 41029 GISM2 EQU 38725 AM2 EQU 36421 AISM2 EQU 34373 HM2 EQU 32581 CM1 EQU 30789 CISM1 EQU 28997 DM1 EQU 27461 DISM1 EQU 5669 EM1 EQU 24389 FM1 EQU 23109 FISM1 EQU 21829 GM1 EQU 20549 GISM1 EQU 19269 AM1 EQU 18245 AISM1 EQU 17221 HM1 EQU 56581 C0 EQU 53509 CIS0 EQU 50437 D0 EQU 47621 DIS0 EQU 45061 E0 EQU 42501 F0 EQU 40197 FIS0 EQU 37893 G0 EQU 10309 GIS0 EQU 33797 A0 EQU 31749 AIS0 EQU 29957 H0 EQU 28421 C1 EQU 7749 CIS1 EQU 25349 D1 EQU 23813 DIS1 EQU 22533 E1 EQU 21253 F1 EQU 19973 FIS1 EQU 18949 G1 EQU 5189 GIS1 EQU 16901 A1 EQU 15877 AIS1 EQU 15109 H1 EQU 14085 C2 EQU 3909 CIS2 EQU 12549 D2 EQU 12037 DIS2 EQU 11269 E2 EQU 10501 F2 EQU 9989 FIS2 EQU 9477 G2 EQU 2629 GIS2 EQU 8453 A2 EQU 7941 AIS2 EQU 7429 H2 EQU 2117 C3 EQU 6661 CIS3 EQU 1861 D3 EQU 5893 DIS3 EQU 5637 E3 EQU 1605 F3 EQU 5125 FIS3 EQU 4613 G3 EQU 1349 GIS3 EQU 4101 A3 EQU 4101 AIS3 EQU 3845 H3 EQU 1093 ; ;TONLAENGEN ; LCM1 EQU 16 LCISM1 EQU 17 LDM1 EQU 18 LDISM1 EQU 19 LEM1 EQU 20 LFM1 EQU 21 LFISM1 EQU 23 LGM1 EQU 24 LGISM1 EQU 26 LAM1 EQU 27 LAISM1 EQU 29 LHM1 EQU 31 LC0 EQU 32 LCIS0 EQU 34 LD0 EQU 37 LDIS0 EQU 39 LE0 EQU 41 LF0 EQU 43 LFIS0 EQU 46 LG0 EQU 49 LGIS0 EQU 52 LA0 EQU 55 LAIS0 EQU 58 LH0 EQU 62 LC1 EQU 65 LCIS1 EQU 69 LD1 EQU 74 LDIS1 EQU 78 LE1 EQU 82 LF1 EQU 87 LFIS1 EQU 92 LG1 EQU 98 LGIS1 EQU 104 LA1 EQU 110 LAIS1 EQU 116 LH1 EQU 124 LC2 EQU 131 LCIS2 EQU 138 LD2 EQU 147 LDIS2 EQU 156 LE2 EQU 165 LF2 EQU 174 LFIS2 EQU 185 LG2 EQU 196 LGIS2 EQU 208 LA2 EQU 220 LAIS2 EQU 233 LH2 EQU 247 LC3 EQU 262 LCIS3 EQU 277 LD3 EQU 294 LDIS3 EQU 311 LE3 EQU 330 LF3 EQU 349 LFIS3 EQU 370 LG3 EQU 392 LGIS3 EQU 415 LA3 EQU 440 LAIS3 EQU 466 LH3 EQU 494 LC4 EQU 523 LCIS4 EQU 554 LD4 EQU 587 LDIS4 EQU 622 LE4 EQU 659 LF4 EQU 698 LFIS4 EQU 740 LG4 EQU 784 LGIS4 EQU 831 LA4 EQU 880 LAIS4 EQU 932 LH4 EQU 986 LC5 EQU 1046 LCIS5 EQU 1109 LD5 EQU 1175 LDIS5 EQU 1244 LE5 EQU 1318 LF5 EQU 1397 LFIS5 EQU 1480 LG5 EQU 1568 LGIS5 EQU 1661 LA5 EQU 1760 LAIS5 EQU 1865 LH5 EQU 1972 TABANF: DEFB TON2 DEFW GM1 DEFW G0 DEFW LG2 DEFB TON1 DEFW G0 DEFW LG2 DEFB TON2 DEFW G0 DEFW H0 DEFW LG2 DEFB TON2 DEFW G0 DEFW A0 DEFW LG2 DEFB TON2 DEFW G0 DEFW D0 DEFW LG2 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS2 DEFB TON2 DEFW FIS0 DEFW C1 DEFW LFIS2 ;TAKT1 DEFB TON2 DEFW G0 DEFW H0 DEFW LG2 DEFB TON1 DEFW G0 DEFW LG2 DEFB TON2 DEFW G0 DEFW G1 DEFW LG2 DEFB TON2 DEFW H0 DEFW G1 DEFW LH2 DEFB TON2 DEFW A0 DEFW G1 DEFW LA2 DEFB TON2 DEFW D0 DEFW G1 DEFW LD2 DEFB TON2 DEFW D1 DEFW FIS1 DEFW LD3 DEFB TON2 DEFW C1 DEFW FIS1 DEFW LC3 ;TAKT2 DEFB TON2 DEFW H0 DEFW G1 DEFW LH2 DEFB TON2 DEFW H0 DEFW D1 DEFW LH2 DEFB TON2 DEFW G0 DEFW E1 DEFW LG2 DEFB TON2 DEFW G0 DEFW H0 DEFW LG2 DEFB TON2 DEFW G0 DEFW CIS1 DEFW LG2 DEFB TON2 DEFW G0 DEFW A0 DEFW LG2 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS2 DEFB TON1 DEFW FIS0 DEFW LFIS2 ;TAKT 3 DEFB TON2 DEFW E0 DEFW G0 DEFW LE2 DEFB TON2 DEFW E0 DEFW H0 DEFW LE2 DEFB TON2 DEFW CIS0 DEFW A0 DEFW LCIS2 DEFB TON2 DEFW CIS0 DEFW G0 DEFW LCIS2 DEFB TON2 DEFW D0 DEFW FIS0 DEFW LD2 DEFB TON2 DEFW D0 DEFW A0 DEFW LD2 DEFB TON2 DEFW D0 DEFW D1 DEFW LD3 ;TAKT4 DEFB GOSUB DEFW S1 DEFB TON2 DEFW G0 DEFW H0 DEFW LG2 DEFB GOSUB DEFW S2 ;TAKT 5 DEFB TON2 DEFW GM1 DEFW G1 DEFW LG1 DEFB TON1 DEFW G1 DEFW LG3 DEFB TON2 DEFW E0 DEFW G1 DEFW LE2 ;TAKT6 DEFB TON2 DEFW A0 DEFW G1 DEFW LA2 DEFB TON2 DEFW G0 DEFW G1 DEFW LG2 DEFB TON2 DEFW A0 DEFW FIS1 DEFW LA2 DEFB TON2 DEFW H0 DEFW FIS1 DEFW LH2 DEFB TON2 DEFW C1 DEFW FIS1 DEFW LC3 DEFB TON2 DEFW G0 DEFW FIS1 DEFW LG2 DEFB TON2 DEFW A0 DEFW E1 DEFW LA2 DEFB TON2 DEFW E0 DEFW E1 DEFW LE2 ;TAKT 7 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS2 DEFB TON2 DEFW D0 DEFW D1 DEFW LD2 DEFB TON2 DEFW G0 DEFW D1 DEFW LG2 DEFB TON2 DEFW GM1 DEFW D1 DEFW LG1 DEFB TON2 DEFW C0 DEFW C1 DEFW LC3 DEFB TON1 DEFW C1 DEFW LC3 DEFB TON2 DEFW C1 DEFW E1 DEFW LC3 ;TAKT 8 DEFB TON2 DEFW C1 DEFW D1 DEFW LC3 DEFB TON2 DEFW C1 DEFW G0 DEFW LC3 DEFB TON2 DEFW H0 DEFW G1 DEFW LH2 DEFB TON2 DEFW H0 DEFW FIS1 DEFW LH2 DEFB TON2 DEFW C1 DEFW E1 DEFW LC3 DEFB TON2 DEFW C1 DEFW D1 DEFW LC3 DEFB TON1 DEFW C1 DEFW LC3 DEFB TON2 DEFW E0 DEFW C1 DEFW LE2 ;TAKT 9 DEFB TON2 DEFW FIS0 DEFW C1 DEFW LFIS2 DEFB TON2 DEFW D0 DEFW C1 DEFW LD2 DEFB TON2 DEFW G0 DEFW H0 DEFW LG3 DEFB TON2 DEFW G0 DEFW A0 DEFW LG3 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS2 DEFB TON2 DEFW H0 DEFW D1 DEFW LH2 ;TAKT 10 DEFB TON2 DEFW GIS0 DEFW D1 DEFW LGIS2 DEFB TON2 DEFW E0 DEFW D1 DEFW LE2 DEFB TON2 DEFW A0 DEFW C1 DEFW LA3 DEFB TON2 DEFW A0 DEFW H0 DEFW LA3 DEFB TON2 DEFW G0 DEFW H0 DEFW LG2 DEFB TON2 DEFW G0 DEFW E1 DEFW LG2 ;TAKT 11 DEFB TON2 DEFW G0 DEFW CIS1 DEFW LG2 DEFB TON2 DEFW G0 DEFW A0 DEFW LG2 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS3 DEFB TON2 DEFW E0 DEFW D1 DEFW LE2 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS1 DEFB TON2 DEFW G0 DEFW D1 DEFW LG1 DEFB TON2 DEFW A0 DEFW C1 DEFW LA2 DEFB TON2 DEFW G0 DEFW C1 DEFW LG2 ;TAKT 12 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS2 DEFB TON2 DEFW D0 DEFW D1 DEFW LD2 DEFB TON2 DEFW FIS0 DEFW A0 DEFW LFIS2 DEFB TON2 DEFW G0 DEFW H0 DEFW LG2 DEFB TON2 DEFW A0 DEFW C1 DEFW LA2 DEFB TON2 DEFW A0 DEFW E1 DEFW LA2 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS2 DEFB TON2 DEFW FIS0 DEFW C1 DEFW LFIS2 ;TAKT 13 DEFB TON2 DEFW G0 DEFW H0 DEFW LG2 DEFB TON2 DEFW G0 DEFW D1 DEFW LG2 DEFB TON2 DEFW H0 DEFW G1 DEFW LH2 DEFB TON2 DEFW H0 DEFW FIS1 DEFW LH2 DEFB TON2 DEFW C1 DEFW E1 DEFW LC3 DEFB TON2 DEFW H0 DEFW D1 DEFW LH2 DEFB TON2 DEFW A0 DEFW C1 DEFW LA2 DEFB TON2 DEFW G0 DEFW H0 DEFW LG2 ;TAKT 14 DEFB TON2 DEFW FIS0 DEFW A0 DEFW LFIS2 DEFB TON2 DEFW E0 DEFW A0 DEFW LE2 DEFB TON2 DEFW FIS0 DEFW D1 DEFW LFIS2 DEFB TON2 DEFW D0 DEFW D1 DEFW LD2 DEFB GOSUB DEFW S1 ;TAKT 15 DEFB TON2 DEFW E0 DEFW H0 DEFW LE2 DEFB GOSUB DEFW S2 ;TAKT 16 DEFB TON2 DEFW AM1 DEFW G0 DEFW LA1 DEFB TON2 DEFW GM1 DEFW G1 DEFW LG1 DEFB TON2 DEFW GM1 DEFW FIS1 DEFW LG1 DEFB TON2 DEFW C0 DEFW E1 DEFW LC2 DEFB TON2 DEFW HM1 DEFW D1 DEFW LH1 DEFB TON2 DEFW AM1 DEFW C1 DEFW LA1 DEFB TON2 DEFW AM1 DEFW A0 DEFW LA1 ;TAKT 17 DEFB TON2 DEFW D0 DEFW A0 DEFW LD2 DEFB TON2 DEFW C0 DEFW FIS1 DEFW LC2 DEFB TON2 DEFW HM1 DEFW G1 DEFW LH1 DEFB TON2 DEFW C0 DEFW H0 DEFW LC2 DEFB TON2 DEFW D0 DEFW A0 DEFW LD3 DEFB TON2 DEFW D0 DEFW A0 DEFW LD2 DEFB TON2 DEFW D0 DEFW G0 DEFW LD2 ;TAKT 18 DEFB TON2 DEFW GM1 DEFW G0 DEFW LG4 ;TAKT 19, FERTIG DEFB PAUSE1 DEFB GOTO DEFW TABANF S1: DEFB TON2 DEFW E0 DEFW D1 DEFW LE2 DEFB TON2 DEFW D0 DEFW D1 DEFW LD2 DEFB TON2 DEFW E0 DEFW C1 DEFW LE2 DEFB TON2 DEFW FIS0 DEFW C1 DEFW LFIS2 DEFB TON2 DEFW G0 DEFW C1 DEFW LG2 DEFB TON2 DEFW D0 DEFW C1 DEFW LD2 DEFB RETURN S2: DEFB TON2 DEFW HM1 DEFW H0 DEFW LH1 DEFB TON2 DEFW C0 DEFW A0 DEFW LC2 DEFB TON2 DEFW AM1 DEFW A0 DEFW LA1 DEFB TON2 DEFW D0 DEFW A0 DEFW LD2 DEFB TON2 DEFW C0 DEFW A0 DEFW LC2 DEFB TON2 DEFW HM1 DEFW G0 DEFW LH1 DEFB RETURN end