This commit is contained in:
Tolik 2024-08-17 05:16:15 +10:00
parent 085ef3c332
commit b96578c2a0
6 changed files with 69 additions and 52 deletions

@ -1 +1 @@
Subproject commit 3ac606f87285e76a56c826ad33efdd26ada872f6 Subproject commit e73e9f8d4f4e72de4f6b54abaec159684fdcebe1

View File

@ -321,7 +321,7 @@ TAB_FNS:
DB high EMM.GetMemRMD DB high EMM.GetMemRMD
DB high EMM.FreeMemRMD DB high EMM.FreeMemRMD
DB high EMM.GetMemPageRMD DB high EMM.GetMemPageRMD
DB high EMM.GetMemPageNext DB high EMM.GetMemPageNext
DB high EMM.GetBanksPorts DB high EMM.GetBanksPorts
DB high EMM.CheckColdInit DB high EMM.CheckColdInit
DB high RAMD_CALC_PAGE DB high RAMD_CALC_PAGE

View File

@ -36,6 +36,7 @@ DPAL2 EQU 5
; !!! NO USE STACK !!! ; !!! NO USE STACK !!!
; ;
;***************************************** ;*****************************************
;!TODO
; ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ zx spectrum ; ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ zx spectrum
INIT_PAGES: INIT_PAGES:
AND A AND A
@ -126,7 +127,7 @@ INIT_VIDEO_REG:
; EX AF,AF' ; EX AF,AF'
; LD A,7 ; ᥤ쬠ï íªà ­­ ï áâà ­¨æ  ; LD A,7 ; ᥤ쬠ï íªà ­­ ï áâà ­¨æ 
; LD BC,#7FFD ; LD BC,#7FFD
; OUT (C),A ; OUT (C),A

View File

@ -194,13 +194,12 @@ EMM.GetMemRMD:
CALL BLK_TO_RAMD CALL BLK_TO_RAMD
RET NC RET NC
.error2: .error2:
LD L,2 ; RAM-Disk § ­ïâ ;!TODO ¯¥à¥ç¨á«¨âì ¢á¥ ¢ à¨ ­âë ®è¨¡®ª ¨ ¨å ­®¬¥à  ª ª ¤«ï „‘‘ LD L,2 ; RAM-Disk § ­ïâ ;!HARDCODE error number ;!TODO ¯¥à¥ç¨á«¨âì ¢á¥ ¢ à¨ ­âë ®è¨¡®ª ¨ ¨å ­®¬¥à  ª ª ¤«ï „‘‘
LD A,L LD A,L
RET RET
.error1: .error1:
POP HL ; 腮痰━ 痰オ POP HL ; 腮痰━ 痰オ
LD L,A LD L,A
;SCF
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ;

View File

@ -279,9 +279,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.TASK_DATA-#4000 ; 㡨âì ¢á¥ § ¤ ç¨ LD HL,SYS_PAGE.CURRENT_TASK - #4000 ; 㡨âì ¢á¥ § ¤ ç¨
LD DE,SYS_PAGE.TASK_DATA+1-#4000 LD DE,SYS_PAGE.CURRENT_TASK+1 - #4000
LD BC,#FF LD BC,ZX_TASK_DATA * SYS_PAGE.CURRENT_TASK.Size - 1 ; #FF
LD (HL),0 LD (HL),0
LDIR LDIR

View File

