;----------------------------------------------------------------------------
;   -86
;  :
; http://code.google.com/p/radio86/wiki/MonitorDisassembled
;    :
; 2500 A.D. 8085 Macro Assembler  -  Version 4.01a
;----------------------------------------------------------------------------

;----------------------------------------------------------------------------
;    

;  58055 D20 ()
port_A_kbd			.equ	8000h		;  A 
port_B_kbd			.equ	8001h		;  B 
port_C_kbd			.equ	8002h		;  C 
contr_reg_kbd		.equ	8003h		;    

;  58055 D14
port_A_D14			.equ	0A000h		;  A D14
port_B_D14			.equ	0A001h		;  B D14
port_C_D14			.equ	0A002h		;  C D14
contr_reg_D14		.equ	0A003h		;    D14
 
;   58075
parametrs_VG75		.equ	0C000h		;  
control_VG75		.equ	0C001h		;   ( )
status_VG75			.equ	0C001h		;   ( )

;   58057
addr_ch2_VT57		.equ	0E004h		;    2
contr_ch2_VT57		.equ	0E005h		;    2
mode_VT57			.equ	0E008h		;    
 
;----------------------------------------------------------------------------
;  
n_byte_of_vmem		.equ	(78*30)		;     
RST_6_addr			.equ	30h			;     RST 6 
sinc_byte			.equ	0E6h		;     
st_const_read		.equ	2Ah			;     .
st_const_write		.equ	1Dh			;     .
kb_click			.equ    5003h		;    
beep				.equ	5F0h		;  
first_kb_delay		.equ	224			;    
stndr_kb_delay		.equ	64			;    
bounce				.equ	21			;   
										;   
;----------------------------------------------------------------------------

;----------------------------------------------------------------------------
;         
;   (   ).
;----------------------------------------------------------------------------
;       16					
; monitor_area:		.equ	3600h
;----------------------------------------------------------------------------
;       32					
monitor_area:		.equ	7600h

;----------------------------------------------------------------------------
;    

memory_top			.equ	monitor_area-1		;    
cursor_addr			.equ	monitor_area+0		;  ,   		
cursor_xy			.equ	monitor_area+2		;   .-y .-x
AR2_seq				.equ	monitor_area+4		;    2 
pressed_key			.equ	monitor_area+5		; ff -  , 0 -  
ruslat_flag			.equ	monitor_area+6		;  / 0 - , ff - 
keyboard_context	.equ	monitor_area+9		;   -  
												;   -  
released			.equ	monitor_area+0Bh	; ,      
temp_sp				.equ	monitor_area+0Dh	;    
PC_storage			.equ	monitor_area+14h	;     
HL_storage			.equ	monitor_area+16h	;   HL
BC_storage			.equ	monitor_area+18h	;   BC
DE_storage			.equ	monitor_area+1Ah	;   DE
SP_storage			.equ	monitor_area+1Ch	;   SP
AF_storage			.equ	monitor_area+1Eh	;   A  PSW
stop_addr			.equ	monitor_area+23h	;    
byte_in_stop_adr	.equ	monitor_area+25h	;    
jump_to_go			.equ	monitor_area+26h	;  JMP (0C3h)   G
one_parametr		.equ    monitor_area+27h	;    					
two_parametr		.equ    monitor_area+29h	;    					
three_parametr		.equ    monitor_area+2Bh	;    
two_par_present		.equ	monitor_area+2Dh	;    = ff
data_sign			.equ	monitor_area+2Eh	;     					
read_const_mag		.equ	monitor_area+2Fh	;    
write_const_mag		.equ	monitor_area+30h	;    
memlim				.equ	monitor_area+31h	;     
kbd_buf				.equ	monitor_area+33h	;    32 
monitor_area_end	.equ	monitor_area+5Fh	;   
stack_bott			.equ	monitor_area+0CFh	;  
vid_mem				.equ	monitor_area+0D0h	;  
end_vid_mem			.equ	vid_mem+n_byte_of_vmem	;  

;----------------------------------------------------------------------------
;         ,
;      .    
;     -86    2  
;  ""   (start)  
nowhere:			.equ	0F000h
;    -86  ,    0E000h (8)
;     .

;----------------------------------------------------------------------------
					.org	0F800h

;----------------------------------------------------------------------------
; ""   
start:				jmp		entry_start
					
;----------------------------------------------------------------------------
;   
getc:				jmp		entry_getc
inpb:				jmp		entry_inpb
putc:				jmp		entry_putc
outb:				jmp		entry_outb
temp:				jmp		entry_putc
kbhit:				jmp		entry_kbhit
hexb:				jmp		entry_hexb
puts:				jmp		entry_puts
scan_kbd:			jmp		entry_scan_kbd
getxy:				jmp		entry_getxy
curc:				jmp		entry_curc
inpblock:			jmp		entry_inpblock
outblock:			jmp		entry_outblock
chksum:				jmp		entry_chksum
video:				jmp		entry_video
getlim:				jmp		entry_getlim
setlim:				jmp		entry_setlim

;----------------------------------------------------------------------------
;   ( )
entry_start:		mvi		a,8Ah		;   
					sta		contr_reg_kbd

;   
					lxi		sp,stack_bott

;     
;      ,      
					call	entry_video

;     
					lxi		h,monitor_area
					lxi		d,monitor_area_end
					mvi		c,0
					call	run_F_command ;   HL  DE   C

					lxi		h,stack_bott
					shld	SP_storage

;      "-86"
					lxi		h,Radio
					call	entry_puts

;     
					call	entry_video

;     
					lxi		h,memory_top
					shld	memlim

;        
;   
					lxi		h, (st_const_write.shl.8)+st_const_read
					shld	read_const_mag
					
;    JMP   G
					mvi		a,0C3h
					sta		jump_to_go

;----------------------------------------------------------------------------
;    ( )
prompt_loop:
					lxi		sp,stack_bott		;   

					lxi		h,Prompt
					call	entry_puts		;     -->
;  ,     /  A   0 
					sta		port_C_kbd		;   0   C 
					dcr		a				;   A FFh 
					sta		port_C_D14		;   1   C  

;----------------------------------------------------------------------------
;   
;     
;----------------------------------------------------------------------------
					call	input_string
					lxi		h,prompt_loop
					push	h
					lxi		h,kbd_buf		;       
					mov		a,m				;    A

;    
					cpi		'X'				;      
					jz		print_regs		; ?  ,   

					cpi		'U'				;    (?)  ,  
					jz		nowhere			;   

;  3  : 1 -> HL, 2 -> DE, 3 -> BC
;   ,    = 0
					push	psw
					call	parser_param	;  
					lhld	three_parametr	;   
					mov		c,l				;  BC
					mov		b,h
					lhld	two_parametr	;  
					xchg					;  DE
					lhld	one_parametr	;    HL
					pop		psw

;----------------------------------------------------------------------------
;   
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;  D (Dump).      
					cpi		'D'
					jz		run_D_command

