	.Z80
;********************************************************
;*                                                      *
;*        VEB MIKROELEKTRONIK "W. PIECK" MUEHLHAUSEN    *
;*                                                      *
;*   CAOSDISK                         Vers. 1.1         *
;*                                                      *
;*   Bearbeiter: K.-D. KIRVES         Stand: 18/01/89   *
;*                                                      *
;********************************************************
;
; Dieses Programm dient der  Formatierung und Einrichtung
; von  Disketten fuer die CAOS-Betriebsart auf  dem  KC 85
;
	PUBLIC	FORTH,FORTHI
;
	ASEG
	ORG	103H
BDOS	EQU	5
MTIME	EQU	0F517H
WARM	EQU	0
SYS	EQU	0C700H
;
POS	MACRO	LINE,COLUMN
	DEFB	1BH
	DEFB	LINE+84H
	DEFB	COLUMN+87H
	ENDM
;
	LD	SP,STACK
	JP	START
;
CI:	PUSH	HL
	PUSH	DE
	PUSH	BC
	LD	C,1
	CALL	BDOS
	POP	BC
	POP	DE
	POP	HL
	CP	03H
	JP	Z,END
	RET
;
CO:	PUSH	HL
	PUSH	DE
	PUSH	BC
	PUSH	AF
	LD	E,A
	LD	C,2
	CALL	BDOS
	POP	AF
	POP	BC
	POP	DE
	POP	HL
	RET
;
PSTR:	PUSH	HL
	PUSH	DE
	PUSH	BC
	PUSH	AF
	LD	C,9
	CALL	BDOS
	POP	AF
	POP	BC
	POP	DE
	POP	HL
	RET
;
START:	LD	A,0CH
	CALL	CO
	LD	DE,ULC
	CALL	HSTARS
	LD	DE,URC
	CALL	VSTARS
	LD	DE,ULC
	CALL	VSTARS
	LD	DE,LLC
	CALL	HSTARS
	LD	DE,NAMMSG
	CALL	PSTR
	LD	C,0
	LD	E,24
	CALL	BIOS
	LD	DE,-52
	ADD	HL,DE
	LD	B,(HL)
	INC	HL
	LD	C,(HL)
	LD	HL,'85'
	OR	A
	SBC	HL,BC
	JP	Z,FORMAT
BADVER:	LD	DE,VERMSG
	CALL	PSTR
	CALL	CI
	JP	END
;
NAMMSG:	POS	2,4
	DEFM	'VEB Mikroelektronik "Wilhelm Pieck Muehlhausen  18/01/89'
	POS	4,4
	DEFM	'Einrichtung einer CAOS-Betriebsart Diskette      V 1.2  '
	DEFB	'$'
;
VERMSG:	POS	13,15
	DEFM	'Falsche Betriebssystemversion !'
	DEFB	'$'
;
HSTARS:	CALL	PSTR
	LD	B,62
	LD	A,'*'
HST1:	CALL	CO
	DJNZ	HST1
	RET
;
VSTARS:	CALL	PSTR
	LD	B,15
VST1:	LD	DE,VSTR
	CALL	PSTR
	DJNZ	VST1
	RET
VSTR:	DEFB	'*'
	DEFB	0AH
	DEFB	08H
	DEFB	'$'
;
ULC:	POS	0,1
	DEFB	'$'
URC:	POS	0,62
	DEFB	'$'
LLC:	POS	15,1
	DEFB	'$'
;
FORMAT:	LD	DE,LUNMSG
	CALL	PSTR
	LD	A,1
	LD	C,A
	LD	E,24
	CALL	BIOS
	LD	A,H
	OR	L
	JR	Z,FORMAT
	LD	DE,10
	ADD	HL,DE
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	HL,20
	ADD	HL,DE
	LD	A,0
	LD	(PUN),A
	INC	HL
	LD	A,(HL)
	AND	07H
	CP	03H
	JP	NZ,BADVER
	LD	(TYP),A
FORM2:	LD	DE,FRMMSG
	CALL	PSTR
FORMA:	LD	DE,CNFMSG
	CALL	PSTR
	CALL	CI
	AND	5FH
	CP	'N'
	JR	Z,END
	CP	'J'
	JR	NZ,FORMA
	LD	IX,FMTTAB
	LD	DE,0
	CALL	INIT
	JR	NZ,FORMB
	LD	DE,OKMSG
	JR	FORM7
;
FORMB:	LD	HL,RESBYT
	LD	A,(HL)
	AND	 3FH
	XOR	0C0H
	LD	DE,NRDMSG
	JR	Z,FORMC
	INC	HL
	BIT	1,(HL)
	LD	DE,ROMSG
	JR 	NZ,FORMC
	INC	HL
	INC	HL
	BIT	6,(HL)
	JR	NZ,FORMC
	BIT	5,(HL)
	LD	DE,NRDMSG
	JR	Z,FORMC
	LD	DE,BTRMSG
FORMC:	CALL	PSTR
END:	CALL	CI
	LD	C,25
	CALL	BDOS
	LD	C,A
	LD	E,24
	CALL	BIOS
	LD	DE,ENDMSG
	CALL	PSTR
	JP	0
;
FORM7:	CALL	PSTR
	LD	HL,1000H	;BOOTLOADER
	LD	(ADR),HL
	LD	HL,0
	LD	(WRTRK),HL
	LD	(WRSEK),HL
	LD	C,1
	LD	E,24
	CALL	BIOS		;SELDISK
FORMD:	LD	BC,(WRTRK)
	LD	E,1BH
	CALL	BIOS		;SELTRACK
FORME:	LD	BC,(ADR)
	LD	E,21H
	CALL	BIOS		;SETDMA
	LD	BC,(WRSEK)
	LD	E,1EH
	CALL	BIOS		;SELSEKTOR
	LD	E,27H
	CALL	BIOS		;WRITE SEKTOR
	OR	A
	CALL	NZ,FORMF
	LD	HL,(ADR)
	LD	DE,128
	ADD	HL,DE
	LD	(ADR),HL
	LD	A,(WRSEK)
	INC	A
	LD	(WRSEK),A
	CP	50H
	JR	NZ,FORME
	LD	A,0
	LD	(WRSEK),A
	LD	A,(WRTRK)
	INC	A
	LD	(WRTRK),A
	CP	2
	JR	C,FORMD
;BESPIELEN MIT 8 DATEIEN
	LD	B,9
	LD	IX,DATADR
DATWR3:	PUSH	BC		;ANZAHL ->
	LD	DE,PFCB
	LD	C,152		;VORBETEITUNG FCB
	CALL	BDOS
	LD	(PFCB),HL	;NAECHSTER NAME
	LD	HL,FCB+12
	LD	B,24
DATLP:	LD	M,0		;LOESCHEN REST DES FCB
	INC	HL
	DJNZ	DATLP
	LD	DE,FCB
	LD	C,22		;DATEI ERZEUGEN
	CALL	BDOS
	INC	A		;FEHLER ?
	JR	Z,WRERMM	;SCHREIBFEHLER
	LD	E,(IX)
	INC	IX
	LD	D,(IX)		;ANFANG
	INC	IX
	LD	L,(IX)
	LD 	H,(IX+1)	;ENDE
	AND	A	
	SBC	HL,DE		;LAENGE
	SLA	L
	RL	H		;*2
	LD	A,L
	AND	A
	JR	Z,DATWR1
	INC	H
DATWR1:	LD	B,H		;ANZAHL SEKTOREN		
DATWR2:	PUSH	BC		;SEKTOREN ->
	PUSH	DE		;DMA
	LD	C,26
	CALL	BDOS		;SET DMA
	LD	DE,FCB
	LD	C,21		;SEQ. SCHREIBEN
	CALL	BDOS
	AND	A
	JR	NZ,WRERMM	;->FEHLER
	POP	DE		;DMA<-	
	LD	HL,80H
	ADD	HL,DE
	EX	DE,HL
	POP	BC		;SEKTOREN<-
	DJNZ	DATWR2	
	LD	DE,FCB
	LD	C,16
	CALL	BDOS		;CLOSE
	INC	A
	JR	Z,WRERMM	;FF->FEHLER
	POP	BC		;DATEIEN<- 
	DJNZ	DATWR3
;BESPIELEN BEENDET
	LD	C,25
	CALL	BDOS		;ABFRAGE LW
	LD	C,A
	LD	E,18H
	CALL	BIOS		;SELDISK
	LD	DE,END1M
	CALL	PSTR
	JP	WARM
;
FORMF:	LD	DE,WRERMM
	CALL	PSTR
	JP	FORMB
;
WRERMM:	POS	17,42
	DEFM	'Schreibfehler !$'
;
BIOS:	LD	D,0
	LD	HL,(1)
	ADD	HL,DE
	JP	(HL)
;
BINASC:	LD	L,2FH
BINAS1:	INC	L
	SUB	10
	JR	NC,BINAS1
	ADD	A,3AH
	LD	H,A
	RET
;PARAMETERBLOCK
PFCB:	DEFW	DATNAM	;NAME
	DEFW	FCB
