Monitor

basierend auf dem originalen Listing, erweitert um zusätzliche Kommentare und Erläuterungen (Kommando-Ausführung, Tastatur, Step-Funktion, Registeranzeige, Musik etc.)

2K-ROM-Ausführung (0000-07FF)

 AS V1.42 Beta [Bld 157] - Source File Lc80_dokumentiert.asm - Page 1 - 8/2/2022 12:0:48
       1/       0 :                     	CPU	z80
       2/       0 :                     ;*Heading Monitorprogramm LC80.3.0
       3/       0 :                     ;*Page 87
       4/       0 :                     
       5/       0 :                     ;********************************************************
       6/       0 :                     ;*	GUELTIGES LISTING ENTSPRECHEND			*
       7/       0 :                     ;*	BITMUSTER NUMMER 75 UND 76			*
       8/       0 :                     ;*	(BEI 2-ROM-VARIANTE [MARKE ROM_=2])		*
       9/       0 :                     ;********************************************************
      10/       0 :                     ;		VEREINBARUNGEN
      11/       0 :                     ;
      12/       0 : =1H                 ROM_: EQU 1				; EIN ROM -> 1
      13/       0 :                     					; ZWEI ROM -> 2
      14/       0 :                     
      15/       0 :                     ;PIO-PORTS:
      16/       0 :                     
      17/       0 : =0F4H               SEGMENT		EQU 0F4H		;AUSGABE-PORT SEGMENTANSTEUERUNG
      18/       0 : =0F6H               PIO1AC		EQU 0F6H
      19/       0 :                     
      20/       0 : =0F5H               DIGITAP		EQU 0F5H		;B2...B7=DIGITANST. UND TASTENMATRIX
      21/       0 :                     					;B0=TAPE-IN, B1=TAPE-OUT
      22/       0 : =0F7H               PIO1BC		EQU 0F7H
      23/       0 :                     
      24/       0 : =0F8H               PIO2AD		EQU 0F8H		;USER-PORT, FREI VERFUEGBAR
      25/       0 : =0F8H               USERPORT	EQU PIO2AD
      26/       0 : =0FAH               PIO2AC		EQU 0FAH		
      27/       0 :                     
      28/       0 : =0F9H               PIO2BD		EQU 0F9H		;B4...B7=EINGAENGE TASTEN-ABFRAGE
      29/       0 :                     					;B0...B3 FUER USER NUTZBAR
      30/       0 : =0F9H               KEYIN		EQU PIO2BD				
      31/       0 : =0FBH               PIO2BC		EQU 0FBH
      32/       0 :                     
      33/       0 :                     ;CTC-ADRESSEN
      34/       0 : =0ECH               CTC0		EQU 0ECH
      35/       0 : =0EDH               CTC1		EQU 0EDH
      36/       0 : =0EEH               CTC2		EQU 0EEH
      37/       0 : =0EFH               CTC3		EQU 0EFH
      38/       0 :                     
      39/       0 :                     ;VEREINBARUNGEN BEI ERWEITERUNGEN
      40/       0 : =0H                 INTVEK		EQU 00H			;INT-VECT. FUER CTC	lo(INTTAF)
      41/       0 : =23H                HIINT		EQU 23H			;CPU-I-REG		hi(INTTAF)
      42/       0 :                     
      43/       0 :                     
      44/       0 :                     ;*****************************************************
      45/       0 :                     ;
      46/       0 :                     		ORG 0000H
      47/       0 :                     START:
      48/       0 : 06 00               		LD B,00H		;EINSCHALTVERZOEGERUNG
      49/       2 : 10 FE               		DJNZ $
      50/       4 : 18 35               		JR BEGIN
      51/       6 :                     
      52/       8 :                     		ORG 08H
      53/       8 :                     RST1:
      54/       8 : C3 08 23            		JP 2308H
      55/       B :                     
      56/      10 :                     		ORG 10H
      57/      10 :                     RST2:
      58/      10 : C3 10 23            		JP 2310H
      59/      13 :                     
      60/      18 :                     		ORG 18H
      61/      18 :                     RST3:
      62/      18 : C3 18 23            		JP 2318H
      63/      1B :                     
      64/      20 :                     		ORG 20H
      65/      20 :                     RST4:
      66/      20 : C3 20 23            		JP 2320H
      67/      23 :                     
      68/      28 :                     		ORG 28H
      69/      28 :                     RST5:
      70/      28 : C3 28 23            		JP 2328H
      71/      2B :                     
      72/      30 :                     		ORG 30H
      73/      30 :                     RST6:
      74/      30 : C3 30 23            		JP 2330H
      75/      33 :                     
      76/      38 :                     		ORG 38H
      77/      38 :                     RST7:
      78/      38 : C3 38 23            		JP 2338H
      79/      3B :                     
      80/      3B :                     ;-----------------------------------------------------
      81/      3B :                     BEGIN:
      82/      3B : 3A FC 23            		LD A,(INIFLAG)		;RAM LOESCHEN, WENN ERSTEINSCHALTUNG
      83/      3E : FE 80               		CP 80H			;schon init?
      84/      40 : 28 29               		JR Z,NOFF		;Ja, dann zu NOFF
      85/      42 : 21 00 20            		LD HL,2000H		;4K RAM löschen (mit FF füllen)
      86/      45 : 11 01 20            		LD DE,2001H
      87/      48 : 01 FF 0F            		LD BC,0FFFH
      88/      4B : 36 FF               		LD (HL),0FFH
      89/      4D : ED B0               		LDIR
      90/      4F : 01 03 00            		LD BC,RSTLGT		;STANDARD-RST38-PROG. LADEN
      91/      52 : 11 38 23            		LD DE,2338H		;
      92/      55 : 21 11 01            		LD HL,RSTUP
      93/      58 : ED B0               		LDIR
      94/      5A : 01 03 00            		LD BC,NMILGT		;STANDARD-NMI-PROG. LADEN
      95/      5D : 11 40 23            		LD DE,2340H
      96/      60 : 21 EB 00            		LD HL,NMIUP
      97/      63 : 18 04               		JR NMI+3		;weiter nach NMI-Einsprung
      98/      65 :                     
      99/      65 :                     ;-------------------- NMI-FKT. ANSPRINGEN ----------
     100/      66 :                     		ORG 0066H
     101/      66 :                     NMI:
     102/      66 : C3 40 23            		JP 2340H
     103/      69 :                     
     104/      69 :                     ;---------------------------------------------------------
     105/      69 : ED B0               		LDIR
     106/      6B :                     NOFF:
     107/      6B : 31 EA 23            		LD SP,SPINI		;SP AUF ANFANGSWERT
     108/      6E : CD CA 00            		CALL IOINIT
     109/      71 : CD 99 00            		CALL MEMTES
     110/      74 :                     ;--------------------- TEST, OB ERSTEINSCHALTUNG ----
     111/      74 : 3A FC 23            		LD A,(INIFLAG)
     112/      77 : FE 80               		CP 80H
     113/      79 : C4 9C 02            		CALL NZ,INI		;MUSIK U. GRAPHIK, WENN ERSTEINSCH.
     114/      7C :                     ;--------------------- RESETZUSTAND HERSTELLEN ------
     115/      7C : 21 00 20            		LD HL,2000H
     116/      7F : 22 F8 23            		LD (USERPC),HL		;USER-PC AUF ANFANGSWERT
     117/      82 : AF                  		XOR A
     118/      83 : 32 FD 23            		LD (FUFEFLAG),A		;FUNKTIONS- UND FEHLERFLAG LOESCHEN
     119/      86 : DD 21 74 05         		LD IX,DISP1		; "LC80"-TEXT
     120/      8A :                     ;--------------------- TEXT, ADR.- U. TAPE-CODE LOE.
     121/      8A :                     SETSTO:
     122/      8A : AF                  		XOR A
     123/      8B : 32 FB 23            		LD (ATCODE),A		; Funktionscode löschen
     124/      8E :                     
     125/      8E :                     ;--------------------- HAUPTPROGRAMM ----------------
     126/      8E :                     MAIN:
     127/      8E : 31 EA 23            		LD SP,SPINI		;USER-PC AUF ANFANGSWERT
     128/      91 : CD 5A 04            		CALL DAK1		;ANZEIGE UND TASTATURABFRAGE
     129/      94 : CD 1B 01            		CALL KEYEXC		;TASTENBEHANDLUNG
     130/      97 : 18 F5               		JR MAIN
     131/      99 :                     
     132/      99 :                     ;--------------------- SPEICHERTEST ------------------
     133/      99 :                     MEMTES:					;memory test
     134/      99 : 01 04 00            		LD BC,0004H		;1 K RAM
     135/      9C : 21 00 20            		LD HL,2000H		;ADR RAM
     136/      9F :                     RAMSL:					;RAM-Schleife
     137/      9F : CD 52 04            		CALL RAMCHK		;TEST, OB (HL) RAM IST
     138/      A2 : 28 01               		JR Z, RAMOK
     139/      A4 : 76                  		HALT			;HALT bei RAM-Fehler (rote LED)
     140/      A5 :                     RAMOK:
     141/      A5 : 23                  		INC HL
     142/      A6 : 10 F7               		DJNZ RAMSL		;256 Byte
     143/      A8 : 0D                  		DEC C
     144/      A9 : 20 F4               		JR NZ,RAMSL		;4x256 Byte
     145/      AB : AF                  		XOR A			;Prüfsumme := 0
     146/      AC : 21 00 00            		LD HL,0			;ADR 1. ROM/EPROM
     147/      AF : 01 04 00            		LD BC,0004H		;1 K
     148/      B2 : CD C2 00            		CALL ROMSL
     149/      B5 :                     
     150/      B5 : =>TRUE              		IF ROM_=1
     151/      B5 : 21 00 04            		LD HL,0400H		;WEITER 1. ROM
     152/      B8 : [150]               		ENDIF
     153/      B8 :                     
     154/      B8 : =>FALSE             		IF ROM_=2
     155/      B8 :                     		LD HL,0800H		;ADR 2. ROM
     156/      B8 : [154]               		ENDIF
     157/      B8 :                     
     158/      B8 : 01 04 FF            		LD BC,0FF04H		;1K - 1BYTE
     159/      BB : CD C2 00            		CALL ROMSL
     160/      BE : BE                  		CP (HL)			;Vergleich mit letztem Byte (Prüfwert im ROM)
     161/      BF : C8                  		RET Z			;wenn gleich
     162/      C0 : 76                  		HALT			;sonst Fehler (rote LED)
     163/      C1 : C9                  		RET
     164/      C2 :                     
     165/      C2 :                     ROMSL:					; ROM-Schleife
     166/      C2 : 86                  		ADD A,(HL)		;Prüfsumme aufsaldieren
     167/      C3 : 23                  		INC HL
     168/      C4 : 10 FC               		DJNZ ROMSL
     169/      C6 : 0D                  		DEC C
     170/      C7 : 20 F9               		JR NZ,ROMSL
     171/      C9 : C9                  		RET
     172/      CA :                     
     173/      CA :                     ;---------------------- IO-INITIALISIERUNG -----------
     174/      CA :                     IOINIT:					;PIO-INITIALISIERUNG
     175/      CA : 3E CF               		LD A,0CFH		;MODE 3
     176/      CC : D3 F6               		OUT (PIO1AC),A		;SEGMENT-PORT
     177/      CE : 3E FF               		LD A,0FFH
     178/      D0 : D3 F4               		OUT (SEGMENT),A		;ALLE SEGMENTE AUSSCHALTEN
     179/      D2 : 3E 00               		LD A,0			;E-A-DEFINITION
     180/      D4 : D3 F6               		OUT (PIO1AC),A
     181/      D6 :                     
     182/      D6 : 3E CF               		LD A,0CFH
     183/      D8 : D3 F7               		OUT (PIO1BC),A		;DIGIT-AUSG.
     184/      DA :                     					;B2...B7 = D-LSD,D-MSD,A-LSD...A-MSD
     185/      DA : 3E FF               		LD A,0FFH		;ALLE TREIBER SPERREN
     186/      DC : D3 F5               		OUT (DIGITAP),A
     187/      DE : 3E 01               		LD A,1			;B0-EINGANG, B1...B7-AUSGAENGE
     188/      E0 : D3 F7               		OUT (PIO1BC),A
     189/      E2 :                     
     190/      E2 : 3E CF               		LD A,0CFH
     191/      E4 : D3 FB               		OUT (PIO2BC),A		;TASTEN-EINGAENGE B4...B7
     192/      E6 : 3E FF               		LD A,0FFH
     193/      E8 : D3 FB               		OUT (PIO2BC),A
     194/      EA : C9                  		RET
     195/      EB :                     
     196/      EB :                     ;-----------------------------------------------------
     197/      EB :                     NMIUP:					;NMI-UNTERPROGRAMM
     198/      EB : C3 EE 00            		JP NMIUP1
     199/      EE : =3H                 NMILGT 		EQU $-NMIUP		;up length
     200/      EE :                     
     201/      EE :                     NMIUP1:
     202/      EE : F5                  		PUSH AF			;Register sichern
     203/      EF : C5                  		PUSH BC
     204/      F0 : 08                  		EX AF,AF'		;'
     205/      F1 : D9                  		EXX
     206/      F2 : F5                  		PUSH AF
     207/      F3 : C5                  		PUSH BC
     208/      F4 : D5                  		PUSH DE
     209/      F5 : E5                  		PUSH HL
     210/      F6 : D9                  		EXX
     211/      F7 : DD E5               		PUSH IX
     212/      F9 : 06 28               		LD B,40			;ANZEIGEZEIT "INT"
     213/      FB : DD 21 99 05         		LD IX,DISP5		;Text " int "
     214/      FF :                     NMISL:					;NMI-Schleife
     215/      FF : CD 83 04            		CALL DAK2		;Anzeigen
     216/     102 : 10 FB               		DJNZ NMISL
     217/     104 : DD E1               		POP IX
     218/     106 : D9                  		EXX
     219/     107 : E1                  		POP HL			;Register restaurieren
     220/     108 : D1                  		POP DE
     221/     109 : C1                  		POP BC
     222/     10A : F1                  		POP AF
     223/     10B : D9                  		EXX
     224/     10C : 08                  		EX AF,AF'		;'
     225/     10D : C1                  		POP BC
     226/     10E : F1                  		POP AF
     227/     10F : ED 45               		RETN
     228/     111 :                     
     229/     111 :                     ;-----------------------------------------------------
     230/     111 :                     RSTUP:
     231/     111 : C3 14 01            		JP RSTUP1
     232/     114 : =3H                 RSTLGT 		EQU $-RSTUP		; up length
     233/     114 :                     
     234/     114 :                     RSTUP1:
     235/     114 : DD 21 9F 05         		LD IX,DISP6		; "rst 38"
     236/     118 : C3 8A 00            		JP SETSTO		; Spr. zum Hauptprogramm
     237/     11B :                     
     238/     11B :                     ;--------------------- TASTENBEHANDLUNGSPROGRAMM ----
     239/     11B :                     ;			EINTRITT: INTERNER TASTENCODE IN A
     240/     11B :                     
     241/     11B :                     ; "0".."F" 00..0F
     242/     11B :                     ; "+" 10, "-" 11, "EX" 12, "DAT" 14
     243/     11B :                     ; "ADR" 19, "ST" 1E, "LD" 1F
     244/     11B :                     
     245/     11B :                     KEYEXC:
     246/     11B : FE 10               		CP 10H			;TEST, OB FUNKTIONSTASTE
     247/     11D : 38 24               		JR C,KHEX		;SPR., WENN ZIFFERNTASTE
     248/     11F : 21 FD 23            		LD HL,FUFEFLAG		;FLAG "FUNKTIONSTASTE" SETZEN
     249/     122 : CB C6               		SET 0,(HL)
     250/     124 : D6 10               		SUB 10H			;OBERE ZIFFER DES CODES LOESCHEN
     251/     126 : FE 08               		CP 08H			;TEST DER FUNKTIONSGRUPPE
     252/     128 : 21 AB 05            		LD HL,KSUFUN
     253/     12B : DA 87 02            		JP C,BRANCH		; WENN "+","-","EXEC" O. "DATA"-TASTE
     254/     12E :                     
     255/     12E :                     					;ADR- ODER TAPE-TASTEN
     256/     12E : DD 21 F2 23         		LD IX,DATLED		;ADR. FUER DATEN- U. ADR.-ANZEIGE
     257/     132 : D6 08               		SUB 08H
     258/     134 : 21 FB 23            		LD HL,ATCODE
     259/     137 : 77                  		LD (HL),A		;UMGERECHN. CODE HINTERLEGEN
     260/     138 :                     					;1-ADR,6-ST,7-LD
     261/     138 : 21 FA 23            		LD HL,ATFLAG
     262/     13B : 36 00               		LD (HL),0		;FLAG LOESCHEN
     263/     13D : 21 B5 05            		LD HL,KFUN		;Funktionen ADR,ST,LD
     264/     140 : C3 87 02            		JP BRANCH
     265/     143 :                     
     266/     143 :                     ;----------------- AUSWERTUNG ZIFFERNTASTEN ---------
     267/     143 :                     KHEX:
     268/     143 : 4F                  		LD C,A			;TASTATURCODE UMSPEICHERN
     269/     144 : 21 BF 05            		LD HL,HTAB		;Funkionen nach Zifferntaste
     270/     147 :                     BR1:
     271/     147 : 3A FB 23            		LD A,(ATCODE)		;WERT FUER AUSZUF. FUNKTION
     272/     14A : C3 87 02            		JP BRANCH
     273/     14D :                     
     274/     14D :                     ;--------------------- EINTR.PKTE FUER +,-,EXEC,DATA -
     275/     14D :                     ;			(UEBER KSUFUN-TABELLE)
     276/     14D :                     KINC:					; "+"-TASTE
     277/     14D : 21 CB 05            		LD HL,ITAB		;Funktionen nach "+"
     278/     150 : 18 F5               		JR BR1
     279/     152 :                     
     280/     152 :                     KDEC:					; "-"-TASTE
     281/     152 : 21 D7 05            		LD HL,DTAB		;Funktionen nach "-"
     282/     155 : 18 F0               		JR BR1
     283/     157 :                     
     284/     157 :                     KEXEC:					; "EXEC"-TASTE
     285/     157 : 21 E3 05            		LD HL, ETAB		;Funktionen nach "EX"
     286/     15A : 18 EB               		JR BR1
     287/     15C :                     
     288/     15C :                     KDATA:					; "DATA"-TASTE
     289/     15C : CD 27 05            		CALL TESTM		;TEST. OB ADR OD. DAT IN ATCODE
     290/     15F : CD C5 02            		CALL MEMDP2		;ADR U. DAT. ANZ., DAT. GEPUNKTET
     291/     162 : C9                  		RET
     292/     163 :                     
     293/     163 :                     ;--------------------- EINTR.PKTE FUER ADRS U. TAPE -
     294/     163 :                     ;			(UEBER KFUN-TABELLE)
     295/     163 :                     KADRS:					; "ADRS"-TASTE
     296/     163 : CD BC 02            		CALL MEMDP1		;ADR. U. DAT. ANZ., ADR. GEPUNKTET
     297/     166 : C9                  		RET
     298/     167 :                     
     299/     167 :                     KTAPWR:					; "TO TAPE"- ODER "FROM TAPE"-TASTE
     300/     167 : CD E2 02            		CALL STEPDP		;PARAMETER ANZEIGEN
     301/     16A : C9                  		RET
     302/     16B :                     
     303/     16B :                     ;--------------------- EINTR.PKTE FUER ZIFFERNEINGABEN
     304/     16B :                     ;			(UEBER HTAB-TABELLE)
     305/     16B :                     HFIX:					; BEDIENUNGSFEHLER
     306/     16B : C3 96 02            		JP ERRDIS
     307/     16E :                     
     308/     16E :                     HDA:					;ZIFFER ALS DATUM
     309/     16E : 2A F8 23            		LD HL,(USERPC)
     310/     171 : CD 52 04            		CALL RAMCHK		;TEST, OB USER-PC IM RAM-BEREICH
     311/     174 : C2 96 02            		JP NZ,ERRDIS		;SPR., WENN KEIN RAM
     312/     177 : CD A8 02            		CALL PRECL1		;1 BYTE LOE., WENN FUFEFLAG NICHT 0
     313/     17A : 79                  		LD A,C			;EINGEG. ZIFFER
     314/     17B : ED 6F               		RLD			;TETRADE IN RAM SCHIEBEN
     315/     17D : CD C5 02            		CALL MEMDP2		;ANZEIGEN
     316/     180 : C9                  		RET
     317/     181 :                     
     318/     181 :                     HAD:					;ZIFFER ALS ADRESSE
     319/     181 : 21 F8 23            		LD HL,USERPC
     320/     184 : CD B4 02            		CALL PRECL2		;2 BYTE LOE., WENN FUFEFLAG NICHT 0
     321/     187 : 79                  		LD A,C			;EINGEG. ZIFFER
     322/     188 : ED 6F               		RLD			;TETRADEN IN BEIDEN BYTE VERSCHIEBEN
     323/     18A : 23                  		INC HL
     324/     18B : ED 6F               		RLD
     325/     18D : CD BC 02            		CALL MEMDP1		;ANZEIGEN
     326/     190 : C9                  		RET
     327/     191 :                     
     328/     191 :                     HTAPWR:					;ZIFFER ALS PARAMETER FUER BAND
     329/     191 : CD FD 02            		CALL LOCTBF		;ADR FUER PARAMETER BERECHNEN
     330/     194 : CD B4 02            		CALL PRECL2		;2 BYTE LOE., WENN FUFEFLAG NICHT 0
     331/     197 : 79                  		LD A,C			;EINGEG. ZIFFER
     332/     198 : ED 6F               		RLD			;TETRADE IN BEIDEN BYTE VERSCHIEBEN
     333/     19A : 23                  		INC HL
     334/     19B : ED 6F               		RLD
     335/     19D : CD E2 02            		CALL STEPDP		;PARAMETER ANZEIGEN
     336/     1A0 : C9                  		RET
     337/     1A1 :                     
     338/     1A1 :                     ;---------------------- UNTEREINTRITT "+"-TASTE ----
     339/     1A1 :                     ;			(UEBER ITAB)
     340/     1A1 :                     IFIX:					;BEDIENUNGSFEHLER
     341/     1A1 : C3 96 02            		JP ERRDIS
     342/     1A4 :                     
     343/     1A4 :                     ADRADD:					;ANWENDER-PC ERHOEHEN
     344/     1A4 : 2A F8 23            		LD HL,(USERPC)
     345/     1A7 : 23                  		INC HL
     346/     1A8 : 22 F8 23            		LD (USERPC),HL
     347/     1AB : CD C5 02            		CALL MEMDP2		;ANZEIGEN
     348/     1AE : C9                  		RET
     349/     1AF :                     
     350/     1AF :                     TPFUN1:					;BEI "TO TAPE" NAECHSTER PARAMETER
     351/     1AF : 21 FA 23            		LD HL,ATFLAG
     352/     1B2 : 34                  		INC (HL)		;FLAS AUF NEUEN PARAMETER
     353/     1B3 : CD 07 03            		CALL LOCTNA		;PARMETER 'F','S' ODER 'E'
     354/     1B6 : 20 04               		JR NZ,ISTEP		;SPRUNG, WENN RICHTIG
     355/     1B8 : 35                  		DEC (HL)		;FLAG AUF ALTEN WERT
     356/     1B9 : C3 96 02            		JP ERRDIS		;FEHLERANZEIGE
     357/     1BC :                     ISTEP:
     358/     1BC : CD E2 02            		CALL STEPDP		;PARAMETER ANZEIGEN
     359/     1BF : C9                  		RET
     360/     1C0 :                     
     361/     1C0 :                     ;--------------------- UNTEREINTRITT "-"-TASTE -----
     362/     1C0 :                     ;			(UEBER DTAB)
     363/     1C0 :                     DFIX:					;BEDIENUNGSFEHLER
     364/     1C0 : C3 96 02            		JP ERRDIS
     365/     1C3 :                     
     366/     1C3 :                     ADRDEC:					;ANWENDER-PC ERNIEDRIGEN
     367/     1C3 : 2A F8 23            		LD HL,(USERPC)
     368/     1C6 : 2B                  		DEC HL
     369/     1C7 : 22 F8 23            		LD (USERPC),HL
     370/     1CA : CD C5 02            		CALL MEMDP2		;ANZEIGEN
     371/     1CD : C9                  		RET
     372/     1CE :                     
     373/     1CE :                     TPTUN2:					;BEI "TO TAPE" VORHERIGER PARAMETER
     374/     1CE : 21 FA 23            		LD HL,ATFLAG
     375/     1D1 : 35                  		DEC (HL)		;FLAG AUF VORHER. PARAMETER
     376/     1D2 : CD 07 03            		CALL LOCTNA		;PARAMETER 'F', 'S' ODER 'E'
     377/     1D5 : 20 04               		JR NZ,DSTEP		;SPR., WENN RICHTIG
     378/     1D7 : 34                  		INC (HL)		;ALTER FLAGWERT
     379/     1D8 : C3 96 02            		JP ERRDIS		;FEHLERANZEIGE
     380/     1DB :                     DSTEP:
     381/     1DB : CD E2 02            		CALL STEPDP		;PARAMETER ANZEIGEN
     382/     1DE : C9                  		RET
     383/     1DF :                     
     384/     1DF :                     ;--------------------- UNTEREINTRITT "EXEC"-TASTE ---
     385/     1DF :                     ;			(UEBER ETAB)
     386/     1DF :                     EFIX:					;BEDIENUNGSFEHLER
     387/     1DF : C3 96 02            		JP ERRDIS
     388/     1E2 :                     
     389/     1E2 :                     ADREXC:					;PROGRAMAUSFUEHRUNG AB USER-PC
     390/     1E2 : E5                  		PUSH HL
     391/     1E3 : 2A F8 23            		LD HL,(USERPC)
     392/     1E6 : E3                  		EX (SP),HL
     393/     1E7 : C9                  		RET
     394/     1E8 :                     
     395/     1E8 :                     ENDFUN:					; DE IN USER-PC ABSP. UND ANZEIGEN
     396/     1E8 : ED 53 F8 23         		LD (USERPC),DE
     397/     1EC : CD C5 02            		CALL MEMDP2
     398/     1EF : C9                  		RET
     399/     1F0 :                     
     400/     1F0 :                     EWT:					;UEBERSPIELEN AUF BAND
     401/     1F0 : CD 88 03            		CALL SUM		;PRUEFSUMME BERECHNEN
     402/     1F3 : 38 EA               		JR C,EFIX		;WENN ENDADR<ANF.ADR
     403/     1F5 : 32 F1 23            		LD (CHKSUMH),A		;ABSPEICHERN
     404/     1F8 : 21 A0 0F            		LD HL,0FA0H		;AUSGABE 4000 x 1KHZ-TAKTE (4sek 1kHz)
     405/     1FB :                     					;ALS START-SYNC SIGNAL
     406/     1FB : CD 70 03            		CALL SOUN1K
     407/     1FE : 21 EB 23            		LD HL,FILNAME		;DESCRIPTOR UEBERTRAGEN
     408/     201 : 01 07 00            		LD BC,0007H		;7 BYTE
     409/     204 : CD 1B 04            		CALL TAPOUT
     410/     207 : 21 A0 0F            		LD HL,0FA0H		;AUSGABE 4000 x 2KHZ-TAKTE (2sek 2kHz)
     411/     20A :                     					;ALS MITTEL-SYNC SIGNAL
     412/     20A : CD 74 03            		CALL SOUN2K
     413/     20D : CD 95 03            		CALL GETPTR		;LAENGE DES BLOCKES BER.
     414/     210 : CD 1B 04            		CALL TAPOUT		;DATE UEBERTRAGEN
     415/     213 : 21 A0 0F            		LD HL,0FA0H		;AUSGABE 4000 x 2KHZ-TAKTE (2sek 2kHz)
     416/     216 :                     					;ALS END SYNC. SIGNAL
     417/     216 : CD 74 03            		CALL SOUN2K
     418/     219 :                     ENDTAP:
     419/     219 : ED 5B EF 23         		LD DE,(ENDADRH)		;STARTADR
     420/     21D : 18 C9               		JR ENDFUN		;ABSP. UND ANZEIGEN
     421/     21F :                     
     422/     21F :                     ;----------------- FEHLERTEXT LADEN, SPR. Z. ANZEIGE -
     423/     21F :                     ERROR:
     424/     21F : DD 21 A5 05         		LD IX,ERR		;ADR FEHLERTEXT
     425/     223 : C3 8A 00            		JP SETSTO		;SPR. ZUR ANZEIGE
     426/     226 :                     
     427/     226 :                     ;----------------- DATEN VOM BAND LESEN --------
     428/     226 :                     LOAD:
     429/     226 : 2A EB 23            		LD HL,(FILNAME)
     430/     229 : 22 FE 23            		LD (FILE2),HL
     431/     22C : 3E EF               		LD A,0EFH		;DEZIMALPUNKTE EIN
     432/     22E : 32 EA 23            		LD (TAPDIS),A
     433/     231 :                     LEAD:
     434/     231 : 3A EA 23            		LD A,(TAPDIS)
     435/     234 : D3 F4               		OUT (SEGMENT),A
     436/     236 : 21 E8 03            		LD HL,1000
     437/     239 :                     LEAD1:
     438/     239 : CD 00 04            		CALL PERIOD		;EMPANGSFREQUENZ FESTSTELLEN
     439/     23C : 38 F3               		JR C,LEAD		;WDHLG., SOLANGE NICHT 1 KHZ
     440/     23E : 2B                  		DEC HL			;TEST, OB 1000 MAL 1 KHZ
     441/     23F : 7C                  		LD A,H
     442/     240 : B5                  		OR L
     443/     241 : 20 F6               		JR NZ,LEAD1		;WDHLG., BIS 1000 x 1 KHZ
     444/     243 :                     LEAD2:
     445/     243 : CD 00 04            		CALL PERIOD
     446/     246 : 30 FB               		JR NC,LEAD2		;WDHLG., SOLANGE NOCH 1 KHZ
     447/     248 : 21 EB 23            		LD HL,FILNAME		;ADR FUER HINTERLEGUNG DESCRIPTOR
     448/     24B : 01 07 00            		LD BC,0007H
     449/     24E : CD A7 03            		CALL TAPEIN		;7 BYTE LESEN
     450/     251 : 38 DE               		JR C,LEAD		;SPR., WENN UEBERTRAGUNGSFEHLER
     451/     253 : ED 5B EB 23         		LD DE,(FILNAME)
     452/     257 : CD B7 04            		CALL ADRSDP		;EMPFANGENEN FILENAMEN DARSTELLEN
     453/     25A : 06 4B               		LD B,75
     454/     25C :                     FILEDP:
     455/     25C : CD 83 04            		CALL DAK2		;ANZEIGEN
     456/     25F : 10 FB               		DJNZ FILEDP
     457/     261 : 2A FE 23            		LD HL,(FILE2)		;SOLL-NAMEN LESEN
     458/     264 : B7                  		OR A
     459/     265 : ED 52               		SBC HL,DE
     460/     267 : 3E F7               		LD A,0F7H		;"-"-ZEICHEN
     461/     269 : 32 EA 23            		LD (TAPDIS),A
     462/     26C : 20 C3               		JR NZ,LEAD		;SPR., WENN FALSCHER FILENAME
     463/     26E : 3E FE               		LD A,0FEH		; "'"-ZEICHEN EIN
     464/     270 : D3 F4               		OUT (SEGMENT),A
     465/     272 : CD 95 03            		CALL GETPTR		;LAENGE DES BLOCKES BER.
     466/     275 : 38 A8               		JR C,ERROR		;WENN ENDADR<ANF.ADR
     467/     277 : CD A7 03            		CALL TAPEIN		;DATENSATZ EINLESEN
     468/     27A : 38 A3               		JR C,ERROR		;SPR., WENN UEBERTR.FEHLER
     469/     27C : CD 88 03            		CALL SUM		;PRUEFSUMME BER.
     470/     27F : 21 F1 23            		LD HL,CHKSUMH
     471/     282 : BE                  		CP (HL)			;VERGLEICH MIT UEBERTR. PRUEFS.
     472/     283 : 20 9A               		JR NZ,ERROR		;SPR., WENN FEHLER
     473/     285 : 18 92               		JR ENDTAP
     474/     287 :                     
     475/     287 :                     ;----------------- FUNKTIONSTASTEN AUSWERTEN -------
     476/     287 :                     BRANCH:
     477/     287 : 5E                  		LD E,(HL)		;ADR DES FUNKTIONSPROGRAMMTEILS
     478/     288 : 23                  		INC HL
     479/     289 : 56                  		LD D,(HL)
     480/     28A : 23                  		INC HL
     481/     28B : D5                  		PUSH DE			;DE=Adr.
     482/     28C : 5F                  		LD E,A			;A=Index
     483/     28D : 16 00               		LD D,0
     484/     28F : 19                  		ADD HL,DE
     485/     290 : D1                  		POP DE
     486/     291 : 6E                  		LD L,(HL)		;L=Byte an Index-Pos.
     487/     292 : 26 00               		LD H,0
     488/     294 : 19                  		ADD HL,DE		;ADR DES GEW. PROG. TEILS
     489/     295 : E9                  		JP (HL)
     490/     296 :                     
     491/     296 :                     ;----------------- -
     492/     296 :                     ERRDIS:
     493/     296 : 21 FD 23            		LD HL,FUFEFLAG		;FUNKTIONS- UND FEHLERFLAG
     494/     299 : CB FE               		SET 7,(HL)		;setze Fehlerbit
     495/     29B : C9                  		RET
     496/     29C :                     
     497/     29C :                     ;----------------- MUSIK UND GRAPHIK BEI ERSTEINSCH. -
     498/     29C :                     INI:
     499/     29C : 3E 80               		LD A,80H
     500/     29E : 32 FC 23            		LD (INIFLAG),A		;FLAG AUF INITIALISIERT SETZEN
     501/     2A1 : CD EA 04            		CALL MONMUS		; MUSIKPROGRAMM
     502/     2A4 : CD 1B 03            		CALL INIDIP		; ANFANGSGRAPHIK
     503/     2A7 : C9                  		RET
     504/     2A8 :                     
     505/     2A8 :                     ;-----------------------------------------------------
     506/     2A8 :                     ; zu HDA: ein Byte löschen, wenn kein Fehler vorliegt
     507/     2A8 :                     PRECL1:
     508/     2A8 : 3A FD 23            		LD A,(FUFEFLAG)
     509/     2AB : B7                  		OR A
     510/     2AC : C8                  		RET Z			;RET., WENN KEIN FLAG
     511/     2AD : 3E 00               		LD A,0
     512/     2AF : 77                  		LD (HL),A		;ZELLE LOESCHEN
     513/     2B0 : 32 FD 23            		LD (FUFEFLAG),A		;FLAG LOESCHEN
     514/     2B3 : C9                  		RET
     515/     2B4 :                     
     516/     2B4 :                     ;---------------------- 2 BYTE IM RAM LOESCHEN ------
     517/     2B4 :                     ; zu HAD und HTAPWR: zwei Byte löschen, wenn kein Fehler vorliegt
     518/     2B4 :                     PRECL2:
     519/     2B4 : CD A8 02            		CALL PRECL1		;1 BYTE LOE., WENN FUFEFLAG NICHT 0
     520/     2B7 : C8                  		RET Z			;RET., WENN KEIN FLAG
     521/     2B8 : 23                  		INC HL
     522/     2B9 : 77                  		LD (HL),A		;NAECHSTE ZELLE LOESCHEN
     523/     2BA : 2B                  		DEC HL
     524/     2BB : C9                  		RET
     525/     2BC :                     
     526/     2BC :                     ;--------------------- ADR U. DAT ANZ., ADR GEPUNKTET-
     527/     2BC :                     MEMDP1:
     528/     2BC : 3E 01               		LD A,01H		;CODE "ADRESSE"
     529/     2BE : 06 04               		LD B,04H		;ANZ. ADRESSSTELLEN
     530/     2C0 : 21 F4 23            		LD HL,ADRLED
     531/     2C3 : 18 07               		JR SAV12
     532/     2C5 :                     
     533/     2C5 :                     ;--------------------- ADR U. DAT ANZ.,ADR GEPUNKTET -
     534/     2C5 :                     MEMDP2:
     535/     2C5 : 3E 02               		LD A,02H		;CODE "DATEN"
     536/     2C7 : 06 02               		LD B,02H		;ANZAHL DATENSTELLEN
     537/     2C9 : 21 F2 23            		LD HL,DATLED
     538/     2CC :                     SAV12:
     539/     2CC : 32 FB 23            		LD (ATCODE),A		;CODE ABSPEICHERN
     540/     2CF : D9                  		EXX
     541/     2D0 : ED 5B F8 23         		LD DE,(USERPC)		;ANWENDERADR ANZEIGEN
     542/     2D4 : CD B7 04            		CALL ADRSDP
     543/     2D7 : 1A                  		LD A,(DE)		;INHALT DER ADRESS. RAM-ZELLE
     544/     2D8 : CD C3 04            		CALL DADP		;DATUM ANZEIGEN
     545/     2DB : D9                  		EXX
     546/     2DC :                     SETPT:
     547/     2DC : CB E6               		SET 4,(HL)		; DEZIMALPUNKTE SETZEN
     548/     2DE : 23                  		INC HL
     549/     2DF : 10 FB               		DJNZ SETPT		;WDHLG., BIS ALLE DEZIMALPUNKTEPT
     550/     2E1 : C9                  		RET
     551/     2E2 :                     
     552/     2E2 :                     ;--------------------- PARAMETER ANZEIGEN ----------
     553/     2E2 :                     STEPDP:
     554/     2E2 : CD FD 02            		CALL LOCTBF		;PARAMETERADR. BERECHNEN
     555/     2E5 : 5E                  		LD E,(HL)		;INHALT DER ADRES. ZELLE NACH DE
     556/     2E6 : 23                  		INC HL
     557/     2E7 : 56                  		LD D,(HL)
     558/     2E8 : CD B7 04            		CALL ADRSDP		;DARSTELLEN
     559/     2EB : 21 F4 23            		LD HL,ADRLED		;ADR PUNKTIEREN
     560/     2EE : 06 04               		LD B,04H
     561/     2F0 : CD DC 02            		CALL SETPT
     562/     2F3 : CD 07 03            		CALL LOCTNA		;ZEICHEN FUER PARAMETERANZ. NACH A
     563/     2F6 : 6F                  		LD L,A
     564/     2F7 : 26 08               		LD H,08H		;"-"-ZEICHEN
     565/     2F9 : 22 F2 23            		LD (DATLED),HL		;IN DATENANZ. DARSTELLEN
     566/     2FC : C9                  		RET
     567/     2FD :                     
     568/     2FD :                     ;--------------------- PARAMETERADR. BERECHNEN ----
     569/     2FD :                     ;			EINTTRIT: ----
     570/     2FD :                     ;			AUSTRITT: ADR IN HL
     571/     2FD :                     ;			ZERSTOERT: A
     572/     2FD :                     LOCTBF:
     573/     2FD : 3A FA 23            		LD A, (ATFLAG)		;PARAMETERCODE
     574/     300 : 87                  		ADD A,A			; x 2
     575/     301 : 21 EB 23            		LD HL,FILNAME
     576/     304 : 85                  		ADD A,L			; + DESCRIPTOR-AREA
     577/     305 : 6F                  		LD L,A
     578/     306 : C9                  		RET
     579/     307 :                     
     580/     307 :                     ;--------------------- ZEICHEN FUER PARAMETERANZEIGE --
     581/     307 :                     			;EINTRITT:
     582/     307 :                     			;AUSTRITT: ZEICHEN IN A
     583/     307 :                     			;ZERSTOERT: DE
     584/     307 :                     LOCTNA:
     585/     307 : 3A FB 23            		LD A,(ATCODE)		; CODE "FROM TAPE" ODER "TO TAPE"
     586/     30A : D6 04               		SUB 04H			; - 4
     587/     30C : 87                  		ADD A,A
     588/     30D : 87                  		ADD A,A			; x 4
     589/     30E : 11 89 05            		LD DE,DISP4		; ANZEIGETEXT Parameter-Buchstaben
     590/     311 : 83                  		ADD A,E
     591/     312 : 5F                  		LD E,A			;NEUE ADR NACH DE (FROM ODER TO)
     592/     313 : 3A FA 23            		LD A,(ATFLAG)		;CODE FUER PARAMETER
     593/     316 : 83                  		ADD A,E
     594/     317 : 5F                  		LD E,A			;ADRESSE ZEICHEN
     595/     318 : 1A                  		LD A,(DE)
     596/     319 : B7                  		OR A
     597/     31A : C9                  		RET
     598/     31B :                     
     599/     31B :                     ;--------------------- GRAPHIK FUER ANFANGS-ANZEIGE --
     600/     31B :                     INIDIP:
     601/     31B : 0E 05               		LD C,05H		;ANZAHL DER WDHLG.
     602/     31D : 21 83 05            		LD HL,DISP3		;TEXT "HALLO "
     603/     320 : E5                  		PUSH HL
     604/     321 : DD 21 7D 05         		LD IX,DISP2		;TEXT " USER "
     605/     325 :                     A1:
     606/     325 : CD 5E 03            		CALL SOU1K
     607/     328 : DD E3               		EX (SP),IX		;ADRESS-AUSTAUSCH
     608/     32A : 06 14               		LD B,20			;0.2 Sek
     609/     32C :                     A2:
     610/     32C : CD 83 04            		CALL DAK2
     611/     32F : 10 FB               		DJNZ A2
     612/     331 : CD 67 03            		CALL SOU2K
     613/     334 : 06 14               		LD B,20			;0.2 Sek
     614/     336 :                     A3:
     615/     336 : CD 83 04            		CALL DAK2
     616/     339 : 10 FB               		DJNZ A3
     617/     33B : 0D                  		DEC C
     618/     33C : 20 E7               		JR NZ,A1
     619/     33E :                     
     620/     33E : 0E 15               		LD C,21			; 21 Schritte Laufschrift (disp4-disp1)
     621/     340 : DD 21 89 05         		LD IX,DISP4		; leere Anzeige
     622/     344 :                     BLOOP:
     623/     344 : 06 0B               		LD B,11			;0.11 Sek
     624/     346 :                     B1:
     625/     346 : CD 83 04            		CALL DAK2
     626/     349 : 10 FB               		DJNZ B1
     627/     34B : CB 41               		BIT 0,C			; in jedem Schleifendurchlauf
     628/     34D : 20 05               		JR NZ,B2		; Wechsel zw. sou1k und sou2k
     629/     34F : CD 67 03            		CALL SOU2K
     630/     352 : 18 03               		JR B3
     631/     354 :                     B2:
     632/     354 : CD 5E 03            		CALL SOU1K
     633/     357 :                     B3:
     634/     357 : DD 2B               		DEC IX			; Laufschrift nächster Schritt
     635/     359 : 0D                  		DEC C
     636/     35A : 20 E8               		JR NZ,BLOOP
     637/     35C :                     
     638/     35C : E1                  		POP HL			;STACK-KOR.
     639/     35D : C9                  		RET
     640/     35E :                     
     641/     35E :                     ;---------------------- 1KHZ80ms ----------------
     642/     35E :                     SOU1K:
     643/     35E : D9                  		EXX
     644/     35F : 21 50 00            		LD HL,80
     645/     362 : CD 70 03            		CALL SOUN1K
     646/     365 : D9                  		EXX
     647/     366 : C9                  		RET
     648/     367 :                     
     649/     367 :                     ;--------------------- 2KHZ80ms -----------------
     650/     367 :                     SOU2K:
     651/     367 : D9                  		EXX
     652/     368 : 21 A0 00            		LD HL,160
     653/     36B : CD 74 03            		CALL SOUN2K
     654/     36E : D9                  		EXX
     655/     36F : C9                  		RET
     656/     370 :                     
     657/     370 :                     ;--------------------- TONSIGNAL 1KHZ --------------
     658/     370 :                     
     659/     370 :                     ; FUNKTION: Ausgabe eines Tonsignals von 1 kHz
     660/     370 :                     ; EINTRITT: Der Inhalt der Register HL gibt die Anzahl der Takte an; Höchstwert 32768 Takte.
     661/     370 :                     ; AUSTRITT: ---
     662/     370 :                     ; REGISTER: Die Inhalte der Register Arg BC, DE, HL, werden zerstört.
     663/     370 :                     
     664/     370 :                     SOUN1K:
     665/     370 : 0E 20               		LD C,32
     666/     372 : 18 02               		JR SOUND
     667/     374 :                     
     668/     374 :                     ;--------------------- TONSIGNAL 2KHZ --------------
     669/     374 :                     
     670/     374 :                     ; FUNKTION: Ausgabe eines Tonsignals in 2 kHz
     671/     374 :                     ; EINTRITT: Der Inhalt der Register HL gibt die Anzahl der Takte an; Höchstwert 32768 Takte
     672/     374 :                     ; AUSTRITT: ---
     673/     374 :                     ; REGISTER: Die Inhalte der Register AF, BC, DE, HL werden zerstört.
     674/     374 :                     
     675/     374 :                     SOUN2K:
     676/     374 : 0E 0F               		LD C,15
     677/     376 :                     
     678/     376 :                     ; FUNKTION: Tonsignal für Lautsprecher
     679/     376 :                     ; EINTRITT: Der Inhalt des Registers C gibt die Tonfrequenz an.
     680/     376 :                     ; Der Inhalt der Register HL gibt die Anzahl der Takte an, Höchstwert 32768 Takte
     681/     376 :                     ; AUSTRITT: ---
     682/     376 :                     ; REGISTER: Die Inhalte der Register AF, B, DE, HL, werden zerstört.
     683/     376 :                     
     684/     376 :                     SOUND:
     685/     376 : 29                  		ADD HL,HL		; x 2 WEGEN H- UND L-TEIL DES TAKTES
     686/     377 : 11 01 00            		LD DE,0001H		;FUER ZAEHLUNG
     687/     37A : 3E FF               		LD A,0FFH		;TAPE.OUT=H, ANZEIGE AUS
     688/     37C :                     SQWAVE:
     689/     37C : D3 F5               		OUT (DIGITAP),A
     690/     37E : 41                  		LD B,C
     691/     37F : 10 FE               		DJNZ $			;ZEITVERZ.
     692/     381 : EE 02               		XOR 2			;TAPE.OUT=L
     693/     383 : ED 52               		SBC HL,DE
     694/     385 : 20 F5               		JR NZ,SQWAVE		;WDHLG., BIS ALLE TAKTE
     695/     387 : C9                  		RET
     696/     388 :                     
     697/     388 :                     ;--------------------- PRUEFSUMME ----------------
     698/     388 :                     			;EINTRITT: -
     699/     388 :                     			;AUSTRITT: SUMME IN A
     700/     388 :                     SUM:
     701/     388 : CD 95 03            		CALL GETPTR
     702/     38B : D8                  		RET C			;RET., WENN FEHLER
     703/     38C : AF                  		XOR A
     704/     38D :                     SUMCAL:
     705/     38D : 86                  		ADD A,(HL)		;AUFSUMMIEREN
     706/     38E : ED A1               		CPI			;NAECHSTE ADR
     707/     390 : EA 8D 03            		JP PE,SUMCAL		;WDHLG., BIS ALLE BYTES
     708/     393 : B7                  		OR A
     709/     394 : C9                  		RET
     710/     395 :                     
     711/     395 :                     ;--------------------- SPEICHERLAENGE BER. ---------
     712/     395 :                     			;EINTRITT:
     713/     395 :                     			;AUSTRITT: LAENGE IN BC
     714/     395 :                     			;	BEI FEHLER CY=1
     715/     395 :                     GETPTR:
     716/     395 : 21 ED 23            		LD HL,STARTADR		;DESCRIPTORAREA
     717/     398 : 5E                  		LD E,(HL)		;STARTADR
     718/     399 : 23                  		INC HL
     719/     39A : 56                  		LD D,(HL)
     720/     39B : 23                  		INC HL
     721/     39C : 4E                  		LD C,(HL)		;ENDADR (C ZWI.SP. WEG. ADR IN HL)
     722/     39D : 23                  		INC HL
     723/     39E : 66                  		LD H,(HL)
     724/     39F : 69                  		LD L,C
     725/     3A0 : B7                  		OR A			;CY LOESCHEN
     726/     3A1 : ED 52               		SBC HL, DE		;ABSTAND
     727/     3A3 : 4D                  		LD C,L			;NACH BC LADEN
     728/     3A4 : 44                  		LD B,H
     729/     3A5 : EB                  		EX DE,HL
     730/     3A6 : C9                  		RET
     731/     3A7 :                     
     732/     3A7 :                     ;---------------------- LESEN VOM BAND -------------
     733/     3A7 :                     			;EINTRITT: ZIELANFANGSADR IN HL
     734/     3A7 :                     			;	LAENGE IN BC
     735/     3A7 :                     			;AUSTRITT:
     736/     3A7 :                      TAPEIN:
     737/     3A7 : AF                  		XOR A
     738/     3A8 : 08                  		EX AF,AF'		;'
     739/     3A9 :                      TLOOP:
     740/     3A9 : CD B4 03            		CALL GTBYTE		;1 BYTE LESEN
     741/     3AC : 73                  		LD (HL),E		;ABSPEICHERN
     742/     3AD : ED A1               		CPI			;NAECHSTE ADR
     743/     3AF : EA A9 03            		JP PE,TLOOP		;WDHLG., BIS ALLE BYTE
     744/     3B2 : 08                  		EX AF,AF'		;'
     745/     3B3 : C9                  		RET
     746/     3B4 :                     
     747/     3B4 :                     ;-------------------- 1 BYTE VOM BAND LESEN ----
     748/     3B4 :                     			;EINTRITT:
     749/     3B4 :                     			;AUSTRITT: DATENBYTE IN E
     750/     3B4 :                      GTBYTE:
     751/     3B4 : CD C5 03            		CALL GETBIT		;STARTBIT
     752/     3B7 : 16 08               		LD D,08H		;8 BIT
     753/     3B9 :                      GLOOP:
     754/     3B9 : CD C5 03            		CALL GETBIT		;DATENBIT LESEN
     755/     3BC : CB 1B               		RR E			;IN E SCHIEBEN
     756/     3BE : 15                  		DEC D
     757/     3BF : 20 F8               		JR NZ,GLOOP		;WDHLG., BIS 8 BIT
     758/     3C1 : CD C5 03            		CALL GETBIT		;STOPBIT
     759/     3C4 : C9                  		RET
     760/     3C5 :                     
     761/     3C5 :                     ;-------------------- 1 BIT VOM BAND LESEN ---------
     762/     3C5 :                     			;EINTRITT:
     763/     3C5 :                     			;AUSTRITT: BIT IN CY
     764/     3C5 :                     GETBIT:
     765/     3C5 : D9                  		EXX
     766/     3C6 : 21 00 00            		LD HL,0000
     767/     3C9 :                     COUNT:
     768/     3C9 : CD 00 04            		CALL PERIOD		;TAKTLAENGE
     769/     3CC : 14                  		INC D
     770/     3CD : 15                  		DEC D			;Z-FLAG SETZEN/RUECKSETZEN
     771/     3CE : 20 11               		JR NZ,TERR		;SPR., WENN ZU GROSS (FEHLER)
     772/     3D0 : 38 06               		JR C,SHORTP		;SPR., WENN 1 KHZ
     773/     3D2 :                     					;FREQU. IST 2 KHZ
     774/     3D2 : 2D                  		DEC L			;L=L-2
     775/     3D3 : 2D                  		DEC L
     776/     3D4 : CB C4               		SET 0,H			;H=1
     777/     3D6 : 18 F1               		JR COUNT		;WDHLG.
     778/     3D8 :                     SHORTP:
     779/     3D8 :                     					;FREQU. IST 1 KHZ
     780/     3D8 : 2C                  		INC L			;L=L+1
     781/     3D9 : CB 44               		BIT 0,H
     782/     3DB : 28 EC               		JR Z,COUNT		;SPR., WENN NOCH NICHT 2 KHZ EMPFANGEN
     783/     3DD : CB 15               		RL L			;BIT IN CY
     784/     3DF : D9                  		EXX
     785/     3E0 : C9                  		RET
     786/     3E1 :                     TERR:
     787/     3E1 :                     					;FREQUENZ AUSSER ERLAUBTEM BEREICH
     788/     3E1 : 08                  		EX AF,AF'		;'
     789/     3E2 : 37                  		SCF
     790/     3E3 : 08                  		EX AF,AF'		;'
     791/     3E4 : D9                  		EXX
     792/     3E5 : C9                  		RET
     793/     3E6 :                     
     794/     3E6 :                     ;--------------------- ADR 2. ROM/EPROM --------------
     795/     400 :                     		ORG 0400H
     796/     400 :                     
     797/     400 : =>FALSE             		IF ROM_=2
     798/     400 :                     		DEFB 0FFH
     799/     400 :                     		ORG 0800H
     800/     400 : [797]               		ENDIF
     801/     400 :                     
     802/     400 :                     ;--------------------- TAKTLAENGE VOM BAND-SIGNAL ----
     803/     400 :                     			;EINTRITT: ----
     804/     400 :                     			;AUSTRITT: CY=O --> 1 KHZ
     805/     400 :                     			;	CY=1 --> 2 KHZ
     806/     400 :                     PERIOD:
     807/     400 : 11 00 00            		LD DE,0000		;ZAEHLER = 0
     808/     403 :                     CHK0:
     809/     403 : DB F5               		IN A,(DIGITAP)		;EINLESEN
     810/     405 : 13                  		INC DE			;ZAEHLER ERHOEHEN
     811/     406 : 1F                  		RRA
     812/     407 : 38 FA               		JR C,CHK0		;WDHLG., WENN EINGANG H
     813/     409 : 3E 00               		LD A,0			;AZEIGE FREI, TAPE.OUT = L
     814/     40B : D3 F5               		OUT (DIGITAP),A
     815/     40D :                     CHK1:
     816/     40D : DB F5               		IN A,(DIGITAP)		;EINLESEN
     817/     40F : 13                  		INC DE			;ZAEHLER ERHOEHEN
     818/     410 : 1F                  		RRA
     819/     411 : 30 FA               		JR NC,CHK1		;WDHLG., WENN EINGANG L
     820/     413 : 3E 02               		LD A,2			; ANZEIGE FREI, TAPE.OUT = H
     821/     415 : D3 F5               		OUT (DIGITAP),A
     822/     417 : 7B                  		LD A,E
     823/     418 : FE 16               		CP 22			;TEST	<> 1,5 KHZ
     824/     41A : C9                  		RET
     825/     41B :                     
     826/     41B :                     ;--------------------- DATEN AUF BAND AUSGEBEN ------
     827/     41B :                     			;EINTRITT: ANFANGSADR. IN HL
     828/     41B :                     			;	ANZAHL IN BC
     829/     41B :                     			;AUSTRITT:
     830/     41B :                     TAPOUT:
     831/     41B : 5E                  		LD E,(HL)		;BYTE NACH E
     832/     41C : CD 25 04            		CALL OUTBYTE
     833/     41F : ED A1               		CPI			;NAECHSTES BYTE
     834/     421 : EA 1B 04            		JP PE,TAPOUT		;WDHLG., WENN NOCH BYTES ZU SENDEN
     835/     424 : C9                  		RET
     836/     425 :                     
     837/     425 :                     ;--------------------- EIN BYTE AUSGEBEN ----------
     838/     425 :                     			;EINTRITT: BYTE IN E
     839/     425 :                     			;AUSTRITT:
     840/     425 :                     OUTBYTE:
     841/     425 : 16 08               		LD D,08H		;8 BIT
     842/     427 : B7                  		OR A
     843/     428 : CD 38 04            		CALL OUTBIT		;STARTBIT
     844/     42B :                     OLOOP:
     845/     42B : CB 1B               		RR E			;BIT IN CY
     846/     42D : CD 38 04            		CALL OUTBIT		;DATENBIT AUSGEBEN
     847/     430 : 15                  		DEC D
     848/     431 : 20 F8               		JR NZ,OLOOP		;WDHLG., BIS 8 BIT
     849/     433 : 37                  		SCF
     850/     434 : CD 38 04            		CALL OUTBIT		;STOPBIT
     851/     437 : C9                  		RET
     852/     438 :                     
     853/     438 :                     ;----------------- -
     854/     438 :                     OUTBIT:
     855/     438 : D9                  		EXX			;OUTPUT 1 BIT DATA
     856/     439 : 26 00               		LD H,0
     857/     43B : 38 09               		JR C,OUT1
     858/     43D :                     OUT0:
     859/     43D : 2E 0C               		LD L,0CH		;6ms 2K
     860/     43F : CD 74 03            		CALL SOUN2K
     861/     442 : 2E 03               		LD L,03H		;3ms 1k	
     862/     444 : 18 07               		JR BITEND
     863/     446 :                     OUT1:
     864/     446 : 2E 06               		LD L,06H		;3ms 2K
     865/     448 : CD 74 03            		CALL SOUN2K
     866/     44B : 2E 06               		LD L,06H		;6ms 1k
     867/     44D :                     BITEND:
     868/     44D : CD 70 03            		CALL SOUN1K
     869/     450 : D9                  		EXX
     870/     451 : C9                  		RET
     871/     452 :                     ;---------------------- TEST, OB (HL) RAM IST -------
     872/     452 :                     ;			2 x INVERTIERTES SCHREIBEN UND
     873/     452 :                     ;			LESEN AUS/IN DEN DURCH HL ANGEG.
     874/     452 :                     ;			SPEICHERPLATZ UND VERGLEICHEN
     875/     452 :                     ;			AUSGABE: Z=1, WENN RAM
     876/     452 :                     
     877/     452 :                     ; FUNKTION: Test ob ein Speicherplatz im RAM liegt
     878/     452 :                     ; EINTRITT: HL gibt den Speicherplatz an.
     879/     452 :                     ; AUSTRITT: Z-Flag = 1 wenn (HL) RAM ist.
     880/     452 :                     ; REGISTER: Der Inhalt der Register AF wird zerstört.
     881/     452 :                     
     882/     452 :                     RAMCHK:
     883/     452 : 7E                  		LD A,(HL)
     884/     453 : 2F                  		CPL
     885/     454 : 77                  		LD (HL),A
     886/     455 : 7E                  		LD A,(HL)
     887/     456 : 2F                  		CPL
     888/     457 : 77                  		LD (HL),A
     889/     458 : BE                  		CP (HL)
     890/     459 : C9                  		RET
     891/     45A :                     
     892/     45A :                     ;--------------------- LED UND TASTATUR-ABFR.--------
     893/     45A :                     ; wie DAK2, aber:
     894/     45A :                     ; - die Funktion wird fortgesetzt, bis eine Taste gedrückt wurde.
     895/     45A :                     ; - Anstelle des Tastencodes wird der umgewandelte interne Code geliefert,
     896/     45A :                     ; wie er von anderen Teilen des Monitorprogrammes benötigt wird.
     897/     45A :                     ; EINTRITT: IX zeigt auf die niederwertigste Adresse des Speicherbereiches,
     898/     45A :                     ; 	der zur Anzeige gelangen soll.
     899/     45A :                     ; AUSTRITT: Der interne Code befindet sich im ARegister.
     900/     45A :                     ; REGISTER: Die Inhalte von AF, B, HL, A'F', B'C', D'E' werden zerstört.
     901/     45A :                     
     902/     45A :                     ; Taste interner Code
     903/     45A :                     
     904/     45A :                     ; 0..F	00..0F
     905/     45A :                     ; +	10
     906/     45A :                     ; -	11
     907/     45A :                     ; EX	12
     908/     45A :                     ; DAT	14
     909/     45A :                     ; ADR	19
     910/     45A :                     ; ST	1E
     911/     45A :                     ; LD	1F
     912/     45A :                     
     913/     45A :                     DAK1:
     914/     45A : DD E5               		PUSH IX			;ADR ANZ.TEXT RETTEN
     915/     45C : 21 FD 23            		LD HL,FUFEFLAG
     916/     45F : CB 7E               		BIT 7,(HL)		;FEHLERFLAG TESTEN
     917/     461 : 28 04               		JR Z,SCPRE		;SPR., WENN KEIN FEHLER
     918/     463 : DD 21 A5 05         		LD IX,ERR		;ADR FEHLERTEXT
     919/     467 :                     SCPRE:
     920/     467 : 06 06               		LD B,06H
     921/     469 :                     SCNX:
     922/     469 : CD 83 04            		CALL DAK2
     923/     46C : 30 F9               		JR NC,SCPRE		;WDHLG., WENN TASTE NOCH GEDR.
     924/     46E : 10 F9               		DJNZ SCNX
     925/     470 : CB BE               		RES 7,(HL)		;FEHLERLAG LOESCHEN
     926/     472 : DD E1               		POP IX			;ALTER TEXT
     927/     474 :                     SCLOOP:
     928/     474 : CD 83 04            		CALL DAK2
     929/     477 : 38 FB               		JR C,SCLOOP		;WDHLG., WENN KEINE TASTE GEDR.
     930/     479 : 21 EF 05            		LD HL,KEYTAB		;TASTE NACH TABELLE UMCODIEREN
     931/     47C : 85                  		ADD A,L
     932/     47D : 6F                  		LD L,A
     933/     47E : 30 01               		JR NC,SCNCY
     934/     480 : 24                  		INC H
     935/     481 :                     SCNCY:
     936/     481 : 7E                  		LD A,(HL)		;UMCODIERTER TASTENWERT
     937/     482 : C9                  		RET
     938/     483 :                     
     939/     483 :                     ;----------------- LED U. TASTATUR-UP --------------
     940/     483 :                     ; Einmalige Ansteuerung von Anzeige und Tastatur, alle 6 LED-Anzeigen werden
     941/     483 :                     ; nacheinander angesteuert ( Ausführungszeit ca. 10 ms).
     942/     483 :                     ; Eintritt: IX, zeigt auf die niederwertigste Adresse des Speicherbereiches,
     943/     483 :                     ; 	der zur Anzeige gelangen soll.
     944/     483 :                     ; Austritt: CY = 1, wenn keine Taste gedrückt
     945/     483 :                     ; 	CY = 0, wenn eine Taste gedrückt (außer RES oder NMI).
     946/     483 :                     ; 	Der Positionscode der Taste befindet sich im A-Register.
     947/     483 :                     ; Register: Die Inhalte von AF, A' F', B' C', D'E' werden zerstört.
     948/     483 :                     
     949/     483 :                     
     950/     483 :                     ; TASTATURMATRIX
     951/     483 :                     ;
     952/     483 :                     ; System-PIO, DIGITAP
     953/     483 :                     ;
     954/     483 :                     ;   B2    B3    B4    B5    B6    B7
     955/     483 :                     ;   |     |     |     |     |     |
     956/     483 :                     ; +-----+-----+-----+-----+-----+-----+
     957/     483 :                     ; | EX  | 0   | 4   | 8   | C   | ADR |  --> B7 User-IO, KEYIN
     958/     483 :                     ; | 00  | 04  | 08  | 0C  | 10  | 14  |  --  Tastencode DAK2
     959/     483 :                     ; +-----+-----+-----+-----+-----+-----+
     960/     483 :                     ; | ST  | 1   | 5   | 9   | D   | DAT |  --> B6
     961/     483 :                     ; | 01  | 05  | 09  | 0D  | 11  | 15  |
     962/     483 :                     ; +-----+-----+-----+-----+-----+-----+
     963/     483 :                     ; | LD  | 2   | +   | E   | A   | 6   |  --> B5
     964/     483 :                     ; | 02  | 06  | 0A  | 0E  | 12  | 16  |
     965/     483 :                     ; +-----+-----+-----+-----+-----+-----+
     966/     483 :                     ; |     | 3   | 7   | B   | F   | -   |	 --> B4
     967/     483 :                     ; |     | 07  | 0B  | 0F  | 13  | 17  |
     968/     483 :                     ; +-----+-----+-----+-----+-----+-----+
     969/     483 :                     
     970/     483 :                     DAK2:
     971/     483 : 37                  		SCF			;keine Taste gedrückt setzen
     972/     484 : 08                  		EX AF,AF'		;' und als Vorgabe merken
     973/     485 : D9                  		EXX
     974/     486 : 0E 00               		LD C,0			;TASTENNUMMER = 0
     975/     488 : 1E FB               		LD E,11111011B		;BITMUSTER FUER DIGITANSTEUERUNG
     976/     48A :                     					;Bit2 = 0 -> erste Spalte low
     977/     48A :                     KCOL:
     978/     48A : DD 7E 00            		LD A,(IX)		;SEGMENTE ANSTEUERN
     979/     48D : 2F                  		CPL
     980/     48E : D3 F4               		OUT (SEGMENT),A
     981/     490 : 7B                  		LD A,E			;DIGIT ANSTEUERN
     982/     491 : D3 F5               		OUT (DIGITAP),A
     983/     493 : 06 64               		LD B,100		;ZEITVERZOEGERUNG
     984/     495 : 10 FE               		DJNZ $
     985/     497 : 06 04               		LD B,04H		;ZEILENZAHL TASTENMATRIX
     986/     499 : DB F9               		IN A,(KEYIN)		;TASTENWERT EINLESEN
     987/     49B : 57                  		LD D,A			;TEST, OB TASTE GEDRUECKT
     988/     49C :                     KROW:
     989/     49C : CB 12               		RL D			;Bit7 -> Cy, restl. Bit rücken nach
     990/     49E : 38 02               		JR C,NOKEY		;wenn Taste nicht gedrückt
     991/     4A0 : 79                  		LD A,C			;wenn Taste gedrückt, ist C der Tastencode
     992/     4A1 : 08                  		EX AF,AF'		;' Taste merken
     993/     4A2 :                     		;WENN TASTE: -> CY=0, A = NUMMER
     994/     4A2 :                     NOKEY:
     995/     4A2 : 0C                  		INC C			;ABFRAGEZAEHLER ERHOEHEN
     996/     4A3 : 10 F7               		DJNZ KROW		;WDHLG., WENN NOCH NICHT ALLE ZEILEN
     997/     4A5 : DD 23               		INC IX			;NAECHSTES ZEICHEN ZUR ANZEIGE
     998/     4A7 : CB 03               		RLC E			;nächste Spalte low
     999/     4A9 : 3E FF               		LD A,0FFH
    1000/     4AB : D3 F5               		OUT (DIGITAP),A		;ANZEIGE AUS
    1001/     4AD : 38 DB               		JR C,KCOL		;GGF. NAECHSTE SPALTE
    1002/     4AF : 11 FA FF            		LD DE,0FFFAH		; -6
    1003/     4B2 : DD 19               		ADD IX,DE		;WIEDERHERST. ANF.ADR DES ANZ.TEXTES
    1004/     4B4 : D9                  		EXX
    1005/     4B5 : 08                  		EX AF,AF'		;' gemerkte Taste nach A
    1006/     4B6 : C9                  		RET
    1007/     4B7 :                     
    1008/     4B7 :                     ;-------------------- ADRESSE ANZEIGEN -------------
    1009/     4B7 :                     ; FUNKTION: Eintragen von 4 Ziffern in den Adressanzeigespeicher
    1010/     4B7 :                     ; 	(Adressen 23F4 - 23F7H)
    1011/     4B7 :                     ; EINTRITT: Anzuzeigende Zahl in DE
    1012/     4B7 :                     ; AUSTRITT: Entsprechender 7-Segment-Code im Adressanzeigespeicher
    1013/     4B7 :                     ; REGISTER: Die Inhalte der Register AF und HL werden zerstört.
    1014/     4B7 :                     
    1015/     4B7 :                     ADRSDP:
    1016/     4B7 : 21 F4 23            		LD HL,ADRLED
    1017/     4BA : 7B                  		LD A,E			;UNTERE 2 ZIFFERN
    1018/     4BB : CD D9 04            		CALL TWOSEG
    1019/     4BE : 7A                  		LD A,D			;OBERE 2 ZIFFERN
    1020/     4BF : CD D9 04            		CALL TWOSEG
    1021/     4C2 : C9                  		RET
    1022/     4C3 :                     
    1023/     4C3 :                     ;---------------------- A-REG IN DAT-ANZ-SPEICHER ---
    1024/     4C3 :                     ; FUNKTION: Eintragen von 2 Ziffern in den Datenanzeigespeicher
    1025/     4C3 :                     ; 	(Adressen 23F2 - 23F3H)
    1026/     4C3 :                     ; EINTRITT: Anzuzeigende Zahl in A
    1027/     4C3 :                     ; AUSTRITT: Entsprechender 7-Segment-Code im Datenanzeigespeicher
    1028/     4C3 :                     ; REGISTER: Die Inhalte der Register AF und HL werden zerstört.
    1029/     4C3 :                     DADP:
    1030/     4C3 : 21 F2 23            		LD HL,DATLED
    1031/     4C6 : CD D9 04            		CALL TWOSEG
    1032/     4C9 : C9                  		RET
    1033/     4CA :                     
    1034/     4CA :                     ;--------------------- -
    1035/     4CA :                     ; FUNKTION: Umwandeln einer Ziffer in den entsprechenden 7-Segment-Code
    1036/     4CA :                     ; EINTRITT: Die rechten 4 Bit des A-Registers sind die umzuwandelnde Hex-Zahl.
    1037/     4CA :                     ; AUSTRITT: Der entsprechende 7-Segment-Code steht im A-Register.
    1038/     4CA :                     ; REGISTER: Der Inhalt in AF wird zerstört
    1039/     4CA :                     
    1040/     4CA :                     ONESEG:
    1041/     4CA : E5                  		PUSH HL
    1042/     4CB : D5                  		PUSH DE
    1043/     4CC : 21 07 06            		LD HL,SEGTAB		;ADR DER SEGMENTTABELLE
    1044/     4CF : E6 0F               		AND 0FH			;OBERES HALBBYTE AUSBLENDEN
    1045/     4D1 : 5F                  		LD E,A
    1046/     4D2 : 16 00               		LD D,0
    1047/     4D4 : 19                  		ADD HL,DE
    1048/     4D5 : D1                  		POP DE
    1049/     4D6 : 7E                  		LD A,(HL)		;KONVERTIERTE ZAHL NACH A
    1050/     4D7 : E1                  		POP HL
    1051/     4D8 : C9                  		RET
    1052/     4D9 :                     
    1053/     4D9 :                     ;--------------------- -
    1054/     4D9 :                     ; FUNKTION: Umwandeln des Inhalts des A-Registers in die zugehörigen 2 7-Segment-Codes.
    1055/     4D9 :                     ; EINTRITT: Untere Tetrade von A als 1.Ziffer Obere Tetrade von A als 2.Ziffer
    1056/     4D9 :                     ; AUSTRITT: Der erste Code wird in (HL), der zweite Code in (HL + 1) abgespeichert.
    1057/     4D9 :                     ; 	HL wird um 2 erhöht.
    1058/     4D9 :                     ; REGISTER: Die Inhalte der Register AF und HL werden zerstört.
    1059/     4D9 :                     
    1060/     4D9 :                     TWOSEG:
    1061/     4D9 : F5                  		PUSH AF
    1062/     4DA : CD CA 04            		CALL ONESEG		;UNTERE ZIFFER UMWANDELN
    1063/     4DD : 77                  		LD (HL),A		;ABSPEICHERN
    1064/     4DE : 23                  		INC HL			;ADR FUER HINTERLEGUNG OBERE ZAHL
    1065/     4DF : F1                  		POP AF			;URSPRUENGL. ZAHL
    1066/     4E0 : 0F                  		RRCA
    1067/     4E1 : 0F                  		RRCA
    1068/     4E2 : 0F                  		RRCA
    1069/     4E3 : 0F                  		RRCA			;OBERES HALBBYTE
    1070/     4E4 : CD CA 04            		CALL ONESEG		;OBERE ZIFFER UMWANDELN
    1071/     4E7 : 77                  		LD (HL),A		;ABSPEICHERN
    1072/     4E8 : 23                  		INC HL			;ADR GGF. NAECHSTE ZIFFER
    1073/     4E9 : C9                  		RET
    1074/     4EA :                     
    1075/     4EA :                     ;--------------------- MUSIKPROGRAMM -----------------
    1076/     4EA :                     
    1077/     4EA :                     ; FUNKTION: Spielen der Anfangsmusik
    1078/     4EA :                     ; EINTRITT: ---
    1079/     4EA :                     ; AUSTRITT: ---
    1080/     4EA :                     ; REGISTER: Die Inhalte der Register IX, IY, AF, DC, DE, HL werden zerstört.
    1081/     4EA :                     
    1082/     4EA :                     MONMUS:
    1083/     4EA : FD 21 17 06         		LD IY,SONG		;ADR DER NOTEN
    1084/     4EE :                     
    1085/     4EE :                     ; FUNKTION: Spielen von Musik
    1086/     4EE :                     ; EINTRITT: Im Register IY steht die Startadresse des Musikstückes
    1087/     4EE :                     ; AUSTRITT: ---
    1088/     4EE :                     ; REGISTER: Die Inhalte der Register IX, AF, BC, DE, HL werden zerstört.
    1089/     4EE :                     
    1090/     4EE :                     ; Jeweils 2 Byte repräsentieren eine Note.
    1091/     4EE :                     ; Das erste Byte gibt die Tonhöhe, das zweite Byte die Tonlänge an.
    1092/     4EE :                     ; Hat das erste Byte den Wert 80H, wird das Musikprogramm
    1093/     4EE :                     ; verlassen, bei 40H wird das Programm von vorn begonnen, bei 20H
    1094/     4EE :                     ; wird eine Pause mit der durch das zweite Byte angegebenen Länge
    1095/     4EE :                     ; gemacht.
    1096/     4EE :                     ; Als Werte für die Tonhöhe sind die Zahlen 0H bis 1FH erlaubt.
    1097/     4EE :                     ; Bezogen auf eine Taktfrequenz von 900 kHz entsprechen
    1098/     4EE :                     ; aufeinanderfolgende Zahlen jeweils einen Halbtonschritt, wobei der
    1099/     4EE :                     ; tiefste Ton (00H) etwa dem Ton cis entspricht.
    1100/     4EE :                     ; Die Tonlänge ist frei wählbar.
    1101/     4EE :                     
    1102/     4EE :                     MUSIC:
    1103/     4EE : FD E5               		PUSH IY
    1104/     4F0 : DD E1               		POP IX
    1105/     4F2 :                     MUSLOOP:
    1106/     4F2 : DD 7E 00            		LD A,(IX)		;tonhöhe/befehl
    1107/     4F5 : 87                  		ADD A,A
    1108/     4F6 : D8                  		RET C			;WENN WERT >= 80H Ende
    1109/     4F7 : FA EE 04            		JP M,MUSIC		;WENN WERT >= 40H wiederholen
    1110/     4FA : 0E 00               		LD C,0			;vorbelegen mit Pause
    1111/     4FC : CB 77               		BIT 6,A
    1112/     4FE : 20 02               		JR NZ,PLAY		;WENN WERT >= 20H Pause
    1113/     500 : CB C9               		SET 1,C			;AUSGABE-BIT (C:=2)
    1114/     502 :                     PLAY:
    1115/     502 : E6 3F               		AND 3FH			; A ist schon tonhöhe*2
    1116/     504 : 21 34 05            		LD HL,FRQTAB		; Frequenztabelle
    1117/     507 : 5F                  		LD E,A			; Tonhöhe
    1118/     508 : 16 00               		LD D,0
    1119/     50A : 19                  		ADD HL,DE		; + 2x Tonhöhe
    1120/     50B : 5E                  		LD E,(HL)		; erster Frequenzwert
    1121/     50C : 23                  		INC HL
    1122/     50D : 56                  		LD D,(HL)		; zweiter Freq.wert
    1123/     50E : DD 23               		INC IX			;Tonlänge
    1124/     510 : DD 66 00            		LD H,(IX)		;merken
    1125/     513 : 3E FF               		LD A,0FFH
    1126/     515 :                     TONE:
    1127/     515 : 6A                  		LD L,D			; zweiter Freq.wert
    1128/     516 :                     TONOUT:
    1129/     516 : D3 F5               		OUT (DIGITAP),A
    1130/     518 : 43                  		LD B,E			; erster Freq.wert
    1131/     519 :                     DELAY:					; Verzögerungsschleife
    1132/     519 : 00                  		NOP
    1133/     51A : 10 FD               		DJNZ DELAY
    1134/     51C : A9                  		XOR C			; Toggle Bit f. PIO
    1135/     51D :                     					; bei PAUSE erfolgt keine Änderung des Bits!
    1136/     51D : 2D                  		DEC L
    1137/     51E : 20 F6               		JR NZ,TONOUT		; weiter in Schleife
    1138/     520 : 25                  		DEC H			; Tonlänge
    1139/     521 : 20 F2               		JR NZ,TONE		; weiter in Tonausgabe
    1140/     523 : DD 23               		INC IX			; Pointer auf nächste Note
    1141/     525 : 18 CB               		JR MUSLOOP
    1142/     527 :                     
    1143/     527 :                     ;--------------------- ANZEIGEMOD TESTEN -------------
    1144/     527 :                     TESTM:
    1145/     527 : 3A FB 23            		LD A,(ATCODE)
    1146/     52A : FE 01               		CP 01H			; ADRS
    1147/     52C : C8                  		RET Z
    1148/     52D : FE 02               		CP 02H			; DATS
    1149/     52F : C8                  		RET Z
    1150/     530 : E1                  		POP HL			;RUECKKEHRADR. LOESCHEN
    1151/     531 : C3 96 02            		JP ERRDIS
    1152/     534 :                     
    1153/     534 :                     ;--------------------- FREQUENZTABELLE ---------------
    1154/     534 :                     ; erster Wert f. Tonhöhe, zweiter Wert f. konstante Tonlänge
    1155/     534 :                     ; erster ton laut Handbuch Ais
    1156/     534 :                     ; Töne nachgerechnet, stimmt ! -> töne lc-80.xlsx
    1157/     534 :                     ; (laut Zielosko beginnt die Tabelle mit Cis. Das ist falsch! )
    1158/     534 :                     FRQTAB:
    1159/     534 : 70 18               		DEFB 70H, 18h		; 00 Ais
    1160/     536 : 6A 1A               		DEFB 6AH, 1Ah		; 01 H
    1161/     538 : 64 1B               		DEFB 64H, 1Bh		; 02 C'
    1162/     53A : 5E 1D               		DEFB 5EH, 1Dh		; 03 Cis
    1163/     53C : 59 1E               		DEFB 59H, 1Eh		; 04 D
    1164/     53E : 54 20               		DEFB 54H, 20h		; 05 Dis
    1165/     540 : 4F 22               		DEFB 4FH, 22h		; 06 E
    1166/     542 : 4B 24               		DEFB 4BH, 24h		; 07 F
    1167/     544 : 46 26               		DEFB 46H, 26h		; 08 Fis
    1168/     546 : 42 29               		DEFB 42H, 29h		; 09 G
    1169/     548 : 3F 2B               		DEFB 3FH, 2Bh		; 0A Gis
    1170/     54A : 3B 2E               		DEFB 3BH, 2Eh		; 0B A
    1171/     54C : 38 31               		DEFB 38H, 31h		; 0C Ais
    1172/     54E : 35 33               		DEFB 35H, 33h		; 0D H
    1173/     550 : 32 37               		DEFB 32H, 37h		; 0E C'
    1174/     552 : 2F 3A               		DEFB 2FH, 3Ah		; 0F Cis'
    1175/     554 : 2C 3D               		DEFB 2CH, 3Dh		; 10 D'
    1176/     556 : 2A 41               		DEFB 2AH, 41h		; 11 Dis'
    1177/     558 : 27 45               		DEFB 27H, 45h		; 12 E'
    1178/     55A : 25 49               		DEFB 25H, 49h		; 13 F'
    1179/     55C : 23 4D               		DEFB 23H, 4Dh		; 14 Fis'
    1180/     55E : 21 52               		DEFB 21H, 52h		; 15 G'
    1181/     560 : 1F 57               		DEFB 1FH, 57h		; 16 Gis'
    1182/     562 : 1D 5C               		DEFB 1DH, 5Ch		; 17 A'
    1183/     564 : 1B 62               		DEFB 1BH, 62h		; 18 Ais'
    1184/     566 : 1A 67               		DEFB 1AH, 67h		; 19 H'
    1185/     568 : 18 6E               		DEFB 18H, 6Eh		; 1A C''
    1186/     56A : 17 74               		DEFB 17H, 74h		; 1B Cis''
    1187/     56C : 16 7B               		DEFB 16H, 7Bh		; 1C D''
    1188/     56E : 14 82               		DEFB 14H, 82h		; 1D Dis''
    1189/     570 : 13 8A               		DEFB 13H, 8Ah		; 1E E''
    1190/     572 : 12 92               		DEFB 12H, 92h		; 1F F''
    1191/     574 :                     
    1192/     574 :                     ;---------------------- TEXTE ------------------------
    1193/     574 :                     DISP1:				; "OF LC-80"
    1194/     574 : E7                  		DEFB 0E7H		;"0"
    1195/     575 : EF                  		DEFB 0EFH		;"8"
    1196/     576 : 08                  		DEFB 08H		;"-"
    1197/     577 : C6                  		DEFB 0C6H		;"C"
    1198/     578 : C2                  		DEFB 0C2H		;"L"
    1199/     579 : 00                  		DEFB 00H		;" "
    1200/     57A : 00                  		DEFB 00H		;" "
    1201/     57B : 4E                  		DEFB 4EH		;"F"
    1202/     57C : E7                  		DEFB 0E7H		;"O"
    1203/     57D :                     DISP2:				; " USER "
    1204/     57D : 00                  		DEFB 00H		;" "
    1205/     57E : 48                  		DEFB 048H		;"R"
    1206/     57F : CE                  		DEFB 0CEH		;"E"
    1207/     580 : AE                  		DEFB 0AEH		;"S"
    1208/     581 : E3                  		DEFB 0E3H		;"U"
    1209/     582 : 00                  		DEFB 000H		;" "
    1210/     583 :                     DISP3:				; " HALLO "
    1211/     583 : 00                  		DEFB 000H		;" "
    1212/     584 : E7                  		DEFB 0E7H		;"O"
    1213/     585 : C2                  		DEFB 0C2H		;"L"
    1214/     586 : C2                  		DEFB 0C2H		;"L"
    1215/     587 : 6F                  		DEFB 06FH		;"A"
    1216/     588 : 6B                  		DEFB 06BH		;"H"
    1217/     589 :                     DISP4:				;Parameter-Buchstaben (ATCODE-4)
    1218/     589 :                     				;gleichzeitig leere Anzeige
    1219/     589 : 00                  		DEFB 00H		;" "
    1220/     58A : 00                  		DEFB 00H		;" "
    1221/     58B : 00                  		DEFB 00H		;" "
    1222/     58C : 00                  		DEFB 00H		;" "
    1223/     58D :                     				;
    1224/     58D : 00                  		DEFB 00H		;" "
    1225/     58E : 00                  		DEFB 00H		;" "
    1226/     58F : 00                  		DEFB 00H		;" "
    1227/     590 : 00                  		DEFB 00H		;" "
    1228/     591 :                     		                ;TO TAPE
    1229/     591 : 4E                  		DEFB 04EH		;"F"	filename
    1230/     592 : AE                  		DEFB 0AEH		;"S"	startadr
    1231/     593 : CE                  		DEFB 0CEH		;"E"	endadr
    1232/     594 : 00                  		DEFB 00H		;" "
    1233/     595 :                     				;FROM TAPE
    1234/     595 : 4E                  		DEFB 04EH		;"F"	filename
    1235/     596 : 00                  		DEFB 00H		;" "
    1236/     597 : 00                  		DEFB 00H		;" "
    1237/     598 : 00                  		DEFB 00H		;" "
    1238/     599 :                     DISP5:				; " int "
    1239/     599 : 00                  		DEFB 00H		;" "
    1240/     59A : 00                  		DEFB 00H		;" "
    1241/     59B : CA                  		DEFB 0CAH		;"t"
    1242/     59C : 68                  		DEFB 68H		;"n"
    1243/     59D : 21                  		DEFB 21H		;"i"
    1244/     59E : 00                  		DEFB 00H		;" "
    1245/     59F :                     DISP6:				; "rst 38"
    1246/     59F : EF                  		DEFB 0EFH		;"8"
    1247/     5A0 : AD                  		DEFB 0ADH		;"3"
    1248/     5A1 : 00                  		DEFB 00H		;" "
    1249/     5A2 : CA                  		DEFB 0CAH		;"t"
    1250/     5A3 : AE                  		DEFB 0AEH		;"s"
    1251/     5A4 : 48                  		DEFB 48H		;"r"
    1252/     5A5 :                     ERR:				; "error"
    1253/     5A5 : 00                  		DEFB 00H		;" "
    1254/     5A6 : 48                  		DEFB 48H		;"r"
    1255/     5A7 : E8                  		DEFB 0E8H		;"o"
    1256/     5A8 : 48                  		DEFB 48H		;"r"
    1257/     5A9 : 48                  		DEFB 48H		;"r"
    1258/     5AA : CE                  		DEFB 0CEH		;"E"
    1259/     5AB :                     
    1260/     5AB :                     ;--------------------- -
    1261/     5AB :                     ; KEYEXC Funktionstastentabelle
    1262/     5AB :                     ; Aufbau: 2 Byte Adresse, dann Tabelle mit Byte-Offsets
    1263/     5AB :                     ; je nach idx wird Adr+Byte-Offs berechnet und dann diese Routine angesprungen
    1264/     5AB :                     ; das spart vermutlich ein paar Byte gegenüber einer direkten Case-Anweisung
    1265/     5AB :                     ; aber: die zu rufenden Routinen müssen innerhalb von 255 Byte nach der Basis-Routine liegen
    1266/     5AB :                     
    1267/     5AB :                     ; Funktionsgruppe 1 "+","-","EXEC" O. "DATA"
    1268/     5AB :                     KSUFUN:
    1269/     5AB : 4D 01               		DEFW KINC
    1270/     5AD : 00                  		DEFB KINC-KINC		;0 10 "+" 	--> Sprung nach KINC
    1271/     5AE : 05                  		DEFB KDEC-KINC		;1 11 "-"	--> Sprung nach KDEC
    1272/     5AF : 0A                  		DEFB KEXEC-KINC		;2 12 "EXEC"	--> usw.
    1273/     5B0 : 00                  		DEFB 00H                ;3
    1274/     5B1 : 0F                  		DEFB KDATA-KINC		;4 14 "DATA"
    1275/     5B2 : 00                  		DEFB 00H                ;5
    1276/     5B3 : 00                  		DEFB 00H                ;6
    1277/     5B4 : 00                  		DEFB 00H                ;7
    1278/     5B5 :                     ;--------------------- -
    1279/     5B5 :                     ; Funktionsgruppe 2 ADR- ODER TAPE-TASTEN
    1280/     5B5 :                     KFUN:
    1281/     5B5 : 63 01               		DEFW KADRS
    1282/     5B7 : 00                  		DEFB 00H                ;0 18
    1283/     5B8 : 00                  		DEFB KADRS-KADRS	;1 19 ADR "ADRS"
    1284/     5B9 : 00                  		DEFB 00H                ;2 1A
    1285/     5BA : 00                  		DEFB 00H                ;3 1B
    1286/     5BB : 00                  		DEFB 00H                ;4 1C
    1287/     5BC : 00                  		DEFB 00H                ;5 1D
    1288/     5BD : 04                  		DEFB KTAPWR-KADRS	;6 1E ST  "TO TAPE"
    1289/     5BE : 04                  		DEFB KTAPWR-KADRS	;7 1F LD  "FROM TAPE*
    1290/     5BF :                     ;--------------------- -
    1291/     5BF :                     ; die folgenden Tabellen beziehen sich auf ATCODE
    1292/     5BF :                     ; 1-ADRS, 2-DATS, 6-TO TAPE, 7-FROM TAPE
    1293/     5BF :                     
    1294/     5BF :                     ; nach Zifferntaste (nach KHEX)
    1295/     5BF :                     HTAB:
    1296/     5BF : 6B 01               		DEFW HFIX
    1297/     5C1 : 00                  		DEFB HFIX-HFIX		;0 FEHLER
    1298/     5C2 : 16                  		DEFB HAD-HFIX		;1 "ADRS" 	ZIFFER ALS ADRESSE
    1299/     5C3 : 03                  		DEFB HDA-HFIX		;2 		ZIFFER ALS DATUM
    1300/     5C4 : 00                  		DEFB 00H                ;3
    1301/     5C5 : 00                  		DEFB 00H                ;4
    1302/     5C6 : 00                  		DEFB 00H                ;5
    1303/     5C7 : 26                  		DEFB HTAPWR-HFIX	;6 "TO TAPE"	ZIFFER ALS PARAMETER FUER BAND
    1304/     5C8 : 26                  		DEFB HTAPWR-HFIX	;7 "FROM TAPE"	ZIFFER ALS PARAMETER FUER BAND
    1305/     5C9 : 00                  		DEFB 00H		;8
    1306/     5CA : 00                  		DEFB 00H		;9
    1307/     5CB :                     ;--------------------- -
    1308/     5CB :                     ; nach KINC ("+"-TASTE)
    1309/     5CB :                     ITAB:
    1310/     5CB : A1 01               		DEFW IFIX
    1311/     5CD : 00                  		DEFB IFIX-IFIX		;0 BEDIENUNGSFEHLER
    1312/     5CE : 03                  		DEFB ADRADD-IFIX	;1 ANWENDER-PC ERHOEHEN
    1313/     5CF : 03                  		DEFB ADRADD-IFIX	;2 ANWENDER-PC ERHOEHEN
    1314/     5D0 : 00                  		DEFB 00H                ;3
    1315/     5D1 : 00                  		DEFB 00H                ;4
    1316/     5D2 : 00                  		DEFB 00H                ;5
    1317/     5D3 : 0E                  		DEFB TPFUN1-IFIX	;6 BEI "TO TAPE" NAECHSTER PARAMETER
    1318/     5D4 : 0E                  		DEFB TPFUN1-IFIX	;7 BEI "TO TAPE" NAECHSTER PARAMETER
    1319/     5D5 : 00                  		DEFB 00H		;8
    1320/     5D6 : 00                  		DEFB 00H		;9
    1321/     5D7 :                     ;--------------------- -
    1322/     5D7 :                     ; nach KDEC ("-"-TASTE)
    1323/     5D7 :                     DTAB:
    1324/     5D7 : C0 01               		DEFW DFIX
    1325/     5D9 : 00                  		DEFB 00H		;0 BEDIENUNGSFEHLER
    1326/     5DA : 03                  		DEFB ADRDEC-DFIX	;1 ANWENDER-PC ERNIEDRIGEN
    1327/     5DB : 03                  		DEFB ADRDEC-DFIX	;2 ANWENDER-PC ERNIEDRIGEN
    1328/     5DC : 00                  		DEFB 00H                ;3
    1329/     5DD : 00                  		DEFB 00H                ;4
    1330/     5DE : 00                  		DEFB 00H                ;5
    1331/     5DF : 0E                  		DEFB TPTUN2-DFIX	;6 BEI "TO TAPE" VORHERIGER PARAMETER
    1332/     5E0 : 0E                  		DEFB TPTUN2-DFIX	;7 BEI "TO TAPE" VORHERIGER PARAMETER
    1333/     5E1 : 00                  		DEFB 00H		;8
    1334/     5E2 : 00                  		DEFB 00H		;9
    1335/     5E3 :                     ;--------------------- -
    1336/     5E3 :                     ; nach KEXEC ("EXEC"-TASTE)
    1337/     5E3 :                     ETAB:
    1338/     5E3 : DF 01               		DEFW EFIX
    1339/     5E5 : 00                  		DEFB 00H		;0 BEDIENUNGSFEHLER
    1340/     5E6 : 03                  		DEFB ADREXC-EFIX	;1 PROGRAMAUSFUEHRUNG AB USER-PC
    1341/     5E7 : 03                  		DEFB ADREXC-EFIX	;2 PROGRAMAUSFUEHRUNG AB USER-PC
    1342/     5E8 : 00                  		DEFB 00H                ;3
    1343/     5E9 : 00                  		DEFB 00H                ;4
    1344/     5EA : 00                  		DEFB 00H                ;5
    1345/     5EB : 11                  		DEFB EWT-EFIX		;6 UEBERSPIELEN AUF BAND
    1346/     5EC : 47                  		DEFB LOAD-EFIX		;7 DATEN VOM BAND LESEN
    1347/     5ED : 00                  		DEFB 00H		;8
    1348/     5EE : 00                  		DEFB 00H		;9
    1349/     5EF :                     ;----------------- TASTATURTABELLE -------------------
    1350/     5EF :                     KEYTAB:
    1351/     5EF : 12                  		DEFB 12H		; 00  EXECUTE
    1352/     5F0 : 1E                  		DEFB 1EH		; 01  STORE
    1353/     5F1 : 1F                  		DEFB 1FH		; 02  LOAD
    1354/     5F2 : 00                  		DEFB 0			; 03  NICHT BELEGT
    1355/     5F3 : 00                  		DEFB 0			; 04  0
    1356/     5F4 : 01                  		DEFB 1  		; 05  1
    1357/     5F5 : 02                  		DEFB 2  		; 06  2
    1358/     5F6 : 03                  		DEFB 3  		; 07  3
    1359/     5F7 : 04                  		DEFB 4  		; 08  4
    1360/     5F8 : 05                  		DEFB 5  		; 09  5
    1361/     5F9 : 10                  		DEFB 10H		; 0A  +
    1362/     5FA : 07                  		DEFB 7  		; 0B  7
    1363/     5FB : 08                  		DEFB 8  		; 0C  8
    1364/     5FC : 09                  		DEFB 9  		; 0D  9
    1365/     5FD : 0E                  		DEFB 0EH		; 0E  A
    1366/     5FE : 0B                  		DEFB 0BH		; 0F  B
    1367/     5FF : 0C                  		DEFB 0CH		; 10  C
    1368/     600 : 0D                  		DEFB 0DH		; 11  D
    1369/     601 : 0A                  		DEFB 0AH		; 12  E
    1370/     602 : 0F                  		DEFB 0FH		; 13  F
    1371/     603 : 19                  		DEFB 19H		; 14  ADRESS
    1372/     604 : 14                  		DEFB 14H		; 15  DATA
    1373/     605 : 06                  		DEFB 6  		; 16  6
    1374/     606 : 11                  		DEFB 11H		; 17  -
    1375/     607 :                     
    1376/     607 :                     ;----------------------- CODE FUER HEX-ZIFFERN --------
    1377/     607 :                     ; Codierung in 7-Segement-Code
    1378/     607 :                     SEGTAB:
    1379/     607 : E7                  		DEFB 0E7H		; 0  "0"
    1380/     608 : 21                  		DEFB 21H		; 1  "1"
    1381/     609 : CD                  		DEFB 0CDH		; 2  "2"
    1382/     60A : AD                  		DEFB 0ADH		; 3  "3"
    1383/     60B : 2B                  		DEFB 2BH		; 4  "4"
    1384/     60C : AE                  		DEFB 0AEH		; 5  "5"
    1385/     60D : EE                  		DEFB 0EEH		; 6  "6"
    1386/     60E : 25                  		DEFB 25H		; 7  "7"
    1387/     60F : EF                  		DEFB 0EFH		; 8  "8"
    1388/     610 : AF                  		DEFB 0AFH		; 9  "9"
    1389/     611 : 6F                  		DEFB 6FH		; A  "A"
    1390/     612 : EA                  		DEFB 0EAH		; B  "B"
    1391/     613 : C6                  		DEFB 0C6H		; C  "C"
    1392/     614 : E9                  		DEFB 0E9H		; D  "D"
    1393/     615 : CE                  		DEFB 0CEH		; E  "E"
    1394/     616 : 4E                  		DEFB 4EH		; F  "F"
    1395/     617 :                     
    1396/     617 :                     ;---------------------- LIED ------------------------
    1397/     617 :                     ; Lied  "Popcorn" von Hot Butter
    1398/     617 :                     SONG:
    1399/     617 : 12 02               		DEFB 12H, 02h		; E'
    1400/     619 : 20 02               		DEFB 20H, 02h   	
    1401/     61B : 10 02               		DEFB 10H, 02h		; D'
    1402/     61D : 20 02               		DEFB 20H, 02h   	
    1403/     61F : 12 02               		DEFB 12H, 02h		; E'
    1404/     621 : 20 02               		DEFB 20H, 02h   	
    1405/     623 : 0D 02               		DEFB 0DH, 02h		; H
    1406/     625 : 20 02               		DEFB 20H, 02h   	
    1407/     627 : 09 02               		DEFB 09H, 02h		; G
    1408/     629 : 20 02               		DEFB 20H, 02h   	
    1409/     62B : 0D 02               		DEFB 0DH, 02h		; H
    1410/     62D : 20 02               		DEFB 20H, 02h   	
    1411/     62F : 06 02               		DEFB 06H, 02h		; E
    1412/     631 : 20 06               		DEFB 20H, 06h   	
    1413/     633 : 12 02               		DEFB 12H, 02h		; E'
    1414/     635 : 20 02               		DEFB 20H, 02h   	
    1415/     637 : 10 02               		DEFB 10H, 02h		; D'
    1416/     639 : 20 02               		DEFB 20H, 02h   	
    1417/     63B : 12 02               		DEFB 12H, 02h		; E'
    1418/     63D : 20 02               		DEFB 20H, 02h   	
    1419/     63F : 0D 02               		DEFB 0DH, 02h		; H
    1420/     641 : 20 02               		DEFB 20H, 02h   	
    1421/     643 : 09 02               		DEFB 09H, 02h		; G
    1422/     645 : 20 02               		DEFB 20H, 02h   	
    1423/     647 : 0D 02               		DEFB 0DH, 02h		; H
    1424/     649 : 20 02               		DEFB 20H, 02h   	
    1425/     64B : 06 02               		DEFB 06H, 02h		; E
    1426/     64D : 20 06               		DEFB 20H, 06h   	
    1427/     64F : 12 02               		DEFB 12H, 02h		; E'
    1428/     651 : 20 02               		DEFB 20H, 02h   	
    1429/     653 : 14 02               		DEFB 14H, 02h		; Fis'
    1430/     655 : 20 02               		DEFB 20H, 02h   	
    1431/     657 : 15 02               		DEFB 15H, 02h		; G'
    1432/     659 : 20 02               		DEFB 20H, 02h   	
    1433/     65B : 14 02               		DEFB 14H, 02h		; Fis'
    1434/     65D : 20 02               		DEFB 20H, 02h   	
    1435/     65F : 15 02               		DEFB 15H, 02h		; G'
    1436/     661 : 20 02               		DEFB 20H, 02h   	
    1437/     663 : 12 02               		DEFB 12H, 02h		; E'
    1438/     665 : 20 02               		DEFB 20H, 02h   	
    1439/     667 : 14 02               		DEFB 14H, 02h		; Fis'
    1440/     669 : 20 02               		DEFB 20H, 02h   	
    1441/     66B : 12 02               		DEFB 12H, 02h		; E'
    1442/     66D : 20 02               		DEFB 20H, 02h   	
    1443/     66F : 14 02               		DEFB 14H, 02h		; Fis'
    1444/     671 : 20 02               		DEFB 20H, 02h   	
    1445/     673 : 10 02               		DEFB 10H, 02h		; D'
    1446/     675 : 20 02               		DEFB 20H, 02h   	
    1447/     677 : 12 02               		DEFB 12H, 02h		; E'
    1448/     679 : 20 02               		DEFB 20H, 02h   	
    1449/     67B : 10 02               		DEFB 10H, 02h		; D'
    1450/     67D : 20 02               		DEFB 20H, 02h   	
    1451/     67F : 12 02               		DEFB 12H, 02h		; E'
    1452/     681 : 20 02               		DEFB 20H, 02h   	
    1453/     683 : 0D 02               		DEFB 0DH, 02h		; H
    1454/     685 : 20 02               		DEFB 20H, 02h   	
    1455/     687 : 12 04               		DEFB 12H, 04h		; E'
    1456/     689 : 20 06               		DEFB 20H, 06h
    1457/     68B : 80                  		DEFB 80H
    1458/     68C :                     ;-----------------------------------------------------
    1459/     68C :                     
    1460/     68C : =>TRUE              		IF ROM_=1
    1461/     690 :                     		ORG 0690H
    1462/     690 : [1460]              		ENDIF
    1463/     690 :                     
    1464/     690 : =>FALSE             		IF ROM_=2
    1465/     690 :                     		ORG 0A90H
    1466/     690 : [1464]              		ENDIF
    1467/     690 :                     
    1468/     690 :                     ; Registeranzeige
    1469/     690 :                     ; zur Nutzung muss in 2340H JP START2 eingetragen werden 
    1470/     690 :                     
    1471/     690 :                     START2:
    1472/     690 : 22 EC 22            		LD (REGHL),HL		; HL sichern
    1473/     693 : 21 46 07            		LD HL,RETURN		; Ret-Funktion 
    1474/     696 : 22 02 23            		LD (STEPZEI),HL		; festlegen
    1475/     699 :                     STARTST:
    1476/     699 : E1                  		POP HL			; aktuelle RET-Adr 
    1477/     69A : E5                  		PUSH HL			; == Unterbrechungs-Adr.
    1478/     69B : ED 73 FA 22         		LD (REGSP),SP		; SP sichern
    1479/     69F : 31 E4 22            		LD SP,ARBSTA		; Arbeitsstack
    1480/     6A2 : CD 56 07            		CALL REGRET		; Register sichern
    1481/     6A5 : 3A FE 22            		LD A,(AREGST)		; A entspr. anzuzeigendes Register
    1482/     6A8 :                     					; nach Reset = FF -> 0 -> AF
    1483/     6A8 : 2F                  		CPL
    1484/     6A9 :                     DEANZ1:
    1485/     6A9 : FD 21 E6 22         		LD IY,REGRAM		; gesicherte Register
    1486/     6AD :                     DEANZ:					; (DEANZ wird nicht genutzt)
    1487/     6AD : F5                  		PUSH AF			; Registernr
    1488/     6AE : 21 CF 07            		LD HL,REGSYM		; Registernamen
    1489/     6B1 : 85                  		ADD A,L
    1490/     6B2 : 6F                  		LD L,A
    1491/     6B3 : 5E                  		LD E,(HL)		; 2. Zeichen
    1492/     6B4 : 23                  		INC HL
    1493/     6B5 : 56                  		LD D,(HL)		; 1. Zeichen
    1494/     6B6 : ED 53 F2 23         		LD (DATLED),DE		; in Anzeige eintragen
    1495/     6BA : F1                  		POP AF
    1496/     6BB : 16 00               		LD D,0
    1497/     6BD : 5F                  		LD E,A
    1498/     6BE : FD 19               		ADD IY,DE
    1499/     6C0 : FD 5E 00            		LD E,(IY+0)		; lo Register
    1500/     6C3 : FD 56 01            		LD D,(IY+1)		; hi Register
    1501/     6C6 : ED 53 04 23         		LD (AREGIN),DE		; Wert merken f. Edit
    1502/     6CA : 2F                  		CPL
    1503/     6CB : 32 FE 22            		LD (AREGST),A		; Register-Pointer merken
    1504/     6CE :                     DATLOOP:
    1505/     6CE : CD B7 04            		CALL ADRSDP		; Wert eintragen
    1506/     6D1 :                     DAK:
    1507/     6D1 : DD 21 F2 23         		LD IX,DATLED
    1508/     6D5 : CD 5A 04            		CALL DAK1		; Anzeigen + Tastaturabfrage
    1509/     6D8 : FE 10               		CP 10H			; 0..F
    1510/     6DA : 38 14               		JR C,HEXTAS
    1511/     6DC : 28 37               		JR Z, POSTAS		; +
    1512/     6DE : FE 11               		CP 11H			; -
    1513/     6E0 : 28 42               		JR Z,NEGTAS
    1514/     6E2 : FE 12               		CP 12H			; EX
    1515/     6E4 : 28 23               		JR Z,EXTAS
    1516/     6E6 : FE 19               		CP 19H			; ADR
    1517/     6E8 : 28 49               		JR Z,ADRTAS
    1518/     6EA : FE 14               		CP 14H			; DAT
    1519/     6EC : 28 5D               		JR Z,DATANZ
    1520/     6EE : 18 E1               		JR DAK
    1521/     6F0 :                     HEXTAS:
    1522/     6F0 : 21 04 23            		LD HL,AREGIN		; Ziffer in Registerwert
    1523/     6F3 : ED 6F               		RLD			; Tetraden in beiden Byte verschieben
    1524/     6F5 : 23                  		INC HL
    1525/     6F6 : ED 6F               		RLD
    1526/     6F8 : ED 5B 04 23         		LD DE,(AREGIN)		; Wert laden
    1527/     6FC : CD B7 04            		CALL ADRSDP		; in Anzeige eintragen
    1528/     6FF : 21 F4 23            		LD HL,ADRLED
    1529/     702 : 06 04               		LD B,4
    1530/     704 : CD DC 02            		CALL SETPT		; als geändert markieren
    1531/     707 : 18 C8               		JR DAK			; und weiter editieren
    1532/     709 :                     ; mit "EX" Wert in Register übernehmen
    1533/     709 :                     EXTAS:
    1534/     709 : ED 5B 04 23         		LD DE,(AREGIN)		; Wert
    1535/     70D : FD 73 00            		LD (IY+0),E		; in Registerstack
    1536/     710 : FD 72 01            		LD (IY+1),D		; ablegen
    1537/     713 : 18 B9               		JR DATLOOP
    1538/     715 :                     ; "+" nächstes Register
    1539/     715 :                     POSTAS:
    1540/     715 : 3A FE 22            		LD A,(AREGST)		; Register-Pointer
    1541/     718 : 2F                  		CPL
    1542/     719 : FE 16               		CP 16H			; letztes Register erreicht?
    1543/     71B : 38 02               		JR C,MPOS		; nein
    1544/     71D : 3E FE               		LD A,0FEH		; sonst -2 (wieder von vorn beginnen)
    1545/     71F :                     MPOS:
    1546/     71F : 3C                  		INC A			; +2, Doppelregister weiter
    1547/     720 : 3C                  		INC A
    1548/     721 : C3 A9 06            		JP DEANZ1
    1549/     724 :                     ; "-" vorheriges Register
    1550/     724 :                     NEGTAS:
    1551/     724 : 3A FE 22            		LD A,(AREGST)		; Register-Pointer
    1552/     727 : 2F                  		CPL
    1553/     728 : FE 00               		CP 0			; erstes Register erreicht?
    1554/     72A : 20 02               		JR NZ,MNEG		; nein
    1555/     72C : 3E 18               		LD A,18H		; sonst letztes + 2
    1556/     72E :                     MNEG:
    1557/     72E : 3D                  		DEC A			; -2, Doppelregister zurück
    1558/     72F : 3D                  		DEC A
    1559/     730 : C3 A9 06            		JP DEANZ1
    1560/     733 :                     ; mit "ADR" Registeranzeige beenden 
    1561/     733 :                     ADRTAS:
    1562/     733 : 31 E4 22            		LD SP,ARBSTA		; SP auf REGRAM - 2 (wg. CALL)
    1563/     736 : CD 71 07            		CALL REGLAD		; Register wiederherstellen
    1564/     739 : ED 7B FA 22         		LD SP,(REGSP)		; SP restaurieren
    1565/     73D : E1                  		POP HL			; orig. RET-Adr vom Stack
    1566/     73E : 2A FC 22            		LD HL,(REGPC)		; gesicherte aktuelle Adresse
    1567/     741 : E5                  		PUSH HL			; auf Stack
    1568/     742 : 2A 02 23            		LD HL,(STEPZEI)		; RETURN-Funktion
    1569/     745 : E9                  		JP (HL)			; anspringen
    1570/     746 :                     RETURN:
    1571/     746 : 2A EC 22            		LD HL,(REGHL)		; HL restaurieren
    1572/     749 : ED 45               		RETN			; INT-Ende
    1573/     74B :                     ; "DAT" Anzeige aktuelle Adresse und Wert (PC)
    1574/     74B :                     DATANZ:
    1575/     74B : 2A FC 22            		LD HL,(REGPC)		; aktuelle Adresse
    1576/     74E : 7E                  		LD A,(HL)		; Bate an aktueller Adresse
    1577/     74F : EB                  		EX DE,HL
    1578/     750 : CD C3 04            		CALL DADP		; anzeigen
    1579/     753 : C3 CE 06            		JP DATLOOP
    1580/     756 :                     REGRET:					; Register retten
    1581/     756 : 31 FE 22            		LD SP,AREGST
    1582/     759 : E5                  		PUSH HL			; REGPC, orig PC
    1583/     75A : 3B                  		DEC SP			; REGSP, frei für SP
    1584/     75B : 3B                  		DEC SP
    1585/     75C : FD E5               		PUSH IY
    1586/     75E : DD E5               		PUSH IX
    1587/     760 : D9                  		EXX
    1588/     761 : 08                  		EX AF,AF'		;'
    1589/     762 : E5                  		PUSH HL
    1590/     763 : D5                  		PUSH DE
    1591/     764 : C5                  		PUSH BC
    1592/     765 : F5                  		PUSH AF
    1593/     766 : D9                  		EXX
    1594/     767 : 08                  		EX AF,AF'		;'
    1595/     768 : 3B                  		DEC SP
    1596/     769 : 3B                  		DEC SP
    1597/     76A : D5                  		PUSH DE
    1598/     76B : C5                  		PUSH BC
    1599/     76C : F5                  		PUSH AF
    1600/     76D : 31 E2 22            		LD SP,ARBST2
    1601/     770 : C9                  		RET
    1602/     771 :                     REGLAD:					; Register laden
    1603/     771 : 31 E6 22            		LD SP,REGRAM
    1604/     774 : F1                  		POP AF
    1605/     775 : C1                  		POP BC
    1606/     776 : D1                  		POP DE
    1607/     777 : E1                  		POP HL
    1608/     778 : D9                  		EXX
    1609/     779 : 08                  		EX AF,AF'		;'
    1610/     77A : F1                  		POP AF
    1611/     77B : C1                  		POP BC
    1612/     77C : D1                  		POP DE
    1613/     77D : E1                  		POP HL
    1614/     77E : D9                  		EXX
    1615/     77F : 08                  		EX AF,AF'		;'
    1616/     780 : DD E1               		POP IX
    1617/     782 : FD E1               		POP IY
    1618/     784 : 31 E2 22            		LD SP,ARBST2
    1619/     787 : C9                  		RET
    1620/     788 :                     
    1621/     788 :                     		db 8 dup (?)
    1622/     790 :                     
    1623/     790 :                     ;-----------------------------------------------------
    1624/     790 :                     
    1625/     790 :                     		;org 0B90h
    1626/     790 :                     ; Stepfunktion
    1627/     790 :                     ; zur Nutzung muss in 2340H JP STEPUP eingetragen werden 
    1628/     790 :                     
    1629/     790 :                     STEPUP:
    1630/     790 : 2A F8 23            		LD HL,(USERPC)		; aktueller USER-PC
    1631/     793 : E5                  		PUSH HL			; merken
    1632/     794 : 21 C2 07            		LD HL,INTROUT		; Int-Routine
    1633/     797 : 22 00 23            		LD (INTTAF),HL		; in Int-Tabelle schreiben
    1634/     79A : 3E E9               		LD A,0E9H		; cpl 16h
    1635/     79C : 32 FE 22            		LD (AREGST),A		; Register-Pointer auf "PC"
    1636/     79F : 21 A5 07            		LD HL,CTCPRG		; RET-Routine f. "ADR" 
    1637/     7A2 : 22 02 23            		LD (STEPZEI),HL		; (Ende Registeranzeige)
    1638/     7A5 :                     ; wird bei Start der Step-Funktion und dann bei Step (ADR) aufgerufen
    1639/     7A5 :                     CTCPRG:
    1640/     7A5 : F5                  		PUSH AF
    1641/     7A6 : 2A EC 22            		LD HL,(REGHL)		; HL merken f. INTROUT
    1642/     7A9 : 3E 00               		LD A,INTVEK		; INT-VECT. FUER CTC (00)
    1643/     7AB : D3 EC               		OUT (CTC0),A
    1644/     7AD : 3E 85               		LD A,85H		;Steuerwort
    1645/     7AF :                     					;EI, Zeitgebermode
    1646/     7AF : D3 EC               		OUT (CTC0),A
    1647/     7B1 : 3E 04               		LD A,04H		;ZK Zeitkonstante, 1 Befehl (4 Takte)
    1648/     7B3 : D3 EC               		OUT (CTC0),A
    1649/     7B5 : ED 5E               		IM 2
    1650/     7B7 : 3E 23               		LD A,HIINT		; Hi-Adr. INT-VECT. (23)
    1651/     7B9 : ED 47               		LD I,A
    1652/     7BB : C6 00               		ADD A,0
    1653/     7BD : FB                  		EI
    1654/     7BE : 00                  		NOP
    1655/     7BF : F1                  		POP AF
    1656/     7C0 : ED 4D               		RETI
    1657/     7C2 :                     ; CTC wirft INT beim nächsten USER-Befehl
    1658/     7C2 :                     ; INTROUT wird direkt danach aufgerufen 
    1659/     7C2 :                     INTROUT:
    1660/     7C2 : F3                  		DI
    1661/     7C3 : F5                  		PUSH AF
    1662/     7C4 : 3E 03               		LD A,03H
    1663/     7C6 : D3 EC               		OUT (CTC0),A		; INT aus
    1664/     7C8 : F1                  		POP AF
    1665/     7C9 : 22 EC 22            		LD (REGHL),HL		; HL restaurieren
    1666/     7CC : C3 99 06            		JP STARTST		; ab zur Registeranzeige
    1667/     7CF :                     
    1668/     7CF :                     ;-----------------------------------------------------
    1669/     7CF :                     REGSYM:					; Reihenfolge passend zu Registerstack REGRAM ff.
    1670/     7CF : 4E                  		DEFB 4EH		; "F"
    1671/     7D0 : 6F                  		DEFB 6FH		; "A"
    1672/     7D1 : C6                  		DEFB 0C6H		; "C"
    1673/     7D2 : EA                  		DEFB 0EAH		; "B"
    1674/     7D3 : CE                  		DEFB 0CEH		; "E"
    1675/     7D4 : E9                  		DEFB 0E9H		; "D"
    1676/     7D5 : C2                  		DEFB 0C2H		; "L"
    1677/     7D6 : 6B                  		DEFB 06BH		; "H"
    1678/     7D7 : 5E                  		DEFB 05EH		; "F."
    1679/     7D8 : 7F                  		DEFB 07FH		; "A."
    1680/     7D9 : D6                  		DEFB 0D6H		; "C."
    1681/     7DA : FA                  		DEFB 0FAH		; "B."
    1682/     7DB : DE                  		DEFB 0DEH		; "E."
    1683/     7DC : F9                  		DEFB 0F9H		; "D."
    1684/     7DD : D2                  		DEFB 0D2H		; "L."
    1685/     7DE : 7B                  		DEFB 07BH		; "H."
    1686/     7DF : 4A                  		DEFB 04AH		; "X"
    1687/     7E0 : 20                  		DEFB 020H		; "i"
    1688/     7E1 : AB                  		DEFB 0ABH		; "Y"
    1689/     7E2 : 20                  		DEFB 020H		; "i"
    1690/     7E3 : 4F                  		DEFB 04FH		; "P"
    1691/     7E4 : AE                  		DEFB 0AEH		; "S"
    1692/     7E5 : C6                  		DEFB 0C6H		; "C"
    1693/     7E6 : 4F                  		DEFB 04FH		; "P"
    1694/     7E7 :                     
    1695/     7E7 : =>TRUE              		IF ROM_=1
    1696/     7E7 : 5B                  		DEFB 05BH		;PRUEFSUMMENDIFFERENZ
    1697/     7E8 : [1695]              		ENDIF
    1698/     7E8 :                     
    1699/     7E8 : =>FALSE             		IF ROM_=2
    1700/     7E8 :                     		DEFB 023H		;PRUEFSUMMENDIFFERENZ
    1701/     7E8 : [1699]              		ENDIF
    1702/     7E8 :                     
    1703/     7E8 :                     ;---------------------------------------------------
    1704/     7E8 : =>TRUE              		IF ROM_=1
    1705/     7FF :                     		ORG 07FFH
    1706/     7FF : A1                  		DEFB 0A1H		;PRUEFSUMME FUER 1-ROM-VARIANTE
    1707/     800 : [1704]              		ENDIF
    1708/     800 :                     
    1709/     800 : =>FALSE             		IF ROM_=2
    1710/     800 :                     		ORG 0BFFH
    1711/     800 :                     		DEFB 071H		;PRUEFSUMME FUER 2-ROM-VARIANTE
    1712/     800 : [1709]              		ENDIF
    1713/     800 :                     
    1714/     800 :                     
    1715/     800 :                     ;***************************************************
    1716/     800 :                     ;			RAM-ZELLEN
    1717/     800 :                     
    1718/    22E2 :                     			ORG 22E2H
    1719/    22E2 :                     
    1720/    22E2 :                     ARBST2:		DB 2 dup (?)		; Arbeitsstack2 Registeranzeige
    1721/    22E4 :                     ARBSTA:		Db 2 dup (?)		; Arbeitsstack Registeranzeige
    1722/    22E6 :                     REGRAM:		Db 2 dup (?)		; AF
    1723/    22E8 :                     		Db 2 dup (?)		; BC
    1724/    22EA :                     		Db 2 dup (?)		; DE
    1725/    22EC :                     REGHL:		Db 2 dup (?)		; HL
    1726/    22EE :                     		Db 2 dup (?)		; AF'
    1727/    22F0 :                     		Db 2 dup (?)		; BC'
    1728/    22F2 :                     		Db 2 dup (?)		; DE'
    1729/    22F4 :                     		Db 2 dup (?)		; HL'
    1730/    22F6 :                     		Db 2 dup (?)		; IX
    1731/    22F8 :                     		Db 2 dup (?)		; IY
    1732/    22FA :                     REGSP:		Db 2 dup (?)		; SP
    1733/    22FC :                     REGPC:		Db 2 dup (?)		; PC
    1734/    22FE :                     AREGST:		Db 2 dup (?)		; Registerstack
    1735/    2300 :                     			; org 2300h
    1736/    2300 :                     INTTAF:		Db 2 dup (?)		; INTROUT
    1737/    2302 :                     STEPZEI:	Db 2 dup (?)		; RET-Routine nach Unterbrechung
    1738/    2304 :                     AREGIN:		Db 2 dup (?)		; Wert anzuzeigendes Register
    1739/    2306 :                     
    1740/    2306 :                     ; RAM	2000H
    1741/    2306 :                     ; RST1:	2308H
    1742/    2306 :                     ; RST2:	2310H
    1743/    2306 :                     ; RST3:	2318H
    1744/    2306 :                     ; RST4:	2320H
    1745/    2306 :                     ; RST5:	2328H
    1746/    2306 :                     ; RST6:	2330H
    1747/    2306 :                     ; RST7:	2338H
    1748/    2306 :                     ; RST8:	2338H	; RSTUP STANDARD-RST38-PROG.
    1749/    2306 :                     ; NMI:	2340H	; NMIUP STANDARD-NMI-PROG.
    1750/    2306 :                     
    1751/    23EA :                     		ORG 23EAH
    1752/    23EA :                     
    1753/    23EA : =23EAH              SPINI		EQU $			;ANF.WERT FUER SP
    1754/    23EA :                     TAPDIS:		Db 1 dup(?)		;DARZUSTELLENDES ZEICHEN BEI LOAD
    1755/    23EB :                     FILNAME:	Db 2 dup(?)		;NAME DES ZU UEBERTR. PROG.
    1756/    23ED :                     STARTADR: 	Db 2 dup(?)		; filename+2
    1757/    23EF :                     ENDADRH:	Db 2 dup(?)		; filename+4
    1758/    23F1 :                     CHKSUMH:	Db 1 dup(?)		; filename+6
    1759/    23F2 :                     DATLED:		Db 2 dup(?)		;DATEN-ANZ.
    1760/    23F4 :                     ADRLED:		Db 4 dup(?)		;ADR.-ANZ.
    1761/    23F8 :                     USERPC:		Db 2 dup(?)		;ADRESSE
    1762/    23FA :                     ATFLAG:		Db 1 dup(?)		; Aktionstastenflag, Kdo-Parametercode 0..3
    1763/    23FB :                     					; ADRS, TO TAPE, FROM TAPE
    1764/    23FB :                     ATCODE:		Db 1 dup(?)		; Aktionstastencode
    1765/    23FC :                     					; 1-ADRS, 2-DATS, 6-TO TAPE, 7-FROM TAPE
    1766/    23FC :                     INIFLAG:	Db 1 dup(?)		;INI-CODE, 80h-bereits initialisiert
    1767/    23FD :                     FUFEFLAG: 	Db 1 dup(?)		;FUNKTIONS- UND FEHLERFLAG
    1768/    23FE :                     					; Bit 0=1 Funktionstaste, Bit7=1 Fehler
    1769/    23FE :                     FILE2:		Db 2 dup(?)		;NAME DES ZU LESENDEN PROG.
    1770/    2400 :                     
    1771/    2400 :                     ;*****************************************************
    1772/    2400 :                     	END
  • lc80/programme/lc80.txt
  • Zuletzt geändert: 2022/08/02 10:08
  • von volkerp