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 ; HL - BUFFER ADDRESS
; DE - BLOCK SIZE ; DE - BLOCK SIZE
; A - FM ; A - FM
; [ ] CDFS
READ: LD (.R_POINT),HL READ: LD (.R_POINT),HL
LD (.S_POINT),HL LD (.S_POINT),HL
CALL SET_FM 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" ; HL - 11 bytes filename "FILENAMEEXT"
; DE - DOS filename "FILENAME.EXT",0 ; 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 ;!TODO LFN
GetName: LD BC,#08FF ;!HARDCODE ¤«¨­  ¨¬¥­¨ + áçñâ稪 GetName: LD BC,#08FF ;!HARDCODE ¤«¨­  ¨¬¥­¨ + áçñâ稪
LD A,' ' LD A,' '
@ -59,7 +8,7 @@ GetName: LD BC,#08FF ;!HARDCODE
JR Z,.skip JR Z,.skip
LDI LDI
DJNZ .loop DJNZ .loop
JP .extension JR .extension
; ;
.skip: LD C,B .skip: LD C,B
LD B,0 LD B,0
@ -91,48 +40,43 @@ GetName: LD BC,#08FF ;!HARDCODE
; ¢å®¤: hl=áâப  ¨¬¥­¨ ; ¢å®¤: hl=áâப  ¨¬¥­¨
; ¢ë室: (TMPNAME) ; ¢ë室: (TMPNAME)
SetPath_GetName: SetPath_GetName:
; !TEST INC HL
INC HL LD A,(HL)
LD A,(HL) DEC HL
DEC HL CP ':'
CP ':' JR NZ,.dir_loop
JR NZ,.dir_loop ;
LD A,(HL)
LD A,(HL) CP 'a'
CP 'a' JR C,.next
JR C,.next CP 'z'+1
CP 'z'+1 JR NC,.next
JR NC,.next SUB %0010'0000
SUB %0010'0000 .next: SUB 'A'
.next: SUB 'A' INC HL
INC HL INC HL
INC HL PUSH HL
PUSH HL CALL CHDISK
CALL CHDISK POP HL
;CALL OPENDSK RET C
POP HL LD A,(HL)
RET C OR A
LD A,(HL) JR Z,.done
OR A CP ' '
JR Z,.done JR Z,.done
CP ' ' ; CP '\' ;
JR Z,.done SCF
CP '\' ; LD A,DSS_Error.sys.PATH_NOT_FOUND
SCF RET NZ
LD A,DSS_Error.sys.PATH_NOT_FOUND INC HL
RET NZ
INC HL
; ;
.dir_loop: LD DE,TMPNAME .dir_loop: LD DE,TMPNAME
LD BC,#0DFF LD BC,#0DFF
.loop: LD A,(HL) .loop: LD A,(HL)
INC HL INC HL
CP '\' ; CP '\' ;
JR Z,.DIR_NAME JR Z,.DIR_NAME
; AND A ;
; JR Z,.DIR_NAME
;CP ':'
;JR Z,.DRV_NAME
LD (DE),A LD (DE),A
INC DE INC DE
CP ' '+1 CP ' '+1
@ -155,25 +99,7 @@ SetPath_GetName:
POP HL POP HL
RET C RET C
JR .dir_loop 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 ä®à¬ â  ; <20>ãä¥à ¨¬¥­¨ 8.3 ä®à¬ â 
TMPNAME: DZ ' ' ; 12 ¯à®¡¥«®¢ ¨ 0 ;!FIXIT ª ¡ãä¥à ¬ TMPNAME: DZ ' ' ; 12 ¯à®¡¥«®¢ ¨ 0 ;!FIXIT ª ¡ãä¥à ¬
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -210,7 +136,7 @@ OPENDSK: ;!TEST DRV.Open
LD A,B LD A,B
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
; ;
CALL RD_BPB CALL RD_BPB ; [ ] cdfs
;[x] 29/02/2024 fix "open drive error" ;[x] 29/02/2024 fix "open drive error"
POP DE POP DE
JR C,.error_bpb JR C,.error_bpb
@ -292,97 +218,97 @@ OPENDSK: ;!TEST DRV.Open
; DE - 11 bytes filename ; DE - 11 bytes filename
; RET: C=2 FILE WITHOUT EXTENTION ; RET: C=2 FILE WITHOUT EXTENTION
; C=1 FILE WITH EXTENTION ; C=1 FILE WITH EXTENTION
MASK: LD HL,TMPNAME MASK: LD HL,TMPNAME
.name: LD DE,MASKARE .name: LD DE,MASKARE
.custom: PUSH HL .custom: PUSH HL
PUSH DE PUSH DE
LD H,D LD H,D
LD L,E LD L,E
INC DE INC DE
LD (HL),' ' LD (HL),' '
LD BC,10 ;!HARDCODE = size (FileName + Extension - 1) LD BC,10 ;!HARDCODE = size (FileName + Extension - 1)
LDIR LDIR
POP DE POP DE
POP HL POP HL
LD A,(HL) LD A,(HL)
CP '.' ;R007 CP '.' ;R007
SCF ;R007 SCF ;R007
JR Z,.MASKB ;R007 JR Z,.MASKB ;R007
CP ' '+1 CP ' '+1
.MASKB: LD A,DSS_Error.sys.INVALID_NAME .MASKB: LD A,DSS_Error.sys.INVALID_NAME
RET C RET C
LD BC,#0902 ; B - áç¥â稪 LD BC,#0902 ; B - áç¥â稪
.MASK1: LD A,(HL) .MASK1: LD A,(HL)
CP ' '+1 CP ' '+1
CCF CCF
RET NC RET NC
; ;
CP '*' CP '*'
JR Z,.MASK3 JR Z,.MASK3
CP '.' CP '.'
JR Z,.MASK5 JR Z,.MASK5
CP '"' CP '"'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP '+' CP '+'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP ',' CP ','
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP '/' CP '/'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP ':' CP ':'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP ';' CP ';'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP '<' CP '<'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP '=' CP '='
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP '>' CP '>'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP '[' CP '['
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP '\' CP '\'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP ']' CP ']'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CP '|' CP '|'
JR Z,.MASK_ERR JR Z,.MASK_ERR
CALL UPPER ; a..z -> A..Z CALL UPPER ; a..z -> A..Z
.MASK2: LD (DE),A .MASK2: LD (DE),A
INC HL INC HL
INC DE INC DE
DJNZ .MASK1 DJNZ .MASK1
.MASK_ERR: ;
LD A,DSS_Error.sys.INVALID_NAME .MASK_ERR: LD A,DSS_Error.sys.INVALID_NAME
SCF SCF
RET RET
; ;
.MASK3: LD A,'?' .MASK3: LD A,'?'
INC HL INC HL
DJNZ .MASK6 DJNZ .MASK6
JR .MASK_ERR JR .MASK_ERR
; ;
.MASK6: LD (DE),A .MASK6: LD (DE),A
INC DE INC DE
DJNZ .MASK6 DJNZ .MASK6
LD B,1 LD B,1
JR .MASK1 JR .MASK1
; ;
.MASK5: LD A,' ' .MASK5: LD A,' '
INC HL INC HL
DJNZ .MASK4 DJNZ .MASK4
LD B,4 LD B,4
DEC C DEC C
JR NZ,.MASK1 JR NZ,.MASK1
JR .MASK_ERR JR .MASK_ERR
; ;
.MASK4: LD (DE),A .MASK4: LD (DE),A
INC DE INC DE
DJNZ .MASK4 DJNZ .MASK4
LD B,4 LD B,4
DEC C DEC C
JR NZ,.MASK1 JR NZ,.MASK1
JR .MASK_ERR JR .MASK_ERR
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -473,14 +399,13 @@ DIR_PATH_CHECK: LD A,(HL)
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
CHECK_NAME: CHECK_NAME: LD HL,MASKARE
LD HL,MASKARE .custom: LD BC,11 ;!HARDCODE
.custom: LD BC,11 ;!HARDCODE LD A,"?"
LD A,"?" CPIR
CPIR LD A,DSS_Error.sys.INVALID_NAME
LD A,DSS_Error.sys.INVALID_NAME SCF
SCF RET
RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -579,37 +504,43 @@ GET_FM: LD B,FMCOUNT
;FP COMPARE ;FP COMPARE
; CY - FILE POINTER > SIZE ; CY - FILE POINTER > SIZE
; NC - FILE POINTER < SIZE ; NC - FILE POINTER < SIZE
MOVE_CP: MOVE_CP: LD L,(IY + _sFM.FS_REC.F_SIZE)
LD L,(IY + _sFM.FS_REC.F_SIZE) LD H,(IY + _sFM.FS_REC.F_SIZE+1)
LD H,(IY + _sFM.FS_REC.F_SIZE+1) LD E,(IY + _sFM.F_POSITION)
LD E,(IY + _sFM.F_POSITION) LD D,(IY + _sFM.F_POSITION+1)
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
;
AND A AND A
SBC HL,DE 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 .HGUPPER: CP 'ñ' ; àãááª ï ¡ãª¢  ñ, ª®¤ #F1
SCF RET NZ
DEC A
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;

