;================================================================
;CP/M 2.2 f}r vortex-Speichererweiterung: Voreinstellungen
;Datei: OSC4INST.ASM - Version 29-Jan-89

;mit ASM.COM oder MAC.COM assemblieren und entstehendes
;  OSC4INST.HEX mit Debugger dem BANKCPM.COM }berlagern

;BANKCPM.COM kann sowohl aus dem 44K CP/M als auch aus dem 62KCP/M
;  gestartet werden.
;durch Umbenennung in $OSC.SYS kann BANKCPM.COM auch das originale
;CP/M-Bios von vortex ersetzen.

FALSE	equ	0
TRUE	equ	0FFh

	org	0103h

;Flag, ob BANKCPM bereits installiert ist
	db	TRUE			;0FFh -> BankCpm ist installiert

;******	Aufbau der erweiterten Disk-Parameter-Bl|cke (XDPB)
;Bytes	0..14	-> wie Standard-CP/M
;	15	-> physikalische Sektornummer des ersten Sektors einer Spur
;	16	-> Anzahl physikalischer Sektoren pro Spur und Seite
;	17	-> Disk-Controller-GAP beim Schreiben und Lesen
;	18	-> Disk-Controller-GAP beim Formatieren
;	19	-> F}llbyte beim Formatieren
;	20	-> 2^(Wert+7) -> Bytes pro Sektor (2->512, 3->1024)
;	21	-> Anzahl Records pro Sektor = 2^XDPB(20)
;	22	-> ... internes Flag. Startwert = wie XDPB(23)
;	23	-> Anzahl Spuren pro Seite Minus 1
;	24	-> Bit 0 -> 1 f}r Doppelseitige Formate
;		   Bit 1 -> 1 f}r 40-spurige Formate auf 80-spurigen Drives
;		   Bit 2 -> 1 f}r doppelseitiges Laufwerk (bei bel. Format)
;		   Bit 3 -> 1 f}r 80-spuriges Laufwerk (bei beliebigem Format)
;		   Bit 4 -> ... internes Flag. Startwert=0
;		   Bit 5 -> 1 f}r Ersatz von Drive A/B durch 3. Drive
;		   Bit 6 -> ... internes Flag. Startwert=0
;		   Bit 7 -> ... frei

	dw	0024h			;DPB+XDPB f}r Laufwerk A: Vortex-Format
	db	5,1Fh,3
	dw	00B0h,007Fh
	db	80h,0
	dw	0020h,0002h
	db	1,9,2Ah,52h,0E5h,2,4	;Erweiterungen in diesem Bios
	db	4Fh,4Fh,0Dh

	dw	0024h			;DPB+XDPB f}r Laufwerk B: Vortex-Format
	db	5,1Fh,3
	dw	00B0h,007Fh
	db	80h,0
	dw	0020h,0002h
	db	1,9,2Ah,52h,0E5h,2,4	;Erweiterungen in diesem Bios
	db	4Fh,4Fh,0Dh

;******	Alternative f}r Drive A/B: Amstrad CP/M 2.2-Format auf 3. Drive
;	dw	0024h			;Amstrad CP/M 2.2-Format
;	db	3,7,0
;	dw	00AAh,003Fh
;	db	0C0h,0
;	dw	0010h,0002h
;	db	41h,9,2Ah,52h,0E5h,2,4
;	db	27h,27h,20h