;----------------------------------------------------------------------------
;  C (Compare).    
					cpi		'C'
					jz		run_C_command

;----------------------------------------------------------------------------
;  F (Fill).   
					cpi		'F'
					jz		run_F_command
					
;----------------------------------------------------------------------------
;  S (Search).     
					cpi		'S'
					jz		run_S_command

;----------------------------------------------------------------------------
;  T (Transfer).   
					cpi		'T'
					jz		run_T_command

;----------------------------------------------------------------------------
;  M (Modify).   
					cpi		'M'
					jz		run_M_command

;----------------------------------------------------------------------------
;  G (Go).     
					cpi		'G'
					jz		run_G_command

;----------------------------------------------------------------------------
;  I (Input).    
					cpi		'I'
					jz		run_I_command

;----------------------------------------------------------------------------
;  O (Output).    
					cpi		'O'
					jz		run_O_command

;----------------------------------------------------------------------------
;  L (literal).      
					cpi		'L'
					jz		run_L_command

;----------------------------------------------------------------------------
;  R (Read).    ROM   
					cpi		'R'
					jz		run_R_command

;----------------------------------------------------------------------------
;  .    
					jmp		nowhere


;----------------------------------------------------------------------------
;     
;----------------------------------------------------------------------------
back_kbd_buf:
					mvi		a,<kbd_buf		;   
											;   .
					cmp		l				;    ,	
					jz		input_next		;    .
					push	h
					lxi		h,BackClr		;  
					call	entry_puts		; .
					pop		h
					dcx		h				; 
					jmp		kbd_buf_loop

;----------------------------------------------------------------------------
;    .
;   31      .
;   :
;       [<-]  [] -   
;               [.] -   
;              [] -    /  
;----------------------------------------------------------------------------
input_string:
					lxi		h,kbd_buf		;     
input_next:
					mvi		b,0				;    (?)
kbd_buf_loop:
					call	entry_getc		;    
					cpi		8				;   <- ?
					jz		back_kbd_buf	;  ,    
					cpi		7Fh				;    ?
					jz		back_kbd_buf	;  ,    
					cnz		putc_fromA		;    
					mov		m,a				;    
					cpi		0Dh				;    ?
					jz		out_of_loop		;  
					cpi		'.'				;  ?
					jz		prompt_loop		;   
					mvi		b,0FFh
					mvi		a,<kbd_buf+1Fh	;   
					cmp		l				; 
					jz		fail_exit		;  ,   
					inx		h				;  
					jmp		kbd_buf_loop	;  
out_of_loop:
					mov		a,b				;
					ral
					lxi		d,kbd_buf		; DE -  
					mvi		b,0				; 
					ret
					
;----------------------------------------------------------------------------
;    .
;	     HL.
;	   
;----------------------------------------------------------------------------
entry_puts:
					mov		a,m				;    A
					ana		a				;   ?
					rz						;  ,  .
					call	putc_fromA		;  ,    ,
					inx		h				;    
					jmp		entry_puts		;  .

;----------------------------------------------------------------------------
;    
parser_param:
					lxi		h,one_parametr		;   
					lxi		d,one_parametr+(2*3)
					mvi		c,0
					call	run_F_command
					lxi		d,kbd_buf+1			;    
					call	str_to_parametr		;   
					shld	one_parametr		;    
					shld	two_parametr		;  
					rc							;   ,  
					
;      .
;      = 0,   ,
;        					
					mvi		a,0FFh				;     
					sta		two_par_present		;   . 
					call	str_to_parametr		;   
					shld	two_parametr		;  
					rc							;    ,  
					
					call	str_to_parametr		;   
					shld	three_parametr		;  
					rc							;    ,  
					
					jmp		fail_exit			;     ,  

;----------------------------------------------------------------------------
;    hex  ()    DE.
;	  HL.
;    C =0   
;			C =1    
;----------------------------------------------------------------------------
str_to_parametr:
					lxi		h,0			;    = 0
next_char:
					ldax	d			;    
					inx		d			;    

					cpi		0Dh			;  [],  
					jz		idle_exit	;  

					cpi		','			;  , 
					rz					;  

					cpi		' '			;   
					jz		next_char	; 
					
					sui		'0'			;     ,
					jm		fail_exit	;   < 30h,  
					cpi		0Ah			;   < 10,
					jm		add_char	;  

					cpi		11h			;   < 41h (A),
					jm		fail_exit	;  ,
					cpi		17h			;  > 47h (F),
					jp		fail_exit	;  .
					sui		7			;   A - F

;     
add_char:
					mov		c,a			;     C
					dad		h			;  x 16
					dad		h
					dad		h
					dad		h
					jc		fail_exit	;   ,  
					dad	b				;   
					jmp		next_char	;   

;    
idle_exit:
					stc				;   
					ret


;----------------------------------------------------------------------------
;    HL  DE
;	   ,    Z
;----------------------------------------------------------------------------
cmp_hl_de:
					mov		a,h
					cmp		d
					rnz
					mov		a,l
					cmp		e
					ret

;----------------------------------------------------------------------------
;     +    [F4].
;----------------------------------------------------------------------------
end_of_adr_or_F4:	call	press_F4	;   F4

;----------------------------------------------------------------------------
;    .
;	       HL    BC.
;	   ,   HL  .
;	 ,      
;----------------------------------------------------------------------------
cmp_hl_de_loop:
					call	cmp_hl_de	;  HL  DE
					jnz		end_of_oper
pre_adr_return:
					inx		sp			;    
					inx		sp			;    
					ret
end_of_oper:
					inx		h			;    
					ret
					
;----------------------------------------------------------------------------
;    .
;	        .
;	         
;	 [/],     .
;	  [F4]  ,     .
;	 ,        .
;----------------------------------------------------------------------------
press_F4:			call	entry_scan_kbd	;    
					cpi		3				;   [F4]?
					rnz						;  ,   
					call	entry_video		;  ,  
											; ,
					jmp		fail_exit		;      
											; .
											
;----------------------------------------------------------------------------
;      .
;	         
;----------------------------------------------------------------------------
next_line_and_offset:
					push	h
					lxi		h,offset_
					call	entry_puts
					pop		h
					ret
					
;----------------------------------------------------------------------------
;      HL     hex  + 
;----------------------------------------------------------------------------
hexb_m_and_space:	mov		a,m 

;     hex  + 
hex_byte_and_space:
					push	b
					call	entry_hexb
					mvi		a,' '
					call	putc_fromA
					pop b
					ret

;----------------------------------------------------------------------------
;   D .
;	      
;	     16  
;             4-
;	 .     
;	  2-  ,    ..
;	 16 .    16    
;	    .
;	      0    .
;----------------------------------------------------------------------------
run_D_command:
					call	type_addr_from_HL

D_command_loop:		call	hexb_m_and_space
					call	end_of_adr_or_F4
					mov		a,l
					ani		0Fh
					jz		run_D_command
					jmp		D_command_loop


