+-RST_CONF.INIT_ACEX ; New function "SWAP_RAM_DRIVES" for changing RAM-DRV set ZX<->Sp2000

This commit is contained in:
Anatoliy Belyanskiy 2023-11-05 03:35:19 +10:00
parent 730aae8a89
commit fe3456f584
6 changed files with 199 additions and 122 deletions

@ -1 +1 @@
Subproject commit 8c5550f810d173790e4665d610328b9247b00f02
Subproject commit 809ea1f0b204f2d56555497c1c808806833d6315

View File

@ -132,11 +132,11 @@ TAB_FNS:
DB low EMM.GetMemPageNext ; #95 ¯®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã
DB low EMM.GetBanksPorts ; #96 ¯®«ãç¨âì  ¤à¥á  ¯®à⮢
DB low EMM.CheckColdInit ; #97 ¯à®¢¥àª  ­  宫®¤­ë© áâ àâ ¨ ¨­¨æ¨ «¨§ æ¨¨ ¥á«¨ ®­ ;????? ­ã¦­  «¨ ª ª API?
DB low RAMD_CALC_PAGE ; #98 Fn 98h ;?????
DB low RAMD_CALC_PAGE ; #98 ‚ëç¨á«¥­¨¥ áâà ­¨æë ¨  ¤à¥á  ¢ RAM-Disk ¯®  ¡á®«îâ­®¬ã ­®¬¥àã ᥪâ®à 
DB low SET_DISK_TYPE ; #99 ;?????
DB low DISK_REDIR ; #9A ;?????
DB low GET_RAMD_NUM ; #9B ¯®«ãç¨âì ­®¬¥à ram disk ¯® ¥£® block id
DB low FN_RESERVED ; #9C
DB low SWAP_RAM_DRIVES ; #9C ᬥ­¨âì ­ ¡®à à ¬¤¨áª®¢ ZX <-> Sp2000
DB low EMM.DivMemBlocks ; #9D à §¤¥«¥­¨ï ¡«®ª  ­  ¤¢ .
DB low EMM.MergeMemBlocks ; #9E ᫨ﭨ¥ ¤¢ãå ¡«®ª®¢
DB low EMM.FullInit ; #9F ¨­¨æ¨ «¨§ æ¨ï ¢á¥© ¯ ¬ïâ¨, á¨á⥬­ëå ¯¥à¥¬¥­­ëå
@ -327,8 +327,8 @@ TAB_FNS:
DB high RAMD_CALC_PAGE
DB high SET_DISK_TYPE
DB high DISK_REDIR
DB high FN_RESERVED
DB high FN_RESERVED
DB high GET_RAMD_NUM
DB high SWAP_RAM_DRIVES
DB high EMM.DivMemBlocks
DB high EMM.MergeMemBlocks
DB high EMM.FullInit

View File

@ -64,11 +64,8 @@
;=============================================================
MACRO TEST_40
;[x] ¢ª«î稫 31/10/23, ç¨áâ® ­  •í««®ããã㨨¨­
EX AF,AF'
JR C,.LLL
INC D ; ०¨¬ 40
.LLL:
EX AF,AF'
;
;
ENDM

View File

