есть ошибка. Но пока я искал свои исходники, диалог в топике перешел в неконструктивное русло.
Тем не менее, если этим Васиком люди пользуются, я счел нужным этот дефект устранить.
Так уж случилось, что с генераторам RND я сталкивался очень много и считаю, что самый лучший
из них в программе Liberty Basic 1.0...3.0 (может и старше) - он, на мой взгляд, наиболее равномерно
покрывает случайными точками прямоугольник экрана.
Но вернемся к подпрограмме RND Бейсика «МИКРОША»: на мой взгляд, для устранения ошибки следует
пропатчить байт 0C9H по адресу 163BH, исправив его на 0CDH.
Для этого в HEX-редакторе ищем сигнатуру: 7A 44 и находим цепочку:
1630: 16 CD FF 12-C8 01 35 98-11 7A 44 CD-BC 11 01 28
Здесь я уже 0C9H на 0CDH исправил.
Подпрограмма генератора RND многих наших 8-битных Бейсиков не изменилась практически со времен
юного Билла Гейца: http://altairbasic.org/math_dis_12.htm
И в Бейсике «МИКРОША» после правки подпрограмма RND должна выглядеть вот так:
Code: Select all
'========== Rnd
RST 5 ;162A EF
JM L1647 ;162B FA 47 16
LXI H,L165C ;162E 21 5C 16
CALL L12FF ;1631 CD FF 12
RZ ;1634 C8
LXI B,L9835 ;1635 01 35 98
LXI D,L447A ;1638 11 7A 44
CALL L11BC ;163B CD BC 11
LXI B,L6828 ;163E 01 28 68
LXI D,LB146 ;1641 11 46 B1
CALL L1082 ;1644 CD 82 10
L1647: CALL L130D ;1647 CD 0D 13
MOV A,E ;164A 7B {
MOV E,C ;164B 59 Y
MOV C,A ;164C 4F O
MVI M,80H ;164D 36 80
DCX H ;164F 2B +
MOV B,M ;1650 46 F
MVI M,80H ;1651 36 80
CALL L10D3 ;1653 CD D3 10
LXI H,L165C ;1656 21 5C 16
JMP L1319 ;1659 C3 19 13
'==========
Code: Select all
LA5:RST 5
JM LA6
LXI H,b6D
CALL L6B
RZ
LXI B,9835H
LXI D,447AH
CALL L51
LXI B,6828H
LXI D,0B146H
CALL L37
LA6:CALL L6D
MOV A,E
MOV E,C
MOV C,A
MVI M,80H
DCX H
MOV B,M
MVI M,80H
CALL L3B
LXI H,b6D
JMP L70
Я только не пересчитывал в конце контрольную сумму, так что может быть сообщение
об ошибке загрузки. Но в эмуляторе В.Пыхонина по Alt+F3 и в Emu3000 файл и
загружается и работает нормально.