;----------------------------------------------------------------------------
;   C .
;	       
;	        ,
;	     1    ,  
;	    .     .
;	       .   
;	   ,     ,
;	    .  
; 
;----------------------------------------------------------------------------
run_C_command:
					ldax	b					;       A
					cmp		m					;      
					jz		byte_equal			;  ,    
					call	type_addr_from_HL	;      
					call	hexb_m_and_space	; 
					ldax	b
					call	hex_byte_and_space

byte_equal:			inx		b
					call	end_of_adr_or_F4
					jmp		run_C_command

;----------------------------------------------------------------------------
;   F .
;	      ,
;	       
;	   
;  
;----------------------------------------------------------------------------
run_F_command:
					mov		m,c
					call	cmp_hl_de_loop
					jmp		run_F_command

;----------------------------------------------------------------------------
;   S .
;	          
;	      .     
;	.         
;	.      
;----------------------------------------------------------------------------
run_S_command:
					mov		a,c			;    A
					cmp		m
					cz		type_addr_from_HL		;  
					call	end_of_adr_or_F4
					jmp		run_S_command
					
;----------------------------------------------------------------------------
;   T .
;	      
;	        . 
;	    1.    
;	     
;----------------------------------------------------------------------------
run_T_command:
					mov		a,m			;   
					stax	b				; 
					inx		b
					call	cmp_hl_de_loop	;   
					jmp		run_T_command
					
;----------------------------------------------------------------------------
;   L .
;	       .
;	      ,  
;	 16     .  
;	 .
;----------------------------------------------------------------------------
run_L_command:		call	type_addr_from_HL	;     
												;    .

next_literal:		mov		a,m					;    A.
					ora		a					;    7Fh 
					jm		type_dot			;   .
					cpi		' '					;    < 20h
					jnc		type_literal		; ,  
												;   .
type_dot:			mvi		a,'.'				;   A  

type_literal:		call	putc_fromA			;    .
					call	end_of_adr_or_F4
					mov		a,l
					ani		0Fh
					jz		run_L_command
					jmp		next_literal


;----------------------------------------------------------------------------
;   M .
;	          
;	   .    .
;	       .
;	      [].    
;	 ..     ,    [.].
;	        
;----------------------------------------------------------------------------
run_M_command:
					call	type_addr_from_HL	;     .
					call	hexb_m_and_space	;   .
					push	h
					call	input_string		;   .
					pop		h
					jnc		next_addr
					
					push	h					;    ,
					call	str_to_parametr		;    HL,
					mov		a,l					;   A
					pop		h
					mov		m,a					;   .

next_addr:			inx		h					;   
					jmp		run_M_command		; .

					
;----------------------------------------------------------------------------
;   G .
;         .
;          ,
;       .   
;     .    
;     ""   (prompt_loop). 
;----------------------------------------------------------------------------
;       ,  
;   .   ,   
;     (   X) 
;      ( ).
;      ( ),    
;    RST 6,   
;    0030h.    
;  JMP return_address.    
;   (. )     
;  (   X)      
;   ""   (prompt_loop).
run_G_command:
					call	cmp_hl_de			;     ?
					jz		no_stop_addr		;  ,  
;       0030h					
					xchg						;    HL
					shld	stop_addr			;     
					mov		a,m					;     
					sta		byte_in_stop_adr	;      
					mvi		m,0F7h				;   RST 6   
					mvi		a,0C3h				;   JMP
					sta		RST_6_addr			;   0030h
					lxi		h,return_address	;   
					shld	RST_6_addr+1		;   
;      .
;     "" JMP (jump_to_go)    
no_stop_addr:
					lxi		sp,BC_storage		;  
					pop		b					;  
					pop		d					; 
					pop		h					; SP   HL
					pop		psw
					sphl						;  SP
					lhld	HL_storage			;  HL
					jmp		jump_to_go			;  


;----------------------------------------------------------------------------
;   R .
;	         D14.
;	     A.      B  C.
;	         
;	,      .  
;	    .
;----------------------------------------------------------------------------
run_R_command:
					mvi		a,90h			;   D14
					sta		contr_reg_D14	;  A  , B,C  .

read_loop:
					shld	port_B_D14		;    .
					lda		port_A_D14		;    A.
					stax	b				;      .
					inx		b				;   .  
					call	cmp_hl_de_loop	;   .
					jmp		read_loop		;   ,  .

;----------------------------------------------------------------------------
;     HL
;----------------------------------------------------------------------------
entry_getxy:		lhld	cursor_xy		;    
					ret						;  
;----------------------------------------------------------------------------
;   ()       A.
;          ,   
;   .
;----------------------------------------------------------------------------
entry_curc:
					push	h				;   , 
					lhld	cursor_addr		;   
					mov		a,m				;   
					pop		h				;  
					ret

;----------------------------------------------------------------------------
;   I .
;	     .   
;	      .
;	       .
;----------------------------------------------------------------------------
run_I_command:
					lda		two_par_present		;    
					ora		a					; .
					jz		no_change_cr		;  0,    .
					mov		a,e			 		;   0,  
					sta		read_const_mag				;  .

no_change_cr:		call	entry_inpblock		;    
					call	type_addr_from_HL	;   
					xchg
					call	type_addr_from_HL	;     DE
					xchg
					push	b
					call	entry_chksum		;   
					mov		h,b					;    HL
					mov		l,c
					call	type_addr_from_HL	;     
					pop		d					;    DE
					call	cmp_hl_de			;    
					rz							;  ,  ,
					xchg						;   , 
					call	type_addr_from_HL	;   
												;    ,
												;   .
;----------------------------------------------------------------------------
;     
fail_exit:
					mvi		a,'?'				;   
					call	putc_fromA			;  
					jmp		prompt_loop			;    

					
;----------------------------------------------------------------------------
;     .
;          : HL - 
;         : HL -  
;                         DE -  
;                         BC -    
;     ,  
; 'O' .    :
;      - 
;      - 
;      -  
;      -  
;      -   (N )
;      - 
;      - 
;      -   2 
;        .
;----------------------------------------------------------------------------
entry_inpblock:
					mvi		a,0FFh				;   
					call	input_W_BC			;     BC
					push	h
					dad		b					;  
												;     
					xchg						; DE
					call	input_W_BC_nosinc	;   
					pop		h					;  
					dad		b					;  
					xchg						;   
					push	h					;     
					call	input_array			;   
					mvi		a,0FFh				;   
					call	input_W_BC			;     BC
					pop		h					;   


;----------------------------------------------------------------------------
;    
;----------------------------------------------------------------------------
entry_video:
					push	h
;    75
					lxi		h,control_VG75		;     HL
					mvi		m,0					;   Reset
					dcx		h					;  :
					mvi		m,78-1				; 78   ,
					mvi		m,30-1				; 30   ,
