рдиреНрдпреВрд░реЛрдорд╛рдВрд╕рд░ рдХрд╛ рдЙрд▓рдЯрд╛ред рднрд╛рдЧ 4: рдзреНрд╡рдирд┐, рдПрдиреАрдореЗрд╢рди, рд╣рдлрдореИрди, рдЬреАрдереВрдм

рдирдорд╕реНрддреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рдпрд╣ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдФрд░ рдиреНрдпреВрд░реЛрдореЗрдВрдЯ рдХреЗ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рдореЗрд░реЗ рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдПрдХ рд╕рд┐рд▓рд╕рд┐рд▓рд╛ рд╣реИред



рдиреНрдпреВрд░реЛрдорд╛рдВрд╕рд░ рдХрд╛ рдЙрд▓рдЯрд╛ред рднрд╛рдЧ 1: рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕
рдиреНрдпреВрд░реЛрдорд╛рдВрд╕рд░ рдХрд╛ рдЙрд▓рдЯрд╛ред рднрд╛рдЧ 2: рд░реЗрдВрдбрд░ рдлрд╝реЙрдиреНрдЯ
рдиреНрдпреВрд░реЛрдорд╛рдВрд╕рд░ рдХрд╛ рдЙрд▓рдЯрд╛ред рднрд╛рдЧ 3: рд╕рдорд╛рдкреНрдд рдкреНрд░рддрд┐рдкрд╛рджрди, рдЦреЗрд▓ рдмрдирд╛

рдЖрдЬ, рджреЛ рдЕрдЪреНрдЫреА рдЦрдмрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:


  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЕрдм рдФрд░ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ - viiri рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпреЛрдЧрджрд╛рди рджреЗ рдЪреБрдХрд╛ рд╣реИ;
  • рджреВрд╕рд░реА рдмрд╛рдд, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреАрдердм рдкрд░ рдПрдХ рдЦреБрд▓рд╛ рднрдВрдбрд╛рд░ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд▓ рд░рд╣реА рд╣реИрдВ, рдФрд░ рд╢рд╛рдпрдж рдЬрд▓реНрдж рд╣реА рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЦреЗрд▓рдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрдорд╛рдг рдорд┐рд▓реЗрдЧрд╛ред рдФрд░ рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ рдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред




рд╡рд╣ рдзреНрд╡рдирд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд▓рдЧрд╛ред рдХрд╛рд╢, рдЦреЗрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмреАрдЪ рдСрдбрд┐рдпреЛ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛, рдФрд░ рдЬрдм рд╕реЗ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╕рдВрдЧреАрдд рдПрдордПрд╕-рдбреЙрд╕ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдмреЗрд╣рдж рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рдЙрдВрдбрдмреНрд▓реИрд╕реНрдЯрд░ рдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореИрдВ рдХреБрдЫ рдкрд░рд┐рдЪрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдореЗрдВ рдЕрд╕рдВрддреБрд╖реНрдЯ рдХреЛрдб рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реВрдВред рдФрд░ рдЬреЛ рдХреЛрдИ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╡рд╣ рдЖрдо рддреМрд░ рдкрд░ рдкрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдХреНрдпрд╛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ ( рдЗрдбрд╛ рджреНрд╡рд╛рд░рд╛ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ):


sub_20416: ... mov ax, [si+8] out 42h, al ; 8253-5 (AT: 8254.2). mov al, ah out 42h, al ; Timer 8253-5 (AT: 8254.2). mov bx, [si+0Ah] and bl, 3 in al, 61h ; PC/XT PPI port B bits: ; 0: Tmr 2 gate тХРтХжтХРтЦ║ OR 03H=spkr ON ; 1: Tmr 2 data тХРтХЭ AND 0fcH=spkr OFF ; 3: 1=read high switches ; 4: 0=enable RAM parity checking ; 5: 0=enable I/O channel check ; 6: 0=hold keyboard clock low ; 7: 0=enable kbrd and al, 0FCh or al, bl out 61h, al ; PC/XT PPI port B bits: ; 0: Tmr 2 gate тХРтХжтХРтЦ║ OR 03H=spkr ON ; 1: Tmr 2 data тХРтХЭ AND 0fcH=spkr OFF ; 3: 1=read high switches ; 4: 0=enable RAM parity checking ; 5: 0=enable I/O channel check ; 6: 0=hold keyboard clock low ; 7: 0=enable kbrd 

рдЗрд╕ рдЯрд╛рдЗрдорд░ erреирелрей-рел рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж , рдореИрдВ рдПрдХ рд▓реЗрдЦ рдкрд░ рдЖрдпрд╛ рдЬреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдХреБрдВрдЬреА рдмрди рдЧрдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рдиреАрдЪреЗ рдореИрдВ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реИред


