some small bugs fixed. rescan moved to drv page

This commit is contained in:
Anatoliy Belyanskiy 2023-10-01 02:54:22 +10:00
parent 7bbdc8de36
commit f1ea98ff47
20 changed files with 1205 additions and 1875 deletions

View File

@ -619,8 +619,6 @@ Func_57:xor a
and a and a
ret ret
;///////////////////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #58. ‚뢥á⨠ᨬ¢®« ­  íªà ­. ; ”ã­ªæ¨ï #58. ‚뢥á⨠ᨬ¢®« ­  íªà ­.
; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëç­ë¥ ᨬ¢®«ë. ; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëç­ë¥ ᨬ¢®«ë.
@ -711,16 +709,14 @@ Func_5A:ld a,r ;
; A = 0 - ®ç¨é âì áâபã ; A = 0 - ®ç¨é âì áâபã
; ¢ë室: ­¥â ; ¢ë室: ­¥â
;///////////////////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////////////////////
Func_55:djnz A0EBA Func_55: djnz A0EBA
ld b,a ld b,a
ld c,h ld c,h
push bc push bc
push de push de
push hl push hl
db 0DDh LD XH,D
ld h,d LD XL,E
db 0DDh
ld l,e
inc d inc d
dec h dec h
xor a xor a

Binary file not shown.

View File

@ -674,8 +674,8 @@ GETWORD:
.next: SUB 'A' .next: SUB 'A'
PUSH HL PUSH HL
;!TEST CHNDISK OPENDSK ;!TEST CHNDISK OPENDSK
;CALL OPENDSK CALL OPENDSK
CALL CHNDISK ;CALL CHNDISK
; ;
POP HL POP HL
JP NC,GETWORD JP NC,GETWORD
@ -702,14 +702,10 @@ CHNDISK:
LD A,B LD A,B
RET RET
/* ; RET C
RET C ; PUSH AF
; CALL LOADDIR
PUSH AF ; POP AF
CALL LOADDIR
POP AF
*/
RET RET
; ;
;????? R10 ;????? R10
@ -937,13 +933,16 @@ IT_DIR: LD E,(IX+_sFM.ST_CLUSTER)
; ;
; ¢å®¤: HL - ¡ãä¥à ¢ ¯ ¬ï⨠256 ¡ ©â ; ¢å®¤: HL - ¡ãä¥à ¢ ¯ ¬ï⨠256 ¡ ©â
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1 ; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
; !FIXIT ¬®¦¥â ¢ë©â¨ §  ¯à¥¤¥«ë ¡ãä¥à ?
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
CURRDIR: EX DE,HL CURRDIR: EX DE,HL
LD HL,DIRSPEC LD HL,DIRSPEC
CURDIR1 LD A,(HL) XOR A
OR A .loop: ;LD A,(HL)
;OR A
CP (HL)
LDI LDI
JR NZ,CURDIR1 JR NZ,.loop
RET RET
@ -1760,15 +1759,15 @@ MKD03 INC HL
INC HL INC HL
IF OLD_SET_BANK ; IF OLD_SET_BANK
PUSH HL ; PUSH HL
ENDIF ; ENDIF
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
IF OLD_SET_BANK ; IF OLD_SET_BANK
POP HL ; POP HL
ENDIF ; ENDIF
PUSH AF PUSH AF
LD A,(DIR) LD A,(DIR)
@ -1785,6 +1784,7 @@ MKD04 EX DE,HL
LDIR LDIR
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
EX DE,HL EX DE,HL
LD D,H LD D,H
LD E,L LD E,L
@ -1792,6 +1792,7 @@ MKD04 EX DE,HL
LD (HL),0 LD (HL),0
LD BC,512-65 LD BC,512-65
LDIR ;!FIXIT ­ã¦­® «¨ â ª ¬­®£® £à®å âì? LDIR ;!FIXIT ­ã¦­® «¨ â ª ¬­®£® £à®å âì?
POP HL POP HL
CALL NSECTOR CALL NSECTOR
LD A,(BootSector.S_P_C) ; ᥪâ®à®¢ ­  ª« áâ¥à LD A,(BootSector.S_P_C) ; ᥪâ®à®¢ ­  ª« áâ¥à
@ -1816,6 +1817,7 @@ MKD12 PUSH AF
LD BC,511 LD BC,511
LD (HL),0 LD (HL),0
LDIR ;!FIXIT ­ã¦­® «¨ â ª ¬­®£® £à®å âì? LDIR ;!FIXIT ­ã¦­® «¨ â ª ¬­®£® £à®å âì?
POP IX POP IX
POP HL POP HL
INC IX INC IX
@ -1877,7 +1879,7 @@ RMD12 PUSH AF
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
LD B,16 LD B,16 ;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ­­®£® ᥪâ®à 
LD HL,SECBUF LD HL,SECBUF
RMD10 LD A,(HL) RMD10 LD A,(HL)
OR A OR A
@ -1896,6 +1898,7 @@ RMD10 LD A,(HL)
RMD14 LD DE,#0020 RMD14 LD DE,#0020
ADD HL,DE ADD HL,DE
DJNZ RMD10 DJNZ RMD10
POP IX POP IX
POP HL POP HL
INC IX INC IX

View File

