Генератор псевдослучайных чисел RND
Moderator: Shaos
- 
				cr0acker
														 - God
 - Posts: 1078
 - Joined: 03 Feb 2003 13:53
 
Генератор псевдослучайных чисел RND
Хотелось бы заиметь сабжевую функцию с возможностью задания нижней и верхней границы:)
			
			
									
						
										
						- 
				CHRV
														 - God
 - Posts: 1101
 - Joined: 29 Dec 2003 01:00
 - Location: Москва
 
Re: rnd
Влад, вот обещанная ссылка.cr0acker wrote:Хотелось бы заиметь сабжевую функцию с возможностью задания нижней и верхней границы:)
Тут много полезных примеров!
http://zilog.sh.cvut.cz/~baze/misc/z80bits.html
- 
				sysop
 - Junior
 - Posts: 2
 - Joined: 31 May 2004 19:40
 - Location: St. Petersburg
 
Code: Select all
        global mul
; Генератор случайных чисел, медленный ~3000 takts.
; тpебует наличия функции умножения
RAND_MAX equ 0xffff
        psect data
randx:   dw 0, 0
        psect text
; hl = random(0..<de) генерация числа в диапазоне
randn:
        push de 
        call rand
        ex de, hl 
        pop bc 
        call mul
        ex de, hl 
        ret 
; Получение случайного числа
; -> hl = случайное число 0..65535 ~2300 takts.
rand:
        ; randx = randx*1103515245 + 12345)>>16) & 077777)
        ld de, (randx+2)
        ld bc, 0x4e6d
        call mul
        push hl 
        ld de, (randx)
        ld bc, 0x41c6
        call mul
        pop de 
        add hl, de 
        push hl 
        ld de, (randx)
        ld bc, 0x4e6d
        call mul
        ld bc, 0x3039
        add hl, bc 
        ld (randx), hl 
        pop hl 
        adc hl, de 
        ld (randx+2), hl 
        ret 
; Установка генератора случайных чисел
; de = инициирующее значение
srand:
        ld (randx), de 
        ret 
 EXPORT global mul  ; long (DE,HL) = DE*BC  ~730t.
; функция беззнакового умножения 16-разрядных чисел
; (C) Kirill Frolov
;     idea by Vasil Ivanov
; dehl=de*bc   ~730t.
        psect text
mul:
        ld hl, 0
        ld a, c 
        ld c, l    ; 18
        add a, a 
        jr nc, $+4
        add hl, de 
        adc a, c   ; 29
     ; REPEAT 7
          add hl, hl 
          rla 
          jr nc, $+4
          add hl, de 
          adc a, c   ; 40*7  309
              add hl, hl 
              rla 
              jr nc, $+4
              add hl, de 
              adc a, c 
            add hl, hl 
            rla 
            jr nc, $+4
            add hl, de 
            adc a, c 
              add hl, hl 
              rla 
              jr nc, $+4
              add hl, de 
              adc a, c 
            add hl, hl 
            rla 
            jr nc, $+4
            add hl, de 
            adc a, c 
              add hl, hl 
              rla 
              jr nc, $+4
              add hl, de 
              adc a, c 
            add hl, hl 
            rla 
            jr nc, $+4
            add hl, de 
            adc a, c 
     ; ENDR 
        ld c, a 
        push hl   ; 0chl
        ld hl, 0
        ld a, b 
        ld b, l   ; 33
        add a, a 
        jr nc, $+4
        add hl, de
        add a, b   ; 29
     ; REPEAT 7
          add hl, hl 
          rla 
          jr nc, $+4
          add hl, de 
          add a, b   ; 40*7  309
              add hl, hl 
              rla 
              jr nc, $+4
              add hl, de 
              add a, b 
            add hl, hl 
            rla 
            jr nc, $+4
            add hl, de 
            add a, b 
              add hl, hl 
              rla 
              jr nc, $+4
              add hl, de 
              add a, b 
            add hl, hl 
            rla 
            jr nc, $+4
            add hl, de 
            add a, b 
              add hl, hl 
              rla 
              jr nc, $+4
              add hl, de 
              add a, b 
            add hl, hl 
            rla 
            jr nc, $+4
            add hl, de 
            add a, b 
     ; ENDR 
   ; ahl0 + 0cde = hlde
        pop de
        ld b, l
        ld l, h
        ld h, a
        ld a, d
        add a, b
        ld d, a 
        ld b, 0
        adc hl, bc
        ex de, hl   ; 60
        ret         ; 729t.
				