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

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
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'
; <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
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

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,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]

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,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
;----------------------------------------------------------------------;
;

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,8 +7,7 @@
;
;
DEFINE SHORT_RSTx10_TABLE 0 ; 㪮à®ç¥­­ ï â ¡«¨æ  ä㭪権 rst #10. 96 ä㭪権.
DEFINE COMPILE_UNUSED_CODE 0
DEFINE COMPILE_UNUSED_CODE 0
;
; MOUSE

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