Source file: /~heha/hs/kcemu/kcswberg.zip/DISK/DISKU.ASM

DISKUASM
 
;*** Tape-Unit ***
 
ESC1	LD A,(IX+7)
	XOR 2
	LD (IX+7),A
	RET
 
IMBII	;intern mit Standardpuffer,
	;Erwarteter Block und Unter-
	;dr}ckung OK-Block
	CALL SIXD3
	LD (IX+3),1
	SET 5,(IX+7)
	RET
ISRI
	LD A,9
	LD (IX+1),1
	JR INTERF
 
PHALT	LD A,3
	OUT 8CH,A
	OUT 8DH,A
	RES 1,(IX+8)
	RET
 
CMBI	;Abschlu~ MB-Eingabe
	LD A,41H
	CALL INTERF
	JR CRO0
BLION	;Blinken on
	IN	A,89H
	SET	7,A
	OUT	89H
	DI
	LD	A,47H
	OUT	8EH
	LD	A,0CH
	OUT	8EH
	EI
	RET
 
CSRO	;Abschlu~ MB-Ausgabe mit
	;Schreiben letzter Block
	LD (IX+2),0FEH;UP 09 CSRO
	LD A,43H
	CALL INTERF
CRO0	PUSH HL
	LD HL,0B780H
	XOR A
CRO1	DEC L
	LD M,A
	JR NZ,CRO1
	POP HL
	CALL CRLF
	JP SIXD2
 
ISROI	CALL SIXD3	;intern
ISRO	LD A,0BH	;UP 08 ISRO
	LD (IX+2),1
	JR INTERF
	;
MBOT	INC (IX+2)	;UP 01 MBOT
	LD	A,3
INTERF	;Allgemeines, block- oder
	;byteweises Dateninterface
	;PE: A:Funktion wie bei D004
	;(A=0: BASIC-Funktionen)
	;D: Datenbyte (bei BASIC)
	;E: Unterfunktion (bei BASIC)
	;(IX+6)/(IX+7): Blockzeiger
	;HL: Ende +1
	;CY=1: Fehler
	;A: Fehlernummer (CC bei Kass.)
	;(CF bei BRK)
	PUSH	HL
	LD	HL,(0B7E9H)
	EX	(SP),HL
	RET
STDIO
	CALL BRKT
	RET C
	CALL INTERF
	RET NC
	CP 0CFH
	SCF
	RET Z
	PUSH AF
	CALL NERRM
	POP AF
	RET
 
STDINT	;Standard-Interface: Diskette
	OR	A
	JR	Z,BASIO
	BIT	1,A
	JR	Z,DREAD
	LD	L,(IX+6)
	LD	H,(IX+7)
	CP	0BH
	JR	NZ,NOINID
	PUSH	HL
	CALL	NAMEOTD
	POP	HL
NOINID
	LD	BC,81F2H
	LD	E,80H
ODBL	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,ODBL
	;
DKDO	LD	BC,80F3H
	OUT	(C),A
ODBL2	CALL	BRKT
	LD	A,0CFH	;Endekennung
	RET	C
	IN	A,(C)
	BIT	0,A
	JR	NZ,ODBL2
	ADD	A	;CY erzeugen
	INC	B
	IN	A,(C)	;Nummer
	RET
 
BASIO
	LD	A,E
	BIT	1,A
	JR	Z,BREAD
	LD	BC,8EF3H
	OUT	(C),D
	JR	DKDO
	;
BREAD	CALL	DKDO
	LD	B,8EH
	IN	D,(C)
	RET
 
DREAD	PUSH	HL
	PUSH	DE
	CP	9	;Init?
	JR	NZ,NOINI
	XOR	A
	LD	(0B7DCH),A
	LD	B,11
NMTST	LD	A,M
	INC	HL
	CP	20H
	JR	C,KNME
	CP	7FH
	JR	NC,KNME
	CP	'.'
	JR	NZ,KPKT
	INC	B
KPKT	DJNZ	NMTST
	JR	GEFUND
KNME	CALL	OSTR
	DEFW	0DH
	LD	DE,(0B7A0H)
	CALL	DABR
	LD	B,2
	LD	DE,-40
	ADD	HL,DE
UKI2	LD	DE,NAMEPTR
	LD	C,6
UKI1	LD	A,(DE)
	INC	DE
	SUB	M
	INC	HL
	AND	0DFH	;Upcase
	JR	NZ,UNGL
	DEC	C
	JR	NZ,UKI1
	JR	GEFUND
UNGL	LD	DE,-46
	ADD	HL,DE
	DJNZ	UKI2
	CALL	NAMEIN
	LD	A,0CFH
	JR	C,DBRK
GEFUND	LD	A,9
NOINI	CALL	NAMEOTD	;eintragen
	LD	A,(0B7DCH)
	INC	A
	LD	(0B7DCH),A
	LD	(IX+2),A
	CALL	DKDO	;Kommando
	JR	C,DBRK
	LD	L,(IX+5)
	LD	H,(IX+6)
	LD	BC,80F2H
SEKTOR	INI
	INC	B
	INC	B
	JR	NZ,SEKTOR
DBRK	POP	DE
	POP	HL
	RET
NAMEOTD	;Name in Diskpuffer schreiben
	LD	BC,82F3H
	LD	E,12
NOTD1	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,NOTD1
	RET
 
	;
MBI	LD	A,1	;UP 05 MBI
	JP	INTERF
 
;*** ISR's f}r die Kassette ***
 
ISRC1	PUSH AF		;ISR CTC 1 MBO
	LD A,87H
	OUT 8DH,A
	LD A,(IX)
	OUT 8DH,A
	LD (IX),0
	JR IMBEND
 
ISRPA	PUSH AF		;ISR PIO A MBI
	IN A,8EH
	LD (IX),A
	LD A,7
	OUT 8EH,A
	LD A,0A3H
	OUT 8EH,A
IMBEND	POP AF
INTEND	EI
	RETI
 

 
;====== BASIC-ERWEITERUNG =====
Detected encoding: ASCII (7 bit)2