@ -34,11 +34,19 @@
// SCF // SCF
// RET // RET
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #00. ‚¥àá¨ï „Ž‘.
; ‚®§¢à é ¥â ­®¬¥à ¢¥àᨨ ¤¨áª®¢®© á¨á⥬ë.
; ¢å®¤: ­¥â
; ¢ë室: DE = ­®¬¥à ¢¥àᨨ/¬®¤¨ä¨ª æ¨¨
; BC = ­®¬¥à ¡¨«¤  (0..999)
;/////////////////////////////////////////////////////////////////////
VERSION: VERSION:
;XOR A
;LD H,A ;!TODO ¯¨å âì á OSINFO
;LD L,A
LD HL,0
LD DE,VERS*256+MODF LD DE,VERS*256+MODF
XOR A
LD H,A ;!TODO ¯¨å âì á OSINFO
LD L,A
LD BC,BUILD LD BC,BUILD
RET RET
@ -127,14 +135,32 @@ NDISK11:
RET RET
*/ */
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #02. <20>®¬¥à ⥪ã饣® ¤¨áª .
;
; ¢å®¤: ­¥â
; ¢ë室: A - ­®¬¥à ¤¨áª  (0=A,1=B,..)
;/////////////////////////////////////////////////////////////////////
CURRDSK: LD A,(FatBuffer.DRIVE) CURRDSK: LD A,(FatBuffer.DRIVE)
AND A AND A
RET 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 JR Z,CURRDS ;R06
DEC A ;R06
CALL CHNDISK ;R06 CALL CHNDISK ;R06
RET C ;R06 RET C ;R06
CURRDS: LD HL,2 CURRDS: LD HL,2
@ -161,11 +187,13 @@ FRESP2: LD D,B
AND A AND A
RET RET
; <20>®¬¥à ¯®á«¥¤­¥£® ¤¨áª  ¢ á¨á⥬¥
LDRIVE: DB DSS_MAX_DRIVES_AMOUNT LDRIVE: DB DSS_MAX_DRIVES_AMOUNT
IF COMPILE_UNUSED_CODE
TDRIVE: DB #00 TDRIVE: DB #00
TCLUST: DW #0000 TCLUST: DW #0000
TCOUNT: DW #0000 TCOUNT: DW #0000
ENDIF
;R04SIZE2CL LD DE,(B_P_C) ;R04SIZE2CL LD DE,(B_P_C)
;R04 XOR A ;R04 XOR A
;R04 SCF ;R04 SCF
@ -187,13 +215,15 @@ TCOUNT: DW #0000
;R04L_SEC_X DW 0 ;R04L_SEC_X DW 0
;R04H_SEC_X DW 0 ;R04H_SEC_X DW 0
; !FIXIT çñâ ­¥ ¨á¯®«ì§ã¥âáï ; !FIXIT çñâ ­¥ ¨á¯®«ì§ã¥âáï
IF COMPILE_UNUSED_CODE
TESTDSK: TESTDSK:
; LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
; LD C,Dss.DRV.MediaCheck LD C,Dss.DRV.MediaCheck
; RST ToDSS.DRV RST ToDSS.DRV
; OR A OR A
; RET Z RET Z
ENDIF
RD_BPB: LD C,SLOT3 RD_BPB: LD C,SLOT3
IN B,(C) IN B,(C)
PUSH BC PUSH BC
@ -211,8 +241,10 @@ RD_BPB: LD C,SLOT3
POP BC POP BC
OUT (C),B OUT (C),B
JP C,DOS_X_Error.Not_ready 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 LD HL,(SECBUF+510) ;R08 ;R07
;R05 ;R05
AND A AND A
@ -225,8 +257,10 @@ RD_BPB: LD C,SLOT3
LDIR LDIR
; ;
LD IY,BootSector //LD IY,BootSector ; ¯®ª  ¡¥§ ¨­¤¥ªá­®£®, ­® ¬®¦¥â ¯à¨£®¤¨âìáï
LD A,(IY+_sBOOT_SEC.ID_FORM) //LD A,(IY+_sBOOT_SEC.ID_FORM)
LD A,(BootSector.ID_FORM)
CP #F0 CP #F0
JP C,DOS_X_Error.UnknownBPB JP C,DOS_X_Error.UnknownBPB
@ -235,8 +269,10 @@ RD_BPB: LD C,SLOT3
;LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec ;LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
;LD D,(IY+_sBOOT_SEC.RESERVE+1) ;LD D,(IY+_sBOOT_SEC.RESERVE+1)
;ADD HL,DE ;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 ; 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.FAT1_XX),HL ; first sector FAT #1
LD (FatBuffer.FAT2_XX),HL LD (FatBuffer.FAT2_XX),HL
LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT //LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT
LD D,(IY+_sBOOT_SEC.S_P_F+1) //LD D,(IY+_sBOOT_SEC.S_P_F+1)
LD DE,(BootSector.S_P_F)
LD A,(BootSector.FAT_NUM) ; amount FATs LD A,(BootSector.FAT_NUM) ; amount FATs
CP 1 CP 1
JR Z,.loop1 JR Z,.loop1
@ -259,22 +298,40 @@ RD_BPB: LD C,SLOT3
.loop1: ADD HL,DE .loop1: ADD HL,DE
DEC A DEC A
JR NZ,.loop1 JR NZ,.loop1
LD (FatBuffer.DIR_FRM),HL ; first sector DIR LD (FatBuffer.DIR_FRM),HL ; first sector DIR
LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sectors ; CF = ? ¬ «® «¨
LD B,(IY+_sBOOT_SEC.B_P_S+1) 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 C
RL B RLA
RL C RL C
RL B RLA
RL C RL C
RL B RLA
LD C,B LD C,A
LD B,0 ; BC - File handels in sectors LD B,0 ; BC - File handels in sectors
LD A,C ;;;;
LD (FatBuffer.F_P_S),A 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 EX DE,HL
DEC HL DEC HL
XOR A XOR A
@ -299,10 +356,12 @@ RD_BPB: LD C,SLOT3
;LD L,B ;LD L,B
;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector ;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector
;LD B,(IY+_sBOOT_SEC.B_P_S+1) ;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 ;NEXTAD3
; .loop3: ADD HL,BC ; calc. cluster size ; .loop3: ADD HL,BC ; calc. cluster size
; DEC A ; DEC A
@ -312,7 +371,7 @@ RD_BPB: LD C,SLOT3
JR Z,.loop3.end JR Z,.loop3.end
RRA RRA
.loop3: ADD HL,HL .loop3: ADD HL,HL
RRCA RRA
JP NC,.loop3 JP NC,.loop3
.loop3.end: .loop3.end:
; ;
@ -330,7 +389,7 @@ RD_BPB: LD C,SLOT3
ENDIF ENDIF
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
LD HL,BootSector.ID_FAT LD HL,BootSector.ID_FAT ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £ 
LD DE,FatBuffer.MSG LD DE,FatBuffer.MSG
LD B,3 LD B,3
;R_BPBL1 ;R_BPBL1
@ -364,9 +423,12 @@ RD_BPB: LD C,SLOT3
IF COMPILE_UNUSED_CODE IF COMPILE_UNUSED_CODE
LD HL,0 LD HL,0
LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
LD B,(IY+_sBOOT_SEC.S_P_T+1) //LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
LD A,(BootSector.HEADS) //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 .BPB_L1: ; calc. sector per cylinder
ADD HL,BC ADD HL,BC
DEC A DEC A
@ -381,15 +443,23 @@ RD_BPB: LD C,SLOT3
; AND A ; AND A
; SBC HL,DE ; SBC HL,DE
; EX DE,HL ; 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 LD A,H
OR L OR L
JP NZ,.HDDSMAL JP NZ,.HDDSMAL
LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS) ;
LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1) //LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS)
LD C,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+2) //LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1)
LD B,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+3) 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 AND A
SBC HL,DE SBC HL,DE
JP NC,.HDDBIG JP NC,.HDDBIG
@ -399,7 +469,7 @@ RD_BPB: LD C,SLOT3
;AND A ;âãâ CF ¯®«î¡ á á¡à®è¥­ ¤®«¦¥­ ¡ëâì ;AND A ;âãâ CF ¯®«î¡ á á¡à®è¥­ ¤®«¦¥­ ¡ëâì
SBC HL,DE SBC HL,DE
LD BC,0 LD BC,0
.HDDBIG: LD A,(BootSector.S_P_C) .HDDBIG: LD A,(BootSector.S_P_C) ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £ 
SCF SCF
.S4C01: RRA .S4C01: RRA
JR C,.S4C02 JR C,.S4C02
@ -410,7 +480,9 @@ RD_BPB: LD C,SLOT3
JP .S4C01 JP .S4C01
.S4C02: INC HL .S4C02: INC HL
LD (MAX_CLU),HL LD (MAX_CLU),HL
POP IY
//POP IY
; LD DE,FAT ; LD DE,FAT
; LD HL,0 ; LD HL,0
; LD IX,(FAT_FRM) ; LD IX,(FAT_FRM)
@ -434,7 +506,7 @@ RD_BPB: LD C,SLOT3
RET RET
.IBM_DOS: .IBM_DOS:
LD A,(IY+_sBOOT_SEC.ID_FORM) LD A,(BootSector.ID_FORM)
CP #F0 CP #F0
JR C,DOS_X_Error.UnknownBPB JR C,DOS_X_Error.UnknownBPB
;????? ­ ¤® «¨ ¨§¬¥­¨âì? ;????? ­ ¤® «¨ ¨§¬¥­¨âì?
@ -452,15 +524,19 @@ RD_BPB: LD C,SLOT3
DOS_X_Error: DOS_X_Error:
.UnknownBPB: .UnknownBPB:
POP IY
//POP IY
LD A,DSS_Error.sys.UNKNOWN_FORMAT LD A,DSS_Error.sys.UNKNOWN_FORMAT
SCF SCF
RET RET
.Not_ready: .Not_ready:
LD A,DSS_Error.sys.NOT_READY LD A,DSS_Error.sys.NOT_READY
;SCF ; CF = 1
RET RET
;!TODO ª ¡ãä¥à ¬! ;!TODO ª ¡ãä¥à ¬!
FatBuffer: FatBuffer:
.MSG: DB 'FAT' .MSG: DB 'FAT'
@ -487,8 +563,7 @@ FatBuffer:
;!TODO ª ¡ãä¥à ¬! ;!TODO ª ¡ãä¥à ¬!
DIRSPEC: DB '\' DIRSPEC: DB '\'
;BLOCK DIRSPEC.DEPTH,0 ;????? <20>ë«® 255, ã ‘ ©¬ ­  256 BLOCK DIRSPEC.DEPTH
BLOCK DIRSPEC.DEPTH-1,0 ;????? <20>ë«® 255, ã ‘ ©¬ ­  256
; ;
;R11 ;R11

View File

@ -193,7 +193,7 @@ A0066: JP DRV_PAGE.NMI ;
; <[DRIVE PAGE SWITCH]> ; ; <[DRIVE PAGE SWITCH]> ;
_mInfoBLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7 _mInfoBLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7
PORTAL.out_DRV: PUSH BC ; PORTAL.out_DRV: PUSH BC ;
.RETBANK+2: LD BC,SLOT0 + 0*256; .RETBANK+2: LD BC,SLOT0 + 0*256; ;!!!!! ReScnDRV ¨á¯®«ì§ã¥â íâ® §­ ç¥­¨¥
.switch: OUT (C),B ; .switch: OUT (C),B ;
ASSERT $!=84,'-> Portal error!'; ASSERT $!=84,'-> Portal error!';
;Entry point from DSS main page ;Entry point from DSS main page
@ -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 DRV_PAGE.LDRIVE: DB #00

View File

@ -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 MACRO SET_PAGE_X new_page
IF OLD_SET_BANK ; IF OLD_SET_BANK
LD A,new_page ; LD A,new_page
CALL BANK ; CALL BANK
ELSE ; ELSE
LD A,(BANKTBL+new_page) LD A,(BANKTBL+new_page)
LD B,A LD B,A
LD C,SLOT3 LD C,SLOT3
IN A,(SLOT3) IN A,(SLOT3)
OUT (C),B OUT (C),B
ENDIF ; ENDIF
ENDM ENDM
; ;

View File

