EXT ARGUMENT_1,BLANKPOS LD SP,0100H XOR A ;0=Bezugslaufwerk LD (RFCB),A ;in FCB eintragen LD HL,PROGRM ;Das folgende Programm LD DE,0100H ;wird nach 0100H geschoben LD BC,LIMIT - PROGRM LDIR JP 0100H ;...und gestartet ; ; Dieser Programmteil liegt jetzt in 0100H ; PROGRM: LD C,0FH ;EXECUTE.OVR wird eroeffnet LD DE,FCB CALL BDOS INC A ;Akku bei Fehler FF nach JR Z,ERROR ;INC Null LD DE,08000H ;TURBO.OVR n. 08000H laden LOAD: PUSH DE ;DE fuer retten LD C,01AH ;DMA-Adresse setzen CALL BDOS LD C,014H ;Block von Diskette lesen LD DE,FCB CALL BDOS CP 0 ;Akku Null wenn OK JR NZ,READY ;...sonst letzter Block LD HL,0080H ;DMA-Adr. um 80H erhoeher, POP DE ADD HL,DE EX DE,HL JR LOAD ;...und neuen Block lesen ; ; Parameter-Uebergabe an EXECUTE.OVR auf dem Stack ; READY: LD HL,ARGUMENT_1 ;Ctrl/Z an das Ende des LD D,0 ;Filenamens setzen LD E,(HL) ;HL zeigt auf Laengenbyte ADD HL,DE INC H LD (HL),01AH LD DE,(BLANKPOS) LD A,E OR E ;Zero, wenn kein Blank JR Z,POINT ;Pointer uebergeben LD HL,ARGUMENT_1 ;sonst Zeiger auf Blank ADD HL,DE ;uebergeben POINT: PUSH HL LD HL,005CH ;Zeiger auf den CP/M FCB PUSH HL LD A,(FCB) ;Laufwerk INC A ;+ 1 PUSH AF ;uebergeben LD HL,03F3H PUSH HL LD HL,0081H ;Hier ist die Message $81 Bytes lang. Dieser Wert ;muss wie im Text erklaert angepasst werden. Falls ;keine Daten gerettet werden m}ssen, ist er ;auf $01 zu setzen. PUSH HL LD HL,1FE7H ;Adr. d. ueberg. PARAM. ;hier ist es $1FE7 PUSH HL LD HL,0100H ;Restart-Adresse PUSH HL JP 08000H ;Sprung in EXECUTE.OVR ; ; Falls Fehler normalen Warmstart ERROR: JP 0000H RFCB: DB 0 DB 'EXECUTE OVR' ;Aendern falls noetig! DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 LIMIT: END