;   : 10 
;    10  (1     )
					mvi		m,((10-1).shl.4)^(10-1)
;   : 0 -    
;  :  
;  :  
;     : 8  (6 ) 
					mvi		m,(1.shl.7)^(1.shl.4)^((8/2)-1)
;       :
;    : 7 
;     : 8					
					inx		h
					mvi		m,(1.shl.5)^(((7+1)/8).shl.2)^(3)
					mov		a,m					; (?)
;      .
;      75
;  IR         .
;             
wait_beg_of_frame:
					mov		a,m					;    75
					ani		20h					;   IR
					jz		wait_beg_of_frame	;  ,   
;   IR ,    
;    57
;     2      .
;      3. 					
;         (
;     )     
; 2     
					lxi		h,mode_VT57			;   
					mvi		m,80h				;   
;   2  					
;    :   
					mvi		l,<addr_ch2_VT57
					mvi		m,<vid_mem
					mvi		m,>vid_mem
;    
;  :   
					inr		l
					mvi		m,<(n_byte_of_vmem-1)
					mvi		m,40h^>(n_byte_of_vmem-1)
;     :
;        .
;        .
;         2.					
					mvi		l,<mode_VT57
					mvi		m,0A4h

					pop		h					;  HL
					ret							;  

;----------------------------------------------------------------------------
;  16-   BC  
;----------------------------------------------------------------------------
input_W_BC_nosinc:							;  
					mvi		a,8				;   
					
;      ,
;   A    0FFh		
input_W_BC:			call	entry_inpb		;   
					mov		b,a				
					mvi		a,8
					call	entry_inpb		;   
					mov		c,a
					ret
					
					
;----------------------------------------------------------------------------
;     
;      : HL -   ,
;                     DE -   . 
;----------------------------------------------------------------------------
input_array:								;  
					mvi		a,8				;   
					call	entry_inpb		;   
					mov		m,a				;    
					call	cmp_hl_de_loop	;  HL 
											;   HL=DE
											;  ,  
					jmp		input_array		;   
				
				
;----------------------------------------------------------------------------
;   
;       : HL -   ,
;                      DE -   . 
;      : BC -   
;  :
;       :      .
;       :   ,   + 
;                      
;----------------------------------------------------------------------------
entry_chksum:
					lxi		b,0				;    
											; 
checksum_loop:
;   
					mov		a,m				;     A 
					add		c				;   
					mov		c,a				;    C
					push	psw				;   
					call	cmp_hl_de		;   ?
					jz		pre_adr_return	;  ,   psw  
					pop		psw				;   
;    
					mov		a,b				;    A
					adc		m				;   
											;  +   
					mov		b,a				;   B
					call	cmp_hl_de_loop	;   
											;  ,    /
											;   ,   HL
					jmp		checksum_loop	;   
					
					
;----------------------------------------------------------------------------
;   O .
;	     ,    
;	  ,      .  
;	      .
;----------------------------------------------------------------------------
run_O_command:		mov		a,c					;     
					ora		a
					jz		no_change_cw		;  ,   
					sta		write_const_mag		;    

no_change_cw:		push	h					
					call	entry_chksum		;     BC
					pop		h
					call	type_addr_from_HL	;    
					xchg
					call	type_addr_from_HL	;   
					xchg
					push	h
					mov		h,b					;  ..  HL
					mov		l,c
					call	type_addr_from_HL	;   
					pop		h					;     HL

;----------------------------------------------------------------------------
;      
;       : HL -   ,
;                      DE -   . 
;                      BC -   
;   :
;             - 256  (00) 
;             - 
;             -   
;             -   
;             -    (N )
;             -  2  00
;             - 
;             -    (2 )      
;----------------------------------------------------------------------------
entry_outblock:
					push	b				;   
					lxi		b,0				;    

;     256 
;         					
raccord_loop:
					call	entry_outb		;    
					dcr		b				;    
					xthl					;   , 
					xthl					;   36  ~20
					jnz		raccord_loop	;    ,  

					mvi		c,sinc_byte			;  
					call	entry_outb
					
					call	out_addr_from_HL	;    

					xchg
					call	out_addr_from_HL	;    
					
					xchg
					call	out_array_loop		;   
					
					lxi		h,0
					call	out_addr_from_HL	;    2  00
					
					mvi		c,sinc_byte
					call	entry_outb			;  
					
					pop		h					;   
					call	out_addr_from_HL	;   
					
					jmp		entry_video			;  
												;   
											

;----------------------------------------------------------------------------
;         4 .
;	   HL.
;----------------------------------------------------------------------------
type_addr_from_HL:
					push	b
					call	next_line_and_offset
					mov		a,h
					call	entry_hexb			;    
					mov		a,l
					call	hex_byte_and_space	;  + 
					pop		b
					ret

;----------------------------------------------------------------------------
;     
;       : HL -   ,
;                      DE -   . 
;----------------------------------------------------------------------------
out_array_loop:
					mov		c,m					;   
					call	entry_outb			;    
					call	cmp_hl_de_loop		; : HL=DE
												;  ,  
												;  ,   HL
					jmp		out_array_loop		;   
					
;----------------------------------------------------------------------------
;  16    HL  
;    .
;----------------------------------------------------------------------------
out_addr_from_HL:
					mov		c,h
					call	entry_outb			;   
					mov		c,l
					jmp		entry_outb			;     
					
;----------------------------------------------------------------------------
;     
;         : A = 8        	- (8-    )  
;                        A = 80h - 0FFh - ( )   
;        : A -  
;      ,   , 
;   .
;      450 ,   
;     ,   .
;----------------------------------------------------------------------------
entry_inpb:
					push	h					;  
					push	b
					push	d
					mov		d,a					;   

;         
lock_change:
					mvi		a,80h				;  
					sta		mode_VT57			;  

;    SP   
;   .      ,
;   SP  0000h.     
; POP PSW,   . 
					lxi		h,0
					dad		sp					;   
					lxi		sp,0				;   
					shld	temp_sp				;   

					mvi		c,0					;    
					lda		port_C_kbd			;    C
					rrc
					rrc
					rrc
					rrc							;  d5 --> d0
					ani		1					;   
					mov		e,a					;    e
					
;   
next_bit:
					pop		psw					;  
					mov		a,c					;  
					ani		7Fh					;   
					rlc							;  1   
					mov		c,a					;  d0
					mvi		h,0					;    

;       C4 DD20 (  )
change_loop:
					dcr		h					;   
					jz		if_not_change		;   ,  
					pop		psw					;  
					lda		port_C_kbd			;   
					rrc
					rrc
					rrc
					rrc							;    d0
					ani		1					;  
					cmp		e					;   ?
					jz		change_loop			;  ,   

					ora		c					;  ,  
					mov		c,a					;    
					dcr		d					;   ?
					lda		read_const_mag		;   
					jnz		normal_const		; ,    
					sui		12h					;  

normal_const:		mov		b,a					;   

