CP/M RMAC ASSEM 1.1	#001	PROF-80 MONITOR VERSION 1.7

                ;******************************************************************
                ;***                                                            ***
                ;***  PROF-80 Monitor Version: 1.7                              ***
                ;***                                                            ***
                ;***  letzte Aenderung am: 29.02.1988      (c) Joachim Hanst    ***
                ;***                                                            ***
                ;******************************************************************
                ;
                		TITLE	'PROF-80 MONITOR VERSION 1.7'
                ;
                ;
                ;
                		MACLIB	Z80
                		MACLIB	CDEF	;BENUTZE CDEF.LIB FUER ALLE C-SYSTEM MODULE
                ;
 0007 =         BELL		EQU	07H
 002D =         CNGPRMT		EQU	'-'
                ;
                ;
 0000           		ORG     EPROM
                MONITOR:
                		;SPRUNGVEKTOR FUER MONITOR SERVICE-ROUTINEN
                		;
 0000 C3CB08    		JMP	INIT		;MONITOR-EINGANG NACH RESET
 0003 C3E600    		JMP	START		;MONITOR WARM-START
 0006 C33CFF    CS		JMP	UMLEIT$CONST	;CONSOLEN STATUS,EIN-UND AUSGABE
 0009 C34AFF    CI		JMP	UMLEIT$CONIN	;GEHEN ERST UEBER SPRUNG IM RAM
 000C C34DFF    CO		JMP	UMLEIT$CONOUT	;AUF IHRE VERTEILER
 000F C3A514    		JMP	SETSEC$CNT	;SETZE ANZAHL DER SEKTOREN
 0012 C3C714    		JMP	BOOTERR		;DRUCKE FEHLERMELDUNG
 0015 C35113    		JMP	SETCMDT		;SETZE CMDTAB ENTSPRECHEND TEST
 0018 C31E15    		JMP	RECAL		;SETZE AUSGEWAEHLETES DRIVE AUF TRACK 0
 001B C3AA14    		JMP	SELDSK		;WAEHLE DRIVE AUS
 001E C3AF14    		JMP	SETTRK		;SETZE SPUR FUER AUSGEWAEHLTES DRIVE
 0021 C3B414    		JMP	SETSEC		;SETZE SEKTOR FUER AUSGEWAEHLTES DRIVE
 0024 C3B914    		JMP	SETDMA		;SETZE DMA ADRESSE FUER READ/WRITE
 0027 C37017    		JMP	READ		;LESE DISK
 002A C36817    		JMP	WRITE		;SCHREIBE DISK
 002D C3E600    		JMP	START		;IN ALTEN VERSIONEN WAR HIER GETMINIMAX
 0030 C3E600    		JMP	START		;
                ;
 0033 C34810    		JMP	CONST		;CONSOLEN STATUS-VERTEILER
 0036 7C6D      SERNR		DW	28028		;SERIEN NUMMER
 0038 C3D700    RSTART7		JMP	RST$VERTEILER	;RST 7 EINSPRUNG (MUSS 38H SEIN)
 003B C35810    		JMP	CONIN		;CONSOLEN EINGABE-VERTEILER
 003E C36810    		JMP	CONOUT		;CONSOLEN AUSGABE-VERTEILER
 0041 C34B18    		JMP	TEST		;TESTE DISK-FORMAT
 0044 C3C416    		JMP	MOTO		;WARTE AUF READY UND GEBE DISK-BEFEHL
 0047 C33F17    		JMP	CMFD		;SENDE DISK-BEFEHL OHNE READY
 004A C3EB15    		JMP	RESULT		;ERGEBNISPHASE DES UPD 765
 004D C38715    		JMP	SEEK		;POSITIONIERE AUF SPUR
 0050 C35717    		JMP	NEXT		;LESE EIN RESULT-BYTE AUS UPD 765
 0053 C38312    		JMP	MULTIP		;MULTIPLIKATION
 0056 C3E600    		JMP	START		;DIVISION WURDE ENTFERNT
 0059 C3530D    		JMP	INT$SERVICE	;EINLESEN EINES ZEICHENS NACH INT.
 005C C3AE0C    		JMP	GRAFIN		;VIDEO KARTE EINGABE
CP/M RMAC ASSEM 1.1	#002	PROF-80 MONITOR VERSION 1.7

 005F C3B70C    		JMP	GRAFOUT		;VIDEO KARTE AUSGABE
 0062 C39C0C    		JMP	GRAFIST		;VIDEO KARTE EIN STATUS
 0065 17        VERSIONNR	DB	17H		;VERSIONS NUMMER
 0066 C326FF    		JMP	UMLEIT$NMI	;SPRUNG AUF NMI ROUTINE
 0069 C3A50C    		JMP	GRAFOST		;VIDEO KARTE AUS STATUS
 006C C3070D    		JMP	SOFTIN		;SOFT SCHNITTSTELLE EINGABE
 006F C3C10C    		JMP	SOFTOUT		;SOFT SCHNITTSTELLE AUSGABE
 0072 C3A60D    		JMP	SOFTIST		;SOFT SCHNITTSTELLE EIN STATUS
 0075 C3C20D    		JMP	SOFTOST		;SOFT SCHNITTSTELLE AUS STATUS
 0078 C3B90F    USER1IN		JMP	SAIN		;UNIO-SIO-A EINGABE
 007B C3A80F    USER1OUT	JMP	SAOUT		;UNIO-SIO-A AUSGABE
 007E C3C10F    USER1IST	JMP	SAIST		;UNIO-SIO-A EIN STATUS
 0081 C3B10F    USER1OST	JMP	SAOST		;UNIO-SIO-A AUS STATUS
 0084 C3DA0F    USER2IN		JMP	SBIN		;UNIO-SIO-B EINGABE
 0087 C3C90F    USER2OUT	JMP	SBOUT		;UNIO-SIO-B AUSGABE
 008A C3E20F    USER2IST	JMP	SBIST		;UNIO-SIO-B EIN STATUS
 008D C3D20F    USER2OST	JMP	SBOST		;UNIO-SIO-B AUS STATUS
 0090 C9        USERINIT	RET			;BENUTZER INITIALISIERUNG
 0091 00        		NOP			;
 0092 00        		NOP			;
 0093 C31A19    		JMP	DISKERR		;FLOPPY-FEHLERMELDUNG
 0096 C3D40D    		JMP	SOFTPRNTOUT	;SIMPLEX SCHNITTSTELLE
 0099 C3CB0D    		JMP	SOFTPRNTOST	;SIMPLEX BEREIT
 009C C3A01A    		JMP	SET$PHYS$TIME	;SETZE ZEIT
 009F C3BE1A    		JMP	READ$PHYS$TIME	;LESE ZEIT
 00A2 C3E01A    		JMP	SET$SHIFT	;SETZE SHIFT-REGISTER
 00A5 C35712    		JMP	SET$DUPLEX$BAUD	;SETZE BAUDRATE DUPLEX
 00A8 C36D12    		JMP	SET$SIMPLEX$BAUD;SETZE BAUDRATE SIMPLEX
 00AB C3DE14    		JMP	SPECD		;SETZE DISKPARAMETER
                					;
                					;DIE NACHFOLGENDEN DATEN WERDEN
                					;NACH EINEM RESET IN DIE
                					;SYSTEMPAGE UEBERNOMMEN.
                					;DIE DATEN BEFINDEN SICH AB VERS 1.4
                					;IMMER AN DEN GLEICHEN EPROM
                					;ADRESSEN, SO DASS SIE VOM
                					;BENUTZER LEICHT GEPATCHT WERDEN
                					;KOENNEN.
                					;
 00AE AFF1      XSPECD$WORD	DW	HLOS*256+256+SRTS*16+HUTS	;STEPRATE, HLT, HUT
                					;DIESE DATEN GEBEN DIE DEFAULT
                					;EINSTELLUNG AN, SIE WERDEN DURCH
                					;DEN U-BEFEHL UEBERDECKT
 00B0 00        XSEEKNR		DB	000H		;DOUBLESTEPVEKTOR
 00B1 FF        XREADY$BYTE	DB	0FFH		;READYBYTE KANN VORDEFINIERT WERDEN.
 00B2 10        XTE$TIME	DB	010H		;WARTEZEIT NACH WRITE-DISK (IN 100 US)
 00B3 03        XPRNT$BAUD	DB	003H		;BAUDRATE SIMPLEX
 00B4 03        STIBAUD		DB	003H		;BAUDRATE UNIO-STI
 00B5 00        XSTEP$WAIT	DB	000H		;WARTEZEIT VOR STEP WENN MOTOR AUS WAR
                					;
                					;SPRUNGVEKTOR FORTSETZUNG
 00B6 C3EA0F    CENT1OUT	JMP	C1OUT		;
 00B9 C3FC0F    CENT1OST	JMP	C1OST		;
 00BC C30510    CENT2OUT	JMP	C2OUT		;
 00BF C31710    CENT2OST	JMP	C2OST		;
 00C2 C3980F    STIIN		JMP	STIN		;
CP/M RMAC ASSEM 1.1	#003	PROF-80 MONITOR VERSION 1.7

 00C5 C3870F    STIOUT		JMP	STOUT		;
 00C8 C3A00F    STIIST		JMP	STIST		;
 00CB C3900F    STIOST		JMP	STOST		;
 00CE C3BD0E    STIINIT		JMP	STINIT		;
 00D1 C3310F    SIOAINIT	JMP	SAINIT		;
 00D4 C35C0F    SIOBINIT	JMP	SBINIT		;
                ;
                ;
                ;
                RST$VERTEILER:
                	;PRUEFT OB INTERRUPT-BETRIEB DER SOFT-SCHNITTSTELLE
                	;WENN NEIN, DANN SPRUNG ZUM MONITOR, SONST EINLESEN
                	;DES SERIELLEN ZEICHENS
                	;
 00D7 F5        	PUSH	PSW		;RETTE AKKU
 00D8 3A13FF    	LDA	IO$JUMPERBYTE	;IST INT.-BETRIEB
 00DB 3D        	DCR	A		;
                	JRNZ	RST$V1		;SPRUNG WENN KEIN INT.-BETRIEB
 00DC+2004      	DB	20H,RST$V1-$-1
 00DE F1        	POP	PSW		;
 00DF C3530D    	JMP	INT$SERVICE	;SPRUNG ZUR INTERUPTROUTINE
 00E2 F1        RST$V1	POP	PSW		;SPRUNG ZUM MONITOR
 00E3 C3E600    	JMP	START		;
                ;
                ;	
                ;
                START: 
                ;----------------------------------------------ANFANG REGISTER RETTEN-----
 00E6 22FAFE    	SHLD	LSAVE
 00E9 E1        	POP	H
 00EA 22FCFE    	SHLD	PSAVE
                	SSPD	SSAVE	;RETTE STACKPOINTER
 00ED+ED73      	DB	0EDH,73H
 00EF+FEFE      	DW	SSAVE
 00F1 31FAFE    	LXI	SP,LSAVE;JETZT RETTEN DURCH PUSHBEFEHLE MOEGLICH
 00F4 F5        	PUSH	PSW
 00F5 C5        	PUSH	B
 00F6 D5        	PUSH	D
                	PUSHIX	;ZUSAETZLICH Z80 REGISTER
 00F7+DDE5      	DB	0DDH,0E5H
                	PUSHIY
 00F9+FDE5      	DB	0FDH,0E5H
                	EXAF
 00FB+08        	DB	08H
                	EXX	;SCHALTE REGISTER  UM
 00FC+D9        	DB	0D9H
 00FD F5        	PUSH	PSW
 00FE C5        	PUSH	B
 00FF D5        	PUSH	D
 0100 E5        	PUSH	H
                	EXX	;REGISTER ZURUECK SCHALTEN
 0101+D9        	DB	0D9H
                	EXAF
 0102+08        	DB	08H
                	LDAI	;SAVE I UND R REGISTER
 0103+ED57      	DB	0EDH,57H
CP/M RMAC ASSEM 1.1	#004	PROF-80 MONITOR VERSION 1.7

 0105 47        	MOV	B,A
                	LDAR
 0106+ED5F      	DB	0EDH,5FH
 0108 4F        	MOV	C,A
 0109 C5        	PUSH	B
                ;--------------------------------------------------ENDE REGISTER RETTEN----
                ;
                ;
 010A 21811C    	LXI	H,SGNON		;GEBE MONITOR-MELDUNG AUS
 010D CDBB10    	CALL	SOUT		;
                				;				
                GETCM: 				;
 0110 21E6FE    	LXI	H,MSTAK		;
 0113 F9        	SPHL			;
 0114 0E3A      	MVI	C,':'		;
 0116 CDCE10    	CALL	ECHO		;
                GTC03: 				;
 0119 CDFD10    	CALL	GETCH1		;
 011C CDCE10    	CALL	ECHO		;
 011F 51        	MOV	D,C		;SAVE COMMAND
 0120 21941C    	LXI	H,CMDMSG	;ZEIGE AUF TEXT
 0123 7A        GTC01	MOV	A,D		;
 0124 BE        	CMP	M		;GLEICH
                	JRZ	GTC04		;
 0125+280E      	DB	28H,GTC04-$-1
 0127 23        GTC02	INX	H		;
 0128 7E        	MOV	A,M		;GLEICH 00H
 0129 FE00      	CPI	0		;
 012B CAE710    	JZ	ERROR		;DANN FEHLER
 012E FE24      	CPI	'$'		;
                	JRNZ	GTC02		;SUCHE $
 0130+20F5      	DB	20H,GTC02-$-1
 0132 23        	INX	H		;VERGLEICHE NAECHSTES KOMMANDO
                	JR	GTC01		;
 0133+18EE      	DB	18H,GTC01-$-1
 0135 23        GTC04	INX	H		;GEFUNDEN GEBE AUS
 0136 CDBB10    	CALL	SOUT		;
 0139 7A        	MOV	A,D		;
 013A 4A        	MOV	C,D		;
 013B 011400    	LXI 	B,NCMDS		;C ENTHAELT SCHL.U.INDEXZAEHLER
 013E 21F01D    	LXI	H,CTAB		;
                GTC05:				;
 0141 BE        	CMP	M		;
 0142 CA4D01    	JZ	GTC10		;
 0145 23        	INX	H		;
 0146 0D        	DCR	C		;
 0147 C24101    	JNZ	GTC05		;
 014A C3E710    	JMP	ERROR		;
                GTC10:				;
 014D 21C61D    	LXI	H,CADR		;
 0150 09        	DAD	B		;
 0151 09        	DAD	B		;
 0152 7E        	MOV	A,M		;
 0153 23        	INX	H		;
 0154 66        	MOV	H,M		;
 0155 6F        	MOV	L,A		;
CP/M RMAC ASSEM 1.1	#005	PROF-80 MONITOR VERSION 1.7

 0156 E9        	PCHL			;
                ;
                CRGETCM:
 0157 CDC610    	CALL	CROUT
                	JR	GETCM
 015A+18B4      	DB	18H,GETCM-$-1
                ;
                ;
                ;
                DCMD:
 015C CD1111    	CALL	GETHX		;LESE STARTADRESSE
 015F 60        	MOV	H,B		;
 0160 69        	MOV	L,C		;
 0161 7A        	MOV	A,D		;
                	JRC	DCM30		;
 0162+3810      	DB	38H,DCM30-$-1
 0164 FE0D      	CPI	0DH		;
 0166 2A09FF    	LHLD	DISPADR		;
                	JRNZ	DCM33		;SPRUNG WENN NOCH ENDADRESSE KOMMT
 0169+200D      	DB	20H,DCM33-$-1
 016B 11FF00    DCM31	LXI	D,00FFH		;KEINE ENDADRESSE, 100H WEITER
 016E E5        	PUSH	H		;SAVE ANFAANG
 016F 19        	DAD	D		;
 0170 EB        	XCHG			;
 0171 E1        	POP	H		;
                	JR	DCM05		;AUSGABE KANN BEGINNEN
 0172+1816      	DB	18H,DCM05-$-1
 0174 FE0D      DCM30	CPI	0DH		;
                	JRZ	DCM31		;KEINE ENDADRESSE
 0176+28F3      	DB	28H,DCM31-$-1
 0178 CD1111    DCM33	CALL	GETHX		;LESE ZWEITE ADRESSE
 017B 7A        	MOV	A,D		;
 017C FE0D      	CPI	0DH		;
 017E C2E710    	JNZ	ERROR		;
 0181 50        	MOV	D,B		;
 0182 59        	MOV	E,C		;
 0183 CDCF11    	CALL	HILO		;
                	JRNC	DCM05		;HL>DE
 0186+3002      	DB	30H,DCM05-$-1
 0188 54        	MOV	D,H		;
 0189 5D        	MOV	E,L		;
                DCM05:				;
 018A CDC610    	CALL	CROUT		;
 018D CD3212    	CALL	HLOUT		;
 0190 0600      	MVI	B,000H		;ZAEHLER FUER ASCII AUSGABE
                DCM10:				;
 0192 04        	INR	B		;EIN ZEICHEN WEITER
 0193 0E20      	MVI	C,' '		;
 0195 CDCE10    	CALL	ECHO		;
 0198 7E        	MOV	A,M		;
 0199 CD3712    	CALL	NMOUT		;
 019C CD9010    	CALL	BREAK		;
 019F DAA801    	JC	DCM12		;
 01A2 CDCF11    	CALL	HILO		;
 01A5 D2B501    	JNC	DCM15		;
                DCM12: 				;
CP/M RMAC ASSEM 1.1	#006	PROF-80 MONITOR VERSION 1.7

 01A8 23        	INX	H		;
 01A9 CDC101    	CALL	DCM20		;
 01AC CDC610    	CALL	CROUT		;
 01AF 2209FF    	SHLD	DISPADR		;
 01B2 C31001    	JMP	GETCM		;
                DCM15: 				;
 01B5 23        	INX	H		;
 01B6 7D        	MOV	A,L		;
 01B7 E60F      	ANI	0FH		;
 01B9 C29201    	JNZ	DCM10		;
 01BC CDC101    	CALL	DCM20		;
                	JR	DCM05		;
 01BF+18C9      	DB	18H,DCM05-$-1
                				;
 01C1 D5        DCM20	PUSH	D		;SAVE D
 01C2 E5        	PUSH	H		;SAVE H
 01C3 0E20      	MVI	C,' '		;
 01C5 CD0C00    	CALL	CO		;
 01C8 0E3E      	MVI	C,'>'		;
 01CA CD0C00    	CALL	CO		;
 01CD 48        	MOV	C,B		;
 01CE 2B        DCM23	DCX	H		;
                	DJNZ	DCM23		;
 01CF+10FD      	DB	10H,DCM23-$-1
 01D1 41        	MOV	B,C		;
 01D2 7E        DCM21	MOV	A,M		;
 01D3 FE20      	CPI	20H		;
                	JRC	DCM22		;
 01D5+3806      	DB	38H,DCM22-$-1
 01D7 FE7F      	CPI	07FH		;
                	JRNC	DCM22		;
 01D9+3002      	DB	30H,DCM22-$-1
                	JR	DCM24		;
 01DB+1802      	DB	18H,DCM24-$-1
 01DD 3E2E      DCM22	MVI	A,'.'		;DEFAULT FOR NON ASCII
 01DF 4F        DCM24	MOV	C,A		;
 01E0 CD0C00    	CALL	CO		;
 01E3 23        	INX	H		;
                	DJNZ	DCM21		;
 01E4+10EC      	DB	10H,DCM21-$-1
 01E6 E1        	POP	H		;
 01E7 D1        	POP	D		;
 01E8 C9        	RET			;
                ;
                ;
                ;
                GCMD: 
 01E9 CD1111    	CALL	GETHX
 01EC D2FE01    	JNC	GCM05
 01EF 7A        	MOV	A,D
 01F0 FE0D      	CPI	0DH
 01F2 C2E710    	JNZ	ERROR
 01F5 21FCFE    	LXI	H,PSAVE
 01F8 71        	MOV	M,C
 01F9 23        	INX	H
 01FA 70        	MOV	M,B
CP/M RMAC ASSEM 1.1	#007	PROF-80 MONITOR VERSION 1.7

 01FB C30402    	JMP	GCM10
                GCM05: 
 01FE 7A        	MOV	A,D
 01FF FE0D      	CPI	0DH
 0201 C2E710    	JNZ	ERROR
                GCM10: 
 0204 C32A13    	JMP	RSTTF
                ;
                ;
                ;
                MCMD: 
 0207 0E03      	MVI	C,3
 0209 CD8A11    	CALL	GETNM
 020C C1        	POP	B
 020D E1        	POP	H
 020E D1        	POP	D
                MCM05:
 020F E5        	PUSH	H
 0210 62        	MOV	H,D
 0211 6B        	MOV	L,E
 0212 7E        	MOV	A,M
 0213 60        	MOV	H,B
 0214 69        	MOV	L,C
 0215 77        	MOV	M,A
 0216 03        	INX	B
 0217 78        	MOV	A,B
 0218 B1        	ORA	C
 0219 CA1001    	JZ	GETCM
 021C 13        	INX	D
 021D E1        	POP	H
 021E CDCF11    	CALL	HILO
 0221 D21001    	JNC	GETCM
 0224 C30F02    	JMP	MCM05
                ;
                ;
                ;
                SCMD: 
 0227 CD1111    	CALL	GETHX
 022A C5        	PUSH	B
 022B E1        	POP	H
                SCM05: 
 022C 7A        	MOV	A,D
 022D FE20      	CPI	' '
 022F CA3702    	JZ	SCM10
 0232 FE2C      	CPI	','
 0234 C21001    	JNZ	GETCM
                SCM10:
 0237 7E        	MOV	A,M
 0238 CD3712    	CALL	NMOUT
 023B 0E2D      	MVI	C,CNGPRMT
 023D CDCE10    	CALL	ECHO
 0240 CD1111    	CALL	GETHX
 0243 D24702    	JNC	SCM15
 0246 71        	MOV	M,C
                SCM15:
 0247 23        	INX	H
CP/M RMAC ASSEM 1.1	#008	PROF-80 MONITOR VERSION 1.7

 0248 C32C02    	JMP	SCM05
                ;
                ;
                ;
                XCMD: 
 024B CD0A11    	CALL	GETCH
 024E 4F        	MOV	C,A
 024F CDCE10    	CALL	ECHO
 0252 79        	MOV	A,C
 0253 FE0D      	CPI	0DH
 0255 C25E02    	JNZ	XCM05
 0258 CDD712    	CALL	REGDS
 025B C31001    	JMP	GETCM
                XCM05: 
 025E 4F        	MOV	C,A
 025F CD1313    	CALL	RGADR
 0262 C5        	PUSH	B
 0263 E1        	POP	H
 0264 0E20      	MVI	C,' '
 0266 CDCE10    	CALL	ECHO
 0269 79        	MOV	A,C
 026A 3203FF    	STA	TEMP
                XCM10:
 026D 3A03FF    	LDA	TEMP
 0270 FE20      	CPI	' '
 0272 CA7A02    	JZ	XCM15
 0275 FE2C      	CPI	','
 0277 C21001    	JNZ	GETCM
                XCM15: 
 027A 7E        	MOV	A,M
 027B B7        	ORA	A
 027C C28202    	JNZ	XCM18
 027F C35701    	JMP	CRGETCM
                XCM18:
 0282 E5        	PUSH	H
 0283 5E        	MOV	E,M
E0284 1600      	MVI	D,(REGS AND 0FF00H) SHR 8	;SAVE ADRESSE
 0286 23        	INX	H
 0287 46        	MOV	B,M
 0288 D5        	PUSH	D
 0289 D5        	PUSH	D
 028A E1        	POP	H
 028B C5        	PUSH	B
 028C 7E        	MOV	A,M
 028D CD3712    	CALL	NMOUT
 0290 F1        	POP	PSW
 0291 F5        	PUSH	PSW
 0292 B7        	ORA	A
 0293 CA9B02    	JZ	XCM20
 0296 2B        	DCX	H
 0297 7E        	MOV	A,M
 0298 CD3712    	CALL	NMOUT
                XCM20:
 029B 0E2D      	MVI	C,CNGPRMT
 029D CDCE10    	CALL	ECHO
 02A0 CD1111    	CALL	GETHX
CP/M RMAC ASSEM 1.1	#009	PROF-80 MONITOR VERSION 1.7

 02A3 D2BB02    	JNC	XCM30
 02A6 7A        	MOV	A,D
 02A7 3203FF    	STA	TEMP
 02AA F1        	POP	PSW
 02AB E1        	POP	H
 02AC B7        	ORA	A
 02AD CAB202    	JZ	XCM25
 02B0 70        	MOV	M,B
 02B1 2B        	DCX	H
                XCM25: 
 02B2 71        	MOV	M,C
                XCM27: 
 02B3 110300    	LXI	D,3
 02B6 E1        	POP	H
 02B7 19        	DAD	D
 02B8 C36D02    	JMP	XCM10
                XCM30:
 02BB 7A        	MOV	A,D
 02BC 3203FF    	STA	TEMP
 02BF D1        	POP	D
 02C0 D1        	POP	D
 02C1 C3B302            JMP	XCM27
                ;
                ;
                ;
                CCMD:			
                	;TESTET PLATTE IM ANGEGEBENEN LAUFWERK
                	;UND GIBT ERGEBNISSE AUF DEM BILDSCHIRM AUS
                	;
 02C4 CD5915    	CALL	DISKDA		;BEFEHL ERLAUBT?
 02C7 CDDE14    	CALL	SPECD		;SETZE DISK-TIMING
 02CA CDFD10    	CALL	GETCH1		;WELCHES LAUFWERK?
 02CD CDCE10    	CALL	ECHO		;GEBE ZEICHEN AUF CONSOLE
 02D0 79        	MOV	A,C		;ZEICHEN IN AKKU
 02D1 D641      	SUI	'A'		;WANDLE LW. CHR. IN NUMMER
 02D3 DAE710    	JC	ERROR		;WENN KLEINER, FEHLER
 02D6 FE04      	CPI	4		;GROESSER 'D'
 02D8 D2E710    	JNC	ERROR		;SPRUNG WENN JA
 02DB 4F        	MOV	C,A		;RETTE ALTE UNIT
 02DC 3A34FF    	LDA	UNIT		;
 02DF F5        	PUSH	PSW		;
 02E0 79        	MOV	A,C		;
 02E1 3234FF    	STA	UNIT		;ZU TESTENDES LAUFWERK
 02E4 0605      	MVI	B,5		;ANZAHL DER VERSUCHE
 02E6 C5        CCMD1	PUSH	B		;
 02E7 2A34FF    	LHLD	UNIT		;RETTE UNIT UND TRACK
 02EA E5        	PUSH	H		;
 02EB CD4B18    	CALL	TEST		;
 02EE E1        	POP	H		;
 02EF 2234FF    	SHLD	UNIT		;
 02F2 C1        	POP	B		;GET ZAEHLER
 02F3 B7        	ORA	A		;FEHLER AUFGETRETEN?
                	JRZ	CCMD2		;SPRUNG, WENN OK
 02F4+2826      	DB	28H,CCMD2-$-1
                	DJNZ	CCMD1		;NOCH EIN VERSUCH?
 02F6+10EE      	DB	10H,CCMD1-$-1
CP/M RMAC ASSEM 1.1	#010	PROF-80 MONITOR VERSION 1.7

                				;
 02F8 F1        	POP	PSW		;HOLE ALTE UNIT
 02F9 3234FF    	STA	UNIT		;
                CCMD5:				;HIER AUCH EINSPRUNG FUER BOOT ERROR
 02FC 210503    	LXI	H,CHKERR	;DRUCKE FEHLERMELDUNG
 02FF CDBB10    	CALL	SOUT		;
 0302 C31001    	JMP	GETCM		;NEUE EINGABE
                				;
 0305 0D0A07    CHKERR	DB	0DH,0AH,BELL
 0308 204469736B	DB	' Disk not correct'
 0319 0D0A24    	DB	0DH,0AH,24H
                				;
                CCMD2:				;
                				;GEBE ART DER PLATTE AUS
 031C F1        	POP	PSW		;SETZE STACK RICHTIG
 031D 219B03    	LXI	H,CTXT1		;
 0320 CDBB10    	CALL	SOUT		;
 0323 3A23FF    	LDA	TEST$TYPE	;
 0326 E620      	ANI	20H		;MINI ODER MAXI
 0328 214304    	LXI	H,CTXT11	;
                	JRZ	CCMD3		;
 032B+2803      	DB	28H,CCMD3-$-1
 032D 214804    	LXI	H,CTXT12	;
 0330 CDBB10    CCMD3	CALL	SOUT		;
                				;
 0333 21AF03    	LXI	H,CTXT2		;
 0336 CDBB10    	CALL	SOUT		;
 0339 3A23FF    	LDA	TEST$TYPE	;NUMBER OF SURFACES
 033C 07        	RLC			;
 033D E601      	ANI	01H		;
 033F C631      	ADI	'1'		;WANDLE IN ASCII
 0341 4F        	MOV	C,A		;
 0342 CD0C00    	CALL	CO		;UND GEBE SEITENZAHL AUS
                				;
 0345 21C303    	LXI	H,CTXT3		;
 0348 CDBB10    	CALL	SOUT		;
 034B 3A23FF    	LDA	TEST$TYPE	;
 034E 211504    	LXI	H,CTXT31	;
 0351 E640      	ANI	040H		;
                	JRZ	CCMD4		;
 0353+2803      	DB	28H,CCMD4-$-1
 0355 211C04    	LXI	H,CTXT32	;
 0358 CDBB10    CCMD4	CALL	SOUT		;
                				;
 035B 21D703    	LXI	H,CTXT4		;GEBE SEKTORGROESSE AUS
 035E CDBB10    	CALL	SOUT		;
 0361 3A23FF    	LDA	TEST$TYPE	;
 0364 E60F      	ANI	0FH		;
 0366 2600      	MVI	H,0		;
 0368 6F        	MOV	L,A		;
 0369 29        	DAD	H		;
 036A 29        	DAD	H		;
 036B 29        	DAD	H		;
 036C 112304    	LXI	D,SEKTXT	;
 036F 19        	DAD	D		;
 0370 CDBB10    	CALL	SOUT		;
CP/M RMAC ASSEM 1.1	#011	PROF-80 MONITOR VERSION 1.7

                				;
 0373 21EC03    	LXI	H,CTXT5		;GEBE SEKTOREN/SPUR AUS
 0376 CDBB10    	CALL	SOUT		;
 0379 3A24FF    	LDA	TEST$MSEK	;
 037C CD2512    	CALL	DEZOUT		;
                				;
 037F 210104    	LXI	H,CTXT6		;GEBE AUS OB DAS LAUFWERK
 0382 CDBB10    	CALL	SOUT		;DAS READY SIGNAL LIEFERT
 0385 CD6715    	CALL	READY$MASK	;
 0388 E60F      	ANI	0FH		;
 038A 215104    	LXI	H,CTXT62	;
                	JRNZ	CCMD6		;
 038D+2003      	DB	20H,CCMD6-$-1
 038F 214D04    	LXI	H,CTXT61	;
 0392 CDBB10    CCMD6	CALL	SOUT		;
                				;SETZE CMDTAB
 0395 CD5113    	CALL	SETCMDT		;
                				;
 0398 C35701    	JMP	CRGETCM		;
                ;
 039B 0D0A204469CTXT1	DB	0DH,0AH,' Disk format...: $'
 03AF 0D0A204865CTXT2	DB	0DH,0AH,' Heads.........: $'
 03C3 0D0A204465CTXT3	DB	0DH,0AH,' Density.......: $'
 03D7 0D0A205365CTXT4	DB	0DH,0AH,' Sector size...: #$'
 03EC 0D0A205365CTXT5	DB	0DH,0AH,' Sectors/Track.: #$'
 0401 0D0A205265CTXT6	DB	0DH,0AH,' Ready signal..: $'
 0415 73696E676CCTXT31	DB	'single$'
 041C 646F75626CCTXT32	DB	'double$'
 0423 3132382020SEKTXT	DB	'128    $'
 042B 3235362020	DB	'256    $'
 0433 3531322020	DB	'512    $'
 043B 3130323420	DB	'1024   $'
 0443 6D61786924CTXT11	DB	'maxi$'
 0448 6D696E6924CTXT12	DB	'mini$'
 044D 79657324  CTXT61	DB	'yes$'
 0451 73696D756CCTXT62	DB	'simulated by index$'
                ;
                ;
                ;
                OCMD:
 0464 CD1111    	CALL	GETHX	;LESE PORTADRESSE
 0467 7A        	MOV	A,D	;WAR TRENNZEICHEN CR?
 0468 FE0D      	CPI	0DH
 046A CAE710    	JZ	ERROR	;FEHLER WENN JA
 046D C5        	PUSH	B	;SAVE INTEGER
 046E CD1111    	CALL	GETHX	;LESE DATA BYTE
 0471 7A        	MOV	A,D	;WAR TRENNZEICHEN CR?
 0472 FE0D      	CPI	0DH
 0474 C2E710    	JNZ	ERROR	;FEHLER WENN NEIN
 0477 69        	MOV	L,C
 0478 C1        	POP	B	;RESTORE PORTADR.
                	OUTP	L	;GEBE AUS
 0479+ED69      	DB	0EDH,L*8+41H
 047B C31001    	JMP	GETCM
                ;
                RCMD:
CP/M RMAC ASSEM 1.1	#012	PROF-80 MONITOR VERSION 1.7

                		;LIEST AB IN CMDTAB ANGEGEBENEN SEKTOR
 047E CD5915    	CALL	DISKDA
 0481 CDC612    	CALL	PRINT$DRIVE
 0484 CDA512    	CALL	RWINP	;SETZE DMA ADRESSE UND LAENGE
 0487 CD7017    	CALL	READ	;LESE
 048A C31001    	JMP	GETCM
                ;
                WCMD:
 048D CD5915    	CALL	DISKDA
 0490 CDC612    	CALL	PRINT$DRIVE
 0493 CDA512    	CALL	RWINP
 0496 CD6817    	CALL	WRITE
 0499 C31001    	JMP	GETCM
                ;
                ICMD:
 049C 0E01      	MVI	C,1
 049E CD8A11    	CALL	GETNM
 04A1 C1        	POP	B	;IN C STEHT PORT
                	INP	A	;LESE NACH A
 04A2+ED78      	DB	0EDH,A*8+40H
 04A4 0E20      	MVI	C,' '	;GEBE BLANK AUS
 04A6 F5        	PUSH	PSW
 04A7 CD0C00    	CALL	CO
 04AA F1        	POP	PSW
 04AB F5        	PUSH	PSW
 04AC CD3712    	CALL	NMOUT	;GEBE HEX AUS
 04AF 0E20      	MVI	C,' '	;GEBE BLANK AUS
 04B1 CD0C00    	CALL	CO
 04B4 F1        	POP	PSW
 04B5 57        	MOV	D,A	;IN D FUER BITOUT
 04B6 CD6007    	CALL	BITOUT
 04B9 C35701    	JMP	CRGETCM
                ;
                ;
                ;
                ACMD:
                	;ZEIGT UND VERAENDERT TRACK, SECTOR UND HEAD
                	;DES EINGELOGTEN LAUFWERKS
 04BC CD5915    	CALL	DISKDA	;BEFEHL ERLAUBT?
 04BF CDC612    	CALL	PRINT$DRIVE
                ;
 04C2 211D05    	LXI	H,ATXT1	;DISPLAY TRACK
 04C5 CDBB10    	CALL	SOUT
 04C8 3A35FF    	LDA	TRACK
 04CB CD3712    	CALL	NMOUT
 04CE CD0C05    	CALL	ACMD4	;LESE NEUEN WERT
                	JRNC	ACMD1	;KEINE EINGABE?
 04D1+3003      	DB	30H,ACMD1-$-1
 04D3 3235FF    	STA	TRACK
 04D6 CD1605    ACMD1	CALL	ACMD5
                ;
 04D9 212A05    	LXI	H,ATXT2	;DISPLAY HEAD
 04DC CDBB10    	CALL	SOUT
 04DF 3A36FF    	LDA	HEAD
 04E2 CD3712    	CALL	NMOUT
 04E5 CD0C05    	CALL	ACMD4
CP/M RMAC ASSEM 1.1	#013	PROF-80 MONITOR VERSION 1.7

                	JRNC	ACMD2
 04E8+3005      	DB	30H,ACMD2-$-1
 04EA E603      	ANI	03H	;MASK UPPER 6 BITS
 04EC 3236FF    	STA	HEAD
 04EF CD1605    ACMD2	CALL	ACMD5
                ;
 04F2 213705    	LXI	H,ATXT3	;DISPLAY SECTOR
 04F5 CDBB10    	CALL	SOUT
 04F8 3A37FF    	LDA	SECTOR
 04FB CD3712    	CALL	NMOUT
 04FE CD0C05    	CALL	ACMD4
                	JRNC	ACMD3
 0501+3003      	DB	30H,ACMD3-$-1
 0503 3237FF    	STA	SECTOR
 0506 CD1605    ACMD3	CALL	ACMD5
                ;
 0509 C35701    	JMP	CRGETCM
                ;
 050C 0E2D      ACMD4	MVI	C,CNGPRMT
 050E CDCE10    	CALL	ECHO
 0511 CD1111    	CALL	GETHX
 0514 79        	MOV	A,C
 0515 C9        	RET
                ;
 0516 7A        ACMD5	MOV	A,D
 0517 FE0D      	CPI	0DH
 0519 CA1001    	JZ	GETCM
 051C C9        	RET
                ;
 051D 0D0A205472ATXT1	DB	0DH,0AH,' Track..: $'
 052A 0D0A204865ATXT2	DB	0DH,0AH,' Head...: $'
 0537 0D0A205365ATXT3	DB	0DH,0AH,' Sector.: $'
                ;
                ;
                ;
                BCMD:
                	;EINSPRUNG BOOTROUTINE
                	;
 0544 CD5915    	CALL	DISKDA		;BEFEHL ERLAUBT?
 0547 AF        	XRA	A		;
 0548 3225FF    	STA	TEST$TRACK	;ERSTE TESTSPUR IST 0
 054B 3234FF    BCMD2:	STA	UNIT		;OK, IN CMDTAB
 054E CDDE14    	CALL	SPECD		;SETZT DISK TIMING
 0551 0605      	MVI	B,5		;TESTE PLATTE MAX. 5 MAL
 0553 C5        BCMD3	PUSH	B		;
 0554 CD4B18    	CALL	TEST		;SETZT CONTROLLER AUF MINI ODER MAXI
 0557 C1        	POP	B		;
 0558 B7        	ORA	A		;FEHLER AUFGETRETEN?
                	JRZ	BCMD4		;SPRUNG WENN NEIN
 0559+2805      	DB	28H,BCMD4-$-1
                	DJNZ	BCMD3		;NOCH EIN VERSUCH?
 055B+10F6      	DB	10H,BCMD3-$-1
 055D C3FC02    	JMP	CCMD5		;GEBE FEHLER MELDUNG AUS
                BCMD4:				;
 0560 CD5113    	CALL	SETCMDT		;SETZE CMDTABELLE
 0563 AF        	XRA	A		;SETZE SPUR NULL
CP/M RMAC ASSEM 1.1	#014	PROF-80 MONITOR VERSION 1.7

 0564 3235FF    	STA	TRACK		;
 0567 3236FF    	STA	HEAD		;HEAD NULL
 056A 3C        	INR	A		;
 056B 3237FF    	STA	SECTOR		;SEKTOR EINS
 056E 2100FA    	LXI	H,BOOTADR	;
 0571 222AFF    	SHLD	DMAADR		;
 0574 3E01      	MVI	A,01H		;UEBERTRAGE EINEN SECTOR
 0576 322CFF    	STA	SECTCNT		;
                				;OK, ALLE WERTE SIND GESETZT
 0579 CD7017    	CALL	READ		;LESE
 057C B7        	ORA	A		;FEHLER AUFGETRETEN?
 057D C2C714    	JNZ	BOOTERR		;
 0580 2100FA    	LXI	H,BOOTADR	;KOPIERE DIE ERSTEN 128 BYTE
 0583 1180FD    	LXI	D,BOOTADR+380H	;NACH HINTEN
 0586 018000    	LXI	B,128		;
                	LDIR			;
 0589+EDB0      	DB	0EDH,0B0H
 058B C380FD    	JMP	BOOTADR+380H	;
                ;
                ;
                ;
                LCMD:
                	;ZEIGE DATUM UND ZEIT AN
 058E 3A05FF    	LDA	CLKFLG		;IST DIE UHR UEBERHAUPT DA?
 0591 B7        	ORA	A
 0592 CA9B05    	JZ	GCMD1
 0595 CDB313    	CALL	DISP$TIME
 0598 C31001    	JMP	GETCM
                ;
 059B 21A405    GCMD1:	LXI	H,CLKERR$TXT
 059E CDBB10    	CALL	SOUT
 05A1 C31001    	JMP	GETCM
                ;
                CLKERR$TXT:
 05A4 0D0A072043	DB	0DH,0AH,BELL,' Clock failure',0DH,0AH,'$'
                ;
                ;
                ;
                NCMD:
                	;SETZE UHRZEIT UND DATUM
 05B8 3A05FF    	LDA	CLKFLG
 05BB B7        	ORA	A
 05BC CA9B05    	JZ	GCMD1
 05BF 217206    	LXI	H,CITXT1	;LESE DATUM EIN
 05C2 CDBB10    	CALL	SOUT
 05C5 CD4911    	CALL	GETDEZ
 05C8 FE2F      	CPI	'/'
 05CA C2E710    	JNZ	ERROR		;FALSCHES TRENNZEICHEN
 05CD 7D        	MOV	A,L
 05CE CD7A11    	CALL	DEZHEX
 05D1 07        	RLC			;IN RICHTIGE POSITION
 05D2 07        	RLC
 05D3 07        	RLC
 05D4 07        	RLC
 05D5 E6F0      	ANI	0F0H
 05D7 FE00      	CPI	0		;MONAT ZWISCHEN 1 UND 12
CP/M RMAC ASSEM 1.1	#015	PROF-80 MONITOR VERSION 1.7

 05D9 CAE710    	JZ	ERROR
 05DC FEC1      	CPI	0C1H
 05DE D2E710    	JNC	ERROR
 05E1 3218FF    	STA	PHYS$TIME+4	;MONAT WEG
 05E4 CD4911    	CALL	GETDEZ
 05E7 FE2F      	CPI	'/'
 05E9 C2E710    	JNZ	ERROR
 05EC 7D        	MOV	A,L
 05ED FE00      	CPI	0
 05EF CAE710    	JZ	ERROR
 05F2 FE32      	CPI	32H
 05F4 D2E710    	JNC	ERROR
 05F7 3217FF    	STA	PHYS$TIME+3	;TAG WEG
 05FA CD4911    	CALL	GETDEZ
 05FD FE0D      	CPI	0DH
 05FF C2E710    	JNZ	ERROR
 0602 7D        	MOV	A,L
 0603 FE80      	CPI	80H
 0605 DAE710    	JC	ERROR
 0608 FE9A      	CPI	9AH
 060A D2E710    	JNC	ERROR
 060D 3203FF    	STA	TEMP		;JAHR ZWISCHEN SPEICHERN
                ;
                	;UHRZEIT EINLESEN
 0610 219606    	LXI	H, CITXT2
 0613 CDBB10    	CALL	SOUT
 0616 CD4911    	CALL	GETDEZ
 0619 FE3A      	CPI	':'
 061B C2E710    	JNZ	ERROR
 061E 7D        	MOV	A,L
 061F FE24      	CPI	24H
 0621 D2E710    	JNC	ERROR
 0624 3216FF    	STA	PHYS$TIME+2
 0627 CD4911    	CALL	GETDEZ
 062A FE3A      	CPI	':'
 062C C2E710    	JNZ	ERROR
 062F 7D        	MOV	A,L
 0630 FE60      	CPI	60H
 0632 D2E710    	JNC	ERROR
 0635 3215FF    	STA	PHYS$TIME+1
 0638 CD4911    	CALL	GETDEZ
 063B FE0D      	CPI	0DH
 063D C2E710    	JNZ	ERROR
 0640 7D        	MOV	A,L
 0641 FE60      	CPI	60H
 0643 D2E710    	JNC	ERROR
 0646 3214FF    	STA	PHYS$TIME
                ;
                	;SETZE DIE ZEIT
 0649 21B706    	LXI	H,CITXT3
 064C CDBB10    	CALL	SOUT
 064F CD0A11    	CALL	GETCH		;WARTE AUF IRGEND EIN ZEICHEN
 0652 CDA01A    	CALL	SET$PHYS$TIME	;
 0655 3A03FF    	LDA	TEMP		;SETZE NOCH JAHR
 0658 CD7A11    	CALL	DEZHEX		;WANDLE IN DEZIMALZAHL
 065B D650      	SUI	80		;ZIEHE 80 AB
CP/M RMAC ASSEM 1.1	#016	PROF-80 MONITOR VERSION 1.7

 065D E61F      	ANI	1FH		;MASKIERE
 065F 47        	MOV	B,A		;
 0660 3A1DFF    	LDA	SHIFT$CONT+4	;
 0663 E6E0      	ANI	0E0H		;
 0665 B0        	ORA	B		;
 0666 321DFF    	STA	SHIFT$CONT+4	;
 0669 CDE01A    	CALL	SET$SHIFT	;
 066C CDC610    	CALL	CROUT		;
 066F C35701    	JMP	CRGETCM		;
                				;
 0672 0D0A0A2045CITXT1:	DB	0DH,0AH,0AH,' Enter today''s date (MM/DD/YY): $'
 0696 20456E7465CITXT2:	DB	' Enter the time (HH:MM:SS):     $'
 06B7 2050726573CITXT3:	DB	' Press any key to set time$'
                ;
                ;
                ;
                FCMD:
 06D2 0E03      	MVI	C,3	;HOLE 3 WERTE VON DER CONSOLE
 06D4 CD8A11    	CALL	GETNM
 06D7 C1        	POP	B	;FUELL BYTE
 06D8 D1        	POP	D	;END WERT
 06D9 E1        	POP	H	;ANFANGSWERT
 06DA 71        FCMD1	MOV	M,C	;FUELLE BYTE
 06DB CDCF11    	CALL	HILO	;ENDE ERREICHT?
 06DE DA1001    	JC	GETCM
 06E1 23        	INX	H
 06E2 C3DA06    	JMP	FCMD1
                ;
                ;
                ;
                VCMD:
                	;VERGLEICHT ZWEI SPEICHERBEREICHE MITEINANDER
 06E5 0E03      	MVI	C,3	;LESE DREI ADRESSEN EIN
 06E7 CD8A11    	CALL	GETNM
 06EA C1        	POP	B	;ZWEITER BLOCKANFANG
 06EB D1        	POP	D	;ERSTES BLOCKENDE
 06EC E1        	POP	H	;ERSTER BLOCKANFANG
 06ED 0A        VCMD1	LDAX	B	;LESE BYTE AUS BLOCK 2
 06EE BE        	CMP	M	;VERGLEICHE MIT ERSTEM BLOCK
 06EF C41C07    	CNZ	VCMD2	;GEBE UNGLEICHE ADDRESSEN AUS
 06F2 CDCF11    	CALL	HILO	;ENDE ERREICHT ?
 06F5 DA1001    	JC	GETCM	;OK, ENDE
 06F8 23        	INX	H
 06F9 03        	INX	B
 06FA C3ED06    	JMP	VCMD1	;VERGL. NAECHSTES BYTE
                ;
                ;
                ;
 06FD 0E02      TCMD	MVI	C,2	;LESE ANFANG UND ENDADDRESSE
 06FF CD8A11    	CALL	GETNM
 0702 D1        	POP	D
 0703 E1        	POP	H
 0704 4E        TCMD1	MOV	C,M
 0705 79        	MOV	A,C	;LESE SPEICHERSTELLE
 0706 2F        	CMA		;NEGIERE
 0707 77        	MOV	M,A	;SCHREIBE IN ZELLE
CP/M RMAC ASSEM 1.1	#017	PROF-80 MONITOR VERSION 1.7

 0708 060F      	MVI	B,15	;WARTE ETWAS
                TCMD2	DJNZ	TCMD2	;
 070A+10FE      	DB	10H,TCMD2-$-1
 070C 7E        	MOV	A,M	;LESE WIEDER
 070D 71        	MOV	M,C	;ORGINAL BYTE ZURUECK
 070E 2F        	CMA		;A SOLL GLEICH C SEIN
 070F A9        	XRA	C	;SETZE ALL UNGLEICHEN BITS
 0710 C44607    	CNZ	FBYTOUT	;GEBE FEHLERHAFTES BYTE AUS
 0713 CDCF11    	CALL	HILO	;ENDE?
 0716 DA1001    	JC	GETCM	;SPRUNG WENN JA
 0719 23        	INX	H	;TESTE NAECHSTES BYTE
                	JR	TCMD1	;LOOP
 071A+18E8      	DB	18H,TCMD1-$-1
                ;
                ;
                ;
                ;
                ;
                ;
 071C E5        VCMD2	PUSH	H
 071D D5        	PUSH	D
 071E C5        	PUSH	B	;RETTE ALLE ADRESSEN
 071F CD3907    	CALL	DISPMEM
 0722 0E20      	MVI	C,' '
 0724 CDCE10    	CALL	ECHO
 0727 E1        	POP	H
 0728 E5        	PUSH	H
 0729 CD3907    	CALL	DISPMEM
 072C CDC610    	CALL	CROUT
 072F CD9010    	CALL	BREAK
 0732 DA1001    	JC	GETCM
 0735 C1        	POP	B
 0736 D1        	POP	D
 0737 E1        	POP	H
 0738 C9        	RET
                ;
                DISPMEM:
                	;INPUT: HL
                	;ZEIGT HL UND (HL) AUF DEM BILDSCHIRM AN
                	;ZERSROERT A,B,C,FF'S
 0739 CD3212    	CALL	HLOUT
 073C 0E3D      	MVI	C,'='
 073E CDCE10    	CALL	ECHO
 0741 7E        	MOV	A,M
 0742 CD3712    	CALL	NMOUT
 0745 C9        	RET
                ;
                ;
                ;
 0746 E5        FBYTOUT	PUSH	H		;
 0747 D5        	PUSH	D		;
 0748 57        	MOV	D,A		;RETTE AKKU
 0749 CD3212    	CALL	HLOUT		;
 074C 0E20      	MVI	C,' '		;GEBE NACH ADRRESE TRENNZEICHEN AUS
 074E CD0C00    	CALL	CO		;
 0751 CD6007    	CALL	BITOUT		;GEBE BITFOLGE AUS
CP/M RMAC ASSEM 1.1	#018	PROF-80 MONITOR VERSION 1.7

 0754 CDC610    	CALL	CROUT		;
 0757 CD9010    	CALL	BREAK		;ABBRUCH
 075A DA1001    	JC	GETCM		;SPRUNG ZUM MONITOR WENN JA
 075D D1        	POP	D		;
 075E E1        	POP	H		;
 075F C9        	RET			;
                ;
                ;
                ;
                BITOUT:
                	;GIBT 8 BIT IN REG.D AUS
                	;ZERSTOERT A,B,C,D,E
 0760 0608      	MVI	B,8	;GEBE 8 BIT AUS
                BITOUT1	RLCR	D	;SCHIEBE IN CARRY
 0762+CB02      	DB	0CBH, 00H + D
 0764 3E30      	MVI	A,'0'	;ASSCI 0
 0766 1E00      	MVI	E,0
 0768 8B        	ADC	E
 0769 4F        	MOV	C,A
 076A CD0C00    	CALL	CO
                	DJNZ	BITOUT1
 076D+10F3      	DB	10H,BITOUT1-$-1
 076F C9        	RET
                ;
                ;
                ;
                KCMD:
                	;GIBT ALLE KONSOLENEINGABEN UNVERAENDERT AUS
                	;ESCAPE MIT CONTROL-C
 0770 218607    	LXI	H,KCMDTXT
 0773 CDBB10    	CALL	SOUT
 0776 CD0900    KCMD1:	CALL	CI		;LESE ZEICHEN
 0779 FE03      	CPI	3		;CONTROL-C?
                	JRZ	KCMD2		;DANN ENDE
 077B+2806      	DB	28H,KCMD2-$-1
 077D 4F        	MOV	C,A		;
 077E CD0C00    	CALL	CO		;SONST GEBE ZEICHEN AUS
                	JR	KCMD1		;
 0781+18F3      	DB	18H,KCMD1-$-1
 0783 C35701    KCMD2:	JMP	CRGETCM
                ;
 0786 2028657363KCMDTXT	DB	' (escape with ^C)',0dh,0ah,0dh,0ah,'$'
                ;
                ;
                ;
                UCMD:				;SETZE DISK-TIMING
                				;UND ANZAHL DER STEP-IMPULSE
 079C 214908    	LXI	H,UTXT1		;LESE STEPRATE
 079F CDBB10    	CALL	SOUT		;
 07A2 CD3E08    	CALL	UCMD3		;
 07A5 3D        	DCR	A		;
 07A6 4F        	MOV	C,A		;
 07A7 E6F0      	ANI	0F0H		;TESTE OB KLEINER 10H
 07A9 C2E710    	JNZ	ERROR		;GROESSER, DANN FEHLER
 07AC 79        	MOV	A,C		;
 07AD 2F        	CMA			;BILDE KOMPLEMENT
CP/M RMAC ASSEM 1.1	#019	PROF-80 MONITOR VERSION 1.7

 07AE F5        	PUSH	PSW		;RETTE AKKU
 07AF 216308    	LXI	H,UTXT2		;LESE HEADUNLOAD TIME
 07B2 CDBB10    	CALL	SOUT		;
 07B5 CD3E08    	CALL	UCMD3		;
 07B8 0F        	RRC			;
 07B9 0F        	RRC			;
 07BA 0F        	RRC			;
 07BB 0F        	RRC			;
 07BC E60F      	ANI	0FH		;MASKIERE
 07BE 4F        	MOV	C,A		;RETTE IN C
 07BF F1        	POP	PSW		;GET STEPRATE
 07C0 07        	RLC			;
 07C1 07        	RLC			;
 07C2 07        	RLC			;
 07C3 07        	RLC			;
 07C4 E6F0      	ANI	0F0H		;MASKIERE
 07C6 B1        	ORA	C		;UNLOAD TIME DAZU
 07C7 321BFF    	STA	SHIFT$CONT+2	;
 07CA 217D08    	LXI	H,UTXT3		;LESE HEAD LOAD TIME
 07CD CDBB10    	CALL	SOUT		;
 07D0 CD3E08    	CALL	UCMD3		;
 07D3 E6FE      	ANI	0FEH		;
 07D5 321CFF    	STA	SHIFTCONT+3	;
 07D8 219708    	LXI	H,UTXT4		;DOPPELSTEP VEKTOR UND
 07DB CDBB10    	CALL	SOUT		;TWOSIDED BITS
 07DE CD3E08    	CALL	UCMD3		;
 07E1 321AFF    	STA	SHIFT$CONT+1	;
                				;BOOT UNIT
 07E4 21B108    	LXI	H,UTXT5		;
 07E7 CDBB10    	CALL	SOUT		;
 07EA CDFD10    	CALL	GETCH1		;
 07ED 0E20      	MVI	C,00100000B	;
 07EF FE46      	CPI	'F'		;
                	JRZ	UCMD20		;
 07F1+2809      	DB	28H,UCMD20-$-1
 07F3 0E00      	MVI	C,00000000B	;
 07F5 FE48      	CPI	'H'		;
                	JRZ	UCMD20		;
 07F7+2803      	DB	28H,UCMD20-$-1
 07F9 C3E710    	JMP	ERROR		;
                UCMD20:				;
 07FC F5        	PUSH	PSW		; RETTE ZEICHEN
 07FD 3A1DFF    	LDA	SHIFT$CONT+4	;
                				;
 0800 E6DF      	ANI	11011111B	;
 0802 B1        	ORA	C		;
 0803 321DFF    	STA	SHIFT$CONT+4	;
                				;
 0806 F61F      	ORI	1FH		;BERECHNE PRUEFSUMME
 0808 211CFF    	LXI	H,SHIFT$CONT+3	;
 080B 0603      	MVI	B,3		;
 080D 86        UCMD1	ADD	M		;
 080E 2B        	DCX	H		;
                	DJNZ	UCMD1		;
 080F+10FC      	DB	10H,UCMD1-$-1
 0811 2F        	CMA			;BILDE KOMPLEMENT
CP/M RMAC ASSEM 1.1	#020	PROF-80 MONITOR VERSION 1.7

 0812 3C        	INR	A		;
 0813 77        	MOV	M,A		;
 0814 CD2508    	CALL	UCMD2		;
 0817 CDDE14    	CALL	SPECD		;
 081A CDE01A    	CALL	SET$SHIFT	;
 081D F1        	POP	PSW		;ZEICHEN FUER DEFAULTBOOT
 081E 4F        	MOV	C,A		;
 081F CDCE10    	CALL	ECHO		;MUSS NOCH AUSGEGEBEN WERDEN
 0822 C35701    	JMP	CRGETCM		;
                				;
 0825 2A1BFF    UCMD2:	LHLD	SHIFT$CONT+2	;SETZE DISKTIMING NEU
 0828 7C        	MOV	A,H		;
 0829 F601      	ORI	1		;
 082B 67        	MOV	H,A		;
 082C 2279FF    	SHLD	SPECD$WORD	;
 082F 3A1AFF    	LDA	SHIFT$CONT+1	;SETZE SEEKNR (ANZAHL DER STEPIMPULSE)
 0832 323FFF    	STA	SEEKNR		;UND TWO-SIDED-BITS
                				;
 0835 3A1DFF    	LDA	SHIFT$CONT+4	;SETZE BOOT UNIT
 0838 E620      	ANI	00100000B	;
 083A 3284FF    	STA	BOOTFLG		;
                				;
 083D C9        	RET			;
                				;
 083E CD1111    UCMD3:	CALL	GETHX		;
 0841 7A        	MOV	A,D		;
 0842 FE0D      	CPI	0DH		;
 0844 CAE710    	JZ	ERROR		;
 0847 79        	MOV	A,C		;
 0848 C9        	RET			;
                ;
 0849 0A0D205374UTXT1	DB	10,13,' Steprate ...........: $'
 0863 0A0D204865UTXT2	DB	10,13,' Head unload time ...: $'
 087D 0A0D204865UTXT3	DB	10,13,' Head load time .....: $'
 0897 0A0D20446FUTXT4	DB	10,13,' Double step vector .: $'
 08B1 0A0D204465UTXT5	DB	10,13,' Default boot unit ..: $'
                ;	
                ;
                ;
                ;-------------------------------------------------------INITIALISIERUNG------
                ;
                INIT:
                					;
                ;***	
 08CB 217017    	LXI	H,6000			;VERZOEGERUNG ZUM WARM WERDEN
 08CE 2B        INIT7	DCX	H			;
 08CF 3EF7      	MVI	A,PAD$TX OR 1		;SETZE TX DUPLEX LEITUNG AUF 1
 08D1 D3D8      	OUT	P$LS259			;
 08D3 3EF5      	MVI	A,PAD$RTS OR 1		;SETZE RTS INAKTIV
 08D5 D3D8      	OUT	P$LS259			;
 08D7 3EFB      	MVI	A,PAD$TXP OR 1		;SETZE TX SIMPLEX LEITUNG AUF 1
 08D9 D3D8      	OUT	P$LS259			;
 08DB 3EF0      	MVI	A,PAD$POLEN OR 80H	;AKTIVIERE DRIVE DECODER
 08DD D3D8      	OUT	P$LS259			;
 08DF 3E05      	MVI	A,5			;UNIO STROBE 1 HIGH
 08E1 D39E      	OUT	CONTR			;
CP/M RMAC ASSEM 1.1	#021	PROF-80 MONITOR VERSION 1.7

 08E3 3E07      	MVI	A,7			;UNIO STROBE 2 HIGH
 08E5 D39E      	OUT	CONTR			;
 08E7 3E09      	MVI	A,9			;UNIO INIT HIGH
 08E9 D39E      	OUT	CONTR			; 
 08EB 7C        	MOV	A,H			;
 08EC B5        	ORA	L			;
 08ED C2CE08    	JNZ	INIT7			;
                					;
                ;***
 08F0 3EE0      	MVI	A,PAD$MOTOR OR 80H
 08F2 D3D8      	OUT	P$LS259
 08F4 3EF9      	MVI	A,PAD$MOTAB OR 1
 08F6 D3D8      	OUT	P$LS259
                ;***
                				;
 08F8 0600      	MVI	B,00		;INITIALISIERE EPROM
 08FA 0EDE      	MVI	C,P$RAM$TABLE	;PORTADRESSE DER RAM-TABELLE
 08FC 1610      	MVI	D,16		;
 08FE 1E00      	MVI	E,0		;EPROM BANK-ADRESSE
                	OUTP	E		;GEBE BANKADRESSE FUER KACHEL 0 AUS
 0900+ED59      	DB	0EDH,E*8+41H
 0902 7A        	MOV	A,D		;NAECHSTE KACHEL
 0903 80        	ADD	B		;
 0904 47        	MOV	B,A		;
                	OUTP	E		;
 0905+ED59      	DB	0EDH,E*8+41H
                				;OK, EPROM-KACHELN AKTIV
 0907 7A        	MOV	A,D		;JETZT LOGISCHE RAM-BANK 0
 0908 80        	ADD	B		;
 0909 47        	MOV	B,A		;
 090A 1E02      	MVI	E,02H		;PHYS.-BANK 13 IST LOG.-BANK 0
                INIT8	OUTP	E		;INITIALISIERE RESTL. KACHELN
 090C+ED59      	DB	0EDH,E*8+41H
 090E 7A        	MOV	A,D		;
 090F 80        	ADD	B		;
 0910 47        	MOV	B,A		;
 0911 FE80      	CPI	80H		;
                	JRNZ	INIT16		;
 0913+2002      	DB	20H,INIT16-$-1
 0915 1E0A      	MVI	E,0AH		;
 0917 B7        INIT16	ORA	A		;
                	JRNZ	INIT8		;
 0918+20F2      	DB	20H,INIT8-$-1
                				;RAM-TABELLE OK
 091A 3EFF      	MVI	A,PAD$INIT OR 1	;AKTIVIERE-BANKLEITUNGEN
 091C D3D8      	OUT	P$LS259		;
                				;OK, RAM IST AKTIV
                				;TESTE BANK 0
 091E 2196FE    	LXI	H,MSTAK-80	;SCHREIBE 256 BYTES
 0921 AF        	XRA	A		;IN STACK
 0922 77        INIT13	MOV	M,A		;
 0923 23        	INX	H		;
 0924 3C        	INR	A		;
                	JRNZ	INIT13		;
 0925+20FB      	DB	20H,INIT13-$-1
 0927 210000    	LXI	H,0		;VERZOEGERE ETWAS
CP/M RMAC ASSEM 1.1	#022	PROF-80 MONITOR VERSION 1.7

 092A 2B        INIT15	DCX	H		;
 092B 7C        	MOV	A,H		;
 092C B5        	ORA	L		;
                	JRNZ	INIT15		;
 092D+20FB      	DB	20H,INIT15-$-1
 092F 2196FE    	LXI	H,MSTAK-80	;
 0932 AF        	XRA	A		;
 0933 BE        INIT12	CMP	M		;UND VERGLEICHE WIEDER
                	JRNZ	INIT9		;UNGLEICH, SETZE FLAG
 0934+2007      	DB	20H,INIT9-$-1
 0936 23        	INX	H		;EINEN WERT HOEHER
 0937 3C        	INR	A		;
                	JRNZ	INIT12		;
 0938+20F9      	DB	20H,INIT12-$-1
 093A AF        	XRA	A		;FLAG FUER BANK 0 OK
                	JR	INIT10		;
 093B+1802      	DB	18H,INIT10-$-1
 093D 3E01      INIT9	MVI	A,01H		;FLAG FUER BANK 0 NICHT OK
                INIT10	STAI			;RETTE FLAG IN INT.REGISTER
 093F+ED47      	DB	0EDH,47H
                				;
 0941 0620      	MVI	B,20H		;SCHALTE BANK 1 EIN
 0943 0EDE      	MVI	C,P$RAM$TABLE	;
 0945 1610      	MVI	D,16		;
 0947 1E03      	MVI	E,03H		;
                INIT11	OUTP	E		;SETZE KACHEL
 0949+ED59      	DB	0EDH,E*8+41H
 094B 7A        	MOV	A,D		;EINS WEITER
 094C 80        	ADD	B		;
 094D 47        	MOV	B,A		;
 094E FE80      	CPI	80H		;OBERE HAELFTE
                	JRNZ	INIT27		;
 0950+2002      	DB	20H,INIT27-$-1
 0952 1E0B      	MVI	E,0BH		;DANN E NEU SETZEN
 0954 B7        INIT27	ORA	A		;IST AKKU GLEICH NULL
                	JRNZ	INIT11		;ALLES BANK1 VOLLSTAENDIG EINGESCHALTET
 0955+20F2      	DB	20H,INIT11-$-1
                				;
 0957 2196FE    	LXI	H,MSTAK-80	;TESTE BANK 1
 095A AF        	XRA	A		;
 095B 77        INIT17	MOV	M,A		;SCHREIBE 256 BYTES VOLL
 095C 23        	INX	H		;
 095D 3C        	INR	A		;
                	JRNZ	INIT17		;
 095E+20FB      	DB	20H,INIT17-$-1
 0960 210000    	LXI	H,0		;WARTE ETWAS
 0963 2B        INIT18	DCX	H		;
 0964 7C        	MOV	A,H		;
 0965 B5        	ORA	L		;
                	JRNZ	INIT18		;
 0966+20FB      	DB	20H,INIT18-$-1
 0968 2196FE    	LXI	H,MSTAK-80	;UND VERGLEICHE WIEDER
 096B AF        	XRA	A		;
 096C BE        INIT19	CMP	M		;
                	JRNZ	INIT20		;FEHLER
 096D+2008      	DB	20H,INIT20-$-1
CP/M RMAC ASSEM 1.1	#023	PROF-80 MONITOR VERSION 1.7

 096F 23        	INX	H		;
 0970 3C        	INR	A		;
                	JRNZ	INIT19		;
 0971+20F9      	DB	20H,INIT19-$-1
 0973 0600      	MVI	B,0		;FLAG FUER KEIN FEHLER
                	JR	INIT21		;
 0975+1802      	DB	18H,INIT21-$-1
 0977 0602      INIT20	MVI	B,02H		;FLAG FUER FEHLER
                INIT21	LDAI			;LADE FLAG VON BANK 0
 0979+ED57      	DB	0EDH,57H
 097B B0        	ORA	B		;UND PACKE FLAK VON BANK 1 DAZU
                	STAI			;WIEDER IN INTERRUPT REGISTER
 097C+ED47      	DB	0EDH,47H
                				;
 097E FE03      	CPI	3		;SPRUNG WENN KEINE BANK
                	JRZ	BLINK$LOOP	;IN ORDNUNG IST
 0980+281C      	DB	28H,BLINK$LOOP-$-1
 0982 FE01      	CPI	1		;LASSE BANK 1 EINGESCHALTET
                	JRZ	INIT22		;WENN BANK 0 FEHLERHAFT IST
 0984+2816      	DB	28H,INIT22-$-1
                				;
 0986 0620      	MVI	B,20H		;ANSONSTEN SCHALTE
 0988 0EDE      	MVI	C,P$RAM$TABLE	;WIEDER BANK 0 EIN
 098A 1610      	MVI	D,16		;
 098C 1E02      	MVI	E,02H		;
                INIT23	OUTP	E		;
 098E+ED59      	DB	0EDH,E*8+41H
 0990 7A        	MOV	A,D		;
 0991 80        	ADD	B		;
 0992 47        	MOV	B,A		;
 0993 FE80      	CPI	80H		;OBERE HAELFTE
                	JRNZ	INIT24		;
 0995+2002      	DB	20H,INIT24-$-1
 0997 1E0A      	MVI	E,0AH		;
 0999 B7        INIT24	ORA	A		;ALLES EINGESCHALTET?
                	JRNZ	INIT23		;
 099A+20F2      	DB	20H,INIT23-$-1
                INIT22	JR	INIT14		;DANN WEITER
 099C+1841      	DB	18H,INIT14-$-1
                				;
                BLINK$LOOP:
 099E 0680      	MVI	B,80H		;BESETZE
 09A0 0E50      	MVI	C,PAD$INUSE	;REGISTER
 09A2 210000    	LXI	H,0		;VOR
                	EXX			;
 09A5+D9        	DB	0D9H
 09A6 0601      	MVI	B,MASK$RX	;
 09A8 0E10      	MVI	C,MASK$CTS	;
 09AA 16F6      	MVI	D,PAD$TX	;
 09AC 1EF4      	MVI	E,PAD$RTS	;
 09AE 2601      	MVI	H,01H		;
 09B0 2EFF      	MVI	L,0FFH		;
                	EXX			;
 09B2+D9        	DB	0D9H
                BLINK$LOOP1:
 09B3 2B        	DCX	H		;HL EINS WENIGER
