; Вход через USR 15600
	ASSERT $ = #C0, "Error with RET_FROM_BIOS_TO_BASIC48 address!!!"
RET_FROM_BIOS_TO_BASIC48:
        CALL CH_2
        CALL COMAND_LINE        ; ВЫПОЛНЕНИЕ КОМАНДЫ, ЕСЛИ ЕСТЬ
        ; Вход без команды
        JP SW_ROM_1             ; ВОЗВРАТ В << MAIN MENU >>

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


;
;----------------------------[ ??????????? ]----------------------------;
; TURBO_OFF:
; 	LD A,D_TBOFF
; 	OUT (SYS_PORT.ON),A
; 	RET
;
; TURBO_ON:
; 	LD A,D_TBON
; 	OUT (SYS_PORT.ON),A
; 	RET
;
; JP_HL:  JP (HL)
;
;PRINT_LINE:
;        LD A,(HL)
;        INC HL
;        CP 0FFh
;        RET Z
;        RST 10H
;        JR PRINT_LINE
;
;	JP RESET_128
;-----------------------------------------------------------------------;
;


;-----------------------------------------------------------------------;
;                       ******* SERVICE *******
;-----------------------------------------------------------------------;

;------[ ДЕШИФРАЦИЯ КОМАНДНОЙ СТРОКИ,ПЕРЕДАННОЙ ДЛЯ "EXPANSION" ]-------;
COMAND_LINE:
        LD HL,(#5C5D)   ;!HARDCODE CH_ADR
COMAND_LOOP:
        LD A,(HL)
        INC HL
        CP ":"
        JR Z,COMAND_L1
        CP ZX_Char.carriage_return
        JR NZ,COMAND_LOOP
        RET

COMAND_L1:
        LD A,(HL)
        CP ZX_Token.rem
        RET NZ
        INC HL
COMAND_OK:      ; ОБНАРУЖЕНА КОМАНДА ДЛЯ 'expansion'
        LD A,(HL)
        INC HL
        CP ':'
        JP Z,MENU_S1
        CP ZX_Char.carriage_return
        JP Z,MENU_S1
        CP 'I'
        JR Z,COMAND_ISD
        CP 'i'
        JR Z,COMAND_ISD
        CP 'T'
        JR Z,TASK_SWITCH
        CP 't'
        JR Z,TASK_SWITCH
        DEC HL
        POP BC
        JP BASIC_MENU
MENU_S1:
        POP BC
        CALL SERVICE
        JP SW_ROM_1

COMAND_ISD:
        LD A,(HL)
        INC HL
        CP 'S'
        JP Z,COMAND_ISD2
        CP 's'
        JP Z,COMAND_ISD2
        RET

COMAND_ISD2:
        POP BC
        CALL ISDOS
        JP SW_ROM_1


TASK_SWITCH:
;	*** Сохранить задачу ***
	PUSH IY
	PUSH IX
	PUSH AF
	PUSH BC
	PUSH DE
	PUSH HL

	EXX
	EX AF,AF'

	PUSH AF
	PUSH BC
	PUSH DE
	PUSH HL

	LD A,R
	PUSH AF
	LD A,I
	PUSH AF

	LD A,(HL)
	RLCA
	RLCA
	RLCA
	RLCA
	AND #30		; новая задача 0..3
        LD C,A

	IN A,(SLOT3)
	LD B,A		; 3-я страница текущей задачи
	LD A,SYS_PAGE
	OUT (SLOT3),A

	LD IX,SYS_PAGE.TASK_DATA	; данные задач
	LD E,(IX)	; старая задача
	LD D,0
	ADD IX,DE	; данные текущей задачи
	LD E,16
	ADD IX,DE	; смещение данных в таблице задач

	LD (IX+1),B	; сохранить страницу 3
	LD HL,0
	ADD HL,SP
	LD (IX+2),L	; сохранить стек задачи
	LD (IX+3),H
	SET 0,(IX)	; установить флаг сохраненности текущей задачи
	RES 1,(IX)	; установить флаг, что задача покинута

	LD IX,SYS_PAGE.TASK_DATA
	LD E,C
	LD D,0
	ADD IX,DE	; новая задача
	LD E,16
	ADD IX,DE	; смещение данных в таблице задач

	BIT 1,(IX)
;	JR NZ,TASK_IN_WORK	; задача в работе ??? неверное завершение
				; сбрасывать или просто возвращаться

	BIT 0,(IX)	; была сохранена/нет
	JR NZ,TASK_SET	; задача существует

;	задачи не было!
	LD IX,SYS_PAGE.TASK_DATA
	LD A,C		; задача
	LD (IX),A	; установить новую задачу текущей

	JP SPECTRUM_TASK ; запустить новую задачу!
;                          и пока пофиг распределение памяти!

TASK_SET:
	LD IX,TASK_RESTORE
	LD A,C
	EXX
	JP INIT_PAGES	; переключить все страницы!

TASK_RESTORE:
	EXX
	LD A,SYS_PAGE
	OUT (SLOT3),A
	LD A,C
	LD IX,SYS_PAGE.TASK_DATA
	LD (IX),A	; установить новую задачу текущей

	LD E,A
	LD D,0
	ADD IX,DE	; новая задача
	LD E,16
	ADD IX,DE

	LD L,(IX+2)	; вспомнить стек
	LD H,(IX+3)
	LD SP,HL
	LD A,(IX+1)	; вспомнить третью страницу
	OUT (SLOT3),A


	POP AF	; восстановить
	LD I,A
	POP AF
	LD R,A
	POP HL
	POP DE
	POP BC
	POP AF
	EX AF,AF'
	EXX
	POP HL
	POP DE
	POP BC
	POP AF
	POP IX
	POP IY
	; вернуться в задачу

NO_TASK:
        POP BC
        JP SW_ROM_1

; 259F - ADRESS BASIC128 - MAIN_MENU
;-----------------------------------------------------------------------;



;-----------------------------------------------------------------------;
;                       *** UTILITES ***
;-----------------------------------------------------------------------;

; C_0030:                 ; получить раб обл
;        CALL_48X 0030h
;        RET
C_19E8:                 ; очистить раб обл
       CALL_48X #19E8   ;!HARDCODE
       RET
C_1655:                 ; получить пространство
       CALL_48X #1655   ;!HARDCODE   
       RET
CLS:
C_0D6B: CALL_48 #0D6B   ;!HARDCODE
        RET
CH_2:   LD A,2
C_1601:                 ; OPEN CHANEL
        CALL_48 #1601   ;!HARDCODE
        RET
;