;
 MACRO  _mNoDrive_5xTable numberOFdrives, byteOFword
  IF byteOFword
     DUP numberOFdrives
        DB  high FN_RESERVED_5x				;#50 - Дубль. На эту функцию прыгает из основного обработчика

        DB  high FN_ABSENT_5x				;#51
        DB  high FN_ABSENT_5x				;#52
        DB  high FN_ABSENT_5x				;#53
        DB  high FN_ABSENT_5x				;#54
        DB  high FN_ABSENT_5x				;#55
        DB  high FN_ABSENT_5x				;#56
        DB  high FN_ABSENT_5x				;#57
        DB  high FN_ABSENT_5x				;#58
        DB  high FN_ABSENT_5x				;#59

        DB  high DRV_VERSION				;#5A - Дубль. На эту функцию прыгает из основного обработчика
        DB  high FN_RESERVED_5x				;#5B - Дубль. На эту функцию прыгает из основного обработчика
        DB  high FN_RESERVED_5x				;#5C - Дубль. На эту функцию прыгает из основного обработчика
        DB  high FN_RESERVED_5x				;#5D - Дубль. На эту функцию прыгает из основного обработчика
        DB  high FN_RESERVED_5x				;#5E - Дубль. На эту функцию прыгает из основного обработчика
        DB  high DRV_LIST				;#5F - Дубль. На эту функцию прыгает из основного обработчика
     EDUP
  ELSE
     DUP numberOFdrives
        DB  low  FN_RESERVED_5x				;#50 - Дубль. На эту функцию прыгает из основного обработчика

        DB  low  FN_ABSENT_5x				;#51
        DB  low  FN_ABSENT_5x				;#52
        DB  low  FN_ABSENT_5x				;#53
        DB  low  FN_ABSENT_5x				;#54
        DB  low  FN_ABSENT_5x				;#55
        DB  low  FN_ABSENT_5x				;#56
        DB  low  FN_ABSENT_5x				;#57
        DB  low  FN_ABSENT_5x				;#58
        DB  low  FN_ABSENT_5x				;#59

        DB  low  DRV_VERSION				;#5A - Дубль. На эту функцию прыгает из основного обработчика
        DB  low  FN_RESERVED_5x				;#5B - Дубль. На эту функцию прыгает из основного обработчика
        DB  low  FN_RESERVED_5x				;#5C - Дубль. На эту функцию прыгает из основного обработчика
        DB  low  FN_RESERVED_5x				;#5D - Дубль. На эту функцию прыгает из основного обработчика
        DB  low  FN_RESERVED_5x				;#5E - Дубль. На эту функцию прыгает из основного обработчика
        DB  low  DRV_LIST				;#5F - Дубль. На эту функцию прыгает из основного обработчика
     EDUP
  ENDIF
 ENDM
;

        _mInfoALIGN 256,0
;=========================================================[ MAIN TABLE ]
; !FIXIT поправить в доке названия функций, часть не совпадает
TAB_FNS:

; 00 - #3F
        DUP     #40
         DB      low    FN_RESERVED
        EDUP
;

; #4x
;-------------- 
        DB      low  FN_HDD_INIT                        ; #40 Инициализация винчестера 
        DB      low  FN_HDD_RECAL                       ; #41 Рекалибровка винчестера 
        DB      low  FN_HDD_TEST_IDE                    ; #42 Тест наличия интерфейса IDE
        DB      low  FN_HDD_PREPARE                     ; #43 Подготовка винчестера к операции чтения/записи 
        DB      low  FN_HDD_READ_BPB                    ; #44 Читать BPB первого раздела
        DB      low  FN_HDD_READ                        ; #45 Читать сектора с винчестера 
        DB      low  FN_HDD_WRITE                       ; #46 Писать сектора на винчестер
        DB      low  FN_HDD_PART                        ; #47 set IDE number (Настройка партиций и master/slave)???
        DB      low  FN_HDD_READ_NEXT                   ; #48 Читать следующий сектор (ONLY FOR LBA!)
        DB      low     FN_RESERVED                     ; #49
        DB      low     FN_RESERVED                     ; #4A
        DB      low     FN_RESERVED                     ; #4B
        DB      low     FN_RESERVED                     ; #4C
        DB      low     FN_RESERVED                     ; #4D
        DB      low     FN_RESERVED                     ; #4E
        DB      low     FN_RESERVED                     ; #4F
