  	ORG	CBIOSO					;
  							;
  ;-------------------------------------------------------;
  ;
  ; Die Einsprungtabelle
  ;
  ; Alle Routinen in CBIOS werden vom CP/M System ueber
  ; diese Jump Table adressiert. Die relative Lage der
  ; einzelnen Jump Vectoren darf deshalb keinesfalls ge-
  ; aendert werden.
  ;
  ;-------------------------------------------------------;
  							;
  1680'   C3 0000*              CBIOS:	JP	CBOOT					;
  1683'   C3 0000*              WBOOTE:	JP	WBOOT					;
  1686'   C3 1835'              	JP	XCONST					;
  1689'   C3 183D'              	JP	XCONIN					;
  168C'   C3 1845'              	JP	XCONOUT					;
  168F'   C3 184D'              	JP	XLIST					;
  1692'   C3 1855'              	JP	XPUNCH					;
  1695'   C3 185D'              	JP	XREADER					;
  1698'   C3 1865'              	JP	XHOME					;
  169B'   C3 186D'              	JP	XSELDSK					;
  169E'   C3 1875'              	JP	XSETTRK					;
  16A1'   C3 187D'              	JP	XSETSEC					;
  16A4'   C3 1885'              	JP	XSETDMA					;
  16A7'   C3 188D'              	JP	XREAD					;
  16AA'   C3 1895'              	JP	XWRITE					;
  16AD'   C3 189D'              	JP	XLISTST					;
  16B0'   C3 18A5'              	JP	XSECTRA					;
  							;
  	.LIST						;
  							;
  ;-------------------------------------------------------;
  ;
  ; Patchbare Terminal Strings (Default = Video 80)
  ;
  ; Diese Strings werden von CP/M verwendet um Fehler-
  ; meldungen in 'invers video' auszugeben und die Sta-
  ; tuszeile aif dem Bildschirm richtig zu positionieren.
  ; Das erste Byte jedes Strings entspricht der Anzahl
  ; der nachfolgenden, zu sendenden Zeichen. Daher ist 
  ; NULL immer ein sicherer Wert, in diesem Fall wird
  ; von der jeweiligen Funktion kein gebrauch gemacht.
  ;
  ; CLRS - Sequenz zum Bildschirmloeschen
  ;
  ; IVON - Einschalten der 'invers video' Darstellung
  ;
  ; IVOF - Ausschalten der 'invers video' Darstellung
  ;
CBIOS - BASIC INPUT OUTPUT FOR CP/M	MACRO-80 3.4	01-Dec-80	PAGE	1-3


  ; STON - Positionieren des Cursors in die Statuszeile
  ;        d.h. die unterste Zeile (25) des Bildschirms.
  ;
  ; STOF - Positionieren des Cursors auf die Bildschirm-
  ;        adresse vor Senden von STON.
  ;
  ; Achtung ! Die Statuszeile muss ein spezieller Bild-
  ; bereich des Terminals sein, der nicht durch SCROLL
  ; etc. beeinflusst wird.
  ;
  ;-------------------------------------------------------;
  							;
  0161"                         	CSEG						;
  							;
  1722'   02 1B 47 00           CLRS:	DB	2,?ESC,'G',0,0,0			;
  1726'   00 00                 
  1728'   02 1B 4A 00           IVON:	DB	2,?ESC,'J',0,0,0			;
  172C'   00 00                 
  172E'   02 1B 4B 00           IVOF:	DB	2,?ESC,'K',0,0,0			;
  1732'   00 00                 
  1734'   05 1B 45 1B           STON:	DB	5,?ESC,'E',?ESC,'B',' '+1		;
  1738'   42 21                 
  173A'   02 1B 44 00           STOF:	DB	2,?ESC,'D',0,0,0			;
  173E'   00 00                 
  							;
  ;-------------------------------------------------------;
  ;
  ; Terminal, Drucker Initialisierung
  ;
  ; Sowohl an das angeschlossene Terminal, als auch an den
  ; Systemdrucker kann nach dem Kaltstart automatisch ein
  ; String gesendet werden. Damit ist es moeglich Zeichen-
  ; saetze etc. zu initialisieren. Auch hier gibt das
  ; erste Byte des Strings die Laenge an.
  ;
  ; INIC - Initialisieren der Console
  ;
  ; INIL - Initialisieren des Druckers
  ;
  ;-------------------------------------------------------;
  							;
  1740'   12                    INIC:	DB	18					;
  1741'   1B 43 20 20           	DB	?ESC,'C',32,32,32+79,32+23		;
  1745'   6F 37                 
  1747'   1B 42 21              	DB	?ESC,'B',32+1				;
  174A'   1B 43 20 38           	DB	?ESC,'C',32,32+24,32+79,32+24		;
  174E'   6F 38                 
  1750'   1B 42 20              	DB	?ESC,'B',32+0				;
  							;
  1753'   00 00 00 00           INIL:	DB	0,0,0,0,0,0,0,0,0,0			;
  1757'   00 00 00 00           
  175B'   00 00                 
  							;
  ;-------------------------------------------------------;
  ;
  ; IO-Byte Initialwert
