From 6d775da44bc5cba556cf29ca533c12a0ac249844 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 2 May 2025 04:07:57 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DIALOG.ASM | 31 +++-- ESTEX.ASM | 17 ++- EXIT.ASM | 22 ++-- FMAIN.ASM | 118 +++++++++---------- FORM.ASM => FORMAT.ASM | 257 +++++++++++++++++++++-------------------- LISTBOX.ASM | 8 +- MAIN.ASM | 28 +++-- RADIO.ASM | 8 +- Shared_Includes | 2 +- 9 files changed, 248 insertions(+), 243 deletions(-) rename FORM.ASM => FORMAT.ASM (81%) diff --git a/DIALOG.ASM b/DIALOG.ASM index dff4965..9816602 100755 --- a/DIALOG.ASM +++ b/DIALOG.ASM @@ -296,10 +296,10 @@ PutDial: PUSH IX CALL GetMousInfo EXX DI -kk2: LD A,(Win2) ;Page buffer +kk2: LD A,(hPages.Win2) ;Page buffer LD B,A XOR A - LD C,BIOS.WIN_RESTORE ; из буфера в текст. окно + LD C,BIOS.WIN_RESTORE ; из буфера в текст. окно RST ToBIOS EI CALL GetMousInfo @@ -310,15 +310,14 @@ kk2: LD A,(Win2) ;Page buffer ; Close Dialog window and restore box place -ClsDial: - CALL ResILCr ; сбросить курсор +ClsDial: CALL ResILCr ; сбросить курсор LD IX,DialData - LD A,(IX+2) ;with shadow + LD A,(IX+2) ;with shadow ADD A,2 LD L,A LD A,(IX+3) INC A - LD H,A ;Wind len + LD H,A ;Wind len LD E,(IX+0) LD D,(IX+1) EXX @@ -326,10 +325,10 @@ ClsDial: EXX DI LD IX,WinBoxBuff ;Address Box buffers -kk3: LD A,(Win2) ;Page buffer +kk3: LD A,(hPages.Win2) ;Page buffer LD B,A XOR A - LD C,BIOS.WIN_RESTORE ; из буфера в текст. окно + LD C,BIOS.WIN_RESTORE ; из буфера в текст. окно RST ToBIOS EI CALL GetMousInfo @@ -349,7 +348,7 @@ PutDialWn: LD IX,DialData IN A,(Page3) PUSH AF -kk4: LD A,(Win2) ;Page buffer +kk4: LD A,(hPages.Win2) ;Page buffer OUT (Page3),A LD A,(HL) ;X position LD (IX+0),A ;Xpos @@ -829,7 +828,7 @@ BTexit: LD HL,what ; Нажать/отжать бутон PushBut: IN A,(Page3) PUSH AF -kk5: LD A,(Win2) +kk5: LD A,(hPages.Win2) OUT (Page3),A PUSH IX LD E,(IX+2) ;Xo @@ -1104,7 +1103,7 @@ SetDialInv: LD IX,DialData IN A,(Page3) PUSH AF ;сохр.page4 -kk6: LD A,(Win2) +kk6: LD A,(hPages.Win2) OUT (Page3),A ;вкл.буфер LD L,C LD H,1 @@ -1154,7 +1153,7 @@ ResDialInv: PUSH IX IN A,(Page3) PUSH AF ;сохр.page4 -kk7: LD A,(Win2) +kk7: LD A,(hPages.Win2) OUT (Page3),A ;вкл.буфер LD HL,(RDlIbuf+2) LD A,(RDlIlen+1) @@ -1201,7 +1200,7 @@ ResClasInv: PUSH IX IN A,(Page3) PUSH AF ;сохр.page4 -kk8: LD A,(Win2) +kk8: LD A,(hPages.Win2) OUT (Page3),A ;вкл.буфер PUSH HL LD HL,(RClIbuf+2) @@ -1270,7 +1269,7 @@ pdln: LD A,E SUB E LD L,A DI -kk9: LD A,(Win2) +kk9: LD A,(hPages.Win2) LD B,A XOR A LD C,BIOS.WIN_RESTORE @@ -1317,7 +1316,6 @@ ColLstBxHI: EQU 1Eh ; цве ColScrlBar: EQU 0Fh ; цвет скролл-бара ColInpLine: EQU 0Eh ; цвет редакт. поля метки дискеты -ColDialWn: DB 17h ; цвет окна ColDialInv: EQU 0Fh ; color dialog window invert ColDialInv1: EQU 07h ; color dialog window invert @@ -1326,6 +1324,7 @@ ColFormNumber: EQU 3Eh ; цве ColorFrame: EQU ColFormText ; цвет рамки объекта Frame +ColDialWn: DB 17h ; цвет окна FramDSl: DB "╔╗╚╝═║║║" ; рамка окна @@ -1345,7 +1344,7 @@ SavDial: PUSH IX EXX DI LD IX,WinBoxBuff ;Address Box buffers -kk1: LD A,(Win2) ;Page buffer +kk1: LD A,(hPages.Win2) ;Page buffer LD B,A XOR A LD C,BIOS.WIN_COPY ; копир. из окна в буфер diff --git a/ESTEX.ASM b/ESTEX.ASM index ac947b2..2586948 100755 --- a/ESTEX.ASM +++ b/ESTEX.ASM @@ -37,7 +37,7 @@ CopySysFiles: xor a ; прочитать файл in a,(Page3) push af - ld a,(SBuff0) + ld a,(hPages.SBuff0) out (Page3),a ; подкл. буфер ld a,(hFile1) call ReadFile @@ -91,7 +91,7 @@ tinRead: ld (Number2),ix ; ; прочитать файл in a,(Page3) push af - ld a,(SBuff1) + ld a,(hPages.SBuff1) out (Page3),a ; подкл. 1-ю страницу ld a,(hFile2) call ReadFile @@ -101,7 +101,7 @@ tinRead: ld (Number2),ix ; jr z,endRead ; прочитан весь файл ; читаем остаток файла ost: ld de,0 - ld a,(SBuff2) + ld a,(hPages.SBuff2) out (Page3),a ; подкл. 2-ю страницу ld hl,WinBoxBuff ; буфер под данные ld a,(hFile2) @@ -154,7 +154,7 @@ WriteSysFiles: ld a,(sFlag) ; записать файл in a,(Page3) push af - ld a,(SBuff0) + ld a,(hPages.SBuff0) out (Page3),a ; подкл. буфер ld de,(Number1) ; число запис. байт ld a,(hFile1) ; хэндл @@ -177,7 +177,7 @@ WriteSysFiles: ld a,(sFlag) ; записать файл in a,(Page3) push af - ld a,(SBuff1) + ld a,(hPages.SBuff1) out (Page3),a ; подкл. 1-ю страницу ld de,(Number2) ; размер "system.dos" ld hl,4000h ; 1-на страница @@ -191,7 +191,7 @@ WriteSysFiles: ld a,(sFlag) call WriteFile pop de jr c,err1 ; ошибка записи файла - ld a,(SBuff2) + ld a,(hPages.SBuff2) out (Page3),a ; подкл. 2-ю страницу ; tinFile: ld a,(hFile2) ; хэндл @@ -323,7 +323,7 @@ RootDir: db '\',0 ; ; CurPath: CurDisk: db 0,':\' ; сохр. тек. диск -CurDir: ds 256 ; сохр. текущий путь (каталог) + ; TmpColor: db 0 ; врем. сохр. цвета окна @@ -331,7 +331,6 @@ TmpColor: db 0 ; IniName: db "FFORMAT.INI",0 hFile3: db 0 ; дескриптор файла ;Number3:dw 0 ; размер файла "fformat.ini" -BuffName: ds 45 ; буфер для функции поиска файла TrdName: db "BOOT.$B",0 ; имя trd-boot файла hFile4: db 0 ; дескриптор файла @@ -570,7 +569,7 @@ CopyBootTRD: xor a ; прочитать файл in a,(Page3) push af - ld a,(TRBoot) + ld a,(hPages.TRBoot) out (Page3),a ; подкл. буфер ; читаем заголовок бута ld hl,NameBt ; буфер под данные diff --git a/EXIT.ASM b/EXIT.ASM index e372bec..9e60a5f 100755 --- a/EXIT.ASM +++ b/EXIT.ASM @@ -26,24 +26,20 @@ sys_cursor_coords+1: ld bc,3135h rst 0x10 ; освоб. выделенный блок памяти - ld a,(hBlock) - ld c,3Eh - rst 0x10 - jr nc,quit - ld hl,NoFree - call Print - ld b,-1 ; код ошибки - jr quit1 + ; ld a,(hBlock) + ; ld c,3Eh + ; rst 0x10 + ; jr nc,quit + ; ld hl,NoFree + ; call Print + ; ld b,-1 ; код ошибки + ; jr quit1 quit: ld b,0 quit1: ld c,41h ; выйти в Estex rst 0x10 ret -NoFree: db "Error free block memory !",0Dh,0Ah,0 - - - ; Вывод строки на экран Print: ld c,5Ch @@ -62,7 +58,7 @@ _skrn: di ld ix,WinBoxBuff ; Address Box buffers ld hl,2050h ; Y/X размер окна ld de,0000h ; Y/X полож. окна - ld a,(Win1) ; Page buffer + ld a,(hPages.Win1) ; Page buffer ld b,a xor a RST ToBIOS diff --git a/FMAIN.ASM b/FMAIN.ASM index c47b4b3..c7ea2b7 100755 --- a/FMAIN.ASM +++ b/FMAIN.ASM @@ -29,7 +29,7 @@ WinBoxBuff equ 0xC000 ; db 'EX' ; exe ID db 'E' ; exe тип - db 0 ; exe версия + db 1 ; exe версия dw 512 ; мл. смещ. кода dw 0 ; ст. смещ. кода dw 0 ; end-beg, первичный загрузчик @@ -49,17 +49,17 @@ Start: ld sp,Stack RST ToBIOS ; сравнить исп. номера портов страниц с номерами портов Биоса ;call compare_page - ; выделяем блок в 8 страниц - ld bc,8*256 + Dss.GetMem ;!HARDCODE + ; выделяем блок в hPages.Size страниц + ld bc,hPages.Size*256 + Dss.GetMem RST ToDSS jr c,err_mem ; нет памяти - ld (hBlock),a ; хэндл блока + ;ld (hBlock),a ; хэндл блока ; создать список выдел. страниц ld hl,hPages ld c,0C5h RST ToBIOS ; вкл. рабочую страницу в Page3 (исп. для буфера сист. области дискеты) - ld a,(BuffSys) + ld a,(hPages.BuffSys2) out (Page3),a ; очистить буфер клавы ld bc,Dss.ScanKey*256 + Dss.K_CLEAR @@ -96,22 +96,6 @@ err_mem: ld hl,NoMem NoMem: db "Not enough memory !",0Dh,0Ah,0 -hBlock: db 0 ; хэндл выдел. блока -hPages: -BuffSys: db 0 ; хэндл рабочей страницы (+для сист. области) -BuffTrk: db 0 ; хэндл стр. буфера структуры дорожки (и "system.exe") -Win1: db 0 ; хэндл стр. сохр. экрана -Win2: db 0 ; хэндл стр. сохр. гл. окон форматилки -TRBoot: db 0 ; хэндл буфера загрузчика TR-DOS -SBuff0: db 0 ; хэндл буфера "system.exe" -SBuff1: db 0 ; хэндлы буфера под -SBuff2: db 0 ; файл "system.dos" - db 0xFF ; стоп-байт списка - - - - - ;[]=================== Начало программы =========================[] @@ -132,47 +116,60 @@ Begin: ; RST ToDSS continue: call ReadInit ; чтение "fformat.ini" и настройка call CopyBootTRD ; скопир. бут из "boot.$b" (если есть) - call CopySysFiles ; скопир. сист. файлы в буферы - - - +;[]==============================================================[] include "dialog.asm" include "listbox.asm" include "radio.asm" include "mouse.asm" include "map.asm" + include "exit.asm" + include "estex.asm" + include "format.asm" +;[]==============================================================[] + + +;[]==============================================================[] + + + +NoMouse: db "Driver mouse not installed",0Dh,0Ah,0 +Title: db " Floppy disk formatting utility. Version " + db major_version + "0","." + db (minor_version / 10) + "0",(minor_version % 10) + "0" + db " (c) 2005-2025 " + ; + ;ds 562 ; 565 + start2 = 672 (_2 -_1) +;[]==============================================================[] -; вектор для отображения курсора -; rst38: di -; push iy -; push ix -; push hl -; push de -; push bc -; push af -; ld a,(CurILFl) -; or a -; call nz,PrnILCr -; pop af -; pop bc -; pop de -; pop hl -; pop ix -; pop iy -; vect+1: jp 0x0000 ; адрес сист. вектора - +;[]==============================================================[] +;hBlock: db 0 ; хэндл выдел. блока +hPages: +.BuffSys2: db #FF ; хэндл рабочей страницы (+для сист. области) +.BuffTrk: db #FF ; хэндл стр. буфера структуры дорожки (и "system.exe") +.Win1: db #FF ; хэндл стр. сохр. экрана +.Win2: db #FF ; хэндл стр. сохр. гл. окон форматилки +.TRBoot: db #FF ; хэндл буфера загрузчика TR-DOS +.SBuff0: db #FF ; хэндл буфера "system.exe" +.SBuff1: db #FF ; хэндлы буфера под +.SBuff2: db #FF ; файл "system.dos" +.Size equ $-hPages + db 0xFF ; стоп-байт списка +; буфер для функции поиска файла +BuffName: ds 45 +; сохр. текущий путь (каталог) +CurDir: ds 256 ; Рабочий буфер Input Line CompBuff: ds 16 -_1: +; _1: DialData: ds 16 ; Буфер заголовка вывод. окна @@ -182,28 +179,23 @@ DialTab: ds 128 ; Буфер под объекты ReCompBuff: ds 512 - -_2: -NoMouse: db "Driver mouse not installed",0Dh,0Ah,0 -Title: db " Floppy disk formatting utility Version " - db major_version + "0","." - db (minor_version / 10) + "0",(minor_version % 10) + "0" - db " (c) 2005-2025 " - ; - ds 562 ; 565 + start2 = 672 (_2 -_1) +;[]==============================================================[] - - include "exit.asm" - include "estex.asm" - include "form.asm" - +;[]==============================================================[] ds 80 Stack: db 0 ; буфер под стек программы - -ES_Boot: incbin "estex.bs" ; загрузчик Estex +;[]==============================================================[] +;[]==============================================================[] +ES_BPB equ $ +ES_Boot equ ES_BPB + 512 +; incbin "estex.bs" ; загрузчик Estex +;[]==============================================================[] + + +;[]==============================================================[] ; Буфер системной области дискеты -L2400: - +L2400 equ ES_BPB+512*4 ;!HARDCODE 4 - bootloader size +;[]==============================================================[] \ No newline at end of file diff --git a/FORM.ASM b/FORMAT.ASM similarity index 81% rename from FORM.ASM rename to FORMAT.ASM index 9de4715..8ab8e28 100755 --- a/FORM.ASM +++ b/FORMAT.ASM @@ -96,6 +96,7 @@ FFORM1: call ClearMap ; ld a,(_OS) or a jp nz,okno1 ; при tr-dos, cp/m-80 + ; ld a,(cSystem) ; флаг копир. системных файлов or a call nz,WriteSysFiles ; запись сист. файлов на дискету @@ -354,7 +355,9 @@ L09D9: ld a,(density) ;jp _cpm80 ; Копирует 2-ю FAT и записывает сист. область дискеты, ; при вкл. опции копирует загрузчик Estex в секторы 2..4. -_msdos: ld a,(media5) ; число секторов на FAT + + +_msdos: ld a,(MS_Boot.media5) ; число секторов на FAT ld e,a ld hl,0 ld bc,512 @@ -372,6 +375,8 @@ _msdos: ld a,(media5) ; add hl,de ex de,hl ldir + ; + ; bpb boot loader ld a,(cSystem) ; флаг создания сист. дискеты or a jr z,.loc2 @@ -381,12 +386,13 @@ _msdos: ld a,(media5) ; ld bc,1536 ; 512*3 сект. = размер загрузчика ldir ; скоррект. BPB в буфере - ld a,(media5) + ld a,(MS_Boot.media5) inc a ld (L2400+14),a ld a,1 ; число копий FAT ld (L2400+16),a ; смещ. на число копий ; + ; .loc2: call L07AF ; ожидание готовности нгмд ; запись 0-й стороны ld a,1 @@ -411,6 +417,13 @@ L08F6: call L0906 ; ld (sect),a loc03: cp 18+1 ; запред. сектор ? jr nz,L08F6 + ; запись загрузчика через sys + ld a,(cSystem) ; флаг создания сист. дискеты + or a + ret z + ; + + ; ret ; Запись сист. области TR-DOS. @@ -506,7 +519,7 @@ _trdos: xor a ; copy1: exx in a,(Page1) ex af,af' - ld a,(TRBoot) + ld a,(hPages.TRBoot) out (Page1),a ; подкл. буфер ld hl,4000h ; начало Page1 ld de,L2400+1000h @@ -575,7 +588,7 @@ A0875: push de ; Запись дорожки L091B: in a,(Page3) push af - ld a,(BuffTrk) + ld a,(hPages.BuffTrk) out (Page3),a ; подкл. буфер структуры дорожки ld hl,L4000 ; начало данных ld (L0AC8),hl @@ -728,7 +741,7 @@ _done2: xor a ;[]==============================================================[] ; вычислить ячейку bad-сектора в FAT-е -L0ACF: ld hl,(media6) ; секторов на сторону +L0ACF: ld hl,(MS_Boot.media6) ; секторов на сторону add hl,hl ; *2 (секторов на всю дорожку) ex de,hl ld hl,0 @@ -739,7 +752,7 @@ L0AD8: add hl,de ld a,(side) ; тек. сторона or a jr z,L0AE8 - ld de,(media6) ; секторов на сторону + ld de,(MS_Boot.media6) ; секторов на сторону add hl,de L0AE8: ld a,(sect) ; тек. сектор ld e,a @@ -757,7 +770,7 @@ L0AE8: ld a,(sect) ; тек. сек ld a,l rra ld l,a - ld a,(media1) ; секторов на кластер + ld a,(MS_Boot.media1) ; секторов на кластер ld e,a ld d,0 add hl,de @@ -808,7 +821,7 @@ L0A2C: push hl ; секторов на +2 (лучший вариант). ; add_offset: - ld hl,(media6) ; число секторов в тек. формате + ld hl,(MS_Boot.media6) ; число секторов в тек. формате ld a,(_OS) ; тип ОС-и or a jr z,.loc0 ; ms-dos @@ -923,7 +936,7 @@ GAP3 dw 108 ; ; Подготовить заголовки секторов дорожки (одной стороны) L0BAA: in a,(Page3) push af - ld a,(BuffTrk) + ld a,(hPages.BuffTrk) out (Page3),a ; подкл. буфер дорожки xor a ld (L0BA9),a ; обнулить счетчик секторов @@ -978,7 +991,7 @@ loc05: cp 18 ; ; Буфер: 0xC000..0xFFFF L0B21: in a,(Page3) push af - ld a,(BuffTrk) + ld a,(hPages.BuffTrk) out (Page3),a ; подкл. буфер дорожки call CLEAR ; заполнить буфер кодом 0x4E ld hl,L4000 ; начало буфера данных дорожки @@ -1090,7 +1103,7 @@ L09A8: ld de,L2400 ; loc07: ld bc,16896 ; 6656/16896 длина FAT-ов + Root dir ld e,0 ; байт заполнения call L0994 ; перекачка е -> (hl) - ld a,(media4) ; байт-описатель формата диска + ld a,(MS_Boot.media4) ; байт-описатель формата диска ld hl,L2400+512 ld (hl),a ; занести первым байтом в FAT inc hl @@ -1118,7 +1131,7 @@ frm1: ld a,18 ; ld (loc05+1),a ld (loc08+1),a SSect: ld hl,18 ; секторов на сторону - ld (media6),hl ;; + ld (MS_Boot.media6),hl inc a ; запред. сектор ld (loc02+1),a ld (loc03+1),a @@ -1126,17 +1139,17 @@ SSect: ld hl,18 ; сек frm2: ld a,34 ; посл. служ. сектор дискеты ld (LastSect),a frm3: ld a,1 ; секторов на кластер - ld (media1),a + ld (MS_Boot.media1),a frm4: ld a,0xF0 ; байт формата - ld (media4),a + ld (MS_Boot.media4),a frm5: ld hl,16896 ; размер FAT-ов + Root dir ld (loc07+1),hl frm6: ld hl,224 ; записей в корне - ld (media2),hl + ld (MS_Boot.media2),hl ASect: ld hl,2880 ; секторов на диске - ld (media3),hl ;; + ld (MS_Boot.media3),hl FSect: ld hl,9 ; секторов на FAT - ld (media5),hl ;; + ld (MS_Boot.media5),hl ret ; noMSDOS:dec a @@ -1254,7 +1267,7 @@ L0BFF: ld a,(density) call InitElapsedTime ; сохр. и сбросить время call L07AF ; ожидание готовности нгмд ; цикл формат. дорожек -L0C14: call L0BDA ; форматирование +L0C14: call FORMAT_TRK ; форматирование ret c ; формат. прервано ret nz ; есть ошибки чтения ; нет ошибок @@ -1271,30 +1284,30 @@ TRACKS: ld a,82 ; Форматир. одной дорожки -L0BDA: xor a - ld (side),a ; тек. сторона - ld (RetCode),a ; сбр. возвр. код -L0BDE: ;ld a,2 - ;ld (L0C64),a ; число 3-х разовых попыток - call L0BAA ; иниц. заголовков секторов дорожки - call L0759 ; уст. головку на тек. дорожку - call L091B ; запись целой дорожки - call L0C87 ; тест на чтение секторов одной стороны - ret c ; выход - процесс прерван - ret nz ; есть ошибки чтения - call Map ; вывод карты - call L0D93 ; вывод "Side: X" - call L0D92 ; вывод "Cylinder: XX" - call ElapsedTime ; вывод времени работы - call L0D25 ; признак нажатия клавиши - ret c ; процесс прерван - ld hl,side - inc (hl) ; смена стороны - ld a,(hl) ; тек. сторона - cp 1+1 ; запредельная ? - jr nz,L0BDE - xor a - ret +FORMAT_TRK: xor a + ld (side),a ; тек. сторона + ld (RetCode),a ; сбр. возвр. код +.loop: ;ld a,2 + ;ld (L0C64),a ; число 3-х разовых попыток + call L0BAA ; иниц. заголовков секторов дорожки + call L0759 ; уст. головку на тек. дорожку + call L091B ; запись целой дорожки + call L0C87 ; тест на чтение секторов одной стороны + ret c ; выход - процесс прерван + ret nz ; есть ошибки чтения + call Map ; вывод карты + call L0D93 ; вывод "Side: X" + call L0D92 ; вывод "Cylinder: XX" + call ElapsedTime ; вывод времени работы + call L0D25 ; признак нажатия клавиши + ret c ; процесс прерван + ld hl,side + inc (hl) ; смена стороны + ld a,(hl) ; тек. сторона + cp 1+1 ; запредельная ? + jr nz,.loop + xor a + ret @@ -1483,99 +1496,97 @@ CalcTime: - - - - - - - ;-------------------------------------------------+ ; MS-DOS загрузчик дискет (из fformat), 512 байт. | ; формат 1.44Mb. | ; для 720kB см. метку '#' | ;-------------------------------------------------+ MS_Boot: - db 0xEB,0x3C,0x90 ; 3 байта, код перехода на загрузчик - db "DSS 1.60" ; 8 байт, OEM ID -;BPB, 17 байт -BPB: dw 512 ; байт на сектор -media1: db 1 ; # 2, секторов на кластер - dw 1 ; зарезерв. секторов - db 2 ; число FAT-ов -media2: dw 224 ; # 112, записей в корне -media3: dw 2880 ; # 1440, всех секторов на диске -media4: db 0xF0 ; # 0xF9, байт формата -media5: dw 9 ; # 3, секторов на FAT -media6: dw 18 ; # 9, секторов на сторону - dw 2 ; кол-во сторон диска -;extended boot-record - dw 0,0 ; скрытых секторов - dw 0,0 ; всех секторов на диске - dw 0 ; физ. номер диска - db 0x29 ; сигнатура расш. boot-записи - dw 96C2h,2D3Ah ; серийный номер дискеты 2D3A:96C2 - db "NO NAME " ; 11 байт, метка дискеты - db "FAT12 " ; 8 байт, ID файловой системы -;--------------------------------------------------------------------- - db 0xFA,0x33,0xD2,0x8E,0xD2,0xBC,0xF0,0x7B - db 0xFB,0xB8,0xC0,0x07,0x8E,0xD8,0xE8,0x89 - db 0x00,0xBE,0xFE,0x00,0xFC,0xBB,0x70,0x00 - db 0xE8,0x25,0x00,0x32,0xE4,0xCD,0x16,0x3C - db 0x1B,0x74,0x18,0x3C,0x0D,0x74,0x08,0x3C - db 0x20,0x74,0x04,0x3C,0x6F,0x75,0xEC,0xBE - db 0xDF,0x01,0xE8,0x0B,0x00,0xBE,0xC1,0x01 - db 0xE8,0x05,0x00,0xE8,0x5C,0x00,0xCD,0x19 - db 0xAC,0x0A,0xC0,0x74,0x46,0x3C,0x01,0x75 - db 0x05,0xAC,0x8A,0xD8,0xEB,0xF2,0x3C,0x02 - db 0x75,0x0A,0xAD,0x8B,0xD0,0x56,0xE8,0x62 - db 0x00,0x5E,0xEB,0xE4,0x3C,0x03,0x75,0x0A - db 0xAC,0xA2,0x00,0x00,0x89,0x36,0x01,0x00 - db 0xEB,0xD6,0x3C,0x04,0x75,0x0C,0xFE,0x0E - db 0x00,0x00,0x74,0x04,0x8B,0x36,0x01,0x00 - db 0xEB,0xC6,0x33,0xC9,0xA8,0x80,0x74,0x05 - db 0x24,0x7F,0x8A,0xC8,0xAC,0x41,0xE8,0x17 - db 0x00,0xEB,0xB5,0x36,0xA1,0x6C,0x04,0x05 - db 0x04,0x00,0x36,0x39,0x06,0x6C,0x04,0x72 - db 0xF9,0xC3,0xB8,0x03,0x00,0xCD,0x10,0xC3 - db 0x56,0x3C,0x0A,0x74,0x10,0xB4,0x09,0xCD - db 0x10,0x02,0xD1,0x80,0xFA,0x50,0x73,0x05 - db 0xE8,0x08,0x00,0x5E,0xC3,0xFE,0xC6,0x32 - db 0xD2,0xEB,0xF5,0xB4,0x02,0xCD,0x10,0xC3 +.pc_code: db 0xEB,0x3C,0x90 ; 3 байта, код перехода на загрузчик + ; 8 байт, OEM ID + db "DSS " +.dss_major_ver: db "1." +.dss_minor_ver: db "71" + ;BPB, 17 байт +.BPB: dw 512 ; байт на сектор +.media1: db 1 ; # 2, секторов на кластер +.reserved: dw 1 ; зарезерв. секторов +.fat_num: db 2 ; число FAT-ов +.media2: dw 224 ; # 112, записей в корне +.media3: dw 2880 ; # 1440, всех секторов на диске +.media4: db 0xF0 ; # 0xF9, байт формата +.media5: dw 9 ; # 3, секторов на FAT +.media6: dw 18 ; # 9, секторов на сторону + dw 2 ; кол-во сторон диска + ;extended boot-record + dw 0,0 ; скрытых секторов + dw 0,0 ; всех секторов на диске + dw 0 ; физ. номер диска + db 0x29 ; сигнатура расш. boot-записи +.serial: dw 0000,0000 ; серийный номер дискеты 2D3A:96C2 +.label: db "NO NAME " ; 11 байт, метка дискеты + db "FAT12 " ; 8 байт, ID файловой системы + ;--------------; +/* + db 0xFA,0x33,0xD2,0x8E,0xD2,0xBC,0xF0,0x7B + db 0xFB,0xB8,0xC0,0x07,0x8E,0xD8,0xE8,0x89 + db 0x00,0xBE,0xFE,0x00,0xFC,0xBB,0x70,0x00 + db 0xE8,0x25,0x00,0x32,0xE4,0xCD,0x16,0x3C + db 0x1B,0x74,0x18,0x3C,0x0D,0x74,0x08,0x3C + db 0x20,0x74,0x04,0x3C,0x6F,0x75,0xEC,0xBE + db 0xDF,0x01,0xE8,0x0B,0x00,0xBE,0xC1,0x01 + db 0xE8,0x05,0x00,0xE8,0x5C,0x00,0xCD,0x19 + db 0xAC,0x0A,0xC0,0x74,0x46,0x3C,0x01,0x75 + db 0x05,0xAC,0x8A,0xD8,0xEB,0xF2,0x3C,0x02 + db 0x75,0x0A,0xAD,0x8B,0xD0,0x56,0xE8,0x62 + db 0x00,0x5E,0xEB,0xE4,0x3C,0x03,0x75,0x0A + db 0xAC,0xA2,0x00,0x00,0x89,0x36,0x01,0x00 + db 0xEB,0xD6,0x3C,0x04,0x75,0x0C,0xFE,0x0E + db 0x00,0x00,0x74,0x04,0x8B,0x36,0x01,0x00 + db 0xEB,0xC6,0x33,0xC9,0xA8,0x80,0x74,0x05 + db 0x24,0x7F,0x8A,0xC8,0xAC,0x41,0xE8,0x17 + db 0x00,0xEB,0xB5,0x36,0xA1,0x6C,0x04,0x05 + db 0x04,0x00,0x36,0x39,0x06,0x6C,0x04,0x72 + db 0xF9,0xC3,0xB8,0x03,0x00,0xCD,0x10,0xC3 + db 0x56,0x3C,0x0A,0x74,0x10,0xB4,0x09,0xCD + db 0x10,0x02,0xD1,0x80,0xFA,0x50,0x73,0x05 + db 0xE8,0x08,0x00,0x5E,0xC3,0xFE,0xC6,0x32 + db 0xD2,0xEB,0xF5,0xB4,0x02,0xCD,0x10,0xC3 ; 21 байт - db " FFORMAT Version " - db major_version + "0","." - db (minor_version / 10) + "0",(minor_version % 10) + "0" - ; - db 0xBA,0x20,0x01,0x1F,0x03,0x07,0xCF,0xB0 - db 0x04,0x91,0xB0,0x01,0x4E,0x80,0xC9,0xA7 - db 0xCD,0x80,0xBB,0x01,0x1F,0x93,0xB0,0x03 - db 0x06,0x91,0xB0,0x01,0x4E,0x80,0xBA,0xA7 - db 0x20,0x80,0xBA,0x01,0x07,0x81,0xB0,0x01 - db 0x1F,0x91,0xB0,0x04,0x91,0xB0,0x01,0x4E - db 0x80,0xC8,0xA7,0xCD,0x80,0xBC,0x01,0x07 - db 0x81,0xB0,0x01,0x1F,0x91,0xB0,0x93,0xB0 - db 0x01,0x07,0xA9,0xB0,0x01,0x1F,0x91,0xB0 - db 0x03,0x07,0xCF,0xB0,0x04,0x01,0x70 + db " FFORMAT Version " + db major_version + "0","." + db (minor_version / 10) + "0",(minor_version % 10) + "0" + ; + db 0xBA,0x20,0x01,0x1F,0x03,0x07,0xCF,0xB0 + db 0x04,0x91,0xB0,0x01,0x4E,0x80,0xC9,0xA7 + db 0xCD,0x80,0xBB,0x01,0x1F,0x93,0xB0,0x03 + db 0x06,0x91,0xB0,0x01,0x4E,0x80,0xBA,0xA7 + db 0x20,0x80,0xBA,0x01,0x07,0x81,0xB0,0x01 + db 0x1F,0x91,0xB0,0x04,0x91,0xB0,0x01,0x4E + db 0x80,0xC8,0xA7,0xCD,0x80,0xBC,0x01,0x07 + db 0x81,0xB0,0x01,0x1F,0x91,0xB0,0x93,0xB0 + db 0x01,0x07,0xA9,0xB0,0x01,0x1F,0x91,0xB0 + db 0x03,0x07,0xCF,0xB0,0x04,0x01,0x70 ; 16 байт - db " RLE Boot record" - db 0xC6,0x20,0x01,0x4F,0x02,0x15,0x0A + db " RLE Boot record" + db 0xC6,0x20,0x01,0x4F,0x02,0x15,0x0A ; 36 байт - db "Sorry, but this disk is not bootable" - db 0x02,0x16,0x0B + db "Sorry, but this disk is not bootable" + db 0x02,0x16,0x0B ; 33 байта - db "Insert SYSTEM disk into the drive" - db 0x01,0x7F,0x02,0x22,0x0D + db "Insert SYSTEM disk into the drive" + db 0x01,0x7F,0x02,0x22,0x0D ; не нажатый бутон - db "",82h,20h,01h,7Ch,"O",01h,7Fh,"k",82h,20h,"" - db 0x01,0x40,0x80,0xDC,0x02,0x23,0x0E,0x89 - db 0xDF,0x02,0x00,0x19,0x00,0x01,0x4E,0x02 - db 0x22,0x0D,0x20,0x01,0x7F + db "",82h,20h,01h,7Ch,"O",01h,7Fh,"k",82h,20h,"" + db 0x01,0x40,0x80,0xDC,0x02,0x23,0x0E,0x89 + db 0xDF,0x02,0x00,0x19,0x00,0x01,0x4E,0x02 + db 0x22,0x0D,0x20,0x01,0x7F ; нажатый бутон - db "",82h,20h,01h,7Ch,"O",01h,7Fh,"k",82h,20h,"" - db 0x01,0x4E,0x02,0x23,0x0E,0x89,0x20,0x02 - db 0x00,0x19,0x00 - dw 0xAA55 + db "",82h,20h,01h,7Ch,"O",01h,7Fh,"k",82h,20h,"" + db 0x01,0x4E,0x02,0x23,0x0E,0x89,0x20,0x02 + db 0x00,0x19,0x00 + dw 0xAA55 +*/ diff --git a/LISTBOX.ASM b/LISTBOX.ASM index d432e5e..518a0eb 100755 --- a/LISTBOX.ASM +++ b/LISTBOX.ASM @@ -816,7 +816,7 @@ LstBoxInv: PUSH DE IN A,(Page3) PUSH AF - LD A,(Win2) + LD A,(hPages.Win2) OUT (Page3),A LD A,(IY+3) SUB (IY+2) @@ -862,7 +862,7 @@ PrnLstBox: PUSH IX IN A,(Page3) PUSH AF - LD A,(Win2) + LD A,(hPages.Win2) OUT (Page3),A PUSH IX POP IY @@ -1007,7 +1007,7 @@ LBB1: ld a,l CALL GetPutA IN A,(Page3) PUSH AF - LD A,(Win2) + LD A,(hPages.Win2) OUT (Page3),A LD A,"▒" LD (DE),A @@ -1048,7 +1048,7 @@ LBe1: POP DE CALL GetPutA IN A,(Page3) PUSH AF - LD A,(Win2) + LD A,(hPages.Win2) OUT (Page3),A LD A,"■" LD (DE),A diff --git a/MAIN.ASM b/MAIN.ASM index ddf3454..e75aab3 100755 --- a/MAIN.ASM +++ b/MAIN.ASM @@ -32,22 +32,30 @@ Packed: incbin 'build/format.hrs' Start: ld c,0 ; узнать версию ДОС RST ToDSS - ld hl,0145h ; 1.69 - and a - sbc hl,de - jr c,ok ; > 1.69 + ld hl,-#0147 ; 1.71 + add hl,de + jr c,dss_ver_ok ; >= 1.71 ; ld hl,ver_err - ld c,5Ch +.error_exit: ld c,Dss.PChars RST ToDSS - ld bc,#2641 +.loop: ld bc,DSS_Error.sys.COMMON_ERROR*256 + Dss.Exit RST ToDSS - ret + jr .loop -ver_err: db "Invalid DSS version, DSS 1.70 or higher is required.",0Dh,0Ah,0 +ver_err: db "Invalid DSS version, DSS 1.71 or higher is required.",0Dh,0Ah,0 +no_mem_err: db "Error: no free memory!",0Dh,0Ah,0 - -ok: LD HL,#6200 ;!HARDCODE +dss_ver_ok: ; выделяем страницу под распакованный код + ld bc,1*256 + Dss.GetMem + RST ToDSS + jr nc,.mem_ok + ; + ld hl,no_mem_err + jr Start.error_exit + ; +.mem_ok: ld (SLOT1),a + LD HL,#6200 ;!HARDCODE LD BC,Dss.AppInfo.EXE_HomeDir RST ToDSS ; diff --git a/RADIO.ASM b/RADIO.ASM index 9ab446a..dea97c0 100755 --- a/RADIO.ASM +++ b/RADIO.ASM @@ -1329,7 +1329,7 @@ prne: LD A,(IY+2) LD B,0 IN A,(Page3) PUSH AF - LD A,(Win2) + LD A,(hPages.Win2) OUT (Page3),A LDI INC DE @@ -1473,7 +1473,7 @@ SetClasInv: LD IX,DialData IN A,(Page3) PUSH AF ;сохр.page4 - LD A,(Win2) + LD A,(hPages.Win2) OUT (Page3),A ;вкл.буфер PUSH HL LD L,C ;Len X @@ -1839,7 +1839,7 @@ ChangL1: INC HL ;Begin elements claster POP HL ;Reset begin elem table IN A,(Page3) PUSH AF - LD A,(Win2) + LD A,(hPages.Win2) OUT (Page3),A ChangL2: LD D,(HL) ;Ypos INC HL @@ -1906,7 +1906,7 @@ cl1: BIT 7,(HL) ;Change radio button ([x]) ChangeR: IN A,(Page3) PUSH AF - LD A,(Win2) + LD A,(hPages.Win2) OUT (Page3),A LD D,(HL) ;Ypos INC HL diff --git a/Shared_Includes b/Shared_Includes index cc0a75f..68e156a 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit cc0a75f6bc7b141622c1c904a2db4e91d54aaf8d +Subproject commit 68e156a69e848e7b01656cdf67122022999d75ee