mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
..
This commit is contained in:
parent
c82b010f1e
commit
9d0d096208
26
DSS/API.asm
26
DSS/API.asm
@ -11,9 +11,9 @@
|
|||||||
;R009 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER
|
;R009 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER
|
||||||
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
||||||
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
||||||
;R008 - 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS
|
;R008 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS
|
||||||
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||||
;R10 - 03-04-2003 DNS IMPROVED FN. VERSION
|
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
||||||
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
||||||
;R007 06-02-2003 DNS FIX BUG IN MASK ROUTINE, IT ALLOW NAMES WHICH BEGAN FROM "." ".NAM"
|
;R007 06-02-2003 DNS FIX BUG IN MASK ROUTINE, IT ALLOW NAMES WHICH BEGAN FROM "." ".NAM"
|
||||||
;R006 29-01-2003 DNS FIX BUG WITH SET FILE DATE AND TIME
|
;R006 29-01-2003 DNS FIX BUG WITH SET FILE DATE AND TIME
|
||||||
@ -21,6 +21,8 @@
|
|||||||
;R004 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES
|
;R004 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES
|
||||||
;R003 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
|
;R003 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
|
||||||
;R002 19-11-2002 DNS FIX GET/SET ATTRIBUTES
|
;R002 19-11-2002 DNS FIX GET/SET ATTRIBUTES
|
||||||
|
;R101 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0)
|
||||||
|
;R102 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI"
|
||||||
;R001 16-12-1999 DNS Y2K fix
|
;R001 16-12-1999 DNS Y2K fix
|
||||||
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
||||||
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
||||||
@ -28,10 +30,23 @@
|
|||||||
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
||||||
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
||||||
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
||||||
|
|
||||||
;
|
;
|
||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
|
; VIDEO
|
||||||
|
include 'API/Clear.asm'
|
||||||
|
include 'API/PChars.asm'
|
||||||
|
include 'API/PutChar.asm'
|
||||||
|
include 'API/Locate.asm'
|
||||||
|
include 'API/Cursor.asm'
|
||||||
|
include 'API/RdChar.asm'
|
||||||
|
include 'API/WrChar.asm'
|
||||||
|
include 'API/WinCopy.asm'
|
||||||
|
include 'API/WinRest.asm'
|
||||||
|
include 'API/Scroll.asm'
|
||||||
|
include 'API/SelPage.asm'
|
||||||
|
include 'API/GetVMod.asm'
|
||||||
|
include 'API/SetVMod.asm'
|
||||||
|
;
|
||||||
include 'API/Version.asm'
|
include 'API/Version.asm'
|
||||||
include 'API/bootDsk.asm'
|
include 'API/bootDsk.asm'
|
||||||
include 'API/curDisk.asm'
|
include 'API/curDisk.asm'
|
||||||
@ -67,6 +82,7 @@
|
|||||||
include 'API/Lib_Sub.asm'
|
include 'API/Lib_Sub.asm'
|
||||||
include "API/EXECUTE.ASM"
|
include "API/EXECUTE.ASM"
|
||||||
include "API/Print.asm"
|
include "API/Print.asm"
|
||||||
|
include "API/Move_FP.asm"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -74,7 +74,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
.OPENATR: ;!TEST ;[x] 16/11/23 optimize get attribute
|
.OPENATR: ;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
;LD (OPEN.TMP),A ; à ¡. ï祩ª (§¤¥áì âਡãâ § ¯¨á¨)
|
;LD (OPEN.TMP),A ; à ¡. ï祩ª (§¤¥áì âਡãâ § ¯¨á¨)
|
||||||
;
|
;
|
||||||
CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
RET C
|
RET C
|
||||||
; [ ] 26/06/2024
|
; [ ] 26/06/2024
|
||||||
CALL CHECK_64kb_CLUSTER
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
|||||||
@ -34,7 +34,7 @@ CHDIR_FN:
|
|||||||
POP AF
|
POP AF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
CHDIR: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
CHDIR: CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
RET C
|
RET C
|
||||||
LD HL,TMPNAME
|
LD HL,TMPNAME
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
|
|||||||
14
DSS/API/Clear.asm
Normal file
14
DSS/API/Clear.asm
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #56. Žç¨áâ¨âì ®ª®.
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; E - á⮫¡¥æ «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; H - ¢ëá®â ®ª
|
||||||
|
; L - è¨à¨ ®ª
|
||||||
|
; A - ᨬ¢®« § ¯®«¨â¥«ì
|
||||||
|
; B - âਡãâ § ¯®«¨â¥«ì
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
CLEAR: LD C,BIOS.LP_CLS_WIN2
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
@ -106,7 +106,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
|
|||||||
AND FAT_ATTR.NoDIRnoVolID
|
AND FAT_ATTR.NoDIRnoVolID
|
||||||
LD (.TMP),A
|
LD (.TMP),A
|
||||||
LD (.PATH0),HL
|
LD (.PATH0),HL
|
||||||
CALL GETWORD
|
CALL SetPath_GetName
|
||||||
RET C
|
RET C
|
||||||
; [ ] 26/06/2024
|
; [ ] 26/06/2024
|
||||||
CALL CHECK_64kb_CLUSTER
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
|||||||
10
DSS/API/Cursor.asm
Normal file
10
DSS/API/Cursor.asm
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #53. “§ âì ¯®«®¦¥¨¥ ªãàá®à .
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: D - áâப ªãàá®à
|
||||||
|
; E - ª®«®ª ªãàá®à
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
CURSOR: LD C,BIOS.LP_GET_PLACE
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
@ -17,7 +17,7 @@ DEL_FN: ;!TEST
|
|||||||
POP HL
|
POP HL
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
.old_EXE: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
.old_EXE: CALL SetPath_GetName ; âĽáâ ¤ŽŻăáâ. ¨Źď ¨ áâŕ. ¤¨áŞ
|
||||||
RET C
|
RET C
|
||||||
; [ ] 26/06/2024
|
; [ ] 26/06/2024
|
||||||
CALL CHECK_64kb_CLUSTER
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
|||||||
@ -96,7 +96,7 @@ EXEC_1: ;LD (CMDLINE),HL
|
|||||||
LD HL,(CMDLINE)
|
LD HL,(CMDLINE)
|
||||||
LD A,FAT_ATTR.READ_ONLY
|
LD A,FAT_ATTR.READ_ONLY
|
||||||
LD (OPEN_FN.TMP),A
|
LD (OPEN_FN.TMP),A
|
||||||
CALL GETWORD
|
CALL SetPath_GetName
|
||||||
RET C
|
RET C
|
||||||
; LD HL,TMPNAME
|
; LD HL,TMPNAME
|
||||||
; LD DE,MASKARE
|
; LD DE,MASKARE
|
||||||
@ -407,7 +407,7 @@ FRC000: LD A,(DE)
|
|||||||
CALL MOVE_FP
|
CALL MOVE_FP
|
||||||
;
|
;
|
||||||
LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. “áâ ¢«¨¢ ¥âáï ª®£¤ ¢®âªãâë SHARED_PAGE
|
LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. “áâ ¢«¨¢ ¥âáï ª®£¤ ¢®âªãâë SHARED_PAGE
|
||||||
_ret+1: JP 0
|
_ret+1: JP 0 ;EXEC02.RET1 ¨«¨ _RET_2
|
||||||
|
|
||||||
_TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
|
_TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
|
||||||
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||||
|
|||||||
@ -30,7 +30,7 @@ F_FIRST_FN: CALL F_FIRST.INIT_VARS
|
|||||||
JR F_FIRST.begin
|
JR F_FIRST.begin
|
||||||
;
|
;
|
||||||
F_FIRST: CALL .INIT_VARS
|
F_FIRST: CALL .INIT_VARS
|
||||||
.begin: CALL GETWORD
|
.begin: CALL SetPath_GetName
|
||||||
;CALL LOADDIR
|
;CALL LOADDIR
|
||||||
RET C
|
RET C
|
||||||
CALL MASK
|
CALL MASK
|
||||||
|
|||||||
14
DSS/API/GetVMod.asm
Normal file
14
DSS/API/GetVMod.asm
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #51. <20>®«ãç¨âì ⥪ã騩 ०¨¬ íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: A - ⥪ã騩 ०¨¬ íªà
|
||||||
|
; B - áâà ¨æ íªà 0/1
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
GETVMOD:
|
||||||
|
IN A,(SCREEN_SWITCH)
|
||||||
|
LD B,A
|
||||||
|
LD A,(VMODE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
10
DSS/API/Locate.asm
Normal file
10
DSS/API/Locate.asm
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #52. “áâ ®¢¨âì ¯®«®¦¥¨¥ ªãàá®à .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப ªãàá®à
|
||||||
|
; E - ª®«®ª ªãàá®à
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
LOCATE: LD C,BIOS.LP_SET_PLACE
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
@ -32,7 +32,7 @@ MKDIR:
|
|||||||
POP AF
|
POP AF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.START: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
.START: CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
RET C
|
RET C
|
||||||
; [ ] 26/06/2024
|
; [ ] 26/06/2024
|
||||||
CALL CHECK_64kb_CLUSTER
|
CALL CHECK_64kb_CLUSTER
|
||||||
@ -40,7 +40,7 @@ MKDIR:
|
|||||||
;
|
;
|
||||||
CALL MASK
|
CALL MASK
|
||||||
RET C
|
RET C
|
||||||
;!TEST optimization à ¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
|
;!TEST optimization à ¥¥ SetPath_GetName 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
|
||||||
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||||||
;
|
;
|
||||||
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ¤¨áª
|
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ¤¨áª
|
||||||
|
|||||||
41
DSS/API/Move_FP.asm
Normal file
41
DSS/API/Move_FP.asm
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
; HL:IX - OFFSET POINTER
|
||||||
|
; A - FILE MANIPULATOR
|
||||||
|
MOVE_FP: CALL SET_FM
|
||||||
|
RET C
|
||||||
|
INC B
|
||||||
|
DJNZ .B_1
|
||||||
|
;from Start File
|
||||||
|
; B=0
|
||||||
|
.F_start: LD C,B
|
||||||
|
LD D,B
|
||||||
|
LD E,B
|
||||||
|
JP .DO
|
||||||
|
;
|
||||||
|
.B_1: DJNZ .B_2
|
||||||
|
;from Current Position
|
||||||
|
.F_current: LD C,(IY+_sFM.F_POSITION)
|
||||||
|
LD B,(IY+_sFM.F_POSITION+1)
|
||||||
|
LD E,(IY+_sFM.F_POSITION+2)
|
||||||
|
LD D,(IY+_sFM.F_POSITION+3)
|
||||||
|
.DO: ADD IX,BC
|
||||||
|
ADC HL,DE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
LD (IY+_sFM.F_POSITION),E
|
||||||
|
LD (IY+_sFM.F_POSITION+1),D
|
||||||
|
LD (IY+_sFM.F_POSITION+2),L
|
||||||
|
LD (IY+_sFM.F_POSITION+3),H
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.B_2: DJNZ .error
|
||||||
|
;from End File
|
||||||
|
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
|
||||||
|
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
|
||||||
|
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
|
||||||
|
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
|
||||||
|
JP .DO
|
||||||
|
; B > 2
|
||||||
|
.error: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
@ -29,7 +29,7 @@ OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
.old_EXE: ;JR .start
|
.old_EXE: ;JR .start
|
||||||
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
|
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
|
||||||
;R008 ;
|
;R008 ;
|
||||||
.start: CALL GETWORD
|
.start: CALL SetPath_GetName
|
||||||
RET C
|
RET C
|
||||||
CALL MASK
|
CALL MASK
|
||||||
RET C
|
RET C
|
||||||
|
|||||||
14
DSS/API/PChars.asm
Normal file
14
DSS/API/PChars.asm
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #5C. ‚뢮¤ áâப¨ íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ ⥫ì áâபã ᨬ¢®«®¢
|
||||||
|
; ¢ë室: HL - 㪠§ ⥫ì á«¥¤ãîéãî áâபã ᨬ¢®«®¢
|
||||||
|
; PRINT NULL-TERMINATED CHARS STRING
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
PCHARS: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CALL PUTCHAR
|
||||||
|
JP PCHARS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
98
DSS/API/PutChar.asm
Normal file
98
DSS/API/PutChar.asm
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #5B. ‚뢮¤ ᨬ¢®« íªà ¢ ⥪. ¯®§¨æ¨¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ᨬ¢®«
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
PUTCHAR: ;CALL .NO_SCROLL
|
||||||
|
CP #0E
|
||||||
|
JR C,.control_characters
|
||||||
|
;
|
||||||
|
LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||||
|
;[x] CR+LF+SCROLL
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
; ¯à®¢¥àª ¯¥à¥å®¤ ªãàá®à ¢ á ¬®¥ ç «® (X:Y == 0:0)
|
||||||
|
CALL CURSOR
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
.LFF: PUSH HL
|
||||||
|
LD BC,1*256 + BIOS.LP_SCROLL_UD
|
||||||
|
LD DE,#0020
|
||||||
|
RST ToBIOS
|
||||||
|
LD DE,#1F00
|
||||||
|
CALL LOCATE
|
||||||
|
LD A,' '
|
||||||
|
LD BC,#50*256 + BIOS.LP_PRINT_SYM
|
||||||
|
RST ToBIOS
|
||||||
|
LD DE,#1F00
|
||||||
|
CALL LOCATE
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
.TB_: CALL CURSOR
|
||||||
|
IF TABisSPACES
|
||||||
|
LD B,E
|
||||||
|
LD A,E
|
||||||
|
AND #F8
|
||||||
|
ADD A,8
|
||||||
|
SUB B
|
||||||
|
LD B,A
|
||||||
|
LD A,' '
|
||||||
|
LD C,BIOS.LP_PRINT_SYM
|
||||||
|
JP ToBIOS
|
||||||
|
ELSE
|
||||||
|
LD A,E
|
||||||
|
ADD A,8
|
||||||
|
AND #78 ;????? £«ïãâì, çâ® ¡ã¤¥â ¥á«¨ ª®®à¤¨ âë ªãàá®à ¢ ª®æ¥ áâப¨ ¯®çâ¨
|
||||||
|
LD E,A
|
||||||
|
JP LOCATE
|
||||||
|
ENDIF
|
||||||
|
.BK_: CALL CURSOR
|
||||||
|
XOR A
|
||||||
|
CP E
|
||||||
|
RET Z
|
||||||
|
DEC E
|
||||||
|
JP LOCATE
|
||||||
|
;
|
||||||
|
.LF_: CALL CURSOR
|
||||||
|
LD A,D
|
||||||
|
CP #1F
|
||||||
|
JR NC,.LFF
|
||||||
|
INC D
|
||||||
|
IFN EnoughtOnly_LF
|
||||||
|
JP LOCATE
|
||||||
|
ELSE
|
||||||
|
CALL LOCATE
|
||||||
|
; !!!! <20>… à §àë¢ âì LF_ ¨ CR_ !!!!
|
||||||
|
ENDIF
|
||||||
|
.CR_: CALL CURSOR
|
||||||
|
LD E,0
|
||||||
|
JP LOCATE
|
||||||
|
;
|
||||||
|
.control_characters:
|
||||||
|
CP "\r"
|
||||||
|
JR Z,.CR_
|
||||||
|
CP "\n"
|
||||||
|
JR Z,.LF_
|
||||||
|
CP "\t" ; tab
|
||||||
|
JR Z,.TB_
|
||||||
|
CP "\b" ; backspace
|
||||||
|
JR Z,.BK_
|
||||||
|
CP "\a" ; [x] Beep in PChars/PUTCHAR
|
||||||
|
RET NZ
|
||||||
|
; [x] Beep in PChars/PUTCHAR
|
||||||
|
.BELL: LD DE,1200
|
||||||
|
PUSH HL
|
||||||
|
LD HL,4
|
||||||
|
CALL BEEP
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
; [x] -bug with Vasil's version of cursor
|
||||||
|
.NO_SCROLL: CP #0E
|
||||||
|
JR C,.control_characters
|
||||||
|
._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
15
DSS/API/RdChar.asm
Normal file
15
DSS/API/RdChar.asm
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #57. <20>à®ç¨â âì ᨬ¢®« á íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப
|
||||||
|
; E - ª®«®ª
|
||||||
|
; ¢ë室: A - ᨬ¢®«
|
||||||
|
; B - âਡãâ
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
RDCHAR: XOR A
|
||||||
|
LD C,BIOS.WIN_GET_SYM
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,L
|
||||||
|
LD B,H
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
@ -25,7 +25,7 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
.old_EXE: ;
|
.old_EXE: ;
|
||||||
; !TODO ЂЎтЊуть тут GETWORD, чтЎЁ ЌЎІЎ ЁыЋЎ уЄ Ћять ЏЎ ЎтЎсЈтЅЋьыЌ ЏутяЌ?
|
; !TODO ЂЎтЊуть тут SetPath_GetName, чтЎЁ ЌЎІЎ ЁыЋЎ уЄ Ћять ЏЎ ЎтЎсЈтЅЋьыЌ ЏутяЌ?
|
||||||
;
|
;
|
||||||
; [ ] 26/06/2024
|
; [ ] 26/06/2024
|
||||||
PUSH HL
|
PUSH HL
|
||||||
|
|||||||
@ -28,7 +28,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
POP AF
|
POP AF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.START: CALL GETWORD
|
.START: CALL SetPath_GetName
|
||||||
RET C
|
RET C
|
||||||
; [ ] 26/06/2024
|
; [ ] 26/06/2024
|
||||||
CALL CHECK_64kb_CLUSTER
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
|||||||
105
DSS/API/Scroll.asm
Normal file
105
DSS/API/Scroll.asm
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #55. ‘ªà®««¨£ íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; H - ¢ëá®â ®ª
|
||||||
|
; L - è¨à¨ ®ª
|
||||||
|
; B = 1 - ¯à®ªàã⪠¢¢¥àå
|
||||||
|
; B = 2 - ¯à®ªàã⪠¢¨§
|
||||||
|
; A = 0 - ®ç¨é âì áâபã
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
SCROLL: DJNZ .SCR_DW ;!TODO § ¬¥¨âì BIOS.LP_SCROLL_UD ¨ ¯®á¬®âà¥âì, çâ® èãáâ॥
|
||||||
|
;[x] 04/04/23
|
||||||
|
;LD B,A
|
||||||
|
;LD C,H
|
||||||
|
;PUSH BC
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
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,.skip_EI
|
||||||
|
EI
|
||||||
|
.skip_EI:
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
;[x] 04/04/23
|
||||||
|
;POP BC
|
||||||
|
POP AF
|
||||||
|
;XOR A
|
||||||
|
;CP B
|
||||||
|
AND A
|
||||||
|
;
|
||||||
|
RET NZ
|
||||||
|
LD A,D
|
||||||
|
ADD A,H
|
||||||
|
DEC A ;R101
|
||||||
|
LD D,A
|
||||||
|
.print: PUSH DE ;R101
|
||||||
|
CALL LOCATE
|
||||||
|
LD A,' '
|
||||||
|
LD B,L
|
||||||
|
LD C,BIOS.LP_PRINT_SYM
|
||||||
|
RST ToBIOS
|
||||||
|
POP DE ;R101
|
||||||
|
JP LOCATE ;R101
|
||||||
|
;AND A
|
||||||
|
;RET
|
||||||
|
.SCR_DW:
|
||||||
|
DJNZ .SCR_ERR
|
||||||
|
;[x] 04/04/23
|
||||||
|
;LD B,A
|
||||||
|
;LD C,H
|
||||||
|
;PUSH BC
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
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,.skip2_EI:
|
||||||
|
EI
|
||||||
|
.skip2_EI:
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
;[x] 29/9/23
|
||||||
|
;POP BC
|
||||||
|
POP AF
|
||||||
|
;XOR A
|
||||||
|
;CP B
|
||||||
|
AND A
|
||||||
|
;
|
||||||
|
RET NZ
|
||||||
|
JP SCROLL.print
|
||||||
|
.SCR_ERR:
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
20
DSS/API/SelPage.asm
Normal file
20
DSS/API/SelPage.asm
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #54. ‚ë¡à âì ªâ¨¢ãî áâà ¨æã íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: B - áâà ¨æ íªà 0/1
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
SELPAGE:
|
||||||
|
LD A,(VMODE)
|
||||||
|
;BIT 7,A
|
||||||
|
CP %1000'0000
|
||||||
|
JR NC,.SEL2
|
||||||
|
PUSH BC
|
||||||
|
LD C,A
|
||||||
|
CALL SETVMOD.TEXT_M
|
||||||
|
POP BC
|
||||||
|
.SEL2: LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (SCREEN_SWITCH),A
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
246
DSS/API/SetVMod.asm
Normal file
246
DSS/API/SetVMod.asm
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #50. ‚ë¡®à ०¨¬ íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ०¨¬ íªà
|
||||||
|
; #02 - ⥪áâ®¢ë© 40x32x16 梥⮢
|
||||||
|
; #03 - ⥪áâ®¢ë© 80x32x16 梥⮢
|
||||||
|
; #81 - £à ä¨ç¥áª¨© 320x256x256 梥⮢
|
||||||
|
; #82 - £à ä¨ç¥áª¨© 640x256x16 梥⮢
|
||||||
|
; B - áâà ¨æ íªà 0/1
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
SETVMOD: CP %1000'0000
|
||||||
|
LD C,A
|
||||||
|
JR NC,.GRAPH
|
||||||
|
.TEXT_M: LD IX,BACKTXT
|
||||||
|
PUSH IX
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD (BACKTXT.VMODE),A
|
||||||
|
EX AF,AF'
|
||||||
|
OR A
|
||||||
|
JR Z,.NOMODE
|
||||||
|
DEC A
|
||||||
|
JR Z,.NOMODE
|
||||||
|
DEC A
|
||||||
|
LD HL,TAB_40x32
|
||||||
|
JR Z,.SET_TXT_MODE
|
||||||
|
DEC A
|
||||||
|
LD HL,TAB_80x32
|
||||||
|
JR Z,.SET_TXT_MODE
|
||||||
|
.NOMODE: POP IX
|
||||||
|
LD A,DSS_Error.sys.INVALID_VIDEO_MODE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; “áâ ®¢ª £à ä. ०¨¬®¢
|
||||||
|
.GRAPH: CALL SAVETXT
|
||||||
|
AND #7F
|
||||||
|
JR Z,.G320_16 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
||||||
|
DEC A
|
||||||
|
JR Z,.G320_56
|
||||||
|
DEC A
|
||||||
|
JR Z,.G640_16
|
||||||
|
;DEC A
|
||||||
|
;JP Z,.G640_56 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
||||||
|
.G320_16: LD A,DSS_Error.sys.INVALID_VIDEO_MODE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.SET_TXT_MODE: PUSH BC
|
||||||
|
LD A,B
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
OR B
|
||||||
|
AND #11
|
||||||
|
XOR #10
|
||||||
|
LD E,A
|
||||||
|
.SETMODE_END: CALL SETMODE
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD (VMODE),A
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (SCREEN_SWITCH),A
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD C,Dss.Mouse.SetVideoMode
|
||||||
|
RST ToDSS.Mouse
|
||||||
|
SAFE_PORTY
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.G320_56: PUSH BC
|
||||||
|
LD HL,TAB_320x256_0
|
||||||
|
LD E,#11
|
||||||
|
CALL SETMODE
|
||||||
|
LD HL,TAB_320x256_1
|
||||||
|
LD E,#00
|
||||||
|
JP .SETMODE_END
|
||||||
|
;
|
||||||
|
.G640_16: PUSH BC
|
||||||
|
LD HL,TAB_640x256_0
|
||||||
|
LD E,#11
|
||||||
|
CALL SETMODE
|
||||||
|
LD HL,TAB_640x256_1
|
||||||
|
LD E,#00
|
||||||
|
JP .SETMODE_END
|
||||||
|
;
|
||||||
|
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 ¯à¥¤¯®« £ ¥â, çâ® ® 㪠§ë¢ ¥â
|
||||||
|
IN A,(SLOT3) ; ¤à¥á ¨¦¥ #C000 ¨ ¢áâ ¢«ï¥â ¢ âà¥âìî ¡ ªã áâà ¨æã #FE
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LDIR
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
.skip_EI: POP DE
|
||||||
|
LD IX,SYS_PAGE.SHARED_BUFFER_32b ; £àï§ë© å ª.
|
||||||
|
LD C,BIOS.WIN_OPEN
|
||||||
|
RST ToBIOS
|
||||||
|
SAFE_PORTY
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;IX+0 ;HORIZONTAL
|
||||||
|
;IX+1 ;VERTICAL
|
||||||
|
;IX+2 ;X - COORD
|
||||||
|
;IX+3 ;Y - COORD
|
||||||
|
;IX+4 ;MODE
|
||||||
|
;IX+5 ;EXT MODE
|
||||||
|
;IX+6 ;VIDEO RAM X OFFSET (SIGNPLACES)
|
||||||
|
;IX+7 ;VIDEO RAM Y OFFSET (SIGNPLACES)
|
||||||
|
|
||||||
|
;
|
||||||
|
;.......................................................................
|
||||||
|
;+0 X à §¬¥à ®ª ¢ § ª®¬¥áâ å
|
||||||
|
;+1 Y à §¬¥à ®ª ¢ § ª®¬¥áâ å
|
||||||
|
;+2 X ¯®«®¦. ®ª íªà ¥
|
||||||
|
;+3 Y ¯®«®¦. ®ª íªà ¥
|
||||||
|
;+4 ०¨¬ § ª®¬¥áâ
|
||||||
|
;+5 ¤®¯. ०¨¬ § ª®¬¥áâ (bit0=1 ᯥª. ¤à¥á æ¨ï íªà )
|
||||||
|
;+6 X ¯®«®¦. ¢ ¯®«¥ £à 䨪¨ (¢ § ª®¬¥áâ å)
|
||||||
|
;+7 Y ¯®«®¦. ¢ ¯®«¥ £à 䨪¨ (¢ § ª®¬¥áâ å)
|
||||||
|
ScreenDescriptorTable EQU $
|
||||||
|
; 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
|
||||||
|
CP %1000'0000
|
||||||
|
JR NC,.NOSAVET
|
||||||
|
SUB #02
|
||||||
|
JR C,.NOSAVET
|
||||||
|
;
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
;
|
||||||
|
PUSH AF
|
||||||
|
LD C,BIOS.LP_GET_PLACE
|
||||||
|
RST ToBIOS
|
||||||
|
LD (BACKTXT.CURS),DE
|
||||||
|
POP AF
|
||||||
|
LD IX,#C000
|
||||||
|
LD HL,#2050
|
||||||
|
OR A
|
||||||
|
JR NZ,.SVTEXT1
|
||||||
|
LD L,#28
|
||||||
|
.SVTEXT1: LD (BACKTXT.WinMax),HL
|
||||||
|
LD DE,#0000
|
||||||
|
LD A,(BANKTBL+TXTPAGE)
|
||||||
|
LD B,A
|
||||||
|
|
||||||
|
LD C,BIOS.WIN_COPY
|
||||||
|
;[x] 29/9/23
|
||||||
|
LD A,R
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
DI
|
||||||
|
RST ToBIOS
|
||||||
|
;[x] 29/9/23
|
||||||
|
POP AF
|
||||||
|
JP PO,.skip_EI
|
||||||
|
EI
|
||||||
|
.skip_EI: ;
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
.NOSAVET: POP AF
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
BACKTXT: PUSH AF
|
||||||
|
.VMODE+1: LD A,#00
|
||||||
|
;BIT 7,A
|
||||||
|
CP %1000'0000
|
||||||
|
JR C,.NOBACKT
|
||||||
|
;
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
LD IX,#C000
|
||||||
|
.WinMax+1: LD HL,#2050
|
||||||
|
LD DE,#0000
|
||||||
|
LD A,(BANKTBL+TXTPAGE)
|
||||||
|
LD B,A
|
||||||
|
LD C,BIOS.WIN_RESTORE
|
||||||
|
;[x] 29/9/23
|
||||||
|
LD A,R
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
DI
|
||||||
|
RST ToBIOS
|
||||||
|
;[x] 29/9/23
|
||||||
|
POP AF
|
||||||
|
JP PO,.no_ei
|
||||||
|
EI
|
||||||
|
.no_ei: ;
|
||||||
|
.CURS+1: LD DE,#0000
|
||||||
|
CALL LOCATE
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
.NOBACKT: POP AF
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
@ -14,6 +14,7 @@ SYSTIME:
|
|||||||
LD C,BIOS.CMOS_TEST
|
LD C,BIOS.CMOS_TEST
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
JP C,.NOCMOS
|
JP C,.NOCMOS
|
||||||
|
;
|
||||||
LD D,CMOS.Register.date
|
LD D,CMOS.Register.date
|
||||||
CALL RCMOS
|
CALL RCMOS
|
||||||
PUSH AF
|
PUSH AF
|
||||||
|
|||||||
23
DSS/API/WinCopy.asm
Normal file
23
DSS/API/WinCopy.asm
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #59. ‘®åà ¨âì ®ª® íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப
|
||||||
|
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; H - ¢ëá®â ®ª
|
||||||
|
; L - è¨à¨ ®ª
|
||||||
|
; B - áâà ¨æ ¡ãä¥à , ¥á«¨ IX >= #C000
|
||||||
|
; IX - ¤à¥á ¡ãä¥à
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
WINCOPY: AND A
|
||||||
|
LD A,R ;R102
|
||||||
|
PUSH AF ;R102
|
||||||
|
XOR A
|
||||||
|
LD C,BIOS.WIN_COPY
|
||||||
|
DI ;R102
|
||||||
|
RST ToBIOS
|
||||||
|
POP AF ;R102
|
||||||
|
RET PO ;R102
|
||||||
|
EI ;R102
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
23
DSS/API/WinRest.asm
Normal file
23
DSS/API/WinRest.asm
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #5A. ‚®ááâ ®¢¨âì ®ª® íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப
|
||||||
|
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; H - ¢ëá®â ®ª
|
||||||
|
; L - è¨à¨ ®ª
|
||||||
|
; B - áâà ¨æ ¡ãä¥à , ¥á«¨ IX >= #C000
|
||||||
|
; IX - ¤à¥á ¡ãä¥à
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
WINREST: AND A
|
||||||
|
LD A,R ;R102
|
||||||
|
PUSH AF ;R102
|
||||||
|
XOR A
|
||||||
|
DI ;R102
|
||||||
|
LD C,BIOS.WIN_RESTORE
|
||||||
|
RST ToBIOS
|
||||||
|
POP AF ;R102
|
||||||
|
RET PO ;R102
|
||||||
|
EI ;R102
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
23
DSS/API/WrChar.asm
Normal file
23
DSS/API/WrChar.asm
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #58. ‚뢥á⨠ᨬ¢®« íªà .
|
||||||
|
; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëçë¥ á¨¬¢®«ë.
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப
|
||||||
|
; E - ª®«®ª
|
||||||
|
; A - ᨬ¢®«
|
||||||
|
; B - âਡãâ
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;!FIXIT slow ª ª ¡¥§ WIN_GET_SYM âãâ ®¡®©â¨áì?
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
WRCHAR: LD C,A
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
XOR A
|
||||||
|
LD C,BIOS.WIN_GET_SYM
|
||||||
|
RST ToBIOS
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
XOR A
|
||||||
|
LD C,BIOS.WIN_PUT_SYM
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
207
DSS/DOS_FM.ASM
207
DSS/DOS_FM.ASM
@ -1,207 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: DOS_FM
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
;FMS DB FMCOUNT
|
|
||||||
|
|
||||||
;ACCESS MODE:
|
|
||||||
; 00 - READ/WRITE
|
|
||||||
; 01 - READ
|
|
||||||
; 02 - WRITE
|
|
||||||
;FM_BUF:
|
|
||||||
;File Manipulator (FM)
|
|
||||||
; BYTE '. ' ;+00 NAME
|
|
||||||
; BYTE ' ' ;+08 EXT
|
|
||||||
; BYTE #10 ;+11 ATTRIBUT
|
|
||||||
; BYTE 0 ;+12 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï ç⥨ï
|
|
||||||
; BYTE 0 ;+13 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
|
||||||
; BLOCK 8,0 ;+14 RESERVED
|
|
||||||
; WORD #0000 ;+22 TIME
|
|
||||||
; WORD #0000 ;+24 DATE
|
|
||||||
; WORD #0000 ;+26 START CLUSTER
|
|
||||||
; DWORD #0000 ;+28 SIZE FILE
|
|
||||||
; DWORD #0000 ;+32 FILE POSITION (FP)
|
|
||||||
; WORD #0000 ;+36 DIRECTORY CLUSTER
|
|
||||||
; WORD #0000 ;+38 HANDLE NUMBER
|
|
||||||
; BYTE #00 ;+40 DRIVE OR CURRENT
|
|
||||||
; BYTE #00 ;+41 ACCESS MODE
|
|
||||||
; BYTE #00 ;+42 TASK
|
|
||||||
; BYTE #00 ;+43 EMPTY
|
|
||||||
/*
|
|
||||||
;!TEST
|
|
||||||
FM_BUF: _sFM
|
|
||||||
.Size EQU _sFM
|
|
||||||
BLOCK (FMCOUNT-1)*FM_BUF.Size, 0
|
|
||||||
*/
|
|
||||||
|
|
||||||
; ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
|
||||||
; MACRO _mFM_FIND
|
|
||||||
; CP FMCOUNT+1
|
|
||||||
; CCF
|
|
||||||
; RET C
|
|
||||||
; PUSH DE
|
|
||||||
|
|
||||||
; LD IY,CORE_BUFFERS.FM_BUF
|
|
||||||
; LD DE,CORE_BUFFERS.FM_BUF.Size
|
|
||||||
; AND A
|
|
||||||
; JR Z,.endLoop
|
|
||||||
; .loop: ADD IY,DE
|
|
||||||
; DEC A
|
|
||||||
; JR NZ,.loop
|
|
||||||
; .endLoop:
|
|
||||||
; POP DE
|
|
||||||
; ; A=0
|
|
||||||
; OR (IY) ;+00 NAME
|
|
||||||
; RET
|
|
||||||
; ENDM
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
; ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
|
||||||
FM_FIND: CP FMCOUNT+1
|
|
||||||
JR NC,.error
|
|
||||||
;
|
|
||||||
PUSH DE
|
|
||||||
LD IY,CORE_BUFFERS.FM_BUF
|
|
||||||
LD DE,CORE_BUFFERS.FM_BUF.Size
|
|
||||||
AND A
|
|
||||||
JR Z,.endLoop
|
|
||||||
.loop: ADD IY,DE
|
|
||||||
DEC A
|
|
||||||
JR NZ,.loop
|
|
||||||
.endLoop: POP DE
|
|
||||||
; A=0
|
|
||||||
OR (IY) ;+00 NAME
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.error: XOR A
|
|
||||||
LD A,DSS_Error.sys.INVALID_HANDLE
|
|
||||||
RET
|
|
||||||
|
|
||||||
SET_FM: CALL FM_FIND
|
|
||||||
; error
|
|
||||||
;LD A,DSS_Error.sys.INVALID_HANDLE
|
|
||||||
; CF = 1
|
|
||||||
SCF
|
|
||||||
RET Z
|
|
||||||
; no error
|
|
||||||
XOR A ;LD A,DSS_Error.sys.NO_ERROR
|
|
||||||
; CF = 0
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
RES_FM: CALL FM_FIND
|
|
||||||
; error
|
|
||||||
; LD A,DSS_Error.sys.INVALID_HANDLE
|
|
||||||
SCF
|
|
||||||
RET Z
|
|
||||||
; no error
|
|
||||||
XOR A
|
|
||||||
LD (IY + _sFM.FS_REC.NAME),A
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
GET_FM: LD B,FMCOUNT
|
|
||||||
LD C,#FF
|
|
||||||
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size
|
|
||||||
LD DE,CORE_BUFFERS.FM_BUF.Size
|
|
||||||
.loop: ADD IY,DE
|
|
||||||
INC C
|
|
||||||
LD A,(IY + _sFM.FS_REC.NAME)
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
DJNZ .loop
|
|
||||||
LD A,DSS_Error.sys.NO_HANDLES
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
/*
|
|
||||||
;!TODO CHECK LOCKING 10/11/2023
|
|
||||||
GET_FM: LD IY,0
|
|
||||||
LD (.freeHandle),IY
|
|
||||||
;
|
|
||||||
LD B,FMCOUNT
|
|
||||||
LD C,#FF
|
|
||||||
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size
|
|
||||||
LD DE,CORE_BUFFERS.FM_BUF.Size
|
|
||||||
.loop: ADD IY,DE
|
|
||||||
INC C
|
|
||||||
; CHECK LOCKING
|
|
||||||
|
|
||||||
;
|
|
||||||
.cont: LD A,(IY+0)
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
DJNZ .loop
|
|
||||||
LD A,DSS_Error.sys.NO_HANDLES
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
; HL:IX - OFFSET POINTER
|
|
||||||
; A - FILE MANIPULATOR
|
|
||||||
MOVE_FP: CALL SET_FM
|
|
||||||
RET C
|
|
||||||
INC B
|
|
||||||
DJNZ .B_1
|
|
||||||
;from Start File
|
|
||||||
; B=0
|
|
||||||
.F_start: LD C,B
|
|
||||||
LD D,B
|
|
||||||
LD E,B
|
|
||||||
JP .DO
|
|
||||||
;
|
|
||||||
.B_1: DJNZ .B_2
|
|
||||||
;from Current Position
|
|
||||||
.F_current: LD C,(IY+_sFM.F_POSITION)
|
|
||||||
LD B,(IY+_sFM.F_POSITION+1)
|
|
||||||
LD E,(IY+_sFM.F_POSITION+2)
|
|
||||||
LD D,(IY+_sFM.F_POSITION+3)
|
|
||||||
.DO: ADD IX,BC
|
|
||||||
ADC HL,DE
|
|
||||||
LD D,XH
|
|
||||||
LD E,XL
|
|
||||||
LD (IY+_sFM.F_POSITION),E
|
|
||||||
LD (IY+_sFM.F_POSITION+1),D
|
|
||||||
LD (IY+_sFM.F_POSITION+2),L
|
|
||||||
LD (IY+_sFM.F_POSITION+3),H
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.B_2: DJNZ .error
|
|
||||||
;from End File
|
|
||||||
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
|
|
||||||
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
|
|
||||||
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
|
|
||||||
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
|
|
||||||
JP .DO
|
|
||||||
; B > 2
|
|
||||||
.error: LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;;;;;;;;;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;FP COMPARE
|
|
||||||
; CY - FILE POINTER > SIZE
|
|
||||||
; NC - FILE POINTER < SIZE
|
|
||||||
MOVE_CP:
|
|
||||||
LD L,(IY + _sFM.FS_REC.F_SIZE)
|
|
||||||
LD H,(IY + _sFM.FS_REC.F_SIZE+1)
|
|
||||||
LD E,(IY + _sFM.F_POSITION)
|
|
||||||
LD D,(IY + _sFM.F_POSITION+1)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
LD L,(IY + _sFM.FS_REC.F_SIZE+2)
|
|
||||||
LD H,(IY + _sFM.FS_REC.F_SIZE+3)
|
|
||||||
LD E,(IY + _sFM.F_POSITION+2)
|
|
||||||
LD D,(IY + _sFM.F_POSITION+3)
|
|
||||||
SBC HL,DE
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
156
DSS/DOS_Proc.asm
156
DSS/DOS_Proc.asm
@ -7,8 +7,8 @@
|
|||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
||||||
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
||||||
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||||
;R10 - 03-04-2003 DNS IMPROVED FN. VERSION
|
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
||||||
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
||||||
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
||||||
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
||||||
@ -86,10 +86,12 @@ GetName: LD BC,#08FF ;!HARDCODE
|
|||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
; old GETWORD
|
||||||
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
||||||
; ¢å®¤: hl=áâப ¨¬¥¨
|
; ¢å®¤: hl=áâப ¨¬¥¨
|
||||||
; ¢ë室: (TMPNAME)
|
; ¢ë室: (TMPNAME)
|
||||||
GETWORD: ; !TEST
|
SetPath_GetName:
|
||||||
|
; !TEST
|
||||||
INC HL
|
INC HL
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
DEC HL
|
DEC HL
|
||||||
@ -297,16 +299,17 @@ MASK: LD HL,TMPNAME
|
|||||||
CP ' '+1
|
CP ' '+1
|
||||||
CCF
|
CCF
|
||||||
RET NC
|
RET NC
|
||||||
CP '"'
|
;
|
||||||
JR Z,.MASK_ERR
|
|
||||||
CP '*'
|
CP '*'
|
||||||
JR Z,.MASK3
|
JR Z,.MASK3
|
||||||
|
CP '.'
|
||||||
|
JR Z,.MASK5
|
||||||
|
CP '"'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
CP '+'
|
CP '+'
|
||||||
JR Z,.MASK_ERR
|
JR Z,.MASK_ERR
|
||||||
CP ','
|
CP ','
|
||||||
JR Z,.MASK_ERR
|
JR Z,.MASK_ERR
|
||||||
CP '.'
|
|
||||||
JR Z,.MASK5
|
|
||||||
CP '/'
|
CP '/'
|
||||||
JR Z,.MASK_ERR
|
JR Z,.MASK_ERR
|
||||||
CP ':'
|
CP ':'
|
||||||
@ -327,11 +330,6 @@ MASK: LD HL,TMPNAME
|
|||||||
JR Z,.MASK_ERR
|
JR Z,.MASK_ERR
|
||||||
CP '|'
|
CP '|'
|
||||||
JR Z,.MASK_ERR
|
JR Z,.MASK_ERR
|
||||||
; CP 'a' ;?????
|
|
||||||
; JR C,.MASK2
|
|
||||||
; CP 'z' + 1
|
|
||||||
; JR NC,.MASK2
|
|
||||||
; SUB #20
|
|
||||||
CALL UPPER ; a..z -> A..Z
|
CALL UPPER ; a..z -> A..Z
|
||||||
.MASK2: LD (DE),A
|
.MASK2: LD (DE),A
|
||||||
INC HL
|
INC HL
|
||||||
@ -341,35 +339,33 @@ MASK: LD HL,TMPNAME
|
|||||||
LD A,DSS_Error.sys.INVALID_NAME
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
.MASK3: LD A,'?'
|
.MASK3: LD A,'?'
|
||||||
INC HL
|
INC HL
|
||||||
DJNZ .MASK6
|
DJNZ .MASK6
|
||||||
LD A,DSS_Error.sys.INVALID_NAME
|
JR .MASK_ERR
|
||||||
SCF
|
;
|
||||||
RET
|
|
||||||
.MASK6: LD (DE),A
|
.MASK6: LD (DE),A
|
||||||
INC DE
|
INC DE
|
||||||
DJNZ .MASK6
|
DJNZ .MASK6
|
||||||
LD B,1
|
LD B,1
|
||||||
JR .MASK1
|
JR .MASK1
|
||||||
|
;
|
||||||
.MASK5: LD A,' '
|
.MASK5: LD A,' '
|
||||||
INC HL
|
INC HL
|
||||||
DJNZ .MASK4
|
DJNZ .MASK4
|
||||||
LD B,4
|
LD B,4
|
||||||
DEC C
|
DEC C
|
||||||
JP NZ,.MASK1
|
JR NZ,.MASK1
|
||||||
LD A,DSS_Error.sys.INVALID_NAME
|
JR .MASK_ERR
|
||||||
SCF
|
;
|
||||||
RET
|
|
||||||
.MASK4: LD (DE),A
|
.MASK4: LD (DE),A
|
||||||
INC DE
|
INC DE
|
||||||
DJNZ .MASK4
|
DJNZ .MASK4
|
||||||
LD B,4
|
LD B,4
|
||||||
DEC C
|
DEC C
|
||||||
JP NZ,.MASK1
|
JR NZ,.MASK1
|
||||||
LD A,DSS_Error.sys.INVALID_NAME
|
JR .MASK_ERR
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
@ -445,7 +441,7 @@ DIR_PATH_CHECK: LD A,(HL)
|
|||||||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
RET C
|
RET C
|
||||||
LD HL,CORE_BUFFERS.CurrentPath
|
LD HL,CORE_BUFFERS.CurrentPath
|
||||||
JP GETWORD
|
JP SetPath_GetName
|
||||||
;
|
;
|
||||||
.end: CP (HL)
|
.end: CP (HL)
|
||||||
RET Z
|
RET Z
|
||||||
@ -469,3 +465,115 @@ CHECK_NAME:
|
|||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;FMS DB FMCOUNT
|
||||||
|
|
||||||
|
;ACCESS MODE:
|
||||||
|
; 00 - READ/WRITE
|
||||||
|
; 01 - READ
|
||||||
|
; 02 - WRITE
|
||||||
|
;FM_BUF:
|
||||||
|
;File Manipulator (FM)
|
||||||
|
; BYTE '. ' ;+00 NAME
|
||||||
|
; BYTE ' ' ;+08 EXT
|
||||||
|
; BYTE #10 ;+11 ATTRIBUT
|
||||||
|
; BYTE 0 ;+12 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï ç⥨ï
|
||||||
|
; BYTE 0 ;+13 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
||||||
|
; BLOCK 8,0 ;+14 RESERVED
|
||||||
|
; WORD #0000 ;+22 TIME
|
||||||
|
; WORD #0000 ;+24 DATE
|
||||||
|
; WORD #0000 ;+26 START CLUSTER
|
||||||
|
; DWORD #0000 ;+28 SIZE FILE
|
||||||
|
; DWORD #0000 ;+32 FILE POSITION (FP)
|
||||||
|
; WORD #0000 ;+36 DIRECTORY CLUSTER
|
||||||
|
; WORD #0000 ;+38 HANDLE NUMBER
|
||||||
|
; BYTE #00 ;+40 DRIVE OR CURRENT
|
||||||
|
; BYTE #00 ;+41 ACCESS MODE
|
||||||
|
; BYTE #00 ;+42 TASK
|
||||||
|
; BYTE #00 ;+43 EMPTY
|
||||||
|
/*
|
||||||
|
;!TEST
|
||||||
|
FM_BUF: _sFM
|
||||||
|
.Size EQU _sFM
|
||||||
|
BLOCK (FMCOUNT-1)*FM_BUF.Size, 0
|
||||||
|
*/
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
; ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
||||||
|
FM_FIND: CP FMCOUNT+1
|
||||||
|
JR NC,.error
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
LD IY,CORE_BUFFERS.FM_BUF
|
||||||
|
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||||||
|
AND A
|
||||||
|
JR Z,.endLoop
|
||||||
|
.loop: ADD IY,DE
|
||||||
|
DEC A
|
||||||
|
JR NZ,.loop
|
||||||
|
.endLoop: POP DE
|
||||||
|
; A=0
|
||||||
|
OR (IY) ;+00 NAME
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.error: XOR A
|
||||||
|
LD A,DSS_Error.sys.INVALID_HANDLE
|
||||||
|
RET
|
||||||
|
|
||||||
|
SET_FM: CALL FM_FIND
|
||||||
|
; error
|
||||||
|
;LD A,DSS_Error.sys.INVALID_HANDLE
|
||||||
|
; CF = 1
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
; no error
|
||||||
|
XOR A ;LD A,DSS_Error.sys.NO_ERROR
|
||||||
|
; CF = 0
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
RES_FM: CALL FM_FIND
|
||||||
|
; error
|
||||||
|
; LD A,DSS_Error.sys.INVALID_HANDLE
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
; no error
|
||||||
|
XOR A
|
||||||
|
LD (IY + _sFM.FS_REC.NAME),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;!TODO CHECK LOCKING
|
||||||
|
GET_FM: LD B,FMCOUNT
|
||||||
|
LD C,#FF
|
||||||
|
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size
|
||||||
|
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||||||
|
.loop: ADD IY,DE
|
||||||
|
INC C
|
||||||
|
LD A,(IY + _sFM.FS_REC.NAME)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
DJNZ .loop
|
||||||
|
LD A,DSS_Error.sys.NO_HANDLES
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
;FP COMPARE
|
||||||
|
; CY - FILE POINTER > SIZE
|
||||||
|
; NC - FILE POINTER < SIZE
|
||||||
|
MOVE_CP:
|
||||||
|
LD L,(IY + _sFM.FS_REC.F_SIZE)
|
||||||
|
LD H,(IY + _sFM.FS_REC.F_SIZE+1)
|
||||||
|
LD E,(IY + _sFM.F_POSITION)
|
||||||
|
LD D,(IY + _sFM.F_POSITION+1)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD L,(IY + _sFM.FS_REC.F_SIZE+2)
|
||||||
|
LD H,(IY + _sFM.FS_REC.F_SIZE+3)
|
||||||
|
LD E,(IY + _sFM.F_POSITION+2)
|
||||||
|
LD D,(IY + _sFM.F_POSITION+3)
|
||||||
|
SBC HL,DE
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
@ -397,14 +397,10 @@ ADRST10: ;DS 512 ;,0
|
|||||||
;[INCLUDE]
|
;[INCLUDE]
|
||||||
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
||||||
INCLUDE "KEYINTER.ASM"
|
INCLUDE "KEYINTER.ASM"
|
||||||
INCLUDE "VIDEO.ASM"
|
|
||||||
INCLUDE "API.ASM"
|
INCLUDE "API.ASM"
|
||||||
INCLUDE "DOS_Proc.asm"
|
INCLUDE "DOS_Proc.asm"
|
||||||
INCLUDE "FS/FAT/FAT.ASM"
|
INCLUDE "FS_Module.asm"
|
||||||
INCLUDE "FS/FAT/FAT_X.ASM"
|
|
||||||
INCLUDE "DOS_FM.ASM"
|
|
||||||
INCLUDE "Procedures.asm"
|
INCLUDE "Procedures.asm"
|
||||||
INCLUDE "Kernel_Panic.asm"
|
|
||||||
|
|
||||||
|
|
||||||
; [ ] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb
|
; [ ] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb
|
||||||
|
|||||||
3
DSS/FS/CDFS.ASM
Normal file
3
DSS/FS/CDFS.ASM
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
;
|
||||||
|
;
|
||||||
|
;
|
||||||
File diff suppressed because it is too large
Load Diff
1199
DSS/FS/FAT/FAT.asm
1199
DSS/FS/FAT/FAT.asm
File diff suppressed because it is too large
Load Diff
8
DSS/FS_Module.asm
Normal file
8
DSS/FS_Module.asm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
INCLUDE "FS/FAT.ASM"
|
||||||
|
INCLUDE "FS/CDFS.ASM"
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
READ_BPB ; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
|
||||||
|
|
||||||
|
*/
|
||||||
@ -1,81 +0,0 @@
|
|||||||
;
|
|
||||||
MACRO PRINT_LINE_KERNEL_PANIC coordY, txtString, txtStringSize, txtColor
|
|
||||||
LD HL,txtString
|
|
||||||
LD BC,txtColor*256 + txtStringSize
|
|
||||||
LD DE,coordY * 256 + (80 - txtStringSize)/2
|
|
||||||
CALL .PRINT_LINE
|
|
||||||
ENDM ; 12 bytes
|
|
||||||
;
|
|
||||||
;-----------------------[]
|
|
||||||
; HL - á®®¡é¥¨¥
|
|
||||||
; E - ª®®à¤¨ â X ⥪á⮢®¬ íªà ¥
|
|
||||||
; BC - ¤«¨ á®®¡é¥¨ï
|
|
||||||
KERNEL_PANIC:
|
|
||||||
DI
|
|
||||||
;
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
PUSH BC
|
|
||||||
;
|
|
||||||
LD E,1
|
|
||||||
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
|
|
||||||
RST ToBIOS
|
|
||||||
;
|
|
||||||
LD HL,#2050
|
|
||||||
LD DE,0
|
|
||||||
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
|
|
||||||
RST ToBIOS
|
|
||||||
;
|
|
||||||
LD A,1
|
|
||||||
OUT (SCREEN_SWITCH),A ; set scr-2
|
|
||||||
;
|
|
||||||
PRINT_LINE_KERNEL_PANIC 13, .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.RED)
|
|
||||||
PRINT_LINE_KERNEL_PANIC 18, .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE)
|
|
||||||
;
|
|
||||||
POP BC
|
|
||||||
POP HL
|
|
||||||
LD DE,#A000
|
|
||||||
LD A,C
|
|
||||||
LDIR
|
|
||||||
;
|
|
||||||
POP DE
|
|
||||||
LD D,15
|
|
||||||
LD C,BIOS.LP_SET_PLACE
|
|
||||||
RST ToBIOS
|
|
||||||
;
|
|
||||||
LD HL,#A000
|
|
||||||
LD DE,0*256 + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE
|
|
||||||
LD B,A
|
|
||||||
LD C,BIOS.LP_PRINT_LINE3
|
|
||||||
RST ToBIOS
|
|
||||||
;
|
|
||||||
.loop: DI
|
|
||||||
HALT
|
|
||||||
JR .loop
|
|
||||||
;
|
|
||||||
.PRINT_LINE:
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
LD DE,#A000
|
|
||||||
LD B,E
|
|
||||||
LD A,C
|
|
||||||
LDIR
|
|
||||||
;
|
|
||||||
POP DE
|
|
||||||
LD C,BIOS.LP_SET_PLACE
|
|
||||||
RST ToBIOS
|
|
||||||
;
|
|
||||||
POP DE
|
|
||||||
LD E,D
|
|
||||||
LD HL,#A000
|
|
||||||
LD D,L
|
|
||||||
LD B,A
|
|
||||||
LD C,BIOS.LP_PRINT_LINE3
|
|
||||||
JP ToBIOS
|
|
||||||
;
|
|
||||||
.kernel_panic: DZ "KERNEL PANIC!"
|
|
||||||
.kernel_panic.size EQU $-.kernel_panic
|
|
||||||
;
|
|
||||||
.press_CAD: DZ "Press Ctrl+Alt+Del or RESET."
|
|
||||||
.press_CAD.size EQU $-.press_CAD
|
|
||||||
;-----------------------[]
|
|
||||||
@ -265,7 +265,6 @@ BCD2HEX:
|
|||||||
|
|
||||||
;!TODO hardware
|
;!TODO hardware
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
;!FIXIT ¯¥à¥¤¥« âì ¯® ¤®ª¥ „ «« á ¨ § ¯¨áì ¢ ï祩ª¨ ç ᮢ
|
|
||||||
; ‡ ¯¨áì ॣ¨áâ஢ CMOS
|
; ‡ ¯¨áì ॣ¨áâ஢ CMOS
|
||||||
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
||||||
WCMOS: CALL HEX2BCD
|
WCMOS: CALL HEX2BCD
|
||||||
@ -344,3 +343,86 @@ DIV_by_Shifts:
|
|||||||
LD L,A
|
LD L,A
|
||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;===============================================================================================================================
|
||||||
|
MACRO PRINT_LINE_KERNEL_PANIC coordY, txtString, txtStringSize, txtColor
|
||||||
|
LD HL,txtString
|
||||||
|
LD BC,txtColor*256 + txtStringSize
|
||||||
|
LD DE,coordY * 256 + (80 - txtStringSize)/2
|
||||||
|
CALL .PRINT_LINE
|
||||||
|
ENDM ; 12 bytes
|
||||||
|
;
|
||||||
|
;-----------------------[]
|
||||||
|
; HL - á®®¡é¥¨¥
|
||||||
|
; E - ª®®à¤¨ â X ⥪á⮢®¬ íªà ¥
|
||||||
|
; BC - ¤«¨ á®®¡é¥¨ï
|
||||||
|
KERNEL_PANIC:
|
||||||
|
DI
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
;
|
||||||
|
LD E,1
|
||||||
|
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
LD HL,#2050
|
||||||
|
LD DE,0
|
||||||
|
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
LD A,1
|
||||||
|
OUT (SCREEN_SWITCH),A ; set scr-2
|
||||||
|
;
|
||||||
|
PRINT_LINE_KERNEL_PANIC 13, .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.RED)
|
||||||
|
PRINT_LINE_KERNEL_PANIC 18, .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE)
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
LD DE,#A000
|
||||||
|
LD A,C
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
POP DE
|
||||||
|
LD D,15
|
||||||
|
LD C,BIOS.LP_SET_PLACE
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
LD HL,#A000
|
||||||
|
LD DE,0*256 + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE
|
||||||
|
LD B,A
|
||||||
|
LD C,BIOS.LP_PRINT_LINE3
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
.loop: DI
|
||||||
|
HALT
|
||||||
|
JR .loop
|
||||||
|
;
|
||||||
|
.PRINT_LINE:
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
LD DE,#A000
|
||||||
|
LD B,E
|
||||||
|
LD A,C
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
POP DE
|
||||||
|
LD C,BIOS.LP_SET_PLACE
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
POP DE
|
||||||
|
LD E,D
|
||||||
|
LD HL,#A000
|
||||||
|
LD D,L
|
||||||
|
LD B,A
|
||||||
|
LD C,BIOS.LP_PRINT_LINE3
|
||||||
|
JP ToBIOS
|
||||||
|
;
|
||||||
|
.kernel_panic: DZ "KERNEL PANIC!"
|
||||||
|
.kernel_panic.size EQU $-.kernel_panic
|
||||||
|
;
|
||||||
|
.press_CAD: DZ "Press Ctrl+Alt+Del or RESET."
|
||||||
|
.press_CAD.size EQU $-.press_CAD
|
||||||
|
;-----------------------[]
|
||||||
|
;===============================================================================================================================
|
||||||
696
DSS/VIDEO.ASM
696
DSS/VIDEO.ASM
@ -1,696 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: VIDEO
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;R02 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI"
|
|
||||||
;R01 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0)
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #56. Žç¨áâ¨âì ®ª®.
|
|
||||||
;
|
|
||||||
; ¢å®¤: D - áâப «¥¢®£® ¢¥à奣® 㣫 ®ª
|
|
||||||
; E - á⮫¡¥æ «¥¢®£® ¢¥à奣® 㣫 ®ª
|
|
||||||
; H - ¢ëá®â ®ª
|
|
||||||
; L - è¨à¨ ®ª
|
|
||||||
; A - ᨬ¢®« § ¯®«¨â¥«ì
|
|
||||||
; B - âਡãâ § ¯®«¨â¥«ì
|
|
||||||
; ¢ë室: ¥â
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
CLEAR: LD C,BIOS.LP_CLS_WIN2
|
|
||||||
JP ToBIOS
|
|
||||||
;AND A
|
|
||||||
;RET
|
|
||||||
;
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #5C. ‚뢮¤ áâப¨ íªà .
|
|
||||||
;
|
|
||||||
; ¢å®¤: HL - 㪠§ ⥫ì áâபã ᨬ¢®«®¢
|
|
||||||
; ¢ë室: HL - 㪠§ ⥫ì á«¥¤ãîéãî áâபã ᨬ¢®«®¢
|
|
||||||
; PRINT NULL-TERMINATED CHARS STRING
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
PCHARS: LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
CALL PUTCHAR
|
|
||||||
JP PCHARS
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #5B. ‚뢮¤ ᨬ¢®« íªà ¢ ⥪. ¯®§¨æ¨¨.
|
|
||||||
;
|
|
||||||
; ¢å®¤: A - ᨬ¢®«
|
|
||||||
; ¢ë室: ¥â
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
PUTCHAR:
|
|
||||||
;CALL .NO_SCROLL
|
|
||||||
CP #0E
|
|
||||||
JR C,.control_characters
|
|
||||||
;
|
|
||||||
LD BC,1*256 + BIOS.LP_PRINT_SYM
|
|
||||||
;[x] CR+LF+SCROLL
|
|
||||||
RST ToBIOS
|
|
||||||
;
|
|
||||||
; ¯à®¢¥àª ¯¥à¥å®¤ ªãàá®à ¢ á ¬®¥ ç «® (X:Y == 0:0)
|
|
||||||
CALL CURSOR
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
RET NZ
|
|
||||||
;
|
|
||||||
.LFF: PUSH HL
|
|
||||||
LD BC,1*256 + BIOS.LP_SCROLL_UD
|
|
||||||
LD DE,#0020
|
|
||||||
RST ToBIOS
|
|
||||||
LD DE,#1F00
|
|
||||||
CALL LOCATE
|
|
||||||
LD A,' '
|
|
||||||
LD BC,#50*256 + BIOS.LP_PRINT_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
LD DE,#1F00
|
|
||||||
CALL LOCATE
|
|
||||||
POP HL
|
|
||||||
RET
|
|
||||||
.TB_: CALL CURSOR
|
|
||||||
IF TABisSPACES
|
|
||||||
LD B,E
|
|
||||||
LD A,E
|
|
||||||
AND #F8
|
|
||||||
ADD A,8
|
|
||||||
SUB B
|
|
||||||
LD B,A
|
|
||||||
LD A,' '
|
|
||||||
LD C,BIOS.LP_PRINT_SYM
|
|
||||||
JP ToBIOS
|
|
||||||
ELSE
|
|
||||||
LD A,E
|
|
||||||
ADD A,8
|
|
||||||
AND #78 ;????? £«ïãâì, çâ® ¡ã¤¥â ¥á«¨ ª®®à¤¨ âë ªãàá®à ¢ ª®æ¥ áâப¨ ¯®çâ¨
|
|
||||||
LD E,A
|
|
||||||
JP LOCATE
|
|
||||||
ENDIF
|
|
||||||
.BK_: CALL CURSOR
|
|
||||||
XOR A
|
|
||||||
CP E
|
|
||||||
RET Z
|
|
||||||
DEC E
|
|
||||||
JP LOCATE
|
|
||||||
;
|
|
||||||
.LF_: CALL CURSOR
|
|
||||||
LD A,D
|
|
||||||
CP #1F
|
|
||||||
JR NC,.LFF
|
|
||||||
INC D
|
|
||||||
IFN EnoughtOnly_LF
|
|
||||||
JP LOCATE
|
|
||||||
ELSE
|
|
||||||
CALL LOCATE
|
|
||||||
; !!!! <20>… à §àë¢ âì LF_ ¨ CR_ !!!!
|
|
||||||
ENDIF
|
|
||||||
.CR_: CALL CURSOR
|
|
||||||
LD E,0
|
|
||||||
JP LOCATE
|
|
||||||
;
|
|
||||||
.control_characters:
|
|
||||||
CP #0D
|
|
||||||
JR Z,.CR_
|
|
||||||
CP #0A
|
|
||||||
JR Z,.LF_
|
|
||||||
CP #09
|
|
||||||
JR Z,.TB_
|
|
||||||
CP #08
|
|
||||||
JR Z,.BK_
|
|
||||||
CP #07 ; [x] Beep in PChars/PUTCHAR
|
|
||||||
RET NZ
|
|
||||||
; [x] Beep in PChars/PUTCHAR
|
|
||||||
.BELL: LD DE,1200
|
|
||||||
PUSH HL
|
|
||||||
LD HL,4
|
|
||||||
CALL BEEP
|
|
||||||
POP HL
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
; [x] -bug with Vasil's version of cursor
|
|
||||||
.NO_SCROLL:
|
|
||||||
CP #0E
|
|
||||||
JR C,.control_characters
|
|
||||||
._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM
|
|
||||||
JP ToBIOS
|
|
||||||
;
|
|
||||||
|
|
||||||
;-----[]
|
|
||||||
;
|
|
||||||
;
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #52. “áâ ®¢¨âì ¯®«®¦¥¨¥ ªãàá®à .
|
|
||||||
;
|
|
||||||
; ¢å®¤: D - áâப ªãàá®à
|
|
||||||
; E - ª®«®ª ªãàá®à
|
|
||||||
; ¢ë室: ¥â
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
LOCATE: LD C,BIOS.LP_SET_PLACE
|
|
||||||
JP ToBIOS
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #53. “§ âì ¯®«®¦¥¨¥ ªãàá®à .
|
|
||||||
;
|
|
||||||
; ¢å®¤: ¥â
|
|
||||||
; ¢ë室: D - áâப ªãàá®à
|
|
||||||
; E - ª®«®ª ªãàá®à
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
CURSOR: LD C,BIOS.LP_GET_PLACE
|
|
||||||
JP ToBIOS
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #57. <20>à®ç¨â âì ᨬ¢®« á íªà .
|
|
||||||
;
|
|
||||||
; ¢å®¤: D - áâப
|
|
||||||
; E - ª®«®ª
|
|
||||||
; ¢ë室: A - ᨬ¢®«
|
|
||||||
; B - âਡãâ
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
RDCHAR: XOR A
|
|
||||||
LD C,BIOS.WIN_GET_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
LD A,L
|
|
||||||
LD B,H
|
|
||||||
;AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #58. ‚뢥á⨠ᨬ¢®« íªà .
|
|
||||||
; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëçë¥ á¨¬¢®«ë.
|
|
||||||
;
|
|
||||||
; ¢å®¤: D - áâப
|
|
||||||
; E - ª®«®ª
|
|
||||||
; A - ᨬ¢®«
|
|
||||||
; B - âਡãâ
|
|
||||||
; ¢ë室: ¥â
|
|
||||||
;!FIXIT slow ª ª ¡¥§ WIN_GET_SYM âãâ ®¡®©â¨áì?
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
WRCHAR: LD C,A
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
XOR A
|
|
||||||
LD C,BIOS.WIN_GET_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
XOR A
|
|
||||||
LD C,BIOS.WIN_PUT_SYM
|
|
||||||
JP ToBIOS
|
|
||||||
;AND A
|
|
||||||
;RET
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #59. ‘®åà ¨âì ®ª® íªà .
|
|
||||||
;
|
|
||||||
; ¢å®¤: D - áâப
|
|
||||||
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
|
||||||
; H - ¢ëá®â ®ª
|
|
||||||
; L - è¨à¨ ®ª
|
|
||||||
; B - áâà ¨æ ¡ãä¥à , ¥á«¨ IX >= #C000
|
|
||||||
; IX - ¤à¥á ¡ãä¥à
|
|
||||||
; ¢ë室: ¥â
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
WINCOPY: AND A
|
|
||||||
LD A,R ;R02
|
|
||||||
PUSH AF ;R02
|
|
||||||
XOR A
|
|
||||||
LD C,BIOS.WIN_COPY
|
|
||||||
DI ;R02
|
|
||||||
RST ToBIOS
|
|
||||||
POP AF ;R02
|
|
||||||
RET PO ;R02
|
|
||||||
EI ;R02
|
|
||||||
RET
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #5A. ‚®ááâ ®¢¨âì ®ª® íªà .
|
|
||||||
;
|
|
||||||
; ¢å®¤: D - áâப
|
|
||||||
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
|
||||||
; H - ¢ëá®â ®ª
|
|
||||||
; L - è¨à¨ ®ª
|
|
||||||
; B - áâà ¨æ ¡ãä¥à , ¥á«¨ IX >= #C000
|
|
||||||
; IX - ¤à¥á ¡ãä¥à
|
|
||||||
; ¢ë室: ¥â
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
WINREST: AND A
|
|
||||||
LD A,R ;R02
|
|
||||||
PUSH AF ;R02
|
|
||||||
XOR A
|
|
||||||
DI ;R02
|
|
||||||
LD C,BIOS.WIN_RESTORE
|
|
||||||
RST ToBIOS
|
|
||||||
POP AF ;R02
|
|
||||||
RET PO ;R02
|
|
||||||
EI ;R02
|
|
||||||
RET
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #55. ‘ªà®««¨£ íªà .
|
|
||||||
;
|
|
||||||
; ¢å®¤: D - áâப «¥¢®£® ¢¥à奣® 㣫 ®ª
|
|
||||||
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
|
||||||
; H - ¢ëá®â ®ª
|
|
||||||
; L - è¨à¨ ®ª
|
|
||||||
; B = 1 - ¯à®ªàã⪠¢¢¥àå
|
|
||||||
; B = 2 - ¯à®ªàã⪠¢¨§
|
|
||||||
; A = 0 - ®ç¨é âì áâபã
|
|
||||||
; ¢ë室: ¥â
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
SCROLL: DJNZ .SCR_DW ;!TODO § ¬¥¨âì BIOS.LP_SCROLL_UD ¨ ¯®á¬®âà¥âì, çâ® èãáâ॥
|
|
||||||
;[x] 04/04/23
|
|
||||||
;LD B,A
|
|
||||||
;LD C,H
|
|
||||||
;PUSH BC
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
LD XH,D
|
|
||||||
LD XL,E
|
|
||||||
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,.skip_EI
|
|
||||||
EI
|
|
||||||
.skip_EI:
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
;[x] 04/04/23
|
|
||||||
;POP BC
|
|
||||||
POP AF
|
|
||||||
;XOR A
|
|
||||||
;CP B
|
|
||||||
AND A
|
|
||||||
;
|
|
||||||
RET NZ
|
|
||||||
LD A,D
|
|
||||||
ADD A,H
|
|
||||||
DEC A ;R01
|
|
||||||
LD D,A
|
|
||||||
.print: PUSH DE ;R01
|
|
||||||
CALL LOCATE
|
|
||||||
LD A,' '
|
|
||||||
LD B,L
|
|
||||||
LD C,BIOS.LP_PRINT_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
POP DE ;R01
|
|
||||||
JP LOCATE ;R01
|
|
||||||
;AND A
|
|
||||||
;RET
|
|
||||||
.SCR_DW:
|
|
||||||
DJNZ .SCR_ERR
|
|
||||||
;[x] 04/04/23
|
|
||||||
;LD B,A
|
|
||||||
;LD C,H
|
|
||||||
;PUSH BC
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
LD XH,D
|
|
||||||
LD XL,E
|
|
||||||
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,.skip2_EI:
|
|
||||||
EI
|
|
||||||
.skip2_EI:
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
;[x] 29/9/23
|
|
||||||
;POP BC
|
|
||||||
POP AF
|
|
||||||
;XOR A
|
|
||||||
;CP B
|
|
||||||
AND A
|
|
||||||
;
|
|
||||||
RET NZ
|
|
||||||
JP SCROLL.print
|
|
||||||
.SCR_ERR:
|
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #54. ‚ë¡à âì ªâ¨¢ãî áâà ¨æã íªà .
|
|
||||||
;
|
|
||||||
; ¢å®¤: B - áâà ¨æ íªà 0/1
|
|
||||||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
SELPAGE:
|
|
||||||
LD A,(VMODE)
|
|
||||||
;BIT 7,A
|
|
||||||
CP %1000'0000
|
|
||||||
JR NC,.SEL2
|
|
||||||
PUSH BC
|
|
||||||
LD C,A
|
|
||||||
CALL SETVMOD.TEXT_M
|
|
||||||
POP BC
|
|
||||||
.SEL2: LD A,B
|
|
||||||
AND #01
|
|
||||||
OUT (SCREEN_SWITCH),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #51. <20>®«ãç¨âì ⥪ã騩 ०¨¬ íªà .
|
|
||||||
;
|
|
||||||
; ¢å®¤: ¥â
|
|
||||||
; ¢ë室: A - ⥪ã騩 ०¨¬ íªà
|
|
||||||
; B - áâà ¨æ íªà 0/1
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
GETVMOD:
|
|
||||||
IN A,(SCREEN_SWITCH)
|
|
||||||
LD B,A
|
|
||||||
LD A,(VMODE)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #50. ‚ë¡®à ०¨¬ íªà .
|
|
||||||
;
|
|
||||||
; ¢å®¤: A - ०¨¬ íªà
|
|
||||||
; #02 - ⥪áâ®¢ë© 40x32x16 梥⮢
|
|
||||||
; #03 - ⥪áâ®¢ë© 80x32x16 梥⮢
|
|
||||||
; #81 - £à ä¨ç¥áª¨© 320x256x256 梥⮢
|
|
||||||
; #82 - £à ä¨ç¥áª¨© 640x256x16 梥⮢
|
|
||||||
; B - áâà ¨æ íªà 0/1
|
|
||||||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
SETVMOD:;
|
|
||||||
CP %1000'0000
|
|
||||||
LD C,A
|
|
||||||
JR NC,GRAPH
|
|
||||||
.TEXT_M: LD IX,BACKTXT
|
|
||||||
PUSH IX
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,(VMODE)
|
|
||||||
LD (BACKTXT.VMODE),A
|
|
||||||
EX AF,AF'
|
|
||||||
OR A
|
|
||||||
JR Z,.NOMODE
|
|
||||||
DEC A
|
|
||||||
JR Z,.NOMODE
|
|
||||||
DEC A
|
|
||||||
LD HL,TAB_40x32
|
|
||||||
JR Z,T_40_32
|
|
||||||
DEC A
|
|
||||||
LD HL,TAB_80x32
|
|
||||||
JR Z,T_80_32
|
|
||||||
.NOMODE: POP IX
|
|
||||||
LD A,DSS_Error.sys.INVALID_VIDEO_MODE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
; “áâ ®¢ª £à ä. ०¨¬®¢
|
|
||||||
GRAPH: CALL SAVETXT
|
|
||||||
AND #7F
|
|
||||||
JR Z,G320_16 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
|
||||||
DEC A
|
|
||||||
JR Z,G320_56
|
|
||||||
DEC A
|
|
||||||
JR Z,G640_16
|
|
||||||
; DEC A
|
|
||||||
; JP Z,G640_56 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
|
||||||
G320_16: LD A,DSS_Error.sys.INVALID_VIDEO_MODE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
T_80_32:
|
|
||||||
T_40_32: PUSH BC
|
|
||||||
; LD HL,TAB2
|
|
||||||
LD A,B
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
OR B
|
|
||||||
AND #11
|
|
||||||
XOR #10
|
|
||||||
LD E,A
|
|
||||||
GRAPH_NEXT:
|
|
||||||
CALL SETMODE
|
|
||||||
POP BC
|
|
||||||
LD A,C
|
|
||||||
LD (VMODE),A
|
|
||||||
LD A,B
|
|
||||||
AND #01
|
|
||||||
OUT (SCREEN_SWITCH),A
|
|
||||||
LD A,(VMODE)
|
|
||||||
LD C,Dss.Mouse.SetVideoMode
|
|
||||||
RST ToDSS.Mouse
|
|
||||||
SAFE_PORTY
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; T_80_32 PUSH BC
|
|
||||||
; LD HL,TAB1
|
|
||||||
; LD A,B
|
|
||||||
; RLCA
|
|
||||||
; RLCA
|
|
||||||
; RLCA
|
|
||||||
; RLCA
|
|
||||||
; OR B
|
|
||||||
; AND #11
|
|
||||||
; XOR #10
|
|
||||||
; LD E,A
|
|
||||||
; CALL SETMODE
|
|
||||||
; POP BC
|
|
||||||
; LD A,C
|
|
||||||
; LD (VMODE),A
|
|
||||||
; LD A,B
|
|
||||||
; AND #01
|
|
||||||
; OUT (SCREEN_SWITCH),A
|
|
||||||
; LD A,(VMODE)
|
|
||||||
; LD C,#81
|
|
||||||
; RST #30
|
|
||||||
; SAFE_PORTY
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
G320_56 PUSH BC
|
|
||||||
LD HL,TAB_320x256_0
|
|
||||||
LD E,#11
|
|
||||||
CALL SETMODE
|
|
||||||
LD HL,TAB_320x256_1
|
|
||||||
LD E,#00
|
|
||||||
JP GRAPH_NEXT
|
|
||||||
; CALL SETMODE
|
|
||||||
; POP BC
|
|
||||||
; LD A,C
|
|
||||||
; LD (VMODE),A
|
|
||||||
; LD A,B
|
|
||||||
; AND #01
|
|
||||||
; OUT (SCREEN_SWITCH),A
|
|
||||||
; LD A,(VMODE)
|
|
||||||
; LD C,#81
|
|
||||||
; RST #30
|
|
||||||
; SAFE_PORTY
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
G640_16 PUSH BC
|
|
||||||
LD HL,TAB_640x256_0
|
|
||||||
LD E,#11
|
|
||||||
CALL SETMODE
|
|
||||||
LD HL,TAB_640x256_1
|
|
||||||
LD E,#00
|
|
||||||
JP GRAPH_NEXT
|
|
||||||
|
|
||||||
; CALL SETMODE
|
|
||||||
; POP BC
|
|
||||||
; LD A,C
|
|
||||||
; LD (VMODE),A
|
|
||||||
; LD A,B
|
|
||||||
; AND #01
|
|
||||||
; OUT (SCREEN_SWITCH),A
|
|
||||||
; LD A,(VMODE)
|
|
||||||
; LD C,#81
|
|
||||||
; RST #30
|
|
||||||
; 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 ¯à¥¤¯®« £ ¥â, çâ® ® 㪠§ë¢ ¥â
|
|
||||||
IN A,(SLOT3) ; ¤à¥á ¨¦¥ #C000 ¨ ¢áâ ¢«ï¥â ¢ âà¥âìî ¡ ªã áâà ¨æã #FE
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LDIR
|
|
||||||
EX AF,AF'
|
|
||||||
OUT (SLOT3),A
|
|
||||||
.skip_EI: POP DE
|
|
||||||
LD IX,SYS_PAGE.SHARED_BUFFER_32b ; £àï§ë© å ª.
|
|
||||||
LD C,BIOS.WIN_OPEN
|
|
||||||
RST ToBIOS
|
|
||||||
SAFE_PORTY
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;IX+0 ;HORIZONTAL
|
|
||||||
;IX+1 ;VERTICAL
|
|
||||||
;IX+2 ;X - COORD
|
|
||||||
;IX+3 ;Y - COORD
|
|
||||||
;IX+4 ;MODE
|
|
||||||
;IX+5 ;EXT MODE
|
|
||||||
;IX+6 ;VIDEO RAM X OFFSET (SIGNPLACES)
|
|
||||||
;IX+7 ;VIDEO RAM Y OFFSET (SIGNPLACES)
|
|
||||||
|
|
||||||
;
|
|
||||||
;.......................................................................
|
|
||||||
;+0 X à §¬¥à ®ª ¢ § ª®¬¥áâ å
|
|
||||||
;+1 Y à §¬¥à ®ª ¢ § ª®¬¥áâ å
|
|
||||||
;+2 X ¯®«®¦. ®ª íªà ¥
|
|
||||||
;+3 Y ¯®«®¦. ®ª íªà ¥
|
|
||||||
;+4 ०¨¬ § ª®¬¥áâ
|
|
||||||
;+5 ¤®¯. ०¨¬ § ª®¬¥áâ (bit0=1 ᯥª. ¤à¥á æ¨ï íªà )
|
|
||||||
;+6 X ¯®«®¦. ¢ ¯®«¥ £à 䨪¨ (¢ § ª®¬¥áâ å)
|
|
||||||
;+7 Y ¯®«®¦. ¢ ¯®«¥ £à 䨪¨ (¢ § ª®¬¥áâ å)
|
|
||||||
ScreenDescriptorTable EQU $
|
|
||||||
; 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
|
|
||||||
CP %1000'0000
|
|
||||||
JR NC,.NOSAVET
|
|
||||||
SUB #02
|
|
||||||
JR C,.NOSAVET
|
|
||||||
;
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
PUSH IX
|
|
||||||
;
|
|
||||||
PUSH AF
|
|
||||||
LD C,BIOS.LP_GET_PLACE
|
|
||||||
RST ToBIOS
|
|
||||||
LD (BACKTXT.CURS),DE
|
|
||||||
POP AF
|
|
||||||
LD IX,#C000
|
|
||||||
LD HL,#2050
|
|
||||||
OR A
|
|
||||||
JR NZ,.SVTEXT1
|
|
||||||
LD L,#28
|
|
||||||
.SVTEXT1: LD (BACKTXT.WinMax),HL
|
|
||||||
LD DE,#0000
|
|
||||||
LD A,(BANKTBL+TXTPAGE)
|
|
||||||
LD B,A
|
|
||||||
|
|
||||||
LD C,BIOS.WIN_COPY
|
|
||||||
;[x] 29/9/23
|
|
||||||
LD A,R
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
XOR A
|
|
||||||
DI
|
|
||||||
RST ToBIOS
|
|
||||||
;[x] 29/9/23
|
|
||||||
POP AF
|
|
||||||
JP PO,.skip_EI
|
|
||||||
EI
|
|
||||||
.skip_EI: ;
|
|
||||||
POP IX
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
POP BC
|
|
||||||
.NOSAVET: POP AF
|
|
||||||
RET
|
|
||||||
;----------------------------------------------------------------------
|
|
||||||
|
|
||||||
BACKTXT: PUSH AF
|
|
||||||
.VMODE+1: LD A,#00
|
|
||||||
;BIT 7,A
|
|
||||||
CP %1000'0000
|
|
||||||
JR C,.NOBACKT
|
|
||||||
;
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
PUSH IX
|
|
||||||
LD IX,#C000
|
|
||||||
.WinMax+1: LD HL,#2050
|
|
||||||
LD DE,#0000
|
|
||||||
LD A,(BANKTBL+TXTPAGE)
|
|
||||||
LD B,A
|
|
||||||
LD C,BIOS.WIN_RESTORE
|
|
||||||
;[x] 29/9/23
|
|
||||||
LD A,R
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
XOR A
|
|
||||||
DI
|
|
||||||
RST ToBIOS
|
|
||||||
;[x] 29/9/23
|
|
||||||
POP AF
|
|
||||||
JP PO,.no_ei
|
|
||||||
EI
|
|
||||||
.no_ei: ;
|
|
||||||
.CURS+1: LD DE,#0000
|
|
||||||
CALL LOCATE
|
|
||||||
POP IX
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
POP BC
|
|
||||||
.NOBACKT: POP AF
|
|
||||||
RET
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;
|
|
||||||
;//MODULE: VIDEO
|
|
||||||
;[END]
|
|
||||||
495
DSS/drivers/media/ReScanDRV.ASM
Normal file
495
DSS/drivers/media/ReScanDRV.ASM
Normal file
@ -0,0 +1,495 @@
|
|||||||
|
;!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,FDD_DRV.API_TABLE
|
||||||
|
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
|
||||||
|
SCF
|
||||||
|
;JP Z,ERROR_BOOTDRV_DIES
|
||||||
|
RET Z
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
|
||||||
|
; 6. § ¬¥ï¥¬ ®¢ë¥ â ¡«¨æë ¬®¤¨ä¨æ¨à®¢ ë¥ áâ àë¥
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
LD HL,OLD_TABLES.DEVICE
|
||||||
|
LD DE,DEVICE
|
||||||
|
LD BC,OLD_TABLES.DEVICE - DEVICE
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
|
||||||
|
;7. ¢ë室
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
LD A,(DRV_PAGE.LDRIVE)
|
||||||
|
AND A
|
||||||
|
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:
|
||||||
|
; DI
|
||||||
|
; LD E,1
|
||||||
|
; LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
|
||||||
|
; RST ToBIOS
|
||||||
|
; ;
|
||||||
|
; LD HL,#2050
|
||||||
|
; LD DE,0
|
||||||
|
; LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
|
||||||
|
; RST ToBIOS
|
||||||
|
; ;
|
||||||
|
; LD A,1
|
||||||
|
; OUT (SCREEN_SWITCH),A ; set scr-2
|
||||||
|
; ;
|
||||||
|
; LD HL,.ERROR_MSG
|
||||||
|
; LD DE,#A000
|
||||||
|
; LD BC,.ERROR_MSG.size
|
||||||
|
; LD A,C
|
||||||
|
; LDIR
|
||||||
|
; ;
|
||||||
|
; LD DE,16*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.INK.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+LOGDRV.PHISICAL_DRV_NUMBER)
|
||||||
|
;CP #FF
|
||||||
|
;JR Z,.skip
|
||||||
|
CP (IX+LOGDRV.PHISICAL_DRV_NUMBER)
|
||||||
|
JR NZ,.skip
|
||||||
|
;
|
||||||
|
LD A,(IY+LOGDRV.SECTOR_OFFSET)
|
||||||
|
CP (IX+LOGDRV.SECTOR_OFFSET)
|
||||||
|
JR NZ,.skip
|
||||||
|
LD A,(IY+LOGDRV.SECTOR_OFFSET+1)
|
||||||
|
CP (IX+LOGDRV.SECTOR_OFFSET+1)
|
||||||
|
JR NZ,.skip
|
||||||
|
LD A,(IY+LOGDRV.SECTOR_OFFSET+2)
|
||||||
|
CP (IX+LOGDRV.SECTOR_OFFSET+2)
|
||||||
|
JR NZ,.skip
|
||||||
|
LD A,(IY+LOGDRV.SECTOR_OFFSET+3)
|
||||||
|
CP (IX+LOGDRV.SECTOR_OFFSET+3)
|
||||||
|
JR NZ,.skip
|
||||||
|
LD A,(IY+LOGDRV.SIZE_IN_SECTORS)
|
||||||
|
CP (IX+LOGDRV.SIZE_IN_SECTORS)
|
||||||
|
JR NZ,.skip
|
||||||
|
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+1)
|
||||||
|
CP (IX+LOGDRV.SIZE_IN_SECTORS+1)
|
||||||
|
JR NZ,.skip
|
||||||
|
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+2)
|
||||||
|
CP (IX+LOGDRV.SIZE_IN_SECTORS+2)
|
||||||
|
JR NZ,.skip
|
||||||
|
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+3)
|
||||||
|
CP (IX+LOGDRV.SIZE_IN_SECTORS+3)
|
||||||
|
JR Z,.found
|
||||||
|
;
|
||||||
|
.skip: ADD IX,DE
|
||||||
|
DJNZ .loop
|
||||||
|
; ‡€<E280A1>ˆ‘œ <20>… <20>€‰„…<E2809E>€
|
||||||
|
; ƒà®å ¥¬ áâ àãî § ¯¨áì ¢ OLD_TABLES.LOGDRV
|
||||||
|
LD A,#FF
|
||||||
|
LD (IY+LOGDRV.PHISICAL_DRV_NUMBER),A
|
||||||
|
; „®áâ ñ¬ ¯®«®¦¥¨¥ ¢ OLD_TABLES.DEVICE
|
||||||
|
POP HL
|
||||||
|
; „®áâ ñ¬ è £ ®¡é¥£® 横« ¤«ï ¯®«ãç¥¨ï «®£.®¬¥à ¤à ©¢ ¢ KILL_FM
|
||||||
|
POP BC
|
||||||
|
PUSH BC
|
||||||
|
; ƒà®å ¥¬ ”Œ ¨ § ¯¨áì ¢ OLD_TABLES.DEVICE
|
||||||
|
CALL KILL_FM
|
||||||
|
;
|
||||||
|
JP ReScanDRV.nextN2
|
||||||
|
;
|
||||||
|
.found: ; § â¨à ¥¬ ¢ ®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
|
||||||
|
LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),#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,CORE_BUFFERS.FM_BUF + #C000 ; - CORE_BUFFERS.FM_BUF.Size
|
||||||
|
LD B,FMCOUNT - 1 ; ¯à®¯ã᪠¥¬ á«ã¦¥¡ë© ã«¥¢®© ¬ ¨¯ã«ïâ®à
|
||||||
|
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||||||
|
.loop_fm:
|
||||||
|
ADD IY,DE
|
||||||
|
LD A,(IY+_sFM.DRIVE)
|
||||||
|
CP C
|
||||||
|
JR NZ,.skip
|
||||||
|
XOR A
|
||||||
|
LD (IY+_sFM.FS_REC.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
|
||||||
|
*/
|
||||||
417
DSS/drivers/media/fdd-drv.asm
Normal file
417
DSS/drivers/media/fdd-drv.asm
Normal file
@ -0,0 +1,417 @@
|
|||||||
|
|
||||||
|
; Disk Driver Specification ver. 2.00
|
||||||
|
;[]===========================================================[0]
|
||||||
|
;Procedure : Initialization
|
||||||
|
;
|
||||||
|
;Function : Initialization device(s)
|
||||||
|
;
|
||||||
|
;Input : C = 00h
|
||||||
|
; IX - Environment
|
||||||
|
;Output : A = Amount drive support
|
||||||
|
; HL = Size driver
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[1]
|
||||||
|
;Procedure : Open
|
||||||
|
;
|
||||||
|
;Function : Open disk
|
||||||
|
;
|
||||||
|
;Input : C = 01h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[2]
|
||||||
|
;Procedure : Close
|
||||||
|
;
|
||||||
|
;Function : Close disk
|
||||||
|
;
|
||||||
|
;Input : C = 02h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[3]
|
||||||
|
;Procedure : Media check
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 03h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h disk no changed
|
||||||
|
; A = 0FFh disk changed
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[4]
|
||||||
|
;Procedure : Get BPB
|
||||||
|
;
|
||||||
|
;Function : Get Block Parameters BIOS
|
||||||
|
;
|
||||||
|
;Input : C = 04h
|
||||||
|
; DE - Address
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[5]
|
||||||
|
;Procedure : Input
|
||||||
|
;
|
||||||
|
;Function : Input from disk
|
||||||
|
;
|
||||||
|
;Input : C = 05h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[6]
|
||||||
|
;Procedure : Output
|
||||||
|
;
|
||||||
|
;Function : Output to disk
|
||||||
|
;
|
||||||
|
;Input : C = 06h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[7]
|
||||||
|
;Procedure : Removable
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 07h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h Removable
|
||||||
|
; A = FFh Nonremovable
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[8]
|
||||||
|
;Procedure : Generic IOCTL
|
||||||
|
;
|
||||||
|
;Function : Generic Input Output Control
|
||||||
|
;
|
||||||
|
;Input : C = 08h
|
||||||
|
; B - Subcommand
|
||||||
|
; DE = 55AAh Magic Number
|
||||||
|
; Subcommand
|
||||||
|
;----------------------
|
||||||
|
; 00h - Get Device Parameters
|
||||||
|
; 01h - Read track
|
||||||
|
; 02h - Test track
|
||||||
|
; 80h - Set Device Parameters
|
||||||
|
; 81h - Write track
|
||||||
|
; 82h - Format track
|
||||||
|
;Output :
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;
|
||||||
|
; Errors:
|
||||||
|
; 0 (00h) - NO ERRORS
|
||||||
|
; 1 (01h) - BAD COMMAND
|
||||||
|
; 2 (02h) - BAD DRIVE NUMBER
|
||||||
|
; 3 (03h) - UNKNOW FORMAT
|
||||||
|
; 4 (04h) - NOT READY
|
||||||
|
; 5 (05h) - SEEK ERROR
|
||||||
|
; 6 (06h) - SECTOR NOT FOUND
|
||||||
|
; 7 (07h) - CRC ERROR
|
||||||
|
; 8 (08h) - WRITE PROTECT
|
||||||
|
; 9 (09h) - READ ERROR
|
||||||
|
; 10 (0Ah) - WRITE ERROR
|
||||||
|
; 11 (0Bh) - FAILURE
|
||||||
|
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
||||||
|
; 13 (0Dh) - RESERVED
|
||||||
|
|
||||||
|
; R_COM EQU #0F ;Command/Status
|
||||||
|
; R_TRK EQU #3F ;Track
|
||||||
|
; R_SEC EQU #5F ;Sector
|
||||||
|
; R_DAT EQU #7F ;Data
|
||||||
|
; R_DSK EQU #FF ;Drive Control
|
||||||
|
; COM_B EQU #1B
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
MODULE FDD_DRV
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; Ž¡à ¡®â稪 FDD (rst 18h)
|
||||||
|
;-------------------------------------------------
|
||||||
|
API_TABLE: INC C
|
||||||
|
DEC C
|
||||||
|
JP Z,Init ;#00 Init
|
||||||
|
DEC C
|
||||||
|
JP Z,Open ;#01 Open
|
||||||
|
DEC C
|
||||||
|
JP Z,Close ;#02 Close
|
||||||
|
DEC C
|
||||||
|
JP Z,MediaCheck ;#03 MediaCheck
|
||||||
|
DEC C
|
||||||
|
JP Z,GetBPB ;#04 GetBPB
|
||||||
|
DEC C
|
||||||
|
JP Z,Read ;#05 Read
|
||||||
|
DEC C
|
||||||
|
JP Z,Write ;#06 Write
|
||||||
|
DEC C
|
||||||
|
JP Z,Removable ;#07 Removable
|
||||||
|
DEC C
|
||||||
|
JP Z,GenIOCTL ;#08 GenIOCTL
|
||||||
|
DEC C
|
||||||
|
JP Z,Reserved ;#09
|
||||||
|
;
|
||||||
|
Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;Commands for restart #18 ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;
|
||||||
|
Init: LD A,2 ;ª®«¨ç¥á⢮ FDD ¢ ª®¬¯¥ ;!FIXIT ¥á«¨ ®âª«îçã ¢ <20>ˆŽ‘?
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
;
|
||||||
|
Open: LD C,BIOS.DRV_RESET
|
||||||
|
RST ToBIOS
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
;
|
||||||
|
Close: XOR A
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
|
;!FIXIT ¯à®¢¥àïâì ‚ƒ93 ª®£¤ íâ® á⠥⠢®§¬®¦ë¬
|
||||||
|
MediaCheck: IF NON_REMOVABLE_FDD
|
||||||
|
XOR A
|
||||||
|
ELSE
|
||||||
|
LD A,#FF
|
||||||
|
OR A
|
||||||
|
ENDIF
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
|
;DE - ADDRESS
|
||||||
|
GetBPB: LD IX,0
|
||||||
|
LD HL,0
|
||||||
|
PUSH DE
|
||||||
|
PUSH AF
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
LD BC,BOOT_SECTOR.SectorsPerTrack
|
||||||
|
ADD HL,BC
|
||||||
|
LD E,(HL)
|
||||||
|
PUSH DE
|
||||||
|
LD A,D
|
||||||
|
LD C,BIOS.DRV_GET_PAR
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,H
|
||||||
|
POP HL
|
||||||
|
PUSH HL
|
||||||
|
LD H,A
|
||||||
|
POP AF
|
||||||
|
LD C,BIOS.DRV_SET_PAR
|
||||||
|
RST ToBIOS
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
|
; !TODO read track?
|
||||||
|
;READTR: XOR A
|
||||||
|
; RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
;
|
||||||
|
Read: LD C,BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
;
|
||||||
|
Write: LD C,BIOS.DRV_WRITE
|
||||||
|
RST ToBIOS
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
|
; 00 - GET DEVICE PARAMETERS
|
||||||
|
; 01 - READ TRACK
|
||||||
|
; 02 - TEST TRACK
|
||||||
|
; 80 - SET DEVICE PARAMETERS
|
||||||
|
; 81 - WRITE TRACK
|
||||||
|
; 82 - FORMAT TRACK
|
||||||
|
GenIOCTL: BIT 7,B
|
||||||
|
JR NZ,.O_CTL_F
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,.GetParams
|
||||||
|
;!TODO
|
||||||
|
;DEC B
|
||||||
|
;JP Z,.ReadTrack
|
||||||
|
;DEC B
|
||||||
|
;JP Z,.TestTRK
|
||||||
|
;
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.O_CTL_F: RES 7,B
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,.SetParams
|
||||||
|
;!TODO
|
||||||
|
;DEC B
|
||||||
|
;JP Z,.WriteTRK
|
||||||
|
;DEC B
|
||||||
|
;JP Z,.FormatTRK
|
||||||
|
;
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
|
; ‚室: - A - Drive number
|
||||||
|
; ‚ë室:
|
||||||
|
; HL:DE - SECTORS ON LOGICAL DISK
|
||||||
|
; C - PARTITION RECORD NUMBER IN DRIVE MBR. 0 for fdd ;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
; HL' - CYLINDERS ON PHISICAL DISK
|
||||||
|
; DE' - HEADS ON PHISICAL DISK
|
||||||
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
|
; A' - PHISICAL DRIVE NUMBER
|
||||||
|
; A - EXTENDED INFORMATION
|
||||||
|
; D1..D3 - "0" RESERVED (MAY BE OTHER)
|
||||||
|
; D4 - DEVICE MASTER/SLAVE
|
||||||
|
; D5 - "1" RESERVED
|
||||||
|
; D6 - ADDRESSING MODE LBA/CHS
|
||||||
|
; D7 - "1" RESERVED
|
||||||
|
.GetParams: EX DE,HL
|
||||||
|
LD BC,#55AA
|
||||||
|
AND #0F
|
||||||
|
SBC HL,BC
|
||||||
|
JR Z,.next
|
||||||
|
;
|
||||||
|
LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.next: PUSH AF
|
||||||
|
LD C,BIOS.DRV_GET_PAR
|
||||||
|
RST ToBIOS
|
||||||
|
JR C,.NONE_FDD
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD A,H
|
||||||
|
LD H,0
|
||||||
|
;
|
||||||
|
.mull_loop1: ADD HL,HL
|
||||||
|
DEC A
|
||||||
|
JR NZ,.mull_loop1
|
||||||
|
;
|
||||||
|
; HL - SECTOR PER CYLLINDER
|
||||||
|
; A=0 ZF=0 CF=0
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
;LD HL,0
|
||||||
|
;XOR A
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
|
.mull_loop2: EX AF,AF'
|
||||||
|
ADD HL,BC
|
||||||
|
ADC A,0
|
||||||
|
DEC DE
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,.mull_loop2
|
||||||
|
;
|
||||||
|
; A=0 DE=0 ZF=0 CF=0
|
||||||
|
EX AF,AF'
|
||||||
|
LD E,A
|
||||||
|
EX DE,HL
|
||||||
|
; H=0
|
||||||
|
LD C,H ;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
EXX
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
; A=0 ZF=0 CF=0
|
||||||
|
LD B,0
|
||||||
|
LD C,L
|
||||||
|
LD L,H
|
||||||
|
LD H,B
|
||||||
|
EX DE,HL
|
||||||
|
EXX
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.NONE_FDD: POP BC
|
||||||
|
LD A,DSS_Error.drv.INVALID_DRIVE
|
||||||
|
; CF=1
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
|
; HL:DE - SECTORS ON LOGICAL DISK
|
||||||
|
; HL' - CYLINDERS ON PHISICAL DISK
|
||||||
|
; DE' - HEADS ON PHISICAL DISK
|
||||||
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
|
; A' - EXTENDED INFORMATION
|
||||||
|
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
||||||
|
; D4 - DEVICE MASTER/SLAVE
|
||||||
|
; D5 - "1" RESERVED
|
||||||
|
; D6 - ADDRESSING MODE LBA/CHS
|
||||||
|
; D7 - "1" RESERVED
|
||||||
|
.SetParams: PUSH AF
|
||||||
|
EXX
|
||||||
|
EX DE,HL
|
||||||
|
LD H,L
|
||||||
|
LD L,C
|
||||||
|
POP AF
|
||||||
|
AND #0F
|
||||||
|
PUSH AF
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD C,BIOS.DRV_GET_PAR
|
||||||
|
RST ToBIOS
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
JR C,.NONE_FDD
|
||||||
|
POP AF
|
||||||
|
LD C,BIOS.DRV_SET_PAR
|
||||||
|
JP ToBIOS
|
||||||
|
;RST ToBIOS
|
||||||
|
;RET C
|
||||||
|
;AND A
|
||||||
|
;RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
|
Removable: ; LD A,1
|
||||||
|
; AND A
|
||||||
|
XOR A
|
||||||
|
INC A
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
;==============================================
|
||||||
|
|
||||||
|
ENDMODULE ; FDD_DRV
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
715
DSS/drivers/media/ide-drv.asm
Normal file
715
DSS/drivers/media/ide-drv.asm
Normal file
@ -0,0 +1,715 @@
|
|||||||
|
;!TODO ¯à¨¢¥á⨠ª ®¡é¥¬ã ¢¨¤ã ¢ ®¤ã ¨áâàãªæ¨î, ¯à®¢¥à¨âì ª®à४â®áâì
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R02 06-08-2001 DNS Secondary IDE
|
||||||
|
;R01 06-08-2001 DNS Fixed BUG with partitions on Second hard disk
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Disk Driver Specification ver. 2.20
|
||||||
|
;[]===========================================================[0]
|
||||||
|
;Procedure: Initialization
|
||||||
|
;
|
||||||
|
;Function: Initialization device(s)
|
||||||
|
;
|
||||||
|
;Input: C = #00
|
||||||
|
; IX = Environment
|
||||||
|
;
|
||||||
|
;Output: A = Amount drive support
|
||||||
|
;[]===========================================================[0]
|
||||||
|
|
||||||
|
;[]===========================================================[1]
|
||||||
|
;Procedure: Open
|
||||||
|
;
|
||||||
|
;Function: Open disk
|
||||||
|
;
|
||||||
|
;Input: C = #01
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[1]
|
||||||
|
|
||||||
|
;[]===========================================================[2]
|
||||||
|
;Procedure: Close
|
||||||
|
;
|
||||||
|
;Function: Close disk
|
||||||
|
;
|
||||||
|
;Input: C = #02
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[2]
|
||||||
|
|
||||||
|
;[]===========================================================[3]
|
||||||
|
;Procedure: Media check
|
||||||
|
;
|
||||||
|
;Function: Checking change line
|
||||||
|
;
|
||||||
|
;Input: C = #03
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: A = #00 disk no changed
|
||||||
|
; #FF disk changed
|
||||||
|
;[]===========================================================[3]
|
||||||
|
|
||||||
|
;[]===========================================================[4]
|
||||||
|
;Procedure: Get BPB
|
||||||
|
;
|
||||||
|
;Function: Get Block Parameters BIOS
|
||||||
|
;
|
||||||
|
;Input: C = #04
|
||||||
|
; A = Drive
|
||||||
|
; DE = Address
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[4]
|
||||||
|
|
||||||
|
;[]===========================================================[5]
|
||||||
|
;Procedure: Read
|
||||||
|
;
|
||||||
|
;Function: Read from disk
|
||||||
|
;
|
||||||
|
;Input: C = #05
|
||||||
|
; HL:IX = Logical Block (sector)
|
||||||
|
; DE = Address
|
||||||
|
; B = Sector count
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[5]
|
||||||
|
|
||||||
|
;[]===========================================================[6]
|
||||||
|
;Procedure: Write
|
||||||
|
;
|
||||||
|
;Function: Write to disk
|
||||||
|
;
|
||||||
|
;Input: C = #06
|
||||||
|
; HL:IX = Logical Block (sector)
|
||||||
|
; DE = Address
|
||||||
|
; B = Sector count
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[6]
|
||||||
|
|
||||||
|
;[]===========================================================[7]
|
||||||
|
;Procedure: Removable
|
||||||
|
;
|
||||||
|
;Function: Checking change line
|
||||||
|
;
|
||||||
|
;Input: C = #07
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: A = #00 Removable
|
||||||
|
; A = #FF Non-removable
|
||||||
|
;[]===========================================================[7]
|
||||||
|
|
||||||
|
;[]===========================================================[8]
|
||||||
|
;Procedure: Generic IOCTL
|
||||||
|
;
|
||||||
|
;Function: Generic Input Output Control
|
||||||
|
;
|
||||||
|
;Input: C = #08
|
||||||
|
; B = Subcommand
|
||||||
|
; DE = #55AA Magic Number
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Subcommands: #00 - Get Device Parameters
|
||||||
|
; #01 - Read track
|
||||||
|
; #02 - Test track
|
||||||
|
; #80 - Set Device Parameters
|
||||||
|
; #81 - Write track
|
||||||
|
; #82 - Format track
|
||||||
|
;Output:
|
||||||
|
;[]===========================================================[8]
|
||||||
|
|
||||||
|
;[]===========================================================[9]
|
||||||
|
;Procedure: Read Long
|
||||||
|
;
|
||||||
|
;Function: Reading sectors from disk
|
||||||
|
;
|
||||||
|
;Input: C = #0A
|
||||||
|
; HL:IX = Logical Block (sector)
|
||||||
|
; DE = Address
|
||||||
|
; B = Sector count
|
||||||
|
; A' = Page
|
||||||
|
;
|
||||||
|
;Output: A' = Next Page
|
||||||
|
; HL:IX = Next Logical Block (sector)
|
||||||
|
; DE = Next Address
|
||||||
|
;[]===========================================================[9]
|
||||||
|
|
||||||
|
;[]===========================================================[10]
|
||||||
|
;Procedure: Write Long
|
||||||
|
;
|
||||||
|
;Function: Writing sectors to disk
|
||||||
|
;
|
||||||
|
;Input: C = #0B
|
||||||
|
; HL:IX = Logical Block (sector)
|
||||||
|
; DE = Address
|
||||||
|
; B = Sector count
|
||||||
|
; A' = Page
|
||||||
|
;
|
||||||
|
;Output: A' = Next Page
|
||||||
|
; HL:IX = Next Logical Block (sector)
|
||||||
|
; DE = Next Address
|
||||||
|
;[]===========================================================[10]
|
||||||
|
|
||||||
|
;
|
||||||
|
; Errors:
|
||||||
|
; 0 (#00) - NO ERRORS
|
||||||
|
; 1 (#01) - BAD COMMAND
|
||||||
|
; 2 (#02) - BAD DRIVE NUMBER
|
||||||
|
; 3 (#03) - UNKNOW FORMAT
|
||||||
|
; 4 (#04) - NOT READY
|
||||||
|
; 5 (#05) - SEEK ERROR
|
||||||
|
; 6 (#06) - SECTOR NOT FOUND
|
||||||
|
; 7 (#07) - CRC ERROR
|
||||||
|
; 8 (#08) - WRITE PROTECT
|
||||||
|
; 9 (#09) - READ ERROR
|
||||||
|
; 10 (#0A) - WRITE ERROR
|
||||||
|
; 11 (#0B) - FAILURE
|
||||||
|
; 12 (#0C) - BUSY (DEVICE OPENED)
|
||||||
|
; 13 (#0D) - RESERVED
|
||||||
|
|
||||||
|
; IDE0 EQU #0C1C0
|
||||||
|
; IDE1 EQU #0C1C8
|
||||||
|
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
|
||||||
|
|
||||||
|
HDDRIVE: INC C
|
||||||
|
DEC C
|
||||||
|
JP Z,INIT_H ; c=0 Initialization
|
||||||
|
DEC C
|
||||||
|
JP Z,RESE_H ; c=1 open
|
||||||
|
DEC C
|
||||||
|
JP Z,STAT_H ; c=2 close
|
||||||
|
DEC C
|
||||||
|
JP Z,CHEK_H ; c=3 media check (ᬥ ®á¨â¥«ï)
|
||||||
|
DEC C
|
||||||
|
JP Z,GBPB_H ; c=4 get BPB
|
||||||
|
DEC C
|
||||||
|
JP Z,READH ; c=5 read (ç⥨¥ ᥪâ®à®¢)
|
||||||
|
DEC C
|
||||||
|
JP Z,WRITEH ; c=6 write (§ ¯¨áì ᥪâ®à®¢)
|
||||||
|
DEC C
|
||||||
|
JP Z,REMOV_H ; c=7 Removable
|
||||||
|
DEC C
|
||||||
|
JP Z,IOCTL_H ; c=8 ã§ âì £¥®¬¥âà¨î ¤¨áª Generic IOCTL
|
||||||
|
DEC C
|
||||||
|
JP Z,.Reserved ; c=9 Reserved
|
||||||
|
DEC C
|
||||||
|
JP Z,LREADH ; c=10 Read Long
|
||||||
|
DEC C
|
||||||
|
JP Z,LWRITEH ; c=11 Write Long
|
||||||
|
;
|
||||||
|
.Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// Commands for restart #18 //
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
;--------------------------------------------------------------------[v]
|
||||||
|
; c=0 Initialization
|
||||||
|
INIT_H: PUSH IY
|
||||||
|
;!TEST ;[ ] ¤«ï rescanDRV
|
||||||
|
XOR A
|
||||||
|
LD (DRVCLC.count),A
|
||||||
|
;
|
||||||
|
LD HL,LOGDRV
|
||||||
|
LD (OFFSECT),HL
|
||||||
|
|
||||||
|
LD IX,SYS_PAGE.TMP_BUFFER
|
||||||
|
LD C,BIOS.DRV_LIST
|
||||||
|
RST ToBIOS
|
||||||
|
; DRV_LIST:
|
||||||
|
; +0 LEN
|
||||||
|
; +1 FDD COUNT
|
||||||
|
; +2 HDD COUNT
|
||||||
|
; +3 CDROM COUNT
|
||||||
|
; +4 RESERVED (28)
|
||||||
|
;
|
||||||
|
IN A,(SLOT3)
|
||||||
|
LD C,A
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
XOR A
|
||||||
|
LD B,(IX+2) ;ª®«¨ç¥á⢮ HDD ¤«ï ¯à®æ¥¤ãàë NX_DVCI
|
||||||
|
CP B
|
||||||
|
LD A,C
|
||||||
|
OUT (SLOT3),A
|
||||||
|
JR Z,NO_HARDS
|
||||||
|
LD C,#80 ;!HARDCODE - ID ¢¨â ¤«ï ¯à®æ¥¤ãàë BIOS.DRV_DETECT
|
||||||
|
|
||||||
|
NX_DVCI: PUSH BC
|
||||||
|
LD A,C
|
||||||
|
LD (DRV_NUM),A
|
||||||
|
LD C,BIOS.DRV_DETECT
|
||||||
|
RST ToBIOS
|
||||||
|
;JR C,.NO_DRIVE
|
||||||
|
CALL NC,DEFINE_PARTITIONS.BEGIN
|
||||||
|
POP BC
|
||||||
|
INC C
|
||||||
|
JR C,NX_DVCI
|
||||||
|
DJNZ NX_DVCI
|
||||||
|
;
|
||||||
|
NO_HARDS:
|
||||||
|
POP IY
|
||||||
|
;!TEST
|
||||||
|
; LD HL,(OFFSECT)
|
||||||
|
; LD DE,LOGDRV
|
||||||
|
; XOR A
|
||||||
|
; SBC HL,DE
|
||||||
|
; RET Z
|
||||||
|
; LD DE,LOGDRV.TBL_Entry
|
||||||
|
DRVCLC: ; INC A
|
||||||
|
; SBC HL,DE
|
||||||
|
; JR NZ,DRVCLC
|
||||||
|
;
|
||||||
|
.count+1: LD A,0
|
||||||
|
;
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;---------------------------------------------------------------------[^]
|
||||||
|
|
||||||
|
; ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
; ;+01 DWORD SECTOR OFFSET
|
||||||
|
; ;+05 DWORD SIZE IN SECTORS
|
||||||
|
; ;+09 FREE
|
||||||
|
; ;+15
|
||||||
|
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0
|
||||||
|
; .TBL_Entry EQU 16
|
||||||
|
; .Size EQU $-LOGDRV
|
||||||
|
SELHDD: PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
;
|
||||||
|
LD L,A
|
||||||
|
LOGDRV_ENTRY_FIND LOGDRV
|
||||||
|
; !HARDCODE
|
||||||
|
LD E,(IY+1)
|
||||||
|
LD D,(IY+2)
|
||||||
|
ADD IX,DE
|
||||||
|
LD E,(IY+3)
|
||||||
|
LD D,(IY+4)
|
||||||
|
POP HL
|
||||||
|
ADC HL,DE
|
||||||
|
LD A,(IY+0) ;DRIVE NUMBER
|
||||||
|
POP DE
|
||||||
|
RET
|
||||||
|
|
||||||
|
; 00 - GET DEVICE PARAMETERS
|
||||||
|
; 01 - READ TRACK
|
||||||
|
; 02 - TEST TRACK
|
||||||
|
; 80 - SET DEVICE PARAMETERS
|
||||||
|
; 81 - WRITE TRACK
|
||||||
|
; 82 - FORMAT TRACK
|
||||||
|
IOCTL_H BIT 7,B
|
||||||
|
JR NZ,O_CTL_H
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,HGETPRM
|
||||||
|
DEC B
|
||||||
|
JP Z,HRDTRAC
|
||||||
|
DEC B
|
||||||
|
JP Z,HCHTRAC
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
O_CTL_H RES 7,B
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,HSETPRM
|
||||||
|
DEC B
|
||||||
|
JP Z,HWRTRAC
|
||||||
|
DEC B
|
||||||
|
JP Z,HFRTRAC
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
HRDTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
HCHTRAC LD B,L
|
||||||
|
CALL CHECKH
|
||||||
|
RET
|
||||||
|
|
||||||
|
HSETPRM AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
HWRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
HFRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL:DE - SECTORS ON LOGICAL DISK
|
||||||
|
; C - PARTITION RECORD NUMBER IN DRIVE MBR. if #FF - then not supported ;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
; HL' - CYLINDERS ON PHISICAL DISK
|
||||||
|
; DE' - HEADS ON PHISICAL DISK
|
||||||
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
|
; A' - PHISICAL DRIVE NUMBER
|
||||||
|
; A - DRIVE/HEAD REGISTER PHISICAL DISK:
|
||||||
|
; bit7 - reserved "1"
|
||||||
|
; bit6 - ADDRESSING MODE LBA/CHS
|
||||||
|
; bit5 - reserved "1"
|
||||||
|
; bit4 - DEVICE MASTER/SLAVE
|
||||||
|
; bit3 - reserved "0" (MAY BE OTHER)
|
||||||
|
; bit2 - reserved "0" (MAY BE OTHER)
|
||||||
|
; bit1 - reserved "0" (MAY BE OTHER)
|
||||||
|
; bit0 - Primary/Secondary Chanel
|
||||||
|
HGETPRM:
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,#55AA
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
LD L,A
|
||||||
|
LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
PUSH IX
|
||||||
|
PUSH IY
|
||||||
|
;
|
||||||
|
LOGDRV_ENTRY_FIND LOGDRV
|
||||||
|
;
|
||||||
|
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
PUSH IY
|
||||||
|
LD C,BIOS.DRV_GET_PAR
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
LD A,DSS_Error.drv.INVALID_DRIVE
|
||||||
|
JR C,.error
|
||||||
|
; ¯¥à¥â ᮢª ॣ¨áâ஢ á १ã«ìâ ⮬ ®â BIOS
|
||||||
|
EX DE,HL
|
||||||
|
LD C,E
|
||||||
|
LD E,D
|
||||||
|
LD D,0
|
||||||
|
LD A,B
|
||||||
|
LD B,D
|
||||||
|
EXX
|
||||||
|
; SECTORS ON LOGICAL DISK
|
||||||
|
LD E,(IY+LOGDRV.SIZE_IN_SECTORS+0)
|
||||||
|
LD D,(IY+LOGDRV.SIZE_IN_SECTORS+1)
|
||||||
|
LD L,(IY+LOGDRV.SIZE_IN_SECTORS+2)
|
||||||
|
LD H,(IY+LOGDRV.SIZE_IN_SECTORS+3)
|
||||||
|
;
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
LD C,(IY+LOGDRV.PARTITION_RECORD_NUM) ; ®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
|
AND A
|
||||||
|
.error: POP IY
|
||||||
|
POP IX
|
||||||
|
RET
|
||||||
|
|
||||||
|
REMOV_H:
|
||||||
|
LD A,1
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RESE_H: XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
STAT_H: XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CHEK_H: ;LD A,#FF
|
||||||
|
XOR A
|
||||||
|
;AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
; DE - ADDRESS
|
||||||
|
; A - DRIVE
|
||||||
|
GBPB_H: PUSH IY
|
||||||
|
PUSH DE
|
||||||
|
LD L,A
|
||||||
|
;
|
||||||
|
LOGDRV_ENTRY_FIND LOGDRV
|
||||||
|
; !HARDCODE
|
||||||
|
LD E,(IY+1)
|
||||||
|
LD D,(IY+2)
|
||||||
|
LD L,(IY+3)
|
||||||
|
LD H,(IY+4)
|
||||||
|
LD XL,E
|
||||||
|
LD XH,D
|
||||||
|
LD A,(IY+0)
|
||||||
|
POP DE
|
||||||
|
POP IY
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A'- PAGE
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;READ SECTOR
|
||||||
|
LREADH: PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_READ_LONG
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A'- PAGE
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;WRITE SECTOR
|
||||||
|
LWRITEH:
|
||||||
|
PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_WRITE_LONG
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;WRITE SECTOR
|
||||||
|
WRITEH: PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_WRITE
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;READ SECTOR
|
||||||
|
READH: PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;CHECK SECTOR
|
||||||
|
CHECKH: PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_VERIFY
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;------------------------------[ PARTIT ]------------------------------;
|
||||||
|
DEFINE_PARTITIONS:
|
||||||
|
.FAT32_DOS: ;
|
||||||
|
.EASYDOS: ;
|
||||||
|
.MEDIDOS: ;
|
||||||
|
.HIGHDOS: ;
|
||||||
|
LD E,(IY + BOOT_SECTOR.Partition.Start_LBA + 0)
|
||||||
|
LD D,(IY + BOOT_SECTOR.Partition.Start_LBA + 1)
|
||||||
|
LD L,(IY + BOOT_SECTOR.Partition.Start_LBA + 2)
|
||||||
|
LD H,(IY + BOOT_SECTOR.Partition.Start_LBA + 3)
|
||||||
|
LD IX,(CURRENT_SECTOR_L)
|
||||||
|
ADD IX,DE
|
||||||
|
LD DE,(CURRENT_SECTOR_H)
|
||||||
|
ADC HL,DE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
;BPB SECTOR
|
||||||
|
LD IX,(OFFSECT)
|
||||||
|
LD (IX + LOGDRV.SECTOR_OFFSET + 0),E
|
||||||
|
LD (IX + LOGDRV.SECTOR_OFFSET + 1),D
|
||||||
|
LD (IX + LOGDRV.SECTOR_OFFSET + 2),L
|
||||||
|
LD (IX + LOGDRV.SECTOR_OFFSET + 3),H
|
||||||
|
LD E,(IY + BOOT_SECTOR.Partition.Size_LBA + 0)
|
||||||
|
LD D,(IY + BOOT_SECTOR.Partition.Size_LBA + 1)
|
||||||
|
LD L,(IY + BOOT_SECTOR.Partition.Size_LBA + 2)
|
||||||
|
LD H,(IY + BOOT_SECTOR.Partition.Size_LBA + 3)
|
||||||
|
;SIZE DISK
|
||||||
|
LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E
|
||||||
|
LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D
|
||||||
|
LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L
|
||||||
|
LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
.ExtendedPartitionFlag+1:
|
||||||
|
LD A,0
|
||||||
|
OR A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
LD A,#FF
|
||||||
|
JR NZ,.not_supported ; ¥á«¨ à áè¨à¥ë© à §¤¥«, â® ®¡«®¬
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
PUSH BC
|
||||||
|
LD A,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||||
|
SUB B
|
||||||
|
.not_supported: LD (IX + LOGDRV.PARTITION_RECORD_NUM),A
|
||||||
|
;
|
||||||
|
;!TEST <09>®¤áâà 客ª ®â ¯¥à¥¯®«¥¨ï â ¡«¨æë LOGDRV
|
||||||
|
LD A,(DRVCLC.count)
|
||||||
|
INC A
|
||||||
|
CP DSS_MAX_DRIVES_AMOUNT+1
|
||||||
|
RET NC
|
||||||
|
LD (DRVCLC.count),A
|
||||||
|
;
|
||||||
|
LD A,(DRV_NUM)
|
||||||
|
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
|
||||||
|
LD DE,LOGDRV.TBL_Entry ;DSKITEM
|
||||||
|
ADD IX,DE
|
||||||
|
LD (OFFSECT),IX
|
||||||
|
JP .NextPartition
|
||||||
|
;
|
||||||
|
.NotExtended: CP PartitionSysTypes.FAT16
|
||||||
|
JR Z,.HIGHDOS
|
||||||
|
CP PartitionSysTypes.FAT16_LBA
|
||||||
|
JR Z,.HIGHDOS
|
||||||
|
CP PartitionSysTypes.FAT16_32Mb
|
||||||
|
JR Z,.MEDIDOS
|
||||||
|
CP PartitionSysTypes.FAT12
|
||||||
|
JR Z,.EASYDOS
|
||||||
|
;[ ] fat32
|
||||||
|
CP PartitionSysTypes.FAT32
|
||||||
|
JP Z,.FAT32_DOS
|
||||||
|
CP PartitionSysTypes.FAT32_LBA
|
||||||
|
JP Z,.FAT32_DOS
|
||||||
|
;
|
||||||
|
CP PartitionSysTypes.Win_Ext_LBA
|
||||||
|
JR Z,.SubLevel
|
||||||
|
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¤¥â¥ªâ
|
||||||
|
;OR A ;PartitionSysTypes.Empty
|
||||||
|
;JR NZ,NXTPART
|
||||||
|
JR .NextPartition ; à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
;POP BC ; ¡ « á á⥪
|
||||||
|
;RET
|
||||||
|
;POP BC
|
||||||
|
;OR A
|
||||||
|
;RET Z
|
||||||
|
;NODEFIN:
|
||||||
|
;SCF
|
||||||
|
;RET
|
||||||
|
;
|
||||||
|
.BEGIN: IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
LD A,SHARED_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL .Start
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
RET
|
||||||
|
.Start: LD IX,0
|
||||||
|
LD DE,0
|
||||||
|
LD (EXTDOSL),DE ;R01
|
||||||
|
LD (EXTDOSH),IX ;R01
|
||||||
|
;
|
||||||
|
.LOOP: LD (CURRENT_SECTOR_L),DE
|
||||||
|
LD (CURRENT_SECTOR_H),IX
|
||||||
|
CALL .LOAD_SECTOR
|
||||||
|
;
|
||||||
|
LD HL,(PARTITION_BUFFER.MBR_SIGNATURE)
|
||||||
|
LD DE,#AA55
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||||
|
;JR NZ,NODEFIN
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
LD IY,PARTITION_BUFFER.PARTITION_TABLE ; Offset of partition table in the MBR
|
||||||
|
LD B,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||||
|
.DOSAGA: PUSH BC
|
||||||
|
LD A,(IY+_sMBR_PARTITION_RECORD.FS_ID)
|
||||||
|
CP PartitionSysTypes.Extended
|
||||||
|
JR Z,.SubLevel
|
||||||
|
CP PartitionSysTypes.Win_Ext_LBA
|
||||||
|
JR NZ,.NotExtended
|
||||||
|
;
|
||||||
|
.SubLevel: PUSH IY
|
||||||
|
LD DE,(CURRENT_SECTOR_L)
|
||||||
|
LD IX,(CURRENT_SECTOR_H)
|
||||||
|
PUSH DE
|
||||||
|
PUSH IX
|
||||||
|
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||||
|
LD A,(.ExtendedPartitionFlag)
|
||||||
|
INC A
|
||||||
|
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
;
|
||||||
|
CALL .ParseExtended
|
||||||
|
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||||
|
LD A,(.ExtendedPartitionFlag)
|
||||||
|
DEC A
|
||||||
|
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
;
|
||||||
|
POP IX
|
||||||
|
POP DE
|
||||||
|
LD (CURRENT_SECTOR_L),DE
|
||||||
|
LD (CURRENT_SECTOR_H),IX
|
||||||
|
CALL .LOAD_SECTOR
|
||||||
|
POP IY
|
||||||
|
.NextPartition: LD DE,_sMBR_PARTITION_RECORD ;Size of a partition table entry
|
||||||
|
ADD IY,DE
|
||||||
|
POP BC
|
||||||
|
DJNZ .DOSAGA
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.ParseExtended: LD HL,(EXTDOSL)
|
||||||
|
LD DE,(EXTDOSH)
|
||||||
|
LD A,L
|
||||||
|
OR H
|
||||||
|
OR E
|
||||||
|
OR D
|
||||||
|
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
|
||||||
|
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
|
||||||
|
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
|
||||||
|
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
|
||||||
|
JP NZ,.ext_in_ext
|
||||||
|
LD (EXTDOSL),DE
|
||||||
|
LD (EXTDOSH),HL
|
||||||
|
PUSH DE
|
||||||
|
JR .set_regs
|
||||||
|
;
|
||||||
|
.ext_in_ext: LD IX,(EXTDOSL)
|
||||||
|
ADD IX,DE
|
||||||
|
LD DE,(EXTDOSH)
|
||||||
|
ADC HL,DE
|
||||||
|
PUSH IX
|
||||||
|
.set_regs: PUSH HL
|
||||||
|
POP IX
|
||||||
|
POP DE
|
||||||
|
JP .LOOP
|
||||||
|
;
|
||||||
|
.LOAD_SECTOR: PUSH IY
|
||||||
|
LD IX,(CURRENT_SECTOR_L)
|
||||||
|
LD HL,(CURRENT_SECTOR_H)
|
||||||
|
LD DE,PARTITION_BUFFER
|
||||||
|
LD A,(DRV_NUM)
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
;=======================================================================
|
||||||
|
; PHISICAL DRIVE NUMBER
|
||||||
|
; #80/#81 - primary ¬ áâ¥à/á«¥©¢, #82/#83 - secondary ¬ áâ¥à/á«¥©¢
|
||||||
|
DRV_NUM: DB #00
|
||||||
|
CURRENT_SECTOR_L: DW #0000
|
||||||
|
CURRENT_SECTOR_H: DW #0000
|
||||||
|
EXTDOSL: DW #0000 ;CURRENT PARTITION TABLE
|
||||||
|
EXTDOSH: DW #0000
|
||||||
|
OFFSECT: DW LOGDRV ;POINTER ON CURRENT DISK RECORD
|
||||||
|
;=======================================================================
|
||||||
533
DSS/drivers/media/ram_disk-drv.asm
Normal file
533
DSS/drivers/media/ram_disk-drv.asm
Normal file
@ -0,0 +1,533 @@
|
|||||||
|
|
||||||
|
|
||||||
|
; SYSPAGE EQU #FE
|
||||||
|
; SLOT1 EQU #A2
|
||||||
|
; SLOT2 EQU #C2
|
||||||
|
; SLOT3 EQU #E2
|
||||||
|
|
||||||
|
; ORG #3CDB
|
||||||
|
; Disk Driver Specification ver. 2.20
|
||||||
|
;[]===========================================================[ 0]
|
||||||
|
;Procedure : Initialization
|
||||||
|
;
|
||||||
|
;Function : Initialization device(s)
|
||||||
|
;
|
||||||
|
;Input : C = 00h
|
||||||
|
; IX - Environment
|
||||||
|
;Output : A = Amount drive support
|
||||||
|
; HL = Size driver
|
||||||
|
;[]===========================================================[ 0]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 1]
|
||||||
|
;Procedure : Open
|
||||||
|
;
|
||||||
|
;Function : Open disk
|
||||||
|
;
|
||||||
|
;Input : C = 01h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 1]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 2]
|
||||||
|
;Procedure : Close
|
||||||
|
;
|
||||||
|
;Function : Close disk
|
||||||
|
;
|
||||||
|
;Input : C = 02h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 2]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 3]
|
||||||
|
;!TODO
|
||||||
|
;Procedure : Media check
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 03h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h disk no changed
|
||||||
|
; A = 0FFh disk changed
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 3]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 4]
|
||||||
|
;Procedure : Get BPB
|
||||||
|
;
|
||||||
|
;Function : Get Block Parameters BIOS
|
||||||
|
;
|
||||||
|
;Input : C = 04h
|
||||||
|
; DE - Address
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 4]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 5]
|
||||||
|
;Procedure : Input
|
||||||
|
;
|
||||||
|
;Function : Input from disk
|
||||||
|
;
|
||||||
|
;Input : C = 05h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 5]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 6]
|
||||||
|
;Procedure : Output
|
||||||
|
;
|
||||||
|
;Function : Output to disk
|
||||||
|
;
|
||||||
|
;Input : C = 06h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 6]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 7]
|
||||||
|
;!TODO
|
||||||
|
;Procedure : Removable
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 07h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h Removable
|
||||||
|
; A = FFh Nonremovable
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 7]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 8]
|
||||||
|
;Procedure : Generic IOCTL
|
||||||
|
;
|
||||||
|
;Function : Generic Input Output Control
|
||||||
|
;
|
||||||
|
;Input : C = 08h
|
||||||
|
; B - Subcommand
|
||||||
|
; DE = 55AAh Magic Number
|
||||||
|
; Subcommand
|
||||||
|
;----------------------
|
||||||
|
; 00h - Get Device Parameters
|
||||||
|
; 01h - Read track
|
||||||
|
; 02h - Test track
|
||||||
|
; 80h - Set Device Parameters
|
||||||
|
; 81h - Write track
|
||||||
|
; 82h - Format track
|
||||||
|
;Output :
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 8]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 9]
|
||||||
|
; RESERVED
|
||||||
|
;[]===========================================================[ 9]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 10]
|
||||||
|
;!TODO
|
||||||
|
;Procedure : Read Long
|
||||||
|
;
|
||||||
|
;Function : Reading sectors from disk
|
||||||
|
;
|
||||||
|
;Input : C = 0Ah
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
; A'- Page
|
||||||
|
;Output : A'- Next Page
|
||||||
|
; HL:IX - Next Logical Block (sector)
|
||||||
|
; DE - Next Address
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 10]
|
||||||
|
|
||||||
|
|
||||||
|
;[]===========================================================[ 11]
|
||||||
|
;!TODO
|
||||||
|
;Procedure : Write Long
|
||||||
|
;
|
||||||
|
;Function : Writing sectors to disk
|
||||||
|
;
|
||||||
|
;Input : C = 0Bh
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
; A'- Page
|
||||||
|
;Output : A'- Next Page
|
||||||
|
; HL:IX - Next Logical Block (sector)
|
||||||
|
; DE - Next Address
|
||||||
|
;
|
||||||
|
;[]===========================================================[ 11]
|
||||||
|
;
|
||||||
|
; Errors:
|
||||||
|
; 0 (00h) - NO ERRORS
|
||||||
|
; 1 (01h) - BAD COMMAND
|
||||||
|
; 2 (02h) - BAD DRIVE NUMBER
|
||||||
|
; 3 (03h) - UNKNOW FORMAT
|
||||||
|
; 4 (04h) - NOT READY
|
||||||
|
; 5 (05h) - SEEK ERROR
|
||||||
|
; 6 (06h) - SECTOR NOT FOUND
|
||||||
|
; 7 (07h) - CRC ERROR
|
||||||
|
; 8 (08h) - WRITE PROTECT
|
||||||
|
; 9 (09h) - READ ERROR
|
||||||
|
; 10 (0Ah) - WRITE ERROR
|
||||||
|
; 11 (0Bh) - FAILURE
|
||||||
|
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
||||||
|
; 13 (0Dh) - RESERVED
|
||||||
|
|
||||||
|
|
||||||
|
; MACRO CALL GET_RAMDRV_NUM
|
||||||
|
; LD BC,RAMDTBL
|
||||||
|
; SLA A
|
||||||
|
; ADD A,C
|
||||||
|
; LD C,A
|
||||||
|
; LD A,0
|
||||||
|
; ADC A,B
|
||||||
|
; LD B,A
|
||||||
|
; INC BC
|
||||||
|
; LD A,(BC)
|
||||||
|
; OR #60 ;!HARDCODE ᤥ« âì ®¬¥à à §ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
|
||||||
|
; ENDM
|
||||||
|
|
||||||
|
|
||||||
|
; parser
|
||||||
|
RMDRIVE: INC C
|
||||||
|
DEC C
|
||||||
|
JP Z,INIT_RD ; 0
|
||||||
|
DEC C
|
||||||
|
JR Z,RESET_RD ; 1
|
||||||
|
DEC C
|
||||||
|
JR Z,STATUS_RD ; 2
|
||||||
|
DEC C
|
||||||
|
JR Z,CHEK_RD ; 3
|
||||||
|
DEC C
|
||||||
|
JR Z,GBPB_RD ; 4
|
||||||
|
DEC C
|
||||||
|
JR Z,READ_RD ; 5
|
||||||
|
DEC C
|
||||||
|
JR Z,WRITE_RD ; 6
|
||||||
|
DEC C
|
||||||
|
JR Z,REMOV_RD ; 7
|
||||||
|
DEC C
|
||||||
|
JP Z,IOCTL_RD ; 8
|
||||||
|
DEC C
|
||||||
|
JP Z,.error ; 9 RESR_H
|
||||||
|
DEC C
|
||||||
|
JP Z,LREAD_RD ; 10
|
||||||
|
DEC C
|
||||||
|
JP Z,LWRITE_RD ; 11
|
||||||
|
.error:
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
REMOV_RD:
|
||||||
|
RESET_RD:
|
||||||
|
STATUS_RD: XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;!FIXIT ᤥ« âì ¢ SYS_PAGE ¤«ï à ¬¤¨áª®¢ ¯¥à¥¬¥ë¥ ¨ ¡à âì ®ââ㤠§ 票¥
|
||||||
|
;!FIXIT ª ª-â® ®¯à¥¤¥«ïâì ᬥã RMD?
|
||||||
|
; [x] 18/08/2024 ¯®ª ¥¬®£® ª®áâë«ì® ¨ ®¯ á®
|
||||||
|
CHEK_RD: ;LD A,#FF
|
||||||
|
;AND A
|
||||||
|
XOR A
|
||||||
|
;
|
||||||
|
RET
|
||||||
|
|
||||||
|
;DE - ADDRESS
|
||||||
|
GBPB_RD: LD IX,0
|
||||||
|
LD HL,0
|
||||||
|
LD B,#01
|
||||||
|
;JP READ_RD
|
||||||
|
;READ SECTORS
|
||||||
|
; HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
READ_RD: PUSH BC
|
||||||
|
CALL GET_RAMDRV_NUM
|
||||||
|
POP BC
|
||||||
|
LD C,BIOS.DRV_READ
|
||||||
|
JP ToBIOS
|
||||||
|
; RST ToBIOS
|
||||||
|
; XOR A
|
||||||
|
; RET
|
||||||
|
LREAD_RD:
|
||||||
|
PUSH BC
|
||||||
|
CALL GET_RAMDRV_NUM
|
||||||
|
POP BC
|
||||||
|
LD C,BIOS.DRV_READ_LONG
|
||||||
|
JP ToBIOS
|
||||||
|
; RST ToBIOS
|
||||||
|
; XOR A
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;WRITE SECTORS
|
||||||
|
; HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
WRITE_RD:
|
||||||
|
PUSH BC
|
||||||
|
CALL GET_RAMDRV_NUM
|
||||||
|
POP BC
|
||||||
|
LD C,BIOS.DRV_WRITE
|
||||||
|
JP ToBIOS
|
||||||
|
; RST ToBIOS
|
||||||
|
; XOR A
|
||||||
|
; RET
|
||||||
|
|
||||||
|
LWRITE_RD:
|
||||||
|
PUSH BC
|
||||||
|
CALL GET_RAMDRV_NUM
|
||||||
|
POP BC
|
||||||
|
LD C,BIOS.DRV_WRITE_LONG
|
||||||
|
JP ToBIOS
|
||||||
|
; RST ToBIOS
|
||||||
|
; XOR A
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;
|
||||||
|
;;
|
||||||
|
;;;
|
||||||
|
;----------------------------------------------------------------------;!TEST
|
||||||
|
; ;S_P_P DB #00
|
||||||
|
; INIT_RD:
|
||||||
|
; ; .SectorSize EQU 512 ;!HARDCODE
|
||||||
|
; ; LD HL,.SectorSize
|
||||||
|
; ; LD A,#80
|
||||||
|
; ; .loop: SRL A
|
||||||
|
; ; RR H
|
||||||
|
; ; JR NC,.loop
|
||||||
|
; ; LD (S_P_P),A
|
||||||
|
|
||||||
|
; LD BC,#0*256 + BIOS.GET_RAMD_ST ; <20>®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª , § 祮£® RAM-Disk
|
||||||
|
; LD DE,RAMDTBL
|
||||||
|
; .initLoop:
|
||||||
|
; PUSH BC
|
||||||
|
; LD A,B
|
||||||
|
; PUSH DE
|
||||||
|
; RST ToBIOS
|
||||||
|
; POP DE
|
||||||
|
; OR A
|
||||||
|
; JR Z,.noDRV
|
||||||
|
|
||||||
|
; LD (DE),A
|
||||||
|
; INC DE
|
||||||
|
; POP BC
|
||||||
|
; LD A,B
|
||||||
|
; LD (DE),A
|
||||||
|
; INC DE
|
||||||
|
; JP 1F
|
||||||
|
; .noDRV: POP BC
|
||||||
|
; 1: INC B
|
||||||
|
; LD A,RAMDTBL.Size / RAMDTBL.TBL_Entry
|
||||||
|
; CP B
|
||||||
|
; JR NZ,.initLoop
|
||||||
|
|
||||||
|
; LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL
|
||||||
|
; EX DE,HL
|
||||||
|
; AND A ;!FIXIT ----
|
||||||
|
; SBC HL,DE ;!FIXIT ADD HL,DE
|
||||||
|
; SRL L
|
||||||
|
; LD A,L
|
||||||
|
; ; LD HL,ENDDRVR
|
||||||
|
; AND A
|
||||||
|
; RET
|
||||||
|
;----------------------------------------------------------------------;!TEST
|
||||||
|
;;;
|
||||||
|
;;
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;;
|
||||||
|
;;;
|
||||||
|
;----------------------------------------------------------------------;!TEST
|
||||||
|
;S_P_P DB #00
|
||||||
|
INIT_RD:
|
||||||
|
; .SectorSize EQU 512 ;!HARDCODE
|
||||||
|
; LD HL,.SectorSize
|
||||||
|
; LD A,#80
|
||||||
|
; .loop: SRL A
|
||||||
|
; RR H
|
||||||
|
; JR NC,.loop
|
||||||
|
; LD (S_P_P),A
|
||||||
|
|
||||||
|
LD BC,0*256+BIOS.GET_RAMD_ST ; <20>®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª , § 祮£® RAM-Disk
|
||||||
|
LD DE,RAMDTBL
|
||||||
|
.initLoop: PUSH BC
|
||||||
|
LD A,B
|
||||||
|
PUSH DE
|
||||||
|
RST ToBIOS
|
||||||
|
POP DE
|
||||||
|
OR A
|
||||||
|
JR Z,.noDRV
|
||||||
|
;
|
||||||
|
INC DE
|
||||||
|
LD (DE),A
|
||||||
|
DEC DE
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
LD A,B
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
INC DE
|
||||||
|
JP .skip_pop
|
||||||
|
;
|
||||||
|
.noDRV: POP BC
|
||||||
|
.skip_pop: INC B
|
||||||
|
LD A,RAMDTBL.Size/RAMDTBL.TBL_Entry
|
||||||
|
CP B
|
||||||
|
JR NZ,.initLoop
|
||||||
|
|
||||||
|
LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL
|
||||||
|
EX DE,HL
|
||||||
|
AND A ;!FIXIT ----
|
||||||
|
SBC HL,DE ;!FIXIT ADD HL,DE
|
||||||
|
SRL L
|
||||||
|
LD A,L
|
||||||
|
; LD HL,ENDDRVR
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;!TEST
|
||||||
|
;;;
|
||||||
|
;;
|
||||||
|
;
|
||||||
|
|
||||||
|
; ;
|
||||||
|
; ; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||||||
|
; ; Log Number: DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
|
||||||
|
; RAMDTBL.TBL_Entry EQU 2
|
||||||
|
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
||||||
|
; DB #FF
|
||||||
|
; EDUP
|
||||||
|
; .Size EQU $-RAMDTBL
|
||||||
|
; ;
|
||||||
|
|
||||||
|
|
||||||
|
; 00 - GET DEVICE PARAMETERS
|
||||||
|
; 01 - READ TRACK
|
||||||
|
; 02 - TEST TRACK
|
||||||
|
; 80 - SET DEVICE PARAMETERS
|
||||||
|
; 81 - WRITE TRACK
|
||||||
|
; 82 - FORMAT TRACK
|
||||||
|
IOCTL_RD:
|
||||||
|
BIT 7,B
|
||||||
|
JR NZ,.O_CTL_F
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,.RGETPRM
|
||||||
|
;DEC B
|
||||||
|
;JP Z,FRDTRAC
|
||||||
|
;DEC B
|
||||||
|
;JP Z,FCHTRAC
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
.O_CTL_F: ;RES 7,B
|
||||||
|
;INC B
|
||||||
|
;DEC B
|
||||||
|
;JP Z,.RSETPRM
|
||||||
|
;DEC B
|
||||||
|
;JP Z,FWRTRAC
|
||||||
|
;DEC B
|
||||||
|
;JP Z,FFRTRAC
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
; HL:DE - SECTORS ON LOGICAL DISK
|
||||||
|
; HL' - CYLINDERS ON PHISICAL DISK
|
||||||
|
; DE' - HEADS ON PHISICAL DISK
|
||||||
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
|
; A' - PHISICAL DRIVE NUMBER
|
||||||
|
; A - EXTENDED INFORMATION
|
||||||
|
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
||||||
|
; D4 - DEVICE MASTER/SLAVE
|
||||||
|
; D5 - "1" RESERVED
|
||||||
|
; D6 - ADDRESSING MODE LBA/CHS
|
||||||
|
; D7 - "1" RESERVED
|
||||||
|
.RGETPRM: EX DE,HL
|
||||||
|
LD BC,#55AA
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
LD L,A
|
||||||
|
LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,L
|
||||||
|
CALL GET_RAMDRV_NUM
|
||||||
|
PUSH AF
|
||||||
|
PUSH AF
|
||||||
|
EX AF,AF'
|
||||||
|
|
||||||
|
POP AF
|
||||||
|
LD C,BIOS.DRV_GET_PAR
|
||||||
|
RST ToBIOS
|
||||||
|
|
||||||
|
PUSH HL ;ç¨á«® £®«®¢®ª, ç¨á«® ᥪâ®à®¢ ( 楫¨¤à)
|
||||||
|
PUSH DE ;ª®«¨ç¥á⢮ 樫¨¤à®¢
|
||||||
|
EXX
|
||||||
|
POP HL ;ª®«¨ç¥á⢮ 樫¨¤à®¢
|
||||||
|
POP BC ;ç¨á«® ᥪâ®à®¢ ( 楫¨¤à)
|
||||||
|
LD D,0
|
||||||
|
LD E,B ;ç¨á«® £®«®¢®ª
|
||||||
|
LD B,D
|
||||||
|
EXX
|
||||||
|
|
||||||
|
LD A,L
|
||||||
|
|
||||||
|
RRA
|
||||||
|
JR C,.end
|
||||||
|
.loopShift: SLA E
|
||||||
|
RL D
|
||||||
|
RRA
|
||||||
|
JR NC,.loopShift
|
||||||
|
;
|
||||||
|
.end: EX AF,AF'
|
||||||
|
POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
XOR A
|
||||||
|
LD L,A
|
||||||
|
LD H,L
|
||||||
|
LD C,A ;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
LD A,%10100000
|
||||||
|
RET
|
||||||
|
|
||||||
|
; !TODO
|
||||||
|
; !FIXIT
|
||||||
|
; .RSETPRM: AND A
|
||||||
|
; RET
|
||||||
|
|
||||||
|
GET_RAMDRV_NUM: LD BC,RAMDTBL
|
||||||
|
.skip_tbl: ADD A,A
|
||||||
|
ADD A,C
|
||||||
|
LD C,A
|
||||||
|
LD A,0
|
||||||
|
ADC A,B
|
||||||
|
LD B,A
|
||||||
|
;INC BC
|
||||||
|
LD A,(BC)
|
||||||
|
OR #60 ;!HARDCODE ᤥ« âì ®¬¥à à §ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;ENDDRVR EQU $
|
||||||
|
;
|
||||||
290
DSS/drivers/media/shared-drv.asm
Normal file
290
DSS/drivers/media/shared-drv.asm
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: Shared AUTHOR: Denis Parinov
|
||||||
|
;//CREATE: A LONG TIME AGO :)
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;R01 17-04-2023 BAO „®¡ ¢«¥ ¯à®æ¥¤ãà INITDVC_RET_DRIVE ¨ ¨§¬¥¥ INTDISK ¤«ï ¯®¤¤¥à¦ª¨ à¥áª ¤à ©¢®¢
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; DISK DRIVER SPECIFICATION
|
||||||
|
; !FIXIT ¥ª®à४â ï!
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 00h (INITIALIZATION)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE LETTER
|
||||||
|
; IX - ENVIRONMENT
|
||||||
|
; RETURN: A - AMOUNT DRIVE SUPPORT
|
||||||
|
; HL - LENGTH DRIVER
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 01h (OPEN)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
;
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 02h (CLOSE)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
; RETURN: A -
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 03h (MEDIA CHECK)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
; RETURN: A - 00h - OLD DISK, 0FFh - NEW DISK
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 04h (GET BPB)
|
||||||
|
;
|
||||||
|
; INPUT: HL - ADDRESS
|
||||||
|
; A - DRIVE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 05h (INPUT)
|
||||||
|
;
|
||||||
|
; INPUT: IX:DE - ABSOLUTE SECTOR
|
||||||
|
; HL - MEMORY ADDRESS
|
||||||
|
; B - SECTORS COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 06h (OUTPUT)
|
||||||
|
;
|
||||||
|
; INPUT: IX:DE - ABSOLUTE SECTOR
|
||||||
|
; HL - MEMORY ADDRESS
|
||||||
|
; B - SECTORS COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 07h (REMOVABLE)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
; RETURN: A = 0 - REMOVABLE
|
||||||
|
; A = 1 - NONREMOVABLE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 08h (GENERIC IOCTL)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
; B - SUBCOMMAND
|
||||||
|
; DE - MAGIC NUMBER (55AAh)
|
||||||
|
; SUBCOMMAND
|
||||||
|
;----------------------
|
||||||
|
; 00 - GET DEVICE PARAMETERS
|
||||||
|
; 01 - READ TRACK
|
||||||
|
; 02 - TEST TRACK
|
||||||
|
; 80 - SET DEVICE PARAMETERS
|
||||||
|
; 81 - WRITE TRACK
|
||||||
|
; 82 - FORMAT TRACK
|
||||||
|
;---------------------------------------------
|
||||||
|
;
|
||||||
|
; ERRORS:
|
||||||
|
; 0 - NO ERRORS
|
||||||
|
; 1 - BAD COMMAND
|
||||||
|
; 2 - BAD DRIVE NUMBER
|
||||||
|
; 3 - UNKNOW FORMAT
|
||||||
|
; 4 - NOT READY
|
||||||
|
; 5 - SEEK ERROR
|
||||||
|
; 6 - SECTOR NOT FOUND
|
||||||
|
; 7 - CRC ERROR
|
||||||
|
; 8 - WRITE PROTECT
|
||||||
|
; 9 - READ ERROR
|
||||||
|
; 10 - WRITE ERROR
|
||||||
|
; 11 - FAILURE
|
||||||
|
; 12 - BUSY (DEVICE OPENED)
|
||||||
|
; 13 - RESERVED
|
||||||
|
|
||||||
|
;INTDISK PUSH HL
|
||||||
|
; PUSH BC
|
||||||
|
; LD HL,DEVICE
|
||||||
|
; INC A
|
||||||
|
;INTD001 DEC A
|
||||||
|
; JP Z,YEP
|
||||||
|
; LD C,(HL)
|
||||||
|
; INC C
|
||||||
|
; INC HL
|
||||||
|
; INC HL
|
||||||
|
; INC HL
|
||||||
|
; JP NZ,INTD001
|
||||||
|
; POP BC
|
||||||
|
; POP HL
|
||||||
|
; LD A,2
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;YEP LD A,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD C,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD H,(HL)
|
||||||
|
; LD L,C
|
||||||
|
; POP BC
|
||||||
|
; EX (SP),HL
|
||||||
|
; RET
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------
|
||||||
|
; <20>à®áª ¨à®¢ âì á¨á⥬ã FDD/HDD ¤¥¢ ©áë ¨ RAM-¤¨áª¨
|
||||||
|
;-----------------------------------------------------------
|
||||||
|
INITDVC: XOR A
|
||||||
|
LD (DRV_PAGE.LDRIVE),A ; á¡à. ï祩ªã
|
||||||
|
LD HL,DEVICE
|
||||||
|
LD (PDEVICE),HL ; ¢®ááâ. ï祩ªã
|
||||||
|
; ‡ ç¨á⪠⠡«¨æ. <20>¥®¡ï§ ⥫ì®, ® ¬ «® «¨ çñ ¡ã¤¥â ¤ «ìè¥... ;[ ]
|
||||||
|
LD HL,DEVICE
|
||||||
|
LD (HL),#FF
|
||||||
|
LD DE,DEVICE+1
|
||||||
|
LD BC,DEVICE.Size + LOGDRV.Size + RAMDTBL.Size - 1
|
||||||
|
LDIR
|
||||||
|
; FDD ¤¥¢ ©áë
|
||||||
|
CALL FDD_DRV.Init ; ã§ âì ç¨á«® FDD-¤¥¢ ©á®¢
|
||||||
|
LD DE,FDD_DRV.API_TABLE ; ¤à¥á ®¡à ¡®â稪 ⥪. ¤¥¢ ©á
|
||||||
|
CALL MAKEDVC ; ¨¨æ. â ¡«¨æã ¯¥à¥å®¤®¢
|
||||||
|
; HDD ¤¥¢ ©áë
|
||||||
|
.if_old: CALL INIT_H ; ¥á«¨ áâ à⥠¢¥àá¨ï BIOS ¥ ¯®¤å®¤¨â, â® £à㧨âìáï ¬®¦® ⮫쪮 á ¤¨áª¥âë, ¤«ï í⮣® âãâ § ¬¥ ª®¤ XOR A : RET
|
||||||
|
LD DE,HDDRIVE
|
||||||
|
CALL MAKEDVC
|
||||||
|
; RAM-¤¨áª¨
|
||||||
|
CALL INIT_RD
|
||||||
|
LD DE,RMDRIVE
|
||||||
|
CALL MAKEDVC
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; ˆ¨æ¨¨à®¢ âì â ¡«¨æã ¯¥à¥å®¤®¢ ¤¥¢ ©á .
|
||||||
|
; ¢å®¤: de= ¤à¥á ®¡à ¡®â稪 ¤¥¢ ©á
|
||||||
|
; a=ç¨á«® ¤¥¢ ©á®¢ (0=¥â)
|
||||||
|
MAKEDVC: LD C,A
|
||||||
|
LD HL,DRV_PAGE.LDRIVE ; ï祩ª ®¬¥à ¯®á«. ¤¨áª
|
||||||
|
ADD A,(HL)
|
||||||
|
LD (HL),A
|
||||||
|
;!TEST ;[ ] ®¯â¨¬¨§¨à®¢ âì ¡ë«® «¥ì
|
||||||
|
CP DSS_MAX_DRIVES_AMOUNT+1
|
||||||
|
JR C,1F
|
||||||
|
LD (HL),DSS_MAX_DRIVES_AMOUNT
|
||||||
|
SUB DSS_MAX_DRIVES_AMOUNT
|
||||||
|
NEG
|
||||||
|
ADD C
|
||||||
|
JP 2F
|
||||||
|
;
|
||||||
|
1: LD A,C
|
||||||
|
OR A
|
||||||
|
RET Z ; ¥â ¤¥¢ ©á®¢
|
||||||
|
2: LD C,0 ; á¡à.
|
||||||
|
LD HL,(PDEVICE) ; ⥪. ¯®«®¦. ¢ â ¡«¨æ¥
|
||||||
|
.loop: LD (HL),C ; ®¬¥à «®£.¤à ©¢ í⮣® ãáâனáâ¢
|
||||||
|
INC HL
|
||||||
|
LD (HL),E ; de= ¤à¥á ®¡à ¡®â稪
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
INC C ; ++®¬¥à ¤à ©¢
|
||||||
|
DEC A
|
||||||
|
JR NZ,.loop
|
||||||
|
LD (PDEVICE),HL
|
||||||
|
DEC 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 'ReScanDRV.ASM'
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
;DEVICE DB #00
|
||||||
|
; DW FDDRIVE ; FDD A
|
||||||
|
; DB #01
|
||||||
|
; DW FDDRIVE ; FDD B
|
||||||
|
; DB #00
|
||||||
|
; DW HDDRIVE ; HDD C
|
||||||
|
; DB #01
|
||||||
|
; DW HDDRIVE ; HDD D
|
||||||
|
; DB #02
|
||||||
|
; DW HDDRIVE ; HDD E
|
||||||
|
; DB #03
|
||||||
|
; DW HDDRIVE ; HDD F
|
||||||
|
; DB #04
|
||||||
|
; DW HDDRIVE ; HDD G
|
||||||
|
; DB #05
|
||||||
|
; DW HDDRIVE ; HDD H
|
||||||
|
; DB #06
|
||||||
|
; DW HDDRIVE ; HDD I
|
||||||
|
; DB #07
|
||||||
|
; DW HDDRIVE ; HDD J
|
||||||
|
; DB #FF
|
||||||
Loading…
Reference in New Issue
Block a user