+- BIOS function for ACEX reload by custom bitstream

This commit is contained in:
Anatoliy Belyanskiy 2023-11-03 02:28:29 +10:00
parent 681c2cfdff
commit 730aae8a89
7 changed files with 175 additions and 36 deletions

@ -1 +1 @@
Subproject commit a15861c07cab60eaf09c28226d0c7761b4fd8235
Subproject commit 8c5550f810d173790e4665d610328b9247b00f02

View File

@ -709,10 +709,26 @@ FN_5x_Parser:
EX (SP),HL
RET
EXP_FNS: ; ‚室 ¢ äã­ªæ¨î ¨§ TR-DOS
POP AF
; ‚室 ¢ ä㭪樨 <20>ˆŽ ¨§ TR-DOS
EXP_FNS:; ®âª«îç ¥¬ § ¯¨áì ¢ íªà ­ ᯥªâà㬠
EX (SP),HL
IN A,(RGADR)
LD L,A
LD A,#C0
OUT (PORT_Y),A
LD A,H
EX (SP),HL ; (SP) = port_y
;
CALL EXP_FNS_RST18
CALL DOS_ON
; ¢®§¢à é ¥¬ § ¯¨áì ¢ íªà ­ ᯥªâà㬠
EX (SP),HL
PUSH AF
LD A,L
OUT (RGADR),A
POP AF
POP HL
; ¢®§¢à â
JP EXP_FNS_RET
;! ! ! ! ! ! ! !

View File

