добавлены подфункции в 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 CP #FF
JR Z,.JPHL ; olg logic JR Z,.JPHL ; olg logic
; new logic ; new logic
.ver_2: EXX .ver_2: LD SP,(Spec_Page.Stack_Point)
LD HL,(Spec_Page.Stack_Point)
LD SP,HL
EXX
AND A AND A
LD A,#FF LD A,#FF
LD (Spec_Page.Reload_Version),A LD (Spec_Page.Reload_Version),A

View File

@ -106,14 +106,20 @@ RST_CONF:
LD A,C LD A,C
JR Z,.crutch JR Z,.crutch
; [x] ; [x]
.not_vRAM_page: CP ACEX.Config_PG.Sp2000_SoftSetUp .not_vRAM_page: CP ACEX.Config_PG.Sp2000_SoftRestartNow
JP Z,.ReturnSoftReset JP Z,.ReturnSoftReset
; ;
CP ACEX.Config_PG.Sp2000_AcexSetUp CP ACEX.Config_PG.Sp2000_AcexSetUpNow
JR Z,.INIT_ACEX JR Z,.INIT_ACEX
; ;
CP ACEX.Config_PG.Sp2000_SetUp CP ACEX.Config_PG.Sp2000_SetUp
JR Z,.SP2000 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 ; only for old FLEX10K soft compatible
CP ACEX.Config_PG.Sp97_1 CP ACEX.Config_PG.Sp97_1
@ -130,55 +136,114 @@ RST_CONF:
SCF SCF
RET RET
; ;
; B - ID à ¬¡«®ª  á bitstream
;[x] ;[x]
.INIT_ACEX: DI .INIT_ACEX: LD C,B
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢
; 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
LD B,high BIOS.REINIT.HARD_RESET 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 .SetUpHardReset:
.INIT_ACEX.ifSoftreset: LD C,B
; á®å࠭塞 ¢®âª­ãâë¥ áâà ­¨æë ¢ Spec_Page LD B,high BIOS.REINIT.HARD_RESET
IN A,(SLOT0) CALL .PrepareResetSetUp
LD E,A LD (Spec_Page.RET_addr),DE
IN A,(SLOT1) LD A,#FF
LD D,A LD (Spec_Page.Reload_Version),A
IN A,(SLOT2) LD B,C
POP HL ; ¢®ááâ ­ ¢«¨¢ ¥¬ ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë CALL .PrepareHardReset
LD L,A JR .INIT_ACEX.ERROR ; ­®à¬ «ì­ë© ¢ë室 ¢ ¤ ­­®¬ á«ãç ¥
LD (Spec_Page.page_0),DE ;
LD (Spec_Page.page_2),HL .ReturnSoftReset:
CALL .PrepareSoftReset
CALL .PrepareResetSetUp
; ¤®áâ ñ¬  ¤à¥á ¢®§¢à â  ¢ ¢ë§ë¢ îéãî äã­ªæ¨î ¨ á®å࠭塞 ¢ Spec_Page ; ¤®áâ ñ¬  ¤à¥á ¢®§¢à â  ¢ ¢ë§ë¢ îéãî äã­ªæ¨î ¨ á®å࠭塞 ¢ Spec_Page
POP DE .set_ret_addr: POP DE
LD HL,RST_18_1.exit LD HL,RST_18_1.exit
XOR A XOR A
SBC HL,DE SBC HL,DE
@ -189,47 +254,40 @@ RST_CONF:
; A=0 - SYS_PORT.ON ; A=0 - SYS_PORT.ON
; A=1 - SYS_PORT.OFF ; A=1 - SYS_PORT.OFF
LD (Spec_Page.Reload_Version),A LD (Spec_Page.Reload_Version),A
LD HL,0 LD (Spec_Page.Stack_Point),SP
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
JP REINIT JP REINIT
; ;
.ReturnSoftReset: .SetUpSoftReset:
DI PUSH DE
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢ CALL .PrepareSoftReset
LD A,CNF_PORT.CNF_0 CALL .PrepareResetSetUp
OUT (SYS_PORT.ON),A POP DE
; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â LD (Spec_Page.RET_addr),DE
IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë LD A,#FF
PUSH AF LD (Spec_Page.Reload_Version),A
LD A,Spec_Page LD A,(Spec_Page.page_3)
OUT (SLOT3),A OUT (SLOT3),A
; RET
LD B,high BIOS.REINIT.SOFT_RESET
JR .INIT_ACEX.ifSoftreset ; 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: .INIT_ACEX.ERROR:
POP AF LD A,(Spec_Page.page_3)
OUT (SLOT3),A OUT (SLOT3),A
SCF ;SCF
RET RET
; ;
;--[] ;--[]
@ -251,8 +309,8 @@ RST_CONF:
; ;
SAFE_PORTY SAFE_PORTY
IN A,(FastRAM.ON) IN A,(FastRAM.ON)
IN A,(SLOT1) ; IN A,(SLOT1)
LD (.slot1_page),A ; LD (.slot1_page),A
; ;
LD A,#FE ; ç⮡ ¯à®¢¥à¨âì, çâ® ¢ë§ë¢ âì ¯®á«¥ CALL NZ,.INIT_ACEX.PROGRAM.LOAD LD A,#FE ; ç⮡ ¯à®¢¥à¨âì, çâ® ¢ë§ë¢ âì ¯®á«¥ CALL NZ,.INIT_ACEX.PROGRAM.LOAD
; âãâ ZF ¤®«¦¥­ ¡ëâì ¨§ ¢ë§ë¢ î饩 ¯à®æ¥¤ãàë ; âãâ ZF ¤®«¦¥­ ¡ëâì ¨§ ¢ë§ë¢ î饩 ¯à®æ¥¤ãàë
@ -278,7 +336,8 @@ RST_CONF:
XOR A XOR A
OUT (FastRAM.SLOT0),A OUT (FastRAM.SLOT0),A
IN A,(FastRAM.OFF) 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 OUT (SLOT1),A
RET RET
; ;
@ -290,11 +349,11 @@ RST_CONF:
INC A INC A
.INIT_ACEX.PROGRAM.load_loop: .INIT_ACEX.PROGRAM.load_loop:
EX AF,AF' EX AF,AF'
LD A,(HL) LD A,(HL)
INC HL INC HL
CP #FF CP #FF
RET Z RET Z
OUT (SLOT1),A ; áâà ­¨æ  á ¤ ­­ë¬¨ ä ©«  OUT (SLOT1),A ; áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
EX AF,AF' EX AF,AF'
; ;
; ¯¥à¥ª¨¤ë¢ ­¨¥ #3000 ¡ ©â®¢ ¢ Š<>˜(0) = #1000 ; ¯¥à¥ª¨¤ë¢ ­¨¥ #3000 ¡ ©â®¢ ¢ Š<>˜(0) = #1000
@ -320,7 +379,80 @@ RST_CONF:
; ;
ENT ENT
.INIT_ACEX.PROGRAM.Size EQU $-.INIT_ACEX.PROGRAM .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]=======================; ;=======================[All shared EQUs]=======================;
BETA_BUILD EQU 8 ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥ BETA_BUILD EQU 9 ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥
;======================[All shared defines]=====================; ;======================[All shared defines]=====================;
DEFINE PACKED_MAIN 0 ; ¯ ª®¢ âì MAIN ¨«¨ ¢«¥§ ¥â ¡¥§ í⮣®? DEFINE PACKED_MAIN 0 ; ¯ ª®¢ âì MAIN ¨«¨ ¢«¥§ ¥â ¡¥§ í⮣®?
DEFINE SP2000_Loader_Flag #0107 ; DEFINE SP2000_Loader_Flag #0107 ;