for new bios

This commit is contained in:
Anatoliy Belyanskiy 2024-01-24 00:55:19 +10:00
parent fbcbd35a6b
commit 63aa9fdb09
3 changed files with 93 additions and 135 deletions

View File

@ -57,7 +57,7 @@ Reload_String: DB ACEX.RELOAD_STRING ; 䫠
VMod: db 0 ; <EFBFBD>¥¦¨¬ íªà ­  VMod: db 0 ; <EFBFBD>¥¦¨¬ íªà ­ 
VModPage: db 0 ; ‘âà ­¨æ  íªà ­  VModPage: db 0 ; ‘âà ­¨æ  íªà ­ 
ram_blk_id: DB 0 ; ˆ¤¥­â¨ä¨ª â®à ¡«®ª  ¯ ¬ï⨠ram_blk_id: DB 0 ; ˆ¤¥­â¨ä¨ª â®à ¡«®ª  ¯ ¬ïâ¨
SP_Save: DB 0,0 ; ’ãâ åà ­¨¬ á⥪ ¤«ï ¯¥à¥§ £à㧪¨ ;SP_Save: DB 0,0 ; ’ãâ åà ­¨¬ á⥪ ¤«ï ¯¥à¥§ £à㧪¨
dss_line: DB 0,0 ; 㪠§ â¥«ì ­  DOS áâப㠧 ¯ã᪠ LDConf dss_line: DB 0,0 ; 㪠§ â¥«ì ­  DOS áâப㠧 ¯ã᪠ LDConf
NextParameter: dw 0000 ; ‘«¥¤ãî騩 ¯ à ¬¥âà ¤«ï .GetParam NextParameter: dw 0000 ; ‘«¥¤ãî騩 ¯ à ¬¥âà ¤«ï .GetParam
; ;
@ -65,7 +65,7 @@ NextParameter: dw 0000 ;
; <EFBFBD> §­ë¥ ¡ãää¥à  (.)(.) ; <EFBFBD> §­ë¥ ¡ãää¥à  (.)(.)
BufferEXE: DB 0,0,0,0 BufferEXE: DB 0,0,0,0
ram_pages: DB 0,0,0,0,0 ; ‚뤥«¥­­ë¥ BIOS'®¬ ¡«®ª¨ ¯ ¬ï⨠(¯®á«¥¤­¨© #FF) ram_pages: DB 0,0,0,0,0 ; ‚뤥«¥­­ë¥ BIOS'®¬ ¡«®ª¨ ¯ ¬ï⨠(¯®á«¥¤­¨© #FF)
page0_save: DB 0 ; ’ãâ åà ­¨¬ ⥪ãéãî áâà ­¨æã PAGE0 (¤®«¦­  ¨¤â¨ ¯®á«¥ ram_pages) ;page0_save: DB 0 ; ’ãâ åà ­¨¬ ⥪ãéãî áâà ­¨æã PAGE0 (¤®«¦­  ¨¤â¨ ¯®á«¥ ram_pages)
page1_save: DB 0 ; ’ãâ åà ­¨¬ ⥪ãéãî áâà ­¨æã PAGE1 page1_save: DB 0 ; ’ãâ åà ­¨¬ ⥪ãéãî áâà ­¨æã PAGE1
page2_save: DB 0 ; ’ãâ åà ­¨¬ ⥪ãéãî áâà ­¨æã PAGE2 (¤®«¦­  ¨¤â¨ ¯®á«¥ ram_pages) page2_save: DB 0 ; ’ãâ åà ­¨¬ ⥪ãéãî áâà ­¨æã PAGE2 (¤®«¦­  ¨¤â¨ ¯®á«¥ ram_pages)
page3_save: DB 0 ; ’ãâ åà ­¨¬ ⥪ãéãî áâà ­¨æã PAGE3 page3_save: DB 0 ; ’ãâ åà ­¨¬ ⥪ãéãî áâà ­¨æã PAGE3

View File

@ -12,7 +12,7 @@
; |_| |_| ; |_| |_|
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ‚¥àá¨ï ¯à®£¨ ¨ ¨­ä® ¤«ï ¯®­â®¢: ; ‚¥àá¨ï ¯à®£¨ ¨ ¨­ä® ¤«ï ¯®­â®¢:
DEFINE Ver_ID "0.3 alpha" DEFINE Ver_ID "0.4 alpha"
DEFINE e_mail "Tolik.Trek@gmail.com" DEFINE e_mail "Tolik.Trek@gmail.com"
; <09>®¤£à㧪  ä ©«  á ª®­áâ ­â ¬¨ BIOS ¨ DSS: ; <09>®¤£à㧪  ä ©«  á ª®­áâ ­â ¬¨ BIOS ¨ DSS:
@ -22,7 +22,7 @@
; Œ ªà®áë ; Œ ªà®áë
MACRO _PrintStr MACRO _PrintStr
LD C,#5C LD C,Dss.PChars
RST ToDSS RST ToDSS
ENDM ENDM
@ -34,13 +34,12 @@
;-----------------; ;-----------------;
ENDM ENDM
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
ST_Point EQU #BFFE ;  ¤à¥á á⥪  stack_point EQU #BFFE ;  ¤à¥á á⥪ 
SP_Win EQU 64 ; ¬­¨¬ë© ª®­âà®«ì ¯¥à¥á¥ç¥­¨ï á⥪  á ª®¤®¬ SP_Win EQU 64 ; ¬­¨¬ë© ª®­âà®«ì ¯¥à¥á¥ç¥­¨ï á⥪  á ª®¤®¬
ORG_Addr EQU #8100 ;  ¤à¥á ª®¬¯¨«ï樨. DSS ¢áâ ¢«ï¥â áâபã org_addr EQU #8000 + CLP_Buffer ;  ¤à¥á ª®¬¯¨«ï樨.
; á ¯ à ¬¥âà ¬¨ § ¯ã饭­®£® EXE ¯¥à¥¤ program_start EQU START
;  ¤à¥á®¬ § £à㧪¨ START, ¯®í⮬ã code_addr EQU START
; £à㧨¬áï ­¥ á ­ ç «  áâà ­¨æë. Loader_length EQU 0
; _______ _______ ____ __ _ ; _______ _______ ____ __ _
; | ____\ \/ / ____| | _ \ _ __ ___ / _(_)_ __ ; | ____\ \/ / ____| | _ \ _ __ ___ / _(_)_ __
; | _| \ /| _| | |_) | '__/ _ \ |_| \ \/ / ; | _| \ /| _| | |_) | '__/ _ \ |_| \ \/ /
@ -48,24 +47,9 @@ ORG_Addr EQU #8100 ;
; |_____/_/\_\_____| |_| |_| \___|_| |_/_/\_\ ; |_____/_/\_\_____| |_| |_| \___|_| |_/_/\_\
;-----------------; ;-----------------;
ORG ORG_Addr-22 INCLUDE 'Shared_Includes/constants/EXE_Header.z80'
; ‘­ ç «  ¢ EXE ä ©«¥ ¨¤ñâ § £®«®¢®ª ORG org_addr
; ¤«¨­­®© ¢ 1 ᥪâ®à (512 ¡ ©â)
;-----------------; ;-----------------;
DB 'EX' ; EXE ‘¨£­ âãà 
DB 'E' ; Reserved (EXE type)
DB 0 ; Version of EXE file
DW #0200 ; ª ª®£® ᬥ饭¨ï ¢ ä ©«¥ ¡ã¤¥â £à㧨âìáï ª®¤ ¢
DW #0000 ; ¯ ¬ïâì ¯®  ¤à¥áã (START) Low - 0200h, High - 0000.
DW #0000 ; <20> §¬¥à ¯¥à¢¨ç­®£® § £àã§ç¨ª  ¨«¨ 0
DW #0000 ; Reserved
DW #0000 ; Reserved
DW #0000 ; Reserved
DW START ; €¤à¥á à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ïâ¨
DW START ; €¤à¥á ¢ ¯ ¬ïâ¨ á ª®â®à®£® § ¯ãáâ¨âáï ª®¤ (Reg. PC)
DW ST_Point ; €¤à¥á á⥪  (Reg. SP)
;*******************************************************
; __ __ _ ; __ __ _
; | \/ | __ _(_)_ __ ; | \/ | __ _(_)_ __
; | |\/| |/ _` | | '_ \ ; | |\/| |/ _` | | '_ \
@ -73,9 +57,6 @@ ORG_Addr EQU #8100 ;
; |_| |_|\__,_|_|_| |_| ; |_| |_|\__,_|_|_| |_|
START: START:
;
;
;-----------------; —¨á⨬ ¡ãä¥à  ªá¥«¥¬ ;-----------------; —¨á⨬ ¡ãä¥à  ªá¥«¥¬
DI DI
LD HL,Buffer LD HL,Buffer
@ -87,8 +68,8 @@ START:
LD B,B ; ‚몫îç ¥¬  ªá¥«ì LD B,B ; ‚몫îç ¥¬  ªá¥«ì
EI EI
;-----------------; ‘®å࠭塞 ⥪ã騥 áâà ­¨æë ;-----------------; ‘®å࠭塞 ⥪ã騥 áâà ­¨æë
IN A,(SLOT0) ; IN A,(SLOT0)
LD (page0_save),A ; LD (page0_save),A
IN A,(SLOT1) IN A,(SLOT1)
LD (page1_save),A LD (page1_save),A
IN A,(SLOT2) IN A,(SLOT2)
@ -177,31 +158,38 @@ START:
;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ Load_conf ;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ Load_conf
1: 1:
; ;
LD DE,ReloadRET ; €¤à¥á އ<E280A1>€ ¯®á«¥ ¯¥à¥§ £à㧪¨ ;LD DE,ReloadRET ; €¤à¥á އ<E280A1>€ ¯®á«¥ ¯¥à¥§ £à㧪¨
LD (SP_Save),SP ; á®å࠭塞 á⥪ ;LD (SP_Save),SP ; á®å࠭塞 á⥪
CALL Set_Ret ; ãáâ ­®¢ª  ¤ ­­ëå ¤«ï ¢®§¢à â  ;CALL Set_Ret ; ãáâ ­®¢ª  ¤ ­­ëå ¤«ï ¢®§¢à â 
; ;
CALL Set_Acex_Data ; ¯¥à¥£à㧪  ¤ ­­ëå ACEX ¢ FAST-RAM ;CALL Set_Acex_Data ; ¯¥à¥£à㧪  ¤ ­­ëå ACEX ¢ FAST-RAM
; <20>®á«¥ í⮩ ¯à®æ¥¤ãàë å¨âன ^^^^^^ ­ ç¨­ îâáï £«îª¨ ; <20>®á«¥ í⮩ ¯à®æ¥¤ãàë å¨âன ^^^^^^ ­ ç¨­ îâáï £«îª¨
; á ¢ë§®¢®¬ ¯à®æ¥¤ãà DSS. —ñâ ®­  â ¬ ¬ã¤à¨â á ¯®àâ ¬¨ ; á ¢ë§®¢®¬ ¯à®æ¥¤ãà DSS. —ñâ ®­  â ¬ ¬ã¤à¨â á ¯®àâ ¬¨
; ¨«¨ á ¯ ¬ïâìî, ­¥ à §®¡à «áï. <20>®í⮬㠯®á«¥ ­¥ñ «ãçè¥ ; ¨«¨ á ¯ ¬ïâìî, ­¥ à §®¡à «áï. <20>®í⮬㠯®á«¥ ­¥ñ «ãçè¥
; áà §ã ¢ à¥á¥â á £®«®¢®© ¨ ­¥ ¯ à¨âìáï... ; áà §ã ¢ à¥á¥â á £®«®¢®© ¨ ­¥ ¯ à¨âìáï...
LD A,(ram_blk_id)
LD B,A
LD A,#FE
LD C,BIOS.RST_CONF.CUSTOM
RST ToBIOS
JP ReloadRET
;-----------------; ;-----------------;
;-----------------; 7 ¡¥¤ - 1 à¥á¥â ;-----------------; 7 ¡¥¤ - 1 à¥á¥â
RESET: DI ; RESET: DI
LD A,DCP_PAGE ; LD A,DCP_PAGE
OUT (SLOT1),A ; set DCP page ; OUT (SLOT1),A ; set DCP page
LD A,ACEX.RESET ; LD A,ACEX.RESET
LD (#4400),A ; open for WR ; LD (#4400),A ; open for WR
LD (#4600),A ; open for RD ; LD (#4600),A ; open for RD
; ; ;
.LOOP: LD BC,#100 ; .LOOP: LD BC,#100
OUT (C),C ; OUT (C),C
LD B,0 ; LD B,0
OUT (C),C ; OUT (C),C
JR .LOOP ; ¯®«­®áâìî § æ¨ª«¨âì! ; JR .LOOP ; ¯®«­®áâìî § æ¨ª«¨âì!
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
@ -216,15 +204,14 @@ RESET: DI
; ¯¥à¥§ £à㧪¨ ­®¢®© ¯à®è¨¢ª¨ ; ¯¥à¥§ £à㧪¨ ­®¢®© ¯à®è¨¢ª¨
;-----------------; ;-----------------;
ReloadRET: ReloadRET: DI
DI ;LD SP,(SP_Save)
LD SP,(SP_Save)
LD A,CNF_PORT.CNF_0 ; ª®­ä¨£ãà æ¨ï ¨ ®âª«î祭¨¥ <20>‡“ LD A,CNF_PORT.CNF_0 ; ª®­ä¨£ãà æ¨ï ¨ ®âª«î祭¨¥ <20>‡“
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
LD A,(page0_save) ; SET PAGE DOS ; LD A,(page0_save) ; SET PAGE DOS
OUT (SLOT0),A ; OUT (SLOT0),A
LD A,(page3_save) ; ¢®§¢à â áâ à®© áâà ­¨æë PAGE3 ; LD A,(page3_save) ; ¢®§¢à â áâ à®© áâà ­¨æë PAGE3
OUT (SLOT3),A ; OUT (SLOT3),A
;-----------------; ;-----------------;
;-----------------; <20> ¡®â  ¯à®£à ¬¬ë á ­®¢®© ¯à®è¨¢ª®© ;-----------------; <20> ¡®â  ¯à®£à ¬¬ë á ­®¢®© ¯à®è¨¢ª®©
@ -237,42 +224,17 @@ ReloadRET:
;-----------------; ;-----------------;
;-----------------; ;-----------------;
1: 1: DI
DI
LD A,(a_key) ; ‚ë室 ¡¥§ ¢®ááâ ­®¢«¥­¨ï ¤¥ä®«â­®© ª®­äë? LD A,(a_key) ; ‚ë室 ¡¥§ ¢®ááâ ­®¢«¥­¨ï ¤¥ä®«â­®© ª®­äë?
AND A AND A
JP NZ,1F JP NZ,NextReloadRET
; jp nz,NormExit LD B,0
; jp nz,NextReloadRET LD A,#FE
LD C,BIOS.RST_CONF.CUSTOM
LD DE,NextReloadRET ; RST ToBIOS
LD (SP_Save),SP ; á®å࠭塞 á⥪
CALL Set_Ret ; ãáâ ­®¢ª  ¤ ­­ëå ¤«ï ¢®§¢à â 
JP RESET
1:
; ld a,(l_key)
; and a
; jr nz, NextReloadRET
DI
IN A,(FastRAM.ON) ; ‚ª«î祭¨¥ ªíè 
LD A,3
OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 3
LD A,#FF
LD (#3EF0),A ; § â¨à ­¨¥ ACEX_K30_LOADING
LD (#3EE0),A ; § â¨à ­¨¥ "IM" ä« £ 
XOR A ; Žâª«î祭¨¥ ªíè 
OUT (FastRAM.SLOT0),A ; ¯¨è¥¬ ¢ FastRAM.SLOT0 ­®«ì, ¨­ ç¥ ¢
IN A,(FastRAM.OFF) ; ­ã«¥¢®¥ ®ª­® ¡¨®á ¨«¨ „‘‘ ­¥ ¢®âª­ãâáï
JP NextReloadRET JP NextReloadRET
;******************************************************* ;*******************************************************
; _ _ _ ; _ _ _
@ -292,20 +254,20 @@ NextReloadRET:
DI DI
; ;
;-----------------; ‡ â¨à ¥¬ á«¥¤ë ­¥á⮪®¢®© ª®­äë ;-----------------; ‡ â¨à ¥¬ á«¥¤ë ­¥á⮪®¢®© ª®­äë
LD A,Spec_Page ; LD A,Spec_Page
OUT (SLOT3),A ; ®âªàëâì ᯥæ-áâà ­¨æã ; OUT (SLOT3),A ; ®âªàëâì ᯥæ-áâà ­¨æã
LD H,#FF ; LD H,#FF
LD L,H ; LD L,H
LD SP,HL ; LD SP,HL
PUSH HL ; PUSH HL
PUSH HL ; PUSH HL
PUSH HL ; PUSH HL
PUSH HL ; PUSH HL
PUSH HL ; PUSH HL
PUSH HL ; PUSH HL
PUSH HL ; PUSH HL
PUSH HL ; PUSH HL
; LD (0FFF3h),A ; á®å࠭塞 áâà ­¨æë ; LD (0FFF3h),A ; á®å࠭塞 áâà ­¨æë
; ld A,(page0_save) ; ld A,(page0_save)
@ -336,8 +298,8 @@ NextReloadRET:
;-----------------; ;-----------------;
; ;
LD SP,(SP_Save) ;LD SP,(SP_Save)
LD A,CNF_PORT.CNF_0 ; ª®­ä¨£ãà æ¨ï ¨ ®âª«î祭¨¥ <20>‡“ LD A,CNF_PORT.CNF_0 ; ª®­ä¨£ãà æ¨ï ¨ ®âª«î祭¨¥ <20>‡“
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
LD A,(page0_save) ; SET PAGE DOS LD A,(page0_save) ; SET PAGE DOS
@ -728,21 +690,18 @@ TakeMem:
; ¯à¥¤ë¤ã饣® á®áâ®ï­¨ï. ; ¯à¥¤ë¤ã饣® á®áâ®ï­¨ï.
;-----------------; ;-----------------;
Load_conf: Load_conf: LD HL,ram_pages
LD DE,#3000
LD HL,ram_pages
LD B,4 LD B,4
1: .loop: LD A,(HL)
LD A,(HL)
OUT (SLOT3),A OUT (SLOT3),A
PUSH HL PUSH HL
PUSH BC PUSH BC
; CALL .loopRead ; CALL .loopRead
; ; <20> à ¬¥âàë: DE - ᪮«ìª® áç¨â âì ¢ áâà ­¨æã ; ; <20> à ¬¥âàë: DE - ᪮«ìª® áç¨â âì ¢ áâà ­¨æã
LD A,(ConfHandler) ;   ªã¤  £à㧨âì - à ááç¨â뢠¥âáï (#0000 - DE) LD A,(ConfHandler) ;   ªã¤  £à㧨âì - à ááç¨â뢠¥âáï (#0000 - DE)
LD HL,#0000 LD HL,#C000
SBC HL,DE ; ’ã⠡㤥⠢ HL  ¤à¥á ªã¤ ,   ¢ DE ᪮«ìª® § £à㦠âì LD DE,#4000
LD C,13h LD C,Dss.Read
RST ToDSS RST ToDSS
POP BC POP BC
@ -752,8 +711,7 @@ Load_conf:
RET NZ ; ¥á«¨ A<>0, â® ¤ . ‚ë室 RET NZ ; ¥á«¨ A<>0, â® ¤ . ‚ë室
INC HL INC HL
LD DE,#4000 DJNZ .loop
DJNZ 1B
RET RET
;******************************************************* ;*******************************************************
@ -829,8 +787,8 @@ Set_Acex_Data:
OUT (SLOT1),A OUT (SLOT1),A
XOR A ; Žâª«î祭¨¥ ªíè  XOR A ; Žâª«î祭¨¥ ªíè 
OUT (FastRAM.SLOT0),A ; ¯¨è¥¬ ¢ FastRAM.SLOT0 ­®«ì, ¨­ ç¥ ¢ OUT (FastRAM.SLOT0),A ; ¯¨è¥¬ ¢ FastRAM.SLOT0 ­®«ì, ¨­ ç¥ ¢
IN A,(FastRAM.OFF) ; ­ã«¥¢®¥ ®ª­® ¡¨®á ¨«¨ „‘‘ ­¥ ¢®âª­ãâáï IN A,(FastRAM.OFF) ; ­ã«¥¢®¥ ®ª­® ¡¨®á ¨«¨ „‘‘ ­¥ ¢®âª­ãâáï
RET RET
;******************************************************* ;*******************************************************
@ -847,29 +805,29 @@ Set_Acex_Data:
; €¤à¥á ¯à®£à ¬¬ë ¤«ï ¢®§¢à â  ¢ ॣ¨áâॠDE ; €¤à¥á ¯à®£à ¬¬ë ¤«ï ¢®§¢à â  ¢ ॣ¨áâॠDE
;-----------------; ;-----------------;
Set_Ret: ; Set_Ret:
DI ; DI
LD A,Spec_Page ; LD A,Spec_Page
OUT (SLOT3),A ; ®âªàëâì ᯥæ-áâà ­¨æã ; OUT (SLOT3),A ; ®âªàëâì ᯥæ-áâà ­¨æã
LD (#FFF3),A ; á®å࠭塞 ¢ ᯥæáâà ­¨æã ­®¬¥à Spec_Page ; LD (#FFF3),A ; á®å࠭塞 ¢ ᯥæáâà ­¨æã ­®¬¥à Spec_Page
LD (#FFF4),DE ;  ¤à¥á ¯à®£à ¬¬ë ¯¥à¥§ ¯ã᪠ ; LD (#FFF4),DE ;  ¤à¥á ¯à®£à ¬¬ë ¯¥à¥§ ¯ã᪠
LD DE,#FFF0 ; á®å࠭塞 áâà ­¨æë 0-2 ¢ ᯥæáâà ­¨æ¥ ; LD DE,#FFF0 ; á®å࠭塞 áâà ­¨æë 0-2 ¢ ᯥæáâà ­¨æ¥
LD HL,page0_save ; LD HL,page0_save
LDI ; LDI
LDI ; LDI
LDI ; LDI
LD A,'Z' ; ä« £¨ ¯¥à¥§ ¯ã᪠ ; LD A,'Z' ; ä« £¨ ¯¥à¥§ ¯ã᪠
LD (#FFFE),A ; LD (#FFFE),A
LD A,'X' ; LD A,'X'
LD (#FFFF),A ; LD (#FFFF),A
LD A,(page3_save) ; ‚®ááâ ­ ¢«¨¢ ¥¬ ­ ç «ì­ãî áâà ­¨æã 3 ; LD A,(page3_save) ; ‚®ááâ ­ ¢«¨¢ ¥¬ ­ ç «ì­ãî áâà ­¨æã 3
OUT (SLOT3),A ; OUT (SLOT3),A
EI ; EI
RET ; RET
;******************************************************* ;*******************************************************
@ -879,9 +837,9 @@ Set_Ret:
; ;
the_end EQU $ the_end EQU $
; ;
IF (the_end>(ST_Point-SP_Win)) IF (the_end>(stack_point-SP_Win))
DISPLAY "the_end = ",/H,the_end DISPLAY "the_end = ",/H,the_end
DISPLAY "ST_Point-SP_Win = ",/H,(ST_Point-SP_Win) DISPLAY "ST_Point-SP_Win = ",/H,(stack_point-SP_Win)
ASSERT 0, "Code + Stack = Love!!! (((((" ASSERT 0, "Code + Stack = Love!!! ((((("
ENDIF ENDIF

@ -1 +1 @@
Subproject commit a6dee8e17ae12b251f306290793a56a6b0dd5ae3 Subproject commit 653e504a06665ec95a8ef2a4257d9cfb18f6d6f0