Sprinter-BIOS/src/bios/exp/FUNC_SERVICE.asm
Anatoliy Belyanskiy 8dd4f966c2 ...
2023-07-01 04:43:02 +10:00

238 lines
4.8 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.

; 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,128
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:
; .. ... ... ..
;!TODO ᤥ« âì äã­ªæ¨î ¯® § «¨¢ª¥ ᢮¥© ª®­äë, ¯¥à¥å¢ âã à¥á¥â .
; .. ... ... ..
LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT
JP_to_BIOS
;***************************************
;!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 BC,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
;
;----------------------------------------------------------------------;
;