рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░

Sega Mega Drive
рд▓рд┐рдП рдЦреЗрд▓реЛрдВ рдХреЛ рдЙрд▓рдЯрдиреЗ рдХреЗ рдореЗрд░реЗ рд╡реНрдпрд╛рдкрдХ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВрдиреЗ рдХрднреА рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд░реИрдХ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рд╡реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрдПред рд▓реЗрдХрд┐рди, рджреВрд╕рд░реЗ рджрд┐рди рдПрдХ рдордЬрд╝рд╛рдХрд┐рдпрд╛ рдХреНрд░реИрдХ рдерд╛ рдЬреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдирд┐рд░реНрдгрдп рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ ...
рд╡рд┐рд╡рд░рдг
рдЯрд╛рд╕реНрдХ рдФрд░ рд░рдо рдХрд╛ рд╡рд┐рд╡рд░рдг рдЦреБрдж рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕реВрдЪреА рд╣рд╛рдЗрдбреНрд░рд╛ рдХрд╣рддреА рд╣реИ, рд╕реЗрдЧрд╛ рдкрд░ рдЧреЗрдо рдбреАрдмрдЧ рдХрд░рдиреЗ рдФрд░ рдЙрд▓рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдХреЗ рдмреАрдЪ рдорд╛рдирдХ рдбреА рдлреИрдХреНрдЯреЛ рд╕реНрдордж рдЗрдбрд╛ рдЯреВрд▓реНрд╕ рд╣реИ ред рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ creme рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╣реИ:
- рдЗрдбрд╝рд╛ рдХреЗ рд▓рд┐рдП рд░рдо рд▓реЛрдбрд░
- рдбрд┐рдмрдЧрд░
- RAM / VDP рдореЗрдореЛрд░реА рджреЗрдЦреЗрдВ рдФрд░ рдмрджрд▓реЗрдВ
- VDP рдкрд░ рд▓рдЧрднрдЧ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
рд╣рдо рдЖрдИрдб рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рднреА рд╣реИ рдЙрд╕реЗ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд░реНрдгрдп
рдХрд┐рд╕реА рднреА рд╢реЛрдЧреА рдЧреЗрдо рдХреА рд╢реБрд░реВрдЖрдд Reset
рд╡реЗрдХреНрдЯрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рд╕реВрдЪрдХ рд░рдо рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рджреВрд╕рд░реЗ DWORD рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╣рдо рдкрддрд╛ 0x27A
рдкрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдЖрдЗрдпреЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рд╣реИред
sub_2EA ()

рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ VBLANK
рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ byte_FF0026
рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдХрд╣рд╛рдВ-рдХрд╣рд╛рдВ рдХреЙрд▓ рд╣реИрдВ:

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╢реВрдиреНрдп рдмрд┐рдЯ VBLANK
рд╡реНрдпрд╡рдзрд╛рди рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддреЛ рд╣рдо рдЪрд░ рдХреЛ vblank_ready
, рдФрд░ рдЬрд╣рд╛рдБ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рд╡рд╣ wait_for_vblank
ред
рдЙрдк_60 рдИ ()
рдЕрдЧрд▓рд╛, sub_60E
рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдпреЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рд╣реИ:

VDP_CTRL
рдХреЛ рдкрд╣рд▓рд╛ рдХрдорд╛рдВрдб рдХреНрдпрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, VDP
рдХрдВрдЯреНрд░реЛрд▓ рдХрдорд╛рдВрдб рд╣реИред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИ, рд╣рдо рдЗрд╕ рдХрдорд╛рдВрдб рдкрд░ рдЦрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ J
рдХреБрдВрдЬреА рджрдмрд╛рддреЗ рд╣реИрдВ:

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ CRAM
(рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдкрдЯреНрдЯрд┐рдпрд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ) рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдмрд╛рдж рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдмрд╕ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреИрд▓реЗрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдлрд╝рдВрдХреНрд╢рди рдХреЛ init_cram
рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдк_71A ()

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдХрдорд╛рдВрдб рдХреЛ рдлрд┐рд░ рд╕реЗ VDP_CTRL
рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ J
рджрдмрд╛рдПрдВ рдФрд░ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХрдорд╛рдВрдб рд╡реАрдбрд┐рдпреЛ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди load_vdp_data
ред
рдЙрдк_C60 ()
рд▓рдЧрднрдЧ рдпрд╣реА рдмрд╛рдд рдпрд╣рд╛рдБ рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, рд╣рдо рдмрд╕ load_vdp_data2
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдЙрдк_8рдбреАрдП ()
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдХреЛрдб рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд▓реЛ рд╡рд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ - sub_D08
ред
sub_D08 ()

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ D0
VDP_CTRL
рд▓рд┐рдП рдХрдорд╛рдВрдб D1
VDP_CTRL
- рдЬреЛ рдорд╛рди VRAM
рдореЗрдВ рднрд░реЗрдЧрд╛, рдФрд░ D2
рдФрд░ D3
- рднрд░рд╛рд╡ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреЛ рдЪрдХреНрд░реЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ: рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реА)ред Fill_vram_by_addr рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рдЙрдк_8рдбреАрдП ()
рд╣рдо рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред D0
рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдорд╛рди VDP_CTRL
рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ VDP_CTRL
, рдорд╛рди рдкрд░ J
рдХреБрдВрдЬреА рджрдмрд╛рдПрдБред рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:

рдлрд┐рд░ рд╕реЗ, рд╕реЗрдЧрд╛ рдХреЛ рдЧреЗрдо рдХреЛ рдЙрд▓рдЯрдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрдорд╛рдВрдб рдореИрдкрд┐рдВрдЧ рдЯрд╛рдЗрд▓реНрд╕ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред 90% рдорд╛рдорд▓реЛрдВ рдореЗрдВ $Fxxx
, $Exxx
, $Fxxx
, $Exxx
рдкрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрддреЗ, рдЗрди рд╕рдорд╛рди рдореИрдкрд┐рдВрдЧ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдкрддреЗ рд╣реЛрдВрдЧреЗред рдореИрдкрд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИрдВ:
рдпреЗ рд╡реЗ рдорд╛рди рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдпрд╣ рдпрд╛ рдЙрд╕ рдЯрд╛рдЗрд▓ рдХреЛ рдХрд╣рд╛рдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП (рдПрдХ рдЯрд╛рдЗрд▓ 8x8
рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рд╣реИ)ред
рдЗрд╕рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ init_tile_mappings
рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдк_рд╕реАрдбреАрд╕реА ()

рдкрд╣рд▓рд╛ рдХрдорд╛рдВрдб $F000
рдХреЗ рдкрддреЗ рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдиреЛрдЯ: " рдореИрдкрд┐рдВрдЧ " рдХреЗ рдкрддреЗ рдХреЗ рдмреАрдЪ, рдЕрднреА рднреА рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд╣рд╛рдВ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдЯреЗрдмрд▓ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ (рдпреЗ рдЙрдирдХреЗ рд╕реНрдерд╛рди рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЯрд╛рдЗрд▓ рдЖрджрд┐) рдпрд╣ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ init_other_mappings
ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЛ рдЪрд░ рдЖрд░рдВрдн рдХрд┐рдП рдЧрдП рд╣реИрдВ: word_FF000A
рдФрд░ word_FF000C
ред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ (рд╣рд╛рдВ, рд╡рд╣ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ) рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рдХреБрдЫ рджреЛ рдЪрд░ рдкрд╛рд╕ рдХреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╣реИрдВ рдФрд░ рдореИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рддреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЗрдд) рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЙрдиреНрд╣реЗрдВ sprite_pos_x
рдФрд░ sprite_pos_y
рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ sprite_pos_y
ред рддрдм рд╕реЗ x
рдФрд░ y
рдореЗрдВ рддреНрд░реБрдЯрд┐ y
рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рддрд╣рдд рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
VBLANK
рдЪреВрдВрдХрд┐ рд▓реВрдк рдХреЛрдб рдореЗрдВ рдЖрдЧреЗ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдореВрд▓ рдЖрд░рдВрднреАрдХрд░рдг рд╕рдорд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЕрдм рдЖрдк VBLANK
рд░реБрдХрд╛рд╡рдЯ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рджреЛ рдЪрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ (рдЬреЛ рдЕрдЬреАрдм рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдВрдХ рдХреА рд╕реВрдЪреА рдореЗрдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЦрд╛рд▓реА рд╣реИ)ред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐ рдлреНрд░реЗрдо рдПрдХ рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЙрдиреНрд╣реЗрдВ timer2
рдФрд░ timer2
рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, sub_2FE
рдлрд╝рдВрдХреНрд╢рди рдХреЛ sub_2FE
ред рдЖрдЗрдпреЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рд╣реИ:
sub_2FE ()

