...temp...

This commit is contained in:
Tolik 2024-08-24 00:33:34 +10:00
parent 8b94cc4e63
commit d80b79a832
8 changed files with 851 additions and 852 deletions

@ -1 +1 @@
Subproject commit 75ceae51d36476f236476681aac5c7619ca22005
Subproject commit e9d481a5565338505710b08e50d22a8579c400be

Binary file not shown.

View File

@ -717,9 +717,6 @@ POST_5_OK:
;
LD A,SYS_PAGE
OUT (SLOT3),A
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
MODULE SET_CONFIG_ID
;-------------[Save IX:IY]--------------

View File

@ -49,8 +49,7 @@ EMM.GetMemSize: IN A,(SLOT1)
;
;----------------------------------------------------------------------;
; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
EMM.InitMem:
PUSH BC
EMM.InitMem: PUSH BC
PUSH HL
PUSH DE
@ -236,21 +235,20 @@ EMM.GetMem: PUSH BC
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
;EMM.GetMem:
EMM.GetMemRMD:
PUSH AF
EMM.GetMemRMD: PUSH AF
CALL EMM.GetMem
JR C,.error1
;
LD B,A
POP AF
CALL BLK_TO_RAMD
RET NC
.error2:
LD L,BIOS.Error.BadNumber ; RAM-Disk § ­ïâ
;
.error2: LD L,BIOS.Error.BadNumber ; RAM-Disk § ­ïâ
LD A,L
RET
.error1:
POP HL ; ç¨á⨬ á⥪
;
.error1: POP HL ; ç¨á⨬ á⥪
LD L,A
RET
;----------------------------------------------------------------------;
@ -261,8 +259,7 @@ EMM.GetMemRMD:
;----------------------------------------------------------------------;
; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk
EMM.FreeMemRMD:
CALL GET_RAMD_ST
EMM.FreeMemRMD: CALL GET_RAMD_ST
RET C
SCF
RET Z
@ -271,7 +268,7 @@ EMM.FreeMemRMD:
LD B,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high SYS_PAGE.RAMD_KEYS; - #4000 - #4000
LD H,high SYS_PAGE.RAMD_KEYS
LD (HL),0
LD A,B
OUT (SLOT3),A
@ -282,8 +279,7 @@ EMM.FreeMemRMD:
; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ
; <20><20>Ž<EFBFBD>ˆœ DE!!!
;EMM_FN3M:
EMM.FreeMem:
; [ ] free zx pages! ⥯¥àì ­¥«ì§ï ®á¢®¡®¤¨âì áâà ­¨æã #FF
EMM.FreeMem: ; [ ] free zx pages! ⥯¥àì ­¥«ì§ï ®á¢®¡®¤¨âì áâà ­¨æã #FF
SCF
INC A
RET Z
@ -293,33 +289,40 @@ EMM.FreeMem:
;
RET Z
;
LD L,A
LD C,A
CP ZX_RAM_ID ;!FIXIT ; [ ] free zx pages!
CALL Z,SET_ROM_FLAG_ZX
CALL Z,RES_FLAG_ZXvROM
;
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high (SYS_PAGE.RAM_TABLE)
LD A,L
EMM_F3M_L1:
LD L,A
LD H,high SYS_PAGE.RAM_TABLE
LD A,C
.loop: LD L,A
LD A,(HL) ; á«¥¤ãî騩 ¡«®ª
AND A
JR Z,EMM_FN3M_ERR
JR Z,.error
LD (HL),0 ; Žá¢®¡®¤¨âì
CP #FF ; …᫨ ­¥ ª®­¥æ
JR NZ,EMM_F3M_L1 ; ¯à®¤®«¦ âì
JR NZ,.loop ; ¯à®¤®«¦ âì
EX AF,AF'
; !TEST 23/08/2024 ¢®ááâ ­®¢«¥­¨¥ 楯®çª¨ ¥á«¨ ®á¢®¡®¦¤ «¨ ­¥ á ­ ç « 
LD A,C
LD L,0
LD BC,256
CPIR
JR NZ,.exit
DEC HL
LD (HL),#FF
;
.exit: EX AF,AF'
OUT (SLOT3),A
XOR A ; no error code
RET
EMM_FN3M_ERR:
EX AF,AF'
.error: EX AF,AF'
OUT (SLOT3),A
LD A,BIOS.Error.BadNumber
SCF
@ -474,7 +477,7 @@ EMM.GetMemBlkPages:
; CP #FF
; JR Z,.end
; ;
; LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
; LD H,high +(SYS_PAGE.RAM_TABLE - #4000 - #4000)
; LD L,(HL)
; INC B
; JR NZ,.loop
@ -490,6 +493,312 @@ EMM.GetMemBlkPages:
;
;----------------------------------------------------------------------;
; à §¤¥«¨âì ¡«®ª ¯ ¬ï⨠­  ¤¢  ¡«®ª 
; A - ¡«®ª, B - ¤«¨­  ¯¥à¢®£® ¡«®ª  ¯®á«¥ à §¤¥«¥­¨ï
; ¢ë室: A - ¡«®ª 1, B - ¡«®ª 2
EMM.DivMemBlocks:
INC B
DEC B
SCF
RET Z
DEC B
LD E,A
CALL EMM.GetMemPage ; ¯®«ãç¨âì ­®¬¥à áâà ­¨æë ¡«®ª 
RET C
LD D,A
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high +(SYS_PAGE.RAM_TABLE); - #4000 - #4000)
LD L,D
LD A,(HL)
LD (HL),#FF
LD B,A
EX AF,AF'
OUT (SLOT3),A
LD A,E
AND A
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ᫨âì ¤¢  ¡«®ª  ¯ ¬ï⨠¢ ®¤¨­
; € - ¡«®ª 1, B - ¡«®ª 2
; ¢ë室: € - ¡«®ª
EMM.MergeMemBlocks:
LD E,A
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high SYS_PAGE.RAM_TABLE
LD C,B
LD B,0
.ADD_L: LD A,(HL)
AND A
JR Z,.ADD_ERR
CP #FF
JR Z,.ADD_NEXT
LD L,A
DJNZ .ADD_L
.ADD_ERR:
EX AF,AF'
OUT (SLOT3),A
SCF
RET
.ADD_NEXT:
LD A,C
AND A
JR Z,.ADD_ERR
LD (HL),A
EX AF,AF'
OUT (SLOT3),A
AND A
LD A,E
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ¢å®¤: DE - ram_disk trk_sec, A - RAM-Disk
; ¢ë室: HL -  ¤à¥á, A - page
RAMD_CALC_PAGE:
CP 16
CCF
RET C ; <20> ’€ŠŽƒŽ RAM-Disk
PUSH AF
LD H,D
LD L,E
ADD HL,HL
ADD HL,HL
LD B,H
LD A,E
OR #C0
LD C,A ; C - ç áâì  ¤à¥á , B - áâà ­¨æ 
POP AF
CALL EMM.GetMemPageRMD ; <20>Ž“—ˆœ <E28098><EFBFBD>ˆ
LD L,0
LD H,C
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ‚室:
; A - RAM Disk ID
; ‚ë室:
; A - Number (0..15)
GET_RAMD_NUM:
EX AF,AF'
IN A,(SLOT1)
EX AF,AF'
LD BC,SYS_PAGE*256+SLOT1
OUT (C),B
LD HL,SYS_PAGE.RAMD_KEYS-#4000-#4000
LD BC,SYS_PAGE.RAMD_KEYS.NUM
CPIR
EX AF,AF'
OUT (SLOT1),A
EX AF,AF'
SCF
RET PE
DEC L
LD A,L
SUB low SYS_PAGE.RAMD_KEYS
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; [x] 04/11/2023
; ‚室:
; 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)
EX AF,AF'
PUSH AF ;­  ¢á直© á«ãç ©
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_RAM_DRV)
LD C,A
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
LD C,A
;
.exit: EX AF,AF'
OUT (SLOT3),A
POP AF
EX AF,AF'
LD A,C
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ­  ¢ë室¥ ¯à¨ € = 0 ¤®«¦¥­ ¡ëâì ãáâ ­®¢«¥­ ä« £ Z
; ­¥ 㡨¢ ¥â DE ¨ BC
GET_RAMD_ST:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH BC
LD HL,SYS_PAGE.RAMD_KEYS-#4000-#4000
ADD A,L
LD L,A
IN A,(SLOT1)
LD B,A
LD A,SYS_PAGE
OUT (SLOT1),A
LD C,(HL)
LD A,B
OUT (SLOT1),A
LD A,C
POP BC
AND A
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; RAM-Disk A, BLK - B
BLK_TO_RAMD:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH HL
LD L,A
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,L
LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000
ADD A,L
LD L,A
LD A,(HL) ; ª«îç ¡«®ª 
AND A
JR NZ,BLK_BUSY ; RAM-Disk § ­ïâ - ®è¨¡ª 
LD (HL),B
LD A,C
OUT (SLOT3),A
LD A,B
AND A
POP HL
RET
;
BLK_BUSY:
LD A,C
OUT (SLOT3),A
SCF
POP HL
LD A,L
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; RAM-Disk A
RAMD_CLEAR:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH HL
LD L,A
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,L
LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 ; RAM-Disk ᢮¡®¤¥­
ADD A,L
LD L,A
LD B,A ; § ¯®¬­¨âì 㤠«ï¥¬ë© à ¬¤¨áª
LD A,(HL)
AND A
JR Z,BLK_BUSY ; ¢®§¢à â á ®è¨¡ª®©
LD (HL),0
LD A,C
OUT (SLOT3),A
AND A
POP HL
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
;RAMD_R_W:
@ -573,7 +882,7 @@ BLK_RD_WR:
OUT (SLOT1),A
LD A,H
LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
LD H,high +(SYS_PAGE.RAM_TABLE-#4000-#4000)
LD L,A
INC D
@ -657,7 +966,7 @@ BLK_RD_WR:
IN A,(SLOT1)
LD E,A
LD D,high (SYS_PAGE.RAM_TABLE - #4000 - #4000)
LD D,high +(SYS_PAGE.RAM_TABLE-#4000-#4000)
LD A,SYS_PAGE
OUT (SLOT1),A
LD A,(DE)
@ -871,310 +1180,3 @@ ROM_DISK:
.readProcedure.size EQU $-.readProcedure
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ¢å®¤: DE - ram_disk trk_sec, A - RAM-Disk
; ¢ë室: HL -  ¤à¥á, A - page
RAMD_CALC_PAGE:
CP 16
CCF
RET C ; <20> ’€ŠŽƒŽ RAM-Disk
PUSH AF
LD H,D
LD L,E
ADD HL,HL
ADD HL,HL
LD B,H
LD A,E
OR #C0
LD C,A ; C - ç áâì  ¤à¥á , B - áâà ­¨æ 
POP AF
CALL EMM.GetMemPageRMD ; <20>Ž“—ˆœ <E28098><EFBFBD>ˆ
LD L,0
LD H,C
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ‚室:
; A - RAM Disk ID
; ‚ë室:
; A - Number (0..15)
GET_RAMD_NUM:
EX AF,AF'
IN A,(SLOT1)
EX AF,AF'
LD BC,SYS_PAGE * 256 + SLOT1
OUT (C),B
LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000
LD BC,SYS_PAGE.RAMD_KEYS.NUM
CPIR
EX AF,AF'
OUT (SLOT1),A
EX AF,AF'
SCF
RET PE
DEC L
LD A,L
SUB low SYS_PAGE.RAMD_KEYS
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; [x] 04/11/2023
; ‚室:
; 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)
EX AF,AF'
PUSH AF ;­  ¢á直© á«ãç ©
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_RAM_DRV)
LD C,A
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
LD C,A
;
.exit: EX AF,AF'
OUT (SLOT3),A
POP AF
EX AF,AF'
LD A,C
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ­  ¢ë室¥ ¯à¨ € = 0 ¤®«¦¥­ ¡ëâì ãáâ ­®¢«¥­ ä« £ Z
; ­¥ 㡨¢ ¥â DE ¨ BC
GET_RAMD_ST:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH BC
LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000
ADD A,L
LD L,A
IN A,(SLOT1)
LD B,A
LD A,SYS_PAGE
OUT (SLOT1),A
LD C,(HL)
LD A,B
OUT (SLOT1),A
LD A,C
POP BC
AND A
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; RAM-Disk A, BLK - B
BLK_TO_RAMD:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH HL
LD L,A
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,L
LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000
ADD A,L
LD L,A
LD A,(HL) ; ª«îç ¡«®ª 
AND A
JR NZ,BLK_BUSY ; RAM-Disk § ­ïâ - ®è¨¡ª 
LD (HL),B
LD A,C
OUT (SLOT3),A
LD A,B
AND A
POP HL
RET
;
BLK_BUSY:
LD A,C
OUT (SLOT3),A
SCF
POP HL
LD A,L
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; RAM-Disk A
RAMD_CLEAR:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH HL
LD L,A
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,L
LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 ; RAM-Disk ᢮¡®¤¥­
ADD A,L
LD L,A
LD B,A ; § ¯®¬­¨âì 㤠«ï¥¬ë© à ¬¤¨áª
LD A,(HL)
AND A
JR Z,BLK_BUSY ; ¢®§¢à â á ®è¨¡ª®©
LD (HL),0
LD A,C
OUT (SLOT3),A
AND A
POP HL
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; à §¤¥«¨âì ¡«®ª ¯ ¬ï⨠­  ¤¢  ¡«®ª 
; A - ¡«®ª, B - ¤«¨­  ¯¥à¢®£® ¡«®ª  ¯®á«¥ à §¤¥«¥­¨ï
; ¢ë室: A - ¡«®ª 1, B - ¡«®ª 2
EMM.DivMemBlocks:
INC B
DEC B
SCF
RET Z
DEC B
LD E,A
CALL EMM.GetMemPage ; ¯®«ãç¨âì ­®¬¥à áâà ­¨æë ¡«®ª 
RET C
LD D,A
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high (SYS_PAGE.RAM_TABLE); - #4000 - #4000)
LD L,D
LD A,(HL)
LD (HL),#FF
LD B,A
EX AF,AF'
OUT (SLOT3),A
LD A,E
AND A
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ᫨âì ¤¢  ¡«®ª  ¯ ¬ï⨠¢ ®¤¨­
; € - ¡«®ª 1, B - ¡«®ª 2
; ¢ë室: € - ¡«®ª
EMM.MergeMemBlocks:
LD E,A
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD H,high (SYS_PAGE.RAM_TABLE); - #4000 - #4000)
LD L,E
LD C,B
LD B,0
.EMM_ADD_L:
LD A,(HL)
AND A
JR Z,.EMM_ADD_ERR
CP #FF
JR Z,.EMM_ADD_NEXT
LD L,A
DJNZ .EMM_ADD_L
.EMM_ADD_ERR:
EX AF,AF'
OUT (SLOT3),A
SCF
RET
.EMM_ADD_NEXT:
LD A,C
AND A
JR Z,.EMM_ADD_ERR
LD (HL),A
EX AF,AF'
OUT (SLOT3),A
AND A
LD A,E
RET
;----------------------------------------------------------------------;
;

View File

@ -428,7 +428,7 @@ REINIT: DEC B
;
;----------------------------------------------------------------------;
; ­¥ ¤®«¦­® ¯®àâ¨âì DE
SET_ROM_FLAG_ZX:
RES_FLAG_ZXvROM:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'

View File

@ -183,6 +183,12 @@ EMM.FullInit:
OUT (SLOT2),A
INIT_SYS_ALL:
DI
; LD HL,#8000
; LD DE,#8001
; LD (HL),0
; LD BC,#3FFF
; LDIR
;
; LD HL,ID_SPRINTER_FullSize
; LD DE,SYS_PAGE.ID_FLAG - #4000
; LD C,(HL)
@ -283,9 +289,9 @@ INIT_CONFIG_ALL:
LD DE,CNF_PORT.CNF_0 + ROM.BIOS
LD (SYS_PAGE.CONFIG_DE - #4000),DE
LD HL,SYS_PAGE.CURRENT_TASK - #4000 ; 㡨âì ¢á¥ § ¤ ç¨
LD DE,SYS_PAGE.CURRENT_TASK+1 - #4000
LD BC,ZX_TASK_DATA * SYS_PAGE.CURRENT_TASK.Size - 1 ; #FF
LD HL,SYS_PAGE.ZX_TASK.CURRENT - #4000 ; 㡨âì ¢á¥ § ¤ ç¨
LD DE,SYS_PAGE.ZX_TASK.CURRENT+1 - #4000
LD BC,_#ZX_TASK - 1
LD (HL),0
LDIR

View File

@ -9,10 +9,13 @@
;
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
; [ ] free zx pages!
; ????? SYS_PAGE.SHARED_BUFFER_256b
;
; [ ] ‘âà ­¨æ  އ“ ¤«ï ᪮௠ ¢ SLOT0 ¤®«¦­  ᮢ¯ ¤ âì á ­ã«¥¢®© áâà ­¨æ¥© ¯®àâ  #7FFD
IF FREE_ZX_PAGES
MODULE MANAGE_ZX_PAGES
;----------------[‚뤥«¥­¨¥/®á¢®¡®¦¤¥­¨¥ áâà ­¨æ ᯥªâà㬠]-------------;
;¢å®¤: ॣ B: 0 - ¨­¨â ¯ ¬ï⨠Spectrum 48k
; 1 - ¨­¨â ¯ ¬ï⨠Pentagon 128k
@ -22,17 +25,65 @@
;
;¢ë室: CF = 0: A - ­®¬¥à à ¬¡«®ª 
; CF = 1: A - ­®¬¥à ®è¨¡ª¨
MANAGE_ZX_PAGES:
FN_ENTRANCE:
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚믮«­ï¥âáï ¢á¥£¤  ¤«ï ¨­¨â  âàñå áâà ­¨æ އ“
INIT_48k_MEM:
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
INIT_SCORP_RAM:
DI
LD A,5
OUT (SLOT1),A
; #1FFD
LD BC,#1FFD
XOR A
OUT (SLOT0),A
OUT (C),A
; #7FFD
LD B,#7F
LD A,8
LOOP_P1: DEC A
OUT (C),A
OUT (SLOT3),A
JR NZ,LOOP_P1
; #1FFD
LD B,#1F
LD A,#10
OUT (C),A
; #7FFD
LD B,#7F
LD A,8
LOOP_P2: OUT (C),A
OUT (SLOT3),A
INC A
CP 16
JR NZ,LOOP_P2
;
XOR A
OUT (C),A
; #1FFD
LD B,#1F
OUT (C),A
;-----------------------------------------------------------------------;
.GET_SCORP: IN A,(SLOT3)
;-----------------------------------------------------------------------;
;‚室: ---
;‚ë室: A - RAM block ID
GET_SCORP_RAM: IN A,(SLOT3)
LD E,A
LD A,SYS_PAGE
OUT (SLOT3),A
; ¢ë¤¥«¨âì áâà ­¨æë ᪮௠
XOR A
LD BC,#08*256 + #FF ; B - ª®«¨ç¥á⢮ áâà ­¨æ, C - Œ¥âª  ª®­æ  à ¬¡«®ª 
LD BC,8*256 + #FF ; B - ª®«¨ç¥á⢮ áâà ­¨æ, C - Œ¥âª  ª®­æ  à ¬¡«®ª 
LD HL,SYS_PAGE.RAM_TABLE
.allocate_loop: DEC L
JR Z,.error_no_mem
@ -74,68 +125,11 @@ MANAGE_ZX_PAGES:
LD L,BIOS.Error.EMM.NoMemory
SCF
JR .exit
/*
;
.GET_SCORP: IN A,(SLOT3)
LD E,A
LD A,SYS_PAGE
OUT (SLOT3),A
; ¯à®¢¥à¨âì ­ «¨ç¨¥ ᢮¡®¤­ëå áâà ­¨æ ᪮௠
; B = ª®«¨ç¥á⢮ áâà ­¨æ
LD B,8
XOR A
.check_loop: DEC L
JR Z,.error_no_mem
CP (HL)
JR NZ,.check_loop
;
CALL .check_barred_pages
LD A,0
JR Z,.check_loop
DJNZ .check_loop
; A = 0
; ¢ë¤¥«¨âì áâà ­¨æë ᪮௠
LD B,8
.allocate_loop: DEC L
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: LD L,BIOS.Error.EMM.NoMemory
SCF
JR .exit
*/
;-----------------------------------------------------------------------;
ENDMODULE
ENDIF
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;-----------------------------------------------------------------------;

View File

@ -131,49 +131,49 @@ TASK_SWITCH:
LD A,SYS_PAGE
OUT (SLOT3),A
LD IX,SYS_PAGE.CURRENT_TASK ; ¤ ­­ë¥ § ¤ ç
LD IX,SYS_PAGE.ZX_TASK.CURRENT ; ¤ ­­ë¥ § ¤ ç
; !TEST
;LD E,(IX)
;LD D,0
;ADD IX,DE
;LD E,SYS_PAGE.CURRENT_TASK.Size
;ADD IX,DE
LD A,SYS_PAGE.CURRENT_TASK.Size ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
LD A,_#ZX_TASK_DATA ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
ADD A,(IX) ; ᬥ饭¨¥ ¤ ­­ëå ⥪ã饩 § ¤ ç¨
LD E,A
LD D,0
ADD IX,DE ; ¤ ­­ë¥ ⥪ã饩 § ¤ ç¨
;
LD (IX + ZX_TASK_DATA.SLOT3_PAGE),B ; á®åà ­¨âì áâà ­¨æã 3
LD (IX + _#ZX_TASK_DATA.SLOT3_PAGE),B ; á®åà ­¨âì áâà ­¨æã 3
LD HL,0
ADD HL,SP
LD (IX + ZX_TASK_DATA.SP),L ; á®åà ­¨âì á⥪ § ¤ ç¨
LD (IX + ZX_TASK_DATA.SP + 1),H
SET 0,(IX + ZX_TASK_DATA.STATE) ; ãáâ ­®¢¨âì ä« £ á®åà ­¥­­®á⨠⥪ã饩 § ¤ ç¨
RES 1,(IX + ZX_TASK_DATA.STATE) ; ãáâ ­®¢¨âì ä« £, çâ® § ¤ ç  ¯®ª¨­ãâ 
LD (IX + _#ZX_TASK_DATA.SP),L ; á®åà ­¨âì á⥪ § ¤ ç¨
LD (IX + _#ZX_TASK_DATA.SP + 1),H
SET 0,(IX + _#ZX_TASK_DATA.STATE) ; ãáâ ­®¢¨âì ä« £ á®åà ­¥­­®á⨠⥪ã饩 § ¤ ç¨
RES 1,(IX + _#ZX_TASK_DATA.STATE) ; ãáâ ­®¢¨âì ä« £, çâ® § ¤ ç  ¯®ª¨­ãâ 
LD IX,SYS_PAGE.CURRENT_TASK
LD IX,SYS_PAGE.ZX_TASK.CURRENT
; !TEST
;LD E,C
;LD D,0
;ADD IX,DE ; ­®¢ ï § ¤ ç 
;LD E,16
LD A,SYS_PAGE.CURRENT_TASK.Size ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
LD A,_#ZX_TASK_DATA ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
ADD A,C ; ᬥ饭¨¥ ¤ ­­ëå ­®¢®© § ¤ ç¨
LD E,A
LD D,0
;
ADD IX,DE ; ¤ ­­ë¥ ­®¢®© § ¤ ç¨
BIT 1,(IX + ZX_TASK_DATA.STATE)
; BIT 1,(IX + _#ZX_TASK_DATA.STATE)
; JR NZ,TASK_IN_WORK ; § ¤ ç  ¢ à ¡®â¥ ??? ­¥¢¥à­®¥ § ¢¥à襭¨¥
; ; á¡à á뢠âì ¨«¨ ¯à®áâ® ¢®§¢à é âìáï
BIT 0,(IX + ZX_TASK_DATA.STATE) ; ¡ë«  á®åà ­¥­ /­¥â
BIT 0,(IX + _#ZX_TASK_DATA.STATE) ; ¡ë«  á®åà ­¥­ /­¥â
JR NZ,TASK_SET ; § ¤ ç  áãé¥áâ¢ã¥â
; § ¤ ç¨ ­¥ ¡ë«®!
LD IX,SYS_PAGE.CURRENT_TASK
LD IX,SYS_PAGE.ZX_TASK.CURRENT
LD A,C ; § ¤ ç 
LD (IX),A ; ãáâ ­®¢¨âì ­®¢ãî § ¤ çã ⥪ã饩
@ -191,7 +191,7 @@ TASK_RESTORE:
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,C
LD IX,SYS_PAGE.CURRENT_TASK
LD IX,SYS_PAGE.ZX_TASK.CURRENT
LD (IX),A ; ãáâ ­®¢¨âì ­®¢ãî § ¤ çã ⥪ã饩
; !TEST
@ -199,16 +199,16 @@ TASK_RESTORE:
;LD D,0
;ADD IX,DE ; ­®¢ ï § ¤ ç 
;LD E,16
ADD A,SYS_PAGE.CURRENT_TASK.Size ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
ADD A,_#ZX_TASK_DATA ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
LD E,A
LD D,0
;
ADD IX,DE
LD L,(IX + ZX_TASK_DATA.SP) ; ¢á¯®¬­¨âì á⥪
LD H,(IX + ZX_TASK_DATA.SP + 1)
LD L,(IX + _#ZX_TASK_DATA.SP) ; ¢á¯®¬­¨âì á⥪
LD H,(IX + _#ZX_TASK_DATA.SP + 1)
LD SP,HL
LD A,(IX + ZX_TASK_DATA.SLOT3_PAGE); ¢á¯®¬­¨âì âà¥âìî áâà ­¨æã
LD A,(IX + _#ZX_TASK_DATA.SLOT3_PAGE); ¢á¯®¬­¨âì âà¥âìî áâà ­¨æã
OUT (SLOT3),A