; DATEINAMEN
DATNAM:	DEFM	'B:DEP.COM '
	DEFM	'B:FSAVE.KCC '
	DEFM	'B:FLOAD.KCC '
	DEFM	'B:SERVICE.KCC '
	DEFM	'B:BASEX.KCC '
	DEFM	'B:DEVEX.KCC '
	DEFM	'B:TEXOREX.KCC '
	DEFM	'B:FORTHEX.KCC '
	DEFM	'B:INITIAL.SUB '
;ADRESSEN DER DATEIEN
DATADR:	DEFW	DEPLD
	DEFW	FSALD
	DEFW	FLOLD
	DEFW	SERLD
	DEFW	BASLD
	DEFW	DEVLD
	DEFW	TEXLD
	DEFW	FORLD
	DEFW	SUBLD
	DEFW	ENDLD
;
LUNMSG:	POS	6,5
	DEFM	'Formatierung und Bespielen erfolgt auf Laufwerk  B  '
	DEFB	08H
	DEFB	'$'
;
FRMMSG:	POS	7,5
	DEFM	'Bitte Diskette in Laufwerk B einlegen !             '
	DEFB	'$'
;
CHCMSG:	POS	7,57
	DEFB	'$'
;
TRKMSG:	POS	13,5
	DEFM	'Formatierte Spur: '
TRKNMB:	DEFB	'00'
	DEFB	'$'
;
ROMSG:	POS	13,5
	DEFM	'Diskette schreibgeschuetzt !'
	DEFB	'$'
;
NRDMSG:	POS	13,5
	DEFM	'Laufwerk nicht bereit !     '
	DEFB	'$'
;
OKMSG:	POS	13,5
	DEFM	'Formatierung beendet !      '
	DEFB	'$'
;
BTRMSG:	POS	13,5
	DEFM	'Defekte Spuren !            '
	DEFB	'$'
;
CNFMSG: POS	13,35
	DEFM	'   Richtig (J/N) ?  '
	DEFB	08H
	DEFB	'$'
;
END1M:	pos	17,12
	DEFM	'Bespielen beendet  !         '
	DEFB	'$'
;     	
ENDMSG:	DEFB	0CH
	POS	19,0
	DEFB	'$'
;
TYP:	DEFB	0
PUN:	DEFB	0
;
FDC	EQU	0F0H
FDCS	EQU	FDC
FDCD	EQU	FDC+1
FDCDR	EQU	FDC+2
FDCRI	EQU	FDC+4
FDCMT	EQU	FDC+6
FDCTC	EQU	FDC+8
PRDY	EQU	FDCRI
;
BPREC	EQU	4
BRDY	EQU	5
;
T1200	EQU	72
;
INIT:	PUSH	DE
	LD	A,D
	CALL	BINASC
	LD	(TRKNMB),HL
	LD	DE,TRKMSG
	CALL	PSTR
	POP	DE
	PUSH	DE
	CALL	FORM
	POP	DE
	RET	NZ
	LD	A,E
	OR	A
	JR	NZ,SIDE0
	LD	A,(IX+6)
	AND	07H
	CP	3
	JR	NZ,SIDE0
	LD	E,1
	JR	INIT
;
SIDE0:	LD	E,0
	INC	D
	LD	A,(IX+4)
	DEC	A
	CP	D
	JR	NC,INIT
	XOR 	A
	RET
;
; set ID table
;
FORM:	PUSH	DE
	LD	A,(IX+3)	; GAP
	LD	(FMTGAP),A
	LD	A,(IX+0)	; PSH
	LD	(FMTN),A
	LD	B,A
	LD	A,(IX+2)	; EOT
	LD	(FMTEOT),A
	PUSH	AF
	RLCA
	RLCA
	DEC	A
	LD	E,A
	LD	D,0
	LD	HL,IDTAB
	ADD	HL,DE
	POP	AF
	POP	DE
;
SETID:	LD	(HL),B		; set N
	DEC	HL
	LD	(HL),A		; set sector
	DEC	HL
	LD	(HL),E		; set head
	DEC	HL
	LD	(HL),D		; set track
	DEC	HL
	DEC	A
	JR	NZ,SETID
;
FDFORM:	LD	A,D		; track
	LD	(CYL),A
	LD	A,E
	RLCA
	RLCA
	OR	(IX+5)
	LD	(DR),A		; unit/side
	LD	(FMTDR),A
	CALL	FDSEEK
	LD	HL,RESBYT
	RET	NZ		; seek error
	LD	HL,IDTAB
	LD	BC,0
	PUSH	BC
	PUSH	HL
	DEFB	21H
	OUTI
	LD	(FDIO),HL
	LD	HL,FMTCMD
	LD	B,6
	DI
	CALL	FDK2		; command
	POP	HL
	POP	DE
	CALL	FDRW2		; write ID bytes
	RET	Z		; o.k.
	RET
;
; recalibrate drive
;
FDREC:	LD	BC,207H
	CALL	FDCMD
	CALL	FDS2		; status
	RET	Z
	LD	BC,207H		; repeat, if 'EC'
	CALL	FDCMD
	JR	FDS2
;
; seek track
;
FDSEEK:	LD	A,(CYL)
	OR	A
	JR	Z,FDREC
	LD	BC,30FH		; seek command
	CALL	FDCMD
FDS2:	IN	A,(FDCRI)
	BIT	6,A
	JR	NZ,FDS2		; seek not ready
;
;
;
FDSNS:	LD	BC,108H		; sense command
	CALL	FDCMD
	CALL	FDNXT
	LD	B,A
	LD	(RESBYT),A
	ADD	A,A
	RET	Z		; command error
	CALL	FDNXT
	LD	A,B
	AND	0F0H
	CP	0C0H
	JR	Z,FDS2		; RDY changed
	XOR	20H		; seek o.k.
	RET
;
; send command
;
FDCMD:	PUSH	BC
	CALL	READY
	POP	BC
	LD	HL,CMD
	LD	(HL),C
FDK2:	LD	C,FDCD
FDK4:	IN	A,(FDCS)
	AND	0C0H
	CP	80H
	JR	NZ,FDK4
	OUTI			; send parameter
	JR	NZ,FDK4
	RET
;
; get next result byte
;
FDNXT:	IN	A,(FDCS)
	AND	0C0H
	CP	0C0H		; RQM ?
	JR	NZ,FDNXT
	IN	A,(FDCD)
	RET
;
;
;
FDRW2:	LD	B,E
	LD	C,FDCDR		; request port
	CALL	FDCIO
	EI
;
;
;
FDCRES:	LD	B,7
	LD	HL,RESBYT
FDCR1:	CALL	FDNXT
	LD	(HL),A
	INC	HL
	DJNZ	FDCR1
	LD	HL,RESBYT
	LD	A,(HL)
	AND	0C0H
	RET
;
FDCIO:	IN	A,(FDCRI)
	ADD	A,A
	RET	P
	JR	C,FDCIO
FDIO:	INI
	JR	NZ,FDCIO
	DEC	D
	JR	NZ,FDCIO
	OUT	(FDCTC),A
	RET
;
READY:	LD	A,(IX+5)	; drive #
	AND	3
	LD	B,80H
	INC	A
RDY1:	RLC	B
	DEC	A
	JR	NZ,RDY1
	BIT	7,(IX+6)	; 8" ?
	JR	Z,RDY2
	SET	6,B
RDY2:	LD	A,(CYL)
	CP	(IX+7)		; precompensation ?
	JR	NC,RDY3
	SET	BPREC,B		; without prec.
RDY3:	LD	HL,MTIME-1	; last drive
	LD	A,(IX+5)	; drive #
	AND	3
	CP	(HL)
	LD	(HL),A
	INC	HL
	LD	C,(HL)
	LD	(HL),T1200
	LD	A,B
	OUT	(FDCMT),A	; motor on
	JR	NZ,RDY4		; new drive
	LD	A,C
	AND	A
	JR	NZ,RDY5		; motor already on
RDY4:	LD	A,T1200
	SRL	A
	SRL	A
	CP	(HL)
	JR	C,RDY4
RDY5:	LD	A,(HL)
	AND	A
	RET	Z		; ERROR: drive not ready
	IN	A,(PRDY)
	BIT	BRDY,A
	JR	Z,RDY5
	LD	(HL),T1200+T1200
	RET
;
; format table
; MFS 1.6, 5*1024*80*2
;
FMTTAB:	DEFB	003H		; PSH
	DEFB	007H		; PSM
	DEFB	005H		; EOT
	DEFB	074H		; GAP
	DEFB	050H		; NTR
	DEFB	000H		; PUN
	DEFB	043H		; TYP
	DEFB	0FFH		; PRE
	DEFB	0EFH		; SRT
	DEFB	014H		; HLT
	DEFB	0FFH		; CUR
;
FMTCMD:	DEFB	4DH		; format command
FMTDR:	DEFB	00H		; drive #, side
FMTN:	DEFB	03H		; sector length
FMTEOT:	DEFB	05H		; EOT
FMTGAP:	DEFB	20H		; GPL
	DEFB	0E5H		; filler byte
