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
@ -169,21 +175,19 @@ RMD_SAVE: IN A,(SLOT3)
POP HL POP HL
POP BC POP BC
;!TODO 㤠«ïâì ä ©« ¥á«¨ ®è¨¡ª  § ¯¨á¨ ;!TODO 㤠«ïâì ä ©« ¥á«¨ ®è¨¡ª  § ¯¨á¨
JP C,EXIT.error.writeFile JP C,EXIT.error.writeFile
INC HL INC HL
DJNZ .loop DJNZ .loop
.SavePage+*: LD A,0 .SavePage+*: LD A,0
OUT (SLOT3),A OUT (SLOT3),A
LD C,Dss.RescanDrives LD C,Dss.RescanDrives
RST ToDSS RST ToDSS
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
; ;
@ -443,20 +447,20 @@ Set_keys: LD HL,(dss_line)
RET NZ RET NZ
; <20>஢¥àª /ãáâ ­®¢ª  ª«îç  ; <20>஢¥àª /ãáâ ­®¢ª  ª«îç 
LD HL,key_buff ; ­ ç «® åà ­¥­¨ï ª«î祩 LD HL,key_buff ; ­ ç «® åà ­¥­¨ï ª«î祩
LD E,L ; ¤«ï ¯à®¢¥àª¨ ­  ª«îç U LD E,L ; ¤«ï ¯à®¢¥àª¨ ­  ª«îç U
LD A,(Buffer+1) LD A,(Buffer+1)
AND %11011111 ; ¤¥« ¥¬ ¬ «¥­ìª¨© ᨬ¢®« ¡®«ì訬))) AND %11011111 ; ¤¥« ¥¬ ¬ «¥­ìª¨© ᨬ¢®« ¡®«ì訬)))
CP 'U' ; ¯à®¢¥à塞 ¯ à ¬¥âà mount image CP 'U' ; ¯à®¢¥à塞 ¯ à ¬¥âà mount image
JR Z,.set_key JR Z,.set_key
INC HL ; á«¥¤ãî騩 ª«îç INC HL ; á«¥¤ãî騩 ª«îç
CP 'M' ; ¯à®¢¥à塞 ¯ à ¬¥âà unmount image CP 'M' ; ¯à®¢¥à塞 ¯ à ¬¥âà unmount image
JR Z,.set_key JR Z,.set_key
INC HL ; á«¥¤ãî騩 ª«îç INC HL ; á«¥¤ãî騩 ª«îç
CP 'S' ; ¯à®¢¥à塞 ¯ à ¬¥âà save image CP 'S' ; ¯à®¢¥à塞 ¯ à ¬¥âà save image
JR Z,.set_key JR Z,.set_key
SCF ; ®è¨¡ª  ¢ ¯ à ¬¥âॠSCF ; ®è¨¡ª  ¢ ¯ à ¬¥âà¥
RET ; ¢ë室 á ®è¨¡ª®© RET ; ¢ë室 á ®è¨¡ª®©
;-----------------; ;-----------------;
;-----------------; ;-----------------;
@ -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: AND A
LD HL,Buffer JR Z,.noRD
LD A,(key_buff.M) LD HL,Buffer
AND A CALL .OpenRDfile ; Žâªàë⨥ ä ©«  (¨«¨ ¯à®¢¥àª  ­ «¨ç¨ï) ¯® ¨¬¥­¨ ¨§ ¡ãä¥à 
JR Z,.noRD RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
CALL .OpenRDfile ; Žâªàë⨥ ä ©«  (¨«¨ ¯à®¢¥àª  ­ «¨ç¨ï) ¯® ¨¬¥­¨ ¨§ ¡ãä¥à  JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
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