mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-16 01:41:17 +03:00
New rescan drives feature - save bootdisk letter after rescan
This commit is contained in:
parent
a99ed14bda
commit
663016bd16
@ -35,7 +35,7 @@ DRIVE: _mSYSID
|
|||||||
BIT 7,A
|
BIT 7,A
|
||||||
JR Z,GOOD_DRIVE
|
JR Z,GOOD_DRIVE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD DE,2*256 + 21 ; ¥á«¨ ¢¥àá¨ï ¨¦¥ 2.21, â® ®è¨¡ª
|
LD DE,2*256 + 21 ;!HARDCODE ¥á«¨ ¢¥àá¨ï ¨¦¥ 2.21, â® ®è¨¡ª
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
LD A,INCORR
|
LD A,INCORR
|
||||||
JR C,FAIL
|
JR C,FAIL
|
||||||
|
|||||||
171
DSS/DOS_X.ASM
171
DSS/DOS_X.ASM
@ -161,7 +161,7 @@ FRESP2: LD D,B
|
|||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
LDRIVE: DB #FF
|
LDRIVE: DB DSS_MAX_DRIVES_AMOUNT
|
||||||
TDRIVE: DB #00
|
TDRIVE: DB #00
|
||||||
TCLUST: DW #0000
|
TCLUST: DW #0000
|
||||||
TCOUNT: DW #0000
|
TCOUNT: DW #0000
|
||||||
@ -426,7 +426,7 @@ RDERR1: LD A,DSS_Error.sys.NOT_READY
|
|||||||
;SCF
|
;SCF
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;
|
;!FIXIT ª ¡ãä¥à ¬!
|
||||||
FatBuffer:
|
FatBuffer:
|
||||||
.MSG: DB 'FAT'
|
.MSG: DB 'FAT'
|
||||||
.READ_PG: DB #00
|
.READ_PG: DB #00
|
||||||
@ -527,13 +527,29 @@ BACK_CUR_PATH:
|
|||||||
;R11
|
;R11
|
||||||
|
|
||||||
;R12
|
;R12
|
||||||
;/////////////////////////////////////////////////////////////////////
|
;///////////////////////////////////////////////////////////////////////
|
||||||
; ”ãªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë.
|
; ”ãªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë.
|
||||||
;
|
;
|
||||||
; ¢å®¤: ¥â
|
; ¢å®¤: ¥â
|
||||||
; ¢ë室: A - ®¬¥à ¯®á«¥¤¥£® «®£. ¤¨áª ¢ á¨á⥬¥
|
; ¢ë室: A - ®¬¥à ¯®á«¥¤¥£® «®£. ¤¨áª ¢ á¨á⥬¥
|
||||||
;/////////////////////////////////////////////////////////////////////
|
;///////////////////////////////////////////////////////////////////////
|
||||||
SCANDRV:
|
SCANDRV:
|
||||||
|
;1 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||||||
|
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 ¬®£ãâ ¡ëâì ¯à®¡«¥¬ë á ¯à¥àë¢ ¨ï¬¨
|
;!TEST ¢ DRV-MAIN ¬®£ãâ ¡ëâì ¯à®¡«¥¬ë á ¯à¥àë¢ ¨ï¬¨
|
||||||
;DI
|
;DI
|
||||||
LD A,Dss.DRV.RescanDRV
|
LD A,Dss.DRV.RescanDRV
|
||||||
@ -542,7 +558,154 @@ SCANDRV:
|
|||||||
LD (LDRIVE),A
|
LD (LDRIVE),A
|
||||||
;EI
|
;EI
|
||||||
;
|
;
|
||||||
|
; [-----------]
|
||||||
|
|
||||||
|
;4 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||||||
|
.old_DRIVE_ID+1:
|
||||||
|
LD A,0
|
||||||
|
CALL SETBOOT
|
||||||
|
JR C,.ERROR_BOOTDRV_DIES
|
||||||
|
LD (.new_letter),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
|
||||||
|
LD HL,.old_letter
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
CP (HL)
|
||||||
|
JR NC,.no_change_LDRIVE
|
||||||
|
LD A,(HL)
|
||||||
|
LD (LDRIVE),A
|
||||||
|
.no_change_LDRIVE:
|
||||||
|
;
|
||||||
|
;;;;;
|
||||||
|
.restore_page+1:
|
||||||
|
LD A,0
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;;;;;;;;
|
||||||
|
POP AF
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
|
||||||
RET
|
RET
|
||||||
|
.ERROR_BOOTDRV_DIES:
|
||||||
|
LD BC,256*COLORS.PAPER.BLUE + BIOS.LP_OPEN_S
|
||||||
|
LD E,0
|
||||||
|
RST ToBIOS
|
||||||
|
|
||||||
|
LD BC,256*COLORS.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.FLASH + COLORS.PAPER.BLUE + COLORS.INC.WHITE
|
||||||
|
LD B,A
|
||||||
|
LD C,BIOS.LP_PRINT_LINE3
|
||||||
|
RST ToBIOS
|
||||||
|
|
||||||
|
.loop: DI
|
||||||
|
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
|
||||||
|
MODULE COLORS
|
||||||
|
;
|
||||||
|
INC:
|
||||||
|
.BLACK EQU #00
|
||||||
|
.BLUE EQU #01
|
||||||
|
.GREEN EQU #02
|
||||||
|
.CYAN EQU #03
|
||||||
|
.RED EQU #04
|
||||||
|
.MAGENTA EQU #05
|
||||||
|
.BROWN EQU #06
|
||||||
|
.LGRAY EQU #07
|
||||||
|
.DGRAY EQU #08
|
||||||
|
.LBLUE EQU #09
|
||||||
|
.LGREEN EQU #0A
|
||||||
|
.LCYAN EQU #0B
|
||||||
|
.LRED EQU #0C
|
||||||
|
.LMAGENT EQU #0D
|
||||||
|
.YELLOW EQU #0E
|
||||||
|
.WHITE EQU #0F
|
||||||
|
PAPER:
|
||||||
|
.BLACK EQU 16*INC.BLACK
|
||||||
|
.BLUE EQU 16*INC.BLUE
|
||||||
|
.GREEN EQU 16*INC.GREEN
|
||||||
|
.CYAN EQU 16*INC.CYAN
|
||||||
|
.RED EQU 16*INC.RED
|
||||||
|
.MAGENTA EQU 16*INC.MAGENTA
|
||||||
|
.BROWN EQU 16*INC.BROWN
|
||||||
|
.LGRAY EQU 16*INC.LGRAY
|
||||||
|
.DGRAY EQU 16*INC.DGRAY
|
||||||
|
.LBLUE EQU 16*INC.LBLUE
|
||||||
|
.LGREEN EQU 16*INC.LGREEN
|
||||||
|
.LCYAN EQU 16*INC.LCYAN
|
||||||
|
.LRED EQU 16*INC.LRED
|
||||||
|
.LMAGENT EQU 16*INC.LMAGENT
|
||||||
|
.YELLOW EQU 16*INC.YELLOW
|
||||||
|
.WHITE EQU 16*INC.WHITE
|
||||||
|
|
||||||
|
FLASH EQU #80
|
||||||
|
ENDMODULE
|
||||||
|
; .old_letter: DB #FF
|
||||||
|
; .old_DRIVE_ID: DB #FF
|
||||||
|
; .new_letter: DB #FF
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
;R12
|
;R12
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
214
DSS/DRV-MAIN.ASM
214
DSS/DRV-MAIN.ASM
@ -191,7 +191,7 @@ A0066: JP DRV_PAGE.NMI ;
|
|||||||
; <[DRIVE PAGE SWITCH]> ;
|
; <[DRIVE PAGE SWITCH]> ;
|
||||||
_mInfoBLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7
|
_mInfoBLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7
|
||||||
PORTAL.out_DRV: PUSH BC ;
|
PORTAL.out_DRV: PUSH BC ;
|
||||||
.RETBANK+2: LD BC,0*256+SLOT0 ;
|
.RETBANK+2: LD BC,SLOT0 + 0*256;
|
||||||
.switch: OUT (C),B ;
|
.switch: OUT (C),B ;
|
||||||
ASSERT $!=84,'-> Portal error!';
|
ASSERT $!=84,'-> Portal error!';
|
||||||
;Entry point from DSS main page
|
;Entry point from DSS main page
|
||||||
@ -218,6 +218,215 @@ PORTAL.outDRV: ;
|
|||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
/*
|
||||||
|
; !!! ‚›‡›‚€’œ ’Ž‹œŠŽ —…<E28094>…‡ RST #10 ¢ DSS-MAIN !!!
|
||||||
|
RESCAN_DRV:
|
||||||
|
AND A
|
||||||
|
LD A,R
|
||||||
|
PUSH AF
|
||||||
|
DI
|
||||||
|
;;
|
||||||
|
IN A,(SLOT3)
|
||||||
|
LD (.restore_page),A
|
||||||
|
LD A,(PORTAL.out_DRV.RETBANK)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,(BOOTDRV+#C000) ; ã§ «¨ «®£.®¬¥à boot ¤¨áª
|
||||||
|
LD (.BOOT),A ; á®åà ¨«¨
|
||||||
|
.restore_page+1:
|
||||||
|
LD A,0
|
||||||
|
OUT (SLOT3),A
|
||||||
|
|
||||||
|
LD A,(.BOOT)
|
||||||
|
CP 2
|
||||||
|
JR C,.Change ; bootdisk - ¤¨áª¥â ?
|
||||||
|
|
||||||
|
LD C,A
|
||||||
|
ADD A
|
||||||
|
ADD C
|
||||||
|
LD HL,DEVICE
|
||||||
|
LD C,A
|
||||||
|
XOR A
|
||||||
|
LD B,A
|
||||||
|
ADC HL,BC
|
||||||
|
LD DE,.DEVICE
|
||||||
|
LD BC,3 ;!HARDCODE ¤«¨ § ¯¨á¨ ¢ DEVICE
|
||||||
|
LDIR ; á®åà ¨«¨ § ¯¨áì boot-dsk
|
||||||
|
;!TODO âãâ ¯®ª à ¡®â ¥â ¢ ਠ⠧ ¬¥ë ¡ãª¢ë ¤«ï boot-RAM-DRV ¨ HDD
|
||||||
|
LD DE,.DEVICE+1
|
||||||
|
LD HL,HDDRIVE
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR Z,.HDD_SYS
|
||||||
|
;
|
||||||
|
LD HL,RMDRIVE
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NZ,.Change
|
||||||
|
;
|
||||||
|
.RMD_SYS:
|
||||||
|
LD A,#60
|
||||||
|
LD (.BOOT_TYPE),A
|
||||||
|
LD A,(.DEVICE)
|
||||||
|
LD HL,RAMDTBL
|
||||||
|
SLA A
|
||||||
|
ADD A,L
|
||||||
|
LD L,A
|
||||||
|
LD A,0
|
||||||
|
ADC A,H
|
||||||
|
LD H,A
|
||||||
|
;’ãâ ¢ HL ¤à¥á ¯¥à¢®£® ¡ ©â § ¯¨á¨ ® boot RAM-DRV
|
||||||
|
LD DE,.RAMDTBL
|
||||||
|
LD BC,RAMDTBL.TBL_Entry
|
||||||
|
LDIR ; á®åà ¨«¨ § ¯¨áì ® RAM-DRV
|
||||||
|
JP .Change
|
||||||
|
;
|
||||||
|
.HDD_SYS:
|
||||||
|
LD A,#80
|
||||||
|
LD (.BOOT_TYPE),A
|
||||||
|
;
|
||||||
|
LD A,(.DEVICE)
|
||||||
|
ADD A,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,A
|
||||||
|
LD HL,LOGDRV
|
||||||
|
ADD A,L
|
||||||
|
LD L,A
|
||||||
|
LD A,0
|
||||||
|
ADC A,H
|
||||||
|
LD H,A
|
||||||
|
; ’ãâ ¢ HL ¤à¥á ¯¥à¢®£® ¡ ©â § ¯¨á¨ ® boot à §¤¥«¥
|
||||||
|
LD DE,.LOGDRV
|
||||||
|
LD BC,LOGDRV.TBL_Entry
|
||||||
|
LDIR ; á®åà ¨«¨ § ¯¨áì ® HDD à §¤¥«¥
|
||||||
|
|
||||||
|
;JP .Change
|
||||||
|
.Change: CALL INITDVC_RET_DRIVE
|
||||||
|
LD A,(.BOOT)
|
||||||
|
CP 2
|
||||||
|
JR C,.exit ; bootdisk - ¤¨áª¥â ?
|
||||||
|
|
||||||
|
; 3. <20>஢¥à¨âì, ᬥ¨« áì «¨ ¡ãª¢ boot-drv ¨ ¢ë©â¨, ¥á«¨ ¥â.
|
||||||
|
; 4. …᫨ boot HDD ¨ ¥£® ¡ãª¢ã § ï« HDD, â® ¬¥ï¥¬ ¬¥áâ ¬¨ ¨å
|
||||||
|
; § ¯¨á¨ ¢ â ¡«¨æ å DEVICE ¨ LOGDRV.
|
||||||
|
; …᫨ boot HDD ¨ ¥£® ¡ãª¢ã § ï« RAM Drive, â® ¨¤¨ å¥à, ¥ ¬®¦¥â ¡ëâì)).
|
||||||
|
; …᫨ boot FDD â® ¨å¥à ¥ á«ãç¨âáï.
|
||||||
|
; …᫨ boot CD-ROM, â® ¯®¤ã¬ ¥¬, ª®£¤ ¤® í⮣® ¤®¦¨¢ñ¬.
|
||||||
|
; …᫨ boot RAM Drive ¨ ¥£® ¡ãª¢ã § ï« HDD, ⮠㦮 ᬥ¨âì
|
||||||
|
; ¨å ¬¥áâ ¬¨ ¢ â ¡«¨æ¥ DEVICE.
|
||||||
|
; !!!!! çâ® ¡ã¤¥â, ¥á«¨ ¡ãª¢ ¡ãâ-¤¨áª …, ¯®á«¥ à¥áª
|
||||||
|
; § £àã§®çë© à §¤¥« ®ª § «áï ¥¤¨áâ¢¥ë¬ ¢ á¨á⥬¥?
|
||||||
|
; € ¥á«¨ áà §ã ¡ã¤ãâ ¨§¬¥¥¨ï á RAM ¤¨áª ¬¨ ¨ HDD à §¤¥« ¬¨?
|
||||||
|
|
||||||
|
LD A,(.BOOT_TYPE)
|
||||||
|
CP #60 ;!HARDCODE ram drive
|
||||||
|
JR NZ,.restore_HDD
|
||||||
|
.restore_RMD:
|
||||||
|
LD A,(.RAMDTBL+1)
|
||||||
|
LD HL,RAMDTBL+1
|
||||||
|
LD B,RAMDTBL.Size / RAMDTBL.TBL_Entry
|
||||||
|
|
||||||
|
.loop_RMD:
|
||||||
|
CP (HL)
|
||||||
|
JR Z,.found_RMD ; ZF - 諨 ¢ ®¢®© RAMDTBL bootdisk ¯® ¥£® 䨧¨ç¥áª®¬ã ®¬¥àã
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop_RMD
|
||||||
|
JP .BIG_ERROR ; bootdisk died...
|
||||||
|
|
||||||
|
.found_RMD:
|
||||||
|
LD A,RAMDTBL.Size / RAMDTBL.TBL_Entry
|
||||||
|
SUB B
|
||||||
|
LD (.DEVICE),A ; new bootdisk log.number in RAMDTBL
|
||||||
|
DEC HL
|
||||||
|
LD A,(HL) ; «®£¨ç¥áª¨© ®¬¥à ¤«ï ¯®¨áª ¢ DEVICE
|
||||||
|
LD (.DEVICE_NEW),A ; á®åà 塞
|
||||||
|
|
||||||
|
; ¯®¨áª ®¬¥à § ¯¨á¨ ¯® ¥ñ «®£¨ç¥áª®¬ã ¤¨áªã + ¯à®æ¥¤ãॠ®¡à ¡®â稪
|
||||||
|
LD HL,DEVICE-DEVICE.TBL_Entry
|
||||||
|
LD DE,DEVICE.TBL_Entry
|
||||||
|
LD BC,DEVICE.Size / DEVICE.TBL_Entry
|
||||||
|
.found_RMD.nxt:
|
||||||
|
AND A
|
||||||
|
ADC HL,DE
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
POP HL
|
||||||
|
LD DE,.DEVICE
|
||||||
|
LD B,DEVICE.TBL_Entry
|
||||||
|
CALL COMPARE_BYTES
|
||||||
|
EXX
|
||||||
|
JR Z, found entry
|
||||||
|
DJNZ NZ,.found_RMD.nxt
|
||||||
|
.BIG_ERROR:
|
||||||
|
;;;;
|
||||||
|
|
||||||
|
|
||||||
|
LD BC,DEVICE.Size / DEVICE.TBL_Entry
|
||||||
|
AND A
|
||||||
|
|
||||||
|
; ¤«¨ § ¯¨á¨. áà ¢¨¢ ¥¬ ¯®«®¥ ᮢ¯ ¤¥¨¥ .DEVICE á
|
||||||
|
; ®¤®© ¨§ § ¯¨á¥© DEVICE
|
||||||
|
LD B,DEVICE.TBL_Entry
|
||||||
|
.rmd_loop_search:
|
||||||
|
LD A,(DE)
|
||||||
|
CP (HL)
|
||||||
|
JR NZ,.nxt_loop_
|
||||||
|
INC DE
|
||||||
|
INC HL
|
||||||
|
DJNZ .rmd_loop_search
|
||||||
|
|
||||||
|
POP BC
|
||||||
|
|
||||||
|
|
||||||
|
;JP P,.BIG_ERROR ; ¥á«¨ ¯à®è¥àá⨫¨ § ¯à¥¤¥«ë â ¡«¨æë
|
||||||
|
|
||||||
|
;
|
||||||
|
JP .exit
|
||||||
|
;
|
||||||
|
.restore_HDD:
|
||||||
|
|
||||||
|
;JP .exit
|
||||||
|
;;
|
||||||
|
.exit: LD HL,.Start_buffer
|
||||||
|
LD (HL),#FF
|
||||||
|
LD DE,.Start_buffer+1
|
||||||
|
LD BC,.Size_buffer-1
|
||||||
|
LDIR ; ¯®¬ëâì § ᮡ®î))
|
||||||
|
|
||||||
|
POP AF
|
||||||
|
LD A,(DRV_PAGE.LDRIVE)
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
.Start_buffer:
|
||||||
|
.BOOT: DB #FF ; «®£¨ç¥áª¨© ®¬¥à
|
||||||
|
.BOOT_TYPE: DB #FF ; 00, #60, #80, #C0
|
||||||
|
.DEVICE: BLOCK 3,#FF
|
||||||
|
.DEVICE_NEW: BLOCK 3,#FF
|
||||||
|
.LOGDRV: BLOCK 16,#FF
|
||||||
|
.RAMDTBL: BLOCK 2,#FF ; «®£ RMD, 䨧 RMD
|
||||||
|
.Size_buffer EQU $-.Start_buffer
|
||||||
|
|
||||||
|
;‚•Ž„: HL,DE - ¤à¥á áà ¢¨¢ ¥¬ëå ¡«®ª®¢, B - ¤«¨ ¡«®ª
|
||||||
|
;‚›•Ž„: ZF - ¡«®ª¨ ®¤¨ ª®¢ë, ¢ HL ¨ DE ¤à¥á á«¥¤ãî饣® ¡ ©â ¯®á«¥ ᮢ¯ ¢è¥£® ¡«®ª
|
||||||
|
; NZ - ¡«®ª¨ ¥®¤¨ ª®¢ë.
|
||||||
|
COMPARE_BYTES:
|
||||||
|
LD A,(DE)
|
||||||
|
CP (HL)
|
||||||
|
RET NZ
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ COMPARE_BYTES
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
DRV_PAGE.LDRIVE: DB #00
|
||||||
|
|
||||||
DISPATCH:
|
DISPATCH:
|
||||||
LD HL,INTDISK
|
LD HL,INTDISK
|
||||||
LD (ADCALL),HL
|
LD (ADCALL),HL
|
||||||
@ -226,9 +435,6 @@ INITDVC_RET_DRIVE:
|
|||||||
LD A,(DRV_PAGE.LDRIVE)
|
LD A,(DRV_PAGE.LDRIVE)
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
|
||||||
|
|
||||||
DRV_PAGE.LDRIVE: DB #00
|
|
||||||
|
|
||||||
INCLUDE 'dss/media_drivers/shared-drv.asm'
|
INCLUDE 'dss/media_drivers/shared-drv.asm'
|
||||||
INCLUDE 'dss/media_drivers/ide-drv.asm'
|
INCLUDE 'dss/media_drivers/ide-drv.asm'
|
||||||
|
|||||||
@ -1,4 +1,16 @@
|
|||||||
|
|
||||||
|
;
|
||||||
|
MACRO _CALC_DEVICE_ENTRY tbl_addr
|
||||||
|
LD C,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,C
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD HL,tbl_addr
|
||||||
|
ADD HL,BC
|
||||||
|
ENDM
|
||||||
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
MACRO SET_PAGE_X new_page
|
MACRO SET_PAGE_X new_page
|
||||||
IF OLD_SET_BANK
|
IF OLD_SET_BANK
|
||||||
|
|||||||
@ -169,8 +169,6 @@
|
|||||||
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
||||||
; 13 (0Dh) - RESERVED
|
; 13 (0Dh) - RESERVED
|
||||||
|
|
||||||
LD_DSK EQU 16 ; ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å ¤¨áª®¢ ¢ á¨á⥬¥
|
|
||||||
|
|
||||||
; IDE0 EQU #0C1C0
|
; IDE0 EQU #0C1C0
|
||||||
; IDE1 EQU #0C1C8
|
; IDE1 EQU #0C1C8
|
||||||
PART EQU #C000
|
PART EQU #C000
|
||||||
@ -304,7 +302,6 @@ DRVCLC: INC A
|
|||||||
; DS 28 ;RESERVED
|
; DS 28 ;RESERVED
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;+00 ;SECTORS PER TRACK
|
;+00 ;SECTORS PER TRACK
|
||||||
;+01 ;TRACKS PER CYLLINDER
|
;+01 ;TRACKS PER CYLLINDER
|
||||||
;+02 ;RESERVED
|
;+02 ;RESERVED
|
||||||
@ -315,24 +312,35 @@ DRVCLC: INC A
|
|||||||
;+07 ;RESERVED
|
;+07 ;RESERVED
|
||||||
|
|
||||||
|
|
||||||
LOGDRV: BLOCK 16*LD_DSK,0 ;!FIXIT ¯¥à¥¥á⨠ª ¡ãä¥à ¬ ¢ ª®¥æ áâà ¨æë
|
|
||||||
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
;+01 LONG SECTOR OFFSET
|
;+01 LONG SECTOR OFFSET
|
||||||
;+05 LONG SIZE IN SECTORS
|
;+05 LONG SIZE IN SECTORS
|
||||||
;+09 FREE
|
;+09 FREE
|
||||||
;+15
|
;+15
|
||||||
|
LOGDRV: BLOCK .TBL_Entry*LD_DSK,0 ;!FIXIT ¯¥à¥¥á⨠ª ¡ãä¥à ¬ ¢ ª®¥æ áâà ¨æë
|
||||||
|
.TBL_Entry EQU 16
|
||||||
.Size EQU $-LOGDRV
|
.Size EQU $-LOGDRV
|
||||||
|
|
||||||
|
|
||||||
SELHDD: PUSH DE
|
SELHDD: PUSH DE
|
||||||
PUSH BC
|
PUSH BC
|
||||||
PUSH HL
|
PUSH HL
|
||||||
|
;!TEST
|
||||||
|
;SLA A
|
||||||
|
;RLCA
|
||||||
|
;SLA A
|
||||||
|
;LD L,A
|
||||||
|
;LD H,0
|
||||||
|
;RL H
|
||||||
|
;ADD HL,HL
|
||||||
|
;
|
||||||
|
; original
|
||||||
LD L,A
|
LD L,A
|
||||||
LD H,0
|
LD H,0
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
|
;
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD IY,LOGDRV
|
LD IY,LOGDRV
|
||||||
ADD IY,DE
|
ADD IY,DE
|
||||||
@ -547,7 +555,7 @@ GBPB_H: PUSH IY
|
|||||||
; DE - ADDRESS
|
; DE - ADDRESS
|
||||||
; B - COUNTER
|
; B - COUNTER
|
||||||
; A'- PAGE
|
; A'- PAGE
|
||||||
; A - HDD NUMBER +#80
|
; A - HDD LOG NUMBER
|
||||||
;READ SECTOR
|
;READ SECTOR
|
||||||
LREADH: PUSH IY
|
LREADH: PUSH IY
|
||||||
CALL SELHDD
|
CALL SELHDD
|
||||||
|
|||||||
@ -332,7 +332,7 @@ INIT_RD:
|
|||||||
JP 1F
|
JP 1F
|
||||||
.noDRV: POP BC
|
.noDRV: POP BC
|
||||||
1: INC B
|
1: INC B
|
||||||
LD A,RAMDTBL.Size / 2
|
LD A,RAMDTBL.Size / RAMDTBL.TBL_Entry
|
||||||
CP B
|
CP B
|
||||||
JR NZ,.initLoop
|
JR NZ,.initLoop
|
||||||
|
|
||||||
@ -346,9 +346,11 @@ INIT_RD:
|
|||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
;!TODO ¢®âªãâì í⨠¢á直¥ â ¡«¨æë ¢ ª®¥æ ä ©« ¨ ªâ¨¢¨à®¢ âì ª ª áâàãªâãàë, ç⮡ ¡¨ ਪ ¬¥ìè¥ ¢¥á¨«
|
||||||
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||||||
; DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
|
; Log Number: DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
|
||||||
RAMDTBL: DUP MAX_RAMDRIVES * 2
|
RAMDTBL.TBL_Entry EQU 2
|
||||||
|
RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
||||||
DB #FF
|
DB #FF
|
||||||
EDUP
|
EDUP
|
||||||
.Size EQU $-RAMDTBL
|
.Size EQU $-RAMDTBL
|
||||||
|
|||||||
@ -123,7 +123,6 @@
|
|||||||
; RST 18h. ‚¥ªâ®à ¤¨áª®¢ëå ãáâனáâ¢
|
; RST 18h. ‚¥ªâ®à ¤¨áª®¢ëå ãáâனáâ¢
|
||||||
; ¢å®¤: a=®¬¥à ãáâனá⢠(0-25)
|
; ¢å®¤: a=®¬¥à ãáâனá⢠(0-25)
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
DSS_MAX_DRIVES_AMOUNT EQU 26
|
|
||||||
INTDISK:
|
INTDISK:
|
||||||
;R01
|
;R01
|
||||||
CP #FF
|
CP #FF
|
||||||
@ -134,13 +133,16 @@ INTDISK:
|
|||||||
;
|
;
|
||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH BC
|
PUSH BC
|
||||||
LD C,A
|
|
||||||
ADD A,A
|
_CALC_DEVICE_ENTRY DEVICE
|
||||||
ADD A,C
|
; LD C,A
|
||||||
LD C,A
|
; ADD A,A
|
||||||
LD B,0
|
; ADD A,C
|
||||||
LD HL,DEVICE
|
; LD C,A
|
||||||
ADD HL,BC
|
; LD B,0
|
||||||
|
; LD HL,DEVICE
|
||||||
|
; ADD HL,BC
|
||||||
|
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
INC A
|
INC A
|
||||||
JR Z,NODEV
|
JR Z,NODEV
|
||||||
@ -153,7 +155,6 @@ INTDISK:
|
|||||||
POP BC
|
POP BC
|
||||||
EX (SP),HL
|
EX (SP),HL
|
||||||
RET
|
RET
|
||||||
|
|
||||||
NODEV: POP BC
|
NODEV: POP BC
|
||||||
POP HL
|
POP HL
|
||||||
LD A,DSS_Error.drv.INVALID_DRIVE
|
LD A,DSS_Error.drv.INVALID_DRIVE
|
||||||
@ -161,8 +162,9 @@ NODEV: POP BC
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
PDEVICE DW DEVICE
|
PDEVICE DW DEVICE
|
||||||
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT*3,#FF
|
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT*.TBL_Entry,#FF
|
||||||
.Size: DB #FF
|
.Size: DB #FF
|
||||||
|
.TBL_Entry EQU 3
|
||||||
|
|
||||||
FLOPPY EQU #0001
|
FLOPPY EQU #0001
|
||||||
FIXED EQU #0002
|
FIXED EQU #0002
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
218
|
242
|
||||||
@ -7,6 +7,8 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
|
LD_DSK EQU 16 ; ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
|
||||||
|
DSS_MAX_DRIVES_AMOUNT EQU 26
|
||||||
DEFINE MAX_RAMDRIVES 16
|
DEFINE MAX_RAMDRIVES 16
|
||||||
DEFINE NeedSafePort_Y 1
|
DEFINE NeedSafePort_Y 1
|
||||||
DEFINE TABisSPACES 0
|
DEFINE TABisSPACES 0
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit cc0bf0dfac766dd97e7a5441b523034921cf3830
|
Subproject commit 84a92620cab98867eb5b892d1ae17cd206c2b1bd
|
||||||
Loading…
Reference in New Issue
Block a user