промежуточный

This commit is contained in:
Anatoliy Belyanskiy 2023-07-29 03:28:09 +10:00
parent f4140a5733
commit c50040b715
14 changed files with 637 additions and 421 deletions

View File

@ -27,7 +27,7 @@ CDRIVE EQU #02
DRIVE: _mSYSID
DI
LD (DRIVE),A
LD C,BIOS.EXT_VERSION
LD C,BIOS.DRV_VERSION
RST ToBIOS_18
LD A,INCORR
JR C,FAIL
@ -35,7 +35,7 @@ DRIVE: _mSYSID
BIT 7,A
JR Z,GOOD_DRIVE
EX DE,HL
LD DE,#0215 ; ¥á«¨ ¢¥àá¨ï ­¨¦¥ 2.21, â® ®è¨¡ª 
LD DE,2*256 + 21 ; ¥á«¨ ¢¥àá¨ï ­¨¦¥ 2.21, â® ®è¨¡ª 
SBC HL,DE
LD A,INCORR
JR C,FAIL
@ -47,7 +47,7 @@ GOOD_DRIVE:
LD A,(DRIVE)
RST ToBIOS_18
JR C,NULL
JP CONTINU
JP CONTINUE
FAIL CALL MESSAGE
NULL LD A,FAILURE
@ -131,7 +131,7 @@ STARTDO EQU 6
; 0 10 20 30 40 50 60 70 80
MSG0: DB 0
DB 13,10,"The system has been halted. Press RESET to restart your computer.",13,10,0
DB 13,10,"You started your computer with a BIOS version that is incompatible with this",13,10,0
DB 13,10,"You started your computer with a BIOS version that is incompatible with this",13,10
DB "version of DSS. Please update BIOS to run this version of DSS.",13,10,0
DB "Invalid partition table.",13,10,0
DB "Invalid BOOT sector.",13,10,0
@ -139,7 +139,7 @@ MSG0: DB 0
DB 13,10,"Starting DSS... ",13,10,13,10,0
MSGE DB 0
CONTINU
CONTINUE:
LD HL,0
LD (DISKL),HL
LD (DISKH),HL
@ -178,7 +178,7 @@ CONTINU
LD A,(DRIVE)
LD C,#00
RST #10
jp c,XFAIL
jp c,XFAIL.fail
LD A,STARTDO
CALL DOSMESS
@ -198,7 +198,7 @@ CONTINU
LD A,(DRIVE)
LD C,#00
RST #10
jp c,XFAIL
jp c,XFAIL.fail
ENDIF
LD A,STARTDO
@ -238,14 +238,14 @@ DOSMESS CALL FMESAGE
RST #10
RET
XFAIL CALL DOSMESS
LD A,FAILURE
XFAIL: CALL DOSMESS
.fail: LD A,FAILURE
CALL DOSMESS
DI
HALT
.halt JR .halt
.halt: JR .halt
PART_TB PUSH BC
PART_TB: PUSH BC
LD HL,(BOOT+510)
LD DE,#AA55
AND A
@ -253,7 +253,7 @@ PART_TB PUSH BC
JR NZ,ERRP
LD IX,BOOT+#01BE
LD B,4
DOSAGA LD A,(IX+4)
DOSAGA: LD A,(IX+4)
CP #0E
JR Z,YEPDOS
CP 6
@ -263,14 +263,12 @@ DOSAGA LD A,(IX+4)
CP 1
JR Z,YEPDOS
LD DE,#10
; ®è¨¡ª  ¢ ®à¨£¨­ «¥
; ADD IY,DE
ADD IX,DE
DJNZ DOSAGA
ERRP LD A,ERRPART
ERRP: LD A,ERRPART
JP FAIL
YEPDOS LD E,(IX+08)
YEPDOS: LD E,(IX+08)
LD D,(IX+09)
LD L,(IX+10)
LD H,(IX+11)
@ -278,15 +276,15 @@ YEPDOS LD E,(IX+08)
LD XL,E
LD (DISKL),IX
LD (DISKH),HL
LD A,(DRIVE)
LD DE,BOOT
LD BC,1*256 + BIOS.DRV_READ
LD A,(DRIVE)
RST ToBIOS_18
POP BC
LD A,C
RET
SET_PRM PUSH BC
SET_PRM: PUSH BC
LD A,B
LD C,BIOS.DRV_GET_PAR
RST ToBIOS_18
@ -300,7 +298,7 @@ SET_PRM PUSH BC
LD A,C
RET
GET_BPB LD IX,#0000
GET_BPB: LD IX,#0000
LD HL,#0000
LD DE,BOOT
LD BC,1*256 + BIOS.DRV_READ
@ -315,7 +313,7 @@ GET_BPB LD IX,#0000
JR NZ,NX1
CALL PART_TB ;HDD
RET C
NX1 CP #00
NX1: CP #00
JR NZ,NX2
CALL SET_PRM ;FDD
NX2: LD HL,(BOOT+510)
@ -338,7 +336,7 @@ NX2: LD HL,(BOOT+510)
LD E,(IY+_sBOOT_SEC.S_P_F) ;sectors in FAT
LD D,(IY+_sBOOT_SEC.S_P_F+1)
LD A,(BOOT.FAT_NUM) ;amount FATs
C_DATA1 ADD HL,DE
C_DATA1: ADD HL,DE
DEC A
JR NZ,C_DATA1
LD (DIR_FRM),HL ;first sector DIR
@ -362,7 +360,7 @@ C_DATA1 ADD HL,DE
LD B,(IY+_sBOOT_SEC.B_P_S+1)
LD HL,0
LD A,(BOOT.S_P_C)
NEXTAD3
NEXTAD3:
ADD HL,BC ;calc. cluster size
DEC A
JR NZ,NEXTAD3
@ -371,16 +369,16 @@ NEXTAD3
LD HL,BOOT.ID_FAT
LD DE,FATMSG
LD B,3
R_BPBL1
R_BPBL1:
LD A,(DE)
CP (HL)
JP NZ,IBMDOS_
INC HL
INC DE
DJNZ R_BPBL1
FID LD A,(HL)
FID: LD A,(HL)
INC HL
CP #20
CP " "
JR Z,FID
CP "1"
SCF
@ -425,12 +423,12 @@ IBMDOS_ LD A,(IY+_sBOOT_SEC.ID_FORM)
LD HL,#0FFF
JR BPB_FAT
GETROOT LD HL,(DIR_FRH)
GETROOT: LD HL,(DIR_FRH)
LD IX,(DIR_FRL)
LD BC,(DISKL)
LD DE,(DISKH)
LD A,(DIR_S_S)
NEXTSEC PUSH AF
NEXTSEC: PUSH AF
ADD IX,BC
ADC HL,DE
;HL:IX
@ -454,9 +452,9 @@ NEXTSEC PUSH AF
SCF
RET
SEARCH LD C,17 ;HANDELS PER SECTOR 512/32 + 1
SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
LD IX,DIR-#0020
SKIPNAM LD DE,#0020
SKIPNAM: LD DE,#0020
ADD IX,DE
DEC C
RET Z
@ -473,7 +471,7 @@ SKIPNAM LD DE,#0020
LD D,XH
LD E,XL
LD B,11
SEARCH2 LD A,(DE)
SEARCH2: LD A,(DE)
CP (HL)
JR NZ,SKIPNAM
INC HL
@ -491,14 +489,13 @@ SEARCH2 LD A,(DE)
; HL - CLUSTER
; DE - ADDRESS
FLOAD LD (READMEM),DE
LD_FILE PUSH HL
FLOAD: LD (READMEM),DE
LD_FILE: PUSH HL
CALL NSECTOR
LD DE,(READMEM)
LD A,(BOOT.S_P_C)
CP #20
JR C,SMCLUS
JR C,SMALL_CLUSTER
LD BC,#20*256 + BIOS.DRV_READ_LONG
LD A,(BANKDOS)
EX AF,AF'
@ -507,8 +504,8 @@ LD_FILE PUSH HL
POP HL
AND A
RET
SMCLUS LD B,A
SMALL_CLUSTER:
LD B,A
LD C,BIOS.DRV_READ_LONG
LD A,(BANKDOS)
EX AF,AF'

View File