@ -49,7 +49,7 @@ RST_10:
JP EXP_FNS_RST18
RST_18_1:
CALL EXP_FNS_RST18
JR EXP_FNS_2_RET
.exit: JR EXP_FNS_2_RET
;=======================================
@ -772,6 +772,8 @@ set_config:
; JR NZ,NO_SETUP_2
;[---------------------------------------------------------------------]
MODULE Reset_Handler
start:
IN A,(SLOT3)
@ -853,21 +855,22 @@ init_rom_address EQU #8200 ;!HARDCO
;!FIXIT ᤥ« âì ¢ë¡®à £à㧨âì ¤ /­¥â <20>‡“ ᯥªâà㬠 ¯à¨ áâ àâ¥, [-------]
; ¥á«¨ ­¥â - â® ¢®âª­ãâì íâ®â ª®¤:
; LD HL,PROG_NO_ROM
; LD DE,#C000 + #38
; LD DE,#C000 + Spec_Page.no_zx_rom
; LD BC,PROG_NO_ROM.size
; LDIR
; LD HL,RAM_BIOS_PROG
; LD DE,#C000 + #08
; LD DE,#C000 + Spec_Page.to_bios
; LD BC,RAM_BIOS_PROG.Length
; LDIR
;[---------------------------------------------------------------------]
;---------------------------------------
Spec_Page_handler_OK:
pop af
OUT (SLOT3),A
ENDMODULE
;[---------------------------------------------------------------------]
;
;**************************************
;
@ -1370,7 +1373,7 @@ Length EQU $-Setup_Starter.Start
;---------------------[ ‡€ƒ‹“˜Šˆ „‹Ÿ #41 <E28098><EFBFBD>ˆ]----------------------;
;-------------[RST 08]
; RAM_BIOS_PROG: ; for CALL BIOS in #41 page
; DISP #08
; DISP Spec_Page.to_bios
; PUSH AF
; LD A,ROM.BIOS
; OUT (SYS_PORT.ROM),A
@ -1382,7 +1385,7 @@ Length EQU $-Setup_Starter.Start
; ;-------------[RST 38]
; PROG_NO_ROM:
; DISP #38
; DISP Spec_Page.no_zx_rom
; DI
; LD A,#FF

View File

@ -585,13 +585,13 @@ WIN_SET_ZG: ; LP_SET_ZG:
RET
.SET: IN A,(SLOT1)
LD (SYS_PAGE.COPY_SLOT1),A
LD A,#FF
LD A,SHARED_PAGE
OUT (SLOT1),A
EXX
LD BC,Port_All_Mode
IN A,(C)
LD (SYS_PAGE.SYS_WORK1),A
AND #FE ; accelerator and keyboard interrupt off
AND #FE ; Spectrum Screen on, accelerator and keyboard interrupt off
OUT (C),A
EX AF,AF'
LD B,A

View File

@ -30,7 +30,7 @@ EMM.GetMemSize:
;
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
EMM.InitMem:
PUSH BC
@ -107,7 +107,7 @@ RESERVED_PAGES:
;
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
; <20>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes,
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
@ -228,7 +228,7 @@ EMM.FreeMem:
LD A,SYS_PAGE
OUT (SLOT1),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) ; !FIXIT SAFE_RGADR
LD A,L
EMM_F3M_L1:
LD L,A
@ -345,6 +345,38 @@ EMM.GetMemPageNext:
; ‚室: A - ¡«®ª, HL -  ¤à¥á ¡ãä¥à  - 256 ¡ ©â.
; ‚ë室: HL -  ¤à¥á ¡«®ª , B - ¤«¨­  ¡«®ª  ¢ áâà ­¨æ å އ“
;EMM_FN5M:
; EMM.GetMemBlkPages:
; PUSH DE
; PUSH HL
; EX DE,HL
; LD B,0
; LD L,A
; .loop: LD A,L
; LD (DE),A
; INC DE
; AND A
; JR Z,.error
; CP #FF
; JR Z,.end
; ;
; IN A,(SLOT1)
; LD C,A
; LD A,SYS_PAGE
; OUT (SLOT1),A
; LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
; LD L,(HL)
; LD A,C
; OUT (SLOT1),A
; ;
; INC B
; JR NZ,.loop
; .error: SCF
; .end: POP HL
; POP DE
; RET
EMM.GetMemBlkPages:
PUSH DE
PUSH HL
@ -352,7 +384,10 @@ EMM.GetMemBlkPages:
LD B,0
LD L,A
LD A,R
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT1),A
.loop: LD A,L
LD (DE),A
@ -362,34 +397,24 @@ EMM.GetMemBlkPages:
CP #FF
JR Z,.end
;
IN A,(SLOT1)
LD C,A
LD A,SYS_PAGE
OUT (SLOT1),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD L,(HL)
LD A,C
OUT (SLOT1),A
;
INC B
JR NZ,.loop
.error: SCF
.end: POP HL
.end: LD A,C
OUT (SLOT1),A
POP HL
POP DE
RET
; .end: POP HL
; POP DE
; AND A
; RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
;RAMD_R_W:
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º RD/WR SECTOR º\
@ -493,7 +518,6 @@ BLK_RD_WR:
BIT 7,H
JR NZ,.BLK_PAGE1 ; !!!!! JR NZ,BLK_PAGE1 ?
.BLK_PAGE3: ; !TODO ¯¥à¥¤¥« âì ­  SLOT ?????
LD C,SLOT3
IN C,(C)
OUT (SLOT3),A
@ -852,7 +876,7 @@ GET_RAMD_ST:
;
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
; RAM-Disk A, BLK - B
BLK_TO_RAMD:
CP SYS_PAGE.RAMD_KEYS.NUM
@ -896,7 +920,7 @@ BLK_BUSY:
;
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
; RAM-Disk A
RAMD_CLEAR:
CP SYS_PAGE.RAMD_KEYS.NUM
@ -931,7 +955,7 @@ RAMD_CLEAR:
;
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
; à §¤¥«¨âì ¡«®ª ¯ ¬ï⨠­  ¤¢  ¡«®ª 
; A - ¡«®ª, B - ¤«¨­  ¯¥à¢®£® ¡«®ª  ¯®á«¥ à §¤¥«¥­¨ï
; ¢ë室: A - ¡«®ª 1, B - ¡«®ª 2
@ -969,7 +993,7 @@ EMM.DivMemBlocks:
;
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
; ᫨âì ¤¢  ¡«®ª  ¯ ¬ï⨠¢ ®¤¨­
; € - ¡«®ª 1, B - ¡«®ª 2
; ¢ë室: € - ¡«®ª

View File

