fixed bug in EMM.FreeMem from previous commit

This commit is contained in:
Tolik 2024-08-22 01:19:10 +10:00
parent 6265aedb5c
commit 8b94cc4e63
8 changed files with 133 additions and 37 deletions

View File

@ -707,14 +707,13 @@ POST_5_OK:
OUT (RGMOD),A
OUT (SLOT0),A ;!HARDCODE zx page number
; !TEST 20/08/2024
;LD A,5 ;!HARDCODE zx page number
;OUT (SLOT1),A
;LD A,2 ;!HARDCODE zx page number
;OUT (SLOT2),A
LD A,#FF ;!HARDCODE zx page number
; LD A,5 ;!HARDCODE zx page number
; OUT (SLOT1),A
; LD A,2 ;!HARDCODE zx page number
; OUT (SLOT2),A
OUT (SLOT2),A ;!HARDCODE zx page number
DEC A ; LD A,#FF ;!HARDCODE zx page number
OUT (SLOT1),A
LD A,0 ;!HARDCODE zx page number
OUT (SLOT2),A
;
LD A,SYS_PAGE
OUT (SLOT3),A

View File

@ -303,7 +303,7 @@ FN_HDD_READ:
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD H,high SYS_PAGE.RAMD_FAT
LD H,high SYS_PAGE.RAM_TABLE
LD L,A
LD A,(HL)
OUT (SLOT3),A
@ -374,7 +374,7 @@ HD_WR_LOOP:
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD H,high SYS_PAGE.RAMD_FAT
LD H,high SYS_PAGE.RAM_TABLE
LD L,A
LD A,(HL)
OUT (SLOT3),A

View File

