BASEX2  ASM;------------------------------
;Diskettenroutinen f}r BASIC
;	(mit Fehlertexten)
;
;Adressen:	0200 0300 026A
;
;BASEX2.ASM	` ml 08.08.93
;------------------------------
H150	EQU	150H	;Adr. CALL*150
SUTAB	EQU	0B7B0H
IOERR	EQU	0B7C9H
PV1	EQU	0F003H
AHEX	EQU	1CH
OCHR	EQU	24H
IRMON	EQU	0F018H
IRMOF	EQU	0F01BH
;-------
	ORG	200H
RUN:	DB	0	;1 ->RUN-Switch
SUSP:	DW	0	;Speicher SUTAB
;-------
MBOUT:	LD	BC,8EF3H
	OUT	(C),A	;Datenbyte
	LD	A,D
	AND	48H
	OR	37H
	CALL	NAMOUT
	BIT	6,A	;close?
	JR	Z,O1
	LD	D,A
	LD	A,(RUN)
	AND	A
	LD	A,D
	JR	Z,O1
	SET	7,A	;run-switch
O1:	OUT	(C),A	;Steuerbyte
O2:	IN	A,(C)
	BIT	0,A	;fertig?
	JR	NZ,O2
	RLCA
	SET	0,(IX+8);Taste gedr}ckt
	RET	NC
ERR:	LD	BC,83F1H
	IN	A,(C)
	CP	20H	;DEP ab 2.0?
	JR	NC,ERRTX;ja
	LD	BC,81F3H
	IN	A,(C)
	CALL	PV1
	DB	AHEX	;Fehler-Nr.
ERRE:	LD	HL,(IOERR)
	PUSH	HL
	JP	IRMOF
ERRTX:	LD	B,0	;Fehlertext
ERRT1:	IN	A,(C)
	JR	Z,ERRE	;00-Ende
	INC	B
	CALL	PV1
	DB	OCHR
	JR	ERRT1
;-------
MBIN:	LD	A,D
	AND	48H
	OR	35H
	CALL	NAMOUT
	OUT	(C),A	;Steuerbyte
I1:	IN	A,(C)
	BIT	0,A	;fertig?
	JR	NZ,I1
	RLCA
	JR	C,ERR	;Fehler
	LD	B,8EH
	IN	A,(C)	;Datenbyte
	RET
;-------
;Selbststart beim Laden:
;
START:	LD	HL,UMS
	LD	DE,H150
	LD	BC,UMSE-UMS
	LDIR
	LD	HL,(SUTAB)
	PUSH	HL	;SUTAB alt
	LD	(SUSP),HL
	LD	DE,START;SUTAB neu
	LD	(SUTAB),DE
	LD	BC,92H	;L{nge SUTAB
	LD	HL,MBOUT
	EX	(SP),HL
	PUSH	HL	;SUTAB alt
	LD	HL,MBIN
	EX	(SP),HL
	JP	H150+DISK-UMS
;-------
;Umschaltung Kassette/Diskette:
;(wird nach 150H verschoben)
;
UMS:	CALL	IRMON
	LD	HL,(SUSP)
	LD	DE,(SUTAB)
	LD	(SUTAB),HL
	LD	(SUSP),DE
	CALL	IRMOF
	RET
;-------
;Dateiname ausgeben:
;
NAMOUT	EQU	$-UMS+H150
	LD	BC,83F3H
	BIT	3,A	;open?
	JR	Z,NAE
	LD	E,11	;Anzahl
NAW:	OUTI
	INC	B
	INC	B
	DEC	E
	JR	NZ,NAW
NAE:	LD	B,80H	;BC f}r Steuer-
	RET		;byte
;-------
;SUTAB-neu ab Adr. START aufbauen:
;
DISK:	LDIR
	POP	HL
	LD	(START+6EH),HL
	POP	HL
	LD	(START+70H),HL
	RET
UMSE:	;Ende der Umschaltroutine
;-------
	DB	'080893'	;Datum
	DS	300H-$
Å
UMSE:º
DISK:·
NAE:°
NAW:e
NAMOUT:’
UMS:j
START:\
I1:R
MBIN:G
ERRT1:E
ERRTX:>
ERRE:,
ERR: 
O2:
O
	DS	300H-$
Å
UMSE:º
DISK:·
NAE:°
NAW:e
NAMOUT:’
UMS:j
START:\
I1:R
MBIN:G
ERRT1:E
ERRTX:>
ERRE:,
ERR: 
O2:
O