mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
INITDVC: проверка на выход за границы в DEVICE, LOGDRV, RAMDTBL. Оптимизации.
This commit is contained in:
parent
91b1e90517
commit
ca947dec92
@ -441,17 +441,50 @@ INITDVC_RET_DRIVE:
|
|||||||
INCLUDE 'dss/media_drivers/fdd-drv.asm'
|
INCLUDE 'dss/media_drivers/fdd-drv.asm'
|
||||||
INCLUDE 'dss/media_drivers/ram_disk-drv.asm'
|
INCLUDE 'dss/media_drivers/ram_disk-drv.asm'
|
||||||
|
|
||||||
DEVICE_CFG:
|
;
|
||||||
|
;------------------------[shared-drv.asm table]------------------------;
|
||||||
|
DEVICE: ;BLOCK DSS_MAX_DRIVES_AMOUNT * .TBL_Entry,#FF
|
||||||
|
.TBL_Entry EQU 3
|
||||||
|
.Size: EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry ;DB #FF
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;-------------------------[ IDE-DRV.ASM table]-------------------------;
|
||||||
|
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
;+01 LONG SECTOR OFFSET
|
||||||
|
;+05 LONG SIZE IN SECTORS
|
||||||
|
;+09 FREE
|
||||||
|
;+15
|
||||||
|
LOGDRV EQU $ + DEVICE.Size
|
||||||
|
.TBL_Entry EQU 16
|
||||||
|
.Size EQU .TBL_Entry * DSS_MAX_DRIVES_AMOUNT
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;-----------------------[ram_disk-drv.asm table]-----------------------;
|
||||||
|
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||||||
|
; Log Number: DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
|
||||||
|
RAMDTBL EQU $ + DEVICE.Size + LOGDRV.Size
|
||||||
|
.TBL_Entry EQU 2
|
||||||
|
.Size EQU .TBL_Entry * MAX_RAMDRIVES
|
||||||
|
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
||||||
|
; DB #FF
|
||||||
|
; EDUP
|
||||||
|
; .Size EQU $-RAMDTBL
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
DRV_TEMP_BUFFER:
|
DRV_TEMP_BUFFER:
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
;
|
|
||||||
;---------[256 bytes stack for return pages of RST #18 callers]--------;
|
;---------[256 bytes stack for return pages of RST #18 callers]--------;
|
||||||
; #3F00 - #3FFF
|
; #3F00 - #3FFF
|
||||||
DRV_PAGE.RSTx18_RET_PAGES EQU #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"
|
; ASSERT ((#4000-DRV_TEMP_BUFFER-256) > (DEVICE.Size + LOGDRV.Size + RAMDTBL.Size)), "No space for DRV_TEMP_BUFFER in DRV-MAIN page"
|
||||||
; ENDMODULE
|
; ENDMODULE
|
||||||
; OUTEND
|
; OUTEND
|
||||||
;[END]
|
;[END]
|
||||||
|
|||||||
@ -207,22 +207,32 @@ RESR_H LD A,DSS_Error.drv.INVALID_COMMAND
|
|||||||
// Commands for restart #18 //
|
// Commands for restart #18 //
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
;!FIXIT ---------------------------------------------------------------------------[v]
|
;--------------------------------------------------------------------[v]
|
||||||
; c=0 Initialization
|
; c=0 Initialization
|
||||||
INIT_H: PUSH IY
|
INIT_H: PUSH IY
|
||||||
|
;!TEST ;[ ]
|
||||||
|
XOR A
|
||||||
|
LD (DRVCLC.count),A
|
||||||
|
; ‡ ç¨á⪠⠡«¨æë. <20>¥®¡ï§ ⥫ì®, ® ¬ «® «¨ çñ ¡ã¤¥â ¤ «ìè¥...
|
||||||
|
; LD HL,LOGDRV
|
||||||
|
; LD (HL),#FF
|
||||||
|
; LD DE,LOGDRV+1
|
||||||
|
; LD BC,LOGDRV.Size-1
|
||||||
|
; LDIR
|
||||||
|
;
|
||||||
LD HL,LOGDRV
|
LD HL,LOGDRV
|
||||||
LD (OFFSECT),HL
|
LD (OFFSECT),HL
|
||||||
|
|
||||||
; IN A,(SLOT2)
|
|
||||||
; PUSH AF
|
|
||||||
; IN A,(SLOT0)
|
|
||||||
; OUT (SLOT2),A
|
|
||||||
|
|
||||||
;LD IX,DEVICE_CFG+#8000 ; ¬®£«® § áà âì ¯ ¬ïâì
|
|
||||||
LD IX,SYS_PAGE.TMP_BUFFER
|
LD IX,SYS_PAGE.TMP_BUFFER
|
||||||
LD C,BIOS.DRV_LIST
|
LD C,BIOS.DRV_LIST
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
|
; DRV_LIST:
|
||||||
|
; +0 LEN
|
||||||
|
; +1 FDD COUNT
|
||||||
|
; +2 HDD COUNT
|
||||||
|
; +3 CDROM COUNT
|
||||||
|
; +4 RESERVED (28)
|
||||||
|
;
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
LD C,A
|
LD C,A
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
@ -246,86 +256,41 @@ NX_DVCI: PUSH BC
|
|||||||
INC C
|
INC C
|
||||||
JR C,NX_DVCI
|
JR C,NX_DVCI
|
||||||
DJNZ NX_DVCI
|
DJNZ NX_DVCI
|
||||||
|
|
||||||
|
|
||||||
; 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:
|
NO_HARDS:
|
||||||
POP IY
|
POP IY
|
||||||
LD HL,(OFFSECT)
|
;!TEST
|
||||||
LD DE,LOGDRV
|
; LD HL,(OFFSECT)
|
||||||
XOR A
|
; LD DE,LOGDRV
|
||||||
SBC HL,DE
|
; XOR A
|
||||||
RET Z
|
; SBC HL,DE
|
||||||
LD DE,LD_DSK
|
; RET Z
|
||||||
DRVCLC: INC A
|
; LD DE,LOGDRV.TBL_Entry
|
||||||
SBC HL,DE
|
DRVCLC: ; INC A
|
||||||
JR NZ,DRVCLC
|
; SBC HL,DE
|
||||||
|
; JR NZ,DRVCLC
|
||||||
|
;
|
||||||
|
.count+1: LD A,0
|
||||||
|
;
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
;---------------------------------------------------------------------[^]
|
||||||
|
|
||||||
;DEVICE_CFG EQU #4000 ;!TEST
|
; ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
;DEVICE_CFG EQU DRV_TEMP_BUFFER ;!TEST
|
; ;+01 LONG SECTOR OFFSET
|
||||||
; DB 0 ;LEN
|
; ;+05 LONG SIZE IN SECTORS
|
||||||
; DB 0 ;FDD COUNT
|
; ;+09 FREE
|
||||||
; DB 0 ;HDD COUNT
|
; ;+15
|
||||||
; DB 0 ;CDROM COUNT
|
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0 ;!FIXIT ¯¥à¥¥á⨠ª ¡ãä¥à ¬ ¢ ª®¥æ áâà ¨æë
|
||||||
; DS 28 ;RESERVED
|
; .TBL_Entry EQU 16
|
||||||
|
; .Size EQU $-LOGDRV
|
||||||
|
|
||||||
;+00 ;SECTORS PER TRACK
|
|
||||||
;+01 ;TRACKS PER CYLLINDER
|
|
||||||
;+02 ;RESERVED
|
|
||||||
;+03 ;HDD/DRIVE/LBA
|
|
||||||
;+04 ;SECTOR PER CYLINDER LOW
|
|
||||||
;+05 ;SECTOR PER CYLINDER HIGH
|
|
||||||
;+06 ;RESERVED
|
|
||||||
;+07 ;RESERVED
|
|
||||||
|
|
||||||
|
|
||||||
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
|
||||||
;+01 LONG SECTOR OFFSET
|
|
||||||
;+05 LONG SIZE IN SECTORS
|
|
||||||
;+09 FREE
|
|
||||||
;+15
|
|
||||||
LOGDRV: BLOCK .TBL_Entry * LD_DSK,0 ;!FIXIT ¯¥à¥¥á⨠ª ¡ãä¥à ¬ ¢ ª®¥æ áâà ¨æë
|
|
||||||
.TBL_Entry EQU 16
|
|
||||||
.Size EQU $-LOGDRV
|
|
||||||
|
|
||||||
SELHDD: PUSH DE
|
SELHDD: PUSH DE
|
||||||
PUSH BC
|
PUSH BC
|
||||||
PUSH HL
|
PUSH HL
|
||||||
;!TEST
|
;!TEST
|
||||||
; SLA A
|
; SLA A
|
||||||
;RLCA
|
; RLA
|
||||||
; SLA A
|
; SLA A
|
||||||
; LD L,A
|
; LD L,A
|
||||||
; LD H,0
|
; LD H,0
|
||||||
@ -428,7 +393,7 @@ HGETPRM:
|
|||||||
LD A,DSS_Error.drv.GENERAL_FAILURE
|
LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
SCF
|
SCF
|
||||||
RET NZ
|
RET NZ
|
||||||
|
;
|
||||||
PUSH IX
|
PUSH IX
|
||||||
PUSH IY
|
PUSH IY
|
||||||
LD H,0
|
LD H,0
|
||||||
@ -440,17 +405,15 @@ HGETPRM:
|
|||||||
LD C,L
|
LD C,L
|
||||||
LD IY,LOGDRV
|
LD IY,LOGDRV
|
||||||
ADD IY,BC
|
ADD IY,BC
|
||||||
|
|
||||||
;
|
;
|
||||||
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
;!TEST --------------------------------------------------------------------------------+
|
|
||||||
PUSH IY
|
PUSH IY
|
||||||
LD C,BIOS.DRV_GET_PAR
|
LD C,BIOS.DRV_GET_PAR
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
POP IY
|
POP IY
|
||||||
LD A,DSS_Error.drv.INVALID_DRIVE
|
LD A,DSS_Error.drv.INVALID_DRIVE
|
||||||
JR C,.error
|
JR C,.error
|
||||||
|
; ¯¥à¥â ᮢª ॣ¨áâ஢ á १ã«ìâ ⮬ ®â BIOS
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD C,E
|
LD C,E
|
||||||
LD E,D
|
LD E,D
|
||||||
@ -458,7 +421,6 @@ HGETPRM:
|
|||||||
LD A,B
|
LD A,B
|
||||||
LD B,D
|
LD B,D
|
||||||
EXX
|
EXX
|
||||||
|
|
||||||
; SECTORS ON LOGICAL DISK
|
; SECTORS ON LOGICAL DISK
|
||||||
LD E,(IY+5)
|
LD E,(IY+5)
|
||||||
LD D,(IY+6)
|
LD D,(IY+6)
|
||||||
@ -468,37 +430,7 @@ HGETPRM:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
EX AF,AF'
|
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
|
AND A
|
||||||
.error: POP IY
|
.error: POP IY
|
||||||
POP IX
|
POP IX
|
||||||
@ -632,12 +564,6 @@ HIGHDOS:
|
|||||||
LD (IX+2),D
|
LD (IX+2),D
|
||||||
LD (IX+3),L
|
LD (IX+3),L
|
||||||
LD (IX+4),H
|
LD (IX+4),H
|
||||||
; LD DE,(CURSECL)
|
|
||||||
; LD HL,(CURSECH)
|
|
||||||
; LD (IX+1),E ;START DISK
|
|
||||||
; LD (IX+2),D
|
|
||||||
; LD (IX+3),L
|
|
||||||
; LD (IX+4),H
|
|
||||||
LD E,(IY+12)
|
LD E,(IY+12)
|
||||||
LD D,(IY+13)
|
LD D,(IY+13)
|
||||||
LD L,(IY+14)
|
LD L,(IY+14)
|
||||||
@ -646,18 +572,48 @@ HIGHDOS:
|
|||||||
LD (IX+6),D
|
LD (IX+6),D
|
||||||
LD (IX+7),L
|
LD (IX+7),L
|
||||||
LD (IX+8),H
|
LD (IX+8),H
|
||||||
|
;!TEST <09>®¤áâà 客ª ®â ¯¥à¥¯®«¥¨ï â ¡«¨æë LOGDRV
|
||||||
|
LD A,(DRVCLC.count)
|
||||||
|
INC A
|
||||||
|
CP DSS_MAX_DRIVES_AMOUNT+1
|
||||||
|
RET NC
|
||||||
|
LD (DRVCLC.count),A
|
||||||
|
;
|
||||||
LD A,(DRV_NUM)
|
LD A,(DRV_NUM)
|
||||||
LD (IX+0),A
|
LD (IX+0),A
|
||||||
LD DE,LD_DSK ; DSKITEM
|
LD DE,LOGDRV.TBL_Entry ;DSKITEM
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
LD (OFFSECT),IX
|
LD (OFFSECT),IX
|
||||||
NXTPART LD DE,#10
|
NXTPART:
|
||||||
|
LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
|
||||||
ADD IY,DE
|
ADD IY,DE
|
||||||
POP BC
|
POP BC
|
||||||
DJNZ DOSAGA
|
DJNZ DOSAGA
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
NOEXTDS:
|
||||||
|
CP #0F
|
||||||
|
JR Z,SUBLEV
|
||||||
|
CP #0E
|
||||||
|
JR Z,HIGHDOS
|
||||||
|
CP 6
|
||||||
|
JR Z,HIGHDOS
|
||||||
|
CP 4
|
||||||
|
JR Z,MEDIDOS
|
||||||
|
CP 1
|
||||||
|
JR Z,EASYDOS
|
||||||
|
POP BC
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
NODEFIN:
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
PARTIT: IN A,(SLOT3)
|
PARTIT: IN A,(SLOT3)
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD A,SHARED_PAGE
|
LD A,SHARED_PAGE
|
||||||
@ -667,28 +623,31 @@ PARTIT: IN A,(SLOT3)
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
PARTIT1 LD IX,0
|
PARTIT1:
|
||||||
|
LD IX,0
|
||||||
LD DE,0
|
LD DE,0
|
||||||
LD (EXTDOSL),DE ;R01
|
LD (EXTDOSL),DE ;R01
|
||||||
LD (EXTDOSH),IX ;R01
|
LD (EXTDOSH),IX ;R01
|
||||||
PARTIT2 LD (CURSECL),DE
|
PARTIT2:
|
||||||
|
LD (CURSECL),DE
|
||||||
LD (CURSECH),IX
|
LD (CURSECH),IX
|
||||||
CALL LOADSEC
|
CALL LOADSEC
|
||||||
;!TEST
|
;!TEST
|
||||||
;RET C ; for absent drive
|
;RET C ; for absent drive
|
||||||
;
|
;
|
||||||
LD HL,(PART+510) ;!HARDCODE
|
LD HL,(PART+510) ;!HARDCODE Signature word
|
||||||
LD DE,#AA55
|
LD DE,#AA55
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NZ,NODEFIN
|
JR NZ,NODEFIN
|
||||||
LD IY,PART+#01BE ;!HARDCODE
|
;
|
||||||
LD B,4
|
LD IY,PART+#01BE ;!HARDCODE MBR: Offset of partition table in the MBR
|
||||||
DOSAGA PUSH BC
|
LD B,4 ;!HARDCODE MBR: Number of entries in the partition table
|
||||||
|
DOSAGA: PUSH BC
|
||||||
LD A,(IY+4)
|
LD A,(IY+4)
|
||||||
CP 5
|
CP 5
|
||||||
JR NZ,NOEXTDS
|
JR NZ,NOEXTDS
|
||||||
SUBLEV PUSH IY
|
SUBLEV: PUSH IY
|
||||||
LD DE,(CURSECL)
|
LD DE,(CURSECL)
|
||||||
LD IX,(CURSECH)
|
LD IX,(CURSECH)
|
||||||
PUSH DE
|
PUSH DE
|
||||||
@ -701,22 +660,7 @@ SUBLEV PUSH IY
|
|||||||
CALL LOADSEC
|
CALL LOADSEC
|
||||||
POP IY
|
POP IY
|
||||||
JP NXTPART
|
JP NXTPART
|
||||||
NOEXTDS CP #0F
|
;
|
||||||
JP Z,SUBLEV
|
|
||||||
CP #0E
|
|
||||||
JP Z,HIGHDOS
|
|
||||||
CP 6
|
|
||||||
JP Z,HIGHDOS
|
|
||||||
CP 4
|
|
||||||
JP Z,MEDIDOS
|
|
||||||
CP 1
|
|
||||||
JP Z,EASYDOS
|
|
||||||
POP BC
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
NODEFIN SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
EXTDOS: LD HL,(EXTDOSL)
|
EXTDOS: LD HL,(EXTDOSL)
|
||||||
LD DE,(EXTDOSH)
|
LD DE,(EXTDOSH)
|
||||||
LD A,L
|
LD A,L
|
||||||
@ -732,8 +676,9 @@ EXTDOS: LD HL,(EXTDOSL)
|
|||||||
LD (EXTDOSH),HL
|
LD (EXTDOSH),HL
|
||||||
LD IX,(EXTDOSH)
|
LD IX,(EXTDOSH)
|
||||||
JP PARTIT2
|
JP PARTIT2
|
||||||
|
;
|
||||||
EXTDOS2 LD IX,(EXTDOSL)
|
EXTDOS2:
|
||||||
|
LD IX,(EXTDOSL)
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
PUSH IX
|
PUSH IX
|
||||||
LD DE,(EXTDOSH)
|
LD DE,(EXTDOSH)
|
||||||
@ -743,7 +688,8 @@ EXTDOS2 LD IX,(EXTDOSL)
|
|||||||
POP DE
|
POP DE
|
||||||
JP PARTIT2
|
JP PARTIT2
|
||||||
|
|
||||||
LOADSEC PUSH IY
|
LOADSEC:
|
||||||
|
PUSH IY
|
||||||
LD IX,(CURSECL)
|
LD IX,(CURSECL)
|
||||||
LD HL,(CURSECH)
|
LD HL,(CURSECH)
|
||||||
LD DE,PART
|
LD DE,PART
|
||||||
|
|||||||
@ -311,9 +311,15 @@ INIT_RD:
|
|||||||
; JR NC,.loop
|
; JR NC,.loop
|
||||||
; LD (S_P_P),A
|
; LD (S_P_P),A
|
||||||
|
|
||||||
|
; ‡ ç¨á⪠⠡«¨æë. <20>¥®¡ï§ ⥫ì®, ® ¬ «® «¨ çñ ¡ã¤¥â ¤ «ìè¥... ;[ ]
|
||||||
|
; LD HL,RAMDTBL
|
||||||
|
; LD (HL),#FF
|
||||||
|
; LD DE,RAMDTBL+1
|
||||||
|
; LD BC,RAMDTBL.Size-1
|
||||||
|
; LDIR
|
||||||
|
|
||||||
LD BC,#0*256 + BIOS.GET_RAMD_ST ; <20>®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª , § 祮£® RAM-Disk
|
LD BC,#0*256 + BIOS.GET_RAMD_ST ; <20>®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª , § 祮£® RAM-Disk
|
||||||
LD DE,RAMDTBL
|
LD DE,RAMDTBL
|
||||||
|
|
||||||
.initLoop:
|
.initLoop:
|
||||||
PUSH BC
|
PUSH BC
|
||||||
LD A,B
|
LD A,B
|
||||||
@ -346,15 +352,15 @@ INIT_RD:
|
|||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;!TODO ¢®âªãâì í⨠¢á直¥ â ¡«¨æë ¢ ª®¥æ ä ©« ¨ ªâ¨¢¨à®¢ âì ª ª áâàãªâãàë, ç⮡ ¡¨ ਪ ¬¥ìè¥ ¢¥á¨«
|
; ;
|
||||||
; ’€<EFBFBD>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
; ; ’€<EFBFBD>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||||||
; Log Number: DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
|
; ; Log Number: DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
|
||||||
RAMDTBL.TBL_Entry EQU 2
|
; RAMDTBL.TBL_Entry EQU 2
|
||||||
RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
||||||
DB #FF
|
; DB #FF
|
||||||
EDUP
|
; EDUP
|
||||||
.Size EQU $-RAMDTBL
|
; .Size EQU $-RAMDTBL
|
||||||
;
|
; ;
|
||||||
|
|
||||||
|
|
||||||
; 00 - GET DEVICE PARAMETERS
|
; 00 - GET DEVICE PARAMETERS
|
||||||
@ -461,8 +467,8 @@ IOCTL_RD:
|
|||||||
; RET
|
; RET
|
||||||
|
|
||||||
GET_RAMDRV_NUM:
|
GET_RAMDRV_NUM:
|
||||||
|
ADD A,A
|
||||||
LD BC,RAMDTBL
|
LD BC,RAMDTBL
|
||||||
SLA A
|
|
||||||
ADD A,C
|
ADD A,C
|
||||||
LD C,A
|
LD C,A
|
||||||
LD A,0
|
LD A,0
|
||||||
|
|||||||
@ -162,9 +162,9 @@ NODEV: POP BC
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
PDEVICE DW DEVICE
|
PDEVICE DW DEVICE
|
||||||
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT*.TBL_Entry,#FF
|
; DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT * .TBL_Entry,#FF
|
||||||
.Size: DB #FF
|
; .Size: DB #FF
|
||||||
.TBL_Entry EQU 3
|
; .TBL_Entry EQU 3
|
||||||
|
|
||||||
FLOPPY EQU #0001
|
FLOPPY EQU #0001
|
||||||
FIXED EQU #0002
|
FIXED EQU #0002
|
||||||
@ -210,6 +210,12 @@ INITDVC: XOR A
|
|||||||
LD (DRV_PAGE.LDRIVE),A ; á¡à. ï祩ªã
|
LD (DRV_PAGE.LDRIVE),A ; á¡à. ï祩ªã
|
||||||
LD HL,DEVICE
|
LD HL,DEVICE
|
||||||
LD (PDEVICE),HL ; ¢®ááâ. ï祩ªã
|
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 ¤¥¢ ©áë
|
; FDD ¤¥¢ ©áë
|
||||||
CALL FDDRIVE.INIT ; ã§ âì ç¨á«® FDD-¤¥¢ ©á®¢
|
CALL FDDRIVE.INIT ; ã§ âì ç¨á«® FDD-¤¥¢ ©á®¢
|
||||||
LD DE,FDDRIVE ; ¤à¥á ®¡à ¡®â稪 ⥪. ¤¥¢ ©á
|
LD DE,FDDRIVE ; ¤à¥á ®¡à ¡®â稪 ⥪. ¤¥¢ ©á
|
||||||
@ -232,10 +238,19 @@ MAKEDVC: LD C,A
|
|||||||
LD HL,DRV_PAGE.LDRIVE ; ï祩ª ®¬¥à ¯®á«. ¤¨áª
|
LD HL,DRV_PAGE.LDRIVE ; ï祩ª ®¬¥à ¯®á«. ¤¨áª
|
||||||
ADD A,(HL)
|
ADD A,(HL)
|
||||||
LD (HL),A
|
LD (HL),A
|
||||||
LD A,C
|
;!TEST ;[ ] ®¯â¨¬¨§¨à®¢ âì ¡ë«® «¥ì
|
||||||
LD C,0 ; á¡à.
|
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
|
OR A
|
||||||
RET Z ; ¥â ¤¥¢ ©á®¢
|
RET Z ; ¥â ¤¥¢ ©á®¢
|
||||||
|
2: LD C,0 ; á¡à.
|
||||||
LD HL,(PDEVICE) ; ⥪. ¯®«®¦. ¢ â ¡«¨æ¥
|
LD HL,(PDEVICE) ; ⥪. ¯®«®¦. ¢ â ¡«¨æ¥
|
||||||
.loop: LD (HL),C ; ®¬¥à «®£.¤à ©¢ í⮣® ãáâனáâ¢
|
.loop: LD (HL),C ; ®¬¥à «®£.¤à ©¢ í⮣® ãáâனáâ¢
|
||||||
INC HL
|
INC HL
|
||||||
|
|||||||
180
DSS/NScanDRV.ASM
Normal file
180
DSS/NScanDRV.ASM
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
; !TODO § ¯®¬¨ âì ¯à¥àë¢ ¨ï, ®âª«îç âì áâ àâ¥, ¢®ááâ ¢«¨¢ âì ¢ë室¥
|
||||||
|
SCANDRV:
|
||||||
|
;1 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||||||
|
; LD A,(LDRIVE)
|
||||||
|
; LD (.old_ldrive),A
|
||||||
|
; LD A,(FATCASH.Update)
|
||||||
|
; OR A
|
||||||
|
; CALL NZ,WR_FAT
|
||||||
|
|
||||||
|
CALL GETBOOT
|
||||||
|
LD (.old_letter),A ; bootdisk Log.number
|
||||||
|
; [-----------]
|
||||||
|
|
||||||
|
;2 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||||||
|
; A = bootdisk Log.number
|
||||||
|
LD DE,Dss.DRV.GenIOCTL.Enter
|
||||||
|
LD BC,Dss.DRV.GenIOCTL.GetParams
|
||||||
|
RST ToDSS.DRV
|
||||||
|
EX AF,AF'
|
||||||
|
LD (.old_DRIVE_ID),A
|
||||||
|
; [-----------]
|
||||||
|
|
||||||
|
|
||||||
|
;3 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||||||
|
;!TEST ¢ DRV-MAIN ¬®£ãâ ¡ëâì ¯à®¡«¥¬ë á ¯à¥àë¢ ¨ï¬¨
|
||||||
|
;DI
|
||||||
|
LD A,Dss.DRV.RescanDRV
|
||||||
|
LD C,Dss.DRV.RescanDRV
|
||||||
|
RST ToDSS.DRV
|
||||||
|
LD (LDRIVE),A
|
||||||
|
;EI
|
||||||
|
;
|
||||||
|
; [-----------]
|
||||||
|
|
||||||
|
;4 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||||||
|
.old_DRIVE_ID+1:
|
||||||
|
LD A,0
|
||||||
|
CALL SETBOOT
|
||||||
|
JR C,.ERROR_BOOTDRV_DIES
|
||||||
|
LD (.new_letter),A
|
||||||
|
;
|
||||||
|
LD A,(.old_letter)
|
||||||
|
LD (BOOTDRV),A
|
||||||
|
;
|
||||||
|
|
||||||
|
;5 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||||||
|
AND A
|
||||||
|
LD A,R
|
||||||
|
PUSH AF
|
||||||
|
DI
|
||||||
|
;;;;;;;;
|
||||||
|
IN A,(SLOT3)
|
||||||
|
LD (.restore_page),A
|
||||||
|
LD A,(DRV_PG_NUMBER)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;;;;;
|
||||||
|
|
||||||
|
; ¢ëç¨á«ï¥¬ ᬥ饨¥ bootdisk ¢ ®¢®© â ¡«¨æ¥ DEVICE
|
||||||
|
.new_letter+1:
|
||||||
|
LD A,0
|
||||||
|
CALL .get_entry_addr
|
||||||
|
PUSH HL
|
||||||
|
; á®åà 塞 § ç¥¨ï ®¢®£® boot
|
||||||
|
LD DE,.TMP_BUFFER
|
||||||
|
LD BC,DEVICE.TBL_Entry
|
||||||
|
LDIR
|
||||||
|
; ¢ëç¨á«ï¥¬ ᬥ饨¥ ¤«ï ¡ãª¢ë áâ ண® bootdisk ¢ ®¢®© â ¡«¨æ¥ DEVICE
|
||||||
|
.old_letter+1:
|
||||||
|
LD A,0
|
||||||
|
CALL .get_entry_addr
|
||||||
|
; ¬¥ï¥¬ ¡ãª¢ã ¤¨áª ¤«ï ¤¥¢ ©á § ï¢è¥£® áâ àãî ¡ãª¢ã bootdisk
|
||||||
|
POP DE
|
||||||
|
LD BC,DEVICE.TBL_Entry
|
||||||
|
LDIR
|
||||||
|
; ¢®ááâ ¢«¨¢ ¥¬ bootdisk áâ ஥ ¬¥áâ®
|
||||||
|
DEC HL
|
||||||
|
LD DE,.TMP_BUFFER + DEVICE.TBL_Entry-1
|
||||||
|
LD BC,DEVICE.TBL_Entry
|
||||||
|
EX DE,HL
|
||||||
|
LDDR
|
||||||
|
; ¯à®¢¥à塞, ¥ 㢥«¨ç¨«®áì «¨ § 票¥ LDRIVE
|
||||||
|
;!TEST
|
||||||
|
LD HL,.old_letter
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
CP (HL)
|
||||||
|
JR NC,.no_change_LDRIVE
|
||||||
|
LD A,(HL)
|
||||||
|
LD (LDRIVE),A
|
||||||
|
;
|
||||||
|
; .old_ldrive+1:
|
||||||
|
;LD L,0
|
||||||
|
;LD A,(LDRIVE)
|
||||||
|
;CP L
|
||||||
|
;JR NC,.no_change_LDRIVE
|
||||||
|
;LD A,L
|
||||||
|
;LD (LDRIVE),A
|
||||||
|
;
|
||||||
|
.no_change_LDRIVE:
|
||||||
|
;
|
||||||
|
; DEC A
|
||||||
|
; CALL DISKINF
|
||||||
|
; LD A,(BOOTDRV)
|
||||||
|
; CALL CHNDISK
|
||||||
|
;;;;;
|
||||||
|
.restore_page+1:
|
||||||
|
LD A,0
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;;;;;;;;
|
||||||
|
POP AF
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
.ERROR_BOOTDRV_DIES:
|
||||||
|
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_OPEN_S
|
||||||
|
LD E,0
|
||||||
|
RST ToBIOS
|
||||||
|
|
||||||
|
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
|
||||||
|
LD DE,0
|
||||||
|
LD HL,#2050
|
||||||
|
RST ToBIOS
|
||||||
|
|
||||||
|
LD A,1
|
||||||
|
OUT (RGMOD),A ; set scr-2
|
||||||
|
|
||||||
|
LD HL,.ERROR_MSG
|
||||||
|
LD DE,#A000
|
||||||
|
LD BC,.ERROR_MSG.size
|
||||||
|
LD A,C
|
||||||
|
LDIR
|
||||||
|
|
||||||
|
LD DE,#10*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16
|
||||||
|
LD C,BIOS.LP_SET_PLACE
|
||||||
|
RST ToBIOS
|
||||||
|
|
||||||
|
LD HL,#A000
|
||||||
|
LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE
|
||||||
|
LD B,A
|
||||||
|
LD C,BIOS.LP_PRINT_LINE3
|
||||||
|
RST ToBIOS
|
||||||
|
|
||||||
|
.loop: DI
|
||||||
|
; .loop: LD A,R
|
||||||
|
; AND 7
|
||||||
|
; OUT (BorderColor),A
|
||||||
|
HALT
|
||||||
|
JR .loop
|
||||||
|
|
||||||
|
.ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET."
|
||||||
|
.ERROR_MSG.size EQU $-.ERROR_MSG
|
||||||
|
.get_entry_addr:
|
||||||
|
_CALC_DEVICE_ENTRY DEVICE + #C000
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.TMP_BUFFER: BLOCK 3,#FF
|
||||||
|
|
||||||
|
; .old_letter: DB #FF
|
||||||
|
; .old_DRIVE_ID: DB #FF
|
||||||
|
; .new_letter: DB #FF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
;+01 LONG SECTOR OFFSET
|
||||||
|
;+05 LONG SIZE IN SECTORS
|
||||||
|
;+09 LONG Volume Serial Number in HEX ; [ ] ;!TODO
|
||||||
|
;+13 WORD FREE
|
||||||
|
;+15 BYTE FREE
|
||||||
|
|
||||||
|
LOGDRV: BLOCK .TBL_Entry*LD_DSK,0 ; ld_dsk = 16
|
||||||
|
.TBL_Entry EQU 16
|
||||||
|
.Size EQU $-LOGDRV
|
||||||
|
|
||||||
|
|
||||||
|
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT * .TBL_Entry,#FF
|
||||||
|
.Size: DB #FF
|
||||||
|
.TBL_Entry EQU 3
|
||||||
|
*/
|
||||||
@ -1 +1 @@
|
|||||||
302
|
312
|
||||||
@ -8,7 +8,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
LD_DSK EQU 16 ; ¬ ͺᨬ «μ<EFBFBD>₯ ͺ<EFBFBD>«¨η₯αβ’<EFBFBD> «<EFBFBD>£¨η₯αͺ¨ε HDD €¨αͺ<EFBFBD>’ ’ α¨αβ₯¬₯
|
;LD_DSK EQU 16 ; ¬ ͺᨬ «μ<EFBFBD>₯ ͺ<EFBFBD>«¨η₯αβ’<EFBFBD> «<EFBFBD>£¨η₯αͺ¨ε HDD €¨αͺ<EFBFBD>’ ’ α¨αβ₯¬₯
|
||||||
DSS_MAX_DRIVES_AMOUNT EQU 26
|
DSS_MAX_DRIVES_AMOUNT EQU 26
|
||||||
DEFINE MAX_RAMDRIVES 16
|
DEFINE MAX_RAMDRIVES 16
|
||||||
DEFINE NeedSafePort_Y 1
|
DEFINE NeedSafePort_Y 1
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit a4f102897a7fa7488c1e64cf8329f5659c6b0d6b
|
Subproject commit 6eacd6475231a504fae4ed03a12f5cd1cb166ac0
|
||||||
Loading…
Reference in New Issue
Block a user