HotFix 1.

Убран баг в ATTRIB для GET на разделе FAT с кластером 64 кб.
Исправлен улёт стека в ПЗУ в процедуре запуска EXE.
Исправлен баг со скроллом в ECHOKEY.
This commit is contained in:
Tolik 2025-07-05 03:00:54 +10:00
parent 607856305f
commit 12c028744a
11 changed files with 79 additions and 46 deletions

View File

@ -1,9 +1,9 @@
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; A - ATTRIB ; A - ATTRIB
; B - MODE ; B - MODE:
; B = #00 GET ATTRIB ; 0 GET ATTRIB
; B = #01 SET ATTRIB ; 1 SET ATTRIB
; OUTPUT: A - ATTRIB ; OUTPUT: A - ATTRIB
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
@ -15,6 +15,10 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
POP BC POP BC
POP HL POP HL
RET C RET C
; [x] Hotfix 1. ­  á«ãç © ç⥭¨ï ¤«ï ®¡å®¤  ¯à®¢¥àª¨ CHECK_64kb_CLUSTER
LD A,1
LD (OPEN_FN.TMP),A
;
LD A,C LD A,C
; ;
; ;
@ -69,8 +73,11 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
CALL SetPath_GetName ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª CALL SetPath_GetName ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C RET C
; [ ] 26/06/2024 ; [ ] 26/06/2024
CALL CHECK_64kb_CLUSTER ; [x] Hotfix 1. ¥á«¨ íâ® ­¥ ç⥭¨¥, â® ¯à®¢¥à塞 à §¬¥à ª« áâ¥à 
RET C LD A,(OPEN_FN.TMP)
AND A
CALL Z,CHECK_64kb_CLUSTER
RET C
; ;
CALL MASK CALL MASK
RET C RET C

View File

