continue freeing zx pages...
This commit is contained in:
parent
30edc55a57
commit
22f4acafbe
@ -1 +1 @@
|
|||||||
Subproject commit a98a635f03359ec21cd8dd77917a384a8a37caef
|
Subproject commit 265b46fce2afbc3e8acef59e83d78b84b88d4ced
|
||||||
@ -5,7 +5,11 @@
|
|||||||
;[~] 2 - ƒà㧨â <20>‡“ ᯥªâà㬠¨§ ROM ¯à¨ ª ¦¤®¬ ¯¥à¥§ ¯ã᪥ (¬®¦¥â ¡ëâì ®¯ á®)
|
;[~] 2 - ƒà㧨â <20>‡“ ᯥªâà㬠¨§ ROM ¯à¨ ª ¦¤®¬ ¯¥à¥§ ¯ã᪥ (¬®¦¥â ¡ëâì ®¯ á®)
|
||||||
;[ ] 3 - <20>¥ £à㧨âì <20>‡“ ᯥªâà㬠, ¨¨â¨âì áâà ¨æã #41 â ª, ç⮡ ª®¤ ¢ ¥© ¯®¤£à㦠« <20>‡“ ᯥªâà㬠¯à¨ ®¡à 饨¨
|
;[ ] 3 - <20>¥ £à㧨âì <20>‡“ ᯥªâà㬠, ¨¨â¨âì áâà ¨æã #41 â ª, ç⮡ ª®¤ ¢ ¥© ¯®¤£à㦠« <20>‡“ ᯥªâà㬠¯à¨ ®¡à 饨¨
|
||||||
;-------------------------------------------------------------------------------------------------------------------;
|
;-------------------------------------------------------------------------------------------------------------------;
|
||||||
|
; Spectrum RAM map
|
||||||
|
; SLOT0 = 0
|
||||||
|
; SLOT1 = 5
|
||||||
|
; SLOT2 = 2
|
||||||
|
; SLOT3 = 0 '48kb',1,2,3,4,5,6,7 '128kb',8,9,10,11,12,13,14,15 '256kb'
|
||||||
;
|
;
|
||||||
; _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_ ;
|
||||||
|
|
||||||
@ -19,62 +23,172 @@
|
|||||||
|
|
||||||
;!FIXIT
|
;!FIXIT
|
||||||
;----------------[‚뤥«¥¨¥/®á¢®¡®¦¤¥¨¥ áâà ¨æ ᯥªâà㬠]-------------;
|
;----------------[‚뤥«¥¨¥/®á¢®¡®¦¤¥¨¥ áâà ¨æ ᯥªâà㬠]-------------;
|
||||||
;¢å®¤: ॣ B: 0 - ¨¨â ¯ ¬ï⨠Spectrum 48k ¨ 2-å áâà ¨æ vROM
|
;¢å®¤: ॣ B: 0 - § १¥à¢¨à®¢ ®
|
||||||
; 1 - ¨¨â ¯ ¬ï⨠Pentagon 128k ¨ 3-å áâà ¨æ vROM
|
; 1 - ¢ë¤¥«¥¨¥ ¯ ¬ï⨠Pentagon 48k. 3 áâà ¨æë
|
||||||
; 2 - ¨¨â ¯ ¬ï⨠Pentagon 512k ¨ 3-å áâà ¨æ vROM
|
; 2 - ¢ë¤¥«¥¨¥ ¯ ¬ï⨠Pentagon 128k. 2+6 áâà ¨æë
|
||||||
; 3 - ¨¨â ¯ ¬ï⨠Scorpion 256k ¨ 3-å áâà ¨æ vROM
|
; 3 - ¢ë¤¥«¥¨¥ ¯ ¬ï⨠Pentagon 512k. 2+30 áâà ¨æë
|
||||||
; 4..15 - § १¥à¢¨à®¢ ë
|
; 4 - ¢ë¤¥«¥¨¥ ¯ ¬ï⨠Scorpion 256k. 2+6+8 áâà ¨æë
|
||||||
|
; 5..15 - § १¥à¢¨à®¢ ë
|
||||||
|
;
|
||||||
; 16 - ¯®«ãç¨âì à ¬¡«®ª¨ ¨¨æ¨ «¨§¨à®¢ ëå vROM ¨ VRAM
|
; 16 - ¯®«ãç¨âì à ¬¡«®ª¨ ¨¨æ¨ «¨§¨à®¢ ëå vROM ¨ VRAM
|
||||||
; 17..63 - § १¥à¢¨à®¢ ë
|
; 17..31 - § १¥à¢¨à®¢ ë
|
||||||
|
;
|
||||||
|
; 32 - § १¥à¢¨à®¢ ®
|
||||||
|
; 33 - ¢ë¤¥«¥¨¥ ¯ ¬ï⨠Spectrum 48k ¨ ¨¨â 2-å áâà ¨æ vROM
|
||||||
|
; 34 - ¢ë¤¥«¥¨¥ ¯ ¬ï⨠Pentagon 128k ¨ ¨¨â 3-å áâà ¨æ vROM
|
||||||
|
; 35 - ¢ë¤¥«¥¨¥ ¯ ¬ï⨠Pentagon 512k ¨ ¨¨â 3-å áâà ¨æ vROM
|
||||||
|
; 36 - ¢ë¤¥«¥¨¥ ¯ ¬ï⨠Scorpion 256k ¨ ¨¨â 3-å áâà ¨æ vROM
|
||||||
|
; 33..63 - § १¥à¢¨à®¢ ë
|
||||||
|
;
|
||||||
; 64 - ®á¢®¡®¤¨âì à ¬¡«®ª¨ vROM ¨ vRAM
|
; 64 - ®á¢®¡®¤¨âì à ¬¡«®ª¨ vROM ¨ vRAM
|
||||||
; 65..127 - § १¥à¢¨à®¢ ë
|
; 65..127 - § १¥à¢¨à®¢ ë
|
||||||
|
;
|
||||||
; 128 - ¨¨æ¨ «¨§¨à®¢ âì ᢮© ¡®à áâà ¨æ vROM
|
; 128 - ¨¨æ¨ «¨§¨à®¢ âì ᢮© ¡®à áâà ¨æ vROM
|
||||||
|
;
|
||||||
; ॣ HL: ¯à¨ ॣ B[7]=1 ¤à¥á áâà ¨æ (11 èâ):
|
; ॣ HL: ¯à¨ ॣ B[7]=1 ¤à¥á áâà ¨æ (11 èâ):
|
||||||
; byte1 - RAM block ID, byte2..11 - áâà ¨æë ¤«ï vROM
|
; byte1 - RAM block ID, byte2..11 - áâà ¨æë ¤«ï vROM
|
||||||
; ॣ A: ®¬¥à ZX TASK ¯®ª çâ® ¢á¥£¤ ®«ì!!!
|
; ॣ A: ®¬¥à ZX TASK ¯®ª çâ® ¢á¥£¤ ®«ì!!!
|
||||||
;¢ë室: CF = 0: HL - ®¬¥à à ¬¡«®ª®¢ ¤«ï ०¨¬®¢ 0..16. H=vRAM, L=vROM
|
;¢ë室: CF = 0: HL - ®¬¥à à ¬¡«®ª®¢ ¤«ï ०¨¬®¢ 0..16. H=vRAM, L=vROM
|
||||||
; CF = 1: A - ®¬¥à ®è¨¡ª¨
|
; CF = 1: A - ®¬¥à ®è¨¡ª¨
|
||||||
FN_ENTRANCE:
|
;
|
||||||
|
;¥á«¨ áâíª å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«îç¥ë¬¨ ¯à¥àë¢ ¨ï¬¨
|
||||||
|
FN_ENTRANCE: ;!TODO A - TASK NUMBER
|
||||||
|
EXX
|
||||||
|
GET_ZX_TASK_DATA_OFFSET
|
||||||
|
ADD A,_#ZX_TASK_DATA
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD IX,SYS_PAGE.ZX_TASK.CURRENT
|
||||||
|
ADD IX,BC ; ¤ ë¥ ®¢®© § ¤ ç¨
|
||||||
|
;
|
||||||
|
LD C,SLOT3
|
||||||
|
IN B,(C)
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (C),A
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
LD (SYS_PAGE.SP_SAVE),SP
|
||||||
|
LD SP,SYS_PAGE.SYS_SP
|
||||||
|
LD DE,.EXIT
|
||||||
|
PUSH DE
|
||||||
|
;-----------------------------------;
|
||||||
|
; Sub FN #8x
|
||||||
|
BIT 7,B
|
||||||
|
JR NZ,INIT_vROM ; B = 128
|
||||||
|
; Sub FN #4x
|
||||||
|
BIT 6,B
|
||||||
|
JR NZ,FREE_vMEMORY ; B = 64
|
||||||
|
; Sub FN #1x
|
||||||
|
JR NZ,GET_RAMBLOCK_IDs ; B = 16
|
||||||
|
; Sub FN #0x
|
||||||
|
DEC B
|
||||||
|
JR Z, ; B = 1
|
||||||
|
DEC B
|
||||||
|
JR Z, ; B = 2
|
||||||
|
DEC B
|
||||||
|
JR Z, ; B = 3
|
||||||
|
DEC B
|
||||||
|
JR Z, ; B = 4
|
||||||
|
;-----------------------------------;
|
||||||
|
LD A,BIOS.Error.InvalidSubFunction
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.EXIT: LD SP,(SYS_PAGE.SP_SAVE)
|
||||||
|
EXX
|
||||||
|
OUT (C),B
|
||||||
|
EXX
|
||||||
|
RET
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
;!FIXIT
|
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
;‚室: ---
|
;‚室: A - TASK NUMBER
|
||||||
|
FREE_vMEMORY: LD D,(IX + _#ZX_TASK_DATA.vROM_ID)
|
||||||
|
LD A,(IX + _#ZX_TASK_DATA.vRAM_ID)
|
||||||
|
CALL EMM.FreeMem
|
||||||
|
LD A,D
|
||||||
|
CALL EMM.FreeMem
|
||||||
|
JP RES_FLAG_ZXvROM
|
||||||
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------;
|
||||||
|
;‚室: A - TASK NUMBER
|
||||||
;‚ë室: H - vRAM block ID
|
;‚ë室: H - vRAM block ID
|
||||||
; L - vROM block ID
|
; L - vROM block ID
|
||||||
GET_RAMBLOCK_IDs:
|
GET_RAMBLOCK_IDs:
|
||||||
|
LD H,(IX + _#ZX_TASK_DATA.vRAM_ID)
|
||||||
|
LD L,(IX + _#ZX_TASK_DATA.vROM_ID)
|
||||||
|
RET
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
;!FIXIT
|
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
;‚室: HL - ¡«®ª áâà ¨æ ª®â®àë¥ ¬ ¯¯¨¬ (¢á¥£¤ 10 èâ.)
|
;‚室: HL - ¡«®ª áâà ¨æ ª®â®àë¥ ¬ ¯¯¨¬ (¢á¥£¤ 11 èâ.)
|
||||||
FREE_vROM:
|
; A - TASK NUMBER
|
||||||
|
INIT_vROM: LD A,(IX + _#ZX_TASK_DATA.vROM_ID)
|
||||||
|
CP (HL)
|
||||||
|
EX DE,HL
|
||||||
|
CALL NZ,EMM.FreeMem
|
||||||
|
EX DE,HL
|
||||||
|
;
|
||||||
|
LD A,(HL)
|
||||||
|
LD (IX + _#ZX_TASK_DATA.vROM_ID),A
|
||||||
|
INC HL
|
||||||
|
; ãáâ ®¢ª ¯®à⮢ ROM
|
||||||
|
LD DE,.PORTS
|
||||||
|
LD B,.PORTS.Size
|
||||||
|
.loop: PUSH BC
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
AND A
|
||||||
|
JR Z,.not_Spec_Page
|
||||||
|
LD A,Spec_Page ;!FIXIT ¨«¨ ®áâ ¢¨âì?
|
||||||
|
.not_Spec_Page: LD B,A
|
||||||
|
LD A,(DE)
|
||||||
|
INC DE
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
CALL SET_PORTS
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
DJNZ .loop
|
||||||
|
;
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.PORTS: DB ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128
|
||||||
|
DB ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48
|
||||||
|
DB ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS
|
||||||
|
DB ACEX.vROM.BIOS ; ROM-ID - EXPANSION
|
||||||
|
DB ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1
|
||||||
|
DB ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2
|
||||||
|
DB ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2
|
||||||
|
DB ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2
|
||||||
|
DB ACEX.vROM.TR_DOS_2 ; TR-DOS - 2
|
||||||
|
DB ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2
|
||||||
|
.PORTS.Size EQU $-.PORTS
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
;!FIXIT
|
;????? ¤®?
|
||||||
|
/*
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
;‚室: HL - ¡«®ª áâà ¨æ ª®â®àë¥ ¬ ¯¯¨¬ (¢á¥£¤ 10 èâ.)
|
;‚室: A - TASK NUMBER
|
||||||
FREE_vRAM:
|
FREE_vROM: LD A,(IX + _#ZX_TASK_DATA.vROM_ID)
|
||||||
;-----------------------------------------------------------------------;
|
CALL EMM.FreeMem
|
||||||
|
PUSH AF
|
||||||
;!FIXIT
|
CALL RES_FLAG_ZXvROM
|
||||||
;-----------------------------------------------------------------------;
|
POP AF
|
||||||
;‚室: B - ª®«¨ç¥á⢮ áâà ¨æ
|
RET
|
||||||
GET_vROM:
|
|
||||||
;-----------------------------------------------------------------------;
|
|
||||||
|
|
||||||
;!FIXIT
|
|
||||||
;-----------------------------------------------------------------------;
|
|
||||||
;‚室: HL - ¡«®ª áâà ¨æ ª®â®àë¥ ¬ ¯¯¨¬ (¢á¥£¤ 10 èâ.)
|
|
||||||
INIT_vROM:
|
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
;‚•Ž„: HL - ᯨ᮪ áâà ¨æ
|
;‚•Ž„: HL - ᯨ᮪ áâà ¨æ
|
||||||
; E - 0 = 128kb, 1 = 512kb
|
; E - 0 = 128kb, 1 = 512kb
|
||||||
@ -107,7 +221,7 @@ INIT_PENT_vRAM: DI
|
|||||||
RET
|
RET
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;!FIXIT ª®áïª á® á⥪®¬ ¢ SLOT3
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
;‚•Ž„: HL - ᯨ᮪ áâà ¨æ
|
;‚•Ž„: HL - ᯨ᮪ áâà ¨æ
|
||||||
; D - ç «ì®¥ § 票¥ ¤«ï 7FFD
|
; D - ç «ì®¥ § 票¥ ¤«ï 7FFD
|
||||||
@ -123,7 +237,7 @@ SET_7FFD: LD A,(HL)
|
|||||||
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
;!FIXIT
|
;!FIXIT ª®áïª á® á⥪®¬ ¢ SLOT3
|
||||||
;‚•Ž„: HL - ᯨ᮪ áâà ¨æ.
|
;‚•Ž„: HL - ᯨ᮪ áâà ¨æ.
|
||||||
INIT_SCORP_vRAM:; first 128 kb
|
INIT_SCORP_vRAM:; first 128 kb
|
||||||
LD E,0
|
LD E,0
|
||||||
@ -136,28 +250,59 @@ INIT_SCORP_vRAM:; first 128 kb
|
|||||||
OUT (C),A
|
OUT (C),A
|
||||||
RET
|
RET
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
;‚믮«ï¥âáï ¤«ï ¨¨â âàñå áâà ¨æ Ž‡“ 48k
|
;‚믮«ï¥âáï ¤«ï ¢ë¤¥«¥¨ï âàñå áâà ¨æ Ž‡“ 48k
|
||||||
GET_48k_MEM: LD B,3
|
GET_48k_MEM: LD D,3
|
||||||
JP EMM.GetMem
|
JR GET_XXX_MEM
|
||||||
|
;‚믮«ï¥âáï ¤«ï ¨¨â 3 áâà ¨æ Ž‡“ 48k ¨ 29 áâà ¨æ Ž‡“ Pent512k
|
||||||
|
GET_512k_MEM: LD D,3+29
|
||||||
|
JR GET_XXX_MEM
|
||||||
|
;‚믮«ï¥âáï ¤«ï ¢ë¤¥«¥¨ï 3 áâà ¨æ Ž‡“ 48k ¨ 5 áâà ¨æ Ž‡“ 128k â 祪
|
||||||
|
GET_128k_MEM: LD D,3+5
|
||||||
|
;JR GET_XXX_MEM
|
||||||
|
GET_XXX_MEM: CALL FREE_vRAM
|
||||||
|
.init: LD B,D
|
||||||
|
CALL EMM.GetMem
|
||||||
|
RET C
|
||||||
|
LD (IX + _#ZX_TASK_DATA.vRAM_ID),A
|
||||||
|
RET
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
;-----------------------------------------------------------------------;
|
|
||||||
;‚믮«ï¥âáï ¤«ï ¨¨â 3 áâà ¨æ Ž‡“ 48k ¨ 5 áâà ¨æ Ž‡“ 128k â 祪
|
|
||||||
GET_128k_MEM: LD B,3+5
|
|
||||||
JP EMM.GetMem
|
|
||||||
;-----------------------------------------------------------------------;
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
FREE_vRAM: XOR A
|
||||||
|
LD C,A
|
||||||
|
OR (IX + _#ZX_TASK_DATA.vRAM_ID)
|
||||||
|
RET Z
|
||||||
|
LD (IX + _#ZX_TASK_DATA.vRAM_ID),C
|
||||||
|
JP EMM.FreeMem
|
||||||
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;!FIXIT SET_TASK_POINTER
|
||||||
|
;-----------------------------------------------------------------------;
|
||||||
|
;‚믮«ï¥âáï ¤«ï ¢ë¤¥«¥¨ï 3 áâà ¨æ Ž‡“ 48k ¨ 14 áâà ¨æ Ž‡“ Scorp256k
|
||||||
;‚室: ---
|
;‚室: ---
|
||||||
;‚ë室: A - RAM block ID
|
;‚ë室: A - RAM block ID
|
||||||
GET_SCORP_RAM: IN A,(SLOT3)
|
GET_SCORP_RAM: CALL FREE_vRAM
|
||||||
LD E,A
|
CALL .SCORP
|
||||||
LD A,SYS_PAGE
|
RET C
|
||||||
OUT (SLOT3),A
|
LD D,L
|
||||||
; ¢ë¤¥«¨âì áâà ¨æë ᪮à¯
|
; Get Pent128 mem
|
||||||
|
LD B,3+5
|
||||||
|
CALL EMM.GetMem
|
||||||
|
; A - Pent128 mem block id
|
||||||
|
LD B,D ; Scorp128 mem block id
|
||||||
|
CALL EMM.MergeMemBlocks
|
||||||
|
LD (IX + _#ZX_TASK_DATA.vRAM_ID),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.SCORP: ; ¢ë¤¥«¨âì áâà ¨æë ᪮à¯
|
||||||
XOR A
|
XOR A
|
||||||
|
LD DE,#F0D0 ; ¤«ï 䨫ìâà . #F0 - ¬ ᪠, #D0 - áâà ¨æë ISA #D0..#DF
|
||||||
LD BC,8*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
|
||||||
@ -174,10 +319,8 @@ GET_SCORP_RAM: IN A,(SLOT3)
|
|||||||
DJNZ .allocate_loop
|
DJNZ .allocate_loop
|
||||||
; L = 㪠§ â¥«ì æ¥¯®çª¨.
|
; L = 㪠§ â¥«ì æ¥¯®çª¨.
|
||||||
AND A
|
AND A
|
||||||
.exit: LD A,E
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,L
|
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
; 䨫ìâà ¤«ï áâà ¨æ ᪮à¯
|
; 䨫ìâà ¤«ï áâà ¨æ ᪮à¯
|
||||||
;¢ë室: ZF=1 - áâà ¨æ ¥ ¯®¤å®¤¨â
|
;¢ë室: ZF=1 - áâà ¨æ ¥ ¯®¤å®¤¨â
|
||||||
.check_barred_pages:
|
.check_barred_pages:
|
||||||
@ -187,19 +330,19 @@ GET_SCORP_RAM: IN A,(SLOT3)
|
|||||||
RET C
|
RET C
|
||||||
RET Z
|
RET Z
|
||||||
; check isa page
|
; check isa page
|
||||||
AND #F0
|
AND D
|
||||||
XOR #D0 ; áâà ¨æë ISA #D0..#DF
|
XOR E ; áâà ¨æë ISA #D0..#DF
|
||||||
RET NZ
|
RET NZ
|
||||||
LD L,#D0
|
LD L,E
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.error_no_mem: PUSH DE
|
.error_no_mem: ;PUSH DE
|
||||||
LD A,C
|
LD A,C
|
||||||
CALL EMM.FreeMem
|
CALL EMM.FreeMem
|
||||||
POP DE
|
;POP DE
|
||||||
LD L,BIOS.Error.EMM.NoMemory
|
LD A,BIOS.Error.EMM.NoMemory
|
||||||
SCF
|
SCF
|
||||||
JR .exit
|
RET
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
ENDMODULE
|
ENDMODULE
|
||||||
ENDIF
|
ENDIF
|
||||||
@ -255,7 +398,7 @@ GOTO_SPEC: IN A,(SLOT3)
|
|||||||
;start_basic:
|
;start_basic:
|
||||||
.BASIC_128: LD SP,#C000
|
.BASIC_128: LD SP,#C000
|
||||||
LD HL,RES128_PROG
|
LD HL,RES128_PROG
|
||||||
LD DE,ZX_VARS.PRINTER_BUFFER ; § ¯ã᪠¯à®£à ¬¬ë BASIC-¥.
|
LD DE,ZX_VARS.PRINTER_BUFFER ; § ¯ã᪠¯à®£à ¬¬ë BASIC-¥.
|
||||||
LD BC,RES128_PROG.Size
|
LD BC,RES128_PROG.Size
|
||||||
LDIR
|
LDIR
|
||||||
DI
|
DI
|
||||||
|
|||||||
@ -41,6 +41,16 @@ RET_FROM_BIOS_TO_BASIC48:
|
|||||||
; ******* SERVICE *******
|
; ******* SERVICE *******
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
; ª®íä䍿¨¥â á¬¥é¥¨ï ¯® ®¬¥àã â ᪨
|
||||||
|
MACRO GET_ZX_TASK_DATA_OFFSET
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
AND #30 ; ®¢ ï § ¤ ç 0..3
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
|
||||||
;------[ „…˜ˆ”<CB86>€–ˆŸ ŠŽŒ€<C592>„<EFBFBD>މ ‘’<E28098>ŽŠˆ,<2C>…<EFBFBD>…„€<E2809E><E282AC>މ „‹Ÿ "EXPANSION" ]-------;
|
;------[ „…˜ˆ”<CB86>€–ˆŸ ŠŽŒ€<C592>„<EFBFBD>މ ‘’<E28098>ŽŠˆ,<2C>…<EFBFBD>…„€<E2809E><E282AC>މ „‹Ÿ "EXPANSION" ]-------;
|
||||||
COMAND_LINE:
|
COMAND_LINE:
|
||||||
LD HL,(#5C5D) ;!HARDCODE CH_ADR
|
LD HL,(#5C5D) ;!HARDCODE CH_ADR
|
||||||
@ -119,12 +129,8 @@ TASK_SWITCH:
|
|||||||
PUSH AF
|
PUSH AF
|
||||||
|
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
RLCA
|
GET_ZX_TASK_DATA_OFFSET
|
||||||
RLCA
|
LD C,A
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
AND #30 ; ®¢ ï § ¤ ç 0..3
|
|
||||||
LD C,A
|
|
||||||
|
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
LD B,A ; 3-ï áâà ¨æ ⥪ã饩 § ¤ ç¨
|
LD B,A ; 3-ï áâà ¨æ ⥪ã饩 § ¤ ç¨
|
||||||
@ -132,44 +138,32 @@ TASK_SWITCH:
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
|
|
||||||
LD IX,SYS_PAGE.ZX_TASK.CURRENT ; ¤ ë¥ § ¤ ç
|
LD IX,SYS_PAGE.ZX_TASK.CURRENT ; ¤ ë¥ § ¤ ç
|
||||||
; !TEST
|
LD A,_#ZX_TASK_DATA ; ᬥ饨¥ ¤ ëå ¢ â ¡«¨æ¥ § ¤ ç
|
||||||
;LD E,(IX)
|
ADD A,(IX) ; ᬥ饨¥ ¤ ëå ⥪ã饩 § ¤ ç¨
|
||||||
;LD D,0
|
LD E,A
|
||||||
;ADD IX,DE
|
LD D,0
|
||||||
;LD E,SYS_PAGE.CURRENT_TASK.Size
|
ADD IX,DE ; ¤ ë¥ â¥ªã饩 § ¤ ç¨
|
||||||
;ADD IX,DE
|
|
||||||
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
|
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.ZX_TASK.CURRENT
|
LD IX,SYS_PAGE.ZX_TASK.CURRENT
|
||||||
; !TEST
|
LD A,_#ZX_TASK_DATA ; ᬥ饨¥ ¤ ëå ¢ â ¡«¨æ¥ § ¤ ç
|
||||||
;LD E,C
|
ADD A,C ; ᬥ饨¥ ¤ ëå ®¢®© § ¤ ç¨
|
||||||
;LD D,0
|
LD E,A
|
||||||
;ADD IX,DE ; ®¢ ï § ¤ ç
|
LD D,0
|
||||||
;LD E,16
|
|
||||||
LD A,_#ZX_TASK_DATA ; ᬥ饨¥ ¤ ëå ¢ â ¡«¨æ¥ § ¤ ç
|
|
||||||
ADD A,C ; ᬥ饨¥ ¤ ëå ®¢®© § ¤ ç¨
|
|
||||||
LD E,A
|
|
||||||
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 ; § ¤ ç áãé¥áâ¢ã¥â
|
||||||
|
|
||||||
; § ¤ ç¨ ¥ ¡ë«®!
|
; § ¤ ç¨ ¥ ¡ë«®!
|
||||||
@ -199,7 +193,7 @@ TASK_RESTORE:
|
|||||||
;LD D,0
|
;LD D,0
|
||||||
;ADD IX,DE ; ®¢ ï § ¤ ç
|
;ADD IX,DE ; ®¢ ï § ¤ ç
|
||||||
;LD E,16
|
;LD E,16
|
||||||
ADD A,_#ZX_TASK_DATA ; ᬥ饨¥ ¤ ëå ¢ â ¡«¨æ¥ § ¤ ç
|
ADD A,_#ZX_TASK_DATA ; ᬥ饨¥ ¤ ëå ¢ â ¡«¨æ¥ § ¤ ç
|
||||||
LD E,A
|
LD E,A
|
||||||
LD D,0
|
LD D,0
|
||||||
;
|
;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user