;   
;         10+5+10=25 
;         16 : Ft=16/9=1.7777 Tt=1/1.7777=0.56
;    T=25*0.56=14
;        Cr=2Ah=42    Tr=42*14=591  ~0.6
;       Tl=(2Ah-12h)*14=336
read_delay_loop:
					pop		psw					;  
					dcr		b					;   
					jnz		read_delay_loop		; ,   

					inr		d					;   
					lda		port_C_kbd			;   
					rrc
					rrc
					rrc
					rrc							;    d0
					ani		1					;  
					mov		e,a					;   
					mov		a,d
					ora		a					;   
					jp		next_bit_load		;  ,   

;    
					mov		a,c					;   
					cpi		sinc_byte			;  ?
					jnz		invert_sinc			;   
					xra		a					;   , 
					sta		data_sign			;   . 
					jmp		set_bit_count		;    
invert_sinc:
					cpi		\sinc_byte			;   ?
					jnz		next_bit			; ,    
					mvi		a,0FFh
					sta		data_sign			;   . 

;        					
set_bit_count:		mvi		d,8+1				;     

next_bit_load:		dcr		d					;  ,    
					jnz		next_bit			;    ,  

;    
;    
;        2 
					lxi		h,addr_ch2_VT57
					mvi		m,<vid_mem
					mvi		m,>vid_mem
					inx		h
;    
					mvi		m,<(n_byte_of_vmem-1)
					mvi		m,40h^>(n_byte_of_vmem-1)
;      8    7   					
					mvi		a,27h
					sta		control_VG75
;    	(?)				
					mvi		a,0E0h
					sta		control_VG75
;  					
					mvi		l,<mode_VT57
					mvi		m,0A4h
					
					lhld	temp_sp				; 
					sphl						;  

					lda		data_sign			;     a
					xra		c					;     
					jmp		comm_exit			;    
				
;  ,      (  ) 
if_not_change:		lhld	temp_sp
					sphl						;  
					call	entry_video			;   
					mov		a,d
					ora		a					;     ?
					jp		fail_exit			;  ,  
					call	press_F4			;    F4
					jmp		lock_change			;    
										
;----------------------------------------------------------------------------
;    C  .
;       : C -  
;       
;   C0 D20 (  ).
;     C0,     
;    C1-C3.   C3   /,  
;      1   
;----------------------------------------------------------------------------
entry_outb:
					push	h				;   
					push	b
					push	d
					push	psw
					
					mvi		a,80h			;    
					sta		mode_VT57

;    SP   
;   .     HL,
;   SP  0000h.     
; POP PSW,   . 
					lxi		h,0
					dad		sp
					lxi		sp,0
					
					mvi		d,8				;   

;   ()  
out_next_bite:
					pop		psw				;  
					mov		a,c				;     A
					rlc						;     d0
					mov		c,a				;    
					mvi		a,1				;     d0
					xra		c				;   				
					sta		port_C_kbd		;    
					lda		write_const_mag	;   
					mov		b,a				;    B

;      
;         10+5+10=25 
;         16 : Ft=16/9=1.7777 Tt=1/1.7777=0.56
;    T=25*0.56=14
;        Cw=1Dh=29    Tr=29*14=406  ~0.4
;          ,   ~=0.8
;          (00000...  11111...)  1.2
;        (0101010101....)   2   ~600.
;           ,
;           .
out_bite_loop1:
					pop		psw				;  
					dcr		b				;   
					jnz		out_bite_loop1	;    
					
;   ()  
					mvi		a,0				;   
					xra		c				;   
					sta		port_C_kbd		;    
					dcr		d				;   
					lda		write_const_mag	;   
					jnz		its_notlast		;    
					sui		0Eh				;     15
its_notlast:		mov		b,a				;    B

;      
out_bite_loop2:
					pop		psw				;  
					dcr		b				;   
					jnz		out_bite_loop2	;    
					
					inr		d				;  
					dcr		d				;  
					jnz		out_next_bite	;   ,  

;   					
					sphl					;   
					
;     
;        2 
					lxi		h,addr_ch2_VT57
					mvi		m,<vid_mem
					mvi		m,>vid_mem
;    
					inx		h
					mvi		m,<(n_byte_of_vmem-1)
					mvi		m,40h^>(n_byte_of_vmem-1)
;      8     7   					
					mvi		a,27h
					sta		control_VG75
;    	(?)				
					mvi		a,0E0h
					sta		control_VG75
;  					
					mvi		l,<mode_VT57
					mvi		m,0A4h
					
					pop		psw				;  

;      
;      .
comm_exit:
					pop		d
					pop		b
					pop		h
					ret

;----------------------------------------------------------------------------
;         A
;----------------------------------------------------------------------------
entry_hexb:
					push	psw				;    
					rrc						;   
					rrc
					rrc
					rrc
					call	hexb_tetr		;   
					pop		psw				;  

;        
hexb_tetr:			ani		0Fh				;    
					cpi		10				;  > 10 ?
					jm		hexb_make_sym
					adi		7				;  ,   7
											;     A - F
hexb_make_sym:
					adi		30h				;    
											;      .

;    A
putc_fromA:
					mov		c,a				;     C.

;----------------------------------------------------------------------------
;       C.
;       : C -  
;----------------------------------------------------------------------------
entry_putc:
					push	psw				;  
					push	b				; 
					push	d
					push	h
					
;          
;      [/].
;      [F4].					
					call	entry_kbhit		;    /

;       
;    (mov_cur_and_exit)    
;         .
;         .					
					lxi		h,mov_cur_and_exit
					push	h

					
					lhld	cursor_xy		;   
					xchg					;  DE
					lhld	cursor_addr		; HL -    , 
											;  

; :    2   ?											
					lda		AR2_seq			;   2 
					dcr		a				;  
					jm		AR2_no			; 2   -  0
					jz		AR2_b1			;  1  ("Y") -  1
					jpo		AR2_b2			;  2    Y -  2

;----------------------------------------------------------------------------
;  3   2 
;       X + 20h					
					mov		a,c				;   
					sui		20h				;  
					mov		c,a				;   X 

;   
AR2_move_X_loop:
					dcr		c				;  
					jm		idle_seq		;  ,  
					push	b				;  BC
					call	move_to_right	;     
					pop		b				;  BC
					jmp		AR2_move_X_loop
					
;  2 
idle_seq:
					xra		a				;   2 
					
update_and_exit:
					sta		AR2_seq			;   2 
					ret						;  
					
;----------------------------------------------------------------------------
;  2 ,   
AR2_no:
					mov		a,c				;   
					ani		7Fh				; 
					mov		c,a 