CBIOS - BASIC INPUT OUTPUT FOR CP/M	MACRO-80 3.4	01-Dec-80	PAGE	1-4


  ;
  ; Das IO Byte dient im Elzet 80 DD CP/M dazu einzelne
  ; Treiber fuer die Console und den Drucker anzuwaehlen.
  ; Seine Definition entspicht nicht der CP/M Konvention!
  ; Die obere H{lfte des Bytes definiert die Drucker-
  ; schnittstelle, die untere Haelfte die Consolenschnitt-
  ; stelle. Folgende Werte sind zur Zeit moeglich:
  ;
  ; Drucker:	0 - Benutzerdefinierte Routine
  ;		1 - Centronics Schnittstelle auf
  ;		    Elzet PRINT oder PRINT/CTC
  ;		    Karte
  ;		2 - Serielle RS 232 Schnittstelle
  ;		    (9600 Bd) auf CPU/IEC
  ;	       15 - Autoselect zwischen 1 und 2
  ;
  ; Terminal:	0 - Benutzerdefinierte Routine
  ;		1 - Video 80, Tastatur an CPU/IEC
  ;		2 - Seriell auf CPU
  ;		3 - Seriell (9600 Bd) auf CPU/IEC
  ;	       15 - Autoselect zwischen 1, 2 und 3
  ;
  ;-------------------------------------------------------;
  							;
  175D'   FF                    IODEF:	DB	((LSTDEF) SHL 4) OR (CONDEF)		;
  							;
  ;-------------------------------------------------------;
  ;
  ; User Patch Area
  ;
  ; Die 'user pach area' erlaubt es eigene Ausgabetreiber
  ; fuer Terminal und Drucker in CP/M einzubinden. Hierzu
  ; ist es unbedingt erforderlich das IO Byte (s.o.) auf
  ; 00H zu initialisieren. Es sind dann entsprechend dem
  ; CP/M Alteration Guide Treiber fuer Terminal und
  ; Drucker zu codieren. Um ein relozierbares CP/M Modul
  ; erhalten ist es unbedingt erforderlich alle Adressier-
  ; ungen RELATIV zu halten (Ausnamen bilden feste System-
  ; adressen !). Sind die Treiber assembliert koennen sie
  ; hinter LSP eingegeben werden. Es muss anschliessend
  ; Sprungtabelle entsprechend geaendert werden.
  ;
  ; ICP - Terminal Treiber Initialisierung
  ;
  ; CIP - User CONIN
  ;
  ; COP - User CONOUT
  ;
  ; CSP - User CONST
  ;
  ; ILP - Drucker Initialisierung
  ;
  ; LIP - User LIST
  ;
  ; LSP - User LISTST
  ;
CBIOS - BASIC INPUT OUTPUT FOR CP/M	MACRO-80 3.4	01-Dec-80	PAGE	1-5


  ; Es koennen innerhalb der Treiber alle Register ge-
  ; aendert werden. Die Initialisierungen werden unmittel-
  ; bar vor der ersten Ausgabe eines Zeichen etc. Ange-
  ; sprochen. Sie werden nicht zur Zeit des Kaltstarts
  ; aktiviert.
  ;
  ;-------------------------------------------------------;
  							;
  175E'   18 FE                 ICP:	JR	$					;
  1760'   18 FE                 CIP:	JR	$					;
  1762'   18 FE                 COP:	JR	$					;
  1764'   18 FE                 CSP:	JR	$					;
  1766'   18 FE                 ILP:	JR	$					;
  1768'   18 FE                 LIP:	JR	$					;
  176A'   18 FE                 LSP:	JR	$					;
  							;
  176C'                         	DEFS	100					;
  							;
  ;-------------------------------------------------------;
  ;
  ; Datenblock SYSPAR
  ;
  ; Innerhalb des folgenden Speicherbereiches koennen
  ; systemspezifische Parameter, wie die Taktfrequenz
  ; und die MINIMALE Schrittgeschwindigkeit der verwen-
  ; deten Laufwerke definiert werden.
  ;
  ; Taktfrequenz:	25 = 2.5 MHz
  ;		40 = 4.0 MHz
  ;
  ; Schrittgeschwindigkeit:	00 =  3 ms
  ;				01 =  6 ms
  ;				10 = 10 ms
  ;				11 = 15 ms
  ;
  ; Achtung, die angegebenen Zeiten beziehen sich auf den
  ; Betrieb des WD 1793 bei einer Taktfrequenz von 2 MHz.
  ; Fuer den Betrieb mit 1 MHz sind die angegebenen Zeiten
  ; zu verdoppeln.
  ;
  ;-------------------------------------------------------;
  							;
  17D0'   28                    CLKRAT:	DB	CPUCLK					;
  							;
  17D1'   00                    STPRAT:	DB	MAXSTP					;
  							;
  ;-------------------------------------------------------;
  ;
  ; Initialisierungstabellen SIO
  ;
  ; In diesen Tabellen wird die SIO Betriebsart bei Ver-
  ; wendung der SIO/2 Karte festgelegt. Die Grundinitiali-
  ; sierung verwendet zur Datenuebertragung 8 Bit pro
  ; Zeichen bei einem Stopbit und gerader Paritaet. Die
  ; Taktfrequenz der SIO wird durch 64 geteilt.
  ;
CBIOS - BASIC INPUT OUTPUT FOR CP/M	MACRO-80 3.4	01-Dec-80	PAGE	1-6


  ;-------------------------------------------------------;
  							;
  17D2'   18                    ASIOT:	DB	00011000B				;
  17D3'   00                    	DB	00000000B				;
  17D4'   02                    	DB	REG2					;
  17D5'   00                    	DB	00000000B				;
  17D6'   03                    	DB	REG3					;
  17D7'   00                    	DB	00000000B				;
  17D8'   04                    	DB	REG4					;
  17D9'   C7                    	DB	11000111B				;
  17DA'   05                    	DB	REG5					;
  17DB'   68                    	DB	01101000B				;
  17DC'   06                    	DB	REG6					;
  17DD'   00                    	DB	00000000B				;
  17DE'   07                    	DB	REG7					;
  17DF'   00                    	DB	00000000B				;
  							;
  17E0'   18                    BSIOT:	DB	00011000B				;
  17E1'   00                    	DB	00000000B				;
  17E2'   02                    	DB	REG2					;
  17E3'   00                    	DB	00000000B				;
  17E4'   03                    	DB	REG3					;
  17E5'   00                    	DB	00000000B				;
  17E6'   04                    	DB	REG4					;
  17E7'   C7                    	DB	11000111B				;
  17E8'   05                    	DB	REG5					;
  17E9'   68                    	DB	01101000B				;
  17EA'   06                    	DB	REG6					;
  17EB'   00                    	DB	00000000B				;
  17EC'   07                    	DB	REG7					;
  17ED'   00                    	DB	00000000B				;
  							;
  ;-------------------------------------------------------;
  ;
  ; Unterprogramme CHL und HLC
  ;
  ; Diese beiden Unterprogramme werden mit einer Bank-
  ; adresse von 00 bis 0F im A-Register aufgerufen. Sie
  ; speichern dann auf der jeweiligen Speicherbank ein
  ; Byte (HLC) oder lesen ein Byte ein (CHL). Dabei wird
  ; die Speicheradresse im HL-Register uebergeben. Das
  ; C-Register enthaelt das zu speichernde oder einge-
  ; lesene Byte. Achtung, diese Programme werden vom CBIOS
  ; System in den oberen Speicherteil, der unabhaengig von
  ; der gewaehlten Speicherbank eingeblendet bleibt, relo-
  ; ziert. Sie duerfen daher keine absoluten Referenzen
  ; enthalten. Fuer Jedes der Programme stehen 20 Byte
  ; zur Verfuegung. Die Startadressen duerfen nicht ge-
  ; aendert werden.
  ;
  ;-------------------------------------------------------;
  							;
  	IF	BNKPRT EQ CPUIEC			;
  							;
  XCHL:	DI						;
  	OUT	(1),A					;
CBIOS - BASIC INPUT OUTPUT FOR CP/M	MACRO-80 3.4	01-Dec-80	PAGE	1-7


  	LD	C,(HL)					;
  	XOR	A					;
  	OUT	(1),A					;
  	EI						;
  	RET						;
  	DEFS	20-9					;
  							;
  XHLC:	DI						;
  	OUT	(1),A					;
  	LD	(HL),C					;
  	XOR	A					;
  	OUT	(1),A					;
  	EI						;
  	RET						;
  	DEFS	20-9					;
  							;
  	ENDIF						;
  							;
  	IF	BNKPRT EQ AUTO				;
  							;
  0000                          NUM	DEFL	0					;
  	REPT	DRIVES					;
  RES	DEFL	0					;
  	TYPCOM	DDFDC,%NUM				;
  	IF	RES EQ 1				;
  	EXITM						;
  	ENDIF						;
  NUM	DEFL	NUM+1					;
  	ENDM						;
  							;
  	IF	RES EQ	1				;
  							;
  17EE'   F3                    XCHL:	DI						;
  17EF'   4F                    	LD	C,A					;
  17F0'   DB 6D                 	IN	A,(?FDPBD)				;
  17F2'   E6 F0                 	AND	0F0H					;
  17F4'   B1                    	OR	C					;
  17F5'   D3 6D                 	OUT	(?FDPBD),A				;
  17F7'   4E                    	LD	C,(HL)					;
  17F8'   AF                    	XOR	A					;
  17F9'   D3 6D                 	OUT	(?FDPBD),A				;
  17FB'   FB                    	EI						;
  17FC'   C9                    	RET						;
  17FD'                         	DEFS	20-14					;
  							;
  1803'   F3                    XHLC:	DI						;
  1804'   C5                    	PUSH	BC					;
  1805'   4F                    	LD	C,A					;
  1806'   DB 6D                 	IN	A,(?FDPBD)				;
  1808'   E6 F0                 	AND	0F0H					;
  180A'   B1                    	OR	C					;
  180B'   C1                    	POP	BC					;
  180C'   D3 6D                 	OUT	(?FDPBD),A				;
  180E'   71                    	LD	(HL),C					;
  180F'   AF                    	XOR	A					;
  1810'   D3 6D                 	OUT	(?FDPBD),A				;
CBIOS - BASIC INPUT OUTPUT FOR CP/M	MACRO-80 3.4	01-Dec-80	PAGE	1-8


  1812'   FB                    	EI						;
  1813'   C9                    	RET						;
  1814'                         	DEFS	20-17					;
  							;
  	ELSE						;
  							;
  XCHL:	DI						;
  	LD	C,A					;
  	IN	A,(?FCPAD)				;
  	AND	0F0H					;
  	OR	C					;
  	OUT	(?FCPAD),A				;
  	LD	C,(HL)					;
  	XOR	A					;
  	OUT	(?FCPAD),A				;
  	EI						;
  	RET						;
  	DEFS	20-14					;
  							;
  XHLC:	DI						;
  	PUSH	BC					;
  	LD	C,A					;
  	IN	A,(?FCPAD)				;
  	AND	0F0H					;
  	OR	C					;
  	POP	BC					;
  	OUT	(?FCPAD),A				;
  	LD	(HL),C					;
  	XOR	A					;
  	OUT	(?FCPAD),A				;
  	EI						;
  	RET						;
  	DEFS	20-17					;
  							;
  	ENDIF						;
  							;
  	ENDIF						;
  							;
  	.LIST						;
  							;
  ;-------------------------------------------------------;
  ;
  	