Sprinter-BIOS/src/bios/exp/FUNC_SERVICE.asm
Anatoliy Belyanskiy a5d129df47 ...
2023-12-18 04:16:37 +10:00

351 lines
7.1 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; DISPLAY "Service"
; !FIXIT âãâ ¬®¦­®, ¯®å®¤ã, ¤®å७  ã¡à âì
; áâà ­¨æë á ª®­ä®© ¤«ï Sp97, ¤«ï ᮢ¬¥á⨬®áâ¨ á ¤à¥¢­¨¬¨ ¯à®£ ¬¨
PG_SP1 equ #EC
PG_SP2 equ #EE
PG_AY equ #EA
;
;!TODO § ¬ãâ¨âì § «¨¢ªã ª®­äë, à¥áâ àâ, ¯¥à¥å¢ â à¥á¥â  ᨫ ¬¨ BIOS
PG_Sp2000 EQU #FE
;
RST_CONF:
;--[] ZX Spectrum
.AY8910:
LD D,#35 ;!HARDCODE ¢ëïá­¨âì §  çâ® à ­ìè¥ íâ  ï祩ª  ¢ ª¬®á ®â¢¥ç « . ¯®å®¦¥ ­  åà ­¥­¨¥ §­ ç¥­¨ï Port_All_Mode ¨«¨ CONFIG_DE+1
CALL CMOS_RD
OR 1
CALL CMOS_WR
LD BC,Port_All_Mode
IN A,(C)
AND #FE ;!HARDCODE
OUT (C),A ; ACC_OFF
;LD A,PG_AY
LD DE,#FFFC
JR .INT_PLD
;--[]
;--[] Sprinter ZX
.SP97_1:
LD D,#35 ;!HARDCODE ¢ëïá­¨âì §  çâ® à ­ìè¥ íâ  ï祩ª  ¢ ª¬®á ®â¢¥ç « . ¯®å®¦¥ ­  åà ­¥­¨¥ §­ ç¥­¨ï Port_All_Mode ¨«¨ CONFIG_DE+1
CALL CMOS_RD
AND #FE
CALL CMOS_WR
LD BC,Port_All_Mode
IN A,(C)
AND #FE ;!HARDCODE
OUT (C),A ; ACC_OFF
;LD A,PG_SP1
LD DE,#FFFE ;!HARDCODE
JR .INT_PLD
;--[]
;--[]
.SP97_2:
LD BC,Port_All_Mode
IN A,(C)
OR 1 ; ACC_ON
OUT (C),A
;LD A,PG_SP2
LD DE,#FFFD ;!HARDCODE
JR .INT_PLD
;--[]
;--[]
.CUSTOM:
CP #80
JR NC,.CHOOSE_CNF
; only for old FLEX10K soft compatible
LD C,SLOT3
IN B,(C)
OUT (C),A ; PAGE á ¯à®è¨¢ª®©
LD DE,(#C090) ; PLD-ID
OUT (C),B ; RET page
;--[] ;JR INT_PLD
.INT_PLD: ; only for old FLEX10K soft compatible
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD (SYS_PAGE.CONFIG_BYTE),DE
OUT (C),B
LD A,E ; config-byte
CP #FF
LD A,#80
JR Z,.YES_CBL
XOR A
.YES_CBL:
LD BC,CBL.SYS_PORT
OUT (C),A
LD A,E ; config-byte
OR #FE ;!HARDCODE
LD BC,Port_All_Mode ; SYSTEM Spectrum/Sprinter
OUT (C),A
LD A,#3C
OUT (FDC_93.DrvCTRL),A
XOR A
RET
.CHOOSE_CNF:
;!TEST
CP PG_Sp2000
;LD DE,SP2000_ConfID
JR Z,.INIT_ACEX
;
; only for old FLEX10K soft compatible
CP PG_SP1
LD DE,#FFFE ;!HARDCODE
JR Z,.INT_PLD
CP PG_SP2
LD DE,#FFFD
JR Z,.INT_PLD
CP PG_AY
LD DE,#FFFC
JR Z,.INT_PLD
SCF
RET
.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
;--------------------------[;!TODO ¯®â¥áâ¨âì]--------------------------;
; B - ¯ à ¬¥âà á¡à®á 
; B = 1 - RESTART.
; B = 2 - Soft reset
; B = 3 - Hard reset
; B = 4 - Reinit spectrum pages
REINIT: DEC B
JR Z,.Restart ;1
DEC B
JR Z,.SoftReset ;2
DEC B
JR Z,.HardReset ;3
DEC B
SCF
RET NZ
.ReinitZXpages: ;4
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
LD HL,SYS_PAGE.RAMD_FAT ; €¤à¥á FAT އ“.
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(DE)
.zxloop:
CP #FF
JR Z,.endzxloop
INC DE
LD L,A
LD A,(HL)
AND A
JR NZ,.errorzxloop
LD A,(DE)
LD (HL),A
JR .zxloop
.errorzxloop:
DEC DE
LD HL,-RESERVED_PAGES-1
ADD HL,DE
JR NC,.errorzxloop_noChanges
DEC DE
LD H,high SYS_PAGE.RAMD_FAT
LD A,(DE)
LD L,A
LD A,#FF
LD (HL),A
.errorzxloop_noChanges:
SCF
.endzxloop:
OUT (C),B
RET
;
;!TEST
.HardReset:
DI
LD A,DCP_PAGE
OUT (SLOT1),A ; set DCP page
LD A,ACEX.RESET
LD (#4400),A ; open for WR
.loop: LD BC,#0100 ; 横« á¡à®á 
OUT (C),C
LD B,0
OUT (C),C
JR .loop ; ¯®«­®áâìî § æ¨ª«¨âì!
;
;!TEST
.Restart:
DI
LD A,0
LD BC,#1FFD
OUT (C),A
LD B,#7F
OUT (C),A
LD A,#40
OUT (SLOT3),A
LD A,5
OUT (SLOT1),A
LD A,2
OUT (SLOT3),A
LD A,0
OUT (SLOT0),A
OUT (RGADR),A
OUT (RGMOD),A
JP 0 ;Restart
;
;
.SoftReset:
DI
LD A,#10
LD BC,#1FFD
OUT (C),A ; 8-ï áâà ­¨æ  !!
LD A,RESET_PAGE
OUT (SLOT3),A
LD A,CNF_PORT.TURBO.OFF
OUT (SYS_PORT.ROM),A
.loop2: LD (#C000),A ; Soft RESET !!!
JR .loop2
;
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
SET_ROM_FLAG_ZX:
LD C,A
IN A,(SLOT3)
PUSH AF
LD A,Spec_Page
OUT (SLOT3),A
XOR A
LD (Spec_Page.flag_Z),A
LD (Spec_Page.flag_X),A
POP AF
OUT (SLOT3),A
LD A,C
RET
;----------------------------------------------------------------------;
;