@ -136,10 +136,10 @@ EXEC0_SHORT: ;
CALL ENVIRON CALL ENVIRON
LD HL,(CMDLINE) LD HL,(CMDLINE)
LD DE,CORE_BUFFERS.EXEBUFF LD DE,CORE_BUFFERS.EXEBUFF
COPYEXN: LD A,(HL) .COPYEXN: LD A,(HL)
LDI LDI
OR A OR A
JR NZ,COPYEXN JR NZ,.COPYEXN
CALL FINDPATH CALL FINDPATH
;[x] 1/10/2023 ;[x] 1/10/2023
@ -278,9 +278,9 @@ PRELOAD: EX DE,HL
LD B,A LD B,A
LD A,H LD A,H
OR L OR L
JR Z,NOINK2 JR Z,.NOINK
INC B INC B
NOINK2: LD HL,_RET_2 .NOINK: LD HL,_RET_2
LD (_ret),HL LD (_ret),HL
JR _TST_PROC JR _TST_PROC
; ;
@ -293,6 +293,8 @@ _RET_2: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) ;
;-------------------------------------------------------------------;[ ] ;-------------------------------------------------------------------;[ ]
_TST_PROC: CALL GETMEM _TST_PROC: CALL GETMEM
JP C,ERREXE0 JP C,ERREXE0
;
DI
LD (EXE_MEM),A LD (EXE_MEM),A
EXX EXX
POP DE ;á­¨¬ ¥¬ á® á⥪   ¤à¥á ¢®§¢à â  POP DE ;á­¨¬ ¥¬ á® á⥪   ¤à¥á ¢®§¢à â 
@ -312,7 +314,7 @@ _TST_PROC: CALL GETMEM
PUSH AF ; +2 PUSH AF ; +2
LD (EXSTACK),SP LD (EXSTACK),SP
LD SP,HL LD SP,HL
; ; ;
EXX EXX
; ;
;!TEST 27/03/2024 ;!TEST 27/03/2024
@ -356,11 +358,12 @@ _TST_PROC: CALL GETMEM
; ;
; ;
LD HL,(CMDLINE) LD HL,(CMDLINE)
LD DE,CORE_BUFFERS.BUFFER+1 ;LD DE,CORE_BUFFERS.BUFFER+1
LD DE,CORE_BUFFERS.BUFFER_CLP + 1
CALL SCOPYS CALL SCOPYS
LD A,#80 ;!HARDCODE cmd line size LD A,#80 ;!HARDCODE cmd line size
SUB B SUB B
LD (CORE_BUFFERS.BUFFER),A LD (CORE_BUFFERS.BUFFER_CLP),A
; ;
LD SP,CORE_BUFFERS.EXEBUFF + _sEXE_HEADER ;R02 LD SP,CORE_BUFFERS.EXEBUFF + _sEXE_HEADER ;R02
; ! „ «¥¥ á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥! BIOS ¨ ­¥ DSS-MAIN ­¥ ¢ë§ë¢ âì ; ! „ «¥¥ á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥! BIOS ¨ ­¥ DSS-MAIN ­¥ ¢ë§ë¢ âì
@ -385,7 +388,7 @@ FR8000: LD A,(DE)
INC DE INC DE
FRC000: LD A,(DE) FRC000: LD A,(DE)
OUT (SLOT3),A OUT (SLOT3),A
CALL M_PSP ;CALL M_PSP
; ;
LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2) LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2)
LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1) LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1)
@ -393,10 +396,21 @@ FRC000: LD A,(DE)
LD A,(EXE_FM) LD A,(EXE_FM)
CALL MOVE_FP CALL MOVE_FP
; ;
LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. “áâ ­ ¢«¨¢ ¥âáï ª®£¤  ¢®âª­ãâë SHARED_PAGE ;LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. “áâ ­ ¢«¨¢ ¥âáï ª®£¤  ¢®âª­ãâë SHARED_PAGE
_ret+1: JP 0 ;EXEC02.RET1 ¨«¨ _RET_2 ;LD A,R
;DI
_TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG) LD SP,#4100 ;R02 ;!HARDCODE STACK before start EXE. “áâ ­ ¢«¨¢ ¥âáï ª®£¤  ¢®âª­ãâë SHARED_PAGE
;PUSH AF
_ret+1: JP 0 ;EXEC02.RET_1 ¨«¨ _RET_2
;
; á ¢®§¢à â ¨§ EXEC02.RET_1 ¨«¨ _RET_2
_TST_PROC_2:
; ! „ «¥¥ á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥! BIOS ¨ ­¥ DSS-MAIN ­¥ ¢ë§ë¢ âì
;
LD SP,CORE_BUFFERS.EXEBUFF + _sEXE_HEADER
CALL M_PSP
LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
;
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,#0080 ;!HARDCODE CLP_Buffer LD DE,#0080 ;!HARDCODE CLP_Buffer
XOR A XOR A
@ -404,10 +418,10 @@ _TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
EX DE,HL EX DE,HL
LD XH,D LD XH,D
LD XL,E LD XL,E
LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG) ;LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
LD DE,RETFAR ;  ¤à¥á ¯/¯ "­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à®æ¥áá " LD DE,RETFAR ;  ¤à¥á ¯/¯ "­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à®æ¥áá "
PUSH DE PUSH DE
PUSH HL ;PUSH HL
;!TEST Current Dir ;[x] 15/10/23 ;!TEST Current Dir ;[x] 15/10/23
PUSH IX PUSH IX
LD HL,CORE_BUFFERS.CurrentPath LD HL,CORE_BUFFERS.CurrentPath
@ -420,7 +434,9 @@ _TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
.set_path: CALL CHDIR_FN .set_path: CALL CHDIR_FN
POP IX POP IX
; ;
RET LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
EI
JP (HL)
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
; ! ¢ë§ë¢ ¥âáï ª®£¤  á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥! ; ! ¢ë§ë¢ ¥âáï ª®£¤  á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥!
M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
@ -428,17 +444,18 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD D,H LD D,H
LD E,L LD E,L
INC DE INC DE
LD BC,#00FF ;!HARDCODE LD BC,#00FF ;!FIXIT
LD (HL),B LD (HL),B
LDIR LDIR
EX DE,HL EX DE,HL
DEC H DEC H
LD DE,#0080 LD DE,#0080 ;!FIXIT
ADD HL,DE ADD HL,DE
EX DE,HL EX DE,HL
LD XH,D LD XH,D
LD XL,E LD XL,E
LD HL,CORE_BUFFERS.BUFFER ;LD HL,CORE_BUFFERS.BUFFER
LD HL,CORE_BUFFERS.BUFFER_CLP
LD C,(HL) LD C,(HL)
INC C INC C
LDIR LDIR
@ -540,8 +557,8 @@ EXSTACK: DW CORE_BUFFERS.XSTACK.Spoint ;
; 5) ॣ¨áâà A ¯®¬¥é ¥âáï ª®¤ ¢®§¢à â  ¨ ¢ë¯®«­ï¥âáï RET. ; 5) ॣ¨áâà A ¯®¬¥é ¥âáï ª®¤ ¢®§¢à â  ¨ ¢ë¯®«­ï¥âáï RET.
; ;
;///////////////////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////////////////////
LEAVE: LD A,R LEAVE: ;LD A,R
PUSH AF ; INT ON/OFF ;PUSH AF ; INT ON/OFF
DI DI
; ;
LD A,B LD A,B
@ -552,7 +569,7 @@ LEAVE: LD A,R
; ;
_mDECTASK _mDECTASK
; ;
POP DE ; INT ON/OFF ;POP DE ; INT ON/OFF
LD SP,(EXSTACK) LD SP,(EXSTACK)
; âãâ á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥! ; âãâ á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥!
POP AF ; -2 EXSTACK size for 1 task POP AF ; -2 EXSTACK size for 1 task
@ -563,15 +580,15 @@ LEAVE: LD A,R
LD A,H LD A,H
OUT (SLOT3),A OUT (SLOT3),A
; ;
LD A,E ; INT ON/OFF ;LD A,E ; INT ON/OFF
POP DE ; -2 POP DE ; -2
POP HL ; -2 POP HL ; -2
LD (EXSTACK),SP LD (EXSTACK),SP
LD SP,HL LD SP,HL
; ;
;!TEST ;!TEST
AND %0000'0100 ; PO/PE flag ;AND %0000'0100 ; PO/PE flag
JR Z,.no_ei ;JR Z,.no_ei
EI EI
.no_ei: ; .no_ei: ;
EX DE,HL EX DE,HL