@ -100,7 +100,7 @@ RST_CONF:
.CHOOSE_CNF:
;!TEST
CP PG_Sp2000
LD DE,SP2000_ConfID
;LD DE,SP2000_ConfID
JR Z,.INIT_ACEX
;
@ -117,13 +117,109 @@ RST_CONF:
SCF
RET
.INIT_ACEX:
.INIT_ACEX: ;!FIXIT ;!TODO <20>…„Ž„…<E280B9>Ž!!!!
DI
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢
LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.ON),A
; á®å࠭塞 ¢®âª­ãâë¥ áâà ­¨æë ¢ Spec_Page
IN A,(SLOT0)
LD E,A
IN A,(SLOT1)
LD D,A
IN A,(SLOT2)
LD L,A
IN A,(SLOT3)
LD H,A
LD A,Spec_Page
OUT (SLOT3),A
LD (Spec_Page.page_0),DE
LD (Spec_Page.page_2),HL
; ¤®áâ ñ¬  ¤à¥á ¢®§¢à â  ¢ ¢ë§ë¢ îéãî äã­ªæ¨î ¨ á®å࠭塞 ¢ Spec_Page
POP DE
LD HL,RST_18_1.exit
AND A
SBC HL,DE
JR NZ,1F ; NZ - ¥á«¨ ¢ë§®¢ ¡ë« ¯® RST #18
POP DE ; ¥á«¨ ¢ë§®¢ ¡ë« ¢ އ“ ¯® RST 8
1: LD (Spec_Page.RET_addr),DE
; ¯à®¢¥à塞 à §¬¥à ¡«®ª  á ª®­ä®© ¨ ¯®«ãç ¥¬ áâà ­¨æë ª®­äë
PUSH BC
LD HL,Spec_Page.bitstream_pages
LD A,B
CALL EMM.GetMemBlkPages
LD A,B
POP BC
LD B,A
JR C,.INIT_ACEX.ERROR
CP 4+1 ;!HARDCODE ª®«¨ç¥á⢮ áâà ­¨æ ¢ ªíè ¤«ï ¡¨áâਬ  ¯«îá ®¤­ 
JR NC,.INIT_ACEX.ERROR
PUSH BC
; § ª¨¤ë¢ ¥¬ ¢ Spec_Page ¯à®£ã ¤«ï § «¨¢ª¨ ª®­äë
LD HL,.INIT_ACEX.PROGRAM
LD DE,Spec_Page.init_acex
LD BC,.INIT_ACEX.PROGRAM.Size
LDIR
;
POP BC
; B = size of ram block in pages
CALL Spec_Page.init_acex
;
; .. ... ... ..
;!TODO ᤥ« âì äã­ªæ¨î ¯® § «¨¢ª¥ ᢮¥© ª®­äë, ¯¥à¥å¢ âã à¥á¥â .
; *. ‚室 ¢ ¯®¤äã­ªæ¨î ⮫쪮 ç¥à¥§ RST 08 ¨«¨ #18
; *. ‘®åà ­¨âì ¢á¥ áâà ­¨æë ¯®«ì§®¢ â¥«ï ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; *. „®áâ âì á® á⥪   ¤à¥á ¢®§¢à â  ¨ á®åà ­¨âì ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; *. ‘®åà ­¨âì ªã¤ -­¨¡ã¤ì §­ ç¥­¨¥ á⥪ 
; *
; .. ... ... ..
LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT
JP_to_BIOS
.INIT_ACEX.ERROR:
POP BC
LD A,(Spec_Page.page_2)
OUT (SLOT2),A
LD A,(Spec_Page.page_3)
OUT (SLOT3),A
SCF
RET
;
.INIT_ACEX.PROGRAM:
DISP Spec_Page.init_acex
; B = size of ram block in pages
;
IN A,(FastRAM.ON)
XOR A
EXX
LD HL,Spec_Page.bitstream_pages
LD BC,SLOT2
EXX
.load_loop:
EXX
OUTI
EXX
PUSH BC
OUT (FastRAM.SLOT0),A
LD HL,0
LD DE,#8000
LD BC,#4000
LDIR
;
INC A
POP BC
DJNZ .load_loop
; ... ....
; acex loading and flags
; ... ....
XOR A
OUT (FastRAM.SLOT0),A
IN A,(FastRAM.OFF)
RET
ENT
.INIT_ACEX.PROGRAM.Size EQU $-.INIT_ACEX.PROGRAM
;
;***************************************
;!TEST

Binary file not shown.