CP/M RMAC ASSEM 1.1	#024	PROF-80 MONITOR VERSION 1.7

                				;
 09B4 7C        	MOV	A,H		;
 09B5 87        	ADD	A		;
 09B6 87        	ADD	A		;
 09B7 A0        	ANA	B		;SETZE LED GLEICH
 09B8 B1        	ORA	C		;DEM DRITTHOECHSTEN
 09B9 D3D8      	OUT	P$LS259		;BIT DES H-REGISTERS
                				;
                	EXX			;
 09BB+D9        	DB	0D9H
                				;
 09BC DBDA      	IN	P$IN$LS258$A	;SETZE TX-LEITUNG
 09BE A0        	ANA	B		;AUF DEN
 09BF 85        	ADD	L		;PEGEL DER
 09C0 3F        	CMC			;RX-LEITUNG
 09C1 17        	RAL			;
 09C2 A4        	ANA	H		;
 09C3 B2        	ORA	D		;
 09C4 D3D8      	OUT	P$LS259		;
                				;
 09C6 DBDA      	IN	P$IN$LS258$A	;SETZE RTS-LEITUNG
 09C8 A1        	ANA	C		;AUF DEN
 09C9 85        	ADD	L		;PEGEL DER
 09CA 3F        	CMC			;CTS-LEITUNG
 09CB 17        	RAL			;
 09CC A4        	ANA	H		;
 09CD B3        	ORA	E		;
 09CE D3D8      	OUT	P$LS259		;
                				;
 09D0 DBDA      	IN	P$IN$LS258$A	;SETZE TXP-LEITUNG
 09D2 E680      	ANI	MASK$CTSP	;AUF DEN
 09D4 85        	ADD	L		;PEGEL  DER
 09D5 3F        	CMC			;CTSP-LEITUNG
 09D6 17        	RAL			;
 09D7 A4        	ANA	H		;
 09D8 F6FA      	ORI	PAD$TXP		;
 09DA D3D8      	OUT	P$LS259		;
                				;
                	EXX			;
 09DC+D9        	DB	0D9H
                				;
                	JR	BLINK$LOOP1	;
 09DD+18D4      	DB	18H,BLINK$LOOP1-$-1
                				;
                INIT14:				;OK, MONITOR KANN LAUFEN
                				;
                ;***				
 09DF 31E6FE    	LXI	SP,MSTAK	;SETZE STACKPOINTER
                ;***
 09E2 214E1E    	LXI	H,DISKPAGE	;COPIERE ALS ALLERERSTES NACH RAM EIN
 09E5 1100FF    	LXI	D,SYSTEMPAGE	;DIE DISKPAGE AUF DIE SYSTEMPAGE
 09E8 010001    	LXI	B,256		;
                	LDIR			;
 09EB+EDB0      	DB	0EDH,0B0H
                ;***
                	LDAI			;SPEICHER BANKFEHLERBYTE IN
CP/M RMAC ASSEM 1.1	#025	PROF-80 MONITOR VERSION 1.7

 09ED+ED57      	DB	0EDH,57H
 09EF 3229FF    	STA	BANK$ERR$BYTE	;SYSTEMPAGE
                ;***
 09F2 CDF714    	CALL	FLOPPY$RESET	;SETZE FLOPPY-CONTROLER
                				;ZURUECK
                ;***
                				;SETZE UMLEITUNGS SPRUENGE IM RAM
 09F5 3EC3      	MVI	A,0C3H		;JUMP BEFEHL IN AKKU
 09F7 211001    	LXI	H,GETCM		;UMLEITUNGSADRESSE IN HL
 09FA 322DFF    	STA	UMLEIT$GETCM	;
 09FD 222EFF    	SHLD	UMLEIT$GETCM+1	;
 0A00 214810    	LXI	H,CONST		;
 0A03 323CFF    	STA	UMLEIT$CONST	;
 0A06 223DFF    	SHLD	UMLEIT$CONST+1	;
 0A09 215810    	LXI	H,CONIN		;
 0A0C 324AFF    	STA	UMLEIT$CONIN	;
 0A0F 224BFF    	SHLD	UMLEIT$CONIN+1	;
 0A12 216810    	LXI	H,CONOUT	;
 0A15 324DFF    	STA	UMLEIT$CONOUT	;
 0A18 224EFF    	SHLD	UMLEIT$CONOUT+1	;
 0A1B 21E600    	LXI	H,START		;
 0A1E 3226FF    	STA	UMLEIT$NMI	;
 0A21 2227FF    	SHLD	UMLEIT$NMI+1	;
                ;***
                				;BESETZE SPEICHERZELLEN VOR
                				;
 0A24 AF        	XRA	A		;BESETZE BYTE MIT 0
 0A25 3236FF    	STA	HEAD		;
 0A28 3263FF    	STA	DERMSG		;FLOPPY-FEHLERMELDUNG AKTIV
 0A2B 3E01      	MVI	A,1		;BESETZE BYTE MIT 1
 0A2D 3225FF    	STA	TEST$TRACK	;
 0A30 3235FF    	STA	TRACK		;
 0A33 3237FF    	STA	SECTOR		;
 0A36 3E02      	MVI	A,2		;
 0A38 3265FF    	STA	WRITE$PRECOM	;PRECOMPENSATIONSZEIT AUF FESTEN WERT
 0A3B 3E0A      	MVI	A,10		;
 0A3D 3264FF    	STA	RWRETRY		;ANZAHL VERSUCHE FUER FLOPPY R/W
 0A40 210000    	LXI	H,0		;BESETZE WORT MIT 0
 0A43 2209FF    	SHLD	DISPADR		;
 0A46 215EFF    	LXI	H,IN$BUFF$ZEIG	;SETZE ZEIGER FUER SOFTIN BUFFER
 0A49 225EFF    	SHLD	IN$BUFF$ZEIG	;
                				;
 0A4C 3AB000    	LDA	XSEEKNR		;VORBESTZUNG WIE IM EPROM EINGEPATCHT
 0A4F 323FFF    	STA	SEEKNR		;
 0A52 3AB100    	LDA	XREADY$BYTE	;
 0A55 3275FF    	STA	READY$BYTE	;
 0A58 3AB200    	LDA	XTE$TIME	;
 0A5B 327BFF    	STA	TE$TIME		;
 0A5E 3AB500    	LDA	XSTEP$WAIT	;
 0A61 327EFF    	STA	STEP$WAIT	;
 0A64 2AAE00    	LHLD	XSPECD$WORD	;
 0A67 2279FF    	SHLD	SPECD$WORD	;
                				;
 0A6A 1166FF    	LXI	D,KENNUNG	;SETZE KENNUNGSTEXT
 0A6D 218D1C    	LXI	H,KENNUNGSTEXT	;
 0A70 010700    	LXI	B,7		;
CP/M RMAC ASSEM 1.1	#026	PROF-80 MONITOR VERSION 1.7

                	LDIR			;
 0A73+EDB0      	DB	0EDH,0B0H
 0A75 3A6500    	LDA	VERSIONNR	;SETZE MONITOR VERSIONSNUMMER
 0A78 326DFF    	STA	MON$VERS	;IM RAM
                				;
                ;***
 0A7B CD9000    	CALL	USERINIT	;INITIALISERE BENUTZER SCHNITSTELLEN
                ;***
 0A7E CDED1A    	CALL	GET$SPEED	;IST UHR DA? UND WELCHE TAKTRATE IM SYS.
 0A81 3205FF    	STA	CLKFLG		;FLAG FUER UHR DA, NICHT DA
                				;WENN KEINE UHR DA, WIRD 4MHZ SYS.TAKT
                	IF	NOT ACHTMHZ	;ANGENOMMEN.
 0A84 B7        	ORA	A		;
                	JRNZ	INIT3		;DIES ENTSPRICHT 8MHZ BEI
 0A85+2003      	DB	20H,INIT3-$-1
                	ENDIF			;ACHTMHZ=JA.
 0A87 21409C    	LXI	H,40000		;
 0A8A 2207FF    INIT3:	SHLD	SYSTEMTAKT	;LEGE SYSTEMTAKT AB
                				;
                ;***
 0A8D CD140E    	CALL	GET$JUMPER	;SETZE BEIDE JUMPERBYTE
 0A90 CD5412    	CALL	SET$SOFT$BAUD	;SETZE DIE VERZOEGERUNGSZEIT IN SOFTVERZ
                				;IN ABHAENIGKEIT VON BAUD$JUMPER$BYTE
                				;UND DEN EINTRAEGEN IN SOFT$BAUD$TAB
 0A93 3AB300    	LDA	XPRNT$BAUD		;
 0A96 CD6D12    	CALL	SET$SIMPLEX$BAUD	;SETZE SIMPLEX VERZOEGERUNG
                					;
 0A99 CD960E    	CALL	UNIOINIT	;INITIALISIERE UNIO
                				;
                ;***
                				;
 0A9C 21650B    	LXI	H,INITXT0	;GEBE KOPFTEXT AUS
 0A9F CDBB10    	CALL	SOUT		;
 0AA2 2A3600    	LHLD	SERNR		;GEBE SERIENNUMMER
 0AA5 CDF611    	CALL	PDEC		;ALS DEZIMALZAHL AUS
 0AA8 CDC610    	CALL	CROUT		;
                				;
                ;***
 0AAB 3A29FF    	LDA	BANK$ERR$BYTE	;GEBE GROESSE DES RAMBEREICHES AUS
 0AAE 218B0C    	LXI	H,INITXT9	;128K
 0AB1 FE00      	CPI	0		;
                	JRZ	INIT26		;
 0AB3+280A      	DB	28H,INIT26-$-1
 0AB5 214F0C    	LXI	H,INITXT6	;64K (NUR BANK 1)
 0AB8 FE01      	CPI	1		;
                	JRZ	INIT26		;
 0ABA+2803      	DB	28H,INIT26-$-1
 0ABC 216D0C    	LXI	H,INITXT7	;64K (NUR BANK 0)
 0ABF CDBB10    INIT26	CALL	SOUT		;
                				;
                ;***
 0AC2 3A05FF    	LDA	CLKFLG		;GEBE TAKTRATE AUS, WENN
 0AC5 B7        	ORA	A		;UHR UEBERHAUPT DA?
                	JRZ	NOCLK		;GEBE MELDUNG AUS, WENN UHR DA
 0AC6+2817      	DB	28H,NOCLK-$-1
 0AC8 21910B    	LXI	H,INITXT1	;
CP/M RMAC ASSEM 1.1	#027	PROF-80 MONITOR VERSION 1.7

 0ACB CDBB10    	CALL	SOUT		;
                	IF	NOT ACHTMHZ	;
 0ACE 2A07FF    	LHLD	SYSTEMTAKT	;GEBE ERMITTELTE TAKT FREQUENZ AUS
 0AD1 CDF611    	CALL	PDEC		;
 0AD4 21A10B    	LXI	H,INITXT2	;
 0AD7 CDBB10    	CALL	SOUT		;
                	ENDIF			;
 0ADA CDB313    	CALL	DISP$TIME	;GEBE UHRZEIT AUS
                	JR	NOCLK2		;
 0ADD+1806      	DB	18H,NOCLK2-$-1
                NOCLK:
                	IF	ACHTMHZ		;
                	LXI	H,INITXT1	;
                	CALL	SOUT		;
                	ENDIF			;
 0ADF 210B0C    	LXI	H,INITXT4	;GEBE MELDUNG AUS
 0AE2 CDBB10    	CALL	SOUT		;WENN UHR NICHT DA
                NOCLK2:
                				;
                				;
                ;***
                	IM1			;INTERRUPT MODE 1
 0AE5+ED56      	DB	0EDH,56H
 0AE7 FB        	EI			;ENABLE INTERRUPTS
 0AE8 3A13FF    	LDA	IO$JUMPERBYTE	;INTERRUPTBETRIEB DER SOFT-EINGABE?
 0AEB 3D        	DCR	A		;WENN JA GEBE RTS FREI
                	JRNZ	INIT28		;
 0AEC+2004      	DB	20H,INIT28-$-1
 0AEE 3EF4      	MVI	A,PAD$RTS	;
 0AF0 D3D8      	OUT	P$LS259		;
                INIT28:				;
                				;
                ;***
 0AF2 3A05FF    	LDA	CLKFLG		;SETZE DISKTIMING NEU, WENN
 0AF5 B7        	ORA	A		;A) UHR OK UND B) CHECKSUMME
 0AF6 CA100B    	JZ	INIT29		;DES SCHIFTREGISTERS STIMMT.
 0AF9 211DFF    	LXI	H,SHIFT$CONT+4	;BERECHNE PRUEFSUMME
 0AFC 7E        	MOV	A,M		;
 0AFD F61F      	ORI	00011111B	;MASKIERE JAHRESZAHL
 0AFF 0604      	MVI	B,4		;ADDIERE DIE RESTLICHEN 4 BYTE
 0B01 2B        INIT30	DCX	H		;
 0B02 86        	ADD	M		;
                	DJNZ	INIT30		;
 0B03+10FC      	DB	10H,INIT30-$-1
 0B05 B7        	ORA	A		;PRUEFSUMME MUSS 0 SEIN
 0B06 3E00      	MVI	A,0		;FALLS SPRUNG, DANN A=0
 0B08 C2100B    	JNZ	INIT29		;SONST DEFAULT WERTE
 0B0B CD2508    	CALL	UCMD2		;SETZE NEUES TIMING
 0B0E 3EFF      	MVI	A,0FFH		;FLAG FUER PROMT
 0B10 3203FF    INIT29:	STA	TEMP		;
                				;
                ;***
                				;
 0B13 CD0615    	CALL	INIFDC		;IST FLOPPY CONTROLLER IN ORDNUNG?
                				;WENN JA SETZE SOFT RESET
 0B16 3A06FF    	LDA	DISKFLG		;WAR ZUGRIFF AUF FLOPY CONTROLER MOEGLICH?
CP/M RMAC ASSEM 1.1	#028	PROF-80 MONITOR VERSION 1.7

 0B19 B7        	ORA	A		;
                	JRZ	INIT4		;SPRUNG WENN FLOPY NICHT OK
 0B1A+2805      	DB	28H,INIT4-$-1
 0B1C CDDE14    	CALL	SPECD		;SET DRIVE PAR. + DMA-MODE
                	JR	INIT5		;
 0B1F+180D      	DB	18H,INIT5-$-1
                INIT4:				;
 0B21 213C0C    	LXI	H,INITXT5	;GEBE MELDUNG FUER FLOPPY FEHLER AUS
 0B24 CDBB10    	CALL	SOUT		;
 0B27 3A84FF    	LDA	BOOT$FLG	;DEFAULT BOOT VON HARDDISK
 0B2A B7        	ORA	A		;JA, WENN NULL
 0B2B C2E600    	JNZ	START		;SONST KEIN BOOT MOEGLICH, ZUM MONITOR
                INIT5:				;
                				;
                ;***
                				;
 0B2E 3A03FF    	LDA	TEMP		;GEBE MELDUNG AUS OB NON-DEFAULT
 0B31 21AB0B    	LXI	H,INITXTA	;DISKTIMING
 0B34 3C        	INR	A		;
 0B35 CCBB10    	CZ	SOUT		;
                				;
                ;***
                				;
 0B38 21C80B    	LXI	H,INITXT3	;MONITOR ODER BOOT
 0B3B CDBB10    	CALL	SOUT		;
 0B3E 21F90B    	LXI	H,INITXTC	;
 0B41 3A84FF    	LDA	BOOT$FLG	;
 0B44 B7        	ORA	A		;
 0B45 C24B0B    	JNZ	INITA		;
 0B48 21010C    	LXI	H,INITXTB	;
 0B4B CDBB10    INITA:	CALL	SOUT		;
 0B4E CDFD10    	CALL	GETCH1		;
 0B51 F5        	PUSH	PSW		;
 0B52 CDC610    	CALL	CROUT		;GEBE AUF JEDEN FALL CR LF AUS
 0B55 F1        	POP	PSW		;
 0B56 FE0D      	CPI	0DH		;MONITOR?
 0B58 CAE600    	JZ	START		;NEIN BOOT
                				;
 0B5B 3A84FF    	LDA	BOOT$FLG	;TESTE, OB BOOT VON
 0B5E B7        	ORA	A		;HARDDISK ODER
 0B5F CA7619    	JZ	HCMD		;FLOPPY
 0B62 C34405    	JMP	BCMD		;
                				;
                ;***
                				;
 0B65 0C0D0A5052INITXT0	DB	0CH,0DH,0AH,'PROF-80, EPROM version 1.7  serial no. #$'
                	IF	ACHTMHZ
                INITXT1	DB	0DH,0AH,'System speed 8.00 MHz assumed',0DH,0AH,'$'
                	ELSE
 0B91 0D0A537973INITXT1	DB	0DH,0AH,'System speed $'
 0BA1 3030202848INITXT2	DB	'00 (Hz)',0DH,0AH,'$'
                	ENDIF
 0BAB 0D0A757365INITXTA	DB	0DH,0AH,'user defined disk timing',0Dh,0Ah,'$'
 0BC8 0D0A3C5245INITXT3	DB	0DH,0AH,'<RETURN> => Monitor, <other key> => boot from $'
 0BF9 466C6F7070INITXTC	DB	'Floppy $'
 0C01 4861726464INITXTB	DB	'Harddisk $'
CP/M RMAC ASSEM 1.1	#029	PROF-80 MONITOR VERSION 1.7

 0C0B 0D0A436C6FINITXT4	DB	0DH,0AH,'Clock failure'
                	IF	NOT ACHTMHZ
 0C1A 2C2034204D	DB	', 4 MHz system speed is assumed'
                	ENDIF
 0C39 0D0A24    	DB	0DH,0AH,'$'
 0C3C 0D0A466C6FINITXT5	DB	0DH,0AH,'Floppy failure',0DH,0AH,'$'
 0C4F 0D0A202020INITXT6	DB	0DH,0AH,'    64K RAM (Bank 1 only)',0DH,0AH,'$'
 0C6D 0D0A202020INITXT7	DB	0DH,0AH,'    64K RAM (Bank 0 only)',0DH,0AH,'$'
 0C8B 0D0A202020INITXT9	DB	0DH,0AH,'    128K RAM',0DH,0AH,'$'
                ;
                ;----------------------------------------------------ENDE INITIALISIERUNG----
                ;
                ;----------------------------------------------------EIN-AUSGABEROUTINEN-----
                ;
                ;
                ;
                GRAFIST:
                		;TERMINAL EINGABE STATUS
                		;AKKU 0 UND Z WENN KEIN ZEICHEN
                		;AKKU FF UN NZ WENN ZEICHEN
 0C9C DBC0      	IN	GRIPC
 0C9E E680      	ANI	GRIPIN$MASK
 0CA0 C8        	RZ
 0CA1 3EFF      	MVI	A,0FFH
 0CA3 B7        	ORA	A	;RESET ZERROFLAG
 0CA4 C9        	RET
                ;
                ;
                ;
                GRAFOST:
                		;TERMINAL AUSGABE STATUS
 0CA5 DBC0      	IN	GRIPC
 0CA7 E640      	ANI	GRIPOUT$MASK
 0CA9 C8        	RZ
 0CAA 3EFF      	MVI	A,0FFH
 0CAC B7        	ORA	A
 0CAD C9        	RET
                ;
                ;
                ;
                GRAFIN: 
                		;TERMINAL EINGABE
 0CAE DBC0      	IN	GRIPC
 0CB0 E680      	ANI	GRIPIN$MASK	;ZEICHEN DA ?
                        JRZ	GRAFIN   	;WARTE AUF ZEICHEN
 0CB2+28FA      	DB	28H,GRAFIN-$-1
 0CB4 DBC1              IN      GRIPD
 0CB6 C9        	RET
                ;
                ;
                GRAFOUT: 
                 		;TERMINAL AUSGABE
 0CB7 DBC0      	IN	GRIPC
 0CB9 E640      	ANI	GRIPOUT$MASK
                        JRZ     GRAFOUT	;WARTE BIS BUFFER LEER
 0CBB+28FA      	DB	28H,GRAFOUT-$-1
CP/M RMAC ASSEM 1.1	#030	PROF-80 MONITOR VERSION 1.7

 0CBD 79                MOV     A,C     ;AUSGABE ZEICHEN NACH A
 0CBE D3C1              OUT     GRIPD
 0CC0 C9        	RET
                ;
                ;
                ;
                	;EIN-AUSGABE FUER DIE DUPLEX SCHNITTSTELLE AUF DER CPU-KARTE
                	;
                	;
                SOFTOUT:
                	; GEBE INHALT VON REGISTER C IM SERIELLEN FORMAT AUS
                	;
 0CC1 C5        	PUSH	B		;RETTE BC
 0CC2 D5        	PUSH	D		;RETTE DE
 0CC3 E5        	PUSH	H		;RETTE HL
                SOFTOUT4:			
 0CC4 DBDA      	IN	P$IN$LS258$A	;WARTE AUF FREIGABE
 0CC6 E610      	ANI	MASK$CTS	;
                	JRZ	SOFTOUT4	;
 0CC8+28FA      	DB	28H,SOFTOUT4-$-1
 0CCA 3EF5      	MVI	A,PAD$RTS OR 1	;SPERRE EINGABE
 0CCC D3D8      	OUT	P$LS259		;
 0CCE F3        	DI			;SPERRE INTERRUPTS
                	RLCR	C		;BITS RICHTIG FUER AUSGABE
 0CCF+CB01      	DB	0CBH, 00H + C
 0CD1 16F6      	MVI	D,PAD$TX	;ADRESSE DES TXD BITS AM LS259
 0CD3 AF        	XRA	A		;STARTBIT IN AKKU
 0CD4 0609      	MVI	B,9		;GEBE 9 BITS AUS
                SOFTOUT1:
 0CD6 E601      	ANI	001H		;MASKIERE BIT FUER AUSGABE <7>
 0CD8 B2        	ORA	D		;PACKE ADRESSE DAZU <4>
 0CD9 D3D8      	OUT	P$LS259		;GEBE BIT AUS <11>
 0CDB 2A1EFF    	LHLD	SOFTVERZ	;LADE VERZOEGERUNGSZEIT <16>
                SOFTOUT2:
 0CDE 2B        	DCX	H		;VERZOEGERUNG <6>
 0CDF 7C        	MOV	A,H		;GLEICH NULL? <4>
 0CE0 B5        	ORA	L		; <4>
 0CE1 C2DE0C    	JNZ	SOFTOUT2	; <10>
                				;
                	RRCR	C		;SCHIEBE C UM EIN BIT NACH RECHTS <8>
 0CE4+CB09      	DB	0CBH, 08H + C
 0CE6 79        	MOV	A,C		; <4>
                	DJNZ	SOFTOUT1	; <13>
 0CE7+10ED      	DB	10H,SOFTOUT1-$-1
                				;
 0CE9 3EF7      	MVI	A,PAD$TX OR 1	;GEBE STOPBIT AUS
 0CEB D3D8      	OUT	P$LS259		;
 0CED 2A1EFF    	LHLD	SOFTVERZ	;
 0CF0 29        	DAD	H		;ZWEI STOPBITS
                SOFTOUT3:
 0CF1 2B        	DCX	H		;VERZOEGERUNG FUER
 0CF2 7C        	MOV	A,H		;STOPBIT
 0CF3 B5        	ORA	L		;
 0CF4 C2F10C    	JNZ	SOFTOUT3	;
                				;
 0CF7 FB        	EI			;GEBE INTERRUPTS FREI
CP/M RMAC ASSEM 1.1	#031	PROF-80 MONITOR VERSION 1.7

 0CF8 3A13FF    	LDA	IO$JUMPERBYTE	;KANN EINGABE FREI GEGEBEN WERDEN?
 0CFB 3D        	DCR	A		;JA WENN INT.BETRIEB
                	JRNZ	SOFTOUT5	;
 0CFC+2004      	DB	20H,SOFTOUT5-$-1
 0CFE 3EF4      	MVI	A,PAD$RTS	;GEBE EINGABE FREI
 0D00 D3D8      	OUT	P$LS259		;
                SOFTOUT5:
 0D02 E1        	POP	H		;RETTE HL
 0D03 D1        	POP	D		;RETTE DE
 0D04 C1        	POP	B		;RETTE BC
 0D05 79        	MOV	A,C		;ZEICHEN IN AKKU
 0D06 C9        	RET
                ;
                ;
                ;
                SOFTIN:
                	;EINLESEN EINES ZEICHENS SOWOHL IM INTERRUPT
                	;BETRIEB (INTERRUPT BETRIEB IST DANN, WENN DIE 
                	;SOFTSCHNITTSTELLE DIE KONSOLE TREIBT)
                	;ALS AUCH IM NICHT INTERRUPT BETRIEB
                	;
 0D07 C5        	PUSH	B
 0D08 D5        	PUSH	D
 0D09 E5        	PUSH	H
 0D0A 3A13FF    	LDA	IO$JUMPERBYTE	;IST INTERRUPT-BETRIEB?
 0D0D 3D        	DCR	A		;INT. WENN A=1
                	JRZ	SOFTIN8		;SPRUNG BEI INTERRUPT
 0D0E+2811      	DB	28H,SOFTIN8-$-1
 0D10 3EF4      	MVI	A,PAD$RTS	;GEBE RTS FREI
 0D12 D3D8      	OUT	P$LS259		;
 0D14 CD6E0D    	CALL	SOFTIN1		;ANSONSTEN WARTE AUF STARTBIT UND LESE EIN
 0D17 F5        	PUSH	PSW		;
 0D18 3EF5      	MVI	A,PAD$RTS OR 1	;
 0D1A D3D8      	OUT	P$LS259		;
 0D1C F1        	POP	PSW		;
 0D1D E1        	POP	H		;
 0D1E D1        	POP	D		;
 0D1F C1        	POP	B		;
 0D20 C9        	RET			;
                				;
                SOFTIN8:			;IM INTERRUPT-BETRIEB WIRD GEWARTET BIS
                				;DIE INTERRUPT SERVICE ROUTINE EIN ZEICHEN
                				;IN DEN BUFFER SCHREIBT
                				;
 0D21 FB        	EI			;VORSICHTSHALBER INT. ENABLE
 0D22 3EF4      	MVI	A,PAD$RTS	;
 0D24 D3D8      	OUT	P$LS259		;
E0D26 0E00      	MVI	C,IN$BUFF$ZEIG AND 0FFH
 0D28 3A5EFF    SOFTIN9	LDA	IN$BUFF$ZEIG	;WARTE BIS EIN ZEICHEN KOMMT
 0D2B B9        	CMP	C		;WENN GLEICH, DANN NOCH KEIN ZEICHEN
                	JRZ	SOFTIN9		;
 0D2C+28FA      	DB	28H,SOFTIN9-$-1
 0D2E 3EF5      	MVI	A,PAD$RTS OR 1	;RTS INAKTIV
 0D30 D3D8      	OUT	P$LS259		;
 0D32 F3        	DI			;OK, ZEICHEN DA, SPERRE INT.
 0D33 3A5DFF    	LDA	IN$BUFF$ZEIG-1	;LADE ZEICHEN IN AKKU
CP/M RMAC ASSEM 1.1	#032	PROF-80 MONITOR VERSION 1.7

 0D36 2A5EFF    	LHLD	IN$BUFF$ZEIG	;
 0D39 23        	INX	H		;UND ERHOEHE ZEIGER
 0D3A 225EFF    	SHLD	IN$BUFF$ZEIG	;
 0D3D 115DFF    	LXI	D,IN$BUFF$ZEIG-1;SCHIEBE ZEICHEN EINS HOCH
 0D40 215CFF    	LXI	H,IN$BUFF$ZEIG-2;
 0D43 010A00    	LXI	B,IN$BUFF$ZEIG-1-IN$BUFF$END	;
                	LDDR			;
 0D46+EDB8      	DB	0EDH,0B8H
 0D48 FB        	EI			;INTERRUPTS ENABLE
 0D49 F5        	PUSH	PSW		;
 0D4A 3EF4      	MVI	A,PAD$RTS	;GEBE EINGABE FREI
 0D4C D3D8      	OUT	P$LS259		;
 0D4E F1        	POP	PSW		;
 0D4F E1        	POP	H		;
 0D50 D1        	POP	D		;
 0D51 C1        	POP	B		;
 0D52 C9        	RET			;
                ;
                ;
                ;
                INT$SERVICE:
                	;NACH EINEM INTERRUPT UND WENN DIE SOFTSCHNITTSTELLE DIE KONSOLE
                	;BEDIENT, WIRD DIESE INTERRUPT-SERVIE-ROUTINE ANGESPROCHEN.
                	;SIE LIEST EIN ZEICHEN IN DIE SPEICHER ZELLE UNTER DIE IN$BUFF$ZEIG
                	;ZEIGT. IST DER BUFFER VOLL (11 BYTES), WIRD KEIN ZEICHEN
                	;MEHR EINGELESEN.
                	;
 0D53 F5        	PUSH	PSW		;
 0D54 C5        	PUSH	B		;
 0D55 D5        	PUSH	D		;
 0D56 E5        	PUSH	H		;
 0D57 CD740D    	CALL	SOFTIN2		;LESE ZEICHEN EIN
 0D5A 4F        	MOV	C,A		;RETTE ZEICHEN IN C
 0D5B 2A5EFF    	LHLD	IN$BUFF$ZEIG	;LADE BUFFER-ZEIGER
E0D5E 3E00      	MVI	A,IN$BUFF$END AND 0FFH
 0D60 BD        	CMP	L		;ZEIGER SCHON AM ENDE?
                	JRZ	INT$SERVICE1	;DANN GEHT ZEICHEN VERLOREN
 0D61+2805      	DB	28H,INT$SERVICE1-$-1
 0D63 2B        	DCX	H		;SONST LEGE ZEICHEN IN BUFFER
 0D64 71        	MOV	M,C		;
 0D65 225EFF    	SHLD	IN$BUFF$ZEIG	;UND SETZE ZEIGER NEU
                INT$SERVICE1:			;
 0D68 E1        	POP	H		;
 0D69 D1        	POP	D		;
 0D6A C1        	POP	B		;
 0D6B F1        	POP	PSW		;
 0D6C FB        	EI			;GEBE INT. FREI
 0D6D C9        	RET			;
                ;
                ;
                ;
                SOFTIN1:
                	;LESE ZEICHEN UEBER 74LS258 EIN
                	;
 0D6E DBDA      	IN	P$IN$LS258$A	;
 0D70 E601      	ANI	MASK$RX		;WARTE AUF STARTBIT
CP/M RMAC ASSEM 1.1	#033	PROF-80 MONITOR VERSION 1.7

                	JRZ	SOFTIN1		;DER LS258 NEGIERT
 0D72+28FA      	DB	28H,SOFTIN1-$-1
                SOFTIN2:			;
 0D74 2A1EFF    	LHLD	SOFTVERZ	;LADE VERZOEGERUNG
                	SRLR	H		;TEILE DURCH ZWEI
 0D77+CB3C      	DB	0CBH, 38H + H
                	RARR	L		;UM IN DER BIT MITTE ABZUTASTEN
 0D79+CB1D      	DB	0CBH, 18H + L
 0D7B 2B        SOFTIN5	DCX	H		;VERZOEGERUNGSSCHLEIFE
 0D7C 7C        	MOV	A,H		;FUER EIN HALBES BIT
 0D7D B5        	ORA	L		;
 0D7E C27B0D    	JNZ	SOFTIN5		;
                				;
 0D81 0608      	MVI	B,8		;LESE 8 BITS EIN
                SOFTIN3:
 0D83 2A1EFF    	LHLD	SOFTVERZ	;ERST EIN BIT VERZOEGERN <16>
 0D86 2B        SOFTIN4	DCX	H		;VERZOEGERUNGSSCHLEIFE
 0D87 7C        	MOV	A,H		;
 0D88 B5        	ORA	L		;
 0D89 C2860D    	JNZ	SOFTIN4		;
                				;
 0D8C DBDA      	IN	P$IN$LS258$A	;LESE BIT EIN <11>
 0D8E E601      	ANI	MASK$RX		; <7>
 0D90 C6FF      	ADI	0FFH		;SETZE CARRY WENN EINS <7>
                	RARR	C		;UND LEGE IN CHARPUF. <8>
 0D92+CB19      	DB	0CBH, 18H + C
                	DJNZ	SOFTIN3		;LESE 8 BITS EIN <13>
 0D94+10ED      	DB	10H,SOFTIN3-$-1
                				;
 0D96 79        	MOV	A,C		;ERGEBNISS IN AKKU
 0D97 2F        	CMA			;NEGIERE, DA LS258 AUCH NEGIERT
 0D98 E67F      SOFTIN7	ANI	7FH		;STRIPP OF PARITY
                				;
 0D9A F5        	PUSH	PSW		;
 0D9B 2A1EFF    	LHLD	SOFTVERZ	;WARTE STOP BIT AB
                SOFTIN10:
 0D9E 2B        	DCX	H		;
 0D9F 7C        	MOV	A,H		;
 0DA0 B5        	ORA	L		;
 0DA1 C29E0D    	JNZ	SOFTIN10	;
 0DA4 F1        	POP	PSW		;
                				;
 0DA5 C9        	RET
                ;
                ;
                ;
                SOFTIST:
                	;PRUEFE, OB IM INT.-BETRIEB EIN ZEICHEN IM BUFFER IST
                	;WENN EINS GEKOMMEN IST, SETZE A AUF FF
                	;SONST AUF 0
                	;IST KEIN INTERRUPT BETRIEB, DANN AKKU IMMER 0
                	;
 0DA6 E5        	PUSH	H
 0DA7 D5        	PUSH	D
 0DA8 C5        	PUSH	B
 0DA9 3A13FF    	LDA	IO$JUMPERBYTE	;INT.  BETRIEB?