View File

@ -12,9 +12,12 @@
; CALL PUTCHAR ; CALL PUTCHAR
; JP PCHARS ; JP PCHARS
;/////////////////////////////////////////////////////////////////////// ;///////////////////////////////////////////////////////////////////////
PCHARS: XOR A ; no attr-mode PCHARS: XOR A
.NO_SCROLL: LD D,A
LD A,(CLEAR.shell_color) LD A,(CLEAR.shell_color)
LD B,A LD B,A
LD A,D
AND A ; no attr-mode
EX AF,AF' EX AF,AF'
XOR A ; no XY-mode XOR A ; no XY-mode
LD C,BIOS.LP_PR_LINE_DIR LD C,BIOS.LP_PR_LINE_DIR
@ -22,6 +25,7 @@ PCHARS: XOR A ; no attr-mode
JP ToBIOS JP ToBIOS
;/////////////////////////////////////////////////////////////////////// ;///////////////////////////////////////////////////////////////////////
; A -  âਡãâë ¢ë¢®¤¨¬®£® ᨬ¢®«  ¥á«¨ CF' ; A -  âਡãâë ¢ë¢®¤¨¬®£® ᨬ¢®«  ¥á«¨ CF'
; A' - ¥á«¨ !=0 â® ¡¥§ áªà®«« 
; CF - XY-mode ; CF - XY-mode
; DE - ¬¥á⮠ᨬ¢®«  ¢ ®ª­¥, ¥á«¨ CF=1 ; DE - ¬¥á⮠ᨬ¢®«  ¢ ®ª­¥, ¥á«¨ CF=1
; HL -  ¤à¥á á ¢ë¢®¤¨¬®© áâப®© ; HL -  ¤à¥á á ¢ë¢®¤¨¬®© áâப®©

View File

@ -100,7 +100,8 @@
;/////////////////////////////////////////////////////////////////////// ;///////////////////////////////////////////////////////////////////////
PUTCHAR: PUSH HL PUTCHAR: LD C,0
.NO_SCROLL: PUSH HL
; ;
LD L,A LD L,A
XOR A ; no attr-mode XOR A ; no attr-mode
@ -111,6 +112,7 @@ PUTCHAR: PUSH HL
; ;
LD A,(CLEAR.shell_color) LD A,(CLEAR.shell_color)
LD B,A LD B,A
LD A,C
EX AF,AF' EX AF,AF'
XOR A ; no XY-mode XOR A ; no XY-mode
LD C,BIOS.LP_PR_LINE_DIR LD C,BIOS.LP_PR_LINE_DIR

View File