рдЗрд╕рд▓рд┐рдП, рд╕рд╕реНрддреА рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб рдХреЗ рдЖрдЧрдорди рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдИрдмреАрдПрдо-рдкреАрд╕реА рдХреЗ рдпреБрдЧ рдореЗрдВ, рд╕рдмрд╕реЗ рдЖрдо рдзреНрд╡рдирд┐ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдЙрдкрдХрд░рдг рддрдерд╛рдХрдерд┐рдд рдкреАрд╕реА рд╕реНрдкреАрдХрд░ рдерд╛ , рдЬрд┐рд╕реЗ "рдмреАрдкрд░" рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдорджрд░рдмреЛрд░реНрдб рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрдкреАрдХрд░ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЪрд╛рд░-рдкрд┐рди рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдмреАрдкрд░, рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рджреЛ-рд╕реНрддрд░реАрдп рдЖрдпрддрд╛рдХрд╛рд░ рдирд╛рдбрд╝реА (рджреЛ рд╡реЛрд▓реНрдЯреЗрдЬ рд╕реНрддрд░, рдЖрдорддреМрд░ рдкрд░ 0V рдФрд░ + 5V рдХреЗ рдЕрдиреБрд░реВрдк) рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреАрдкреАрдЖрдИ (рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рдкреЗрд░рд┐рдлреЗрд░рд┐рдпрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ 61 рд╡реЗрдВ рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреЛрд░реНрдЯ рдкрд░ рднреЗрдЬреЗ рдЧрдП рдорд╛рди рдХреЗ рдкрд╣рд▓реЗ рджреЛ рдмрд┐рдЯреНрд╕ "рд╕реНрдкреАрдХрд░" рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ ( in al, 61h рдФрд░ out 61h, al in al, 61h рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ)ред


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ (рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╢рдмреНрджреЛрдВ рдореЗрдВ), рд╣рдорд╛рд░реЗ рд╕реНрдкреАрдХрд░ рджреЛ рдЕрд╡рд╕реНрдерд╛рдУрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - "рдЗрди" рдФрд░ "рдЖрдЙрдЯ" ( "рдХрдо" - "рд╣рд╛рдИ" , "рдСрдл" - "рдСрди" , "рдСрдл" - "рдСрди" ) рдЖрдк рдЪрд╛рд╣реЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ)ред рдПрдХ рдЖрд╡реЗрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░, рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╡рд╛рдкрд╕ред рдпрд╣ рдкреЛрд░реНрдЯ 61 рдХреЗ рдкрд╣рд▓реЗ рдмрд┐рдЯ (рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдЧрд┐рдирддреА) рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдХреЗ рд╕реАрдзреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:


 PULSE: in al, 61h ;    and al, 11111100b ;    ... or al, 00000010b ;     ... ; ,        0 out 61h, al ;    61-  mov cx, 100 ;   DELAY: loop DELAY ;    in al, 61h ;    and al, 11111100b ;     out 61h, al ;    61-  

рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:


  loop DELAY +5V +----------------------+ ! ! 0V ---+ +-------------------------- or al, 00000010b and al, 11111100b out 61h, al out 61h, al 

рд╡рд┐рд▓рдВрдм рдХреЗ рд╕рд╛рде PULSE рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ:


  mov dx, 100 ;  100  PULSE: ... mov cx, 100 WAIT: loop WAIT dec dx jnz PULSE PULSE +5V +---------+ +---------+ +---------+ ! ! ! ! ! ! 0V ---+ +---------+ +---------+ +--- loop WAIT 

рдпрджрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдордиреЗ рд╢рд╛рдпрдж рд╣реА рдХреБрдЫ рд╕реБрдирд╛ рд╣реЛрдЧрд╛, рддреЛ рджреВрд╕рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдЙрд╕ рдорд╢реАрди рдХреА рдЧрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рд╕реНрд╡рд░ рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдорд╣рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдкреАрдХрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИред


рдпрд╣рд╛рдВ рдЧреЗрдо рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рдереНрд░реА-рдЪреИрдирд▓ рдЯрд╛рдЗрдорд░ - рдЗрдВрдЯреЗрд▓ 8253 рдЖрддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рджреВрд╕рд░рд╛ рдЪреИрдирд▓ (рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ) рдмреАрдкрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдЯрд╛рдЗрдорд░ рдЗрдВрдЯреЗрд▓ 8254 рдШрдбрд╝реА рд╕реЗ рдПрдХ рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, 1193180 рджрд╛рд▓реЛрдВ рдХреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб (~ 1.193 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ) рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рджрд╛рд▓реЛрдВ рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╡рдХреНрддрд╛ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдкрд▓реНрд╕ рднреЗрдЬ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, 8253 рд╕рдорд╛рдпреЛрдЬреНрдп рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдЖрдпрддрд╛рдХрд╛рд░ рд╕рдВрдХреЗрдд рдХреЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рд╕реНрдкреАрдХрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдзреНрд╡рдирд┐ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:


  1. рдЖрдпрддрд╛рдХрд╛рд░ рд╕рд┐рдЧреНрдирд▓ рдЬрдирд░реЗрд╢рди рдореЛрдб рдореЗрдВ рдЯрд╛рдЗрдорд░ рдХрд╛ рджреВрд╕рд░рд╛ рдЪреИрдирд▓ рд╕реЗрдЯ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЧрд▓-рдмрд╛рдЗрдЯ рдорд╛рди рдХреЛ рдкреЛрд░реНрдЯ 43 ( 8253 рдореЛрдб / рдХрдорд╛рдВрдб рд░рдЬрд┐рд╕реНрдЯрд░ ) рдкрд░ рд▓рд┐рдЦреЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ 10110110B (рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ ):

 Bits Usage 6 and 7 Select channel : 1 0 = Channel 2 4 and 5 Access mode : 1 1 = Access mode: lobyte/hibyte 1 to 3 Operating mode : 0 1 1 = Mode 3 (square wave generator) 0 BCD/Binary mode: 0 = 16-bit binary 

  1. рджреВрд╕рд░реЗ рдЪреИрдирд▓ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рдЖрд╡реГрддреНрддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдЯ-рдмрд╛рдп-рдмрд┐рдЯ, рд╕рдмрд╕реЗ рдХрдо рдЙрдореНрд░ рд╕реЗ, рд╣рдо 42 рд╡реЗрдВ рдкреЛрд░реНрдЯ ( 8253 рдЪреИрдирд▓ 2 рдбреЗрдЯрд╛ рдкреЛрд░реНрдЯ ) рдХреЛ 1193180 / freq рдмрд░рд╛рдмрд░ рдореВрд▓реНрдп рдкрд░ 1193180 / freq , рдЬрд╣рд╛рдВ 1193180 / freq рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЖрд╡реГрддреНрддрд┐ рдореВрд▓реНрдп рд╣реИред


  2. рд╕реНрдкреАрдХрд░ рдХреЛ рдЯрд╛рдЗрдорд░ рд╕реЗ рджрд╛рд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ 61 ( PPI ) рдореЗрдВ рдорд╛рди рдХреЗ рдкрд╣рд▓реЗ рджреЛ рдмрд┐рдЯ рд╕реЗрдЯ рдХрд░реЗрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╢реВрдиреНрдп рдмрд┐рдЯ 1 рдкрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ "рд╕реНрд╡рд┐рдЪ" рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ:



 Bit 0 Effect ----------------------------------------------------------------- 0 The state of the speaker will follow bit 1 of port 61h 1 The speaker will be connected to PIT channel 2, bit 1 is used as switch ie 0 = not connected, 1 = connected. 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рд╣реИ:


  mov al, 10110110b out 43h, al ;   mov ax, 02E9Bh ; 1193180 / 100 = ~0x2E9B out 42h, al ;      mov al, ah out 42h, al ;      in al, 61h ;    or al, 00000011b ;      1 out 61h, al ;   ... ;       ~100  in al, 61h and al, 11111100b out 61h, al ;   

рдФрд░ рдпрд╣ рд╡рд╣реА рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдерд╛ (рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рдпрд╛): si + 8 рдкрд░ рдПрдХ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рднрдХреНрдд рд╣реИ рдЬрд┐рд╕реЗ рдкреЛрд░реНрдЯ 42 рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ si + 0Ah - рдкреЛрд░реНрдЯ 61 рдореЗрдВ рд╕реНрдкреАрдХрд░ рдХреА рд╕реНрдерд┐рддрд┐ ( "рдСрди" - "рдСрдл" ) рджрд░реНрдЬ рдХреА рдЧрдИред


рдкреНрд▓реЗрдмреИрдХ рддрдВрддреНрд░ рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдирд┐рдкрдЯрдирд╛ рдерд╛ред рдкрд╛рд╕ рдХреЗ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЯрд╛рдЗрдорд░ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( sub_2037A , рдлрд┐рд░ init_8253 ), рдЖрдард╡реЗрдВ рд╡реНрдпрд╡рдзрд╛рди рд╣реИрдВрдбрд▓рд░ рдХреЛ sub_20416 рдлрд╝рдВрдХреНрд╢рди (рдЗрд╕рдХреЗ рдмрд╛рдж - play_sample ) рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЬрд▓реНрдж рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рд░реБрдХрд╛рд╡рдЯ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд▓рдЧрднрдЧ 18.2 рдмрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╕рдордп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред рдЗрд╕ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрджрд▓рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 18 рдмрд╛рд░ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореВрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╣реБрдХ рдХреЗ рдЕрдВрджрд░ рднреА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╕рд┐рд╕реНрдЯрдо рд╕рдордп рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реА рдЖрд╡реГрддреНрддрд┐ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ (1 / 18.2) * 1000 ~ 55 рдХрд╛ рд╢реБрд▓реНрдХ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдпреЛрдЬрдирд╛ рдпрд╣ рдереА:


  • play_sample рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ play_sample , рдЙрд╕ рдкрдВрдХреНрддрд┐ рдкрд░ рдЬрд╣рд╛рдВ рдЕрдЧрд▓рд╛ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рднрдХреНрдд рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрд╡реГрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ freq = 1193180 / divisor ;
  • рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдбрд┐рдпреЛ рдПрдбрд┐рдЯрд░ рдореЗрдВ рд╡рд░реНрдЧ рдлрд╝реНрд░реАрдХ рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ (рдореИрдВрдиреЗ рдПрдбреЛрдм рдСрдбрд┐рд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛);
  • рдХрдо рд╕реЗ рдХрдо 3 рд╕реЗрдХрдВрдб рдЬрдорд╛ рд╣реЛрдиреЗ рддрдХ рдкрд╣рд▓реЗ рддреАрди рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдореБрдЦреНрдп рдореЗрдиреВ рд╕реЗ рдорд╛рдзреБрд░реНрдп рдХреА рд╢реБрд░реБрдЖрдд рдорд┐рд▓реА, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдХреБрдЫ рд╕рдордп 10 рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЦреЗрд▓ рд░рд╣рд╛ рдерд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ "рдирдореВрдирд╛" рдХреА рдЕрд╡рдзрд┐ рдХреЛ 55 рдПрдордПрд╕ рд╕реЗ рдШрдЯрд╛рдХрд░ 5 рдПрдордПрд╕ рдХрд░ рджрд┐рдпрд╛ - рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм рддрдХ рдореБрдЭреЗ рдпрд╣ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд╕рдордп рдореБрджреНрджрд╛ рдЦреБрд▓рд╛ рд░рд╣рд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЖрдард╡рд╛рдВ рдЕрд╡рд░реЛрдз рдЙрд╕реА 8253 рдХреЛ рдЦрд┐рд▓рд╛рдХрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╢реВрдиреНрдп рдЪреИрдирд▓ рдЗрдВрдЯрд░рдкреНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ ( рдкреАрдЖрдИрд╕реА ) рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдорд╢реАрди рдмреВрдЯ рдХрд░рддреА рд╣реИ, рддреЛ BIOS ~ 18.2 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рджрд╛рд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рд╢реВрдиреНрдп рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдПрдХ рдмрд╛рдзрд╛ рд╣рд░ ~ 54.9 рдПрдордПрд╕ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢реВрдиреНрдп рдЪреИрдирд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рджрд╛рд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ рдЪреИрдирд▓ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдЖрдкрдХреЛ 1193180 / freq рдмрд░рд╛рдмрд░ рдореВрд▓реНрдп рдХреЛ 40 рд╡реЗрдВ рдкреЛрд░реНрдЯ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ Hertz рдореЗрдВ freq рдЖрд╡рд╢реНрдпрдХ рдЖрд╡реГрддреНрддрд┐ рдорд╛рди рд╣реИред рдпрд╣ init_8253 рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рд╢реБрд░реВ рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛:


 init_8253: ... mov al, 0B6h ; 10110110b out 43h, al ; Timer 8253-5 (AT: 8254.2). mov ax, 13B1h out 40h, al ; Timer 8253-5 (AT: 8254.2). mov al, ah out 40h, al ; Timer 8253-5 (AT: 8254.2). 