;
CMD:	DEFB	0
DR:	DEFB	0
CYL:	DEFB	0
HD:	DEFB	0
RC:	DEFB	0
NUM:	DEFB	0
	DEFB	0
	DEFB	0
	DEFB	0
;
RESBYT:	DEFB	0
	DEFB	0
	DEFB	0
	DEFB	0
	DEFB	0
	DEFB	0
	DEFB	0
;
IDTAB:	DEFS	256
;
	DEFS	100H
;
STACK:
;
ADR:	DEFW	0	;AUSGABEADRESSE
WRTRK:	DEFW	0	;SPUR
WRSEK:	DEFW	0	;SEKTOR
;
;**************************************************************
;*                                                            *
;*                      KC 85 - Systemlader                   *
;*                                                            *
;**************************************************************
;
	DEFS	1000H-$,0
	.PHASE	9000H
;
	DEFB	'SYXL'		; SIGNUM
;
RETRY	EQU	5		; NUMBER OF REPEAT'S
;
GETSYS:	XOR	A
	LD	(UNIT),A; BOOT-DEVICE
;
	LD	B,RETRY
SYSRTR:	PUSH	BC
	XOR	A
	LD	(TRK),A
	LD	A,2
	LD	(SECTC),A
	CALL	DSEEK
	JR	NZ,SYSERR
	LD	HL,SYS
	LD	BC,4096		; 4K/TRACK
	CALL	DRD		; 0/3...0/16
	JR	NZ,SYSERR
	LD	A,1
	LD	(HEAD),A
	LD	(SECTC),A
	LD	A,4
	LD	(UNIT),A
	CALL	DSEEK
	JR	NZ,SYSERR
	LD	HL,SYS+4096
	LD	BC,4096+1024
	CALL	DRD		; WHOLE TRACK 1
	JR	NZ,SYSERR
	XOR	A
	LD	(UNIT),A
	LD	(HEAD),A
	INC	A
	LD	(SECTC),A
	LD	(TRK),A
	CALL	DSEEK
	JR	NZ,SYSERR
	LD	HL,SYS+8192+1024
	LD	BC,2048+1024
	CALL	DRD		; WHOLE TRACK 2
	JR	NZ,SYSERR
	LD	A,(UNIT)	; DRIVE
	JP	SYS
;
;
;
SYSERR:	POP	BC
	DJNZ	SYSRTR		; RETRY
	XOR	A
	OUT	(DCMT),A		; MOT OFF
	LD	BC,'SD'
	HALT
	defb	0e7h
	defb	00bh
;
; ============================================
; FLOPPY DISK INTERFACE ROUTINES USING UPD 765
; ============================================
;
DC	EQU	0F0H
DCS	EQU	DC; MAINSTATUS
DCD	EQU	DC+1; DATA
DCDR	EQU	DC+2; "DMA"-DATA-REG
DCRI	EQU	DC+4; STATUS: DRQ/INT/RDY
DCMT	EQU	DC+6; MOT ON
DCTC	EQU	DC+8; DC Terminal-Count
PRDY	EQU	DCRI
BRDY	EQU	5
;
; **** SEEK TO TRACK ****
; ***********************
;
DSEEK:	LD	BC,30FH		; SEEK
	CALL	DCMD
;
;
; **** SENSE FDC-INT-STATUS *****
; *******************************
;
DSNS:	IN	A,(DCS)
	AND	1FH		; BUSY ?
	RET	Z		; NO SEEK RUNNING
DS4:	IN	A,(DCRI)
	BIT	6,A
	JR	NZ,DS4
	LD	BC,108H		; KOM=8
	CALL	DK2		; SNS INT-STATUS
	CALL	DNXT		; ST0
	LD	B,A
	ADD	A,A
	RET	Z		; CY=1: KOM-ERR
	CALL	DNXT		; TRACK
	LD	A,B
	AND	0F0H
	CP	0C0H
	JR	Z,DS4		; RDY CHANGED
	XOR	20H		; SEEK-END OK: Z=1
	RET
;
; ****** COMMAND TO  uPD 765 ************
; COMMAND IN C, NUMBER OF BYTES IN B
; ***************************************
;
DCMD:	LD	HL,UNIT		; KOM-PARAMETER-TAB
;
DK2:	IN	A,(DCS)
	AND	0C0H
	CP	80H
	JR	NZ,DK2
	LD	A,C
	OUT	(DCD),A	; send command
	LD	C,(HL)
	INC	HL
	DJNZ	DK2		; NEXT CMD-BYTE
	RET
; ******* NEXT RESULTBYTE FROM FDC ******
;
DNXT:	IN	A,(DCS)
	AND	0C0H
	CP	0C0H		; RQM ?
	JR	NZ,DNXT
	IN	A,(DCD)
	RET
; ****** FETCH RESULTBYTES FROM FDC *******
; CHECK FOR R/W ERRORS, IF OK ---> Z=1
; *****************************************
;
DCRES:	LD	B,7		; 7 RESULTS
	LD	HL,RSBYT
DCR1:	CALL	DNXT
	LD	(HL),A
	INC	HL
	DJNZ	DCR1
	LD	A,(RSBYT)	; STATUS 0
	AND	0C0H		; NORMAL TERMIN.:Z=1
	RET
;
; **** READ SELECTED SECTOR ****
;
DRD:	PUSH	BC
	PUSH	HL
     	LD	BC,946H		; BYTES/CMD
	CALL	DCMD
	POP	HL		; BUFFER-ADR
	POP	DE		; DATA LENGTH
	LD	B,E
	LD	C,DCDR		; REQ-PORT
	CALL	DCIO
	CALL	DCRES
	RET
;
DCIO:	IN	A,(DCRI)
	ADD	A,A		; /INT in S, /DRQ in CY
	RET	P
	JR	C,DCIO		; NO DRQ
	INI
	JR	NZ,DCIO
	DEC	D
	JR	NZ,DCIO
	OUT	(DCTC),A	; TERMINAL-COUNT
	RET
;
; ****** COMMAND TABLE FOR  UPD 765 ******
; ****************************************
;
UNIT:	DEFB	0		; HEAD/UNIT
TRK:	DEFB	0		; TRACK 0
HEAD:	DEFB	0		; HEAD 0
SECTC:	DEFB	2		; 1.SEC 3: CCP
	DEFB	3,5,25H,-1	; N/EOT/GPL/DTL
;
RSBYT:	DEFS	7		; RESULTBYTES: ST0/ST1/ST2/C/H/R/N
;
	.DEPHASE
;
	DEFS	4C00H-$
DEPLD	EQU	$
;MICRODOS-PROGRAMM ZUR CAOS-BETRIEBSART
; 14.12.1988
	.PHASE	100H
STBT	EQU	0FF80H	;STEUERBYTE
FCODE	EQU	STBT+1	;FEHLERCODE
NAME	EQU	FCODE+1	;NAME(.)TYP (12 BYTE)
BASDT	EQU	NAME+12
SECT	EQU	0FE80H	 ;SEKTORPUFFER	
FCB	EQU	5CH	;STANDARD- FCB
DMA	EQU	80H	;STANDARD-DMA
;BITBELEGUNG
ANF	EQU	0	;ANFORDERUNG
WRITE	EQU	1	;SCHREIBEN =1
OPEN	EQU	3	;OPEN
CLOSE	EQU	6	;CLOSE
FLBIT	EQU	7	;FEHLERMITTEILUNG
			;AUTO-RUN	
		;BIT 2,4,5 SPEZIELLE ANFORDERUNGEN
RUNSW	EQU	1DH	;RUN
BIOSN	EQU	0EE00H 
;
DEPTOP:	LD	HL,(6)
	DEC	HL
	DEC	HL
	LD	SP,HL	;STACK ANS ENDE DES TPA	
	LD	DE,TEXT1
	LD	C,9
	CALL	BDOS
	LD	E,1BH
	LD	C,2
	CALL	BDOS
	LD	E,5CH
	LD	C,2
	CALL	BDOS	;BYE
	LD	HL,NEWARM
	LD	(BIOSN+4H),HL
	LD	E,0FEH
	LD	C,45
	CALL	BDOS	;FEHLERCODE-RUECKGABE
	LD	C,14
	LD	E,01	;LW B:
	CALL	BDOS	;AUSWAHL
	LD	C,37
	LD	DE,2	;LW B:
	CALL	BDOS	;DISK-RESET
	LD	DE,DMA
	LD	C,26
	CALL	BDOS	;STANDARD- DMA
	LD	DE,LFDC	;FDC FUER INITIAL.UUU
	LD	C,15	;OPEN
	CALL	BDOS
	CP	0FFH	;VORHANDEN ?
	JR	Z,LINS1	;->NEIN
	LD	DE,LFDC
	LD	C,20	;SEQ. READ
	CALL	BDOS
	INC	A	;FEHLER ?
	JR	Z,LINS1	;->JA
	LD	B,128	;LAENGE
	LD	DE,DMA	;QUELLE
	LD	HL,SECT	;ZIEL