@ -33,50 +33,58 @@ EMM.GetMemSize:
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
EMM.InitMem:
PUSH BC
PUSH HL
PUSH DE
PUSH BC
PUSH HL
PUSH DE
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT1),A
LD HL,SYS_PAGE.RAMD_FAT - #4000 - #4000 ; €¤à¥á FAT އ“.
; ®¡­ã«ï¥¬ â ¡«¨æã
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT1),A
LD HL,SYS_PAGE.RAMD_FAT - #4000 - #4000 ; €¤à¥á FAT އ“.
; ®¡­ã«ï¥¬ â ¡«¨æã
XOR A
.loopFree:
LD (HL),0
INC L
JR NZ,.loopFree
; १¥à¢¨à㥬 ᯥæ.áâà ­¨æë ¨ áâà ­¨æë ZX
LD B,RESERVED_PAGES.Blocks
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
.loop: LD A,(DE)
CP #FF
JR Z,.exitLoop
LD (HL),A
INC L
JR NZ,.loopFree
; १¥à¢¨à㥬 ᯥæ.áâà ­¨æë ¨ áâà ­¨æë ZX
LD B,RESERVED_PAGES.Blocks
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
.loop: LD A,(DE)
CP #FF
JR Z,.exitLoop
.loopBlk:
INC DE
LD L,A
LD A,(DE)
LD (HL),A
CP #FF
JR NZ,.loopBlk
INC DE
LD L,A
LD A,(DE)
LD (HL),A
CP #FF
JR NZ,.loopBlk
.exitLoop:
INC DE
DJNZ .loop
LD L,A
LD (HL),A
; ˆ­¨æ¨ «¨§ æ¨ï ª«î祩 RAM-Disks
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 (SLOT1),A
POP DE
POP HL
POP BC
INC DE
DJNZ .loop
LD L,A
LD (HL),A
; ˆ­¨æ¨ «¨§ æ¨ï ª«î祩 RAM-Disks
XOR A
LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000
LD B,SYS_PAGE.RAMD_KEYS.NUM
.loop2: LD (HL),A
INC L
DJNZ .loop2
; [x] 4/11/23
LD HL,SYS_PAGE.Sp_RAMD_KEYS - #4000 - #4000
LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM
.loop3: LD (HL),A
INC L
DJNZ .loop3
;
LD A,C
OUT (SLOT1),A
POP DE
POP HL
POP BC
RET
;---------------------------------------------------------------------[]
RESERVED_PAGES:
@ -345,38 +353,6 @@ EMM.GetMemPageNext:
; ‚室: A - ¡«®ª, HL -  ¤à¥á ¡ãä¥à  - 256 ¡ ©â.
; ‚ë室: HL -  ¤à¥á ¡«®ª , B - ¤«¨­  ¡«®ª  ¢ áâà ­¨æ å އ“
;EMM_FN5M:
; EMM.GetMemBlkPages:
; PUSH DE
; PUSH HL
; EX DE,HL
; LD B,0
; LD L,A
; .loop: LD A,L
; LD (DE),A
; INC DE
; AND A
; JR Z,.error
; CP #FF
; JR Z,.end
; ;
; IN A,(SLOT1)
; LD C,A
; LD A,SYS_PAGE
; OUT (SLOT1),A
; LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
; LD L,(HL)
; LD A,C
; OUT (SLOT1),A
; ;
; INC B
; JR NZ,.loop
; .error: SCF
; .end: POP HL
; POP DE
; RET
EMM.GetMemBlkPages:
PUSH DE
PUSH HL
@ -384,11 +360,6 @@ EMM.GetMemBlkPages:
LD B,0
LD L,A
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT1),A
.loop: LD A,L
LD (DE),A
INC DE
@ -397,17 +368,55 @@ EMM.GetMemBlkPages:
CP #FF
JR Z,.end
;
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT1),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD L,(HL)
LD A,C
OUT (SLOT1),A
;
INC B
JR NZ,.loop
.error: SCF
.end: LD A,C
OUT (SLOT1),A
POP HL
.end: POP HL
POP DE
RET
; RAMDRV.EXE ¢ë§ë¢ ¥â íâã äã­ªæ¨î á  ¤à¥á®¬ ¢ SLOT1, ¯®í⮬㠫ãçè¥ â ª ­¥ ®¯â¨¬¨§¨à®¢ âì
; EMM.GetMemBlkPages:
; PUSH DE
; PUSH HL
; EX DE,HL
; LD B,0
; LD L,A
; IN A,(SLOT1)
; LD C,A
; LD A,SYS_PAGE
; OUT (SLOT1),A
; .loop: LD A,L
; LD (DE),A
; INC DE
; AND A
; JR Z,.error
; CP #FF
; JR Z,.end
; ;
; LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
; LD L,(HL)
; INC B
; JR NZ,.loop
; .error: SCF
; .end: LD A,C
; OUT (SLOT1),A
; POP HL
; POP DE
; RET
;----------------------------------------------------------------------;
;
@ -843,6 +852,52 @@ GET_RAMD_NUM:
;
;
;----------------------------------------------------------------------;
; [x] 4/11/23
; ‚室:
; B = 0: swap to Sp
; B = #FF: swap to ZX
; B = #FE: no swap, only get info
; ‚ë室:
; A - current RAM Drives set
SWAP_RAM_DRIVES:
IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_RAM_DRV)
CP B
JR Z,.exit ; 㦥 ãáâ ­®¢«¥­ § ¯à è¨¢ ¥¬ë© ­ ¡®à
;
LD A,#FE
CP B
JR Z,.exit ; ­¨ç¥£® ­¥ ¬¥­ïâì, ¢ë¤ âì ⥪ã騩 ­ ¡®à
;
.swap: LD HL,SYS_PAGE.RAMD_KEYS
LD DE,SYS_PAGE.Sp_RAMD_KEYS
LD B,SYS_PAGE.RAMD_KEYS.NUM
.loop: LD A,(DE)
LD C,A
LD A,(HL)
LD (DE),A
LD A,C
LD (HL),A
INC HL
INC DE
DJNZ .loop
;
LD A,(SYS_PAGE.CURRENT_RAM_DRV)
XOR #FF
LD (SYS_PAGE.CURRENT_RAM_DRV),A
;
.exit: POP AF
OUT (SLOT3),A
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;

