This commit is contained in:
Tolik 2025-07-02 02:54:07 +10:00
parent 49af2b4266
commit e6aa5aa304
12 changed files with 907 additions and 1164 deletions

View File

@ -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

View File

@ -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,13 +40,12 @@ 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
@ -109,13 +57,12 @@ SetPath_GetName:
INC HL
PUSH HL
CALL CHDISK
;CALL OPENDSK
POP HL
RET C
LD A,(HL)
OR A
JR Z,.done
CP ' ' ;
CP ' '
JR Z,.done
CP '\' ;
SCF
@ -129,10 +76,7 @@ SetPath_GetName:
INC HL
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
;
;
; <20>ãä¥à ¨¬¥­¨ 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
@ -352,8 +278,8 @@ MASK: LD HL,TMPNAME
INC HL
INC DE
DJNZ .MASK1
.MASK_ERR:
LD A,DSS_Error.sys.INVALID_NAME
;
.MASK_ERR: LD A,DSS_Error.sys.INVALID_NAME
SCF
RET
;
@ -473,8 +399,7 @@ DIR_PATH_CHECK: LD A,(HL)
;----------------------------------------------------------------------;
CHECK_NAME:
LD HL,MASKARE
CHECK_NAME: LD HL,MASKARE
.custom: LD BC,11 ;!HARDCODE
LD A,"?"
CPIR
@ -579,8 +504,7 @@ 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)
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)
@ -593,23 +517,30 @@ MOVE_CP:
SBC HL,DE
RET
;
;----------------------------------------------------------------------;
; [x] fat32 ; [ ] CDFS
; !TODO ¯¥à¥­¥á⨠¯®â®¬ ¢ FS module
RD_BPB: CALL READ_BPB
; a..z -> A..Z
UPPER: CP 'a'
RET C
CP 'z' + 1
JR NC,.CheckRUS
.Dec: SUB #20
RET
;
LD DE,#AA55 ; ᨣ­ âãà  ;R05
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
.CheckRUS: CP ' ' ; àãááª ï ¡ãª¢   , ª®¤ #A0
RET C
CP '¯'+1 ; àãááª ï ¡ãª¢  ¯, ª®¤ #AF + 1
JR C,.Dec
;
AND A
SBC HL,DE
JP Z,FAT_BPB
.BGUPPER: CP 'à' ; àãááª ï ¡ãª¢  à, ª®¤ #E0
RET C
CP 'ð' ; àãááª ï ¡ãª¢  ð, ª®¤ #F0
JR NC,.HGUPPER
SUB #50
RET
;
; CDFS check
;
;
.UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
SCF
.HGUPPER: CP 'ñ' ; àãááª ï ¡ãª¢  ñ, ª®¤ #F1
RET NZ
DEC A
RET
;----------------------------------------------------------------------;

View File