;    					
					cpi		1Fh				;    ?
					jz		init_display	;  ,  
					cpi		0Ch				;   "   "? 
					jz		cursor_to_0_0	;  ,  
					cpi		0Dh				;    ( )?
					jz		run_BK			;  ,  
					cpi		0Ah				;    ( )?
					jz		run_PS			;  ,  
					cpi		8				;   "<-"?
					jz		move_to_left	;  ,  
					cpi		18h				;   "->"?
					jz		move_to_right	;  ,  
					cpi		19h				;   " "?
					jz		move_up			;  ,  
					cpi		1Ah				;   " "?
					jz		move_down		;  ,  
					cpi		1Bh				;    2?
					jz		AR2_seq_beg		;  ,  
					cpi		7				;    ?
					jnz		run_to_others	;  ,   
					
;      					
					lxi		b,beep
;----------------------------------------------------------------------------
;    
;    : B -   ( )
;                   C -   ()
;     :
;   b=47/f
;   c=t/(b*0.021)
;   : f -    
;        t -    
;        b  c -     B  C ( )
;        f :  47 - 184
;     t :  32  f=8
;                             256  f=1 
;                              1.4  f=184
;    ,   
;     b.   
;       /
;   INTE ( )   
;  EI -   
; DI -  
;----------------------------------------------------------------------------
to_give_sound:
;  
					mov		a,b				;     A
hi_beep_loop:
					ei						;     
					dcr		a				;  
					jnz		hi_beep_loop	;   ,  

;  
					mov		a,b				;     A
lo_beep_loop:
					di						;     
					dcr		a				;  
					jnz		lo_beep_loop	;   ,  
					dcr		c				;   
					jnz		to_give_sound	;    
					ret
					
;----------------------------------------------------------------------------
;   ()  
run_to_others:
					mov		m,c				;    
					call	move_to_right	;    
;       (  ),
;           					
					mov		a,d				;      Y  A
					cpi		3				;   ?
					rnz						;  ,  .
					mov		a,e				;      X  A
					cpi		8				;   ?
					rnz						;  ,  .
					call	move_up			;     

;----------------------------------------------------------------------------
;    .
;     " ",   ,
;       .
;      ()    1 .
;     ,   . 
run_PS:
					mov		a,d				;      Y  A
					cpi		3+25-1			;     ?
					jnz		move_down		;  ,     
					push	h				;  ,  
					push	d				; DE  HL
					
;     1  ,   					
					lxi		h,vid_mem+(78*3)+8		;   1  
					lxi		d,vid_mem+(78*(3+1))+8	;   2  
					lxi		b,25*78			;   

;     1  
scroll_loop:
					ldax	d				;     A
					mov		m,a				;   
					inx		h				;  
					inx		d				; 
					dcx		b				;   
					mov		a,c				;  
					ora		b				;  
					jnz		scroll_loop		;   ,  
					
					pop		d				; 
					pop		h				;   
					ret
					
;----------------------------------------------------------------------------
;  1   2 
;       Y - 59h
AR2_b1:
					mov		a,c				;    A
					cpi		'Y'				;   Y?
					jnz		idle_seq		;  ,   2
					call	cursor_to_0_0
					mvi		a,2				;  2   2
					jmp		update_and_exit	;  
					
;----------------------------------------------------------------------------
;  2   2 
;       Y + 20h					
AR2_b2:
					mov		a,c				;   
					sui		20h				;  
					mov		c,a				;   Y 
;   
AR2_move_Y_loop:
					dcr		c				;  
					mvi		a,4				;   (?)
					jm		update_and_exit	;  ,  
					push	b				;  BC
					call	move_down		;    
					pop		b				;  BC
					jmp		AR2_move_Y_loop	;   
					
;----------------------------------------------------------------------------
;      
mov_cur_and_exit:
					shld	cursor_addr			;   
					xchg
					shld	cursor_xy           ;   
					mvi		a,80h				;   "
					sta		control_VG75		; "  75
					mov		a,l					;  
					sta		parametrs_VG75		;  
					mov		a,h
					sta		parametrs_VG75
					
					pop h						; 
					pop d						;  
					pop b						;  
					pop psw
					ret
;----------------------------------------------------------------------------
;     2,   2 .
;    2 :
;     
; 2+'Y'+(x+20h)+(y+20h),
;     x -     (0 - 63),
;        y -   (0 - 24).
;       .
;----------------------------------------------------------------------------
AR2_seq_beg:
					mvi		a,1				;   1 
					jmp		update_and_exit ;   
					
;----------------------------------------------------------------------------
;      .
;   :
;   -     (2342 ) ,
;   -     .
;        ,     .
;----------------------------------------------------------------------------
init_display:
					lxi		h,end_vid_mem	;   HL    
					lxi		d,(78*30)+1		;    

;   				
clear_disp_loop:
					xra		a				;  A
					mov		m,a				;  0     
					dcx		h				;     
					dcx		d				;  
					mov		a,e				;  
					ora		d				;  0
					jnz		clear_disp_loop	;   0,  

;----------------------------------------------------------------------------
;      (   ).
;       8-  3- 
cursor_to_0_0:
					lxi		d,308h 				;   
					lxi		h,vid_mem+(78*3)+8	;  
					ret
;----------------------------------------------------------------------------
;      
move_to_right:
					mov		a,e				;      X  A
					inx		h				;     
					inr		e				;    X
					cpi		8+64-1			;    ?
					rnz						;  ,  
					mvi		e,8				;  ,      
					lxi		b,-64			;    
					dad		b				;    64  

;----------------------------------------------------------------------------
;     					
move_down:
					mov		a,d				;      Y  A
					cpi		3+25-1			;    ?
					lxi		b,78			;      
					jnz		not_in_bottom	;  ,  
					mvi		d,3-1			;  ,    ,
					lxi		b,-24*78		;       
not_in_bottom:
					inr		d				;    ,
					dad		b				;    
					ret						;    .
					
;----------------------------------------------------------------------------
;      
move_to_left:
					mov		a,e				;      X  A
					dcx		h				;     
					dcr		e				;    X
					cpi		8				;    ?
					rnz						;  ,  
					mvi		e,8+64-1		;  ,    
					lxi		b,64			;   
					dad		b				;      

;----------------------------------------------------------------------------
;     					
move_up:
					mov		a,d				;      Y  A
					cpi		3				;    ?
					lxi		b,-78			;      
					jnz		not_in_top		;   ,  
					mvi		d,3+25			;  ,    
					lxi		b,24*78			;       
not_in_top:
					dcr		d				;    ,
					dad		b				;    
					ret						;    .
					
;----------------------------------------------------------------------------
;    .
;         
run_BK:
					mov		a,l				;     
					sub		e				;     
					jnc		no_borrow		;  ,  
					dcr		h				;    1
no_borrow:			mov		l,a				;     
					mvi		e,8				;     
					lxi		b,8				;     
					dad		b				;      
					ret						;  
					
