Kleincomputer "KC compact" (KCC)
Tips und Hinweise:


1 - FDC-Adapter : EFS-Stecker auf PC-FDC-Kabel
2 - Soft-Reset     (Quelle: Funkamateur Heft 2/1992, Seite 86; Autor: J.Schwabe)

Beim Assemblerprogrammieren kommt es oft vor, daß der Rechner in eine Endlosschleife gerät oder abstürzt. In vielen Fällen könnte ein Neustart des Systems ohne Datenverlust (Warmstart) Abhilfe schaffen, doch SHIFT + CTRL + ESC führen zum BASIC-Kaltstart. Vorliegende Assemblerzeilen lösen das Problem softwaremäßig:
SHIFT + CTRL + ESC führen zum Warmstart (Neuinitialisieren des Systems ohne Speicherlöschung). Das Pro­gramm verbiegt den Vektor zu BDEE: IND KM TEST BREAK (wird während der INT-Behandlung aufgerufen) auf sich selbst.
Die Routine muß im zentralen RAM (4000-BFFF) angesiedelt sein, da die Indirections des Systems grundsätzlich bei ROM ON arbeiten. Wird, wie im Beispiel, der Assembler angesprungen, muß das alte IND KM TEST BREAK wieder hergestellt werden, weil es beim Assemblieren in einen Interrupt hinein einen Systemabsturz geben könnte. Braucht man das nicht zu beachten, kann man bei MESS den Zeiger wieder auf die neue Routine biegen.
Anzumerken bleibt noch folgendes:
  • Da diese Routine nur Software ist, kann sie kein Wunder vollbringen, d.h., bei einem totalen Absturz nicht wirken. Dann hat meist auch die Betätigung von RESET, so vorhanden, keinen Zweck.
  • Das gerufene Vordergrundprogramm sollte zumindest in dieser Version nicht verlassen werden (nicht mit RET), da der normale Rückweg (zu BASIC) auf dem Stack natürlich gelöscht ist.
  • Ebenso brauchte man zu einem BASIC-Aufruf die BASIC-Warmstartadresse.
  • Trotz eines gelungenen Warmstarts kann der RAM-Inhalt zerstört sein, allerdings durch das verlassene Programm.
  • Alle ROM-Adressen beziehen sich auf die "Version 1.3"

                     Assemblerlisting fuer den Soft-Reset

NEVE2:	EQU	#1D88		; Adresse, auf die IND KM TEST BREAK nach 
				; einem Warmstart initialisiert wird
REST:	EQU	1004		; Startadresse nach einem Warmstart, hier 
				; als Beispiel Warmstart des ASSMON auf 1000

; Initialisierung
; Verbiegen des Vektors)
INIT:	LD	HL,NEVEC
	LD	(#BDEF),HL

; hier evtl. Text ausgeben
	RET

; neues IND KM TEST BREAK
NEVEC:	LD	HL,#B63D	; Testen auf SHIFT+CTRL+ESC, wie Original IND
	BIT	2,(HL)
	RET	Z
	LD	A,C
	XOR	#A0
	JP	NZ,#1E19	; auf dieser ROM-Adresse geht es weiter, wenn 
	PUSH	BC		; kein SHIFT + CTRL + ESC erkannt wurde
	INC	HL
	LD	B,#A
KEYADD:	ADC	A,(HL)
	DEC	HL
	DJNZ	KEYADD		; das Original ist genauso
	POP	BC
	CP	#A4
	JP	NZ,#1E19	; kein SHIFT + CTRL + ESC

; Warmstart
	LD	BC,#7F89	; einige Baustein-Initialisierungen
	OUT	(C),C
	DI			; identisch mit ROM
	LD	BC,#F782
	OUT	(C),C
	LD	BC,#F400
	OUT	(C),C
	LD	BC,#F600
	OUT	(C),C
	LD	HL,#5E5
	LD	BC,#BC0F
OUTS:	OUT	(C),C
	DEC	HL
	LD	A,(HL)
	INC	B
	OUT	(C),A
	DEC	B
	DEC	C
	JP	P,OUTS
	LD	SP,#C000	; neuer Systemstack
	LD	HL,#681
	LD	BC,#EE3D	; weiter initialisieren
	CALL	#6A2		; ROM: Tabelle ausgeben
	LD	DE,MESS		; Systemmeldugsadresse
	LD	HL,NEWST	; Startadresse Vordergrundprogramm
	JP	#61F		; diese ROM-Routine initialisiert das System
				; und fuehrt CALL (DE) und JP (HL) aus	
MESS:	LD	HL,NEVE2	; Zeiger auf den zweiten Wert stellen
	LD	(#BDEF),HL	; Ausgabe von Text waere moeglich 
	RET			; dansch startet NEWST
NEWST:	CALL	#B909		; HI KL L ROM DISABLE, ROM OFF von 0...3FFF
	LD	HL,REST
	JP	(HL)

Diesen Tip gibt es auch als PDF-Datei.

Trennlinie

Letzte Bearbeitung: 17. 07. 2018
4,938 Bytes

zur Startseite