;-------------- 
;

; 5x
;--------------
        DB      low     FN_RESERVED_5x                  ;#50

        DB      low  FN_5x_Parser_1                     ;#51 - Reset drive
        DB      low  FN_5x_Parser_2                     ;#52 - Long read
        DB      low  FN_5x_Parser_3                     ;#53 - Long write
        DB      low  FN_5x_Parser_4                     ;#54 - Verify sectors
        DB      low  FN_5x_Parser_5                     ;#55 - Read sectors
        DB      low  FN_5x_Parser_6                     ;#56 - Write sectors
        DB      low  FN_5x_Parser_7                     ;#57 - Detect
        DB      low  FN_5x_Parser_8                     ;#58 - Get Media parameters
        DB      low  FN_5x_Parser_9                     ;#59 - Set Media parameters

        DB      low  DRV_VERSION			;#5A - Version number
        DB      low     FN_RESERVED_5x			;#5B
        DB      low     FN_RESERVED_5x			;#5C
        DB      low     FN_RESERVED_5x			;#5D
        DB      low FN_5x_Parser_E			;#5E
        DB      low  DRV_LIST				;#5F
;-------------- 

; 60 - #7F
        DUP     #20
         DB     low     FN_RESERVED
        EDUP


;  8x
        DB      low  LP_OPEN_S                          ; #80  открытие окна
        DB      low  LP_PRINT_ALL                       ; #81  печать символа в окно
        DB      low  LP_PRINT_SYM                       ; #82  печать символа без атр
        DB      low  LP_PRINT_ATR                       ; #83  печать только атрибута
        DB      low  LP_SET_PLACE                       ; #84  установка позиции печати
        DB      low  LP_PRINT_LINE                      ; #85  печать строки длиной B
        DB      low  LP_PRINT_LINE2                     ; #86  печать строки -//- без атрибутов
        DB      low  LP_PRINT_LINE3                     ; #87  печать строки длиной B до D
        DB      low  LP_PRINT_LINE4                     ; #88  печать строки -//- без атрибутов
        DB      low  LP_CLS_WIN                         ; #89 
        DB      low  LP_SCROLL_UD                       ; #8A 
        DB      low  LP_PRINT_LINE5                     ; #8B 
        DB      low  LP_PRINT_LINE6                     ; #8C 
        DB      low  LP_CLS_WIN2                        ; #8D 
        DB      low  LP_GET_PLACE                       ; #8E 
        DB      low  FN_TURBO                           ; #8F 
;  9x
        DB      low  EMM.GetMemSize                     ; #90  неразрушающее определение объема ОЗУ.
        DB      low  EMM.InitMem                        ; #91  инициализация распределения памяти
        DB      low  EMM.GetMemRMD                      ; #92  получить блок памяти для рамдиска
        DB      low  EMM.FreeMemRMD                     ; #93  освободить блок памяти рамдиска
        DB      low  EMM.GetMemPageRMD                  ; #94  получить номерa страниц RAM-Disk
        DB      low  EMM.GetMemPageNext                 ; #95  получить следующую страницу
        DB      low  EMM.GetBanksPorts                  ; #96  получить адреса портов
        DB      low  EMM.CheckColdInit                  ; #97  проверка на холодный старт и инициализации если он ;????? нужна ли как API?
        DB      low  RAMD_CALC_PAGE                     ; #98  Вычисление страницы и адреса в RAM-Disk по абсолютному номеру сектора
        DB      low  SET_DISK_TYPE                      ; #99              ;?????
        DB      low  DISK_REDIR                         ; #9A              ;?????
        DB      low  GET_RAMD_NUM                       ; #9B  получить номер ram disk по его block id
        DB      low  SWAP_RAM_DRIVES                    ; #9C  сменить набор рамдисков ZX <-> Sp2000
        DB      low  EMM.DivMemBlocks                   ; #9D  разделения блока на два.
        DB      low  EMM.MergeMemBlocks                 ; #9E  слияние двух блоков
        DB      low  EMM.FullInit                       ; #9F  инициализация всей памяти, системных переменных
