new SCANDRV in DSS. in SHELL fixed bug in READBAT proc.

This commit is contained in:
Anatoliy Belyanskiy 2023-09-28 05:08:25 +10:00
parent ca947dec92
commit 7bbdc8de36
19 changed files with 1040 additions and 264 deletions

View File

@ -1163,7 +1163,7 @@ A10AB: pop af
; 6 - ¯à¨­â¥à £®â®¢/¢ë¢®¤¨â ®ç¥à¥¤­®© ᨬ¢®« (1/0)
; 7 - ¯à¨­â¥à ᢮¡®¤¥­/§ ­ïâ (1/0)
;
; ¢å®¤: A - ᨬ¢®«
; ¢å®¤: A - ᨬ¢®«
; ¢ë室: B - ᨬ¢®«
; CF - ®è¨¡ª , A=¡ ©â á®áâ®ï­¨ï (¡¨âë 7..3)
;/////////////////////////////////////////////////////////////////////

View File

@ -1065,7 +1065,7 @@ DIRSIZE: WORD 0 ; ࠧ
; Œ áᨢ «®£. ­®¬¥à®¢ ¡ ­®ª à áè¨à¥­¨ï „Ž‘
BANKTBL: BLOCK USING_MEMPAGES,#FF
BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE

View File

@ -43,7 +43,7 @@ FM_BUF: _sFM
; ­  ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ­  ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
MACRO _mFM_FIND
CP FMCOUNT+1
CP FMCOUNT
JR NC,ABS_FM
PUSH DE
@ -63,7 +63,7 @@ FM_BUF: _sFM
SET_FM:
_mFM_FIND
LD A,0 ;!HARDCODE ­®¬¥à ®è¨¡ª¨
LD A,DSS_Error.sys.NO_ERROR
RET NZ
ABS_FM LD A,DSS_Error.sys.INVALID_HANDLE
SCF
@ -72,7 +72,7 @@ ABS_FM LD A,DSS_Error.sys.INVALID_HANDLE
RES_FM:
_mFM_FIND
LD A,5
LD A,DSS_Error.sys.INVALID_HANDLE
EXX
SCF
RET Z

View File

@ -570,8 +570,8 @@ BACK_CUR_PATH:
; ε<E28099>€: ­₯β
; λε<CEBB>€: A - ­<>¬₯ΰ ―<>α«₯€­₯£<E282AF> «<>£. €¨αͺ  α¨αβ₯¬₯
;///////////////////////////////////////////////////////////////////////
INCLUDE 'ScanDRV.asm'
; INCLUDE 'NScanDRV.asm'
; INCLUDE 'ScanDRV.asm'
INCLUDE 'NScanDRV.asm'
;///////////////////////////////////////////////////////////////////////
;

View File

