mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
157 lines
3.1 KiB
NASM
157 lines
3.1 KiB
NASM
; !TODO § ¯®¬¨ âì ¯à¥àë¢ ¨ï, ®âª«îç âì áâ àâ¥, ¢®ááâ ¢«¨¢ âì ¢ë室¥
|
||
SCANDRV:
|
||
;1 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||
; LD A,(LDRIVE)
|
||
; LD (.old_ldrive),A
|
||
;
|
||
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 |