LINS3:	LD	A,(DE)
	INC	DE
	CP	0AH	;CUD ?
	JR	Z,LINS2	;->UEBERLESEN
	AND	A	;0 ?
	JR	Z,LINS2	;->UEBERLESEN 
	CP	3	;ENDE ?
	JR	NZ,LINS4	;->NEIN
	XOR	A	;ENDEKENNZEICHEN
LINS4:	LD	(HL),A	;UMSPEICHERN
	INC	HL
LINS2:	DJNZ	LINS3
	LD	(HL),0	;ENDEKENNZEICHEN
	LD	A,48H	;JOB GELADEN		
	JR	MAIN1
;
LINS1:	LD	A,0C8H	;KEIN JOB
MAIN1:	LD	(STBT),A	;MELDUNG AN START
; STEUERSCHLEIFE
MAIN:	LD	HL,(6)
	DEC	HL
	DEC	HL
	LD	SP,HL
MAINL:	LD	A,(STBT)
	BIT	ANF,A
	JR	Z,MAINL	;KEINE ANFORDERUNG
	LD	B,A
	BIT	OPEN,A	;OPEN ?
	JR	Z,MAIN0
	PUSH	BC
	LD	C,37	;RESET DISK
	LD	DE,2	;B:
	CALL	BDOS
	POP	BC
MAIN0:	LD	A,B
	AND	34H	;SPEZIELLE ANF. ?
	JP	NZ,SPEZ
	LD	A,B
	BIT	WRITE,A
	JP	NZ,WRANF
RDANF:	BIT	OPEN,A
	JR	Z,NOPEN
	CALL	UPOP
	LD	HL,FCB+9
	LD	A,M	;
	CP	' '	;KEIN TYP ?	
	JR	NZ,RDANF1
	LD	A,(POINT)
	AND	A	;PUNKT EINGEGEBEN ?
	JR	NZ,RDANF1
	LD	M,'K'	;DANN .KCC
	INC	HL
	LD	M,'C'
	INC	HL
	LD	M,'C'
RDANF1:	LD	C,15
	CALL	BDOS	;OPEN
	CP	0FFH	;FEHLER ?
	JR	NZ,N30
FEHLER:	LD	A,80H
	LD	(STBT),A
	LD	A,H	;FEHLERCODE
	LD	(FCODE),A
	JP	MAIN
;
FEHLY1:	LD	H,77H
	JR	FEHLER
;
NOPEN:	BIT	CLOSE,A
	JR	Z,N3
RDCLOS:	LD	C,16	;CLOSE
	LD	DE,FCB
	CALL	BDOS
	CP	0FFH
	JP	NZ,WR3
	JR	FEHLER
;
N30:	XOR	A
	LD	(FCB+32),A
N3:	LD	DE,FCB
	LD	C,20
	CALL	BDOS	;READ NEXT SECTOR
	CP	0FFH
	JR	Z,FEHLER
	CP	1
	LD	H,81H
	JR	Z,FEHLER
	LD	HL,DMA
	LD	DE,SECT
	LD	BC,80H
	LDIR
N4:	LD	A,0
	LD	(STBT),A
	JP	MAIN
;
WRANF:	BIT	OPEN,A
	JP	Z,WNOPEN
	CALL	UPOP
	JP	C,FEHLY1
	LD	HL,FCB+9	;TYP
	LD	A,'C'
	CP	M
	JR	NZ,WRANF2
	INC	HL
	LD	A,'O'
	CP	M
	JR	NZ,WRANF1
	INC	HL
	LD	A,'M'
	CP	M
	LD	HL,FCB+9
	JR	Z,WRANF3	;COM ->KCC
	JR	WRANF1
;
WRANF2:	LD	A,' '	;
	CP	M	;KEIN TYP ?
	JR	NZ,WRANF1
	LD	A,(POINT)
	AND	A
	JR	NZ,WRANF1
WRANF3:	LD	M,'K'
	INC	HL
	LD	M,'C'
	INC	HL
	LD	M,'C'	;DANN .KCC
WRANF1:	LD	DE,FCB
	LD	C,15
	CALL	BDOS	;VERSUCH EROEFFNEN
	CP	0FFH
	JR	Z,WR1	;NICHT VORH.
	LD	DE,FCB
	LD	C,19
	CALL	BDOS	;LOESCHEN DER DATEI
	CP	0FFH
	JP	Z,FEHLER
WR1:	LD	DE,FCB
	LD	C,22
	CALL	BDOS	;ANLEGEN DATEI
	CP	0FFH
	JP	Z,FEHLER
WRLOP:	LD	HL,SECT
WRLOP1:	LD	DE,DMA
	LD	BC,80H
	LDIR
	LD	DE,FCB
	LD	C,21
	CALL	BDOS	;SEQ.SCHREIBEN	
	CP	0FFH
	JP	Z,FEHLER
	CP	1
	JR	NZ,WR2
	LD	H,81H
	JP	FEHLER
;
WR2:	CP	2
	JR	NZ,WR3
	LD	H,82H
	JP	FEHLER
;
WR3:	XOR	A
	LD	(STBT),A
	JP	MAIN
;
WNOPEN:	BIT	CLOSE,A
	JR	Z,WRLOP
WRB3:	LD	DE,FCB
	LD	C,16
	CALL	BDOS	;CLOSE
	CP	0FFH
	JP	Z,FEHLER
	JR	WR3
;
TEXT1:	DEFM	' DEP aktiviert !          (14/12/88)'
	DEFW	0A0DH
	DEFM	'$'
;
SPEZ:	CP	34H
	JP	NZ,SERV
	BIT	WRITE,B
	JP	Z,BASRD
	BIT	OPEN,B
	JR	Z,BWR1
	CALL	BUPOP	;DATEI LESEN
	JP	C,FEHLY1
	LD	C,15	;VERSUCH EROEFFNEN
	CALL	BDOS
	CP	0FFH
	JP	Z,NEWB
	LD	DE,FCB
	LD	C,19
	CALL	BDOS	;ERA
	CP	0FFH
	JP	Z,FEHLER
NEWB:	LD	DE,FCB
	LD	C,22	;ANLEGEN
	CALL	BDOS
	CP	0FFH
	JP	Z,FEHLER
BWR1:	LD	A,(BASDT)
	LD	HL,(ZEIGER)
	LD	M,A
	LD	A,(STBT)
	BIT	CLOSE,A
	JR	Z,BWR2
	BIT	7,A
	JR	Z,BWRCL
	LD	M,RUNSW
	JR	BWRCL		;CLOSE
;
BWR2:	INC	HL
	LD	(ZEIGER),HL
	LD	A,L
	AND	A
	JP	NZ,WR3
	LD	HL,PUFFER
	LD	(ZEIGER),HL
	JP	WRLOP1
;
BWRCL:	INC	HL
	LD	A,1AH		;EOT
	LD	HL,PUFFER
	LD	DE,DMA
	LD 	BC,80H
	LDIR
	LD	DE,FCB
	LD	C,21
	CALL	BDOS	;SEQ.SCHREIBEN	
	CP	0FFH
	JP	Z,FEHLER
	CP	1
	JR	NZ,WRB2
	LD	H,81H
	JP	FEHLER
;
WRB2:	CP	2
	JP	NZ,WRB3
	LD	H,82H
	JP	FEHLER
;
BASRD:	BIT	CLOSE,B
	JP	NZ,WR3
	BIT	OPEN,B
	JR	Z,BARD1
	CALL	BUPOP
	LD	C,15	;EROEFFNEN
	LD	DE,FCB
	CALL	BDOS
	CP	0FFH
	JP	Z,FEHLER
	XOR	A
	LD	(FCB+32),A
BARD1:	LD	HL,(ZEIGER)
	LD	A,L
	CP	LOW(PUFFER)
	JR	NZ,BARD2
	LD	DE,FCB
	LD	C,20	;READ
	CALL	BDOS
	CP	0FFH
BASRD6:	JP	Z,FEHLER
	CP	1
	LD	H,81H
	JR	Z,BASRD6
	LD	HL,DMA
	LD	DE,PUFFER
	LD	BC,80H
	LDIR
BARD2:	LD	HL,(ZEIGER)
	LD	A,M
	LD	(BASDT),A
	INC	HL
	LD	A,L
	AND	A
	JR	NZ,BARD4
	LD	HL,PUFFER
BARD4:	LD	(ZEIGER),HL
	JP	WR3
;
SERV:	CP	4
	JP	Z,DIR
	CP	10H
	JP	Z,ERA
	CP	20H
	JP	Z,REN
	CP	14H
	JR	Z,STAT
	CP	24H
	JP	Z,SETRO
	CP	30H
	JP	Z,SETWR
	JP	MAIN
STAT:	LD	DE,DMA
	LD	C,26
	CALL	BDOS		;STANDARD DMA
	LD	E,1		;LW: B
	LD	C,14		;AUSWAHL LW
	CALL	BDOS
	LD	C,46
	LD	E,1
	CALL	BDOS		;FREIER PLATZ	
	CP	0FFH
	JP	Z,FEHLER
	LD	HL,(DMA)
	SRL	H
	RR	L		;/2
	SRL	H
	RR	L		;/4
	SRL	H
	RR	L		;/8 =KBYTE
	LD	A,2FH
	AND	A
	LD	DE,100
