TITLE BFILL ENTRY BFILL ; ; Speicherbereich mit identischen Bytes fuellen ; ; Aufruf: CALL = BFILL(start,count,fill) ; ; <start> = Startadresse (Variablenname) ; <count> = Anzahl Bytes (2-Byte-Integer !) ; <fill> = Fuellbyte ; BFILL: LD (SADR),HL ; Startadresse sichern LD (CADR),DE ; Count-Adresse retten LD (FADR),BC ; Fill-Adresse sichern ; LD A,(DE) LD L,A INC DE LD A,(DE) LD H,A ; HL = <count> LD (COUNT),HL ; <count> sichern LD BC,0 AND A SBC HL,BC ; <count> = 0 ? JR Z,ENDE ; Ja: fertig! ; LD HL,(COUNT) ; Nein: weiter LD BC,(FADR) LD A,(BC) ; A = <fill> LD BC,(SADR) ; BC = Pointer LD DE,1 ; LOOP: LD (BC),A ; ein Byte speichern AND A ; Carry-Flag loeschen SBC HL,DE ; <count> = <count> - 1 JR Z,ENDE ; fertig ? INC BC ; Nein: Pointer = Pointer + 1 JR LOOP ; weiter mit dem naechsten ; ENDE: LD HL,1 ; RETURN-STATUS RET ; ; Arbeitsspeicher: ; SADR: DS 2 ; Startadresse CADR: DS 2 ; Count-Adresse FADR: DS 2 ; Fill-Adresse COUNT: DS 2 ; Count ; END
Bild 2. Speicherbereich füllen
|