CP/M RMAC ASSEM 1.1	#034	PROF-80 MONITOR VERSION 1.7

 0DAC 3D        	DCR	A		;
                	JRNZ	SOFTST1		;SPRUNG WENN KEIN INT.-BETRIEB
 0DAD+200C      	DB	20H,SOFTST1-$-1
 0DAF 3A5EFF    	LDA	IN$BUFF$ZEIG	;LADE ZEIGER
E0DB2 0E00      	MVI	C,IN$BUFF$ZEIG AND 0FFH
 0DB4 B9        	CMP	C		;VERGLEICHE
                	JRZ	SOFTST1		;SPRUNG WENN KEIN ZEICHEN DA
 0DB5+2804      	DB	28H,SOFTST1-$-1
 0DB7 3EFF      	MVI	A,0FFH		;
                	JR	SOFTST2		;
 0DB9+1802      	DB	18H,SOFTST2-$-1
 0DBB 3E00      SOFTST1	MVI	A,0		;
 0DBD E1        SOFTST2	POP	H
 0DBE D1        	POP	D
 0DBF E1        	POP	H
 0DC0 B7        	ORA	A		;SETZE ZEROFLAG
 0DC1 C9        	RET
                ;
                ;
                ;
                SOFTOST:
 0DC2 DBDA      	IN	P$IN$LS258$A	;LESE CTS EIN
 0DC4 E610      	ANI	MASK$CTS	;MASKIERE
 0DC6 C8        	RZ			;RETURN WENN NICHT BEREIT
 0DC7 3EFF      	MVI	A,0FFH		;SONST BEREIT
 0DC9 B7        	ORA	A		;RESET ZERRO-FLAG
 0DCA C9        	RET			;
                ;
                ;
                ;
                SOFTPRNTOST:
 0DCB DBDA      	IN	P$IN$LS258$A	;LESE CTSP EIN
 0DCD E680      	ANI	MASK$CTSP	;
 0DCF C8        	RZ			;
 0DD0 3EFF      	MVI	A,0FFH		;
 0DD2 B7        	ORA	A		;
 0DD3 C9        	RET
                ;
                ;
                ;
                SOFTPRNTOUT:
                	; GEBE INHALT VON REGISTER C IM SERIELLEN FORMAT 
                	; AUF DER SIMPLEX SCHNITTSTELLE AUS
                	;
 0DD4 C5        	PUSH	B		;RETTE BC
 0DD5 D5        	PUSH	D		;RETTE DE
 0DD6 E5        	PUSH	H		;RETTE HL
                SOFTPRNTOUT4:			
 0DD7 DBDA      	IN	P$IN$LS258$A	;WARTE AUF FREIGABE
 0DD9 E680      	ANI	MASK$CTSP	;
                	JRZ	SOFTPRNTOUT4	;
 0DDB+28FA      	DB	28H,SOFTPRNTOUT4-$-1
 0DDD 3EF5      	MVI	A,PAD$RTS OR 1	;SPERRE EINGABE VON DUPLEX SCHNITTSTELLE
 0DDF D3D8      	OUT	P$LS259		;
 0DE1 F3        	DI			;SPERRE INTERRUPTS
                	RLCR	C		;BITS RICHTIG FUER AUSGABE
CP/M RMAC ASSEM 1.1	#035	PROF-80 MONITOR VERSION 1.7

 0DE2+CB01      	DB	0CBH, 00H + C
 0DE4 16FA      	MVI	D,PAD$TXP	;ADRESSE DES TXD BITS AM LS259
 0DE6 AF        	XRA	A		;STARTBIT IN AKKU
 0DE7 0609      	MVI	B,9		;GEBE 9 BITS AUS
                SOFTPRNTOUT1:
 0DE9 E601      	ANI	001H		;MASKIERE BIT FUER AUSGABE <7>
 0DEB B2        	ORA	D		;PACKE ADRESSE DAZU <4>
 0DEC D3D8      	OUT	P$LS259		;GEBE BIT AUS <11>
 0DEE 2A73FF    	LHLD	SOFTPRNTVERZ	;LADE VERZOEGERUNGSZEIT <16>
                SOFTPRNTOUT2:
 0DF1 2B        	DCX	H		;VERZOEGERUNG <6>
 0DF2 7C        	MOV	A,H		;GLEICH NULL? <4>
 0DF3 B5        	ORA	L		; <4>
 0DF4 C2F10D    	JNZ	SOFTPRNTOUT2	; <10>
                				;
                	RRCR	C		;SCHIEBE C UM EIN BIT NACH RECHTS <8>
 0DF7+CB09      	DB	0CBH, 08H + C
 0DF9 79        	MOV	A,C		; <4>
                	DJNZ	SOFTPRNTOUT1	; <13>
 0DFA+10ED      	DB	10H,SOFTPRNTOUT1-$-1
                				;
 0DFC 3EFB      	MVI	A,PAD$TXP OR 1	;GEBE STOPBIT AUS
 0DFE D3D8      	OUT	P$LS259		;
 0E00 2A73FF    	LHLD	SOFTPRNTVERZ	;
 0E03 29        	DAD	H		;ZWEI STOPBITS
                SOFTPRNTOUT3:
 0E04 2B        	DCX	H		;VERZOEGERUNG FUER
 0E05 7C        	MOV	A,H		;STOPBIT
 0E06 B5        	ORA	L		;
 0E07 C2040E    	JNZ	SOFTPRNTOUT3	;
                				;
 0E0A FB        	EI			;GEBE INTERRUPTS FREI
 0E0B 3EF4      	MVI	A,PAD$RTS	;GEBE EINGABE FREI DUPLEX
 0E0D D3D8      	OUT	P$LS259		;SCHNITTSTELLE FREI
 0E0F E1        	POP	H		;RETTE HL
 0E10 D1        	POP	D		;RETTE DE
 0E11 C1        	POP	B		;RETTE BC
 0E12 79        	MOV	A,C		;ZEICHEN IN AKKU
 0E13 C9        	RET
                ;
                ;
                ;
                GET$JUMPER:
 0E14 218F0E    		LXI	H,PATAB		;
 0E17 01800E    	LXI	B,PDTAB		;
 0E1A 1ED8      	MVI	E,P$LS259	;
 0E1C 16DB      	MVI	D,P$IN$LS258$B	;
 0E1E CD290E    	CALL	JUMPIN		;
 0E21 3204FF    	STA	BAUD$JUMPERBYTE	;SPEICHERE AB
 0E24 7A        	MOV	A,D		;
 0E25 3213FF    	STA	IO$JUMPERBYTE	;
 0E28 C9        	RET
                ;
                ;
                ;
                JUMPIN:				;DIESES PROGRAMM LIEST DIE BEIDEN
CP/M RMAC ASSEM 1.1	#036	PROF-80 MONITOR VERSION 1.7

                				;JUMPER AUF DER UNIO- BZW PROF-KARTE
                				;EIN. FOLGENDE REGISTER MUESSEN BELEGT SEIN
                				;E=PORTADRESSE DES 74 LS259
                				;D=PORTADRESSE DES EINGANGS PORTS
                				;BC=ADRESSE DER DECODER TABELLE
                				;HL=ADRESSE DER AUSGANGS BITS
                				;AUSGABE
                				;AKKU=JUMPER 1, D=JUMPER2
                				;
 0E29 C5        	PUSH	B		;RETTE DECODER TABELLE
 0E2A 4B        	MOV	C,E		;
 0E2B 0603      	MVI	B,3		;ERSTES BITMUSTER AUSGEBEN
                	OUTIR			;
 0E2D+EDB3      	DB	0EDH,0B3H
 0E2F 79        	MOV	A,C		;TAUSCHE PORTADRESSE
 0E30 4A        	MOV	C,D		;
 0E31 57        	MOV	D,A		;
                	INP	A		;LESE ERSTES BITPAAR EIN
 0E32+ED78      	DB	0EDH,A*8+40H
 0E34 1F        	RAR			;SCHIEBE BITS NACH RECHTS
 0E35 1F        	RAR			;
 0E36 1F        	RAR			;
 0E37 1F        	RAR			;
 0E38 E603      	ANI	00000011B	;MASKIERE
 0E3A 5F        	MOV	E,A		;UND NACH E
                				;
 0E3B 79        	MOV	A,C		;TAUSCHE PORTADRESSE
 0E3C 4A        	MOV	C,D		;
 0E3D 57        	MOV	D,A		;
 0E3E 0602      	MVI	B,2		;ZWEITES BITMUSTER AUSGEBEN
                	OUTIR			;
 0E40+EDB3      	DB	0EDH,0B3H
 0E42 79        	MOV	A,C		;TAUSCHE PORTADRESE
 0E43 4A        	MOV	C,D		;
 0E44 57        	MOV	D,A		;
                	INP	A		;LESE ZWEITES BITPAAR EIN EIN
 0E45+ED78      	DB	0EDH,A*8+40H
 0E47 1F        	RAR			;EINMAL NACH RECHTS SCHIEBEN
 0E48 1F        	RAR			;
 0E49 E60C      	ANI	00001100B	;MASKIEREN
 0E4B B3        	ORA	E		;UND ZU E PACKEN
 0E4C 5F        	MOV	E,A		;
                				;
 0E4D 79        	MOV	A,C		;TAUSCHE PORTADRESSE
 0E4E 4A        	MOV	C,D		;
 0E4F 57        	MOV	D,A		;
 0E50 0602      	MVI	B,2		;DRITTES BITMUSTER AUSGEBEN
                	OUTIR			;
 0E52+EDB3      	DB	0EDH,0B3H
 0E54 79        	MOV	A,C		;TAUSCHE PORTADRESSE
 0E55 4A        	MOV	C,D		;
 0E56 57        	MOV	D,A		;
                	INP	A		;LESE DRITTES BITPAAR EIN
 0E57+ED78      	DB	0EDH,A*8+40H
 0E59 E630      	ANI	00110000B	;MASKIEREN UND ZU E PACKEN
 0E5B B3        	ORA	E		;
CP/M RMAC ASSEM 1.1	#037	PROF-80 MONITOR VERSION 1.7

 0E5C 0603      	MVI	B,3		;TRENNE BEIDE JUMPERFELDER
 0E5E 1F        JUMPI1	RAR			;
                	RALR	D		;
 0E5F+CB12      	DB	0CBH, 10H+D
 0E61 1F        	RAR			;
                	RALR	E		;
 0E62+CB13      	DB	0CBH, 10H+E
                	DJNZ	JUMPI1		;
 0E64+10F8      	DB	10H,JUMPI1-$-1
 0E66 E1        	POP	H		;HOLE DECODER TABELLE
 0E67 E5        	PUSH	H		;
 0E68 0600      	MVI	B,0		;
 0E6A 7A        	MOV	A,D		;
 0E6B E607      	ANI	00000111B	;
 0E6D 4F        	MOV	C,A		;
 0E6E 09        	DAD	B		;
 0E6F 56        	MOV	D,M		;
 0E70 E1        	POP	H		;HOLE DECODER TABELLE
 0E71 7B        	MOV	A,E		;
 0E72 E607      	ANI	00000111B	;
 0E74 4F        	MOV	C,A		;
 0E75 09        	DAD	B		;
 0E76 7E        	MOV	A,M		;
 0E77 C9        	RET			;
                ;
                ;
                ;
                
 0E78 06080C0E  UDTAB	DB	6,8,12,14	;DECODIER TABELLE FUER UNIO JUMPER
 0E7C 0A0E0E0E  	DB	10,14,14,14	;
                ;
 0E80 00000002  PDTAB	DB	0,0,0,2		;DECODIER TABELLE FUER PROF JUMPER
 0E84 00030401  	DB	0,3,4,1		;
                ;
 0E88 0B0C0E    UATAB	DB	0BH,0CH,0EH	;
 0E8B 0A0D      	DB	0AH,0DH		;
 0E8D 0C0F      	DB	0CH,0FH		;
                ;
 0E8F 801020    PATAB	DB	080H,010H,020H	;
 0E92 0090      	DB	000H,090H	;
 0E94 10A0      	DB	010H,0A0H	;
                ;
                ;
                ;
                ; ES FOLGEN UNIO TREIBER-ROUTINEN
                ;
                ;
                ;
                UNIOINIT:	;DIESE ROUTINE WIRD BEI INITIALISIERUNG DES MONITORS
                		;AUFGERUFEN. STROBE UND INIT FUER UNIO-CENTRONICS
                		;WURDEN VON INIT SCHON AUF HIGH GESETZT.
                		;UNIOINIT LIEST DIE BEIDEN SIO-BAUDRATEN-JUMPER EIN
                		;UND INITIALISIERT BEIDE SIO- UND DEN STI KANAL.
                		;
 0E96 21880E    	LXI	H,UATAB		;LESE UNIO BAUD JUMPER
 0E99 01780E    	LXI	B,UDTAB		;
CP/M RMAC ASSEM 1.1	#038	PROF-80 MONITOR VERSION 1.7

 0E9C 1E9E      	MVI	E,CONTR		;
 0E9E 169F      	MVI	D,STAT		;
 0EA0 CD290E    	CALL	JUMPIN		;
 0EA3 327DFF    	STA	SIOBBAUD	;
 0EA6 7A        	MOV	A,D		;
 0EA7 327CFF    	STA	SIOABAUD	;
                				;
 0EAA 3AB400    	LDA	STIBAUD		;INITIALISIERE STI
 0EAD CDBD0E    	CALL	STINIT		;
 0EB0 3A7CFF    	LDA	SIOABAUD	;
 0EB3 CD310F    	CALL	SAINIT		;
 0EB6 3A7DFF    	LDA	SIOBBAUD	;
 0EB9 CD5C0F    	CALL	SBINIT		;
 0EBC C9        	RET
                ;
                ;
                ;
                ; STI INITIALISIEREN, IN AKKU STEHT NUMMER FUER BAUDRATE
                ; FALLS OBERE 4 BIT VON AKKU .NE. 0 DANN WIRD BAUDRATE FUER
                ; RECEIVER UND TRANSMITTER GETRENNT EINGESTELLT
                ;
                STINIT:
 0EBD F5        	PUSH	PSW		;RETTE AKKU
 0EBE E60F      	ANI	0FH		;NUR TRANSMITTER BAUDRATE
 0EC0 CDDF0E    	CALL	STITINIT	;
 0EC3 F1        	POP	PSW		;JETZT RECEIVER BAUDRATE
 0EC4 47        	MOV	B,A		;
 0EC5 E6F0      	ANI	0F0H		;WENN OBERES HALBBYTE = 0
                	JRZ	STINIT1		;DANN GLEICHE BAUDRATE
 0EC7+2810      	DB	28H,STINIT1-$-1
 0EC9 78        	MOV	A,B		;
 0ECA E60F      	ANI	0FH		;38400 BAUD NUR AUF BEIDEN KANAELEN
                	JRZ	STINIT2		;GLEICHZEITIG MOEGLICH
 0ECC+280E      	DB	28H,STINIT2-$-1
 0ECE 78        	MOV	A,B		;
 0ECF 1F        	RAR			;
 0ED0 1F        	RAR			;
 0ED1 1F        	RAR			;
 0ED2 1F        	RAR			;
 0ED3 E60F      STINIT3	ANI	0FH		;
 0ED5 CDFF0E    	CALL	STIRINIT	;
 0ED8 C9        	RET			;
 0ED9 78        STINIT1	MOV	A,B		;
                	JR	STINIT3		;BEIDE KANAELE GLEICHE BAUDRATE
 0EDA+18F7      	DB	18H,STINIT3-$-1
 0EDC AF        STINIT2	XRA	A		;
                	JR	STINIT3		;BEIDE KANAELE 38400 BAUD		
 0EDD+18F4      	DB	18H,STINIT3-$-1
                ;
                STITINIT:
 0EDF 212010    	LXI	H,SERTAB	;ZEIGER FUER TABELLE BERECHNEN
 0EE2 4F        	MOV	C,A		;
 0EE3 0600      	MVI	B,0		;
 0EE5 09        	DAD	B		;
 0EE6 09        	DAD	B		;
 0EE7 3E02      	MVI	A,2		;POINTER AUF TIMER C DATA
CP/M RMAC ASSEM 1.1	#039	PROF-80 MONITOR VERSION 1.7

 0EE9 D388      	OUT	STI8		;
 0EEB 7E        	MOV	A,M		;TIMER C DATA
 0EEC D380      	OUT	STI0		;
 0EEE 23        	INX	H		;
 0EEF 3E07      	MVI	A,7		;TIMER C UND D CONTROL
 0EF1 D388      	OUT	STI8		;
 0EF3 7E        	MOV	A,M		;PRESCALE
 0EF4 E6F0      	ANI	0F0H		;NUR OBERES HALBBYTE
 0EF6 47        	MOV	B,A		;
 0EF7 DB80      	IN	STI0		;TIMER C CONTROL LOESCHEN
 0EF9 E60F      	ANI	0FH		;
 0EFB B0        	ORA	B		;
 0EFC D380      	OUT	STI0		;
 0EFE C9        	RET			;
                ;
                STIRINIT:
 0EFF 212010    	LXI	H,SERTAB	;
 0F02 4F        	MOV	C,A		;
 0F03 0600      	MVI	B,0		;ZEIGER FUER TABELLE BERRECHNEN
 0F05 09        	DAD	B		;2 EINTRAEGE PRO WERT
 0F06 09        	DAD	B		;
 0F07 3E01      	MVI	A,1		;POINTER AUF TIMER D DATA
 0F09 D388      	OUT	STI8		;
 0F0B 7E        	MOV	A,M		;TIMER D DATA
 0F0C D380      	OUT	STI0		;
 0F0E 23        	INX	H		;
 0F0F 3E07      	MVI	A,7		;TIMER C UND D CONTROL
 0F11 D388      	OUT	STI8		;
 0F13 7E        	MOV	A,M		;PRESCALE
 0F14 E60F      	ANI	0FH		;NUR UNTERES HALBBYTE
 0F16 47        	MOV	B,A		;
 0F17 DB80      	IN	STI0		;ALTE TIMER C UND D CONTROL DATEN
 0F19 E6F0      	ANI	0F0H		;TIMER D CONTROL LOESCHEN
 0F1B B0        	ORA	B		;NEUES TIMER D CONTROL EINTRAGEN
 0F1C D380      	OUT	STI0		;
 0F1E 79        	MOV	A,C		;
 0F1F B7        	ORA	A		;
 0F20 3E88      	MVI	A,10001000B	;USART CONTROL: 8 DATA BIT, NO PAR, 1 STOP
                	JRNZ	STINIT4		;
 0F22+2002      	DB	20H,STINIT4-$-1
 0F24 E67F      	ANI	01111111B	;SCALE/1 BEI 38.4 BAUD
 0F26 D38C      STINIT4	OUT	STIC		;
 0F28 3E01      	MVI	A,1		;
 0F2A D38D      	OUT	STID		;RECEIVER ENABLE
 0F2C 3E95      	MVI	A,95H		;
 0F2E D38E      	OUT	STIE		;TRANSMITTER ENABLE
 0F30 C9        	RET			;
                ;
                ;
                ;
                ; SIO A INITIALISIERUNG, IN AKKU STEHT NUMMER FUER BAUDRATE
                ;
                SAINIT:
 0F31 212010    	LXI	H,SERTAB	;
 0F34 5F        	MOV	E,A		;
 0F35 1600      	MVI	D,0		;ZEIGER FUER TABELLE BERRECHNEN
CP/M RMAC ASSEM 1.1	#040	PROF-80 MONITOR VERSION 1.7

 0F37 19        	DAD	D		;2 EINTRAEGE PRO WERT
 0F38 19        	DAD	D		;
 0F39 7E        	MOV	A,M		;TIMER B DATA
 0F3A D38A      	OUT	STIA		;
 0F3C 23        	INX	H		;
 0F3D 7E        	MOV	A,M		;PRESCALE
 0F3E E60F      	ANI	0FH		;NUR UNTERES HALBBYTE
 0F40 47        	MOV	B,A		;
 0F41 DB89      	IN	STI9		;ALTE TIMER A UND B CONTROL DATEN
 0F43 E6F0      	ANI	0F0H		;TIMER B CONTROL LOESCHEN
 0F45 B0        	ORA	B		;NEUE TIMER B CONTROL DATEN
 0F46 D389      	OUT	STI9		;
 0F48 214010    	LXI	H,SIOTAB	;TABELLE FUER SIO INITIALISIERUNG
 0F4B 46        	MOV	B,M		;TABELLEN LAENGE
 0F4C 23        	INX	H		;
 0F4D 0E96      	MVI	C,SIOAC		;
                	OUTIR			;TABELLE AN SIO UEBERGEBEN
 0F4F+EDB3      	DB	0EDH,0B3H
 0F51 7B        	MOV	A,E		;
 0F52 B7        	ORA	A		;
 0F53 3E44      	MVI	A,01000100B	;SIO WR-REG.4: CLOCK/16, 1 STOP, NO PAR.
                	JRNZ	SAINIT1		;
 0F55+2002      	DB	20H,SAINIT1-$-1
 0F57 E6BF      	ANI	10111111B	;CLOCK/1 BEI 38.4 BAUD
 0F59 D396      SAINIT1	OUT	SIOAC		;
 0F5B C9        	RET			;
                ;
                ;
                ;
                ; SIO B INITIALISIERUNG, IN AKKU STEHT NUMMER FUER BAUDRATE
                ;
                SBINIT:
 0F5C 212010    	LXI	H,SERTAB	;
 0F5F 5F        	MOV	E,A		;
 0F60 1600      	MVI	D,0		;ZEIGER FUER TABELLE BERRECHNEN
 0F62 19        	DAD	D		;2 EINTRAEGE PRO WERT
 0F63 19        	DAD	D		;
 0F64 7E        	MOV	A,M		;TIMER A DATA
 0F65 D38B      	OUT	STIB		;
 0F67 23        	INX	H		;
 0F68 7E        	MOV	A,M		;PRESCALE
 0F69 E6F0      	ANI	0F0H		;NUR OBERES HALBBYTE
 0F6B 47        	MOV	B,A		;
 0F6C DB89      	IN	STI9		;ALTE TIMER A UND B CONTROL DATEN
 0F6E E60F      	ANI	0FH		;TIMER A CONTROL LOESCHEN
 0F70 B0        	ORA	B		;NEUE TIMER A CONTROL DATEN
 0F71 D389      	OUT	STI9		;
 0F73 214010    	LXI	H,SIOTAB	;TABELLE FUER SIO INITIALISIERUNG
 0F76 46        	MOV	B,M		;TABELLEN LAENGE
 0F77 23        	INX	H		;
 0F78 0E97      	MVI	C,SIOBC		;
                	OUTIR			;TABELLE AN SIO UEBERGEBEN
 0F7A+EDB3      	DB	0EDH,0B3H
 0F7C 7B        	MOV	A,E		;
 0F7D B7        	ORA	A		;
 0F7E 3E44      	MVI	A,01000100B	;SIO WR-REG.4: CLOCK/16, 1 STOP, NO PAR.
CP/M RMAC ASSEM 1.1	#041	PROF-80 MONITOR VERSION 1.7

                	JRNZ	SBINIT1		;
 0F80+2002      	DB	20H,SBINIT1-$-1
 0F82 E6BF      	ANI	10111111B	;CLOCK/1 BEI 38.4 BAUD
 0F84 D397      SBINIT1	OUT	SIOBC		;
 0F86 C9        	RET			;
                ;
                ;
                ;
                ; STI OUT
                ;
 0F87 CD900F    STOUT	CALL	STOST		;BEREIT ?
                	JRZ	STOUT		;
 0F8A+28FB      	DB	28H,STOUT-$-1
 0F8C 79        	MOV	A,C		;
 0F8D D38F      	OUT	STIF		;
 0F8F C9        	RET			;
                ;
                ;
                ;
                ; STI OUT STATUS
                ;
 0F90 DB8E      STOST	IN	STIE		;
 0F92 E680      	ANI	10000000B	;
 0F94 C8        	RZ			;
 0F95 F6FF      	ORI	0FFH		;
 0F97 C9        	RET			;
                ;
                ;
                ;
                ; STI IN
                ;
 0F98 CDA00F    STIN	CALL	STIST		;
                	JRZ	STIN		;
 0F9B+28FB      	DB	28H,STIN-$-1
 0F9D DB8F      	IN	STIF		;
 0F9F C9        	RET			;
                ;
                ;
                ;
                ; STI INPUT STATUS
                ;
 0FA0 DB8D      STIST	IN	STID		;
 0FA2 E680      	ANI	10000000B	;
 0FA4 C8        	RZ			;
 0FA5 F6FF      	ORI	0FFH		;
 0FA7 C9        	RET			;
                ;
                ;
                ;
                ; SIO A OUT
                ;
 0FA8 CDB10F    SAOUT	CALL	SAOST		;
                	JRZ	SAOUT		;NOCH NICHT BEREIT
 0FAB+28FB      	DB	28H,SAOUT-$-1
 0FAD 79        	MOV	A,C		;
 0FAE D394      	OUT	SIOAD		;ZEICHEN SENDEN
CP/M RMAC ASSEM 1.1	#042	PROF-80 MONITOR VERSION 1.7

 0FB0 C9        	RET			;
                ;
                ;
                ;
                ; SIO A OUT STATUS
                ;
 0FB1 DB96      SAOST	IN	SIOAC		;LESE STATUS
 0FB3 E604      	ANI	00000100B	;
 0FB5 C8        	RZ			;
 0FB6 F6FF      	ORI	0FFH		;
 0FB8 C9        	RET
                ;
                ;
                ;
                ; SIO A IN
                ;
 0FB9 CDC10F    SAIN	CALL	SAIST		;
                	JRZ	SAIN		;NOCH KEIN ZEICHEN EMPFANGEN
 0FBC+28FB      	DB	28H,SAIN-$-1
 0FBE DB94      	IN	SIOAD		;
 0FC0 C9        	RET			;
                ;
                ;
                ;
                ; SIO A IN STATUS
                ;
 0FC1 DB96      SAIST	IN	SIOAC		;LESE STATUS
 0FC3 E601      	ANI	00000001B	;
 0FC5 C8        	RZ			;
 0FC6 F6FF      	ORI	0FFH		;
 0FC8 C9        	RET			;
                ;
                ;
                ;
                ; SIO B OUT
                ;
 0FC9 CDD20F    SBOUT	CALL	SBOST		;
                	JRZ	SBOUT		;NOCH NICHT BEREIT
 0FCC+28FB      	DB	28H,SBOUT-$-1
 0FCE 79        	MOV	A,C		;
 0FCF D395      	OUT	SIOBD		;ZEICHEN SENDEN
 0FD1 C9        	RET			;
                ;
                ;
                ;
                ; SIO B OUT STATUS
                ;
 0FD2 DB97      SBOST	IN	SIOBC		;LESE STATUS
 0FD4 E604      	ANI	00000100B	;
 0FD6 C8        	RZ			;
 0FD7 F6FF      	ORI	0FFH		;
 0FD9 C9        	RET
                ;
                ;
                ;
                ; SIO B IN
CP/M RMAC ASSEM 1.1	#043	PROF-80 MONITOR VERSION 1.7

                ;
 0FDA CDE20F    SBIN	CALL	SBIST		;
                	JRZ	SBIN		;NOCH KEIN ZEICHEN EMPFANGEN
 0FDD+28FB      	DB	28H,SBIN-$-1
 0FDF DB95      	IN	SIOBD		;
 0FE1 C9        	RET			;
                ;
                ;
                ;
                ; SIO B IN STATUS
                ;
 0FE2 DB97      SBIST	IN	SIOBC		;LESE STATUS
 0FE4 E601      	ANI	00000001B	;
 0FE6 C8        	RZ			;
 0FE7 F6FF      	ORI	0FFH		;
 0FE9 C9        	RET			;
                ;
                ;
                ;
                ; CENTRONICS 1 OUT
                ;
 0FEA CDFC0F    C1OUT	CALL	C1OST		;BEREIT FUER NAECHSTES ZEICHEN?
                	JRZ	C1OUT		;
 0FED+28FB      	DB	28H,C1OUT-$-1
 0FEF 79        	MOV	A,C		;
 0FF0 D39C      	OUT	CENT1		;
 0FF2 3E04      	MVI	A,4		;/STB1 = LOW
 0FF4 D39E      	OUT	CONTR		;
 0FF6 3E05      	MVI	A,5		;/STB1 = HIGH
 0FF8 D39E      	OUT	CONTR		;
 0FFA 79        	MOV	A,C		;GESENDETES ZEICHEN IN A
 0FFB C9        	RET			;
                ;
                ;
                ;
                ; CENTRONICS 1 OUT STATUS
                ;
 0FFC DB9F      C1OST	IN	STAT		;CENTRONICS 1 STATUS
 0FFE 2F        	CMA			;
 0FFF E640      	ANI	01000000B	;
 1001 C8        	RZ			;
 1002 F6FF      	ORI	0FFH		;
 1004 C9        	RET			;
                ;
                ;
                ;
                ; CENTRONICS 2 OUT
                ;
 1005 CD1710    C2OUT	CALL	C2OST		;BEREIT FUER NAECHSTES ZEICHEN?
                	JRZ	C2OUT		;
 1008+28FB      	DB	28H,C2OUT-$-1
 100A 79        	MOV	A,C		;
 100B D39D      	OUT	CENT2		;
 100D 3E06      	MVI	A,6		;/STB2 = LOW
 100F D39E      	OUT	CONTR		;
 1011 3E07      	MVI	A,7		;/STB2 = HIGH
CP/M RMAC ASSEM 1.1	#044	PROF-80 MONITOR VERSION 1.7

 1013 D39E      	OUT	CONTR		;
 1015 79        	MOV	A,C		;GESENDETES ZEICHEN IN A
 1016 C9        	RET			;
                ;
                ;
                ;
                ; CENTRONICS 2 OUT STATUS
                ;
 1017 DB9F      C2OST	IN	STAT		;CENTRONICS 2 STATUS
 1019 2F        	CMA			;
 101A E680      	ANI	10000000B	;
 101C C8        	RZ			;
 101D F6FF      	ORI	0FFH		;
 101F C9        	RET			;
                ;
                ;
                ;
                ;
                SERTAB:
 1020 0811      	DB	8,11H		;38400 	 BAUD
 1022 6033      	DB	96,33H		;   50   BAUD
 1024 4033      	DB	64,33H		;   75   BAUD
 1026 AF11      	DB	175,11H		;  110   BAUD
 1028 8F11      	DB	143,11H		;  134.5 BAUD
 102A 8011      	DB	128,11H		;  150   BAUD
 102C 4011      	DB	64,11H		;  300   BAUD
 102E 2011      	DB	32,11H		;  600	 BAUD
 1030 1011      	DB	16,11H		; 1200   BAUD
 1032 0B11      	DB	11,11H		; 1745   BAUD
 1034 0811      	DB	8,11H		; 2400   BAUD
 1036 0511      	DB	5,11H		; 3840   BAUD
 1038 0411      	DB	4,11H		; 4800	 BAUD
 103A 0311      	DB	3,11H		; 6400   BAUD
 103C 0211      	DB	2,11H		; 9600   BAUD
 103E 0111      	DB	1,11H		;19200   BAUD
                ;
                ;
                ;
                SIOTAB:
 1040 07        	DB	SIOTAL-SIOTAB-1
 1041 0100      	DB	1,0
 1043 03E1      	DB	3,11100001B
 1045 05EA      	DB	5,11101010B
 1047 04        	DB	4
 1048 =         SIOTAL	EQU	$
                ;
                ;
                ;
                ;-------------------------------------------------ENDE DER E/A-ROUTINEN-----
                ;
                ;
                ;
                CONST:
                	;VERTEILER FUER CONSOLEN STATUS
                	;DIE ROUTINEN MUESSEN A=FF UND KEIN ZERO-FLAG SETZEN
                	;FALLS EIN ZEICHEN DA IST SONST AKKU= 0 UND ZERO-FLAG
CP/M RMAC ASSEM 1.1	#045	PROF-80 MONITOR VERSION 1.7

                	;
 1048 3A13FF    	LDA	IO$JUMPERBYTE		;LESE JUMPERBYTE EIN
 104B CD7810    	CALL	VERTEILER		;
 104E 9C0C      	DW	GRAFIST			;
 1050 A60D      	DW	SOFTIST			;
 1052 7E00      	DW	USER1IST		;
 1054 8A00      	DW	USER2IST		;
 1056 8710      	DW	DUMMYIST		;
                ;
                ;
                ;
                CONIN:
                	;VERTEILER FUER CONSOLEN EINGABE
                	;DIE ROUTINE MUSSEN AUF EIN ZEICHEN VON DER KONSOLE WARTEN
                	;UND DIESES IM AKKU UEBERGEBEN
                	;ALLE ANDEREN REGISTER BLEIBEN UNVERAENDERT
                	;
 1058 3A13FF    	LDA	IO$JUMPERBYTE		;
 105B CD7810    	CALL	VERTEILER		;
 105E AE0C      	DW	GRAFIN			;
 1060 070D      	DW	SOFTIN			;
 1062 7800      	DW	USER1IN			;
 1064 8400      	DW	USER2IN			;
 1066 8B10      	DW	DUMMYIN			;
                ;
                ;
                ;
                CONOUT:
                	;VERTEILER FUER CONSOLEN AUSGABE
                	;DAS ZEICHEN IN REG C. WIRD VON DEN ROUTINEN AUSGEGEBEN
                	;UND IN AKKU KOPIERT, ALLE ANDEREN REGISTER BLEIBEN UNVERAENDERT
                	;
 1068 3A13FF    	LDA	IO$JUMPERBYTE		;
 106B CD7810    	CALL	VERTEILER		;
 106E B70C      	DW	GRAFOUT			;
 1070 C10C      	DW	SOFTOUT			;
 1072 7B00      	DW	USER1OUT		;
 1074 8700      	DW	USER2OUT		;
 1076 8E10      	DW	DUMMYOUT		;
                ;
                ;
                ;
                VERTEILER:
                	;VERZEIGT AUF EINE DER ADRESSEN DIE DER RETURNADRESSE FOLGEN
                	;
 1078 E3        	XTHL			;LEGE RETURNADRESSE IN HL
                VERTEILER1:
 1079 3D        	DCR	A		;WAR AKKU NULL?
 107A FA8110    	JM	VERTEILER2	;DANN ZEIGT HL AUF DIE RICHTIGE RETURN ADR.
 107D 23        	INX	H		;ANSONSTEN EINE ADRESSE WEITER
 107E 23        	INX	H		;
                	JR	VERTEILER1	;
 107F+18F8      	DB	18H,VERTEILER1-$-1
                VERTEILER2:
 1081 7E        	MOV	A,M		;LADE ADRESSE DER ROUTINE IN HL
 1082 23        	INX	H		;