View File

@ -1,162 +1,143 @@
////////////////////////////////////////////////////////////////////////
;[BEGIN] ;[ ] 㢥«¨ç¨âì ¤«¨­ã PATH ¨ áâப¨ BAT
;//MODULE: DOS-MAIN AUTHOR: Denis Parinov ;[ ] ¯ãâì ⥪ã饣® ª â «®£  ¢ DIR ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ®­ ¤«¨­¥¥ 256 ¡ ©â®¢
;//CREATE: A LONG TIME AGO :) ;[ ] ¯ãâì ¢ ¯à¨£« è¥­¨¨ ª®­á®«¨ ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ¯ãâì ¤«¨­¥¥ 256 ¡ ©â®¢
;--------------------------------------------------------------- ////////////////////////////////////////////////////////////////////////
;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'
;PAGEDRV EQU #00 ;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 INCLUDELUA 'Shared_includes/lua/Functions.lua'
; FATPAGE EQU 1 INCLUDE 'shared_includes/structures/FileSystem.inc'
; TXTPAGE EQU 2 INCLUDE 'shared_includes/constants/sp2000.inc'
; ENVPAGE EQU 2 INCLUDE 'defines.inc'
; DRVPAGE EQU 3 INCLUDE 'Structures.inc'
; ENVPAGE EQU 3 INCLUDE 'shared_includes/constants/standart_colors.inc'
; DRVPAGE EQU 4 INCLUDE 'shared_includes/constants/bios_equ.inc'
INCLUDE 'shared_includes/constants/dss_equ.inc'
; TXTADDR EQU #C000 INCLUDE 'shared_includes/macroses/accelerator.z80'
; ENVADDR EQU #E400 INCLUDE 'shared_includes/macroses/macros.z80'
INCLUDE 'VERSION.INC'
; DIR EQU #C000 INCLUDE 'DSS_MACROSES.Z80'
; FAT EQU #C000
;
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --; ; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
ORG 0 ORG 0
; ; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[CLOSE TASK]> ;
RST_0x00: JP RETFAR ; ;EXECUTE.ASM R12
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
; ;CLOSE TASK
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ////////////////////////////////////////////////////////////////////////
; <[BIOS API]> ; RST_0x00: JP RETFAR ;EXECUTE.ASM
_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 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
; ;BIOS API
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ////////////////////////////////////////////////////////////////////////
; <[NOT USED]> ; _mInfoBLOCK 8-$,#FF
_mInfoBLOCK #20-$,#FF ; RST_0x08: PUSH AF
RST_0x20: JP RST_20 ; 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_20:
RST_28: RST_28:
NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF SCF
RET RET
; ////////////////////////////////////////////////////////////////////////
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
_mInfoBLOCK #28-$,#FF ;
RST_0x28: JP RST_28 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ;NOT USED
; <[MOUSE API]> ; ////////////////////////////////////////////////////////////////////////
_mInfoBLOCK #30-$,#FF ; _mInfoBLOCK #28-$,#FF
RST_0x28: JP RST_28
////////////////////////////////////////////////////////////////////////
;MOUSE API
////////////////////////////////////////////////////////////////////////
_mInfoBLOCK #30-$,#FF
RST_0x30: PUSH AF RST_0x30: PUSH AF
.drv_page+1: LD A,#FF .drv_page+1: LD A,#FF
OUT (SLOT0),A OUT (SLOT0),A
POP AF POP AF
RET 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 .Handler: CALL INTx38_Handler
EI EI
RETI RETI
; ;
; ¢ë室 ¨§ ®¡à ¡®â稪  ¢ DRV-MAIN.ASM
.Portal: PUSH AF .Portal: PUSH AF
LD A,(RST_0x30.drv_page) LD A,(RST_0x30.drv_page)
OUT (SLOT0),A OUT (SLOT0),A
;POP AF ; ¢å®¤ ¢ ®¡à ¡®â稪 ¨§ DRV-MAIN.ASM
PUSH HL ; ¥á«¨ ¯à¨«®¦¥­¨¥ ¨á¯®«ì§ã¥â ¯¥à¥å¢ â IM 1, â® ¨£­®à ¯à¥à뢠­¨ï ¨§ DRV-MAIN.ASM
LD HL,(RST_38_IM1+1) PUSH HL
XOR A LD HL,(RST_38_IM1+1)
CP H XOR A
JR NZ,.error CP H
LD A,low .Handler JR NZ,.error
CP L ;
JR NZ,.error LD A,low .Handler
CP L
JR NZ,.error
;
POP HL POP HL
POP AF POP AF
CALL INTx38_Handler CALL INTx38_Handler
@ -165,113 +146,71 @@ RST_38_IM1: JP .Handler
.error: POP HL .error: POP HL
POP AF POP AF
JR .Portal JR .Portal
;
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
;
;NMI: RETN
;
; ////////////////////////////////////////////////////////////////////////
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; _mInfoBLOCK #66-$,#FF
; <[ NMI ]> ; NMI_0x66: RETN
_mInfoBLOCK #66-$,#FF ;
NMI_0x66: RETN ;JP NMI ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
;
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. RST_10: PUSH HL
;BootSector _sBOOT_SECTOR_PARAMS ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" } LD L,C
; end boot sector LD H,high DSS_API_TABLE
;R01 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_BUFFER_AND_INIT_PROC:
;------[CLEAR BUFFERS]------; XOR A
;R07 ;R11 LD HL,CLEAR_ZONE.start
XOR A LD DE,CLEAR_ZONE.start+1
LD HL,CLEAR_ZONE.start LD BC,CLEAR_ZONE.size-1
LD DE,CLEAR_ZONE.start+1 LD (HL),A
LD BC,CLEAR_ZONE.size-1 LDIR
LD (HL),A LD HL,':'*256 + 'X'
LDIR LD (CORE_BUFFERS.CurrentPath),HL
LD HL,':'*256 + 'X' LD A,'\' ;
LD (CORE_BUFFERS.CurrentPath),HL LD (CORE_BUFFERS.CurrentDirectory),A
LD A,'\' ; LD (CORE_BUFFERS.WorkDirectory),A
LD (CORE_BUFFERS.CurrentDirectory),A LD A,#FF
LD (CORE_BUFFERS.WorkDirectory),A LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
; LD HL,CORE_BUFFERS.FM_BUF
LD A,#FF LD (HL),'.'
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A ;INIT ENVIRONMENT
; CALL INITENV
;R07 ;R11 CALL SETUP_CURSORS
;R11 JP VERSION
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
;
INTx38_Handler: PUSH AF INTx38_Handler: PUSH AF
EX AF,AF' EX AF,AF'
PUSH AF PUSH AF
@ -287,10 +226,7 @@ INTx38_Handler: PUSH AF
CALL KEYSCAN CALL KEYSCAN
LD C,Dss.Mouse.GetPackets LD C,Dss.Mouse.GetPackets
RST ToDSS.Mouse RST ToDSS.Mouse
;CALL M_INT CALL cursor_interrupt; ¢¥ªâ®à ®¡á«ã¦. ªãàá®à 
; IFN CLASSIC_CURSOR
CALL cursor_interrupt; ¢¥ªâ®à ®¡á«ã¦. ªãàá®à  ;!!!!! VASIL
; ENDIF
POP IY POP IY
POP IX POP IX
POP HL POP HL
@ -304,67 +240,44 @@ INTx38_Handler: PUSH AF
EX AF,AF' EX AF,AF'
POP AF POP AF
RET 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 _mInfoALIGN 256,0
;------------------------------------------------------------------------------------------------------------------------; ;------------------------------------------------------------------------------------------------------------------------;
GO_ZERO EQU #0000 GO_ZERO EQU #0000
;FUNCTION ADDRESS ARRAY ;FUNCTION ADDRESS ARRAY
DSS_API_TABLE: ;DS 512 ;,0 DSS_API_TABLE:
;...............................................[LOW ADDRESS ]: ;...............................................[LOW ADDRESS ]:
; 0 1 2 3 4 5 6 7 8 9 DEC HEX ; 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 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 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 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 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 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 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 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 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 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 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
;[ ] 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 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 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 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
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 ; 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 ; 110-239 6E-EF 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
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 ; 15 96..9F
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 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 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 ; 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 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
_mInfoBLOCK DSS_API_TABLE+#100 - $,0
;[ ] R09
ENDIF
;...............................................[HIGH ADDRESS]: ;...............................................[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 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 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 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 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 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 DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT, high NOPS, high NOPS, high NOPS, high NOPS
;[ ] R09
.high_short EQU $ - DSS_API_TABLE - .low_short
IFN SHORT_RSTx10_TABLE
;
DB 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 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 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
;!TODO free space 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
;_mInfoBLOCK DSS_API_TABLE+#200 - $,0 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
;[ ] R09 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
ENDIF 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 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 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 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 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) ;!TODO § ¬¥­¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ­  ¢ë§®¢ë ¡¨®á 
; CF=0 INCLUDE "KEYINTER.ASM"
ADC HL,HL INCLUDE "API.ASM"
LD A,DSS_Error.sys.WRITE_PROTECT INCLUDE "DOS_FS.ASM"
RET NZ INCLUDE "Procedures.asm"
CCF INCLUDE "FS/FS.asm"
RET ;INCLUDE "drivers/drv_to_sys_errors.asm" ; !TODO
;
;!FIXIT ª ¡ãä¥à ¬ ;!FIXIT ª ¡ãä¥à ¬
@ -423,40 +327,21 @@ CHECK_64kb_CLUSTER:
BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE
HANDBUF: BLOCK HANDBUF.SIZE,0 HANDBUF: BLOCK HANDBUF.SIZE,0
; ;
; ; FAT_DIRECTORY_RECORD ; !HARDCODE
;!FIXIT ª ¡ãä¥à ¬
MASKARE: BLOCK 8,0 ; ¨¬ï ä ©«  MASKARE: BLOCK 8,0 ; ¨¬ï ä ©« 
BLOCK 3,0 ; à áè. BLOCK 3,0 ; à áè.
BLOCK 21,0 ; 11+21=32 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 < < < < < < < < < < < < < < < < ;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
; CLEAR_ZONE.start EQU $
; MODULE CORE_BUFFERS
CLEAR_ZONE.start EQU $
MODULE CORE_BUFFERS
BUFFERSplace _sBuffers=$ BUFFERSplace _sBuffers=$
FM_BUF _sFM = BUFFERSplace.FileManipulator FM_BUF _sFM = BUFFERSplace.FileManipulator
.Size EQU _sFM .Size EQU _sFM
@ -465,8 +350,8 @@ FS_Buffer _sFS_Buffer = BUFFERSplace.FS_Buffer
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
XSTACK _sStack = BUFFERSplace.Stack XSTACK _sStack = BUFFERSplace.Stack
.Spoint EQU XSTACK + _sStack .Spoint EQU XSTACK + _sStack
BUFFER EQU BUFFERSplace.Buffer BUFFER EQU BUFFERSplace.Buffer
SECTOR_BUFFER EQU BUFFER ;!TODO ®â¤¥«¨âì SECTOR_BUFFER ®â BUFFER SECTOR_BUFFER EQU BUFFER ;!TODO ®â¤¥«¨âì SECTOR_BUFFER ®â BUFFER
MemoryTable EQU BUFFERSplace.MemoryTable MemoryTable EQU BUFFERSplace.MemoryTable
CurrentPath EQU BUFFERSplace.CurrentPath CurrentPath EQU BUFFERSplace.CurrentPath
CurrentDirectory EQU BUFFERSplace.CurrentDirectory CurrentDirectory EQU BUFFERSplace.CurrentDirectory
@ -474,19 +359,12 @@ CurrentDirectory EQU BUFFERSplace.CurrentDirectory
WorkDirectory EQU BUFFERSplace.WorkDirectory WorkDirectory EQU BUFFERSplace.WorkDirectory
.DEPTH EQU DIRECTORY_PATH_LENGTH .DEPTH EQU DIRECTORY_PATH_LENGTH
ENDMODULE ENDMODULE
; CLEAR_ZONE.size EQU _sBuffers
; 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" ASSERT (CLEAR_ZONE.start + _sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
DISPLAY "--- --- --- --- --- --- --- ---" DISPLAY "--- --- --- --- --- --- --- ---"
DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start
DISPLAY "CLEAR_ZONE.Size ", /H, CLEAR_ZONE.size DISPLAY "CLEAR_ZONE.Size ", /H, CLEAR_ZONE.size
@ -519,217 +397,36 @@ CLEAR_ZONE.size EQU _sBuffers
EXPORT CORE_BUFFERS.MemoryTable EXPORT CORE_BUFFERS.MemoryTable
EXPORT CORE_BUFFERS.CurrentDirectory EXPORT CORE_BUFFERS.CurrentDirectory
EXPORT CORE_BUFFERS.WorkDirectory 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 < < < < < < < < < < < < < < < < ;> > > > > > > > > > > > > > > > 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 IF ENVVALUE != CORE_BUFFERS.BUFFER
ASSERT "Warning! ENVVALUE != BUFFER" ASSERT "Warning! ENVVALUE != BUFFER"
//BLOCK 1000,0
ENDIF ENDIF
;--- --- --- --- [Build version] --- --- --- ---;
; C_OSTYPE
;--- --- --- --- --- --- --- --- --- --- --- ---;
DISPLAY "FAT MODULE SIZE: ",/A,FAT_MODULE_SIZE DISPLAY "FAT MODULE SIZE: ",/A,FAT_MODULE_SIZE
DISPLAY "DEPLOY end address: ",/H,$ DISPLAY "DEPLOY end address: ",/H,$
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||;
DISPLAY "Space for DRV-MAIN: ",/A,#4000-$," bytes." 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 $ BIN_END_ADDRESS EQU $
DISPLAY "END ADDRESS: ",/H,BIN_END_ADDRESS DISPLAY "END ADDRESS: ",/H,BIN_END_ADDRESS
DISPLAY "Memory leacks when > ",/H, #4000+SUBLOAD_SIZE*512 DISPLAY "Memory leacks when > ",/H, #4000+SUBLOAD_SIZE*512
ASSERT $ < (#4001+SUBLOAD_SIZE*512),'-> Memory leack!!!'; ASSERT $ < (#4001+SUBLOAD_SIZE*512),'-> Memory leack!!!';
ASSERT DRV_CONTENT.SIZE < #4001,'-> Drivers code size > #4000!!!'; ASSERT DRV_CONTENT.SIZE < #4001,'-> Drivers code size > #4000!!!';
;[END] ;[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 ; MACRO BUFFER_KEYINTER
; _mInfoALIGN 256,0 ; _mInfoALIGN 256,0
@ -98,102 +142,68 @@
; ENDM ; ENDM
; ;
;
; ‚•Ž„: L - «®£¨ç¥áª¨© ­®¬¥à ¢ â ¡«¨æ¥ ; ;
; ‚›•Ž„: IY - ­ ç «® § ¯¨á¨ ; MACRO _mDSS_Version
; <20>Ž<EFBFBD>ˆ: HL, DE, IY. ; DB 'DSS_'
MACRO LOGDRV_ENTRY_FIND tbl_addr ; db '0'+VERS
LD H,0 ; db '.'
ADD HL,HL ; db MODF/10+'0'
ADD HL,HL ; db MODF-(MODF/10)*10+'0'
ADD HL,HL ; ENDM
ADD HL,HL ; ;
EX DE,HL
LD IY,tbl_addr
ADD IY,DE
ENDM
;
; ;
MACRO _CALC_DEVICE_ENTRY tbl_addr ; MACRO C_OSTYPE
CP DSS_MAX_DRIVES_AMOUNT+1 ; IF OSTYPE = DP
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
;
; ; C_OSNAME
MACRO SET_PAGE_X new_page ; DB "-DP [",#30+REVISION,']',0
LD A,(BANKTBL+new_page)
LD B,A ; ELSEIF OSTYPE = BETA
LD C,SLOT3
IN A,(SLOT3) ; C_OSNAME
OUT (C),B ; DB '-BETA [',#30+REVISION,']',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 _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 ; MACRO _mSavePath force
; IF SAVE_PATH_MACRO ; IF SAVE_PATH_MACRO

View File

@ -296,156 +296,151 @@ SEARCH:
; FIND "MASKAREA" IN DIRECTORY ; FIND "MASKAREA" IN DIRECTORY
; [x] fat32 ;!TEST ; [x] fat32 ;!TEST
; ¢ë室: IY:DE - cluster number ; ¢ë室: IY:DE - cluster number
FINDDIR: FINDDIR: SET_PAGE_X DIRPAGE
SET_PAGE_X DIRPAGE ;
; PUSH AF
PUSH AF LD IX,DIRPAGE.buffer
LD IX,DIRPAGE.buffer .big_loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
.big_loop: OR A
LD A,(IX + FAT_DIRECTORY_RECORD.NAME) JR Z,.error
OR A CP #E5
JR Z,.error JR Z,.next_step
CP #E5 LD A,(IX + FAT_DIRECTORY_RECORD.ATTRIBUT)
JR Z,.next_step AND FAT_ATTR.DIRECTORY
LD A,(IX + FAT_DIRECTORY_RECORD.ATTRIBUT) JR Z,.next_step
AND FAT_ATTR.DIRECTORY LD HL,MASKARE
JR Z,.next_step LD D,XH
LD HL,MASKARE LD E,XL
LD D,XH EX DE,HL
LD E,XL LD B,11 ;!HARDCODE
EX DE,HL .loop: LD A,(DE)
LD B,11 ;!HARDCODE CP "?"
.loop: LD A,(DE) JR Z,.compared
CP "?" CP (HL)
JR Z,.compared JR NZ,.next_step
CP (HL) ;
JR NZ,.next_step .compared: INC HL
.compared: INC DE
INC HL DJNZ .loop
INC DE ;
DJNZ .loop LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
; CP "."
LD A,(IX + FAT_DIRECTORY_RECORD.NAME) JP NZ,.ADDSPEC
CP "." LD A,(IX + FAT_DIRECTORY_RECORD.NAME + 1)
JP NZ,.ADDSPEC CP "."
LD A,(IX + FAT_DIRECTORY_RECORD.NAME + 1) JP NZ,.ITs_DIR
CP "." LD HL,CORE_BUFFERS.WorkDirectory
JP NZ,.IT_DIR LD D,H
LD HL,CORE_BUFFERS.WorkDirectory LD E,L
LD D,H INC HL
LD E,L LD BC,CORE_BUFFERS.WorkDirectory.DEPTH
INC HL XOR A
LD BC,CORE_BUFFERS.WorkDirectory.DEPTH CPIR
XOR A JP PO,.error ;[x] 20/11/23 ¯à®¢¥àª  ­  ¢ë室 §  £à ­¨æë
CPIR DEC HL ;R009
JP PO,.error ;[x] 20/11/23 ¯à®¢¥àª  ­  ¢ë室 §  £à ­¨æë DEC HL
DEC HL ;R009 LD BC,CORE_BUFFERS.WorkDirectory.DEPTH
DEC HL LD A,'\'
LD BC,CORE_BUFFERS.WorkDirectory.DEPTH CPDR
LD A,'\' INC HL
CPDR EX DE,HL
INC HL ; CF = 0
EX DE,HL SBC HL,DE
; CF = 0 EX DE,HL
SBC HL,DE JR NZ,.MM3
EX DE,HL INC HL
JR NZ,.MM3 .MM3: LD (HL),0
INC HL JP .ITs_DIR
.MM3: LD (HL),0 ;
JP .IT_DIR .next_step: LD BC,FAT_DIRECTORY_RECORD
; ADD IX,BC
.next_step: JR NC,.big_loop
LD BC,FAT_DIRECTORY_RECORD ;
ADD IX,BC .error: POP AF
JR NC,.big_loop OUT (SLOT3),A
; LD A,DSS_Error.sys.PATH_NOT_FOUND
.error: POP AF SCF
OUT (SLOT3),A RET
LD A,DSS_Error.sys.PATH_NOT_FOUND ;
SCF .ADDSPEC: LD HL,CORE_BUFFERS.WorkDirectory+1
RET LD BC,CORE_BUFFERS.WorkDirectory.DEPTH-1
; CALL .CHECK_SLASH
.ADDSPEC: JR C,.error
LD HL,CORE_BUFFERS.WorkDirectory+1 ;R011
LD BC,CORE_BUFFERS.WorkDirectory.DEPTH-1 LD A,B
CALL .CHECK_SLASH AND A
JR C,.error JR NZ,.nxt
;R011 LD A,C
LD A,B CP 8+1+3 ;!HARDCODE ¨¬ï ª â «®£  + â®çª  + à áè¨à¥­¨¥
AND A JR C,.error
JR NZ,.nxt .nxt: ;
LD A,C LD E,XL
CP 8+1+3 ;!HARDCODE ¨¬ï ª â «®£  + â®çª  + à áè¨à¥­¨¥ LD D,XH
JR C,.error ; [x] ®¯â¨¬¨§ æ¨ï ¯® à §¬¥àã
.nxt: ; EX DE,HL
LD E,XL CALL GetName
LD D,XH EX DE,HL
; [x] ®¯â¨¬¨§ æ¨ï ¯® à §¬¥àã ;
EX DE,HL
CALL GetName
EX DE,HL
;
; LD BC,256*8 + ' ' ;!HARDCODE ; LD BC,256*8 + ' ' ;!HARDCODE
; .MM1: LD A,(DE) ; .MM1: LD A,(DE)
; INC DE ; INC DE
; CP C ; CP C
; JR Z,.MM2 ; JR Z,.MM2
; LD (HL),A ; LD (HL),A
; INC HL ; INC HL
; .MM2 DJNZ .MM1 ;x42-40 50-55 ; .MM2 DJNZ .MM1 ;x42-40 50-55
; LD A,(DE) ; LD A,(DE)
; INC DE ; INC DE
; CP C ; CP C
; JR Z,.MM3 ; JR Z,.MM3
; LD (HL),"." ; LD (HL),"."
; INC HL ; INC HL
; LD (HL),A ; LD (HL),A
; INC HL ; INC HL
; LD A,(DE) ; LD A,(DE)
; INC DE ; INC DE
; CP C ; CP C
; JR Z,.MM3 ; JR Z,.MM3
; LD (HL),A ; LD (HL),A
; INC HL ; INC HL
; LD A,(DE) ; LD A,(DE)
; CP C ; CP C
; JR Z,.MM3 ; JR Z,.MM3
; LD (HL),A ; LD (HL),A
; .MM2_5: INC HL ; .MM2_5: INC HL
; .MM3: LD (HL),0 ; .MM3: LD (HL),0
; ; JP IT_DIR ; ; JP IT_DIR
; ;
.IT_DIR:; fat32 .ITs_DIR: ; fat32
LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1) LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD YH,D LD YH,D
LD YL,E LD YL,E
LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1) LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
AND A AND A
RET RET
; ;
.CHECK_SLASH: .CHECK_SLASH: XOR A
XOR A CPIR
CPIR ;[x] 20/11/23 ¯à®¢¥àª  ­  ¢ë室 §  £à ­¨æë
;[x] 20/11/23 ¯à®¢¥àª  ­  ¢ë室 §  £à ­¨æë SCF
SCF RET PO
RET PO ;
; DEC HL
DEC HL DEC HL
DEC HL LD A,'\' ; #5C
LD A,'\' ; #5C CP (HL)
CP (HL) INC HL
INC HL RET Z
RET Z LD (HL),A
LD (HL),A INC HL
INC HL XOR A ; á¡à®á CF § ®¤­®
XOR A ; á¡à®á CF § ®¤­® LD (HL),A
LD (HL),A RET
RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
CHECK_ROOT_CLUSTER: CHECK_ROOT_CLUSTER:
@ -2775,6 +2770,20 @@ GET_OFFSET_IN_SECTORS:
RET 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 FAT_MODULE_SIZE EQU $-FAT_MODULE_START
;//MODULE: FAT ;//MODULE: FAT
;[END] ;[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 ;OUTPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2
; BC - yyyyyyymmmmddddd y - year, m - month, d - day ; BC - yyyyyyymmmmddddd y - year, m - month, d - day
; (1980-2108) ; (1980-2108)
MK_TIME: MK_TIME: LD A,L
LD A,L RLCA
RLCA RLCA
RLCA SLA A
SLA A RL H
RL H SLA A
SLA A RL H
RL H SLA A
SLA A RL H
RL H SRL B
SRL B OR B
OR B LD L,A
LD L,A ;
LD BC,#F844 ;(-1980)
LD BC,#F844 ;(-1980) ADD IX,BC
ADD IX,BC LD A,E
LD A,E RLCA
RLCA RLCA
RLCA RLCA
RLCA RLCA
RLCA AND #F0
AND #F0 LD B,XL
LD B,XL SLA A
SLA A RL B
RL B OR D
OR D LD C,A
LD C,A EX DE,HL
EX DE,HL AND A
AND A RET
RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;!TODO Procedures ;!TODO Procedures
@ -66,38 +65,37 @@ MK_TIME:
; H - HOUR; L - MINUTE ; H - HOUR; L - MINUTE
; B - SECOND (0...59) ; B - SECOND (0...59)
; IX- YEAR (0...65535) ; IX- YEAR (0...65535)
RMKTIME: RMKTIME: EX DE,HL
EX DE,HL LD A,C
LD A,C AND #1F
AND #1F LD D,A
LD D,A SRL B
SRL B RR C
RR C LD A,C
LD A,C RRCA
RRCA RRCA
RRCA RRCA
RRCA RRCA
RRCA AND #0F
AND #0F LD E,A
LD E,A LD C,B
LD C,B LD B,0
LD B,0 LD IX,1980
LD IX,1980 ADD IX,BC
ADD IX,BC LD A,L
LD A,L AND #1F
AND #1F ADD A,A
ADD A,A LD B,A
LD B,A SRL H
SRL H RR L
RR L SRL H
SRL H RR L
RR L SRL H
SRL H RR L
RR L SRL L
SRL L SRL L
SRL L AND A
AND A RET
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 ;!TODO hardware
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; —⥭¨¥ ॣ¨áâ஢ CMOS ; —⥭¨¥ ॣ¨áâ஢ CMOS
; ¢å®¤: d=­®¬¥à ॣ¨áâà  ; ¢å®¤: d=­®¬¥à ॣ¨áâà 
RCMOS: LD C,BIOS.CMOS_RD RCMOS: LD C,BIOS.CMOS_RD
RST ToBIOS RST ToBIOS
;JP BCD2HEX ;JP BCD2HEX
; INPUT : A - BCD ; INPUT : A - BCD
; OUTPUT: A - HEX ; OUTPUT: A - HEX
BCD2HEX: BCD2HEX: LD E,A
LD E,A RRCA
RRCA RRCA
RRCA RRCA
RRCA RRCA
RRCA AND #0F
AND #0F LD D,A
LD D,A ADD A,A
ADD A,A ADD A,A
ADD A,A ADD A,D
ADD A,D ADD A,A
ADD A,A LD D,A
LD D,A LD A,E
LD A,E AND #0F
AND #0F ADD A,D
ADD A,D RET
RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;!TODO hardware ;!TODO hardware
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ‡ ¯¨áì ॣ¨áâ஢ CMOS ; ‡ ¯¨áì ॣ¨áâ஢ CMOS
; ¢å®¤: d=­®¬¥à ॣ¨áâà  ; ¢å®¤: d=­®¬¥à ॣ¨áâà 
WCMOS: CALL HEX2BCD WCMOS: CALL HEX2BCD
LD C,BIOS.CMOS_WR LD C,BIOS.CMOS_WR
JP ToBIOS JP ToBIOS
; INPUT : A - HEX ; INPUT : A - HEX
; OUTPUT: A - BCD ; OUTPUT: A - BCD
HEX2BCD: HEX2BCD: LD BC,#0AFF
LD BC,#0AFF .loop: INC C
.loop: INC C SUB B
SUB B JR NC,.loop
JR NC,.loop ;
ADD A,B ADD A,B
LD B,A LD B,A
LD A,C LD A,C
RLCA RLCA
RLCA RLCA
RLCA RLCA
RLCA RLCA
AND #F0 AND #F0
OR B OR B
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ;

View File

@ -31,26 +31,27 @@
; ­®¬¥à ¢¥àᨨ (0..9) ; ­®¬¥à ¢¥àᨨ (0..9)
VERS EQU 1 VERS EQU 1
; ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99) ; ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99)
MODF EQU 71 MODF EQU 72
; ­®¬¥à ¡¨«¤  (0..999) ; ­®¬¥à ¡¨«¤  (0..999)
BUILD EQU lua_BUILD 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 ; Current date
DAY EQU lua_DAY DAY EQU lua_DAY
MONTH EQU lua_MONTH MONTH EQU lua_MONTH
YEAR EQU lua_YEAR 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 ; 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
;-----------------------------------------------------------------------;