ST1:	INC	A
	SBC	HL,DE
	JR	NC,ST1	 
	ADD	HL,DE
	CP	30H
	LD	B,1
	JR	NZ,ST2
	LD	A,20H
	DEC	B
ST2:	LD	(NAME),A
	AND	A
	LD	DE,10
	LD	A,2FH
ST3:	INC	A
	SBC	HL,DE
	JR	NC,ST3
	ADD	HL,DE
	DEC	B
	JR	Z,ST4
	CP	30H
	JR	NZ,ST4
	LD	A,20H
ST4:	LD	(NAME+1),A
	LD	A,L
	ADD	A,30H
	LD	(NAME+2),A
	LD	HL,STATXT
	LD	DE,NAME+3
	LD	BC,17
	LDIR
	JP	N4
;
DIR:	BIT	3,B		;OPEN ?
	JR	Z,DIR1
	LD	HL,DIRPUF
	LD	(PUFMER),HL
	LD	HL,2
	LD	(TRKMER),HL
	LD	L,H
	LD	(SEKMER),HL
	LD	BC,(TRKMER)
	LD	E,1BH
	CALL	BIOSD		;SELTRACK
DIR2:	LD	BC,(PUFMER)	
	LD	E,21H		;SELDMA
	CALL	BIOSD
	LD	BC,(SEKMER)
	LD	E,1EH		;SELSEKTOR
	CALL	BIOSD
	LD	E,24H		;READ SEKTOR
	CALL	BIOSD
	LD	H,A
	AND	A
	JP	NZ,FEHLER
	LD	HL,(PUFMER)
	LD 	DE,80H
	ADD	HL,DE
	LD	(PUFMER),HL
	LD	A,(SEKMER)
	INC 	A
	LD	(SEKMER),A
	CP	32
	JR	NZ,DIR2
	LD	HL,DIRPUF
	LD	(PUFMER),HL
	LD	A,128
	LD	(SEKMER),A
;
DIR1:	LD	B,3
	LD	HL,NAME
DIR5:	LD	A,(SEKMER)
	AND	A
	JR	NZ,DIR3
	LD	A,4
	LD	(STBT),A		
	JP	MAIN
;
DIR3:	LD	A,(SEKMER)
	DEC	A
	LD	(SEKMER),A
	LD	IX,(PUFMER)
	LD	A,(IX)
	OR	(IX+12)		;><0 GELOESCHT ODER EXTENT
	JR	Z,DIR4
	LD	DE,32
	ADD	IX,DE
	LD	(PUFMER),IX
	JR	DIR7
;
DIR4:	INC	IX
	LD	C,11
DIR6:	LD	A,(IX)
	LD	M,A
	INC	IX
	INC	HL
	DEC	C
	JR	NZ,DIR6
	LD	M,' '
	INC	HL
	LD	DE,20
	ADD	IX,DE
	LD	(PUFMER),IX
	DJNZ	DIR7
DIR10:	LD	M,0DH
	INC	HL
	LD	M,0AH
	JP	N4
;
DIR7:	LD	A,(SEKMER)
	AND	A
	JR	NZ,DIR3
DIR9:	LD	C,12
DIR8:	LD	M,20H
	INC	HL
	DEC	C
	JR	NZ,DIR8
	DJNZ	DIR9
	JR	DIR10
;
ERA:	CALL	UPOP
	JP	C,FEHLY1
	LD	C,19
ERA1:	LD	DE,FCB
	CALL	BDOS
	CP	0FFH
	JP	Z,FEHLER	
	JP	N4
;
REN:	BIT	3,B		;OPEN
	JR	Z,REN1
	CALL	UPOP
	LD	HL,FCB
	LD	DE,DIRPUF
	LD	BC,16
	LDIR
	JP	N4
;
REN1:	CALL	UPOP
	LD	HL,FCB
	LD	DE,FCB+16
	LD	BC,16
	LDIR
	LD	HL,DIRPUF
	LD	DE,FCB
	LD	C,16
	LDIR
	LD	C,23
	JR	ERA1
;
;SETZEN SCHREIBSCHUTZ
SETRO:	CALL	UPOP
	LD	HL,FCB+9
	SET	7,M		;T1 GESETZT
SETRO1:	LD	C,30
	LD	DE,FCB
	JP	ERA1
;
;AUFHEBEN SCHREIBSCHUTZ		
SETWR:	CALL	UPOP
	LD	HL,FCB+9
	RES	7,M		;T1=0
	JR	SETRO1
;
NEWARM:	RET
;
STATXT:	DEFM	' kbyte free !  '
	DEFW	0A0DH 
BUPOP:	LD	HL,PUFFER
	LD	(ZEIGER),HL	;PUFFER EINRICHTEN
UPOP:	XOR	A
	LD	(POINT),A
	LD	HL,FCB		;
	LD	M,02	;LW B:
	INC	HL
	LD	B,11
	LD	DE,NAME 
	LD	A,(DE)
	BIT	7,A
	JR	NZ,BASNAM	;NAME AUS BASIC
	LD	B,8
NLOOP:	LD	A,(DE)
	INC	DE
	CP	'.'
	JR	Z,NP1
	CP	20H	
	JR	NC,N1
	LD	A,20H
N1:	LD	M,A
	INC	HL
	DJNZ	NLOOP
NLOOP2: LD	A,(DE)
	CP	'.'
	JR	NZ,NLOOP3
	LD	(POINT),A
	INC	DE
NLOOP3: LD	B,3
NLOOP4:	LD	A,(DE)
	INC	DE
	CP	20H
	JR	NC,N41
	LD	A,20H
N41:	LD	M,A
	INC	HL
	DJNZ	NLOOP4
NL3:	LD	B,22
NL2:	LD	M,0	;BYTE12=0
	INC	HL
	DJNZ	NL2
	LD	DE,FCB
	LD	HL,FCB+1
	LD	B,11
NL0X:	LD	A,(HL)
	INC	HL
	CP	' '
	JR	C,NLFEHL
	CP	7FH
	JR	NC,NLFEHL
	DJNZ	NL0X
	AND	A	
	RET
;
NLFEHL:	SCF
	RET
;
NP1:	LD	M,' '
	INC	HL
	DJNZ	NP1
	LD	(POINT),A
	JR	NLOOP2
;
BASNAM:	LD	HL,FCB+9
	LD	B,3
NL1:	LD	A,(DE)
	AND	7FH
	LD	M,A
	INC	DE
	INC	HL
	DJNZ	NL1
	LD	HL,FCB+1
	LD	BC,8
	EX	DE,HL
	LDIR
	LD	HL,FCB+12
	JR	NL3
;BIOSAUFRUF E=NR*3
BIOSD:	LD	D,0
	LD	HL,(1)
	ADD	HL,DE
	JP	(HL)
;
ZEIGER:	DEFW	DMA
PUFMER:	DEFS	2
TRKMER:	DEFS	2
SEKMER:	DEFS	2
POINT:	DEFS	1
;
LFDC:	DEFB	2	;FDC FUER JOB-DATEI
	DEFM	'INITIAL UUU'
	DEFS	24,0
DIRPUF	EQU	$
PUFFER	EQU	6080H
;	
	.DEPHASE
FSALD	EQU	$
	.PHASE	0
;FSAVE AAAA EEEE (SSSS) FUER KC-CAOS
;
PROL	EQU	7F7FH		;PROLOG CAOS
DEVPRO	EQU	0DDDDH		;PROLOG EDAS
CAOS	EQU	0F003H
ARGN	EQU	0B781H
ARG1	EQU	ARGN+1
ARG2	EQU	ARG1+2
;
	DEFM	'270688'
	DEFS	10,0
	DEFB	2		;ARGN
	DEFW	0		;ANFANG
	DEFW	ENDE-ANFANS	;ENDE
	DEFW	0E000H		;NO START
	DEFS	128-$,0
;
ANFANS:	DEFW	PROL
	DEFM	'FSAVE'
	DEFB	1
FLOD11:	LD	A,(ARGN)
	CP	2
	JR	C,ERROR
	CALL 	CAOS
	DEFB	23H
	DEFM	'Name :'
	DEFB	0
	CALL	CAOS
	DEFB	17H	;INLIN
	LD	HL,6
	ADD	HL,DE
FSAVE:	LD	E,12
	LD	BC,82F3H	;NAME
FL0:	LD	A,M
	OUT	(C),A
	INC	HL
	INC	B
	DEC	E
	JR	NZ,FL0
	LD	HL,ARGN
	LD	DE,0B0BH	;OPEN
	LD	BC,91F2H	;DATEN
FW0:	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,FW0
	LD	BC,80F3H
	OUT	(C),D
FL1:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	NZ,FL1
	BIT	7,A
	JR	Z,FW2
FLERR:	LD	BC,81F3H
	IN	A,(C)	;FEHLERCODE
	CALL	CAOS
	DEFB	1CH	;AHEX
ERROR:	CALL	CAOS	
	DEFB	19H
	RET