@ -95,7 +95,7 @@ COMAND_ISD2:
CALL ISDOS CALL ISDOS
JP SW_ROM_1 JP SW_ROM_1
;!TODO ¯¥à¥¤¥« âì ¯®¤ ¯¥à¥ª«î祭¨¥ ­  à §­ë¥ ᯥªâàã¬ë á § ¯ã饭­ë¬¨ § ¤ ç ¬¨
TASK_SWITCH: TASK_SWITCH:
; *** ‘®åà ­¨âì § ¤ çã *** ; *** ‘®åà ­¨âì § ¤ çã ***
PUSH IY PUSH IY
@ -123,76 +123,93 @@ TASK_SWITCH:
RLCA RLCA
RLCA RLCA
RLCA RLCA
AND #30 ; ­®¢ ï § ¤ ç  0..3 AND #30 ; ­®¢ ï § ¤ ç  0..3
LD C,A LD C,A
IN A,(SLOT3) IN A,(SLOT3)
LD B,A ; 3-ï áâà ­¨æ  ⥪ã饩 § ¤ ç¨ LD B,A ; 3-ï áâà ­¨æ  ⥪ã饩 § ¤ ç¨
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD IX,SYS_PAGE.TASK_DATA ; ¤ ­­ë¥ § ¤ ç LD IX,SYS_PAGE.CURRENT_TASK ; ¤ ­­ë¥ § ¤ ç
LD E,(IX) ; áâ à ï § ¤ ç  ; !TEST
LD D,0 ;LD E,(IX)
ADD IX,DE ; ¤ ­­ë¥ ⥪ã饩 § ¤ ç¨ ;LD D,0
LD E,16 ;ADD IX,DE
ADD IX,DE ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç ;LD E,SYS_PAGE.CURRENT_TASK.Size
;ADD IX,DE
LD (IX+1),B ; á®åà ­¨âì áâà ­¨æã 3 LD A,SYS_PAGE.CURRENT_TASK.Size ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
ADD A,(IX) ; ᬥ饭¨¥ ¤ ­­ëå ⥪ã饩 § ¤ ç¨
LD E,A
LD D,0
ADD IX,DE ; ¤ ­­ë¥ ⥪ã饩 § ¤ ç¨
;
LD (IX + ZX_TASK_DATA.SLOT3_PAGE),B ; á®åà ­¨âì áâà ­¨æã 3
LD HL,0 LD HL,0
ADD HL,SP ADD HL,SP
LD (IX+2),L ; á®åà ­¨âì á⥪ § ¤ ç¨ LD (IX + ZX_TASK_DATA.SP),L ; á®åà ­¨âì á⥪ § ¤ ç¨
LD (IX+3),H LD (IX + ZX_TASK_DATA.SP + 1),H
SET 0,(IX) ; ãáâ ­®¢¨âì ä« £ á®åà ­¥­­®á⨠⥪ã饩 § ¤ ç¨ SET 0,(IX + ZX_TASK_DATA.STATE) ; ãáâ ­®¢¨âì ä« £ á®åà ­¥­­®á⨠⥪ã饩 § ¤ ç¨
RES 1,(IX) ; ãáâ ­®¢¨âì ä« £, çâ® § ¤ ç  ¯®ª¨­ãâ  RES 1,(IX + ZX_TASK_DATA.STATE) ; ãáâ ­®¢¨âì ä« £, çâ® § ¤ ç  ¯®ª¨­ãâ 
LD IX,SYS_PAGE.TASK_DATA LD IX,SYS_PAGE.CURRENT_TASK
LD E,C ; !TEST
LD D,0 ;LD E,C
ADD IX,DE ; ­®¢ ï § ¤ ç  ;LD D,0
LD E,16 ;ADD IX,DE ; ­®¢ ï § ¤ ç 
ADD IX,DE ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç ;LD E,16
LD A,SYS_PAGE.CURRENT_TASK.Size ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
ADD A,C ; ᬥ饭¨¥ ¤ ­­ëå ­®¢®© § ¤ ç¨
LD E,A
LD D,0
;
ADD IX,DE ; ¤ ­­ë¥ ­®¢®© § ¤ ç¨
BIT 1,(IX) BIT 1,(IX + ZX_TASK_DATA.STATE)
; JR NZ,TASK_IN_WORK ; § ¤ ç  ¢ à ¡®â¥ ??? ­¥¢¥à­®¥ § ¢¥à襭¨¥ ; JR NZ,TASK_IN_WORK ; § ¤ ç  ¢ à ¡®â¥ ??? ­¥¢¥à­®¥ § ¢¥à襭¨¥
; á¡à á뢠âì ¨«¨ ¯à®áâ® ¢®§¢à é âìáï ; ; á¡à á뢠âì ¨«¨ ¯à®áâ® ¢®§¢à é âìáï
BIT 0,(IX) ; ¡ë«  á®åà ­¥­ /­¥â BIT 0,(IX + ZX_TASK_DATA.STATE) ; ¡ë«  á®åà ­¥­ /­¥â
JR NZ,TASK_SET ; § ¤ ç  áãé¥áâ¢ã¥â JR NZ,TASK_SET ; § ¤ ç  áãé¥áâ¢ã¥â
; § ¤ ç¨ ­¥ ¡ë«®! ; § ¤ ç¨ ­¥ ¡ë«®!
LD IX,SYS_PAGE.TASK_DATA LD IX,SYS_PAGE.CURRENT_TASK
LD A,C ; § ¤ ç  LD A,C ; § ¤ ç 
LD (IX),A ; ãáâ ­®¢¨âì ­®¢ãî § ¤ çã ⥪ã饩 LD (IX),A ; ãáâ ­®¢¨âì ­®¢ãî § ¤ çã ⥪ã饩
JP SPECTRUM_TASK ; § ¯ãáâ¨âì ­®¢ãî § ¤ çã! JP SPECTRUM_TASK ; § ¯ãáâ¨âì ­®¢ãî § ¤ çã!
; ¨ ¯®ª  ¯®ä¨£ à á¯à¥¤¥«¥­¨¥ ¯ ¬ïâ¨! ; ; ¨ ¯®ª  ¯®ä¨£ à á¯à¥¤¥«¥­¨¥ ¯ ¬ïâ¨!
TASK_SET: TASK_SET:
LD IX,TASK_RESTORE LD IX,TASK_RESTORE
LD A,C LD A,C
EXX EXX
JP INIT_PAGES ; ¯¥à¥ª«îç¨âì ¢á¥ áâà ­¨æë! JP INIT_PAGES ; ¯¥à¥ª«îç¨âì ¢á¥ áâà ­¨æë!
TASK_RESTORE: TASK_RESTORE:
EXX EXX
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD A,C LD A,C
LD IX,SYS_PAGE.TASK_DATA LD IX,SYS_PAGE.CURRENT_TASK
LD (IX),A ; ãáâ ­®¢¨âì ­®¢ãî § ¤ çã ⥪ã饩 LD (IX),A ; ãáâ ­®¢¨âì ­®¢ãî § ¤ çã ⥪ã饩
LD E,A ; !TEST
LD D,0 ;LD E,A
ADD IX,DE ; ­®¢ ï § ¤ ç  ;LD D,0
LD E,16 ;ADD IX,DE ; ­®¢ ï § ¤ ç 
ADD IX,DE ;LD E,16
ADD A,SYS_PAGE.CURRENT_TASK.Size ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
LD E,A
LD D,0
;
ADD IX,DE
LD L,(IX+2) ; ¢á¯®¬­¨âì á⥪ LD L,(IX + ZX_TASK_DATA.SP) ; ¢á¯®¬­¨âì á⥪
LD H,(IX+3) LD H,(IX + ZX_TASK_DATA.SP + 1)
LD SP,HL LD SP,HL
LD A,(IX+1) ; ¢á¯®¬­¨âì âà¥âìî áâà ­¨æã LD A,(IX + ZX_TASK_DATA.SLOT3_PAGE); ¢á¯®¬­¨âì âà¥âìî áâà ­¨æã
OUT (SLOT3),A OUT (SLOT3),A
POP AF ; ¢®ááâ ­®¢¨âì POP AF ; ¢®ááâ ­®¢¨âì