fixed bug with saving RAM Disk

This commit is contained in:
Anatoliy Belyanskiy 2023-09-04 04:53:26 +10:00
parent f62809c2d5
commit 7c9cb9d192
2 changed files with 79 additions and 63 deletions

@ -1 +1 @@
Subproject commit 6e27011b6259b0256ce65d91a53ef1185223eafa Subproject commit 9a65a386bfb6aaccc7fb476a3e159a684af65743

View File

@ -140,7 +140,14 @@ RMD_UNMOUNT: ;LD A,(key_buff.DRVsave)
;-------------[] ;-------------[]
;‘®åà ­¥­¨¥ ®¡à §  à ¬¤¨áª  ¢ ä ©« ;‘®åà ­¥­¨¥ ®¡à §  à ¬¤¨áª  ¢ ä ©«
RMD_SAVE: IN A,(SLOT3) RMD_SAVE: XOR A ;LD A,FileAttrib.Normal
LD HL,SaveName
LD C,Dss.Create
RST ToDSS
JP C,EXIT.error.writeFile
LD (key_buff.FM),A ; á®å࠭塞 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
IN A,(SLOT3)
LD (.SavePage),A LD (.SavePage),A
LD A,(key_buff.DRVsave) LD A,(key_buff.DRVsave)
@ -151,7 +158,6 @@ RMD_SAVE: IN A,(SLOT3)
LD C,BIOS.GetMemBlkPages LD C,BIOS.GetMemBlkPages
RST ToBIOS RST ToBIOS
;LD HL,PagesBuffer
LD C,Dss.Write LD C,Dss.Write
.loop: PUSH BC .loop: PUSH BC
PUSH HL PUSH HL
@ -181,9 +187,7 @@ RMD_SAVE: IN A,(SLOT3)
LD A,(key_buff.FM) LD A,(key_buff.FM)
LD C,Dss.Close LD C,Dss.Close
RST ToDSS JP ToDSS
RET
;-------------[] ;-------------[]
@ -362,11 +366,11 @@ error:
LD HL,messages.writeFile LD HL,messages.writeFile
JP printANDexit JP printANDexit
.WrongKeys: LD B,DSS_Error.sys.GENERAL_FAILURE .WrongKeys: LD B,DSS_Error.sys.COMMON_ERROR
LD HL,messages.WrongKeys LD HL,messages.WrongKeys
JP printANDexit JP printANDexit
.UNDEFINED: LD B,DSS_Error.sys.GENERAL_FAILURE .UNDEFINED: LD B,DSS_Error.sys.COMMON_ERROR
LD HL,messages.UNDEFINED LD HL,messages.UNDEFINED
JP printANDexit JP printANDexit
@ -386,7 +390,7 @@ error:
LD HL,messages.readFile LD HL,messages.readFile
JP printANDexit JP printANDexit
.noFreeRAMdsk: LD B,DSS_Error.sys.GENERAL_FAILURE .noFreeRAMdsk: LD B,DSS_Error.sys.COMMON_ERROR
LD HL,messages.noFreeRAMdsk LD HL,messages.noFreeRAMdsk
JP printANDexit JP printANDexit
; ;
@ -473,7 +477,7 @@ Set_keys: LD HL,(dss_line)
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª  RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
XOR A XOR A
.save_a+*: OR 0 .save_a+1: OR 0
JR NZ,.file_key JR NZ,.file_key
CALL .GetDRVnum CALL .GetDRVnum
@ -500,27 +504,45 @@ Set_keys: LD HL,(dss_line)
LD (key_buff.DRVsave),A ; á®å࠭塞 ­®¬¥à à ¬¤¨áª  ¤«ï BIOS.FreeMemRMD LD (key_buff.DRVsave),A ; á®å࠭塞 ­®¬¥à à ¬¤¨áª  ¤«ï BIOS.FreeMemRMD
*/ */
;!FIXIT .file_key: LD A,(key_buff.M)
.file_key:
LD HL,Buffer
LD A,(key_buff.M)
AND A AND A
JR Z,.noRD JR Z,.noRD
LD HL,Buffer
CALL .OpenRDfile ; Žâªàë⨥ ä ©«  (¨«¨ ¯à®¢¥àª  ­ «¨ç¨ï) ¯® ¨¬¥­¨ ¨§ ¡ãä¥à  CALL .OpenRDfile ; Žâªàë⨥ ä ©«  (¨«¨ ¯à®¢¥àª  ­ «¨ç¨ï) ¯® ¨¬¥­¨ ¨§ ¡ãä¥à 
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª  RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩 JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
.noRD: CALL .OpenWRfile .noRD: LD HL,(.NextParam) ; ¯à®¢¥àª , çâ® ¥áâì á«¥¤ãî騩 ¯ à ¬¥âà
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª  LD A,H
LD A,(key_buff.DRVsave) OR L
INC A SCF
JP NZ,.CheckChar RET Z
;
LD HL,Buffer
LD BC,256
XOR A
CPIR
JP PE,.yes_filename
SCF
RET
;
.yes_filename: LD DE,Buffer
SBC HL,DE
SCF
RET Z
;
LD B,H
LD C,L
EX DE,HL
LD DE,SaveName
LDIR
LD HL,(.NextParam) LD HL,(.NextParam)
INC HL INC HL
LD A,(HL) LD A,(HL)
CP ':' CP ':'
JP NZ,.CheckChar SCF
RET NZ
CALL .GetParam CALL .GetParam
CCF CCF
@ -529,8 +551,7 @@ Set_keys: LD HL,(dss_line)
CALL .GetDRVnum CALL .GetDRVnum
RET C RET C
LD (key_buff.DRVsave),A ; á®å࠭塞 ­®¬¥à à ¬¤¨áª  ¤«ï save ram drive LD (key_buff.DRVsave),A ; á®å࠭塞 ­®¬¥à à ¬¤¨áª  ¤«ï save ram drive
RET
JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
;-----------------; ;-----------------;
;-----------------; ;-----------------;
@ -538,11 +559,13 @@ Set_keys: LD HL,(dss_line)
.NextParam+1: LD HL,0 .NextParam+1: LD HL,0
LD DE,Buffer ; ¡ãä¥à ¤«ï ®¯¥à æ¨© á® áâப ¬¨ LD DE,Buffer ; ¡ãä¥à ¤«ï ®¯¥à æ¨© á® áâப ¬¨
LD C,Dss.GSwitch ; âã⠢뤥«ï¥¬ ¯ à ¬¥âà § ¯ã᪠ LD C,Dss.GSwitch ; âã⠢뤥«ï¥¬ ¯ à ¬¥âà § ¯ã᪠
RST #10 ; ¯®«ãç ¥¬ ¢ ¡ãä¥à¥ á«¥¤ãî騩 ¯ à ¬¥âà RST ToDSS ; ¯®«ãç ¥¬ ¢ ¡ãä¥à¥ á«¥¤ãî騩 ¯ à ¬¥âà
LD (.NextParam),HL LD (.NextParam),HL
LD A,(Buffer) LD A,(Buffer)
AND A AND A
RET NZ ; <20>®à¬ «ì­ë© ¢®§¢à â C = 0 RET NZ ; <20>®à¬ «ì­ë© ¢®§¢à â C = 0
LD HL,0 ; Œ àª¥à ª®­æ  à §¡®à 
LD (.NextParam),HL
SCF SCF
RET ; ‚®§¢à â á ®è¨¡ª®© C = 1 RET ; ‚®§¢à â á ®è¨¡ª®© C = 1
;-----------------; ;-----------------;
@ -559,13 +582,7 @@ Set_keys: LD HL,(dss_line)
LD A,Dss.Open.R LD A,Dss.Open.R
LD HL,Buffer LD HL,Buffer
LD C,Dss.Open LD C,Dss.Open
RST 10h ; ®âªàë⨥ ä ©«  RST ToDSS ; ®âªàë⨥ ä ©« 
LD (key_buff.FM),A ; á®å࠭塞 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
RET
;
.OpenWRfile: XOR A ;LD A,FileAttrib.Normal
LD C,Dss.Create
RST ToDSS
LD (key_buff.FM),A ; á®å࠭塞 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à LD (key_buff.FM),A ; á®å࠭塞 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
RET RET
;-----------------; ;-----------------;
@ -583,7 +600,7 @@ Set_keys: LD HL,(dss_line)
LD BC,0*256 + 8 LD BC,0*256 + 8
LD DE,#55AA LD DE,#55AA
RST #18 ; ¨§ «®£¨ç¥áª®£® ¢ 䨧¨ç¥áª¨© ­®¬¥à ¤¨áª  RST ToDSS.DRV ; ¨§ «®£¨ç¥áª®£® ¢ 䨧¨ç¥áª¨© ­®¬¥à ¤¨áª 
EX AF,AF' EX AF,AF'
LD C,A LD C,A
AND #F0 AND #F0
@ -593,8 +610,6 @@ Set_keys: LD HL,(dss_line)
LD A,C LD A,C
AND #0F AND #0F
RET RET
;-----------------; ;-----------------;
;******************************************************* ;*******************************************************
@ -604,6 +619,7 @@ Loader_length EQU $-BEGIN
;!FIXIT ;!FIXIT
PagesBuffer EQU $ PagesBuffer EQU $
Buffer EQU PagesBuffer+256 Buffer EQU PagesBuffer+256
SaveName EQU Buffer+256
;----------------------------------------------[End Code section] ;----------------------------------------------[End Code section]
STACK_CHECK_MACRO stack_point, (stack_buffer+256) STACK_CHECK_MACRO stack_point, (stack_buffer+256)
@ -625,7 +641,7 @@ Test: LD (dss_line),IX ;
GetParam: LD HL,(NextParameter) ; GetParam: LD HL,(NextParameter) ;
LD C,43h ; âã⠢뤥«ï¥¬ ¯ à ¬¥âà § ¯ã᪠ LD C,43h ; âã⠢뤥«ï¥¬ ¯ à ¬¥âà § ¯ã᪠
LD DE,Buffer ; ¡ãä¥à ¤«ï ®¯¥à æ¨© á® áâப ¬¨ LD DE,Buffer ; ¡ãä¥à ¤«ï ®¯¥à æ¨© á® áâப ¬¨
RST #10 ; ¯®«ãç ¥¬ ¢ ¡ãä¥à¥ á«¥¤ãî騩 ¯ à ¬¥âà RST ToDSS ; ¯®«ãç ¥¬ ¢ ¡ãä¥à¥ á«¥¤ãî騩 ¯ à ¬¥âà
ld (NextParameter),hl ; ld (NextParameter),hl ;
CCF ; CCF ;
LD A,(Buffer) ; LD A,(Buffer) ;
@ -638,7 +654,7 @@ GetParam: LD HL,(NextParameter) ;
LD HL,COMLINE ;HL 㪠§ë¢ ¥â ­  ª®¬ ­¤­ãî áâபã LD HL,COMLINE ;HL 㪠§ë¢ ¥â ­  ª®¬ ­¤­ãî áâபã
.loop: LD DE,BUFFER ;DE 㪠§ë¢ ¥â ­  ¡ãä¥à ¤«ï ¯ à ¬¥â஢ .loop: LD DE,BUFFER ;DE 㪠§ë¢ ¥â ­  ¡ãä¥à ¤«ï ¯ à ¬¥â஢
LD C,43h ;”ã­ªæ¨ï ¢ë¤¥«¥­¨ï ¯ à ¬¥âà  LD C,43h ;”ã­ªæ¨ï ¢ë¤¥«¥­¨ï ¯ à ¬¥âà 
RST 10h ;‚믮«­¥­¨¥ ä㭪樨 RST ToDSS ;‚믮«­¥­¨¥ ä㭪樨
PUSH AF PUSH AF
PUSH HL PUSH HL