@ -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
;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
includelua 'Shared_includes/lua/Functions.lua'
include 'shared_includes/structures/FileSystem.inc'
include 'shared_includes/constants/sp2000.inc'
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 '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'
;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
;
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
ORG 0
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[CLOSE TASK]> ;
RST_0x00: JP RETFAR ; ;EXECUTE.ASM R12
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[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]> ;
;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 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;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 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
;NOT USED
////////////////////////////////////////////////////////////////////////
_mInfoBLOCK #20-$,#FF
RST_0x20: JP RST_20
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
RST_20:
RST_28:
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]>
;MAIN INT
////////////////////////////////////////////////////////////////////////
_mInfoBLOCK #38-$,#FF
;¤«ï ⮣®, ç⮡ á®äâë ¬®£«¨ ¬¥­ïâì ®¡à ¡®â稪 ­  ᢮©.
RST_38_IM1: JP .Handler
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
; ˘ĺޤ ˘ ŽĄŕ ĄŽâ稪 ¨§ 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,37 +146,20 @@ 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
@ -203,43 +167,27 @@ RST_10: PUSH 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
;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
@ -251,27 +199,18 @@ CLEAR_BUFFER_AND_INIT_PROC:
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
;INIT ENVIRONMENT
CALL INITENV
; IFN CLASSIC_CURSOR
CALL SETUP_CURSORS
; ENDIF
;R02
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,37 +240,14 @@ 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
@ -346,25 +259,25 @@ DSS_API_TABLE: ;DS 512 ;,0
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
;
DB low NOPS, low NOPS, low NOPS, low NOPS ; 9 60..63
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
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 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
;
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
;
ELSE ;!TODO free space
_mInfoBLOCK DSS_API_TABLE+#100 - $,0
;[ ] R09
ENDIF
;...............................................[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 "DOS_FS.ASM"
INCLUDE "Procedures.asm"
INCLUDE "FS/FS.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
;
;!FIXIT ª ¡ãä¥à ¬
@ -423,39 +327,20 @@ 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
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
;
;
CLEAR_ZONE.start EQU $
MODULE CORE_BUFFERS
BUFFERSplace _sBuffers=$
FM_BUF _sFM = BUFFERSplace.FileManipulator
@ -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
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'
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  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
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
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

View File

@ -1,3 +1,47 @@
;
; ‚•Ž„: L - «®£¨ç¥áª¨© ­®¬¥à ¢ â ¡«¨æ¥
; ‚›•Ž„: IY - ­ ç «® § ¯¨á¨
; <20>Ž<EFBFBD>ˆ: 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 - ­ ç «® § ¯¨á¨
; <20>Ž<EFBFBD>ˆ: 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
; 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 SET_PAGE_X new_page
LD A,(BANKTBL+new_page)
LD B,A
LD C,SLOT3
IN A,(SLOT3)
OUT (C),B
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
; ;
; MACRO C_OSNAME
; DB "ESTEX",0
; ENDM
; ;
C_OSNAME
DB "-DP [",#30+REVISION,']',0
ELSEIF OSTYPE = BETA
C_OSNAME
DB '-BETA [',#30+REVISION,']',0
; ;
; MACRO C_OSRELEASE
; DB "Estex DSS",0
; ENDM
; ;
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 C_OSNAME
DB "ESTEX",0
ENDM
;
;
MACRO C_OSRELEASE
DB "Estex DSS",0
ENDM
;
////////////////////////////////////////////////////////////////////////
;
; MACRO _mSavePath force
; IF SAVE_PATH_MACRO

View File

@ -296,13 +296,11 @@ SEARCH:
; FIND "MASKAREA" IN DIRECTORY
; [x] fat32 ;!TEST
; ¢ë室: IY:DE - cluster number
FINDDIR:
SET_PAGE_X DIRPAGE
FINDDIR: SET_PAGE_X DIRPAGE
;
PUSH AF
LD IX,DIRPAGE.buffer
.big_loop:
LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
.big_loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
OR A
JR Z,.error
CP #E5
@ -320,8 +318,8 @@ FINDDIR:
JR Z,.compared
CP (HL)
JR NZ,.next_step
.compared:
INC HL
;
.compared: INC HL
INC DE
DJNZ .loop
;
@ -330,7 +328,7 @@ FINDDIR:
JP NZ,.ADDSPEC
LD A,(IX + FAT_DIRECTORY_RECORD.NAME + 1)
CP "."
JP NZ,.IT_DIR
JP NZ,.ITs_DIR
LD HL,CORE_BUFFERS.WorkDirectory
LD D,H
LD E,L
@ -352,10 +350,9 @@ FINDDIR:
JR NZ,.MM3
INC HL
.MM3: LD (HL),0
JP .IT_DIR
JP .ITs_DIR
;
.next_step:
LD BC,FAT_DIRECTORY_RECORD
.next_step: LD BC,FAT_DIRECTORY_RECORD
ADD IX,BC
JR NC,.big_loop
;
@ -365,8 +362,7 @@ FINDDIR:
SCF
RET
;
.ADDSPEC:
LD HL,CORE_BUFFERS.WorkDirectory+1
.ADDSPEC: LD HL,CORE_BUFFERS.WorkDirectory+1
LD BC,CORE_BUFFERS.WorkDirectory.DEPTH-1
CALL .CHECK_SLASH
JR C,.error
@ -416,7 +412,7 @@ FINDDIR:
; .MM3: LD (HL),0
; ; JP IT_DIR
;
.IT_DIR:; fat32
.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
@ -428,8 +424,7 @@ FINDDIR:
AND A
RET
;
.CHECK_SLASH:
XOR A
.CHECK_SLASH: XOR A
CPIR
;[x] 20/11/23 ¯à®¢¥àª  ­  ¢ë室 §  £à ­¨æë
SCF
@ -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]

30
DSS/FS/FS.ASM Normal file
View File

@ -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 ; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
*/

View File

@ -1,8 +0,0 @@
INCLUDE "FS/FAT.ASM"
INCLUDE "FS/CDFS.ASM"
/*
READ_BPB ; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
*/

View File

@ -16,8 +16,7 @@
;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
MK_TIME: LD A,L
RLCA
RLCA
SLA A
@ -29,7 +28,7 @@ MK_TIME:
SRL B
OR B
LD L,A
;
LD BC,#F844 ;(-1980)
ADD IX,BC
LD A,E
@ -66,8 +65,7 @@ MK_TIME:
; H - HOUR; L - MINUTE
; B - SECOND (0...59)
; IX- YEAR (0...65535)
RMKTIME:
EX DE,HL
RMKTIME: EX DE,HL
LD A,C
AND #1F
LD D,A
@ -204,34 +202,6 @@ 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
;----------------------------------------------------------------------;
@ -242,8 +212,7 @@ RCMOS: LD C,BIOS.CMOS_RD
;JP BCD2HEX
; INPUT : A - BCD
; OUTPUT: A - HEX
BCD2HEX:
LD E,A
BCD2HEX: LD E,A
RRCA
RRCA
RRCA
@ -271,11 +240,11 @@ WCMOS: CALL HEX2BCD
; INPUT : A - HEX
; OUTPUT: A - BCD
HEX2BCD:
LD BC,#0AFF
HEX2BCD: LD BC,#0AFF
.loop: INC C
SUB B
JR NC,.loop
;
ADD A,B
LD B,A
LD A,C

View File

@ -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
;
; ; Release Types
; RELEASE EQU 0
; RC EQU 1
; BETA EQU 2
; DP EQU 3
; ;
; ; Build Type
; OSTYPE EQU BETA
; REVISION EQU 1
; ;

View File

@ -1 +1 @@
57
0

View File

@ -7,7 +7,6 @@
;
;
DEFINE SHORT_RSTx10_TABLE 0 ; 㪮à®ç¥­­ ï â ¡«¨æ  ä㭪権 rst #10. 96 ä㭪権.
DEFINE COMPILE_UNUSED_CODE 0
;

104
DSS/first_init.asm Normal file
View File

@ -0,0 +1,104 @@
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; § âàñâáï ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  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
;-----------------------------------------------------------------------;