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

View File

@ -1,47 +1,10 @@
////////////////////////////////////////////////////////////////////////
;[BEGIN]
;//MODULE: DOS-MAIN AUTHOR: Denis Parinov
;//CREATE: A LONG TIME AGO :)
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;[ ] 㢥«¨ç¨âì ¤«¨­ã PATH ¨ áâப¨ BAT ;[ ] 㢥«¨ç¨âì ¤«¨­ã PATH ¨ áâப¨ BAT
;[ ] ¯ãâì ⥪ã饣® ª â «®£  ¢ DIR ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ®­ ¤«¨­¥¥ 256 ¡ ©â®¢ ;[ ] ¯ãâì ⥪ã饣® ª â «®£  ¢ DIR ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ®­ ¤«¨­¥¥ 256 ¡ ©â®¢
;[ ] ¯ãâì ¢ ¯à¨£« è¥­¨¨ ª®­á®«¨ ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ¯ãâì ¤«¨­¥¥ 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 ;DIRPAGE EQU 0
;FATPAGE EQU 1 ;FATPAGE EQU 1
;TXTPAGE EQU 2 ;TXTPAGE EQU 2
@ -49,114 +12,132 @@
;DRVPAGE EQU 3 ;DRVPAGE EQU 3
;ENVPAGE EQU 3 ;ENVPAGE EQU 3
;DRVPAGE EQU 4 ;DRVPAGE EQU 4
;TXTADDR EQU #C000 ;TXTADDR EQU #C000
;ENVADDR EQU #E400 ;ENVADDR EQU #E400
;DIR EQU #C000 ;DIR EQU #C000
;FAT 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 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 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ;BIOS API
; <[DRIVE 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 ; _mInfoBLOCK #18-$,#FF ;
;A0018 JP INTDISK ; ;A0018: JP INTDISK
RST_0x18: PUSH AF ; RST_0x18: PUSH AF
PUSH BC ; PUSH BC
DRV_PG_NUMBER+2: ; DRV_PG_NUMBER+2:
LD BC,0*256+SLOT0 ; LD BC,0*256+SLOT0
JP PORTAL.out_MAIN ; JP PORTAL.out_MAIN
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ////////////////////////////////////////////////////////////////////////
;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
_mInfoBLOCK #20-$,#FF ;
RST_0x20: JP RST_20 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
;NOT USED
////////////////////////////////////////////////////////////////////////
_mInfoBLOCK #20-$,#FF
RST_0x20: JP RST_20
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
RST_20: RST_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]>
;MAIN INT
////////////////////////////////////////////////////////////////////////
_mInfoBLOCK #38-$,#FF _mInfoBLOCK #38-$,#FF
;¤«ï ⮣®, ç⮡ á®äâë ¬®£«¨ ¬¥­ïâì ®¡à ¡®â稪 ­  ᢮©. RST_38_IM1: JP .Handler ;¤Ťď ⎣Ž, ç⎥ áŽäâë ŹŽŁŤ¨ ŹĽ­ďâě ŽĄŕ ĄŽâ稪 ­  ᢎŠ.
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
; ĽáŤ¨ Żŕ¨ŤŽŚĽ­¨Ľ ¨áŻŽŤě§ăĽâ ŻĽŕĽĺ˘ â IM 1, ⎠¨Ł­Žŕ ŻŕĽŕ뢠­¨ď ¨§ DRV-MAIN.ASM
PUSH HL PUSH HL
LD HL,(RST_38_IM1+1) LD HL,(RST_38_IM1+1)
XOR A XOR A
CP H CP H
JR NZ,.error JR NZ,.error
;
LD A,low .Handler LD A,low .Handler
CP L CP L
JR NZ,.error JR NZ,.error
;
POP HL POP HL
POP AF POP AF
CALL INTx38_Handler CALL INTx38_Handler
@ -165,37 +146,20 @@ 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 RST_10: PUSH HL
LD L,C 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 H,high DSS_API_TABLE
LD C,(HL) LD C,(HL)
INC H INC H
@ -203,43 +167,27 @@ RST_10: PUSH HL
LD L,C LD L,C
EX (SP),HL EX (SP),HL
RET RET
////////////////////////////////////////////////////////////////////////
IF SHORT_RSTx10_TABLE
;[ ] R09
.error: POP HL
JR NOPS
;[ ] R09
ENDIF
;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[DRIVE PAGE SWITCH]> ;
_mInfoBLOCK #80-$,0 ;
;ENTER: ;
PORTAL.out_MAIN: ;
IN A,(C) ;
OUT (C),B ;
ASSERT $!=84,'-> Portal error!';
POP BC ;
RET ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;R01
; Area for boot sector BootSector.
;BootSector _sBOOT_SECTOR_PARAMS ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" }
; end boot sector
;R01
;DRIVE PAGE SWITCH
////////////////////////////////////////////////////////////////////////
_mInfoBLOCK #80-$,0
PORTAL.out_MAIN:
IN A,(C)
OUT (C),B
ASSERT $ != 84,'-> Portal error!'
POP BC
RET
////////////////////////////////////////////////////////////////////////
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --; ; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
; ;
; ;
CLEAR_BUFFER_AND_INIT_PROC: CLEAR_BUFFER_AND_INIT_PROC:
;------[CLEAR BUFFERS]------;
;R07 ;R11
XOR A XOR A
LD HL,CLEAR_ZONE.start LD HL,CLEAR_ZONE.start
LD DE,CLEAR_ZONE.start+1 LD DE,CLEAR_ZONE.start+1
@ -251,27 +199,18 @@ CLEAR_BUFFER_AND_INIT_PROC:
LD A,'\' ; LD A,'\' ;
LD (CORE_BUFFERS.CurrentDirectory),A LD (CORE_BUFFERS.CurrentDirectory),A
LD (CORE_BUFFERS.WorkDirectory),A LD (CORE_BUFFERS.WorkDirectory),A
;
LD A,#FF LD A,#FF
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
;
;R07 ;R11
;R11
LD HL,CORE_BUFFERS.FM_BUF LD HL,CORE_BUFFERS.FM_BUF
LD (HL),'.' LD (HL),'.'
;R11 ;INIT ENVIRONMENT
;---------------------------;
;R02
;LD B,#FF ;INIT ENVIRONMENT
CALL INITENV CALL INITENV
; IFN CLASSIC_CURSOR
CALL SETUP_CURSORS CALL SETUP_CURSORS
; ENDIF
;R02
JP VERSION 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,37 +240,14 @@ 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
@ -346,25 +259,25 @@ DSS_API_TABLE: ;DS 512 ;,0
DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low GET_ERR, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45 DB low 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
;[ ] 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 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, 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 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
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 ; 12 78..81
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 13 82..8B
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 14 8C..95
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 15 96..9F
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 16 A0..A9
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 17 AA..B3
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 18 B4..BD
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 19 BE..C7
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 20 C8..D1
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 21 D2..DB
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 22 DC..E5
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 23 E6..EF
;
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 24 F0..F9 DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, 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 NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; END ; 25 FA..FF
;
ELSE ;!TODO free space
_mInfoBLOCK DSS_API_TABLE+#100 - $,0
;[ ] R09
ENDIF
;...............................................[HIGH ADDRESS]: ;...............................................[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 ­  ¢ë§®¢ë ¡¨®á  ;!TODO § ¬¥­¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ­  ¢ë§®¢ë ¡¨®á 
INCLUDE "KEYINTER.ASM" INCLUDE "KEYINTER.ASM"
INCLUDE "API.ASM" INCLUDE "API.ASM"
INCLUDE "DOS_Proc.asm" INCLUDE "DOS_FS.ASM"
INCLUDE "FS_Module.asm"
INCLUDE "Procedures.asm" INCLUDE "Procedures.asm"
INCLUDE "FS/FS.asm"
;INCLUDE "drivers/drv_to_sys_errors.asm" ; !TODO ;INCLUDE "drivers/drv_to_sys_errors.asm" ; !TODO
; [ ] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb
CHECK_64kb_CLUSTER:
LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster)
; CF=0
ADC HL,HL
LD A,DSS_Error.sys.WRITE_PROTECT
RET NZ
CCF
RET
;
;!FIXIT ª ¡ãä¥à ¬ ;!FIXIT ª ¡ãä¥à ¬
@ -423,39 +327,20 @@ 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 DISPLAY "DOS-MAIN end address: ",/H,$-1
;
;!TODO ª ¡ãä¥à ¬!
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
; 259
CurrentPath: DB 'X'
DB ':'
CurrentDirectory: DB '\'
.DEPTH: EQU DIRECTORY_PATH_LENGTH
BLOCK CurrentDirectory.DEPTH,0 ; ­¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®­æ¥
;
; 257
WorkDirectory: DB '\'
.DEPTH: EQU DIRECTORY_PATH_LENGTH
BLOCK WorkDirectory.DEPTH,0 ; ­¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®­æ¥
; 516
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < < ;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
;
;
CLEAR_ZONE.start EQU $ CLEAR_ZONE.start EQU $
MODULE CORE_BUFFERS MODULE CORE_BUFFERS
BUFFERSplace _sBuffers=$ BUFFERSplace _sBuffers=$
FM_BUF _sFM = BUFFERSplace.FileManipulator FM_BUF _sFM = BUFFERSplace.FileManipulator
@ -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
;
; 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" 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
DRV_CONTENT: DISP 0
INCLUDE 'DRV-MAIN.ASM' INCLUDE 'DRV-MAIN.ASM'
ENT ENT
DRV_CONTENT.SIZE EQU $-DRV_CONTENT 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! ; C_OSNAME
LD A,DSS_MAX_DRIVES_AMOUNT ; DB "-DP [",#30+REVISION,']',0
.norm: LD C,A
ADD A,A ; ELSEIF OSTYPE = BETA
ADD A,C
LD C,A ; C_OSNAME
LD B,0 ; DB '-BETA [',#30+REVISION,']',0
LD HL,tbl_addr
ADD HL,BC ; ELSEIF OSTYPE = RC
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 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 ; MACRO C_OSNAME
IF OSTYPE = DP ; 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 ; MACRO _mSavePath force
; IF SAVE_PATH_MACRO ; IF SAVE_PATH_MACRO

