Estex-DSS/DSS/drivers/media/Shared.asm

305 lines
7.0 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;[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
; SUBCOMMAND
;----------------------
; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK
; 02 - TEST TRACK
; 03 - GET MORE DEVICE PARAMETERS
; 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
;-------------------------------------------------
GET_LOGDRV_ENTRY:
LOGDRV_ENTRY
RET
;-------------------------------------------------
;-------------------------------------------------
CONVERT_SECTOR_SIZE:
LD A,XH
LD E,XL
RL E
RLA
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