;
FW2:	LD	BC,81F2H
	BIT	3,D
	JR	Z,FW9
	LD	HL,(ARG1)
FW9:	PUSH	HL
	LD	DE,(ARG2)
	AND	A
	SBC	HL,DE
	POP	HL
	LD	BC,81F2H
	LD	DE,380H
	JR	NC,FCL
	JR	FW0
;
FCL:	LD	BC,80F3H
	LD	A,43H		;CLOSE
	OUT	(C),A
FCL1:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	Z,FCL1
	BIT	7,A
	JR	NZ,FLERR
	RET
;	
ENDE	EQU 	$
	.DEPHASE
FLOLD	EQU	$
	.Z80
;FLOAD OOOO FUER KC-CAOS
;
ARGN	EQU	0B781H
ARG1	EQU	ARGN+1
IRMON	EQU	0F018H
IRMOFF	EQU	IRMON+3
RCALL	EQU	0F00FH	
;
	.PHASE	0
	DEFM	'010688'
	DEFS	10,0
	DEFB	2
	DEFW	0
	DEFW	ENDEA-ANFAN	;ENDE
	DEFW	0E000H		;NO START
	DEFS	105,0
;
	.DEPHASE
	.PHASE	0
NAMEB:	DEFS	12,20H		;LEERZEICHEN
	CALL	IRMON
	LD	HL,NAMEB
	CALL	RCALL
	DEFW	FLOAD-IRMO1
IRMO1:	CALL	IRMOFF
	RET
;	
ANFAN:	DEFW	PROL
	DEFM	'FLOAD'
	DEFB	1
FLOAD1:	CALL 	CAOS
	DEFB	23H
	DEFM	'Name :'
	DEFB	0
	CALL	CAOS
	DEFB	17H	;INLIN
	EX	(SP),HL
	LD	(0B797H),HL	;MERKEN RET
	EX	(SP),HL
	LD	HL,6
	ADD	HL,DE
FLOAD:	LD	E,12
	LD	BC,82F3H
FL0A:	LD	A,M
	OUT	(C),A
	INC	HL
	INC	B
	DEC	E
	JR	NZ,FL0A
	LD	A,9	;OPEN
	LD	B,80H
	OUT	(C),A
FL1A:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	NZ,FL1A
	BIT	7,A
	JR	NZ,FLERRA
	LD	BC,90F2H	;AB BYTE 17
	IN	A,(C)	;ARGN
	CP	2
	JR	C,FLER2A
	CP	10
	JR	NC,FLER2A
	INC	B 
	IN	L,(C)	;ANFANG
	INC	B
	IN	H,(C)
	INC	B
	IN	E,(C)	;ENDE+1
	INC	B
	IN	D,(C)
	CP	3
	JR	C,FL23
	PUSH	HL	;ANF->
	INC	B
	IN	L,(C)
	INC	B
	IN	H,(C)	;START
	EX	(SP),HL	;->START/ ANF<- 
FL23:	PUSH	AF
	LD	A,(ARGN)
	AND	A
	JR	Z,FL2
	LD	BC,(ARG1)
	ADD	HL,BC	;ANFANG+OFFSET
	POP	AF
	JR	C,FL24
	EX	(SP),HL
	ADD	HL,BC	;START+OFFSET
	EX	(SP),HL
FL24:	EX	DE,HL	;HL=ENDE
	ADD	HL,BC
	EX	DE,HL
	PUSH	AF
FL2:	POP	AF
FL26:	LD	A,1	;READ
	LD	BC,80F3H
	OUT	(C),A	;B=0
FL4:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	NZ,FL4
	BIT	7,A
	JR	Z,FL25
FLERRA:	LD	BC,81F3H
	IN	A,(C)	;FEHELERCODE
	CALL	CAOS
	DEFB	1CH	;AHEX
FLER2A:	CALL	CAOS	
	DEFB	19H
	POP	HL
	LD	HL,(0B797H)
	JP	(HL)	;=RET
;	
FL25:	DEC	C	;C=F2H
FL21:	INI	
	INC	B
	INC	B
	PUSH	HL
	SBC	HL,DE
	POP	HL
	RET	NC
	LD	A,B
	AND	A
	JR	NZ,FL21
	JR	FL26
;
	DEFS	100H-$,0
ENDEA	EQU 	$
	.DEPHASE
;
SERLD	EQU	$
; SERVICE-PROGRAMM ZUR CAOS-BETRIEBSART 
; FLOAD,FSAVE,DIR,STAT,REN,ERA,SETRO    
; SETWR                                 
;
TOP	EQU	0BE00H
;
	.PHASE	0
	DEFM	'211188'
	DEFS	10,0
	DEFB	3
	DEFW	TOP
	DEFW	ENDEB		;ENDE
	DEFW	STARSV		;UMLADEROUTINE ->0D0H
	DEFS	105,0
;
	.DEPHASE
	.PHASE	TOP
UPIN:	CP	8
	RET	NC
	ADD	A,A
	LD	HL,UPTAB
	ADD	A,L
	LD	L,A
	LD	A,M
	INC 	HL
	LD	H,(HL)
	LD	L,A
	JP	(HL)
; TABELLE DER EINTRITTSPUNKTE
UPTAB:	DEFW	FLX	;FLOAD   0  D8
	DEFW	FSX	;FSAVE   1  DB
	DEFW	DIRX	;DIR     2  DE
	DEFW	STATX	;STAT    3  E1
	DEFW	RENX	;RENAME  4  E4
	DEFW	SETRX	;SETWR   5  E7 
	DEFW	SETWX	;SETRO   6  EA
	DEFW	EREX	;ERASE   7  ED
;
FLX:	LD	HL,0	;UP 0
	CALL	FLOADA
	JR	FLX1
;	
	DEFW	PROL
	DEFM	'FLOAD'
	DEFB	1
	CALL	NAMIN
FLX1:	EX	(SP),HL
	LD	(0B797H),HL
	EX	(SP),HL
	LD	A,9	;OPEN
	CALL	WAIT
	JR	NZ,FLERBX
	LD	BC,90F2H	;AB BYTE 17
	IN	A,(C)	;ARGN
	CP	2
	JR	C,FLER2B
	CP	10
	JR	NC,FLER2B
	INC	B 
	IN	L,(C)	;ANFANG
	INC	B
	IN	H,(C)
	INC	B
	IN	E,(C)	;ENDE+1
	INC	B
	IN	D,(C)
	CP	3
	JR	C,FL23A
	PUSH	HL	;ANF->	
	INC	B
	IN	L,(C)
	INC	B
	IN	H,(C)	;START
	EX	(SP),HL	;START->STACK
FL23A:	PUSH	AF
	LD	A,(ARGN)
	AND	A
	JR	Z,FL2A
	LD	BC,(ARG1)
	ADD	HL,BC	;ANFANG+OFFSET
	POP	AF
	JR	C,FL24A
	EX	(SP),HL
	ADD	HL,BC	;START+OFFSET
	EX	(SP),HL
FL24A:	EX	DE,HL	;HL=ENDE
	ADD	HL,BC
	EX	DE,HL
	PUSH	AF
FL2A:	POP	AF
FL26A:	LD	A,1	;READ
	CALL	WAIT
	JR	Z,FL25A
FLERBX:	POP 	HL
	LD	HL,(0B797H)
	PUSH	HL
FLERRB:	LD	BC,81F3H
	IN	A,(C)	;FEHLERCODE
	CALL	CAOS
	DEFB	1CH	;AHEX
FLER2B:	CALL	CAOS	
	DEFB	19H
	RET
;	
FL25A:	DEC	C	;C=F2H
FL21A:	INI	
	INC	B
	INC	B
	PUSH	HL
	SBC	HL,DE
	POP	HL
	RET	NC	;-> ENDE
	LD	A,B
	AND	A
	JR	NZ,FL21A
	JR	FL26A	;NAECHSTER SEKTOR
;
;FSAVE AAAA EEEE (SSSS) FUER KC-CAOS
;
FSX:	LD	HL,0	;UP1
	CALL	FLOADA
	JR	FSX1
;
ARG2	EQU	ARG1+2
;
	DEFW	PROL
	DEFM	'FSAVE'
	DEFB	1
	CALL 	NAMIN
FSX1:	LD	A,(ARGN)
	CP	2
	JR	C,FLER2B
	LD	HL,ARGN
	LD	DE,0B0BH	;OPEN
	LD	BC,91F2H	;DATEN
FW0A:	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,FW0A
	LD	A,D
	CALL	WAIT
	LD	A,0
	LD	(ARGN),A
	JR	Z,FW2A
	JP	FLERRB
;
FW2A:	LD	BC,81F2H
	BIT	3,D
	JR	Z,FW9A
	LD	HL,(ARG1)
FW9A:	PUSH	HL
	LD	DE,(ARG2)
	AND	A
	SBC	HL,DE
	POP	HL
	LD	BC,81F2H
	LD	DE,380H
	JR	NC,FCLA
	JR	FW0A
;
FCLA:	LD	A,43H		;CLOSE
	CALL	WAIT
	JP	NZ,FLERRB
	RET