@ -829,7 +829,7 @@ EXEC1: CALL EXEC_1
; ¯à¨ ¢ë室¥ á ®è¨¡ª®©, ¢ ॣ¨áâॠ€ - ª®¤ ®è¨¡ª¨ ; ¯à¨ ¢ë室¥ á ®è¨¡ª®©, ¢ ॣ¨áâॠ€ - ª®¤ ®è¨¡ª¨
EXEC_1: LD (CMDLINE),HL EXEC_1: LD (CMDLINE),HL
LD A,#01 ; %7600000R = !FAT_ATTR LD A,#01 ; %7600000R = !FAT_ATTR ;!HARDCODE
LD (ACCESS),A LD (ACCESS),A
CALL GETWORD CALL GETWORD
RET C RET C
@ -838,7 +838,7 @@ EXEC_1: LD (CMDLINE),HL
CALL MASK CALL MASK
RET C RET C
CALL TST_EXT CALL TST_EXT
LD A,3 LD A,DSS_Error.sys.FILE_NOT_FOUND
RET C RET C
CALL INCTASK ;R08 CALL INCTASK ;R08
CALL OPENEXE CALL OPENEXE
@ -872,6 +872,9 @@ COPYEXN: LD A,(HL)
JR NZ,COPYEXN JR NZ,COPYEXN
CALL FINDPATH CALL FINDPATH
;[x] 1/10/2023
RET C
;
LD HL,(CMDLINE) LD HL,(CMDLINE)
JR EXEC1 JR EXEC1
@ -959,7 +962,7 @@ NOINK: LD A,H
LD (EXSTACK),SP LD (EXSTACK),SP
LD SP,HL LD SP,HL
EXX EXX
;...... ;!FIXIT.<2E>….Ž•<C5BD><EFBFBD>Ÿ….DE.¯¥à¥¤.¢ë§®¢®¬.BIOS..............................; ; <20>Ž•<C5BD><EFBFBD>Ÿ…Ÿ DE ¯¥à¥¤ ¢ë§®¢®¬ BIOS,   ¡¨®á ¯®ª  ¥£® ¨ ­¥ ¯®àâ¨â
LD A,(EXE_MEM) LD A,(EXE_MEM)
LD DE,RAMMAP LD DE,RAMMAP
LD BC,0*256 + BIOS.GetMemPage LD BC,0*256 + BIOS.GetMemPage

View File

@ -9,17 +9,18 @@
;R01 10-02-1999 DNS UPGRADE FAT CASH ;R01 10-02-1999 DNS UPGRADE FAT CASH
;--------------------------------------------------------------- ;---------------------------------------------------------------
; “áâ ­®¢¨âì ­ ç «ì­ë© ª« áâ¥à ¤«ï ç⥭¨ï
R_CLUST LD HL,#0001 R_CLUST LD HL,#0001
LD (G_CLUST.num),HL LD (G_CLUST.num),HL
RET RET
G_CLUST: G_CLUST:
.num+1: LD HL,#0001 .num+1: LD HL,#0001
G_CLUS1: INC HL G_CLUS1: INC HL ; ­®¬¥à ª« áâ¥à 
CALL R_F_FAT CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
CP DSS_Error.sys.DISK_FULL CP DSS_Error.sys.DISK_FULL
SCF SCF
RET Z RET Z ; ®è¨¡ª  ?
LD A,D LD A,D
OR E OR E
JR NZ,G_CLUS1 JR NZ,G_CLUS1
@ -34,25 +35,30 @@ INC_FAT PUSH HL
RET C RET C
PUSH HL PUSH HL
PUSH HL PUSH HL
EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
INC_FA2 CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EX DE,HL EX DE,HL
INC_FA2 CALL R_F_FAT JR NC,INC_FA2 ; ­¥ ª®­¥æ 楯®çª¨
EX DE,HL EX DE,HL
JR NC,INC_FA2 POP DE ; ­®¬¥à ª« áâ¥à 
EX DE,HL CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
POP DE
CALL W_T_FAT
POP HL POP HL
LD DE,(FatBuffer.ENDCLUS) LD DE,(FatBuffer.ENDCLUS) ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WR_FAT CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
AND A AND A
RET RET
;R01 ;R01
; IN: HL - CLUSTER ;-----------------------------------------------------------
; OUT: DE - (CLUSTER) ; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; ¢å®¤: hl = ­®¬¥à ª« áâ¥à 
; ¢ë室: hl = ­®¬¥à ª« áâ¥à 
; de = ­®¬¥à á«¥¤. ª« áâ¥à 
; CF - ª®­¥æ 楯®çª¨
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb ;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb
;-----------------------------------------------------------
R_F_FAT: R_F_FAT:
EX DE,HL EX DE,HL
LD HL,(MAX_CLU) LD HL,(MAX_CLU)
@ -62,49 +68,42 @@ R_F_FAT:
LD A,DSS_Error.sys.DISK_FULL LD A,DSS_Error.sys.DISK_FULL
RET C RET C
EXX ;!TODO optimize
SET_PAGE_X FATPAGE SET_PAGE_X FATPAGE
EXX ;!TODO optimize
PUSH HL PUSH HL
PUSH AF PUSH AF
LD A,(FatBuffer.FAT_TYP) LD A,(FatBuffer.FAT_TYP)
CP "2" CP "2" ; fat12
JR Z,R_F_F12 JR Z,R_F_F12
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ­®¬¥à
R_F_F16: R_F_F16:
LD A,H LD A,H
LD B,A LD B,H
AND #0F AND #0F
LD H,A LD H,A
LD A,B LD A,B
; swap bit7..4 and bit3..0. ; bit7..4 --> bit3..0.
RRCA RRCA
RRCA RRCA
RRCA RRCA
RRCA RRCA
;
AND #0F ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES) AND #0F ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
;!TEST
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C CP C
//LD C,A
//LD A,(FATCASH.Block)
//CP C
;
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
LD DE,FAT LD DE,FAT_CACHE ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ADD HL,DE ; ­  ï祩ªã FAT
LD E,(HL) LD E,(HL) ; ¯à®ç¨â âì ­®¬¥à ª« áâ¥à 
INC HL INC HL
LD D,(HL) LD D,(HL)
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
LD HL,#FFEF ;!HARDCODE LD HL,#FFEF ;!HARDCODE
XOR A ;DssErr.sys.NO_ERROR XOR A ; DssErr.sys.NO_ERROR
SBC HL,DE SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL POP HL
;LD A,DssErr.sys.NO_ERROR
RET RET
;R01; HL - CLUSTER ;R01; HL - CLUSTER
@ -165,15 +164,24 @@ R_F_F16:
;R01 ADD HL,DE ;R01 ADD HL,DE
;R01 DEC A ;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 R_F_F12 LD D,H
LD E,L LD E,L
ADD HL,HL
ADD HL,DE
RR H RR H
RR L ;CLUSTER * 1.5 RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
PUSH AF PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5
;
;!FIXIT å¥à­ï ª ª ï-â®
IF COMPILE_UNUSED_CODE
LD A,H LD A,H
LD B,A LD B,H
AND #1F AND #1F
LD H,A LD H,A
LD A,B LD A,B
@ -183,10 +191,12 @@ R_F_F12 LD D,H
AND #07 AND #07
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C CP C
CALL NZ,RE_FAT CALL NZ,RE_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
LD DE,FAT ENDIF
ADD HL,DE ;
POP AF LD DE,FAT_CACHE ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
POP AF ; ¢®ááâ. ä« £
LD E,(HL) LD E,(HL)
INC HL INC HL
LD D,(HL) LD D,(HL)
@ -196,27 +206,45 @@ R_F_F12 LD D,H
LD D,A LD D,A
JP R_F_F02 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 R_F_F01 LD A,E
AND #F0 AND #F0
RR D ; ¢¯à ¢® ­  4 ¡¨âa
RRA
RR D
RRA
RR D
RRA
RR D
RRA
LD E,A LD E,A
RR D
RR E
RR D
RR E
RR D
RR E
RR D
RR E
R_F_F02 POP AF R_F_F02 POP AF
OUT (SLOT3),A OUT (SLOT3),A
LD HL,#0FEF LD HL,#0FEF
XOR A ; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = ­ã«î XOR A ; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = ­ã«î
SBC HL,DE SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL POP HL
RET RET
; HL - CLUSTER ;-----------------------------------------------------------
; DE - (CLUSTER) ; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
; ¢å®¤: de = ­®¬¥à ª« áâ¥à 
; hl = ? ­®¬¥à ¯¥à¢®£® ª« áâ¥à 
; ¢ë室: hl = ? ­®¬¥à á«¥¤. ª« áâ¥à 
; de = ­®¬¥à ª« áâ¥à 
; in: HL - CLUSTER
; out: DE - (CLUSTER)
;-----------------------------------------------------------
W_T_FAT PUSH DE W_T_FAT PUSH DE
EX DE,HL EX DE,HL
LD HL,(MAX_CLU) LD HL,(MAX_CLU)
@ -224,7 +252,7 @@ W_T_FAT PUSH DE
SBC HL,DE SBC HL,DE
EX DE,HL EX DE,HL
POP DE POP DE
LD A,10 ;!HARDCODE error number LD A,DSS_Error.sys.DISK_FULL
RET C RET C
EXX EXX
@ -236,12 +264,12 @@ W_T_FAT PUSH DE
LD A,1 LD A,1
LD (FATCASH.Update),A LD (FATCASH.Update),A
LD A,(FatBuffer.FAT_TYP) LD A,(FatBuffer.FAT_TYP)
CP "2" CP "2" ; fat12
JR Z,W_T_F12 JR Z,W_T_F12
W_T_F16: W_T_F16:
PUSH DE PUSH DE
LD A,H LD A,H
LD B,A LD B,H
AND #0F AND #0F
LD H,A LD H,A
LD A,B LD A,B
@ -254,28 +282,36 @@ W_T_F16:
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C CP C
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
LD DE,FAT LD DE,FAT_CACHE
ADD HL,DE ADD HL,DE ; ­  ï祩ªã FAT
POP DE POP DE
LD (HL),E LD (HL),E ; á®åà. ¢ ª¥è¥ FAT- 
INC HL INC HL ; ­®¬¥à ª« áâ¥à 
LD (HL),D LD (HL),D
POP AF POP AF ; ¢®ááâ. ¯®àâ
POP HL POP HL
OUT (SLOT3),A OUT (SLOT3),A
XOR A XOR A
RET RET
;
; fat12
W_T_F12 PUSH DE W_T_F12 PUSH DE
LD D,H LD D,H
LD E,L LD E,L
ADD HL,HL ; ADD HL,HL
ADD HL,DE ; ADD HL,DE
; RR H
; RR L ;CLUSTER * 1.5
; PUSH AF
RR H RR H
RR L ;CLUSTER * 1.5 RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
PUSH AF PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5
;
;!FIXIT å¥à­ï ª ª ï-â®
IF COMPILE_UNUSED_CODE
LD A,H LD A,H
LD B,A LD B,H
AND #1F AND #1F
LD H,A LD H,A
LD A,B LD A,B
@ -285,12 +321,14 @@ W_T_F12 PUSH DE
AND #07 AND #07
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C CP C
CALL NZ,RE_FAT CALL NZ,RE_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
LD DE,FAT ENDIF
;
LD DE,FAT_CACHE
ADD HL,DE ADD HL,DE
POP AF POP AF
POP DE POP DE
JP C,W_T_F01 JP C,W_T_F01 ; ­®¬¥à ­¥çñâ­ë©
LD (HL),E LD (HL),E
INC HL INC HL
LD A,(HL) LD A,(HL)
@ -303,19 +341,32 @@ W_T_F12 PUSH DE
AND A AND A
RET 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 D
RL E RLA
RL D RL D
RL E RLA
RL D RL D
RL E RLA
RL D RL D
LD E,A
;
LD A,(HL) LD A,(HL)
AND #0F AND #0F
OR E OR E
LD (HL),A LD (HL),A ; á®åà. ¢ ª¥è¥ FAT- 
INC HL INC HL ; ­®¬¥à ª« áâ¥à 
LD (HL),D LD (HL),D
POP AF POP AF
POP HL POP HL
@ -324,6 +375,7 @@ W_T_F01 SLA E
RET RET
;R01 ;R01
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
; A - NEW FAT BLOCK ; A - NEW FAT BLOCK
RE_FAT: PUSH HL RE_FAT: PUSH HL
PUSH AF PUSH AF
@ -334,55 +386,55 @@ RE_FAT: PUSH HL
LD L,A LD L,A
LD H,0 LD H,0
LD (FATCASH),HL LD (FATCASH),HL
;FAT BLOCK * 16 = SECTOR OF FAT
ADD HL,HL ADD HL,HL
ADD HL,HL 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) LD DE,(FatBuffer.FAT_FRM)
ADD HL,DE ADD HL,DE
EX DE,HL EX DE,HL
LD IX,0 LD IX,0
ADD IX,DE ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
LD HL,0 ;HL:IX - SECTOR FAT FOR READING LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
LD DE,FAT ; DE - FAT ADDRESS LD DE,FAT_CACHE ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD BC,16*256 + Dss.DRV.Read ;ॣ B: 16 * 512 = 8192 (CASH SIZE) ;!TODO FATcacheSize LD BC,16*256 + Dss.DRV.Read ;ॣ B: 16 * 512 = 8192 (CASH SIZE) ;!TODO FATcacheSize
RST ToDSS.DRV RST ToDSS.DRV
POP HL POP HL
RET RET
WR_FAT: EXX ; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
SET_PAGE_X FATPAGE WR_FAT: SET_PAGE_X FATPAGE
EXX
PUSH AF PUSH AF
CALL .Start CALL .Start
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
RET RET
; ; ‡ ¯¨áì ª¥è  (¢á¥£®?) FAT-  ­  ¤¨áª
.Start: LD HL,(FATCASH) .Start: LD HL,(FATCASH)
LD H,0 LD H,0
LD (FATCASH),HL LD (FATCASH),HL
ADD HL,HL ADD HL,HL
ADD HL,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 PUSH HL
LD B,H LD B,H
LD C,L ;BC - BLOCK OF FAT LD C,L ;BC - BLOCK OF FAT
LD DE,16 LD DE,16 ;!HARDCODE ;!TODO FATcacheSize
ADD HL,DE ;+ SIZE CASH (16 SECTORS) ADD HL,DE ;+ SIZE CASH (16 SECTORS)
LD DE,(BootSector.S_P_F) LD DE,(BootSector.S_P_F) ; ᥪâ®à®¢ ­  FAT
LD A,16 LD A,16 ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè ;!TODO FATcacheSize
AND A AND A
SBC HL,DE SBC HL,DE
JR C,.WALLFAT JR C,.WALLFAT
EX DE,HL EX DE,HL
LD HL,16 LD HL,16 ;!HARDCODE ; ç¨á«® ᥪâ®à®¢ ;!TODO FATcacheSize
; AND A ;âãâ â®ç­® CF ­¥ ¢§¢¥¤ñ­ ; CF = 0
SBC HL,DE SBC HL,DE
JP C,FATERR JP C,FATERR
LD A,L LD A,L
@ -393,22 +445,23 @@ WR_FAT: EXX
ADD HL,DE ADD HL,DE
EX DE,HL EX DE,HL
LD IX,0 LD IX,0
ADD IX,DE ;HL:IX - SECTOR OF FAT FOR SAVE
LD HL,0 ;HL:IX - SECTOR OF FAT FOR SAVE ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
LD DE,FAT LD HL,0 ; áâ. à §àï¤
LD B,A LD DE,FAT_CACHE ; ®âªã¤ 
LD C,Dss.DRV.Write LD B,A ; ç¨á«® ᥪâ®à®¢
LD A,(FatBuffer.DRIVE) LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
PUSH BC PUSH BC
RST ToDSS.DRV RST ToDSS.DRV
POP BC POP BC ; b=ç¨á«® ᥪâ®à®¢
POP HL POP HL
LD DE,(FatBuffer.FAT2_XX) LD DE,(FatBuffer.FAT2_XX)
ADD HL,DE ADD HL,DE
EX DE,HL EX DE,HL
LD IX,0 LD IX,0
ADD IX,DE ADD IX,DE
LD DE,FAT LD DE,FAT_CACHE
LD HL,0 LD HL,0
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
@ -469,13 +522,13 @@ WR_FAT: EXX
;R01 RET ;R01 RET
FATERR: POP HL FATERR: POP HL
; SCF ; CF = 1
RET RET
FATCASH: WORD #0000 FATCASH: WORD #0000
.Block EQU FATCASH .Block EQU FATCASH
.Update EQU FATCASH+1 .Update EQU FATCASH+1
MAX_CLU: WORD #0FF0 MAX_CLU: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ FAT12 (¡¥§ á«ã¦.)
;//MODULE: FAT_X ;//MODULE: FAT_X
;[END] ;[END]