;  Ax
        DB      low  PIC_FN0                            ; #A0  ОТКРЫТИЕ ОКНА        - Fn 0A0h
        DB      low  PIC_FN1                            ; #A1  ВЫВЕСТИ ТОЧКУ
        DB      low  PIC_FN2                            ; #A2  ВЫВОД ЛИНИИ COPY
        DB      low  PIC_FN3                            ; #A3  ВЫВОД ЛИНИИ FILL
        DB      low  PIC_SET_PAL                        ; #A4  ВЫВОД ПАЛИТРЫ
        DB      low  PIC_FN5                            ; #A5  УСТАНОВКА RGMOD
        DB      low  PIC_FN6                            ; #A6  A - page_pal, E - номер палитры, B - тип палитры
        DB      low  PIC_FN7                            ; #A7  Рисование линии одного цвета
        DB      low  PIC_FN8                            ; #A8  Рисование разноцветной линии 
        DB      low  PIC_FN9                            ; #A9  нет
        DB      low  PIC_FN10                           ; #AA  нет
        DB      low  PIC_FN11                           ; #AB  нет
        DB      low  PIC_FN12                           ; #AC  нет
        DB      low  PIC_FN14                           ; #AD  нет
        DB      low  PIC_FN14                           ; #AE  нет
        DB      low  PIC_FN15                           ; #AF  нет
;  Bx
        DB      low  WIN_OPEN                           ; #B0  открытие окна по описателю
        DB      low  WIN_CLOSE                          ; #B1  закрытие окна
        DB      low  WIN_COPY                           ; #B2  сохранение текстового окна в памяти
        DB      low  WIN_RESTORE                        ; #B3  восстановление текстового окна из памяти
        DB      low  WIN_GET_SYM                        ; #B4  взять символ
        DB      low  WIN_PUT_SYM                        ; #B5  положить символ
        DB      low  WIN_SET_ZG                         ; #B6  загрузка знакогенератора
        DB      low  WIN_MOVE                           ; #B7  переместить окно
        DB      low  WIN_GET_ZG                         ; #B8  получить знакогенератор
        DB      low     FN_RESERVED                     ; #B9 
        DB      low     FN_RESERVED                     ; #BA 
        DB      low     FN_RESERVED                     ; #BB 
        DB      low     FN_RESERVED                     ; #BC 
        DB      low     FN_RESERVED                     ; #BD 
        DB      low     FN_RESERVED                     ; #BE 
        DB      low     FN_RESERVED                     ; #BF 
;  Cx
        DB      low  EMM.GetMemSize                     ; #C0  получить данные об объеме памяти и кол-во своб. стр.
        DB      low  EMM.InitMem                        ; #C1  инициализация распределения памяти
        DB      low  EMM.GetMem                         ; #C2  получить блок памяти
        DB      low  EMM.FreeMem                        ; #C3  освободить блок памяти
        DB      low  EMM.GetMemPage                     ; #C4  получить номер страницы в блоке памяти
        DB      low  EMM.GetMemBlkPages                 ; #C5  получить список страниц блока памяти
        DB      low  EMM.GetBanksPorts                  ; #C6  получить адреса портов окон
        DB      low  EMM.GetMemPageNext                 ; #C7  получить следующую страницу блока
        DB      low  BLK_RD_WR                          ; #C8  функция чтения/записи в блок памяти
        DB      low  BLK_TO_RAMD                        ; #C9  назначить блок RAM-Disk-у
        DB      low  RAMD_CLEAR                         ; #CA  освободить RAM-Disk
        DB      low  RAMD_TO_DRV                        ; #CB  назначить RAM-Disk на дисковод
        DB      low  FDD_TO_DRV                         ; #CC  назначить REAL_DRIVE на дисковод
        DB      low  HDD_TO_DRV                         ; #CD  назначить HDD на дисковод
        DB      low  GET_RAMD_ST                        ; #CE  получить тип назначения на RAM-Disk
        DB      low  GET_DRV_ST                         ; #CF  получить тип назначения на дисковод
;  Dx
        DB      low  FN_LIB                             ; #D0 
        DB      low  FN_LIB                             ; #D1 
        DB      low  FN_LIB                             ; #D2 
        DB      low  FN_LIB                             ; #D3 
        DB      low  FN_LIB                             ; #D4 
        DB      low  FN_LIB                             ; #D5 
        DB      low  FN_LIB                             ; #D6 
        DB      low  FN_LIB                             ; #D7 
        DB      low  FN_LIB                             ; #D8 
        DB      low  FN_LIB                             ; #D9 
        DB      low  FN_LIB                             ; #DA 
        DB      low  FN_LIB                             ; #DB 
        DB      low  FN_LIB                             ; #DC 
        DB      low  FN_LIB                             ; #DD 
        DB      low  FN_LIB                             ; #DE 
        DB      low  FN_LIB                             ; #DF 