@ -11,7 +11,7 @@ EMM.GetMemSize: IN A,(SLOT1)
OUT (SLOT1),A
XOR A
LD C,A
LD HL,SYS_PAGE.RAMD_FAT-#4000-#4000
LD HL,SYS_PAGE.RAM_TABLE-#4000-#4000
;
.loop: DEC L
JR Z,.exit
@ -58,7 +58,7 @@ EMM.InitMem:
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD HL,SYS_PAGE.RAMD_FAT ; €¤à¥á RAM FAT ¢ އ“.
LD HL,SYS_PAGE.RAM_TABLE ; €¤à¥á RAM FAT ¢ އ“.
; ®¡­ã«ï¥¬ â ¡«¨æã
XOR A
.loopFree:
@ -85,13 +85,13 @@ EMM.InitMem:
LD (HL),A
; ˆ­¨æ¨ «¨§ æ¨ï ª«î祩 RAM-Disks
XOR A
LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000
LD HL,SYS_PAGE.RAMD_KEYS
LD B,SYS_PAGE.RAMD_KEYS.NUM
.loop2: LD (HL),A
INC L
DJNZ .loop2
; [x] 04/11/2023
LD HL,SYS_PAGE.Sp_RAMD_KEYS; - #4000 - #4000
LD HL,SYS_PAGE.Sp_RAMD_KEYS
LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM
.loop3: LD (HL),A
INC L
@ -140,13 +140,51 @@ RESERVED_PAGES:
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
;EMM_FN2M:
EMM.GetMem: PUSH BC
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD HL,SYS_PAGE.RAM_TABLE
XOR A
LD C,#FF ; Œ¥âª  ª®­æ  à ¬¡«®ª 
; ‡ ¯®«­¨âì RAM_TABLE
.loop2: DEC L
JR Z,.error_no_mem
CP (HL)
JR NZ,.loop2
LD (HL),C
LD C,L
DJNZ .loop2
; L = 㪠§ â¥«ì 楯®çª¨.
EX AF,AF'
OUT (SLOT3),A
LD A,L
AND A
POP BC
RET
;
.error_no_mem: EX AF,AF'
OUT (SLOT3),A
LD A,C
CALL EMM.FreeMem
LD L,BIOS.Error.EMM.NoMemory
LD A,L
SCF
POP BC
RET
/*
EMM.GetMem: PUSH BC
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD C,B ; á®åà ­¨âì ç¨á«® ­ã¦­ëå ¡«®ª®¢
LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000
LD HL,SYS_PAGE.RAM_TABLE
; –¨ª« ¯à®¢¥àª¨ ­ «¨ç¨ï ­ã¦­ëå ¡«®ª®¢.
XOR A
.loop: DEC L
@ -159,8 +197,8 @@ EMM.GetMem: PUSH BC
; Œ¥áâ® ¥áâì !
LD B,C ; ‚®ááâ ­®¢¨âì ­ã¦­ë© ®¡ê¥¬ ¤¨áª 
LD C,#FF ; Œ…’Š€ ŠŽ<C5A0>€ RAM-Disk
LD L,A ;low SYS_PAGE.RAMD_FAT; - #4000 - #4000
; ‡ ¯®«­¨âì RAMD_FAT
LD L,A ;low SYS_PAGE.RAM_TABLE
; ‡ ¯®«­¨âì RAM_TABLE
; A = 0
.loop2: DEC L
; LD A,(HL)
@ -185,6 +223,7 @@ EMM.GetMem: PUSH BC
SCF
POP BC
RET
*/
;----------------------------------------------------------------------;
;
@ -244,12 +283,18 @@ EMM.FreeMemRMD:
; <20><20>Ž<EFBFBD>ˆœ DE!!!
;EMM_FN3M:
EMM.FreeMem:
AND A
SCF
; [ ] free zx pages! ⥯¥àì ­¥«ì§ï ®á¢®¡®¤¨âì áâà ­¨æã #FF
SCF
INC A
RET Z
DEC A
;AND A
;SCF
;
RET Z
;
LD L,A
CP ZX_RAM_ID
CP ZX_RAM_ID ;!FIXIT ; [ ] free zx pages!
CALL Z,SET_ROM_FLAG_ZX
;
IN A,(SLOT3)
@ -257,7 +302,7 @@ EMM.FreeMem:
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high (SYS_PAGE.RAMD_FAT)
LD H,high (SYS_PAGE.RAM_TABLE)
LD A,L
EMM_F3M_L1:
LD L,A
@ -308,7 +353,7 @@ EMM.GetMemPage:
OUT (SLOT1),A
INC B
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
EMM_F4M_L1:
LD A,(HL)
AND A
@ -355,7 +400,7 @@ EMM.GetMemPageNext:
OUT (SLOT1),A
LD A,H
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
LD L,(HL)
OUT (SLOT1),A
LD A,L
@ -395,7 +440,7 @@ EMM.GetMemBlkPages:
LD C,A
LD A,SYS_PAGE
OUT (SLOT1),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
LD L,(HL)
LD A,C
OUT (SLOT1),A
@ -429,7 +474,7 @@ EMM.GetMemBlkPages:
; CP #FF
; JR Z,.end
; ;
; LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
; LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
; LD L,(HL)
; INC B
; JR NZ,.loop
@ -528,7 +573,7 @@ BLK_RD_WR:
OUT (SLOT1),A
LD A,H
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
LD L,A
INC D
@ -612,7 +657,7 @@ BLK_RD_WR:
IN A,(SLOT1)
LD E,A
LD D,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD D,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
LD A,SYS_PAGE
OUT (SLOT1),A
LD A,(DE)
@ -623,7 +668,7 @@ BLK_RD_WR:
.BLK_PAGE3_X:
IN A,(SLOT3)
LD E,A
LD D,high SYS_PAGE.RAMD_FAT
LD D,high SYS_PAGE.RAM_TABLE
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(DE)
@ -1074,7 +1119,7 @@ EMM.DivMemBlocks:
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high (SYS_PAGE.RAMD_FAT); - #4000 - #4000)
LD H,high (SYS_PAGE.RAM_TABLE); - #4000 - #4000)
LD L,D
LD A,(HL)
LD (HL),#FF
@ -1102,7 +1147,7 @@ EMM.MergeMemBlocks:
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high (SYS_PAGE.RAMD_FAT); - #4000 - #4000)
LD H,high (SYS_PAGE.RAM_TABLE); - #4000 - #4000)
LD L,E
LD C,B
LD B,0

View File