View 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
*/

View File

@ -524,7 +524,6 @@ IOCTL_RD:
; AND A ; AND A
; RET ; RET
;!!!!! ¢ë§ë¢ ¥âáï ¢ SCANDRV, ª®£¤  íâ  ¯à®æ¥¤ãà  ¢ SLOT3,   ­¥ ¢ SLOT0
GET_RAMDRV_NUM: GET_RAMDRV_NUM:
LD BC,RAMDTBL LD BC,RAMDTBL
.skip_tbl: .skip_tbl:

View File

@ -116,82 +116,6 @@
; EX (SP),HL ; EX (SP),HL
; RET ; 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-¤¨áª¨ ; <20>à®áª ­¨à®¢ âì á¨á⥬㠭  FDD/HDD ¤¥¢ ©áë ¨ RAM-¤¨áª¨
@ -256,6 +180,92 @@ MAKEDVC: LD C,A
LD (HL),A LD (HL),A
RET 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 ;DEVICE DB #00
; DW FDDRIVE ; FDD A ; DW FDDRIVE ; FDD A
; DB #01 ; DB #01

View File

@ -1,970 +1,28 @@
/* ;!TODO ª®¤ ¤¨ª® ª®áâë«ì­ë© ¨ ¡ã¤¥â ¯¥à¥¤¥« ­ ¢¬¥áâ¥ á ¯à®æ¥¤ãன INITDVC
; !TODO § ¯®¬¨­ âì ¯à¥à뢠­¨ï, ®âª«îç âì ­  áâ àâ¥, ¢®ááâ ­ ¢«¨¢ âì ­  ¢ë室¥
SCANDRV: SCANDRV:
;1 [-----------] [-----------] [-----------] [-----------] [-----------] ; 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. § ¯®¬¨­ ¥¬ á®áâ®ï­¨¥ ¯à¥à뢠­¨©
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD A,R LD A,R
DI DI
PUSH AF PUSH AF
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 2. ã§­ ñ¬ ¡ãª¢ã ¡ãâ-¤¨áª 
; 1. § ¯®¬¨­ ¥¬ ¡ãâ-¤¨áª
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
CALL GETBOOT 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. ¢ë§ë¢ ¥¬ à¥áª ­ ; 3. ¢ë§ë¢ ¥¬ à¥áª ­
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; A = Boot disk
LD B,A
LD A,Dss.DRV.RescanDRV LD A,Dss.DRV.RescanDRV
LD C,Dss.DRV.RescanDRV LD C,Dss.DRV.RescanDRV
RST ToDSS.DRV RST ToDSS.DRV
LD (LDRIVE),A LD (LDRIVE),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 4. ¢ë室
; 4. áà ¢­¨¢ ¥¬ § ¯¨á¨ áâ àëå â ¡«¨æ á ­®¢ë¬¨:
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;SET_PAGE_X DRVPAGE
;PUSH AF
LD HL,OLD_TABLES.DEVICE + #C000
LD B,DSS_MAX_DRIVES_AMOUNT
.tbl_scanNew_mainLoop:
PUSH BC
PUSH HL
; ¯®«ãç ¥¬ ­®¬¥à ¯à®æ¥¤ãàë ¤«ï í⮩ ¡ãª¢ë ¤¨áª 
LD A,(HL)
;
CP #FF
JR Z,.nextN
;
LD B,A
INC HL
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
; ¨é¥¬ çâ® §  ¤à ©¢
EX DE,HL
; FDD?
LD HL,FDDRIVE
AND A
SBC HL,DE
JR Z,.nextN ; ¯à®¯ã᪠FDD ¤à ©¢®¢
; HDD?
LD HL,HDDRIVE
AND A
SBC HL,DE
; HDD. ‘¢¥àª  ¯® â ¡«¨æ¥ LOGDRV
JP Z,SCAN_TABLES.HARD_DRV
; RD?
LD HL,RMDRIVE
AND A
SBC HL,DE
; RAM Drive. ‘¢¥àª  ¯® â ¡«¨æ¥ RAMDTBL
JP Z,SCAN_TABLES.RAM_DRV
; CD/DVD?
;LD HL,CDDRIVE
;AND A
;SUB HL,DE
; CD/DVD.
; JR Z,SCAN_TABLES.CD_ROM
;
; á«¥¤ãî騩 ¢¨â®ª
.nextN: POP HL
.nextN2:
INC HL
INC HL
INC HL
POP BC
DJNZ .tbl_scanNew_mainLoop
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 5. áà ¢­¨¢ ¥¬ § ¯¨áì ­®¢ëå â ¡«¨æ á® áâ à묨
;  . ¥á«¨ ¤à ©¢ ⮫쪮 ¢ ­®¢®©:
;  1) ¢â몠¥¬ ¥£® ¢ ¯¥à¢ãî ᢮¡®¤­ãî § ¯¨áì ¢ DEVICE (¨«¨ áâ ¢¨¬ ¯®á«¥ ¯®á«¥¤­¥£® ¤à ©¢ )
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; ‚•Ž„: IX - OLD_TABLES.DEVICE
; HL - OLD_TABLES.DEVICE.End
; HL' - à §­¨æ  ¬¥¦¤ã  ¤à¥á ¬¨ áâ àëå ¨ ­®¢ëå â ¡«¨æ
;
INC HL
LD (OLD_TABLES_CURRENT),HL
EXX
LD HL,OLD_TABLES.LOGDRV - LOGDRV
LD B,DSS_MAX_DRIVES_AMOUNT
EXX
; ­ å®¤¨¬ ¢ áâ à®© DEVICE ¯¥à¢ãî ᢮¡®¤­ãî ï祩ªã (¯à®¢¥à塞 á ª®­æ  ¢ ­ ç «®)
LD IX,OLD_TABLES.DEVICE + OLD_TABLES.DEVICE.Size - OLD_TABLES.DEVICE.TBL_Entry + #C000
LD IY,LOGDRV + #C000
LD DE,-OLD_TABLES.DEVICE.TBL_Entry ; ¤¢¨£ ¥¬áï ¯® â ¡«¨æ¥ ­ § ¤
LD B,DSS_MAX_DRIVES_AMOUNT
;
.loop1: LD A,#FF
CP (IX+0)
JR NZ,.loop2_start
ADD IX,DE
DJNZ .loop1
.loop1_exit:
LD A,C ; § ª®­ç¨«¨ áç¨â âì ¯¥à¥¬¥­­ãî LDRIVE
LD (DRV_PAGE.LDRIVE + #C000),A
LD (LDRIVE),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 6. ¯à®¢¥à塞, ­¥ £à®å­ã«áï «¨ ¡ãâ-¤¨áª.
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
.old_letter+1:
LD A,0
_CALC_DEVICE_ENTRY OLD_TABLES.DEVICE + #C000
LD A,(HL)
INC A
JP Z,ERROR_BOOTDRV_DIES
; .old_DRIVE_ID+1:
; LD A,0
; CALL SETBOOT
; JR C,.ERROR_BOOTDRV_DIES
; LD (.new_letter),A
; ;
; LD A,(.old_letter)
; LD (BOOTDRV),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 7. § ¬¥­ï¥¬ ­®¢ë¥ â ¡«¨æë ­  ¬®¤¨ä¨æ¨à®¢ ­­ë¥ áâ àë¥
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD HL,OLD_TABLES.DEVICE + #C000
LD DE,DEVICE + #C000
LD BC,OLD_TABLES.DEVICE - DEVICE
LDIR
POP AF
OUT (SLOT3),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;8. ¢ë室
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
POP AF POP AF
RET PO RET PO
EI EI
RET 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
*/