View File

@ -296,13 +296,11 @@ 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: .big_loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
OR A OR A
JR Z,.error JR Z,.error
CP #E5 CP #E5
@ -320,8 +318,8 @@ FINDDIR:
JR Z,.compared JR Z,.compared
CP (HL) CP (HL)
JR NZ,.next_step JR NZ,.next_step
.compared: ;
INC HL .compared: INC HL
INC DE INC DE
DJNZ .loop DJNZ .loop
; ;
@ -330,7 +328,7 @@ FINDDIR:
JP NZ,.ADDSPEC JP NZ,.ADDSPEC
LD A,(IX + FAT_DIRECTORY_RECORD.NAME + 1) LD A,(IX + FAT_DIRECTORY_RECORD.NAME + 1)
CP "." CP "."
JP NZ,.IT_DIR JP NZ,.ITs_DIR
LD HL,CORE_BUFFERS.WorkDirectory LD HL,CORE_BUFFERS.WorkDirectory
LD D,H LD D,H
LD E,L LD E,L
@ -352,10 +350,9 @@ FINDDIR:
JR NZ,.MM3 JR NZ,.MM3
INC HL INC HL
.MM3: LD (HL),0 .MM3: LD (HL),0
JP .IT_DIR JP .ITs_DIR
; ;
.next_step: .next_step: LD BC,FAT_DIRECTORY_RECORD
LD BC,FAT_DIRECTORY_RECORD
ADD IX,BC ADD IX,BC
JR NC,.big_loop JR NC,.big_loop
; ;
@ -365,8 +362,7 @@ FINDDIR:
SCF SCF
RET RET
; ;
.ADDSPEC: .ADDSPEC: LD HL,CORE_BUFFERS.WorkDirectory+1
LD HL,CORE_BUFFERS.WorkDirectory+1
LD BC,CORE_BUFFERS.WorkDirectory.DEPTH-1 LD BC,CORE_BUFFERS.WorkDirectory.DEPTH-1
CALL .CHECK_SLASH CALL .CHECK_SLASH
JR C,.error JR C,.error
@ -416,7 +412,7 @@ FINDDIR:
; .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
@ -428,8 +424,7 @@ FINDDIR:
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
@ -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,8 +16,7 @@
;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
@ -29,7 +28,7 @@ MK_TIME:
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
@ -66,8 +65,7 @@ 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
@ -204,34 +202,6 @@ CalcDayOfWeek: LD A,D
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; a..z -> A..Z
UPPER: CP 'a'
RET C
CP 'z' + 1
JR NC,.CheckRUS
.Dec: SUB #20
RET
;
.CheckRUS: CP ' ' ; àãááª ï ¡ãª¢   , ª®¤ #A0
RET C
CP '¯'+1 ; àãááª ï ¡ãª¢  ¯, ª®¤ #AF + 1
JR C,.Dec
;
.BGUPPER: CP 'à' ; àãááª ï ¡ãª¢  à, ª®¤ #E0
RET C
CP 'ð' ; àãááª ï ¡ãª¢  ð, ª®¤ #F0
JR NC,.HGUPPER
SUB #50
RET
;
.HGUPPER: CP 'ñ' ; àãááª ï ¡ãª¢  ñ, ª®¤ #F1
RET NZ
DEC A
RET
;----------------------------------------------------------------------;
;!TODO hardware ;!TODO hardware
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -242,8 +212,7 @@ RCMOS: LD C,BIOS.CMOS_RD
;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
@ -271,11 +240,11 @@ WCMOS: CALL HEX2BCD
; 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

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

