nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 16 Apr 2024 09:27



Reply to topic  [ 19 posts ]  Go to page Previous  1, 2
RND в Бейсик «МИКРОША» 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
В старые времена, когда из компьютеров у меня был только "Специалист", любил я из разных программ
вытаскивать различные визуальные и звуковые эффекты...

Следующая подпрограмма из моей коллекции обычно использовалась, когда надо было озвучить взрыв,
ну или какой-либо шум столкновения:

 ПОДПРОГРАММА NOIZE
Code:
NOIZE:
  PUSH PSW
  PUSH B

  LXI  B,00C0H; length 192
L39:
  CALL L35
  CPI  80H    ;
  JNC  L3A    ; A >= 80H

  MVI  A,0BH  ; SET Port C = 1
  STA  0FFE3H ; PYC PPA

L3A:
  DCX  B
  CALL L35
  CPI  7FH   ;
  JNC  L3B   ; A >= 7FH

  MVI  A,0AH  ; SET Port C = 0
  STA  0FFE3H ; PYC PPA

L3B:
  MOV  A,B
  ORA  C
  JNZ  L39

  MVI  A,0AH  ; SET Port C = 0
  STA  0FFE3H ; PYC PPA

  POP  B
  POP  PSW
  RET

L35:
  PUSH H    ;
  PUSH B
  LHLD L37  ; HL = 5EACH;
  MOV  A,H
  ANI  0C0H ; 1100.0000b
  MOV  B,A
  RAL       ; A = 2хA
  XRA  B
  ANI  80H  ; 1000.0000b Test Bit7
  DAD  H    ; не влияет на Z только C
  JZ   L36  ; Bit7 = 0
  INX  H
  INX  H
L36:
  SHLD L37
  MOV  A,H
  POP  B
  POP  H
  RET
L37:
  DB   0ACH ;  = L
  DB   5EH  ;  = H

Алгоритмы этих подпрограмм я обычно не разбирал, следил только, чтобы не портили регистры...
Но поскольку я сейчас переношу программу на платформу 1816ВЕ48, то построчно прочитать пришлось.
И есть у меня такое предположение, что подпрограмма, которую вызывают по метке L35: - это простенький
генератор псевдослучайной последовательности... псевдо-RND, так сказать.

_________________
iLavr


12 Dec 2021 01:10
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
И есть у меня такое предположение, что подпрограмма, которую вызывают по метке L35: - это простенький
генератор псевдослучайной последовательности... псевдо-RND, так сказать.

Тест "звёздное небо" показывает, что предположение весьма похоже на правду!
Attachment:
tRND.PNG
tRND.PNG [ 56.2 KiB | Viewed 2542 times ]

Распределение более-менее равномерное, явных группировок незаметно...
Если наблюдать дольше - весьма равномерно закрасит весь квадрат.

_________________
iLavr


12 Dec 2021 02:49
Profile
Novelist

Joined: 24 Aug 2006 02:14
Posts: 46
Location: pуcвoceмьнадцaть
Reply with quote
Lavr wrote:
И есть у меня такое предположение, что подпрограмма, которую вызывают по метке L35: - это простенький
генератор псевдослучайной последовательности

LFSR с отводами 15,14. Период 32767.
В этой реализации младший бит (L37) всегда 0, работают старшие 15 бит.


12 Dec 2021 03:10
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
DDp wrote:
В этой реализации младший бит (L37) всегда 0, работают старшие 15 бит.

А они и используются в программе (MOV A,H), хотя, рисуя "звёздное небо", я и младшие биты в качестве координаты использовал. :wink:
Lavr wrote:
Но поскольку я сейчас переношу программу на платформу 1816ВЕ48, ...

А вот под моделью 8048 в Proteus этот звук взрыва звучит омерзительно плохо. :(
Хотя казалось мне - будет лучше, поскольку в звук вмешиваются прерывания по таймеру -
шумнее будет, - так мне казалось... но звучит как трактор: тыр-тыр-тыр... :-?

И я подумал, может быть заменить звук взрыва алгоритмом попроще?
Интересно это сделано в известной игре CROSSFIRE - там в качестве случайного шумового сигнала
использовали массив кодов самой программы, насколько я помню...

Но из интересу я загуглил "имитация звука взрыва на ассемблере" и нашел пока только одну статью
на интересующую тему: Как написать игру на ассемблере для ZX Spectrum
Есть там фраза:"для создания звука, напоминающего взрыв бомбы, можно предложить..."
Посмотрю, что там они предложили... :lol:

P.S. Да... оригинальностью они не удивили:"...в качестве генератора «случайных» чисел, определяющих частоту тона, используются коды ПЗУ".

_________________
iLavr


12 Dec 2021 14:56
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 19 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.