@ -25,13 +25,13 @@
MACRO _mEXEinfo
BLOCK 10,' ' ; ‚ëà ¢­¨¢ ­¨¥ ¤«ï ªà á¨¢®£® ®â®¡à ¦¥­¨ï ¢ HEX
BYTE ' Bootloader '
BYTE ' installer '
BYTE ' installer '
BYTE ' for DSS. '
BYTE ' Vasil Ivanov, '
BYTE ' Anatoliy '
BYTE ' Belyanskiy. '
BYTE ' Sprinter Team, '
BYTE ' 2023 '
BYTE ' 2023 '
ENDM

View File

@ -10,6 +10,7 @@
;=====================================================================[]
;Rev. Date Name Description
;---------------------------------------------------------------------[]
;R12 23-07-2023 BAO „®¡ ¢«¥­  ª®¬ ­¤  REBOOT - ¯¥à¥§ £à㧪  á ¯®«­®© ®ç¨á⪮© ¯ ¬ïâ¨
;R11 20-07-2023 BAO <09>®¯à ¢«¥­  äã­ªæ¨ï LCPIR ¤«ï ª®à४⭮£® ¢ë¡®à  á®®¡é¥­¨ï ®¡ ®è¨¡ª¥ ¯à¨ ­®¬¥à¥ ®è¨¡ª¨ > § £®â®¢«¥­­ëå á®®¡é¥­¨©
;R10 16-05-2023 BAO TE•T MODE AND TEXT ARE RESTORED AFTER RETURNING FROM THE APP
;R09 ??-??-???? DNS ;????? ????
@ -532,26 +533,27 @@ RUN_BAT CALL BATCH
BATLIST DZ 'PAUSE' : DW CPAUSE
DZ 'REM' : DW CREM
CMDLIST DZ 'CD' : DW CCHDIR
DZ 'CHDIR' : DW CCHDIR
DZ 'CLS' : DW CLS
DZ 'DATE' : DW CDATE
DZ 'DEL' : DW CDELET
DZ 'DIR' : DW DIR
DZ 'ECHO' : DW CECHO
DZ 'ERASE' : DW CDELET
DZ 'EXIT' : DW CEXIT
DZ 'HELP' : DW HELP
DZ 'MD' : DW CMKDIR
DZ 'MKDIR' : DW CMKDIR
DZ 'PATH' : DW CPATH
DZ 'MD' : DW CMKDIR
DZ 'REN' : DW CRENAM
DZ 'RENAME' : DW CRENAM
DZ 'DEL' : DW CDELET
DZ 'RD' : DW CRMDIR
DZ 'RMDIR' : DW CRMDIR
DZ 'SET' : DW CSET
DZ 'TIME' : DW CTIME
DZ 'VERSION' : DW VERS
DZ 'DATE' : DW CDATE
DZ 'VER' : DW VERS
DZ 'CLS' : DW CLS
DZ 'CHDIR' : DW CCHDIR
DZ 'MKDIR' : DW CMKDIR
DZ 'RENAME' : DW CRENAM
DZ 'ERASE' : DW CDELET
DZ 'RMDIR' : DW CRMDIR
DZ 'EXIT' : DW CEXIT
DZ 'HELP' : DW HELP
DZ 'VERSION' : DW VERS
DZ 'REBOOT' : DW REBOOT
DB #00
CLS LD DE,#0000
@ -1780,9 +1782,21 @@ QUIT: LD B,0
RST ToDSS
RET
;-----------------------------------------------------------------------
;R12
REBOOT: DI
LD C,BIOS.FullInit
RST ToBIOS
LD BC,2*256 + BIOS.REINIT
RST ToBIOS
DI
HALT
;R12
;-----------------------------------------------------------------------
ERR_MSG: INC DE
LD HL,ERR0
LD BC,ERR1-ERR0
LD BC,ERR0.Size
CALL LCPIR
CALL PRINTZ
CALL CRLF
@ -1795,7 +1809,7 @@ MESSAGE: CALL FMESAGE
FMESAGE: INC DE
LD HL,MSG0
LD BC,MSG1-MSG0
LD BC,MSG0.Size
LCPIR: XOR A
CPIR
RET PO
@ -1903,75 +1917,74 @@ MSG0: DB 0
; FILENAME EXT SIZE DATE TIME
DB "%1 %2 %3 %4 %5",CR,LF,0
DB "COMMANDS:",CR,LF,CR,LF
DB "CD DEL HELP RD SET "
DB " ",CR,LF
DB "CHDIR DIR MD REN TIME "
DB " ",CR,LF
DB "CLS ERASE MKDIR RENAME VER "
DB " ",CR,LF
DB "DATE EXIT PATH RMDIR VERSION "
DB " ",CR,LF
DB 0
MSG1:
DB "DIR REN | RENAME PATH HELP ",CR,LF
DB "CD | CHDIR DEL | ERASE SET VER | VERSION ",CR,LF
DB "MD | MKDIR TIME ECHO EXIT ",CR,LF
DB "RD | RMDIR DATE CLS REBOOT ",CR,LF,0
;R11
BYTE 0
DZ "Unknown command"
;
.Size EQU $-MSG0
;-----------------------------------------------------------------------
;!FIXIT äã­ªæ¨ï ¢ë§ë¢ îé ï ¢ë¢®¤ ®è¨¡ª¨ ¤¥« ¥â ¢ ­ ç «¥ 䨫ìâà ¯® ­®¬¥à ¬ ¨ ­¥áª®«ìª® ¯¥à¢ëå ®â訢 îâáï
ERR0 DB #00
DZ "Bad command or file name"
DZ "Invalid function" ; 01 - ­¥¢¥à­ë© ­®¬¥à ä㭪樨
DZ "Invalid drive number" ; 02 - ­¥¯à ¢¨«ì­ë© ­®¬¥à ãáâனá⢠
DZ "File not found" ; 03 - ä ©« ­¥ ®¡­ à㦥­
DZ "Path not found" ; 04 - ­¥¢¥à­ë© ¯ãâì
DZ "Invalid handle" ; 05 - ­¥áãé¥áâ¢ãî騩 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
DZ "No free filehandle" ; 06 - ­¥â ᢮¡®¤­®£® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
DZ "File exist" ; 07 - ä ©« áãé¥áâ¢ã¥â
DZ "File read only" ; 08 - ä ©« ⮫쪮 ¤«ï ç⥭¨ï
DZ "Root overflow" ; 09 - ¯¥à¥¯®«­¥­¨¥ ROOT (ª®à­¥¢®£® ª â «®£ )
DZ "No free space" ; 10 - ­¥â ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥
DZ "Directory not empty" ; 11 - ª â «®£ ­¥ ¯ãáâ
DZ "Can't delete current directory" ; 12 - ­¥ã¤ ç­ ï ¯®¯ë⪠ 㤠«¨âì ⥪ã騩 ª â «®£
DZ "Invalid media" ; 13 - ­¥¨§¢¥áâ­ë© ä®à¬ â
DZ "Unknown operation" ;R02 ; 14 - ­¥¢®§¬®¦­ ï ®¯¥à æ¨ï
DZ "Directory exist" ; 15 - ª â «®£ 㦥 ¥áâì
DZ "Invalid filename" ; 16 - ­¥¢¥à­®¥ ¨¬ï
DZ "Invalid EXE-file" ; 17 - ­¥¯à ¢¨«ì­ë© EXE-ä ©«
DZ "Not supported EXE-file" ; 18 - ­¥ ¯®¤¤¥à¦¨¢ ¥¬ ï ¢¥àá¨ï EXE-ä ©« 
DZ "Access denied" ; 19 - à¥áãàá ­¥ ¤®áâ㯥­
DZ "Not ready" ; 20 - ­¥â £®â®¢­®áâ¨
DZ "Seek error" ; 21 - ®è¨¡ª  ¯®§¨æ¨®­¨à®¢ ­¨ï
DZ "Sector not found" ; 22 - ᥪâ®à ­¥ ­ ©¤¥­
DZ "CRC error" ; 23 - ®è¨¡ª  CRC
DZ "Write protect" ; 24 - § é¨â  § ¯¨á¨
DZ "Read error" ; 25 - ®è¨¡ª  ç⥭¨ï
DZ "Write error" ; 26 - ®è¨¡ª  § ¯¨á¨
DZ "Drive failure" ; 27 - á¡®© ¤¨áª 
DZ "Extended error 28"
DZ "Extended error 29"
DZ "No free memory" ; 30 - ­¥¤®áâ â®ç­® ¯ ¬ïâ¨
DZ "Invalid memory block" ; 31 - ­¥áãé¥áâ¢ãî騩 ¡«®ª ¯ ¬ïâ¨
DZ "Extended error 32"
DZ "Maximum PATH size exceeded" ; 33 - ¯à¥¢ë襭 ¬ ªá¨¬ «ì­ë© à §¬¥à ¯¥à¥¬¥­­®©
DZ "Extended error 34"
DZ "Too many files in directory" ; 35 - ᫨誮¬ ¬­®£® ä ©«®¢ ¢ ¤¨à¥ªâ®à¨¨
DZ "Directory nesting too large or number of folders > 1023" ; 36 - ᫨誮¬ ¡®«ìè ï ¢«®¦¥­­®áâì ª â «®£®¢ ¨«¨ ª®«¨ç¥á⢮ ¯ ¯®ª > 1023
DZ "Operation interrupted by user" ; 37 - ®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬
DZ "Common error" ; 38 - ®¡é ï ®è¨¡ª 
DZ "Unexpected application termination" ; 39 - unexpected application termination / ­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à¨«®¦¥­¨ï
DZ "40"
DZ "41"
DZ "42"
DZ "43"
DZ "44"
DZ "45"
DZ "46"
DZ "Wrong video mode" ; 48 - ­¥¯à ¢¨«ì­ë© ¢¨¤¥®à¥¦¨¬
DZ "48"
DZ "49"
DZ "50"
ERR0: DB #00
DZ "Bad command or file name"
DZ "Invalid function" ; 01 - ­¥¢¥à­ë© ­®¬¥à ä㭪樨
DZ "Invalid drive number" ; 02 - ­¥¯à ¢¨«ì­ë© ­®¬¥à ãáâனá⢠
DZ "File not found" ; 03 - ä ©« ­¥ ®¡­ à㦥­
DZ "Path not found" ; 04 - ­¥¢¥à­ë© ¯ãâì
DZ "Invalid handle" ; 05 - ­¥áãé¥áâ¢ãî騩 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
DZ "No free filehandle" ; 06 - ­¥â ᢮¡®¤­®£® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
DZ "File exist" ; 07 - ä ©« áãé¥áâ¢ã¥â
DZ "File read only" ; 08 - ä ©« ⮫쪮 ¤«ï ç⥭¨ï
DZ "Root overflow" ; 09 - ¯¥à¥¯®«­¥­¨¥ ROOT (ª®à­¥¢®£® ª â «®£ )
DZ "No free space" ; 10 - ­¥â ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥
DZ "Directory not empty" ; 11 - ª â «®£ ­¥ ¯ãáâ
DZ "Can't delete current directory" ; 12 - ­¥ã¤ ç­ ï ¯®¯ë⪠ 㤠«¨âì ⥪ã騩 ª â «®£
DZ "Invalid media" ; 13 - ­¥¨§¢¥áâ­ë© ä®à¬ â
DZ "Unknown operation" ;R02 ; 14 - ­¥¢®§¬®¦­ ï ®¯¥à æ¨ï
DZ "Directory exist" ; 15 - ª â «®£ 㦥 ¥áâì
DZ "Invalid filename" ; 16 - ­¥¢¥à­®¥ ¨¬ï
DZ "Invalid EXE-file" ; 17 - ­¥¯à ¢¨«ì­ë© EXE-ä ©«
DZ "Not supported EXE-file" ; 18 - ­¥ ¯®¤¤¥à¦¨¢ ¥¬ ï ¢¥àá¨ï EXE-ä ©« 
DZ "Access denied" ; 19 - à¥áãàá ­¥ ¤®áâ㯥­
DZ "Not ready" ; 20 - ­¥â £®â®¢­®áâ¨
DZ "Seek error" ; 21 - ®è¨¡ª  ¯®§¨æ¨®­¨à®¢ ­¨ï
DZ "Sector not found" ; 22 - ᥪâ®à ­¥ ­ ©¤¥­
DZ "CRC error" ; 23 - ®è¨¡ª  CRC
DZ "Write protect" ; 24 - § é¨â  § ¯¨á¨
DZ "Read error" ; 25 - ®è¨¡ª  ç⥭¨ï
DZ "Write error" ; 26 - ®è¨¡ª  § ¯¨á¨
DZ "Drive failure" ; 27 - á¡®© ¤¨áª 
DZ "Extended error 28"
DZ "Extended error 29"
DZ "No free memory" ; 30 - ­¥¤®áâ â®ç­® ¯ ¬ïâ¨
DZ "Invalid memory block" ; 31 - ­¥áãé¥áâ¢ãî騩 ¡«®ª ¯ ¬ïâ¨
DZ "Extended error 32"
DZ "Maximum PATH size exceeded" ; 33 - ¯à¥¢ë襭 ¬ ªá¨¬ «ì­ë© à §¬¥à ¯¥à¥¬¥­­®©
DZ "Extended error 34"
DZ "Too many files in directory" ; 35 - ᫨誮¬ ¬­®£® ä ©«®¢ ¢ ¤¨à¥ªâ®à¨¨
DZ "Directory nesting too large or number of folders > 1023" ; 36 - ᫨誮¬ ¡®«ìè ï ¢«®¦¥­­®áâì ª â «®£®¢ ¨«¨ ª®«¨ç¥á⢮ ¯ ¯®ª > 1023
DZ "Operation interrupted by user" ; 37 - ®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬
DZ "Common error" ; 38 - ®¡é ï ®è¨¡ª 
DZ "Unexpected application termination" ; 39 - unexpected application termination / ­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à¨«®¦¥­¨ï
DZ "40"
DZ "41"
DZ "42"
DZ "43"
DZ "44"
DZ "45"
DZ "46"
DZ "Wrong video mode" ; 48 - ­¥¯à ¢¨«ì­ë© ¢¨¤¥®à¥¦¨¬
DZ "48"
DZ "49"
DZ "50"
;R11
BYTE 0 ; ®£à ­¨ç¨â¥«ì, ç⮡ ¯à¨ ®è¨¡ª¥ ¡®«ìè¥, 祬 ¥áâì á®®¡é¥­¨© ¢ë¤ ¢ «®áì ®¡é¥¥:
DZ "Unknown error"
DB 0 ; ®£à ­¨ç¨â¥«ì, ç⮡ ¯à¨ ®è¨¡ª¥ ¡®«ìè¥, 祬 ¥áâì á®®¡é¥­¨© ¢ë¤ ¢ «®áì ®¡é¥¥:
DZ "Unknown error"
;
ERR1:
.Size EQU $-ERR0
;-----------------------------------------------------------------------
GETPATH:

View File

@ -1411,7 +1411,7 @@ SETTIME PUSH IX
PUSH BC
PUSH HL
PUSH DE
LD C,#F5
LD C,BIOS.CMOS_TEST
RST ToBIOS
JP C,NOCMOS2
POP AF

View File

@ -6,15 +6,25 @@
;---------------------------------------------------------------
;R00 2003-03-19 DNS Initial version
;---------------------------------------------------------------
// INCLUDE "hardware.inc"
// INCLUDE "bios.inc"
; ORG #0000
MODULE DRV ; !FIXIT ®¡®©â¨áì ¡¥§ ¬®¤ã«ï
;PAGEDRV EQU 0
;===============;
;!FIXIT ¢ ¯à®æ¥¤ãॠª®â®à ï ¡ã¤¥â ®â¢¥ç âì §  ¯¥à¥å®¤ ¨§ í⮩ áâà ­¨æë ®¡à â­® ¢ MAIN ¤«ï ¢ë§®¢  ä㭪権
; „‘‘ ¨, ¢®§¬®¦­®, ¯®¢â®à­®¬ã § å®¤ã ¢ íâã áâà ­¨æã ç¥à¥§ RST #18 ¨§ ¤à㣨å áâà ­¨æ (ª®â®àëå ¯®ª  ­¥â)
; ᤥ« âì ­¥çâ® ¯®¤®¡­®¥ á ¯à®£à ¬¬­ë¬ á⥪®¬ áâà ­¨æ. <20>â  ¯à®æ¥¤ãà  ¨å á®åà ­ï¥â, ¯à¨¬¥à­® â ª ï ¦¥
; ¤®«¦­  ¢®ááâ ­ ¢«¨¢ âì.
; PUSH HL
;.SP+1: LD HL,DRV_PAGE.RSTx18_RET_PAGES
; LD (HL),A
; DEC L ; <20>¥ HL,   L - ç⮡ § ª®«ì楢 âì ®¡« áâì
; LD (.SP),HL
; POP HL
;===============;
;!TODO
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
@ -32,7 +42,7 @@ RST_00:
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[BIOS API]> ;
BLOCK 8-$,#FF ;
BLOCK 8-$,#C7 ; #C7 - "RST 0" opcode
A0008: PUSH AF ;
LD A,SYS_PORT.PAGE8;
OUT (SYS_PORT.ON),A ;
@ -44,35 +54,35 @@ A0008: PUSH AF ;
;!FIXIT
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[DSS API]> ;
BLOCK #10-$,#FF ;
A0010: ;JP RST_10 ;
BLOCK #10-$,#C7 ; #C7 - "RST 0" opcode
A0010: ;JP DRV_PAGE.RST_10 ;
DI : HALT ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[DRIVE API]> ;
BLOCK #18-$,#FF ;
;A0018 JP INTDISK ;
A0018: PUSH AF ;
PUSH BC ;
MAIN_PG_NUMBER+2: ;
LD BC,0*256 + SLOT0 ; !FIXIT á ­¥ ¤®«¦­ë ¢áâ ¢«ïâìáï ­®¬¥à  ¢ë¤¥«¥­­ëå áâà ­¨æ?
JP PORTAL.outDRV ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; ; <[DRIVE API]> ;
; BLOCK #18-$,#C7 ; #C7 - "RST 0" opcode
; ;A0018 JP INTDISK ;
; A0018: PUSH AF ;
; PUSH BC ;
; DRV_PAGE.MAIN_PAGE_NUMBER+2: ;
; LD BC,0*256 + SLOT0 ; !FIXIT á ­¥ ¤®«¦­ë ¢áâ ¢«ïâìáï ­®¬¥à  ¢ë¤¥«¥­­ëå áâà ­¨æ?
; JP PORTAL.outDRV ;
; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;!TODO
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
BLOCK #20-$,#FF ;
A0020: JP RST_20 ;
BLOCK #20-$,#C7 ; #C7 - "RST 0" opcode
A0020: JP DRV_PAGE.RST_20 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
RST_20:
DRV_PAGE.RST_20:
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
@ -81,13 +91,13 @@ RST_20:
;!TODO
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
BLOCK #28-$,#FF ;
A0028: JP RST_28 ;
BLOCK #28-$,#C7 ; #C7 - "RST 0" opcode
A0028: JP DRV_PAGE.RST_28 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
RST_28:
DRV_PAGE.RST_28:
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
@ -96,7 +106,7 @@ RST_28:
;!TODO
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
BLOCK #30-$,#FF ;
BLOCK #30-$,#C7 ;
A0030: JP RST_30 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
@ -111,7 +121,7 @@ RST_30:
;!FIXIT
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[MAIN INT]> ;
BLOCK #38-$,#FF ;
BLOCK #38-$,#C7 ;
A0038: ;
; JP RST_38 ;
; RST_38: ;
@ -148,56 +158,51 @@ A0038: ;
;
;
KEYSCAN: RET ;!FIXIT
DRV_PAGE.KEYSCAN: RET ;!FIXIT
;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[ NMI ]> ;
NMI: RETN ;
BLOCK #66-$,#FF ;
A0066: JP NMI ;
DRV_PAGE.NMI: RETN ;
BLOCK #66-$,#C7;
A0066: JP DRV_PAGE.NMI ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;-------------------------------;
;ADRST10 EQU #00 ;!!!!!
;ADRST10 EQU #00 ; ;!!!!!
;-------------------------------;
;!FIXIT
RST_10 PUSH HL
LD L,C
LD H,ADRST10/256
LD C,(HL)
INC H
LD H,(HL)
LD L,C
EX (SP),HL
RET
; DRV_PAGE.RST_10:
; PUSH HL
; LD L,C
; LD H,ADRST10/256
; LD C,(HL)
; INC H
; LD H,(HL)
; LD L,C
; EX (SP),HL
; RET
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[DRIVE PAGE SWITCH]> ;
BLOCK #7E-$,0 ;
PORTAL.toMAIN: ;
PUSH BC ;
RETBANK+2: ;
LD BC,0*256+SLOT0 ;
OUT (C),B ;
ASSERT $!=84,'-> Portal error!';
;Entry point from DSS main page ; !FIXIT ¥á«¨ 2 à §  ¯à¨«¥â¥âì ­  íâã â®çªã ¢å®¤ , â® § áàñâáï RETBANK
LD (RETBANK),A ;
POP BC ;
POP AF ;
ADCALL+1: ;
CALL DISPATCH ; ¯ âç¨âáï ­  INTDISK
JR PORTAL.toMAIN ;
_mInfoBLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7
PORTAL.out_DRV: PUSH BC ;
.RETBANK+2: LD BC,0*256+SLOT0 ;
.switch: OUT (C),B ;
ASSERT $!=84,'-> Portal error!';
;Entry point from DSS main page
LD (.RETBANK),A ;
POP BC ;
POP AF ;
ADCALL+1: CALL DISPATCH ; ¯ âç¨âáï ­  INTDISK
JP PORTAL.out_DRV ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
/*
push hl
*/
display "=============================",/H,(#82-#73-(PORTAL.toMAIN.switch-PORTAL.toMAIN))
;!FIXIT çñâ ­¥ â® âãâ
@ -214,23 +219,162 @@ PORTAL.outDRV: ;
;
DISPATCH:
CALL INITDVC
LD HL,INTDISK
LD (ADCALL),HL
LD A,(LDRIVE)
INITDVC_RET_DRIVE:
CALL INITDVC
LD A,(DRV_PAGE.LDRIVE)
AND A
RET
;
LDRIVE DB #00
DRV_PAGE.LDRIVE: DB #00
INCLUDE 'dss/media_drivers/Shared.asm'
INCLUDE 'dss/media_drivers/ide.asm'
INCLUDE 'dss/media_drivers/fdd.asm'
INCLUDE 'dss/media_drivers/ram_disk.asm'
INCLUDE 'dss/media_drivers/shared-drv.asm'
INCLUDE 'dss/media_drivers/ide-drv.asm'
INCLUDE 'dss/media_drivers/fdd-drv.asm'
INCLUDE 'dss/media_drivers/ram_disk-drv.asm'
; DB 0
ENDMODULE
DEVICE_CFG:
DRV_TEMP_BUFFER:
;
;
;---------[256 bytes stack for return pages of RST #18 callers]--------;
; #3F00 - #3FFF
DRV_PAGE.RSTx18_RET_PAGES EQU #3FFF
;----------------------------------------------------------------------;
ASSERT ((#4000-DRV_TEMP_BUFFER-256) > (DEVICE.Size + LOGDRV.Size + RAMDTBL.Size)), "No space for DRV_TEMP_BUFFER in DRV-MAIN page"
; ENDMODULE
; OUTEND
;[END]
/*
;
; NEW RESCAN
;=====================================================================[]
; «®£¨ç¥áª¨© ­®¬¥à ãáâனá⢠ +  ¤à¥á ®¡à ¡®â稪 .
; <20>®à浪®¢ë© ­®¬¥à * 3 = ¡ãª¢  ¤¨áª  + "A"
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT*3,#FF
.Size: EQU $-DEVICE
; ‹®£¨ç¥áª¨© ­®¬¥à à §¤¥« .
;<3B>®¬¥à £à㯯ë = «®£¨ç¥áª¨© ­®¬¥à à §¤¥«  HDD ¨§ DEVICE
LOGDRV: BLOCK 16*LD_DSK,0
.Size: EQU $-LOGDRV
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
;+01 LONG SECTOR OFFSET
;+05 LONG SIZE IN SECTORS (SECTORS ON LOGICAL DISK)
;+09 FREE
;+15
; <E28099>ˆ€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆŠ€ ˆ …ƒŽ RAM-DISK ID
; DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
RAMDTBL: DUP MAX_RAMDRIVES * 2
DB #FF
EDUP
.Size EQU $-RAMDTBL
INTDISK:
;R01
CP #FF
JR NZ,.noNeedRescan
CP C
JR Z,INITDVC_RET_DRIVE
.noNeedRescan:
;
PUSH HL
PUSH BC
ADD A,A
ADD A,A
LD C,A
LD B,0
LD HL,DEVICE
ADD HL,BC
LD A,(HL)
CP #FF
JR Z,NODEV
INC HL
INC HL
LD C,(HL)
INC HL
LD H,(HL)
LD L,C
POP BC
EX (SP),HL
RET
NODEV: POP BC
POP HL
LD A,DSS_Error.drv.INVALID_DRIVE
SCF
RET
INITDVC: XOR A
LD (DRV_PAGE.LDRIVE),A ; á¡à. ï祩ªã
LD HL,DEVICE
LD (PDEVICE),HL ; ¢®ááâ. ï祩ªã
; FDD ¤¥¢ ©áë
CALL FDDRIVE.INIT ; ã§­ âì ç¨á«® FDD-¤¥¢ ©á®¢
LD DE,FDDRIVE ;  ¤à¥á ®¡à ¡®â稪  ⥪. ¤¥¢ ©á 
CALL MAKEDVC ; ¨­¨æ. â ¡«¨æã ¯¥à¥å®¤®¢
; HDD ¤¥¢ ©áë
; ¥á«¨ ­  áâ à⥠¢¥àá¨ï BIOS ­¥ ¯®¤å®¤¨â, â® £à㧨âìáï ¬®¦­® ⮫쪮 á ¤¨áª¥âë, ¤«ï í⮣® âãâ § ¬¥­  ª®¤  ­  XOR A : RET
.if_old: CALL INIT_H
;CALL .CHECK_HDD
LD DE,HDDRIVE
CALL MAKEDVC
; RAM-¤¨áª¨
CALL INIT_RD
LD DE,RMDRIVE
CALL MAKEDVC
XOR A
RET
.CHECK_HDD:
RET
;R01
INITDVC_RET_DRIVE:
LD DE,DRV_TEMP_BUFFER
LD HL,DEVICE
LD BC,DEVICE.Size
LDIR
LD HL,LOGDRV
LD BC,LOGDRV.Size
LDIR
LD HL,RAMDTBL
LD BC,RAMDTBL.Size
LDIR
CALL INITDVC
; ‘à ¢­¨¢ ¥¬ áâ àë© DEVICE ¡ãä¥à á ­®¢ë¬, ¥á«¨ ¢ ­®¢®¬ ­¥â ãáâனá⢠, â® § â¨à ¥¬ ¢ áâ àëå ¡ãä¥à å ¥£®
LD HL,DEVICE
LD DE,DRV_TEMP_BUFFER
LD B,DEVICE.Size
.loop_DEVICE:
LD A,(DE)
CP (HL)
CALL NZ,.FIND_DEV
INC HL
INC DE
DJNZ .loop_DEVICE
LD A,(DRV_PAGE.LDRIVE)
AND A
RET
;
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT*4,#FF
;=====================================================================[]
;
;
*/

View File

@ -9,6 +9,7 @@
;[ ] ¯ãâì ⥪ã饣® ª â «®£  ¢ 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). (Ž¯æ¨®­ «ì­® ¯à¨ ª®¬¯¨«ï樨)
@ -94,7 +95,7 @@ RST_0x18: PUSH AF ;
PUSH BC ;
DRV_PG_NUMBER+2: ;
LD BC,0*256+SLOT0 ;
JP PORTAL.outMAIN ;
JP PORTAL.out_MAIN ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
@ -219,7 +220,7 @@ RST_10: PUSH HL
; <[DRIVE PAGE SWITCH]> ;
_mInfoBLOCK #80-$,0 ;
;ENTER: ;
PORTAL.outMAIN: ;
PORTAL.out_MAIN: ;
IN A,(C) ;
OUT (C),B ;
ASSERT $!=84,'-> Portal error!';
@ -262,19 +263,33 @@ PORTAL.outMAIN: ;
;R01
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  VERSION
F_START:
DI
F_START: DI
LD (.saveDRV),A
CALL DEPLOY ;R07 ;íâ  ¯à®æ¥¤ãà  § âàñâáï ¯®á«¥ ¨á¯®«­¥­¨ï
;R12
LD C,BIOS.DRV_VERSION
RST ToBIOS
JR C,.err_oldBIOS
EX DE,HL
LD DE,MINIMUM_BIOS_VERSION
SBC HL,DE
JR NC,.good
LD A,(.saveDRV)
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 KINIT
CALL PRINT_INIT
LD C,0
RST #30
LD C,0 ;!HARDCODE
RST #30 ;!HARDCODE
LD A,(VMODE)
LD C,#81
RST #30
LD C,#81 ;!HARDCODE
RST #30 ;!HARDCODE
;CALL INITDVC ;R05
;R05
LD C,Dss.DRV.Init
@ -284,7 +299,7 @@ F_START:
.saveDRV+1: LD A,0
LD BC,1*256 + Dss.BootDSK
RST #10
RST ToDSS
EI
;Set new address fn. VERSION
@ -315,6 +330,18 @@ F_START:
ENDIF
;R02
JP VERSION
;R12
.err_oldBIOS:
LD HL,.err_oldBIOS_message
LD C,Dss.PChars
RST ToDSS
SCF
RET
.err_oldBIOS_message:
DZ "\r\nWARNING! This version of DSS requires BIOS v2.55 or later to boot from IDE."
;
;R03
;R07Allocate memory
; LD BC,#03C2
@ -502,7 +529,7 @@ DEPLOY:
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
LD (DRV.MAIN_PG_NUMBER),A
LD (DRV_CONTENT + DRV_PAGE.MAIN_PAGE_NUMBER),A ;!TEST
OUT (SLOT3),A
LD A,C
@ -546,7 +573,6 @@ DEPLOY:
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||;
DISPLAY "Space for DRV-MAIN: ",/A,#4000-$," bytes."
DRV_CONTENT:
; ENDMODULE
DISP 0
INCLUDE 'DRV-MAIN.ASM'
ENT

View File

@ -222,8 +222,6 @@ FDDRIVE:
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
.IOCTL_F:
BIT 7,B
JR NZ,.O_CTL_F
@ -263,7 +261,6 @@ FDDRIVE:
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.FGETPRM:
EX DE,HL
LD BC,#55AA
@ -276,7 +273,7 @@ FDDRIVE:
LD A,L
AND #0F
PUSH AF
LD C,#58
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
JR C,.NONEF
PUSH HL
@ -334,7 +331,6 @@ FDDRIVE:
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.FSETPRM:
PUSH AF
EXX
@ -346,13 +342,13 @@ FDDRIVE:
PUSH AF
PUSH HL
PUSH DE
LD C,#58
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
POP DE
POP HL
JR C,.NONEF
POP AF
LD C,#59
LD C,BIOS.DRV_SET_PAR
RST ToBIOS
RET C
AND A

View File

@ -6,7 +6,7 @@
;---------------------------------------------------------------
;
; Disk Driver Specification ver. 2.20
;[]===========================================================[]
;[]===========================================================[0]
;Procedure : Initialization
;
;Function : Initialization device(s)
@ -15,8 +15,9 @@
; IX - Environment
;Output : A = Amount drive support
; HL = Size driver
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[0]
;[]===========================================================[1]
;Procedure : Open
;
;Function : Open disk
@ -25,8 +26,9 @@
; A - Drive
;Output : None
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[1]
;[]===========================================================[2]
;Procedure : Close
;
;Function : Close disk
@ -35,8 +37,9 @@
; A - Drive
;Output : None
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[2]
;[]===========================================================[3]
;Procedure : Media check
;
;Function : Checking change line
@ -46,8 +49,9 @@
;Output : A = 00h disk no changed
; A = 0FFh disk changed
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[3]
;[]===========================================================[4]
;Procedure : Get BPB
;
;Function : Get Block Parameters BIOS
@ -56,8 +60,9 @@
; DE - Address
;Output : None
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[4]
;[]===========================================================[5]
;Procedure : Input
;
;Function : Input from disk
@ -68,8 +73,9 @@
; B - Sector count
;Output : None
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[5]
;[]===========================================================[6]
;Procedure : Output
;
;Function : Output to disk
@ -80,8 +86,9 @@
; B - Sector count
;Output : None
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[6]
;[]===========================================================[7]
;Procedure : Removable
;
;Function : Checking change line
@ -91,8 +98,9 @@
;Output : A = 00h Removable
; A = FFh Nonremovable
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[7]
;[]===========================================================[8]
;Procedure : Generic IOCTL
;
;Function : Generic Input Output Control
@ -110,8 +118,9 @@
; 82h - Format track
;Output :
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[8]
;[]===========================================================[9]
;Procedure : Read Long
;
;Function : Reading sectors from disk
@ -125,8 +134,9 @@
; HL:IX - Next Logical Block (sector)
; DE - Next Address
;
;[]===========================================================[]
;[]===========================================================[]
;[]===========================================================[9]
;[]===========================================================[10]
;Procedure : Write Long
;
;Function : Writing sectors to disk
@ -140,7 +150,8 @@
; HL:IX - Next Logical Block (sector)
; DE - Next Address
;
;[]===========================================================[]
;[]===========================================================[10]
;
; Errors:
; 0 (00h) - NO ERRORS
@ -158,7 +169,7 @@
; 12 (0Ch) - BUSY (DEVICE OPENED)
; 13 (0Dh) - RESERVED
LD_DSK EQU 16
LD_DSK EQU 16 ; ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å ¤¨áª®¢ ¢ á¨á⥬¥
; IDE0 EQU #0C1C0
; IDE1 EQU #0C1C8
@ -166,77 +177,110 @@ PART EQU #C000
HDDRIVE INC C
DEC C
JP Z,INIT_H ;#00
JP Z,INIT_H ; c=0 Initialization
DEC C
JP Z,RESE_H ;#01
JP Z,RESE_H ; c=1 open
DEC C
JP Z,STAT_H ;#02
JP Z,STAT_H ; c=2 close
DEC C
JP Z,CHEK_H ;#03
JP Z,CHEK_H ; c=3 media check (ᬥ­  ­®á¨â¥«ï)
DEC C
JP Z,GBPB_H ;#04
JP Z,GBPB_H ; c=4 get BPB
DEC C
JP Z,READH ;#05
JP Z,READH ; c=5 input (ç⥭¨¥ ᥪâ®à®¢)
DEC C
JP Z,WRITEH ;#06
JP Z,WRITEH ; c=6 output (§ ¯¨áì ᥪâ®à®¢)
DEC C
JP Z,REMOV_H ;#07
JP Z,REMOV_H ; c=7 Removable
DEC C
JP Z,IOCTL_H ;#08
JP Z,IOCTL_H ; c=8 ã§­ âì £¥®¬¥âà¨î ¤¨áª  Generic IOCTL
DEC C
JP Z,RESR_H ;#09
JP Z,RESR_H ; c=9 Reserved
DEC C
JP Z,LREADH ;#0A
JP Z,LREADH ; c=10 Read Long
DEC C
JP Z,LWRITEH ;#0B
JP Z,LWRITEH ; c=11 Write Long
RESR_H LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;Commands for restart #18
INIT_H PUSH IY
////////////////////////////////////////////////////////////////////////
// Commands for restart #18 //
////////////////////////////////////////////////////////////////////////
;!FIXIT ---------------------------------------------------------------------------[v]
; c=0 Initialization
INIT_H: PUSH IY
LD HL,LOGDRV
LD (OFFSECT),HL
LD IX,DEVICE_CFG ;!TODO ᤥ« âì RAMDRIVE âãâ ¢ DEVICE_CFG ?
; IN A,(SLOT2)
; PUSH AF
; IN A,(SLOT0)
; OUT (SLOT2),A
;LD IX,DEVICE_CFG+#8000 ; ¬®£«® § áà âì ¯ ¬ïâì
LD IX,SYS_PAGE.TMP_BUFFER
LD C,BIOS.DRV_LIST
RST ToBIOS
XOR A
;!TEST
;LD B,(IX+2) ;HDD
;CP B
CP (IX+2)
JR Z,NO_HARDS
LD BC,4*256 + #80 ;!HARDCODE 4 - ª®«¨ç¥á⢮ ¢¨­â®¢, 80 - ID ¢¨­â 
NX_DVCI PUSH BC
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
XOR A
LD B,(IX+2) ;ª®«¨ç¥á⢮ HDD ¤«ï ¯à®æ¥¤ãàë NX_DVCI
CP B
LD A,C
OUT (SLOT3),A
JR Z,NO_HARDS
;LD BC,4*256 + #80 ;!HARDCODE 4 - ª®«¨ç¥á⢮ ¢¨­â®¢, 80 - ID ¢¨­â  ;!FIXIT
LD C,#80 ;!HARDCODE - ID ¢¨­â  ¤«ï ¯à®æ¥¤ãàë BIOS.DRV_DETECT
NX_DVCI: PUSH BC
LD A,C
LD (DRV),A
CALL PARTIT
LD (DRV_NUM),A
LD C,BIOS.DRV_DETECT
RST ToBIOS
;JR C,.NO_DRIVE
CALL NC,PARTIT
POP BC
INC C
JR C,NX_DVCI
DJNZ NX_DVCI
;R02
;R02 LD A,#80
;R02 LD (DRV),A
;R02 LD C,SLOT3
;R02 IN B,(C)
;R02 LD A,SYSPAGE
;R02 OUT (C),A
;R02 LD HL,IDE0
;R02 CALL YEP_DRV
;R02 OUT (C),B
;R02 CALL NZ,PARTIT
;R02
;R02 LD A,#81
;R02 LD (DRV),A
;R02 LD C,SLOT3
;R02 IN B,(C)
;R02 LD A,SYSPAGE
;R02 OUT (C),A
;R02 LD HL,IDE1
;R02 CALL YEP_DRV
;R02 OUT (C),B
;R02 CALL NZ,PARTIT
; c=0 Initialization
; INIT_H: PUSH IY
; LD HL,LOGDRV
; LD (OFFSECT),HL
; LD IX,DEVICE_CFG ;!FIXIT ­¥ § áà¥â «¨ ¯ ¬ïâì?
; LD C,BIOS.DRV_LIST
; RST ToBIOS
; XOR A
; ;!TEST
; ;LD B,(IX+2)
; ;CP B
; CP (IX+2) ;HDD
; JR Z,NO_HARDS
; LD BC,4*256 + #80 ;!HARDCODE 4 - ª®«¨ç¥á⢮ ¢¨­â®¢, 80 - ID ¢¨­â  ;!FIXIT
; ;LD C,#80 ;!HARDCODE 4 - ª®«¨ç¥á⢮ ¢¨­â®¢, 80 - ID ¢¨­â  ;!FIXIT
; NX_DVCI: PUSH BC
; LD A,C
; LD (DRV_NUM),A
; LD C,BIOS.DRV_DETECT
; RST ToBIOS
; ;JR C,.NO_DRIVE
; CALL NC,PARTIT
; POP BC
; INC C
; ;JR C,NX_DVCI
; DJNZ NX_DVCI
;!FIXIT ---------------------------------------------------------------------------[^]
;
NO_HARDS:
POP IY
LD HL,(OFFSECT)
@ -245,37 +289,21 @@ NO_HARDS:
SBC HL,DE
RET Z
LD DE,LD_DSK
DRVCLC INC A
DRVCLC: INC A
SBC HL,DE
JR NZ,DRVCLC
AND A
RET
DEVICE_CFG EQU #4000
;DEVICE_CFG EQU #4000 ;!TEST
;DEVICE_CFG EQU DRV_TEMP_BUFFER ;!TEST
; DB 0 ;LEN
; DB 0 ;FDD COUNT
; DB 0 ;HDD COUNT
; DB 0 ;CDROM COUNT
; DS 28 ;RESERVED
YEP_DRV LD A,#FF
; CP (HL)
; RET NZ
INC HL
CP (HL)
RET NZ
INC HL
CP (HL)
RET NZ
INC HL
CP (HL)
RET NZ
INC HL
CP (HL)
RET NZ
INC HL
CP (HL)
RET
;+00 ;SECTORS PER TRACK
;+01 ;TRACKS PER CYLLINDER
@ -286,40 +314,17 @@ YEP_DRV LD A,#FF
;+06 ;RESERVED
;+07 ;RESERVED
DRVHD_H EQU 0
SC_PT_H EQU 1
HEADS_H EQU 2
CYL_L_H EQU 3
CYL_H_H EQU 4
SPCLL_H EQU 5
SPCLH_H EQU 6
;IDE0 DB #FF ;DRIVE/HEAD REGISTER ;00
; DB #FF ;SECTORS PER TRACK ;01
; DB #FF ;HEADS ;02
; DB #FF ;CYLINDERS LOW ;03
; DB #FF ;CYLINDERS HIGH ;04
; DB #FF ;SECTOR PER CYLINDER LOW ;05
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
; DB #FF ;RESERVED ;07
;IDE1 DB #FF ;DRIVE/HEAD REGISTER ;00
; DB #FF ;SECTORS PER TRACK ;01
; DB #FF ;HEADS ;02
; DB #FF ;CYLINDERS LOW ;03
; DB #FF ;CYLINDERS HIGH ;04
; DB #FF ;SECTOR PER CYLINDER LOW ;05
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
; DB #FF ;RESERVED ;07
LOGDRV BLOCK 12*LD_DSK,0
LOGDRV: BLOCK 16*LD_DSK,0 ;!FIXIT ¯¥à¥­¥á⨠ª ¡ãä¥à ¬ ¢ ª®­¥æ áâà ­¨æë
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
;+01 LONG SECTOR OFFSET
;+05 LONG SIZE IN SECTORS
;+09 FREE
;+15
SELHDD PUSH DE
.Size EQU $-LOGDRV
SELHDD: PUSH DE
PUSH BC
PUSH HL
LD L,A
@ -349,8 +354,6 @@ SELHDD PUSH DE
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
IOCTL_H BIT 7,B
JR NZ,O_CTL_H
INC B
@ -400,14 +403,17 @@ HFRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
; DE' - HEADS ON PHISICAL DISK
; BC' - SECTORS PER TRACK ON PHISICAL DISK
; A' - PHISICAL DRIVE NUMBER
; A - DRIVE/HEAD REGISTER PHISICAL DISK
; D0...D3 - "0" RESERVED (MAY BE OTHER)
; D4 - DEVICE MASTER/SLAVE
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
HGETPRM EX DE,HL
; A - DRIVE/HEAD REGISTER PHISICAL DISK:
; bit7 - reserved "1"
; bit6 - ADDRESSING MODE LBA/CHS
; bit5 - reserved "1"
; bit4 - DEVICE MASTER/SLAVE
; bit3 - reserved "0" (MAY BE OTHER)
; bit2 - reserved "0" (MAY BE OTHER)
; bit1 - reserved "0" (MAY BE OTHER)
; bit0 - Primary/Secondary Chanel
HGETPRM:
EX DE,HL
LD BC,#55AA
AND A
SBC HL,BC
@ -415,6 +421,8 @@ HGETPRM EX DE,HL
LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET NZ
PUSH IX
PUSH IY
LD H,0
ADD HL,HL
@ -423,55 +431,81 @@ HGETPRM EX DE,HL
ADD HL,HL
LD B,H
LD C,L
LD IY,LOGDRV ;!FIXIT ­ å७  âãâ ¨­¤¥ªá­ë©?
LD IY,LOGDRV
ADD IY,BC
LD E,(IY+5)
LD D,(IY+6)
LD L,(IY+7)
LD H,(IY+8)
LD A,(IY+0)
LD C,A
LD IY,SYS_PAGE.IDE_0
AND #0F
JR Z,GELH1
LD IY,SYS_PAGE.IDE_1
CP 2
JR C,GELH1
LD IY,SYS_PAGE.IDE_2
JR Z,GELH1
LD IY,SYS_PAGE.IDE_3
GELH1 IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(IY+DRVHD_H) ;HDD/DRV
EXX
LD L,(IY+CYL_L_H) ;CYLINDER LOW
LD H,(IY+CYL_H_H) ;CYLINDER HIGH
LD E,(IY+HEADS_H) ;HEADS
LD D,0
LD C,(IY+SC_PT_H) ;SECTORS
LD B,0
EXX
EX AF,AF'
POP AF
OUT (SLOT3),A
LD A,C
EX AF,AF'
;
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
;!TEST --------------------------------------------------------------------------------+
PUSH IY
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
POP IY
LD A,DSS_Error.drv.INVALID_DRIVE
JR C,.error
EX DE,HL
LD C,E
LD E,D
LD D,0
LD A,B
LD B,D
EXX
;SECTORS ON LOGICAL DISK
LD E,(IY+5)
LD D,(IY+6)
LD L,(IY+7)
LD H,(IY+8)
;
EX AF,AF'
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
EX AF,AF'
; LD C,A
; LD IY,SYS_PAGE.IDE_0
; AND #0F
; JR Z,GELH1
; LD IY,SYS_PAGE.IDE_1
; CP 2
; JR C,GELH1
; LD IY,SYS_PAGE.IDE_2
; JR Z,GELH1
; LD IY,SYS_PAGE.IDE_3
; GELH1: IN A,(SLOT3)
; PUSH AF
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,(IY+HDD_INIT_TABLE.DRV_Flags) ;HDD/DRV
; EXX
; LD L,(IY+HDD_INIT_TABLE.CylinderNumberLow) ;CYLINDER LOW +
; LD H,(IY+HDD_INIT_TABLE.CylinderNumberHigh) ;CYLINDER HIGH +
; LD E,(IY+HDD_INIT_TABLE.HeadsNumber) ;HEADS +
; LD D,0
; LD C,(IY+HDD_INIT_TABLE.SectorsPerTrack) ;SECTORS +
; LD B,0
; EXX
; EX AF,AF'
; POP AF
; OUT (SLOT3),A
; LD A,C
; EX AF,AF'
;!TEST --------------------------------------------------------------------------------+
AND A
.error: POP IY
POP IX
RET
REMOV_H:
LD A,1
AND A
RET
REMOV_H LD A,1
AND A
RESE_H: XOR A
RET
RESE_H XOR A
RET
STAT_H XOR A
STAT_H: XOR A
RET
CHEK_H:
@ -484,8 +518,7 @@ CHEK_H:
;HL:IX - SECTOR
; DE - ADDRESS
GBPB_H PUSH IY
GBPB_H: PUSH IY
PUSH DE
LD L,A
LD H,0
@ -506,7 +539,7 @@ GBPB_H PUSH IY
LD A,(IY+0)
POP DE
POP IY
LD BC,#0155
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
RET
@ -514,10 +547,11 @@ GBPB_H PUSH IY
; DE - ADDRESS
; B - COUNTER
; A'- PAGE
; A - HDD NUMBER +#80
;READ SECTOR
LREADH PUSH IY
LREADH: PUSH IY
CALL SELHDD
LD C,#52 ; A - HDD NUMBER +128
LD C,BIOS.DRV_READ_LONG
RST ToBIOS
POP IY
RET
@ -526,10 +560,12 @@ LREADH PUSH IY
; DE - ADDRESS
; B - COUNTER
; A'- PAGE
; A - HDD NUMBER +#80
;WRITE SECTOR
LWRITEH PUSH IY
LWRITEH:
PUSH IY
CALL SELHDD
LD C,#53 ; A - HDD NUMBER +128
LD C,BIOS.DRV_WRITE_LONG
RST ToBIOS
POP IY
RET
@ -537,10 +573,11 @@ LWRITEH PUSH IY
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD NUMBER +#80
;WRITE SECTOR
WRITEH PUSH IY
WRITEH: PUSH IY
CALL SELHDD
LD C,#56 ; A - HDD NUMBER +128
LD C,BIOS.DRV_WRITE
RST ToBIOS
POP IY
RET
@ -548,10 +585,11 @@ WRITEH PUSH IY
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD NUMBER +#80
;READ SECTOR
READH PUSH IY
READH: PUSH IY
CALL SELHDD
LD C,#55 ; A - HDD NUMBER +128
LD C,BIOS.DRV_READ
RST ToBIOS
POP IY
RET
@ -559,18 +597,20 @@ READH PUSH IY
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD NUMBER +#80
;CHECK SECTOR
CHECKH PUSH IY
CHECKH: PUSH IY
CALL SELHDD
LD C,#54 ; A - HDD NUMBER +128
LD C,BIOS.DRV_VERIFY
RST ToBIOS
POP IY
RET
;-----------------
EASYDOS
MEDIDOS
HIGHDOS LD E,(IY+08)
EASYDOS:
MEDIDOS:
HIGHDOS:
LD E,(IY+08)
LD D,(IY+09)
LD L,(IY+10)
LD H,(IY+11)
@ -599,7 +639,7 @@ HIGHDOS LD E,(IY+08)
LD (IX+6),D
LD (IX+7),L
LD (IX+8),H
LD A,(DRV)
LD A,(DRV_NUM)
LD (IX+0),A
LD DE,LD_DSK ; DSKITEM
ADD IX,DE
@ -611,7 +651,7 @@ NXTPART LD DE,#10
AND A
RET
PARTIT IN A,(SLOT3)
PARTIT: IN A,(SLOT3)
PUSH AF
LD A,DSS_PAGE
OUT (SLOT3),A
@ -628,14 +668,14 @@ PARTIT2 LD (CURSECL),DE
LD (CURSECH),IX
CALL LOADSEC
;!TEST
RET C ;FOR IDE2..3
;RET C ; for absent drive
;
LD HL,(PART+510)
LD HL,(PART+510) ;!HARDCODE
LD DE,#AA55
AND A
SBC HL,DE
JR NZ,NODEFIN
LD IY,PART+#01BE
LD IY,PART+#01BE ;!HARDCODE
LD B,4
DOSAGA PUSH BC
LD A,(IY+4)
@ -670,8 +710,7 @@ NOEXTDS CP #0F
NODEFIN SCF
RET
EXTDOS
LD HL,(EXTDOSL)
EXTDOS: LD HL,(EXTDOSL)
LD DE,(EXTDOSH)
LD A,L
OR H
@ -701,13 +740,13 @@ LOADSEC PUSH IY
LD IX,(CURSECL)
LD HL,(CURSECH)
LD DE,PART
LD A,(DRV_NUM)
LD BC,1*256 + BIOS.DRV_READ
LD A,(DRV)
RST ToBIOS
POP IY
RET
DRV DB #00 ;PHISICAL DRIVE NUMBER
DRV_NUM DB #00 ;PHISICAL DRIVE NUMBER. ­®¬¥à ¤¥¢ ©á  (#80/#81 - primary ¬ áâ¥à/á«¥©¢, #82/#83 - secondary ¬ áâ¥à/á«¥©¢)
CURSECL DW #0000 ;CURRENT SECTOR LOADED
CURSECH DW #0000

View File

@ -247,7 +247,8 @@ CHEK_RD LD A,#FF
RET
;DE - ADDRESS
GBPB_RD LD IX,0
GBPB_RD:
LD IX,0
LD HL,0
LD B,#01
;JP READ_RD
@ -329,7 +330,6 @@ INIT_RD:
LD (DE),A
INC DE
JP 1F
.noDRV: POP BC
1: INC B
LD A,RAMDTBL.Size / 2

View File

@ -116,6 +116,9 @@
; EX (SP),HL
; RET
;!FIXIT ¯®¯¥à¥¤¥«ë¢ âì âã⠢맮¢ë ç¥à¥§ â®çª¨ ¢å®¤  ⨯  RST ¨«¨ ¢ë§®¢ë ⨯  LD C,0 : CALL HDDRIVE ­  ¯àï¬ë¥
;-------------------------------------------------
; RST 18h. ‚¥ªâ®à ¤¨áª®¢ëå ãáâனáâ¢
; ¢å®¤: a=­®¬¥à ãáâனá⢠ (0-25)
@ -159,7 +162,7 @@ NODEV: POP BC
PDEVICE DW DEVICE
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT*3,#FF
.End: DB #FF
.Size: DB #FF
FLOPPY EQU #0001
FIXED EQU #0002
@ -191,33 +194,30 @@ NETWORK EQU #0008
;-----------------------------------------------------------------------
;R01
INITDVC_RET_DRIVE:
CALL INITDVC
LD A,(LDRIVE)
AND A
RET
; INITDVC_RET_DRIVE:
; CALL INITDVC
; LD A,(DRV_PAGE.LDRIVE)
; AND A
; RET
;
;-----------------------------------------------------------
; <20>à®áª ­¨à®¢ âì á¨á⥬㠭  FDD/HDD ¤¥¢ ©áë ¨ RAM-¤¨áª¨
;-----------------------------------------------------------
INITDVC: XOR A
LD (LDRIVE),A ; á¡à. ï祩ªã
LD (DRV_PAGE.LDRIVE),A ; á¡à. ï祩ªã
LD HL,DEVICE
LD (PDEVICE),HL ; ¢®ááâ. ï祩ªã
; FDD ¤¥¢ ©áë
LD C,A
CALL FDDRIVE ; ã§­ âì ç¨á«® FDD-¤¥¢ ©á®¢
CALL FDDRIVE.INIT ; ã§­ âì ç¨á«® FDD-¤¥¢ ©á®¢
LD DE,FDDRIVE ;  ¤à¥á ®¡à ¡®â稪  ⥪. ¤¥¢ ©á 
CALL MAKEDVC ; ¨­¨æ. â ¡«¨æã ¯¥à¥å®¤®¢
; HDD ¤¥¢ ©áë
LD C,0
CALL HDDRIVE
.if_old: CALL INIT_H ; ¥á«¨ ­  áâ à⥠¢¥àá¨ï BIOS ­¥ ¯®¤å®¤¨â, â® £à㧨âìáï ¬®¦­® ⮫쪮 á ¤¨áª¥âë, ¤«ï í⮣® âãâ § ¬¥­  ª®¤  ­  XOR A : RET
LD DE,HDDRIVE
CALL MAKEDVC
; RAM-¤¨áª¨
LD C,0
CALL RMDRIVE
CALL INIT_RD
LD DE,RMDRIVE
CALL MAKEDVC
XOR A
@ -227,7 +227,7 @@ INITDVC: XOR A
; ¢å®¤: de= ¤à¥á ®¡à ¡®â稪  ¤¥¢ ©á 
; a=ç¨á«® ¤¥¢ ©á®¢ (0=­¥â)
MAKEDVC: LD C,A
LD HL,LDRIVE ; ï祩ª  ­®¬¥à  ¯®á«. ¤¨áª 
LD HL,DRV_PAGE.LDRIVE ; ï祩ª  ­®¬¥à  ¯®á«. ¤¨áª 
ADD A,(HL)
LD (HL),A
LD A,C
@ -235,7 +235,7 @@ MAKEDVC: LD C,A
OR A
RET Z ; ­¥â ¤¥¢ ©á®¢
LD HL,(PDEVICE) ; ⥪. ¯®«®¦. ¢ â ¡«¨æ¥
.loop: LD (HL),C ; ­®¬¥à ¤à ©¢  í⮣® ãáâனá⢠ (¬« ¤è¨¥ 4 ¡¨â ). <20> ¯à¨¬¥à, ¤«ï HDD #81: #80 - ⨯ ¤à ©¢ , 1 - ­®¬¥à ¤à ©¢ 
.loop: LD (HL),C ; ­®¬¥à «®£.¤à ©¢  í⮣® ãáâனá⢠
INC HL
LD (HL),E ; de= ¤à¥á ®¡à ¡®â稪 
INC HL
@ -269,5 +269,4 @@ MAKEDVC: LD C,A
; DW HDDRIVE ; HDD I
; DB #07
; DW HDDRIVE ; HDD J
; DB #FF
; DB #FF

View File

@ -12,7 +12,7 @@
;---------------------------------------------------------------
; CLEAR TEXT WINDOW
CLEAR LD C,BIOS.LP_CLS_WIN2
CLEAR: LD C,BIOS.LP_CLS_WIN2
RST ToBIOS
AND A
RET
@ -20,7 +20,7 @@ CLEAR LD C,BIOS.LP_CLS_WIN2
; PRINT NULL-TERMINATED CHARS STRING
; HL - STRING POINTER
PCHARS LD A,(HL)
PCHARS: LD A,(HL)
INC HL
OR A
RET Z

View File

@ -1 +1 @@
43
114

View File

@ -12,11 +12,13 @@
DEFINE TABisSPACES 1
DEFINE CLASSIC_CURSOR 0
DEFINE SAVE_PATH_MACRO 0
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
;
;-------------------[MEMORY]-------------------------;
DEFINE USING_MEMPAGES 4
DEFINE OLD_SET_BANK 0
PORTAL.RSTx18_SWITCH_ADDRESS #82
; ªíè ᯨ᪠ ª â «®£ 
DIRPAGE EQU 0
FATPAGE EQU 1

@ -1 +1 @@
Subproject commit 94cb0e39f321bd11519008801187d93eacb280f2
Subproject commit b25c3779d6af8abc2970d3a9a55006f43292c86e