mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
288 lines
6.7 KiB
NASM
288 lines
6.7 KiB
NASM
;[BEGIN]
|
||
;//MODULE: Shared AUTHOR: Denis Parinov
|
||
;//CREATE: A LONG TIME AGO :)
|
||
;---------------------------------------------------------------
|
||
;Rev Date Name Description
|
||
;R01 17-04-2023 BAO „®¡ ¢«¥ ¯à®æ¥¤ãà INITDVC_RET_DRIVE ¨ ¨§¬¥¥ INTDISK ¤«ï ¯®¤¤¥à¦ª¨ à¥áª ¤à ©¢®¢
|
||
;---------------------------------------------------------------
|
||
|
||
|
||
|
||
; DISK DRIVER SPECIFICATION
|
||
; !FIXIT ¥ª®à४â ï!
|
||
;---------------------------------------------
|
||
; COMMAND 00h (INITIALIZATION)
|
||
;
|
||
; INPUT: A - DRIVE LETTER
|
||
; IX - ENVIRONMENT
|
||
; RETURN: A - AMOUNT DRIVE SUPPORT
|
||
; HL - LENGTH DRIVER
|
||
;---------------------------------------------
|
||
; COMMAND 01h (OPEN)
|
||
;
|
||
; INPUT: A - DRIVE
|
||
;
|
||
;---------------------------------------------
|
||
; COMMAND 02h (CLOSE)
|
||
;
|
||
; INPUT: A - DRIVE
|
||
; RETURN: A -
|
||
;---------------------------------------------
|
||
; COMMAND 03h (MEDIA CHECK)
|
||
;
|
||
; INPUT: A - DRIVE
|
||
; RETURN: A - 00h - OLD DISK, 0FFh - NEW DISK
|
||
;---------------------------------------------
|
||
; COMMAND 04h (GET BPB)
|
||
;
|
||
; INPUT: HL - ADDRESS
|
||
; A - DRIVE
|
||
;---------------------------------------------
|
||
; COMMAND 05h (INPUT)
|
||
;
|
||
; INPUT: IX:DE - ABSOLUTE SECTOR
|
||
; HL - MEMORY ADDRESS
|
||
; B - SECTORS COUNT
|
||
; A - DRIVE
|
||
;---------------------------------------------
|
||
; COMMAND 06h (OUTPUT)
|
||
;
|
||
; INPUT: IX:DE - ABSOLUTE SECTOR
|
||
; HL - MEMORY ADDRESS
|
||
; B - SECTORS COUNT
|
||
; A - DRIVE
|
||
;---------------------------------------------
|
||
; COMMAND 07h (REMOVABLE)
|
||
;
|
||
; INPUT: A - DRIVE
|
||
; RETURN: A = 0 - REMOVABLE
|
||
; A = 1 - NONREMOVABLE
|
||
;---------------------------------------------
|
||
; COMMAND 08h (GENERIC IOCTL)
|
||
;
|
||
; INPUT: A - DRIVE
|
||
; B - SUBCOMMAND
|
||
; DE - MAGIC NUMBER (55AAh)
|
||
; SUBCOMMAND
|
||
;----------------------
|
||
; 00 - GET DEVICE PARAMETERS
|
||
; 01 - READ TRACK
|
||
; 02 - TEST TRACK
|
||
; 80 - SET DEVICE PARAMETERS
|
||
; 81 - WRITE TRACK
|
||
; 82 - FORMAT TRACK
|
||
;---------------------------------------------
|
||
;
|
||
; ERRORS:
|
||
; 0 - NO ERRORS
|
||
; 1 - BAD COMMAND
|
||
; 2 - BAD DRIVE NUMBER
|
||
; 3 - UNKNOW FORMAT
|
||
; 4 - NOT READY
|
||
; 5 - SEEK ERROR
|
||
; 6 - SECTOR NOT FOUND
|
||
; 7 - CRC ERROR
|
||
; 8 - WRITE PROTECT
|
||
; 9 - READ ERROR
|
||
; 10 - WRITE ERROR
|
||
; 11 - FAILURE
|
||
; 12 - BUSY (DEVICE OPENED)
|
||
; 13 - RESERVED
|
||
|
||
;INTDISK PUSH HL
|
||
; PUSH BC
|
||
; LD HL,DEVICE
|
||
; INC A
|
||
;INTD001 DEC A
|
||
; JP Z,YEP
|
||
; LD C,(HL)
|
||
; INC C
|
||
; INC HL
|
||
; INC HL
|
||
; INC HL
|
||
; JP NZ,INTD001
|
||
; POP BC
|
||
; POP HL
|
||
; LD A,2
|
||
; SCF
|
||
; RET
|
||
|
||
;YEP LD A,(HL)
|
||
; INC HL
|
||
; LD C,(HL)
|
||
; INC HL
|
||
; LD H,(HL)
|
||
; LD L,C
|
||
; POP BC
|
||
; EX (SP),HL
|
||
; RET
|
||
|
||
|
||
;-----------------------------------------------------------
|
||
; <20>à®áª ¨à®¢ âì á¨á⥬ã FDD/HDD ¤¥¢ ©áë ¨ RAM-¤¨áª¨
|
||
;-----------------------------------------------------------
|
||
INITDVC: XOR A
|
||
LD (DRV_PAGE.LDRIVE),A ; á¡à. ï祩ªã
|
||
LD HL,DEVICE
|
||
LD (PDEVICE),HL ; ¢®ááâ. ï祩ªã
|
||
; ‡ ç¨á⪠⠡«¨æ. <20>¥®¡ï§ ⥫ì®, ® ¬ «® «¨ çñ ¡ã¤¥â ¤ «ìè¥... ;[ ]
|
||
LD HL,DEVICE
|
||
LD (HL),#FF
|
||
LD DE,DEVICE+1
|
||
LD BC,DEVICE.Size + LOGDRV.Size + RAMDTBL.Size - 1
|
||
LDIR
|
||
; FDD ¤¥¢ ©áë
|
||
CALL FDD_DRV.Init ; ã§ âì ç¨á«® FDD-¤¥¢ ©á®¢
|
||
LD DE,FDD_DRV.API_TABLE ; ¤à¥á ®¡à ¡®â稪 ⥪. ¤¥¢ ©á
|
||
CALL MAKEDVC ; ¨¨æ. â ¡«¨æã ¯¥à¥å®¤®¢
|
||
; IDE ¤¥¢ ©áë
|
||
.if_old: CALL IDE_DRV.Init ; ¥á«¨ áâ à⥠¢¥àá¨ï BIOS ¥ ¯®¤å®¤¨â, â® £à㧨âìáï ¬®¦® ⮫쪮 á ¤¨áª¥âë, ¤«ï í⮣® âãâ § ¬¥ ª®¤ XOR A : RET
|
||
LD DE,IDE_DRV.API_TABLE
|
||
CALL MAKEDVC
|
||
; RAM-¤¨áª¨
|
||
CALL RAMDSK_DRV.Init
|
||
LD DE,RAMDSK_DRV.API_TABLE
|
||
CALL MAKEDVC
|
||
XOR A
|
||
RET
|
||
|
||
; ˆ¨æ¨¨à®¢ âì â ¡«¨æã ¯¥à¥å®¤®¢ ¤¥¢ ©á .
|
||
; ¢å®¤: de= ¤à¥á ®¡à ¡®â稪 ¤¥¢ ©á
|
||
; a=ç¨á«® ¤¥¢ ©á®¢ (0=¥â)
|
||
MAKEDVC: LD C,A
|
||
LD HL,DRV_PAGE.LDRIVE ; ï祩ª ®¬¥à ¯®á«. ¤¨áª
|
||
ADD A,(HL)
|
||
LD (HL),A
|
||
;!TEST ;[ ] ®¯â¨¬¨§¨à®¢ âì ¡ë«® «¥ì
|
||
CP DSS_MAX_DRIVES_AMOUNT+1
|
||
JR C,1F
|
||
LD (HL),DSS_MAX_DRIVES_AMOUNT
|
||
SUB DSS_MAX_DRIVES_AMOUNT
|
||
NEG
|
||
ADD C
|
||
JP 2F
|
||
;
|
||
1: LD A,C
|
||
OR A
|
||
RET Z ; ¥â ¤¥¢ ©á®¢
|
||
2: LD C,0 ; á¡à.
|
||
LD HL,(PDEVICE) ; ⥪. ¯®«®¦. ¢ â ¡«¨æ¥
|
||
.loop: LD (HL),C ; ®¬¥à «®£.¤à ©¢ í⮣® ãáâனáâ¢
|
||
INC HL
|
||
LD (HL),E ; de= ¤à¥á ®¡à ¡®â稪
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
INC C ; ++®¬¥à ¤à ©¢
|
||
DEC A
|
||
JR NZ,.loop
|
||
LD (PDEVICE),HL
|
||
DEC A
|
||
LD (HL),A
|
||
RET
|
||
|
||
|
||
;-------------------------------------------------
|
||
; RST 18h. ‚¥ªâ®à ¤¨áª®¢ëå ãáâனáâ¢
|
||
; ¢å®¤: a=®¬¥à ãáâனá⢠(0-25)
|
||
;-------------------------------------------------
|
||
INTDISK:
|
||
;R01
|
||
CP #FF
|
||
JR NZ,.noNeedRescan
|
||
CP C
|
||
JR Z,ReScanDRV
|
||
;
|
||
.noNeedRescan:
|
||
PUSH HL
|
||
PUSH BC
|
||
_CALC_DEVICE_ENTRY DEVICE
|
||
LD A,(HL)
|
||
CP #FF
|
||
JR Z,NODEV
|
||
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,BIOS.Error.BadNumber
|
||
SCF
|
||
RET
|
||
|
||
PDEVICE DW DEVICE
|
||
; DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT * .TBL_Entry,#FF
|
||
; .Size: DB #FF
|
||
; .TBL_Entry EQU 3
|
||
|
||
FLOPPY EQU #0001
|
||
FIXED EQU #0002
|
||
CDROM EQU #0004
|
||
NETWORK EQU #0008
|
||
|
||
;DISKS: DB 27 ;LENGTH DISK INFO
|
||
; DW FLOPPY ;DISK TYPE
|
||
; DB 2,"A:" ;DISK NAME
|
||
; DB 11,"NO NAME "
|
||
; DB 8,"FAT12 "
|
||
; DB #00 ;PHISICAL DRIVE NUMBER
|
||
;
|
||
; DB 27 ;LENGTH DISK INFO
|
||
; DW FLOPPY ;DISK TYPE
|
||
; DB 2,"B:" ;DISK NAME
|
||
; DB 11,"NO NAME "
|
||
; DB 8,"FAT12 "
|
||
; DB #01 ;PHISICAL DRIVE NUMBER
|
||
;
|
||
; DB 27 ;LENGTH DISK INFO
|
||
; DW FIXED ;DISK TYPE
|
||
; DB 2,"C:" ;DISK NAME
|
||
; DB 11,"NO NAME "
|
||
; DB 8,"FAT16 "
|
||
; DB #80 ;PHISICAL DRIVE NUMBER
|
||
;
|
||
; DB #00 ;END OF TABLE
|
||
;-----------------------------------------------------------------------
|
||
|
||
;R01
|
||
; INITDVC_RET_DRIVE:
|
||
; CALL INITDVC
|
||
; LD A,(DRV_PAGE.LDRIVE)
|
||
; AND A
|
||
; RET
|
||
;
|
||
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
// NEW RESCAN //
|
||
////////////////////////////////////////////////////////////////////////
|
||
INCLUDE 'ReScanDRV.ASM'
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;DEVICE DB #00
|
||
; DW FDDRIVE ; FDD A
|
||
; DB #01
|
||
; DW FDDRIVE ; FDD B
|
||
; DB #00
|
||
; DW HDDRIVE ; HDD C
|
||
; DB #01
|
||
; DW HDDRIVE ; HDD D
|
||
; DB #02
|
||
; DW HDDRIVE ; HDD E
|
||
; DB #03
|
||
; DW HDDRIVE ; HDD F
|
||
; DB #04
|
||
; DW HDDRIVE ; HDD G
|
||
; DB #05
|
||
; DW HDDRIVE ; HDD H
|
||
; DB #06
|
||
; DW HDDRIVE ; HDD I
|
||
; DB #07
|
||
; DW HDDRIVE ; HDD J
|
||
; DB #FF |