;  Ex
        DB      low  LP_PR_LINE_DIR                  	; #E0  
        DB      low     FN_RESERVED                     ; #E1 
        DB      low     FN_RESERVED                     ; #E2 
        DB      low     FN_RESERVED                     ; #E3 
        DB      low     FN_RESERVED                     ; #E4 
        DB      low     FN_RESERVED                     ; #E5 
        DB      low     FN_RESERVED                     ; #E6 
        DB      low     FN_RESERVED                     ; #E7 
        DB      low  FN_SEND_BYTE                       ; #E8  послать байт через PC_link
        DB      low  FN_RESEIVE_B                       ; #E9  принять байт через PC_link
        DB      low  FN_KBD_OUT                         ; #EA  послать байт в клавиатуру
        DB      low     FN_RESERVED                     ; #EB 
        DB      low     FN_RESERVED                     ; #EC 
        DB      low  FN_CRIPT                           ; #ED 
        DB      low  RST_CONF.AY8910                    ; #EE  для совместимости с софтом Sp97
        DB      low  FN_VERSION                         ; #EF 
;  Fx
        DB      low  RST_CONF.SP97_1                    ; #F0  для совместимости с софтом Sp97 
        DB      low  RST_CONF.SP97_2                    ; #F1  для совместимости с софтом Sp97 
        DB      low  FN_SYNC                            ; #F2  установка синхронизации
        DB      low  RST_CONF.CUSTOM                    ; #F3  для совместимости с софтом Sp97 ;!TODO сделать её и для перезаливки конфы Sp2000
        DB      low  DCP_CONFIG                         ; #F4  функция распределения портов ; [x]
        DB      low  CMOS_TEST                          ; #F5 
        DB      low  CMOS_RD                            ; #F6 
        DB      low  CMOS_WR                            ; #F7 
        DB      low  SET_PORTS                          ; #F8 
        DB      low  READ_PORTS                         ; #F9  [x] 26/01/2024
        DB      low     FN_RESERVED			; #FA  [x] 26/01/2024 не работала и не нужна, дублирует SET_PORTS
        DB      low  GOTO_SPEC                          ; #FB  Goto Spectrum!
        DB      low     FN_RESERVED                     ; #FC 
        DB      low  REINIT                             ; #FD 
        DB      low     FN_RESERVED                     ; #FE  SAVE_AUTOSTART. Есть в ZX_EXP.ASM
        DB      low  FN_VERSION                         ; #FF 

;****************----------------------------************************-----------------


; 00 - #3F
        DUP     #40
         DB     high    FN_RESERVED
        EDUP
;

;--------------
        DB      high FN_HDD_INIT     
        DB      high FN_HDD_RECAL    
        DB      high FN_HDD_TEST_IDE 
        DB      high FN_HDD_PREPARE  
        DB      high FN_HDD_READ_BPB 
        DB      high FN_HDD_READ     
        DB      high FN_HDD_WRITE    
        DB      high FN_HDD_PART     
        DB      high FN_HDD_READ_NEXT
        DB      high    FN_RESERVED     
        DB      high    FN_RESERVED     
        DB      high    FN_RESERVED     
        DB      high    FN_RESERVED     
        DB      high    FN_RESERVED     
        DB      high    FN_RESERVED     
        DB      high    FN_RESERVED     
;-------------- 

;--------------
        DB      high    FN_RESERVED_5x

        DB      high FN_5x_Parser_1 
        DB      high FN_5x_Parser_2 
        DB      high FN_5x_Parser_3 
        DB      high FN_5x_Parser_4 
        DB      high FN_5x_Parser_5 
        DB      high FN_5x_Parser_6 
        DB      high FN_5x_Parser_7 
        DB      high FN_5x_Parser_8 
        DB      high FN_5x_Parser_9 

        DB      high DRV_VERSION   
        DB      high    FN_RESERVED_5x
        DB      high    FN_RESERVED_5x
        DB      high    FN_RESERVED_5x
        DB      high FN_5x_Parser_E
        DB      high DRV_LIST
;--------------

; 60 - #7F
        DUP     #20
         DB     high     FN_RESERVED
        EDUP