рдореВрд▓реНрдп 13B1h рдЕрдиреБрд╡рд╛рдж рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 1193180 / 13B1h ~ 236.7 , рдлрд┐рд░ рд╣рдореЗрдВ рд▓рдЧрднрдЧ (1 / 236.7) * 1000 ~ 4.2 рдкреНрд░рддрд┐ "рдирдореВрдирд╛" рдорд┐рд▓рддрд╛ рд╣реИред рдкрд╣реЗрд▓реА рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдИ рд╣реИред


рдлрд┐рд░ рдЧреЗрдо рдХреЛ рд╕рд╛рдЙрдВрдбрдЯреНрд░реИрдХ рдирд┐рдХрд╛рд▓рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреА рдмрд╛рдд рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдмрд╛рдд рд╣реИ, 42 рд╡реЗрдВ рдмрдВрджрд░рдЧрд╛рд╣ рдореЗрдВ рджрд░реНрдЬ рдЖрд╡реГрддреНрддрд┐ рдбрд┐рд╡рд╛рдЗрдбрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реЗ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдФрд░ рдХрд╛рд░реНрдп рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реАрдзреЗ рдЧреЗрдо рдХреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ (рд╕рд╛рддрд╡реЗрдВ рдЦрдВрдб рдореЗрдВ, рдЗрдбрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдореЗрдВ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ, рдЯреНрд░реИрдХ рдХреЗ рдЕрдВрдд рдХрд╛ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ, рдЬрдм рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рд╕реНрдкреАрдХрд░ рдХреА рдПрдХ рд╢реВрдиреНрдп рд╕реНрдерд┐рддрд┐ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реБрдЖ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдбрд┐рдХрдореНрдкреНрд░реЗрд╕рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо ( рдкрд╣рд▓рд╛ рднрд╛рдЧ ) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл 64-рдмрд┐рдЯ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ рдкреНрд▓реЗрдмреИрдХ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдФрд░ рдЕрдЧрд▓реА рдЖрд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдФрд░ рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рддрд╡рд╛рдВ рдЦрдВрдб рд▓рд┐рдпрд╛) рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред


рдФрд░ рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЪрдпрдирд┐рдд рдЯреНрд░реИрдХ ( рдкреАрд╕реАрдПрдо, 44100 рд╣рд░реНрдЯреНрдЬ, 8 рдмрд┐рдЯ, рдореЛрдиреЛ ; рдХреЗ рд▓рд┐рдП рд╕рд╛рдЙрдВрдбрдЯреНрд░реИрдХ рдкреАрдврд╝реА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛; рдбреЛрд╕рдмреЙрдХреНрд╕ рдореЗрдВ рд╕реНрдкреАрдХрд░ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЬрдирд░реЗрдЯрд░ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд┐рдпрд╛)ред рдореИрдВрдиреЗ рдореМрди рдХреЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдВрдд рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛: рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЧрд┐рдирд╛ - рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред WAV рд╣реЗрдбрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдЯреНрд░реИрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдореБрдЦреНрдп рдореЗрдиреВ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЯреНрд░реИрдХ рдорд┐рд▓рд╛ред рдФрд░ 13 рдФрд░ рдЯреНрд░реИрдХ рдЬреЛ рдЖрдк рдиреАрдЪреЗ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ [рдпрд╛ рд╕рдВрд╕рд╛рдзрди рджрд░реНрд╢рдХ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдм рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЦрд┐рд▓рд╛рдбрд╝реА рдФрд░ рдХрд┐рд╕реА рднреА рдЯреНрд░реИрдХ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред WAV] :



[рдореБрджреНрджреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд "рдмреАрдкрд░" рддрдХрдиреАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛, рдЬреИрд╕реЗ рдХрд┐ рдЦрд░рд╛рдм-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдкреАрд╕реАрдПрдо рдзреНрд╡рдирд┐ рдкреНрд░рдЬрдирди рдХреЗ рд▓рд┐рдП рдкрд▓реНрд╕-рдЪреМрдбрд╝рд╛рдИ рдореЙрдбреБрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЙрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░реВрдБрдЧрд╛ рдЬрд┐рдирд╕реЗ рдЖрдк рдФрд░ рдЕрдзрд┐рдХ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред]




рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ , рдЬрдм рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕рд╛рдзрди рд╕реНрд╡рд░реВрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ .ANH рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд╛рди рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд▓рд┐рдП рдПрдирд┐рдореЗрд╢рди рд╣реИрдВ (рдЕрд░реНрдерд╛рдд, .PIC рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП)ред [рдРрд╕рд╛ рд╣реИред] рдзреНрд╡рдирд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдХреЛ рд╕реАрдзреЗ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдЪреЗрди рдореЗрдВ ), рдореИрдВрдиреЗ рдПрдиреАрдореЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрд░рдорд╢рдГ рдЗрд╕ рдореЗрдореЛрд░реА рдХреЛ рдбрдВрдк рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ (рджреЗрдЦреЛ рдЬрд╣рд╛рдВ рдХрд░реНрд╕рд░ рд╢реАрд░реНрд╖ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ) рдкрддреНрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'S'):



 3DE6:0E26 03 B4 44 B3 ... ;   3DE6:0E26 03 BC CC B3 ... ;   

рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдЬреЛ рдореИрдВрдиреЗ рдЙрдореНрдореАрдж рдХреА рдереА - рдЧрд╣рд░реЗ рд▓рд╛рд▓ рд░рдВрдЧ (0x4) рдХреЛ рдмрджрд▓рдХрд░ рдЪрдордХрджрд╛рд░ рд▓рд╛рд▓ (0xC) рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдм рдЖрдк рдкрддреЗ рдкрд░ рдорд╛рди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 3DE6:0E28 рдФрд░, рдпрджрд┐ рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ, рддреЛ рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдЯреНрд░реЗрд╕ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдВред [рдореИрдВ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛ред] рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдиреЗ рдореБрдЭреЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛, рдЬреЛ рд╕реАрдзреЗ рджрд┐рдП рдЧрдП рдкрддреЗ рдкрд░ рдореВрд▓реНрдп рдмрджрд▓рддрд╛ рд╣реИ: xor es:[bx], al ред рдкрд░рд┐рд╡реЗрд╢ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдореБрдЦреНрдп рд╕реНрддрд░ рдХреЗ рд▓реВрдк рд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдИ: sub_1231E (xor es:[bx], al) <- sub_12222 <- sub_105F6 <- sub_1038F ( ) ред


рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдиреАрдореЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рдЙрд▓рдЯ рджрд┐рдпрд╛ред рдпрд╣ рдПрдХ рдХрд╛рдлреА рдирд┐рдпрдорд┐рдд рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╕реАрдорд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдкреНрд░рд╛рдкреНрдд рдмреИрдХрдЯреНрд░реИрдХ рдпреЗ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдореИрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реВрдВред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ .ANH рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдФрд░ .ANH рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рд╢рдмреНрдж рдЕрдВрджрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ:


 typedef struct anh_hdr_t { uint16_t anh_entries; /* first entry hdr */ } anh_hdr_t; 

рдХрдВрдЯреЗрдирд░ рд╕реНрд╡рдпрдВ рдкреГрд╖реНрдарднреВрдорд┐ рддрддреНрд╡ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдПрдиреАрдореЗрд╢рди рд╣реИред рдЖрдк рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреА рдмрд╛рдЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рдПрдиреАрдореЗрд╢рди рдореЗрдВ рдлрд╝реНрд░реЗрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╣реЗрдбрд░ рдХреЗ рдЖрдЧреЗ рдЕрдЧрд▓реЗ рдлреНрд░реЗрдо рдХреА рдЕрд╡рдзрд┐ (рджреЗрд░реА) рдФрд░ рдкрд╣рд▓реЗ рдлреНрд░реЗрдо рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдлреНрд░реЗрдо рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдСрдлрд╕реЗрдЯ рдХреЗ рдорд╛рди рд╣реИрдВред рдРрд╕реЗ рдЬреЛрдбрд╝реЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлреНрд░реЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:


 typedef struct anh_entry_hdr_t { uint16_t entry_size; uint16_t total_frames; /* anh_frame_data_t first_frame_data */ /* another frames data */ /* anh_frame_hdr first_frame_hdr */ /* another frames */ } anh_entry_hdr_t; typedef struct anh_frame_data_t { uint16_t frame_sleep; uint16_t frame_offset; } anh_frame_data_t; ... extern uint8_t *anh; anh_hdr_t *hdr = (anh_hdr_t*)anh; anh_entry_hdr_t *entry = (anh_entry_hdr_t*)(anh + sizeof(anh_hdr_t)); for (uint16_t u = 0; u < anh->anh_entries; u++) { uint8_t *p = (uint8_t*)entry; anh_frame_data_t *first_frame_data = (anh_frame_data_t*)(p + sizeof(anh_entry_hdr_t)); uint8_t *first_frame_bytes = p + (entry->total_frames * sizeof(anh_frame_data_t)); for (uint16_t k = 0; k < entry->total_frames; k++) { anh_frame_data_t *frame_data = first_frame_data + k; uint8_t *frame_bytes = first_frame_bytes + frame_data->frame_offset; ... } /* plus 2 bytes of padding */ p += (entry->entry_size + 2); entry = (anh_entry_hdr_t*)p; } 