;
;DIRECTORY-ANZEIGE
;
	DEFW	DEVPRO
	DEFM	'DIR'
	DEFB	1
	JR	DL00
;
	DEFW	PROL
	DEFM	'DIR'
	DEFB	1
DIRX:				;UP2	
DL00:	LD	A,0DH
DL3:	CALL	WAIT
	JP	NZ,FLERRB
	BIT	2,A
	RET	NZ
	LD	E,38
	CALL	OUTLOP
	LD	A,5
	JR	DL3
;
;STATUSANZEIGE DER DISKETTE
; 
	DEFW	PROL
	DEFM	'STAT'
	DEFB	1
STATX:	LD	A,15H		;UP3
	CALL	WAIT
	JP	NZ,FLERRB
	LD	E,20
OUTLOP:	LD	B,82H
SL2:	IN	A,(C)
	INC	B
	PUSH	DE
	PUSH	BC
	CALL	CAOS
	DEFB	0
	POP	BC
	POP	DE
	DEC	E
	JR	NZ,SL2
	RET		
;
; UMBENENNEN EINER DATEI
	DEFW	PROL
	DEFM	'REN'
	DEFB	1
RENX:	CALL	NAMIN	;UP4
	LD	A,29H
	CALL	WAIT
	CALL	NAMIN
	LD	A,21H
RL3:	CALL	WAIT
	JP	NZ,FLERRB
	RET	
;
; LOESCHEN EINER DATEI
	DEFW	PROL
	DEFM	'ERA'
	DEFB	1
EREX:	CALL	NAMIN	;UP7
	LD	A,11H
	JR	RL3
;
; SETZEN SCHREIBSCHUTZ
	DEFW	PROL
	DEFM	'SETRO'
	DEFB	1
SETRX:	CALL	NAMIN	;UP5
	LD	A,25H
	JR	RL3
;
;AUFHEBEN SCHREIBSCHUTZ
	DEFW	PROL
	DEFM	'SETWR'
	DEFB	1
SETWX:	CALL	NAMIN	;UP6
	LD	A,31H
	JR	RL3
;UNTERPROGRAMM NAMENSEINGABE UND UEBERGABE IN K RAM
NAMIN:	CALL 	CAOS
	DEFB	23H
	DEFM	'Name :'
	DEFB	0
	CALL	CAOS
	DEFB	17H	;INLIN
	LD	HL,6
	ADD	HL,DE
FLOADA:	LD	E,12
	LD	BC,82F3H
FL0B:	LD	A,M
	OUT	(C),A
	INC	HL
	INC	B
	DEC	E
	JR	NZ,FL0B
	LD	B,80H
	RET
;UNTERPROGRAMM AUSGABE STEUERBYTE UND WARTEN
WAIT:	LD	BC,80F3H
	OUT	(C),A
FL1B:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H	;UP-WAIT	
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	NZ,FL1B
	BIT	7,A
	RET
;
;SELBSTSTARTROUTINE ZUM UMLADEN AUF ->D0H
STARSV:	LD	HL,SERUM	
	LD	DE,0D8H
	LD	BC,SEREND-SERUM
	LDIR
	RET
;SERUM
SERUM:
JPFL:	LD	A,0
	DEFB	1
JPFS:	LD	A,1
	DEFB	1
JPDIR:	LD	A,2
	DEFB	1
JPSTAT:	LD	A,3
	DEFB	1
JPREN:	LD	A,4
	DEFB	1
JPRO:	LD	A,5
	DEFB	1
JPWR:	LD	A,6
	DEFB	1
JPERA:	LD	A,7
 	CALL	0F018H	;IRMON
	CALL	0BE00H	;UP-VERTEILER
	CALL	0F01BH
	RET	
;
SEREND:	DEFS	0BFFFH-$,0
ENDEB	EQU 	$
	.DEPHASE
BASLD	EQU	$
;BASIC-SCHNITTSTELLE FUER FLOPPY 
;
SIDE3	EQU	0F3H
BASDAT	EQU	8EH
SUTAB	EQU	0B7B0H	;SYSTEMUNTERPROGRAMMTABELLE
TABLN	EQU	90H
IOERR	EQU	0B7C9H
RBYTO	EQU	70H	;BYTEAUSGABE
RBYTI	EQU	6EH	;BYTEEINGABE
OPEN	EQU	3
CLOSE	EQU	6
RUNMD	EQU	7
;
	.PHASE	0
	DEFM	'270688'
	DEFS	10,0
	DEFB	3
	DEFW	200H
	DEFW	300H
	DEFW	STARTX
	DEFS	105,0
	.DEPHASE	
	.PHASE	200H
;
AUTORN:	DEFB	0	;=1 AUTO-RUN
;
SUTA1:	DEFW	0
;
OUT:	LD	BC,256*BASDAT+SIDE3
	OUT	(C),A		;DATENAUSGABE
	LD	A,D		;STEUERWORT
	AND	48H
	OR	37H
	BIT	OPEN,A
	CALL	NZ,UPNAM
	BIT	CLOSE,A
	JR	Z,OUT1
	LD	B,A
	LD	A,(AUTORN)
	AND	A
	LD	A,B
	JR	Z,OUT1
	SET	RUNMD,A
OUT1:	LD	B,STBT
	OUT	(C),A
OUT2:	IN	A,(C)
	BIT	0,A
	JR	NZ,OUT2
	BIT	7,A
	SET	0,(IX+8)	;TASTE
	RET	Z
;
BASERR:	INC	B
	IN	A,(C)
	CALL	CAOS
	DEFB	1CH
	LD	HL,(IOERR)
	PUSH	HL
	JP	IRMOFF
; 
IN:	LD	A,D
	AND	48H
	OR	35H
	LD	C,SIDE3
	BIT	OPEN,A
	CALL	NZ,UPNAM
	LD	B,STBT
	OUT	(C),A
IN1:	IN	A,(C)
	BIT	0,A
	JR	NZ,IN1	
	BIT	7,A
	JR	NZ,BASERR
	LD	B,BASDAT
	IN	A,(C)
	RET	
;
UPNAM:	LD	E,11
	LD	B,83H
OUTLP:	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,OUTLP	 
	RET
;
;
NSUTA	EQU	$
;
STARTX:	LD	HL,CHANGE
	LD	DE,150H
	LD	BC,21H
	LDIR
	LD	HL,(SUTAB)
	PUSH	HL		;(SP)=SUTAB
	LD	(SUTA1),HL
	LD	DE,NSUTA
	LD	(SUTAB),DE
	LD	BC,TABLN
	LD	HL,OUT
	EX	(SP),HL		;HL=SUTAB
				;/(SP)=OUT
	PUSH	HL		;SUTAB->(SP)
	LD	HL,IN
	EX	(SP),HL		;HL=SUTAB
				;/(sp)=IN
	JP	150H+START1-CHANGE
;
CHANGE:	CALL	IRMON
	LD	HL,(SUTA1)
	LD	DE,(SUTAB)
	LD	(SUTAB),HL
	LD	(SUTA1),DE
	CALL	IRMOFF
	RET
;
START1:	LDIR
	POP	HL
	LD	(NSUTA+RBYTI),HL
	POP	HL
	LD	(NSUTA+RBYTO),HL
	RET
;
	.DEPHASE
DEVLD	EQU	$
;*      PROGRAMM ZUR CAOS-BETRIEBSART ZUM 	*
;*       DEVELOPMENT-MODUL M027                 *
;
DEVPRL	EQU	0DDDDH
SIDE3	EQU	0F3H
SIDE2	EQU	0F2H
SECTOR	EQU	80H
TOPD	EQU	0BC00H
TABLN	EQU 	90H
;
	.PHASE	0 
	DEFM	'141288'
	DEFS	10,0
	DEFB	3
	DEFW	TOPD
	DEFW	ENDEC
	DEFW	INITDV
	DEFS	105,0
;
	.DEPHASE
	.PHASE TOPD
INITDV:	LD	HL,0
	LD	B,80H
INI2:	LD	A,M
	CP	7FH
	INC	HL
	JR	Z,INI1
	DJNZ	INI2
	JR	INI3
;
INI1:	LD	M,0
INI3:	LD	HL,(SUTAB)
	LD	(TABMER),HL
	LD	DE,NEWTAB
	LD	(SUTAB),DE
	LD	BC,TABLN
	LDIR
	LD	HL,MBOT
	LD	(NEWTAB+2),HL
	LD	HL,MBIN
	LD	(NEWTAB+10),HL
	LD	HL,ADTAB
	LD	DE,NEWTAB+16
	LD	C,8
	LDIR
	RET
;
;ADRESSTABELLE NEUER SYSTEMUNTERPROGRAMME
;
ADTAB:	DEFW	ISRO
	DEFW	CSRO
	DEFW	ISRI
	DEFW	CSRI
;
;UMSCHALTUNG KASSETTE
;
	DEFW	DEVPRO
	DEFM	'TAPE'
	DEFB	1
	JR	TAPE0
;
	DEFW	PROL
	DEFM	'TAPE'
	DEFB	1