рдФрд░ рд╡рд╣рд╛рдВ - IO_CT1_DATA
рдкреЛрд░реНрдЯ (рдкрд╣рд▓реЗ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдкреЛрд░реНрдЯ рдПрдбреНрд░реЗрд╕ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ A0
рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ sub_310
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ sub_310
рд╣реИред рд╣рдо рд╡рд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВ:
рдЙрдк_310 ()

рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рджреЛ рдЪрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╣реИрдВ, рддреЛ рдПрдХ рд╕реНрдЯреЛрд░ pressed keys
, рдФрд░ рджреВрд╕рд░рд╛ held keys
рд░рдЦрддрд╛ held keys
, рдЕрд░реНрдерд╛рддред рдмрд╕ рджрдмрд╛рдпрд╛ рдФрд░ рдЪрд╛рдмреА рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ред рддреЛ рдЪрд▓рд┐рдП рдЗрди рдЪрд░реЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ: pressed_keys
рдФрд░ held_keys
ред рдФрд░ рдлрд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ update_joypad_state
рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
sub_2FE ()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ read_joypad
рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВред
рд╣реИрдВрдбрд▓рд░ рд▓реВрдк
рдЕрдм рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИ:

рддреЛ рдпрд╣ рдЪрдХреНрд░ рджрдмрд╛рдП рдЧрдП рдХреБрдВрдЬреА рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рд▓реВрдк рдореЗрдВ рдХрд╣реЗ рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдлрдВрдХреНрд╢рдВрд╕ рд╕реЗ рдЧреБрдЬрд░реЗрдВред
рдЙрдк_4 рдбреА 4 ()

рдмрд╣реБрдд рдХреЛрдб рд╣реИред рдЪрд▓рд┐рдП рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: sub_60C
ред
рдЙрдк_60 рд╕реА ()
рд╡рд╣ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ - рдРрд╕рд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдмрд╕ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯ рд░рд╣реА рд╣реИ rts
ред рд▓реЗрдХрд┐рди, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкрд░ рдХреЗрд╡рд▓ рдЬрдВрдк ( bsr
) рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ rts
рд╣рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рд▓реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред рдореИрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ retn_to_loop
ред
рдЙрдк_4 рдбреА 4 ()
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдХреЙрд▓ рдХреЛ word_FF000E
рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ word_FF000E
рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдХрд╛ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдкрд╣рд▓реЗ, рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмреАрдЪ рдереЛрдбрд╝реА рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред ( рдпрд╣ рд░рдо рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕ рдЪрд░ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реЛрдЧрд╛ )ред

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

рдпрджрд┐ рдХреБрдЫ рджрдмрд╛рдП рдЧрдП рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдЯреНрд╕ рд╕реЗрдЯ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреЛрдб рдЬрд╛рдВрдЪрддрд╛ рд╣реИред рдЖрдЗрдП рдЙрди рдкрд░ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рдЙрдк_D28 ()

рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╢реИрддрд╛рдиреА рдЬрд╛рджреВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, WORD
рдХреЛ word_FF0018
рдЪрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рд░реНрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
bsr.w *+4
рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд╡рд▓ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛ рдПрдХ рдФрд░ рдЬрд╛рджреВ рд╣реИ:
move.l d0,(sp) rts
рд░рдЬрд┐рд╕реНрдЯрд░ D0
рдореЗрдВ рдореВрд▓реНрдп рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рд╢реЛрдЧреА рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рдХреБрдЫ x86
, рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕реА рдкрддрд╛ рдЬрдм рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкрд╣рд▓рд╛ рдирд┐рд░реНрджреЗрд╢ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рдкрддрд╛ рдбрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреНрд░рдордг рдмрдирд╛рддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдЪрд╛рд▓ ред
рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдореЗрдВ рдпрд╣ рдорд╛рди рдХреНрдпрд╛ рд╣реИ, рдЬреЛ рддрдм рдЧреБрдЬрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдЗрд╕ рдЪрд░ рдХреЛ jmp_addr
ред
рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛:
sub_D38
: goto_to_d0
sub_D28
: jump_to_var_addr
jmp_addr
рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЪрд░ рдХрд╣рд╛рдВ рдЖрдмрд╛рдж рд╣реИред рд╣рдо рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦрддреЗ рд╣реИрдВ:

рдЗрд╕ рдЪрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЬрдЧрд╣ рд╣реИред рдЖрдЗрдП рдЙрд╕реЗ рджреЗрдЦреЗрдВред
рдЙрдк_3 рдП 4 ()

рдпрд╣рд╛рдВ, рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЗ рд╕рдордиреНрд╡рдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдЪрдпрдирд┐рдд рдЪрд░рд┐рддреНрд░ рдХрд╛ рдкрддрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ), рдпрд╣ рдпрд╛ рд╡рд╣ рдорд╛рди рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛрдб рджреЗрдЦрддреЗ рд╣реИрдВ:

рдореМрдЬреВрджрд╛ рдореВрд▓реНрдп рдХреЛ 4 рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдирдпрд╛ рдорд╛рди рдХрдо рдмрд╛рдЗрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рд╕реЗ рдЪрд░ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ jmp_addr
рдЪрд░ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХреБрдВрдЬреА рдЗрдирдкреБрдЯ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪрд░ рдХрд╛ рдЖрдХрд╛рд░ WORD
ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, sub_3A4
рдлрд╝рдВрдХреНрд╢рди рдХреЛ update_jmp_addr
рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдк_414 ()
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реВрдк рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдЪрд╛ рд╣реИ, рдЬреЛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдФрд░ рдЗрд╕реЗ sub_414
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдХреЛрдб update_jmp_addr
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ sub_45E
рдлрд╝рдВрдХреНрд╢рди sub_45E
ред рдЪрд▓реЛ рд╡рд╣рд╛рдБ рджреЗрдЦреЛред
рдЙрдк_45E ()

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдирдВрдмрд░ #$4B1E2003
D0
рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ VDP_CTRL
рдХреЛ рднреЗрдЬ рджрд┐рдпрд╛ VDP_CTRL
, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рджреВрд╕рд░реЗ VDP
рдирд┐рдпрдВрддреНрд░рдг рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо J
рджрдмрд╛рддреЗ рд╣реИрдВ, рд╣рдо $Cxxx
рдореИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рдХрдорд╛рдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рдХреЛрдб рдЪрд░ byte_FF0014
рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦреЗрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ 4
ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджрд░реНрдЬ рдХреА рдЧрдИ рд▓рдВрдмрд╛рдИ рдХреА рд╡рд░реНрддрдорд╛рди рд▓рдВрдмрд╛рдИ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рджреЗрдЦреЗрдВред
рдбрд┐рдмрдЧрд░ рдЪрд▓рд╛рдПрдВ
рдореИрдВ smd Smd Ida Tools
рд╕реЗ рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ Gens KMod рдпрд╛ Gens ReRecording рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреАред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрддреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рдореЗрд░реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рд╣реИред рддреЛ рдЪрд░ byte_FF0014
рдХреЛ рдЕрдм key_length
рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рдЪрд░ рд╣реИ: dword_FF0010
, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА, D0
рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдорд╛рдВрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж (рдпрд╛рдж рд░рдЦреЗрдВ, рдпрд╣ #$4B1E2003
рдирдВрдмрд░ рдерд╛), #$4B1E2003
рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред add_to_vdp_cmd
рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ рдЪрд░ рдХрд╛ рдирд╛рдо add_to_vdp_cmd
рд░рдЦрд╛ред
рддреЛ рдпрд╣ рдХрд╛рд░реНрдп рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рдореБрдЭреЗ рдПрдХ рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдкреНрд░рд╡реЗрд╢рд┐рдд рдЪрд░рд┐рддреНрд░ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреА рд╣реИред рдпрд╣ рдЬрд╛рдБрдЪрдирд╛ рд╕рд░рд▓ рд╣реИ - рдбрд┐рдмрдЧрд░ рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ рдФрд░ sub_45E
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рд░рд╛рдЬреНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдХреЗ рдмрд╛рдж:

рдореИрдВ рд╕рд╣реА рдерд╛ - рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдЪрд░рд┐рддреНрд░ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ do_draw_input_char
рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ ( sub_414
) рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди draw_input_char
ред
рдЕрдм рдХреНрдпрд╛
рдЖрдЗрдП рдЕрдм рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рдЪрд░ рдЬрд┐рд╕реЗ рд╣рдордиреЗ jmp_addr
рдХрд╣рд╛ рд╣реИ, jmp_addr
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд░реНрдЬ рдХреА рдЧрдИ рдХреБрдВрдЬреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╣реА Memory Watch
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреБрдорд╛рди рд╕рд╣реА рдерд╛ред рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ? рд╣рдо рдХрд┐рд╕реА рднреА рдкрддреЗ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреМрди рд╕рд╛? рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ, рд╕рднреА рдХреЛ рд╕рднреА рдХреЗ рдмрд╛рдж рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рддрдм рддрдХ рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛:

рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЖрдВрдЦ рдиреЗ $4E, $75
рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЕрд╕рдВрдмрджреНрдз рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдВрдд рдореЗрдВ рджреЗрдЦрд╛ред рдпрд╣ rts
рдЕрдиреБрджреЗрд╢ рдХрд╛ rts
, рдЕрд░реНрдерд╛рдд рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред рддреЛ рдпреЗ рдЕрд╕рдВрдмрджреНрдз рдмрд╛рдЗрдЯреНрд╕ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, C
рджрдмрд╛рдПрдВ:

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рд╣реИред рдХреЛрдб рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрд╕ рдкрд░ P
рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдирд╛рдо рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ: sub_D3C
рдлрд┐рд░ рд╡рд┐рдЪрд╛рд░ рдЙрдарддрд╛ рд╣реИ: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк sub_D3C
рдкрд░ sub_D3C
? рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рднреА рдХреВрдж рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ word_FF0020
рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдереЗред
рдлрд┐рд░ рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдпрд╛: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдПрдХ рдФрд░ рдРрд╕реЗ рдЕрдирд▓реЙрдХреНрдб рдХреЛрдб рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ? Binary search
рдбрд╛рдпрд▓реЙрдЧ (Alt + B) рдЦреЛрд▓реЗрдВ, рдЗрд╕рдореЗрдВ рдЕрдиреБрдХреНрд░рдо 4E 75
рджрд░реНрдЬ рдХрд░реЗрдВ, рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░реЗрдВ Find all occurrences
:

рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВред

рд░рдо рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рдФрд░ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдереЛрдбрд╝рд╛ рдКрдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдХреНрд░рдо рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВ? рд╣рд╛рдБ! P
рдмрд╛рдЗрдЯреНрд╕ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ P
:

рдХреВрд▓! рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ sub_34C
рдлрд╝рдВрдХреНрд╢рди рд╣реИред рд╣рдо рдкрд╛рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдВрддрд┐рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ ... рд╣рдореЗрдВ рдПрдХ рдмрдорд░ рдорд┐рд▓рддрд╛ рд╣реИред 4E 75
рд╕реЗ рдкрд╣рд▓реЗ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛рдБ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдФрд░, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдмрд╛рдЗрдЯреНрд╕ рдХреЛрдб рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдмрд╛рдЗрдЯреНрд╕ред
рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдвреВрдВрдврдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ:
- рд╣рдо рдбреЗрдЯрд╛ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдХреЛрдб рд╕реЗ рдЙрдирдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛)
- рд╣рдо рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЪрдХреНрд░ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗ
- рд╕рд░рдгреА рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ
рддреЛ, рд╣рдо рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ ...:

... рдФрд░ рд╣рдо рддреБрд░рдВрдд рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд░рдгреА рд╕реЗ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ 4 рдмрд╛рдЗрдЯреНрд╕ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдмрд╛рд░ (рдХреНрдпреЛрдВрдХрд┐ move.l
) рд╕реЗ VDP_DATA
ред рдЖрдЧреЗ рд╣рдо 2047
рдирдВрдмрд░ рджреЗрдЦрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд░рдгреА рдХрд╛ рдЕрдВрддрд┐рдо рдЖрдХрд╛рд░ 2047 * 4
, рд▓реЗрдХрд┐рди dbf
рдЖрдзрд╛рд░рд┐рдд рд▓реВрдк +1
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдЕрдзрд┐рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд┐рдо рддреБрд▓рдирд╛ рдореВрд▓реНрдп 0
рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ -1
ред
рдХреБрд▓: рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ 2048 * 4 = 8192
ред рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдЯ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, *
рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:

рд╣рдо рд╕рд░рдгреА рдХреЗ рдЕрдВрдд рдореЗрдВ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рдмрд╛рдЗрдЯреНрд╕ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдХреЛрдб рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ:


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ sub_2D86
рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ рдЗрд╕ рджрд░рд╛рд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдм рдХреБрдЫ рд╣реИ! рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдирд╡рдирд┐рд░реНрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред
sub_2D86 ()
рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рд░рдЬрд┐рд╕реНрдЯрд░ D1
рдореЗрдВ рдореВрд▓реНрдп #$4147
рдбрд╛рд▓рддрд╛ рд╣реИ рдФрд░ sub_34C
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реЗ рджреЗрдЦ рд▓реЛред
рдЙрдк_34 рд╕реА ()

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдБ word_FF0020
рдЪрд░ рдХрд╛ рдореВрд▓реНрдп word_FF0020
ред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдЕрдиреНрдп рд╕реНрдерд╛рди рджреЗрдЦреЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рдЗрд╕ рдЪрд░ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдареАрдХ рдЙрд╕реА рдЬрдЧрд╣ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдореИрдВ jmp_addr
рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреВрджрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣ рдХреВрдмрдбрд╝ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ sub_D3C
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ sub_D3C
рдкрд░ рдХреВрджрдиреЗ рдХреА sub_D3C
ред
рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдЬреЛ рд╣реБрдЖ рд╡рд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд░рдо рдХреЛ GHIDRA рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдкрд╛рдпрд╛, рдФрд░ рд╡рд┐рдШрдЯрд┐рдд рдХреЛрдб рдХреЛ рджреЗрдЦрд╛:
void FUN_0000034c(void) { ushort in_D1w; short sVar1; ushort *puVar2; if (((ushort)(in_D1w ^ DAT_00ff0020 ^ 0x5e4e) == 0x5a5a) && ((ushort)(in_D1w ^ DAT_00ff0020 ^ 0x4a44) == 0x4e50)) { write_volatile_4(0xc00004,0x4c060003); sVar1 = 0x22; puVar2 = &DAT_00002d94; do { write_volatile_2(VDP_DATA,in_D1w ^ DAT_00ff0020 ^ *puVar2); sVar1 = sVar1 + -1; puVar2 = puVar2 + 1; } while (sVar1 != -1); } return; }
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЬреАрдм рдирд╛рдо in_D1w
рд╕рд╛рде рдЪрд░ in_D1w
, рдФрд░ рдЪрд░ DAT_00ff0020
рднреА рд╣реИ, рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде word_FF0020
рдЙрд▓реНрд▓рд┐рдЦрд┐рдд word_FF0020
рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ word_FF0020
ред
in_D1w
рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рди рд░рдЬрд┐рд╕реНрдЯрд░ D1
рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рдЫреЛрдЯреЗ WORD рдЖрдзреЗ рд╕реЗ, рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ D1
рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред #$4147
рдпрд╛рдж рд╣реИ? рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдШрдЯрд┐рдд рдХреЛрдб рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ Edit Function Signature
рдореЗрдиреВ рдХрд╛ рдЪрдпрди Edit Function Signature
:

рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╡рд░реНрддрдорд╛рди рдХреЙрд▓ рдХрдиреНрд╡реЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдЖрдкрдХреЛ Use Custom Storage
рдХрд╛ Use Custom Storage
рдХрд░рдиреЗ рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

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

рд╡рд┐рдШрдЯрд┐рдд рдХреЛрдб рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ in_D1w
ushort
рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЯрд╛рдЗрдк рдлрд╝реАрд▓реНрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗред рдлрд┐рд░ Add
рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

рдПрдХ рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рд╣рдореЗрдВ Location
рдореЗрдВ D1w
рд░рдЬрд┐рд╕реНрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ OK
рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

рд╡рд┐рдШрдЯрд┐рдд рдХреЛрдб рд░реВрдк рд▓реЗрдЧрд╛:
void FUN_0000034c(ushort param_1) { short sVar1; ushort *puVar2; if (((ushort)(param_1 ^ DAT_00ff0020 ^ 0x5e4e) == 0x5a5a) && ((ushort)(param_1 ^ DAT_00ff0020 ^ 0x4a44) == 0x4e50)) { write_volatile_4(0xc00004,0x4c060003); sVar1 = 0x22; puVar2 = &DAT_00002d94; do { write_volatile_2(VDP_DATA,param_1 ^ DAT_00ff0020 ^ *puVar2); sVar1 = sVar1 + -1; puVar2 = puVar2 + 1; } while (sVar1 != -1); } return; }
рд╣рдо param_1
рдХрд┐ рд╣рдорд╛рд░рд╛ param_1
рдорд╛рди рд╕реНрдерд┐рд░ рд╣реИ, рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ #$4147
рдмрд░рд╛рдмрд░ рд╣реИред рддреЛ рдлрд┐рд░ DAT_00ff0020
рдХрд╛ рдорд╛рди рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ:
0x4147 ^ DAT_00ff0020 ^ 0x5e4e = 0x5a5a 0x4147 ^ DAT_00ff0020 ^ 0x4a44 = 0x4e50
рдХреНрдпреЛрдВрдХрд┐ xor
- рдСрдкрд░реЗрд╢рди рдкреНрд░рддрд┐рд╡рд░реНрддреА рд╣реИ, рд╕рднреА рд╕реНрдерд┐рд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЭрдЧрдбрд╝рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЪрд░ DAT_00ff0020
рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
DAT_00ff0020 = 0x4147 ^ 0x5e4e ^ 0x5a5a = 0x4553 DAT_00ff0020 = 0x4147 ^ 0x4a44 ^ 0x4e50 = 0x4553
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЪрд░ рдХрд╛ рдорд╛рди 0x4553
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕реА рдЬрдЧрд╣ рджреЗрдЦреА рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ ...

рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдирд┐рд░реНрдгрдп
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдкрд╣реБрдВрдЪреЗ:
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдбреНрд░реЗрд╕
0x0D3C
, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб 0D3C
- рдлрд╝рдВрдХреНрд╢рди рдкрд░
0x2D86
, рдЬреЛ #$4147
рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП D1
рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб 2D86
рджрд░реНрдЬ рдХрд░рдирд╛ 2D86
рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдЙрд╕ рдХреБрдВрдЬреА рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рджрд░реНрдЬ рдХреА рдЧрдИ рдХреБрдВрдЬреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрдмрд╛рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: B
рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

рдзрдиреНрдпрд╡рд╛рдж!