mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
some small bugs fixed. rescan moved to drv page
This commit is contained in:
parent
7bbdc8de36
commit
f1ea98ff47
@ -619,8 +619,6 @@ Func_57:xor a
|
||||
and a
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #58. ‚뢥á⨠ᨬ¢®« íªà .
|
||||
; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëçë¥ á¨¬¢®«ë.
|
||||
@ -717,10 +715,8 @@ Func_55:djnz A0EBA
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
db 0DDh
|
||||
ld h,d
|
||||
db 0DDh
|
||||
ld l,e
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
inc d
|
||||
dec h
|
||||
xor a
|
||||
|
||||
BIN
DOS/SYSTEM.DOS
BIN
DOS/SYSTEM.DOS
Binary file not shown.
43
DSS/DOS5.ASM
43
DSS/DOS5.ASM
@ -674,8 +674,8 @@ GETWORD:
|
||||
.next: SUB 'A'
|
||||
PUSH HL
|
||||
;!TEST CHNDISK OPENDSK
|
||||
;CALL OPENDSK
|
||||
CALL CHNDISK
|
||||
CALL OPENDSK
|
||||
;CALL CHNDISK
|
||||
;
|
||||
POP HL
|
||||
JP NC,GETWORD
|
||||
@ -702,14 +702,10 @@ CHNDISK:
|
||||
LD A,B
|
||||
RET
|
||||
|
||||
/*
|
||||
RET C
|
||||
|
||||
PUSH AF
|
||||
CALL LOADDIR
|
||||
POP AF
|
||||
*/
|
||||
|
||||
; RET C
|
||||
; PUSH AF
|
||||
; CALL LOADDIR
|
||||
; POP AF
|
||||
RET
|
||||
;
|
||||
;????? R10
|
||||
@ -937,13 +933,16 @@ IT_DIR: LD E,(IX+_sFM.ST_CLUSTER)
|
||||
;
|
||||
; ¢å®¤: HL - ¡ãä¥à ¢ ¯ ¬ï⨠256 ¡ ©â
|
||||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||
; !FIXIT ¬®¦¥â ¢ë©â¨ § ¯à¥¤¥«ë ¡ãä¥à ?
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
CURRDIR: EX DE,HL
|
||||
LD HL,DIRSPEC
|
||||
CURDIR1 LD A,(HL)
|
||||
OR A
|
||||
XOR A
|
||||
.loop: ;LD A,(HL)
|
||||
;OR A
|
||||
CP (HL)
|
||||
LDI
|
||||
JR NZ,CURDIR1
|
||||
JR NZ,.loop
|
||||
RET
|
||||
|
||||
|
||||
@ -1760,15 +1759,15 @@ MKD03 INC HL
|
||||
|
||||
INC HL
|
||||
|
||||
IF OLD_SET_BANK
|
||||
PUSH HL
|
||||
ENDIF
|
||||
; IF OLD_SET_BANK
|
||||
; PUSH HL
|
||||
; ENDIF
|
||||
|
||||
SET_PAGE_X DIRPAGE
|
||||
|
||||
IF OLD_SET_BANK
|
||||
POP HL
|
||||
ENDIF
|
||||
; IF OLD_SET_BANK
|
||||
; POP HL
|
||||
; ENDIF
|
||||
|
||||
PUSH AF
|
||||
LD A,(DIR)
|
||||
@ -1785,6 +1784,7 @@ MKD04 EX DE,HL
|
||||
LDIR
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
|
||||
EX DE,HL
|
||||
LD D,H
|
||||
LD E,L
|
||||
@ -1792,6 +1792,7 @@ MKD04 EX DE,HL
|
||||
LD (HL),0
|
||||
LD BC,512-65
|
||||
LDIR ;!FIXIT 㦮 «¨ â ª ¬®£® £à®å âì?
|
||||
|
||||
POP HL
|
||||
CALL NSECTOR
|
||||
LD A,(BootSector.S_P_C) ; ᥪâ®à®¢ ª« áâ¥à
|
||||
@ -1816,6 +1817,7 @@ MKD12 PUSH AF
|
||||
LD BC,511
|
||||
LD (HL),0
|
||||
LDIR ;!FIXIT 㦮 «¨ â ª ¬®£® £à®å âì?
|
||||
|
||||
POP IX
|
||||
POP HL
|
||||
INC IX
|
||||
@ -1877,7 +1879,7 @@ RMD12 PUSH AF
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
|
||||
LD B,16
|
||||
LD B,16 ;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ®£® ᥪâ®à
|
||||
LD HL,SECBUF
|
||||
RMD10 LD A,(HL)
|
||||
OR A
|
||||
@ -1896,6 +1898,7 @@ RMD10 LD A,(HL)
|
||||
RMD14 LD DE,#0020
|
||||
ADD HL,DE
|
||||
DJNZ RMD10
|
||||
|
||||
POP IX
|
||||
POP HL
|
||||
INC IX
|
||||
|
||||
177
DSS/DOS_X.ASM
177
DSS/DOS_X.ASM
@ -34,11 +34,19 @@
|
||||
// SCF
|
||||
// RET
|
||||
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #00. ‚¥àá¨ï „Ž‘.
|
||||
; ‚®§¢à é ¥â ®¬¥à ¢¥àᨨ ¤¨áª®¢®© á¨á⥬ë.
|
||||
; ¢å®¤: ¥â
|
||||
; ¢ë室: DE = ®¬¥à ¢¥àᨨ/¬®¤¨ä¨ª 樨
|
||||
; BC = ®¬¥à ¡¨«¤ (0..999)
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
VERSION:
|
||||
;XOR A
|
||||
;LD H,A ;!TODO ¯¨å âì áî¤ OSINFO
|
||||
;LD L,A
|
||||
LD HL,0
|
||||
LD DE,VERS*256+MODF
|
||||
XOR A
|
||||
LD H,A ;!TODO ¯¨å âì áî¤ OSINFO
|
||||
LD L,A
|
||||
LD BC,BUILD
|
||||
RET
|
||||
|
||||
@ -127,14 +135,32 @@ NDISK11:
|
||||
RET
|
||||
*/
|
||||
|
||||
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #02. <20>®¬¥à ⥪ã饣® ¤¨áª .
|
||||
;
|
||||
; ¢å®¤: ¥â
|
||||
; ¢ë室: A - ®¬¥à ¤¨áª (0=A,1=B,..)
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
CURRDSK: LD A,(FatBuffer.DRIVE)
|
||||
AND A
|
||||
RET
|
||||
|
||||
DISKINF: INC A
|
||||
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #03. ˆä®à¬ æ¨ï ® ¤¨áª¥.
|
||||
; ‚®§¢à é ¥â ¨ä®à¬ æ¨î ®¡ ®¡é¥¬ ¨ ᢮¡®¤®¬ ¯à®áâà á⢥ ¤¨áª®¢®£®
|
||||
; ãáâனá⢠.
|
||||
;
|
||||
; ¢å®¤: A - ®¬¥à ¤¨áª (0=A,1=B,..#FF-⥪ã騩)
|
||||
; ¢ë室: A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å, ¥á«¨ CF=0
|
||||
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||||
; DE - ᢮¡®¤ëå ª« áâ¥à®¢
|
||||
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
DISKINF:
|
||||
CP #FF
|
||||
JR Z,CURRDS ;R06
|
||||
DEC A ;R06
|
||||
CALL CHNDISK ;R06
|
||||
RET C ;R06
|
||||
CURRDS: LD HL,2
|
||||
@ -161,11 +187,13 @@ FRESP2: LD D,B
|
||||
AND A
|
||||
RET
|
||||
|
||||
; <20>®¬¥à ¯®á«¥¤¥£® ¤¨áª ¢ á¨á⥬¥
|
||||
LDRIVE: DB DSS_MAX_DRIVES_AMOUNT
|
||||
IF COMPILE_UNUSED_CODE
|
||||
TDRIVE: DB #00
|
||||
TCLUST: DW #0000
|
||||
TCOUNT: DW #0000
|
||||
|
||||
ENDIF
|
||||
;R04SIZE2CL LD DE,(B_P_C)
|
||||
;R04 XOR A
|
||||
;R04 SCF
|
||||
@ -188,12 +216,14 @@ TCOUNT: DW #0000
|
||||
;R04H_SEC_X DW 0
|
||||
|
||||
; !FIXIT çñâ ¥ ¨á¯®«ì§ã¥âáï
|
||||
IF COMPILE_UNUSED_CODE
|
||||
TESTDSK:
|
||||
; LD A,(FatBuffer.DRIVE)
|
||||
; LD C,Dss.DRV.MediaCheck
|
||||
; RST ToDSS.DRV
|
||||
; OR A
|
||||
; RET Z
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD C,Dss.DRV.MediaCheck
|
||||
RST ToDSS.DRV
|
||||
OR A
|
||||
RET Z
|
||||
ENDIF
|
||||
RD_BPB: LD C,SLOT3
|
||||
IN B,(C)
|
||||
PUSH BC
|
||||
@ -211,8 +241,10 @@ RD_BPB: LD C,SLOT3
|
||||
POP BC
|
||||
OUT (C),B
|
||||
JP C,DOS_X_Error.Not_ready
|
||||
PUSH IY
|
||||
LD DE,#AA55 ;R05
|
||||
|
||||
//PUSH IY ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
||||
|
||||
LD DE,#AA55 ; ᨣ âãà ;R05
|
||||
LD HL,(SECBUF+510) ;R08 ;R07
|
||||
;R05
|
||||
AND A
|
||||
@ -225,8 +257,10 @@ RD_BPB: LD C,SLOT3
|
||||
LDIR
|
||||
;
|
||||
|
||||
LD IY,BootSector
|
||||
LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||
//LD IY,BootSector ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
||||
//LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||
LD A,(BootSector.ID_FORM)
|
||||
|
||||
CP #F0
|
||||
JP C,DOS_X_Error.UnknownBPB
|
||||
|
||||
@ -235,8 +269,10 @@ RD_BPB: LD C,SLOT3
|
||||
;LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||
;LD D,(IY+_sBOOT_SEC.RESERVE+1)
|
||||
;ADD HL,DE
|
||||
LD L,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||
LD H,(IY+_sBOOT_SEC.RESERVE+1)
|
||||
|
||||
//LD L,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||
//LD H,(IY+_sBOOT_SEC.RESERVE+1)
|
||||
LD HL,(BootSector.RESERVE)
|
||||
;
|
||||
|
||||
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
|
||||
@ -247,8 +283,11 @@ RD_BPB: LD C,SLOT3
|
||||
LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1
|
||||
LD (FatBuffer.FAT2_XX),HL
|
||||
|
||||
LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT
|
||||
LD D,(IY+_sBOOT_SEC.S_P_F+1)
|
||||
//LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT
|
||||
//LD D,(IY+_sBOOT_SEC.S_P_F+1)
|
||||
LD DE,(BootSector.S_P_F)
|
||||
|
||||
|
||||
LD A,(BootSector.FAT_NUM) ; amount FATs
|
||||
CP 1
|
||||
JR Z,.loop1
|
||||
@ -259,22 +298,40 @@ RD_BPB: LD C,SLOT3
|
||||
.loop1: ADD HL,DE
|
||||
DEC A
|
||||
JR NZ,.loop1
|
||||
|
||||
LD (FatBuffer.DIR_FRM),HL ; first sector DIR
|
||||
LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sectors
|
||||
LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
; CF = ? ¬ «® «¨
|
||||
AND A
|
||||
; CF = 0
|
||||
|
||||
//LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sectors
|
||||
//LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
LD BC,(BootSector.B_P_S)
|
||||
; RL C
|
||||
; RL B
|
||||
; RL C
|
||||
; RL B
|
||||
; RL C
|
||||
; RL B
|
||||
; LD C,B
|
||||
; LD B,0 ; BC - File handels in sectors
|
||||
; LD A,C
|
||||
;;;;
|
||||
LD A,B
|
||||
RL C
|
||||
RL B
|
||||
RLA
|
||||
RL C
|
||||
RL B
|
||||
RLA
|
||||
RL C
|
||||
RL B
|
||||
LD C,B
|
||||
RLA
|
||||
LD C,A
|
||||
LD B,0 ; BC - File handels in sectors
|
||||
LD A,C
|
||||
;;;;
|
||||
LD (FatBuffer.F_P_S),A
|
||||
LD E,(IY+_sBOOT_SEC.F_P_DIR) ; Number file handel
|
||||
LD D,(IY+_sBOOT_SEC.F_P_DIR+1)
|
||||
|
||||
//LD E,(IY+_sBOOT_SEC.F_P_DIR) ; Number file handel
|
||||
//LD D,(IY+_sBOOT_SEC.F_P_DIR+1)
|
||||
LD DE,(BootSector.F_P_DIR)
|
||||
|
||||
EX DE,HL
|
||||
DEC HL
|
||||
XOR A
|
||||
@ -299,10 +356,12 @@ RD_BPB: LD C,SLOT3
|
||||
;LD L,B
|
||||
;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
||||
;LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
||||
LD H,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
LD A,(BootSector.S_P_C)
|
||||
|
||||
//LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
||||
//LD H,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
LD HL,(BootSector.B_P_S) ; Size sector
|
||||
|
||||
LD A,(BootSector.S_P_C) ;!TODO FATcacheSize
|
||||
;NEXTAD3
|
||||
; .loop3: ADD HL,BC ; calc. cluster size
|
||||
; DEC A
|
||||
@ -312,7 +371,7 @@ RD_BPB: LD C,SLOT3
|
||||
JR Z,.loop3.end
|
||||
RRA
|
||||
.loop3: ADD HL,HL
|
||||
RRCA
|
||||
RRA
|
||||
JP NC,.loop3
|
||||
.loop3.end:
|
||||
;
|
||||
@ -330,7 +389,7 @@ RD_BPB: LD C,SLOT3
|
||||
ENDIF
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LD HL,BootSector.ID_FAT
|
||||
LD HL,BootSector.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||
LD DE,FatBuffer.MSG
|
||||
LD B,3
|
||||
;R_BPBL1
|
||||
@ -364,9 +423,12 @@ RD_BPB: LD C,SLOT3
|
||||
IF COMPILE_UNUSED_CODE
|
||||
|
||||
LD HL,0
|
||||
LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
|
||||
LD B,(IY+_sBOOT_SEC.S_P_T+1)
|
||||
LD A,(BootSector.HEADS)
|
||||
|
||||
//LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
|
||||
//LD B,(IY+_sBOOT_SEC.S_P_T+1)
|
||||
LD BC,(BootSector.S_P_T) ; Sector per track
|
||||
|
||||
LD A,(BootSector.HEADS) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||
.BPB_L1: ; calc. sector per cylinder
|
||||
ADD HL,BC
|
||||
DEC A
|
||||
@ -381,15 +443,23 @@ RD_BPB: LD C,SLOT3
|
||||
; AND A
|
||||
; SBC HL,DE
|
||||
; EX DE,HL
|
||||
LD L,(IY+_sBOOT_SEC.S_P_D)
|
||||
LD H,(IY+_sBOOT_SEC.S_P_D+1)
|
||||
|
||||
//LD L,(IY+_sBOOT_SEC.S_P_D)
|
||||
//LD H,(IY+_sBOOT_SEC.S_P_D+1)
|
||||
LD HL,(BootSector.S_P_D)
|
||||
|
||||
LD A,H
|
||||
OR L
|
||||
JP NZ,.HDDSMAL
|
||||
LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS)
|
||||
LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1)
|
||||
LD C,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+2)
|
||||
LD B,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+3)
|
||||
;
|
||||
//LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS)
|
||||
//LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1)
|
||||
LD HL,(BootSector.BPB_BIG_TOTAL_SECTORS)
|
||||
|
||||
//LD C,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+2)
|
||||
//LD B,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+3)
|
||||
LD BC,(BootSector.BPB_BIG_TOTAL_SECTORS+2)
|
||||
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JP NC,.HDDBIG
|
||||
@ -399,7 +469,7 @@ RD_BPB: LD C,SLOT3
|
||||
;AND A ;âãâ CF ¯®«î¡ á á¡à®è¥ ¤®«¦¥ ¡ëâì
|
||||
SBC HL,DE
|
||||
LD BC,0
|
||||
.HDDBIG: LD A,(BootSector.S_P_C)
|
||||
.HDDBIG: LD A,(BootSector.S_P_C) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||
SCF
|
||||
.S4C01: RRA
|
||||
JR C,.S4C02
|
||||
@ -410,7 +480,9 @@ RD_BPB: LD C,SLOT3
|
||||
JP .S4C01
|
||||
.S4C02: INC HL
|
||||
LD (MAX_CLU),HL
|
||||
POP IY
|
||||
|
||||
//POP IY
|
||||
|
||||
; LD DE,FAT
|
||||
; LD HL,0
|
||||
; LD IX,(FAT_FRM)
|
||||
@ -434,7 +506,7 @@ RD_BPB: LD C,SLOT3
|
||||
RET
|
||||
|
||||
.IBM_DOS:
|
||||
LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||
LD A,(BootSector.ID_FORM)
|
||||
CP #F0
|
||||
JR C,DOS_X_Error.UnknownBPB
|
||||
;????? ¤® «¨ ¨§¬¥¨âì?
|
||||
@ -452,15 +524,19 @@ RD_BPB: LD C,SLOT3
|
||||
|
||||
DOS_X_Error:
|
||||
.UnknownBPB:
|
||||
POP IY
|
||||
|
||||
//POP IY
|
||||
|
||||
LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||
SCF
|
||||
RET
|
||||
.Not_ready:
|
||||
LD A,DSS_Error.sys.NOT_READY
|
||||
;SCF
|
||||
; CF = 1
|
||||
RET
|
||||
|
||||
|
||||
|
||||
;!TODO ª ¡ãä¥à ¬!
|
||||
FatBuffer:
|
||||
.MSG: DB 'FAT'
|
||||
@ -487,8 +563,7 @@ FatBuffer:
|
||||
|
||||
;!TODO ª ¡ãä¥à ¬!
|
||||
DIRSPEC: DB '\'
|
||||
;BLOCK DIRSPEC.DEPTH,0 ;????? <20>ë«® 255, ã ‘ ©¬ 256
|
||||
BLOCK DIRSPEC.DEPTH-1,0 ;????? <20>ë«® 255, ã ‘ ©¬ 256
|
||||
BLOCK DIRSPEC.DEPTH
|
||||
;
|
||||
|
||||
;R11
|
||||
|
||||
209
DSS/DRV-MAIN.ASM
209
DSS/DRV-MAIN.ASM
@ -193,7 +193,7 @@ A0066: JP DRV_PAGE.NMI ;
|
||||
; <[DRIVE PAGE SWITCH]> ;
|
||||
_mInfoBLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7
|
||||
PORTAL.out_DRV: PUSH BC ;
|
||||
.RETBANK+2: LD BC,SLOT0 + 0*256;
|
||||
.RETBANK+2: LD BC,SLOT0 + 0*256; ;!!!!! ReScnDRV ¨á¯®«ì§ã¥â íâ® § 票¥
|
||||
.switch: OUT (C),B ;
|
||||
ASSERT $!=84,'-> Portal error!';
|
||||
;Entry point from DSS main page
|
||||
@ -219,213 +219,6 @@ ADCALL+1: CALL DISPATCH ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;
|
||||
|
||||
/*
|
||||
; !!! ‚›‡›‚€’œ ’Ž‹œŠŽ —…<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
|
||||
|
||||
|
||||
@ -134,17 +134,17 @@ XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
|
||||
|
||||
;
|
||||
MACRO SET_PAGE_X new_page
|
||||
IF OLD_SET_BANK
|
||||
LD A,new_page
|
||||
CALL BANK
|
||||
; IF OLD_SET_BANK
|
||||
; LD A,new_page
|
||||
; CALL BANK
|
||||
|
||||
ELSE
|
||||
; ELSE
|
||||
LD A,(BANKTBL+new_page)
|
||||
LD B,A
|
||||
LD C,SLOT3
|
||||
IN A,(SLOT3)
|
||||
OUT (C),B
|
||||
ENDIF
|
||||
; ENDIF
|
||||
ENDM
|
||||
;
|
||||
|
||||
|
||||
@ -829,7 +829,7 @@ EXEC1: CALL EXEC_1
|
||||
|
||||
; ¯à¨ ¢ë室¥ á ®è¨¡ª®©, ¢ ॣ¨áâॠ€ - ª®¤ ®è¨¡ª¨
|
||||
EXEC_1: LD (CMDLINE),HL
|
||||
LD A,#01 ; %7600000R = !FAT_ATTR
|
||||
LD A,#01 ; %7600000R = !FAT_ATTR ;!HARDCODE
|
||||
LD (ACCESS),A
|
||||
CALL GETWORD
|
||||
RET C
|
||||
@ -838,7 +838,7 @@ EXEC_1: LD (CMDLINE),HL
|
||||
CALL MASK
|
||||
RET C
|
||||
CALL TST_EXT
|
||||
LD A,3
|
||||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||
RET C
|
||||
CALL INCTASK ;R08
|
||||
CALL OPENEXE
|
||||
@ -872,6 +872,9 @@ COPYEXN: LD A,(HL)
|
||||
JR NZ,COPYEXN
|
||||
|
||||
CALL FINDPATH
|
||||
;[x] 1/10/2023
|
||||
RET C
|
||||
;
|
||||
LD HL,(CMDLINE)
|
||||
JR EXEC1
|
||||
|
||||
@ -959,7 +962,7 @@ NOINK: LD A,H
|
||||
LD (EXSTACK),SP
|
||||
LD SP,HL
|
||||
EXX
|
||||
;...... ;!FIXIT.<2E>….‘Ž•<C5BD>€<EFBFBD>Ÿ…’.DE.¯¥à¥¤.¢ë§®¢®¬.BIOS..............................;
|
||||
; <20>… ‘Ž•<C5BD>€<EFBFBD>Ÿ…’‘Ÿ DE ¯¥à¥¤ ¢ë§®¢®¬ BIOS, ¡¨®á ¯®ª ¥£® ¨ ¥ ¯®àâ¨â
|
||||
LD A,(EXE_MEM)
|
||||
LD DE,RAMMAP
|
||||
LD BC,0*256 + BIOS.GetMemPage
|
||||
|
||||
249
DSS/FAT_X.ASM
249
DSS/FAT_X.ASM
@ -9,17 +9,18 @@
|
||||
;R01 10-02-1999 DNS UPGRADE FAT CASH
|
||||
;---------------------------------------------------------------
|
||||
|
||||
; “áâ ®¢¨âì ç «ìë© ª« áâ¥à ¤«ï ç⥨ï
|
||||
R_CLUST LD HL,#0001
|
||||
LD (G_CLUST.num),HL
|
||||
RET
|
||||
|
||||
G_CLUST:
|
||||
.num+1: LD HL,#0001
|
||||
G_CLUS1: INC HL
|
||||
CALL R_F_FAT
|
||||
G_CLUS1: INC HL ; ®¬¥à ª« áâ¥à
|
||||
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
CP DSS_Error.sys.DISK_FULL
|
||||
SCF
|
||||
RET Z
|
||||
RET Z ; ®è¨¡ª ?
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,G_CLUS1
|
||||
@ -34,25 +35,30 @@ INC_FAT PUSH HL
|
||||
RET C
|
||||
PUSH HL
|
||||
PUSH HL
|
||||
EX DE,HL ; hl=®¬¥à ª« áâ¥à
|
||||
INC_FA2 CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
EX DE,HL
|
||||
INC_FA2 CALL R_F_FAT
|
||||
JR NC,INC_FA2 ; ¥ ª®¥æ 楯®çª¨
|
||||
EX DE,HL
|
||||
JR NC,INC_FA2
|
||||
EX DE,HL
|
||||
POP DE
|
||||
CALL W_T_FAT
|
||||
POP DE ; ®¬¥à ª« áâ¥à
|
||||
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
POP HL
|
||||
LD DE,(FatBuffer.ENDCLUS)
|
||||
CALL W_T_FAT
|
||||
CALL WR_FAT
|
||||
LD DE,(FatBuffer.ENDCLUS) ; ®¬¥à ª« áâ¥à
|
||||
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
CALL WR_FAT ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
AND A
|
||||
RET
|
||||
|
||||
;R01
|
||||
|
||||
; IN: HL - CLUSTER
|
||||
; OUT: DE - (CLUSTER)
|
||||
;-----------------------------------------------------------
|
||||
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; ¢å®¤: hl = ®¬¥à ª« áâ¥à
|
||||
; ¢ë室: hl = ®¬¥à ª« áâ¥à
|
||||
; de = ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; CF - ª®¥æ 楯®çª¨
|
||||
;!FIXIT ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - à §¤¥« ¥ ¡®«ìè¥ 2Gb
|
||||
;-----------------------------------------------------------
|
||||
R_F_FAT:
|
||||
EX DE,HL
|
||||
LD HL,(MAX_CLU)
|
||||
@ -62,49 +68,42 @@ R_F_FAT:
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
RET C
|
||||
|
||||
EXX ;!TODO optimize
|
||||
SET_PAGE_X FATPAGE
|
||||
EXX ;!TODO optimize
|
||||
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD A,(FatBuffer.FAT_TYP)
|
||||
CP "2"
|
||||
CP "2" ; fat12
|
||||
JR Z,R_F_F12
|
||||
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ®¬¥à
|
||||
R_F_F16:
|
||||
LD A,H
|
||||
LD B,A
|
||||
LD B,H
|
||||
AND #0F
|
||||
LD H,A
|
||||
LD A,B
|
||||
; swap bit7..4 and bit3..0.
|
||||
; bit7..4 --> bit3..0.
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
;
|
||||
AND #0F ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
||||
;
|
||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||
;!TEST
|
||||
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
//LD C,A
|
||||
//LD A,(FATCASH.Block)
|
||||
//CP C
|
||||
;
|
||||
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
|
||||
LD DE,FAT
|
||||
ADD HL,DE
|
||||
LD E,(HL)
|
||||
LD DE,FAT_CACHE ; ç «® ª¥è FAT-
|
||||
ADD HL,DE ; ï祩ªã FAT
|
||||
LD E,(HL) ; ¯à®ç¨â âì ®¬¥à ª« áâ¥à
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
LD HL,#FFEF ;!HARDCODE
|
||||
XOR A ; DssErr.sys.NO_ERROR
|
||||
SBC HL,DE
|
||||
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||
POP HL
|
||||
;LD A,DssErr.sys.NO_ERROR
|
||||
RET
|
||||
|
||||
;R01; HL - CLUSTER
|
||||
@ -165,15 +164,24 @@ R_F_F16:
|
||||
;R01 ADD HL,DE
|
||||
;R01 DEC A
|
||||
|
||||
; R_F_F12 LD D,H
|
||||
; LD E,L
|
||||
; ADD HL,HL
|
||||
; ADD HL,DE
|
||||
; RR H ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
|
||||
; RR L ; CLUSTER * 1.5
|
||||
; PUSH AF ; á®åà. ä« £
|
||||
R_F_F12 LD D,H
|
||||
LD E,L
|
||||
ADD HL,HL
|
||||
ADD HL,DE
|
||||
RR H
|
||||
RR L ;CLUSTER * 1.5
|
||||
PUSH AF
|
||||
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
|
||||
PUSH AF ; á®åà. ä« £
|
||||
ADD HL,DE ; CLUSTER * 1.5
|
||||
;
|
||||
;!FIXIT å¥àï ª ª ï-â®
|
||||
IF COMPILE_UNUSED_CODE
|
||||
LD A,H
|
||||
LD B,A
|
||||
LD B,H
|
||||
AND #1F
|
||||
LD H,A
|
||||
LD A,B
|
||||
@ -183,10 +191,12 @@ R_F_F12 LD D,H
|
||||
AND #07
|
||||
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,RE_FAT
|
||||
LD DE,FAT
|
||||
ADD HL,DE
|
||||
POP AF
|
||||
CALL NZ,RE_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||
ENDIF
|
||||
;
|
||||
LD DE,FAT_CACHE ; ç «® ª¥è FAT-
|
||||
ADD HL,DE ; ï祩ªã FAT
|
||||
POP AF ; ¢®ááâ. ä« £
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
@ -196,27 +206,45 @@ R_F_F12 LD D,H
|
||||
LD D,A
|
||||
JP R_F_F02
|
||||
|
||||
; R_F_F01 LD A,E
|
||||
; AND #F0
|
||||
; LD E,A
|
||||
; RR D ; ¢¯à ¢® 4 ¡¨âa
|
||||
; RR E
|
||||
; RR D
|
||||
; RR E
|
||||
; RR D
|
||||
; RR E
|
||||
; RR D
|
||||
; RR E
|
||||
R_F_F01 LD A,E
|
||||
AND #F0
|
||||
RR D ; ¢¯à ¢® 4 ¡¨âa
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
LD E,A
|
||||
RR D
|
||||
RR E
|
||||
RR D
|
||||
RR E
|
||||
RR D
|
||||
RR E
|
||||
RR D
|
||||
RR E
|
||||
R_F_F02 POP AF
|
||||
OUT (SLOT3),A
|
||||
LD HL,#0FEF
|
||||
XOR A ; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = ã«î
|
||||
SBC HL,DE
|
||||
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||
POP HL
|
||||
RET
|
||||
|
||||
; HL - CLUSTER
|
||||
; DE - (CLUSTER)
|
||||
;-----------------------------------------------------------
|
||||
; ‡ ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
; ¢å®¤: de = ®¬¥à ª« áâ¥à
|
||||
; hl = ? ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||
; ¢ë室: hl = ? ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; de = ®¬¥à ª« áâ¥à
|
||||
; in: HL - CLUSTER
|
||||
; out: DE - (CLUSTER)
|
||||
;-----------------------------------------------------------
|
||||
W_T_FAT PUSH DE
|
||||
EX DE,HL
|
||||
LD HL,(MAX_CLU)
|
||||
@ -224,7 +252,7 @@ W_T_FAT PUSH DE
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
POP DE
|
||||
LD A,10 ;!HARDCODE error number
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
RET C
|
||||
EXX
|
||||
|
||||
@ -236,12 +264,12 @@ W_T_FAT PUSH DE
|
||||
LD A,1
|
||||
LD (FATCASH.Update),A
|
||||
LD A,(FatBuffer.FAT_TYP)
|
||||
CP "2"
|
||||
CP "2" ; fat12
|
||||
JR Z,W_T_F12
|
||||
W_T_F16:
|
||||
PUSH DE
|
||||
LD A,H
|
||||
LD B,A
|
||||
LD B,H
|
||||
AND #0F
|
||||
LD H,A
|
||||
LD A,B
|
||||
@ -254,28 +282,36 @@ W_T_F16:
|
||||
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
|
||||
LD DE,FAT
|
||||
ADD HL,DE
|
||||
LD DE,FAT_CACHE
|
||||
ADD HL,DE ; ï祩ªã FAT
|
||||
POP DE
|
||||
LD (HL),E
|
||||
INC HL
|
||||
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-
|
||||
INC HL ; ®¬¥à ª« áâ¥à
|
||||
LD (HL),D
|
||||
POP AF
|
||||
POP AF ; ¢®ááâ. ¯®àâ
|
||||
POP HL
|
||||
OUT (SLOT3),A
|
||||
XOR A
|
||||
RET
|
||||
|
||||
;
|
||||
; fat12
|
||||
W_T_F12 PUSH DE
|
||||
LD D,H
|
||||
LD E,L
|
||||
ADD HL,HL
|
||||
ADD HL,DE
|
||||
; ADD HL,HL
|
||||
; ADD HL,DE
|
||||
; RR H
|
||||
; RR L ;CLUSTER * 1.5
|
||||
; PUSH AF
|
||||
RR H
|
||||
RR L ;CLUSTER * 1.5
|
||||
PUSH AF
|
||||
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
|
||||
PUSH AF ; á®åà. ä« £
|
||||
ADD HL,DE ; CLUSTER * 1.5
|
||||
;
|
||||
;!FIXIT å¥àï ª ª ï-â®
|
||||
IF COMPILE_UNUSED_CODE
|
||||
LD A,H
|
||||
LD B,A
|
||||
LD B,H
|
||||
AND #1F
|
||||
LD H,A
|
||||
LD A,B
|
||||
@ -285,12 +321,14 @@ W_T_F12 PUSH DE
|
||||
AND #07
|
||||
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,RE_FAT
|
||||
LD DE,FAT
|
||||
CALL NZ,RE_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||
ENDIF
|
||||
;
|
||||
LD DE,FAT_CACHE
|
||||
ADD HL,DE
|
||||
POP AF
|
||||
POP DE
|
||||
JP C,W_T_F01
|
||||
JP C,W_T_F01 ; ®¬¥à ¥çñâë©
|
||||
LD (HL),E
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
@ -303,19 +341,32 @@ W_T_F12 PUSH DE
|
||||
AND A
|
||||
RET
|
||||
|
||||
W_T_F01 SLA E
|
||||
; W_T_F01 SLA E
|
||||
; RL D
|
||||
; RL E
|
||||
; RL D
|
||||
; RL E
|
||||
; RL D
|
||||
; RL E
|
||||
; RL D
|
||||
;
|
||||
W_T_F01:; ¢«¥¢® 4 ¡¨âa
|
||||
SLA E
|
||||
LD A,E
|
||||
RL D
|
||||
RL E
|
||||
RLA
|
||||
RL D
|
||||
RL E
|
||||
RLA
|
||||
RL D
|
||||
RL E
|
||||
RLA
|
||||
RL D
|
||||
LD E,A
|
||||
;
|
||||
LD A,(HL)
|
||||
AND #0F
|
||||
OR E
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD (HL),A ; á®åà. ¢ ª¥è¥ FAT-
|
||||
INC HL ; ®¬¥à ª« áâ¥à
|
||||
LD (HL),D
|
||||
POP AF
|
||||
POP HL
|
||||
@ -324,6 +375,7 @@ W_T_F01 SLA E
|
||||
RET
|
||||
|
||||
;R01
|
||||
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||
; A - NEW FAT BLOCK
|
||||
RE_FAT: PUSH HL
|
||||
PUSH AF
|
||||
@ -334,55 +386,55 @@ RE_FAT: PUSH HL
|
||||
LD L,A
|
||||
LD H,0
|
||||
LD (FATCASH),HL
|
||||
;FAT BLOCK * 16 = SECTOR OF FAT
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
|
||||
ADD HL,HL ;!TODO FATcacheSize
|
||||
;
|
||||
LD DE,(FatBuffer.FAT_FRM)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
LD IX,0
|
||||
ADD IX,DE
|
||||
LD HL,0 ;HL:IX - SECTOR FAT FOR READING
|
||||
LD DE,FAT ; DE - FAT ADDRESS
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
|
||||
LD DE,FAT_CACHE ; ªã¤ ; DE - FAT ADDRESS
|
||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD BC,16*256 + Dss.DRV.Read ;ॣ B: 16 * 512 = 8192 (CASH SIZE) ;!TODO FATcacheSize
|
||||
RST ToDSS.DRV
|
||||
POP HL
|
||||
RET
|
||||
|
||||
WR_FAT: EXX
|
||||
SET_PAGE_X FATPAGE
|
||||
|
||||
EXX
|
||||
; <20>®¤ª«îç¨âì ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
WR_FAT: SET_PAGE_X FATPAGE
|
||||
PUSH AF
|
||||
CALL .Start
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
;
|
||||
; ‡ ¯¨áì ª¥è (¢á¥£®?) FAT- ¤¨áª
|
||||
.Start: LD HL,(FATCASH)
|
||||
LD H,0
|
||||
LD (FATCASH),HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
|
||||
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT ;!TODO FATcacheSize
|
||||
|
||||
PUSH HL
|
||||
LD B,H
|
||||
LD C,L ;BC - BLOCK OF FAT
|
||||
LD DE,16
|
||||
LD DE,16 ;!HARDCODE ;!TODO FATcacheSize
|
||||
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
|
||||
|
||||
LD DE,(BootSector.S_P_F)
|
||||
LD A,16
|
||||
LD DE,(BootSector.S_P_F) ; ᥪâ®à®¢ FAT
|
||||
LD A,16 ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè ;!TODO FATcacheSize
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR C,.WALLFAT
|
||||
EX DE,HL
|
||||
LD HL,16
|
||||
; AND A ;âãâ â®ç® CF ¥ ¢§¢¥¤ñ
|
||||
LD HL,16 ;!HARDCODE ; ç¨á«® ᥪâ®à®¢ ;!TODO FATcacheSize
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
JP C,FATERR
|
||||
LD A,L
|
||||
@ -393,22 +445,23 @@ WR_FAT: EXX
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
LD IX,0
|
||||
ADD IX,DE
|
||||
LD HL,0 ;HL:IX - SECTOR OF FAT FOR SAVE
|
||||
LD DE,FAT
|
||||
LD B,A
|
||||
LD C,Dss.DRV.Write
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
;HL:IX - SECTOR OF FAT FOR SAVE
|
||||
ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||
LD HL,0 ; áâ. à §àï¤
|
||||
LD DE,FAT_CACHE ; ®âªã¤
|
||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||
LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
|
||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
PUSH BC
|
||||
RST ToDSS.DRV
|
||||
POP BC
|
||||
POP BC ; b=ç¨á«® ᥪâ®à®¢
|
||||
POP HL
|
||||
LD DE,(FatBuffer.FAT2_XX)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
LD IX,0
|
||||
ADD IX,DE
|
||||
LD DE,FAT
|
||||
LD DE,FAT_CACHE
|
||||
LD HL,0
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD C,Dss.DRV.Write
|
||||
@ -469,13 +522,13 @@ WR_FAT: EXX
|
||||
;R01 RET
|
||||
|
||||
FATERR: POP HL
|
||||
; SCF
|
||||
; CF = 1
|
||||
RET
|
||||
|
||||
FATCASH: WORD #0000
|
||||
.Block EQU FATCASH
|
||||
.Update EQU FATCASH+1
|
||||
MAX_CLU: WORD #0FF0
|
||||
MAX_CLU: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ FAT12 (¡¥§ á«ã¦.)
|
||||
|
||||
;//MODULE: FAT_X
|
||||
;[END]
|
||||
|
||||
475
DSS/Media_drivers/NScanDRV2.ASM
Normal file
475
DSS/Media_drivers/NScanDRV2.ASM
Normal file
@ -0,0 +1,475 @@
|
||||
;!TODO ª®¤ ¤¨ª® ª®áâë«ìë© ¨ ¡ã¤¥â ¯¥à¥¤¥« ¢¬¥áâ¥ á ¯à®æ¥¤ãன INITDVC
|
||||
ReScanDRV:
|
||||
.NUMBER_OF_SUBTABLES EQU 2 ;ª®«¨ç¥á⢮ â ¡«¨æ ¢â®à®£® ã஢ï (LOGDRV, RMDRIVE)
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
; 0. § ¯®¬¨ ¥¬ ¡ãâ-¤¨áª
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
LD A,B
|
||||
LD (.old_letter),A
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
; 1. ª®¯¨à㥬 ¢ ¡ãä¥à â ¡«¨æë DEVICE, LOGDRV, RAMDTBL
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
LD HL,DEVICE
|
||||
LD DE,OLD_TABLES.DEVICE
|
||||
LD BC,OLD_TABLES.DEVICE - DEVICE
|
||||
LDIR
|
||||
;
|
||||
LD A,.NUMBER_OF_SUBTABLES
|
||||
LD (Fill_if_Exists.tbl),A
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
; 2. ¢ë§ë¢ ¥¬ ¨¨æ¨ «¨§ æ¨î ¤à ©¢®¢
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
CALL INITDVC_RET_DRIVE
|
||||
LD (DRV_PAGE.LDRIVE),A
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
; 3. áà ¢¨¢ ¥¬ § ¯¨á¨ áâ àëå â ¡«¨æ á ®¢ë¬¨:
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
LD HL,OLD_TABLES.DEVICE
|
||||
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
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
; 4. áà ¢¨¢ ¥¬ § ¯¨áì ®¢ëå â ¡«¨æ á® áâ à묨
|
||||
; . ¥á«¨ ¤à ©¢ ⮫쪮 ¢ ®¢®©:
|
||||
; 1) ¢âëª ¥¬ ¥£® ¢ ¯¥à¢ãî ᢮¡®¤ãî § ¯¨áì ¢ DEVICE (¨«¨ áâ ¢¨¬ ¯®á«¥ ¯®á«¥¤¥£® ¤à ©¢ )
|
||||
;
|
||||
; ‚•Ž„: IX - OLD_TABLES.DEVICE
|
||||
; HL - OLD_TABLES.DEVICE.End
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
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
|
||||
LD IY,LOGDRV
|
||||
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),A
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
|
||||
; 5. ¯à®¢¥à塞, ¥ £à®åã«áï «¨ ¡ãâ-¤¨áª.
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
.old_letter+1:
|
||||
LD A,0
|
||||
_CALC_DEVICE_ENTRY OLD_TABLES.DEVICE
|
||||
LD A,(HL)
|
||||
INC A
|
||||
JP Z,ERROR_BOOTDRV_DIES
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
|
||||
; 6. § ¬¥ï¥¬ ®¢ë¥ â ¡«¨æë ¬®¤¨ä¨æ¨à®¢ ë¥ áâ àë¥
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
LD HL,OLD_TABLES.DEVICE
|
||||
LD DE,DEVICE
|
||||
LD BC,OLD_TABLES.DEVICE - DEVICE
|
||||
LDIR
|
||||
;
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
|
||||
;7. ¢ë室
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
LD A,(DRV_PAGE.LDRIVE)
|
||||
RET
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
|
||||
;-----------------------[]
|
||||
.loop2_start:
|
||||
LD C,B ; ç¨ ¥¬ áç¨â âì ¯¥à¥¬¥ãî LDRIVE
|
||||
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
|
||||
;
|
||||
INC C ; ¤®¡ ¢¨«¨ ¤à ©¢
|
||||
;
|
||||
DJNZ .loop2
|
||||
JR .loop1_exit
|
||||
;-----------------------[]
|
||||
|
||||
;-----------------------[]
|
||||
Fill_if_Exists:
|
||||
.tbl+1: LD B,ReScanDRV.NUMBER_OF_SUBTABLES
|
||||
DJNZ 1F
|
||||
; B=1, RAMDTBL
|
||||
LD A,RAMDTBL.TBL_Entry
|
||||
LD IY,RAMDTBL
|
||||
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
|
||||
CALL .RUN
|
||||
LD DE,HDDRIVE
|
||||
RET NC
|
||||
; ¯¥à¥å®¤¨¬ ¤àã£ãî â ¡«¨æã - RAMDTBL
|
||||
LD A,(.tbl)
|
||||
DEC A ;!!!!! ¬®¦¥â ¡ëâì ¯¥à¥¯®«¥¨¥
|
||||
LD (.tbl),A
|
||||
LD HL,OLD_TABLES.RAMDTBL
|
||||
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 ; á®åà 塞 ⥪ã騩 ¤à¥á ®¢®© â ¡«¨æë
|
||||
;
|
||||
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
|
||||
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
|
||||
CALL GET_RAMDRV_NUM.skip_tbl
|
||||
LD (.cur_drv),BC
|
||||
AND #0F
|
||||
LD C,A ; ®¬¥à à ¬¤¨áª
|
||||
; ˆé¥¬ ¢ ®¢®© â ª®© ¦¥ ®¬¥à à ¬¤¨áª
|
||||
LD B,MAX_RAMDRIVES
|
||||
LD DE,RAMDTBL
|
||||
.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 ReScanDRV.nextN2
|
||||
;
|
||||
.found: DEC A
|
||||
; § â¨à ¥¬ ¢ ®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
|
||||
LD (DE),A
|
||||
DEC DE
|
||||
LD (DE),A
|
||||
JP ReScanDRV.nextN
|
||||
;-----[]
|
||||
HARD_DRV:
|
||||
LD L,B
|
||||
LOGDRV_ENTRY_FIND OLD_TABLES.LOGDRV
|
||||
LD IX,LOGDRV
|
||||
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 ReScanDRV.nextN2
|
||||
;
|
||||
.found: ; § â¨à ¥¬ ¢ ®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
|
||||
LD (IX+0),#FF
|
||||
JP ReScanDRV.nextN
|
||||
;
|
||||
; CD_ROM:
|
||||
; JP ReScanDRV.nextN
|
||||
;-----[]
|
||||
; ‚•Ž„: HL - ⥪ãé ï § ¯¨áì ¢ â ¡«¨æ¥ DEVICE
|
||||
; B - è £ ®¡é¥£® 横«
|
||||
KILL_FM:
|
||||
;
|
||||
LD A,DSS_MAX_DRIVES_AMOUNT
|
||||
SUB B
|
||||
LD C,A
|
||||
; ¢âëª ¥¬ áâà ¨æã ï¤à á â ¡«¨æ¥© ä ©«®¢ëå ¬ ¨¯ã«ïâ®à®¢
|
||||
PUSH BC
|
||||
LD A,(PORTAL.out_DRV.RETBANK)
|
||||
LD B,A
|
||||
LD C,SLOT3
|
||||
IN A,(SLOT3)
|
||||
OUT (C),B
|
||||
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
|
||||
;-----------------------[]
|
||||
|
||||
/*
|
||||
[DRIVE TABLES] .Size == DEVICE.Size + LOGDRV.Size + RAMDTBL.Size == 78+1 + 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
|
||||
|
||||
; ’€<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
|
||||
*/
|
||||
@ -524,7 +524,6 @@ IOCTL_RD:
|
||||
; AND A
|
||||
; RET
|
||||
|
||||
;!!!!! ¢ë§ë¢ ¥âáï ¢ SCANDRV, ª®£¤ íâ ¯à®æ¥¤ãà ¢ SLOT3, ¥ ¢ SLOT0
|
||||
GET_RAMDRV_NUM:
|
||||
LD BC,RAMDTBL
|
||||
.skip_tbl:
|
||||
|
||||
@ -116,82 +116,6 @@
|
||||
; EX (SP),HL
|
||||
; RET
|
||||
|
||||
;!FIXIT ¯®¯¥à¥¤¥«ë¢ âì âã⠢맮¢ë ç¥à¥§ â®çª¨ ¢å®¤ ⨯ RST ¨«¨ ¢ë§®¢ë ⨯ LD C,0 : CALL HDDRIVE ¯àï¬ë¥
|
||||
|
||||
|
||||
;-------------------------------------------------
|
||||
; RST 18h. ‚¥ªâ®à ¤¨áª®¢ëå ãáâனáâ¢
|
||||
; ¢å®¤: a=®¬¥à ãáâனá⢠(0-25)
|
||||
;-------------------------------------------------
|
||||
INTDISK:
|
||||
;R01
|
||||
CP #FF
|
||||
JR NZ,.noNeedRescan
|
||||
CP C
|
||||
JR Z,INITDVC_RET_DRIVE
|
||||
.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,DSS_Error.drv.INVALID_DRIVE
|
||||
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
|
||||
;
|
||||
|
||||
;-----------------------------------------------------------
|
||||
; <20>à®áª ¨à®¢ âì á¨á⥬ã FDD/HDD ¤¥¢ ©áë ¨ RAM-¤¨áª¨
|
||||
@ -256,6 +180,92 @@ MAKEDVC: LD C,A
|
||||
LD (HL),A
|
||||
RET
|
||||
|
||||
|
||||
;!FIXIT ¯®¯¥à¥¤¥«ë¢ âì âã⠢맮¢ë ç¥à¥§ â®çª¨ ¢å®¤ ⨯ RST ¨«¨ ¢ë§®¢ë ⨯ LD C,0 : CALL HDDRIVE ¯àï¬ë¥
|
||||
;-------------------------------------------------
|
||||
; RST 18h. ‚¥ªâ®à ¤¨áª®¢ëå ãáâனáâ¢
|
||||
; ¢å®¤: a=®¬¥à ãáâனá⢠(0-25)
|
||||
;-------------------------------------------------
|
||||
INTDISK:
|
||||
;R01
|
||||
CP #FF
|
||||
JR NZ,.noNeedRescan
|
||||
CP C
|
||||
;JR Z,INITDVC_RET_DRIVE
|
||||
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,DSS_Error.drv.INVALID_DRIVE
|
||||
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 'NScanDRV2.ASM'
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;DEVICE DB #00
|
||||
; DW FDDRIVE ; FDD A
|
||||
; DB #01
|
||||
|
||||
954
DSS/NScanDRV.ASM
954
DSS/NScanDRV.ASM
@ -1,970 +1,28 @@
|
||||
/*
|
||||
; !TODO § ¯®¬¨ âì ¯à¥àë¢ ¨ï, ®âª«îç âì áâ àâ¥, ¢®ááâ ¢«¨¢ âì ¢ë室¥
|
||||
;!TODO ª®¤ ¤¨ª® ª®áâë«ìë© ¨ ¡ã¤¥â ¯¥à¥¤¥« ¢¬¥áâ¥ á ¯à®æ¥¤ãன INITDVC
|
||||
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 [-----------] [-----------] [-----------] [-----------] [-----------]
|
||||
LD A,Dss.DRV.RescanDRV
|
||||
LD C,Dss.DRV.RescanDRV
|
||||
RST ToDSS.DRV
|
||||
LD (LDRIVE),A
|
||||
; [-----------]
|
||||
|
||||
;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
|
||||
*/
|
||||
|
||||
|
||||
IF 1
|
||||
SCANDRV:
|
||||
; 0. § ¯®¬¨ ¥¬ á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
||||
; 1. § ¯®¬¨ ¥¬ á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
LD A,R
|
||||
DI
|
||||
PUSH AF
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
|
||||
; 1. § ¯®¬¨ ¥¬ ¡ãâ-¤¨áª
|
||||
; 2. ã§ ñ¬ ¡ãª¢ã ¡ãâ-¤¨áª
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
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. ¢ë§ë¢ ¥¬ à¥áª
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
; A = Boot disk
|
||||
LD B,A
|
||||
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. ¢ë室
|
||||
; 4. ¢ë室
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
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
|
||||
|
||||
; ’€<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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;
|
||||
; 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
|
||||
*/
|
||||
157
DSS/ScanDRV.ASM
157
DSS/ScanDRV.ASM
@ -1,157 +0,0 @@
|
||||
; !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
|
||||
450
DSS/VIDEO.ASM
450
DSS/VIDEO.ASM
@ -6,63 +6,47 @@
|
||||
;---------------------------------------------------------------
|
||||
;Rev Date Name Description
|
||||
;---------------------------------------------------------------
|
||||
;R03 04-04-2023 BAO FIXED BUGS IN FN SCROLL, SETVMOD, SELPAGE
|
||||
;R02 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI"
|
||||
;R01 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0)
|
||||
;---------------------------------------------------------------
|
||||
|
||||
; CLEAR TEXT WINDOW
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #56. Žç¨áâ¨âì ®ª®.
|
||||
;
|
||||
; ¢å®¤: D - áâப «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||
; E - á⮫¡¥æ «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||
; H - ¢ëá®â ®ª
|
||||
; L - è¨à¨ ®ª
|
||||
; A - ᨬ¢®« § ¯®«¨â¥«ì
|
||||
; B - âਡãâ § ¯®«¨â¥«ì
|
||||
; ¢ë室: ¥â
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
CLEAR: LD C,BIOS.LP_CLS_WIN2
|
||||
RST ToBIOS
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #5C. ‚뢮¤ áâப¨ íªà .
|
||||
;
|
||||
; ¢å®¤: HL - 㪠§ ⥫ì áâபã ᨬ¢®«®¢
|
||||
; ¢ë室: ¥â
|
||||
; PRINT NULL-TERMINATED CHARS STRING
|
||||
; HL - STRING POINTER
|
||||
PCHARS:
|
||||
.loop: LD A,(HL)
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
PCHARS: LD A,(HL)
|
||||
INC HL
|
||||
OR A
|
||||
RET Z
|
||||
|
||||
;!TEST FOR LP_PR_LINE_DIR
|
||||
;PUSH HL
|
||||
;CALL CURSOR
|
||||
;LD (.CHAR),A
|
||||
;LD A,(SLOT1)
|
||||
;PUSH AF
|
||||
;LD A,(SLOT0)
|
||||
;LD (SLOT1),A
|
||||
;LD HL,.CHAR + #4000
|
||||
;LD BC,0*256 + BIOS.LP_PR_LINE_DIR
|
||||
;RST ToBIOS
|
||||
;POP AF
|
||||
;LD (SLOT1),A
|
||||
;POP HL
|
||||
;JP .loop
|
||||
;
|
||||
|
||||
CALL PUTCHAR
|
||||
;!TEST CR+LF+SCROLL
|
||||
;CALL CURSOR
|
||||
;LD A,D ; ¯à®¢¥àª ¯¥à¥å®¤ ªãàá®à
|
||||
;OR E ; ¢ á ¬®¥ ç «® (X:Y == 0:0)
|
||||
;CALL Z,PUTCHAR.LFF
|
||||
JP PCHARS
|
||||
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #5B. ‚뢮¤ ᨬ¢®« íªà ¢ ⥪. ¯®§¨æ¨¨.
|
||||
;
|
||||
JP .loop
|
||||
;.CHAR: DZ " ",0
|
||||
|
||||
|
||||
; PRINT CHAR
|
||||
; A - CHAR
|
||||
; ¢å®¤: A - ᨬ¢®«
|
||||
; ¢ë室: ¥â
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
PUTCHAR:
|
||||
;LD B,A
|
||||
;CALL CURSOR
|
||||
;LD A,B
|
||||
|
||||
;CP ' '
|
||||
;JR NC,.CHAR
|
||||
CP #0D
|
||||
JR Z,.CR_
|
||||
CP #0A
|
||||
@ -73,40 +57,25 @@ PUTCHAR:
|
||||
JR Z,.BK_
|
||||
CP #07
|
||||
JR Z,.BELL
|
||||
;SCF
|
||||
;RET
|
||||
;
|
||||
.CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||
;!TEST CR+LF+SCROLL
|
||||
;JP ToBIOS
|
||||
;[x] CR+LF+SCROLL
|
||||
RST ToBIOS
|
||||
; ¯à®¢¥àª ¯¥à¥å®¤ ªãàá®à ¢ á ¬®¥ ç «® (X:Y == 0:0)
|
||||
CALL CURSOR
|
||||
LD A,D
|
||||
OR E
|
||||
RET NZ
|
||||
;LD A,D ; ¢ DE ª®®à¤¨ âë ⥪ã饣® § ª®¬¥áâ
|
||||
;XOR E ; <20>஢¥à塞 ª®®à¤¨ âë #1F:#4F
|
||||
;XOR #50
|
||||
;RET NZ ; ¥á«¨ ¤à㣨¥ - â® ¢ë室
|
||||
;LD E,A
|
||||
;CALL LOCATE
|
||||
;
|
||||
.LFF: PUSH HL ;!FIXIT á®åà ïâì ⥪ã騥 ¯à¥àë¢ ¨ï
|
||||
;PUSH DE
|
||||
LD BC,1*256 + BIOS.LP_SCROLL_UD
|
||||
LD DE,#0020
|
||||
;EI
|
||||
;HALT
|
||||
;DI
|
||||
RST ToBIOS
|
||||
LD DE,#1F00
|
||||
;PUSH DE
|
||||
CALL LOCATE
|
||||
LD A,' '
|
||||
LD BC,#50*256 + BIOS.LP_PRINT_SYM
|
||||
RST ToBIOS
|
||||
;EI
|
||||
;POP DE
|
||||
LD DE,#1F00
|
||||
CALL LOCATE
|
||||
POP HL
|
||||
@ -134,8 +103,6 @@ PUTCHAR:
|
||||
RST ToBIOS
|
||||
XOR A
|
||||
CP E
|
||||
;!TEST
|
||||
;JP Z,LOCATE
|
||||
RET Z
|
||||
DEC E
|
||||
JP LOCATE
|
||||
@ -159,8 +126,6 @@ PUTCHAR:
|
||||
LD HL,4
|
||||
JP BEEP
|
||||
.NO_SCROLL:
|
||||
;CP ' '
|
||||
;JR NC,.CHAR
|
||||
CP #0D
|
||||
JR Z,.CR_
|
||||
CP #0A
|
||||
@ -171,41 +136,40 @@ PUTCHAR:
|
||||
JR Z,.BK_
|
||||
CP #07
|
||||
JR Z,.BELL
|
||||
;SCF
|
||||
;RET
|
||||
._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||
;!TEST CR+LF+SCROLL
|
||||
JP ToBIOS
|
||||
;RST ToBIOS
|
||||
;-----[]
|
||||
;
|
||||
;
|
||||
|
||||
; SET CURRENT CURSOR POSITION
|
||||
;===============================
|
||||
; D = Y
|
||||
; E = X
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #52. “áâ ®¢¨âì ¯®«®¦¥¨¥ ªãàá®à .
|
||||
;
|
||||
; ¢å®¤: D - áâப ªãàá®à
|
||||
; E - ª®«®ª ªãàá®à
|
||||
; ¢ë室: ¥â
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
LOCATE: LD C,BIOS.LP_SET_PLACE
|
||||
; LD A,C
|
||||
; LD (NO_NEED_SCROLL),A
|
||||
JP ToBIOS
|
||||
;RET
|
||||
|
||||
; GET CURRENT CURSOR POSITION
|
||||
; out:
|
||||
; D - Y
|
||||
; E - X
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #53. “§ âì ¯®«®¦¥¨¥ ªãàá®à .
|
||||
;
|
||||
; ¢å®¤: ¥â
|
||||
; ¢ë室: D - áâப ªãàá®à
|
||||
; E - ª®«®ª ªãàá®à
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
CURSOR: LD C,BIOS.LP_GET_PLACE
|
||||
JP ToBIOS
|
||||
;RET
|
||||
|
||||
; READ CHAR & ATTR FROM THE SCREEN
|
||||
; in:
|
||||
; D - Y
|
||||
; E - X
|
||||
; out:
|
||||
; A - CHAR
|
||||
; B - ATTR
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #57. <20>à®ç¨â âì ᨬ¢®« á íªà .
|
||||
;
|
||||
; ¢å®¤: D - áâப
|
||||
; E - ª®«®ª
|
||||
; ¢ë室: A - ᨬ¢®«
|
||||
; B - âਡãâ
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
RDCHAR: XOR A
|
||||
LD C,BIOS.WIN_GET_SYM
|
||||
RST ToBIOS
|
||||
@ -214,12 +178,17 @@ RDCHAR: XOR A
|
||||
AND A
|
||||
RET
|
||||
|
||||
; WRITE CHAR & ATTR TO THE SCREEN
|
||||
; D - Y
|
||||
; E - X
|
||||
; A - CHAR
|
||||
; B - ATTR
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #58. ‚뢥á⨠ᨬ¢®« íªà .
|
||||
; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëçë¥ á¨¬¢®«ë.
|
||||
;
|
||||
; ¢å®¤: D - áâப
|
||||
; E - ª®«®ª
|
||||
; A - ᨬ¢®«
|
||||
; B - âਡãâ
|
||||
; ¢ë室: ¥â
|
||||
;!FIXIT slow ª ª ¡¥§ WIN_GET_SYM âãâ ®¡®©â¨áì?
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
WRCHAR: LD C,A
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
@ -234,20 +203,21 @@ WRCHAR: LD C,A
|
||||
AND A
|
||||
RET
|
||||
|
||||
; COPY WINDOW FROM THE SCREEN
|
||||
; D - Y
|
||||
; E - X
|
||||
; H - HEIGHT
|
||||
; L - WIDTH
|
||||
; IX - ADDRESS
|
||||
; B - PAGE, IF IX > #C000
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #59. ‘®åà ¨âì ®ª® íªà .
|
||||
;
|
||||
; ¢å®¤: D - áâப
|
||||
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||
; H - ¢ëá®â ®ª
|
||||
; L - è¨à¨ ®ª
|
||||
; B - áâà ¨æ ¡ãä¥à , ¥á«¨ IX >= #C000
|
||||
; IX - ¤à¥á ¡ãä¥à
|
||||
; ¢ë室: ¥â
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
WINCOPY: AND A
|
||||
LD A,R ;R02
|
||||
PUSH AF ;R02
|
||||
XOR A
|
||||
;EX AF,AF' ;R03
|
||||
;LD A,B ;R03
|
||||
;EX AF,AF' ;R03
|
||||
LD C,BIOS.WIN_COPY
|
||||
DI ;R02
|
||||
RST ToBIOS
|
||||
@ -256,20 +226,21 @@ WINCOPY: AND A
|
||||
EI ;R02
|
||||
RET
|
||||
|
||||
; RESTORE WINDOW TO THE SCREEN
|
||||
; D - Y
|
||||
; E - X
|
||||
; H - HEIGHT
|
||||
; L - WIDTH
|
||||
; IX - ADDRESS
|
||||
; B - PAGE, IF IX > #C000
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #5A. ‚®ááâ ®¢¨âì ®ª® íªà .
|
||||
;
|
||||
; ¢å®¤: D - áâப
|
||||
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||
; H - ¢ëá®â ®ª
|
||||
; L - è¨à¨ ®ª
|
||||
; B - áâà ¨æ ¡ãä¥à , ¥á«¨ IX >= #C000
|
||||
; IX - ¤à¥á ¡ãä¥à
|
||||
; ¢ë室: ¥â
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
WINREST: AND A
|
||||
LD A,R ;R02
|
||||
PUSH AF ;R02
|
||||
XOR A
|
||||
;EX AF,AF' ;R03
|
||||
;LD A,B ;R03
|
||||
;EX AF,AF' ;R03
|
||||
DI ;R02
|
||||
LD C,BIOS.WIN_RESTORE
|
||||
RST ToBIOS
|
||||
@ -277,18 +248,20 @@ WINREST: AND A
|
||||
RET PO ;R02
|
||||
EI ;R02
|
||||
RET
|
||||
|
||||
; SCROLL WINDOW
|
||||
; D - Y
|
||||
; E - X
|
||||
; H - HEIGHT
|
||||
; L - WIDTH
|
||||
; B - SCROLL DIRECTION
|
||||
; B = 1 - SCROLL UP
|
||||
; B = 2 - SCROLL DOWN
|
||||
; A = 0 - CLEAR LINE
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #55. ‘ªà®««¨£ íªà .
|
||||
;
|
||||
; ¢å®¤: D - áâப «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||
; H - ¢ëá®â ®ª
|
||||
; L - è¨à¨ ®ª
|
||||
; B = 1 - ¯à®ªàã⪠¢¢¥àå
|
||||
; B = 2 - ¯à®ªàã⪠¢¨§
|
||||
; A = 0 - ®ç¨é âì áâபã
|
||||
; ¢ë室: ¥â
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
SCROLL: DJNZ SCR_DW ;!TODO § ¬¥¨âì BIOS.LP_SCROLL_UD ¨ ¯®á¬®âà¥âì, çâ® èãáâ॥
|
||||
;!TEST
|
||||
; [x] 04/04/23
|
||||
;LD B,A
|
||||
;LD C,H
|
||||
;PUSH BC
|
||||
@ -301,11 +274,21 @@ SCROLL: DJNZ SCR_DW ;!TODO
|
||||
INC D
|
||||
DEC H
|
||||
LD C,BIOS.WIN_MOVE
|
||||
; [x] 29/9/23
|
||||
LD A,R
|
||||
PUSH AF
|
||||
;
|
||||
XOR A
|
||||
DI ; [x] 29/9/23
|
||||
RST ToBIOS
|
||||
; [x] 29/9/23
|
||||
POP AF
|
||||
JP PO,1F
|
||||
EI
|
||||
1: ;
|
||||
POP HL
|
||||
POP DE
|
||||
;!TEST
|
||||
; [x] 04/04/23
|
||||
;POP BC
|
||||
POP AF
|
||||
;XOR A
|
||||
@ -329,11 +312,11 @@ SCROLL: DJNZ SCR_DW ;!TODO
|
||||
RET
|
||||
|
||||
SCR_DW: DJNZ SCR_ERR
|
||||
;!TEST
|
||||
; [x] 04/04/23
|
||||
;LD B,A
|
||||
;LD C,H
|
||||
;PUSH BC
|
||||
PUSH AF ;R03
|
||||
PUSH AF
|
||||
;
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
@ -342,74 +325,92 @@ SCR_DW: DJNZ SCR_ERR
|
||||
INC XH
|
||||
DEC H
|
||||
LD C,BIOS.WIN_MOVE
|
||||
; [x] 29/9/23
|
||||
LD A,R
|
||||
PUSH AF
|
||||
;
|
||||
XOR A
|
||||
DI ; [x] 29/9/23
|
||||
RST ToBIOS
|
||||
; [x] 29/9/23
|
||||
POP AF
|
||||
JP PO,1F
|
||||
EI
|
||||
1: ;
|
||||
POP HL
|
||||
POP DE
|
||||
;!TEST
|
||||
; [x] 29/9/23
|
||||
;POP BC
|
||||
POP AF ;R03
|
||||
POP AF
|
||||
;XOR A
|
||||
;CP B
|
||||
AND A
|
||||
;
|
||||
RET NZ
|
||||
JP SCROLL.print
|
||||
; PUSH DE ;R01
|
||||
; CALL LOCATE
|
||||
; LD A,#20
|
||||
; LD B,L
|
||||
; LD C,BIOS.LP_PRINT_SYM
|
||||
; RST ToBIOS
|
||||
; POP DE ;R01
|
||||
; CALL LOCATE ;R01
|
||||
; AND A
|
||||
RET
|
||||
|
||||
SCR_ERR:
|
||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||
SCF
|
||||
RET
|
||||
|
||||
; SELECT SCREEN PAGE
|
||||
; B - SCREEN PAGE
|
||||
SELPAGE:;PUSH BC
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #54. ‚ë¡à âì ªâ¨¢ãî áâà ¨æã íªà .
|
||||
;
|
||||
; ¢å®¤: B - áâà ¨æ íªà 0/1
|
||||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
SELPAGE:
|
||||
LD A,(VMODE)
|
||||
BIT 7,A
|
||||
JR NZ,.SEL2
|
||||
;BIT 7,A
|
||||
CP %1000'0000
|
||||
JR NC,.SEL2
|
||||
PUSH BC
|
||||
LD C,A
|
||||
CALL SETVMOD.TEXT_M
|
||||
POP BC
|
||||
.SEL2: ;POP BC
|
||||
LD A,B
|
||||
.SEL2: LD A,B
|
||||
AND #01
|
||||
OUT (SCREEN_SWITCH),A
|
||||
RET
|
||||
|
||||
; GET CURRENT VIDEO MODE
|
||||
; out:
|
||||
; A - MODE
|
||||
; B - PAGE
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #51. <20>®«ãç¨âì ⥪ã騩 ०¨¬ íªà .
|
||||
;
|
||||
; ¢å®¤: ¥â
|
||||
; ¢ë室: A - ⥪ã騩 ०¨¬ íªà
|
||||
; B - áâà ¨æ íªà 0/1
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
GETVMOD IN A,(SCREEN_SWITCH)
|
||||
LD B,A
|
||||
LD A,(VMODE)
|
||||
AND A
|
||||
RET
|
||||
|
||||
; SET CURRENT VIDEO MODE
|
||||
; A - MODE
|
||||
; B - PAGE
|
||||
SETVMOD: BIT 7,A
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #50. ‚ë¡®à ०¨¬ íªà .
|
||||
;
|
||||
; ¢å®¤: A - ०¨¬ íªà
|
||||
; 02h - ⥪áâ®¢ë© 40x32x16 梥⮢
|
||||
; 03h - ⥪áâ®¢ë© 80x32x16 梥⮢
|
||||
; 81h - £à ä¨ç¥áª¨© 320x256x256 梥⮢
|
||||
; 82h - £à ä¨ç¥áª¨© 640x256x16 梥⮢
|
||||
; B - áâà ¨æ íªà 0/1
|
||||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
SETVMOD:;BIT 7,A
|
||||
CP %1000'0000
|
||||
LD C,A
|
||||
JR NZ,GRAPH
|
||||
JR NC,GRAPH
|
||||
.TEXT_M: LD IX,BACKTXT
|
||||
PUSH IX
|
||||
EX AF,AF'
|
||||
LD A,(VMODE)
|
||||
LD (VVMODE),A
|
||||
EX AF,AF'
|
||||
INC A
|
||||
DEC A
|
||||
//INC A
|
||||
//DEC A
|
||||
OR A
|
||||
JR Z,.NOMODE
|
||||
DEC A
|
||||
JR Z,.NOMODE
|
||||
@ -424,6 +425,7 @@ SETVMOD: BIT 7,A
|
||||
SCF
|
||||
RET
|
||||
|
||||
; “áâ ®¢ª £à ä. ०¨¬®¢
|
||||
GRAPH: CALL SAVETXT
|
||||
AND #7F
|
||||
JR Z,G320_16 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
||||
@ -531,15 +533,20 @@ G640_16 PUSH BC
|
||||
; SAFE_PORTY
|
||||
; XOR A
|
||||
; RET
|
||||
|
||||
VMODE: DB #03
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; Žâªàëâì ®ª®
|
||||
; ¢å®¤: hl=®¯¨á â¥«ì ®ª
|
||||
; e=ä« £¨ ®ª
|
||||
;
|
||||
;02h - TEXT 40 x 32 (16 colors)
|
||||
;03h - TEXT 80 x 32 (16 colors)
|
||||
;80h - GRAF 320 x 256 (16 colors)
|
||||
;81h - GRAF 320 x 256 (256 colors)
|
||||
;82h - GRAF 640 x 256 (16 colors)
|
||||
;83h - GRAF 640 x 256 (256 colors) UNUSED
|
||||
;-----------------------------------------------------------------------
|
||||
SETMODE: PUSH DE
|
||||
LD DE,SYS_PAGE.SHARED_BUFFER_32b ; £àï§ë© å ª. ª¨¤ ¥â ¤ ë¥ ¢ ¡ãä¥à á«ã¦¥¡®© áâà ¨æë ¡¨®á .
|
||||
LD BC,ScreenDescriptorTable.Size ; <20>ˆŽ‘ ¯à¨ ¨á¯®«ì§®¢ ¨¨ IX ¯à¥¤¯®« £ ¥â, çâ® ® 㪠§ë¢ ¥â
|
||||
@ -554,7 +561,7 @@ SETMODE: PUSH DE
|
||||
LD IX,SYS_PAGE.SHARED_BUFFER_32b ; £àï§ë© å ª.
|
||||
LD C,BIOS.WIN_OPEN
|
||||
RST ToBIOS
|
||||
SAFE_PORTY ;????? - ¢®§¬®¦®, ç⮠⥯¥àì ¥ 㦮, ¢¥§¤¥ á ¡ ª®© 3 à ¡®â îâ, ¯à®¢¥à¨âì
|
||||
SAFE_PORTY
|
||||
XOR A
|
||||
RET
|
||||
|
||||
@ -569,31 +576,42 @@ SETMODE: PUSH DE
|
||||
|
||||
;
|
||||
;.......................................................................
|
||||
;+0 X à §¬¥à ®ª ¢ § ª®¬¥áâ å
|
||||
;+1 Y à §¬¥à ®ª ¢ § ª®¬¥áâ å
|
||||
;+2 X ¯®«®¦. ®ª íªà ¥
|
||||
;+3 Y ¯®«®¦. ®ª íªà ¥
|
||||
;+4 ०¨¬ § ª®¬¥áâ
|
||||
;+5 ¤®¯. ०¨¬ § ª®¬¥áâ (bit0=1 ᯥª. ¤à¥á æ¨ï íªà )
|
||||
;+6 X ¯®«®¦. ¢ ¯®«¥ £à 䨪¨ (¢ § ª®¬¥áâ å)
|
||||
;+7 Y ¯®«®¦. ¢ ¯®«¥ £à 䨪¨ (¢ § ª®¬¥áâ å)
|
||||
ScreenDescriptorTable EQU $
|
||||
;80x32
|
||||
; 80x32. ⥪á⮢®¥, § ª®¬¥áâ® 16x8, #0B - ®¬¥à § ª®£¥.
|
||||
TAB_80x32 DB #28,#20,#00,#00,#1B,#00,#00,#00 ;1
|
||||
;40x32
|
||||
; 40x32. ⥪á⮢®¥, § ª®¬¥áâ® 8x8, #0B - ®¬¥à § ª®£¥.
|
||||
TAB_40x32 DB #28,#20,#00,#00,#3B,#00,#00,#00 ;2
|
||||
;640x256 PAGE 0
|
||||
; 640x256. £à ä¨ç¥áª®¥, 0-© íªà
|
||||
TAB_640x256_0 DB #28,#20,#00,#00,#00,#00,#00,#00 ;3
|
||||
;320x256 PAGE 0
|
||||
; 320x256. £à ä¨ç¥áª®¥, 0-© íªà
|
||||
TAB_320x256_0 DB #28,#20,#00,#00,#20,#00,#00,#00 ;4
|
||||
;640x256 PAGE 1
|
||||
; 640x256. £à ä¨ç¥áª®¥, 1-© íªà
|
||||
TAB_640x256_1 DB #28,#20,#00,#00,#40,#00,#28,#00 ;5
|
||||
;320x256 PAGE 1
|
||||
; 320x256. £à ä¨ç¥áª®¥, 1-© íªà
|
||||
TAB_320x256_1 DB #28,#20,#00,#00,#60,#00,#28,#00 ;6
|
||||
ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6
|
||||
;.......................................................................
|
||||
;
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
; ‘®åà ¨âì íªà ⥪áâ. ०¨¬ .
|
||||
; „«ï ¡ãä¥à íªà ¨á¯. 2-ï ¡ ª à áè¨à¥¨ï „Ž‘.
|
||||
SAVETXT PUSH AF
|
||||
;!!!!! ¯¥à¥¥á¥ «®£¨ª áã¯¥à ¤¨ç ©è¥£® ã᪮२ï
|
||||
LD A,(VMODE)
|
||||
BIT 7,A
|
||||
JR NZ,NOSAVET
|
||||
;BIT 7,A
|
||||
CP %1000'0000
|
||||
JR NC,NOSAVET
|
||||
SUB #02
|
||||
JR C,NOSAVET
|
||||
;;
|
||||
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
@ -611,27 +629,35 @@ SAVETXT PUSH AF
|
||||
LD L,#28
|
||||
SVTEXT1 LD (SVHL1),HL
|
||||
LD DE,#0000
|
||||
;EX AF,AF' ;R03
|
||||
LD A,(BANKTBL+TXTPAGE)
|
||||
LD B,A
|
||||
;EX AF,AF' ;R03
|
||||
LD C,BIOS.WIN_COPY
|
||||
; [x] 29/9/23
|
||||
LD A,R
|
||||
PUSH AF
|
||||
;
|
||||
XOR A
|
||||
DI
|
||||
RST ToBIOS
|
||||
; [x] 29/9/23
|
||||
POP AF
|
||||
JP PO,1F
|
||||
EI
|
||||
1: ;
|
||||
POP IX
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
NOSAVET: POP AF
|
||||
RET
|
||||
;----------------------------------------------------------------------
|
||||
|
||||
BACKTXT PUSH AF
|
||||
VVMODE+1:
|
||||
LD A,#00
|
||||
BIT 7,A
|
||||
JR Z,NOBACKT
|
||||
;BIT 7,A
|
||||
CP %1000'0000
|
||||
JR C,NOBACKT
|
||||
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
@ -641,19 +667,23 @@ VVMODE+1:
|
||||
SVHL1+1:
|
||||
LD HL,#2050
|
||||
LD DE,#0000
|
||||
;EX AF,AF' ;R03
|
||||
LD A,(BANKTBL+TXTPAGE)
|
||||
LD B,A
|
||||
;EX AF,AF' ;R03
|
||||
LD C,BIOS.WIN_RESTORE
|
||||
; [x] 29/9/23
|
||||
LD A,R
|
||||
PUSH AF
|
||||
;
|
||||
XOR A
|
||||
DI
|
||||
RST ToBIOS
|
||||
; [x] 29/9/23
|
||||
POP AF
|
||||
JP PO,1F
|
||||
EI
|
||||
1: ;
|
||||
TCURS+1:
|
||||
LD DE,#0000
|
||||
;LD C,BIOS.LP_SET_PLACE
|
||||
;RST ToBIOS
|
||||
CALL LOCATE
|
||||
POP IX
|
||||
POP HL
|
||||
@ -662,9 +692,21 @@ TCURS+1:
|
||||
NOBACKT: POP AF
|
||||
RET
|
||||
|
||||
; SEND A SYMBOL TO THE PRINTER
|
||||
;==============================
|
||||
; A - SYMBOL
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #5F. ‚뢮¤ ᨬ¢®« ¯à¨â¥à ¡¥§ ®¦¨¤ ¨ï.
|
||||
;
|
||||
; ˆâ¥à¯à¥â æ¨ï ¡ ©â á®áâ®ï¨ï ¯à¨â¥à :
|
||||
; 0..2 - ¥ ¨á¯®«ì§ãîâáï, ®¡ëç® ãáâ. ¢ "1"
|
||||
; 3 - ®è¨¡ª ¯à¨â¥à - ¥áâì/¥â (1/0)
|
||||
; 4 - ¯à¨â¥à ¯®¤ª«îç¥/¥ ¯®¤ª«îç¥ (1/0)
|
||||
; 5 - ¡ã¬ £¨ ¥â/¥áâì (1/0)
|
||||
; 6 - ¯à¨â¥à £®â®¢/¢ë¢®¤¨â ®ç¥à¥¤®© ᨬ¢®« (1/0)
|
||||
; 7 - ¯à¨â¥à ᢮¡®¤¥/§ ïâ (1/0)
|
||||
;
|
||||
; ¢å®¤: A - ᨬ¢®«
|
||||
; ¢ë室: B - ᨬ¢®«
|
||||
; CF - ®è¨¡ª , A=¡ ©â á®áâ®ï¨ï (¡¨âë 7..3)
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
;!FIXIT § ¬¥¨âì sp2000.inc
|
||||
LPT_A EQU #1B
|
||||
LPT_B EQU #1C
|
||||
@ -713,60 +755,30 @@ PRINT_INIT:
|
||||
LD A,#CF ; port #1F ⮫쪮 ç¥p¥§ LD BC,1F : Out (BC),reg (¢ «ìâ¥à¥ ¨¤ñâ ¯¥à¥å¢ â í⮣® ¯®àâ ¯à®æ , ¥á«¨ ® ¢ ª®¬ ¤¥  㪠§ )
|
||||
LD BC,LPT2_C
|
||||
OUT (C),A
|
||||
LD A,#63
|
||||
; [x] 29/9/23
|
||||
;LD A,#63
|
||||
LD A,63
|
||||
;
|
||||
OUT (C),A
|
||||
LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1)
|
||||
OUT (LPT2_D),A
|
||||
LD A,#0F ; Init printer port for Out
|
||||
OUT (LPT1_C),A
|
||||
|
||||
; ‘€‰Œ€<C592> ‚›<E2809A>…‡€‹
|
||||
; ª« ¢
|
||||
XOR A ;LD A,0
|
||||
OUT (COM_A),A
|
||||
;LD A,0
|
||||
OUT (COM_A),A ; ????? ¤® «¨ ¢â®à®© à § § ááë« âì ¨ ¢®®¡é¥ ¨¬¥¥â «¨ á¬ëá« com ¨¨â¨âì?
|
||||
; [x] 29/9/23
|
||||
INC A
|
||||
OUT (COM_A),A
|
||||
DEC A
|
||||
;
|
||||
OUT (COM_A),A
|
||||
|
||||
LD A,5
|
||||
OUT (COM_A),A
|
||||
LD A,#62 ; bit 7 - Direction for Bufer (0), Bit 1 - Bufer Enable (1)
|
||||
OUT (COM_A),A
|
||||
RET
|
||||
; ‘€‰Œ€<C592> ‚›<E2809A>…‡€‹
|
||||
|
||||
;//MODULE: VIDEO
|
||||
;[END]
|
||||
|
||||
|
||||
; ; ‘€‰Œ€<C592>
|
||||
; PUSH AF
|
||||
; LD A,E
|
||||
; CP #4F
|
||||
; JP NZ,.exit
|
||||
; LD A,D
|
||||
; CP #1F
|
||||
; JP NZ,.exit
|
||||
; LD E,0
|
||||
; LD C,BIOS.LP_SET_PLACE
|
||||
; RST ToBIOS
|
||||
; CALL LFF
|
||||
; .exit:
|
||||
; pop af
|
||||
; RET
|
||||
; ; ‘€‰Œ€<C592>
|
||||
|
||||
|
||||
; LD A,D ; ¢ DE ª®®à¤¨ âë ⥪ã饣® § ª®¬¥áâ
|
||||
; XOR E ; <20>஢¥à塞 ª®®à¤¨ âë #1F:#4F
|
||||
; XOR #50
|
||||
; RET NZ ; ¥á«¨ ¤à㣨¥ - â® ¢ë室
|
||||
; LD E,A
|
||||
; LD C,BIOS.LP_SET_PLACE
|
||||
; RST ToBIOS
|
||||
;LFF:
|
||||
; ...
|
||||
|
||||
;;;;;;;;
|
||||
; LD A,D ; ¢ DE ª®®à¤¨ âë ⥪ã饣® § ª®¬¥áâ
|
||||
; XOR E ; <20>஢¥à塞 ª®®à¤¨ âë #1F:#4F
|
||||
; XOR #50
|
||||
; RET NZ ; ¥á«¨ ¤à㣨¥ - â® ¢ë室
|
||||
;;;;;;;;
|
||||
@ -1 +1 @@
|
||||
371
|
||||
396
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
;
|
||||
DEFINE SHORT_RSTx10_TABLE 0 ; 㪮à®ç¥ ï â ¡«¨æ äãªæ¨© rst #10. 96 äãªæ¨©.
|
||||
DEFINE COMPILE_UNUSED_CODE 1
|
||||
DEFINE COMPILE_UNUSED_CODE 0
|
||||
;
|
||||
|
||||
;
|
||||
@ -20,7 +20,7 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
|
||||
;
|
||||
;-------------------[MEMORY]-------------------------;
|
||||
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
|
||||
DEFINE OLD_SET_BANK 0
|
||||
; DEFINE OLD_SET_BANK 0
|
||||
|
||||
;---------------------[ «®£.®¬¥à áâà ¨æ ¯ ¬ï⨠]---------------------
|
||||
; ªíè ᯨ᪠ª â «®£
|
||||
@ -39,7 +39,7 @@ ENVIRONMENT_STRING_LENGTH EQU 255
|
||||
TXTADDR EQU #C000
|
||||
ENVADDR EQU #E400
|
||||
DIR EQU #C000
|
||||
FAT EQU #C000
|
||||
FAT_CACHE EQU #C000
|
||||
|
||||
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ¨¯ã«ïâ®à®¢
|
||||
HANDBUF.SIZE EQU 32
|
||||
|
||||
@ -98,25 +98,35 @@ COMP002: xor a
|
||||
jr c,NOUP
|
||||
cp "z"+1
|
||||
jr nc,NOUP
|
||||
and 5Fh ; a..z -> A..Z
|
||||
and #5F ; a..z -> A..Z
|
||||
;!!!!! âãâ ¢®ááâ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ®¢®¬ ï¤à¥
|
||||
NOUP: sub "A" ; ®¬¥à ¤¨áª
|
||||
ld c,Dss.ChDisk ; ᬥ¨âì ⥪. ¤¨áª
|
||||
RST ToDSS
|
||||
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥¨ï
|
||||
|
||||
;!TODO ¤®áâ ¢ âì system_path ®â¤¥«ì® ¤«ï ª ¦¤®£® ¤¨áª (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
|
||||
; â¥áâ áãé¥á⢮¢ ¨¥ ¯ ¯ª¨ 楫¥¢®¬ ¤¨áª¥
|
||||
IFDEF MANY_SYS_PATHES
|
||||
ld hl,system_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
|
||||
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
|
||||
RST ToDSS
|
||||
jp nc,save_disk_path ; Ok
|
||||
ENDIF
|
||||
;
|
||||
|
||||
; ãáâ. ª®à¥ì, ¥â â ª®© ¯ ¯ª¨ ®¢®¬ ¤¨áª¥
|
||||
ld hl,system_path+1 ; ¡ãä¥à á¨áâ. ¯ãâ¨
|
||||
ld (hl),0
|
||||
dec hl
|
||||
ld (hl),'\'
|
||||
;!TODO ¤®áâ ¢ âì system_path ®â¤¥«ì® ¤«ï ª ¦¤®£® ¤¨áª (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
|
||||
IFDEF MANY_SYS_PATHES
|
||||
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
|
||||
RST ToDSS
|
||||
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥¨ï
|
||||
ENDIF
|
||||
;
|
||||
jp save_disk_path ; Ok
|
||||
|
||||
; § ¤ ¥ ¤¨áª
|
||||
|
||||
@ -1 +1 @@
|
||||
78
|
||||
80
|
||||
@ -1 +1 @@
|
||||
Subproject commit 639cc1e69de900dd85e1bc4d3525dfeb91ea15ab
|
||||
Subproject commit 1b025338c449183aa1cfbe595994fd9ddf7feb8e
|
||||
Loading…
Reference in New Issue
Block a user