рдПрдХ рдЕрд▓рдЧ рдлреНрд░реЗрдо рдПрдХ рдЪрд╛рд░-рдмрд╛рдЗрдЯ рд╣реЗрдбрд░ рд╕реЗ рдмрдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреА рд░реИрдЦрд┐рдХ рдЖрдпрд╛рдо рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╡рд┐рд╕реНрдерд╛рдкрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рдлреНрд░реЗрдо рдкрд┐рдХреНрд╕рд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рди рд▓рдВрдмрд╛рдИ рд╕реЗ рдореЗрд░реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ:


 typedef struct anh_frame_hdr { uint8_t bg_x_offt; uint8_t bg_y_offt; uint8_t frame_width; uint8_t frame_height; /* rle encoded frame bytes */ }; 

рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рдлреНрд░реЗрдо рдХрд╛ "рдУрд╡рд░рд▓реЗ" рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:


 extern uint8_t *level_bg; uint8_t frame_pix[8192]; anh_frame_hdr *hdr = (anh_frame_hdr*)frame_bytes; uint16_t frame_len = hdr->frame_width * hdr->frame_height; decode_rle(frame + sizeof(anh_frame_hdr), frame_len, frame_pix); /* 0xFB4E - some magic value, have no idea what is it */ uint16_t bg_offt = (hdr->bg_y_offt * 152) + hdr->bg_x_offt + 0xFB4E; uint16_t bg_skip = 152 - hdr->frame_width; uint8_t *p1 = frame_pix, *p2 = level_bg; for (uint16_t i = hdr->frame_height; i != 0; i--) { for (uint16_t j = hdr->frame_width; j != 0; j--) { *p2++ ^= *p1++; } p2 += bg_skip; } 

рдпрд╣ .ANH рдкреНрд░рд╛рд░реВрдк рд╣реИ , рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИ:


 typedef struct bg_animation_control_table_t { uint16_t total_frames; uint8_t *first_frame_data; uint8_t *first_frame_bytes; uint16_t sleep; uint16_t curr_frame; } bg_animation_control_table_t; 

рдЦреЗрд▓ рдореЗрдВ рд╣реА, рдЗрд╕ рддрд░рд╣ рдХреА рдХрдо рд╕реЗ рдХрдо рдЪрд╛рд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд▓реА .ANH рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдВрджрд░ рдХреЗ рдПрдирд┐рдореЗрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 extern uint8_t *anh; uint16_t g_anim_amount = 0; bg_animation_control_table_t g_anim_ctl[4]; ... anh_hdr_t *hdr = (anh_hdr_t*)anh; anh_entry_hdr_t *entry = (anh_entry_hdr_t*)(anh + sizeof(anh_hdr_t)); g_anim_amount = hdr->anh_entries; for (uint16_t u = 0; u < g_anim_amount; u++) { uint8_t *p = (uint8_t*)entry; g_anim_ctl[u].total_frames = entry->total_frames; g_anim_ctl[u].first_frame_data = p + sizeof(anh_entry_hdr_t); g_anim_ctl[u].first_frame_bytes = g_anim_ctl[u].first_frame_data + (entry->total_frames * sizeof(anh_frame_data_t)); g_anim_ctl[u].sleep = *(uint16_t*)(g_animation_control[u].first_frame_data); g_anim_ctl[u].curr_frame = 0; /* plus 2 bytes of padding */ p += (entry->entry_size + 2); entry = (anh_entry_hdr_t*)p; } 

рдЕрдВрдд рдореЗрдВ, рдПрдирд┐рдореЗрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдВ:


 for (uint16_t u = 0; u < g_anim_amount; u++) { bg_animation_control_table_t *anim = &g_anim_ctl[u]; if (anim->sleep-- == 0) { anh_frame_data_t *data = (anh_frame_data_t*)anim->first_frame_data + anim->curr_frame; /*    */ ... if (++anim->curr_frame == anim->total_frames) { anim->curr_frame = 0; data = (anh_frame_data_t*)anim->first_frame_data; } else { data++; } anim->sleep = data->frame_sleep; } } 

рдФрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ [рдЖрдк рд╕рдВрд╕рд╛рдзрди рджрд░реНрд╢рдХ рдореЗрдВ рдЕрдзрд┐рдХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ] :


R2.ANH.GIF

R6.ANH.GIF

