diff --git a/Console/CONSOLE.ASM b/Console/CONSOLE.ASM index 4b20315..900999e 100644 --- a/Console/CONSOLE.ASM +++ b/Console/CONSOLE.ASM @@ -10,12 +10,11 @@ ;=====================================================================[] ;Rev. Date Name Description ;---------------------------------------------------------------------[] +;R13 03-08-2023 BAO Добавлен вывод номера версии Консоли для команды VERSION ;R12 23-07-2023 BAO Добавлена команда REBOOT - перезагрузка с полной очисткой памяти ;R11 20-07-2023 BAO Поправлена функция LCPIR для корректного выбора сообщения об ошибке при номере ошибки > заготовленных сообщений ;R10 16-05-2023 BAO TEХT MODE AND TEXT ARE RESTORED AFTER RETURNING FROM THE APP -;R09 ??-??-???? DNS ;????? ???? -;R08 21-02-2003 DNS FIX BUG IN BAT-PARSER, IT SPLIT STRINGS -; WHEN LINE BEGAN AT #xx00 OFFSET +;R08 21-02-2003 DNS FIX BUG IN BAT-PARSER, IT SPLIT STRINGS WHEN LINE BEGAN AT #xx00 OFFSET ;R07 14-12-2002 DNS PARSING BATCH LINE ;R06 12-12-2002 DNS ADD %0, %1, %2 ... ;R05 11-12-2002 DNS IMPLEMENTED %VAR% @@ -25,8 +24,10 @@ ;R01 19-11-2002 DNS ADD ENVIRONMENT %VARIABLE% IN ECHO ;=====================================================================[] - include 'shared_includes/constants/bios_equ.inc' - include 'shared_includes/constants/dss_equ.inc' + includelua 'Shared_includes/lua/Functions.lua' + include 'shared_includes/constants/bios_equ.inc' + include 'shared_includes/constants/dss_equ.inc' + include 'console/version.inc' ; ; Standart EQU section @@ -105,7 +106,7 @@ FPRIMAR LD C,Dss.CTRLKey JP CONSOLE ;R07 -MAKE_BATCH_PRM_ARRAY +MAKE_BATCH_PRM_ARRAY: DEC HL B_SKIP_SPACE INC HL @@ -122,10 +123,10 @@ B_SKIP_SPACE LD (HL),D INC HL EX DE,HL -B_FIND_SPACE +B_FIND_SPACE: INC HL LD A,(HL) - CP "!" + CP " "+1 JR NC,B_FIND_SPACE LD (HL),0 OR A @@ -187,13 +188,13 @@ ADDBAT PUSH DE JR NZ,BATLINE EX DE,HL LD DE,CMDLINE - AND A + ;AND A SBC HL,DE - RET Z + JR Z,.exit LD A,L LD (CMDLINE-1),A CALL CMDMODE - LD A,(BAT_FM) +.exit: LD A,(BAT_FM) LD C,Dss.Close RST ToDSS RET @@ -214,24 +215,22 @@ NBLINE CALL MOVWORD LD DE,CMDLINE POP HL JP NBLINE - -MOVWORD LD A,(BAT_LEN) +MOVWORD: LD A,(BAT_LEN) LD B,A -M00WORD LD A,(HL) +.loop: LD A,(HL) LD (DE),A - CP #20 - JR C,M01WORD + CP ' ' INC HL + JR C,.loop2 INC DE - DJNZ M00WORD + DJNZ .loop SCF RET - -M01WORD LD A,(HL) - CP #20 +.loop2: LD A,(HL) + CP ' ' RET NC INC HL - DJNZ M01WORD + DJNZ .loop2 ;R08 PUSH DE CALL READBAT @@ -240,7 +239,7 @@ M01WORD LD A,(HL) LD A,(BAT_LEN) LD B,A OR A - JR NZ,M01WORD + JR NZ,.loop2 SCF ;R08 RET @@ -326,10 +325,12 @@ CONSOLE: RE_: CALL GETXY CALL GETPATH ; CALL VERS - LD HL,CMDLINE - LD DE,CMDLINE+1 + ;!TEST + LD HL,CMDLINE-1 + LD DE,CMDLINE + LD (HL),0 - LD BC,#7F + LD BC,#7F ;!HARDCODE длина CMDLINE LDIR CALL INPUT CALL CRLF @@ -344,13 +345,13 @@ GETXY LD C,Dss.Cursor RST ToDSS JP LOCAT -INPUT XOR A +INPUT: XOR A LD (POSIT),A - LD (SHIFT),A + LD (PRINT_S.SHIFT),A LD (LEN_NEW),A LD IX,CMDLINE-2 CALL CEDIT - CALL RES_CUR + CALL RES_CUR ;!FIXIT scroll починить, тут тоже влияет вроде RET COMP: CALL EVALCMD ;R05 @@ -530,9 +531,9 @@ RUN_BAT CALL BATCH RET ; !! Не делать одну команду > 256 символов)) !! -BATLIST DZ 'PAUSE' : DW CPAUSE +BATLIST: DZ 'PAUSE' : DW CPAUSE DZ 'REM' : DW CREM -CMDLIST DZ 'CD' : DW CCHDIR +CMDLIST: DZ 'CD' : DW CCHDIR DZ 'DIR' : DW DIR DZ 'ECHO' : DW CECHO DZ 'PATH' : DW CPATH @@ -710,14 +711,14 @@ CPAUSE LD DE,PAUSMSG RET - ;R09 + PATHSTR DB "PATH=",0 CPATH LD A,(DE) OR A JP Z,PRNEPATH INC DE - CP 9 + CP 9 ; Tab JR Z,CPATH CP "!" JR C,CPATH @@ -751,7 +752,6 @@ PRNEPATH RST ToDSS CALL CRLF RET - ;R09 CSET LD A,(DE) @@ -834,7 +834,7 @@ ECHO_FR LD A,#FF ;R04 -EVALCMD +EVALCMD: XOR A LD HL,CMDLINE-1 LD C,(HL) @@ -862,13 +862,13 @@ MOVLBAK LD A,(HL) ; HL - STRING WITH %VAR% EVALSTR ;R04 LD DE,DTA -VARLOOP +;VARLOOP LD A,(HL) CP "%" JR Z,TVARIABLE VARL1 LDI OR A - JR NZ,VARLOOP + JR NZ,EVALSTR LD BC,0 LD (TVAR_PNT),BC ;R04 LD HL,DTA @@ -887,7 +887,7 @@ IEIGHT DB "EIGHT",0 ININE DB "NINE",0 ;R06 -BAT_PRM_ARRAY +BAT_PRM_ARRAY: DW IZERO, IONE, ITWO, ITHREE, IFOUR, IFIVE, ISIX, ISEVEN, IEIGHT, ININE DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;R06 @@ -934,7 +934,7 @@ MVBTP LD A,(HL) JR NZ,MVBTP DEC DE NOBTP POP HL - JP VARLOOP ;R06 + JP EVALSTR ;R06 ;R06 TVAR1 PUSH HL @@ -960,7 +960,7 @@ TNOVAR POP HL INC HL LD BC,0 LD (TVAR_PNT),BC - JP VARLOOP + JP EVALSTR ;R01 COMPARE LD A,(DE) @@ -1647,28 +1647,16 @@ hex8: push af VERS: LD C,Dss.Version RST ToDSS - PUSH BC - PUSH DE - LD L,D - LD H,0 + LD H,E LD DE,PRM1 - CALL .num_ver ;decim2 номер версии (0..9) - LD A,'.' - LD (DE),A - - INC DE - POP HL - LD H,0 - CALL .num_mod ;decim2 номер модификации (0..99) - POP HL - LD A,'.' - LD (DE),A - INC DE - CALL .num_build ;decim3 номер билда (0..999) - XOR A - LD (DE),A - + CALL .Set_Ver_to_PRM ; set DSS version + ;R13 + LD HL,256*CONSOLE_MODF + CONSOLE_VERS + LD BC,CONSOLE_BUILD + LD DE,PRM2 + CALL .Set_Ver_to_PRM ; set Shell version + ;R13 LD DE,VERSMSG JP MESSAGE @@ -1707,6 +1695,32 @@ VERS: LD C,Dss.Version ld (de),a ; сохр. в буфере inc de ret + ; +; Вход: +; L - номер версии (0..9) +; H - номер модификации (0..99) +; BC - номер билда (0..999) +; DE - номер параметра +.Set_Ver_to_PRM: + PUSH BC + PUSH HL + LD H,0 + CALL .num_ver ;decim2 номер версии (0..9) + LD A,'.' + LD (DE),A + INC DE + POP HL + LD L,H + LD H,0 + CALL .num_mod ;decim2 номер модификации (0..99) + POP HL + LD A,'.' + LD (DE),A + INC DE + CALL .num_build ;decim3 номер билда (0..999) + XOR A + LD (DE),A + RET /* VERS: LD C,Dss.Version @@ -1777,8 +1791,7 @@ CEXIT: LD A,(TASKX) DEC A RET Z POP HL -QUIT: LD B,0 - LD C,Dss.Exit +QUIT: LD BC,Dss.Exit RST ToDSS RET @@ -1804,7 +1817,7 @@ ERR_MSG: INC DE MESSAGE: CALL FMESAGE CALL PRINTZ - CALL GETXY + ;CALL GETXY RET FMESAGE: INC DE @@ -1847,12 +1860,14 @@ PUTPRMA: LD A,(HL) // ret + PRINTZ: LD A,(HL) INC HL OR A RET Z CP "%" JR NZ,.char + LD A,(HL) INC HL SUB "1" @@ -1902,20 +1917,32 @@ DIR3MSG EQU 10 HELPMSG EQU 11 MSG0: DB 0 +; 0 DB "Volume in drive %1 has no label",CR,LF ; !FIXIT DB "Volume Serial number is %2",CR,LF DB "Directory of %3",CR,LF,CR,LF,0 - DB "Estex DSS: Version %1",CR,LF,0 ;R02 +; 1 + DB "Estex DSS: Version %1",CR,LF + DB "Console: Version %2",CR,LF,0 ;R13 +; 2 DB "Current date: %1",CR,LF,0 +; 3 DB "Current time: %1",CR,LF,0 +; 4 DB "Press any key to continue . . .",CR,LF,0 +; 5 DB "Invalid parametr",CR,LF,0 +; 6 DB "Echo is %1",CR,LF,0 +; 7 DB "on",0 +; 8 DB "off",0 +; 9 DB " %1 file(s) %2 bytes",CR,LF,CR,LF,0 -; FILENAME EXT SIZE DATE TIME +; 10 FILENAME EXT SIZE DATE TIME DB "%1 %2 %3 %4 %5",CR,LF,0 +; 11 DB "COMMANDS:",CR,LF,CR,LF DB "DIR REN | RENAME PATH HELP ",CR,LF DB "CD | CHDIR DEL | ERASE SET VER | VERSION ",CR,LF @@ -1935,8 +1962,8 @@ ERR0: DB #00 DZ "File not found" ; 03 - файл не обнаружен DZ "Path not found" ; 04 - неверный путь DZ "Invalid handle" ; 05 - несуществующий файловый манипулятор - DZ "No free filehandle" ; 06 - нет свободного файлового манипулятора - DZ "File exist" ; 07 - файл существует + DZ "Too many open files" ; 06 - нет свободного файлового манипулятора + DZ "File already exist" ; 07 - файл существует DZ "File read only" ; 08 - файл только для чтения DZ "Root overflow" ; 09 - переполнение ROOT (корневого каталога) DZ "No free space" ; 10 - нет свободного места на диске @@ -1959,14 +1986,14 @@ ERR0: DB #00 DZ "Drive failure" ; 27 - сбой диска DZ "Extended error 28" DZ "Extended error 29" - DZ "No free memory" ; 30 - недостаточно памяти + DZ "Not enough memory" ; 30 - недостаточно памяти DZ "Invalid memory block" ; 31 - несуществующий блок памяти DZ "Extended error 32" DZ "Maximum PATH size exceeded" ; 33 - превышен максимальный размер переменной DZ "Extended error 34" DZ "Too many files in directory" ; 35 - слишком много файлов в директории DZ "Directory nesting too large or number of folders > 1023" ; 36 - слишком большая вложенность каталогов или количество папок > 1023 - DZ "Operation interrupted by user" ; 37 - операция прервана пользователем + DZ "Operation aborted by user" ; 37 - операция прервана пользователем DZ "Common error" ; 38 - общая ошибка DZ "Unexpected application termination" ; 39 - unexpected application termination / неожиданное завершение приложения DZ "40" @@ -2085,14 +2112,14 @@ LFF PUSH HL POP HL RET -PRINTX CP #20 +PRINTX: CP ' ' JP NC,CHAR CP #0D JP Z,CR_ CP #0A JP Z,LF_ -CHAR PUSH BC - LD BC,#0182 +CHAR: PUSH BC + LD BC,1*256 + BIOS.LP_PRINT_SYM RST ToBIOS POP BC RET @@ -2113,11 +2140,11 @@ CEDIT PUSH IX LD (ETXS),HL XOR A LD (POSIT),A - LD (SHIFT),A + LD (PRINT_S.SHIFT),A EDIT1 LD DE,(ETXS) CALL PRINT_S CALL KEY - CP 13 + CP 13 ; enter code RET Z LD HL,EDIT1 PUSH HL @@ -2165,7 +2192,7 @@ ADD_SM EX AF,AF' LD HL,(ETXE) INC HL LD (ETXE),HL - LD HL,SHIFT + LD HL,PRINT_S.SHIFT SUB (HL) CP (IX-1) RET C @@ -2175,14 +2202,14 @@ ADD_SM EX AF,AF' ; CALL PAGE RET -BACK LD A,(POSIT) +BACK: LD A,(POSIT) OR A RET Z ;JP Z,BCK DEC A LD (POSIT),A LD (MAIN_X),A INC A - LD HL,SHIFT + LD HL,PRINT_S.SHIFT SUB (HL) RET NZ LD A,(STEP) @@ -2199,7 +2226,7 @@ FORW LD A,(POSIT) INC A LD (POSIT),A LD (MAIN_X),A - LD HL,SHIFT + LD HL,PRINT_S.SHIFT SUB (HL) CP (IX-1) RET C @@ -2236,7 +2263,7 @@ SUB_SM XOR A LD HL,(ETXE) DEC HL LD (ETXE),HL - LD HL,SHIFT + LD HL,PRINT_S.SHIFT INC A SUB (HL) RET NZ @@ -2249,7 +2276,7 @@ SUB_SM XOR A RET KEY ;RES 5,(IY+1) - LD A,(SHIFT) + LD A,(PRINT_S.SHIFT) LD E,A LD A,(POSIT) SUB E @@ -2310,7 +2337,8 @@ RES_CUR LD A,(CURSORX) LD A,(_A+1) JP PRINTX -PRINT_S PUSH DE +PRINT_S: + PUSH DE CALL GETXY ;;; LD DE,(TEMPXY) LD E,0 @@ -2321,36 +2349,34 @@ PRINT_S PUSH DE CALL PRINTX POP DE EX DE,HL -SH LD BC,#0000 +.SHIFT+1: LD BC,#0000 ADD HL,BC - LD A,(SHIFT) + LD A,(.SHIFT) LD C,A LD A,(IX+1) SUB C - JP Z,EMT_STR + JP Z,.EMT_STR LD B,A LD A,(IX-1) SUB B - JR NC,PR_S + JR NC,.PR_S LD B,(IX-1) -PR_S PUSH BC - LD C,#86 +.PR_S: PUSH BC + LD C,BIOS.LP_PRINT_LINE2 RST ToBIOS POP BC -EMT_STR LD A,(IX-1) +.EMT_STR: LD A,(IX-1) SUB B EI RET Z LD B,A - LD C,#82 - LD A,#20 + LD A,' ' + LD C,BIOS.LP_PRINT_SYM RST ToBIOS EI RET -SHIFT EQU SH+1 - -GET_CMD LD D,XH +GET_CMD: LD D,XH LD E,XL EX DE,HL LD E,(HL) @@ -2444,10 +2470,19 @@ BAT_BUFFER.size EQU 128 ;!FIXIT BAT_BUFFER LENGTH - +/* +; Структура строки ввода ~input line~ +struct_input_line: + db max_len_comline ;+0 254 макс. число ввод. символов + db 0 ;+1 флаг ReadyString + db 0 ;+2 X тек. полож. курсора в пределах строки + db 0 ;+3 X смещ. строки за левый край (в символах) + db 0 ;+4 число введенных символов + ds max_len_comline+1 ;+5 строка ввода +*/ STRUCT BUFFERS_STRUCT -CMDLINE BLOCK 256,0 +CMDLINE BLOCK 256,0 ;!HARDCODE cmdline size TMPLINE BLOCK 256,0 PRMLINE BLOCK 256,0 ;BUFFER @@ -2471,7 +2506,7 @@ BAT_FM DB 0 BAT_LEN DB 0 ECHOFLG DB 0 PATHLEN DB 0 -PATH BLOCK 40,0 ;!FIXIT PATH LENGTH +PATH BLOCK 40,0 ;!HARDCODE PATH LENGTH ENDS diff --git a/Console/build.txt b/Console/build.txt new file mode 100644 index 0000000..b74e882 --- /dev/null +++ b/Console/build.txt @@ -0,0 +1 @@ +31 \ No newline at end of file diff --git a/Console/version.inc b/Console/version.inc new file mode 100644 index 0000000..1d20a76 --- /dev/null +++ b/Console/version.inc @@ -0,0 +1,22 @@ +;------------------[ Достаём текущую дату и BUILD++ ]-----------------[] + LUA PASS1 + Console_build = increase_build("./Console/build.txt") + if Console_build > 999 then + Console_build = 999 + print("WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","\aWARNING! Build > 999\a") + end + ENDLUA + LUA ALLPASS + sj.insert_label("lua_BUILD", Console_build) + ENDLUA +;---------------------------------------------------------------------[] + +; +; Shell full version +; номер версии (0..9) +CONSOLE_VERS EQU 1 +; номер модификации (0..99) +CONSOLE_MODF EQU 2 +; номер билда (0..999) +CONSOLE_BUILD EQU lua_BUILD +; \ No newline at end of file diff --git a/DSS/DOS5.ASM b/DSS/DOS5.ASM index f023b0d..3fca848 100644 --- a/DSS/DOS5.ASM +++ b/DSS/DOS5.ASM @@ -185,7 +185,7 @@ DEL01 EX DE,HL ; hl= ; INPUT: HL - "old_name.ext",#00 without simbols * ? ; DE - "new_name.ext",#00 without simbols * ? ////////////////////////////////////////////////////////////////////// -RENAME PUSH DE +RENAME: PUSH DE LD DE,MASKARE CALL MASK POP DE @@ -1134,7 +1134,7 @@ MASKARE: BLOCK 8,0 ; ; RET: C=2 FILE WITHOUT EXTENTION ; C=1 FILE WITH EXTENTION ;------------------------------------------------- -MASK PUSH HL +MASK: PUSH HL PUSH DE LD H,D LD L,E @@ -1147,13 +1147,13 @@ MASK PUSH HL LD A,(HL) CP '.' ;R07 SCF ;R07 - JR Z,MASKB ;R07 - CP '!' -MASKB LD A,DSS_Error.sys.INVALID_NAME + JR Z,.MASKB ;R07 + CP ' '+1 +.MASKB: LD A,DSS_Error.sys.INVALID_NAME RET C LD BC,#0902 ; B - счетчик -MASK1 LD A,(HL) - CP '!' +MASK1: LD A,(HL) + CP ' '+1 CCF RET NC CP '"' @@ -1201,20 +1201,20 @@ MASK_ERR: SCF RET -MASK3 LD A,'?' +MASK3: LD A,'?' INC HL DJNZ MASK6 LD A,DSS_Error.sys.INVALID_NAME SCF RET -MASK6 LD (DE),A +MASK6: LD (DE),A INC DE DJNZ MASK6 LD B,1 JR MASK1 -MASK5 LD A,' ' +MASK5: LD A,' ' INC HL DJNZ MASK4 LD B,4 @@ -1224,7 +1224,7 @@ MASK5 LD A,' ' SCF RET -MASK4 LD (DE),A +MASK4: LD (DE),A INC DE DJNZ MASK4 LD B,4 @@ -1235,7 +1235,7 @@ MASK4 LD (DE),A RET ; a..z -> A..Z -UPPER CP 'a' +UPPER: CP 'a' RET C CP '{' JR NC,MDUPPER diff --git a/DSS/DRV-MAIN.ASM b/DSS/DRV-MAIN.ASM index 84ed777..b4a201f 100644 --- a/DSS/DRV-MAIN.ASM +++ b/DSS/DRV-MAIN.ASM @@ -60,18 +60,18 @@ A0010: ;JP DRV_PAGE.RST_10 ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; -; -; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; ; <[DRIVE API]> ; -; BLOCK #18-$,#C7 ; #C7 - "RST 0" opcode -; ;A0018 JP INTDISK ; -; A0018: PUSH AF ; -; PUSH BC ; -; DRV_PAGE.MAIN_PAGE_NUMBER+2: ; -; LD BC,0*256 + SLOT0 ; !FIXIT сюда не должны вставляться номера выделенных страниц? -; JP PORTAL.outDRV ; -; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; + +;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; +; <[DRIVE API]> ; + BLOCK #18-$,#C7 ; #C7 - "RST 0" opcode +;A0018 JP INTDISK ; +A0018: PUSH AF ; + PUSH BC ; +DRV_PAGE.MAIN_PAGE_NUMBER+2: ; + LD BC,0*256 + SLOT0 ; !FIXIT сюда не должны вставляться номера выделенных страниц? + JP PORTAL.outDRV ; +;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; + ;!TODO ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; @@ -202,7 +202,7 @@ ADCALL+1: CALL DISPATCH ; JP PORTAL.out_DRV ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; - display "=============================",/H,(#82-#73-(PORTAL.toMAIN.switch-PORTAL.toMAIN)) + ;!FIXIT чёт не то тут diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 76ccc1c..5e219e9 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -298,8 +298,10 @@ F_START: DI ;R05 .saveDRV+1: LD A,0 - LD BC,1*256 + Dss.BootDSK - RST ToDSS + ;LD BC,1*256 + Dss.BootDSK + ;RST ToDSS + LD B,1 + CALL BOOTDSK EI ;Set new address fn. VERSION @@ -334,8 +336,9 @@ F_START: DI ;R12 .err_oldBIOS: LD HL,.err_oldBIOS_message - LD C,Dss.PChars - RST ToDSS + ;LD C,Dss.PChars + ;RST ToDSS + CALL PCHARS SCF RET .err_oldBIOS_message: diff --git a/DSS/EXECUTE.ASM b/DSS/EXECUTE.ASM index 28ea073..93fa16d 100644 --- a/DSS/EXECUTE.ASM +++ b/DSS/EXECUTE.ASM @@ -990,7 +990,7 @@ NOINK: LD A,H ;R02 LD SP,EXEBUFF+510 ;Вставляется в DSS_PAGE ; - LD A,DSS_PAGE ;!FIXIT втыкать страницы приложения + LD A,SHARED_PAGE OUT (SLOT1),A OUT (SLOT2),A OUT (SLOT3),A @@ -1159,7 +1159,7 @@ NOINK2: ;R02 LD SP,EXEBUFF+510 ;Вставляется в DSS_PAGE ; - LD A,DSS_PAGE + LD A,SHARED_PAGE OUT (SLOT1),A OUT (SLOT2),A OUT (SLOT3),A diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index 7a61a2b..8064e23 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -160,8 +160,10 @@ ECHOKEY: CALL Cursor_On ; CALL Cursor_Off ; выкл. курсор POP AF OR A ; добавил - CALL NZ,PUTCHAR ; вывод "a" на экран - POP BC + ;!FIXIT scroll заменить на вывод символа биосом или WRCHAR + CALL NZ,PUTCHAR ; вывод "a" на экран + ; + POP BC POP DE LD A,E AND A diff --git a/DSS/Media_drivers/ide-drv.asm b/DSS/Media_drivers/ide-drv.asm index 16b9130..ced41ea 100644 --- a/DSS/Media_drivers/ide-drv.asm +++ b/DSS/Media_drivers/ide-drv.asm @@ -653,7 +653,7 @@ NXTPART LD DE,#10 PARTIT: IN A,(SLOT3) PUSH AF - LD A,DSS_PAGE + LD A,SHARED_PAGE OUT (SLOT3),A CALL PARTIT1 POP AF diff --git a/DSS/VIDEO.ASM b/DSS/VIDEO.ASM index f7128db..8a4d3ec 100644 --- a/DSS/VIDEO.ASM +++ b/DSS/VIDEO.ASM @@ -6,7 +6,7 @@ ;--------------------------------------------------------------- ;Rev Date Name Description ;--------------------------------------------------------------- -;R03 04-04-2023 BAO FIXED BUGS IN FN WINCOPY, WINREST, SCROLL, SETVMOD, SELPAGE +;R03 04-04-2023 BAO FIXED BUGS IN FN SCROLL, SETVMOD, SELPAGE ;R02 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI" ;R01 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0) ;--------------------------------------------------------------- @@ -20,46 +20,25 @@ CLEAR: LD C,BIOS.LP_CLS_WIN2 ; PRINT NULL-TERMINATED CHARS STRING ; HL - STRING POINTER -PCHARS: LD A,(HL) +PCHARS: ;CALL CURSOR + ;LD A,E + ;LD (.start_x),A + +.loop: LD A,(HL) INC HL OR A RET Z ;PUSH HL + ;LD C,A CALL PUTCHAR - ;POP HL - JP PCHARS + + ;CALL CURSOR + ;LD A,(.start_x) + ;CP E -; PRINT CHAR -; A - CHAR -PUTCHAR: - CP #0D - JP Z,CR_ - CP #0A - JP Z,LF_ - CP #09 - JP Z,TB_ - CP #08 - JP Z,BK_ - ; CP #20 - ; JP NC,CHAR -CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM - RST ToBIOS -; САЙМАН тут насильный скролл экрана если напечатал в позиции последнего символа последней строки -; push af -; ld a,e -; cp #4F -; jp nz,.exit -; ld a,d -; cp #1F -; jp nz,.exit -; ld e,0 -; ld c,#84 -; rst 8 -; call LFF -; .exit: -; pop af -; САЙМАН - RET + ;POP HL + JP .loop +NO_NEED_SCROLL: DB 1 BK_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR RST ToBIOS @@ -69,45 +48,52 @@ BK_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR DEC E JP LOCATE -TB_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR - RST ToBIOS - - IF TABisSPACES - LD B,E - LD A,E - AND #F8 - ADD A,8 - SUB B - LD B,A - LD C,BIOS.LP_PRINT_SYM - LD A,#20 - RST ToBIOS - RET - ELSE - LD A,E - ADD A,8 - AND #78 - LD E,A - JP LOCATE - ENDIF - - +;-----[] LF_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR RST ToBIOS LD A,D CP #1F - JP NC,LFF + JR NC,LFF INC D - //JP LOCATE - CALL LOCATE ; !!!!! Сайман - + IFN EnoughtOnly_LF + JP LOCATE + ELSE + CALL LOCATE + ; !!!! НЕ разрывать LF_ и CR_ !!!! + ENDIF CR_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR RST ToBIOS LD E,0 JP LOCATE +;-----[] - -LFF: PUSH HL +; PRINT CHAR +; A - CHAR +PUTCHAR: + ;CP ' ' + ;JR NC,CHAR + CP #0D + JR Z,CR_ + CP #0A + JR Z,LF_ + CP #09 + JR Z,TB_ + CP #08 + JR Z,BK_ + ;SCF + ;RET +CHAR: + LD BC,1*256 + BIOS.LP_PRINT_SYM + ;!TEST CR+LF+SCROLL + ;JP ToBIOS + RST ToBIOS + ; проверка на переход курсора в самое начало (X:Y == 0:0) + CALL CURSOR + LD A,D + OR E + RET NZ + ; +LFF: PUSH HL ;!FIXIT сохранять текущие прерывания ;PUSH DE LD BC,1*256 + BIOS.LP_SCROLL_UD LD DE,#0020 @@ -118,7 +104,7 @@ LFF: PUSH HL LD DE,#1F00 ;PUSH DE CALL LOCATE - LD A,#20 + LD A,' ' LD BC,#50*256 + BIOS.LP_PRINT_SYM RST ToBIOS EI @@ -126,7 +112,30 @@ LFF: PUSH HL LD DE,#1F00 CALL LOCATE POP HL - RET + RET + + +TB_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR + RST ToBIOS + + IF TABisSPACES + LD B,E + LD A,E + AND #F8 + ADD A,8 + SUB B + LD B,A + LD C,BIOS.LP_PRINT_SYM + LD A,' ' + JP ToBIOS + ELSE + LD A,E + ADD A,8 + AND #78 ;????? глянуть, что будет если координаты курсора в конце строки почти + LD E,A + JP LOCATE + ENDIF +; ; ; SET CURRENT CURSOR POSITION @@ -134,16 +143,18 @@ LFF: PUSH HL ; D = Y ; E = X LOCATE: LD C,BIOS.LP_SET_PLACE - RST ToBIOS - RET + ; LD A,C + ; LD (NO_NEED_SCROLL),A + JP ToBIOS + ;RET ; GET CURRENT CURSOR POSITION ; out: ; D - Y ; E - X CURSOR: LD C,BIOS.LP_GET_PLACE - RST ToBIOS - RET + JP ToBIOS + ;RET ; READ CHAR & ATTR FROM THE SCREEN ; in: @@ -186,14 +197,14 @@ WRCHAR: LD C,A ; H - HEIGHT ; L - WIDTH ; IX - ADDRESS -; B - PAGE, IF IX > 0C000H ; FIXIT не косяк ли тут? банка должна в A' передаваться, а не B +; B - PAGE, IF IX > #C000 WINCOPY: AND A LD A,R ;R02 PUSH AF ;R02 XOR A - EX AF,AF' ;R03 - LD A,B ;R03 - EX AF,AF' ;R03 + ;EX AF,AF' ;R03 + ;LD A,B ;R03 + ;EX AF,AF' ;R03 LD C,BIOS.WIN_COPY DI ;R02 RST ToBIOS @@ -208,14 +219,14 @@ WINCOPY: AND A ; H - HEIGHT ; L - WIDTH ; IX - ADDRESS -; B - PAGE, IF IX > 0C000H ; FIXIT не косяк ли тут? банка должна в A' передаваться, а не B +; B - PAGE, IF IX > #C000 WINREST: AND A LD A,R ;R02 PUSH AF ;R02 XOR A - EX AF,AF' ;R03 - LD A,B ;R03 - EX AF,AF' ;R03 + ;EX AF,AF' ;R03 + ;LD A,B ;R03 + ;EX AF,AF' ;R03 DI ;R02 LD C,BIOS.WIN_RESTORE RST ToBIOS @@ -233,10 +244,13 @@ WINREST: AND A ; B = 1 - SCROLL UP ; B = 2 - SCROLL DOWN ; A = 0 - CLEAR LINE -SCROLL: DJNZ SCR_DW - LD B,A - LD C,H - PUSH BC +SCROLL: DJNZ SCR_DW ;!TODO заменить на BIOS.LP_SCROLL_UD и посмотреть, что шустрее + ;!TEST + ;LD B,A + ;LD C,H + ;PUSH BC + PUSH AF + ; PUSH DE PUSH HL LD XH,D @@ -248,9 +262,13 @@ SCROLL: DJNZ SCR_DW RST ToBIOS POP HL POP DE - POP BC - XOR A - CP B + ;!TEST + ;POP BC + POP AF + ;XOR A + ;CP B + AND A + ; RET NZ LD A,D ADD A,H @@ -258,7 +276,7 @@ SCROLL: DJNZ SCR_DW LD D,A .print: PUSH DE ;R01 CALL LOCATE - LD A,#20 + LD A,' ' LD B,L LD C,BIOS.LP_PRINT_SYM RST ToBIOS @@ -268,24 +286,32 @@ SCROLL: DJNZ SCR_DW RET SCR_DW: DJNZ SCR_ERR - LD B,A - LD C,L - PUSH BC ;R03 + ;!TEST + ;LD B,A + ;LD C,H + ;PUSH BC + PUSH AF ;R03 + ; PUSH DE PUSH HL LD XH,D LD XL,E INC XH DEC H - LD C,BIOS.WIN_MOVE + LD C,BIOS.WIN_MOVE XOR A RST ToBIOS POP HL POP DE - POP BC ;R03 - XOR A - CP B - JR Z,SCROLL.print + ;!TEST + ;POP BC + POP AF ;R03 + ;XOR A + ;CP B + AND A + ; + RET NZ + JP SCROLL.print ; PUSH DE ;R01 ; CALL LOCATE ; LD A,#20 @@ -303,15 +329,15 @@ SCR_ERR: ; SELECT SCREEN PAGE ; B - SCREEN PAGE -SELPAGE ;PUSH BC +SELPAGE:;PUSH BC LD A,(VMODE) BIT 7,A - JR NZ,SEL2 + JR NZ,.SEL2 PUSH BC LD C,A CALL SETVMOD.TEXT_M POP BC -SEL2 ;POP BC +.SEL2: ;POP BC LD A,B AND #01 OUT (SCREEN_SWITCH),A @@ -426,7 +452,7 @@ G320_56 PUSH BC CALL SETMODE LD HL,TAB_320x256_1 LD E,#00 - JR GRAPH_NEXT + JP GRAPH_NEXT ; CALL SETMODE ; POP BC ; LD A,C @@ -447,7 +473,7 @@ G640_16 PUSH BC CALL SETMODE LD HL,TAB_640x256_1 LD E,#00 - JR GRAPH_NEXT + JP GRAPH_NEXT ; CALL SETMODE ; POP BC @@ -471,42 +497,24 @@ VMODE: DB #03 ;81h - GRAF 320 x 256 (256 colors) ;82h - GRAF 640 x 256 (16 colors) ;83h - GRAF 640 x 256 (256 colors) UNUSED - SETMODE: PUSH DE - LD DE,#FEE0 ;!HARDCODE грязный хак. кидает данные в буфер служебной страницы биоса. - LD BC,ScreenDescriptorTable.Size ; БИОС при использовании IX предполагает, что он указывает - ;CALL MOVBIOS ; на адрес ниже #C000 и вставляет в третью банку страницу #FE - ;LD A,R - IN A,(SLOT3) + LD DE,SYS_PAGE.SHARED_BUFFER_32b ; грязный хак. кидает данные в буфер служебной страницы биоса. + LD BC,ScreenDescriptorTable.Size ; БИОС при использовании IX предполагает, что он указывает + IN A,(SLOT3) ; на адрес ниже #C000 и вставляет в третью банку страницу #FE EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A LDIR EX AF,AF' OUT (SLOT3),A - ;JP PO,.skip_EI - ;EI .skip_EI: POP DE - LD IX,#FEE0 ;!HARDCODE грязный хак. - ;LD HL,#0000 + LD IX,SYS_PAGE.SHARED_BUFFER_32b ; грязный хак. LD C,BIOS.WIN_OPEN RST ToBIOS SAFE_PORTY ;????? - возможно, что теперь не нужно, везде с банкой 3 работают, проверить XOR A RET -; MOVBIOS: LD A,R -; IN A,(SLOT3) -; EX AF,AF' -; LD A,SYS_PAGE -; OUT (SLOT3),A -; LDIR -; EX AF,AF' -; OUT (SLOT3),A -; RET PO -; EI -; RET - ;IX+0 ;HORIZONTAL ;IX+1 ;VERTICAL ;IX+2 ;X - COORD @@ -536,7 +544,7 @@ ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6 ; SAVETXT PUSH AF -;;!!!!! перенесена логика супер дичайшего ускорения + ;!!!!! перенесена логика супер дичайшего ускорения LD A,(VMODE) BIT 7,A JR NZ,NOSAVET @@ -560,10 +568,10 @@ SAVETXT PUSH AF LD L,#28 SVTEXT1 LD (SVHL1),HL LD DE,#0000 - EX AF,AF' ;R03 - LD A,(BANKTBL+TXTPAGE) - LD B,A - EX AF,AF' ;R03 + ;EX AF,AF' ;R03 + LD A,(BANKTBL+TXTPAGE) + LD B,A + ;EX AF,AF' ;R03 LD C,BIOS.WIN_COPY XOR A DI @@ -590,10 +598,10 @@ VVMODE+1: SVHL1+1: LD HL,#2050 LD DE,#0000 - EX AF,AF' ;R03 - LD A,(BANKTBL+TXTPAGE) - LD B,A - EX AF,AF' ;R03 + ;EX AF,AF' ;R03 + LD A,(BANKTBL+TXTPAGE) + LD B,A + ;EX AF,AF' ;R03 LD C,BIOS.WIN_RESTORE XOR A DI @@ -601,8 +609,9 @@ SVHL1+1: EI TCURS+1: LD DE,#0000 - LD C,BIOS.LP_SET_PLACE - RST ToBIOS + ;LD C,BIOS.LP_SET_PLACE + ;RST ToBIOS + CALL LOCATE POP IX POP HL POP DE @@ -681,3 +690,39 @@ PRINT_INIT: ;//MODULE: VIDEO ;[END] + + +; ; САЙМАН +; PUSH AF +; LD A,E +; CP #4F +; JP NZ,.exit +; LD A,D +; CP #1F +; JP NZ,.exit +; LD E,0 +; LD C,BIOS.LP_SET_PLACE +; RST ToBIOS +; CALL LFF +; .exit: +; pop af +; RET +; ; САЙМАН + + +; LD A,D ; в DE координаты текущего знакоместа +; XOR E ; Проверяем на координаты #1F:#4F +; XOR #50 +; RET NZ ; если другие - то выход +; LD E,A +; LD C,BIOS.LP_SET_PLACE +; RST ToBIOS +;LFF: +; ... + +;;;;;;;; + ; LD A,D ; в DE координаты текущего знакоместа + ; XOR E ; Проверяем на координаты #1F:#4F + ; XOR #50 + ; RET NZ ; если другие - то выход +;;;;;;;; \ No newline at end of file diff --git a/DSS/build.txt b/DSS/build.txt index c9c4108..5d1277e 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -114 \ No newline at end of file +147 \ No newline at end of file diff --git a/DSS/defines.inc b/DSS/defines.inc index 2ef0604..045fb07 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -9,7 +9,8 @@ ; DEFINE MAX_RAMDRIVES 16 DEFINE NeedSafePort_Y 1 - DEFINE TABisSPACES 1 + DEFINE TABisSPACES 0 + DEFINE EnoughtOnly_LF 0 DEFINE CLASSIC_CURSOR 0 DEFINE SAVE_PATH_MACRO 0 DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55 @@ -18,7 +19,7 @@ DEFINE USING_MEMPAGES 4 DEFINE OLD_SET_BANK 0 - PORTAL.RSTx18_SWITCH_ADDRESS #82 + DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82 ; кэш списка каталога DIRPAGE EQU 0 FATPAGE EQU 1 diff --git a/Shared_Includes b/Shared_Includes index b25c377..0277d42 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit b25c3779d6af8abc2970d3a9a55006f43292c86e +Subproject commit 0277d424098318dc45617d6fb2c1cdf405c6d345