diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index 4673c3d..83a24a0 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -126,7 +126,7 @@ ECHOKEY: ;R01 LD A," " JR Z,.CURSKI LD A,"_" -.CURSKI: CALL PUTCHAR.NO_SCROLL ;R03 +.CURSKI: CALL PUTCHAR.NO_SCROLL ;R03; [x] -bug with Vasil's version of cursor POP DE CALL LOCATE @@ -142,7 +142,7 @@ ECHOKEY: ;R01 PUSH DE LD A," " - CALL PUTCHAR.NO_SCROLL ;R03 + CALL PUTCHAR.NO_SCROLL ;R03; [x] -bug with Vasil's version of cursor ;LD A,8 ; BACKSPACE ;CALL PUTCHAR @@ -150,7 +150,7 @@ ECHOKEY: ;R01 POP AF PUSH DE ;R01 [v] - CALL PUTCHAR.NO_SCROLL + CALL PUTCHAR.NO_SCROLL ; [x] -bug with Vasil's version of cursor POP DE CALL LOCATE diff --git a/DSS/VIDEO.ASM b/DSS/VIDEO.ASM index ca42338..ac510dd 100644 --- a/DSS/VIDEO.ASM +++ b/DSS/VIDEO.ASM @@ -29,8 +29,8 @@ CLEAR: LD C,BIOS.LP_CLS_WIN2 ;///////////////////////////////////////////////////////////////////// ; Функция #5C. Вывод строки на экран. ; -; вход: HL - указатель на строку символов -; выход: нет +; вход: HL - указатель на строку символов +; выход: HL - указатель на следующую строку символов ; PRINT NULL-TERMINATED CHARS STRING ;///////////////////////////////////////////////////////////////////// PCHARS: LD A,(HL) @@ -56,7 +56,7 @@ PUTCHAR: CP #08 JR Z,.BK_ CP #07 - JR Z,.BELL + JR Z,.BELL ; [x] Beep in PChars/PUTCHAR ; .CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM ;[x] CR+LF+SCROLL @@ -67,7 +67,7 @@ PUTCHAR: OR E RET NZ ; -.LFF: PUSH HL ;!FIXIT сохранять текущие прерывания +.LFF: PUSH HL LD BC,1*256 + BIOS.LP_SCROLL_UD LD DE,#0020 RST ToBIOS @@ -110,7 +110,7 @@ PUTCHAR: RST ToBIOS LD A,D CP #1F - JR NC,.LFF ;!FIXIT срабатывает как CRLF надо скроллить с сохранением Y + JR NC,.LFF INC D IFN EnoughtOnly_LF JP LOCATE @@ -122,9 +122,15 @@ PUTCHAR: RST ToBIOS LD E,0 JP LOCATE -.BELL: LD DE,1200 - LD HL,4 - JP BEEP + ; [x] Beep in PChars/PUTCHAR +.BELL: LD DE,1200 + PUSH HL + LD HL,4 + CALL BEEP + POP HL + RET + ; +; [x] -bug with Vasil's version of cursor .NO_SCROLL: CP #0D JR Z,.CR_ @@ -135,7 +141,7 @@ PUTCHAR: CP #08 JR Z,.BK_ CP #07 - JR Z,.BELL + JR Z,.BELL ; [x] Beep in PChars/PUTCHAR ._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM JP ToBIOS ;-----[] diff --git a/SHELL/BATCH.ASM b/SHELL/BATCH.ASM index 959344c..c77fed2 100644 --- a/SHELL/BATCH.ASM +++ b/SHELL/BATCH.ASM @@ -13,7 +13,15 @@ echo_mode: ;T98B9: ds 256 - + IF 0 + CALL RUN_BAT + CALL BATCH + CALL MAKE_BATCH_PRM_ARRAY + CALL NEWLINE + CALL CMDMODE + CALL EVALCMD + CALL RUN_BAT + ENDIF ;------------------------------------------------- ; Запуск bat-файла @@ -65,7 +73,14 @@ MAKE_BATCH_PRM_ARRAY: ; вход: hl=имя файла ; выход: "CF" - ошибка откр. файла ;------------------------------------------------- -BATCH: push hl ; сохр. имя bat-файла +BATCH: + ; [ ] 11/12/23 вложенные bat + ld a,(BAT_FM) + or a + jr nz,.new_process + ; + + push hl ; сохр. имя bat-файла ld de,work_buffer ; 512 местный буфер call copy_string ; скопир. строку (с нулем) ld hl,work_buffer ; 512 местный буфер @@ -82,42 +97,40 @@ BATCH: push hl ; inc hl djnz .B_CLR_P ex de,hl -.B_ALL_P: +.B_ALL_P:;- pop hl ; восст. имя bat-файла - ; [ ] 11/12/23 вложенные bat - ld a,(BAT_FM) - or a - jr z,1F - CALL .new_process - xor a - ret -1: ; + ld a,Dss.Open.R ; на чтение ld c,Dss.Open ; открыть файл RST ToDSS - push af ; сохр. код ошибки - call c,restore_disk_path ; восст. тек. диск и путь + ;push af ; сохр. код ошибки + ;call c,restore_disk_path ; восст. тек. диск и путь ;R10 - CALL Restore_Screen + ;CALL Restore_Screen ;R10 - pop af + ;pop af ret c ld (BAT_FM),a ; дескр. bat-файла ; выполн. команд bat-файла call NEWLINE ;!TODO вложенные bat. передавать ошибку обратно в вызывающий bat - xor a + ;R10 + push af + CALL Restore_Screen + pop af + ;R10 + xor a ;!FIXIT ret ; [ ] 11/12/23 вложенные bat .new_process: - ld de,work_buffer + ld de,work_buffer2 call copy_string ; ld hl,.shell ld de,struct_input_line+5 call copy_string ; - ld hl,work_buffer + ld hl,work_buffer2 ld de,struct_input_line+5 + .shell.size - 1 call copy_string ; @@ -127,21 +140,27 @@ BATCH: push hl ; ; ld (.shell),a ; ld hl,struct_input_line+5 - ld bc,Dss.Exec;.Here - rst ToDSS + ld bc,Dss.Exec + RST ToDSS + ;!TODO вложенные bat. передавать ошибку обратно в вызывающий bat + xor a + ret ; - ; PUSH AF - ; LD A - ret nc - CP DSS_Error.sys.FILE_NOT_FOUND - jp z,A83DD ; ошибка откр. файла (cpp.asm) - ret + ;rst ToDSS + ; + ; ret nc + ; CP DSS_Error.sys.FILE_NOT_FOUND + ; ret nz + + ; jp z,A83DD ; ошибка откр. файла (cpp.asm) + ; ret ;.shell: DB '?:\SYSTEM.EXE /C ',0 .shell: DB 'SYSTEM.EXE /C ',0 .shell.size EQU $ - .shell -; + +;!TODO .ErrorEnv: DB 'ERRORLEVEL=' .ErrorEnv.Code: DB 'xxx',0 .ErrorEnv.Size EQU $ - .ErrorEnv @@ -164,11 +183,9 @@ NEWLINE: ld a,l ld (struct_input_line+4),a ; длина строки PUSH HL ; [ ] 11/12/23 для баланса стека в cmd_break - ; [ ] 11/12/23 вложенные bat - ; ld a,#FF - ; ld (RUN_BAT.level),a - ; call CMDMODE ; тест на bat-команды "rem","pause" + ; ^^^^^^^ + ;!TODO вложенные bat. передавать ошибку обратно в вызывающий bat POP HL ; [ ] 11/12/23 для баланса стека в cmd_break .exit: ld a,(BAT_FM) ; дескр. bat-файла ld c,Dss.Close ; закрыть файл @@ -190,11 +207,9 @@ NEWLINE: sbc hl,de ld a,l ld (struct_input_line+4),a ; длина строки - ; [ ] 11/12/23 вложенные bat - ; ld a,#FF - ; ld (RUN_BAT.level),a - ; call CMDMODE ; тест на bat-команды "rem","pause" + ; ^^^^^^^ + ;!TODO вложенные bat. передавать ошибку обратно в вызывающий bat ld de,struct_input_line+5 pop hl jr .loop @@ -306,7 +321,7 @@ CMDMODE: pop bc ; b=длина строки ld a,(width_inpline) ; ширина поля ввода (76..48) sub b - ei + ;ei ret z ; правый край экрана jr c,.A8250; ; строка больше ширины экрана ; заполнить строку до конца экрана @@ -315,7 +330,7 @@ CMDMODE: ld a," " ; символ ld c,BIOS.LP_PRINT_SYM ; вывод символа без атрибута RST ToBIOS - ei + ;ei ;!TEST .A8250: call newline ; @@ -365,17 +380,9 @@ CMDMODE: ld hl,BATLIST ; команды "pause","rem" + dos-команды ; de=struct_input_line+5, c=длина строки (без конц. пробелов) ; выполн. команду или запустить файл - ; [ ] 11/12/23 вложенные bat - ; ld a,#FF - ; ld (RUN_BAT.level),a - ; jp COMP005.start - - - - ; должна убрать конц. пробелы и уст. длину строки, если урезалась EVALCMD: xor a ld hl,struct_input_line+4 ;!HARDCODE @@ -408,7 +415,9 @@ EVALSTR: ld a,(hl) .VARL1: ldi or a jr nz,EVALSTR - ld bc,0 + ; A=0 + ld b,a + ld c,a ld (.TVAR_PNT),bc ret ; diff --git a/SHELL/Commands/CHDIR.ASM b/SHELL/Commands/CHDIR.ASM index 8fc7750..2c8fee3 100644 --- a/SHELL/Commands/CHDIR.ASM +++ b/SHELL/Commands/CHDIR.ASM @@ -26,7 +26,7 @@ A877B: ld c,Dss.ChDir ; сме ;call c,print_err_message jp c,print_err_message ; вывод сообщения ; call newline - jp save_disk_path ; сохр. тек. диск и путь + jp Get_Path ; сохр. тек. диск и путь ; ; вывод сист. пути на экран ; ld c,8Eh ; узнать полож. курсора ; RST ToBIOS diff --git a/SHELL/EXEC.ASM b/SHELL/EXEC.ASM index 260672b..eba849b 100644 --- a/SHELL/EXEC.ASM +++ b/SHELL/EXEC.ASM @@ -58,19 +58,19 @@ COMP005: ex af,af' cp "z"+1 jr nc,NOUP and #5F ; a..z -> A..Z -;!FIXIT тут восстанавливается директория и могут быть глюки на новом ядре NOUP: sub "A" ; номер диска ld c,Dss.ChDisk ; сменить тек. диск RST ToDSS jp c,print_err_message ; вывод сообщения +;!FIXIT тут восстанавливается директория и могут быть глюки на новом ядре ;!TODO доставать system_path отдельно для каждого диска (или в ядре сделать?) ; тест на существование папки на целевом диске IFDEF MANY_SYS_PATHES ld hl,system_path ; буфер сист. пути ld c,Dss.ChDir ; уст. тек. путь RST ToDSS - jp nc,save_disk_path ; Ok + jp nc,Get_Path ; Ok ENDIF ; @@ -87,7 +87,7 @@ NOUP: sub "A" ; jp c,print_err_message ; вывод сообщения ENDIF ; - jp save_disk_path ; Ok + jp Get_Path ; Ok ; задан не диск RUN_EXT: ex de,hl ; восст. адрес начала строки @@ -185,7 +185,7 @@ Ret_New_Line: RESTORE_ALL: ;[x] 01/11/23 ;!TEST - CALL save_disk_path + CALL Get_Path ; LD A,(screen_path) SUB 'A' diff --git a/SHELL/Messages/main_txt.asm b/SHELL/Messages/main_txt.asm index e330bea..cea673c 100644 --- a/SHELL/Messages/main_txt.asm +++ b/SHELL/Messages/main_txt.asm @@ -23,8 +23,11 @@ MAIN_MSG: .CRLF EQU .CRLF_ ; !txtCounter DEFL 0 -; -.TABLE: : db 0 +; ; не сдвигать____ +.TABLE: : db 0; | + stN .CRLF_ : db CR,LF,0; | + ;________________/ + ; stN .DIR_1_ : db "Volume in drive %1 %4 %5",CR,LF db "Volume Serial Number is %2",CR,LF db CR,LF,"Directory of %3",CR,LF,LF,0 @@ -48,7 +51,6 @@ MAIN_MSG: db "MD | MKDIR TIME ECHO EXIT ",CR,LF db "RD | RMDIR DATE CLS REBOOT ",CR,LF,LF,0 stN .CALC_ : db "Calculating free space...",CR,0 - stN .CRLF_ : db CR,LF,0 ; ;R11 db 0 DZ "Unknown command" diff --git a/SHELL/SHELL.ASM b/SHELL/SHELL.ASM index 9eb0307..2a83c3f 100644 --- a/SHELL/SHELL.ASM +++ b/SHELL/SHELL.ASM @@ -101,7 +101,7 @@ shell: ld a,(ix-1) ld (cmd_exit.TASKX),a push ix - call save_disk_path ; сохр. тек. диск и путь + call Get_Path ; сохр. тек. диск и путь pop hl ; hl=ix ; ; Тест на опции запуска самого шелла @@ -118,13 +118,11 @@ shell: jr z,back_to_parent_process ; вводились дополн. параметры PUSH HL ; [ ] 11/12/23 для баланса стека в cmd_break - ; [ ] 11/12/23 вложенные bat - ; xor a - ; ld (RUN_BAT.level),a - ; call CMDMODE ; (batch.asm) выполн. команду или запустить файл + ; ^^^^^^^ + ;!TODO вложенные bat. передавать ошибку обратно в вызывающий bat POP HL ; [ ] 11/12/23 для баланса стека в cmd_break - call save_disk_path ; узнать и сохр. тек. диск и путь + call Get_Path ; узнать и сохр. тек. диск и путь ; ; Вернуться в родит. процесс back_to_parent_process: @@ -160,9 +158,12 @@ option_c: ;ld hl,work_buffer+256;; ld hl,struct_input_line+5 ; имя bat-файла call BATCH ; обработка bat-файла (batch.asm) - PUSH AF ; [ ] 11/12/23 вложенные bat, сохраняем код возврата - call save_disk_path ; узнать и сохр. тек. диск и путь - POP AF ; [ ] 11/12/23 вложенные bat, сохраняем код возврата + + ;PUSH AF ; [ ] 11/12/23 вложенные bat, сохраняем код возврата + ;call save_disk_path ; узнать и сохр. тек. диск и путь + ;POP AF ; [ ] 11/12/23 вложенные bat, сохраняем код возврата + + ;!TODO вложенные bat. передавать ошибку обратно в вызывающий bat jr back_to_parent_process ; вернуться в родит. процесс @@ -187,7 +188,7 @@ run_shell: run_shell_loop: ;call A82CC ; узнать и уст. полож. курсора ; вывести тек.сист. путь и войти в строку редактирования - call save_disk_path ; узнать и сохр. тек. диск и путь + call Get_Path ; узнать и сохр. тек. диск и путь run_shell_loop1: call input_line call newline ; на новую строку @@ -317,13 +318,12 @@ setopt4: ld a,c ;!TODO проверить 4 нижеидущие процедуры когда в DSS будут нормально пути запоминаться ; Сохранить тек. диск и путь ;GETPATH: -save_disk_path: +Get_Path: ; узнать тек. каталог ld hl,system_path ; 256 буфер сист. пути ld c,Dss.CurDir RST ToDSS -save_disk: - ; узнать тек. диск +.disk: ; узнать тек. диск ld c,Dss.CurDisk RST ToDSS add a,"A" @@ -336,7 +336,7 @@ restore_disk_path: ; уст. тек. диск ld a,(screen_path) ; 33 строка экранного пути sub "A" - ld c,Dss.ChDir + ld c,Dss.ChDisk RST ToDSS ;!FIXIT убрать лишние вызовы @@ -348,16 +348,19 @@ restore_path: ret - - ; на новую строку ;!FIXIT сделать через .PChars -newline: ld a,_cc.cr - ld c,Dss.PutChar +; newline: ld a,_cc.cr +; ld c,Dss.PutChar +; rst ToDSS +; ld a,_cc.lf +; ld c,Dss.PutChar +; jp ToDSS +newline: push hl + ld hl,MAIN_MSG.TABLE+1 ; "CR,LF,0" + ld c,Dss.PChars rst ToDSS - ld a,_cc.lf - ld c,Dss.PutChar - jp ToDSS - + pop hl + ret ; Сравнение строк ; in: de=string1 diff --git a/SHELL/build.txt b/SHELL/build.txt index f3a5e81..9e6181a 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -281 \ No newline at end of file +285 \ No newline at end of file