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