View File

@ -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

View File

@ -6,63 +6,47 @@
;--------------------------------------------------------------- ;---------------------------------------------------------------
;Rev Date Name Description ;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" ;R02 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI"
;R01 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0) ;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 CLEAR: LD C,BIOS.LP_CLS_WIN2
RST ToBIOS RST ToBIOS
AND A AND A
RET RET
; ;
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #5C. ‚뢮¤ áâப¨ ­  íªà ­.
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  áâபã ᨬ¢®«®¢
; ¢ë室: ­¥â
; PRINT NULL-TERMINATED CHARS STRING ; PRINT NULL-TERMINATED CHARS STRING
; HL - STRING POINTER ;/////////////////////////////////////////////////////////////////////
PCHARS: PCHARS: LD A,(HL)
.loop: LD A,(HL)
INC HL INC HL
OR A OR A
RET Z 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 CALL PUTCHAR
;!TEST CR+LF+SCROLL JP PCHARS
;CALL CURSOR
;LD A,D ; ¯à®¢¥àª  ­  ¯¥à¥å®¤ ªãàá®à 
;OR E ; ¢ á ¬®¥ ­ ç «® (X:Y == 0:0)
;CALL Z,PUTCHAR.LFF
;
JP .loop
;.CHAR: DZ " ",0
;/////////////////////////////////////////////////////////////////////
; PRINT CHAR ; ”ã­ªæ¨ï #5B. ‚뢮¤ ᨬ¢®«  ­  íªà ­ ¢ ⥪. ¯®§¨æ¨¨.
; A - CHAR ;
; ¢å®¤: A - ᨬ¢®«
; ¢ë室: ­¥â
;/////////////////////////////////////////////////////////////////////
PUTCHAR: PUTCHAR:
;LD B,A
;CALL CURSOR
;LD A,B
;CP ' '
;JR NC,.CHAR
CP #0D CP #0D
JR Z,.CR_ JR Z,.CR_
CP #0A CP #0A
@ -73,40 +57,25 @@ PUTCHAR:
JR Z,.BK_ JR Z,.BK_
CP #07 CP #07
JR Z,.BELL JR Z,.BELL
;SCF ;
;RET
.CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM .CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM
;!TEST CR+LF+SCROLL ;[x] CR+LF+SCROLL
;JP ToBIOS
RST ToBIOS RST ToBIOS
; ¯à®¢¥àª  ­  ¯¥à¥å®¤ ªãàá®à  ¢ á ¬®¥ ­ ç «® (X:Y == 0:0) ; ¯à®¢¥àª  ­  ¯¥à¥å®¤ ªãàá®à  ¢ á ¬®¥ ­ ç «® (X:Y == 0:0)
CALL CURSOR CALL CURSOR
LD A,D LD A,D
OR E OR E
RET NZ RET NZ
;LD A,D ; ¢ DE ª®®à¤¨­ âë ⥪ã饣® §­ ª®¬¥áâ 
;XOR E ; <20>஢¥à塞 ­  ª®®à¤¨­ âë #1F:#4F
;XOR #50
;RET NZ ; ¥á«¨ ¤à㣨¥ - â® ¢ë室
;LD E,A
;CALL LOCATE
; ;
.LFF: PUSH HL ;!FIXIT á®åà ­ïâì ⥪ã騥 ¯à¥à뢠­¨ï .LFF: PUSH HL ;!FIXIT á®åà ­ïâì ⥪ã騥 ¯à¥à뢠­¨ï
;PUSH DE
LD BC,1*256 + BIOS.LP_SCROLL_UD LD BC,1*256 + BIOS.LP_SCROLL_UD
LD DE,#0020 LD DE,#0020
;EI
;HALT
;DI
RST ToBIOS RST ToBIOS
LD DE,#1F00 LD DE,#1F00
;PUSH DE
CALL LOCATE CALL LOCATE
LD A,' ' LD A,' '
LD BC,#50*256 + BIOS.LP_PRINT_SYM LD BC,#50*256 + BIOS.LP_PRINT_SYM
RST ToBIOS RST ToBIOS
;EI
;POP DE
LD DE,#1F00 LD DE,#1F00
CALL LOCATE CALL LOCATE
POP HL POP HL
@ -134,8 +103,6 @@ PUTCHAR:
RST ToBIOS RST ToBIOS
XOR A XOR A
CP E CP E
;!TEST
;JP Z,LOCATE
RET Z RET Z
DEC E DEC E
JP LOCATE JP LOCATE
@ -159,8 +126,6 @@ PUTCHAR:
LD HL,4 LD HL,4
JP BEEP JP BEEP
.NO_SCROLL: .NO_SCROLL:
;CP ' '
;JR NC,.CHAR
CP #0D CP #0D
JR Z,.CR_ JR Z,.CR_
CP #0A CP #0A
@ -171,41 +136,40 @@ PUTCHAR:
JR Z,.BK_ JR Z,.BK_
CP #07 CP #07
JR Z,.BELL JR Z,.BELL
;SCF
;RET
._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM ._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM
;!TEST CR+LF+SCROLL
JP ToBIOS JP ToBIOS
;RST ToBIOS
;-----[] ;-----[]
; ;
; ;
; SET CURRENT CURSOR POSITION ;/////////////////////////////////////////////////////////////////////
;=============================== ; ”ã­ªæ¨ï #52. “áâ ­®¢¨âì ¯®«®¦¥­¨¥ ªãàá®à .
; D = Y ;
; E = X ; ¢å®¤: D - áâப  ªãàá®à 
; E - ª®«®­ª  ªãàá®à 
; ¢ë室: ­¥â
;/////////////////////////////////////////////////////////////////////
LOCATE: LD C,BIOS.LP_SET_PLACE LOCATE: LD C,BIOS.LP_SET_PLACE
; LD A,C
; LD (NO_NEED_SCROLL),A
JP ToBIOS JP ToBIOS
;RET
; GET CURRENT CURSOR POSITION ;/////////////////////////////////////////////////////////////////////
; out: ; ”ã­ªæ¨ï #53. “§­ âì ¯®«®¦¥­¨¥ ªãàá®à .
; D - Y ;
; E - X ; ¢å®¤: ­¥â
; ¢ë室: D - áâப  ªãàá®à 
; E - ª®«®­ª  ªãàá®à 
;/////////////////////////////////////////////////////////////////////
CURSOR: LD C,BIOS.LP_GET_PLACE CURSOR: LD C,BIOS.LP_GET_PLACE
JP ToBIOS JP ToBIOS
;RET
; READ CHAR & ATTR FROM THE SCREEN ;/////////////////////////////////////////////////////////////////////
; in: ; ”ã­ªæ¨ï #57. <20>à®ç¨â âì ᨬ¢®« á íªà ­ .
; D - Y ;
; E - X ; ¢å®¤: D - áâப 
; out: ; E - ª®«®­ª 
; A - CHAR ; ¢ë室: A - ᨬ¢®«
; B - ATTR ; B -  âਡãâ
;/////////////////////////////////////////////////////////////////////
RDCHAR: XOR A RDCHAR: XOR A
LD C,BIOS.WIN_GET_SYM LD C,BIOS.WIN_GET_SYM
RST ToBIOS RST ToBIOS
@ -214,12 +178,17 @@ RDCHAR: XOR A
AND A AND A
RET RET
; WRITE CHAR & ATTR TO THE SCREEN ;/////////////////////////////////////////////////////////////////////
; D - Y ; ”ã­ªæ¨ï #58. ‚뢥á⨠ᨬ¢®« ­  íªà ­.
; E - X ; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëç­ë¥ ᨬ¢®«ë.
; A - CHAR ;
; B - ATTR ; ¢å®¤: D - áâப 
; E - ª®«®­ª 
; A - ᨬ¢®«
; B -  âਡãâ
; ¢ë室: ­¥â
;!FIXIT slow ª ª ¡¥§ WIN_GET_SYM âãâ ®¡®©â¨áì? ;!FIXIT slow ª ª ¡¥§ WIN_GET_SYM âãâ ®¡®©â¨áì?
;/////////////////////////////////////////////////////////////////////
WRCHAR: LD C,A WRCHAR: LD C,A
PUSH BC PUSH BC
PUSH DE PUSH DE
@ -234,20 +203,21 @@ WRCHAR: LD C,A
AND A AND A
RET RET
; COPY WINDOW FROM THE SCREEN ;/////////////////////////////////////////////////////////////////////
; D - Y ; ”ã­ªæ¨ï #59. ‘®åà ­¨âì ®ª­® íªà ­ .
; E - X ;
; H - HEIGHT ; ¢å®¤: D - áâப 
; L - WIDTH ; E - ª®«®­ª  «¥¢®£® ¢¥àå­¥£® 㣫  ®ª­ 
; IX - ADDRESS ; H - ¢ëá®â  ®ª­ 
; B - PAGE, IF IX > #C000 ; L - è¨à¨­  ®ª­ 
; B - áâà ­¨æ  ¡ãä¥à , ¥á«¨ IX >= #C000
; IX -  ¤à¥á ¡ãä¥à 
; ¢ë室: ­¥â
;/////////////////////////////////////////////////////////////////////
WINCOPY: AND A WINCOPY: AND A
LD A,R ;R02 LD A,R ;R02
PUSH AF ;R02 PUSH AF ;R02
XOR A XOR A
;EX AF,AF' ;R03
;LD A,B ;R03
;EX AF,AF' ;R03
LD C,BIOS.WIN_COPY LD C,BIOS.WIN_COPY
DI ;R02 DI ;R02
RST ToBIOS RST ToBIOS
@ -256,20 +226,21 @@ WINCOPY: AND A
EI ;R02 EI ;R02
RET RET
; RESTORE WINDOW TO THE SCREEN ;/////////////////////////////////////////////////////////////////////
; D - Y ; ”ã­ªæ¨ï #5A. ‚®ááâ ­®¢¨âì ®ª­® íªà ­ .
; E - X ;
; H - HEIGHT ; ¢å®¤: D - áâப 
; L - WIDTH ; E - ª®«®­ª  «¥¢®£® ¢¥àå­¥£® 㣫  ®ª­ 
; IX - ADDRESS ; H - ¢ëá®â  ®ª­ 
; B - PAGE, IF IX > #C000 ; L - è¨à¨­  ®ª­ 
; B - áâà ­¨æ  ¡ãä¥à , ¥á«¨ IX >= #C000
; IX -  ¤à¥á ¡ãä¥à 
; ¢ë室: ­¥â
;/////////////////////////////////////////////////////////////////////
WINREST: AND A WINREST: AND A
LD A,R ;R02 LD A,R ;R02
PUSH AF ;R02 PUSH AF ;R02
XOR A XOR A
;EX AF,AF' ;R03
;LD A,B ;R03
;EX AF,AF' ;R03
DI ;R02 DI ;R02
LD C,BIOS.WIN_RESTORE LD C,BIOS.WIN_RESTORE
RST ToBIOS RST ToBIOS
@ -277,18 +248,20 @@ WINREST: AND A
RET PO ;R02 RET PO ;R02
EI ;R02 EI ;R02
RET RET
;/////////////////////////////////////////////////////////////////////
; SCROLL WINDOW ; ”ã­ªæ¨ï #55. ‘ªà®««¨­£ íªà ­ .
; D - Y ;
; E - X ; ¢å®¤: D - áâப  «¥¢®£® ¢¥àå­¥£® 㣫  ®ª­ 
; H - HEIGHT ; E - ª®«®­ª  «¥¢®£® ¢¥àå­¥£® 㣫  ®ª­ 
; L - WIDTH ; H - ¢ëá®â  ®ª­ 
; B - SCROLL DIRECTION ; L - è¨à¨­  ®ª­ 
; B = 1 - SCROLL UP ; B = 1 - ¯à®ªàã⪠ ¢¢¥àå
; B = 2 - SCROLL DOWN ; B = 2 - ¯à®ªàã⪠ ¢­¨§
; A = 0 - CLEAR LINE ; A = 0 - ®ç¨é âì áâபã
; ¢ë室: ­¥â
;/////////////////////////////////////////////////////////////////////
SCROLL: DJNZ SCR_DW ;!TODO § ¬¥­¨âì ­  BIOS.LP_SCROLL_UD ¨ ¯®á¬®âà¥âì, çâ® èãáâ॥ SCROLL: DJNZ SCR_DW ;!TODO § ¬¥­¨âì ­  BIOS.LP_SCROLL_UD ¨ ¯®á¬®âà¥âì, çâ® èãáâ॥
;!TEST ; [x] 04/04/23
;LD B,A ;LD B,A
;LD C,H ;LD C,H
;PUSH BC ;PUSH BC
@ -301,11 +274,21 @@ SCROLL: DJNZ SCR_DW ;!TODO
INC D INC D
DEC H DEC H
LD C,BIOS.WIN_MOVE LD C,BIOS.WIN_MOVE
; [x] 29/9/23
LD A,R
PUSH AF
;
XOR A XOR A
DI ; [x] 29/9/23
RST ToBIOS RST ToBIOS
; [x] 29/9/23
POP AF
JP PO,1F
EI
1: ;
POP HL POP HL
POP DE POP DE
;!TEST ; [x] 04/04/23
;POP BC ;POP BC
POP AF POP AF
;XOR A ;XOR A
@ -329,11 +312,11 @@ SCROLL: DJNZ SCR_DW ;!TODO
RET RET
SCR_DW: DJNZ SCR_ERR SCR_DW: DJNZ SCR_ERR
;!TEST ; [x] 04/04/23
;LD B,A ;LD B,A
;LD C,H ;LD C,H
;PUSH BC ;PUSH BC
PUSH AF ;R03 PUSH AF
; ;
PUSH DE PUSH DE
PUSH HL PUSH HL
@ -342,74 +325,92 @@ SCR_DW: DJNZ SCR_ERR
INC XH INC XH
DEC H DEC H
LD C,BIOS.WIN_MOVE LD C,BIOS.WIN_MOVE
; [x] 29/9/23
LD A,R
PUSH AF
;
XOR A XOR A
DI ; [x] 29/9/23
RST ToBIOS RST ToBIOS
; [x] 29/9/23
POP AF
JP PO,1F
EI
1: ;
POP HL POP HL
POP DE POP DE
;!TEST ; [x] 29/9/23
;POP BC ;POP BC
POP AF ;R03 POP AF
;XOR A ;XOR A
;CP B ;CP B
AND A AND A
; ;
RET NZ RET NZ
JP SCROLL.print 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: SCR_ERR:
LD A,DSS_Error.sys.INVALID_FUNCTION LD A,DSS_Error.sys.INVALID_FUNCTION
SCF SCF
RET RET
; SELECT SCREEN PAGE ;/////////////////////////////////////////////////////////////////////
; B - SCREEN PAGE ; ”ã­ªæ¨ï #54. ‚ë¡à âì  ªâ¨¢­ãî áâà ­¨æã íªà ­ .
SELPAGE:;PUSH BC ;
; ¢å®¤: B - áâà ­¨æ  íªà ­  0/1
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;/////////////////////////////////////////////////////////////////////
SELPAGE:
LD A,(VMODE) LD A,(VMODE)
BIT 7,A ;BIT 7,A
JR NZ,.SEL2 CP %1000'0000
JR NC,.SEL2
PUSH BC PUSH BC
LD C,A LD C,A
CALL SETVMOD.TEXT_M CALL SETVMOD.TEXT_M
POP BC POP BC
.SEL2: ;POP BC .SEL2: LD A,B
LD A,B
AND #01 AND #01
OUT (SCREEN_SWITCH),A OUT (SCREEN_SWITCH),A
RET RET
; GET CURRENT VIDEO MODE ;/////////////////////////////////////////////////////////////////////
; out: ; ”ã­ªæ¨ï #51. <20>®«ãç¨âì ⥪ã騩 ०¨¬ íªà ­ .
; A - MODE ;
; B - PAGE ; ¢å®¤: ­¥â
; ¢ë室: A - ⥪ã騩 ०¨¬ íªà ­ 
; B - áâà ­¨æ  íªà ­  0/1
;/////////////////////////////////////////////////////////////////////
GETVMOD IN A,(SCREEN_SWITCH) GETVMOD IN A,(SCREEN_SWITCH)
LD B,A LD B,A
LD A,(VMODE) LD A,(VMODE)
AND A AND A
RET RET
; SET CURRENT VIDEO MODE ;/////////////////////////////////////////////////////////////////////
; A - MODE ; ”ã­ªæ¨ï #50. ‚ë¡®à ०¨¬  íªà ­ .
; B - PAGE ;
SETVMOD: BIT 7,A ; ¢å®¤: 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 LD C,A
JR NZ,GRAPH JR NC,GRAPH
.TEXT_M: LD IX,BACKTXT .TEXT_M: LD IX,BACKTXT
PUSH IX PUSH IX
EX AF,AF' EX AF,AF'
LD A,(VMODE) LD A,(VMODE)
LD (VVMODE),A LD (VVMODE),A
EX AF,AF' EX AF,AF'
INC A //INC A
DEC A //DEC A
OR A
JR Z,.NOMODE JR Z,.NOMODE
DEC A DEC A
JR Z,.NOMODE JR Z,.NOMODE
@ -424,6 +425,7 @@ SETVMOD: BIT 7,A
SCF SCF
RET RET
; “áâ ­®¢ª  £à ä. ०¨¬®¢
GRAPH: CALL SAVETXT GRAPH: CALL SAVETXT
AND #7F AND #7F
JR Z,G320_16 ; !TODO ? - ¯®ª  ®âà ¡ â뢠¥â ª ª ®è¨¡ª  JR Z,G320_16 ; !TODO ? - ¯®ª  ®âà ¡ â뢠¥â ª ª ®è¨¡ª 
@ -531,15 +533,20 @@ G640_16 PUSH BC
; SAFE_PORTY ; SAFE_PORTY
; XOR A ; XOR A
; RET ; RET
VMODE: DB #03 VMODE: DB #03
;-----------------------------------------------------------------------
; Žâªàëâì ®ª­®
; ¢å®¤: hl=®¯¨á â¥«ì ®ª­ 
; e=ä« £¨ ®ª­ 
;
;02h - TEXT 40 x 32 (16 colors) ;02h - TEXT 40 x 32 (16 colors)
;03h - TEXT 80 x 32 (16 colors) ;03h - TEXT 80 x 32 (16 colors)
;80h - GRAF 320 x 256 (16 colors) ;80h - GRAF 320 x 256 (16 colors)
;81h - GRAF 320 x 256 (256 colors) ;81h - GRAF 320 x 256 (256 colors)
;82h - GRAF 640 x 256 (16 colors) ;82h - GRAF 640 x 256 (16 colors)
;83h - GRAF 640 x 256 (256 colors) UNUSED ;83h - GRAF 640 x 256 (256 colors) UNUSED
;-----------------------------------------------------------------------
SETMODE: PUSH DE SETMODE: PUSH DE
LD DE,SYS_PAGE.SHARED_BUFFER_32b ; £àï§­ë© å ª. ª¨¤ ¥â ¤ ­­ë¥ ¢ ¡ãä¥à á«ã¦¥¡­®© áâà ­¨æë ¡¨®á . LD DE,SYS_PAGE.SHARED_BUFFER_32b ; £àï§­ë© å ª. ª¨¤ ¥â ¤ ­­ë¥ ¢ ¡ãä¥à á«ã¦¥¡­®© áâà ­¨æë ¡¨®á .
LD BC,ScreenDescriptorTable.Size ; <20>ˆŽ ¯à¨ ¨á¯®«ì§®¢ ­¨¨ IX ¯à¥¤¯®« £ ¥â, çâ® ®­ 㪠§ë¢ ¥â LD BC,ScreenDescriptorTable.Size ; <20>ˆŽ ¯à¨ ¨á¯®«ì§®¢ ­¨¨ IX ¯à¥¤¯®« £ ¥â, çâ® ®­ 㪠§ë¢ ¥â
@ -554,7 +561,7 @@ SETMODE: PUSH DE
LD IX,SYS_PAGE.SHARED_BUFFER_32b ; £àï§­ë© å ª. LD IX,SYS_PAGE.SHARED_BUFFER_32b ; £àï§­ë© å ª.
LD C,BIOS.WIN_OPEN LD C,BIOS.WIN_OPEN
RST ToBIOS RST ToBIOS
SAFE_PORTY ;????? - ¢®§¬®¦­®, ç⮠⥯¥àì ­¥ ­ã¦­®, ¢¥§¤¥ á ¡ ­ª®© 3 à ¡®â îâ, ¯à®¢¥à¨âì SAFE_PORTY
XOR A XOR A
RET 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 $ ScreenDescriptorTable EQU $
;80x32 ; 80x32. ⥪á⮢®¥, §­ ª®¬¥áâ® 16x8, #0B - ­®¬¥à §­ ª®£¥­.
TAB_80x32 DB #28,#20,#00,#00,#1B,#00,#00,#00 ;1 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 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 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 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 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 TAB_320x256_1 DB #28,#20,#00,#00,#60,#00,#28,#00 ;6
ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6 ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6
;....................................................................... ;.......................................................................
; ;
;----------------------------------------------------------------------
; ‘®åà ­¨âì íªà ­ ⥪áâ. ०¨¬ .
; „«ï ¡ãä¥à  íªà ­  ¨á¯. 2-ï ¡ ­ª  à áè¨à¥­¨ï „Ž‘.
SAVETXT PUSH AF SAVETXT PUSH AF
;!!!!! ¯¥à¥­¥á¥­  «®£¨ª  áã¯¥à ¤¨ç ©è¥£® ã᪮७¨ï
LD A,(VMODE) LD A,(VMODE)
BIT 7,A ;BIT 7,A
JR NZ,NOSAVET CP %1000'0000
JR NC,NOSAVET
SUB #02 SUB #02
JR C,NOSAVET JR C,NOSAVET
;;
PUSH BC PUSH BC
PUSH DE PUSH DE
PUSH HL PUSH HL
@ -611,27 +629,35 @@ SAVETXT PUSH AF
LD L,#28 LD L,#28
SVTEXT1 LD (SVHL1),HL SVTEXT1 LD (SVHL1),HL
LD DE,#0000 LD DE,#0000
;EX AF,AF' ;R03
LD A,(BANKTBL+TXTPAGE) LD A,(BANKTBL+TXTPAGE)
LD B,A LD B,A
;EX AF,AF' ;R03
LD C,BIOS.WIN_COPY LD C,BIOS.WIN_COPY
; [x] 29/9/23
LD A,R
PUSH AF
;
XOR A XOR A
DI DI
RST ToBIOS RST ToBIOS
; [x] 29/9/23
POP AF
JP PO,1F
EI EI
1: ;
POP IX POP IX
POP HL POP HL
POP DE POP DE
POP BC POP BC
NOSAVET: POP AF NOSAVET: POP AF
RET RET
;----------------------------------------------------------------------
BACKTXT PUSH AF BACKTXT PUSH AF
VVMODE+1: VVMODE+1:
LD A,#00 LD A,#00
BIT 7,A ;BIT 7,A
JR Z,NOBACKT CP %1000'0000
JR C,NOBACKT
PUSH BC PUSH BC
PUSH DE PUSH DE
@ -641,19 +667,23 @@ VVMODE+1:
SVHL1+1: SVHL1+1:
LD HL,#2050 LD HL,#2050
LD DE,#0000 LD DE,#0000
;EX AF,AF' ;R03
LD A,(BANKTBL+TXTPAGE) LD A,(BANKTBL+TXTPAGE)
LD B,A LD B,A
;EX AF,AF' ;R03
LD C,BIOS.WIN_RESTORE LD C,BIOS.WIN_RESTORE
; [x] 29/9/23
LD A,R
PUSH AF
;
XOR A XOR A
DI DI
RST ToBIOS RST ToBIOS
; [x] 29/9/23
POP AF
JP PO,1F
EI EI
1: ;
TCURS+1: TCURS+1:
LD DE,#0000 LD DE,#0000
;LD C,BIOS.LP_SET_PLACE
;RST ToBIOS
CALL LOCATE CALL LOCATE
POP IX POP IX
POP HL POP HL
@ -662,9 +692,21 @@ TCURS+1:
NOBACKT: POP AF NOBACKT: POP AF
RET RET
; SEND A SYMBOL TO THE PRINTER ;/////////////////////////////////////////////////////////////////////
;============================== ; ”ã­ªæ¨ï #5F. ‚뢮¤ ᨬ¢®«  ­  ¯à¨­â¥à ¡¥§ ®¦¨¤ ­¨ï.
; A - SYMBOL ;
; ˆ­â¥à¯à¥â æ¨ï ¡ ©â  á®áâ®ï­¨ï ¯à¨­â¥à :
; 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 ;!FIXIT § ¬¥­¨âì ­  sp2000.inc
LPT_A EQU #1B LPT_A EQU #1B
LPT_B EQU #1C LPT_B EQU #1C
@ -713,60 +755,30 @@ PRINT_INIT:
LD A,#CF ; port #1F ⮫쪮 ç¥p¥§ LD BC,1F : Out (BC),reg (¢  «ìâ¥à¥ ¨¤ñâ ¯¥à¥å¢ â í⮣® ¯®àâ  ¯à®æ , ¥á«¨ ®­ ¢ ª®¬ ­¤¥ ® 㪠§ ­) LD A,#CF ; port #1F ⮫쪮 ç¥p¥§ LD BC,1F : Out (BC),reg (¢  «ìâ¥à¥ ¨¤ñâ ¯¥à¥å¢ â í⮣® ¯®àâ  ¯à®æ , ¥á«¨ ®­ ¢ ª®¬ ­¤¥ ® 㪠§ ­)
LD BC,LPT2_C LD BC,LPT2_C
OUT (C),A OUT (C),A
LD A,#63 ; [x] 29/9/23
;LD A,#63
LD A,63
;
OUT (C),A OUT (C),A
LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1) LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1)
OUT (LPT2_D),A OUT (LPT2_D),A
LD A,#0F ; Init printer port for Out LD A,#0F ; Init printer port for Out
OUT (LPT1_C),A OUT (LPT1_C),A
; €‰Œ€<C592> <E2809A>…‡€ ; ª« ¢ 
XOR A ;LD A,0 XOR A ;LD A,0
OUT (COM_A),A OUT (COM_A),A
;LD A,0 ; [x] 29/9/23
OUT (COM_A),A ; ????? ­ ¤® «¨ ¢â®à®© à § § ááë« âì ¨ ¢®®¡é¥ ¨¬¥¥â «¨ á¬ëá« com ¨­¨â¨âì? INC A
OUT (COM_A),A
DEC A
;
OUT (COM_A),A
LD A,5 LD A,5
OUT (COM_A),A OUT (COM_A),A
LD A,#62 ; bit 7 - Direction for Bufer (0), Bit 1 - Bufer Enable (1) LD A,#62 ; bit 7 - Direction for Bufer (0), Bit 1 - Bufer Enable (1)
OUT (COM_A),A OUT (COM_A),A
RET RET
; €‰Œ€<C592> <E2809A>…‡€
;//MODULE: VIDEO ;//MODULE: VIDEO
;[END] ;[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 ; ¥á«¨ ¤à㣨¥ - â® ¢ë室
;;;;;;;;

View File

@ -1 +1 @@
371 396

View File

@ -4,7 +4,7 @@
; ;
DEFINE SHORT_RSTx10_TABLE 0 ; 㪮à®ç¥­­ ï â ¡«¨æ  ä㭪権 rst #10. 96 ä㭪権. 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]-------------------------; ;-------------------[MEMORY]-------------------------;
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82 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 TXTADDR EQU #C000
ENVADDR EQU #E400 ENVADDR EQU #E400
DIR EQU #C000 DIR EQU #C000
FAT EQU #C000 FAT_CACHE EQU #C000
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢ FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢
HANDBUF.SIZE EQU 32 HANDBUF.SIZE EQU 32

View File

@ -98,25 +98,35 @@ COMP002: xor a
jr c,NOUP jr c,NOUP
cp "z"+1 cp "z"+1
jr nc,NOUP jr nc,NOUP
and 5Fh ; a..z -> A..Z and #5F ; a..z -> A..Z
;!!!!! âãâ ¢®ááâ ­ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ­  ­®¢®¬ ï¤à¥ ;!!!!! âãâ ¢®ááâ ­ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ­  ­®¢®¬ ï¤à¥
NOUP: sub "A" ; ­®¬¥à ¤¨áª  NOUP: sub "A" ; ­®¬¥à ¤¨áª 
ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª
RST ToDSS RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
;!TODO ¤®áâ ¢ âì system_path ®â¤¥«ì­® ¤«ï ª ¦¤®£® ¤¨áª  (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
; â¥áâ ­  áãé¥á⢮¢ ­¨¥ ¯ ¯ª¨ ­  楫¥¢®¬ ¤¨áª¥ ; â¥áâ ­  áãé¥á⢮¢ ­¨¥ ¯ ¯ª¨ ­  楫¥¢®¬ ¤¨áª¥
IFDEF MANY_SYS_PATHES
ld hl,system_path ; ¡ãä¥à á¨áâ. ¯ã⨠ld hl,system_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS RST ToDSS
jp nc,save_disk_path ; Ok jp nc,save_disk_path ; Ok
ENDIF
;
; ãáâ. ª®à¥­ì, ­¥â â ª®© ¯ ¯ª¨ ­  ­®¢®¬ ¤¨áª¥ ; ãáâ. ª®à¥­ì, ­¥â â ª®© ¯ ¯ª¨ ­  ­®¢®¬ ¤¨áª¥
ld hl,system_path+1 ; ¡ãä¥à á¨áâ. ¯ã⨠ld hl,system_path+1 ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld (hl),0 ld (hl),0
dec hl dec hl
ld (hl),'\' ld (hl),'\'
;!TODO ¤®áâ ¢ âì system_path ®â¤¥«ì­® ¤«ï ª ¦¤®£® ¤¨áª  (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
IFDEF MANY_SYS_PATHES
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ENDIF
;
jp save_disk_path ; Ok jp save_disk_path ; Ok
; § ¤ ­ ­¥ ¤¨áª ; § ¤ ­ ­¥ ¤¨áª

View File

@ -1 +1 @@
78 80

@ -1 +1 @@
Subproject commit 639cc1e69de900dd85e1bc4d3525dfeb91ea15ab Subproject commit 1b025338c449183aa1cfbe595994fd9ddf7feb8e