@ -65,11 +65,13 @@ A0010: ;JP DRV_PAGE.RST_10 ;
; <[DRIVE API]> ;
BLOCK #18-$,#C7 ; #C7 - "RST 0" opcode
;A0018 JP INTDISK ;
A0018: PUSH AF ;
PUSH BC ;
A0018: ;PUSH AF ;
;PUSH BC ;
SCF
RET
DRV_PAGE.MAIN_PAGE_NUMBER+2: ;
LD BC,0*256 + SLOT0 ; !FIXIT á ­¥ ¤®«¦­ë ¢áâ ¢«ïâìáï ­®¬¥à  ¢ë¤¥«¥­­ëå áâà ­¨æ?
JP PORTAL.outDRV ;
;JP PORTAL.outDRV ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
@ -207,13 +209,13 @@ ADCALL+1: CALL DISPATCH ;
;!FIXIT çñâ ­¥ â® âãâ
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
LD B,#00; ;
OUT (C),A ;
;--- ;
POP BC ;
RET ;
PORTAL.outDRV: ;
RET ;
; LD B,#00; ;
; OUT (C),A ;
;--- ;
; POP BC ;
; RET ;
;PORTAL.outDRV: ;
; RET ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
@ -441,11 +443,13 @@ INITDVC_RET_DRIVE:
INCLUDE 'dss/media_drivers/fdd-drv.asm'
INCLUDE 'dss/media_drivers/ram_disk-drv.asm'
/////////////////////////// [ DRIVE TABLES ] \\\\\\\\\\\\\\\\\\\\\\\\\\\;
;
;------------------------[shared-drv.asm table]------------------------;
DEVICE: ;BLOCK DSS_MAX_DRIVES_AMOUNT * .TBL_Entry,#FF
DEVICE EQU $
.TBL_Entry EQU 3
.Size: EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry ;DB #FF
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
.End EQU DEVICE.Size + 1 ; ¤«ï á⮯-¡ ©â  #FF
;----------------------------------------------------------------------;
;
@ -456,17 +460,32 @@ DEVICE: ;BLOCK DSS_MAX_DRIVES_AMOUNT * .TBL_Entry,#FF
;+05 LONG SIZE IN SECTORS
;+09 FREE
;+15
LOGDRV EQU $ + DEVICE.Size
LOGDRV EQU DEVICE + DEVICE.End
.TBL_Entry EQU 16
.Size EQU .TBL_Entry * DSS_MAX_DRIVES_AMOUNT
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
; ‚•Ž„: L - «®£¨ç¥áª¨© ­®¬¥à ¢ â ¡«¨æ¥
; ‚›•Ž„: IY - ­ ç «® § ¯¨á¨
; <20>Ž<EFBFBD>ˆ: HL, IY. HL<-->DE
; MACRO LOGDRV_ENTRY_FIND tbl_addr
; LD H,0
; ADD HL,HL
; ADD HL,HL
; ADD HL,HL
; ADD HL,HL
; ;LD B,H
; ;LD C,L
; EX DE,HL
; LD IY,tbl_addr
; ADD IY,DE
; ENDM
;----------------------------------------------------------------------;
;
;
;-----------------------[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
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
RAMDTBL EQU LOGDRV + LOGDRV.Size
.TBL_Entry EQU 2
.Size EQU .TBL_Entry * MAX_RAMDRIVES
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
@ -475,10 +494,57 @@ RAMDTBL EQU $ + DEVICE.Size + LOGDRV.Size
; .Size EQU $-RAMDTBL
;----------------------------------------------------------------------;
;
////////////////////////////////////////////////////////////////////////;
///////////////////////// [ DRIVE TABLES COPY] \\\\\\\\\\\\\\\\\\\\\\\\\;
MODULE OLD_TABLES
;
;------------------------[shared-drv.asm table]------------------------;
DEVICE EQU @RAMDTBL + @RAMDTBL.Size
.TBL_Entry EQU @DEVICE.TBL_Entry
.Size: EQU @DEVICE.Size
.End EQU @DEVICE.End
;----------------------------------------------------------------------;
;
;
DRV_TEMP_BUFFER:
;-------------------------[ 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 + DEVICE.End
.TBL_Entry EQU @LOGDRV.TBL_Entry
.Size EQU @LOGDRV.Size
;----------------------------------------------------------------------;
;
;
;-----------------------[ram_disk-drv.asm table]-----------------------;
; <E28099>ˆ€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆŠ€ ˆ …ƒŽ RAM-DISK ID
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
RAMDTBL EQU LOGDRV + LOGDRV.Size
.TBL_Entry EQU @RAMDTBL.TBL_Entry
.Size EQU @RAMDTBL.Size
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
; DB #FF
; EDUP
; .Size EQU $-RAMDTBL
;----------------------------------------------------------------------;
;
ENDMODULE
////////////////////////////////////////////////////////////////////////;
DISPLAY "DEVICE start: ", /H, DEVICE
DISPLAY "Old DEVICE start: ", /H, OLD_TABLES.DEVICE
DISPLAY "LOGDRV start: ", /H, LOGDRV
DISPLAY "Old LOGDRV start: ", /H, OLD_TABLES.LOGDRV
DISPLAY "RAMDTBL start: ", /H, RAMDTBL
DISPLAY "Old RAMDTBL start: ", /H, OLD_TABLES.RAMDTBL
;
;DRV_TEMP_BUFFER:
;---------[256 bytes stack for return pages of RST #18 callers]--------;
; #3F00 - #3FFF
@ -487,133 +553,4 @@ 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
;=====================================================================[]
;
;
*/
;[END]

View File

@ -540,7 +540,12 @@ DEPLOY:
LD HL,BANKTBL + #C000
LD C,BIOS.GetMemBlkPages
RST ToBIOS
; ¤®«¦­  ¨¤â¨ ¯®á«¥ GetMemBlkPages, ç⮡ ¢¬¥áâ®
; § ªà뢠誨 #FF ¯®áâ ¢¨âì áâà ­¨æã COREPAGE
LD HL,BANKTBL + COREPAGE
IN A,(SLOT0)
LD (HL),A
POP AF
OUT (SLOT3),A

View File

@ -98,9 +98,31 @@ XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
ENDM
;
;
; ‚•Ž„: L - «®£¨ç¥áª¨© ­®¬¥à ¢ â ¡«¨æ¥
; ‚›•Ž„: IY - ­ ç «® § ¯¨á¨
; <20>Ž<EFBFBD>ˆ: HL, IY. HL<-->DE
MACRO LOGDRV_ENTRY_FIND tbl_addr
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
;LD B,H
;LD C,L
EX DE,HL
LD IY,tbl_addr
ADD IY,DE
ENDM
;
;
MACRO _CALC_DEVICE_ENTRY tbl_addr
LD C,A
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

View File

@ -213,13 +213,6 @@ 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 (OFFSECT),HL
@ -285,29 +278,14 @@ DRVCLC: ; INC A
; .TBL_Entry EQU 16
; .Size EQU $-LOGDRV
SELHDD: PUSH DE
PUSH BC
PUSH HL
;!TEST
; SLA A
; RLA
; SLA A
; LD L,A
; LD H,0
; RL H
; ADD HL,HL
;
; original
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
;
EX DE,HL
LD IY,LOGDRV
ADD IY,DE
LD L,A
LOGDRV_ENTRY_FIND LOGDRV
;
LD C,(IY+1)
LD B,(IY+2)
LD E,(IY+3)
@ -396,15 +374,8 @@ HGETPRM:
;
PUSH IX
PUSH IY
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD B,H
LD C,L
LD IY,LOGDRV
ADD IY,BC
;
LOGDRV_ENTRY_FIND LOGDRV
;
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
PUSH IY
@ -449,8 +420,8 @@ STAT_H: XOR A
CHEK_H:
;!TEST
;LD A,#FF
XOR A
LD A,#FF
;XOR A
;
AND A
RET
@ -460,15 +431,9 @@ CHEK_H:
GBPB_H: PUSH IY
PUSH DE
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD B,H
LD C,L
LD IY,LOGDRV
ADD IY,BC
;
LOGDRV_ENTRY_FIND LOGDRV
;
LD E,(IY+1)
LD D,(IY+2)
LD L,(IY+3)

View File

@ -301,24 +301,73 @@ LWRITE_RD:
; XOR A
; RET
;
;;
;;;
;----------------------------------------------------------------------;!TEST
; ;S_P_P DB #00
; INIT_RD:
; ; .SectorSize EQU 512 ;!HARDCODE
; ; LD HL,.SectorSize
; ; LD A,#80
; ; .loop: SRL A
; ; RR H
; ; JR NC,.loop
; ; LD (S_P_P),A
; LD BC,#0*256 + BIOS.GET_RAMD_ST ; <20>®«ã祭¨¥ ¨¤¥­â¨ä¨ª â®à  ¡«®ª , ­ §­ ç¥­­®£® ­  RAM-Disk
; LD DE,RAMDTBL
; .initLoop:
; PUSH BC
; LD A,B
; PUSH DE
; RST ToBIOS
; POP DE
; OR A
; JR Z,.noDRV
; LD (DE),A
; INC DE
; POP BC
; LD A,B
; LD (DE),A
; INC DE
; JP 1F
; .noDRV: POP BC
; 1: INC B
; LD A,RAMDTBL.Size / RAMDTBL.TBL_Entry
; CP B
; JR NZ,.initLoop
; LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL
; EX DE,HL
; AND A ;!FIXIT ----
; SBC HL,DE ;!FIXIT ADD HL,DE
; SRL L
; LD A,L
; ; LD HL,ENDDRVR
; AND A
; RET
;----------------------------------------------------------------------;!TEST
;;;
;;
;
;
;;
;;;
;----------------------------------------------------------------------;!TEST
;S_P_P DB #00
INIT_RD:
; .SectorSize EQU 512 ;!HARDCODE
; LD HL,.SectorSize
; LD A,#80
; .SectorSize EQU 512 ;!HARDCODE
; LD HL,.SectorSize
; LD A,#80
; .loop: SRL A
; RR H
; JR NC,.loop
; 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
.initLoop:
PUSH BC
@ -328,29 +377,38 @@ INIT_RD:
POP DE
OR A
JR Z,.noDRV
LD (DE),A
;
INC DE
LD (DE),A
DEC DE
;
POP BC
LD A,B
LD (DE),A
INC DE
INC DE
;
JP 1F
;
.noDRV: POP BC
1: INC B
LD A,RAMDTBL.Size / RAMDTBL.TBL_Entry
CP B
JR NZ,.initLoop
LD HL,RAMDTBL
LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL
EX DE,HL
AND A
SBC HL,DE
AND A ;!FIXIT ----
SBC HL,DE ;!FIXIT ADD HL,DE
SRL L
LD A,L
; LD HL,ENDDRVR
AND A
RET
;----------------------------------------------------------------------;!TEST
;;;
;;
;
; ;
; ; <E28099>ˆ€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆŠ€ ˆ …ƒŽ RAM-DISK ID
@ -466,15 +524,17 @@ IOCTL_RD:
; AND A
; RET
;!!!!! ¢ë§ë¢ ¥âáï ¢ SCANDRV, ª®£¤  íâ  ¯à®æ¥¤ãà  ¢ SLOT3,   ­¥ ¢ SLOT0
GET_RAMDRV_NUM:
ADD A,A
LD BC,RAMDTBL
.skip_tbl:
ADD A,A
ADD A,C
LD C,A
LD A,0
ADC A,B
LD B,A
INC BC
;INC BC
LD A,(BC)
OR #60 ;!HARDCODE ᤥ« âì ­®¬¥à  à §­ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
RET

View File

@ -133,20 +133,10 @@ INTDISK:
;
PUSH HL
PUSH BC
_CALC_DEVICE_ENTRY DEVICE
; LD C,A
; ADD A,A
; ADD A,C
; LD C,A
; LD B,0
; LD HL,DEVICE
; ADD HL,BC
_CALC_DEVICE_ENTRY DEVICE
LD A,(HL)
INC A
CP #FF
JR Z,NODEV
DEC A
INC HL
LD C,(HL)
INC HL
@ -210,7 +200,7 @@ INITDVC: XOR A
LD (DRV_PAGE.LDRIVE),A ; á¡à. ï祩ªã
LD HL,DEVICE
LD (PDEVICE),HL ; ¢®ááâ. ï祩ªã
; ‡ ç¨á⪠ â ¡«¨æë. <20>¥®¡ï§ â¥«ì­®, ­® ¬ «® «¨ çñ ¡ã¤¥â ¤ «ìè¥... ;[ ]
; ‡ ç¨á⪠ â ¡«¨æ. <20>¥®¡ï§ â¥«ì­®, ­® ¬ «® «¨ çñ ¡ã¤¥â ¤ «ìè¥... ;[ ]
LD HL,DEVICE
LD (HL),#FF
LD DE,DEVICE+1

View File

@ -1,3 +1,4 @@
/*
; !TODO § ¯®¬¨­ âì ¯à¥à뢠­¨ï, ®âª«îç âì ­  áâ àâ¥, ¢®ááâ ­ ¢«¨¢ âì ­  ¢ë室¥
SCANDRV:
;1 [-----------] [-----------] [-----------] [-----------] [-----------]
@ -22,14 +23,10 @@ SCANDRV:
;3 [-----------] [-----------] [-----------] [-----------] [-----------]
;!TEST ¢ DRV-MAIN ¬®£ãâ ¡ëâì ¯à®¡«¥¬ë á ¯à¥à뢠­¨ï¬¨
;DI
LD A,Dss.DRV.RescanDRV
LD C,Dss.DRV.RescanDRV
RST ToDSS.DRV
LD (LDRIVE),A
;EI
;
LD A,Dss.DRV.RescanDRV
LD C,Dss.DRV.RescanDRV
RST ToDSS.DRV
LD (LDRIVE),A
; [-----------]
;4 [-----------] [-----------] [-----------] [-----------] [-----------]
@ -158,23 +155,816 @@ SCANDRV:
; .old_letter: DB #FF
; .old_DRIVE_ID: DB #FF
; .new_letter: DB #FF
*/
IF 1
SCANDRV:
; 0. § ¯®¬¨­ ¥¬ á®áâ®ï­¨¥ ¯à¥à뢠­¨©
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD A,R
DI
PUSH AF
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 1. § ¯®¬¨­ ¥¬ ¡ãâ-¤¨áª
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
CALL GETBOOT
LD (.old_letter),A
;; A = bootdisk Log.number
;;!FIXIT ¬®¦­® ¤®áâ ¢ âì ¨§ á®åà ­¥­­®© â ¡«¨æë ª®£¤  ¯®­ ¤®¡¨âáï
; LD DE,Dss.DRV.GenIOCTL.Enter
; LD BC,Dss.DRV.GenIOCTL.GetParams
; RST ToDSS.DRV
; EX AF,AF'
;; A = bootdisk number
; LD (.old_DRIVE_ID),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 2. ª®¯¨à㥬 ¢ ¡ãä¥à â ¡«¨æë DEVICE, LOGDRV, RAMDTBL
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
SET_PAGE_X DRVPAGE
PUSH AF
LD HL,DEVICE + #C000
LD DE,OLD_TABLES.DEVICE + #C000
LD BC,OLD_TABLES.DEVICE - DEVICE
LDIR
;
LD A,2 ;!HARDCODE ª®«¨ç¥á⢮ â ¡«¨æ ¢â®à®£® ã஢­ï (LOGDRV, RMDRIVE)
LD (Fill_if_Exists.tbl),A
;POP AF
;OUT (SLOT3),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 3. ¢ë§ë¢ ¥¬ à¥áª ­
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD A,Dss.DRV.RescanDRV
LD C,Dss.DRV.RescanDRV
RST ToDSS.DRV
LD (LDRIVE),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 4. áà ¢­¨¢ ¥¬ § ¯¨á¨ áâ àëå â ¡«¨æ á ­®¢ë¬¨:
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;SET_PAGE_X DRVPAGE
;PUSH AF
LD HL,OLD_TABLES.DEVICE + #C000
LD B,DSS_MAX_DRIVES_AMOUNT
.tbl_scanNew_mainLoop:
PUSH BC
PUSH HL
; ¯®«ãç ¥¬ ­®¬¥à ¯à®æ¥¤ãàë ¤«ï í⮩ ¡ãª¢ë ¤¨áª 
LD A,(HL)
;
CP #FF
JR Z,.nextN
;
LD B,A
INC HL
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
; ¨é¥¬ çâ® §  ¤à ©¢
EX DE,HL
; FDD?
LD HL,FDDRIVE
AND A
SBC HL,DE
JR Z,.nextN ; ¯à®¯ã᪠FDD ¤à ©¢®¢
; HDD?
LD HL,HDDRIVE
AND A
SBC HL,DE
; HDD. ‘¢¥àª  ¯® â ¡«¨æ¥ LOGDRV
JP Z,SCAN_TABLES.HARD_DRV
; RD?
LD HL,RMDRIVE
AND A
SBC HL,DE
; RAM Drive. ‘¢¥àª  ¯® â ¡«¨æ¥ RAMDTBL
JP Z,SCAN_TABLES.RAM_DRV
; CD/DVD?
;LD HL,CDDRIVE
;AND A
;SUB HL,DE
; CD/DVD.
; JR Z,SCAN_TABLES.CD_ROM
;
; á«¥¤ãî騩 ¢¨â®ª
.nextN: POP HL
.nextN2:
INC HL
INC HL
INC HL
POP BC
DJNZ .tbl_scanNew_mainLoop
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 5. áà ¢­¨¢ ¥¬ § ¯¨áì ­®¢ëå â ¡«¨æ á® áâ à묨
;  . ¥á«¨ ¤à ©¢ ⮫쪮 ¢ ­®¢®©:
;  1) ¢â몠¥¬ ¥£® ¢ ¯¥à¢ãî ᢮¡®¤­ãî § ¯¨áì ¢ DEVICE (¨«¨ áâ ¢¨¬ ¯®á«¥ ¯®á«¥¤­¥£® ¤à ©¢ )
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; ‚•Ž„: IX - OLD_TABLES.DEVICE
; HL - OLD_TABLES.DEVICE.End
; HL' - à §­¨æ  ¬¥¦¤ã  ¤à¥á ¬¨ áâ àëå ¨ ­®¢ëå â ¡«¨æ
;
INC HL
LD (OLD_TABLES_CURRENT),HL
EXX
LD HL,OLD_TABLES.LOGDRV - LOGDRV
LD B,DSS_MAX_DRIVES_AMOUNT
EXX
; ­ å®¤¨¬ ¢ áâ à®© DEVICE ¯¥à¢ãî ᢮¡®¤­ãî ï祩ªã (¯à®¢¥à塞 á ª®­æ  ¢ ­ ç «®)
LD IX,OLD_TABLES.DEVICE + OLD_TABLES.DEVICE.Size - OLD_TABLES.DEVICE.TBL_Entry + #C000
LD IY,LOGDRV + #C000
LD DE,-OLD_TABLES.DEVICE.TBL_Entry ; ¤¢¨£ ¥¬áï ¯® â ¡«¨æ¥ ­ § ¤
LD B,DSS_MAX_DRIVES_AMOUNT
;
.loop1: LD A,#FF
CP (IX+0)
JR NZ,.loop2_start
ADD IX,DE
DJNZ .loop1
.loop1_exit:
LD A,C ; § ª®­ç¨«¨ áç¨â âì ¯¥à¥¬¥­­ãî LDRIVE
LD (DRV_PAGE.LDRIVE + #C000),A
LD (LDRIVE),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 6. ¯à®¢¥à塞, ­¥ £à®å­ã«áï «¨ ¡ãâ-¤¨áª.
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
.old_letter+1:
LD A,0
_CALC_DEVICE_ENTRY OLD_TABLES.DEVICE + #C000
LD A,(HL)
INC A
JP Z,ERROR_BOOTDRV_DIES
; .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
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 7. § ¬¥­ï¥¬ ­®¢ë¥ â ¡«¨æë ­  ¬®¤¨ä¨æ¨à®¢ ­­ë¥ áâ àë¥
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD HL,OLD_TABLES.DEVICE + #C000
LD DE,DEVICE + #C000
LD BC,OLD_TABLES.DEVICE - DEVICE
LDIR
POP AF
OUT (SLOT3),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;8. ¢ë室
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
POP AF
RET PO
EI
RET
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;
.loop2_start:
LD C,B ; ­ ç¨­ ¥¬ áç¨â âì ¯¥à¥¬¥­­ãî LDRIVE
;LD (LDRIVE),A
;LD C,A
;
LD A,DSS_MAX_DRIVES_AMOUNT
SUB B ; ᪮«ìª® è £®¢ ¢¯¥àñ¤ ¯® â ¡«¨æ¥ ®áâ «®áì
LD B,A
;
.loop2: LD DE,DEVICE.TBL_Entry ; ⥯¥àì ¤¢¨£ ¥¬áï ¯® â ¡«¨æ¥ ¢¯¥àñ¤
ADD IX,DE
; âãâ 㪠§ â¥«ì ¯®ª §ë¢ ¥â ­  ¯¥à¢ãî ᢮¡®¤­ãî ï祩ªã ¯®á«¥ ¡«®ª  á ¤ ­­ë¬¨ ¤à ©¢®¢
PUSH IX
PUSH BC
CALL Fill_if_Exists
POP BC
POP IX
; NC:
; DE =  ¤à¥á ¯à®æ¥¤ãàë ®¡à ¡®â稪  â ¡«¨æë
; A = «®£¨ç¥áª¨© ­®¬¥à ãáâனá⢠ ¢ â ¡«¨æ¥ ®¡à ¡®â稪 
;
; CF - ­¥â ¡®«ìè¥ ­®¢ëå § ¯¨á¥©
JR C,.loop1_exit
LD (IX+0),A
LD (IX+1),E
LD (IX+2),D
;
; LD A,(LDRIVE)
; INC A
; LD (LDRIVE),A
INC C ; ¤®¡ ¢¨«¨ ¤à ©¢
;
DJNZ .loop2
JR .loop1_exit
;
;;;
Fill_if_Exists:
.tbl+1: LD B,2 ; ª®«¨ç¥á⢮ â ¡«¨æ. ¯®ª  2 - LOGDRV ¨ RAMDTBL ;!!!!! ¢®ááâ ­ ¢«¨¢ âì
DJNZ 1F
; B=1, RAMDTBL
LD A,RAMDTBL.TBL_Entry
LD IY,RAMDTBL + #C000
CALL .RUN
LD DE,RMDRIVE
RET NC
LD A,(.tbl)
DEC A ;!!!!! ¬®¦¥â ¡ëâì ¯¥à¥¯®«­¥­¨¥
LD (.tbl),A
RET
;
1: DJNZ 1F
; B=2, LOGDRV
LD A,LOGDRV.TBL_Entry
LD IY,LOGDRV + #C000
CALL .RUN
LD DE,HDDRIVE
RET NC
; ¯¥à¥å®¤¨¬ ­  ¤àã£ãî â ¡«¨æã - RAMDTBL
LD A,(.tbl)
DEC A ;!!!!! ¬®¦¥â ¡ëâì ¯¥à¥¯®«­¥­¨¥
LD (.tbl),A
LD HL,OLD_TABLES.RAMDTBL + #C000
LD (OLD_TABLES_CURRENT),HL
EXX
LD B,MAX_RAMDRIVES
EXX
JR Fill_if_Exists
;
;
1: SCF ; unknown table number
RET
;
.RUN: EXX
;
LD D,0
LD E,A
PUSH DE
;
LD A,#FE ; ’ ª ¯®¨áª § ª®­ç¨âáï «¨¡® ­  ­®¬¥à¥ ¤à ©¢ , «¨¡® ¯® ª®­æã â ¡«¨æë
PUSH BC
CALL Find_Record.loop1 ; ¨é¥â ¢ ­®¢®© â ¡«¨æ¥ ­®¢ãî § ¯¨áì
POP BC
JR NC,1F
;
POP DE
EXX
RET
;
1: PUSH IY ; á®å࠭塞 ⥪ã騩  ¤à¥á ­®¢®© â ¡«¨æë
;
;EX DE,HL
;ADD IY,DE
;EX DE,HL
LD IY,(OLD_TABLES_CURRENT)
;
LD A,#FF ; ’ ª ¯®¨áª § ª®­ç¨âáï «¨¡® ­  ¯ãá⮩ § ¯¨á¨, «¨¡® ¯® ª®­æã â ¡«¨æë
LD C,D ; ­®¬¥à § ¯¨á¨ ¢ â ¡«¨æ¥. D=0
PUSH BC
CALL Find_Record.loop2
LD A,C
POP BC
JR NC,1F
;
POP DE
POP DE
EXX
RET
;
1: EX (SP),IY ; ¯¥à¥ª«î祭¨¥ á® áâ à®© ­  ­®¢ãî â ¡«¨æã
PUSH IY
EXX
; ¯¥à¥ª¨¤ë¢ ¥¬ § ¯¨áì ¨§ ­®¢®© ¢ áâ àãî
POP HL
POP DE
POP BC
LDIR
LD (IY),#FF ; £à®å ¥¬ ⮫쪮 çâ® ¯¥à¥ª¨­ãâãî § ¯¨áì ¨§ ­®¢®© â ¡«¨æë
AND A
RET
OLD_TABLES_CURRENT: WORD 0
; ‚•Ž„: A - Œ áª  ¤«ï áà ¢­¥­¨ï
; DE - „«¨­  ®¤­®© § ¯¨á¨
; IY - €¤à¥á ¤ ­­ëå ¢ â ¡«¨æ¥
; ‚›•Ž„: NC:
; IY - ­ ç «® ¯®¤å®¤ï饩 § ¯¨á¨
; C - ­®¬¥à ­®¢®© § ¯¨á¨ ¢ áâ à®© â ¡«¨æ¥
; CF - <20>¥ ­ ©¤¥­®, â ¡«¨æ  § ª®­ç¨« áì
Find_Record:
.loop1: CP (IY)
RET NC
ADD IY,DE
INC C
DJNZ .loop1
; â ¡«¨æã ¯à®è¥àá⨫¨
SCF
RET
.loop2: CP (IY)
RET Z
ADD IY,DE
INC C
DJNZ .loop2
; â ¡«¨æã ¯à®è¥àá⨫¨
SCF
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
;
; <20>… ƒ<>Ž•€œ HL!
;  . ¥á«¨ ¤à ©¢ ¥áâì ¢ ­®¢®© ¨ áâ à®©, â® § â¨à ¥¬ ¢ ­®¢®©
; â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢
; ¡. ¥á«¨ ¤à ©¢ ¥áâì ⮫쪮 ¢ áâ à®©, â®:
; ¡1) £à®å ¥¬ ä ©«®¢ë¥ ¬ ­¨¯ã«ïâ®àë á ¥£® ­®¬¥à®¬
MODULE SCAN_TABLES
; ¢å®¤: B - «®£.­®¬¥à ¤à ©¢ , DE
RAM_DRV:
; <20>®«ãç ¥¬ ­®¬¥à à ¬¤¨áª  ¢ OLD_TABLES.RAMDTBL
LD A,B
LD BC,OLD_TABLES.RAMDTBL + #C000
CALL GET_RAMDRV_NUM.skip_tbl + #C000
LD (.cur_drv),BC
AND #0F
LD C,A ; ­®¬¥à à ¬¤¨áª 
; ˆé¥¬ ¢ ­®¢®© â ª®© ¦¥ ­®¬¥à à ¬¤¨áª 
LD B,MAX_RAMDRIVES
LD DE,RAMDTBL + #C000
.loop: LD A,(DE)
SUB C
JR Z,.found
INC DE
INC DE
DJNZ .loop
; ‡€<E280A1>ˆœ <20><20>€‰„…<E2809E>
; „®áâ ñ¬ ¯®«®¦¥­¨¥ ¢ OLD_TABLES.DEVICE
POP HL
; „®áâ ñ¬ è £ ®¡é¥£® 横«  ¤«ï ¯®«ã祭¨ï «®£.­®¬¥à  ¤à ©¢  ¢ KILL_FM
POP BC
PUSH BC
; ƒà®å ¥¬ ”Œ ¨ § ¯¨áì ¢ OLD_TABLES.DEVICE
CALL KILL_FM
; £à®å ¥¬ ¢ áâ à®© RAMDTBL íâ®â ¤à ©¢
EX DE,HL
.cur_drv+1:
LD HL,0
LD (HL),#FF
DEC HL
LD (HL),#FF
EX DE,HL
JP SCANDRV.nextN2
;
.found: DEC A
; § â¨à ¥¬ ¢ ­®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
LD (DE),A
DEC DE
LD (DE),A
JP SCANDRV.nextN
HARD_DRV:
LD L,B
LOGDRV_ENTRY_FIND OLD_TABLES.LOGDRV + #C000
LD IX,LOGDRV + #C000
LD DE,LOGDRV.TBL_Entry
LD B,DSS_MAX_DRIVES_AMOUNT
;
.loop: LD A,(IY+0)
;CP #FF
;JR Z,.skip
CP (IX+0)
JR NZ,.skip
;
LD A,(IY+1)
CP (IX+1)
JR NZ,.skip
LD A,(IY+2)
CP (IX+2)
JR Z,.found
;
.skip: ADD IX,DE
DJNZ .loop
; ‡€<E280A1>ˆœ <20><20>€‰„…<E2809E>
; ƒà®å ¥¬ áâ àãî § ¯¨áì ¢ OLD_TABLES.LOGDRV
LD A,#FF
LD (IY+0),A
; „®áâ ñ¬ ¯®«®¦¥­¨¥ ¢ OLD_TABLES.DEVICE
POP HL
; „®áâ ñ¬ è £ ®¡é¥£® 横«  ¤«ï ¯®«ã祭¨ï «®£.­®¬¥à  ¤à ©¢  ¢ KILL_FM
POP BC
PUSH BC
; ƒà®å ¥¬ ”Œ ¨ § ¯¨áì ¢ OLD_TABLES.DEVICE
CALL KILL_FM
;
JP SCANDRV.nextN2
;
.found: ; § â¨à ¥¬ ¢ ­®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
LD (IX+0),#FF
JP SCANDRV.nextN
;
; CD_ROM:
; JP SCANDRV.nextN
; ‚•Ž„: HL - ⥪ãé ï § ¯¨áì ¢ â ¡«¨æ¥ DEVICE
; B - è £ ®¡é¥£® 横« 
KILL_FM:
;
LD A,DSS_MAX_DRIVES_AMOUNT
SUB B
LD C,A
; ¢â몠¥¬ áâà ­¨æã ï¤à  á â ¡«¨æ¥© ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢
PUSH BC
SET_PAGE_X COREPAGE
POP BC
PUSH AF
; ˜¥àá⨬ ¬ ­¨¯ã«ïâ®àë ­  ­ «¨ç¨¥ ¢ ­¨å £à®å­ã⮣® ¤à ©¢ 
LD IY,FM_BUF-FM_BUF.Size + #C000
LD B,FMCOUNT
LD DE,FM_BUF.Size
.loop_fm:
ADD IY,DE
LD A,(IY+_sFM.DRIVE)
CP C
JR NZ,.skip
XOR A
LD (IY+_sFM.NAME),A ; £à®å ¥¬ ¬ ­¨¯ã«ïâ®à
.skip: DJNZ .loop_fm
;
POP AF
OUT (SLOT3),A
;
; £à®å ¥¬ ¢ OLD_TABLES.DEVICE 㡨âë© ¤à ©¢
LD (HL),#FF
;
RET
ENDMODULE
ENDIF
/*
[DRIVE TABLES] .Size == DEVICE.Size + LOGDRV.Size + RAMDTBL.Size == 78 + 416 + 32 == 526
; «®£¨ç¥áª¨© ­®¬¥à ãáâனá⢠ +  ¤à¥á ®¡à ¡®â稪 .
; <20>®à浪®¢ë© ­®¬¥à * 3 = ¡ãª¢  ¤¨áª  + "A"
DEVICE EQU $
.TBL_Entry EQU 3
.End EQU 1 + $ + DSS_MAX_DRIVES_AMOUNT * .TBL_Entry ; ¤«ï á⮯-¡ ©â  #FF
.Size EQU .End - $
;+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
; ‹®£¨ç¥áª¨© ­®¬¥à à §¤¥« .
;<3B>®¬¥à £à㯯ë = «®£¨ç¥áª¨© ­®¬¥à à §¤¥«  HDD ¨§ DEVICE
LOGDRV EQU DEVICE + DEVICE.Size
.TBL_Entry EQU 16
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
LOGDRV: BLOCK .TBL_Entry*LD_DSK,0 ; ld_dsk = 16
.TBL_Entry EQU 16
.Size EQU $-LOGDRV
; <E28099>ˆ€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆŠ€ ˆ …ƒŽ RAM-DISK ID
; Log Number: DB RAM_DRIVE_NUMBER, RAM_DRIVE_ID
RAMDTBL EQU $ + DEVICE.Size + LOGDRV.Size
.TBL_Entry EQU 2
.Size EQU .TBL_Entry * MAX_RAMDRIVES
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT * .TBL_Entry,#FF
.Size: DB #FF
.TBL_Entry EQU 3
;
; NEW RESCAN
;=====================================================================[]
; «®£¨ç¥áª¨© ­®¬¥à ãáâனá⢠ +  ¤à¥á ®¡à ¡®â稪 .
; <20>®à浪®¢ë© ­®¬¥à * 3 = ¡ãª¢  ¤¨áª  + "A"
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT*3,#FF
.Size: EQU $-DEVICE
®£¨ç¥áª¨© ­®¬¥à à §¤¥« .
<EFBFBD>®¬¥à £à㯯ë = «®£¨ç¥áª¨© ­®¬¥à à §¤¥«  HDD ¨§ DEVICE
LOGDRV EQU DEVICE + DEVICE.Size
.TBL_Entry EQU 16
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
+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
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
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
;=====================================================================[]
;
;
*/
; LD A,(Fill_if_Exists.tbl)
; DEC A
; LD (Fill_if_Exists.tbl),A
/*
; ­ å®¤¨¬ ¢ áâ à®© DEVICE ¯¥à¢ãî ᢮¡®¤­ãî ï祩ªã
LD HL,OLD_TABLES.DEVICE + DEVICE.Size
LD DE,-DEVICE.TBL_Entry
LD B,DSS_MAX_DRIVES_AMOUNT
LD A,#FF
;
.loop1: ADD HL,DE
CP (HL)
JR NZ,.end_found
DJNZ .loop1
.end_found:
; HL = first free record in OLD_TABLES.DEVICE
LD (PDEVICE),HL
; B = last drive
LD A,B
LD (DRV_PAGE.LDRIVE),A
; <20> å®¤¨¬ ¢ áâ à®© LOGDRV ¯¥à¢ãî ᢮¡®¤­ãî ï祩ªã
; !TODO âãâ ®¯â¨¬¨§­ãâì ¬®¦­®
EXX ; ¤«ï .ldir_to_empty
LD HL,LOGDRV
LD B,DSS_MAX_DRIVES_AMOUNT
EXX
;
LD HL,OLD_TABLES.LOGDRV
LD DE,LOGDRV.TBL_Entry
LD B,DSS_MAX_DRIVES_AMOUNT
LD A,#FF
;
.loop3: CP (HL)
JR NZ,.loop3_skip
CALL .ldir_to_empty
JR Z.loop3_exit
.loop3_skip:
ADD HL,DE
DJNZ .loop3
.loop3_exit: ; no free space in old table or no new records in new table
; <20> å®¤¨¬ ¢ ­®¢®© LOGDRV ¯¥à¢ãî ­®¢ãî § ¯¨áì
LD HL,LOGDRV
LD DE,LOGDRV.TBL_Entry
LD B,DSS_MAX_DRIVES_AMOUNT
;
.loop2: LD A,(HL)
INC A
CALL NZ,.
JR NZ, ; error - no space for new record
ADD HL,DE
DJNZ .loop2
;
EXX
LD BC,INIT_H
EXX
LD HL,LOGDRV
LD DE,LOGDRV.TBL_Entry
LD B,DSS_MAX_DRIVES_AMOUNT
.loop_logdrv:
LD A,#FF
CP (HL)
EXX
LD A,1
CALL NZ,MAKEDVC
EXX
ADD HL,DE
DJNZ .loop_logdrv
;
EXX
LD BC,INIT_RD
EXX
LD HL,RAMDTBL
LD DE,RAMDTBL.TBL_Entry
LD B,MAX_RAMDRIVES
.loop_logdrv:
LD A,#FF
CP (HL)
EXX
LD A,1
CALL NZ,MAKEDVC
EXX
ADD HL,DE
DJNZ .loop_logdrv
LD B,DSS_MAX_DRIVES_AMOUNT
.tbl_scanOld_mainLoop:
PUSH BC
POP BC
DJNZ .tbl_scanOld_mainLoop
.ldir_to_empty:
; <20> å®¤¨¬ ¢ ­®¢®© LOGDRV ¯¥à¢ãî ­®¢ãî § ¯¨áì
; !TODO âãâ ®¯â¨¬¨§­ãâì ¬®¦­®
PUSH HL
EXX
;
; LD HL,LOGDRV
LD DE,LOGDRV.TBL_Entry
; LD B,DSS_MAX_DRIVES_AMOUNT
LD A,#FF
;
.loop3: CP (HL)
JR NZ,.run_ldir
.loop3skip:
ADD HL,DE
DJNZ .loop3
; no new records in table
; ZF = 0
;LD A,B
;DEC A ; Set ZF = 0
EXX
POP HL ; áà ¢­ï«¨ á⥪
RET
;
.run_ldir:
POP DE
PUSH BC
LD BC,LOGDRV.TBL_Entry
LDIR
POP BC
DJNZ .ldir_exit
; ®¡à ¡®â «¨ ¯®á«¥¤­îî § ¯¨áì ¢ â ¡«¨æ¥
LD A,B
DEC A ; Set ZF = 0
;
.ldir_exit:
EXX
RET
*/

View File

@ -75,7 +75,7 @@ SCANDRV:
LD BC,DEVICE.TBL_Entry
EX DE,HL
LDDR
; ―ΰ<EFBFBD>₯ΰο₯¬, ­₯ γ₯«¨η¨«<C2A8>αμ «¨ §­ η₯­¨₯ LDRIVE
; ¯à®¢¥à塞, ­¥ ¬¥­ìè¥ «¨ ­®¢®¥ §­ ç¥­¨¥ LDRIVE áâ à®£® ­®¬¥à  ¡ãâ-¤¨áª 
;!TEST
LD HL,.old_letter
LD A,(LDRIVE)

View File

@ -58,8 +58,8 @@ RESERVED2 BLOCK 490,0
;
STRUCT _sBuffers
FileManipulator _sFM ; 44 bytes * FMCOUNT
FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0
FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
BootSector _sBOOT_SEC ; 62 bytes ;!TODO ¯¥à¥­¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
EXE_Header _sEXE_HEADER ; 512 bytes
Stack _sStack ; 256 bytes

View File

@ -670,11 +670,12 @@ LPT_A EQU #1B
LPT_B EQU #1C
PRINT: AND A
LD B,A
LD B,A ; á®å࠭塞 ᨬ¢®«
;
LD A,R
LD A,B
DI
PUSH AF
;
XOR A
OUT (LPT_A),A
LD A,#10
@ -682,12 +683,12 @@ PRINT: AND A
XOR A
OUT (LPT_A),A
IN A,(LPT_A) ; IN (1Bh): bit 5 - busy, Bit 3 - Ack
;ld c,a ; €‰Œ€<C592>
LD C,A
BIT 5,A ; IN (19h): bit 5 - Paper Enable, Bit 3 - Select
JR NZ,LPTBUSY
;and %11011000 ; €‰Œ€<C592>
;jr z,LPTBUSY ; €‰Œ€<C592>
LD A,B
AND %11011000
JR Z,LPTBUSY
LD A,B ; ¢®ááâ ­ ¢«¨¢ ¥¬ ᨬ¢®«
OUT (LPT_B),A
POP AF
RET PO
@ -695,7 +696,7 @@ PRINT: AND A
RET
LPTBUSY:
POP AF
;ld a,c ; €‰Œ€<C592>
LD A,C
SCF
RET PO
EI

View File

@ -1 +1 @@
312
371

View File

@ -19,17 +19,19 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
;
;-------------------[MEMORY]-------------------------;
DEFINE USING_MEMPAGES 4
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
DEFINE OLD_SET_BANK 0
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
;---------------------[ «®£.­®¬¥à  áâà ­¨æ ¯ ¬ï⨠]---------------------
; ªíè ᯨ᪠ ª â «®£ 
DIRPAGE EQU 0
FATPAGE EQU 1
TXTPAGE EQU 2
ENVPAGE EQU TXTPAGE
DRVPAGE EQU 3
;
DEFINE USING_MEMPAGES 4 ; à §¬¥à ¡«®ª  ¤®¯®«­¨â¥«ì­ëå áâà ­¨æ
COREPAGE EQU 4 ; ®­  ®â¤¥«ì­® ¨ ­¥ á ¡«®ª®¬ ¢ëè¥.
;-----------------------------------------------------------------------
DIRSPEC.DEPTH EQU 256 ; '\' + 1..255
ENVIRONMENT_STRING_LENGTH EQU 255

View File

@ -187,7 +187,11 @@ READBAT:
ld c,Dss.Read ; ç⥭¨¥ ä ©« 
RST ToDSS
ld a,e
ld (MOVWORD.count),a ; (ç¨á«® ¯à®ç¨â. ¡ ©â ¨§ ä ©« )/128
; [x] 28/09/23
JR NC,1F
XOR A
;
1: ld (MOVWORD.count),a ; (ç¨á«® ¯à®ç¨â. ¡ ©â ¨§ ä ©« )/128
ret

View File

@ -1 +1 @@
77
78

@ -1 +1 @@
Subproject commit 6eacd6475231a504fae4ed03a12f5cd1cb166ac0
Subproject commit 639cc1e69de900dd85e1bc4d3525dfeb91ea15ab