;  8x
        DB      high LP_OPEN_S      
        DB      high LP_PRINT_ALL   
        DB      high LP_PRINT_SYM   
        DB      high LP_PRINT_ATR   
        DB      high LP_SET_PLACE   
        DB      high LP_PRINT_LINE  
        DB      high LP_PRINT_LINE2 
        DB      high LP_PRINT_LINE3 
        DB      high LP_PRINT_LINE4 
        DB      high LP_CLS_WIN     
        DB      high LP_SCROLL_UD   
        DB      high LP_PRINT_LINE5 
        DB      high LP_PRINT_LINE6 
        DB      high LP_CLS_WIN2    
        DB      high LP_GET_PLACE   
        DB      high FN_TURBO       
;  9x
        DB      high EMM.GetMemSize     
        DB      high EMM.InitMem        
        DB      high EMM.GetMemRMD      
        DB      high EMM.FreeMemRMD     
        DB      high EMM.GetMemPageRMD  
        DB      high EMM.GetMemPageNext 
        DB      high EMM.GetBanksPorts  
        DB      high EMM.CheckColdInit
        DB      high RAMD_CALC_PAGE     
        DB      high SET_DISK_TYPE      
        DB      high DISK_REDIR         
        DB      high GET_RAMD_NUM
        DB      high SWAP_RAM_DRIVES     
        DB      high EMM.DivMemBlocks   
        DB      high EMM.MergeMemBlocks 
        DB      high EMM.FullInit       
;  Ax
        DB      high PIC_FN0 
        DB      high PIC_FN1 
        DB      high PIC_FN2 
        DB      high PIC_FN3 
        DB      high PIC_SET_PAL 
        DB      high PIC_FN5 
        DB      high PIC_FN6 
        DB      high PIC_FN7 
        DB      high PIC_FN8 
        DB      high PIC_FN9 
        DB      high PIC_FN10
        DB      high PIC_FN11
        DB      high PIC_FN12
        DB      high PIC_FN14
        DB      high PIC_FN14
        DB      high PIC_FN15
;  Bx
        DB      high WIN_OPEN      
        DB      high WIN_CLOSE     
        DB      high WIN_COPY      
        DB      high WIN_RESTORE   
        DB      high WIN_GET_SYM   
        DB      high WIN_PUT_SYM   
        DB      high WIN_SET_ZG    
        DB      high WIN_MOVE      
        DB      high WIN_GET_ZG    
        DB      high    FN_RESERVED
        DB      high    FN_RESERVED
        DB      high    FN_RESERVED
        DB      high    FN_RESERVED
        DB      high    FN_RESERVED
        DB      high    FN_RESERVED
        DB      high    FN_RESERVED
;  Cx
        DB      high EMM.GetMemSize    
        DB      high EMM.InitMem       
        DB      high EMM.GetMem        
        DB      high EMM.FreeMem       
        DB      high EMM.GetMemPage    
        DB      high EMM.GetMemBlkPages
        DB      high EMM.GetBanksPorts 
        DB      high EMM.GetMemPageNext
        DB      high BLK_RD_WR         
        DB      high BLK_TO_RAMD       
        DB      high RAMD_CLEAR        
        DB      high RAMD_TO_DRV       
        DB      high FDD_TO_DRV        
        DB      high HDD_TO_DRV        
        DB      high GET_RAMD_ST       
        DB      high GET_DRV_ST        
;  Dx
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
        DB      high FN_LIB
;  Ex
        DB      high LP_PR_LINE_DIR
        DB      high    FN_RESERVED   
        DB      high    FN_RESERVED   
        DB      high    FN_RESERVED   
        DB      high    FN_RESERVED   
        DB      high    FN_RESERVED   
        DB      high    FN_RESERVED   
        DB      high    FN_RESERVED   
        DB      high FN_SEND_BYTE
        DB      high FN_RESEIVE_B     
        DB      high FN_KBD_OUT       
        DB      high    FN_RESERVED   
        DB      high    FN_RESERVED   
        DB      high FN_CRIPT         
        DB      high RST_CONF.AY8910    
        DB      high FN_VERSION       
;  Fx
        DB      high RST_CONF.SP97_1    
        DB      high RST_CONF.SP97_2    
        DB      high FN_SYNC       
        DB      high RST_CONF.CUSTOM 
        DB      high DCP_CONFIG       
        DB      high CMOS_TEST     
        DB      high CMOS_RD       
        DB      high CMOS_WR       
        DB      high SET_PORTS 
        DB      high READ_PORTS    
        DB      high    FN_RESERVED
        DB      high GOTO_SPEC     
        DB      high    FN_RESERVED
        DB      high REINIT      
        DB      high    FN_RESERVED
        DB      high FN_VERSION    
