diff --git a/BOOT/boot.asm b/BOOT/boot.asm index ce9672d..e4bbec6 100644 --- a/BOOT/boot.asm +++ b/BOOT/boot.asm @@ -148,7 +148,7 @@ confirm_flag+*: ld a,0 ; запросить целевой диск ld a,(disk) ; заданный номер диска add a,'A' - ld (lett2),a + ld (messages.lett2),a ld a,5 ; индекс строки "Insert destination disk..." call print_string ld bc,3035h ; ждем нажатия клавиши @@ -198,7 +198,7 @@ ok_write1: ; ; ld a,(disk) ; заданный номер диска add a,'A' - ld (lett1),a + ld (messages.lett1),a ld a,1 ; индекс строки "System installed on disk " call print_string ld a,(confirm_flag) @@ -209,7 +209,7 @@ ok_write1: ; cp 2 jr nc,exit-1 ; не дисководы add a,'A' - ld (lett3),a + ld (messages.lett3),a ld a,6 ; индекс строки "Insert system disk..." call print_string ld bc,3035h ; ждем нажатия клавиши @@ -518,41 +518,39 @@ id_mem: db -1 ; ; ; сообщения messages: db 0 - db 0Dh,0Ah,"Boot and System files Installer v" ;0 + db "\r\nBoot and System files Installer v" ;0 db major_version + '0','.' - db (minor_version / 10) + '0',(minor_version % 10) + '0','.' - db 0Dh,0Ah,0Ah - db "Copyright (c) 2006-2022 Vasil Ivanov." - db 0Dh,0Ah,0Ah - db "Copyright (c) 2023 Sprinter Team." - db 0Dh,0Ah,0Ah,0 + db (minor_version / 10) + '0',(minor_version % 10) + '0','.' + db "\r\n\nCopyright (c) 2006-2022 Vasil Ivanov." + db "\r\n\nCopyright (c) 2023 Sprinter Team." + db "\r\n\n",0 ; db "System successfully installed on disk " ;1 -lett1: db "X:",0Dh,0Ah,0Ah,0 +.lett1: db "X:\r\n\n",0 ; - db "Installing boot loader...",0Dh,0Ah,0Ah,0 ;2 - db "Writing system files...",0Dh,0Ah,0Ah,0 ;3 + db "Installing boot loader...\r\n\n",0 ;2 + db "Writing system files...\r\n\n",0 ;3 ; - db "Syntax: SYS X:",0Dh,0Ah ;4 - db " where X: - drive letter (A..Z)",0Dh,0Ah,0Ah,0 + db "Syntax: SYS X:\r\n" ;4 + db " where X: - drive letter (A..Z)\r\n\n",0 ; db "Insert destination disk in drive " ;5 -lett2: db "X:",0Dh,0Ah - db "and strike any key when ready ...",0Dh,0Ah,0Ah,0 +.lett2: db "X:\r\n" + db "and strike any key when ready ...\r\n\n",0 ; db "Insert system disk in drive " ;6 -lett3: db "X:",0Dh,0Ah - db "and strike any key when ready ...",0Dh,0Ah,0Ah,0 +.lett3: db "X:\r\n" + db "and strike any key when ready ...\r\n\n",0 ; - db "Can't install boot on this disk",0Dh,0Ah,0Ah,0 ;7 - db "Invalid drive specification",0Dh,0Ah,0Ah,0 ;8 - db " Error: Can't open file",0Dh,0Ah,0Ah,0 ;9 - db " Error: Can't allocate memory",0Dh,0Ah,0Ah,0 ;10 - db " Error: Need DOS version 1.70.811 or higher",0Dh,0Ah,0Ah,0 ;11 - db " Error: Reading error",0Dh,0Ah,0Ah,0 ;12 - db " Error: Can't create file",0Dh,0Ah,0Ah,0 ;13 - db " Error: Writing error",0Dh,0Ah,0Ah,0 ;14 -endmess: db 0 + db "Can't install boot on this disk\r\n\n",0 ;7 + db "Invalid drive specification\r\n\n",0 ;8 + db " Error: Can't open file\r\n\n",0 ;9 + db " Error: Can't allocate memory\r\n\n",0 ;10 + db " Error: Need DOS version 1.70.811 or higher\r\n\n",0 ;11 + db " Error: Reading error\r\n\n",0 ;12 + db " Error: Can't create file\r\n\n",0 ;13 + db " Error: Writing error\r\n\n",0 ;14 +.endmess: db 0 @@ -565,8 +563,8 @@ print_string: call get_string ; ; поиск строки по ее индексу в 'a' -get_string: ld hl,messages ; список мессаг для индекс. доступа - ld bc,endmess-messages ; размер списка +get_string: ld hl,messages ; список мессаг для индекс. доступа + ld bc,messages.endmess - messages ; размер списка inc a ex af,af' xor a diff --git a/DSS/API.asm b/DSS/API.asm index 3f33c53..05e1e45 100644 --- a/DSS/API.asm +++ b/DSS/API.asm @@ -67,6 +67,7 @@ include 'API/GSwitch.asm' include 'API/Environ.ASM' include 'API/Lib_Sub.asm' + include "API/EXECUTE.ASM" diff --git a/DSS/EXECUTE.ASM b/DSS/API/Execute.ASM similarity index 93% rename from DSS/EXECUTE.ASM rename to DSS/API/Execute.ASM index 3daa2b6..1dbefd2 100644 --- a/DSS/EXECUTE.ASM +++ b/DSS/API/Execute.ASM @@ -607,26 +607,30 @@ FREE_PROCESS_MEMORY: ;----------------------------------------------------------------------- FREE_PROCESS_FMs: - LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size - LD DE,CORE_BUFFERS.FM_BUF.Size - LD B,FMCOUNT+1 - LD A,(TASK) -.loop: ADD IY,DE - CP (IY+_sFM.TASK_NUM) - CALL Z,.CLOSE - DJNZ .loop - RET - ; -.CLOSE: PUSH IY - PUSH DE - PUSH AF - LD A,FMCOUNT+1 - SUB B - CALL CLOSE_FN - POP AF - POP DE - POP IY - RET + LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size + LD DE,CORE_BUFFERS.FM_BUF.Size + LD B,FMCOUNT+1 + LD A,(TASK) +.loop: ADD IY,DE + CP (IY+_sFM.TASK_NUM) + JR NZ,.next + ; close fm + PUSH AF + XOR A + OR (IY+_sFM.TASK_NUM) + JR Z,.skip + PUSH IY + PUSH DE + LD A,FMCOUNT+1 + SUB B + CALL CLOSE_FN + POP DE + POP IY +.skip: POP AF + ; +.next: DJNZ .loop + RET + ; ;----------------------------------------------------------------------- diff --git a/DSS/DOS_FM.ASM b/DSS/DOS_FM.ASM index cc12620..91d1f5a 100644 --- a/DSS/DOS_FM.ASM +++ b/DSS/DOS_FM.ASM @@ -42,57 +42,85 @@ FM_BUF: _sFM */ ; на выходе без ошибок IY указывает на файловый манипулятор - MACRO _mFM_FIND - CP FMCOUNT+1 - JR NC,ABS_FM - PUSH DE +; MACRO _mFM_FIND +; CP FMCOUNT+1 +; CCF +; RET C +; PUSH DE - LD IY,CORE_BUFFERS.FM_BUF - LD DE,CORE_BUFFERS.FM_BUF.Size - AND A - JR Z,.endLoop -.loop: ADD IY,DE - DEC A - JR NZ,.loop -.endLoop: - POP DE - ; A=0 - OR (IY) ;+00 NAME - ENDM +; LD IY,CORE_BUFFERS.FM_BUF +; LD DE,CORE_BUFFERS.FM_BUF.Size +; AND A +; JR Z,.endLoop +; .loop: ADD IY,DE +; DEC A +; JR NZ,.loop +; .endLoop: +; POP DE +; ; A=0 +; OR (IY) ;+00 NAME +; RET +; ENDM //////////////////////////////////////////////////////////////////////// -SET_FM: _mFM_FIND - LD A,DSS_Error.sys.NO_ERROR - RET NZ -ABS_FM LD A,DSS_Error.sys.INVALID_HANDLE - SCF - RET +; на выходе без ошибок IY указывает на файловый манипулятор +FM_FIND: CP FMCOUNT+1 + JR NC,.error + ; + PUSH DE + LD IY,CORE_BUFFERS.FM_BUF + LD DE,CORE_BUFFERS.FM_BUF.Size + AND A + JR Z,.endLoop +.loop: ADD IY,DE + DEC A + JR NZ,.loop +.endLoop: POP DE + ; A=0 + OR (IY) ;+00 NAME + RET +.error: XOR A + LD A,DSS_Error.sys.INVALID_HANDLE + RET + +SET_FM: CALL FM_FIND + ; error + ;LD A,DSS_Error.sys.INVALID_HANDLE + ; CF = 1 + SCF + RET Z + ; no error + XOR A ;LD A,DSS_Error.sys.NO_ERROR + ; CF = 0 + RET + -RES_FM: _mFM_FIND - LD A,DSS_Error.sys.INVALID_HANDLE - ;EXX - SCF - RET Z - XOR A - LD (IY + _sFM.FS_REC.NAME),A - RET +RES_FM: CALL FM_FIND + ; error + ; LD A,DSS_Error.sys.INVALID_HANDLE + SCF + RET Z + ; no error + XOR A + LD (IY + _sFM.FS_REC.NAME),A + RET ; -GET_FM: LD B,FMCOUNT - LD C,#FF - LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size - LD DE,CORE_BUFFERS.FM_BUF.Size -.loop: ADD IY,DE - INC C - LD A,(IY + _sFM.FS_REC.NAME) - OR A - RET Z - DJNZ .loop - LD A,DSS_Error.sys.NO_HANDLES - SCF - RET +GET_FM: LD B,FMCOUNT + LD C,#FF + LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size + LD DE,CORE_BUFFERS.FM_BUF.Size +.loop: ADD IY,DE + INC C + LD A,(IY + _sFM.FS_REC.NAME) + OR A + RET Z + DJNZ .loop + LD A,DSS_Error.sys.NO_HANDLES + SCF + RET /* - ;!TEST CHECK LOCKING 10/11/2023 + ;!TODO CHECK LOCKING 10/11/2023 GET_FM: LD IY,0 LD (.freeHandle),IY ; diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index db660de..2f24a98 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -237,7 +237,6 @@ PORTAL.out_MAIN: ; ; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --; ; - ; CLEAR_BUFFER_AND_INIT_PROC: ;------[CLEAR BUFFERS]------; @@ -353,17 +352,16 @@ ADRST10: ;DS 512 ;,0 ; DB high WINREST,high PUTCHAR,high PCHARS, high NOPS, high NOPS, high PRINT, high NOPS, high NOPS, high NOPS, high NOPS ;---------------------------------------------------------------------------------------------------------------------------------------------------------------; ;[INCLUDE] - ;!TODO заменить по-максимому всё в KEYINTER.ASM на вызовы биоса - INCLUDE "KEYINTER.ASM" - INCLUDE "VIDEO.ASM" + ;!TODO заменить по-максимому всё в KEYINTER.ASM на вызовы биоса + INCLUDE "KEYINTER.ASM" + INCLUDE "VIDEO.ASM" INCLUDE "API.ASM" - INCLUDE "DOS_Proc.asm" - INCLUDE "FS/FAT/FAT.ASM" - INCLUDE "FS/FAT/FAT_X.ASM" - INCLUDE "DOS_FM.ASM" - - INCLUDE "EXECUTE.ASM" - INCLUDE "INTMOUSE.ASM" + INCLUDE "DOS_Proc.asm" + INCLUDE "FS/FAT/FAT.ASM" + INCLUDE "FS/FAT/FAT_X.ASM" + INCLUDE "DOS_FM.ASM" + ;INCLUDE "EXECUTE.ASM" + INCLUDE "INTMOUSE.ASM" INCLUDE "Procedures.asm" INCLUDE "Kernel_Panic.asm" diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index 9806bb3..b9e4b70 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -18,8 +18,8 @@ HOST DB #00 K_LOCK EQU $-KEYFLAG LANG_L EQU 7 PAUSE_L EQU 6 -RES5_L EQU 5 -RES4_L EQU 4 +LANG_R EQU 5 ; сочетание клавиш для переключения языка отжато +LANG_S EQU 4 ; сочетание клавиш для переключения языка нажато NUM_L EQU 3 SCRL_L EQU 2 INS_L EQU 1 @@ -58,6 +58,7 @@ FLAG_S2 EQU 2 SF_ALT EQU 1 SF_BUFF EQU 0 DB #03 +UNCODE DW 0 ; последняя отжатая клавиша ; D15 - LShift ; D14 - RShift @@ -87,7 +88,6 @@ SF_BUFF EQU 0 ; D7..D0 - ASCII code -UNCODE DW 0 WAITKEY LD HL,HOST LD A,(HEAD) @@ -360,6 +360,7 @@ K_CLEAR: JR C,.error LD C,B JP RST_10 + ; .error: LD A,DSS_Error.sys.INVALID_FUNCTION SCF RET @@ -408,6 +409,7 @@ GETSYM: LD HL,HOST INC L LD C,(HL) RET +; FULL_BF: EX AF,AF' @@ -429,150 +431,188 @@ FULL_BF: .E1_KEY: SET FLAG_E1,(IX+KEYFLG) JR KEYSCAN.RESCAN +; - -KEYSCAN: - LD IX,KEYFLAG - ;!TEST SIO INT - IF KEYBOARD_INT_ENABLED - CALL .RESCAN - LD A,%0011'1000 ; return from int - OUT (Z84.SIO.Ch_A.Ctrl),A - RET +KEYSCAN: LD IX,KEYFLAG + ;!TEST SIO INT + IF KEYBOARD_INT_ENABLED + CALL .RESCAN + LD A,%0011'1000 ; return from int + OUT (Z84.SIO.Ch_A.Ctrl),A + RET + ENDIF +.RESCAN: IN A,(Z84.SIO.Ch_A.Ctrl) + AND 1 + RET Z + ;[ ] 18/02/2024 проверка на переполнение буфера + ; A = 1 + ; reg 1 + OUT (Z84.SIO.Ch_A.Ctrl),A + IN A,(Z84.SIO.Ch_A.Ctrl) + AND %0010'0000 ; check receiver overrun error + JP NZ,KBD_Receiver_Overrun + ; + IN A,(Z84.SIO.Ch_A.Data) + CP #F0 + JR Z,FULL_BF.F0_KEY + ; + CP #E0 + JR Z,FULL_BF.E0_KEY + ; + CP #E1 + JR Z,FULL_BF.E1_KEY + ; + BIT FLAG_F0,(IX+KEYFLG) + JR NZ,UN_KEY + ; + LD L,A + CALL XLAT + CALL SHIFTS + RES FLAG_E0,(IX+KEYFLG) + RES FLAG_E1,(IX+KEYFLG) + ;[ ] выгребсти весь буфер + JR Z,.RESCAN + ; RET Z ;IT'S SHIFT KEY + ; + CALL INPCODE ;L - AT POS. CODE + ;PUTCODE + ;Caps Lock + LD HL,#1C00 + AND A + SBC HL,DE + CALL Z,CAPS_X + IFN CHANGE_LANG_CTRL_SHIFT + ;Ctrl + Space + LD HL,#B800 + AND A + SBC HL,DE + CALL Z,LANG_X ENDIF - ; -.RESCAN: - IN A,(Z84.SIO.Ch_A.Ctrl) - AND 1 - RET Z - ;[ ] 18/02/2024 проверка на переполнение буфера - ; A = 1 - ; reg 1 - OUT (Z84.SIO.Ch_A.Ctrl),A - IN A,(Z84.SIO.Ch_A.Ctrl) - AND %0010'0000 ; check receiver overrun error - JP NZ,KBD_Receiver_Overrun - ; - IN A,(Z84.SIO.Ch_A.Data) - CP #F0 - JR Z,FULL_BF.F0_KEY - CP #E0 - JR Z,FULL_BF.E0_KEY - CP #E1 - JR Z,FULL_BF.E1_KEY - BIT FLAG_F0,(IX+KEYFLG) - JR NZ,UN_KEY - LD L,A - CALL XLAT - CALL SHIFTS - RES FLAG_E0,(IX+KEYFLG) - RES FLAG_E1,(IX+KEYFLG) - ;[ ] 29/02/2024 выгребсти весь буфер - JR Z,.RESCAN ;IT'S SHIFT KEY - ; RET Z ;IT'S SHIFT KEY - ; - CALL INPCODE ;L - AT POS. CODE - ;PUTCODE - LD HL,#1C00 ;Caps Lock - AND A - SBC HL,DE - CALL Z,CAPS_X - LD HL,#B800 ;Ctrl + Space - AND A - SBC HL,DE - CALL Z,RUS_X - LD HL,#5000 ;Insert - AND A - SBC HL,DE - CALL Z,INS_X - LD HL,#4900 ;Num Lock - AND A - SBC HL,DE - CALL Z,NUM_X - LD HL,#C900 ;Pause Lock - AND A - SBC HL,DE - CALL Z,PAUSE_X - LD HL,#4800 ;Scroll Lock - AND A - SBC HL,DE - CALL Z,SCL_X - ;[x] small optimization))) - ; LD HL,#CF00 ;Ctrl + Alt + Del - ; AND A - ; SBC HL,DE - ; CALL Z,RST_X - ; - LD BC,(KEYFLAG) - CALL PUTSYM - RET - ;[ ] 18/02/2024 проверка на переполнение буфера -; .Receiver_Overrun: -; LD (IX+K_SHIFT),0 -; LD (IX+KEYFLG),0 -; ; reg 0 - reset errors -; LD A,%0011'0000 -; OUT (Z84.SIO.Ch_A.Ctrl),A -; RET + ;Insert + LD HL,#5000 + AND A + SBC HL,DE + CALL Z,INS_X + ;Num Lock + LD HL,#4900 + AND A + SBC HL,DE + CALL Z,NUM_X + ;Pause Lock + LD HL,#C900 + AND A + SBC HL,DE + CALL Z,PAUSE_X + ;Scroll Lock + LD HL,#4800 + AND A + SBC HL,DE + CALL Z,SCL_X + ;Ctrl + Alt + Del + ;[x] small optimization))) + ; LD HL,#CF00 + ; AND A + ; SBC HL,DE + ; CALL Z,RST_X + ; + LD BC,(KEYFLAG) + CALL PUTSYM + ;[ ] 29/02/2024 выгребсти весь буфер + JR .RESCAN + ;RET + ; +; + IF CHANGE_LANG_CTRL_SHIFT +UN_KEY: RES FLAG_F0,(IX+KEYFLG) + LD L,A + CALL XLAT + CALL UNSHIFT + RES FLAG_E0,(IX+KEYFLG) + LD A,(UNCODE) + LD H,0 + LD (UNCODE),HL + CP #36 ;L CTRL + JR Z,.check_shift + CP #29 ;L SHIFT + RET NZ + ; check ctrl + LD A,L + SUB #36 ;L CTRL + JR Z,LANG_X + RET + ; +.check_shift: LD A,L + SUB #29 + JR Z,LANG_X + RET + ELSE +UN_KEY: RES FLAG_F0,(IX+KEYFLG) + LD L,A + CALL XLAT + CALL UNSHIFT + RES FLAG_E0,(IX+KEYFLG) + LD H,0 + LD (UNCODE),HL + RET + ENDIF +; +CAPS_X: LD A,(IX+K_LOCK) + XOR 1<