функции работы с памятью не используют теперь SLOT2 - это могло вызвать баги

This commit is contained in:
Anatoliy Belyanskiy 2023-09-23 07:29:45 +10:00
parent 412759754c
commit 1506291b8d
3 changed files with 114 additions and 112 deletions

View File

@ -1,15 +1,16 @@
;===================[ ”㭪樨 à á¯à¥¤¥«¥­¨ï ¯ ¬ï⨠]===================;
; ‚ë室: BC - FREE MEM ¢ ¡«®ª å ¯® 16k, HL - FULL MEM
;!TEST ¢á¥ SLOT2 ­  SLOT1
;
;----------------------------------------------------------------------;
; Ž¯à¥¤¥«¥­¨¥ ®¡ê¥¬  ¯ ¬ïâ¨.
; ‚ë室: BC - FREE MEM ¢ ¡«®ª å ¯® 16k, HL - FULL MEM
EMM.GetMemSize:
IN A,(SLOT2)
IN A,(SLOT1)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD HL,SYS_PAGE.RAMD_FAT-#4000
OUT (SLOT1),A
LD HL,SYS_PAGE.RAMD_FAT-#4000 - #4000
LD C,0
.loop: LD A,(HL)
INC L
@ -21,7 +22,7 @@ EMM.GetMemSize:
.exit: LD HL,#100
LD A,B
LD B,0
OUT (SLOT2),A
OUT (SLOT1),A
RET
;----------------------------------------------------------------------;
;
@ -36,11 +37,11 @@ EMM.InitMem:
PUSH HL
PUSH DE
IN A,(SLOT2)
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD HL,SYS_PAGE.RAMD_FAT-#4000 ; €¤à¥á FAT އ“.
OUT (SLOT1),A
LD HL,SYS_PAGE.RAMD_FAT-#4000 - #4000 ; €¤à¥á FAT އ“.
; ®¡­ã«ï¥¬ â ¡«¨æã
.loopFree:
LD (HL),0
@ -48,7 +49,7 @@ EMM.InitMem:
JR NZ,.loopFree
; १¥à¢¨à㥬 ᯥæ.áâà ­¨æë ¨ áâà ­¨æë ZX
LD B,RESERVED_PAGES.Blocks
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
.loop: LD A,(DE)
CP #FF
JR Z,.exitLoop
@ -65,13 +66,13 @@ EMM.InitMem:
LD L,A
LD (HL),A
; ˆ­¨æ¨ «¨§ æ¨ï ª«î祩 RAM-Disks
LD HL,SYS_PAGE.RAMD_KEYS-#4000
LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000
LD B,SYS_PAGE.RAMD_KEYS.NUM
.loop2: LD (HL),0
INC L
DJNZ .loop2
LD A,C
OUT (SLOT2),A
OUT (SLOT1),A
POP DE
POP HL
@ -115,12 +116,12 @@ RESERVED_PAGES:
EMM.GetMem:
;PUSH DE
PUSH BC
IN A,(SLOT2)
IN A,(SLOT1)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
LD C,B ; á®åà ­¨âì ç¨á«® ­ã¦­ëå ¡«®ª®¢
LD HL,SYS_PAGE.RAMD_FAT-#4000
LD HL,SYS_PAGE.RAMD_FAT-#4000 - #4000
; –¨ª« ¯à®¢¥àª¨ ­ «¨ç¨ï ­ã¦­ëå ¡«®ª®¢.
.loop: DEC L
JR Z,.noRAM
@ -132,7 +133,7 @@ EMM.GetMem:
; Œ¥áâ® ¥áâì !
LD B,C ; ‚®ááâ ­®¢¨âì ­ã¦­ë© ®¡ê¥¬ ¤¨áª 
LD C,#FF ; Œ…’Š€ ŠŽ<C5A0>€ RAM-Disk
LD HL,SYS_PAGE.RAMD_FAT-#4000
LD HL,SYS_PAGE.RAMD_FAT-#4000 - #4000
; ‡ ¯®«­¨âì RAMD_FAT
.loop2: DEC L
@ -145,7 +146,7 @@ EMM.GetMem:
; L - 㪠§ â¥«ì 楯®çª¨.
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
LD A,L
AND A
POP BC
@ -154,7 +155,7 @@ EMM.GetMem:
.noRAM: LD L,1 ; <20> <20>€ŒŸˆ
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
LD A,L
SCF
POP BC
@ -203,13 +204,13 @@ EMM.FreeMemRMD:
SCF
RET Z
LD C,A
IN A,(SLOT2)
IN A,(SLOT1)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
LD (HL),0
LD A,B
OUT (SLOT2),A
OUT (SLOT1),A
LD A,C
;JR EMM.FreeMem
;------[
@ -222,12 +223,12 @@ EMM.FreeMem:
RET Z
LD L,A
IN A,(SLOT2)
IN A,(SLOT1)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD A,L
EMM_F3M_L1:
LD L,A
@ -239,14 +240,14 @@ EMM_F3M_L1:
JR NZ,EMM_F3M_L1 ; ¯à®¤®«¦ âì
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
LD A,0 ;!FIXIT ­¥¤®ªã¬¥­â¨à®¢ ­®
AND A
RET
EMM_FN3M_ERR:
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
LD A,2 ;!FIXIT ­¥¤®ªã¬¥­â¨à®¢ ­®
SCF
RET
@ -273,13 +274,13 @@ EMM.GetMemPageRMD:
;EMM_FN4M:
EMM.GetMemPage:
LD L,A
IN A,(SLOT2)
IN A,(SLOT1)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
INC B
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
EMM_F4M_L1:
LD A,(HL)
AND A
@ -292,14 +293,14 @@ EMM_F4M_L1:
EMM_F4M_ERR:
LD L,A
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
LD A,L
SCF
RET
EMM_F4M_END:
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
LD A,L
AND A
RET
@ -319,14 +320,14 @@ EMM.GetMemPageNext:
AND A
SCF
RET Z
IN A,(SLOT2)
IN A,(SLOT1)
LD H,A
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
LD A,H
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD L,(HL)
OUT (SLOT2),A
OUT (SLOT1),A
LD A,L
AND A
SCF
@ -361,14 +362,14 @@ EMM.GetMemBlkPages:
CP #FF
JR Z,.end
;
IN A,(SLOT2)
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
OUT (SLOT1),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD L,(HL)
LD A,C
OUT (SLOT2),A
OUT (SLOT1),A
;
INC B
JR NZ,.loop
@ -450,105 +451,105 @@ BLK_RD_WR:
PUSH HL
PUSH BC
LD C,SLOT2
LD C,SLOT1
IN B,(C)
ld h,a
LD H,A
LD A,SYS_PAGE
OUT (SLOT2),A
ld a,h
OUT (SLOT1),A
LD A,H
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD L,A
INC D
RAMD_LOOP_D:
.RAMD_LOOP_D:
DEC D
JR Z,NOT_FOUR_BLK
JR Z,.NOT_FOUR_BLK
LD L,(HL)
LD L,(HL)
LD L,(HL)
LD L,(HL)
JR RAMD_LOOP_D
JR .RAMD_LOOP_D
NOT_FOUR_BLK:
.NOT_FOUR_BLK:
LD A,E
.loop: SUB #40
JR C,NOT_ONE_BLK
JR C,.NOT_ONE_BLK
LD L,(HL)
JR .loop
NOT_ONE_BLK:
.NOT_ONE_BLK:
AND #3F
LD D,A ; DE - ADRESS in RAM-Disk
LD D,A ; DE - ADRESS in RAM-Disk
LD E,0
LD A,L ; L - ⥪ã騩 ¡ ­ª RAM-Disk
LD A,L ; L - ⥪ã騩 ¡ ­ª RAM-Disk
OUT (C),B ; ¢®ááâ ­®¢¨âì áâà ­¨æã
OUT (C),B ; ¢®ááâ ­®¢¨âì áâà ­¨æã
POP BC ; ¤«¨­  ¤ ­­ëå
POP HL ;  ¤à¥á ¡ãä¥à 
POP BC ; ¤«¨­  ¤ ­­ëå
POP HL ;  ¤à¥á ¡ãä¥à 
BIT 7,H
JR NZ,BLK_PAGE1 ; !!!!! JR NZ,BLK_PAGE1 ?
JR NZ,.BLK_PAGE1 ; !!!!! JR NZ,BLK_PAGE1 ?
BLK_PAGE3: ; !TODO ¯¥à¥¤¥« âì ­  SLOT ?????
.BLK_PAGE3: ; !TODO ¯¥à¥¤¥« âì ­  SLOT ?????
LD C,SLOT3
IN C,(C)
OUT (SLOT3),A
SET 7,D
SET 6,D
JR BLK_CONT1
JR .BLK_CONT1
BLK_PAGE1:
.BLK_PAGE1:
LD C,SLOT1
IN C,(C)
OUT (SLOT1),A
RES 7,D
SET 6,D
BLK_CONT1: ; DE - RamDisk, HL - data
.BLK_CONT1: ; DE - RamDisk, HL - data
EX AF,AF'
JR Z,NO_EX_RW1 ; WRITE
JR Z,.NO_EX_RW1 ; WRITE
EX DE,HL ; for READ
NO_EX_RW1:
.NO_EX_RW1:
EX AF,AF'
LD A,16
BLK_LL1:
.BLK_LL1:
DUP 16
LDI
EDUP
DEC A
JR NZ,BLK_LL1
JR NZ,.BLK_LL1
EX AF,AF'
JR Z,NO_EX_RW2 ; WRITE
JR Z,.NO_EX_RW2 ; WRITE
EX DE,HL ; for READ
NO_EX_RW2:
.NO_EX_RW2:
EX AF,AF' ; DEC C ¯à®ªàã⨫áï 256 à § ¨ ¢¥à­ã«áï
INC B ; B 㦥 㬥­ì訫áï ­  1,
DEC B
JP Z,BLK_EXIT_1
JP Z,.BLK_EXIT_1
BIT 6,D
JP NZ,BLK_CONT1
JP NZ,.BLK_CONT1
BIT 7,D
JR Z,BLK_PAGE3_X
JR Z,.BLK_PAGE3_X
IN A,(SLOT1)
LD E,A
LD D,#42
LD D,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD A,SYS_PAGE
OUT (SLOT1),A
LD A,(DE)
OUT (SLOT1),A
LD DE,#4000
JP BLK_CONT1
JP .BLK_CONT1
BLK_PAGE3_X:
.BLK_PAGE3_X:
IN A,(SLOT3)
LD E,A
LD D,#C2
@ -559,7 +560,7 @@ BLK_PAGE3_X:
LD DE,#C000
BIT 7,H
JP Z,BLK_CONT1
JP Z,.BLK_CONT1
LD E,A
LD A,C
@ -569,17 +570,17 @@ BLK_PAGE3_X:
LD A,E
OUT (SLOT1),A
LD DE,#4000
JP BLK_CONT1
JP .BLK_CONT1
BLK_EXIT_1:
.BLK_EXIT_1:
LD A,D
DEC A
RLCA
LD A,C
JR C,BLK_EXIT_2
JR C,.BLK_EXIT_2
OUT (SLOT1),A
RET
BLK_EXIT_2:
.BLK_EXIT_2:
OUT (SLOT3),A
AND A
RET
@ -794,17 +795,17 @@ RAMD_CALC_PAGE:
; A - Number (0..15)
GET_RAMD_NUM:
EX AF,AF'
IN A,(SLOT2)
IN A,(SLOT1)
EX AF,AF'
LD BC,SYS_PAGE * 256 + SLOT2
LD BC,SYS_PAGE * 256 + SLOT1
OUT (C),B
LD HL,SYS_PAGE.RAMD_KEYS-#4000
LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000
LD BC,SYS_PAGE.RAMD_KEYS.NUM
CPIR
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
EX AF,AF'
SCF
@ -830,17 +831,17 @@ GET_RAMD_ST:
PUSH BC
LD HL,SYS_PAGE.RAMD_KEYS-#4000
LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000
ADD A,L
LD L,A
IN A,(SLOT2)
IN A,(SLOT1)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
LD C,(HL)
LD A,B
OUT (SLOT2),A
OUT (SLOT1),A
LD A,C
POP BC
AND A
@ -861,12 +862,12 @@ BLK_TO_RAMD:
PUSH HL
LD L,A
IN A,(SLOT2)
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
LD A,L
LD HL,SYS_PAGE.RAMD_KEYS-#4000
LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000
ADD A,L
LD L,A
LD A,(HL) ; ª«îç ¡«®ª 
@ -875,7 +876,7 @@ BLK_TO_RAMD:
LD (HL),B
LD A,C
OUT (SLOT2),A
OUT (SLOT1),A
LD A,B
AND A
@ -884,7 +885,7 @@ BLK_TO_RAMD:
BLK_BUSY:
LD A,C
OUT (SLOT2),A
OUT (SLOT1),A
SCF
POP HL
@ -905,12 +906,12 @@ RAMD_CLEAR:
PUSH HL
LD L,A
IN A,(SLOT2)
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
LD A,L
LD HL,SYS_PAGE.RAMD_KEYS-#4000 ; RAM-Disk ᢮¡®¤¥­
LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000 ; RAM-Disk ᢮¡®¤¥­
ADD A,L
LD L,A
LD B,A ; § ¯®¬­¨âì 㤠«ï¥¬ë© à ¬¤¨áª
@ -919,7 +920,7 @@ RAMD_CLEAR:
JR Z,BLK_BUSY ; ¢®§¢à â á ®è¨¡ª®©
LD (HL),0
LD A,C
OUT (SLOT2),A
OUT (SLOT1),A
AND A
POP HL
@ -945,19 +946,19 @@ EMM.DivMemBlocks:
RET C
LD D,A
IN A,(SLOT2)
IN A,(SLOT1)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
OUT (SLOT1),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD L,D
LD A,(HL)
LD (HL),0FFH
LD (HL),#FF
LD B,A
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
LD A,E
AND A
@ -974,35 +975,36 @@ EMM.DivMemBlocks:
; ¢ë室: € - ¡«®ª
EMM.MergeMemBlocks:
LD E,A
IN A,(SLOT2)
IN A,(SLOT1)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
OUT (SLOT1),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD L,E
LD C,B
LD B,0
EMM_ADD_L:
.EMM_ADD_L:
LD A,(HL)
AND A
JR Z,EMM_ADD_ERR
CP 0FFH
JR Z,EMM_ADD_NEXT
JR Z,.EMM_ADD_ERR
CP #FF
JR Z,.EMM_ADD_NEXT
LD L,A
DJNZ EMM_ADD_L
EMM_ADD_ERR:
DJNZ .EMM_ADD_L
.EMM_ADD_ERR:
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
SCF
RET
EMM_ADD_NEXT:
.EMM_ADD_NEXT:
LD A,C
AND A
JR Z,EMM_ADD_ERR
JR Z,.EMM_ADD_ERR
LD (HL),A
EX AF,AF'
OUT (SLOT2),A
OUT (SLOT1),A
AND A
LD A,E
RET

View File

@ -20,7 +20,7 @@
DEFINE TEST_INT 1 ; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ â¥«ì᪮£® INT
DEFINE NEW_FEATURE 0 ; !TODO ¯ã­ªâë ¢ á¥â ¯
DEFINE HDDwriteProtect 0
DEFINE RECOVERYmountTYPE 1 ; 1 - ¡ëáâàë© ­¥¬­®£® § å à¤ª®¦¥­ë© ¢ à¨ ­â. 2 - ¡®«¥¥ "¯à ¢¨«ì­ë©"
DEFINE RECOVERYmountTYPE 2 ; 1 - ¡ëáâàë© ­¥¬­®£® § å à¤ª®¦¥­ë© ¢ à¨ ­â. 2 - ¡®«¥¥ "¯à ¢¨«ì­ë©"
DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY ¢á¥£¤  £à㧨âáï ¢ ¤¨áª 15, 2 - ¨é¥âáï ᢮¡®¤­ë© à ¬¤¨áª ¨ ¥á«¨ â ª®£® ­¥â, â® § ­¨¬ ¥âáï 15ë©
DEFINE FDD_NormalCount 0
;

Binary file not shown.