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)
|