@ -473,6 +473,7 @@ CurrentDirectory EQU BUFFERSplace.CurrentDirectory
.DEPTH EQU DIRECTORY_PATH_LENGTH .DEPTH EQU DIRECTORY_PATH_LENGTH
WorkDirectory EQU BUFFERSplace.WorkDirectory WorkDirectory EQU BUFFERSplace.WorkDirectory
.DEPTH EQU DIRECTORY_PATH_LENGTH .DEPTH EQU DIRECTORY_PATH_LENGTH
BUFFER_CLP EQU BUFFERSplace.BUFFER_CLP ; ¡ãä¥à ¤«ï CMD ¢ Execute.asm
ENDMODULE ENDMODULE
; ;
; CurrentPath EQU CORE_BUFFERS.BUFFERSplace + _sBuffers ; CurrentPath EQU CORE_BUFFERS.BUFFERSplace + _sBuffers
@ -486,6 +487,7 @@ CLEAR_ZONE.size EQU _sBuffers
ASSERT (CLEAR_ZONE.start + _sBuffers)<#4000, "Warning!!! OUT OF SLOT0" ASSERT (CLEAR_ZONE.start + _sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
ASSERT (#4000 - CORE_BUFFERS.BUFFER_CLP) > #100, "Warning!!! No memory for buffer!!!"
DISPLAY "--- --- --- --- --- --- --- ---" DISPLAY "--- --- --- --- --- --- --- ---"
DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start

View File

@ -204,7 +204,8 @@ ECHOKEY: CALL Cursor_On ;
POP AF POP AF
OR A OR A
; [x] -bug with Vasil's version of cursor ; [x] -bug with Vasil's version of cursor
CALL NZ,PUTCHAR;.NO_SCROLL ; ¤®¡ ¢¨« ¢ë¢®¤ "a" ­  íªà ­ LD C,A
CALL NZ,PUTCHAR.NO_SCROLL
POP BC POP BC
POP DE POP DE
LD A,E LD A,E

View File

@ -130,5 +130,6 @@
.CurrentPath WORD 0 .CurrentPath WORD 0
.CurrentDirectory BLOCK DIRECTORY_PATH_LENGTH,0 .CurrentDirectory BLOCK DIRECTORY_PATH_LENGTH,0
.WorkDirectory BLOCK DIRECTORY_PATH_LENGTH,0 .WorkDirectory BLOCK DIRECTORY_PATH_LENGTH,0
.BUFFER_CLP BLOCK CLP_Buffer,0 ; ¡ãä¥à ¤«ï CMD ¢ Execute.asm
ENDS ENDS
; ;

View File

@ -1 +1 @@
57 59

View File

@ -24,11 +24,11 @@ cmd_help: LD HL,.help_txt
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ;
;LP_PR_LINE_DIR: ;LP_PR_LINE_DIR:
; A -  âਡãâë ¢ë¢®¤¨¬®£® ᨬ¢®«  ¥á«¨ ZF=0 ; A -  âਡãâë ¢ë¢®¤¨¬®£® ᨬ¢®«  ¥á«¨ CF'
; A' - ¥á«¨ !=0 â® ¡¥§ áªà®«« 
; CF - XY-mode ; CF - XY-mode
; DE - ¬¥á⮠ᨬ¢®«  ¢ ®ª­¥, ¥á«¨ CF=1 ; DE - ¬¥á⮠ᨬ¢®«  ¢ ®ª­¥, ¥á«¨ CF=1
; HL -  ¤à¥á á ¢ë¢®¤¨¬®© áâப®© ; HL -  ¤à¥á á ¢ë¢®¤¨¬®© áâப®©
; B - à §¤¥«¨â¥«ì ; B - 梥⠪®­á®«¨ (¨á¯®«ì§ã¥âáï ¯à¨ áªà®««¥ ¨ ®ç¨á⪥ ®ª­ )
; IY - ¤¢  ᯥæ.ᨬ¢®«  ¤«ï ¢ë室  á CF=1. „®«¦­ë ¡ëâì à ¢­ë B, ¥á«¨ ­¥ ­ã¦­ë ; IY - ¤¢  ᯥæ.ᨬ¢®«  ¤«ï ¢ë室  á CF=1. „®«¦­ë ¡ëâì à ¢­ë B, ¥á«¨ ­¥ ­ã¦­ë
; A' - 梥⠪®­á®«¨ (¨á¯®«ì§ã¥âáï ¯à¨ áªà®««¥ ¨ ®ç¨á⪥ ®ª­ )
; CF' - ¢ë¢®¤¨âì ᨬ¢®« á  âਡãâ ¬¨ ; CF' - ¢ë¢®¤¨âì ᨬ¢®« á  âਡãâ ¬¨

View File

@ -9,14 +9,13 @@ cmd_pause:
LD A,LF LD A,LF
LD C,Dss.PutChar LD C,Dss.PutChar
RST ToDSS RST ToDSS
LD A,R ;LD A,R
PUSH AF ;PUSH AF
LD C,Dss.WaitKey ; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨ LD C,Dss.WaitKey ; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨
EI ;EI
RST ToDSS RST ToDSS
POP AF ;POP AF
DI ;DI
RET PO ;RET PO
EI ;EI
RET RET
;ret

View File

@ -1 +1 @@
522 523