CP/M RMAC ASSEM 1.1	#046	PROF-80 MONITOR VERSION 1.7

 1083 66        	MOV	H,M		;
 1084 6F        	MOV	L,A		;
 1085 E3        	XTHL			; LADE ALTES HL UND LEGE ADRESSE DER ROUTINE
                				; AUF DEN STACK
 1086 C9        	RET			; SPRINGE IN DIE RICHTIGE ROUTINE
                ;
                ;
                ;
                DUMMYIST:
 1087 3EFF      	MVI	A,0FFH
 1089 B7        	ORA	A
 108A C9        	RET
                ;
                ;
                ;
                DUMMYIN:
 108B 3E37      	MVI	A,'7'
 108D C9        	RET
                ;
                ;
                ;
                DUMMYOUT:
 108E 79        	MOV	A,C
 108F C9        	RET
                ;
                ;
                ;
                BREAK:
                	;PRUEFT OB EIN ZEICHEN EINGELESEN WURDE
                	;
 1090 CD0600    	CALL	CS		;
 1093 CAFA10    	JZ	FRET		;
 1096 CD0900    	CALL	CI		;LESE ZEICHEN
 1099 E67F      	ANI	7FH		;
 109B FE1B      	CPI	1BH		;GLEICH ESCAPE
 109D CA8313    	JZ	SRET		;JA ENDE
 10A0 CD0600    BREAK1	CALL	CS		;WARTE AUF NEUES ZEICHEN
                	JRZ	BREAK1		;
 10A3+28FB      	DB	28H,BREAK1-$-1
 10A5 CD0900    	CALL	CI		;LESE NEUES ZEICHEN
 10A8 E67F      	ANI	7FH		;
 10AA FE1B      	CPI	1BH		;
 10AC CA8313    	JZ	SRET		;WAR BREAK
 10AF C3FA10    	JMP	FRET		;WAR ETWAS ANDERES
                ;
                ;
                ;
                CNVBN: 
 10B2 79        	MOV	A,C		;
 10B3 D630      	SUI	'0'		;
 10B5 FE0A      	CPI	0AH		;
 10B7 F8        	RM			;
 10B8 D607      	SUI	7		;
 10BA C9        	RET
                ;
                ;
CP/M RMAC ASSEM 1.1	#047	PROF-80 MONITOR VERSION 1.7

                ;
                SOUT:				;GEBE STRING AUS
                				;ANFANG IN HL, ENDE DURCH 24HEX
 10BB 7E        	MOV	A,M		;LESE ZEICHEN
 10BC FE24      	CPI	'$'		;STRING ENDE
 10BE C8        	RZ			;RETURN WENN $
 10BF 4F        	MOV	C,A		;IN C FUER AUSGABE
 10C0 CD0C00    	CALL	CO		;GEBE ZEICHEN AUF CONSOLE
 10C3 23        	INX	H		;ZEIGER AUF NAECHSTES ZEICHEN
                	JR	SOUT		;WIEDERHOLE
 10C4+18F5      	DB	18H,SOUT-$-1
                ;
                ;
                ;
                CROUT: 
 10C6 C5        	PUSH	B		;
 10C7 0E0D      	MVI	C,0DH		;
 10C9 CDCE10    	CALL	ECHO		;
 10CC C1        	POP	B		;
 10CD C9        	RET
                ;
                ;
                ;
                ECHO: 
 10CE C5        	PUSH	B		;
 10CF 41        	MOV	B,C		;
 10D0 3E1B      	MVI	A,1BH		;
 10D2 B8        	CMP	B		;
                	JRNZ	ECH05		;
 10D3+2002      	DB	20H,ECH05-$-1
 10D5 0E24      	MVI	C,'$'		;
 10D7 CD0C00    ECH05:	CALL	CO		;
 10DA 3E0D      	MVI	A,0DH		;
 10DC B8        	CMP	B		;
                	JRNZ	ECH10		;
 10DD+2005      	DB	20H,ECH10-$-1
 10DF 0E0A      	MVI	C,0AH		;
 10E1 CD0C00    	CALL	CO		;
 10E4 C1        ECH10:	POP	B		;
 10E5 79        	MOV	A,C		;
 10E6 C9        	RET
                ;
                ;
                ;
                ERROR:
 10E7 21F010    	LXI	H,SYNERRTXT
 10EA CDBB10    	CALL	SOUT
 10ED C31001    JMP	GETCM
                ;
 10F0 2057686174SYNERRTXT	DB	' What?',BELL,0DH,0AH,'$'
                ;
                ;
                ;
                FRET: 
 10FA 37        	STC
 10FB 3F        	CMC
CP/M RMAC ASSEM 1.1	#048	PROF-80 MONITOR VERSION 1.7

 10FC C9        	RET
                ;
                ;
                ;
                ;
                GETCH1:	;LESE EIN ZEICHEN VON KONSOLE, UND WANDLE IN GROSSBUCHSTABEN
 10FD CD0900    	CALL	CI
 1100 E67F      	ANI	7FH
 1102 4F        	MOV	C,A
 1103 FE61      	CPI	'a'
 1105 D8        	RC
 1106 D620      	SUI	'a'-'A'
 1108 4F        	MOV	C,A
 1109 C9        	RET
                ;
                ;
                ;
                GETCH: 
 110A CD0900    	CALL	CI
 110D E67F      	ANI	7FH
 110F 4F        	MOV	C,A
 1110 C9        	RET
                ;
                ;
                ;
                GETHX: 
 1111 E5        	PUSH	H
 1112 210000    	LXI	H,0
 1115 1E00      	MVI	E,0
                L0228: 
 1117 CDFD10    	CALL	GETCH1
 111A 4F        	MOV	C,A
 111B CDA013    	CALL	VALDL
 111E D23011    	JNC	L0241
 1121 CDCE10    	CALL	ECHO
 1124 51        	MOV	D,C
 1125 E5        	PUSH	H
 1126 C1        	POP	B
 1127 E1        	POP	H
 1128 7B        	MOV	A,E
 1129 B7        	ORA	A
 112A C28313    	JNZ	SRET
 112D CAFA10    	JZ	FRET
                L0241: 
 1130 CD8513    	CALL	VALDG
 1133 D21711    	JNC	L0228
 1136 CDCE10    	CALL	ECHO
 1139 CDB210    	CALL	CNVBN
 113C 1EFF      	MVI	E,0FFH
 113E 29        	DAD	H
 113F 29        	DAD	H
 1140 29        	DAD	H
 1141 29        	DAD	H
 1142 0600      	MVI	B,0
 1144 4F        	MOV	C,A
 1145 09        	DAD	B
CP/M RMAC ASSEM 1.1	#049	PROF-80 MONITOR VERSION 1.7

 1146 C31711    	JMP	L0228
                ;
                ;
                ;
                GETDEZ:
                	;LESE DEZIMALZAHLEN NACH HL
                	;ALS TRENNZEICHEN WERDEN '/',':' UND <CR> ERKANNT
                	;TRENNZEICHEN WIRD IN AKKU UEBERGEBEN
                	;
 1149 0600      	MVI	B,0
 114B 210000    	LXI	H,0	;LOESCHE AKKU
 114E CDFD10    GETDEZ1	CALL	GETCH1	;LESE ZEICHEN
 1151 FE2F      	CPI	'/'
                	JRZ	GETDEZ2
 1153+281F      	DB	28H,GETDEZ2-$-1
 1155 FE3A      	CPI	':'
                	JRZ	GETDEZ2
 1157+281B      	DB	28H,GETDEZ2-$-1
 1159 FE0D      	CPI	0DH
                	JRZ	GETDEZ2
 115B+2817      	DB	28H,GETDEZ2-$-1
 115D D630      	SUI	'0'	;ZAHL ?
                	JRC	GETDEZ1
 115F+38ED      	DB	38H,GETDEZ1-$-1
 1161 FE0A      	CPI	0AH
                	JRNC	GETDEZ1
 1163+30E9      	DB	30H,GETDEZ1-$-1
 1165 4F        	MOV	C,A
 1166 29        	DAD	H
 1167 29        	DAD	H
 1168 29        	DAD	H
 1169 29        	DAD	H
 116A 09        	DAD	B
 116B 3E30      	MVI	A,'0'	;GEBE ZAHL AUS
 116D 81        	ADD	C
 116E 4F        	MOV	C,A
 116F CDCE10    	CALL	ECHO
                	JR	GETDEZ1
 1172+18DA      	DB	18H,GETDEZ1-$-1
 1174 4F        GETDEZ2	MOV	C,A
 1175 CDCE10    	CALL	ECHO
 1178 79        	MOV	A,C
 1179 C9        	RET
                ;
                ;
                ;
                DEZHEX:
                	;WANDELT DEZIMAL ZAHL IM AKKU IN HEXWERT UM
 117A C5        	PUSH	B
 117B FE00      	CPI	0	;IST SCHON 0?
                	JRZ	DEZHEX1
 117D+2809      	DB	28H,DEZHEX1-$-1
 117F 0600      	MVI	B,0
 1181 04        DEZHEX2 INR	B
 1182 3D        	DCR	A
 1183 27        	DAA
CP/M RMAC ASSEM 1.1	#050	PROF-80 MONITOR VERSION 1.7

 1184 C28111    	JNZ	DEZHEX2
 1187 78        	MOV	A,B
 1188 C1        DEZHEX1	POP	B
 1189 C9        	RET
                ;
                ;
                ;
                GETNM:
 118A 2E03      	MVI	L,3
 118C 79        	MOV	A,C
 118D E603      	ANI	3
 118F C8        	RZ
 1190 67        	MOV	H,A
                L025E: 
 1191 CD1111    	CALL	GETHX
 1194 D2E710    	JNC	ERROR
 1197 C5        	PUSH	B
 1198 2D        	DCR	L
 1199 25        	DCR	H
 119A CAA611    	JZ	L0273
 119D 7A        	MOV	A,D
 119E FE0D      	CPI	0DH
 11A0 CAE710    	JZ	ERROR
 11A3 C39111    	JMP	L025E
                L0273: 
 11A6 7A        	MOV	A,D
 11A7 FE0D      	CPI	0DH
 11A9 C2E710    	JNZ	ERROR
 11AC 01FFFF    	LXI	B,0FFFFH
 11AF 7D        	MOV	A,L
 11B0 B7        	ORA	A
 11B1 CAB911    	JZ	L0286
                L0281: 
 11B4 C5        	PUSH	B
 11B5 2D        	DCR	L
 11B6 C2B411    	JNZ	L0281
                L0286: 
 11B9 C1        	POP	B
 11BA D1        	POP	D
 11BB E1        	POP	H
 11BC CDCF11    	CALL	HILO
 11BF D2C411    	JNC	L0291
 11C2 54        	MOV	D,H
 11C3 5D        	MOV	E,L
                L0291: 
 11C4 E3        	XTHL
 11C5 D5        	PUSH	D
 11C6 C5        	PUSH	B
 11C7 E5        	PUSH	H
                L0295: 
 11C8 3D        	DCR	A
 11C9 F8        	RM
 11CA E1        	POP	H
 11CB E3        	XTHL
 11CC C3C811    	JMP	L0295
                HILO : 
CP/M RMAC ASSEM 1.1	#051	PROF-80 MONITOR VERSION 1.7

 11CF C5        	PUSH	B
 11D0 47        	MOV	B,A
 11D1 E5        	PUSH	H
 11D2 7A        	MOV	A,D
 11D3 B3        	ORA	E
 11D4 CAF011    	JZ	L02BD
 11D7 23        	INX	H
 11D8 7C        	MOV	A,H
 11D9 B5        	ORA	L
 11DA CAF011    	JZ	L02BD	;02BDH
 11DD E1        	POP	H
 11DE D5        	PUSH	D
 11DF 3EFF      	MVI	A,0FFH
 11E1 AA        	XRA	D
 11E2 57        	MOV	D,A
 11E3 3EFF      	MVI	A,0FFH
 11E5 AB        	XRA	E
 11E6 5F        	MOV	E,A
 11E7 13        	INX	D
 11E8 7D        	MOV	A,L
 11E9 83        	ADD	E
 11EA 7C        	MOV	A,H
 11EB 8A        	ADC	D
 11EC D1        	POP	D
 11ED 78        	MOV	A,B
 11EE C1        	POP	B
 11EF C9        	RET
                L02BD: 
 11F0 E1        	POP	H
 11F1 78        	MOV	A,B
 11F2 C1        	POP	B
 11F3 C38313    	JMP	SRET
                ;
                ;
                ;
                PDEC:
                	;GEBE HL REGISTER AL DEZIMALZAHL AUS
 11F6 011B12    	LXI	B,TABLE10
 11F9 11F0D8    	LXI	D,-10000
 11FC 3E2F      PNEXT:	MVI	A,'0'-1
 11FE E5        PDECL:	PUSH	H
 11FF 3C        	INR	A
 1200 19        	DAD	D
                	JRNC	STOPLOOP
 1201+3004      	DB	30H,STOPLOOP-$-1
 1203 33        	INX	SP
 1204 33        	INX	SP
                	JR	PDECL
 1205+18F7      	DB	18H,PDECL-$-1
                STOPLOOP:
 1207 D5        	PUSH	D
 1208 C5        	PUSH	B
 1209 4F        	MOV	C,A
 120A CDCE10    	CALL	ECHO
 120D C1        	POP	B
 120E D1        	POP	D
CP/M RMAC ASSEM 1.1	#052	PROF-80 MONITOR VERSION 1.7

                NEXTDIGIT:
 120F E1        	POP	H
 1210 0A        	LDAX	B
 1211 5F        	MOV	E,A
 1212 03        	INX	B
 1213 0A        	LDAX	B
 1214 57        	MOV	D,A
 1215 03        	INX	B
 1216 7B        	MOV	A,E
 1217 B2        	ORA	D
                	JRNZ	PNEXT
 1218+20E2      	DB	20H,PNEXT-$-1
 121A C9        	RET
                ;
                TABLE10:
 121B 18FC9CFFF6	DW	-1000,-100,-10,-1,0
                ;
                ;
                ;
                DEZOUT:	;WANDLE AKKU IN DEZIMALZAHL UND GEBE AKKU AUS
 1225 B7        	ORA	A	;AKKU NULL
                	JRZ	DEZOUT2	;DANN IST SCHON ALLES OK
 1226+2806      	DB	28H,DEZOUT2-$-1
 1228 47        	MOV	B,A
 1229 AF        	XRA	A
                DEZOUT1:
 122A 3C        	INR	A
 122B 27        	DAA
                	DJNZ	DEZOUT1
 122C+10FC      	DB	10H,DEZOUT1-$-1
                DEZOUT2:
 122E CD3712    	CALL	NMOUT
 1231 C9        	RET
                ;
                ;
                HLOUT:
 1232 7C        	MOV	A,H
 1233 CD3712    	CALL	NMOUT
 1236 7D        	MOV	A,L
                ;
                NMOUT: 
 1237 E5        	PUSH	H
 1238 C5        	PUSH	B
 1239 F5        	PUSH	PSW
 123A 0F        	RRC
 123B 0F        	RRC
 123C 0F        	RRC
 123D 0F        	RRC
 123E E60F      	ANI	0FH
 1240 4F        	MOV	C,A
 1241 CD9912    	CALL	PRVAL
 1244 CDCE10    	CALL	ECHO
 1247 F1        	POP	PSW
 1248 E60F      	ANI	0FH
 124A 4F        	MOV	C,A
 124B CD9912    	CALL	PRVAL
CP/M RMAC ASSEM 1.1	#053	PROF-80 MONITOR VERSION 1.7

 124E CDCE10    	CALL	ECHO
 1251 C1        	POP	B
 1252 E1        	POP	H
 1253 C9        	RET
                ;
                ;
                ;
                SET$SOFT$BAUD:
                	;SETZE DIE BAUDRATE DER SOFT-SCHNITTSTELLE
                	;ENTSPRECHEND DER STELLUNG VON BAUD$JUMPERBYTE
                	;NEHME DAZU DEN ENTSPRECHENDEN WERT AUS
                	;SOFT$BAUD$TAB UND KORRIGIERE  IHN MIT DER
                	;SYSTEMFREQUENZ
                	;
 1254 3A04FF    	LDA	BAUD$JUMPERBYTE	;STELLUNG VON BAUD$JUMPER
                SET$DUPLEX$BAUD:		;EINSPRUNG ZUM NEU SETZEN
 1257 2600      	MVI	H,0		;SOFT$BAUD$TAB EINTRAG
 1259 6F        	MOV	L,A
 125A 11611C    	LXI	D,SOFT$BAUD$TAB
 125D 29        	DAD	H		;MAL ZWEI
 125E 19        	DAD	D
 125F 5E        	MOV	E,M		;SOFT$BAUD$TAB-EINTRAG IN DE
 1260 23        	INX	H
 1261 56        	MOV	D,M
                	LBCD	SYSTEMTAKT	;SYSTEMTAKT IN BC
 1262+ED4B      	DB	0EDH,4BH
 1264+07FF      	DW	SYSTEMTAKT
 1266 CD8312    	CALL	MULTIP		;MULTIPLIZIERE
 1269 221EFF    	SHLD	SOFTVERZ	;UND TEILE DURCH 65536
                				;DA NUR DIE OBEREN 16 BITS GENUTZT WERDEN
 126C C9        	RET
                ;
                ;
                ;
                SET$SIMPLEX$BAUD:
                	;BERRECHNE DIE VERZOEGERUNGSZEIT FUER DIE SIMPLEX SCHNITTSTELLE
                	;DER WERT IM AKKU GIBT DEN LISTEN-EINTRAG DER SOFT$BAUD$TAB AN
                	;
 126D 2600      	MVI	H,0		;SOFT$BAUD$TAB EINTRAG
 126F 6F        	MOV	L,A		;
 1270 11611C    	LXI	D,SOFT$BAUD$TAB	;
 1273 29        	DAD	H		;MAL ZWEI
 1274 19        	DAD	D		;
 1275 5E        	MOV	E,M		;TABELLEN EINTRAG IN DE
 1276 23        	INX	H		;
 1277 56        	MOV	D,M		;
                	LBCD	SYSTEMTAKT	;KORRIGIERE MIT SYSTEMTAKT
 1278+ED4B      	DB	0EDH,4BH
 127A+07FF      	DW	SYSTEMTAKT
 127C CD8312    	CALL	MULTIP		;MULTIPLIZIERE
 127F 2273FF    	SHLD	SOFTPRNTVERZ	;TEILE DURCH 65536 UND LEGE AB
 1282 C9        	RET
                ;
                ;
                ;
                MULTIP:
CP/M RMAC ASSEM 1.1	#054	PROF-80 MONITOR VERSION 1.7

                	;MULTIPLIZIERT BC*DE 32BIT ERGEBNIS IN HLDE
 1283 210000    	LXI	H,0	;INITIALISIERE HL
 1286 3EF0      	MVI	A,-16	;SCHLEIFENZ[HLER
 1288 29        MUL7	DAD	H	;SCHIEBE DEHL UM 1BIT
 1289 EB        	XCHG		;NACH LINKS
                	DADC	H	;LSB=0
 128A+ED6A      	DB	0EDH,H*8+4AH
 128C EB        	XCHG
                	JRNC	MUL2	;1AUS DE
 128D+3004      	DB	30H,MUL2-$-1
 128F 09        	DAD	B	;DANN ADDIERE BC
                	JRNC	MUL2	;]BERTRAG ENTSTANDEN?
 1290+3001      	DB	30H,MUL2-$-1
 1292 13        	INX	D	;DANN DE EINS HOEHER
 1293 3C        MUL2	INR	A	;16 DURCHLAEUFE?
 1294 FA8812    	JM	MUL7	;SPRUNG WENN NEIN
 1297 EB        	XCHG		;DIE HOEHEREN BITS IN HL
 1298 C9        	RET
                ;
                ;
                ;
                PRVAL: 
 1299 F5        	PUSH	PSW
 129A 79        	MOV	A,C
 129B F6F0      	ORI	0F0H
 129D 27        	DAA
 129E C6A0      	ADI	0A0H
 12A0 CE40      	ACI	040H
 12A2 4F        	MOV	C,A
 12A3 F1        	POP	PSW
 12A4 C9        	RET
                ;
                ;
                ;
                RWINP:
                		;LIEST DMA ADRESSE UND ANZAHL DER SEKTOREN EIN
 12A5 CD1111    	CALL	GETHX	;LESE DMA ADRESSE
 12A8 D2E710    	JNC	ERROR
 12AB 7A        	MOV	A,D	;KEIN CR
 12AC FE0D      	CPI	0DH
 12AE CAE710    	JZ	ERROR	;SPRUNG WENN DOCH
                	SBCD	DMAADR	;ABSPEICHERN
 12B1+ED43      	DB	0EDH,43H
 12B3+2AFF      	DW	DMAADR
 12B5 CD1111    	CALL	GETHX	;LESE ANZAHL DER SEKTOREN
 12B8 D2E710    	JNC	ERROR
 12BB 7A        	MOV	A,D
 12BC FE0D      	CPI	0DH	;MUSS CR SEIN
 12BE C2E710    	JNZ	ERROR
 12C1 79        	MOV	A,C
 12C2 322CFF    	STA	SECTCNT	;ABSPEICHERN
 12C5 C9        	RET
                ;
                ;
                ;
                PRINT$DRIVE:
CP/M RMAC ASSEM 1.1	#055	PROF-80 MONITOR VERSION 1.7

                		;GIBT DEN LAUFWERK BUCHSTABEN UND EIN BLANK AUF DER
                		;KONSOLE AUS
 12C6 3A34FF    	LDA	UNIT	;WELCHES LAUFWERK?
 12C9 E603      	ANI	03H	;MASKIERE OBER 6 BITS
 12CB C641      	ADI	'A'	;WANDLE IN ASCII
 12CD 4F        	MOV	C,A
 12CE CD0C00    	CALL	CO
 12D1 0E20      	MVI	C,' '
 12D3 CD0C00    	CALL	CO
 12D6 C9        	RET
                ;
                ;
                ;
                REGDS: 
 12D7 21041E    	LXI	H,RTAB
                L02E9:
 12DA 4E        	MOV	C,M
 12DB 79        	MOV	A,C
 12DC B7        	ORA	A
 12DD C2E412    	JNZ	L02F3
 12E0 CDC610    	CALL	CROUT
 12E3 C9        	RET
                L02F3: 
 12E4 FE61      	CPI	'a'	;SOLL NEUE ZEILE ANFANGEN?
                	JRNZ	REGDS1	;SPRUNG WENN NEIN
 12E6+2007      	DB	20H,REGDS1-$-1
 12E8 F5        	PUSH	PSW
 12E9 C5        	PUSH	B
 12EA CDC610    	CALL	CROUT
 12ED C1        	POP	B
 12EE F1        	POP	PSW
                REGDS1:
 12EF CDCE10    	CALL	ECHO
 12F2 0E3D      	MVI	C,'='
 12F4 CDCE10    	CALL	ECHO
 12F7 23        	INX	H
 12F8 5E        	MOV	E,M
E12F9 1600      	MVI	D,(REGS AND 0FF00H) SHR 8
 12FB 23        	INX	H
 12FC 1A        	LDAX	D
 12FD CD3712    	CALL	NMOUT
 1300 7E        	MOV	A,M
 1301 B7        	ORA	A
 1302 CA0A13    	JZ	L030E
 1305 1B        	DCX	D
 1306 1A        	LDAX	D
 1307 CD3712    	CALL	NMOUT
                L030E: 
 130A 0E20      	MVI	C,' '
 130C CDCE10    	CALL	ECHO
 130F 23        	INX	H
 1310 C3DA12    	JMP	L02E9
                ;
                ;
                ;
                RGADR: 
CP/M RMAC ASSEM 1.1	#056	PROF-80 MONITOR VERSION 1.7

 1313 21041E    	LXI	H,RTAB
 1316 110300    	LXI	D,3	;LAENGE DER TABELLEN EINTRAEGE
                L031D: 
 1319 7E        	MOV	A,M
 131A B7        	ORA	A
 131B CAE710    	JZ	ERROR
 131E B9        	CMP	C
 131F CA2613    	JZ	L032A
 1322 19        	DAD	D
 1323 C31913    	JMP	L031D
                L032A: 
 1326 23        	INX	H
 1327 44        	MOV	B,H
 1328 4D        	MOV	C,L
 1329 C9        	RET
                ; 
                ;-----------------------------------------------REGISTER ZURUECKLADEN------
                ;
                RSTTF:
 132A F3        	DI
 132B 31E6FE    	LXI	SP,MSTAK
 132E C1        	POP	B	;LADE I UND R REGISTER
 132F 79        	MOV	A,C
                	STAR
 1330+ED4F      	DB	0EDH,4FH
 1332 78        	MOV	A,B
                	STAI
 1333+ED47      	DB	0EDH,47H
                	EXX
 1335+D9        	DB	0D9H
                	EXAF	;ERST ZWEITREGISTERSATZ LADEN
 1336+08        	DB	08H
 1337 E1        	POP	H
 1338 D1        	POP	D
 1339 C1        	POP	B
 133A F1        	POP	PSW
                	EXAF
 133B+08        	DB	08H
                	EXX	;JETZT NORMALER REGISTERSATZ
 133C+D9        	DB	0D9H
                	POPIY
 133D+FDE1      	DB	0FDH,0E1H
                	POPIX
 133F+DDE1      	DB	0DDH,0E1H
 1341 D1        	POP	D
 1342 C1        	POP	B
 1343 F1        	POP	PSW
                	LSPD	SSAVE
 1344+ED7B      	DB	0EDH,07BH
 1346+FEFE      	DW	SSAVE
 1348 2AFCFE    	LHLD	PSAVE
 134B E5        	PUSH	H
 134C 2AFAFE    	LHLD	LSAVE
 134F FB        	EI
                ;----------------------------------------ENDE REGISTER ZURUECKLADEN--------
 1350 C9        	RET
CP/M RMAC ASSEM 1.1	#057	PROF-80 MONITOR VERSION 1.7

                ;
                ;
                ;
                SETCMDT:
                	;NEHME WERTE AUS TEST$TYPE UND TEST$MSEK
                	;UND TRAGE SIE IN CMDTAB EIN
                	;
 1351 3A24FF    	LDA	TEST$MSEK	;ANZAHL DER SEKTOREN/SPUR
 1354 3239FF    	STA	EOT		;
 1357 3A23FF    	LDA	TEST$TYPE	;LADE TEST$TYPE
 135A 4F        	MOV	C,A		;UND RETTE IN C
 135B E640      	ANI	40H		;MASKIERE UND
 135D 3233FF    	STA	CMDTAB		;SETZE MFM BIT IN CMDTAB
 1360 79        	MOV	A,C		;
 1361 E60F      	ANI	0FH		;SETZE SEKTORGROESSE
 1363 3238FF    	STA	SECSZ		;
 1366 B7        	ORA	A		;
 1367 3EFF      	MVI	A,0FFH		;SETZE DTL AUF 80 BEI 128 BYTES/SEKTOR
                	JRNZ	CMDS1		;SONST AUF 0FFH
 1369+2002      	DB	20H,CMDS1-$-1
 136B 3E80      	MVI	A,80H		;
 136D 323BFF    CMDS1	STA	DTLL		;
 1370 79        	MOV	A,C		;SETZE GAP-LAENGE IN ABHAENGIGKEIT
 1371 E60F      	ANI	0FH		;VON DER SEKTORGROESSE
 1373 4F        	MOV	C,A		;
 1374 0600      	MVI	B,0		;
 1376 217F13    	LXI	H,GAPTAB	;
 1379 09        	DAD	B		;
 137A 7E        	MOV	A,M		;
 137B 323AFF    	STA	GAPLL		;
 137E C9        	RET			;
                				;
                GAPTAB:				;DIESE TABELLE GIBT DIE GAPLAENGE FUER JEDE
                				;SEKTORGROESE AN
 137F 07        	DB	007H		; GAPLAENGE FUER  128 BYTES/SEKTOR
 1380 0E        	DB	00EH		; GAPLAENGE FUER  256 BYTES/SEKTOR
 1381 1B        	DB	01BH		; GAPLAENGE FUER  512 BYTES/SEKTOR
 1382 35        	DB	035H		; GAPLAENGE FUER 1024 BYTES/SEKTOR
                ;
                ;
                ;
                SRET: 
 1383 37        	STC
 1384 C9        	RET
                ;
                ;
                ;
                VALDG: 
 1385 79        	MOV	A,C
 1386 FE30      	CPI	'0'
 1388 FAFA10    	JM	FRET
 138B FE39      	CPI	'9'
 138D FA8313    	JM	SRET
 1390 CA8313    	JZ	SRET
 1393 FE41      	CPI	'A'
 1395 FAFA10    	JM	FRET
CP/M RMAC ASSEM 1.1	#058	PROF-80 MONITOR VERSION 1.7

 1398 FE47      	CPI	'G'
 139A F2FA10    	JP	FRET
 139D C38313    	JMP	SRET
                ;
                ;
                ;
                VALDL: 
 13A0 79        	MOV	A,C
 13A1 FE2C      	CPI	','
 13A3 CA8313    	JZ	SRET
 13A6 FE0D      	CPI	0DH
 13A8 CA8313    	JZ	SRET
 13AB FE20      	CPI	' '
 13AD CA8313    	JZ	SRET
 13B0 C3FA10    	JMP	FRET
                ;
                ;
                ;
                DISP$TIME:
                	;GEBE UHRZEIT UND DATUM AUF DEN BILDSCHIRM
 13B3 CDBE1A    	CALL	READ$PHYS$TIME	;LESE ZEIT AUS UHR
 13B6 214714    	LXI	H,TIMTXT1	;DATUM TEXT AUS
 13B9 CDBB10    	CALL	SOUT
 13BC 3A18FF    	LDA	PHYS$TIME+4	;MONAT
 13BF 0F        	RRC
 13C0 0F        	RRC
 13C1 0F        	RRC
 13C2 0F        	RRC
 13C3 E60F      	ANI	0FH
 13C5 3D        	DCR	A
 13C6 FE0C      	CPI	12		;MONAT UNGUELTIG
                	JRC	DISP$TIME1
 13C8+3801      	DB	38H,DISP$TIME1-$-1
 13CA AF        	XRA	A		;DANN LOESCHE AKKU
                DISP$TIME1:
 13CB 6F        	MOV	L,A
 13CC 2600      	MVI	H,0
 13CE 29        	DAD	H
 13CF 29        	DAD	H
 13D0 017514    	LXI	B,MONTXT
 13D3 09        	DAD	B
 13D4 CDBB10    	CALL	SOUT
 13D7 0E20      	MVI	C,' '
 13D9 CDCE10    	CALL	ECHO
 13DC 3A17FF    	LDA	PHYS$TIME+3	;TAG
 13DF CD3712    	CALL	NMOUT
 13E2 0E20      	MVI	C,' '		;GEBE 19 AUS
 13E4 CDCE10    	CALL	ECHO
 13E7 3E19      	MVI	A,19H
 13E9 CD3712    	CALL	NMOUT
 13EC 3A1DFF    	LDA	SHIFT$CONT+4	;JAHRESZAHL
 13EF E61F      	ANI	1FH		;NUR DIE UNTEREN 5 BIT
 13F1 0650      	MVI	B,80		;ADDIERE 80 DAZU
 13F3 80        	ADD	B
 13F4 CD2512    	CALL	DEZOUT		;GEBE AUS
                ;
CP/M RMAC ASSEM 1.1	#059	PROF-80 MONITOR VERSION 1.7

 13F7 215E14    	LXI	H,TIMTXT2	;GEBE TIME AUS
 13FA CDBB10    	CALL	SOUT
 13FD 3A16FF    	LDA	PHYS$TIME+2	;STUNDE
 1400 CD3712    	CALL	NMOUT
 1403 0E3A      	MVI	C,':'
 1405 CDCE10    	CALL	ECHO
 1408 3A15FF    	LDA	PHYS$TIME+1	;MINUTE
 140B CD3712    	CALL	NMOUT
 140E 0E3A      	MVI	C,':'
 1410 CDCE10    	CALL	ECHO
 1413 3A14FF    	LDA	PHYS$TIME	;SEKUNDE
 1416 CD3712    	CALL	NMOUT
 1419 CDC610    	CALL	CROUT
 141C 3A13FF    	LDA	IO$JUMPERBYTE	;IST GRIP ALS KONSOLE DEFINIERT?
 141F B7        	ORA	A
 1420 C0        	RNZ			;RETURN WENN NICHT
 1421 214314    	LXI	H,SETTT		;SONST, SETZE GRIP-UHR
 1424 CDBB10    	CALL	SOUT		
 1427 3A16FF    	LDA	PHYS$TIME+2
 142A C620      	ADI	20H
 142C 4F        	MOV	C,A
 142D CDCE10    	CALL	ECHO
 1430 3A15FF    	LDA	PHYS$TIME+1
 1433 C620      	ADI	20H
 1435 4F        	MOV	C,A
 1436 CDCE10    	CALL	ECHO
 1439 3A14FF    	LDA	PHYS$TIME
 143C C620      	ADI	20H
 143E 4F        	MOV	C,A
 143F CDCE10    	CALL	ECHO 	
 1442 C9        	RET
                ;
 1443 1B1B5524  SETTT	DB	27,27,'U$'
 1447 0D0A202020TIMTXT1	DB	0DH,0AH,'              Date  $'
 145E 0D0A202020TIMTXT2	DB	0DH,0AH,'              Time  $'
 1475 4A616E24  MONTXT	DB	'Jan$'
 1479 46656224  	DB	'Feb$'
 147D 4D617224  	DB	'Mar$'
 1481 41707224  	DB	'Apr$'
 1485 4D617924  	DB	'May$'
 1489 4A756E24  	DB	'Jun$'
 148D 4A756C24  	DB	'Jul$'
 1491 41756724  	DB	'Aug$'
 1495 53657024  	DB	'Sep$'
 1499 4F637424  	DB	'Oct$'
 149D 4E6F7624  	DB	'Nov$'
 14A1 44656324  	DB	'Dec$'
                ;
                ;
                ;
                ;************************************************************
                ;
                ;ES FOLGEN NUN SERVICE ROUTINE FUER BOOT ROUTINE
                ;
                ;************************************************************
                ;