View File

@ -166,11 +166,16 @@ INIT_SYS_ALL:
LD HL,SYS_PAGE.RAMD_KEYS-#4000
LD DE,SYS_PAGE.RAMD_KEYS+1-#4000
LD BC,SYS_PAGE.RAMD_KEYS.NUM-1
LD (HL),0
LDIR
; [x] 4/11/23
LD HL,SYS_PAGE.Sp_RAMD_KEYS-#4000
LD DE,SYS_PAGE.Sp_RAMD_KEYS+1-#4000
LD BC,SYS_PAGE.Sp_RAMD_KEYS.NUM-1
LD (HL),0
LDIR
;
LD DE,ZG_ADDRESS ;  ¤à¥á §­ ª®£¥­¥à â®à 
LD (SYS_PAGE.WIN_ZG-#4000),DE
;

View File

@ -72,9 +72,9 @@
;FDD EQU #03
TEMP EQU #7E00 ; !HARDCODE
TEMP EQU #7E00 ; !HARDCODE
MEMMAP2 EQU TEMP ; ¤®«¦­® ¡ëâì ¢ë஢­¥­® ¯® ALIGN 256
TPOINTD EQU TEMP-32
TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/23
;=======================================
@ -161,7 +161,7 @@ GETTIME:
; .correct_century:
; LD (HL),A
; LD D,#32 ;CENTURY
; LD C,#F7 ; !HARDCODE
; LD C,#F7 ; !HARDCODE
; RST_to_BIOS_18
POP HL
@ -237,35 +237,42 @@ CMSERR:
; LD D,13
; LD A,#80 ; !FIXIT CMOS
; LD C,#F7 ; !HARDCODE
; LD C,#F7 ; !HARDCODE
; RST_to_BIOS
RET
CLEARM:
IN A,(SLOT3)
CLEARM: IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
OUT (SLOT3),A
; save RAM disks on reboot when memory is cleared
LD HL,SYS_PAGE.RAMD_KEYS
LD DE,TPOINTD
LD BC,SYS_PAGE.RAMD_KEYS.NUM
LDIR
LDIR
; [x] 4/11/23
LD HL,SYS_PAGE.Sp_RAMD_KEYS
LD DE,TPOINTD + SYS_PAGE.RAMD_KEYS.NUM
LD BC,SYS_PAGE.Sp_RAMD_KEYS.NUM
LDIR
;
; ®ç¨é ¥¬ RAM Table
LD HL,MEMMAP2
LD DE,MEMMAP2+1
LD BC,255
LD (HL),0
LDIR
LD IX,SYS_PAGE.RAMD_KEYS ;RAM DISKS
LD H,#C2
; ¢®ááâ ­ ¢«¨¢ ¥¬ RAM ¤¨áª¨
LD IX,SYS_PAGE.RAMD_KEYS ;RAM DISKS
LD H,high SYS_PAGE.RAMD_FAT
LD D,high MEMMAP2
LD BC,#10FF
MEMLOOP:
LD A,(IX)
INC IX
OR A
LD L,A
CALL NZ,RCHAIN
DJNZ MEMLOOP
LD BC,SYS_PAGE.RAMD_KEYS.NUM*256 + #FF
CALL .MEMLOOP
; [x] 4/11/23
LD IX,SYS_PAGE.Sp_RAMD_KEYS
LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM
CALL .MEMLOOP
;
CALL EMM.InitMem
LD BC,#400E ;!HARDCODE
CALL G_VALUE
@ -273,7 +280,19 @@ MEMLOOP:
CALL NZ,CCHAIN
POP AF
OUT (SLOT3),A
RET
;!TEST; [ ] 04/11/2023 Žâ¤¥«ì­ë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS. BLK_TO_RAMD
LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000
JP SWAP_RAM_DRIVES
;
;
.MEMLOOP:
LD A,(IX)
INC IX
OR A
LD L,A
CALL NZ,RCHAIN
DJNZ .MEMLOOP
RET
;
;
@ -644,7 +663,7 @@ INFO_MESSAGE: ;!FIXIT
CALL TSETUP
LD BC,#0710 ; !HARDCODE ¬ áª  ¨ ï祩ª  ¤«ï ç⥭¨ï §­ ç¥­¨ï ª¬®á ¤«ï ®á­®¢­®£® § £à㧮筮£® ¤à ©¢ 
LD BC,#0710 ; !HARDCODE ¬ áª  ¨ ï祩ª  ¤«ï ç⥭¨ï §­ ç¥­¨ï ª¬®á ¤«ï ®á­®¢­®£® § £à㧮筮£® ¤à ©¢ 
CALL PrepareToBOOT
LD A,msgStrings.bootFail
LD E,COLORS.CGA.INC.LRED
@ -657,7 +676,7 @@ ABOOT: LD A,msgStrings.bootAltDrv
;CALL C,POSTMSG
CALL C,POSTMSC
LD BC,#7010 ; !HARDCODE ¬ áª  ¨ ï祩ª  ¤«ï ç⥭¨ï §­ ç¥­¨ï ª¬®á ¤«ï  «ìâ¥à­ â¨¢­®£® § £à㧮筮£® ¤à ©¢ 
LD BC,#7010 ; !HARDCODE ¬ áª  ¨ ï祩ª  ¤«ï ç⥭¨ï §­ ç¥­¨ï ª¬®á ¤«ï  «ìâ¥à­ â¨¢­®£® § £à㧮筮£® ¤à ©¢ 
CALL PrepareToBOOT
LD A,msgStrings.bootFail
LD E,COLORS.CGA.INC.LRED
@ -925,12 +944,12 @@ CDSTART:
RDSTART:
LD A,msgStrings.bootRamDrv
CALL POSTMSG
LD B,#60 ; !HARDCODE: 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ­®¬¥à ¤à ©¢ 
LD B,#60 ; !HARDCODE: 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ­®¬¥à ¤à ©¢ 
.loop: PUSH BC
CALL OS_LOAD
POP BC
INC B
LD A,#6F ; !HARDCODE - ¬ ªá¨¬ «ì­®¥ ç¨á«® à ¬¤¨áª®¢
LD A,#6F ; !HARDCODE - ¬ ªá¨¬ «ì­®¥ ç¨á«® à ¬¤¨áª®¢
SUB B
JR NC,.loop
RET
@ -1035,14 +1054,15 @@ FINSTAL:
LD A,SYS_PAGE
OUT (SLOT3),A
LD HL,FDD_INI_TABLE.FDD_0
LD BC,#20FF ;!HARDCODE table
FILLFDD:
LD BC,SYS_PAGE.FDD_TBL.Size*256 + #FF ; table_size*256 + fill_byte
.FILLFDD:
LD (HL),C
INC HL
DJNZ FILLFDD
DJNZ .FILLFDD
;
EX AF,AF'
OUT (SLOT3),A
LD BC,#0311
LD BC,#0311 ; !HARDCODE
CALL G_VALUE
LD HL,FD720A
OR A
@ -1056,7 +1076,7 @@ SETFD0:
LD A,SYS_PAGE
OUT (SLOT3),A
LD DE,FDD_INI_TABLE.FDD_0
LD BC,#0008 ; !HARDCODE
LD BC,#0008 ; !HARDCODE
LDIR
EX AF,AF'
OUT (SLOT3),A
@ -1075,7 +1095,7 @@ SETFD1:
LD A,SYS_PAGE
OUT (SLOT3),A
LD DE,FDD_INI_TABLE.FDD_1
LD BC,#0008 ; !HARDCODE
LD BC,#0008 ; !HARDCODE
LDIR
EX AF,AF'
OUT (SLOT3),A
@ -1527,9 +1547,9 @@ POSTMSC:
JP CPRINTZ
SETLAND:
LD A,#0E ; !HARDCODE CMOS ï祩ª  options
LD A,#0E ; !HARDCODE CMOS ï祩ª  options
CALL READCMS
AND #04 ; !HARDCODE CMOS §­ ç¥­¨¥ ï§ëª 
AND #04 ; !HARDCODE CMOS §­ ç¥­¨¥ ï§ëª 
JR NZ,.RUS
;
LD HL,MSG_ENG