Дайте генератор RND без использования ПЗУ
Такой конечно хороший, но не подходит
rnd ld a,3
ld c,a
add a,a
add a,a
add a,c
inc a
ld (rnd+1),a
Вид для печати
Дайте генератор RND без использования ПЗУ
Такой конечно хороший, но не подходит
rnd ld a,3
ld c,a
add a,a
add a,a
add a,c
inc a
ld (rnd+1),a
Вот один из самых простых и быстрых методов:
http://ru.wikipedia.org/wiki/%D0%9B%...82%D0%BE%D0%B4
Вот хороший генератор
RND LD A,53
ADD A,A
JR NC,$+5
LD C,51
XOR C
LD (RND+1),A
Можно доработать, добавив строки:
LD C,A
LD A,R
XOR C
я обычно такой использую:
чем длиннее таблица, тем более случайные будут числа (но и тем медленней будет работать)Код:rnd: ld a,42
ld hl,rnd_tab
dup rnd_tab_last - rnd_tab
add a,(hl)
ld (hl),a
inc hl
edup
ld (rnd+1),a
ret
rnd_tab:
db 'asdGK'
rnd_tab_last:
Собрал в кучку, общими усилиями
RND_8 LD A,3
LD C,A
ADD A,A
ADD A,A
ADD A,C
INC A
LD (RND_8+1),A
RET
;---------------------------------------------------------------
RND_8 LD A,53
ADD A,A
JR NC,$+5
LD C,51
XOR C
; LD C,A
; LD A,R
; XOR C
LD (RND_8+1),A
RET
;---------------------------------------------------------------
RND_8 LD A,42
LD HL,RND_TAB
DUP 5
ADD A,(HL)
LD (HL),A
INC HL
EDUP
LD (RND_8+1),A
RET
RND_TAB DB 'as^GK'
;---------------------------------------------------------------
RND_8 LD A,(R1)
LD D,A
LD A,(R2)
LD (R1),A
ADD A,D
LD D,A
LD A,(R3)
LD (R2),A
ADD A,D
RLCA
LD (R3),A
RET
R1 DEFB 200
R2 DEFB 71
R3 DEFB 153
;---------------------------------------------------------------
RND_32 LD HL,0
LD A,H
AND #3F
LD H,A
LD D,(HL)
INC HL
LD E,(HL)
INC HL
LD A,(HL)
XOR D
XOR E
SUB 16
LD B,A
LD A,D
AND 3
LD D,A
LD E,B
LD (RND_32+1),HL
RET
;---------------------------------------------------------------
RND_32 LD HL,#FFFF
LD A,H
ADD HL,HL
XOR H
ADD HL,HL
ADD HL,HL
ADD HL,HL
XOR H
ADD HL,HL
ADD HL,HL
XOR H
ADD HL,HL
ADD HL,HL
LD L,A
LD (RND_32+1),HL
RET
;---------------------------------------------------------------
RND_32 LD HL,0
LD A,H
ADD A,#77
LD H,A
RLC L
ADD A,L
LD L,A
LD (RND_32+1),HL
RET
;---------------------------------------------------------------
RND_32 LD HL,#FFFF
LD A,H
OR L
JR NZ,NOZERO
INC L
NOZERO LD A,L
RLCA
XOR H
RLCA
RLCA
XOR H
RLCA
XOR H
RLCA
ADC HL,HL
LD (RND_32+1),HL
RET
;---------------------------------------------------------------
RND_32 LD HL,0
LD D,H
LD E,L
ADD HL,HL
ADD HL,HL
ADD HL,DE
INC HL
LD (RND_32+1),HL
RET
;---------------------------------------------------------------
Процедура ПЗУ
RND_32 LD DE,0
XOR A
LD H,A
LD L,A
LD B,A
ADD HL,DE
ADC A,B
DUP 3
ADD HL,HL
ADC A,A
EDUP
ADD HL,DE
ADC A,B
DUP 2
ADD HL,HL
ADC A,A
EDUP
ADD HL,DE
ADC A,B
ADD HL,HL
ADC A,A
ADD HL,DE
ADC A,B
SUB #4A
NEG
LD C,A
ADD HL,BC
LD (RND_32+1),HL
RET
;---------------------------------------------------------------
ещё бы тесты, какое выдаёт более рандомное распределение (например, поставить 1000 точек по рандому на экране) и как по скорости (примерно, по бордру, вызвав функцию раз 100).