CP/M RMAC ASSEM 1.1	#060	PROF-80 MONITOR VERSION 1.7

                ;
                ;
                SETSEC$CNT:
                	;SETZE ANZAHL DER ZU UEBERTRAGENDEN SEKTOREN
 14A5 79        	MOV	A,C
 14A6 322CFF    	STA	SECTCNT
 14A9 C9        	RET
                ;
                SELDSK:
                	;SETZT UNIT BYTE
 14AA 79        	MOV	A,C
 14AB 3234FF    	STA	UNIT
 14AE C9        	RET
                ;
                SETTRK:
                	;SETZT TRACK BYTE
 14AF 79        	MOV	A,C
 14B0 3235FF    	STA	TRACK
 14B3 C9        	RET
                SETSEC:
                	;SETZT SECTOR BYTE
 14B4 79        	MOV	A,C
 14B5 3237FF    	STA	SECTOR
 14B8 C9        	RET
                ;
                SETDMA:
                	SBCD	DMAADR
 14B9+ED43      	DB	0EDH,43H
 14BB+2AFF      	DW	DMAADR
 14BD C9        	RET
                ;
                GETMINIMAX:
                	;WENN AKKU=0 DANN MAXI
                	;WENN AKKU=0FFH DANN MINI
 14BE 3A23FF    	LDA	TEST$TYPE
 14C1 E620      	ANI	20H
 14C3 C8        	RZ
 14C4 3EFF      	MVI	A,0FFH
 14C6 C9        	RET
                ;
                ;
                ;
                ;************************************************************
                ;
                ;ES FOLGEN NUN DISK ROUTINEN FUER UPD 765
                ;
                ;************************************************************
                ;
                ;
                ;
                BOOTERR:
                	;GEBE FEHLERMELDUNG BEI BOOT AUS
                	;UND GEHE ZUM MONITOR ZURUECK
 14C7 21D014    	LXI	H,BERMSG
 14CA CDBB10    	CALL	SOUT
 14CD C35701    	JMP	CRGETCM
CP/M RMAC ASSEM 1.1	#061	PROF-80 MONITOR VERSION 1.7

                ;
 14D0 2043616E20BERMSG	DB	' Can not boot',24H
                ;
                ;
                ;
                SPECD:
                	;SETZT DISK PARAMETER FUER NON DMA BETRIEB
 14DE 2A34FF    	LHLD	UNIT
 14E1 E5        	PUSH	H	;RETTE CMDTAB
 14E2 2A79FF    	LHLD	SPECD$WORD
 14E5 3E01      	MVI	A,1
 14E7 B4        	ORA	H
 14E8 67        	MOV	H,A
 14E9 010303    	LXI	B,0303H
 14EC 2234FF    	SHLD	UNIT
 14EF CD3F17    	CALL	CMFD
 14F2 E1        	POP	H
 14F3 2234FF    	SHLD	UNIT
 14F6 C9        	RET
                ;
                ;
                ;
                FLOPPY$RESET:
                			;GEBE HARDWARE-RESET
                			;AUF FLOPPY-CONTROLER
 14F7 C5        	PUSH	B
 14F8 3EF1      	MVI	A,PAD$RESF OR 1
 14FA D3D8      	OUT	P$LS259
 14FC 0614      	MVI	B,20
                FLOPPY$RESET1:
                	DJNZ	FLOPPY$RESET1
 14FE+10FE      	DB	10H,FLOPPY$RESET1-$-1
 1500 3EF0      	MVI	A,PAD$RESF
 1502 D3D8      	OUT	P$LS259
 1504 C1        	POP	B
 1505 C9        	RET
                ;
                ;
                ;
                INIFDC:
                			;SOFT RESET DES UPD 765
                			;FALS KEIN FLOPPY CONTROLLER VORHANDEN IST,
                			;WIRD DISKFLG AUF 00H GESETZT, SONST AUF FFH
 1506 3EFF      	MVI	A,0FFH	;DEFAULT FUER FLOPPY-C DA
 1508 3206FF    	STA	DISKFLG
 150B 210000    	LXI	H,0000H	;SETZE ZAEHLER
 150E 25        INIFDC1	DCR	H	;ERNIEDRIGE ZAEHLER
 150F DBDC      	IN	FDC	;
 1511 FE80      	CPI	80H	;REQUEST FOR MASTER
 1513 C8        	RZ		;OK CONTROLLER DA
 1514 DBDD      	IN	FDD	;LESE DATEN
 1516 7C        	MOV	A,H	;IST ZAEHLER NULL
 1517 B5        	ORA	L
                	JRNZ	INIFDC1	;NEIN, NEUER VERSUCH
 1518+20F4      	DB	20H,INIFDC1-$-1
 151A 3206FF    	STA	DISKFLG	;KEIN FLOPPYCONTROLLER DA, DISKFLG=00H
CP/M RMAC ASSEM 1.1	#062	PROF-80 MONITOR VERSION 1.7

 151D C9        	RET
                ;
                ;
                ;
                RECAL:
 151E AF        	XRA	A		;AKKU=0
 151F 3282FF    	STA	ALT$TRACK	;VORSICHTSHALBER SPUR AUF NULL
 1522 0604      	MVI	B,4		;VIER VERSUCHE
 1524 C5        RECAL2:	PUSH	B		;
 1525 CD3215    	CALL	RECAL1		;
 1528 CD1019    	CALL	SENSD		;
 152B E610      	ANI	10H		;TRACK NULL ERREICHT?
 152D C1        	POP	B		;
 152E C0        	RNZ			;RUECKSPRUNG WENN EREICHT
                	DJNZ	RECAL2		;
 152F+10F3      	DB	10H,RECAL2-$-1
 1531 C9        	RET
                ;
                ;
                ;
                RECAL1:
 1532 010702    	LXI	B,0207H
 1535 CDC416            CALL    MOTO 
 1538 C3D115            JMP	SENS
                ;
                ;
                ;
 153B 0D0A07    NODISK	DB	0DH,0AH,BELL
 153E 2044726976	DB	' Drive access not possible$'
                ;
                ;
                ;
                DISKDA:
                	;GIBT MELDUNG AUS, WENN DISKZUGRIF OHNE KONTROLLER VERSUCHT WIRD
                	;UND KEHRT AUF DIE EINGABEEBENE ZURUECK
 1559 3A06FF    	LDA	DISKFLG	;LADE FLAG
 155C B7        	ORA	A	;=NULL?
 155D C0        	RNZ		;ZURUECK ZUM RUFENDEN PROGRAMM
 155E 213B15    	LXI	H,NODISK;GEBE MELDUNG AUS
 1561 CDBB10    	CALL	SOUT
 1564 C35701    	JMP	CRGETCM	;AUF KOMMANDOEBENE ZURUECK
                ;
                ;
                ;
                READY$MASK:
                	;HOLT AUS READY$BYTE DIE WERTE FUER LW
                	;SCHON AUF READY GETESTET UND LW KANN READY LIEFERN
                	;ODER NICHT
 1567 CD6F15    	CALL	UNIT$MASK	;HOLE MASKE FUER EINGELOGGTES LW
 156A 3A75FF    	LDA	READY$BYTE	;UND MASKIERE READY$BYTE
 156D A0        	ANA	B		;
 156E C9        	RET
                ;
                ;
                ;
                UNIT$MASK:
CP/M RMAC ASSEM 1.1	#063	PROF-80 MONITOR VERSION 1.7

                	;ERZEUGE AUS EINGELOGGTEM LW MASKE FUER OBER UND UNTERE 4 BIT
 156F 3A34FF    	LDA	UNIT
 1572 E603      	ANI	00000011B
 1574 3C        	INR	A
 1575 47        	MOV	B,A
 1576 3E88      	MVI	A,88H
 1578 07        UNIMASK	RLC
                	DJNZ	UNIMASK
 1579+10FD      	DB	10H,UNIMASK-$-1
 157B 47        	MOV	B,A
 157C C9        	RET
                ;
                ;
                ;
                SEEK3:
 157D CD6F15    	CALL	UNIT$MASK
 1580 3A3FFF    	LDA	SEEKNR
 1583 A0        	ANA	B
 1584 E60F      	ANI	0FH
 1586 C9        	RET
                ;
                SEEK:
 1587 2A34FF    	LHLD	UNIT		;LADE NEUES LAUFWERK UND NEUER TRACK
                	LBCD	ALT$UNIT	;LADE ALTES LAUFWERK UND ALTER TRACK
 158A+ED4B      	DB	0EDH,4BH
 158C+81FF      	DW	ALT$UNIT
 158E 78        	MOV	A,B		;VERGLEICHE
 158F BC        	CMP	H		;
                	JRNZ	SEEK4		;SPRUNG WENN UNGLEICH
 1590+2003      	DB	20H,SEEK4-$-1
 1592 79        	MOV	A,C		;
 1593 BD        	CMP	L		;
 1594 C8        	RZ			;RETURN WENN KEIN SEEK NOTWENDIG
 1595 2281FF    SEEK4:	SHLD	ALT$UNIT	;ALTES:=NEUES
 1598 DBDB      	IN	P$IN$LS258$B	;
 159A E601      	ANI	MASK$MOT	;
 159C 3E60      	MVI	A,PAD$MOTOR	;AUFJEDEN FALL MOTOR JETZT EINSCHALTEN
 159E D3D8      	OUT	P$LS259		;
                	JRZ	SEEK5		;WENN MOTOR SCHON LIEF, DANN KEIN WARTEN
 15A0+2813      	DB	28H,SEEK5-$-1
 15A2 3A7EFF    	LDA	STEP$WAIT	;LADE WARTEZEIT
 15A5 B7        SEEK6	ORA	A		;WENN WARTEZEIT NULL, DANN WEITER
                	JRZ	SEEK5		;
 15A6+280D      	DB	28H,SEEK5-$-1
 15A8 3D        	DCR	A		;
 15A9 F5        	PUSH	PSW		;
 15AA 21FC08    	LXI	H,2300		;
 15AD 2B        SEEK7	DCX	H		;
 15AE 7C        	MOV	A,H		;
 15AF B5        	ORA	L		;
                	JRNZ	SEEK7		;
 15B0+20FB      	DB	20H,SEEK7-$-1
 15B2 F1        	POP	PSW		;
                	JR	SEEK6		;
 15B3+18F0      	DB	18H,SEEK6-$-1
 15B5 CD7D15    SEEK5:	CALL	SEEK3		;
CP/M RMAC ASSEM 1.1	#064	PROF-80 MONITOR VERSION 1.7

                	JRZ	SEEK1		;
 15B8+2808      	DB	28H,SEEK1-$-1
 15BA 3A35FF    	LDA	TRACK		;
 15BD F5        	PUSH	PSW		;
 15BE 87        	ADD	A		;
 15BF 3235FF    	STA	TRACK		;
                SEEK1:				;
 15C2 010F03    	LXI	B,030FH		;SEEK TRACK
 15C5 CDC416            CALL    MOTO 		;
 15C8 CD7D15    	CALL	SEEK3		;
                	JRZ	SEEK2		;
 15CB+2804      	DB	28H,SEEK2-$-1
 15CD F1        	POP	PSW		;
 15CE 3235FF    	STA	TRACK		;
                SEEK2:				;
                                     		;SEEK FINISHD ?
 15D1 010801    SENS:	LXI     B,0108H 	;SENS DRIVE
 15D4 CD3F17            CALL    CMFD		;
 15D7 CD5717            CALL    NEXT		;
 15DA F5        	PUSH	PSW		;SAVE RESULT
 15DB FE80              CPI     080H    	;INVALID COMMAND ?
 15DD C45717            CNZ     NEXT    	;NO => NEXT RESULT
 15E0 F1                POP     PSW     	;FIRST RESULT
 15E1 E620      	ANI	020H		;ISOLIERE BIT 5
 15E3 CAD115            JZ      SENS		;
 15E6 3EE0      	MVI	A,PAD$MOTOR OR 80H	;SCHALTE MOTOR AUF JEDEN
 15E8 D3D8      	OUT	P$LS259			;FALL AB
 15EA C9                RET
                ;
                ;
                ;
                RESULT:		;FETCH RESULT OF READ WRITE OPERATION
                		;AND CHECK THEM FOR R/W ERRORS
                                ;Z+A=00 IF NO ERRORS
                                ;NZ,A=? IF ERRORS
 15EB 0606      	MVI	B,006H		;7RESULTS
 15ED CD5717            CALL    NEXT		;
 15F0 2143FF            LXI     H,REST		;RESULT TABLE
 15F3 77                MOV     M,A     	;STORE RESULT
 15F4 E6C0              ANI     0C0H    	;ERROR ?
 15F6 4F        	MOV	C,A		;SAVE
 15F7 CD5717    RESLOP  CALL    NEXT		;
 15FA 23        	INX	H		;
 15FB 77                MOV     M,A     	;STORE RESULT
                	DJNZ	RESLOP		;
 15FC+10F9      	DB	10H,RESLOP-$-1
                				;
 15FE 3E30      	MVI	A,PAD$READY	;SCHALTE READY AUF JEDEN FALL WEG
 1600 D3D8      	OUT	P$LS259		;
 1602 3EE0      	MVI	A,PAD$MOTOR OR 80H	;SCHALTE MOTOR NACH DELAY AB
 1604 D3D8      	OUT	P$LS259		;
                				;
 1606 79                MOV     A,C		;RESTORE RESULT 0
 1607 B7                ORA     A		;IN AKKU
 1608 C9                RET
                ;
CP/M RMAC ASSEM 1.1	#065	PROF-80 MONITOR VERSION 1.7

                ;
                ;
                READY$TEST:
                	;ERMITTELT, OB EIN LAUFWERK DAS READY-SIGNAL LIEFERN
                	;KANN UND SETZT ENTSPRECHEND DAS READY-BYTE
                	;
 1609 CD3216    	CALL	SPEED$CONST	;WARTE BIS DREHZAHL KONSTANT
                	JRNZ	RTST1		;SPRUNG WENN DREHZAHL KONSTANT
 160C+2008      	DB	20H,RTST1-$-1
 160E CDFC16    	CALL	NRDYERR		;GEBE FEHLERMELDUNG AUS UND LESE ZEICHEN
                	JRNZ	READY$TEST	;NOCH EIN VERSUCH
 1611+20F6      	DB	20H,READY$TEST-$-1
 1613 C32DFF    	JMP	UMLEIT$GETCM	;SONST ZURUECK
 1616 CD1019    RTST1	CALL	SENSD		;LIEFERT LW READY?
 1619 E620      	ANI	20H		;
 161B F5        	PUSH	PSW		;RETTE ZERO-FLAG
 161C CD6F15    	CALL	UNIT$MASK	;TRAGE IN READY$BYTE EIN
 161F 2F        	CMA			;
 1620 47        	MOV	B,A		;RETTE MASKE
 1621 F1        	POP	PSW		;HOLE ZERO-FLAG
 1622 3E0F      	MVI	A,0FH		;KEIN READY
                	JRZ	RTST2		;SPRUNG WENN KEIN READY
 1624+2802      	DB	28H,RTST2-$-1
 1626 3E00      	MVI	A,0		;
 1628 B0        RTST2	ORA	B		;
 1629 47        	MOV	B,A		;SETZE READY$BYTE
 162A 3A75FF    	LDA	READY$BYTE	;
 162D A0        	ANA	B		;
 162E 3275FF    	STA	READY$BYTE	;
 1631 C9        	RET
                ;
                ;
                ;
                SPEED$CONST:
                	;WARTE BIS DREHZAHL KONSTANT, DANN RETURN MIT ZERO-FLAG=0
                	;WENN DREHZAHL NICHT KONSTANT WIRD DANN ZERO-FLAG=1
                	;
 0040 =         TOLERANZ	EQU	64	;TOLERANZ FUER DREHZAHL KONSTANT
                				;
 1632 010402    	LXI	B,0204H		;SELEKTIERE LAUFWERK
 1635 CD3F17    	CALL	CMFD		;
 1638 3E60      	MVI	A,PAD$MOTOR	;SCHALTE MOTOR EIN
 163A D3D8      	OUT	P$LS259		;
 163C 110000    	LXI	D,0		;BESETZE VOR
 163F 060A      	MVI	B,10		;ZEHN VERSUCHE
 1641 EB        SPEEDC1	XCHG			;ADDIERE ZU DE TOLERANZ
 1642 114000    	LXI	D,TOLERANZ	;
 1645 19        	DAD	D		;
 1646 EB        	XCHG			;
 1647 CD7516    	CALL	CDRIVE$SPEED	;MESSE DREHZAHL
                	JRZ	SPEEDC3		;ZURUECK WENN LAUFWERK STEHT
 164A+2820      	DB	28H,SPEEDC3-$-1
 164C EB        	XCHG			;BILDE DIVERENZ ZU VORHER
                	DSBC	D		;
 164D+ED52      	DB	0EDH,D*8+42H
 164F 7C        	MOV	A,H		;
CP/M RMAC ASSEM 1.1	#066	PROF-80 MONITOR VERSION 1.7

 1650 FE00      	CPI	0		;IM TOLERANZBEREICH?
                	JRNZ	SPEEDC2		;SPRUNG WENN NEIN
 1652+2016      	DB	20H,SPEEDC2-$-1
 1654 7D        	MOV	A,L		;
 1655 FE80      	CPI	TOLERANZ*2	;
                	JRNC	SPEEDC2		;SPRUNG WENN DREHZAHL NOCH NICHT KONSTANT
 1657+3011      	DB	30H,SPEEDC2-$-1
 1659 CD7516    	CALL	CDRIVE$SPEED	;WARTE NOCH ZWEI UMDREHUNGEN
 165C CD7516    	CALL	CDRIVE$SPEED	;
                				;
 165F CD5717    	CALL	NEXT		;DESELEKTIERE LAUFWERK
 1662 3EE0      	MVI	A,PAD$MOTOR OR 80H
 1664 D3D8      	OUT	P$LS259		;
 1666 3EFF      	MVI	A,0FFH		;ZURUECK MIT ZERO = 0
 1668 B7        	ORA	A		;
 1669 C9        	RET			;
                				;
                SPEEDC2	DJNZ	SPEEDC1		;MAXIMAL 10 VERSUCHE
 166A+10D5      	DB	10H,SPEEDC1-$-1
 166C CD5717    SPEEDC3	CALL	NEXT		;DESELEKTIERE LAUFWERK
 166F 3EE0      	MVI	A,PAD$MOTOR OR 80H
 1671 D3D8      	OUT	P$LS259		;
 1673 AF        	XRA	A		;SONST ZURUECK MIT ZERO=1
 1674 C9        	RET			;
                ;
                ;
                ;
                CDRIVE$SPEED:
                	;MESSE GESCHWINDIGKEIT DES LAUFWERKS
                	;WENN SICH DISKETTE NICHT DREHT IST DAS ZERO-FLAG GESETZT
                	;SONST ZERO-FLAG=0 UND GESCHWINDIGKEIT IN HL
                	;
 1675 DBDA      	IN	P$IN$LS258$A	;LESE INDEX-SIGNAL
 1677 E620      	ANI	MASK$INDEX	;UND MASKIERE
                	JRZ	DSPEED1		;WENN INDEX DA, ERSTE SCHLEIFE
 1679+280D      	DB	28H,DSPEED1-$-1
                				;UEBERSPRINGEN
                				;
 167B 210000    	LXI	H,0		;WARTE BIS INDEX KOMMT
 167E 23        DSPEED2	INX	H		;ERHOEHE HL
 167F 7C        	MOV	A,H		;OUT OF TIME?
 1680 B5        	ORA	L		;
 1681 C8        	RZ			;DANN RETURN
 1682 DBDA      	IN	P$IN$LS258$A	;LESE INDEX-SIGNAL
 1684 E620      	ANI	MASK$INDEX	;UND MASKIERE
                	JRNZ	DSPEED2		;WARTE BIS LOW
 1686+20F6      	DB	20H,DSPEED2-$-1
                				;
 1688 210000    DSPEED1	LXI	H,0		;WARTE BIS INDEX WEGGEHT
 168B 23        DSPEED3	INX	H		;ERHOEHE HL
 168C 7C        	MOV	A,H		;OUT OF TIME?
 168D B5        	ORA	L		;
 168E C8        	RZ			;DANN RETURN
 168F DBDA      	IN	P$IN$LS258$A	;LESE INDEX-SIGNAL
 1691 E620      	ANI	MASK$INDEX	;UND MASKIERE
                	JRZ	DSPEED3		;WARTE BIS HIGH
CP/M RMAC ASSEM 1.1	#067	PROF-80 MONITOR VERSION 1.7

 1693+28F6      	DB	28H,DSPEED3-$-1
                				;
 1695 210000    	LXI	H,0		;EIGENTLICHER ZAEHLER
 1698 23        DSPEED4	INX	H		;ERHOEHE HL
 1699 7C        	MOV	A,H		;OUT OF TIME?
 169A B5        	ORA	L		;
 169B C8        	RZ			;
 169C DBDA      	IN	P$IN$LS258$A	;LESE INDEX UND WARTE
 169E E620      	ANI	MASK$INDEX	;BIS WIEDER LOW
                	JRNZ	DSPEED4		;
 16A0+20F6      	DB	20H,DSPEED4-$-1
 16A2 3EFF      	MVI	A,0FFH		;RESET ZERO-FLAG
 16A4 B7        	ORA	A		;
                				;
 16A5 C9        	RET			;ZURUECK MIT DRIVE-SPEED
                ;
                ;
                ;
                NOREADY$MOTO:
 16A6 DBDB      	IN	P$IN$LS258$B	;LAEUFT MOTOR SCHON ?
 16A8 E601      	ANI	MASK$MOT	;
                	JRZ	NREDY1		;SPRUNG WENN MOTOR SCHON LAEUFT
 16AA+280D      	DB	28H,NREDY1-$-1
 16AC CD3216    NREDY2	CALL	SPEED$CONST	;WARTE BIS LW AUF TOUREN
                	JRNZ	NREDY1		;SPRUNG WENN DREHZAHL KONSTANT
 16AF+2008      	DB	20H,NREDY1-$-1
 16B1 CDFC16    	CALL	NRDYERR		;GEBE ERROR-TEXT AUS
                	JRNZ	NREDY2		;WIEDERHOLUNG
 16B4+20F6      	DB	20H,NREDY2-$-1
 16B6 C32DFF    	JMP	UMLEIT$GETCM	;
 16B9 3E60      NREDY1	MVI	A,PAD$MOTOR	;NEUER MOTOR TRIGGER
 16BB D3D8      	OUT	P$LS259		;
 16BD 3EB0      	MVI	A,PAD$READY OR 80H	;SETZE READY$LEITUNG
 16BF D3D8      	OUT	P$LS259		;
 16C1 C33E17    	JMP	MOTO1
                ;
                ;
                ;
                MOTO:				;WAITS UNTIL DISK READY AND THEN
                                		;TRANSMITS COMMAND TO FDC
                				;
 16C4 C5        	PUSH	B		;SAVE COMMAND
 16C5 CD6715    	CALL	READY$MASK	;LW SCHON GETESTET?
 16C8 E6F0      	ANI	0F0H		;STEHT IN DEN OBEREN 4 BITS
 16CA C40916    	CNZ	READY$TEST	;WENN NOCH NICHT, DANN TESTE AUF READY
 16CD CD6715    	CALL	READY$MASK	;KANN READY GELIEFERT WERDEN?
 16D0 E60F      	ANI	0FH		;STEHT IN DEN UNTEREN 4 BITS
 16D2 C2A616    	JNZ	NOREADY$MOTO	;WENN NICHT SPRUNG
                				;SONST WEITER WIE GEHABT
                				;
 16D5 3E60      	MVI	A,PAD$MOTOR	;SCHALTE MOTOR EIN
 16D7 D3D8      	OUT	P$LS259		;
                				;
 16D9 21FF0F    MOTO2	LXI	H,00FFFH	;SET TIMER
 16DC E5        MOTO3	PUSH	H		;SAVE TIMER
 16DD 010402    	LXI	B,0204H		;SENSE DRIVE
CP/M RMAC ASSEM 1.1	#068	PROF-80 MONITOR VERSION 1.7

 16E0 CD3F17    	CALL	CMFD
 16E3 CD5717    	CALL	NEXT		;FETCH RESULT
 16E6 E1        	POP	H		;GET TIMER VALUE
 16E7 E620      	ANI	20H		;DISK READY ?
                	JRNZ	MOTO1		;OK, READY
 16E9+2053      	DB	20H,MOTO1-$-1
 16EB 2B        	DCX	H		;TIMER=TIMER-1
 16EC 7C        	MOV	A,H		;= ZERO?
 16ED B5        	ORA	L		;
                	JRNZ	MOTO3		;NO, TRY AGAIN
 16EE+20EC      	DB	20H,MOTO3-$-1
 16F0 CDFC16    	CALL	NRDYERR		;DRIVE NOT READY TEXT
                	JRNZ	MOTO2		;NO, AGAIN
 16F3+20E4      	DB	20H,MOTO2-$-1
 16F5 3EE0      	MVI	A,PAD$MOTOR OR 80H
 16F7 D3D8      	OUT	P$LS259		;
 16F9 C32DFF    	JMP	UMLEIT$GETCM	;ENTWEDER MONITOR ODER WARM-BOOT
                				;
                				;
                NRDYERR:
                	;GEBE FEHLERMELDUNG FUER DRIVE NOT READY AUS
                	;UND VERGLEICHE EINGEGEBENES ZEICHEN MIT N
                	;
 16FC 211917    	LXI	H,NREADY1	;PRINT ERROR TEXT
 16FF CDBB10    	CALL	SOUT		;
 1702 CDC612    	CALL	PRINT$DRIVE	;GEBE LW BUCHSTABE AUS
 1705 212417    	LXI	H,NREADY2	;GEBE REST TEXT AUS
 1708 CDBB10    	CALL	SOUT		;
 170B CDFD10    	CALL	GETCH1		;AGAIN?
 170E 4F        	MOV	C,A		;ECHO
 170F CDCE10    	CALL	ECHO		;
 1712 CDC610    	CALL	CROUT		;LINE FEED
 1715 79        	MOV	A,C		;
 1716 FE4E      	CPI	'N'		;
 1718 C9        	RET			;
                	;
 1719 0D0A072044NREADY1	DB	0DH,0AH,BELL,' Drive $'
 1724 6E6F742072NREADY2	DB	'not ready, retry (Y/N) ? $'
                ;
                ;
 173E C1        MOTO1:	POP	B
                ;
                ;
                CMFD:		;TRANSMIT COMMAND TO FDC
                		;IN B STEHT ANZAHL DER BYTES
                		;IN C STEHT BEFEHL
                                ;
 173F 2133FF    	LXI     H,CMDTAB	;
 1742 3E1E      CMFD1	MVI	A,30		;WAIT FOR MASTER
 1744 3D        CMFD2	DCR	A		;
                	JRNZ	CMFD2		;
 1745+20FD      	DB	20H,CMFD2-$-1
 1747 DBDC      	IN      FDC		;REQUEST FOR MASTER
 1749 E6C0              ANI     0C0H		;
 174B FE80              CPI     080H		;
                        JRNZ	CMFD1		;NO => WAIT
CP/M RMAC ASSEM 1.1	#069	PROF-80 MONITOR VERSION 1.7

 174D+20F3      	DB	20H,CMFD1-$-1
 174F 79                MOV     A,C     	;YES =>
 1750 D3DD              OUT     FDD     	;SEND BYTE
 1752 23                INX     H       	;POINT TO NEXT BYTE
 1753 4E                MOV     C,M		;
                        DJNZ	CMFD1		;SEND NEXT BYTE
 1754+10EC      	DB	10H,CMFD1-$-1
 1756 C9                RET             	;ALL BYTES TRANSFERRED
                ;
                ;
                ;
                NEXT:		;READ NEXT RESULT FROM FDC
                                ;
 1757 3E06      	MVI	A,6	;WAIT FOR MASTER READY
 1759 3D        NEXT1	DCR	A	;
                	JRNZ	NEXT1	;
 175A+20FD      	DB	20H,NEXT1-$-1
 175C DBDC      	IN	FDC	;REQUEST FOR MASTER
 175E E6C0              ANI     0C0H    ;TRANSFER TO MASTER
 1760 FEC0              CPI     0C0H	;
 1762 C25717            JNZ     NEXT    ;NO =>WAIT
 1765 DBDD      	IN	FDD	;YES => FETCH RESULT
 1767 C9                RET  
                ;
                ;
                ;
                WRITE:
 1768 3E05      	MVI	A,5			;WRITE COMMANDO
 176A 214D1C    	LXI	H,TXTWR			;WRITE ERROR TEXT
 176D C37817    	JMP	RWCOM
                ;
                ;
                ;
                READ:
 1770 3E06      	MVI	A,06H			;READ COMMANDO
 1772 213A1C    	LXI	H,TXTRD			;READ ERROR TEXT
 1775 C37817    	JMP	RWCOM
                	;
                	;
                	;
                RWCOM:
                	;VOR EINTRITT IN DIESE ROUTINE MUESSEN CMDTAB
                	;SECTCNT UND DMAADR GESETZT SEIN.
                	;IN A MUSS READ ODER WRITE COMMANDO STEHEN,
                	;IN HL MUSS DIE ADRESSE DER ERROR MSSG. STEHEN.
                	;ES WERDEN DIE ANGEGEBENE ANZAHL SECTCNT
                	;VON/NACH DMAADR UEBERTRAGEN.
                	;HD BIT WIRD ENTSPRECHEND DEM H BIT GESETZT.
                	;DAS IN CMDTAB STEHENDE MFM BIT WIRD UEBERNOMMEN.
                	;ES WIRD DIE PRECOMPENSATION ZEIT AUS WRITE$PRECOM
                	;UEBERNOMMEN.
                	;
                	;
 1778 320DFF    	STA	RWCMD		;LEGE COMMANDO AB
 177B 220EFF    	SHLD	ERMSG		;LEGE ADR FUR ERR.TEXT AB
 177E 3A2CFF    	LDA	SECTCNT		;WIEVIEL SECTOREN SOLLEN UEBERTRAGEN WERDEN?
CP/M RMAC ASSEM 1.1	#070	PROF-80 MONITOR VERSION 1.7

 1781 3D        	DCR	A		;EINS WENIGER FUER ADDITION
 1782 FEFF      	CPI	0FFH		;
 1784 C8        	RZ			;RETURN WENN NULL GEWESEN
 1785 4F        	MOV	C,A		;RETTE AKKU
 1786 3A39FF    	LDA	EOT		;RETTE EOT
 1789 320BFF    	STA	EOTSAVE		;
 178C 47        	MOV	B,A		;
 178D 3A37FF    	LDA	SECTOR		;BERRECHNE NEUES EOT
 1790 81        	ADD	C		;
 1791 3239FF    	STA	EOT		;
 1794 4F        	MOV	C,A		;SOLL UEBER SPUR ENDE UEBERTRAGEN WERDEN?
 1795 78        	MOV	A,B		;
 1796 0600      	MVI	B,0		;
 1798 91        	SUB	C		;
                	JRNC	RW5		;
 1799+3008      	DB	30H,RW5-$-1
 179B 0680      	MVI	B,080H		;
 179D 3A0BFF    	LDA	EOTSAVE		;WENN UEBER SPUR ENDE UEBERTRAGEB WERDEN SOLL
 17A0 3239FF    	STA	EOT		;DANN EOT GLEICH ALTES EOT
 17A3 78        RW5:	MOV	A,B		;SAVE FLAG
 17A4 320CFF    	STA	EOTFLG		;FUER FEHLERMELDUNG
 17A7 3EF5      	MVI	A,PAD$RTS OR 1	;SPERRE TASTATUR INTERRUPT
 17A9 D3D8      	OUT	P$LS259		;
 17AB F3        	DI			;
 17AC CD8715    	CALL	SEEK		;POSITIONIERE
 17AF CD3018    	CALL	SETHEAD		;TRAGE HEAD BIT IN UNIT EIN
 17B2 3A65FF    	LDA	WRITE$PRECOM	;SETZE PRECOMPENSATION
 17B5 CD281A    	CALL	SEND$PRECOM	;
 17B8 3A64FF    	LDA	RWRETRY		;LADE
 17BB 47        	MOV	B,A		;ANZAHL DER VERSUCHE NACH B
 17BC C5        RW4	PUSH	B		;SAVE RETRY
 17BD 0609      	MVI	B,9		;9 BYTES ZU UEBERTRAGEN
 17BF 3A0DFF    	LDA	RWCMD		;LADE COMMANDO
 17C2 4F        	MOV	C,A		;NACH C
 17C3 3A33FF    	LDA	CMDTAB		;TRAGE MFM BIT EIN
 17C6 E640      	ANI	040H		;ISOLIERE MFM BIT
 17C8 B1        	ORA	C		;COMMAND DAZU
 17C9 4F        	MOV	C,A		;ZURUECK INC
 17CA CDC416    	CALL	MOTO		;SEND COMMAND TO UPD 765
                				;BEREITE REGISTER VOR
                	EXX			;LADE DMA ADRESSE IN ZWEITREGISTER SATZ
 17CD+D9        	DB	0D9H
 17CE 2A2AFF    	LHLD	DMAADR		;
 17D1 0EDD      	MVI	C,FDD		;UEBERTRAGUNGSADRESSE
                	EXX			;
 17D3+D9        	DB	0D9H
 17D4 2100FF    	LXI	H,SYSTEMPAGE	;PAGE DER MASTER ABHNG. SPRUENGE
 17D7 0EDC      	MVI	C,FDC		;
                				;
 17D9 CD00FF    	CALL	RWPOLL		;UEBERTRAGE VON/ZU DISK
                				;
 17DC CDEB15    	CALL	RESULT		;HOLE ERGEBNIS
 17DF 3A44FF    	LDA	REST+1		;BLENDE END OF TRACK BIT AUS
 17E2 E67F      	ANI	7FH		;
 17E4 3244FF    	STA	REST+1		;
 17E7 4F        	MOV	C,A		;