104
DSS/first_init.asm Normal file
View File

@ -0,0 +1,104 @@
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; § âàñâáï ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  VERSION
;-----------------------------------------------------------------------;
F_START: DI
; § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD H,A
LD (.saveDRV),HL ; H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
;
LD HL,0 ; ¯¨á âì ¢ ­¨ªã¤ 
LD C,BIOS.FN_VERSION
RST ToBIOS
JR C,.err_oldBIOS
EX DE,HL
LD DE,MINIMUM_BIOS_VERSION
SBC HL,DE
JR C,.err_oldBIOS
;
.good: CALL DEPLOY ;íâ  ¯à®æ¥¤ãà  § âàñâáï ¯®á«¥ ¨á¯®«­¥­¨ï
RET C
CALL KEYBOARD_INIT
CALL PRINT_INIT
LD C,Dss.Mouse.Init
RST ToDSS.Mouse
LD A,(VMODE)
LD C,Dss.Mouse.SetVideoMode
RST ToDSS.Mouse
;
LD C,Dss.DRV.Init
RST ToDSS.DRV
LD (LDRIVE),A
; § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
.saveDRV+1: LD HL,0 ; H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
CALL BOOTDSK.SET
RET C
;
EI
;Set new address fn. VERSION
LD HL,DSS_API_TABLE
LD (HL),low VERSION
INC H
LD (HL),high VERSION
JP CLEAR_BUFFER_AND_INIT_PROC
;
.err_oldBIOS: IN A,(SLOT0)
OUT (SLOT3),A
LD HL,.err_oldBIOS_message + SLOT3.MEM_ADDR
CALL PCHARS
SCF
RET
.err_oldBIOS_message:
DB "\r\nWARNING! This version of DSS requires BIOS v"
DB STR_MINIMUM_BIOS_VERSION
DZ " or later to boot from IDE."
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
DEPLOY: ;Allocate memory
LD BC,USING_MEMPAGES*256 + BIOS.GetMem
RST ToBIOS
RET C
LD C,A
;
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
LD (DRV_CONTENT + DRV_PAGE.MAIN_PAGE_NUMBER),A ;!TEST
OUT (SLOT3),A
;
LD A,C
LD HL,BANKTBL + #C000
LD C,BIOS.GetMemBlkPages
RST ToBIOS
; ¤®«¦­  ¨¤â¨ ¯®á«¥ GetMemBlkPages, ç⮡ ¢¬¥áâ®
; § ªà뢠誨 #FF ¯®áâ ¢¨âì áâà ­¨æã COREPAGE
LD HL,BANKTBL + COREPAGE
IN A,(SLOT0)
LD (HL),A
; ¤«ï API ¤à ©¢¥à  ¬ë誨
LD (MOUSE_HANDLER.CorePage),A
LD A,(BANKTBL + DRVPAGE)
LD (RST_0x30.drv_page),A
;
POP AF
OUT (SLOT3),A
SET_PAGE_X DRVPAGE
PUSH AF
;
LD HL,DRV_CONTENT
LD DE,#C000
LD BC,DRV_CONTENT.SIZE
LDIR
IN A,(SLOT3)
LD (DRV_PG_NUMBER),A
POP AF
OUT (SLOT3),A
AND A
RET
;-----------------------------------------------------------------------;