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
ret
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #58. ‚뢥á⨠ᨬ¢®« ­  íªà ­.
; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëç­ë¥ ᨬ¢®«ë.
@ -711,16 +709,14 @@ Func_5A:ld a,r ;
; A = 0 - ®ç¨é âì áâபã
; ¢ë室: ­¥â
;/////////////////////////////////////////////////////////////////////
Func_55:djnz A0EBA
Func_55: djnz A0EBA
ld b,a
ld c,h
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
@ -981,8 +977,8 @@ mode_screen:
;-------------------------------------------------
; Žâªàëâì ®ª­®
; ¢å®¤: hl=®¯¨á â¥«ì ®ª­ 
; e=ä« £¨ ®ª­ 
; ¢å®¤: hl=®¯¨á â¥«ì ®ª­ 
; e=ä« £¨ ®ª­ 
;-------------------------------------------------
open_window:
push de

Binary file not shown.

View File

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

View File

@ -43,21 +43,21 @@ FM_BUF: _sFM
; ­  ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ­  ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
MACRO _mFM_FIND
CP FMCOUNT
JR NC,ABS_FM
CP FMCOUNT
JR NC,ABS_FM
PUSH DE
LD IY,FM_BUF
LD DE,FM_BUF.Size
AND A
JR Z,.endLoop
LD DE,FM_BUF.Size
AND A
JR Z,.endLoop
.loop: ADD IY,DE
DEC A
DEC A
JR NZ,.loop
.endLoop:
POP DE
; A=0
OR (IY) ;+00 NAME
; A=0
OR (IY) ;+00 NAME
ENDM
SET_FM:

View File

@ -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
@ -187,13 +215,15 @@ TCOUNT: DW #0000
;R04L_SEC_X DW 0
;R04H_SEC_X DW 0
; !FIXIT çñâ ­¥ ¨á¯®«ì§ã¥âáï
; !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

View File

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

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

View File

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

View File

@ -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
SET_PAGE_X FATPAGE
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)
;
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
;
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 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
LD HL,#FFEF ;!HARDCODE
XOR A ; DssErr.sys.NO_ERROR
SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL
;LD A,DssErr.sys.NO_ERROR
RET
;R01; HL - CLUSTER
@ -165,28 +164,39 @@ 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
LD A,H
LD B,A
AND #1F
LD H,A
LD A,B
RLCA
RLCA
RLCA
AND #07
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT
LD DE,FAT
ADD HL,DE
POP AF
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5
;
;!FIXIT å¥à­ï ª ª ï-â®
IF COMPILE_UNUSED_CODE
LD A,H
LD B,H
AND #1F
LD H,A
LD A,B
RLCA
RLCA
RLCA
AND #07
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
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
XOR A ; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = ­ã«î
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,11 +252,11 @@ 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
SET_PAGE_X FATPAGE
SET_PAGE_X FATPAGE
EXX
PUSH HL
@ -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,43 +282,53 @@ 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
POP DE
LD (HL),E
INC HL
LD DE,FAT_CACHE
ADD HL,DE ; ­  ï祩ªã FAT
POP DE
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
LD A,H
LD B,A
AND #1F
LD H,A
LD A,B
RLCA
RLCA
RLCA
AND #07
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT
LD DE,FAT
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5
;
;!FIXIT å¥à­ï ª ª ï-â®
IF COMPILE_UNUSED_CODE
LD A,H
LD B,H
AND #1F
LD H,A
LD A,B
RLCA
RLCA
RLCA
AND #07
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
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
RL D
RL E
RL D
RL E
RL D
RL E
RL D
; 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
RLA
RL D
RLA
RL D
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
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
;FAT BLOCK * 16 = SECTOR OF FAT
ADD HL,HL
ADD HL,HL
ADD HL,HL
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
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
LD C,L ;BC - BLOCK OF FAT
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]

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
; RET
;!!!!! ¢ë§ë¢ ¥âáï ¢ SCANDRV, ª®£¤  íâ  ¯à®æ¥¤ãà  ¢ SLOT3,   ­¥ ¢ SLOT0
GET_RAMDRV_NUM:
LD BC,RAMDTBL
.skip_tbl:

View File

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

View File

@ -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
*/
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;

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
;---------------------------------------------------------------
;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 .loop
;.CHAR: DZ " ",0
JP PCHARS
; PRINT CHAR
; A - CHAR
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #5B. ‚뢮¤ ᨬ¢®«  ­  íªà ­ ¢ ⥪. ¯®§¨æ¨¨.
;
; ¢å®¤: 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,9 +103,7 @@ PUTCHAR:
RST ToBIOS
XOR A
CP E
;!TEST
;JP Z,LOCATE
RET Z
RET Z
DEC E
JP LOCATE
.LF_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR
@ -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
JP 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
TAB_80x32 DB #28,#20,#00,#00,#1B,#00,#00,#00 ;1
;40x32
TAB_40x32 DB #28,#20,#00,#00,#3B,#00,#00,#00 ;2
;640x256 PAGE 0
TAB_640x256_0 DB #28,#20,#00,#00,#00,#00,#00,#00 ;3
;320x256 PAGE 0
TAB_320x256_0 DB #28,#20,#00,#00,#20,#00,#00,#00 ;4
;640x256 PAGE 1
TAB_640x256_1 DB #28,#20,#00,#00,#40,#00,#28,#00 ;5
;320x256 PAGE 1
TAB_320x256_1 DB #28,#20,#00,#00,#60,#00,#28,#00 ;6
; 80x32. ⥪á⮢®¥, §­ ª®¬¥áâ® 16x8, #0B - ­®¬¥à §­ ª®£¥­.
TAB_80x32 DB #28,#20,#00,#00,#1B,#00,#00,#00 ;1
; 40x32. ⥪á⮢®¥, §­ ª®¬¥áâ® 8x8, #0B - ­®¬¥à §­ ª®£¥­.
TAB_40x32 DB #28,#20,#00,#00,#3B,#00,#00,#00 ;2
; 640x256. £à ä¨ç¥áª®¥, 0-© íªà ­
TAB_640x256_0 DB #28,#20,#00,#00,#00,#00,#00,#00 ;3
; 320x256. £à ä¨ç¥áª®¥, 0-© íªà ­
TAB_320x256_0 DB #28,#20,#00,#00,#20,#00,#00,#00 ;4
; 640x256. £à ä¨ç¥áª®¥, 1-© íªà ­
TAB_640x256_1 DB #28,#20,#00,#00,#40,#00,#28,#00 ;5
; 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
EI
; [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
EI
; [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
@ -710,63 +752,33 @@ LPT2_D EQU #1E
LPT2_C EQU #1F
PRINT_INIT:
DI
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
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)
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
LD A,#0F ; Init printer port for Out
OUT (LPT1_C),A
; €‰Œ€<C592> <E2809A>…‡€
XOR A ;LD A,0
; ª« ¢ 
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)
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 ; ¥á«¨ ¤à㣨¥ - â® ¢ë室
;;;;;;;;
;[END]

View File

@ -1 +1 @@
371
396

View File

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

View File

@ -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 ; ¢ë¢®¤ á®®¡é¥­¨ï
; â¥áâ ­  áãé¥á⢮¢ ­¨¥ ¯ ¯ª¨ ­  楫¥¢®¬ ¤¨áª¥
ld hl,system_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp nc,save_disk_path ; Ok
;!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),'\'
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
;!TODO ¤®áâ ¢ âì system_path ®â¤¥«ì­® ¤«ï ª ¦¤®£® ¤¨áª  (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
IFDEF MANY_SYS_PATHES
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ENDIF
;
jp save_disk_path ; Ok
; § ¤ ­ ­¥ ¤¨áª

View File

@ -1 +1 @@
78
80

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