добавлены подфункции в RST_CONF.CUSTOM

This commit is contained in:
Tolik 2024-10-24 03:23:20 +10:00
parent bb20ae0b39
commit bb4ced4332
4 changed files with 225 additions and 96 deletions

@ -1 +1 @@
Subproject commit 54843903de0b33e3403f6f6c5b7d144c7bd482aa
Subproject commit be501b0cc276065a9981e471dd26f9b069af7604

View File

@ -800,10 +800,7 @@ Check_EE_Port: LD A,ACEX.RET_PORT
CP #FF
JR Z,.JPHL ; olg logic
; new logic
.ver_2: EXX
LD HL,(Spec_Page.Stack_Point)
LD SP,HL
EXX
.ver_2: LD SP,(Spec_Page.Stack_Point)
AND A
LD A,#FF
LD (Spec_Page.Reload_Version),A

View File

@ -106,14 +106,20 @@ RST_CONF:
LD A,C
JR Z,.crutch
; [x]
.not_vRAM_page: CP ACEX.Config_PG.Sp2000_SoftSetUp
.not_vRAM_page: CP ACEX.Config_PG.Sp2000_SoftRestartNow
JP Z,.ReturnSoftReset
;
CP ACEX.Config_PG.Sp2000_AcexSetUp
CP ACEX.Config_PG.Sp2000_AcexSetUpNow
JR Z,.INIT_ACEX
;
CP ACEX.Config_PG.Sp2000_SetUp
JR Z,.SP2000
;
CP ACEX.Config_PG.Sp2000_SoftRestartSet
JR Z,.SetUpSoftReset
;
CP ACEX.Config_PG.Sp2000_AcexSetUpSet
JR Z,.SetUpHardReset
;
; only for old FLEX10K soft compatible
CP ACEX.Config_PG.Sp97_1
@ -130,55 +136,114 @@ RST_CONF:
SCF
RET
;
; B - ID à ¬¡«®ª  á bitstream
;[x]
.INIT_ACEX: DI
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢
; LD A,CNF_PORT.CNF_0
; OUT (SYS_PORT.ON),A
; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â
IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
PUSH AF
LD A,Spec_Page
OUT (SLOT3),A
; ¯à®¢¥à塞 à §¬¥à ¡«®ª  á ª®­ä®© ¨ ¯®«ãç ¥¬ áâà ­¨æë ª®­äë
LD HL,Spec_Page.bitstream_pages
LD A,B
AND A
JR Z,.INIT_ACEX.ReloadConfFromROM
;
CALL EMM.GetMemBlkPages
LD A,B
JR C,.INIT_ACEX.ERROR
CP BitStream_SizeInPages+1 ; ª®«¨ç¥á⢮ áâà ­¨æ ¢ ªíè ¤«ï ¡¨áâਬ  ¯«îá ®¤­ 
JR NC,.INIT_ACEX.ERROR
LD A,(Spec_Page.bitstream_pages)
INC A
JR Z,.INIT_ACEX.ERROR
;
.INIT_ACEX.ReloadConfFromROM:
; § ª¨¤ë¢ ¥¬ ¢ Spec_Page ¯à®£ã ¤«ï § «¨¢ª¨ ª®­äë
LD HL,.INIT_ACEX.PROGRAM
LD DE,Spec_Page.init_acex
LD BC,.INIT_ACEX.PROGRAM.Size
LDIR
; ¥á«¨ ZF=0, â® ¯à®æ¥¤ãà  á¤¥« ¥â à¥á¥â á ¯¥à¥§ «¨¢ª®© ¨§ BIOS, ¨­ ç¥ ¨§ Š<>˜
CALL Spec_Page.init_acex
.INIT_ACEX: LD C,B
LD B,high BIOS.REINIT.HARD_RESET
CALL .PrepareResetSetUp
LD B,C
CALL .PrepareHardReset
JR C,.INIT_ACEX.ERROR
LD B,high BIOS.REINIT.HARD_RESET
JR .set_ret_addr
; DI
; IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
; PUSH AF
; LD A,Spec_Page
; OUT (SLOT3),A
; ; ¯à®¢¥à塞 à §¬¥à ¡«®ª  á ª®­ä®© ¨ ¯®«ãç ¥¬ áâà ­¨æë ª®­äë
; LD HL,Spec_Page.bitstream_pages
; LD A,B
; AND A
; JR Z,.INIT_ACEX.ReloadConfFromROM
; ;
; CALL EMM.GetMemBlkPages
; LD A,B
; JR C,.INIT_ACEX.ERROR
; CP BitStream_SizeInPages+1 ; ª®«¨ç¥á⢮ áâà ­¨æ ¢ ªíè ¤«ï ¡¨áâਬ  ¯«îá ®¤­ 
; JR NC,.INIT_ACEX.ERROR
; LD A,(Spec_Page.bitstream_pages)
; INC A
; JR Z,.INIT_ACEX.ERROR
; ;
; .INIT_ACEX.ReloadConfFromROM:
; ; § ª¨¤ë¢ ¥¬ ¢ Spec_Page ¯à®£ã ¤«ï § «¨¢ª¨ ª®­äë
; LD HL,.INIT_ACEX.PROGRAM
; LD DE,Spec_Page.init_acex
; LD BC,.INIT_ACEX.PROGRAM.Size
; LDIR
; ; ¥á«¨ ZF=0, â® ¯à®æ¥¤ãà  á¤¥« ¥â à¥á¥â á ¯¥à¥§ «¨¢ª®© ¨§ BIOS, ¨­ ç¥ ¨§ Š<>˜
; CALL Spec_Page.init_acex
; LD B,high BIOS.REINIT.HARD_RESET
; POP HL
; ;
; ;¢å®¤: B - ¯ à ¬¥âà ä㭪樨 BIOS REINIT
; ; H - Spec_Page.page_3
; .INIT_ACEX.ifSoftreset:
; ; á®å࠭塞 ¢®âª­ãâë¥ áâà ­¨æë ¢ Spec_Page
; IN A,(SLOT0)
; LD E,A
; IN A,(SLOT1)
; LD D,A
; IN A,(SLOT2)
; ;POP HL ; ¢®ááâ ­ ¢«¨¢ ¥¬ ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
; LD L,A
; LD (Spec_Page.page_0),DE
; LD (Spec_Page.page_2),HL
; ;
; ; ¤®áâ ñ¬  ¤à¥á ¢®§¢à â  ¢ ¢ë§ë¢ îéãî äã­ªæ¨î ¨ á®å࠭塞 ¢ Spec_Page
; POP DE
; LD HL,RST_18_1.exit
; XOR A
; SBC HL,DE
; JR NZ,.set_ret ; NZ - ¥á«¨ ¢ë§®¢ ¡ë« ¯® RST #18
; POP DE ; ¥á«¨ ¢ë§®¢ ¡ë« ¢ އ“ ¯® RST 8
; INC A
; .set_ret: LD (Spec_Page.RET_addr),DE
; ; A=0 - SYS_PORT.ON
; ; A=1 - SYS_PORT.OFF
; LD (Spec_Page.Reload_Version),A
; LD (Spec_Page.Stack_Point),SP
; ;
; LD A,high BIOS.REINIT.HARD_RESET
; CP B
; JR NZ,.reinit
; ; “áâ ­ ¢«¨¢ ¥¬ ª«îç¨ ¤«ï HARD reset
; LD HL,Spec_Page.flag_R
; LD (HL),"R"
; INC HL
; LD (HL),"S"
; INC HL
; LD (HL),"T"
; ;
; ; .. ... ... ..
; ;!TODO ᤥ« âì äã­ªæ¨î ¯® § «¨¢ª¥ ᢮¥© ª®­äë, ¯¥à¥å¢ âã à¥á¥â .
; ; *. ‚室 ¢ ¯®¤äã­ªæ¨î ⮫쪮 ç¥à¥§ RST 08 ¨«¨ #18
; ; *. ‘®åà ­¨âì ¢á¥ áâà ­¨æë ¯®«ì§®¢ â¥«ï ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; ; *. „®áâ âì á® á⥪   ¤à¥á ¢®§¢à â  ¨ á®åà ­¨âì ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; ; *. ‘®åà ­¨âì ªã¤ -­¨¡ã¤ì §­ ç¥­¨¥ á⥪ 
; ; *
; ; .. ... ... ..
; ;LD BC,BIOS.REINIT.HARD_RESET
; .reinit: JP REINIT
;
; ­  ¢å®¤¥ ¢ B ¯ à ¬¥âàë ä㭪樨 BIOS REINIT
.INIT_ACEX.ifSoftreset:
; á®å࠭塞 ¢®âª­ãâë¥ áâà ­¨æë ¢ Spec_Page
IN A,(SLOT0)
LD E,A
IN A,(SLOT1)
LD D,A
IN A,(SLOT2)
POP HL ; ¢®ááâ ­ ¢«¨¢ ¥¬ ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
LD L,A
LD (Spec_Page.page_0),DE
LD (Spec_Page.page_2),HL
.SetUpHardReset:
LD C,B
LD B,high BIOS.REINIT.HARD_RESET
CALL .PrepareResetSetUp
LD (Spec_Page.RET_addr),DE
LD A,#FF
LD (Spec_Page.Reload_Version),A
LD B,C
CALL .PrepareHardReset
JR .INIT_ACEX.ERROR ; ­®à¬ «ì­ë© ¢ë室 ¢ ¤ ­­®¬ á«ãç ¥
;
.ReturnSoftReset:
CALL .PrepareSoftReset
CALL .PrepareResetSetUp
; ¤®áâ ñ¬  ¤à¥á ¢®§¢à â  ¢ ¢ë§ë¢ îéãî äã­ªæ¨î ¨ á®å࠭塞 ¢ Spec_Page
POP DE
.set_ret_addr: POP DE
LD HL,RST_18_1.exit
XOR A
SBC HL,DE
@ -189,47 +254,40 @@ RST_CONF:
; A=0 - SYS_PORT.ON
; A=1 - SYS_PORT.OFF
LD (Spec_Page.Reload_Version),A
LD HL,0
ADD HL,SP
LD (Spec_Page.Stack_Point),HL
; “áâ ­ ¢«¨¢ ¥¬ ª«îç¨
LD HL,Spec_Page.flag_R
LD (HL),"R"
INC HL
LD (HL),"S"
INC HL
LD (HL),"T"
;
; .. ... ... ..
;!TODO ᤥ« âì äã­ªæ¨î ¯® § «¨¢ª¥ ᢮¥© ª®­äë, ¯¥à¥å¢ âã à¥á¥â .
; *. ‚室 ¢ ¯®¤äã­ªæ¨î ⮫쪮 ç¥à¥§ RST 08 ¨«¨ #18
; *. ‘®åà ­¨âì ¢á¥ áâà ­¨æë ¯®«ì§®¢ â¥«ï ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; *. „®áâ âì á® á⥪   ¤à¥á ¢®§¢à â  ¨ á®åà ­¨âì ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; *. ‘®åà ­¨âì ªã¤ -­¨¡ã¤ì §­ ç¥­¨¥ á⥪ 
; *
; .. ... ... ..
;LD BC,BIOS.REINIT.HARD_RESET
LD (Spec_Page.Stack_Point),SP
JP REINIT
;
.ReturnSoftReset:
DI
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢
LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.ON),A
; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â
IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
PUSH AF
LD A,Spec_Page
.SetUpSoftReset:
PUSH DE
CALL .PrepareSoftReset
CALL .PrepareResetSetUp
POP DE
LD (Spec_Page.RET_addr),DE
LD A,#FF
LD (Spec_Page.Reload_Version),A
LD A,(Spec_Page.page_3)
OUT (SLOT3),A
;
LD B,high BIOS.REINIT.SOFT_RESET
JR .INIT_ACEX.ifSoftreset
RET
; DI
; LD A,ACEX.RET_PORT
; LD B,Spec_Page
; CALL SET_PORTS
; ;
; ; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â
; IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
; LD H,A
; LD A,Spec_Page
; OUT (SLOT3),A
; ;
; LD B,high BIOS.REINIT.SOFT_RESET
; JR .INIT_ACEX.ifSoftreset
;
;;;
.INIT_ACEX.ERROR:
POP AF
LD A,(Spec_Page.page_3)
OUT (SLOT3),A
SCF
;SCF
RET
;
;--[]
@ -251,8 +309,8 @@ RST_CONF:
;
SAFE_PORTY
IN A,(FastRAM.ON)
IN A,(SLOT1)
LD (.slot1_page),A
; IN A,(SLOT1)
; LD (.slot1_page),A
;
LD A,#FE ; ç⮡ ¯à®¢¥à¨âì, çâ® ¢ë§ë¢ âì ¯®á«¥ CALL NZ,.INIT_ACEX.PROGRAM.LOAD
; âãâ ZF ¤®«¦¥­ ¡ëâì ¨§ ¢ë§ë¢ î饩 ¯à®æ¥¤ãàë
@ -278,7 +336,8 @@ RST_CONF:
XOR A
OUT (FastRAM.SLOT0),A
IN A,(FastRAM.OFF)
.slot1_page+1: LD A,0
; .slot1_page+1: LD A,0
LD A,(Spec_Page.page_1)
OUT (SLOT1),A
RET
;
@ -290,11 +349,11 @@ RST_CONF:
INC A
.INIT_ACEX.PROGRAM.load_loop:
EX AF,AF'
LD A,(HL)
INC HL
CP #FF
RET Z
OUT (SLOT1),A ; áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
LD A,(HL)
INC HL
CP #FF
RET Z
OUT (SLOT1),A ; áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
EX AF,AF'
;
; ¯¥à¥ª¨¤ë¢ ­¨¥ #3000 ¡ ©â®¢ ¢ Š<>˜(0) = #1000
@ -320,7 +379,80 @@ RST_CONF:
;
ENT
.INIT_ACEX.PROGRAM.Size EQU $-.INIT_ACEX.PROGRAM
;
;--[]
.PrepareSoftReset:
LD A,ACEX.RET_PORT
LD B,Spec_Page
CALL SET_PORTS
LD B,high BIOS.REINIT.SOFT_RESET
RET
.PrepareResetSetUp:
DI
; á®å࠭塞 ¢®âª­ãâë¥ áâà ­¨æë ¢ Spec_Page
IN A,(SLOT3)
LD H,A
LD A,Spec_Page
OUT (SLOT3),A
;
IN A,(SLOT2)
LD L,A
LD (Spec_Page.page_2),HL
IN A,(SLOT0)
LD (Spec_Page.page_0),A
IN A,(SLOT1)
LD (Spec_Page.page_1),A
;
LD A,high BIOS.REINIT.HARD_RESET
CP B
LD HL,Spec_Page.flag_R
JR NZ,.kill_flag
; “áâ ­ ¢«¨¢ ¥¬ ª«îç¨ ¤«ï HARD reset
LD (HL),"R"
INC HL
.kill_flag: LD (HL),"S"
INC HL
LD (HL),"T"
;
; .. ... ... ..
; [ ]
;!TODO ᤥ« âì äã­ªæ¨î ¯® § «¨¢ª¥ ᢮¥© ª®­äë, ¯¥à¥å¢ âã à¥á¥â .
; *. ‚室 ¢ ¯®¤äã­ªæ¨î ⮫쪮 ç¥à¥§ RST 08 ¨«¨ #18
; *. ‘®åà ­¨âì ¢á¥ áâà ­¨æë ¯®«ì§®¢ â¥«ï ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; *. „®áâ âì á® á⥪   ¤à¥á ¢®§¢à â  ¨ á®åà ­¨âì ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; *. ‘®åà ­¨âì ªã¤ -­¨¡ã¤ì §­ ç¥­¨¥ á⥪ 
; *
; .. ... ... ..
RET
;
; B - ramblock bitstream
.PrepareHardReset:
; ¯à®¢¥à塞 à §¬¥à ¡«®ª  á ª®­ä®© ¨ ¯®«ãç ¥¬ áâà ­¨æë ª®­äë
LD HL,Spec_Page.bitstream_pages
LD A,B
AND A
JR Z,.INIT_ACEX.ReloadConfFromROM
;
CALL EMM.GetMemBlkPages
RET C ; ERROR
LD A,BitStream_SizeInPages ; ª®«¨ç¥á⢮ áâà ­¨æ ¢ ªíè ¤«ï ¡¨áâਬ 
CP B
RET C ; ERROR
LD A,(Spec_Page.bitstream_pages)
INC A
SCF
RET Z ; ERROR
;
.INIT_ACEX.ReloadConfFromROM:
; § ª¨¤ë¢ ¥¬ ¢ Spec_Page ¯à®£ã ¤«ï § «¨¢ª¨ ª®­äë
LD HL,.INIT_ACEX.PROGRAM
LD DE,Spec_Page.init_acex
LD BC,.INIT_ACEX.PROGRAM.Size
LDIR
; ¥á«¨ ZF=0, â® ¯à®æ¥¤ãà  á¤¥« ¥â à¥á¥â á ¯¥à¥§ «¨¢ª®© ¨§ BIOS, ¨­ ç¥ ¨§ Š<>˜
JP Spec_Page.init_acex
;--[]
;***************************************

View File

@ -1,5 +1,5 @@
;=======================[All shared EQUs]=======================;
BETA_BUILD EQU 8 ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥
BETA_BUILD EQU 9 ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥
;======================[All shared defines]=====================;
DEFINE PACKED_MAIN 0 ; ¯ ª®¢ âì MAIN ¨«¨ ¢«¥§ ¥â ¡¥§ í⮣®?
DEFINE SP2000_Loader_Flag #0107 ;