рдЕрднреА рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдореБрджреНрджреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдореИрдВ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдПрдирд┐рдореЗрд╢рди рдЦреЗрд▓рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдЭрдВрдбреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЪреЗрдХ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рдПрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдФрд░ рджреВрд╕рд░рд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреБрдЫ рдПрдирд┐рдореЗрд╢рди рд╕реНрдХреНрд░реАрди рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдЪреВрдВрдХрд┐ рдлреНрд░реЗрдо "рдЭрдЧрдбрд╝реЗ" рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рд╣реИ, рддреЛ рдПрдХ рдЪрдХреНрд░реАрдп рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рд╕рд╛рде, рд╣рд░ рджреВрд╕рд░реЗ рд╕рд░реНрдХрд▓ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрд╕ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреИрд╕реЗ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:


R53.ANH.GIF

рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИред




рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рдЕрдЬреНрдЮрд╛рдд рд╡рд┐рдШрдЯрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╛рдж рд╣реИ? рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдмрдореБрд╢реНрдХрд┐рд▓ рдЬреБрдбрд╝рд╛ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рд╡рд┐рд░реА рдиреЗ рди рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ, рдмрд▓реНрдХрд┐ рдбрд┐рдХреЛрдбрд░ рдХрд╛ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рднреА рд▓рд┐рдЦрд╛ рд╣реИ, рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рднрдпрд╛рдирдХ рддреАрди-рд▓рд╛рдЗрди рдЯреБрдХрдбрд╝реЗ рдХреА рдЬрдЧрд╣ред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рд░реА рд╕реЗ рдХрд╛рдо рдкрд░ рдПрдХ рд▓рдШреБ рдирд┐рдмрдВрдз рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдЬреЛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рджреВрдВ, рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдХреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреНрдпреВрд░реЛрдореИрдВрд╕рд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╣рдлрд╝рдореИрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ рдЙрдкрд╕рд░реНрдЧ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХреЛрдбрд┐рдВрдЧ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ, рдПрдХ рдЪрд░-рд▓рдВрдмрд╛рдИ рд╢рдмреНрдж рд╡рд╛рд▓реЗ рдХреЛрдб рдФрд░ рдЬрд┐рди рдореЗрдВ рдХреЛрдИ рдХреЛрдбрд╡рд░реНрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрд╕рд░реНрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрджрд┐ рд╢рдмреНрдж "a" рдЙрдкрд╕рд░реНрдЧ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ "ab" рд╢рдмреНрдж рдХреЛрдб рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЧреБрдг рдЖрдкрдХреЛ рдРрд╕реЗ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рддреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рд╣рдлрд╝рдореИрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐, рд╕рдВрджреЗрд╢ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рдШрдЯрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рд╣рдо рдЪрд░ рд▓рдВрдмрд╛рдИ рдХреЗ рдХреЛрдб рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреА рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдШрдЯрдирд╛ рдХреА рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдЫреЛрдЯреЗ рдХреЛрдб рд╕реМрдВрдкреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╡рд╛рд▓реЗред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрд╖реНрдЯрддрдо рдХреЛрдб рдЯреНрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрджреЗрд╢ рдкреНрд░рддреАрдХ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рдкреНрдд рдХреЛрдб рдХреА рдЙрдкрд╕рд░реНрдЧ рд╕рдВрдкрддреНрддрд┐ рдЖрдкрдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╕рдВрджреЗрд╢ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред


Huffman.GIF

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЛрд╖ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╕рдВрджреЗрд╢ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдХреЛрдбрд░ рдХреЛ рдПрдирдХреЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдгреЛрдВ рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдПрдиреНрдХреЛрдбреЗрдб рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде, рдпрд╛ рддреЛ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдпрд╛ рдХреЛрдб рдЯреНрд░реА рд╕реНрд╡рдпрдВ (рдЧреЗрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рдХрд▓реНрдк) рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдВрдкреАрдбрд╝рди рдХреНрд╖рдорддрд╛ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред


рдЖрдк рдЗрд╕ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдкрдХреЗ рдбрд┐рдХреЛрдбрд░ рдФрд░ рдЧреЗрдо рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрддрд╛рддрд╛ рд╣реИ: viiri :


рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдкреВрд░рд╛ рдЦреЗрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди, рдЪрд╛рд▓ рдФрд░ рдЕрдиреБрдХреВрд▓рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред sub_1ff94 ( build_code_table ) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╣рдлрд╝рдореИрди рдкреЗрдбрд╝ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдПрдХ рд╕реНрдерд┐рд░ рд╣рдлрд╝рдореИрди (рдХрднреА-рдХрднреА рдЧрддрд┐рд╢реАрд▓ , рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ) рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░, рдПрдХ рдХреЛрдб рдЯреНрд░реА рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд░рд┐рддреНрд░ рдХреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдлрд╝рдореИрди рдХреЛрдб рдХреА рдореИрдкрд┐рдВрдЧ рд╣реИред рдпрд╣ рдкреЗрдбрд╝ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреИрдиреЛрдирд┐рдХрд▓ рдХреЛрдб ( MOAR ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдкреЗрдбрд╝ рдХреЛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рд╣реИ ( рдкреАрдХреЗрдЬрд┐рдк рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЗ рдЕрдкрд╕реНрдлреАрддрд┐ рд╕рдВрдкреАрдбрд╝рди рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдЧреЗрдо рдореЗрдВ рдХреИрдиреЛрдирд┐рдХрд▓ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реАрдзрд╛ рдЯреНрд░реА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ рдмрд┐рдЯ 0 рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдиреЛрдб рдПрдХ рдкрддреНрддреА рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдмрд┐рдЯ 1 рдпрджрд┐ рдиреЛрдб рдПрдХ рдкрддреНрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдЧрд▓реЗ 8 рдмрд┐рдЯреНрд╕ рд╡рд░реНрдг рдХреЛрдб рд╣реИрдВ рд╕рд╛рдЗрдЯред рдЬрдм рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рдорд╛рди рдЯреНрд░реА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЧреЗрдо рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИред

build_code_table
 build_code_table proc near call getbit ;     jb short loc_1FFA9 ;   ... shl dx, 1 inc bx call build_code_table ;  build_code_table    or dl, 1 call build_code_table ;  build_code_table    shr dx, 1 dec bx ret loc_1FFA9: call sub_1FFC2 ;      (8 ) ... ;     ret sub_1FF94 endp sub_1FFC2 proc near sub di, di mov ch, 8 loc_1FFC6: call getbit rcl di, 1 dec ch jnz short loc_1FFC6 retn sub_1FFC2 endp 

getbit ( sub_1ffd0 ) рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкрдврд╝рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдмрд┐рдЯреНрд╕ рдХреЛ 16-рдмрд┐рдЯ ax рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорд╛рди рдореЗрдореЛрд░реА рд╕реЗ lodsw рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдереЛрдбрд╝рд╛-рд╕рд╛ рдПрдВрдбрд┐рдпрди рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рд╣реИ, xchg рдЖрдзреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзрд╛рд░рд╛ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХрд╛ рдХреНрд░рдо рдХреБрдЫ рдЕрддрд╛рд░реНрдХрд┐рдХ рд╣реИ - рдкрд╣рд▓рд╛ рдХрдо рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╣реИред , shl , jb .

getbit
 getbit proc near or cl, cl jz short loc_1FFD9 dec cl shl ax, 1 retn loc_1FFD9: cmp si, 27B6h jz short loc_1FFE7 ;   lodsw xchg al, ah mov cl, 0Fh shl ax, 1 retn loc_1FFE7: call sub_202FC ;      lodsw xchg al, ah mov cl, 0Fh shl ax, 1 retn getbit endp 

viiri , :


huffman_decompress
 typedef struct node_t { uint8_t value; struct node_t *left, *right; } node_t; static uint8_t *g_src = NULL; static int getbits(int numbits) { ... } static uint32_t getl_le() { /*       4-    */ } static node_t* build_tree(void) { node_t *node = (node_t*)calloc(1, sizeof(node_t)); if (getbits(1)) { node->right = NULL; node->left = NULL; node->value = getbits(8); } else { node->right = build_tree(); node->left = build_tree(); node->value = 0; } return node; } int huffman_decompress(uint8_t *src, uint8_t *dst) { int length, i = 0; node_t *root, *node; g_src = src; length = getl_le(); node = root = build_tree(); while (i < length) { node = getbits(1) ? node->left : node->right; if (!node->left) { dst[i++] = node->value; node = root; } } ... } 

:


build_code_table . , , . , . , , , тАФ ( huffman_decompress ).

? ! ! , . ( ): . , 3- , N , (3 тАФ N) .

ABCD : A - 0b, B - 10b, C - 110b, D - 111b . ( ), , :


0 00b1A
10 0b2B
110 b3рд╕реА
111 b3D

, . , , , 010b тАФ . . , 'A' 0b , , . :


00 00b1A
10 01b1A
20 10b1A
30 11b1A
410 0b2B
510 1b2B
6110 b3рд╕реА
7111 b3D

, 011010111b :


  • : 011b ;
  • , 011b (3) , A , ;
  • 011b 1, , : 110b ;
  • , 110b (6) , , ;
  • , .

┬л┬╗ 8- . 256 . 8 . , , :


: тАФ , . , . 4 тАФ 32- .

, . .




, github . , , , - [ , README.md] .


, , 2015- :


  • LibNeuroRoutines (, MASM) тАФ , , . ( neuro_routines.h ) , . , :
    • ( huffman_decompression.c , decompression.c );
    • ( cp437.c );
    • ( dialog.c );
    • ( audio.c ).
  • NeuromancerWin64 () тАФ . . , ┬л┬╗ , , . CSFML ( SFML C ).
  • ResourceBrowser (C++) тАФ . MFC -, .DAT -. :
    • BMP (8bpp) ( IMH , PIC );
    • ( ANH );
    • WAV (PCM, 44100Hz, 8bps, mono) ( SOUND ).

LibNeuroRoutines . LibNeuroRoutines CSFML ( ResourceBrowser SFML ).


64- Windows . , LibNeuroRoutines 64- MASM (Microsoft Macro Assembler) . тАФ , 64- . , NASM FASM , , . VS 2015 тАФ MASM .


, . C . , ( , MFC ).


, . - , .




. ? , . , . - , . , , , . ().


  1. Make sound from the speaker using assembly
  2. Programming the PC Speaker
  3. PC Speaker
  4. Programmable Interval Timer
  5. Making C Sing
  6. Beyond Beep-Boop: Mastering the PC Speaker

Source: https://habr.com/ru/post/hi417639/


All Articles