TAPE0:	LD	HL,(TABMER)
TAPE1:	LD	(SUTAB),HL
	RET
;
;UMSCHALTUNG DISKETTE
;
	DEFW	DEVPRO
	DEFM	'DISK'
	DEFB	1
	JR	DISK0
;
	DEFW	PROL
	DEFM	'DISK'
	DEFB	1
DISK0:	LD	HL,NEWTAB
	JR	TAPE1
;
;SYSTEMUNTERPROGRAMME
; OPEN WRITE
ISRO:	LD	(IX+2),0	;SEKTORZAEHLER
	LD	L,(IX+5)	;PUFFER LOW
	LD	H,(IX+6)	;PUFFER HIGH
	LD	BC,SIDE3+(83H)*256
	LD	E,11
ISRO1:	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,ISRO1	;NAMEN EINTRAGEN
	LD	D,0BH		;OPEN WRITE
ISRO4:	INC	(IX+2)
	LD	H,(IX+6)
	LD	L,(IX+5)
	LD	BC,SIDE2+(SECTOR+1)*256
	LD	E,128
ISRO3:	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,ISRO3	;SEKTOR UMSPEICHERN
ISRO5:	LD	BC,STBT*256+SIDE3
	OUT	(C),D
ISRO2:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H		;WAIT
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	NZ,ISRO2
	AND	A		;CY=0
	BIT	7,A
	RET	Z
	INC	B
	IN	A,(C)
	CALL	CAOS
	DEFB	1CH		;A HEX
	CALL	CAOS
	DEFB	19H		;ERROR
	SCF			;CY=1
	RET
;
;WRITE BLOCK
;
MBOT:	LD	D,3
	JR	ISRO4
;
;CLOSE WRITE
CSRO:	CALL	MBOT
	RET	C
	LD	D,43H
	LD	(IX+5),0
	LD	(IX+6),0B7H	;PUFFER RUECKSTELLEN
	JR	ISRO5
;
; OPEN READ
ISRI:	LD	(IX+2),0	;SOLLBLOCK
	POP	DE
	POP	HL		;HL->NAME
	PUSH	HL
	PUSH	DE
	LD	BC,SIDE3+(83H)*256
	LD	DE,90BH		;OPEN+NAMENSLAENGE
ISRI1:	OUTI			;NAMENSUEBERGABE
	INC	B
	INC	B
	DEC	E
	JR	NZ,ISRI1
	PUSH	DE
	JR	MBIN2
;
MBIN:	PUSH	DE
	LD	D,1		;BLOCKREAD
MBIN2:	CALL	ISRO5		;LESEN BLOCK
	POP	DE
	RET	C
	PUSH	DE
	PUSH	HL		
	PUSH	AF
	LD	L,(IX+5)
	LD	H,(IX+6)	;PUFFERADRESSE
	LD	BC,SIDE2+SECTOR*256
	LD	E,128
ISRI2:	INI
	INC	B
	INC	B
	DEC	E
	JR	NZ,ISRI2
	INC	(IX+2)
	POP	AF
	POP	HL
	POP	DE
	RET
CSRI:	CALL	CAOS
	DEFB	2CH
	RET
;
TABMER:	DEFW	0
NEWTAB:	DEFS	0BDFFH-$,0
ENDEC	EQU	$
	.DEPHASE
TEXLD	EQU	$
;* TEXOR - PROGRAMM ZUR CAOS-BETRIEBSART *
;* LADEN,RETTEN,ANFUEGEN                 *
TOPT	EQU	0BC00H
;
	.PHASE	0
	DEFM	'130688'
	DEFS	10,0
	DEFB	2
	DEFW	TOPT
	DEFW	ENDET		;ENDE
	DEFW	0E000H		;NO START
	DEFS	105,0
;
	.DEPHASE
	.PHASE	TOPT
	DEFW	PROL
	DEFM	'LADEN'
	DEFB	1
	LD	HL,200H
	LD	(ARG1),HL
LADEN1:	CALL	NAMINA
	LD	A,9	;OPEN
	OUT	(C),A
FL1C:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	NZ,FL1C
	BIT	7,A
	JR	NZ,FLERRC
	LD	BC,90F2H	;AB BYTE 17
	IN	A,(C)	;ARGN
	CP	2
	JR	NZ,FLERRC
	INC	B 
	IN	L,(C)	;ANFANG
	INC	B
	IN	H,(C)
	INC	B
	IN	E,(C)	;ENDE+1
	INC	B
	IN	D,(C)
	AND	A
	EX	DE,HL
	SBC	HL,DE	;LAENGE
	LD	DE,(ARG1)
	ADD	HL,DE	;ENDE
	EX	DE,HL
	LD	HL,(ARG1)
FL26B:	LD	A,1	;READ
	LD	BC,80F3H
	OUT	(C),A	;B=0
FL4A:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	NZ,FL4A
	BIT	7,A
	JR	Z,FL25B
FLERRC:	LD	BC,81F3H
	IN	A,(C)	;FEHELERCODE
	CALL	CAOS
	DEFB	1CH	;AHEX
FLER2C:	CALL	CAOS	
	DEFB	19H
	RET
;	
FL25B:	DEC	C	;C=F2H
FL21B:	INI	
	INC	B
	INC	B
	LD	A,B
	AND	A
	JR	NZ,FL21B
	PUSH	HL
	SBC	HL,DE
	POP	HL
	JR	C,FL26B
	RET		;ENDE
;
; ANFUEGEN EINER DATEI
;
	DEFW	PROL
	DEFM	'ANFUEGEN'
	DEFB	1
	LD	HL,200H
ANLOP:	LD	A,M
	CP	0FFH
	JR	Z,ANL1
	INC	HL
	LD	A,80H
	CP	H
	JR	NZ,ANLOP
ERRR:	CALL	CAOS
	DEFB	19H		;ENDE OHNE TEXT
	RET
;
ANL1:	XOR	A
	LD	M,A
	LD	A,M
	AND	A
	JR	NZ,ERRR
	LD	(ARG1),HL
	JP	LADEN1
;
; RETTEN
;
	DEFW	PROL
	DEFM	'RETTEN'
	DEFB	1
	CALL 	NAMINA
	LD	HL,200H
RET1:	LD	A,M
	CP	0FFH
	JR	Z,RET2
	INC	HL
	LD	A,80H
	CP	H
	JR	C,ERRR
	JR	RET1
;
RET2:	INC	HL
	LD	M,A
	INC	HL
	LD	M,A
	INC	HL
	LD	M,1AH
	INC	HL
	LD	(ARG2),HL
	LD	HL,200H
	LD	(ARG1),HL
	LD	HL,ARGN
	LD	M,2
	LD	DE,0B0BH	;OPEN
	LD	BC,91F2H	;DATEN
FW0B:	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,FW0B
	LD	BC,80F3H
	OUT	(C),D
FW1:	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	NZ,FW1
	BIT	7,A
	JR	Z,FW2B
	JP	FLERRC
;
FW2B:	LD	BC,81F2H
	BIT	3,D
	JR	Z,FW9B
	LD	HL,(ARG1)
FW9B:	PUSH	HL
	LD	DE,(ARG2)
	AND	A
	SBC	HL,DE
	POP	HL
	LD	BC,81F2H
	LD	DE,380H
	JR	NC,FCLB
	JR	FW0B
;
FCLB:	LD	BC,80F3H
	LD	A,43H		;CLOSE
	OUT	(C),A
	PUSH	BC
	LD	A,1
	CALL	0F003H
	DEFB	14H
	POP	BC
	IN	A,(C)
	BIT	0,A
	JR	Z,FCLB
	BIT	7,A
	JP	NZ,FLERRC
	RET
;
;
;UNTERPROGRAMM NAMENSEINGABE UND UEBERGABE IN K RAM
NAMINA:	CALL 	CAOS
	DEFB	23H
	DEFM	'Name :'
	DEFB	0
	CALL	CAOS
	DEFB	17H	;INLIN
	LD	HL,6
	ADD	HL,DE
FLOADB:	LD	E,12
	LD	BC,82F3H
FL0C:	LD	A,M
	OUT	(C),A
	INC	HL
	INC	B
	DEC	E
	JR	NZ,FL0C
	LD	B,80H
	RET
;
	DEFS	0BDFFH-$,0
ENDET	EQU 	$
	.DEPHASE
FORLD	EQU	$
;
	.PHASE	0 
	DEFM	'300888'
	DEFS	10,0
	DEFB	3
	DEFW	200H
	DEFW	ENDFO
	DEFW	06F0H
	DEFS	105,0
;
	.DEPHASE
FORTHI:
	.PHASE	200H
FORTH	EQU	$
;FORTHERWEITERUNG IN FORTH GESCHRIEBEN 
; --> HIER EINFUEGEN
	DEFS	580H,0
ENDFO	EQU	$
	.DEPHASE
;INITIAL.SUB - STARTDATEI
SUBLD	EQU	$
	DEFM	'B:'
	DEFW	0A0DH
	DEFM	'DEP'
	DEFW	0A0DH
	DEFW	1A1AH
	DEFS	117,1AH
ENDLD	EQU	$	
	END
