From f3f3ac6df0488baa088617c0161cbde8ecafc98f Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 5 Apr 2025 01:58:39 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B1=D0=B8=D1=80=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {MOD2 => CORE}/CLOCK.ASM | 8 +- {MOD2 => CORE}/COPY.ASM | 0 {MOD2 => CORE}/DEBUG.ASM | 6 +- {MOD2 => CORE}/DELETE.ASM | 12 +- {MOD2 => CORE}/ENTER.ASM | 4 +- {MOD2 => CORE}/EVENT.ASM | 0 {MOD2 => CORE}/FILLSTR.ASM | 0 FVIEW/FVIEW.INC => CORE/FVIEW_CORE.ASM | 2 +- {MOD2 => CORE}/HILIGHT.ASM | 0 {MOD2 => CORE}/INFO.ASM | 16 +- {MOD2 => CORE}/KEYBAR.ASM | 14 +- {MOD2 => CORE}/LAUNCH.ASM | 20 +- {MOD2 => CORE}/MKDIR.ASM | 4 +- {MOD2 => CORE}/MOUSE.ASM | 0 MOD2/__COPY1.ASM => CORE/NOT_USED_COPY.ASM | 4 +- {MOD2 => CORE}/POS.ASM | 0 {MOD2 => CORE}/QVIEW.ASM | 4 +- {MOD2 => CORE}/READDSK.ASM | 4 +- {MOD2 => CORE}/RENAME.ASM | 4 +- {MOD2 => CORE}/SETUP.ASM | 40 +- SHELL.ASM => CORE/SHELL.ASM | 36 +- {MOD2 => CORE}/SPACE.ASM | 2 +- {MOD2 => CORE}/UTILS.ASM | 0 CORE/_CORE_.ASM | 261 +++++++++++ FM.ASM | 391 +++++++++-------- FVIEW/CHFONT.ASM | 2 +- FVIEW/FVIEW.ASM | 20 +- FVIEW/Viewer.asm | 21 + MAIN.ASM | 484 +++++---------------- MOD0/CURSOR.ASM | 20 +- MOD0/LISTDRV.ASM | 12 +- MOD0/MOUSEDRV.ASM | 12 +- {OBJS => MOD0/OBJS}/BUTTON.ASM | 0 {OBJS => MOD0/OBJS}/DIALOG.ASM | 0 {OBJS => MOD0/OBJS}/DIALOG1.ASM | 0 {OBJS => MOD0/OBJS}/HMENU.ASM | 0 {OBJS => MOD0/OBJS}/INLINE.ASM | 0 {OBJS => MOD0/OBJS}/LISTBOX.ASM | 0 {OBJS => MOD0/OBJS}/PALLETE.ASM | 0 {OBJS => MOD0/OBJS}/PROCESS.ASM | 0 {OBJS => MOD0/OBJS}/RADIO.ASM | 0 {OBJS => MOD0/OBJS}/UMENU.ASM | 0 MOD0/VECTORS.ASM | 8 +- MOD1/COMLINE.ASM | 2 +- MOD1/TREE.ASM | 16 +- {SPEC => SPEC_FN}/FUNCS.ASM | 0 {SPEC => SPEC_FN}/VECT.ASM | 18 +- VERSION.INC | 4 +- 48 files changed, 743 insertions(+), 708 deletions(-) rename {MOD2 => CORE}/CLOCK.ASM (91%) rename {MOD2 => CORE}/COPY.ASM (100%) rename {MOD2 => CORE}/DEBUG.ASM (89%) rename {MOD2 => CORE}/DELETE.ASM (95%) rename {MOD2 => CORE}/ENTER.ASM (95%) rename {MOD2 => CORE}/EVENT.ASM (100%) rename {MOD2 => CORE}/FILLSTR.ASM (100%) rename FVIEW/FVIEW.INC => CORE/FVIEW_CORE.ASM (95%) rename {MOD2 => CORE}/HILIGHT.ASM (100%) rename {MOD2 => CORE}/INFO.ASM (94%) rename {MOD2 => CORE}/KEYBAR.ASM (93%) rename {MOD2 => CORE}/LAUNCH.ASM (93%) rename {MOD2 => CORE}/MKDIR.ASM (95%) rename {MOD2 => CORE}/MOUSE.ASM (100%) rename MOD2/__COPY1.ASM => CORE/NOT_USED_COPY.ASM (94%) rename {MOD2 => CORE}/POS.ASM (100%) rename {MOD2 => CORE}/QVIEW.ASM (95%) rename {MOD2 => CORE}/READDSK.ASM (95%) rename {MOD2 => CORE}/RENAME.ASM (95%) rename {MOD2 => CORE}/SETUP.ASM (94%) rename SHELL.ASM => CORE/SHELL.ASM (95%) rename {MOD2 => CORE}/SPACE.ASM (95%) rename {MOD2 => CORE}/UTILS.ASM (100%) create mode 100644 CORE/_CORE_.ASM create mode 100644 FVIEW/Viewer.asm rename {OBJS => MOD0/OBJS}/BUTTON.ASM (100%) rename {OBJS => MOD0/OBJS}/DIALOG.ASM (100%) rename {OBJS => MOD0/OBJS}/DIALOG1.ASM (100%) rename {OBJS => MOD0/OBJS}/HMENU.ASM (100%) rename {OBJS => MOD0/OBJS}/INLINE.ASM (100%) rename {OBJS => MOD0/OBJS}/LISTBOX.ASM (100%) rename {OBJS => MOD0/OBJS}/PALLETE.ASM (100%) rename {OBJS => MOD0/OBJS}/PROCESS.ASM (100%) rename {OBJS => MOD0/OBJS}/RADIO.ASM (100%) rename {OBJS => MOD0/OBJS}/UMENU.ASM (100%) rename {SPEC => SPEC_FN}/FUNCS.ASM (100%) rename {SPEC => SPEC_FN}/VECT.ASM (80%) diff --git a/MOD2/CLOCK.ASM b/CORE/CLOCK.ASM similarity index 91% rename from MOD2/CLOCK.ASM rename to CORE/CLOCK.ASM index 9599749..2e8cbeb 100755 --- a/MOD2/CLOCK.ASM +++ b/CORE/CLOCK.ASM @@ -12,7 +12,7 @@ enable_clock: call get_systime ; узнать сист. время ld de,clock_string ; буфер часов ld hl,0301h ; с 0-й строки - in a,(89h) + in a,(PORT_Y) ld b,a ; сохр. порт in a,(SLOT0) ld c,a ; сохр.порт @@ -20,7 +20,7 @@ enable_clock: ld a,50h ; видео-страница out (SLOT0),a ld a,75+81h ; +0 (смещ. слева) - out (89h),a ; колонка + out (PORT_Y),a ; колонка ; вывод текста ld d,d ; уст. размер блока ld a,5 ; длина строки @@ -34,7 +34,7 @@ enable_clock: ; вывод атрибутов ld de,clock_attr ; строка атрибутов ld a,75+81h ; +0 (смещ. слева) - out (89h),a + out (PORT_Y),a inc hl ; перейти на атрибуты ld d,d ; уст. размер блока ld a,5 ; длина строки @@ -46,7 +46,7 @@ enable_clock: ld (hl),a ld b,b ; выкл. аксель ld a,b - out (89h),a ; восст. порт + out (PORT_Y),a ; восст. порт ld a,c out (SLOT0),a ; восст. порт ei diff --git a/MOD2/COPY.ASM b/CORE/COPY.ASM similarity index 100% rename from MOD2/COPY.ASM rename to CORE/COPY.ASM diff --git a/MOD2/DEBUG.ASM b/CORE/DEBUG.ASM similarity index 89% rename from MOD2/DEBUG.ASM rename to CORE/DEBUG.ASM index 4e39416..11a5887 100755 --- a/MOD2/DEBUG.ASM +++ b/CORE/DEBUG.ASM @@ -10,7 +10,7 @@ PR: push iy rst 08h ld hl,work_buffer+33;256 ld c,1Eh - rst 10h + rst ToDSS ;ld hl,work_buffer+256 ;xor a ;ld c,a @@ -23,7 +23,7 @@ PR: push iy ; ld hl,work_buffer+33;256 ld c,5Ch - rst 10h + rst ToDSS ld a," " call symb ld a," " @@ -64,7 +64,7 @@ PR2: push iy rst 08h pop hl; ;ld c,5Ch - ;rst 10h + ;rst ToDSS ;ld a," " ;call symb ;ld a," " diff --git a/MOD2/DELETE.ASM b/CORE/DELETE.ASM similarity index 95% rename from MOD2/DELETE.ASM rename to CORE/DELETE.ASM index ec297fc..ace1d02 100755 --- a/MOD2/DELETE.ASM +++ b/CORE/DELETE.ASM @@ -81,7 +81,7 @@ delete_yes1: ld a,(hl) ld hl,temp_fname ; имя файла/папки ld bc,0116h ; уст. атрибут файла - rst 10h + rst ToDSS delete1: ; скопир. имя файла/папки в описатель инфо-окна ld hl,delete_name ; откуда @@ -98,7 +98,7 @@ delete_try: jr nz,$+4 ; да ld c,0Eh ; удалить файл ld hl,temp_fname ; имя файла/папки - rst 10h + rst ToDSS ; закрыть инфо-окно push af call CloseWinSimple @@ -178,7 +178,7 @@ del_full_fold_rec: ; удалить папку ld hl,work_buffer ; куда (в конец строки) ld c,1Ch ; удалить папку - rst 10h + rst ToDSS ; закрыть инфо-окно call CloseWinSimple or a @@ -254,13 +254,13 @@ delete_file: inc hl ; +33 (имя файла) ld bc,0116h ; уст. атрибут файла push af - rst 10h + rst ToDSS pop af delete_file_next: ld c,0Eh ; удалить файл delete_file_next1: ld hl,work_buffer+33 ; имя файла - rst 10h + rst ToDSS push af ; закрыть инфо-окно call CloseWinSimple @@ -278,7 +278,7 @@ delete_folder: ; ld hl,work_buffer+33 ld c,1Eh ; узнать путь - rst 10h + rst ToDSS ; вывод инфо-окна ld hl,dial_delete_current call WinSimple ; открыть окно diff --git a/MOD2/ENTER.ASM b/CORE/ENTER.ASM similarity index 95% rename from MOD2/ENTER.ASM rename to CORE/ENTER.ASM index ef32c7c..38ec6a1 100755 --- a/MOD2/ENTER.ASM +++ b/CORE/ENTER.ASM @@ -11,7 +11,7 @@ Press_Enter: push af ld de,work_buffer ; куда ld bc,0044h ; 11 -> 8.3 - rst 10h + rst ToDSS pop af and 10h jp z,Launch_File ; выполнить файл (launch.asm) @@ -95,7 +95,7 @@ return_to_parent: ld hl,work_buffer+127;255 ; откуда ld de,temp_fname ; куда (launch.asm) ld bc,0144h - rst 10h + rst ToDSS ; позиц. указатель на имя папки call calc_index_name ; вычислить индекс имени call set_pointer ; расч. полож. указателя/списка diff --git a/MOD2/EVENT.ASM b/CORE/EVENT.ASM similarity index 100% rename from MOD2/EVENT.ASM rename to CORE/EVENT.ASM diff --git a/MOD2/FILLSTR.ASM b/CORE/FILLSTR.ASM similarity index 100% rename from MOD2/FILLSTR.ASM rename to CORE/FILLSTR.ASM diff --git a/FVIEW/FVIEW.INC b/CORE/FVIEW_CORE.ASM similarity index 95% rename from FVIEW/FVIEW.INC rename to CORE/FVIEW_CORE.ASM index c51ad59..b939ee9 100755 --- a/FVIEW/FVIEW.INC +++ b/CORE/FVIEW_CORE.ASM @@ -46,7 +46,7 @@ file_viewer: ret c ld de,temp_fname ; куда ld bc,0044h ; 11 -> 8.3 - rst 10h + rst ToDSS ret c ;ld (evcomb_stack+1),sp ; сохр. стек ld a,(page_viewer) ; стр. вьюера diff --git a/MOD2/HILIGHT.ASM b/CORE/HILIGHT.ASM similarity index 100% rename from MOD2/HILIGHT.ASM rename to CORE/HILIGHT.ASM diff --git a/MOD2/INFO.ASM b/CORE/INFO.ASM similarity index 94% rename from MOD2/INFO.ASM rename to CORE/INFO.ASM index 9e3f72e..b2827ac 100755 --- a/MOD2/INFO.ASM +++ b/CORE/INFO.ASM @@ -171,16 +171,16 @@ get_info_data: ; прочитать BPB диска ld a,(disk) ; номер диска ld c,1 ; open device - rst 18h + rst ToDSS.DRV jr c,get_inf_data_err ld a,(disk) ld de,work_buffer ; буфер ld c,4 ; get BPB - rst 18h + rst ToDSS.DRV push af ld a,(disk) ; номер диска ld c,2 ; close device - rst 18h + rst ToDSS.DRV pop af jr c,get_inf_data_err ; байт формата носителя @@ -202,12 +202,12 @@ get_inf_data_err: jr nc,get_inf_data1 ; метка в BPB ; floppy, метка - запись файла ld c,1 ; уст. диск - rst 10h + rst ToDSS ld hl,scan_mask ; "*.*" имя поиска метки тома ld de,work_buffer+127;255 ld a,8 ; атрибут метки тома ld bc,0019h ; F_FIRST, формат "FilenameExt" - rst 10h + rst ToDSS jr c,get_inf_data1 ; метки нет ld hl,work_buffer+127+43 ;+255+43 откуда (конец метки) jr $+5 @@ -220,7 +220,7 @@ get_inf_data1: ; Объем диска ld a,(disk) ; номер диска ld c,3 ; инфа о диске - rst 10h + rst ToDSS jr nc,get_inf_data_ok xor a ld l,a @@ -267,7 +267,7 @@ get_inf_data_ok: call decimal32 ; Всего памяти ld c,3Ch ; информация о памяти - rst 10h + rst ToDSS push bc ld ix,info_total_memory ; 0,000,000 call conv_kbytes ; kbytes -> bytes и вывод в буфер @@ -369,7 +369,7 @@ conv_kbytes: ;------------------------------------------------- info_get_date: ld c,21h ; сист. дата - rst 10h + rst ToDSS push ix ; год push de ; день/месяц ld ix,info_date_string ; буфер diff --git a/MOD2/KEYBAR.ASM b/CORE/KEYBAR.ASM similarity index 93% rename from MOD2/KEYBAR.ASM rename to CORE/KEYBAR.ASM index 16e1e0c..fd14b37 100755 --- a/MOD2/KEYBAR.ASM +++ b/CORE/KEYBAR.ASM @@ -84,7 +84,7 @@ print_keybar: ld de,keybar_norm ; текст print_keybar1: ld hl,037Dh ; 0301h + (4*31) - in a,(89h) + in a,(PORT_Y) ld b,a ; сохр. порт in a,(SLOT0) ld c,a ; сохр.порт @@ -92,7 +92,7 @@ print_keybar1: ld a,50h ; видео-страница out (SLOT0),a ld a,81h ; +0 (смещ. слева) - out (89h),a ; колонка + out (PORT_Y),a ; колонка ; вывод текста ld d,d ; уст. размер блока ld a,80 ; длина строки @@ -106,7 +106,7 @@ print_keybar1: ; вывод атрибутов ld de,keybar_attr ; строка атрибутов ld a,81h ; +0 (смещ. слева) - out (89h),a + out (PORT_Y),a inc hl ; перейти на атрибуты ld d,d ; уст. размер блока ld a,80 ; длина строки @@ -118,7 +118,7 @@ print_keybar1: ld (hl),a ld b,b ; выкл. аксель ld a,b - out (89h),a ; восст. порт + out (PORT_Y),a ; восст. порт ld a,c out (SLOT0),a ; восст. порт ei @@ -144,7 +144,7 @@ change_keybar: ld de,keybar_shift ; строка keybar__: ld hl,037Dh ; 0301h + (4*31) - in a,(89h) + in a,(PORT_Y) ld b,a ; сохр. порт in a,(SLOT0) ld c,a ; сохр.порт @@ -152,7 +152,7 @@ keybar__: ld a,50h ; видео-страница out (SLOT0),a ld a,81h ; +0 (смещ. слева) - out (89h),a ; колонка + out (PORT_Y),a ; колонка ; вывод текста ld d,d ; уст. размер блока ld a,80 ; длина строки @@ -164,7 +164,7 @@ keybar__: ld (hl),a ld b,b ; выкл. аксель ld a,b - out (89h),a ; восст. порт + out (PORT_Y),a ; восст. порт ld a,c out (SLOT0),a ; восст. порт ei diff --git a/MOD2/LAUNCH.ASM b/CORE/LAUNCH.ASM similarity index 93% rename from MOD2/LAUNCH.ASM rename to CORE/LAUNCH.ASM index 6bcfbc8..80ddef0 100755 --- a/MOD2/LAUNCH.ASM +++ b/CORE/LAUNCH.ASM @@ -95,9 +95,9 @@ cut_disk: ld hl,work_buffer ; откуда ld de,ComLineBuff+5 ; куда ld bc,0145h - rst 10h + rst ToDSS ld c,1 ; уст. диск - rst 10h + rst ToDSS ret ; Выделить и установить путь @@ -106,10 +106,10 @@ cut_path: ld de,ComLineBuff+5+2 ; куда push de ld bc,0245h - rst 10h + rst ToDSS pop hl ld c,1Dh ; уст. путь - rst 10h + rst ToDSS ret ; Выделить имя файла из строки @@ -117,7 +117,7 @@ cut_filename: ld hl,work_buffer ; откуда ld de,temp_fname ; куда ld bc,0345h ; формат "file.ext" - rst 10h + rst ToDSS ret @@ -142,7 +142,7 @@ Launch_File: ld hl,work_buffer ; откуда ld de,temp_fname ; куда ld bc,0445h - rst 10h + rst ToDSS bit 3,a ; указан диск ? push af call nz,cut_disk ; выделить и уст. диск @@ -265,7 +265,7 @@ new_line: call $+5 ld a,0Ah ld c,5Bh ; вывод символа на экран - rst 10h + rst ToDSS ret @@ -285,7 +285,7 @@ call_shell: ld (hl),false ; восст. дос-страницу di - ld a,(port_82) + ld a,(DSS_PAGE) out (SLOT0),a ei ; восст. системный экран @@ -298,12 +298,12 @@ call_shell: rst 08h ; восст. значение порта ld a,(port_89) - out (89h),a + out (PORT_Y),a ; выполнить файл ld (stack1+1),sp ld hl,work_buffer+127;255 ; имя файла ld bc,0040h - rst 10h + rst ToDSS ; скрыть сист. мышку ld c,2 rst 30h diff --git a/MOD2/MKDIR.ASM b/CORE/MKDIR.ASM similarity index 95% rename from MOD2/MKDIR.ASM rename to CORE/MKDIR.ASM index 155cbf5..25349fc 100755 --- a/MOD2/MKDIR.ASM +++ b/CORE/MKDIR.ASM @@ -30,7 +30,7 @@ make_folder: ld hl,input_line_makedir+5 ; откуда ld de,temp_fname ; куда (13 байт) ld bc,0345h - rst 10h + rst ToDSS push af push af or a @@ -55,7 +55,7 @@ try_make_fold: try_make_folder: ld hl,temp_fname ; имя папки ld c,1Bh ; создать папку - rst 10h + rst ToDSS jr c,make_fold_err ; обновить список панелей fresh_two_panels: ;<- обращение из delete.asm diff --git a/MOD2/MOUSE.ASM b/CORE/MOUSE.ASM similarity index 100% rename from MOD2/MOUSE.ASM rename to CORE/MOUSE.ASM diff --git a/MOD2/__COPY1.ASM b/CORE/NOT_USED_COPY.ASM similarity index 94% rename from MOD2/__COPY1.ASM rename to CORE/NOT_USED_COPY.ASM index f3c02e9..93b6a37 100755 --- a/MOD2/__COPY1.ASM +++ b/CORE/NOT_USED_COPY.ASM @@ -232,12 +232,12 @@ copy_file: ; ; добавить имя папки ; ; de=куда ; ld bc,0044h ; 11 -> 8.3 -; rst 10h +; rst ToDSS ;__tr1: ; ; ;call PR; ; ld hl,work_buffer ; ld c,1Dh ; уст. тек. путь -; rst 10h +; rst ToDSS ; ;xor a ; сканир. папки ; ;ld (scan_mode),a ; режим работы процедуры ; jp ScanTree ; сканир. папку diff --git a/MOD2/POS.ASM b/CORE/POS.ASM similarity index 100% rename from MOD2/POS.ASM rename to CORE/POS.ASM diff --git a/MOD2/QVIEW.ASM b/CORE/QVIEW.ASM similarity index 95% rename from MOD2/QVIEW.ASM rename to CORE/QVIEW.ASM index 3594dbf..3d8c7f7 100755 --- a/MOD2/QVIEW.ASM +++ b/CORE/QVIEW.ASM @@ -479,9 +479,9 @@ scan_folder_alt: ex de,hl ; de=куда pop hl ; откуда ld bc,0044h ; 11 -> 8.3 - rst 10h + rst ToDSS scan_fold1: ld hl,work_buffer ld c,1Dh ; уст. путь - rst 10h + rst ToDSS jp ScanTree ; сканир. папку diff --git a/MOD2/READDSK.ASM b/CORE/READDSK.ASM similarity index 95% rename from MOD2/READDSK.ASM rename to CORE/READDSK.ASM index 39bdd69..0de1d68 100755 --- a/MOD2/READDSK.ASM +++ b/CORE/READDSK.ASM @@ -86,7 +86,7 @@ read_new_list: ld (hl),0 dec hl ld c,1Dh ; смена тек. каталога - rst 10h + rst ToDSS ret c ; ошибка read_nlist: xor a @@ -110,7 +110,7 @@ read_nlist: read_nlist_loop: ld de,work_buffer ; куда ld a,37h ; все, кроме метки тома - rst 10h + rst ToDSS ccf ret nc ; больше нет записей call copy_record ; скопир. запись в банку каталога diff --git a/MOD2/RENAME.ASM b/CORE/RENAME.ASM similarity index 95% rename from MOD2/RENAME.ASM rename to CORE/RENAME.ASM index 92fe136..7f7fdb1 100755 --- a/MOD2/RENAME.ASM +++ b/CORE/RENAME.ASM @@ -25,7 +25,7 @@ rename: call test_show_panels ; ld hl,temp_fname ; старое имя ld de,input_line_rename+5 ; новое имя ld c,10h ; переимен. файл - rst 10h + rst ToDSS jp nc,fresh_two_panels ; без ошибок, обновить панели ; ; вывод окна ошибки переименования @@ -60,7 +60,7 @@ prep_ren_name1: ; hl=откуда ld de,temp_fname ; куда ld bc,0044h ; 11 -> 8.3 - rst 10h + rst ToDSS ; очистить структуру буфера ld hl,input_line_rename ; структура буфера call clear_struct_inline diff --git a/MOD2/SETUP.ASM b/CORE/SETUP.ASM similarity index 94% rename from MOD2/SETUP.ASM rename to CORE/SETUP.ASM index 16909a7..b0110be 100755 --- a/MOD2/SETUP.ASM +++ b/CORE/SETUP.ASM @@ -89,13 +89,13 @@ enable_ini_file: ldir ; уст. одинаковые диски в панелях ld c,2 ; получить номер тек. диска - rst 10h + rst ToDSS ld (disk),a ; номер диска акт. панели ld (disk1),a ; номер диска пасс. панели ; уст. одинаковые пути в панелях ld hl,buff_left ; буфер пути левой панели ld c,1Eh ; получить тек. путь - rst 10h + rst ToDSS ld hl,buff_left ; путь левой панели ld de,buff_right ; путь правой панели jp copy_string ; скопир. строку до нуля (с нулем) @@ -201,7 +201,7 @@ read_ini_file: ld bc,0146h ; получить переменную окружения ld hl,env_name ; имя переменной ld de,work_buffer ; буфер для значения переменной - rst 10h + rst ToDSS jr c,no_ini_string ; ошибка or a jr nz,read_ini_file__ ; переменная найдена @@ -225,7 +225,7 @@ read_ini_file__: ld de,work_buffer+127;255 ; буфер ld bc,0119h ld a,20h ; "архивный" - rst 10h + rst ToDSS pop de ; конец строки переменной окружения jr nc,found_ini_file ; файл найден no_ini_string: @@ -237,21 +237,21 @@ found_ini_file: ld hl,work_buffer ; полное имя файла (диск+путь+имя) ld a,1 ; на чтение ld c,11h ; открыть файл - rst 10h + rst ToDSS jr c,no_ini_string ; ошибка открытия ld (handle_ini_file),a ; сохр. дескриптор ; прочитать настройки менеджера ld hl,work_buffer ; буфер под данные ld de,size_ini_part1 ; число читаемых байт ld c,13h ; чтение файла - rst 10h + rst ToDSS jr c,read_ini_error ; прочитать пути левой и правой панелей ld hl,buff_left ; буфер под данные ld de,256+256 ; 512 число читаемых байт ld a,(handle_ini_file) ; дескриптор ld c,13h ; чтение файла - rst 10h + rst ToDSS ld a,true jr nc,read_ini_ok ; без ошибок read_ini_error: @@ -263,16 +263,16 @@ close_ini_file: handle_ini_file: db -1 ld c,12h ; закрыть файл - rst 10h + rst ToDSS ini_done: restore_sys_path: ld a,(save_disk) ld c,1 ; уст. диск - rst 10h + rst ToDSS ret c ld hl,save_path ld c,1Dh ; уст. каталог - rst 10h + rst ToDSS ret @@ -310,7 +310,7 @@ write_ini_file: ld bc,0146h ; получить переменную окружения ld hl,env_name ; имя переменной ld de,work_buffer ; буфер для значения переменной - rst 10h + rst ToDSS ret c ; ошибка or a jr nz,write_ini_file__ ; переменная найдена @@ -331,7 +331,7 @@ write_ini_file__: ld hl,work_buffer ; полное имя файла (диск+путь+имя) ld a,20h ; "архивный" ld c,0Ah ; создать файл - rst 10h + rst ToDSS jr c,ini_done ; ошибка создания ld (handle_ini_file),a ; сохр. дескриптор ; @@ -342,21 +342,21 @@ write_ini_file__: ld de,size_ini_part1 ; 97 число запис. байт ld a,(handle_ini_file) ; дескриптор ld c,14h ; запись файла - rst 10h + rst ToDSS jr c,close_ini_file ; закрыть файл ; записать путь левой панели ld hl,(__buff) ; адрес строки левой панели ld de,256 ; число запис. байт ld a,(handle_ini_file) ; дескриптор ld c,14h ; запись файла - rst 10h + rst ToDSS jr c,close_ini_file ; закрыть файл ; записать путь правой панели ld hl,(__buff1) ; адрес строки правой панели ld de,256 ; число запис. байт ld a,(handle_ini_file) ; дескриптор ld c,14h ; запись файла - rst 10h + rst ToDSS jp close_ini_file ; закрыть файл @@ -462,7 +462,7 @@ read_mnu_file: ld bc,0146h ; получить переменную окружения ld hl,env_name ; имя переменной ld de,work_buffer ; буфер для значения переменной - rst 10h + rst ToDSS jr c,no_mnu_string ; ошибка or a jr nz,read_mnu_file__ ; переменная найдена @@ -486,7 +486,7 @@ read_mnu_file__: ld de,work_buffer+127;255 ; буфер ld bc,0119h ld a,20h ; "архивный" - rst 10h + rst ToDSS pop de ; конец строки переменной окружения jr nc,found_mnu_file ; файл найден no_mnu_string: @@ -498,14 +498,14 @@ found_mnu_file: ld hl,work_buffer ; полное имя файла (диск+путь+имя) ld a,1 ; на чтение ld c,11h ; открыть файл - rst 10h + rst ToDSS jr c,no_mnu_string ; ошибка открытия ld (handle_mnu_file),a ; сохр. дескриптор ; прочитать файл ld hl,array_read ; 0C000h буфер под данные ld de,73*52 ; 3796 макс. число читаемых байт ld c,13h ; чтение файла - rst 10h + rst ToDSS ld a,true jr nc,read_mnu_ok ; без ошибок xor a @@ -518,6 +518,6 @@ read_mnu_ok: handle_mnu_file: db -1 ld c,12h ; закрыть файл - rst 10h + rst ToDSS mnu_done: jp restore_sys_path ; восст. тек. путь diff --git a/SHELL.ASM b/CORE/SHELL.ASM similarity index 95% rename from SHELL.ASM rename to CORE/SHELL.ASM index 02eca80..b188b30 100755 --- a/SHELL.ASM +++ b/CORE/SHELL.ASM @@ -66,13 +66,13 @@ warm_entry: ; уст. текст. режим экрана ld a,3 ; 80x32x16 цветов ld bc,0150h ; b=1 экран - rst 10h + rst ToDSS ; сохр. сист. экран ld c,0B2h ld a,(page_sys_screen) ; стр. буфера окна call screen__ ld a,0C0h - out (89h),a ; закрыть спек. экран + out (PORT_Y),a ; закрыть спек. экран ; инит. драйвер клавы xor a @@ -1699,7 +1699,7 @@ string_line: db 1 ; add hl,hl ; 2+2=4 add hl,de ld de,string_of_list ; адрес строки - in a,(89h) + in a,(PORT_Y) ld (pnt3__+1),a ; сохр. порт in a,(SLOT0) ld (pnt4__+1),a ; сохр. порт @@ -1712,7 +1712,7 @@ string_line: db 1 ; string_colon: db 0 ; номер колонки add a,81h ; +0 (смещ. слева) add a,b ; + начало панели - out (89h),a + out (PORT_Y),a ld (pnt1__+1),a ; вывод текста ld d,d ; уст. размер блока @@ -1748,12 +1748,12 @@ pnt__: ld a,(string_len) ; ld b,a pnt1__: ld c,81h ; сохр. номер колонки pnt2__: ld a,c - out (89h),a + out (PORT_Y),a ld (hl),e ; атрибут inc c djnz pnt2__ pnt3__: ld a,0 - out (89h),a ; восст. порт + out (PORT_Y),a ; восст. порт pnt4__: ld a,0 out (SLOT0),a ; восст. порт ei @@ -2211,13 +2211,13 @@ set_path_from_activ_panel: ; уст. диск от акт. панели ld a,(disk) ld c,1 - rst 10h + rst ToDSS ld a,-1 ret c ; уст. путь от акт. панели ld hl,(__buff) ld c,1Dh - rst 10h + rst ToDSS ret nc ld a,0 ret @@ -2228,13 +2228,13 @@ set_path_from_activ_panel: set_path_to_activ_panel: ; уст. диск для акт. панели ld c,2 - rst 10h + rst ToDSS ret c ld (disk),a ; уст. путь для акт. панели ld hl,(__buff) ld c,1Eh - rst 10h + rst ToDSS ret @@ -2295,7 +2295,7 @@ draw_txt_print1:; add hl,hl ; 1+1=2 add hl,hl ; 2+2=4 add hl,bc - in a,(89h) + in a,(PORT_Y) ld (tdraw4__+1),a ; сохр. порт in a,(SLOT0) ld (tdraw5__+1),a ; сохр. порт @@ -2305,7 +2305,7 @@ draw_txt_print1:; db 3Eh ; ld a,.. tdraw__: db 0 ; колонка (0..79) add a,81h ; +0 (смещ. слева) - out (89h),a + out (PORT_Y),a ld c,a ; вывод текста ld d,d ; уст. размер блока @@ -2323,13 +2323,13 @@ tdraw1__: db 1 ; ex af,af' ld b,a ; длина строки ld a,c -tdraw2__: out (89h),a +tdraw2__: out (PORT_Y),a tdraw3__: ld (hl),0 ; атрибут inc a inc de djnz tdraw2__ tdraw4__: ld a,0 - out (89h),a ; восст. порт + out (PORT_Y),a ; восст. порт tdraw5__: ld a,0 out (SLOT0),a ; восст. порт ei @@ -2349,7 +2349,7 @@ draw_half_frame:ld hl,0301h+4 ; draw_half_frame1: ld hl,0301h+(4*2) ; со 2-й строки ld b,26 ; число строк - in a,(89h) + in a,(PORT_Y) ld (fdraw3__+1),a ; сохр. порт in a,(SLOT0) ld (fdraw4__+1),a ; сохр. порт @@ -2384,14 +2384,14 @@ fdraw2__: call fdraw_axel ld de,midline4 ; линия "║ ║"" call fdraw_axel fdraw3__: ld a,0 - out (89h),a ; восст. порт + out (PORT_Y),a ; восст. порт fdraw4__: ld a,0 out (SLOT0),a ; восст. порт ei ret fdraw_axel: ld a,c - out (89h),a + out (PORT_Y),a ld d,d ; уст. размер блока ld a,40 ; длина строки ld b,b ; выкл. аксель @@ -2406,7 +2406,7 @@ fdraw_axel: ld a,c push bc ld b,40 ; длина строки ld a,c -fdraw0__: out (89h),a +fdraw0__: out (PORT_Y),a fdraw1__: ld (hl),color_panel ; 1Bh атрибут inc a djnz fdraw0__ diff --git a/MOD2/SPACE.ASM b/CORE/SPACE.ASM similarity index 95% rename from MOD2/SPACE.ASM rename to CORE/SPACE.ASM index 1674369..8f9f586 100755 --- a/MOD2/SPACE.ASM +++ b/CORE/SPACE.ASM @@ -53,7 +53,7 @@ get_free_space: ; Вычислить своб. место на MS-DOS диске ;---------------------------------------------------- ld c,3 ; инфа о диске - rst 10h + rst ToDSS jr nc,get_free_ok ld bc,0 ld e,c diff --git a/MOD2/UTILS.ASM b/CORE/UTILS.ASM similarity index 100% rename from MOD2/UTILS.ASM rename to CORE/UTILS.ASM diff --git a/CORE/_CORE_.ASM b/CORE/_CORE_.ASM new file mode 100644 index 0000000..6c9c441 --- /dev/null +++ b/CORE/_CORE_.ASM @@ -0,0 +1,261 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Хэндлы страниц менеджера +id_block: db -1 ; дескриптор выдел. блока памяти +; +page_sys_screen: db -1 ; +0 сист. экран, +2800h данные user-menu +page_dial_screen: db -1 ; буфер сохр. диал. окон и верт. меню +page_left_dir: db -1 ; список левой панели +page_right_dir: db -1 ; список правой панели +page_manager: db -1 ; осн. код менеджера +page_module0: db -1 ; драйверы клавы, мышки, диал. код с обраб. +page_module1: db -1 ; описатели панелей +page_spec: db -1 ; страница разбора спек-функций +page_viewer: db -1 ; страница вьюера +; + ;db -1 + db 0 ; стоп-байт +; +DSS_PAGE: db -1 ; сохр. порт 82h +port_E2: db -1 ; сохр. порт 0E2h +port_89: db -1 ; сохр. порт 89h +; +lastdrive: db 'B'-'A' ; последний диск в системе (0..25) + + + +;------------------------------------------------- +; Вызов ДОС-рестарта +;------------------------------------------------- +int10: PUSH AF + di + ld a,(DSS_PAGE) ; дос-страница + out (SLOT0),a + ei + POP AF + rst ToDSS +int__: PUSH AF + di + ld a,(page_module0) + out (SLOT0),a ; восст. стр. драйверов клавы, мышки + ei + POP AF + ret + +;------------------------------------------------- +; Вызов RST 18h +;------------------------------------------------- +int18: PUSH AF + di + ld a,(DSS_PAGE) ; дос-страница + out (SLOT0),a + ei + POP AF + rst ToDSS.DRV + jr int__ + + +;------------------------------------------------- +; Вызов RST 10h из спек-страницы +;------------------------------------------------- +alt10: PUSH AF + di + ld a,(DSS_PAGE) ; дос-страница + out (SLOT0),a + ei + POP AF + rst ToDSS +alt__: PUSH AF + di + ld a,(page_spec) + out (SLOT0),a ; восст. стр. + ei + POP AF + ret + +;------------------------------------------------- +; Вызов RST 18h из спек-страницы +;------------------------------------------------- +alt18: PUSH AF + di + ld a,(DSS_PAGE) ; дос-страница + out (SLOT0),a + ei + POP AF + rst ToDSS.DRV + jr alt__ + + +;----------------------------------------------------------------------- + INCLUDE 'fview_core.asm' ; процедуры выхода из гляделки +;----------------------------------------------------------------------- + + + + +; рабочий буфер ФМ +work_buffer: ds 512 + + + ds 80 +stack: ; стек ФМ + + + +begin: ; узнать boot-диск системы + ld bc,0009h + rst ToDSS + add a,"A" + ld (ccp_name),a ; launch.asm + ; иниц. номера страниц в структурах панелей + ld a,(page_left_dir) + ld (cash_left_dir),a + ld a,(page_right_dir) + ld (cash_right_dir),a + ; вкл. в #4000 стр. ФМ + ld a,(page_module1) + out (SLOT1),a + ; сохр. тек. диск + ld c,2 + rst ToDSS + ld (save_disk),a + ; сохр. текущий путь + ld hl,save_path + ld c,1Eh + rst ToDSS + + + include 'shell.asm' ; файлер + include 'fillstr.asm' ; заполнение строки файлера + include 'event.asm' ; чтение событий + include 'mouse.asm' ; мышка + include 'keybar.asm' ; key-бар + include 'clock.asm' ; часы панелей + include 'setup.asm' ; чтение/запись ini-файла, mnu-файл + include 'space.asm' ; своб. объем диска + include 'hilight.asm' ; подсветка файлов + include 'readdsk.asm' ; чтение новой папки + include 'enter.asm' ; обработка нажатия + include 'launch.asm' ; запуск файлов + include 'pos.asm' ; позиц. указателя после смены списка + include 'utils.asm' ; вспом. процедуры + include 'copy.asm' ; копирование файлов + include 'info.asm' ; info-режим панели + include 'qview.asm' ; qview-режим панели + include 'mkdir.asm' ; создание папки (F7) + include 'delete.asm' ; удаление файла/папки (F8) + include 'rename.asm' ; переименование файла (F6) + + ;include 'mod2/debug.asm' + + + +; Режим работы вьюера +viewer_mode: db 0 ; 0=обычный, 1=панельный + +attr_record: db 0 ; атрибут тек. записи списка каталога + +del_confirm: db true ; флаг подтв. удаления файлов/папок + +flag_del_non_empty: + db true ; флаг подтв. удаления не пустых папок + +move_home_end: db false ; флаг отработки Home/End при откр. панелях + +enable_mnu_file:db false ; флаг наличия mnu-файла + + + + + + +;------------------------------------------------- +; Стандартный выход в ДОС +;------------------------------------------------- +exit: ld a,b + ld (return_code+1),a ; сохр. код возврата + ; восст. ДОС-страницу + di + ld a,(DSS_PAGE) + out (SLOT0),a + ei + ; полож. сист. мышки по местному драйверу +Xcoord+1: ld hl,0 ; координата X (0..639) +Ycoord+1: ld de,0 ; координата Y (0..255) + ld c,4 ; уст. полож. мышки + rst 30h + ; уст. сист. диск и путь акт. панели + call set_path_from_activ_panel + ; восст. значение порта + ld a,(port_89) + out (PORT_Y),a + ; восст. сист. экран + ld c,0B3h + ld a,(page_sys_screen) ; страница буфера + call screen__ + ; восст. значение порта + ld a,(port_E2) + out (SLOT3),a + ; восст. полож. курсора сист. экрана +sys_cursor_coords: + ld de,0 + ld c,84h + rst 08h + ; освоб. выделенный блок памяти + ld a,(id_block) + ld c,3Eh + rst ToDSS + ; очистить буфер сист. клавы + ld bc,3135h + rst ToDSS +return_code: ld b,0 ; код возврата + ld c,41h + rst ToDSS + ret + + + + +;----------------------------------------------------------- +; Сохранить/восст. полный системный экран +;----------------------------------------------------------- +; вход: C = #B2/#B3 сохр./восст. экран +; A = номер страницы буфера окна +screen__: ld hl,2050h ; высота/ширина экрана +scrn1__: ld ix,0C000h ; адрес буфера для данных +scrn2__: ld b,a + xor a ; идентиф. глоб. окна + ld e,a ; X полож. + ld d,a ; Y полож. + di + rst 08h + ei + ret + +;----------------------------------------------------------- +; Сохранить/восст. системный экран до ком. строки +;----------------------------------------------------------- +; вход: C = #B2/#B3 сохр./восст. экран +; A = номер страницы буфера окна (page_sys_screen) +screen1__: ld hl,1E50h ; высота/ширина экрана + jr scrn1__ + +;----------------------------------------------------------- +; Сохранить/восст. полный экран менеджера +;----------------------------------------------------------- +; in: c=#B2/#B3 сохр./восст. экран +; a=номер страницы буфера окна (page_sys_screen) +screen2__: ld hl,2050h ; высота/ширина экрана + ld ix,0C000h+1400h ; начало экрана менеджера + jr scrn2__ + +;----------------------------------------------------------- +; Рестарт для Меню и диал. окон +;----------------------------------------------------------- +scrn4__: ld b,a +scrn5__: xor a ; идентиф. глоб. окна + di + rst 08h + ei + ret + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \ No newline at end of file diff --git a/FM.ASM b/FM.ASM index 25e6256..1b3652e 100755 --- a/FM.ASM +++ b/FM.ASM @@ -1,245 +1,252 @@ -; Загрузчик ФМ - - - - include 'shared_includes/constants/Sp2000.inc' - include 'shared_includes/constants/bios_equ.inc' - include 'shared_includes/constants/dss_equ.inc' - include 'version.inc' ; версия менеджера + INCLUDE 'shared_includes/constants/Sp2000.inc' + INCLUDE 'shared_includes/constants/bios_equ.inc' + INCLUDE 'shared_includes/constants/dss_equ.inc' + INCLUDE 'version.inc' ; версия менеджера ; include 'fm.exp' ; содержит "@label" метки - org 4100h - db "EXE" ; exe ID - db 0 ; exe версия - dw 512 ; 512, мл. смещ. кода - dw 0 ; ст. смещ. кода - dw end_loader - entry ; end-beg, первичный загрузчик - dw 0,0,0 ; резерв - dw entry ; адрес загрузки кода - dw start ; адрес передачи управления - dw start ; адрес стека - ds 490 + ORG 0 +EXE_HEADER: +.START: DB "EXE" ; exe ID + DB 0 ; exe версия + DWORD EXE_HEADER.SIZE ; смещ. кода + DW end_loader-entry ; end-beg, первичный загрузчик + DW 0,0,0 ; резерв + DW entry ; адрес загрузки кода + DW start ; адрес передачи управления + DW start ; адрес стека + ; + BLOCK 10,' ' ; Выравнивание для красивого отображения в HEX + BYTE 'The File Manager' + BYTE ' v ',str_version,' ' + BYTE 'by Vasil Ivanov ' + BYTE '(c) 2005-2007. ' + BYTE ' Modified by ' + BYTE ' Anatoliy ' + BYTE ' Belyanskiy, ' + BYTE ' Sprinter Team ' + BYTE ' 2025. ' +.END: ; +.SIZE EQU .END - .START -entry: db "The File Manager, Version " - db major_version + "0" - db "." - db (minor_version / 10) + "0" - db (minor_version % 10) + "0" - db " Copyright (c) 2005-2007 by Vasil Ivanov." +; + ORG #4100 +entry: include "fview/viewer.asm" +tmp_sp_buffer: BLOCK 64 ; для стека -start: - ; очистить буфер клавы - ld bc,3135h - rst ToDSS - di +; Загрузчик ФМ +start: ; очистить буфер клавы + LD BC,Dss.ScanKey*256+Dss.K_CLEAR + RST ToDSS + DI ; сохр. значение портов - in a,(SLOT0) - ld (port_82__),a - in a,(SLOT3) - ld (port_E2__),a - in a,(89h) - ld (port_89__),a + IN A,(SLOT0) + LD (DSS_PAGE__),A + IN A,(SLOT3) + LD (port_E2__),A + IN A,(PORT_Y) + LD (port_89__),A ; сохр. дескриптор менеджера - ld a,(ix-3) - ld (hFile),a + LD A,(ix-3) + LD (hFile),A ; закрыть спек. экран - ld a,0C0h - out (89h),a - ; выделить 10 стр. памяти - ld bc,0A3Dh - rst ToDSS - jr nc,ok_malloc ; Ok - ld a,(hFile) ; тек. дескриптор - ld c,12h ; закрыть exe-файл - rst ToDSS - ld hl,no_space ; нет памяти -abort: ei - ld c,5Ch - rst ToDSS - ld bc,0FF41h ; выход в ДОС - rst ToDSS - ret - -ok_malloc: ld (id_block__),a ; хэндл выдел. блока памяти + LD A,#C0 + OUT (PORT_Y),A + ; выделить 9 стр. памяти + LD BC,9*256+Dss.GetMem + RST ToDSS + JR NC,ok_malloc ; Ok + LD A,(hFile) ; тек. дескриптор + LD C,Dss.Close ; закрыть exe-файл + RST ToDSS + LD HL,no_space ; нет памяти + LD BC,DSS_Error.sys.NOT_ENOUGH_MEMORY*256 + Dss.Exit +abort: EI + PUSH BC + LD C,Dss.PChars + RST ToDSS + POP BC +.loop: RST ToDSS ; выход в ДОС + DI + HALT + ; +ok_malloc: LD (id_block__),A ; хэндл выдел. блока памяти ; получить список страниц - ld hl,page_sys_screen__ - ld c,0C5h - rst 08h + LD HL,page_sys_screen__ + LD C,BIOS.GetMemBlkPages + RST ToBIOS ; узнать версию ДОС - ld c,0 - rst ToDSS - ld hl,013Ch ; 1.60 - and a - sbc hl,de - call nc,setup_znak ; =< 1.60 уст. знакоген. 19h/1Ah + LD C,Dss.Version + RST ToDSS + LD HL,1*256 + 71 - 1 ; 1.71 + AND A + SBC HL,DE + LD HL,old_dss ; нет памяти + LD BC,DSS_Error.sys.COMMON_ERROR*256 + Dss.Exit + JR NC,abort ; =< 1.71 - ошибка ; распаковать модуль 1 ;... ; загрузить осн. код менеджера - ld a,(page_manager__) ; работает в #8000 - out (SLOT3),a - ld hl,0C000h - ld de,len_modul1 ; размер модуля 1 - ld a,(hFile) - ld c,13h - rst ToDSS - jp c,read_error + LD A,(page_manager__) ; работает в #8000 + OUT (SLOT3),A + LD HL,SLOT3.MEM_ADDR + LD DE,FM_CORE_BLK.Size ; размер модуля 1 + LD A,(hFile) + LD C,Dss.Read + RST ToDSS + JP C,read_error ; распаковать модуль 2 ;... ; загр. драйверы клавы/мышки, обработчики объектов и диал. окон - ld a,(page_module0__) ; работает в #0000 - out (SLOT3),a - ld hl,0C000h - ld de,len_modul2 ; размер модуля 2 - ld a,(hFile) - ld c,13h - rst ToDSS - jp c,read_error - ld a,(page_spec__) - ld (0C02Ah),a ; сохр. спек-страницу (vectors.asm) + LD A,(page_module0__) ; работает в #0000 + OUT (SLOT3),A + LD HL,SLOT3.MEM_ADDR + LD DE,FM_MOD_0_BLK.Size ; размер модуля 2 + LD A,(hFile) + LD C,Dss.Read + RST ToDSS + JP C,read_error + LD A,(page_spec__) + LD (0C02Ah),A ; сохр. спек-страницу (vectors.asm) ; распаковать модуль 3 ;... ; загрузить описатели панелей - ld a,(page_module1__) - out (SLOT3),a - ld hl,0C000h - ld de,len_modul3 ; размер модуля 3 - ld a,(hFile) - ld c,13h - rst ToDSS - jp c,read_error + LD A,(page_module1__) + OUT (SLOT3),A + LD HL,SLOT3.MEM_ADDR + LD DE,FM_MOD_1_BLK.Size ; размер модуля 3 + LD A,(hFile) + LD C,Dss.Read + RST ToDSS + JP C,read_error ; распаковать модуль 4 ;... ; загрузить спек-код - ld a,(page_spec__) - out (SLOT3),a - ld hl,0C000h - ld de,len_modul4 ; размер модуля 4 - ld a,(hFile) - ld c,13h - rst ToDSS - jp c,read_error - ld a,(page_module0__) - ld (0C02Ah),a ; сохр. фм-страницу (vect.asm) + LD A,(page_spec__) + OUT (SLOT3),A + LD HL,SLOT3.MEM_ADDR + LD DE,FM_SPEC_BLK.Size ; размер модуля 4 + LD A,(hFile) + LD C,Dss.Read + RST ToDSS + JP C,read_error + LD A,(page_module0__) + LD (VECT.rst28.page+SLOT3.MEM_ADDR),A ; сохр. фм-страницу (vect.asm) ; распаковать модуль 5 ;... ; загрузить вьюер - ld a,(page_viewer__) - out (SLOT3),a - ld hl,0C000h - ld de,len_modul5 ; размер вьюера - ld a,(hFile) - ld c,13h - rst ToDSS - jp c,read_error + ; LD A,(page_viewer__) + ; OUT (SLOT3),A + ; LD HL,SLOT3.MEM_ADDR + ; LD DE,FM_FVIEW_BLK.Size ; размер вьюера + ; LD A,(hFile) + ; LD C,Dss.Read + ; RST ToDSS + ; JP C,read_error + IN A,(SLOT1) + LD (page_viewer__),A ; ; закрыть exe-файл менеджера -hFile+1: ld a,0 ; сохр. дескриптор менеджера - ld c,12h - rst ToDSS +hFile+1: LD A,0 ; сохр. дескриптор менеджера + LD C,Dss.Close + RST ToDSS ; вкл. в #8000 осн. код ФМ - ld a,(page_manager__) - out (SLOT2),a + LD A,(page_manager__) + OUT (SLOT2),A ; перекачать хэндлы страниц - ld hl,id_block__ ; откуда - ld de,id_block ; куда - ld bc,pages_end - id_block__ - ldir + LD HL,id_block__ ; откуда + LD DE,id_block ; куда + LD BC,pages_end - id_block__ + LDIR ; - ld sp,stack ; стек ФМ + LD SP,stack ; стек ФМ ; не менять полож. мышки ФМ - ld c,3 ; узнать статус мышки - rst 30h - ld (Xcoord),hl ; координата X (0..639) - ld (Ycoord),de ; координата Y (0..255) - jp 8000h ; перейти на программу + LD C,Dss.Mouse.ReadState ; узнать статус мышки + RST ToDSS.Mouse + LD (Xcoord),HL ; координата X (0..639) + LD (Ycoord),DE ; координата Y (0..255) + JP begin ; перейти на программу ; Хэндлы страниц менеджера -id_block__: db -1 ; дескриптор выдел. блока памяти - ; -page_sys_screen__: - db -1 ; +#0000 сист.экран, +#1400 экран ФМ -page_dial_screen__: - db -1 ; буфер сохр. диал. окон и верт. меню -page_left_dir__: - db -1 ; список левой панели -page_right_dir__: - db -1 ; список правой панели -page_manager__: - db -1 ; осн. код менеджера -page_module0__: db -1 ; драйверы клавы, мышки, диал. код с обраб. -page_module1__: db -1 ; описатели панелей -page_spec__: db -1 ; страница разбора спек-функций -page_viewer__: db -1 ; страница вьюера - db -1 - db 0 ; стоп-байт - ; -port_82__: db -1 ; сохр. порт 82h -port_E2__: db -1 ; сохр. порт 0E2h -port_89__: db -1 ; сохр. порт 89h +id_block__: DB -1 ; дескриптор выдел. блока памяти +page_sys_screen__: DB -1 ; +#0000 сист.экран, +#1400 экран ФМ +page_dial_screen__: DB -1 ; буфер сохр. диал. окон и верт. меню +page_left_dir__: DB -1 ; список левой панели +page_right_dir__: DB -1 ; список правой панели +page_manager__: DB -1 ; осн. код менеджера +page_module0__: DB -1 ; драйверы клавы, мышки, диал. код с обраб. +page_module1__: DB -1 ; описатели панелей +page_spec__: DB -1 ; страница разбора спек-функций +page_viewer__: DB -1 ; страница вьюера + ;DB -1 + DB 0 ; стоп-байт + ; +DSS_PAGE__: DB -1 ; сохр. порт 82h +port_E2__: DB -1 ; сохр. порт 0E2h +port_89__: DB -1 ; сохр. порт 89h pages_end: - - ; ошибка загрузки менеджера -read_error: ld a,(id_block__) - ld c,3Eh ; освоб. выдел. блок памяти - rst ToDSS - ld a,(hFile) - ld c,12h ; закрыть файл - rst ToDSS - ld hl,load_err - jp abort +read_error: LD (.number),A + LD A,(id_block__) + LD C,Dss.FreeMem ; освоб. выдел. блок памяти + RST ToDSS + LD A,(hFile) + LD C,Dss.Close ; закрыть файл + RST ToDSS + LD HL,load_err +.number+1: LD B,0 + LD C,Dss.Exit + JP abort -no_space: db "Not enough memory to run program !",0Dh,0Ah,0 -load_err: db "Disk loading error !",0Dh,0Ah,0 +no_space: DZ "Not enough memory to run FM!\r\n" +load_err: DZ "Disk loading error!\r\n" +old_dss: DZ "FM requires DSS version 1.71 or higher!\r\n" -; Подготовить знакоген. для софт. курсора -setup_znak: ld a,(page_manager__) ; врем. буфер - out (SLOT2),a - ; получить сист. знакоген. - ld de,8000h ; буфер для 2048 байт данных - push de - ld c,0B8h ; получить знакоген. - rst 08h - ; заполнить кодом 0FFh 2 нижние линии - ld hl,8000h+(2048-(2*256)) ; последние 512 байт - ld bc,511 - ld a,1Ah ; номер знакоген. - call fill_data_font - pop hl - ; заполнить остальные 6 линий (полный блок) - ld bc,2048-513 - ld a,19h ; номер знакоген. -; Настройка знакоген. и его регистрация -; вход: a=номер знакоген. -; hl=данные -; bc=размер данных -fill_data_font: ld e,l - ld d,h - ld (hl),-1 - inc de - ldir - ld de,8000h ; знакоген. - ld c,0B6h ; уст. знакоген. - rst 08h - ret +; ; Подготовить знакоген. для софт. курсора +; setup_znak: LD A,(page_manager__) ; врем. буфер +; OUT (SLOT2),A +; ; получить сист. знакоген. +; LD DE,SLOT2.MEM_ADDR ; буфер для 2048 байт данных +; PUSH DE +; LD C,BIOS.WIN_GET_ZG ; получить знакоген. +; RST ToBIOS +; ; заполнить кодом 0FFh 2 нижние линии +; LD HL,SLOT2.MEM_ADDR+(2048-(2*256)) ; последние 512 байт +; LD BC,511 +; LD A,1Ah ; номер знакоген. +; CALL fill_data_font +; POP HL +; ; заполнить остальные 6 линий (полный блок) +; LD BC,2048-513 +; LD A,19h ; номер знакоген. +; ; Настройка знакоген. и его регистрация +; ; вход: a=номер знакоген. +; ; hl=данные +; ; bc=размер данных +; fill_data_font: LD E,L +; LD D,H +; LD (HL),-1 +; INC DE +; LDIR +; LD DE,SLOT2.MEM_ADDR ; знакоген. +; LD C,BIOS.WIN_SET_ZG ; уст. знакоген. +; RST ToBIOS +; RET +;------------------------------------------------- -; депакер -;... - ; Конец загрузчика end_loader: @@ -250,4 +257,4 @@ end_loader: ; Код менеджера ;------------------------------------------------- ; incbin 'Build/fm.bin' - include 'main.asm' + INCLUDE 'main.asm' diff --git a/FVIEW/CHFONT.ASM b/FVIEW/CHFONT.ASM index 6884e8e..3d93eb1 100755 --- a/FVIEW/CHFONT.ASM +++ b/FVIEW/CHFONT.ASM @@ -19,7 +19,7 @@ change_code_page: add a,c ld c,a ld b,0 - ld a,(viewer_mode) ; 0/1 режим вьюера (норм./панельный) + ld a,(viewer_mode) ; 0/1 режим вьюера (норм./панельный) or a jr nz,ch_code_pg1 ld hl,TAE00 ; "WinKoiDos" diff --git a/FVIEW/FVIEW.ASM b/FVIEW/FVIEW.ASM index 20fc564..fd8e965 100755 --- a/FVIEW/FVIEW.ASM +++ b/FVIEW/FVIEW.ASM @@ -47,7 +47,7 @@ viewer: call setup_fview ; ld hl,win_fview_load_file ; описатель окна call WinSimple ; вывести окно ; загр. файл - ld hl,temp_fname ; имя файла + ld hl,temp_fname ; имя файла call A837F ; вся работа по загрузке файла в страницы push af ; закрыть окно @@ -128,14 +128,14 @@ hsize__:dw 0 ; ;=========================================================== A837F: ld a,1 ; на чтение ld c,11h ; открыть файл - rst 10h + rst ToDSS ret c ld (file_handle),a ; дескр. файла ld hl,0 ld ix,0 ld a,(file_handle) ; дескр. файла ld bc,0215h ; указатель на конец файла - rst 10h + rst ToDSS ld (hsize__),hl ; ст.разряд размера файла ld (lsize__),ix ; мл.разряд call get_mem_file ; расч. и выдел. страницы под файл @@ -144,7 +144,7 @@ A837F: ld a,1 ; close_file: ld a,(file_handle) ; дескр. файла ld c,12h ; закрыть файл - rst 10h + rst ToDSS ret ; A83B3: call close_file @@ -197,7 +197,7 @@ A83ED: ld hl,0 ld ix,0 ld a,(file_handle) ; дескр. файла ld bc,0015h ; указатель на начало файла - rst 10h + rst ToDSS ld a,(id_pages) ; идентиф. блока памяти ld b,0 ; лог. номер страницы в блоке ld c,0C4h ; получить физ. номер страницы в блоке @@ -209,7 +209,7 @@ A8404: push af ld de,4000h ; сколько ld a,(file_handle) ; дескр. ld c,13h ; читать файл - rst 10h + rst ToDSS pop bc ret c ; ошибка чтения inc a ; a=#FF (прочитано меньшее число байт) @@ -337,7 +337,7 @@ main_viewer: ; очистить осн. окно ld de,0 ; Y/X полож. окна ld hl,2050h ; Y/X размеры - ld a,(color_array+39) ; 1Bh атрибут + ld a,(color_array + 39) ; 1Bh атрибут ld b,a ld c,89h ; очистка окна rst 08h @@ -353,7 +353,7 @@ main_viewer: rst 08h ; окрасить верх. стат. строку ld hl,TA215 ; буфер строки - ld a,(color_array+41) ; 30h атрибут + ld a,(color_array + 41) ; 30h атрибут ld e,a loc04: ld b,len_string ; 80 длина строки ld c,85h ; вывести строку с атрибутом @@ -1389,7 +1389,7 @@ AB593: ld a,(iy+5) jp z,AB5A0 ld a,(color_array+42) ; 1Eh атрибут ld e,a - ld a,"" ; "<" + ld a,#1B ; ? AB5A0: inc hl push hl ld bc,0181h ; вывести 1 символ с атрибутом @@ -1412,7 +1412,7 @@ loc30: cp len_string+1 ; 80+1 jp c,AB5C2 ld a,(color_array+42) ; 1Eh атрибут ld e,a - ld c,1Ah ; "->" + ld c,#1A ; ? AB5C2: ld a,c ld bc,0181h ; вывести 1 символ с атрибутом rst 08h diff --git a/FVIEW/Viewer.asm b/FVIEW/Viewer.asm new file mode 100644 index 0000000..d22510e --- /dev/null +++ b/FVIEW/Viewer.asm @@ -0,0 +1,21 @@ +;=========================================================== +; Подгружаемый Модуль 4. Вьюер +;=========================================================== +; подкл. на время вызова вьюера +; + DISP #4100 + +FM_FVIEW_BLK.Start EQU $ + include "fview.asm" ; вьюер + include "msfview.asm" ; события мышки + include "setview.asm" ; настройка вьюера + include "chfont.asm" ; win-1251, koi8-r кодовые таблицы + include "fview.z80" ; описатель окна "Reading file..." +FM_FVIEW_BLK: +.End EQU $ +.Size EQU .End - .Start + + ENT +; + DISPLAY "FVIEW ",/H,FM_FVIEW_BLK.Start," ",/H,FM_FVIEW_BLK.End," ",/A,FM_FVIEW_BLK.Size +;======================================================================= \ No newline at end of file diff --git a/MAIN.ASM b/MAIN.ASM index 3cbff58..7759f01 100755 --- a/MAIN.ASM +++ b/MAIN.ASM @@ -8,28 +8,32 @@ ; При сканировании папки (процедура ScanTree), для врем. буфера выделяется ; 1 страница памяти. После отработки процедуры, страница освобождается. ; -; -; include 'shared_includes/constants/Sp2000.inc' -EDEPTH equ 36 ; слишком большая влож. папок или >= 1024 папок -EUABORT equ 37 ; User abort (операция прервана пользователем) -max_len_comline equ 126;254 ; макс. длина ком-строки (больше не делать) -history_size equ 128;256 ; размер history-буфера +EDEPTH equ 36 ; слишком большая влож. папок или >= 1024 папок +EUABORT equ 37 ; User abort (операция прервана пользователем) +max_len_comline equ 126;254 ; макс. длина ком-строки (больше не делать) +history_size equ 128;256 ; размер history-буфера ; Адреса секций врем. массива цветов в буфере -;tmp_color_list equ work_buffer + 511 - len_color_array ; начало врем. массива -;color_list2 equ tmp_color_list + col_lst1 -;color_list3 equ color_list2 + col_lst2 -;color_list4 equ color_list3 + col_lst3 -;color_list5 equ color_list4 + col_lst4 -;color_list6 equ color_list5 + col_lst5 -;color_list7 equ color_list6 + col_lst6 -;color_list8 equ color_list7 + col_lst7 -;color_list9 equ color_list8 + col_lst8 -;color_list10 equ color_list9 + col_lst9 -;color_list11 equ color_list10 + col_lst10 +tmp_color_list equ work_buffer + 511 - len_color_array ; начало врем. массива +color_list2 equ tmp_color_list + col_lst1 +color_list3 equ color_list2 + col_lst2 +color_list4 equ color_list3 + col_lst3 +color_list5 equ color_list4 + col_lst4 +color_list6 equ color_list5 + col_lst5 +color_list7 equ color_list6 + col_lst6 +color_list8 equ color_list7 + col_lst7 +color_list9 equ color_list8 + col_lst8 +color_list10 equ color_list9 + col_lst9 +color_list11 equ color_list10 + col_lst10 + +;len_modul1 equ FM_CORE_BLK.Size ; размер осн. кода (#8000) +;len_modul2 equ FM_MOD_0_BLK.Size ; размер модуля (#0000) +;len_modul3 equ FM_MOD_1_BLK.Size ; размер модуля (#4000) +;len_modul4 equ FM_SPEC_BLK.Size ; размер спек-модуля (#0000) +;len_modul5 equ FM_FVIEW_BLK.Size ; размер вьюера (#4000) ;---- Цвета менеджера ---- @@ -97,341 +101,75 @@ color_spec equ 1Ch ; спе + ORG 0 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; include 'version.inc' ; версия менеджера - - ; export id_block - ; export len_modul1 - ; export len_modul2 - ; export len_modul3 - ; export len_modul4 - ; export len_modul5 - ; export stack - ; export Xcoord - ; export Ycoord - - - org 8000h - -mod0: ; метка для вычисл. размера -;//////////////////////////////////////////////////////////////////////// +;======================================================================= +; Основной Модуль CORE +;======================================================================= +; всегда подключен ; -; Точка входа в менеджер + DISP #8000 +FM_CORE_BLK.Start EQU $ + include "core/_core_.asm" +FM_CORE_BLK: +.End EQU $ +.Size EQU .End - .Start + + ENT ; -;//////////////////////////////////////////////////////////////////////// - - jp begin - - -; Хэндлы страниц менеджера -id_block: db -1 ; дескриптор выдел. блока памяти - ; -page_sys_screen:db -1 ; +0 сист. экран, +2800h данные user-menu -page_dial_screen: - db -1 ; буфер сохр. диал. окон и верт. меню -page_left_dir: db -1 ; список левой панели -page_right_dir: db -1 ; список правой панели -page_manager: db -1 ; осн. код менеджера -page_module0: db -1 ; драйверы клавы, мышки, диал. код с обраб. -page_module1: db -1 ; описатели панелей -page_spec: db -1 ; страница разбора спек-функций -page_viewer: db -1 ; страница вьюера - db -1 - db 0 ; стоп-байт - ; -port_82: db -1 ; сохр. порт 82h -port_E2: db -1 ; сохр. порт 0E2h -port_89: db -1 ; сохр. порт 89h - - -lastdrive: db 'B'-'A' ; последний диск в системе (0..25) - - - -;------------------------------------------------- -; Вызов ДОС-рестарта -;------------------------------------------------- -int10: ex af,af' - di - ld a,(port_82) ; дос-страница - out (SLOT0),a - ei - ex af,af' - rst 10h -int__: ex af,af' - di - ld a,(page_module0) - out (SLOT0),a ; восст. стр. драйверов клавы, мышки - ei - ex af,af' - ret - -;------------------------------------------------- -; Вызов RST 18h -;------------------------------------------------- -int18: ex af,af' - di - ld a,(port_82) ; дос-страница - out (SLOT0),a - ei - ex af,af' - rst 18h - jr int__ - - -;------------------------------------------------- -; Вызов RST 10h из спек-страницы -;------------------------------------------------- -alt10: ex af,af' - di - ld a,(port_82) ; дос-страница - out (SLOT0),a - ei - ex af,af' - rst 10h -alt__: ex af,af' - di - ld a,(page_spec) - out (SLOT0),a ; восст. стр. - ei - ex af,af' - ret - -;------------------------------------------------- -; Вызов RST 18h из спек-страницы -;------------------------------------------------- -alt18: ex af,af' - di - ld a,(port_82) ; дос-страница - out (SLOT0),a - ei - ex af,af' - rst 18h - jr alt__ - - - - include 'fview/fview.inc' ; процедуры выхода из гляделки + DISPLAY "CORE ",/H,FM_CORE_BLK.Start," ",/H,FM_CORE_BLK.End," ",/A,FM_CORE_BLK.Size +;======================================================================= - -; рабочий буфер ФМ -work_buffer: ds 512 - - - ds 80 -stack: ; стек ФМ - - - -begin: - ; узнать boot-диск системы - ld bc,0009h - rst 10h - add a,"A" - ld (ccp_name),a ; launch.asm - ; иниц. номера страниц в структурах панелей - ld a,(page_left_dir) - ld (cash_left_dir),a - ld a,(page_right_dir) - ld (cash_right_dir),a - ; вкл. в #4000 стр. ФМ - ld a,(page_module1) - out (SLOT1),a - ; сохр. тек. диск - ld c,2 - rst 10h - ld (save_disk),a - ; сохр. текущий путь - ld hl,save_path - ld c,1Eh - rst 10h - - - include 'shell.asm' ; файлер - include 'mod2/fillstr.asm' ; заполнение строки файлера - include 'mod2/event.asm' ; чтение событий - include 'mod2/mouse.asm' ; мышка - include 'mod2/keybar.asm' ; key-бар - include 'mod2/clock.asm' ; часы панелей - include 'mod2/setup.asm' ; чтение/запись ini-файла, mnu-файл - include 'mod2/space.asm' ; своб. объем диска - include 'mod2/hilight.asm' ; подсветка файлов - include 'mod2/readdsk.asm' ; чтение новой папки - include 'mod2/enter.asm' ; обработка нажатия - include 'mod2/launch.asm' ; запуск файлов - include 'mod2/pos.asm' ; позиц. указателя после смены списка - include 'mod2/utils.asm' ; вспом. процедуры - include 'mod2/copy.asm' ; копирование файлов - include 'mod2/info.asm' ; info-режим панели - include 'mod2/qview.asm' ; qview-режим панели - include 'mod2/mkdir.asm' ; создание папки (F7) - include 'mod2/delete.asm' ; удаление файла/папки (F8) - include 'mod2/rename.asm' ; переименование файла (F6) - - include 'mod2/debug.asm' - - - -; Режим работы вьюера -viewer_mode: db 0 ; 0=обычный, 1=панельный - -attr_record: db 0 ; атрибут тек. записи списка каталога - -del_confirm: db true ; флаг подтв. удаления файлов/папок - -flag_del_non_empty: - db true ; флаг подтв. удаления не пустых папок - -move_home_end: db false ; флаг отработки Home/End при откр. панелях - -enable_mnu_file:db false ; флаг наличия mnu-файла - - - - - - -;------------------------------------------------- -; Стандартный выход в ДОС -;------------------------------------------------- -exit: ld a,b - ld (return_code+1),a ; сохр. код возврата - ; восст. ДОС-страницу - di - ld a,(port_82) - out (SLOT0),a - ei - ; полож. сист. мышки по местному драйверу -Xcoord+1: ld hl,0 ; координата X (0..639) -Ycoord+1: ld de,0 ; координата Y (0..255) - ld c,4 ; уст. полож. мышки - rst 30h - ; уст. сист. диск и путь акт. панели - call set_path_from_activ_panel - ; восст. значение порта - ld a,(port_89) - out (89h),a - ; восст. сист. экран - ld c,0B3h - ld a,(page_sys_screen) ; страница буфера - call screen__ - ; восст. значение порта - ld a,(port_E2) - out (SLOT3),a - ; восст. полож. курсора сист. экрана -sys_cursor_coords: - ld de,0 - ld c,84h - rst 08h - ; освоб. выделенный блок памяти - ld a,(id_block) - ld c,3Eh - rst 10h - ; очистить буфер сист. клавы - ld bc,3135h - rst 10h -return_code: ld b,0 ; код возврата - ld c,41h - rst 10h - ret - - - - -;----------------------------------------------------------- -; Сохранить/восст. полный системный экран -;----------------------------------------------------------- -; вход: C = #B2/#B3 сохр./восст. экран -; A = номер страницы буфера окна -screen__: ld hl,2050h ; высота/ширина экрана -scrn1__: ld ix,0C000h ; адрес буфера для данных -scrn2__: ld b,a - xor a ; идентиф. глоб. окна - ld e,a ; X полож. - ld d,a ; Y полож. - di - rst 08h - ei - ret - -;----------------------------------------------------------- -; Сохранить/восст. системный экран до ком. строки -;----------------------------------------------------------- -; вход: C = #B2/#B3 сохр./восст. экран -; A = номер страницы буфера окна (page_sys_screen) -screen1__: ld hl,1E50h ; высота/ширина экрана - jr scrn1__ - -;----------------------------------------------------------- -; Сохранить/восст. полный экран менеджера -;----------------------------------------------------------- -; in: c=#B2/#B3 сохр./восст. экран -; a=номер страницы буфера окна (page_sys_screen) -screen2__: ld hl,2050h ; высота/ширина экрана - ld ix,0C000h+1400h ; начало экрана менеджера - jr scrn2__ - -;----------------------------------------------------------- -; Рестарт для Меню и диал. окон -;----------------------------------------------------------- -scrn4__: ld b,a -scrn5__: xor a ; идентиф. глоб. окна - di - rst 08h - ei - ret - - - - - - - -mod1: ; метка для вычисл. размера - -;=========================================================== -; Подгружаемый Модуль 1 +;======================================================================= +; Подгружаемый Модуль 0 ; Драйверы клавы, мышки, обработчик диал. окон, tv-объекты -;=========================================================== +;======================================================================= ; всегда подключен (кроме вызовов rst 10h, rst 18h) +; + DISP 0 - phase 0000h - +FM_MOD_0_BLK.Start EQU $ include 'mod0/vectors.asm' ; векторы прерываний include 'mod0/keybdrv.asm' ; драйвер клавы include 'mod0/cursor.asm' ; программный курсор include 'mod0/mousedrv.asm' ; драйвер мышки - include 'objs/dialog.asm' ; обработчик диал. окон - include 'objs/button.asm' ; объект ~Button~ - include 'objs/inline.asm' ; объекты ~Input Line~, ~Inp Line~ - include 'objs/listbox.asm' ; объект ~List Box~ - include 'objs/radio.asm' ; объекты ~Radio Button~, ~Check Box~ - include 'objs/process.asm' ; объект ~Process Line~ - include 'objs/pallete.asm' ; объект ~Pallete~ - include 'objs/dialog1.asm' ; объекты ~Text Line~, ~Horiz. Line~ - include 'objs/hmenu.asm' ; Меню: "Horizontal", "Pull", "Select disk" - include 'objs/umenu.asm' ; вызов User-Menu + include 'mod0/objs/dialog.asm' ; обработчик диал. окон + include 'mod0/objs/button.asm' ; объект ~Button~ + include 'mod0/objs/inline.asm' ; объекты ~Input Line~, ~Inp Line~ + include 'mod0/objs/listbox.asm' ; объект ~List Box~ + include 'mod0/objs/radio.asm' ; объекты ~Radio Button~, ~Check Box~ + include 'mod0/objs/process.asm' ; объект ~Process Line~ + include 'mod0/objs/pallete.asm' ; объект ~Pallete~ + include 'mod0/objs/dialog1.asm' ; объекты ~Text Line~, ~Horiz. Line~ + include 'mod0/objs/hmenu.asm' ; Меню: "Horizontal", "Pull", "Select disk" + include 'mod0/objs/umenu.asm' ; вызов User-Menu include 'mod0/chdisk.asm' ; вызов меню Select Disk include 'mod0/listdrv.asm' ; иниц. список типов дисков include 'mod0/usermenu.asm' ; подготовка Меню Пользователя +FM_MOD_0_BLK: +.End EQU $ +.Size EQU .End - .Start - dephase + ENT +; + DISPLAY "MODULE 0 ",/H,FM_MOD_0_BLK.Start," ",/H,FM_MOD_0_BLK.End," ",/A,FM_MOD_0_BLK.Size +;======================================================================= -mod2: -;=========================================================== -; Подгружаемый Модуль 2 -;=========================================================== -; постоянно включен - - phase 4000h +;======================================================================= +; Подгружаемый Модуль 1 +;======================================================================= +; постоянно включен, кроме вызова вьюера +; + DISP #4000 +FM_MOD_1_BLK.Start EQU $ include 'mod1/buffers.asm' ; раб. буферы объектов include 'mod1/comline.asm' ; ком-строка include 'mod1/width.asm' ; огран. длины пути панели @@ -461,61 +199,59 @@ mod2: include 'mod1/mkdir.z80' ; описатель окна создания папки include 'mod1/delete.z80' ; описатель окна удаление файла/папки include 'mod1/rename.z80' ; описатель окна переимен. файла - dephase +FM_MOD_1_BLK: +.End EQU $ +.Size EQU .End - .Start -mod3: + ENT +; + DISPLAY "MODULE 1 ",/H,FM_MOD_1_BLK.Start," ",/H,FM_MOD_1_BLK.End," ",/A,FM_MOD_1_BLK.Size +;======================================================================= -;=========================================================== + + + +;======================================================================= ; Подгружаемый Модуль 3. Спек-код -;=========================================================== +;======================================================================= ; подкл. на время вызова спек-функций +; - phase 0000h + DISP 0 - include 'spec/vect.asm' ; векторы - include 'spec/funcs.asm' ; спек-функции +FM_SPEC_BLK.Start EQU $ + include 'spec_fn/vect.asm' ; векторы + include 'spec_fn/funcs.asm' ; спек-функции +FM_SPEC_BLK: +.End EQU $ +.Size EQU .End - .Start - dephase - -mod4: - -;=========================================================== -; Подгружаемый Модуль 4. Вьюер -;=========================================================== -; подкл. на время вызова вьюера - - phase 4000h - - include 'fview/fview.asm' ; вьюер - include 'fview/msfview.asm' ; события мышки - include 'fview/setview.asm' ; настройка вьюера - include 'fview/chfont.asm' ; win-1251, koi8-r кодовые таблицы - include 'fview/fview.z80' ; описатель окна "Reading file..." - - dephase + ENT +; + DISPLAY "SPEC_FN ",/H,FM_SPEC_BLK.Start," ",/H,FM_SPEC_BLK.End," ",/A,FM_SPEC_BLK.Size +;======================================================================= -; Адреса секций врем. массива цветов в буфере -tmp_color_list equ work_buffer + 511 - len_color_array ; начало врем. массива -color_list2 equ tmp_color_list + col_lst1 -color_list3 equ color_list2 + col_lst2 -color_list4 equ color_list3 + col_lst3 -color_list5 equ color_list4 + col_lst4 -color_list6 equ color_list5 + col_lst5 -color_list7 equ color_list6 + col_lst6 -color_list8 equ color_list7 + col_lst7 -color_list9 equ color_list8 + col_lst8 -color_list10 equ color_list9 + col_lst9 -color_list11 equ color_list10 + col_lst10 +; ;=========================================================== +; ; Подгружаемый Модуль 4. Вьюер +; ;=========================================================== +; ; подкл. на время вызова вьюера +; ; +; DISP #4000 +; FM_FVIEW_BLK.Start EQU $ +; include 'fview/fview.asm' ; вьюер +; include 'fview/msfview.asm' ; события мышки +; include 'fview/setview.asm' ; настройка вьюера +; include 'fview/chfont.asm' ; win-1251, koi8-r кодовые таблицы +; include 'fview/fview.z80' ; описатель окна "Reading file..." +; FM_FVIEW_BLK: +; .End EQU $ +; .Size EQU .End - .Start - - -addr_id_block equ id_block ; адрес ячейки id_block -len_modul1 equ mod1 - mod0 ; размер осн. кода (#8000) -len_modul2 equ mod2 - mod1 ; размер модуля (#0000) -len_modul3 equ mod3 - mod2 ; размер модуля (#4000) -len_modul4 equ mod4 - mod3 ; размер спек-модуля (#0000) -len_modul5 equ $ - mod4 ; размер вьюера (#4000) +; ENT +; ; +; DISPLAY "FVIEW ",/H,FM_FVIEW_BLK.Start," ",/H,FM_FVIEW_BLK.End," ",/A,FM_FVIEW_BLK.Size +; ;======================================================================= \ No newline at end of file diff --git a/MOD0/CURSOR.ASM b/MOD0/CURSOR.ASM index b4539b2..dc7d9ff 100755 --- a/MOD0/CURSOR.ASM +++ b/MOD0/CURSOR.ASM @@ -1,10 +1,14 @@ -CursorPos: - dw 1E00h ; Y/X позиция курсора (экран. коорд.) - - ;----------------------------------------------------------- ; Курсор объекта "Input Line" и функции "Command Line" ;----------------------------------------------------------- +INS_CUR_ZG: EQU #9B ; 19h +CURSOR_ZG: EQU #5B ; 1Ah +NORM_ZG: EQU #1B +; +CursorPos: + dw 1E00h ; Y/X позиция курсора (экран. коорд.) +; +; PrnILCr:db 3Eh ; ld a,.. Timer: db 1 ; пауза мигания dec a @@ -22,15 +26,15 @@ PILCurs:ld de,(CursorPos) ; Y/X xor a ld c,0B4h ; получить символ rst 08h - ld bc,1BB5h ; b=знакоген., с=символ на экран + ld bc,NORM_ZG*256 + #B5 ; b=знакоген., с=символ на экран ld a,(Flag) or a jr z,curs__ - ld b,1Ah ; черта + ld b,CURSOR_ZG ; черта ld a,(D0642) ; флаги клавы bit 1,a ; бит Ins jr nz,$+4 - ld b,19h ; блок + ld b,INS_CUR_ZG ; блок curs__: xor a ; номер окна rst 08h ld a,1 @@ -57,6 +61,6 @@ CursPos1: xor a rst 08h xor a - ld bc,1BB5h ; символ на экран + ld bc,NORM_ZG*256 + #B5 ; символ на экран rst 08h ret diff --git a/MOD0/LISTDRV.ASM b/MOD0/LISTDRV.ASM index 1544ffe..331515d 100755 --- a/MOD0/LISTDRV.ASM +++ b/MOD0/LISTDRV.ASM @@ -5,15 +5,15 @@ init_list_types_drives: ld a,(disk) ; диск акт. панели ld c,1 ; уст. диск - rst 10h + rst ToDSS jr nc,init_list_types_drv1 ; исп. номер boot-диска ld bc,0009h - rst 10h + rst ToDSS ld (disk),a ; узнать номер посл. диска в системе ld c,1 ; уст. диск - rst 10h + rst ToDSS init_list_types_drv1: ld (lastdrive),a ; послед. диск в системе (0..25) cp 1+1 @@ -29,19 +29,19 @@ make_dlist_loop: push bc ld a,c ; номер диска ld c,1 ; open device - rst 18h + rst ToDSS.DRV pop bc jr c,make_dlist_err push bc ld a,c ld de,work_buffer ; буфер ld c,4 ; get BPB - rst 18h + rst ToDSS.DRV pop bc jr c,make_dlist_err ld a,c ; номер диска ld c,2 ; close device - rst 18h + rst ToDSS.DRV pop hl pop bc ld a,(work_buffer+21) ; байт формата носителя diff --git a/MOD0/MOUSEDRV.ASM b/MOD0/MOUSEDRV.ASM index 7451977..e0fe447 100755 --- a/MOD0/MOUSEDRV.ASM +++ b/MOD0/MOUSEDRV.ASM @@ -161,7 +161,7 @@ RefrMs1:call RestorM ; Restore Screen from Mouse RestorM:ld de,(TempXY) - in a,(89h) + in a,(PORT_Y) ld c,a in a,(0E2h) ld b,a @@ -178,7 +178,7 @@ RestorM:ld de,(TempXY) and 80h or 1 add a,e - out (89h),a + out (PORT_Y),a inc l inc l ld a,(hl) @@ -187,7 +187,7 @@ RestorM:ld de,(TempXY) ld a,b out (0E2h),a ld a,c - out (89h),a + out (PORT_Y),a ret ; Put Text Mouse Cursor On Screen @@ -204,7 +204,7 @@ MousWrt:ld de,(Xcoord) and 1Fh ld d,a ld (TempXY),de - in a,(89h) + in a,(PORT_Y) ld c,a in a,(0E2h) ld b,a @@ -221,7 +221,7 @@ MousWrt:ld de,(Xcoord) and 80h or 1 add a,e - out (89h),a + out (PORT_Y),a inc l inc l ld a,(hl) @@ -231,7 +231,7 @@ MousWrt:ld de,(Xcoord) ld a,b out (0E2h),a ld a,c - out (89h),a + out (PORT_Y),a ret ; Получить новую информацию о мышке diff --git a/OBJS/BUTTON.ASM b/MOD0/OBJS/BUTTON.ASM similarity index 100% rename from OBJS/BUTTON.ASM rename to MOD0/OBJS/BUTTON.ASM diff --git a/OBJS/DIALOG.ASM b/MOD0/OBJS/DIALOG.ASM similarity index 100% rename from OBJS/DIALOG.ASM rename to MOD0/OBJS/DIALOG.ASM diff --git a/OBJS/DIALOG1.ASM b/MOD0/OBJS/DIALOG1.ASM similarity index 100% rename from OBJS/DIALOG1.ASM rename to MOD0/OBJS/DIALOG1.ASM diff --git a/OBJS/HMENU.ASM b/MOD0/OBJS/HMENU.ASM similarity index 100% rename from OBJS/HMENU.ASM rename to MOD0/OBJS/HMENU.ASM diff --git a/OBJS/INLINE.ASM b/MOD0/OBJS/INLINE.ASM similarity index 100% rename from OBJS/INLINE.ASM rename to MOD0/OBJS/INLINE.ASM diff --git a/OBJS/LISTBOX.ASM b/MOD0/OBJS/LISTBOX.ASM similarity index 100% rename from OBJS/LISTBOX.ASM rename to MOD0/OBJS/LISTBOX.ASM diff --git a/OBJS/PALLETE.ASM b/MOD0/OBJS/PALLETE.ASM similarity index 100% rename from OBJS/PALLETE.ASM rename to MOD0/OBJS/PALLETE.ASM diff --git a/OBJS/PROCESS.ASM b/MOD0/OBJS/PROCESS.ASM similarity index 100% rename from OBJS/PROCESS.ASM rename to MOD0/OBJS/PROCESS.ASM diff --git a/OBJS/RADIO.ASM b/MOD0/OBJS/RADIO.ASM similarity index 100% rename from OBJS/RADIO.ASM rename to MOD0/OBJS/RADIO.ASM diff --git a/OBJS/UMENU.ASM b/MOD0/OBJS/UMENU.ASM similarity index 100% rename from OBJS/UMENU.ASM rename to MOD0/OBJS/UMENU.ASM diff --git a/MOD0/VECTORS.ASM b/MOD0/VECTORS.ASM index db51353..a622c93 100755 --- a/MOD0/VECTORS.ASM +++ b/MOD0/VECTORS.ASM @@ -7,13 +7,13 @@ db -1 ; RST 08h. Вызов Биоса push af - ld a,0 ; вкл. ПЗУ Биоса в 0-е окно - out (7Ch),a + ld a,SYS_PORT.BIOS + out (SYS_PORT.ON),a pop af ret db -1 ; RST 10h. Вызов ДОС-а - jp int10 ; fm.asm + jp int10 ; Main.asm db -1 db -1 db -1 @@ -36,7 +36,7 @@ ; RST 28h. Вызов спек-кода push af ld a,0 ; сохр. page_spec - out (82h),a + out (SLOT0),a pop af ret db -1 diff --git a/MOD1/COMLINE.ASM b/MOD1/COMLINE.ASM index 2087f9b..f85f686 100755 --- a/MOD1/COMLINE.ASM +++ b/MOD1/COMLINE.ASM @@ -445,7 +445,7 @@ EvComComb: jp z,alt_clear_history ; Enter ld a,(format_mode) ; тек. формат панели - and form_info+form_qview ; info, qview + and form_info + form_qview ; info, qview jr nz,com_comb_ext ld a,d cp 28h+80h ; Ctrl+Enter, имя/путь в ком-строку diff --git a/MOD1/TREE.ASM b/MOD1/TREE.ASM index 4927a53..97fed22 100755 --- a/MOD1/TREE.ASM +++ b/MOD1/TREE.ASM @@ -25,7 +25,7 @@ max_depth equ 20+1 ; ScanTree: ld (tree_stack),sp ld bc,3135h ; очистить буфер сист. клавы - rst 10h + rst ToDSS ld sp,work_buffer+512 ; стек процедуры in a,(SLOT3) ld (tree_page),a ; сохр. порт @@ -60,7 +60,7 @@ ScanTree: tree_loop: push hl ; адрес старого элемента (после LoadDIR) ld c,31h ; опрос сист. клавы - rst 10h + rst ToDSS call nz,abort_tree_scan ; вывести окно "прерыв. операции" pop hl ld a,(depth_tree) ; номер тек. уровня вложений @@ -82,13 +82,13 @@ tree_depth_ok: jr z,dirs_end ; нет вложений, вернуться в нач. уровень ld (cur_tree_adr+1),hl ; имя папки тек. уровня ld c,1Dh ; уст. путь на папку тек. уровня - rst 10h + rst ToDSS call scan_cur_level ; сканир. одного уровня + стопка элем. jr c,tree_loop ; есть папки ; вернуться на пред. уровень dirs_end: ld c,31h ; опрос сист. клавы - rst 10h + rst ToDSS call nz,abort_tree_scan ; вывести окно "прерыв. операции" pop hl ; тек. элемент из стека ld a,h @@ -109,7 +109,7 @@ dirs_end1: dirs_end2: ld hl,parent_level ; ".." ld c,1Dh ; уст. путь - rst 10h + rst ToDSS dirs_end3: ld hl,depth_tree ; номер тек. уровня вложений dec (hl) @@ -162,7 +162,7 @@ scan_cur_level: push de ld a,37h ; все, кроме метки тома ld bc,0119h ; f_first 8.3 - rst 10h + rst ToDSS pop hl pop ix jr c,scan_level_exit ; не найдено @@ -173,7 +173,7 @@ scan_level_loop: ld de,work_buffer ; раб. буфер push de ld c,1Ah ; f_next - rst 10h + rst ToDSS pop hl pop ix jr nc,scan_level_loop ; назад в цикл @@ -292,7 +292,7 @@ ins_tree_item: ;------------------------------------------------- abort_tree_scan: ld bc,3135h ; очистить буфер сист. клавы - rst 10h + rst ToDSS ld hl,dial_abort ; описатель окна call DialogEr cp evCommand ; событие "команда" diff --git a/SPEC/FUNCS.ASM b/SPEC_FN/FUNCS.ASM similarity index 100% rename from SPEC/FUNCS.ASM rename to SPEC_FN/FUNCS.ASM diff --git a/SPEC/VECT.ASM b/SPEC_FN/VECT.ASM similarity index 80% rename from SPEC/VECT.ASM rename to SPEC_FN/VECT.ASM index cc46bcf..f285746 100755 --- a/SPEC/VECT.ASM +++ b/SPEC_FN/VECT.ASM @@ -1,3 +1,4 @@ + MODULE VECT ; rst 00h jp $+3 db -1 @@ -7,20 +8,20 @@ db -1 ; RST 08h. BIOS calls push af - ld a,0 ; вкл. ПЗУ Биоса в 0-е окно - out (7Ch),a + ld a,SYS_PORT.BIOS + out (SYS_PORT.ON),a pop af ret db 0C9h ; RST 10h. DOS calls - jp alt10 ; fm.asm + jp alt10 ; Main.asm db -1 db -1 db -1 db -1 db -1 ; RST 18h - jp alt18 ; fm.asm + jp alt18 ; Main.asm db -1 db -1 db -1 @@ -35,8 +36,9 @@ db -1 ; rst 28h rst28: push af +.page+1: ld a,0 ; сохр. page_module0 - out (82h),a + out (SLOT0),a pop af jr spec_interrupt ; rst 30h @@ -99,13 +101,15 @@ rst28: push af ; Использовать свой стек. ;------------------------------------------------- spec_interrupt: - ld (spc_stk+1),sp + ld (.spc_stk),sp ld sp,spec_stack call spec_funcs ; отработка функции -spc_stk:ld sp,0 +.spc_stk+1: + ld sp,0 jp rst28 ; вкл. 0-ю стр. фм ds 64 spec_stack: ; стек банки + ENDMODULE \ No newline at end of file diff --git a/VERSION.INC b/VERSION.INC index 1c2128f..2dd6c34 100755 --- a/VERSION.INC +++ b/VERSION.INC @@ -1,3 +1,5 @@ ; Версия менеджера major_version equ 0 ; ст. цифра -minor_version equ 8 ; мл. цифра +minor_version equ 9 ; мл. цифра + + DEFINE str_version '0.09'