mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-16 01:41:17 +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
|
||||
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
||||
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
||||
;R008 - 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS
|
||||
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||
;R10 - 03-04-2003 DNS IMPROVED FN. VERSION
|
||||
;R008 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS
|
||||
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
||||
;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"
|
||||
;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
|
||||
;R003 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
|
||||
;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
|
||||
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
||||
;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)
|
||||
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
||||
;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/bootDsk.asm'
|
||||
include 'API/curDisk.asm'
|
||||
@ -67,6 +82,7 @@
|
||||
include 'API/Lib_Sub.asm'
|
||||
include "API/EXECUTE.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
|
||||
;LD (OPEN.TMP),A ; à ¡. ï祩ª (§¤¥áì âਡãâ § ¯¨á¨)
|
||||
;
|
||||
CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
|
||||
@ -34,7 +34,7 @@ CHDIR_FN:
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
CHDIR: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
CHDIR: CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
RET C
|
||||
LD HL,TMPNAME
|
||||
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
|
||||
LD (.TMP),A
|
||||
LD (.PATH0),HL
|
||||
CALL GETWORD
|
||||
CALL SetPath_GetName
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
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
|
||||
RET C
|
||||
;
|
||||
.old_EXE: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
.old_EXE: CALL SetPath_GetName ; âĽáâ ¤ŽŻăáâ. ¨Źď ¨ áâŕ. ¤¨áŞ
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
|
||||
@ -96,7 +96,7 @@ EXEC_1: ;LD (CMDLINE),HL
|
||||
LD HL,(CMDLINE)
|
||||
LD A,FAT_ATTR.READ_ONLY
|
||||
LD (OPEN_FN.TMP),A
|
||||
CALL GETWORD
|
||||
CALL SetPath_GetName
|
||||
RET C
|
||||
; LD HL,TMPNAME
|
||||
; LD DE,MASKARE
|
||||
@ -407,7 +407,7 @@ FRC000: LD A,(DE)
|
||||
CALL MOVE_FP
|
||||
;
|
||||
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)
|
||||
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||
|
||||
@ -30,7 +30,7 @@ F_FIRST_FN: CALL F_FIRST.INIT_VARS
|
||||
JR F_FIRST.begin
|
||||
;
|
||||
F_FIRST: CALL .INIT_VARS
|
||||
.begin: CALL GETWORD
|
||||
.begin: CALL SetPath_GetName
|
||||
;CALL LOADDIR
|
||||
RET C
|
||||
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
|
||||
RET
|
||||
;
|
||||
.START: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
.START: CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
@ -40,7 +40,7 @@ MKDIR:
|
||||
;
|
||||
CALL MASK
|
||||
RET C
|
||||
;!TEST optimization à ¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
|
||||
;!TEST optimization à ¥¥ SetPath_GetName 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
|
||||
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
;
|
||||
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
|
||||
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
|
||||
;R008 ;
|
||||
.start: CALL GETWORD
|
||||
.start: CALL SetPath_GetName
|
||||
RET C
|
||||
CALL MASK
|
||||
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
|
||||
;
|
||||
.old_EXE: ;
|
||||
; !TODO ЂЎтЊуть тут GETWORD, чтЎЁ ЌЎІЎ ЁыЋЎ уЄ Ћять ЏЎ ЎтЎсЈтЅЋьыЌ ЏутяЌ?
|
||||
; !TODO ЂЎтЊуть тут SetPath_GetName, чтЎЁ ЌЎІЎ ЁыЋЎ уЄ Ћять ЏЎ ЎтЎсЈтЅЋьыЌ ЏутяЌ?
|
||||
;
|
||||
; [ ] 26/06/2024
|
||||
PUSH HL
|
||||
|
||||
@ -28,7 +28,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
.START: CALL GETWORD
|
||||
.START: CALL SetPath_GetName
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
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
|
||||
RST ToBIOS
|
||||
JP C,.NOCMOS
|
||||
;
|
||||
LD D,CMOS.Register.date
|
||||
CALL RCMOS
|
||||
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
|
||||
;
|
||||
158
DSS/DOS_Proc.asm
158
DSS/DOS_Proc.asm
@ -7,8 +7,8 @@
|
||||
;---------------------------------------------------------------
|
||||
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
||||
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
||||
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||
;R10 - 03-04-2003 DNS IMPROVED FN. VERSION
|
||||
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
||||
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
||||
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
||||
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
||||
@ -86,10 +86,12 @@ GetName: LD BC,#08FF ;!HARDCODE
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; old GETWORD
|
||||
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
||||
; ¢å®¤: hl=áâப ¨¬¥¨
|
||||
; ¢ë室: (TMPNAME)
|
||||
GETWORD: ; !TEST
|
||||
SetPath_GetName:
|
||||
; !TEST
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
DEC HL
|
||||
@ -297,16 +299,17 @@ MASK: LD HL,TMPNAME
|
||||
CP ' '+1
|
||||
CCF
|
||||
RET NC
|
||||
CP '"'
|
||||
JR Z,.MASK_ERR
|
||||
;
|
||||
CP '*'
|
||||
JR Z,.MASK3
|
||||
CP '.'
|
||||
JR Z,.MASK5
|
||||
CP '"'
|
||||
JR Z,.MASK_ERR
|
||||
CP '+'
|
||||
JR Z,.MASK_ERR
|
||||
CP ','
|
||||
JR Z,.MASK_ERR
|
||||
CP '.'
|
||||
JR Z,.MASK5
|
||||
CP '/'
|
||||
JR Z,.MASK_ERR
|
||||
CP ':'
|
||||
@ -327,11 +330,6 @@ MASK: LD HL,TMPNAME
|
||||
JR Z,.MASK_ERR
|
||||
CP '|'
|
||||
JR Z,.MASK_ERR
|
||||
; CP 'a' ;?????
|
||||
; JR C,.MASK2
|
||||
; CP 'z' + 1
|
||||
; JR NC,.MASK2
|
||||
; SUB #20
|
||||
CALL UPPER ; a..z -> A..Z
|
||||
.MASK2: LD (DE),A
|
||||
INC HL
|
||||
@ -340,36 +338,34 @@ MASK: LD HL,TMPNAME
|
||||
.MASK_ERR:
|
||||
LD A,DSS_Error.sys.INVALID_NAME
|
||||
SCF
|
||||
RET
|
||||
RET
|
||||
;
|
||||
.MASK3: LD A,'?'
|
||||
INC HL
|
||||
DJNZ .MASK6
|
||||
LD A,DSS_Error.sys.INVALID_NAME
|
||||
SCF
|
||||
RET
|
||||
JR .MASK_ERR
|
||||
;
|
||||
.MASK6: LD (DE),A
|
||||
INC DE
|
||||
DJNZ .MASK6
|
||||
LD B,1
|
||||
JR .MASK1
|
||||
;
|
||||
.MASK5: LD A,' '
|
||||
INC HL
|
||||
DJNZ .MASK4
|
||||
LD B,4
|
||||
DEC C
|
||||
JP NZ,.MASK1
|
||||
LD A,DSS_Error.sys.INVALID_NAME
|
||||
SCF
|
||||
RET
|
||||
JR NZ,.MASK1
|
||||
JR .MASK_ERR
|
||||
;
|
||||
.MASK4: LD (DE),A
|
||||
INC DE
|
||||
DJNZ .MASK4
|
||||
LD B,4
|
||||
DEC C
|
||||
JP NZ,.MASK1
|
||||
LD A,DSS_Error.sys.INVALID_NAME
|
||||
SCF
|
||||
RET
|
||||
JR NZ,.MASK1
|
||||
JR .MASK_ERR
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
@ -445,7 +441,7 @@ DIR_PATH_CHECK: LD A,(HL)
|
||||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||
RET C
|
||||
LD HL,CORE_BUFFERS.CurrentPath
|
||||
JP GETWORD
|
||||
JP SetPath_GetName
|
||||
;
|
||||
.end: CP (HL)
|
||||
RET Z
|
||||
@ -469,3 +465,115 @@ CHECK_NAME:
|
||||
SCF
|
||||
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]
|
||||
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
||||
INCLUDE "KEYINTER.ASM"
|
||||
INCLUDE "VIDEO.ASM"
|
||||
INCLUDE "API.ASM"
|
||||
INCLUDE "DOS_Proc.asm"
|
||||
INCLUDE "FS/FAT/FAT.ASM"
|
||||
INCLUDE "FS/FAT/FAT_X.ASM"
|
||||
INCLUDE "DOS_FM.ASM"
|
||||
INCLUDE "FS_Module.asm"
|
||||
INCLUDE "Procedures.asm"
|
||||
INCLUDE "Kernel_Panic.asm"
|
||||
|
||||
|
||||
; [ ] 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
|
||||
;----------------------------------------------------------------------;
|
||||
;!FIXIT ¯¥à¥¤¥« âì ¯® ¤®ª¥ „ «« á ¨ § ¯¨áì ¢ ï祩ª¨ ç ᮢ
|
||||
; ‡ ¯¨áì ॣ¨áâ஢ CMOS
|
||||
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
||||
WCMOS: CALL HEX2BCD
|
||||
@ -343,4 +342,87 @@ DIV_by_Shifts:
|
||||
LD H,0
|
||||
LD L,A
|
||||
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