CP/M RMAC ASSEM 1.1	#071	PROF-80 MONITOR VERSION 1.7

 17E8 3A45FF    	LDA	REST+2		;
 17EB B1        	ORA	C		;SONSTIGES FEHLER BIT GESETZT
 17EC C1        	POP	B		;RESTORE RETRY COUNTER
                	JRZ	RW7		;KEINE FEHLER
 17ED+2802      	DB	28H,RW7-$-1
                	DJNZ	RW4		;NOCH VERSUCHE FREI?
 17EF+10CB      	DB	10H,RW4-$-1
                RW7:				;
 17F1 3A0CFF    	LDA	EOTFLG		;WURDE WIRKLICH UEBER SPURGRENZE GELESEN?
 17F4 4F        	MOV	C,A		;
 17F5 3A44FF    	LDA	REST+1		;
 17F8 B1        	ORA	C		;
 17F9 3244FF    	STA	REST+1		;
 17FC 4F        	MOV	C,A		;	
 17FD 3A45FF    	LDA	REST+2		;
 1800 B1        	ORA	C		;SET ZERO FLAG
 1801 F5        	PUSH	PSW		;RETTE FLAGS UND AKKU FUER FEHLERMELDUNG
 1802 C41A19    	CNZ	DISKERR		;DRUCKE FEHLER
 1805 3A0BFF    	LDA	EOTSAVE		;LADE ORG EOT
 1808 3239FF    	STA	EOT		;ZURUECK
 180B FB        	EI			;
 180C 3A13FF    	LDA	IO$JUMPERBYTE	;MUSS EINGABE FREIGEGEBEN WERDEN?
 180F 3D        	DCR	A		;
                	JRNZ	RW1		;
 1810+2004      	DB	20H,RW1-$-1
 1812 3EF4      	MVI	A,PAD$RTS	;GEBE EINGABE FREI
 1814 D3D8      	OUT	P$LS259		;
                RW1:				;
 1816 3A0DFF    	LDA	RWCMD		;WAR DISK WRITE ?
 1819 FE06      	CPI	06H		;
                	JRZ	RW2		;SPRUNG WENN NEIN
 181B+2811      	DB	28H,RW2-$-1
 181D 3A7BFF    	LDA	TE$TIME		;SONST VERZOEGERUNG
 1820 B7        	ORA	A		;WENN NULL DANN ENDE
                	JRZ	RW2		;
 1821+280B      	DB	28H,RW2-$-1
 1823 47        	MOV	B,A		;
 1824 211600    RW3:	LXI	H,22		;<10>
 1827 2B        RW6:	DCX	H		;<6>
 1828 7C        	MOV	A,H		;<4>
 1829 B5        	ORA	L		;<4>
                	JRNZ	RW6		;<12/7>
 182A+20FB      	DB	20H,RW6-$-1
                	DJNZ	RW3		;<13/8>
 182C+10F6      	DB	10H,RW3-$-1
                RW2:				;
 182E F1        	POP	PSW		;LADE AKKU FUER FEHLERMELDUNG
 182F C9        	RET
                ;
                ;
                ;
                SETHEAD:
                	;SETZE HEAD BYTE AUF 00H ODER 01H
                	;SETZE HEAD BIT IN UNIT BYTE
                	;
                	;FOLGENDE KOMBINATIONEN SIND MOEGLICH:
CP/M RMAC ASSEM 1.1	#072	PROF-80 MONITOR VERSION 1.7

                	;X BEDEUTET UNBESTIMMT, - BEDEUTET KEINE AENDERUNG ZU VORHER
                	;
                	; HEAD VORHER=>	UNIT NACHHER,	HEAD NACHHER
                	; XXXXXX00	000000--	00000000
                	; XXXXXX01	000001--	00000001
                	; XXXXXX10	000001--	00000000
                	; XXXXXX11	000000--	00000001
                	;
 1830 3A36FF    	LDA	HEAD	;LADE HEAD BIT
 1833 4F        	MOV	C,A	;RETTE IN C
 1834 E601      	ANI	1	;
 1836 3236FF    	STA	HEAD	;
 1839 79        	MOV	A,C	;
 183A 07        	RLC		;EIN BIT NACH LINKS
 183B 4F        	MOV	C,A	;
 183C 07        	RLC		;ZWEI BIT NACH LINKS
 183D A9        	XRA	C	;ERZEUGE UNIT BIT
 183E E604      	ANI	04H	;BLENDE ANDERE BITS AUS
 1840 4F        	MOV	C,A	;SAVE
 1841 3A34FF    	LDA	UNIT	;LADE DRIVE NR.
 1844 E603      	ANI	03H	;BLENDE OBERE BITS AUS
 1846 B1        	ORA	C	;HEAD DAZU
 1847 3234FF    	STA	UNIT	;ZURUECK
 184A C9        	RET
                ;
                ;
                ;
                TEST:
                	;DIESE ROUTINE ERMITTELT DIE DATEN DER PLATTE, DIE SICH IM VON
                	;UNIT SPEZIFIZIERTEN LAUFWERK BEFINDET
                	;GETESTET WIRD DIE SPUR, DIE IN TEST$TRACK STEHT
                	;ALS ERGEBNIS WERDEN TEST$TYPE UND TEST$MSEK GESETZT
                	;KANN DER PLATTEN-TYP NICHT ERMITTELT WERDEN IST DER AKKU AUF FFH
                	;WENN PLATTEN-TYP ERKANNT WURDE IST AKKU=00H
                	;
 184B CD1E15    	CALL	RECAL		;RECALIBRIERE
 184E 3A34FF            LDA     UNIT    	;SEITE 0 WAEHLEN
 1851 E603              ANI     03H		;
 1853 3234FF            STA     UNIT		;
 1856 3A25FF    	LDA	TEST$TRACK	;POSITIONIERE AUF DIE SPUR
 1859 3235FF    	STA	TRACK		;DEREN FORMAT ERKANNT WERDEN SOLL
 185C CD8715    	CALL	SEEK		;
                				;
 185F 3E00      	MVI	A,00		;TESTE OB SD,MAXI
 1861 3223FF    	STA	TEST$TYPE	;
 1864 CD0219    	CALL	MAXI$SET	;
 1867 CDF018    	CALL	READID		;VERSUCHE ID-FELD ZU LESEN
 186A CA9418    	JZ	TEST1		;SPRUNG WENN SD,MAXI
                				;
 186D 3E40      	MVI	A,40H		;TESTE OB DD,MAXI
 186F 3223FF    	STA	TEST$TYPE	;
 1872 CDF018    	CALL	READID		;
 1875 CA9418    	JZ	TEST1		;SPRUNG WENN DD,MAXI
                				;
 1878 3E20      	MVI	A,20H		;TESTE OB SD,MINI
 187A 3223FF    	STA	TEST$TYPE	;
CP/M RMAC ASSEM 1.1	#073	PROF-80 MONITOR VERSION 1.7

 187D CD0919    	CALL	MINI$SET	;
 1880 CDF018    	CALL	READID		;
 1883 CA9418    	JZ	TEST1		;SPRUNG WENN SD,MINI
                				;
 1886 3E60      	MVI	A,60H		;TESTE OB DD,MINI
 1888 3223FF    	STA	TEST$TYPE	;
 188B CDF018    	CALL	READID		;
 188E CA9418    	JZ	TEST1		;SPRUNG WENN DD,MINI
                				;
 1891 3EFF      TEST2:	MVI	A,0FFH		;BLEIBT NICHTS MEHR  UEBRIG
 1893 C9        	RET			;RUECKSPRUNG MIT FEHLER
                				;
                TEST1:				;OK, MINI ODER MAXI, FM ODER MFM
                				;ERKANNT
                				;ZAEHLE JETZT DIE ANZAHL DER SEKTOREN
                				;AUF DER SPUR
 1894 CDF018    	CALL	READ$ID		;LESE ERSTES ID-FELD
                	JRNZ	TEST2		;SPRUNG WENN NICHT MOEGLICH
 1897+20F8      	DB	20H,TEST2-$-1
 1899 3A48FF    	LDA	REST+5		;LADE SEKTORNUMMER
 189C 57        	MOV	D,A		;NACH D UM EINE UMDREHUNG ABZUWARTEN
 189D 4F        	MOV	C,A		;NACH C UM GROESSTEN SEKTOR ZU ERMITTELN
 189E 0634      	MVI	B,52		;MAXIMAL 52 LESEVERSUCHE, DANN FEHLER
 18A0 C5        TEST3:	PUSH	B		;RETTE REGISTER
 18A1 D5        	PUSH	D		;
 18A2 CDF018    	CALL	READ$ID		;LESE NAECHSTES ID-FELD
 18A5 D1        	POP	D		;RESTORE REGISTER
 18A6 C1        	POP	B		;
                	JRNZ	TEST2		;SPRUNG WENN FEHLER
 18A7+20E8      	DB	20H,TEST2-$-1
 18A9 3A48FF    	LDA	REST+5		;LADE SEKTORNUMMER
 18AC BA        	CMP	D		;EINE UMDREHUNG ?
                	JRZ	TEST4		;DANN ENDE (MAX-SEKTOR IN C)
 18AD+2808      	DB	28H,TEST4-$-1
 18AF B9        	CMP	C		;NEUE SEKTORNUMMER GROESSER ALS ALLE ANDEREN?
                	JRC	TEST5		;SPRUNG WENN NEIN
 18B0+3801      	DB	38H,TEST5-$-1
 18B2 4F        	MOV	C,A		;SONST NEUER SEKTOR DER GROESSTE
                TEST5:	DJNZ	TEST3		;LESE NEUEN SEKTOR EIN
 18B3+10EB      	DB	10H,TEST3-$-1
                	JR	TEST2		;WENN ZAEHLER ABLAEUFT, DANN FEHLER
 18B5+18DA      	DB	18H,TEST2-$-1
                				;
 18B7 79        TEST4:	MOV	A,C		;LEGE GROSSTE SEKTORNUMMER AB
 18B8 3224FF    	STA	TEST$MSEK	;
                				;
 18BB 3A49FF    	LDA	REST+6		;PACKE SEKTORGROESSE ZU TEST$TYPE
 18BE E60F      	ANI	0FH		;
 18C0 4F        	MOV	C,A		;
 18C1 3A23FF    	LDA	TEST$TYPE	;
 18C4 B1        	ORA	C		;
 18C5 3223FF    	STA	TEST$TYPE	;
                				;
 18C8 3A34FF    	LDA	UNIT		;SOLL TWO-SIDED-BIT IMMER AUF HIGH SEIN?
 18CB 2F        	CMA			;(NAEMLICH DANN, WENN ENTSPRECHENDES
 18CC E603      	ANI	00000011B	;BIT IM OBEREN NIPPLE VON SEEKNR AUF HIGH)
CP/M RMAC ASSEM 1.1	#074	PROF-80 MONITOR VERSION 1.7

 18CE 47        	MOV	B,A		;
 18CF B7        	ORA	A		;
 18D0 3A3FFF    	LDA	SEEKNR		;
                	JRZ	TEST6		;KEIN SCHIEBEN NOTWENDIG
 18D3+2803      	DB	28H,TEST6-$-1
 18D5 07        TEST7:	RLC			;
                	DJNZ	TEST7		;
 18D6+10FD      	DB	10H,TEST7-$-1
 18D8 E680      TEST6:	ANI	80H		;WENN OBERSTES BIT 1, DANN TS-BIT AUCH EINS
                	JRNZ	TEST8		;SONST TS-BIT WIE TS-LEITUNG
 18DA+2009      	DB	20H,TEST8-$-1
 18DC CD1019    	CALL	SENSD		;LESE TWO-SIDED SIGNAL EIN
 18DF 07        	RLC			;VERSCHIEBE IN OBEERSTES BIT
 18E0 07        	RLC			;
 18E1 07        	RLC			;
 18E2 07        	RLC			;
 18E3 E680      	ANI	80H		;BLENDE REST AUS
 18E5 4F        TEST8:	MOV	C,A		;PACKE ZU TEST$TYPE
 18E6 3A23FF    	LDA	TEST$TYPE	;
 18E9 B1        	ORA	C		;
 18EA 3223FF    	STA	TEST$TYPE	;
                				;OK, ALLES GEPRUEFT
 18ED 3E00      	MVI	A,0		;FEHLERFREIE RUECKKEHR
 18EF C9        	RET			;
                ;
                ;
                ;
                READID:
                	;LESE NAECHSTES ID FELD
                	;IN TEST$TYPE BIT 6 SEHT OB FM ODER MFM
                	;KONNTE KEIN ID-FELD GELESEN WERDEN, DANN IST AKKU<>0
                	;UND ZERO-FLAG NICHT GESETZT
                	;
 18F0 010A02    	LXI	B,020AH		;READ ID KOMMANDO
 18F3 3A23FF    	LDA	TEST$TYPE	;PACKE MFM BIT DAZU
 18F6 E640      	ANI	040H		;
 18F8 B1        	ORA	C		;
 18F9 4F        	MOV	C,A		;
 18FA CDC416    	CALL	MOTO		;LESE ID-FELD
 18FD CDEB15    	CALL	RESULT		;WAR LESEVERSUCH ERFOLGREICH?
 1900 B7        	ORA	A		;
 1901 C9        	RET
                ;
                ;
                ;
                MAXI$SET:
                	;SETZT FLOPPY KONTROLER AUF MAXI-LAUFWERKE
 1902 F5        	PUSH	PSW
 1903 3EF2      	MVI	A,PAD$MINI
 1905 D3D8      	OUT	P$LS259
 1907 F1        	POP	PSW
 1908 C9        	RET
                ;
                ;
                ;
                MINI$SET:
CP/M RMAC ASSEM 1.1	#075	PROF-80 MONITOR VERSION 1.7

                	;SETZT FLOPPY-KONTROLER AUF MINI-LAUFWERKE
 1909 F5        	PUSH	PSW
 190A 3EF3      	MVI	A,PAD$MINI OR 1
 190C D3D8      	OUT	P$LS259
 190E F1        	POP	PSW
 190F C9        	RET
                ;
                ;
                ;
 1910 010402    SENSD	LXI	B,0204H
 1913 CD3F17    	CALL	CMFD
 1916 CD5717    	CALL	NEXT
 1919 C9        	RET
                ;
                ;
                ;
                DISKERR:
                	;GIBT DISK FEHLERMELDUNG AUS
                	;BENUTZT DAZU DIE RESULT TABELLE
                	;UND DIE ERMSG EINTRAGUNG
                	;
 191A 3A63FF    	LDA	DERMSG		;SOLL FEHLERMELDUNG
 191D 3C        	INR	A		;UNTERDRUECKT WERDEN ?
 191E C8        	RZ			;WENN JA, RUECKSPRUNG
 191F 2A0EFF    	LHLD	ERMSG		;LADE READ BZW WRITE TEXT
 1922 CDBB10    	CALL	SOUT		;UND GEBE IHN AUS
 1925 3A43FF    	LDA	REST		;LADE LAUFWERK NUMMER
 1928 E603      	ANI	03H		;ISOLIERE LE NR
 192A C641      	ADI	41H		;WANDLE IN ASCCI
 192C 4F        	MOV	C,A		;GEBE LAUFWERK BUCHSTABE AUS
 192D CDCE10    	CALL	ECHO		;
                				;
 1930 21271B    	LXI	H,TXT1		;GEBE TRACK AUS
 1933 CDBB10    	CALL	SOUT		;
 1936 3A46FF    	LDA	REST+3		;
 1939 CD2512    	CALL	DEZOUT		;
                				;
 193C 21311B    	LXI	H,TXT2		;GEBE HEAD AUS
 193F CDBB10    	CALL	SOUT		;
 1942 3A47FF    	LDA	REST+4		;
 1945 C630      	ADI	30H		;WANDLE IN ASCII
 1947 4F        	MOV	C,A		;
 1948 CDCE10    	CALL	ECHO		;
                				;
 194B 213A1B    	LXI	H,TXT3		;GEBE SECTOR AUS
 194E CDBB10    	CALL	SOUT		;
 1951 3A48FF    	LDA	REST+5		;
 1954 CD2512    	CALL	DEZOUT		;
                				;
                				;GEBE FEHLER IM KLARTEXT AUS
                				;
 1957 11451B    	LXI	D,ERROR$TABLE	;
 195A 3A44FF    	LDA	REST+1		;LESE STATUS1
 195D 67        	MOV	H,A		;
 195E 3A45FF    	LDA	REST+2		;LESE STATUS2
 1961 6F        	MOV	L,A		;
CP/M RMAC ASSEM 1.1	#076	PROF-80 MONITOR VERSION 1.7

                ERRLOP:
 1962 29        	DAD	H		;TESTE OB FEHLERBIT GESETZT
 1963 E5        	PUSH	H		;
 1964 1A        	LDAX	D		;
 1965 6F        	MOV	L,A		;
 1966 13        	INX	D		;
 1967 1A        	LDAX	D		;
 1968 67        	MOV	H,A		;
 1969 DCBB10    	CC	SOUT		;WENN JA GEBE TEXT AUS
 196C E1        	POP	H		;
 196D 13        	INX	D		;ZEIGE AUF NAECHSTE MELDUNG
 196E 7C        	MOV	A,H		;KEIN FEHLER MEHR DA?
 196F B5        	ORA	L		;
                	JRNZ	ERRLOP		;
 1970+20F0      	DB	20H,ERRLOP-$-1
                				;
 1972 CDC610    	CALL	CROUT		;
                				;
 1975 C9        	RET			;OK, ENDE
                ;
                ;
                ;
                ;**************************************************************************
                ;***									***
                ;***  ES FOLGT NUN DIE ROUTINE ZUM BOOTEN VON DER HARDDISK		***
                ;***									***
                ;**************************************************************************
                ;
                ;
                ;
                ; PORTADRESSEN FUER OMTI-CONTROLLER AUF ECB-BUS (MIT ECPC VON CONITEC)
                
 00E0 =         ODATA	EQU	0E0H
 00E1 =         OSTATUS	EQU	0E1H
 00E2 =         OCONFIG	EQU	0E2H
 00E3 =         OMASK	EQU	0E3H
 00E1 =         ORESET	EQU	0E1H
 00E2 =         OSELECT	EQU	0E2H
                
 FC00 =         HDADR	EQU	0FC00H		; LADEADRESSE FUER BOOTSTRAP-LOADER
                
                
                
                HCMD:				; READ FIRST SECTOR
 1976 CDCE19    	CALL	WAIT$HD$READY
 1979 C25701    	JNZ	CRGETCM
                
 197C CDA619    	CALL	SELECT
                
 197F 211B1A    	LXI	H,READ$BOOT$CMD	; POINT TO CMDFIELD
 1982 CDB119    	CALL	SCMD2
                
 1985 2100FC    	LXI	H,HDADR		; LOAD DMA ADDRESS
                
                READBUFFER:			; READ OMTI DATABUFFER TO (HL)
 1988 DBE1      	IN	OSTATUS		; WAIT FOR DATA READ TRANSFER
CP/M RMAC ASSEM 1.1	#077	PROF-80 MONITOR VERSION 1.7

 198A E63F      	ANI	00111111B	;
 198C FE0F      	CPI	00001111B	; 
 198E C8        	RZ			; NO TRANSFER IN ERROR CASE
 198F FE0B      	CPI	00001011B	;
                	JRNZ	READBUFFER	;
 1991+20F5      	DB	20H,READBUFFER-$-1
 1993 01E000    	LXI	B,ODATA		; CLEAR B AND SET C TO DATAPORT
                	INIR			; READ 256 BYTE
 1996+EDB2      	DB	0EDH,0B2H
                	INIR			; READ THE NEXT 256 BYTE
 1998+EDB2      	DB	0EDH,0B2H
                
 199A CDC219    	CALL	READSTATUS
                
 199D C25701    	JNZ	CRGETCM		;
                
 19A0 3283FF    	STA	HD$BOOT		;
                
 19A3 C300FC    	JMP	HDADR		;
                
                
                
                SELECT:				; SELECT OMTI CONTROLLER
 19A6 D3E2      	OUT	OSELECT		;
 19A8 DBE1      SELECT1	IN	OSTATUS		; WAIT FOR CONTROLLER SELECTED
 19AA E63F      	ANI	00111111B
 19AC FE0D      	CPI	00001101B	; WAIT UNTIL COMMANDTRANSFER IS READY
                	JRNZ	SELECT1		;
 19AE+20F8      	DB	20H,SELECT1-$-1
 19B0 C9        	RET
                
 19B1 0606      SCMD2:	MVI	B,6		; BYTE COUNTER
 19B3 0EE0      	MVI	C,ODATA		; POINTER TO OMTI DATAPORT
 19B5 DBE1      SCMD1:	IN	OSTATUS		; READ STATUSBYTE
 19B7 E63F      	ANI	00111111B
 19B9 FE0D      	CPI	00001101B	; READY FOR WRITE COMMAND BYTE ?
                	JRNZ	SCMD1		; NO, WAIT UNTIL READY
 19BB+20F8      	DB	20H,SCMD1-$-1
                	OUTI			; WRITE COMMANDBYTE TO OMTI
 19BD+EDA3      	DB	0EDH,0A3H
                	JRNZ	SCMD1		; UNTIL ALL DONE
 19BF+20F4      	DB	20H,SCMD1-$-1
 19C1 C9        	RET
                
                
                READSTATUS:			; READ STATUSBYTE AND SET ZEROFLAG AND
                				; ERRFLAG IF ANY ERROR
 19C2 DBE1      	IN	OSTATUS		; READ CONTOLLER STATUSBYTE
 19C4 E63F      	ANI	00111111B
 19C6 FE0F      	CPI	00001111B	; READY FOR STATUS READ ?
                	JRNZ	READSTATUS	; NO, WAIT UNTIL READY
 19C8+20F8      	DB	20H,READSTATUS-$-1
 19CA DBE0      	IN	ODATA		; OK, READ STATUSBYTE
 19CC B7        	ORA	A		; AND SET ZEROFLAG
 19CD C9        	RET
                
CP/M RMAC ASSEM 1.1	#078	PROF-80 MONITOR VERSION 1.7

                				;
                WAIT$HD$READY:			; WARTE BIS WINCHESTER READY ODER TIMEOUT
 19CE CD081A    	CALL	CHECK$HD$READY	;
 19D1 C8        	RZ			; ALLES OK WINCHESTER BEIM ERSTEN MAL READY
 19D2 21EA19    	LXI	H,WHRTXT	; GEBE WARTEMELDUNG AUS
 19D5 CDBB10    	CALL	SOUT		;
 19D8 21FFFF    	LXI	H,0FFFFH	; LADE TIMEOUT ZAEHLER
 19DB E5        WHR1:	PUSH	H		;
 19DC CD081A    	CALL	CHECK$HD$READY	;
 19DF E1        	POP	H		;
 19E0 C8        	RZ			;
 19E1 2B        	DCX	H		;
 19E2 7C        	MOV	A,H		;
 19E3 B5        	ORA	L		;
                	JRNZ	WHR1		;
 19E4+20F5      	DB	20H,WHR1-$-1
 19E6 3EFF      	MVI	A,0FFH		;
 19E8 B7        	ORA	A		;
 19E9 C9        	RET			;
                	
 19EA 0D0A776169WHRTXT:	DB	0DH,0AH,'waiting for Harddisk ready $'
                
                CHECK$HD$READY:			; PRUEFE OB WINCHESTERLAUFWERK READY
 1A08 CDA619    	CALL	SELECT		;
 1A0B 21151A    	LXI	H,READYCMDFIELD	;
 1A0E CDB119    	CALL	SCMD2		;
 1A11 CDC219    	CALL	READSTATUS	;
 1A14 C9        	RET			;
                
                READYCMDFIELD:
 1A15 0000000000	DB	0,0,0,0,0,0
                
                ;
                
                ;
                READ$BOOT$CMD:
                	
 1A1B 0800000001	DB	008H,000H,000H,000H,001H,000H	
                ;
                ;
                ;
                ;**************************************************************************
                ;***									***
                ;***  ENDE DER ROUTINEN FUER DEN HARDDISK CONTROLLER                    ***
                ;***                                                                    ***
                ;**************************************************************************
                ;
                ;
                ;
                ;**********************************************************
                ;***							***
                ;***  ROUTINEN ZUM EIN UND AUSLESEN DER UHRZEIT		***
                ;***   FUER DEN UPD 1990				***
                ;***							***
                ;**********************************************************
                ;
CP/M RMAC ASSEM 1.1	#079	PROF-80 MONITOR VERSION 1.7

                ;
                ;
                SEND$TIME$COM:
                		; SENDE DIE UNTEREN 3BITS DES AKKU ALS KOMMANDO
                		; ZUM UPD 1990
                		;
 1A21 CD281A    		CALL	SEND$PRECOM
 1A24 CD3D1A    		CALL	SEND$STB
 1A27 C9        		RET
                ;
                ;
                ;
                SEND$PRECOM:
                		;SENDE GEBE DIE UNTEREN 3 BITS DES AKKU
                		;AUF DEN LEITUNGEN C0-C2 AUS
                		;DIENT FUER UHREN KOMMANDO,
                		;DISK PRECOMPENSATION UND JUMPER EINLESEN
                		;
 1A28 C5        	PUSH	B		;RETTE BC
 1A29 0E00      	MVI	C,PAD$C0	;ADRESSE DES BITS
 1A2B 0603      	MVI	B,3		;ZAEHLER
                SEND$TIME$COM$1:
 1A2D 0F        	RRC			;ZYKLISCH VERSCHIEBEN
 1A2E F5        	PUSH	PSW		;RETTE AKKU
 1A2F E680      	ANI	80H		;MASKIERE BIT
 1A31 B1        	ORA	C		;
 1A32 D3D8      	OUT	P$TIME$OUT	;
 1A34 3E10      	MVI	A,16		;EINE ADRESSE HOEHER
 1A36 81        	ADD	C		;
 1A37 4F        	MOV	C,A		;
 1A38 F1        	POP	PSW		;
                	DJNZ	SEND$TIME$COM$1	;GEBE ALLE DREI BITS AUS
 1A39+10F2      	DB	10H,SEND$TIME$COM$1-$-1
 1A3B C1        	POP	B		;
 1A3C C9        	RET			;
                ;
                ;
                ;
                SEND$STB:
                		;SENDE STROBE ZUM UPD1990
                		;
 1A3D 3EFD      	MVI	A,PAD$STB OR 1	;
 1A3F D3D8      	OUT	P$TIME$OUT	;
 1A41 3E0A      	MVI	A,10		;
 1A43 3D        SSTB:	DCR	A		;
                	JRNZ	SSTB		;
 1A44+20FD      	DB	20H,SSTB-$-1
 1A46 3EFC      	MVI	A,PAD$STB	;
 1A48 D3D8      	OUT	P$TIME$OUT	;
 1A4A C9        	RET
                ;
                ;
                ;
                SEND$CLK:
                		;SENDE SHIFT TAKT ZUM UPD1990
 1A4B 3EC0      	MVI	A,PAD$CLK OR 80H;
CP/M RMAC ASSEM 1.1	#080	PROF-80 MONITOR VERSION 1.7

 1A4D D3D8      	OUT	P$TIME$OUT	;
 1A4F 3E0A      	MVI	A,10		;
 1A51 3D        SCKL:	DCR	A		;
                	JRNZ	SCKL		;
 1A52+20FD      	DB	20H,SCKL-$-1
 1A54 3E40      	MVI	A,PAD$CLK	;
 1A56 D3D8      	OUT	P$TIME$OUT	;
 1A58 C9        	RET
                ;
                ;
                ;
                TIME$ENABLE:
 1A59 C9        	RET
                ;
                ;
                ;
                TIME$DISABLE:
                		;SETZE CS DES UPD 1990 AUF OFF
 1A5A C9        	RET
                ;
                ;
                ;
                READ$SHIFT:
                		; DIE 40 BITS DES SHIFTREGISTERS DES UPD 1990
                		; WERDEN IN DIE NACHFOLGENDEN 5 BYTES VON (HL)
                		; ABGELEGT. NACH DIESER AKTION IST DAS SCHIFFTREGISTER
                		; GELOESCHT
                
 1A5B 3E01      	MVI	A,1		;READ SCHIF REGISTER
 1A5D CD211A    	CALL	SEND$TIME$COM
 1A60 0605      	MVI	B,5		;LESE 5 BYTES AUS
                READ$SHIFT$1:
 1A62 0E08      	MVI	C,8		;JEDES BYTE ENTHAELT 8 BIT
                READ$SHIFT$2:
 1A64 DBDB      	IN	P$TIME$IN	;LESE EIN BIT AUS
 1A66 2F        	CMA			;74LS258 NEGIERT
 1A67 17        	RAL
 1A68 7A        	MOV	A,D		;SETZE UNTERSTES BIT IN D
 1A69 1F        	RAR			;ENTSPRECHEND CARRY
 1A6A 57        	MOV	D,A
 1A6B CD4B1A    	CALL	SEND$CLK	;SHIFTE NAECHSTES BIT
 1A6E 0D        	DCR	C		;LESE PRO BYTE 8 BIT AUS
                	JRNZ	READ$SHIFT$2	;IST BYTE FERTIG?
 1A6F+20F3      	DB	20H,READ$SHIFT$2-$-1
 1A71 72        	MOV	M,D		;LEGE BYTE NACH (HL)
 1A72 23        	INX	H		;ZEIGER AUF NAECHSTES BYTE
                	DJNZ	READ$SHIFT$1	;LESE FUENF BYTES AUS
 1A73+10ED      	DB	10H,READ$SHIFT$1-$-1
 1A75 3E00      	MVI	A,0		;GEHE IN HOLD MODE
 1A77 CD211A    	CALL	SEND$TIME$COM
 1A7A C9        	RET
                
                WRITE$SHIFT:
                		; SCHREIBT SHIFTREGISTER MIT DEN 5 BYTES, AUF DIE
                		; (HL) ZEIGT
                
CP/M RMAC ASSEM 1.1	#081	PROF-80 MONITOR VERSION 1.7

 1A7B 56        	MOV	D,M		;LESE ERSTES BYTE EIN
 1A7C 3E01      	MVI	A,1		;GEHE IN SHIFT MODE
 1A7E CD211A    	CALL	SEND$TIME$COM
 1A81 0605      	MVI	B,5		;SCHREIBE FUENF BYTES EIN
                WRITE$SHIFT$1:
 1A83 0E08      	MVI	C,8		;JEDES BYTE ENTHAELT ACHT BIT
                WRITE$SHIFT$2:
 1A85 7A        	MOV	A,D		;AUSGABE BYTE IN AKKU
 1A86 0F        	RRC
 1A87 E680      	ANI	80H
 1A89 F600      	ORI	PAD$C0
 1A8B D3D8      	OUT	P$TIME$OUT
 1A8D 7A        	MOV	A,D		;SCHIEBE UM EINE POS. NACH RECHTS
 1A8E 1F        	RAR
 1A8F 57        	MOV	D,A		;ZURUECK IN D
 1A90 CD4B1A    	CALL	SEND$CLK	;TAKTE BIT EIN
 1A93 0D        	DCR	C		;SCHON 8 BIT AUSGEGEBEN?
                	JRNZ	WRITE$SHIFT$2
 1A94+20EF      	DB	20H,WRITE$SHIFT$2-$-1
 1A96 23        	INX	H		;LESE NAECHSTES BYTE
 1A97 56        	MOV	D,M		;NACH D
                	DJNZ	WRITE$SHIFT$1	;SCHREIBE INSGESAMT FUENF BYTES
 1A98+10E9      	DB	10H,WRITE$SHIFT$1-$-1
 1A9A 3E00      	MVI	A,0		;SETZE UPD 1990 AUF HOLD
 1A9C CD211A    	CALL	SEND$TIME$COM
 1A9F C9        	RET
                
                SET$PHYS$TIME:
                		;SETZE ZEIT IM UPD 1990 MIT DEN FUENF BYTES DIE
                		;IN PHYS$TIME STEHEN
                
 1AA0 CD591A    	CALL	TIME$ENABLE	;AKTIVIERE UPD 1990
 1AA3 2119FF    	LXI	H,SHIFT$CONT	;RETTE SHIFTREGISTER INHALT
 1AA6 CD5B1A    	CALL	READ$SHIFT
 1AA9 2114FF    	LXI	H,PHYS$TIME	;SCHREIBE ZEIT IN SHIFTREGISTER
 1AAC CD7B1A    	CALL	WRITE$SHIFT
 1AAF 3E02      	MVI	A,2		;SETZE ZAEHLER
 1AB1 CD211A    	CALL	SEND$TIME$COM
 1AB4 2119FF    	LXI	H,SHIFT$CONT	;LADE ALTEN SHIFTREGISTER INHALT
 1AB7 CD7B1A    	CALL	WRITE$SHIFT
 1ABA CD5A1A    	CALL	TIME$DISABLE	;DEAKTIVIERE UPD 1990
 1ABD C9        	RET
                
                READ$PHYS$TIME:
                		;LESE ZEIT AUS UPD 1990 IN DIE FUENF BYTES
                		;VON PHYS$TIME
                
 1ABE CD591A    	CALL	TIME$ENABLE	;AKTIVIERE UPD 1990
 1AC1 2119FF    	LXI	H,SHIFT$CONT	;RETTE SHIFTREGISTER INHALT
 1AC4 CD5B1A    	CALL	READ$SHIFT
 1AC7 3E03      	MVI	A,3		;SETZE SHIFTREGISTER MIT ZEIT
 1AC9 CD211A    	CALL	SEND$TIME$COM
 1ACC 06FF      	MVI	B,0FFH		;WARTE ETWAS
                READ$PHYS$TIME$1:
                	DJNZ	READ$PHYS$TIME$1
 1ACE+10FE      	DB	10H,READ$PHYS$TIME$1-$-1