;******	Statuszeile:
; manche Textverarbeitungen verlassen sich darauf, da~ beim einf}gen/
; l|schen von Zeilen die Zeile 25 vom Bildschirm verschwindet. F}r
; diese F{lle kann am unteren Bildschirmrand eine Statuszeile eingeblendet
; werden, in der die aktuelle Uhrzeit mitl{uft. Nachtr{glich kann die
; Statuszeile mit den Steuerzeichen ESC E bzw. ^D 2 ein/ausgeschaltet werden.
; Die Uhrzeit wird auch vom CP/M 2.2-kompatiblen BDOS "Z80DOS" eingesetzt
; um das Erstellungdatum von Dateien festzuhalten.

;******	RamDisk-formatieren
; die RamDisk wird beim booten nur formatiert, falls ein spezieller
; Markierungs-Directoryeintrag noch nicht vorhanden ist. Zur Sicherheit
; kann das formatieren innerhalb einer gewissen Zeit (Einheit: 1/300 sec)
; auf jeden Fall durch einen Tastendruck verhindert werden.

;******	Funktionstastentabelle
; ein Wert ungleich 0 gibt die Lage einer Tabelle der Funktionstasten an,
; die beim Booten belegt werden sollen. Dabei kann ein Meldetext ausgegeben
; werden. Die Lage der deutschen Zeichen wird gesondert geregelt.

;Aktionen beim Booten des BANKCPM
	db	0,0,0,0,26,26	;Border/Border,Paper/Paper,Pen/Pen
	dw	600		;verzoegerung beim RamDisk-formatieren
	db	FALSE		;beim Booten Uhrzeit abfragen
	db	FALSE		;Statuszeile eingeschaltet
	db	TRUE		;deutsche Umlaute
	db	TRUE		;deutsche Tastatur
	dw	tasten		;evtl. Adr. von Funktionstastentabelle

;******	Laufwerksparamter
; Stepratenbyte: Bits 0..3 = Steprate der internen Drives in msec
;		 Bits 4..7 = Steprate des externen Drives in msec
; Ger{teadresse: Die internen Laufwerke haben die Controller-Adressen
;		 0 und 1, wobei 0 auf A liegt und 1 auf B. Durch
;		 setzen eines Bits im XDPB kann ein internes Laufwerk
;		 auch durch ein externes 3. Laufwerk ersetzt werden,
;		 dessen Controller-Ger{teadresse gesondert agegeben wird.
;		 fehlt das interne Laufwerk 0 oder 1, kann das externe
;		 auch auf diesen Nummern liegen.
; Laufwerkstyp:  Bit 2 = 1 -> Laufwerk hat 2 Seiten
;                Bit 3 = 1 -> Laufwerk hat 80 Spuren
;		 Diese Bits werden bei der Wahl der auf den Buchstaben
;		 A/B einzusetzenden Laufwerken mit XBios-Routine Seldrive
;		 (BE8Ch bzw. F43Fh) in die XDpb }bertragen. Beim 
;		 anschlie~enden einpatchen eines eigenen Formates kann der
;		 Anwender anhand dieser Bits feststellen, ob Doublesteps
;		 notwendig sind, bzw. ob das Format ueberhaupt auf dem
;		 angewaehlten Laufwerk moeglich ist. Das Bit 5 von Xdpb(24)
;		 sollte ausschlie~lich ueber den XBios-Aufruf F43F ge{ndert
;		 werden!

;******	Uhrgeschwindigkeit
; Bei Rechenaufgaben, die das Bios wenig besch{ftigen l{uft die Uhr bei
; einem Wert von 50 genau. W{hrend Diskettenzugriffen bleibt die Uhr
; jedoch stehen, so da~ zum Ausgleich w{hrend der }brigen Zeiten eine
; h|here Geschwindigkeit eingestellt werden kann.

;******	CCP-Autokommando
; der CP/M 2.2 Kommandointerpreter kann so eingestellt werden, da~ nach
; einem Warmstart ein Befehl gleich automatisch ausgef}hrt wird.
; Durch ein Flag wird das Auto-Kommando nur in den CCP eingetragen, wenn
; beim Booten die RamDisk formatiert wurde. Andernfalls kann gew{hlt werden,
; ob das AutoKommando bei jedem Warmstart (z.B. f}r einen CCP-Ersatz)
; oder nur beim ersten Warmstart (zur Initialisierung) ausgef}hrt wird.

;Voreinstellungen des Bios
	db	TRUE		;Systemvektor aktiv
	db	TRUE		;Bios-Meldungen unterdr}cken
	db	8		;Wiederholungszahl bei R/W-Fehler
	db	1Eh		;Kopfberuhigungszeit in msec
	db	44h		;Steprate Drive A und B
	db	2		;Ger{teadresse externes Drive(wahlweise 0..3)
	db	0Ch		;Laufwerkstyp interne Laufwerke (0 und 1)
	db	00h		;Laufwerkstyp externes Laufwerk
	dw	50		;Diskettenmotor-Anlaufverz|gerung in msec
	dw	150		;Diskettenmotor-Abschaltverz|gerung in msec
	dw	4500		;Wartezeit zum Printer-Timeout in 1/300 sec
	db	8		;Cursor-Blinkdauer in 1/25 sec, 0->Blinkt nicht
	db	50		;Geschwindigkeit der Uhr
	db	FALSE		;TRUE->kein Spooler m|glich(=32KB mehr RamDisk)
	db	FALSE		;TRUE->Spooler beim Booten sofort einschalten
	db	FALSE		;FALSE->CCP Auto-Kommando nur beim ersten WBoot
	db	FALSE		;FALSE->Auto-COM nur nach RamDisk-formatierung
	db	03ch,060h,03ch,066h,066h,03ch,006h,03ch	;Zeichenmatrizen
	db	0c6h,038h,06ch,0c6h,0feh,0c6h,0c6h,000h	;deutsche Zeichen
	db	0c6h,038h,06ch,0c6h,0c6h,06ch,038h,000h	;'@[\]^{|}~'
	db	0c6h,000h,0c6h,0c6h,0c6h,0c6h,07ch,000h
	db	010h,038h,06ch,0c6h,000h,000h,000h,000h
	db	06ch,000h,078h,00ch,07ch,0cch,076h,000h
	db	06ch,000h,03ch,066h,066h,066h,03ch,000h
	db	06ch,000h,000h,0c6h,0c6h,0c6h,07eh,000h
	db	01ch,036h,066h,06ch,066h,066h,0cch,000h

	IF $-019Eh
+++++	aktuelle Adresse unlgeich 019Eh				+++++
+++++	Tippfehler in der Datei 				+++++
+++++	irgendwo ging ein Byte verloren oder es ist eins zuviel	+++++
	ENDIF

;****** Text des CCP-Autokommandos
; erstes Byte: L{nge des Autokommandos
; weitere Bytes: Text des Autokommandos

;Patch-Bereich des CP/M 2.2 - CCPs
	ORG 2207h
	db xauto-auto
auto:	;Zur Zeit kein Kommando. Sinnvoll w{re z.B.: db 'A:SUB A:PROFILE'
xauto:

;******	Konstanten zum Einsatz in den Funktionstastentabellen
FUNC00	equ	128
FUNC01	equ	129
FUNC02	equ	130
FUNC03	equ	131
FUNC04	equ	132
FUNC05	equ	133
FUNC06	equ	134
FUNC07	equ	135
FUNC08	equ	136
FUNC09	equ	137
FUNC10	equ	138
FUNC11	equ	139
FUNC12	equ	140
FUNC13	equ	141
FUNC14	equ	142
FUNC15	equ	143
FUNC16	equ	144
FUNC17	equ	145
FUNC18	equ	146
FUNC19	equ	147
FUNC20	equ	148
FUNC21	equ	149
FUNC22	equ	150
FUNC23	equ	151
FUNC24	equ	152
FUNC25	equ	153
FUNC26	equ	154
FUNC27	equ	155
FUNC28	equ	156
FUNC29	equ	157
FUNC30	equ	158
FUNC31	equ	159

NUL	equ	0
SOH	equ	1
STX	equ	2
ETX	equ	3
EOT	equ	4
ENQ	equ	5
ACK	equ	6
BEL	equ	7
BS	equ	8
HT	equ	9
LF	equ	10
VT	equ	11
FF	equ	12
CR	equ	13
SO	equ	14
SI	equ	15
DLE	equ	16
DC1	equ	17
DC2	equ	18
DC3	equ	19
DC4	equ	20
NAK	equ	21
SYN	equ	22
ETB	equ	23
CAN	equ	24
EM	equ	25

ESC	equ	27
FS	equ	28
GS	equ	29
RS	equ	30
US	equ	31

DELETE	equ	127

CTRL$A	equ	1
CTRL$B	equ	2
CTRL$C	equ	3
CTRL$D	equ	4
CTRL$E	equ	5
CTRL$F	equ	6
CTRL$G	equ	7
CTRL$H	equ	8
CTRL$I	equ	9
CTRL$J	equ	10
CTRL$K	equ	11
CTRL$L	equ	12
CTRL$M	equ	13
CTRL$N	equ	14
CTRL$O	equ	15
CTRL$P	equ	16
CTRL$Q	equ	17
CTRL$R	equ	18
CTRL$S	equ	19
CTRL$T	equ	20
CTRL$U	equ	21
CTRL$V	equ	22
CTRL$W	equ	23
CTRL$X	equ	24
CTRL$Y	equ	25
CTRL$Z	equ	26

	ORG 3800h
tasten:

;******	Lage der Funktionstasten:
;(die deutsche Tastenbelegung wird getrennt geregelt)
; 1. Spalte: Tastennummer
; 2. Spalte: geliefertes Zeichen beim einfachen Druck der Taste
; 3. Spalte: geliefertes Zeichen beim dr}cken zusammen mit SHIFT
; 4. Spalte: geliefertes Zeichen beim dr}cken zusammen mit CTRL
;Zeichen mit Nummern von 128 bis 159 k|nnen im n{chsten Tabellenabschnitt
;zu ganzen Zeichenketten umgesetzt werden (Belegung der Funktionstasten)
;Das Zeichen 253 schaltet CAPS LOCK um, das Zeichen 254 SHIFT LOCK
;252=Firmware-ESC-Zeichen, 255=unbelegte Taste
;Bei Bedarf kann die Tabelle verl{ngert oder verk}rzt werden

;Funktionstastentabelle, abgeschlossen durch Byte 255
	db	66,ESC,CTRL$U,CTRL$J	;ESC
	db	68,HT,FUNC00,FUNC01	;TAB
	db	70,253,FUNC02,FUNC03	;CAPS LOCK
	db	16,CTRL$G,CTRL$T,FUNC04	;CLR
	db	79,DELETE,CTRL$Y,FUNC05	;DEL
	db	18,CR,CTRL$N,CTRL$V	;gro~e ENTER-Taste
	db	47,' ',CTRL$P,CTRL$L	;Leertaste
	db	00,CTRL$E,CTRL$R,FUNC06	;Pfeil oben
	db	08,CTRL$S,CTRL$A,FUNC07	;Pfeil links
	db	09,FUNC08,CTRL$B,FUNC09	;COPY
	db	01,CTRL$D,CTRL$F,FUNC10	;Pfeil rechts
	db	02,CTRL$X,CTRL$C,FUNC11	;Pfeil unten
	db	10,'7',FUNC12,FUNC13	;Zehnerblock - 7
	db	11,'8',FUNC14,FUNC15	;Zehnerblock - 8
	db	03,'9',FUNC16,FUNC17	;Zehnerblock - 9
	db	20,'4',FUNC18,FUNC19	;Zehnerblock - 4
	db	12,'5',FUNC20,FUNC21	;Zehnerblock - 5
	db	04,'6',FUNC22,FUNC23	;Zehnerblock - 6
	db	13,'1',FUNC24,CTRL$Z	;Zehnerblock - 1
	db	14,'2',FUNC25,FUNC26	;Zehnerblock - 2
	db	05,'3',FUNC27,CTRL$W	;Zehnerblock - 3
	db	15,'0',FUNC28,FUNC29	;Zehnerblock - 0
	db	07,'.',FUNC30,FUNC31	;Zehnerblock - .
	db	06,CR,CTRL$Q,CTRL$K	;Zehnerblock - ENTER/RETURN

	db	255		;Markierung f}r Tabellenende. Nicht entfernen

;******	Belegung der Funktionstasten
;Zeichenketten, zu denen von der ersten Tabelle gelieferte Zeichen mit
;Nummern zwischen 128 und 159 umgewandelt werden(Belegung der Funktionstasten)
; 1.Spalte: Nummer des Funktionzeichens
; 2.Spalte: Anzahl der Zeichen f}r diese Funktionstaste
; ab 3.Spalte: Zeichen auf der Funktionstaste
;diese Tabelle darf maximal 184 Bytes lang sein, sonst gehen die zuletzt
;definierten Funktionstasten verloren
;Bei Bedarf L{nge nicht ben|tigter Belegungen zu 0 setzen

;Zeichenketten auf den Funktionstasten
func:	db	FUNC00,2,CTRL$O,'I'
	db	FUNC01,2,CTRL$O,'N'
	db	FUNC02,2,CTRL$O,'X'
	db	FUNC03,2,CTRL$P,RS
	db	FUNC04,2,CTRL$Q,'Y'
	db	FUNC05,2,CTRL$Q,DELETE
	db	FUNC06,2,CTRL$Q,'R'
	db	FUNC07,2,CTRL$Q,'S'
	db	FUNC08,3,CTRL$Q,'S',CTRL$X
	db	FUNC09,2,CTRL$K,'S'
	db	FUNC10,2,CTRL$Q,'D'
	db	FUNC11,2,CTRL$Q,'C'
	db	FUNC12,2,CTRL$K,'B'
	db	FUNC13,2,CTRL$K,'V'
	db	FUNC14,2,CTRL$K,'K'
	db	FUNC15,2,CTRL$K,'C'
	db	FUNC16,2,CTRL$K,'H'
	db	FUNC17,2,CTRL$K,'Y'
	db	FUNC18,2,CTRL$Q,'V'
	db	FUNC19,2,CTRL$K,'D'
	db	FUNC20,2,CTRL$Q,'A'
	db	FUNC21,2,CTRL$K,'W'
	db	FUNC22,2,CTRL$Q,'F'
	db	FUNC23,2,CTRL$K,'R'
	db	FUNC24,2,CTRL$O,'J'
	db	FUNC25,2,CTRL$O,'G'
	db	FUNC26,2,CTRL$O,'H'
	db	FUNC27,2,CTRL$O,'C'
	db	FUNC28,2,CTRL$O,'L'
	db	FUNC29,3,CTRL$O,'L',ESC
	db	FUNC30,2,CTRL$O,'R'
	db	FUNC31,2,CTRL$O,'D'

funcx:	db	255		;Markierung f}r Tabellenende. Nicht entfernen

	IF (184+func-funcx) and 8000h
+++++	Es wurden zu viele Funktionstastenbelegungen verwendet
	ENDIF

;******	Bezeichnung dieser Tastenbelegung
;Bildschirmmodus und Farben werden getrennt geregelt
;der Text darf bei Bedarf verl{ngert oder verk}rzt werden.
;Das Zeichen 0 darf im Text nicht vorkommen

;Meldetext
	db	'WordStar - Tastenbelegung aktiv',13,10

	db	0		;Markierung f}r Tabellenende. Nicht entfernen

;******	Inhalt des Tastaturpuffers
;hier angegebene Zeichen werden so behandelt, als ob sie auf der
;Tastatur eingegeben worden w{ren. So k|nnen Initialisierungskommandos
;gleich beim Booten ausgef}hrt werden.
;Byte 0: TRUE -> nur ausf}hren, wenn RamDisk formatiert wurde
;Byte 1: TRUE -> angegebener Text hat Vorrang vor Tasteneingabe
;Byte 2: L{nge der Eingabe (max. 127)
;Byte 3: Eingabezeichen

;auszuf}hrende Kommandos, getrennt durch Wert 13
	db TRUE,FALSE,keybufx-keybuf
keybuf:	db 'A:PIP',13,'C:=A:PIP.COM[R]',13,'C:=A:X.COM[R]',13
	db 'C:=A:WS.COM[R]',13,'C:=A:WS*.OVR[R]',13,13
	db 'X *.COM SR',13,'X *.COM SS',13
keybufx:

;================================================================
	END