////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////
;
;         ,----,                                                     ,----,.
;       ,/   .`|                                                   ,'   ,' |
;     ,`   .'  :                     ,--,                        ,'   .'   |
;   ;    ;     /           ,---,   ,--.'|                      ,----.'    .'
; .'___,/    ,'          ,---.'|   |  | :                      |    |   .'
; |    :     |           |   | :   :  : '                      :    :  |--, ,--,  ,--,
; ;    |.';  ;  ,--.--.  :   : :   |  ' |      ,---.           :    |  ;.' \|'. \/ .`|
; `----'  |  | /       \ :     |,-.'  | |     /     \          |    |      |'  \/  / ;
;     '   :  ;.--.  .-. ||   : '  ||  | :    /    /  |         `----'.'\   ; \  \.' /
;     |   |  ' \__\/: . .|   |  / :'  : |__ .    ' / |           __  \  .  |  \  ;  ;
;     '   :  | ," .--.; |'   : |: ||  | '.'|'   ;   /|         /   /\/  /  : / \  \  \
;     ;   |.' /  /  ,.  ||   | '/ :;  :    ;'   |  / |        / ,,/  ',-   ./__;   ;  \
;     '---'  ;  :   .'   \   :    ||  ,   / |   :    |        \ ''\       ;|   :/\  \ ;
;            |  ,     .-./    \  /  ---`-'   \   \  /          \   \    .' `---'  `--`
;             `--`---'   `-'----'             `----'            `--`-,-'
////////////////////////////////////////////////////////////////////////////////////////


        _mInfoALIGN 256,0
;===========================================================[ 5x TABLE ]
; Drives Numbers:
; 0       FDD
; 1..5     reserved
; 6       RAM-DRV
; 7        reserved
; 8       HDD
; 9..B     reserved
; C       CDROM
; D..F     reserved
TAB_5xFNS:
;               --< LOW PART >--
;-------------------------------------------------------------[ FDD #0 ]
;
 DB low			FN_RESERVED_5x					;#50 - Дубль. На эту функцию прыгает из основного обработчика
 DB low		FDD_5x_RESET						;#51
 DB low		FDD_5x_LONG_READ					;#52
 DB low		FDD_5x_LONG_WRITE					;#53
 DB low			FN_ABSENT_5x					;#54
 DB low		FDD_5x_READ						;#55
 DB low		FDD_5x_WRITE						;#56
 DB low		FDD_5x_DETECT						;#57
 DB low		FDD_5x_GETMED						;#58
 DB low		FDD_5x_SETMED						;#59

 DB low		DRV_VERSION						;#5A - Дубль. На эту функцию прыгает из основного обработчика
 DB low			FN_RESERVED_5x					;#5B - Дубль. На эту функцию прыгает из основного обработчика
 DB low			FN_RESERVED_5x					;#5C - Дубль. На эту функцию прыгает из основного обработчика
 DB low			FN_RESERVED_5x					;#5D - Дубль. На эту функцию прыгает из основного обработчика
 DB low			FN_RESERVED_5x					;#5E - Дубль. На эту функцию прыгает из основного обработчика
 DB low		DRV_LIST						;#5F - Дубль. На эту функцию прыгает из основного обработчика
;
;---------------------------------------------------------------------[]

;-----------------------------[ #1..#5 ]
	_mNoDrive_5xTable 5, 0
;-------------------------------------[]

;-------------------------------------------------------[ RAM DRIVE #6 ]
;
 DB low			FN_RESERVED_5x
 DB low			FN_ABSENT_5x
 DB low		RMD_5x_LONG_READ
 DB low		RMD_5x_LONG_WRITE
 DB low			FN_ABSENT_5x
 DB low		RMD_5x_READ
 DB low		RMD_5x_WRITE
 DB low			FN_ABSENT_5x
 DB low		RMD_5x_GETMED
 DB low		RMD_5x_SETMED

 DB low		DRV_VERSION
 DB low		    FN_RESERVED_5x 
 DB low		    FN_RESERVED_5x 
 DB low		    FN_RESERVED_5x 
 DB low		    FN_RESERVED_5x 
 DB low		DRV_LIST
;---------------------------------------------------------------------[]

;---------------------------------[ #7 ]
	_mNoDrive_5xTable 1, 0
;-------------------------------------[]

;-------------------------------------------------------------[ HDD #8 ]
;
 DB low			FN_RESERVED_5x
 DB low		HDD_5x_RESET
 DB low		HDD_5x_LONG_READ
 DB low		HDD_5x_LONG_WRITE
 DB low		HDD_5x_VERIFY
 DB low		HDD_5x_READ
 DB low		HDD_5x_WRITE
 DB low		HDD_5x_DETECT
 DB low		HDD_5x_GETMED
 DB low		HDD_5x_SETMED

 DB low		DRV_VERSION
 DB low			FN_RESERVED_5x 
 DB low			FN_RESERVED_5x 
 DB low			FN_RESERVED_5x 
 DB low			FN_RESERVED_5x 
 DB low		DRV_LIST
;---------------------------------------------------------------------[]

;-----------------------------[ #9..#B ]
	_mNoDrive_5xTable 3, 0
;-------------------------------------[]

;-----------------------------------------------------------[ CDROM #C ]
;
 DB low			FN_RESERVED_5x
 DB low		CD_5x_RESET
 DB low		CD_5x_LONG_READ
 DB low			FN_ABSENT_5x
 DB low			FN_ABSENT_5x
 DB low		CD_5x_READ
 DB low			FN_ABSENT_5x
 DB low		CD_5x_DETECT
 DB low			FN_ABSENT_5x
 DB low			FN_ABSENT_5x

 DB low		DRV_VERSION
 DB low			FN_RESERVED_5x 
 DB low			FN_RESERVED_5x 
 DB low			FN_RESERVED_5x 
 DB low		CD_5x_Extended 
 DB low		DRV_LIST
;---------------------------------------------------------------------[]

;-----------------------------[ #D..#F ]
        _mNoDrive_5xTable 3, 0
;-------------------------------------[]

;
;               --< HIGH PART >--
;-------------------------------------------------------------[ FDD #0 ]
;
 DB high		FN_RESERVED_5x					;#50 - Дубль. На эту функцию прыгает из основного обработчика
 DB high	FDD_5x_RESET						;#51
 DB high	FDD_5x_LONG_READ					;#52
 DB high	FDD_5x_LONG_WRITE					;#53
 DB high		FN_ABSENT_5x					;#54
 DB high	FDD_5x_READ						;#55
 DB high	FDD_5x_WRITE						;#56
 DB high	FDD_5x_DETECT						;#57
 DB high	FDD_5x_GETMED						;#58
 DB high	FDD_5x_SETMED						;#59
 DB high	DRV_VERSION						;#5A - Дубль. На эту функцию прыгает из основного обработчика
 DB high		FN_RESERVED_5x					;#5B - Дубль. На эту функцию прыгает из основного обработчика
 DB high		FN_RESERVED_5x					;#5C - Дубль. На эту функцию прыгает из основного обработчика
 DB high		FN_RESERVED_5x					;#5D - Дубль. На эту функцию прыгает из основного обработчика
 DB high		FN_RESERVED_5x					;#5E - Extended functions
 DB high	DRV_LIST						;#5F - Дубль. На эту функцию прыгает из основного обработчика
;
;---------------------------------------------------------------------[]

;-----------------------------[ #1..#5 ]
	_mNoDrive_5xTable 5, 1
;-------------------------------------[]

;-------------------------------------------------------[ RAM DRIVE #6 ]
;
 DB high		FN_RESERVED_5x
 DB high		FN_ABSENT_5x
 DB high	RMD_5x_LONG_READ
 DB high	RMD_5x_LONG_WRITE
 DB high		FN_ABSENT_5x
 DB high	RMD_5x_READ
 DB high	RMD_5x_WRITE
 DB high		FN_ABSENT_5x
 DB high	RMD_5x_GETMED
 DB high	RMD_5x_SETMED
 DB high	DRV_VERSION
 DB high		FN_RESERVED_5x 
 DB high		FN_RESERVED_5x 
 DB high		FN_RESERVED_5x 
 DB high		FN_RESERVED_5x 
 DB high	DRV_LIST
;---------------------------------------------------------------------[]

;---------------------------------[ #7 ]
        _mNoDrive_5xTable 1, 1
;-------------------------------------[]

;-------------------------------------------------------------[ HDD #8 ]
;
 DB high		FN_RESERVED_5x
 DB high	HDD_5x_RESET
 DB high	HDD_5x_LONG_READ
 DB high	HDD_5x_LONG_WRITE
 DB high	HDD_5x_VERIFY
 DB high	HDD_5x_READ
 DB high	HDD_5x_WRITE
 DB high	HDD_5x_DETECT
 DB high	HDD_5x_GETMED
 DB high	HDD_5x_SETMED
 DB high	DRV_VERSION
 DB high		FN_RESERVED_5x 
 DB high		FN_RESERVED_5x 
 DB high		FN_RESERVED_5x 
 DB high		FN_RESERVED_5x 
 DB high	DRV_LIST
;---------------------------------------------------------------------[]

;-----------------------------[ #9..#B ]
        _mNoDrive_5xTable 3, 1
;-------------------------------------[]

;----------------------------------------------------------[ CDROM #C0 ]
;
 DB high		FN_RESERVED_5x
 DB high	CD_5x_RESET
 DB high	CD_5x_LONG_READ
 DB high		FN_ABSENT_5x
 DB high		FN_ABSENT_5x
 DB high	CD_5x_READ
 DB high		FN_ABSENT_5x
 DB high	CD_5x_DETECT
 DB high		FN_ABSENT_5x
 DB high		FN_ABSENT_5x
 DB high	DRV_VERSION
 DB high		FN_RESERVED_5x 
 DB high		FN_RESERVED_5x 
 DB high		FN_RESERVED_5x 
 DB high	CD_5x_Extended
 DB high	DRV_LIST
;---------------------------------------------------------------------[]

;-----------------------------[ #D..#F ]
        _mNoDrive_5xTable 3, 1
;-------------------------------------[]
;======================================================================;

;************************************
; Вход в функцию по RST18 и RST8
EXP_FNS_RST18:
        PUSH	HL
	LD	L,C
	LD	H,high TAB_FNS
	LD	C,(HL)
	INC	H
	LD	H,(HL)
	LD	L,C
	EX	(SP),HL
	RET

FN_5x_Parser_1:
	LD	C,#01
	JP	FN_5x_Parser 
FN_5x_Parser_2:
	LD	C,#02
	JP	FN_5x_Parser 
FN_5x_Parser_3:
	LD	C,#03
	JP	FN_5x_Parser 
FN_5x_Parser_4:
	LD	C,#04
	JP	FN_5x_Parser 
FN_5x_Parser_6:
	LD	C,#06
	JP	FN_5x_Parser 
FN_5x_Parser_7:
	LD	C,#07
	JP	FN_5x_Parser 
FN_5x_Parser_8:
	LD	C,#08
	JP	FN_5x_Parser 
FN_5x_Parser_9:
	LD	C,#09
	JP	FN_5x_Parser 
FN_5x_Parser_E:
	LD	C,#0E
	JP	FN_5x_Parser 
FN_5x_Parser_5:
	LD	C,5
FN_5x_Parser:
        PUSH    HL
        LD      H,A
        AND     #F0
        OR      C
        ; тут в A номер УСТРОЙСТВА + НОМЕР ФУНКЦИИ 
        LD      L,A
        LD      A,H
	LD	H,high TAB_5xFNS
	LD	C,(HL)
	INC	H
	LD	H,(HL)
	LD	L,C
	EX	(SP),HL
	RET

; Вход в функции БИОС из TR-DOS
EXP_FNS:; отключаем запись в экран спектрума
	 ;EX	(SP),HL
	 ;IN	A,(RGADR)
	 ;LD	L,A
	 ;LD	A,#C0
	 ;OUT	(PORT_Y),A
	 ;LD	A,H
	 ;EX	(SP),HL		; (SP) = port_y
	 POP	AF
	;
        CALL    EXP_FNS_RST18
	CALL    DOS_ON
	; возвращаем запись в экран спектрума
	 ;EX	(SP),HL
	 ;PUSH	AF
	 ;LD	A,L
	 ;OUT	(RGADR),A
	 ;POP	AF
	 ;POP	HL
	; возврат
	JP      EXP_FNS_RET

;!      !       !       !       !       !       !       !
FN_RESERVED_5x:
        LD A,1                      ;!HARDCODE error code
FN_RESERVED:
        SCF
        RET
FN_ABSENT_5x:
	LD	A,#AA               ;!HARDCODE error code
	SCF 
	RET
;!      !       !       !       !       !       !       !
;