@ -154,7 +154,7 @@ PIC_FN3_NO_2ND:
EX AF,AF'
OUT (SLOT2),A
EX AF,AF'
LD HL,SYS_PAGE.RAMD_FAT
LD HL,SYS_PAGE.RAM_TABLE
LD L,A
LD A,SYS_PAGE
OUT (SLOT3),A

View File

@ -335,7 +335,7 @@ REINIT: DEC B
RET NZ
.ReinitZXpages: ;4
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
LD HL,SYS_PAGE.RAMD_FAT ; €¤à¥á FAT އ“.
LD HL,SYS_PAGE.RAM_TABLE ; €¤à¥á FAT އ“.
LD C,SLOT3
IN B,(C)
@ -364,7 +364,7 @@ REINIT: DEC B
JR NC,.errorzxloop_noChanges
DEC DE
LD H,high SYS_PAGE.RAMD_FAT
LD H,high SYS_PAGE.RAM_TABLE
LD A,(DE)
LD L,A
LD A,#FF

View File

@ -25,6 +25,59 @@
MANAGE_ZX_PAGES:
.GET_SCORP: IN A,(SLOT3)
LD E,A
LD A,SYS_PAGE
OUT (SLOT3),A
; ¢ë¤¥«¨âì áâà ­¨æë ᪮௠
XOR A
LD BC,#08*256 + #FF ; B - ª®«¨ç¥á⢮ áâà ­¨æ, C - Œ¥âª  ª®­æ  à ¬¡«®ª 
LD HL,SYS_PAGE.RAM_TABLE
.allocate_loop: DEC L
JR Z,.error_no_mem
CP (HL)
JR NZ,.allocate_loop
;
CALL .check_barred_pages
LD A,0
JR Z,.allocate_loop
;
LD (HL),C
LD C,L
DJNZ .allocate_loop
; L = 㪠§ â¥«ì 楯®çª¨.
AND A
.exit: LD A,E
OUT (SLOT3),A
LD A,L
RET
; 䨫ìâà ¤«ï áâà ­¨æ ᪮௠
;¢ë室: ZF=1 - áâà ­¨æ  ­¥ ¯®¤å®¤¨â
.check_barred_pages:
; check reset page
LD A,L
CP RESET_PAGE
RET C
RET Z
; check isa page
AND #F0
XOR #D0 ; áâà ­¨æë ISA #D0..#DF
RET NZ
LD L,#D0
RET
;
.error_no_mem: PUSH DE
LD A,C
CALL EMM.FreeMem
POP DE
LD L,BIOS.Error.EMM.NoMemory
SCF
JR .exit
/*
;
.GET_SCORP: IN A,(SLOT3)
LD E,A
LD A,SYS_PAGE
@ -80,6 +133,7 @@ MANAGE_ZX_PAGES:
.error_no_mem: LD L,BIOS.Error.EMM.NoMemory
SCF
JR .exit
*/
;-----------------------------------------------------------------------;
ENDIF

View File

@ -265,7 +265,7 @@ CLEARM: IN A,(SLOT3)
LDIR
; ¢®ááâ ­ ¢«¨¢ ¥¬ RAM ¤¨áª¨
LD IX,SYS_PAGE.RAMD_KEYS ;RAM DISKS
LD H,high SYS_PAGE.RAMD_FAT
LD H,high SYS_PAGE.RAM_TABLE
LD D,high MEMMAP2
LD BC,SYS_PAGE.RAMD_KEYS.NUM*256+#FF
CALL .MEMLOOP
@ -1357,7 +1357,7 @@ RCHAIN:
CCHAIN:
LD HL,MEMMAP2
LD DE,SYS_PAGE.RAMD_FAT
LD DE,SYS_PAGE.RAM_TABLE
XOR A
CCHAINC:
CP (HL)

View File

@ -5,9 +5,7 @@
; .setXYpos EQU 3
; .setInt EQU 4
; .setVsinc EQU 5
; DEFINE SPTeam_year '2022'
; DEFINE Disk_subsystem_ver_txt '3.05'
; DEFINE SetupVer '2.55'
LUA ALLPASS
function get_key_for_value(t, value)
for column=1,2 do