;----------------------------------------------------------------------------
;   
;      : A = 0FFh -  
;                         A = 0    -   
;      
;    .     
;         
;         .  
;     .
; 
;                         ~
;         21                     (161+?)*21
;       21+224                  (161+?)*224
;    21+224+64*N                (161+?)*64
; N = 1,2,3  ..
;
;        31 . 
;----------------------------------------------------------------------------
entry_kbhit:
;     [/] 
					lda		port_C_kbd			;    C D20
					ani		80h					;   [/]
					jz		rus_lat_not_press	;  , 
					lda		pressed_key			;  , 
					ora		a					;    
					rnz							;  , 
rus_lat_not_press:
					push	h					;  HL
					lhld	keyboard_context	;   
					call	entry_scan_kbd		;    
												; FE -  /
												; FF -   
					cmp		l					;   
					mov		l,a					; 
					jz		retention			;  ,  

;  ,   
key_is_released:	mvi		a,1					;   
					sta		released			;    
					mvi		h,bounce			; ,  
												;  

not_pr_exit:		xra		a					;   "  "

kbd_exit:			shld	keyboard_context	;   
					pop		h					;   HL
					sta		pressed_key			; 
					ret
					
;----------------------------------------------------------------------------
;   
retention:
					dcr		h					;   
					jnz		not_pr_exit			;    ,  
					inr		a					;  ff
					jz		kbd_exit			;     
					inr		a					;  fe
					jz		if_rus_lat			;  [/]
					
;  ,    
					push	b
					lxi		b,kb_click			;  
					call	to_give_sound		;   
					pop		b
					
					lda		released			;   
					mvi		h,first_kb_delay	;   
												; 
					dcr		a					; 
					sta		released			;    
					jz		its_first			;   ,
					mvi		h,stndr_kb_delay	;    
												; 
its_first:
					mvi		a,0FFh				;   
					jmp		kbd_exit			;    
					
					
;----------------------------------------------------------------------------
;   [/]
;        [/]
if_rus_lat:
					lda		port_C_kbd			;   C D20
					ani		80h					;   [/]
					jz		if_rus_lat			;   

;   /     
					lda		ruslat_flag 
					cma
					sta		ruslat_flag
					jmp		key_is_released
					
;----------------------------------------------------------------------------
;     
;        : A -  
;          
;         
;   .
;----------------------------------------------------------------------------
entry_getc:
;       
					call	entry_kbhit			;   
					ora		a					;    A
					jz		entry_getc			;    ,
												;  .
												
					xra		a					;  
					sta		pressed_key			;  
					lda		keyboard_context	;     
					ret							;  
					
;----------------------------------------------------------------------------
;    
;      : A = 0FFh -   
;                         A = 0FEh -   [/]
;                      A =    
;      88 
;      . 
;----------------------------------------------------------------------------
entry_scan_kbd:
;     [/]
					lda		port_C_kbd		;    
					ani		80h				;   [/]
					jnz		fast_kbd_contrl	;   ,  
					mvi		a,0FEh			;  ,   
					ret						;  

;     
fast_kbd_contrl:	xra		a				;  A
					sta		port_A_kbd		;    =0
					sta		port_C_kbd		;  /
					lda		ruslat_flag		;   /  A
					ani		1				;   
											;    /
					ori		6				;   
					sta		contr_reg_kbd	;   /
											;  /
					lda		port_B_kbd		;   
					inr		a				;    1  ,
					jnz		key_is_press	;  A != 0FFh
					dcr		a				;  ,   
					ret						;  
					
; ,      
;   
;   
key_is_press:
					push	h				;  HL
					mvi		l,1				;    
					mvi		h,8-1			;    

;     (  A D20) 											
scan_kbd_loop:
					mov		a,l				;    
					rrc
					mov		l,a
					cma
					sta		port_A_kbd		;    
					lda		port_B_kbd		;   
					cma
					ora		a				;      
					jnz		scan_bounce		;  
					dcr		h				;   
					jp		scan_kbd_loop	;   ,
											;   

;      
not_press:
					mvi		a,0FFh			;  
					pop		h				;   
					ret
					
;   
;     32 
;    1     ,
;     
scan_bounce:
					mvi		l,32			;   
											; 
scan_boun_loop:
					lda		port_B_kbd		;   
					cma
					ora		a				;   ,
					jz		not_press		;  
					dcr		l				;   
					jnz		scan_boun_loop	;   ,  
					
					mvi		l,8				;     

;----------------------------------------------------------------------------
;        
;     ,   
;      /
;----------------------------------------------------------------------------
;     
;------------------------------------------------------------------
;  :                                                :
;        :--------------------------------------------------------
;  :  0   :  1   :  2   :  3   :  4   :  5   :  6   :  7   :
;------------------------------------------------------------------
;    0    : |- 00:    00: 0  30: 8  38:   40:   48:   50:   58:
;         : |\   :   :      : (    : @    : H    : P    : X    :
;------------------------------------------------------------------
;    1    :    01:    01: 1  31: 9  39:   41:   49:   51:   59:
;         :   :    : !    : )    : A    : I    : Q    : Y    :
;------------------------------------------------------------------
;    2    :    02:    02: 2  32: :  3A:   42:   4A:   52:   5A:
;         : AR2  :    : "    : *    : B    : J    : R    : Z    :
;------------------------------------------------------------------
;    3    :    03:    03: 3  33: ;  3B:   43:   4B:   53:   5B:
;         : F1   :    : #    : +    : C    : K    : S    : [    :
;------------------------------------------------------------------
;    4    :    04:    04: 4  34: ,  3C:   44:   4C:   54:   5C:
;         : F2   : <-   : $    : <    : D    : L    : T    : \    :
;------------------------------------------------------------------
;    5    :    05: ^  05: 5  35: -  3D:   45:   4D:   55:   5D:
;         : F3   : |    : %    : =    : E    : M    : U    : ]    :
;------------------------------------------------------------------
;    6    :    06:    06: 6  36: .  3E:   46:   4E:   56:   5E:
;         : F4   : ->   : &    : >    : F    : N    : V    : ^    :
;------------------------------------------------------------------
;    7    :    07:  | 07: 7  37: /  3F:   47:   4F:   57:    5F:
;         :      :  V   : ,    : ?    : G    : O    : W    ::
;------------------------------------------------------------------
;   0  1    ,  
;         .
;   2 - 7   : 00SSSNNNb,  SSS -  ,
; NNN -  ,  20h,    
;----------------------------------------------------------------------------
;      
;    ,    B D20, 
;      (   )
num_kbd_loop:
					dcr		l				;   
					rlc						;     C
					jnc		num_kbd_loop	; ,     
					
					mov		a,h				;   H <-> L
					mov		h,l				;  A
					mov		l,a
					
;  0  1   ,   
; .     					
					cpi		1				;  1 
					jz		make_1_column	;  ,  
					jc		make_0_column	;  0 
					
;       					
					rlc						;   
					rlc						;  8  
					rlc						;  
					adi		20h				;     30h
					ora		h				;    
					cpi		5Fh				;   ?
					jnz		run_others		;  ,  
					mvi		a,20h			;  ,    A  
					pop		h				;  HL  
					ret
					
