...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 LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
MODULE SET_CONFIG_ID MODULE SET_CONFIG_ID
;-------------[Save IX:IY]-------------- ;-------------[Save IX:IY]--------------

View File

@ -49,8 +49,7 @@ EMM.GetMemSize: IN A,(SLOT1)
; ;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨. ; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
EMM.InitMem: EMM.InitMem: PUSH BC
PUSH BC
PUSH HL PUSH HL
PUSH DE PUSH DE
@ -236,21 +235,20 @@ EMM.GetMem: PUSH BC
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨ ; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨ ; CF - ¯à¨§­ ª ®è¨¡ª¨
;EMM.GetMem: ;EMM.GetMem:
EMM.GetMemRMD: EMM.GetMemRMD: PUSH AF
PUSH AF
CALL EMM.GetMem CALL EMM.GetMem
JR C,.error1 JR C,.error1
;
LD B,A LD B,A
POP AF POP AF
CALL BLK_TO_RAMD CALL BLK_TO_RAMD
RET NC RET NC
.error2: ;
LD L,BIOS.Error.BadNumber ; RAM-Disk § ­ïâ .error2: LD L,BIOS.Error.BadNumber ; RAM-Disk § ­ïâ
LD A,L LD A,L
RET RET
.error1: ;
POP HL ; ç¨á⨬ á⥪ .error1: POP HL ; ç¨á⨬ á⥪
LD L,A LD L,A
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -261,8 +259,7 @@ EMM.GetMemRMD:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ª«îç  K ; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk ; ‚室: A - Š‹ž— RAM-Disk
EMM.FreeMemRMD: EMM.FreeMemRMD: CALL GET_RAMD_ST
CALL GET_RAMD_ST
RET C RET C
SCF SCF
RET Z RET Z
@ -271,7 +268,7 @@ EMM.FreeMemRMD:
LD B,A LD B,A
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD H,high SYS_PAGE.RAMD_KEYS; - #4000 - #4000 LD H,high SYS_PAGE.RAMD_KEYS
LD (HL),0 LD (HL),0
LD A,B LD A,B
OUT (SLOT3),A OUT (SLOT3),A
@ -282,8 +279,7 @@ EMM.FreeMemRMD:
; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ ; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ
; <20><20>Ž<EFBFBD>ˆœ DE!!! ; <20><20>Ž<EFBFBD>ˆœ DE!!!
;EMM_FN3M: ;EMM_FN3M:
EMM.FreeMem: EMM.FreeMem: ; [ ] free zx pages! ⥯¥àì ­¥«ì§ï ®á¢®¡®¤¨âì áâà ­¨æã #FF
; [ ] free zx pages! ⥯¥àì ­¥«ì§ï ®á¢®¡®¤¨âì áâà ­¨æã #FF
SCF SCF
INC A INC A
RET Z RET Z
@ -293,33 +289,40 @@ EMM.FreeMem:
; ;
RET Z RET Z
; ;
LD L,A LD C,A
CP ZX_RAM_ID ;!FIXIT ; [ ] free zx pages! CP ZX_RAM_ID ;!FIXIT ; [ ] free zx pages!
CALL Z,SET_ROM_FLAG_ZX CALL Z,RES_FLAG_ZXvROM
; ;
IN A,(SLOT3) IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD H,high (SYS_PAGE.RAM_TABLE) LD H,high SYS_PAGE.RAM_TABLE
LD A,L LD A,C
EMM_F3M_L1: .loop: LD L,A
LD L,A
LD A,(HL) ; á«¥¤ãî騩 ¡«®ª LD A,(HL) ; á«¥¤ãî騩 ¡«®ª
AND A AND A
JR Z,EMM_FN3M_ERR JR Z,.error
LD (HL),0 ; Žá¢®¡®¤¨âì LD (HL),0 ; Žá¢®¡®¤¨âì
CP #FF ; …᫨ ­¥ ª®­¥æ 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 OUT (SLOT3),A
XOR A ; no error code XOR A ; no error code
RET RET
EMM_FN3M_ERR: .error: EX AF,AF'
EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
LD A,BIOS.Error.BadNumber LD A,BIOS.Error.BadNumber
SCF SCF
@ -474,7 +477,7 @@ EMM.GetMemBlkPages:
; CP #FF ; CP #FF
; JR Z,.end ; JR Z,.end
; ; ; ;
; LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000) ; LD H,high +(SYS_PAGE.RAM_TABLE - #4000 - #4000)
; LD L,(HL) ; LD L,(HL)
; INC B ; INC B
; JR NZ,.loop ; 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 ;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
;RAMD_R_W: ;RAMD_R_W:
@ -573,7 +882,7 @@ BLK_RD_WR:
OUT (SLOT1),A OUT (SLOT1),A
LD A,H LD A,H
LD H,high (SYS_PAGE.RAM_TABLE - #4000 - #4000) LD H,high +(SYS_PAGE.RAM_TABLE-#4000-#4000)
LD L,A LD L,A
INC D INC D
@ -657,7 +966,7 @@ BLK_RD_WR:
IN A,(SLOT1) IN A,(SLOT1)
LD E,A 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 LD A,SYS_PAGE
OUT (SLOT1),A OUT (SLOT1),A
LD A,(DE) LD A,(DE)
@ -871,310 +1180,3 @@ ROM_DISK:
.readProcedure.size EQU $-.readProcedure .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 ; ­¥ ¤®«¦­® ¯®àâ¨âì DE
SET_ROM_FLAG_ZX: RES_FLAG_ZXvROM:
EX AF,AF' EX AF,AF'
IN A,(SLOT3) IN A,(SLOT3)
EX AF,AF' EX AF,AF'

View File

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

View File

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

View File

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