;-----------------------------------
;
;     Zufallsgenerator mit LFSR
;     (Registerlänge 16)
;
;-----------------------------------
	ORG 200H
;
	DEFW 7F7FH
	DEFM 'ZUFALL'
	DEFB 1
;
	LD HL,1		;Startwert <> 0!
	LD DE,65535	;Periode
;
;-------- Generator ----------------
;
;		;HL = alte Zufallszahl
LOOP:	LD A,H
	AND 0B4H	;RKM H
	JP PE,S1
	CCF
S1:	RL L
	RL H
;
;		 HL = neue Zufallszahl
;
;-------- Punkte im IRM ------------
;
	LD C,H		;H in C merken
	LD A,H		;H in A merken
;
; L bleibt unverändert,
; H wird höherwertiger Teil der Adresse
; der Bytespalte im IRM:
; H = H >> 3 + 80h
;
	SRL H	; >>
	SRL H	; >>
	SCF	; '1' nachschieben
	RR H	; >>
;
; A wird Nummer der Bitstelle
;
	AND 7	; Bits 0...2 maskieren
	INC A	; 0...7 -> 1...8
;
; A wird Bitmaske, Zählung beginnt
; am höchstwertigsten Bit
;
	LD B,A		;Zähler laden
	XOR A		;A = 0
	SCF		;C-Flag = 1
;
S11:	RRA		; '1' schieben >>
	DJNZ S11
;
; mit	 A = Bitmaske
;	HL = Adresse im IRM
; maskiertes Bit im addressieren Byte
; setzen, rücksetzen oder negieren
;
	OR M		;SET: OR M
			;RES: CPL
			;     AND M
			;NEG: XOR M
;
	LD M,A	;Byte in IRM laden
;
	LD H,C	;H wiederherstellen
;
;-----------------------------------
;
	DEC DE		;Schleifenzähler
	LD A,D
	OR E		;Periode erreicht ?
	JR NZ,LOOP	;nein
;
	RET		;Programmende