CP/M RMAC ASSEM 1.1	#082	PROF-80 MONITOR VERSION 1.7

 1AD0 2114FF    	LXI	H,PHYS$TIME	;LESE ZEIT AUS
 1AD3 CD5B1A    	CALL	READ$SHIFT
 1AD6 2119FF    	LXI	H,SHIFT$CONT	;LADE SHIFTREGISTER INHALT ZURUECK
 1AD9 CD7B1A    	CALL	WRITE$SHIFT
 1ADC CD5A1A    	CALL	TIME$DISABLE	;DEAKTIVIERE UPD 1990
 1ADF C9        	RET
                
                SET$SHIFT:
                		;SETZE SHIFTREGISTER MIT FUENF BYTES
                		;SHIFT$CONT
                	
 1AE0 CD591A    	CALL	TIME$ENABLE	;AKTIVIERE UPD 1990
 1AE3 2119FF    	LXI	H,SHIFT$CONT	;LADE SHIFT REG.
 1AE6 CD7B1A    	CALL	WRITE$SHIFT
 1AE9 CD5A1A    	CALL	TIME$DISABLE
 1AEC C9        	RET
                ;
                ;
                ;
                GET$SPEED:
                	;TESTE OB UHR IN ORDNUNG
                	;WENN OK, A=FF, WENN NICHT IN ORDNUNG, A=00
                	;WENN UHR OK, DANN IN HL TAKTFREQUENZ
 1AED CD591A    	CALL	TIME$ENABLE	;SELECT UPD 1990
 1AF0 3E00      	MVI	A,0		;IN HOLD MODE
 1AF2 CD211A    	CALL	SEND$TIME$COM
                				;WARTE AUF AENDERUNG AM DATENAUSGANG
 1AF5 210000    	LXI	H,0		;
 1AF8 11FFFF    	LXI	D,0FFFFH	;TIME OUT
 1AFB DBDB      	IN	P$TIME$IN	;LESE AUSGANG
 1AFD E680      	ANI	TIME$DATA$MASK
 1AFF 47        	MOV	B,A		;NACH B
                GET$SPEED1:
 1B00 DBDB      	IN	P$TIME$IN	;LESE AUSGANG BIS AENDERUNG ODER TIME OUT
 1B02 E680      	ANI	TIME$DATA$MASK	;MASKIERE
 1B04 B8        	CMP	B
                	JRNZ	GET$SPEED2	;VERAENDERUNG, WEITER
 1B05+200B      	DB	20H,GET$SPEED2-$-1
 1B07 4F        	MOV	C,A		;RETTE AKKU
 1B08 1B        	DCX	D		;TIME OUT ZAEHLER EINS RUNTER
 1B09 7A        	MOV	A,D
 1B0A B3        	ORA	E		;TIME OUT
                	JRNZ	GET$SPEED1	;UHR NICHT OK?
 1B0B+20F3      	DB	20H,GET$SPEED1-$-1
 1B0D CD5A1A    	CALL	TIME$DISABLE	;
 1B10 AF        	XRA	A		;FEHLER MELDUNG
 1B11 C9        	RET
                GET$SPEED2:			;TESTE TAKT FREQUENZ
 1B12 47        	MOV	B,A		;WIEDER IN B FUER VERAENDERUNG
 1B13 0E80      	MVI	C,TIME$DATA$MASK	;MASKE
                GET$SPEED3:			;ERMITTLE TAKT, LOOP MUSS 50 ZYKLEN DAUERN
 1B15 DBDB      	IN	P$TIME$IN	; 11 ZYKLEN
 1B17 A1        	ANA	C		;MASKIERE, 4 ZYKLEN
 1B18 B8        	CMP	B		;GLEICH ?, 4 ZYKLEN
                	JRNZ	GET$SPEED4	;ENDE,	7 ZYKLEN
 1B19+2006      	DB	20H,GET$SPEED4-$-1
CP/M RMAC ASSEM 1.1	#083	PROF-80 MONITOR VERSION 1.7

 1B1B 23        	INX	H		; 6 ZYKLEN
 1B1C 00        	NOP			;DIENT NUR ZUR VERZOEGERUNG, 4 ZYKLEN
 1B1D 00        	NOP			; 4 ZYKLEN
 1B1E C3151B    	JMP	GET$SPEED3	; 10 ZYKLEN
                GET$SPEED4:
 1B21 CD5A1A    	CALL	TIME$DISABLE
 1B24 3EFF      	MVI	A,0FFH
 1B26 C9        	RET
                ;
                ;
                ;
                ;*************************************************************;
                ;                                                             ;
                ;ENDE DES MASCHINEN CODES, ES FOLGEN NUN TABELLEN             ;
                ;                                                             ;
                ;*************************************************************;
                ;
                ;
                ;
 1B27 2C20747261TXT1	DB	', track #'
 1B30 24        	DB	24H
 1B31 2C20686561TXT2	DB	', head #'
 1B39 24        	DB	24H
 1B3A 2C20736563TXT3	DB	', sector #'
 1B44 24        	DB	24H
                ;
 1B45 661B      ERROR$TABLE:	DW	B15MSG	;FEHLERMELDUNGEN FUER ST1
 1B47 651B      		DW	NOBMSG
 1B49 791B      		DW	B13MSG
 1B4B 871B      		DW	B12MSG
 1B4D 651B      		DW	NOBMSG
 1B4F 931B      		DW	B10MSG
 1B51 9E1B      		DW	B9MSG
 1B53 AE1B      		DW	B8MSG
                ;
 1B55 651B      		DW	NOBMSG	;FEHLERMELDUNGEN FUER ST2
 1B57 C61B      		DW	B6MSG
 1B59 D61B      		DW	B5MSG
 1B5B F21B      		DW	B4MSG
 1B5D 651B      		DW	NOBMSG
 1B5F 651B      		DW	NOBMSG
 1B61 041C      		DW	B1MSG
 1B63 141C      		DW	B0MSG
                ;
 1B65 24        NOBMSG	DB	24H
 1B66 0A0D20656EB15MSG	DB	10,13,' end of cylinder',24H
 1B79 0A0D206461B13MSG	DB	10,13,' data error',24H
 1B87 0A0D206F76B12MSG	DB	10,13,' over run',24H
 1B93 0A0D206E6FB10MSG	DB	10,13,' no data',24H
 1B9E 0A0D206E6FB9MSG	DB	10,13,' not writable',24H
 1BAE 0A0D206D69B8MSG	DB	10,13,' missing address mark',24H
 1BC6 0A0D20636FB6MSG	DB	10,13,' control mark',24H
 1BD6 0A0D206461B5MSG	DB	10,13,' data error in data field',24H
 1BF2 0A0D207772B4MSG	DB	10,13,' wrong cylinder',24H
 1C04 0A0D206261B1MSG	DB	10,13,' bad cylinder',24H
 1C14 0A0D206D69B0MSG	DB	10,13,' missing address mark in data field',24H
CP/M RMAC ASSEM 1.1	#084	PROF-80 MONITOR VERSION 1.7

                ;
                TXTRD:
 1C3A 070D0A2052	DB	BELL,0DH,0AH,' Read error on $'
                TXTWR:
 1C4D 070D0A2057	DB	BELL,0DH,0AH,' Write error on $'
                ;
                ;
                SOFT$BAUD$TAB:
                	;BAUDRATEN FAKTOR FUER DIE SOFTSCHNITTSTELLE
                	;BERRECHNUNG ERFOLGT SO:
                	;EINTRAG:=((1000000/BAUDRATE)-12,5)*65536/240000
                	;
                	;
                	IF	ACHTMHZ
                	;
                	DW	50	; 9600   BAUD
                	DW	106	; 4800   BAUD
                	DW	221	; 2400   BAUD
                	DW	448	; 1200   BAUD
                	DW	1814	;  300   BAUD
                	DW	4054	;  134.5 BAUD
                	DW	7275	;   75   BAUD
                	DW	50	; 9600   BAUD
                	DW	22	;19200   BAUD
                	DW	69	; 7200   BAUD
                	DW	145	; 3600   BAUD
                	DW	297	; 1800   BAUD
                	DW	903	;  600   BAUD
                	DW	3634	;  150   BAUD
                	DW	4958	;  110   BAUD
                	DW	10916	;   50   BAUD
                ;
                	ELSE
                ;
 1C61 1900      	DW	25	; 9600   BAUD
 1C63 3500      	DW	53	; 4800   BAUD
 1C65 6E00      	DW	110	; 2400   BAUD
 1C67 E000      	DW	224	; 1200   BAUD
 1C69 8B03      	DW	907	;  300   BAUD
 1C6B EB07      	DW	2027	;  134.5 BAUD
 1C6D 350E      	DW	3637	;   75   BAUD
 1C6F 1900      	DW	25	; 9600   BAUD
 1C71 0B00      	DW	11	;19200   BAUD
 1C73 2300      	DW	35	; 7200   BAUD
 1C75 4800      	DW	72	; 3600   BAUD
 1C77 9400      	DW	148	; 1800   BAUD
 1C79 C401      	DW	452	;  600   BAUD
 1C7B 1907      	DW	1817	;  150   BAUD
 1C7D AF09      	DW	2479	;  110   BAUD
 1C7F 5215      	DW	5458	;   50   BAUD
                ;
                	ENDIF
                ;
                ;
                SGNON: 
 1C81 0D0A      	DB	0DH,0AH
CP/M RMAC ASSEM 1.1	#085	PROF-80 MONITOR VERSION 1.7

 1C83 4D6F6E6974	DB	'Monitor'
 1C8A 0D0A      	DB	0DH,0AH
 1C8C 24        	DB	'$'
                ;
                ;
                ;
                KENNUNGSTEXT:
 1C8D 50524F462D	DB	'PROF-80'	;WIRD VON INIT INS RAM KOPIERT
                ;
                ;
                ;
                CMDMSG:		;NACH EINGABE EINES ZEICHENS WIRD TEXT AUSGEGEBEN
                		;
 1C94 4164647265	DB	'Address for read (write) from (to) drive $'
 1CBE 426F6F7424	DB	'Boot$'
 1CC3 436865636B	DB	'Check drive $'
 1CD0 446973706C	DB	'Display memory $'
 1CE0 46696C6C20	DB	'Fill memory $'
 1CED 476F20746F	DB	'Go to $'
 1CF4 4861726464	DB	'Harddisk boot$'
 1D02 4B6579626F	DB	'Keyboard mode$'
 1D10 496E20706F	DB	'In port $'
 1D19 4C69737420	DB	'List time$'
 1D23 4D6F766520	DB	'Move memory $'
 1D30 4E65772064	DB	'New date and time set$'
 1D46 4F75742070	DB	'Out port $'
 1D50 5265616420	DB	'Read from drive $'
 1D61 5375627374	DB	'Substitute memory $'
 1D74 5465737420	DB	'Test memory $'
 1D81 5573657220	DB	'User defined disk timing$'
 1D9A 5665726966	DB	'Verify memory $'
 1DA9 5772697465	DB	'Write to drive $'
 1DB9 5820526567	DB	'X Register $'
 1DC5 00        	DB	0		;ENDE DER COMMAND TEXTE
                ;
                CADR: 
 1DC6 0000      	DW	0
 1DC8 9C07      	DW	UCMD
 1DCA 7007      	DW	KCMD
 1DCC 8E05      	DW	LCMD
 1DCE E901      	DW	GCMD
 1DD0 8D04      	DW	WCMD
 1DD2 BC04      	DW	ACMD
 1DD4 7E04      	DW	RCMD
 1DD6 6404      	DW	OCMD
 1DD8 C402      	DW	CCMD
 1DDA FD06      	DW	TCMD
 1DDC E506      	DW	VCMD
 1DDE D206      	DW	FCMD
 1DE0 4405              DW      BCMD
 1DE2 4B02      	DW	XCMD
 1DE4 2702      	DW	SCMD
 1DE6 0702      	DW	MCMD
 1DE8 9C04      	DW	ICMD
 1DEA 5C01      	DW	DCMD
 1DEC B805      	DW	NCMD
CP/M RMAC ASSEM 1.1	#086	PROF-80 MONITOR VERSION 1.7

 1DEE 7619      	DW	HCMD
                ;
                ;
                ;
                CTAB:
 1DF0 48        	DB	'H'
 1DF1 4E        	DB	'N'
 1DF2 44        	DB	'D'
 1DF3 49                DB      'I'
 1DF4 4D                DB      'M'
 1DF5 53                DB      'S'
 1DF6 58                DB      'X'
 1DF7 42                DB      'B'
 1DF8 46        	DB	'F'
 1DF9 56        	DB	'V'
 1DFA 54        	DB	'T'
 1DFB 43        	DB	'C'
 1DFC 4F        	DB	'O'
 1DFD 52        	DB	'R'
 1DFE 41        	DB	'A'
 1DFF 57        	DB	'W'
 1E00 47        	DB	'G'
 1E01 4C        	DB	'L'
 1E02 4B        	DB	'K'
 1E03 55        	DB	'U'
 0014 =         NCMDS	EQU	$-CTAB
                ;
                ;
                ;
                RTAB: 
 1E04 41        	DB	'A'
E1E05 00        	DB	ASAVE AND 0FFH
 1E06 00                DB      0
 1E07 42                DB      'B'
E1E08 00                DB      BSAVE AND 0FFH
 1E09 00                DB      0
 1E0A 43                DB      'C'
E1E0B 00                DB      CSAVE AND 0FFH
 1E0C 00                DB      0
 1E0D 44                DB      'D'
E1E0E 00                DB      DSAVE AND 0FFH
 1E0F 00                DB      0
 1E10 45                DB      'E'
E1E11 00                DB      ESAVE AND 0FFH
 1E12 00                DB      0
 1E13 46                DB      'F'
E1E14 00                DB      FSAVE AND 0FFH
 1E15 00                DB      0
 1E16 48                DB      'H'
E1E17 00                DB      HSAVE AND 0FFH
 1E18 00                DB      0
 1E19 4C                DB      'L'
E1E1A 00                DB      LSAVE AND 0FFH
 1E1B 00                DB      0
 1E1C 4D                DB      'M'
E1E1D 00                DB      HSAVE AND 0FFH
CP/M RMAC ASSEM 1.1	#087	PROF-80 MONITOR VERSION 1.7

 1E1E 01                DB      1
 1E1F 50                DB      'P'
E1E20 00                DB      PSAVE+1 AND 0FFH
 1E21 01                DB      1
 1E22 53                DB      'S'
E1E23 00                DB      SSAVE+1 AND 0FFH
 1E24 01                DB      1
 1E25 61        	DB	'a'
E1E26 00        	DB	AASAVE AND 0FFH
 1E27 00        	DB	0
 1E28 62        	DB	'b'
E1E29 00        	DB	BBSAVE AND 0FFH
 1E2A 00        	DB	0
 1E2B 63        	DB	'c'
E1E2C 00        	DB	CCSAVE AND 0FFH
 1E2D 00        	DB	0
 1E2E 64        	DB	'd'
E1E2F 00        	DB	DDSAVE AND 0FFH
 1E30 00        	DB	0
 1E31 65        	DB	'e'
E1E32 00        	DB	EESAVE AND 0FFH
 1E33 00        	DB	0
 1E34 66        	DB	'f'
E1E35 00        	DB	FFSAVE AND 0FFH
 1E36 00        	DB	0
 1E37 68        	DB	'h'
E1E38 00        	DB	HHSAVE AND 0FFH
 1E39 00        	DB	0
 1E3A 6C        	DB	'l'
E1E3B 00        	DB	LLSAVE AND 0FFH
 1E3C 00        	DB	0
 1E3D 6D        	DB	'm'
E1E3E 00        	DB	HHSAVE AND 0FFH
 1E3F 01        	DB	1
 1E40 58        	DB	'X'
E1E41 00        	DB	XSAVE+1 AND 0FFH
 1E42 01        	DB	1
 1E43 59        	DB	'Y'
E1E44 00        	DB	YSAVE+1 AND 0FFH
 1E45 01        	DB	1
 1E46 49        	DB	'I'
E1E47 00        	DB	ISAVE AND 0FFH
 1E48 00        	DB	0
 1E49 52        	DB	'R'
E1E4A 00        	DB	RSAVE AND 0FFH
 1E4B 00        	DB	0
 1E4C 0000      	DB	0,0	;ENDE KENNUNG DER TABELLE
                ;
                ;
                ;
                DISKPAGE:	; DIE DISKPAGE WIRD DER SYSTEMPAGE UEBERLAGERT
                		;
                	INP	L
 1E4E+ED68      	DB	0EDH,L*8+40H
 1E50 E9        	PCHL
 1E51 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
CP/M RMAC ASSEM 1.1	#088	PROF-80 MONITOR VERSION 1.7

                	;
                	INP	L
 1E5E+ED68      	DB	0EDH,L*8+40H
 1E60 E9        	PCHL
 1E61 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
                	INP	L
 1E6E+ED68      	DB	0EDH,L*8+40H
 1E70 E9        	PCHL
 1E71 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
                	INP	L
 1E7E+ED68      	DB	0EDH,L*8+40H
 1E80 E9        	PCHL
 1E81 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
                	INP	L
 1E8E+ED68      	DB	0EDH,L*8+40H
 1E90 E9        	PCHL
 1E91 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
                	INP	L
 1E9E+ED68      	DB	0EDH,L*8+40H
 1EA0 E9        	PCHL
 1EA1 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
                	INP	L
 1EAE+ED68      	DB	0EDH,L*8+40H
 1EB0 E9        	PCHL
 1EB1 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
                	INP	L
 1EBE+ED68      	DB	0EDH,L*8+40H
 1EC0 E9        	PCHL
 1EC1 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
 1ECE C9        	RET
 1ECF FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
 1EDE C9        	RET
 1EDF FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
 1EEE C9        	RET
 1EEF FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
                	EXX
 1EFE+D9        	DB	0D9H
                	OUTI
 1EFF+EDA3      	DB	0EDH,0A3H
                	EXX
 1F01+D9        	DB	0D9H
                	INP	L
 1F02+ED68      	DB	0EDH,L*8+40H
 1F04 E9        	PCHL
 1F05 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
CP/M RMAC ASSEM 1.1	#089	PROF-80 MONITOR VERSION 1.7

 1F0E C9        	RET
 1F0F FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
 1F1E C9        	RET
 1F1F FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
 1F2E C9        	RET
 1F2F FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
                	EXX
 1F3E+D9        	DB	0D9H
                	INI
 1F3F+EDA2      	DB	0EDH,0A2H
                	EXX
 1F41+D9        	DB	0D9H
                	INP	L
 1F42+ED68      	DB	0EDH,L*8+40H
 1F44 E9        	PCHL
 1F45 FFFFFFFFFF	DB	-1,-1,-1,-1,-1,-1,-1,-1,-1
                	;
 1F4D =         LASTADD	EQU	$-1	;LETZTE BENUTZTE ADRESSE IM EPROM
                ;
                ;
                ;
                ;************************************* BEGINN DES RAM-BEREICHES ******
                ;
                ;
                ;
 FA00           		ORG	SYSTEMPAGE-1024-256
                		;
 FA00 =         BOOTADR		EQU	$	;HIERHER WIRD ERSTER SEKTOR GELADEN
                		;
 FA00           		DS	1024	;PLATZ FUER ERSTEN SEKTOR
                		;
 FE00           		DS	256-26	;PLATZ FUER STACK
                		;
 FEE6 =         REGS:		EQU	$
 FEE6 =         MSTAK:		EQU	$
                		;
                		; REGISTER INHALTE
                		;
 FEE6           RSAVE:		DS	1
 FEE7           ISAVE:		DS	1
 FEE8           LLSAVE		DS	1
 FEE9           HHSAVE		DS	1
 FEEA           EESAVE		DS	1
 FEEB           DDSAVE		DS	1
 FEEC           CCSAVE		DS	1
 FEED           BBSAVE		DS	1
 FEEE           FFSAVE		DS	1
 FEEF           AASAVE		DS	1
 FEF0           YSAVE:		DS	2
 FEF2           XSAVE:		DS	2
 FEF4           ESAVE:		DS	1
 FEF5           DSAVE:  	DS	1
 FEF6           CSAVE:  	DS	1
CP/M RMAC ASSEM 1.1	#090	PROF-80 MONITOR VERSION 1.7

 FEF7           BSAVE:  	DS	1
 FEF8           FSAVE:  	DS	1
 FEF9           ASAVE:  	DS	1
 FEFA           LSAVE:  	DS	1
 FEFB           HSAVE:  	DS	1
 FEFC           PSAVE:  	DS      2
 FEFE           SSAVE:  	DS      2
                				;
                				; DIE NACHFOLGENDEN SPEICHERZELLEN MUESSEN
                				; MIT DER DISKPAGE GEMISCHT WERDEN KOENNEN
                				;
                SYSTEMPAGE:			; 
                RWPOLL:				; NACHDEM DIE SYSTEMPAGE VON DER DISKPAGE
                				; UEBERLAGERT WURDE, ERLEDIGT EIN CALL VON
                				; RWPOLL DIE DISK-UEBERTRAGUNG.
                				;
                				;*** ERSTE 16 BYTE ***
 FF00           		DS	3	;FREI FUER FLOPPY BEDIENUNG
 FF03           TEMP:	  	DS	1	;ALLGEMEINER ZWISCHENSPEICHER
 FF04           BAUD$JUMPERBYTE	DS	1	;STELLUNG DES JUMPERS J5: 0=KEIN JUMPER
                				;1=1-3,2=2-4,3=3-5,4=4-6
 FF05           CLKFLG		DS	1	;"0": UHR NICHT OK, "FF": UHR OK
 FF06           DISKFLG		DS	1	;"0": UPD 765 NICHT OK, "FF": UPD 765 OK
 FF07           SYSTEMTAKT	DS	2	;SYSTEMFREQUENZ * 100 HZ
 FF09           DISPADR		DS	2	;LETZTER ZAEHLERSTAND DES D-BEFEHLS
 FF0B           EOTSAVE		DS	1	;WIRKLICHES ENDE EINER SPUR
 FF0C           EOTFLG		DS	1	;FEHLERFLAG FUER DISK R/W UEBER SPUR ENDE
 FF0D           RWCMD		DS	1	;COMMANDO FUER RWCOM
 FF0E           ERMSG		DS	2	;MEASSAGE FUR RWCOM
                				;
                				;
                				;*** ZWEITE 16 BYTE ***
 FF10           		DS	3	;FREI FUER FLOPPY BEDIENUNG
 FF13           IO$JUMPERBYTE	DS	1	;STELLUNG DES JUMPERS J4: 0=KEIN JUMPER
                				;1=1-3,2=2-4,3=3-5,4=4-6. DIRIGIERT KONSOLE
 FF14           PHYS$TIME	DS	5	;ZWISCHENSPEICHER FUER UPD 1990 ZAEHLER INHALT
 FF19           SHIFT$CONT	DS	5	;ZWISCHENSPEICHER FUER UPD 1990 SHIFTREGISTER 
 FF1E           SOFTVERZ	DS	2	;VERZOGERUNGSZEIT FUER DUPLEX-SCHNITTSTELLE
                				;
                				;
                				;*** DRITTE 16 BYTE ***
 FF20           		DS	3	;FREI FUER FLOPPY BEDIENUNG
 FF23           TEST$TYPE	DS	1	;WIRD BEI TEST GESETZT (FORMATERKENNUNG FLOPPY)
                				;BIT 7: 0=SS, 1=DS
                				;BIT 6: 0=SD, 1=DD
                				;BIT 5: 0=MAXI, 1=MINI
                				;BIT 4: IMMER 0
                				;BIT 0-3: SEKTORGROESSE
                				;
 FF24           TEST$MSEK	DS	1	;ANZAHL DER SEKTOREN/SPUR, DIE TEST ERMITTELTE
 FF25           TEST$TRACK	DS	1	;AUF DIESER SPUR WIRD DAS FLOPPY-
                				;FORMAT GETESTET (DEFAULT=1)
 FF26           UMLEIT$NMI	DS	3	;EIN NMI GEHT UEBER DIESEN SPRUNG
                				;
 FF29           BANK$ERR$BYTE	DS	1	;BELEGUNG DER ZWEI RAM BANKS
                				;0: BANK 0 UND BANK 1 OK
CP/M RMAC ASSEM 1.1	#091	PROF-80 MONITOR VERSION 1.7

                				;1: BANK 0 FEHLER
                				;2: BANK 1 FEHLER
                				;
 FF2A           DMAADR		DS	2	;DMA ADRESSE FUER FLOPPY READ UND WRITE
 FF2C           SECTCNT		DS	1	;ANZAHL DER SEKTOREN FUER FLOPPY READ UND WRITE
 FF2D           UMLEIT$GETCM	DS	3	;ROUTINEN, DIE VON CP/M BENUTZT WERDEN, MUESSEN
                				;UEBER DIESEN SPRUNG AUF BEFEHLS-EINGABE-EBENE
                				;ZURUECKKEHREN. CP/M BIOS SETZT DIESEN SPRUNG 
                				;DANN AUF WBOOT
                				;
                				;
                				;*** VIERTE 16 BYTE
 FF30           		DS	3	;FREI FUER FLOPPY BEDIENUNG
                				;KOMMANDO-TABELLE FUER FLOPY-CONTROLER
 FF33           CMDTAB		DS	1	;
 FF34           UNIT		DS	1	;WIRD VON C-BEFEHL GESETZT
 FF35           TRACK   	DS      1	;WIRD VON A-BEFEHL GESETZT
 FF36           HEAD    	DS      1	;WIRD VON A-BEFEHL GESETZT
 FF37           SECTOR  	DS      1	;WIRD VON A-BEFEHL GESETZT
 FF38           SECSZ   	DS      1	;WIRD VON C-BEFEHL GESETZT
 FF39           EOT     	DS      1	;WIRD VON C-BEFEHL GESETZT
 FF3A           GAPLL		DS      1	;WIRD VON C-BEFEHL GESETZT
 FF3B           DTLL    	DS      1	;WIRD VON C-BEFEHL GESETZT
 FF3C           UMLEIT$CONST	DS	3	;KONSOLEN STATUS GEHT UEBER DIESEN SPRUNG
 FF3F           SEEKNR		DS	1	;EINIGE LAUFWERKE BENOETIGEN ZWEI STEPIMPULSE
                				;DIE UNTEREN 4 BIT GEBEN FUER JEDES LW
                				;AN, OB ES EIN ('0') ODER ZWEI ('1') IMPULSE
                				;PRO SPURWECHSEL BRAUCHT, LAUFWERK 0 IST LSB.
                				;DIE OBEREN 4 BIT DIESES BYTES GEBEN AN, OB
                				;TEST DAS TWO-SIDED-BIT IMMER AUF 1 ODER
                				;ENTSPRECHEND DER TWO-SIDED-LEITUNG SETZTEN
                				;SOLL. DURCH DIESE ERWEITERUNG SPART MAN SICH
                				;DEN HARDWARE-ZUSATZ (SIEHE CP/M ANPASSUNS-
                				;BESCHREIBUNG) FUER GEMISCHTEN BETRIEB MIT
                				;80 TRACK LAUFWERKEN.
                				;DEFAULTMAESSIG WIRD SEEKNR MIT XSEEKNR
                				;INITIALISIERT. SEEKNR KANN ABER AUCH MIT DEM
                				;U-BEFEHL GESETZT WERDEN.
                				;
                				;*** FUENFTE 16 BYTES ***
 FF40           		DS	3	;FREI FUER FLOPPY BEDIENUNG
 FF43           REST    	DS      7	;ERGEBNISSTABELLE DES FLOPY-CONTROLERS
 FF4A           UMLEIT$CONIN	DS	3	;KONSOLEN EINGABE GEHT UEBER DIESEN SPRUNG
 FF4D           UMLEIT$CONOUT	DS	3	;KONSOLEN AUSGABE GEHT UEBER DIESEN SPRUNG
                				;
                				;
                				;*** SECHSTE 16 BYTES ***
 FF50           		DS	3	;FREI FUER FLOPPY BEDIENUNG
 FF53           IN$BUFF$END	DS	11	;FIFO ZEICHEN BUFFER FUER DUPLEX EINGABE
                				;IM INTERRUPTBETRIEB (J-51-A GESETZT)
 FF5E           IN$BUFF$ZEIG	DS	2	;ZEIGER FUER ZEICHEN BUFFER
                				;
                				;
                				;*** SIEBTE 16 BYTES ***
 FF60           		DS	3	;FREI FUER FLOPPY BEDIENUNG
 FF63           DERMSG		DS	1	;"0":AUSGABE VON FLOPPY-FEHLER
CP/M RMAC ASSEM 1.1	#092	PROF-80 MONITOR VERSION 1.7

                				;"FF": AUSGABE VON FLOPPY-FEHLER UNTERDRUECKEN
 FF64           RWRETRY		DS	1	;ANZAHL DER LESE/SCHREIB-VERSUCHE MIT FLOPPY
 FF65           WRITE$PRECOM	DS	1	;WRITE PRECOMPENSATION FUER RWCOM ROUTINE
 FF66           KENNUNG		DS	7	;DER MONITOR SCHREIBT HIER PROF-80 KENNUNG EIN
 FF6D           MON$VERS	DS	1	;MONITOR VERSIONSNUMMER
 FF6E           COMMON$PAGE	DS	1	;PAGEGRENZE FUER COMMON BEREICH (SETZT BIOS)
 FF6F           CURRENT$BANK	DS	1	;GEWAEHLTE BANK UNTER COMMON (SETZT BIOS)
                				;
                				;
                				;*** ACHTE 16 BYTES ***
 FF70           		DS	3	;FREI FUER FLOPPY BEDIENUNG
 FF73           SOFTPRNTVERZ	DS	2	;VERZOEGERUNGSZEIT FUER SIMPLEX SCHNITTSTELLE
 FF75           READY$BYTE	DS	1	;DIE UNTEREN 4 BITS GEBEN AN, OB EIN LW
                				;EIN READY SIGNAL LIEFERN KANN ('0') ODER OB
                				;ES KEIN READY LIEFERT ('1').
                				;DIE OBEREN 4 BITS GEBEN AN, OB BEI DEM
                				;BETREFFENDEN LW UEBERHAUPT SCHON GETESTET
                				;WURDE OB ES READY LIEFERT
                				;'0'= SCHON GETESTET, '1'= NOCH NICHT GETESTET
                				;LAUFWERK 0 IST LSB
 FF76           EPROMZ		DS	1	;WIEVIEL MAL WURDE EPROM EINGESCHALTET?
                				;(WIRD VOM BIOS GESETZT)
 FF77           TYPELIST	DS	2	;ZEIGER AUF DISK$TYPE$LIST (WIRD VOM BIOS
                				;GESETZT)
 FF79           SPECD$WORD	DS	2	;DER INHALT DIESER ZWEI BYTE BESTIMMT DIE
                				;STEP-RATE, DIE HEAD-LOAD-TIME UND DIE HEAD-
                				;UNLOAD-TIME. SPECD$WORD WIRD NACH EINEM RESET
                				;VOREINGESTELLT. NACH JEDEM CHECK DRIVE WERDEN
                				;DIE DRIVE-ZEITEN NEU GESETZT.
                				;DIE 16 BIT VON SPECD$WORD SIND FOLGENDERMASSEN
                				;AUFGEBAUT:
                				;            SSSSUUUU LLLLLLLX
                				;
                				; SSSS:	STEPRATE 0000=16MS
                				;		 0001=15MS
                				;		 .........
                				; 		 1111=1MS
                				;
                				; UUUU: HEADUNLOADTIME IN 16 MS SCHRITTEN
                				;	0000=0MS, 0001=16MS, .. ,1111=240MS
                				;
                				; LLLLLLL: HEADLOADTIME IN 2 MS SCHRITTEN
                				;
                				; X: IMMER 1       
                				;
                				;DEFAULTMAESSIG WIRD SPECD$WORD MIT
                				;XSPECD$WORD INITIALISIERT, ES KANN ABER
                				;AUCH MIT DEM U-BEFEHL GESETZT WERDEN.
                				;
 FF7B           TE$TIME		DS	1	;WARTEZEIT NACH DISK-WRITE IN 100US (BEI 6MHZ)
 FF7C           SIOABAUD	DS	1	;JUMPERSTELLUNG UNIO J2-A
 FF7D           SIOBBAUD	DS	1	;JUMPERSTELLUNG UNIO J2-B
 FF7E           STEP$WAIT	DS	1	;WARTEZEIT VOR SEEK WENN MOTOR VORHER AUS WAR
                				;IST BEI EPSON 3,5 ZOLL LAUFWERKEN NOTWENDIG.
                				;ZEIT: MAL 10 MS (BEI 6 MHZ)
 FF7F           		DS	1	;NOCH FREI
CP/M RMAC ASSEM 1.1	#093	PROF-80 MONITOR VERSION 1.7

                				;
                				;
                				;***  NEUNTE 16 BYTE ***
 FF80           		DS	1	;FREI FUER FLOPPY BEDIENUNG
 FF81           ALT$UNIT	DS	1	;LAUFWERK UND TRACK BEI LETZTEM
 FF82           ALT$TRACK	DS	1	;SEEK AUFRUF
 FF83           HD$BOOT		DS	1	;FUER CP/M 0FFH => FLOPPY-BOOT, 000H => HARDDISK-BOOT
 FF84           BOOT$FLG	DS	1	;FUER MONITOR 0 => HARDDISK-BOOT, SONST FLOPPY-BOOT
 FF85           		DS	11	;NOCH FREI
                				;
                				;
 FF90           		DS	7*16	;FREIHALTEN FUER ERWEITERUNGEN UND
                				;FLOPPY BEDIENUNG
                				;
 0000           	END