;----------------------------------------------------------------------------
;     ,   0 
;----------------------------------------------------------------------------
column1table:		.db		9				; 
					.db		0Ah				;  
					.db		0Dh				;  
					.db		7Fh				; 
					.db		8				;  
					.db		19h				;  
					.db		18h				;  
					.db		1Ah				;  
;----------------------------------------------------------------------------
;     ,   1 
;----------------------------------------------------------------------------
column0table:		.db		0Ch				;    
					.db		1Fh				;  
					.db		1Bh				; 2
					.db		0				; F1
					.db		1				; F2
					.db		2				; F3
					.db		3				; F4
					.db		4				; F5 (  ),
					.db		5				;       (?)
;----------------------------------------------------------------------------
;    
make_0_column:
					mov		a,h				;     A (0-7)
					lxi		h,column0table	; HL -   
					jmp		run_table
;----------------------------------------------------------------------------
;    
make_1_column:
					mov		a,h				;     A (0-7)
					lxi		h,column1table	; HL -   

run_table:
					add		l				;       (?)
					mov		l,a				;  HL
					mov		a,m				;    A
					cpi		40h				;   ?
					pop		h				;  ,  
					rc
					
					push	h

;----------------------------------------------------------------------------
;       ,  , []  .
;    1  2-       [], []
;   /.      L,   []  []  H.
;----------------------------------------------------------------------------
run_others:
					mov		l,a				;     L
					lda		port_C_kbd		;   
					mov		h,a				;   H
					ani		40h				;   
					jnz		rus_or_lat		;   ,  
					
;    [].
;         40h - 5Fh.
;          [], 
;    30h , .. 00h-1Fh ( )
;  /       
					mov		a,l				;    A
					cpi		40h				;  ? 
					jm		not_press_YCCC	;  ,  ...
					ani		1Fh				;   
					pop		h				;  
					ret
					
;       /
;         40h - 5Fh.
;   /    (=0),    = .
;  / =  (=0FFh),        20h.
rus_or_lat:
					lda		ruslat_flag		;   
					ora		a				;  
					jz		run_CC			;   ,    		
					mov		a,l				;    A
					cpi		40h				;    ,
					jm		run_CC			;    
					ori		20h				;  ,  
					mov		l,a				;     

;    [].
;      () .
;      <-> 
;        2- 
;   
;----------------------------------------------------------------------------
; 					
run_CC:
					mov		a,h				;    []
					ani		20h				;  A
					jnz		not_press_YCCC	;   ,  ....
					mov		a,l				;  ,     A 
					cpi		40h				; 
					jm		not_press_CC	;    ?
					mov		a,l				;  ,   
					xri		20h				;     ,
					pop		h				;  HL  
					ret

not_press_CC:
					mov		a,l				;     ,
					ani		2Fh				;     (?)
					mov		l,a

;        
not_press_YCCC:
					mov		a,l				;   
					cpi		40h				;   ,
					pop		h				;  
					rp
					
;     					
					push	h				; 
					mov		l,a				;    L
					ani		0Fh				;   
					cpi		0Ch				;    
					mov		a,l				; 20h - 2Ch  30h - 3Ch 
					jm		not_high		;  
					xri		10h				;
not_high:
					pop		h				;  HL
					ret						;  
					
;----------------------------------------------------------------------------
;     .
;   ,     
;  ( ).
;         ( 
; ),      (   ),
;         .
;       .
;----------------------------------------------------------------------------
entry_getlim:
					lhld	memlim			;   
					ret						;  
;----------------------------------------------------------------------------
;     
;----------------------------------------------------------------------------
entry_setlim:
					shld	memlim			;  
					ret						;   
					
;----------------------------------------------------------------------------

;----------------------------------------------------------------------------
;       .
; :      =0
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;  ,    
Radio:				.db		1Fh,"radio-86rk",0

;----------------------------------------------------------------------------
; . , ,       .
Prompt:				.db		0Dh,0Ah,"-->",0

;----------------------------------------------------------------------------
;       
offset_:			.db		0Dh,0Ah,18h,18h,18h,18h,0

;      X -   
;    .    6 .
;      1 .
Regs:				.db		0Dh,0Ah," PC-"
					.db		0Dh,0Ah," HL-"
					.db		0Dh,0Ah," BC-"
					.db		0Dh,0Ah," DE-"
					.db		0Dh,0Ah," SP-"
					.db		0Dh,0Ah," AF-"
					.db		19h,19h,19h,19h,19h,19h,0

;----------------------------------------------------------------------------
;           					
BackClr:			.db		8,20h,8,0

;----------------------------------------------------------------------------
;     .
;      G  (. )  
;     .
;       .
;       X .
;     .    
; ""   (prompt_loop). 
return_address:
;   HL
					shld	HL_storage		;  HL
					
; A  PSW     HL					
					push	psw				;  A  PSW
					pop		h				;    HL
					shld	AF_storage
					
;      ,    
;    G.    ,  
;   RST 6,    1.					
					pop		h				;    
					dcx		h				;   
					shld	PC_storage		;   
;  HL       
;     					
					lxi		h,0				;  
					dad		sp				;    HL
					lxi		sp,SP_storage+2 ;  SP
					push	h				;  
					push	d				;  
					push	b				;  
					
					lhld	PC_storage			;   
					lxi		sp,stack_bott		;  
					call	type_addr_from_HL	;     
					
; ,     ,    G?					
					xchg
					lhld	stop_addr		;      G
					call	cmp_hl_de		;     
					jnz		prompt_loop		;   ,  
					
;   ,      ,
;    G.					
					lda		byte_in_stop_adr	;  ,    
					mov		m,a					;    
					jmp		prompt_loop			; 
					
;----------------------------------------------------------------------------
;   X .
;          ()
;    80 (   ),    
;         .
;         G .
print_regs:
					lxi		h,Regs				;      
					call	entry_puts			;      
					lxi		h,PC_storage		;    
					mvi		b,6					;    

;  /  
print_regs_loop:
					mov		e,m					;  
					inx		h					;  
					mov		d,m					;  DE
					push	b					;  
					push	h					;  
					xchg						;    HL
					call	type_addr_from_HL	;    
					call	input_string		;    
					jnc		no_regs_change		;   ,  
					call	str_to_parametr		;     HL
					pop		d					;   HL <-> DE
					push	d					;  
					xchg
					mov		m,d					;  
					dcx		h					;   
					mov		m,e					;    

no_regs_change:
					pop		h					;  
					pop		b					;  
					dcr		b					;   
					inx		h					;     
					jnz		print_regs_loop		;   ,  
					ret							;   ,  
					
;----------------------------------------------------------------------------
;  2     .
;       :

;      "" 8 1986. .24 
					.dw		0FFFFh
					
;    --32,    , 					
;					.dw		0FFh

;      " "  .1139
; . . , . .   . . ,    1989. .65,66
;					.dw		89BBh		; junk

					.end
