diff --git a/DSS/API/Read.asm b/DSS/API/Read.asm index f3b537b..a8e8905 100644 --- a/DSS/API/Read.asm +++ b/DSS/API/Read.asm @@ -1,6 +1,7 @@ ; HL - BUFFER ADDRESS ; DE - BLOCK SIZE ; A - FM +; [ ] CDFS READ: LD (.R_POINT),HL LD (.S_POINT),HL CALL SET_FM diff --git a/DSS/DOS_Proc.asm b/DSS/DOS_FS.ASM similarity index 66% rename from DSS/DOS_Proc.asm rename to DSS/DOS_FS.ASM index 4346cb6..1c1f007 100644 --- a/DSS/DOS_Proc.asm +++ b/DSS/DOS_FS.ASM @@ -1,57 +1,6 @@ -;[BEGIN] -;//MODULE: DOS_X -;//CREATE: 19-05-1998 AUTHOR: Denis Parinov -;//UPDATE: 24-10-1999 DNS Restore module -;--------------------------------------------------------------- -;Rev Date Name Description -;--------------------------------------------------------------- -;R13 06-04-2023 BAO Функцию SETBOOT можно вызвать только раз (если завершится корректно) -;R12 03-04-2023 BAO Добавлена функция рескана драйвов LD C,8 : RST #10 -;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR -;R10 03-04-2003 DNS IMPROVED FN. VERSION -;R09 27-03-2003 DNS PASTED SET/GET BOOT FN. -;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION -;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET -;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS -;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR -;R04 08-11-1999 DNS KILL OLD FUNCTIONS -;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28) -;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT" -;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE" -;--------------------------------------------------------------- - ;----------------------------------------------------------------------; ; HL - 11 bytes filename "FILENAMEEXT" ; DE - DOS filename "FILENAME.EXT",0 -; GetName: -; LD BC,#08FF -; .GETN1: LD A,(HL) -; CP " " -; JR NZ,.GETN3 -; .GETN2: INC HL -; DJNZ .GETN2 -; JR .GETN4 -; .GETN3: LDI -; DJNZ .GETN1 -; ; -; .GETN4: LD A,(HL) -; CP " " -; LD A,"." -; JR NZ,.GETN5 -; LD A,#00 -; .GETN5: LD (DE),A -; INC DE -; RET Z -; LD B,#03 -; .GETN6: LD A,(HL) -; CP " " -; RET Z -; LDI -; XOR A -; LD (DE),A -; DJNZ .GETN6 -; RET -;---------------;---------------;--------------- ;!TODO LFN GetName: LD BC,#08FF ;!HARDCODE длина имени + счётчик LD A,' ' @@ -59,7 +8,7 @@ GetName: LD BC,#08FF ;!HARDCODE JR Z,.skip LDI DJNZ .loop - JP .extension + JR .extension ; .skip: LD C,B LD B,0 @@ -91,48 +40,43 @@ GetName: LD BC,#08FF ;!HARDCODE ; вход: hl=строка имени ; выход: (TMPNAME) SetPath_GetName: - ; !TEST - INC HL - LD A,(HL) - DEC HL - CP ':' - JR NZ,.dir_loop - - LD A,(HL) - CP 'a' - JR C,.next - CP 'z'+1 - JR NC,.next - SUB %0010'0000 -.next: SUB 'A' - INC HL - INC HL - PUSH HL - CALL CHDISK - ;CALL OPENDSK - POP HL - RET C - LD A,(HL) - OR A - JR Z,.done - CP ' ' ; - JR Z,.done - CP '\' ; - SCF - LD A,DSS_Error.sys.PATH_NOT_FOUND - RET NZ - INC HL + INC HL + LD A,(HL) + DEC HL + CP ':' + JR NZ,.dir_loop + ; + LD A,(HL) + CP 'a' + JR C,.next + CP 'z'+1 + JR NC,.next + SUB %0010'0000 +.next: SUB 'A' + INC HL + INC HL + PUSH HL + CALL CHDISK + POP HL + RET C + LD A,(HL) + OR A + JR Z,.done + CP ' ' + JR Z,.done + CP '\' ; + SCF + LD A,DSS_Error.sys.PATH_NOT_FOUND + RET NZ + INC HL ; .dir_loop: LD DE,TMPNAME LD BC,#0DFF .loop: LD A,(HL) INC HL - CP '\' ; + CP '\' ; JR Z,.DIR_NAME - ; AND A - ; JR Z,.DIR_NAME - ;CP ':' - ;JR Z,.DRV_NAME + ; LD (DE),A INC DE CP ' '+1 @@ -155,25 +99,7 @@ SetPath_GetName: POP HL RET C JR .dir_loop -; .DRV_NAME: -; LD A,(TMPNAME) -; CP 'a' -; JR C,.next -; CP '{' -; JR NC,.next -; SUB #20 -; .next: SUB 'A' -; PUSH HL -; ;!TEST CHDISK OPENDSK -; ;CALL OPENDSK -; CALL CHDISK -; ; -; POP HL -; RET C -; JR .loop -; - - + ; ; Буфер имени 8.3 формата TMPNAME: DZ ' ' ; 12 пробелов и 0 ;!FIXIT к буферам ;----------------------------------------------------------------------; @@ -210,7 +136,7 @@ OPENDSK: ;!TEST DRV.Open LD A,B LD (CORE_BUFFERS.FS_Buffer.DRIVE),A ; - CALL RD_BPB + CALL RD_BPB ; [ ] cdfs ;[x] 29/02/2024 fix "open drive error" POP DE JR C,.error_bpb @@ -292,97 +218,97 @@ OPENDSK: ;!TEST DRV.Open ; DE - 11 bytes filename ; RET: C=2 FILE WITHOUT EXTENTION ; C=1 FILE WITH EXTENTION -MASK: LD HL,TMPNAME -.name: LD DE,MASKARE -.custom: PUSH HL - PUSH DE - LD H,D - LD L,E - INC DE - LD (HL),' ' - LD BC,10 ;!HARDCODE = size (FileName + Extension - 1) - LDIR - POP DE - POP HL - LD A,(HL) - CP '.' ;R007 - SCF ;R007 - JR Z,.MASKB ;R007 - CP ' '+1 -.MASKB: LD A,DSS_Error.sys.INVALID_NAME - RET C - LD BC,#0902 ; B - счетчик -.MASK1: LD A,(HL) - CP ' '+1 - CCF - RET NC - ; - CP '*' - JR Z,.MASK3 - CP '.' - JR Z,.MASK5 - CP '"' - JR Z,.MASK_ERR - CP '+' - JR Z,.MASK_ERR - CP ',' - JR Z,.MASK_ERR - CP '/' - JR Z,.MASK_ERR - CP ':' - JR Z,.MASK_ERR - CP ';' - JR Z,.MASK_ERR - CP '<' - JR Z,.MASK_ERR - CP '=' - JR Z,.MASK_ERR - CP '>' - JR Z,.MASK_ERR - CP '[' - JR Z,.MASK_ERR - CP '\' - JR Z,.MASK_ERR - CP ']' - JR Z,.MASK_ERR - CP '|' - JR Z,.MASK_ERR - CALL UPPER ; a..z -> A..Z -.MASK2: LD (DE),A - INC HL - INC DE - DJNZ .MASK1 -.MASK_ERR: - LD A,DSS_Error.sys.INVALID_NAME - SCF - RET - ; -.MASK3: LD A,'?' - INC HL - DJNZ .MASK6 - JR .MASK_ERR - ; -.MASK6: LD (DE),A - INC DE - DJNZ .MASK6 - LD B,1 - JR .MASK1 - ; -.MASK5: LD A,' ' - INC HL - DJNZ .MASK4 - LD B,4 - DEC C - JR NZ,.MASK1 - JR .MASK_ERR - ; -.MASK4: LD (DE),A - INC DE - DJNZ .MASK4 - LD B,4 - DEC C - JR NZ,.MASK1 - JR .MASK_ERR +MASK: LD HL,TMPNAME +.name: LD DE,MASKARE +.custom: PUSH HL + PUSH DE + LD H,D + LD L,E + INC DE + LD (HL),' ' + LD BC,10 ;!HARDCODE = size (FileName + Extension - 1) + LDIR + POP DE + POP HL + LD A,(HL) + CP '.' ;R007 + SCF ;R007 + JR Z,.MASKB ;R007 + CP ' '+1 +.MASKB: LD A,DSS_Error.sys.INVALID_NAME + RET C + LD BC,#0902 ; B - счетчик +.MASK1: LD A,(HL) + CP ' '+1 + CCF + RET NC + ; + CP '*' + JR Z,.MASK3 + CP '.' + JR Z,.MASK5 + CP '"' + JR Z,.MASK_ERR + CP '+' + JR Z,.MASK_ERR + CP ',' + JR Z,.MASK_ERR + CP '/' + JR Z,.MASK_ERR + CP ':' + JR Z,.MASK_ERR + CP ';' + JR Z,.MASK_ERR + CP '<' + JR Z,.MASK_ERR + CP '=' + JR Z,.MASK_ERR + CP '>' + JR Z,.MASK_ERR + CP '[' + JR Z,.MASK_ERR + CP '\' + JR Z,.MASK_ERR + CP ']' + JR Z,.MASK_ERR + CP '|' + JR Z,.MASK_ERR + CALL UPPER ; a..z -> A..Z +.MASK2: LD (DE),A + INC HL + INC DE + DJNZ .MASK1 + ; +.MASK_ERR: LD A,DSS_Error.sys.INVALID_NAME + SCF + RET + ; +.MASK3: LD A,'?' + INC HL + DJNZ .MASK6 + JR .MASK_ERR + ; +.MASK6: LD (DE),A + INC DE + DJNZ .MASK6 + LD B,1 + JR .MASK1 + ; +.MASK5: LD A,' ' + INC HL + DJNZ .MASK4 + LD B,4 + DEC C + JR NZ,.MASK1 + JR .MASK_ERR + ; +.MASK4: LD (DE),A + INC DE + DJNZ .MASK4 + LD B,4 + DEC C + JR NZ,.MASK1 + JR .MASK_ERR ;----------------------------------------------------------------------; @@ -473,14 +399,13 @@ DIR_PATH_CHECK: LD A,(HL) ;----------------------------------------------------------------------; -CHECK_NAME: - LD HL,MASKARE -.custom: LD BC,11 ;!HARDCODE - LD A,"?" - CPIR - LD A,DSS_Error.sys.INVALID_NAME - SCF - RET +CHECK_NAME: LD HL,MASKARE +.custom: LD BC,11 ;!HARDCODE + LD A,"?" + CPIR + LD A,DSS_Error.sys.INVALID_NAME + SCF + RET ;----------------------------------------------------------------------; @@ -579,37 +504,43 @@ GET_FM: LD B,FMCOUNT ;FP COMPARE ; CY - FILE POINTER > SIZE ; NC - FILE POINTER < SIZE -MOVE_CP: - LD L,(IY + _sFM.FS_REC.F_SIZE) - LD H,(IY + _sFM.FS_REC.F_SIZE+1) - LD E,(IY + _sFM.F_POSITION) - LD D,(IY + _sFM.F_POSITION+1) - AND A - SBC HL,DE - LD L,(IY + _sFM.FS_REC.F_SIZE+2) - LD H,(IY + _sFM.FS_REC.F_SIZE+3) - LD E,(IY + _sFM.F_POSITION+2) - LD D,(IY + _sFM.F_POSITION+3) - SBC HL,DE - RET -; -;----------------------------------------------------------------------; -; [x] fat32 ; [ ] CDFS -; !TODO перенести потом в FS module -RD_BPB: CALL READ_BPB - RET C - ; - LD DE,#AA55 ; сигнатура ;R05 - LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07 - ; +MOVE_CP: LD L,(IY + _sFM.FS_REC.F_SIZE) + LD H,(IY + _sFM.FS_REC.F_SIZE+1) + LD E,(IY + _sFM.F_POSITION) + LD D,(IY + _sFM.F_POSITION+1) AND A SBC HL,DE - JP Z,FAT_BPB + LD L,(IY + _sFM.FS_REC.F_SIZE+2) + LD H,(IY + _sFM.FS_REC.F_SIZE+3) + LD E,(IY + _sFM.F_POSITION+2) + LD D,(IY + _sFM.F_POSITION+3) + SBC HL,DE + RET +; + +;----------------------------------------------------------------------; +; a..z -> A..Z +UPPER: CP 'a' + RET C + CP 'z' + 1 + JR NC,.CheckRUS +.Dec: SUB #20 + RET ; - ; CDFS check +.CheckRUS: CP 'а' ; русская буква а, код #A0 + RET C + CP 'п'+1 ; русская буква п, код #AF + 1 + JR C,.Dec ; +.BGUPPER: CP 'р' ; русская буква р, код #E0 + RET C + CP 'Ё' ; русская буква Ё, код #F0 + JR NC,.HGUPPER + SUB #50 + RET ; -.UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT - SCF +.HGUPPER: CP 'ё' ; русская буква ё, код #F1 + RET NZ + DEC A RET ;----------------------------------------------------------------------; \ No newline at end of file diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 3c84133..b4c1be4 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -1,162 +1,143 @@ - -;[BEGIN] -;//MODULE: DOS-MAIN AUTHOR: Denis Parinov -;//CREATE: A LONG TIME AGO :) -;--------------------------------------------------------------- -;Rev Date Name Description -;--------------------------------------------------------------- -;[ ] увеличить длину PATH и строки BAT -;[ ] путь текущего каталога в DIR выводится с глюком если он длинее 256 байтов -;[ ] путь в приглашении консоли выводится с глюком если путь длинее 256 байтов -;[ ] ;!FIXIT какой-то баг при котором если нет диска и на него полезть, то всё ломается -;R12 24-07-2023 BAO Check minimum BIOS version on boot -;R11 17-04-2023 BAO OPTIMIZED BUFFERS, FREED UP 768 BYTES FOR CODE -;R10 14-04-2023 BAO Аварийный зависон с выводом сообщения при старте системы, если нет свободной памяти -;R09 08-04-2023 BAO Сокращение размера таблицы API до 96 функций (0 - #5F). (Опционально при компиляции) -;R08 15-04-2003 DNS RENAMED FN. OPEN AND CLOSE -;R07 31-03-2003 DNS NEW DEPLOYING ROUTINE -;R06 31-03-2003 DNS RELAYOUTING MEMORY -;R05 27-03-2003 DNS CHANGE DRV. INIT. METHOD -;R04 27-03-2003 DNS DRIVERS MOVE TO SPECIAL PAGE -;R03 14-03-2003 DNS CODE OPTIMIZATION -;R02 19-11-2002 DNS ADD ENVIRONMENT INITIALIZATION -;R01 14-11-2002 DNS CUT AND MOVE BPB-STRUCT -;--------------------------------------------------------------- -; OUTPUT './Build/system.dos' - -; MODULE MAIN -//SPRINTER EQU 2000 - - includelua 'Shared_includes/lua/Functions.lua' - include 'shared_includes/structures/FileSystem.inc' - include 'shared_includes/constants/sp2000.inc' - INCLUDE 'defines.inc' - include 'Structures.inc' - include 'shared_includes/constants/standart_colors.inc' - include 'shared_includes/constants/bios_equ.inc' - include 'shared_includes/constants/dss_equ.inc' - include 'shared_includes/macroses/accelerator.z80' - include 'shared_includes/macroses/macros.z80' - INCLUDE 'VERSION.INC' - INCLUDE 'DSS_MACROSES.Z80' +//////////////////////////////////////////////////////////////////////// +;[ ] увеличить длину PATH и строки BAT +;[ ] путь текущего каталога в DIR выводится с глюком если он длинее 256 байтов +;[ ] путь в приглашении консоли выводится с глюком если путь длинее 256 байтов +//////////////////////////////////////////////////////////////////////// ;PAGEDRV EQU #00 +;DIRPAGE EQU 0 +;FATPAGE EQU 1 +;TXTPAGE EQU 2 +;ENVPAGE EQU 2 +;DRVPAGE EQU 3 +;ENVPAGE EQU 3 +;DRVPAGE EQU 4 +;TXTADDR EQU #C000 +;ENVADDR EQU #E400 +;DIR EQU #C000 +;FAT EQU #C000 -; DIRPAGE EQU 0 -; FATPAGE EQU 1 -; TXTPAGE EQU 2 -; ENVPAGE EQU 2 -; DRVPAGE EQU 3 -; ENVPAGE EQU 3 -; DRVPAGE EQU 4 - -; TXTADDR EQU #C000 -; ENVADDR EQU #E400 - -; DIR EQU #C000 -; FAT EQU #C000 + INCLUDELUA 'Shared_includes/lua/Functions.lua' + INCLUDE 'shared_includes/structures/FileSystem.inc' + INCLUDE 'shared_includes/constants/sp2000.inc' + INCLUDE 'defines.inc' + INCLUDE 'Structures.inc' + INCLUDE 'shared_includes/constants/standart_colors.inc' + INCLUDE 'shared_includes/constants/bios_equ.inc' + INCLUDE 'shared_includes/constants/dss_equ.inc' + INCLUDE 'shared_includes/macroses/accelerator.z80' + INCLUDE 'shared_includes/macroses/macros.z80' + INCLUDE 'VERSION.INC' + INCLUDE 'DSS_MACROSES.Z80' -; ; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --; - ORG 0 -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[CLOSE TASK]> ; -RST_0x00: JP RETFAR ; ;EXECUTE.ASM R12 -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; + ORG 0 +; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --; -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[BIOS API]> ; - _mInfoBLOCK 8-$,#FF ; -RST_0x08: PUSH AF ; - LD A,SYS_PORT.BIOS ; - OUT (SYS_PORT.ON),A ; - POP AF ; - RET ; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; +;CLOSE TASK +//////////////////////////////////////////////////////////////////////// +RST_0x00: JP RETFAR ;EXECUTE.ASM +//////////////////////////////////////////////////////////////////////// -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[DSS API]> ; - _mInfoBLOCK #10-$,#FF ; -RST_0x10: JP RST_10 ; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[DRIVE API]> ; - _mInfoBLOCK #18-$,#FF ; -;A0018 JP INTDISK ; -RST_0x18: PUSH AF ; - PUSH BC ; -DRV_PG_NUMBER+2: ; - LD BC,0*256+SLOT0 ; - JP PORTAL.out_MAIN ; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[NOT USED]> ; - _mInfoBLOCK #20-$,#FF ; -RST_0x20: JP RST_20 ; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; +;BIOS API +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK 8-$,#FF +RST_0x08: PUSH AF + LD A,SYS_PORT.BIOS + OUT (SYS_PORT.ON),A + POP AF + RET +//////////////////////////////////////////////////////////////////////// -; + + +;DSS API +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK #10-$,#FF +RST_0x10: JP RST_10 +//////////////////////////////////////////////////////////////////////// + + + +;DRIVE API +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK #18-$,#FF ; +;A0018: JP INTDISK +RST_0x18: PUSH AF + PUSH BC +DRV_PG_NUMBER+2: + LD BC,0*256+SLOT0 + JP PORTAL.out_MAIN +//////////////////////////////////////////////////////////////////////// + + + +;NOT USED +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK #20-$,#FF +RST_0x20: JP RST_20 +//////////////////////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////////////////////// RST_20: RST_28: -NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION - SCF - RET -; +NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION + SCF + RET +//////////////////////////////////////////////////////////////////////// -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[NOT USED]> ; - _mInfoBLOCK #28-$,#FF ; -RST_0x28: JP RST_28 ; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[MOUSE API]> ; - _mInfoBLOCK #30-$,#FF ; + +;NOT USED +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK #28-$,#FF +RST_0x28: JP RST_28 +//////////////////////////////////////////////////////////////////////// + + + +;MOUSE API +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK #30-$,#FF RST_0x30: PUSH AF .drv_page+1: LD A,#FF OUT (SLOT0),A POP AF RET -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; - //////////////////////////////////////////////////////////////////////// -; <[MAIN INT]> - _mInfoBLOCK #38-$,#FF - ;для того, чтоб софты могли менять обработчик на свой. -RST_38_IM1: JP .Handler + + + +;MAIN INT +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK #38-$,#FF +RST_38_IM1: JP .Handler ;для того, чтоб софты могли менять обработчик на свой. + ; .Handler: CALL INTx38_Handler EI RETI ; + ; выход из обработчика в DRV-MAIN.ASM .Portal: PUSH AF LD A,(RST_0x30.drv_page) OUT (SLOT0),A - ;POP AF - PUSH HL - LD HL,(RST_38_IM1+1) - XOR A - CP H - JR NZ,.error - LD A,low .Handler - CP L - JR NZ,.error + ; вход в обработчик из DRV-MAIN.ASM + ; если приложение использует перехват IM 1, то игнор прерывания из DRV-MAIN.ASM + PUSH HL + LD HL,(RST_38_IM1+1) + XOR A + CP H + JR NZ,.error + ; + LD A,low .Handler + CP L + JR NZ,.error + ; POP HL POP AF CALL INTx38_Handler @@ -165,113 +146,71 @@ RST_38_IM1: JP .Handler .error: POP HL POP AF JR .Portal - ; //////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -; -;NMI: RETN -; -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[ NMI ]> ; - _mInfoBLOCK #66-$,#FF ; -NMI_0x66: RETN ;JP NMI ; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK #66-$,#FF +NMI_0x66: RETN //////////////////////////////////////////////////////////////////////// -; -RST_10: PUSH HL - LD L,C - IF SHORT_RSTx10_TABLE - ;[ ] R09 - LD H,A - LD A,+(DSS_API_TABLE.low_short) - SUB C - JR C,.error - LD A,H - ;[ ] R09 - ENDIF - - LD H,high DSS_API_TABLE - LD C,(HL) - INC H - LD H,(HL) - LD L,C - EX (SP),HL - RET - - IF SHORT_RSTx10_TABLE - ;[ ] R09 -.error: POP HL - JR NOPS - ;[ ] R09 - ENDIF -; - -; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; <[DRIVE PAGE SWITCH]> ; - _mInfoBLOCK #80-$,0 ; -;ENTER: ; -PORTAL.out_MAIN: ; - IN A,(C) ; - OUT (C),B ; - ASSERT $!=84,'-> Portal error!'; - POP BC ; - RET ; -;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; -; -;R01 -; Area for boot sector BootSector. -;BootSector _sBOOT_SECTOR_PARAMS ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" } -; end boot sector -;R01 +//////////////////////////////////////////////////////////////////////// +RST_10: PUSH HL + LD L,C + LD H,high DSS_API_TABLE + LD C,(HL) + INC H + LD H,(HL) + LD L,C + EX (SP),HL + RET +//////////////////////////////////////////////////////////////////////// + + +;DRIVE PAGE SWITCH +//////////////////////////////////////////////////////////////////////// + _mInfoBLOCK #80-$,0 +PORTAL.out_MAIN: + IN A,(C) + OUT (C),B + ASSERT $ != 84,'-> Portal error!' + POP BC + RET +//////////////////////////////////////////////////////////////////////// ; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --; ; + + ; CLEAR_BUFFER_AND_INIT_PROC: - ;------[CLEAR BUFFERS]------; - ;R07 ;R11 - XOR A - LD HL,CLEAR_ZONE.start - LD DE,CLEAR_ZONE.start+1 - LD BC,CLEAR_ZONE.size-1 - LD (HL),A - LDIR - LD HL,':'*256 + 'X' - LD (CORE_BUFFERS.CurrentPath),HL - LD A,'\' ; - LD (CORE_BUFFERS.CurrentDirectory),A - LD (CORE_BUFFERS.WorkDirectory),A - ; - LD A,#FF - LD (CORE_BUFFERS.FS_Buffer.DRIVE),A - ; - ;R07 ;R11 - ;R11 - LD HL,CORE_BUFFERS.FM_BUF - LD (HL),'.' - ;R11 - ;---------------------------; - ;R02 - ;LD B,#FF ;INIT ENVIRONMENT - CALL INITENV -; IFN CLASSIC_CURSOR - CALL SETUP_CURSORS -; ENDIF - ;R02 - JP VERSION - + XOR A + LD HL,CLEAR_ZONE.start + LD DE,CLEAR_ZONE.start+1 + LD BC,CLEAR_ZONE.size-1 + LD (HL),A + LDIR + LD HL,':'*256 + 'X' + LD (CORE_BUFFERS.CurrentPath),HL + LD A,'\' ; + LD (CORE_BUFFERS.CurrentDirectory),A + LD (CORE_BUFFERS.WorkDirectory),A + LD A,#FF + LD (CORE_BUFFERS.FS_Buffer.DRIVE),A + LD HL,CORE_BUFFERS.FM_BUF + LD (HL),'.' + ;INIT ENVIRONMENT + CALL INITENV + CALL SETUP_CURSORS + JP VERSION +; +; INTx38_Handler: PUSH AF EX AF,AF' PUSH AF @@ -287,10 +226,7 @@ INTx38_Handler: PUSH AF CALL KEYSCAN LD C,Dss.Mouse.GetPackets RST ToDSS.Mouse - ;CALL M_INT -; IFN CLASSIC_CURSOR - CALL cursor_interrupt; вектор обслуж. курсора ;!!!!! VASIL -; ENDIF + CALL cursor_interrupt; вектор обслуж. курсора POP IY POP IX POP HL @@ -304,67 +240,44 @@ INTx38_Handler: PUSH AF EX AF,AF' POP AF RET -;R03 -;R07Allocate memory -; LD BC,#03C2 -; RST ToBIOS -; LD HL,BANKTBL -; LD C,A -; LD B,#FF -;VERINIT INC B -; PUSH BC -; PUSH HL -; LD A,C -; LD C,#C4 -; RST ToBIOS -; POP HL -; POP BC -; LD (HL),A -; INC HL -; JR NC,VERINIT -;R07;R03 -;R07 JP INIT2 ;R03 -; DS $/256+1*256-$,0 c:\bin\menu +; -;----------------------------------------------------------------------; -;MEMTAB: BLOCK 256,0 -;----------------------------------------------------------------------; _mInfoALIGN 256,0 ;------------------------------------------------------------------------------------------------------------------------; GO_ZERO EQU #0000 ;FUNCTION ADDRESS ARRAY -DSS_API_TABLE: ;DS 512 ;,0 +DSS_API_TABLE: ;...............................................[LOW ADDRESS ]: -; 0 1 2 3 4 5 6 7 8 9 DEC HEX - DB low F_START, low CHDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09 - DB low CREATE, low CREATE.NEW, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13 - DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST_FN,low F_NEXT, low MKDIR.B, low RMDIR, low CHDIR_FN ; 2 14..1D - DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27 - DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31 - DB low ECHOKEY, low CTRLKEY, low NOPS, low K_CLEAR, low K_SETUP, low TESTKEY, low SETWIN, low SETWIN1, low SETWIN2, low SETWIN3 ; 5 32..3B - DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low GET_ERR, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45 - DB low ENVIRON, low APPINFO, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 7 46..4F - DB low SETVMOD, low GETVMOD, low LOCATE, low CURSOR, low SELPAGE, low SCROLL, low CLEAR, low RDCHAR, low WRCHAR, low WINCOPY ; 8 50..59 - DB low WINREST, low PUTCHAR, low PCHARS, low LIB_SUB, low NOPS, low PRINT ; 9 5A..5F - -;[ ] R09 -.low_short EQU $ - DSS_API_TABLE - IFN SHORT_RSTx10_TABLE +; 0 1 2 3 4 5 6 7 8 9 DEC HEX + DB low F_START, low CHDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09 + DB low CREATE, low CREATE.NEW, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13 + DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST_FN,low F_NEXT, low MKDIR.B, low RMDIR, low CHDIR_FN ; 2 14..1D + DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27 + DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31 + DB low ECHOKEY, low CTRLKEY, low NOPS, low K_CLEAR, low K_SETUP, low TESTKEY, low SETWIN, low SETWIN1, low SETWIN2, low SETWIN3 ; 5 32..3B + DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low GET_ERR, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45 + DB low ENVIRON, low APPINFO, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 7 46..4F + DB low SETVMOD, low GETVMOD, low LOCATE, low CURSOR, low SELPAGE, low SCROLL, low CLEAR, low RDCHAR, low WRCHAR, low WINCOPY ; 8 50..59 + DB low WINREST, low PUTCHAR, low PCHARS, low LIB_SUB, low NOPS, low PRINT, low NOPS, low NOPS, low NOPS, low NOPS ; 9 5A..63 + DB low NOPS, low NOPS, low NOPS, low NOPS, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 10 64..6D ; - DB low NOPS, low NOPS, low NOPS, low NOPS ; 9 60..63 - DB low NOPS, low NOPS, low NOPS, low NOPS, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 10 64..6D - DUP 13 - DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 110-239 6E-EF - EDUP - DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 24 F0..F9 - DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; END ; 25 FA..FF + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 11 6E..77 + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 12 78..81 + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 13 82..8B + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 14 8C..95 + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 15 96..9F + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 16 A0..A9 + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 17 AA..B3 + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 18 B4..BD + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 19 BE..C7 + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 20 C8..D1 + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 21 D2..DB + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 22 DC..E5 + DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 23 E6..EF ; - ELSE ;!TODO free space - - _mInfoBLOCK DSS_API_TABLE+#100 - $,0 - ;[ ] R09 - ENDIF + DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 24 F0..F9 + DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; END ; 25 FA..FF ;...............................................[HIGH ADDRESS]: DB high F_START, high CHDISK_FN, high CURDISK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK DB high CREATE, high CREATE.NEW,high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ @@ -375,47 +288,38 @@ DSS_API_TABLE: ;DS 512 ;,0 DB high FREEMEM, high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high GET_ERR,high GSWITCH,high DOSNAME, high EX_PATH DB high ENVIRON, high APPINFO, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS DB high SETVMOD, high GETVMOD, high LOCATE, high CURSOR, high SELPAGE,high SCROLL, high CLEAR, high RDCHAR, high WRCHAR, high WINCOPY - DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT - -;[ ] R09 -.high_short EQU $ - DSS_API_TABLE - .low_short - IFN SHORT_RSTx10_TABLE - ; - DB high NOPS, high NOPS, high NOPS, high NOPS + DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT, high NOPS, high NOPS, high NOPS, high NOPS DB high NOPS, high NOPS, high NOPS, high NOPS, high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO - DUP 13 - DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO - EDUP - DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS - DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS ; END ; - ELSE - ;!TODO free space - ;_mInfoBLOCK DSS_API_TABLE+#200 - $,0 - ;[ ] R09 - ENDIF -; DB low WINREST, low PUTCHAR, low PCHARS, low NOPS, low NOPS, low PRINT, low NOPS, low NOPS, low NOPS, low NOPS ; 9 5A..63 -; DB high WINREST,high PUTCHAR,high PCHARS, high NOPS, high NOPS, high PRINT, high NOPS, high NOPS, high NOPS, high NOPS + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO + ; + DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS + DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS ;---------------------------------------------------------------------------------------------------------------------------------------------------------------; -;[INCLUDE] - ;!TODO заменить по-максимому всё в KEYINTER.ASM на вызовы биоса - INCLUDE "KEYINTER.ASM" - INCLUDE "API.ASM" - INCLUDE "DOS_Proc.asm" - INCLUDE "FS_Module.asm" - INCLUDE "Procedures.asm" - ;INCLUDE "drivers/drv_to_sys_errors.asm" ; !TODO -; [ ] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb -CHECK_64kb_CLUSTER: - LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) - ; CF=0 - ADC HL,HL - LD A,DSS_Error.sys.WRITE_PROTECT - RET NZ - CCF - RET - ; + + + ;!TODO заменить по-максимому всё в KEYINTER.ASM на вызовы биоса + INCLUDE "KEYINTER.ASM" + INCLUDE "API.ASM" + INCLUDE "DOS_FS.ASM" + INCLUDE "Procedures.asm" + INCLUDE "FS/FS.asm" + ;INCLUDE "drivers/drv_to_sys_errors.asm" ; !TODO + + ;!FIXIT к буферам @@ -423,40 +327,21 @@ CHECK_64kb_CLUSTER: BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 для COREPAGE HANDBUF: BLOCK HANDBUF.SIZE,0 ; -; ; FAT_DIRECTORY_RECORD ; !HARDCODE + +;!FIXIT к буферам MASKARE: BLOCK 8,0 ; имя файла BLOCK 3,0 ; расш. BLOCK 21,0 ; 11+21=32 ; - DISPLAY "DOS-MAIN end address: ",/H,$-1 -; -;!TODO к буферам! -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/* -; 259 -CurrentPath: DB 'X' - DB ':' -CurrentDirectory: DB '\' -.DEPTH: EQU DIRECTORY_PATH_LENGTH - BLOCK CurrentDirectory.DEPTH,0 ; не .DEPTH-1 чтоб был 0 в конце -; -; 257 -WorkDirectory: DB '\' -.DEPTH: EQU DIRECTORY_PATH_LENGTH - BLOCK WorkDirectory.DEPTH,0 ; не .DEPTH-1 чтоб был 0 в конце -; 516 -*/ -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + DISPLAY "DOS-MAIN end address: ",/H,$-1 + + -; ;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < < -; -; -CLEAR_ZONE.start EQU $ - - MODULE CORE_BUFFERS +CLEAR_ZONE.start EQU $ + MODULE CORE_BUFFERS BUFFERSplace _sBuffers=$ FM_BUF _sFM = BUFFERSplace.FileManipulator .Size EQU _sFM @@ -465,8 +350,8 @@ FS_Buffer _sFS_Buffer = BUFFERSplace.FS_Buffer EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header XSTACK _sStack = BUFFERSplace.Stack .Spoint EQU XSTACK + _sStack -BUFFER EQU BUFFERSplace.Buffer -SECTOR_BUFFER EQU BUFFER ;!TODO отделить SECTOR_BUFFER от BUFFER +BUFFER EQU BUFFERSplace.Buffer +SECTOR_BUFFER EQU BUFFER ;!TODO отделить SECTOR_BUFFER от BUFFER MemoryTable EQU BUFFERSplace.MemoryTable CurrentPath EQU BUFFERSplace.CurrentPath CurrentDirectory EQU BUFFERSplace.CurrentDirectory @@ -474,19 +359,12 @@ CurrentDirectory EQU BUFFERSplace.CurrentDirectory WorkDirectory EQU BUFFERSplace.WorkDirectory .DEPTH EQU DIRECTORY_PATH_LENGTH ENDMODULE -; -; CurrentPath EQU CORE_BUFFERS.BUFFERSplace + _sBuffers -; CurrentDirectory EQU CurrentPath + 2 -; .DEPTH: EQU DIRECTORY_PATH_LENGTH -; ; -; WorkDirectory EQU CurrentDirectory + 1 + CurrentDirectory.DEPTH -; .DEPTH: EQU DIRECTORY_PATH_LENGTH -; -CLEAR_ZONE.size EQU _sBuffers - - +CLEAR_ZONE.size EQU _sBuffers ASSERT (CLEAR_ZONE.start + _sBuffers)<#4000, "Warning!!! OUT OF SLOT0" + + + DISPLAY "--- --- --- --- --- --- --- ---" DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start DISPLAY "CLEAR_ZONE.Size ", /H, CLEAR_ZONE.size @@ -519,217 +397,36 @@ CLEAR_ZONE.size EQU _sBuffers EXPORT CORE_BUFFERS.MemoryTable EXPORT CORE_BUFFERS.CurrentDirectory EXPORT CORE_BUFFERS.WorkDirectory -/* -;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -FM_BUF _sFM=$ -.Size EQU _sFM -.FullSize EQU FMCOUNT*FM_BUF.Size - -;????? а не грузится ли полностью сектор в 512 байтов при загрузке хэдера? -EXEBUFF _sEXE_HEADER=$+FM_BUF.FullSize -; EXEBUFF: -; DB "EXE" -; DB #00 -; OFFCOD1 DW #0000 -; OFFCOD2 DW #0000 -; LOADER DW #0000 -; DW #0000 -; DW #0000 -; DW #0000 -; LD_ADDR DW #0000 -; PC_REG DW #0000 -; SP_REG DW #0000 -; BLOCK 512-($-EXEBUFF),0 - -;(!!!HERE STACK FOR EXEC!!!) -; BLOCK 255,0 -;XSTACK DB #00 -XSTACK EQU EXEBUFF+_sEXE_HEADER+255 - -BUFFER EQU XSTACK+1 -SECTOR_BUFFER EQU BUFFER -;R11 //////////////////////////////// -*/ - ; ;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < < -; + + ;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ; затрётся после инициализации ;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| + INCLUDE 'first_init.asm' -; Первый старт системы, после инициализации адрес в таблице меняется на VERSION -F_START: DI - ;[x] 17.12.2023 загрузка с активного раздела, а не с первого - ;LD (.saveDRV),A - LD H,A - LD (.saveDRV),HL ; H - номер устройства, L - номер раздела на устройстве - ; - - ;R12 - LD HL,0 ; писать в никуда - LD C,BIOS.FN_VERSION - RST ToBIOS - JR C,.err_oldBIOS - EX DE,HL - LD DE,MINIMUM_BIOS_VERSION - SBC HL,DE - JR C,.err_oldBIOS - ; LD A,(.saveDRV+1) - ; CP 2 ;проверка на загрузку с дискеты, если с дискеты, то можно проигнорить запуск на BIOS ниже 2.55 - ; JR NC,.err_oldBIOS - ; LD HL,#C9AF ; XOR A : RET opcodes - ; LD (DRV_CONTENT + INITDVC.if_old),HL - ; - -.good: CALL DEPLOY ;R07 ;эта процедура затрётся после исполнения - RET C ;R10 - CALL KEYBOARD_INIT - CALL PRINT_INIT - LD C,Dss.Mouse.Init - RST ToDSS.Mouse - LD A,(VMODE) - LD C,Dss.Mouse.SetVideoMode - RST ToDSS.Mouse - ;CALL INITDVC ;R05 - ;R05 - LD C,Dss.DRV.Init - RST ToDSS.DRV - LD (LDRIVE),A - ;R05 -.saveDRV+1: - ;[x] 17.12.2023 загрузка с активного раздела, а не с первого - LD HL,0 ; H - номер устройства, L - номер раздела на устройстве - ;LD A,H - ;LD A,0 - ; - ;LD B,1 - CALL BOOTDSK.SET - RET C - ; - EI - ;Set new address fn. VERSION - LD HL,DSS_API_TABLE - LD (HL),low VERSION ;R03 - INC H - LD (HL),high VERSION ;R03 - JP CLEAR_BUFFER_AND_INIT_PROC - ; - ;R12 -.err_oldBIOS: - IN A,(SLOT0) - OUT (SLOT3),A - LD HL,.err_oldBIOS_message + SLOT3.MEM_ADDR - ;LD C,Dss.PChars - ;RST ToDSS - CALL PCHARS - SCF - RET -.err_oldBIOS_message: - DB "\r\nWARNING! This version of DSS requires BIOS v" - DB STR_MINIMUM_BIOS_VERSION - DZ " or later to boot from IDE." - ; - -DEPLOY: ;Allocate memory - LD BC,USING_MEMPAGES*256 + BIOS.GetMem - RST ToBIOS - RET C ;R10 - LD C,A - - IN A,(SLOT3) - PUSH AF - IN A,(SLOT0) - LD (DRV_CONTENT + DRV_PAGE.MAIN_PAGE_NUMBER),A ;!TEST - OUT (SLOT3),A - - LD A,C - LD HL,BANKTBL + #C000 - LD C,BIOS.GetMemBlkPages - RST ToBIOS - ; должна идти после GetMemBlkPages, чтоб вместо - ; закрывашки #FF поставить страницу COREPAGE - LD HL,BANKTBL + COREPAGE - IN A,(SLOT0) - LD (HL),A - ; для API драйвера мышки - LD (MOUSE_HANDLER.CorePage),A - LD A,(BANKTBL + DRVPAGE) - LD (RST_0x30.drv_page),A - - POP AF - OUT (SLOT3),A - - SET_PAGE_X DRVPAGE - - PUSH AF - LD HL,DRV_CONTENT - LD DE,#C000 - LD BC,DRV_CONTENT.SIZE - LDIR - IN A,(SLOT3) - LD (DRV_PG_NUMBER),A - POP AF - OUT (SLOT3),A - AND A ;R10 - RET - IF ENVVALUE != CORE_BUFFERS.BUFFER - ASSERT "Warning! ENVVALUE != BUFFER" - //BLOCK 1000,0 + ASSERT "Warning! ENVVALUE != BUFFER" ENDIF -;--- --- --- --- [Build version] --- --- --- ---; -; C_OSTYPE -;--- --- --- --- --- --- --- --- --- --- --- ---; - DISPLAY "FAT MODULE SIZE: ",/A,FAT_MODULE_SIZE DISPLAY "DEPLOY end address: ",/H,$ -;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||; DISPLAY "Space for DRV-MAIN: ",/A,#4000-$," bytes." -DRV_CONTENT: - DISP 0 - INCLUDE 'DRV-MAIN.ASM' - ENT -DRV_CONTENT.SIZE EQU $-DRV_CONTENT + +DRV_CONTENT: DISP 0 + INCLUDE 'DRV-MAIN.ASM' + ENT +DRV_CONTENT.SIZE EQU $-DRV_CONTENT BIN_END_ADDRESS EQU $ + DISPLAY "END ADDRESS: ",/H,BIN_END_ADDRESS DISPLAY "Memory leacks when > ",/H, #4000+SUBLOAD_SIZE*512 ASSERT $ < (#4001+SUBLOAD_SIZE*512),'-> Memory leack!!!'; ASSERT DRV_CONTENT.SIZE < #4001,'-> Drivers code size > #4000!!!'; -;[END] - -; - - -; DTA DB " " -; DB " " -; DB #20 -; DW 0,0,0,0,0 -; DW 0 -; DW 0 -; CLUSTER DW 0 -; SIZE DW 0,0 -; ASCIIZ DB "FILENAME.EXT",#00 - - -;R06 -;R06 BUFFER -;R06 SECTOR_BUFFER DB ". ",#10 -;R06 DW 0,0,0,0,0 -;R06 DW #0000 -;R06 DW #0000 -;R06 DW #0000 -;R06 DW #0000,0000 -;R06 DB ".. ",#10 -;R06 DW 0,0,0,0,0 -;R06 DW #0000 -;R06 DW #0000 -;R06 DW #0000 -;R06 DW #0000,0000 -;R06 DS 512-64 ;,0 \ No newline at end of file +;[END] \ No newline at end of file diff --git a/DSS/DSS_MACROSES.Z80 b/DSS/DSS_MACROSES.Z80 index 776efd5..fc5f8b9 100644 --- a/DSS/DSS_MACROSES.Z80 +++ b/DSS/DSS_MACROSES.Z80 @@ -1,3 +1,47 @@ +; +; ВХОД: L - логический номер в таблице +; ВЫХОД: IY - начало записи +; ПОРТИТ: HL, DE, IY. + MACRO LOGDRV_ENTRY_FIND tbl_addr + LD H,0 + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + EX DE,HL + LD IY,tbl_addr + ADD IY,DE + ENDM +; + +; + MACRO _CALC_DEVICE_ENTRY tbl_addr + CP DSS_MAX_DRIVES_AMOUNT+1 + JR C,.norm + ; Error! + LD A,DSS_MAX_DRIVES_AMOUNT +.norm: LD C,A + ADD A,A + ADD A,C + LD C,A + LD B,0 + LD HL,tbl_addr + ADD HL,BC + ENDM +; + +; + MACRO SET_PAGE_X new_page + LD A,(BANKTBL+new_page) + LD B,A + LD C,SLOT3 + IN A,(SLOT3) + OUT (C),B + ENDM +; + + + ; ; MACRO BUFFER_KEYINTER ; _mInfoALIGN 256,0 @@ -98,102 +142,68 @@ ; ENDM ; -; -; ВХОД: L - логический номер в таблице -; ВЫХОД: IY - начало записи -; ПОРТИТ: HL, DE, IY. - MACRO LOGDRV_ENTRY_FIND tbl_addr - LD H,0 - ADD HL,HL - ADD HL,HL - ADD HL,HL - ADD HL,HL - EX DE,HL - LD IY,tbl_addr - ADD IY,DE - ENDM -; + +; ; +; MACRO _mDSS_Version +; DB 'DSS_' +; db '0'+VERS +; db '.' +; db MODF/10+'0' +; db MODF-(MODF/10)*10+'0' +; ENDM +; ; + + ; - MACRO _CALC_DEVICE_ENTRY tbl_addr - CP DSS_MAX_DRIVES_AMOUNT+1 - JR C,.norm - ; Error! - LD A,DSS_MAX_DRIVES_AMOUNT -.norm: LD C,A - ADD A,A - ADD A,C - LD C,A - LD B,0 - LD HL,tbl_addr - ADD HL,BC - ENDM -; +; MACRO C_OSTYPE +; IF OSTYPE = DP -; - MACRO SET_PAGE_X new_page - LD A,(BANKTBL+new_page) - LD B,A - LD C,SLOT3 - IN A,(SLOT3) - OUT (C),B - ENDM +; C_OSNAME +; DB "-DP [",#30+REVISION,']',0 + +; ELSEIF OSTYPE = BETA + +; C_OSNAME +; DB '-BETA [',#30+REVISION,']',0 + +; ELSEIF OSTYPE = RC + +; C_OSNAME +; DB '-RC [',#30+REVISION,']',0 + +; ELSEIF OSTYPE = RELEASE + +; C_OSRELEASE +; ;DB "-RELEASE",0 + +; ELSE + +; C_OSNAME +; DB "-UNKNOWN",0 + +; ENDIF +; ENDM ; -; - MACRO _mDSS_Version - DB 'DSS_' - db '0'+VERS - db '.' - db MODF/10+'0' - db MODF-(MODF/10)*10+'0' - ENDM -; -; - MACRO C_OSTYPE - IF OSTYPE = DP - C_OSNAME - DB "-DP [",#30+REVISION,']',0 +; ; +; MACRO C_OSNAME +; DB "ESTEX",0 +; ENDM +; ; - ELSEIF OSTYPE = BETA - C_OSNAME - DB '-BETA [',#30+REVISION,']',0 - ELSEIF OSTYPE = RC +; ; +; MACRO C_OSRELEASE +; DB "Estex DSS",0 +; ENDM +; ; - C_OSNAME - DB '-RC [',#30+REVISION,']',0 - ELSEIF OSTYPE = RELEASE - C_OSRELEASE - ;DB "-RELEASE",0 - - ELSE - - C_OSNAME - DB "-UNKNOWN",0 - - ENDIF - ENDM -; - -; - MACRO C_OSNAME - DB "ESTEX",0 - ENDM -; - -; - MACRO C_OSRELEASE - DB "Estex DSS",0 - ENDM -; - -//////////////////////////////////////////////////////////////////////// ; ; MACRO _mSavePath force ; IF SAVE_PATH_MACRO diff --git a/DSS/FS/FAT.asm b/DSS/FS/FAT.asm index cba5fe8..f25ec6d 100644 --- a/DSS/FS/FAT.asm +++ b/DSS/FS/FAT.asm @@ -296,156 +296,151 @@ SEARCH: ; FIND "MASKAREA" IN DIRECTORY ; [x] fat32 ;!TEST ; выход: IY:DE - cluster number -FINDDIR: - SET_PAGE_X DIRPAGE - ; - PUSH AF - LD IX,DIRPAGE.buffer -.big_loop: - LD A,(IX + FAT_DIRECTORY_RECORD.NAME) - OR A - JR Z,.error - CP #E5 - JR Z,.next_step - LD A,(IX + FAT_DIRECTORY_RECORD.ATTRIBUT) - AND FAT_ATTR.DIRECTORY - JR Z,.next_step - LD HL,MASKARE - LD D,XH - LD E,XL - EX DE,HL - LD B,11 ;!HARDCODE -.loop: LD A,(DE) - CP "?" - JR Z,.compared - CP (HL) - JR NZ,.next_step -.compared: - INC HL - INC DE - DJNZ .loop - ; - LD A,(IX + FAT_DIRECTORY_RECORD.NAME) - CP "." - JP NZ,.ADDSPEC - LD A,(IX + FAT_DIRECTORY_RECORD.NAME + 1) - CP "." - JP NZ,.IT_DIR - LD HL,CORE_BUFFERS.WorkDirectory - LD D,H - LD E,L - INC HL - LD BC,CORE_BUFFERS.WorkDirectory.DEPTH - XOR A - CPIR - JP PO,.error ;[x] 20/11/23 проверка на выход за границы - DEC HL ;R009 - DEC HL - LD BC,CORE_BUFFERS.WorkDirectory.DEPTH - LD A,'\' - CPDR - INC HL - EX DE,HL - ; CF = 0 - SBC HL,DE - EX DE,HL - JR NZ,.MM3 - INC HL -.MM3: LD (HL),0 - JP .IT_DIR - ; -.next_step: - LD BC,FAT_DIRECTORY_RECORD - ADD IX,BC - JR NC,.big_loop - ; -.error: POP AF - OUT (SLOT3),A - LD A,DSS_Error.sys.PATH_NOT_FOUND - SCF - RET - ; -.ADDSPEC: - LD HL,CORE_BUFFERS.WorkDirectory+1 - LD BC,CORE_BUFFERS.WorkDirectory.DEPTH-1 - CALL .CHECK_SLASH - JR C,.error - ;R011 - LD A,B - AND A - JR NZ,.nxt - LD A,C - CP 8+1+3 ;!HARDCODE имя каталога + точка + расширение - JR C,.error -.nxt: ; - LD E,XL - LD D,XH - ; [x] оптимизация по размеру - EX DE,HL - CALL GetName - EX DE,HL - ; +FINDDIR: SET_PAGE_X DIRPAGE + ; + PUSH AF + LD IX,DIRPAGE.buffer +.big_loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME) + OR A + JR Z,.error + CP #E5 + JR Z,.next_step + LD A,(IX + FAT_DIRECTORY_RECORD.ATTRIBUT) + AND FAT_ATTR.DIRECTORY + JR Z,.next_step + LD HL,MASKARE + LD D,XH + LD E,XL + EX DE,HL + LD B,11 ;!HARDCODE +.loop: LD A,(DE) + CP "?" + JR Z,.compared + CP (HL) + JR NZ,.next_step + ; +.compared: INC HL + INC DE + DJNZ .loop + ; + LD A,(IX + FAT_DIRECTORY_RECORD.NAME) + CP "." + JP NZ,.ADDSPEC + LD A,(IX + FAT_DIRECTORY_RECORD.NAME + 1) + CP "." + JP NZ,.ITs_DIR + LD HL,CORE_BUFFERS.WorkDirectory + LD D,H + LD E,L + INC HL + LD BC,CORE_BUFFERS.WorkDirectory.DEPTH + XOR A + CPIR + JP PO,.error ;[x] 20/11/23 проверка на выход за границы + DEC HL ;R009 + DEC HL + LD BC,CORE_BUFFERS.WorkDirectory.DEPTH + LD A,'\' + CPDR + INC HL + EX DE,HL + ; CF = 0 + SBC HL,DE + EX DE,HL + JR NZ,.MM3 + INC HL +.MM3: LD (HL),0 + JP .ITs_DIR + ; +.next_step: LD BC,FAT_DIRECTORY_RECORD + ADD IX,BC + JR NC,.big_loop + ; +.error: POP AF + OUT (SLOT3),A + LD A,DSS_Error.sys.PATH_NOT_FOUND + SCF + RET + ; +.ADDSPEC: LD HL,CORE_BUFFERS.WorkDirectory+1 + LD BC,CORE_BUFFERS.WorkDirectory.DEPTH-1 + CALL .CHECK_SLASH + JR C,.error + ;R011 + LD A,B + AND A + JR NZ,.nxt + LD A,C + CP 8+1+3 ;!HARDCODE имя каталога + точка + расширение + JR C,.error +.nxt: ; + LD E,XL + LD D,XH + ; [x] оптимизация по размеру + EX DE,HL + CALL GetName + EX DE,HL + ; -; LD BC,256*8 + ' ' ;!HARDCODE -; .MM1: LD A,(DE) -; INC DE -; CP C -; JR Z,.MM2 -; LD (HL),A -; INC HL -; .MM2 DJNZ .MM1 ;x42-40 50-55 -; LD A,(DE) -; INC DE -; CP C -; JR Z,.MM3 -; LD (HL),"." -; INC HL -; LD (HL),A -; INC HL -; LD A,(DE) -; INC DE -; CP C -; JR Z,.MM3 -; LD (HL),A -; INC HL -; LD A,(DE) -; CP C -; JR Z,.MM3 -; LD (HL),A +; LD BC,256*8 + ' ' ;!HARDCODE +; .MM1: LD A,(DE) +; INC DE +; CP C +; JR Z,.MM2 +; LD (HL),A +; INC HL +; .MM2 DJNZ .MM1 ;x42-40 50-55 +; LD A,(DE) +; INC DE +; CP C +; JR Z,.MM3 +; LD (HL),"." +; INC HL +; LD (HL),A +; INC HL +; LD A,(DE) +; INC DE +; CP C +; JR Z,.MM3 +; LD (HL),A +; INC HL +; LD A,(DE) +; CP C +; JR Z,.MM3 +; LD (HL),A ; .MM2_5: INC HL -; .MM3: LD (HL),0 -; ; JP IT_DIR - ; -.IT_DIR:; fat32 - LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) - LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1) - LD YH,D - LD YL,E - LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) - LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1) - POP AF - OUT (SLOT3),A - AND A - RET - ; -.CHECK_SLASH: - XOR A - CPIR - ;[x] 20/11/23 проверка на выход за границы - SCF - RET PO - ; - DEC HL - DEC HL - LD A,'\' ; #5C - CP (HL) - INC HL - RET Z - LD (HL),A - INC HL - XOR A ; сброс CF заодно - LD (HL),A - RET +; .MM3: LD (HL),0 +; ; JP IT_DIR + ; +.ITs_DIR: ; fat32 + LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) + LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1) + LD YH,D + LD YL,E + LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) + LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1) + POP AF + OUT (SLOT3),A + AND A + RET + ; +.CHECK_SLASH: XOR A + CPIR + ;[x] 20/11/23 проверка на выход за границы + SCF + RET PO + ; + DEC HL + DEC HL + LD A,'\' ; #5C + CP (HL) + INC HL + RET Z + LD (HL),A + INC HL + XOR A ; сброс CF заодно + LD (HL),A + RET ;----------------------------------------------------------------------; CHECK_ROOT_CLUSTER: @@ -2775,6 +2770,20 @@ GET_OFFSET_IN_SECTORS: RET ;----------------------------------------------------------------------; + +;----------------------------------------------------------------------; +; [x] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb +CHECK_64kb_CLUSTER: + LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) + ; CF=0 + ADC HL,HL + LD A,DSS_Error.sys.WRITE_PROTECT + RET NZ + CCF + RET + ; +;----------------------------------------------------------------------; + FAT_MODULE_SIZE EQU $-FAT_MODULE_START ;//MODULE: FAT ;[END] \ No newline at end of file diff --git a/DSS/FS/FS.ASM b/DSS/FS/FS.ASM new file mode 100644 index 0000000..c17764d --- /dev/null +++ b/DSS/FS/FS.ASM @@ -0,0 +1,30 @@ +;----------------------------------------------------------------------; +; [x] fat32 ; [ ] CDFS +RD_BPB: CALL READ_BPB ; [ ] cdfs + RET C + ; + LD DE,#AA55 ; сигнатура ;R05 + LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07 + ; + AND A + SBC HL,DE + JP Z,FAT_BPB + ; + ; CDFS check + ; + ; +.UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT + SCF + RET +;----------------------------------------------------------------------; + + + + INCLUDE "FAT.ASM" + INCLUDE "CDFS.ASM" + +/* + +READ_BPB ; Прочитать BPB в SECTOR_BUFFER + +*/ \ No newline at end of file diff --git a/DSS/FS_Module.asm b/DSS/FS_Module.asm deleted file mode 100644 index da9d44a..0000000 --- a/DSS/FS_Module.asm +++ /dev/null @@ -1,8 +0,0 @@ - INCLUDE "FS/FAT.ASM" - INCLUDE "FS/CDFS.ASM" - -/* - -READ_BPB ; Прочитать BPB в SECTOR_BUFFER - -*/ \ No newline at end of file diff --git a/DSS/Procedures.asm b/DSS/Procedures.asm index 4638b1f..da3255c 100644 --- a/DSS/Procedures.asm +++ b/DSS/Procedures.asm @@ -16,36 +16,35 @@ ;OUTPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2 ; BC - yyyyyyymmmmddddd y - year, m - month, d - day ; (1980-2108) -MK_TIME: - LD A,L - RLCA - RLCA - SLA A - RL H - SLA A - RL H - SLA A - RL H - SRL B - OR B - LD L,A - - LD BC,#F844 ;(-1980) - ADD IX,BC - LD A,E - RLCA - RLCA - RLCA - RLCA - AND #F0 - LD B,XL - SLA A - RL B - OR D - LD C,A - EX DE,HL - AND A - RET +MK_TIME: LD A,L + RLCA + RLCA + SLA A + RL H + SLA A + RL H + SLA A + RL H + SRL B + OR B + LD L,A + ; + LD BC,#F844 ;(-1980) + ADD IX,BC + LD A,E + RLCA + RLCA + RLCA + RLCA + AND #F0 + LD B,XL + SLA A + RL B + OR D + LD C,A + EX DE,HL + AND A + RET ;----------------------------------------------------------------------; ;!TODO Procedures @@ -66,38 +65,37 @@ MK_TIME: ; H - HOUR; L - MINUTE ; B - SECOND (0...59) ; IX- YEAR (0...65535) -RMKTIME: - EX DE,HL - LD A,C - AND #1F - LD D,A - SRL B - RR C - LD A,C - RRCA - RRCA - RRCA - RRCA - AND #0F - LD E,A - LD C,B - LD B,0 - LD IX,1980 - ADD IX,BC - LD A,L - AND #1F - ADD A,A - LD B,A - SRL H - RR L - SRL H - RR L - SRL H - RR L - SRL L - SRL L - AND A - RET +RMKTIME: EX DE,HL + LD A,C + AND #1F + LD D,A + SRL B + RR C + LD A,C + RRCA + RRCA + RRCA + RRCA + AND #0F + LD E,A + LD C,B + LD B,0 + LD IX,1980 + ADD IX,BC + LD A,L + AND #1F + ADD A,A + LD B,A + SRL H + RR L + SRL H + RR L + SRL H + RR L + SRL L + SRL L + AND A + RET ;----------------------------------------------------------------------; @@ -204,88 +202,59 @@ CalcDayOfWeek: LD A,D ;----------------------------------------------------------------------; -;----------------------------------------------------------------------; -; a..z -> A..Z -UPPER: CP 'a' - RET C - CP 'z' + 1 - JR NC,.CheckRUS -.Dec: SUB #20 - RET - ; -.CheckRUS: CP 'а' ; русская буква а, код #A0 - RET C - CP 'п'+1 ; русская буква п, код #AF + 1 - JR C,.Dec - ; -.BGUPPER: CP 'р' ; русская буква р, код #E0 - RET C - CP 'Ё' ; русская буква Ё, код #F0 - JR NC,.HGUPPER - SUB #50 - RET - ; -.HGUPPER: CP 'ё' ; русская буква ё, код #F1 - RET NZ - DEC A - RET -;----------------------------------------------------------------------; - - ;!TODO hardware ;----------------------------------------------------------------------; ; Чтение регистров CMOS ; вход: d=номер регистра -RCMOS: LD C,BIOS.CMOS_RD - RST ToBIOS - ;JP BCD2HEX +RCMOS: LD C,BIOS.CMOS_RD + RST ToBIOS + ;JP BCD2HEX ; INPUT : A - BCD ; OUTPUT: A - HEX -BCD2HEX: - LD E,A - RRCA - RRCA - RRCA - RRCA - AND #0F - LD D,A - ADD A,A - ADD A,A - ADD A,D - ADD A,A - LD D,A - LD A,E - AND #0F - ADD A,D - RET +BCD2HEX: LD E,A + RRCA + RRCA + RRCA + RRCA + AND #0F + LD D,A + ADD A,A + ADD A,A + ADD A,D + ADD A,A + LD D,A + LD A,E + AND #0F + ADD A,D + RET ;----------------------------------------------------------------------; ;!TODO hardware ;----------------------------------------------------------------------; ; Запись регистров CMOS ; вход: d=номер регистра -WCMOS: CALL HEX2BCD - LD C,BIOS.CMOS_WR - JP ToBIOS +WCMOS: CALL HEX2BCD + LD C,BIOS.CMOS_WR + JP ToBIOS ; INPUT : A - HEX ; OUTPUT: A - BCD -HEX2BCD: - LD BC,#0AFF -.loop: INC C - SUB B - JR NC,.loop - ADD A,B - LD B,A - LD A,C - RLCA - RLCA - RLCA - RLCA - AND #F0 - OR B - RET +HEX2BCD: LD BC,#0AFF +.loop: INC C + SUB B + JR NC,.loop + ; + ADD A,B + LD B,A + LD A,C + RLCA + RLCA + RLCA + RLCA + AND #F0 + OR B + RET ;----------------------------------------------------------------------; ; diff --git a/DSS/VERSION.INC b/DSS/VERSION.INC index eaffa57..5cf1c8a 100644 --- a/DSS/VERSION.INC +++ b/DSS/VERSION.INC @@ -31,26 +31,27 @@ ; номер версии (0..9) VERS EQU 1 ; номер модификации (0..99) -MODF EQU 71 +MODF EQU 72 ; номер билда (0..999) BUILD EQU lua_BUILD ; -; Release Types -RELEASE EQU 0 -RC EQU 1 -BETA EQU 2 -DP EQU 3 -; - -; Build Type -OSTYPE EQU BETA -REVISION EQU 1 -; - ; Current date DAY EQU lua_DAY MONTH EQU lua_MONTH YEAR EQU lua_YEAR -; \ No newline at end of file +; + + +; ; Release Types +; RELEASE EQU 0 +; RC EQU 1 +; BETA EQU 2 +; DP EQU 3 +; ; + +; ; Build Type +; OSTYPE EQU BETA +; REVISION EQU 1 +; ; \ No newline at end of file diff --git a/DSS/build.txt b/DSS/build.txt index f0b5c72..c227083 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -57 \ No newline at end of file +0 \ No newline at end of file diff --git a/DSS/defines.inc b/DSS/defines.inc index d5fd64f..8e97679 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -7,8 +7,7 @@ ; ; - DEFINE SHORT_RSTx10_TABLE 0 ; укороченная таблица функций rst #10. 96 функций. - DEFINE COMPILE_UNUSED_CODE 0 + DEFINE COMPILE_UNUSED_CODE 0 ; ; MOUSE diff --git a/DSS/first_init.asm b/DSS/first_init.asm new file mode 100644 index 0000000..b9d918a --- /dev/null +++ b/DSS/first_init.asm @@ -0,0 +1,104 @@ +;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +; затрётся после инициализации +;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| + + +; Первый старт системы, после инициализации адрес в таблице меняется на VERSION +;-----------------------------------------------------------------------; +F_START: DI + ; загрузка с активного раздела, а не с первого + LD H,A + LD (.saveDRV),HL ; H - номер устройства, L - номер раздела на устройстве + ; + LD HL,0 ; писать в никуда + LD C,BIOS.FN_VERSION + RST ToBIOS + JR C,.err_oldBIOS + EX DE,HL + LD DE,MINIMUM_BIOS_VERSION + SBC HL,DE + JR C,.err_oldBIOS + ; +.good: CALL DEPLOY ;эта процедура затрётся после исполнения + RET C + CALL KEYBOARD_INIT + CALL PRINT_INIT + LD C,Dss.Mouse.Init + RST ToDSS.Mouse + LD A,(VMODE) + LD C,Dss.Mouse.SetVideoMode + RST ToDSS.Mouse + ; + LD C,Dss.DRV.Init + RST ToDSS.DRV + LD (LDRIVE),A + ; загрузка с активного раздела, а не с первого +.saveDRV+1: LD HL,0 ; H - номер устройства, L - номер раздела на устройстве + CALL BOOTDSK.SET + RET C + ; + EI + ;Set new address fn. VERSION + LD HL,DSS_API_TABLE + LD (HL),low VERSION + INC H + LD (HL),high VERSION + JP CLEAR_BUFFER_AND_INIT_PROC + ; +.err_oldBIOS: IN A,(SLOT0) + OUT (SLOT3),A + LD HL,.err_oldBIOS_message + SLOT3.MEM_ADDR + CALL PCHARS + SCF + RET +.err_oldBIOS_message: + DB "\r\nWARNING! This version of DSS requires BIOS v" + DB STR_MINIMUM_BIOS_VERSION + DZ " or later to boot from IDE." +;-----------------------------------------------------------------------; + + + +;-----------------------------------------------------------------------; +DEPLOY: ;Allocate memory + LD BC,USING_MEMPAGES*256 + BIOS.GetMem + RST ToBIOS + RET C + LD C,A + ; + IN A,(SLOT3) + PUSH AF + IN A,(SLOT0) + LD (DRV_CONTENT + DRV_PAGE.MAIN_PAGE_NUMBER),A ;!TEST + OUT (SLOT3),A + ; + LD A,C + LD HL,BANKTBL + #C000 + LD C,BIOS.GetMemBlkPages + RST ToBIOS + ; должна идти после GetMemBlkPages, чтоб вместо + ; закрывашки #FF поставить страницу COREPAGE + LD HL,BANKTBL + COREPAGE + IN A,(SLOT0) + LD (HL),A + ; для API драйвера мышки + LD (MOUSE_HANDLER.CorePage),A + LD A,(BANKTBL + DRVPAGE) + LD (RST_0x30.drv_page),A + ; + POP AF + OUT (SLOT3),A + SET_PAGE_X DRVPAGE + PUSH AF + ; + LD HL,DRV_CONTENT + LD DE,#C000 + LD BC,DRV_CONTENT.SIZE + LDIR + IN A,(SLOT3) + LD (DRV_PG_NUMBER),A + POP AF + OUT (SLOT3),A + AND A + RET +;-----------------------------------------------------------------------; \ No newline at end of file