ZX-SP-ROMs/ZX_EXP/SERVICE.ASM
2023-06-22 04:40:19 +10:00

789 lines
12 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.

;.PRINTX "Service."
SERVICE:
LD HL,SR_TAB
LD DE,SR_MENU
LD BC,SR_LEN
PUSH HL
CALL RUN_MENU ;09f3
POP HL
CALL EXEC_PNT
JR SERVICE
SR_TAB:
DW UTILIT
DW SR_48R
DW SR_48
DW TURBO_OFF_1
DW TURBO_ON_1
DW CLEAR_RAM
DW RET_FROM_M
; DC - every last character of a string will have bit 7 set
SR_MENU:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Options ',#FF ; § £®«®¢®ª ¬¥­î
DC 'RUN disk.trd'
DC '128 TR-DOS'
DC '48 TR-DOS'
DC 'TURBO OFF '
DC 'TURBO ON '
DC 'Clear RAM'
DC 'RETURN'
DC " " ; ¬ àª¥à ª®­æ 
SR_LEN EQU $-SR_MENU
;*****************************
SR_48R:
LD A,10H
JR SR_48A
;*****************************
SR_48:
LD A,30H
SR_48A:
LD BC,7FFDH
OUT (C),A ; ‘⮯®à ­  PORT_128 !!!
LD BC,0 ; <20>€ 0 !!
PUSH BC
LD BC,3D2Fh ; DOS !
PUSH BC
JP SW_ROM
;*******************************
IFDEF ZX_BIOS
TURBO_OFF_1:
LD A,BIOS.FN_TURBO.OFF
LD C,BIOS.FN_TURBO
JP ToBIOS_18
TURBO_ON_1:
LD A,BIOS.FN_TURBO.ON
LD C,BIOS.FN_TURBO
JP ToBIOS_18
ELSE
;
TURBO_OFF_1:
DI
CALL DOS_ON
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(CONFIG_DE)
AND 0FCH
OR 2
LD (CONFIG_DE),A
OUT (CNF_PORT),A
EX AF,AF'
OUT (PAGE3),A
CALL DOS_OFF
EI
RET
TURBO_ON_1:
DI
CALL DOS_ON
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(CONFIG_DE)
AND 0FCH
OR 3
LD (CONFIG_DE),A
OUT (CNF_PORT),A
EX AF,AF'
OUT (PAGE3),A
EI
CALL DOS_OFF
RET
ENDIF
;*******************************
CLEAR_RAM:
DI
LD C,9Fh
RST 18h
IFDEF ZX_BIOS
; ¯à¨ ®ç¨á⪥ ¯ ¬ï⨠¨§ ¬¥­î ᯥªâà㬠 ¯®«®¬ ¥âáï ¢®§¢à â ¢ DSS ¯® CAD, ¯®í⮬㠮⪫îç ¥¬ ¢®§¢à â
LD A,#EE ;!HARDCODE ACEX.RET_PORT
LD BC,0*256 + #F8 ;!HARDCODE BIOS.SET_PORTS
CALL #3D13 ;!HARDCODE ToBIOS_3D13
ENDIF
EI
RET
;SR_CL_MEM:
; DI
; LD A,10H
;SR_CL_R2:
; LD BC,1FFDH
; OUT (C),A
; EX AF,AF'
; XOR A
;SR_CL_R1:
; LD BC,7FFDH
; OUT (C),A
; LD HL,0C000H
; LD DE,0C001H
; LD BC,03FFFH
; LD (HL),L
; LDIR
; INC A
; CP 48H
; JR NZ,SR_CL_R1
; EX AF,AF'
; CP 0
; JP Z,BASIC_128 ; ¢ë室 ­  á¡à®á BASIC 128
; LD A,0
; JR SR_CL_R2
;*****************************
; *** MENU IS-DOS ***
;*****************************
ISDOS:
LD HL,IS_TAB
LD DE,IS_MENU
LD BC,IS_MENU.Size
PUSH HL
CALL RUN_MENU
POP HL
CALL EXEC_PNT
JR ISDOS
IS_TAB:
; DW TR_DOS
; DW SP_DOS
DW SPRINTER_1X
DW AY8910_X
DW PENTAGON
DW SCORPION
DW PENTAGON512
DW SPRINTER_2X
DW RET_FROM_M
; DC - every last character of a string will have bit 7 set
IS_MENU:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Hardware',#FF ; § £®«®¢®ª ¬¥­î
DC 'Sprinter ZX '
DC 'ZX Spectrum'
DC 'Pentagon 128'
DC 'Scorpion 256'
DC 'Pentagon 512'
DC 'Restart '
DC 'RETURN'
DC " " ; ¬ àª¥à ª®­æ 
.Size EQU $-IS_MENU
;******************************
;SP_DOS:
; LD B,#E2
; LD A,#E1
; JR TR_DOS1
;TR_DOS:
; LD B,#EA
; LD A,#E1
;TR_DOS1:
; CALL DOS_ON
; CALL SET_ROM_PAGES
; CALL DOS_OFF
; RET
;******************************
;**************************************************
AY8910_X:
CALL AY8910
JR SPRINTER_2XX
SPRINTER_1X:
CALL SPRINTER_1
; JR SPRINTER_2XX
SPRINTER_2XX:
CALL SPRINTER_
CALL DOS_OFF
CALL CLS
RET
SPRINTER_2X:
CALL SPRINTER_2
CALL DOS_OFF
XOR A
JP RESET_1 ; á¡à®á ¡¥§ ¯¥à¥§ £à㧪¨
AY8910:
LD D,#35
CALL CMOS_RD
OR 1
CALL CMOS_WR
LD BC,204Eh ; port all_mode
IN A,(C)
AND #FE
OUT (C),A ; ACC_OFF
LD A,PG_AY
JR SPRINTER_ALL
SPRINTER_1:
LD D,35H
CALL CMOS_RD
AND 0FEh
CALL CMOS_WR
LD BC,204Eh
IN A,(C)
AND 0FEh
OUT (C),A ; ACC_OFF
LD A,PG_SP1
JR SPRINTER_ALL
;
SPRINTER_2:
LD BC,204Eh
IN A,(C)
OR 01h ; ACC_ON
OUT (C),A
LD A,PG_SP2
SPRINTER_ALL:
; RET
EX AF,AF'
DI
; CALL DOS_ON
LD A,CNF_0
OUT (CNF_PORT),A
XOR A
LD BC,1FFDH
OUT (C),A
LD A,10H
LD B,7FH
OUT (C),A
LD C,PAGE3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD DE,CNF_0+D_TBON
LD HL,L_PENTAGON
LD (CONFIG_ALL),HL
LD (CONFIG_DE),DE
LD A,B
LD (COPY_PAGE3),A
EX AF,AF'
; LD HL,CONFIG_BYTE
;
; CP (HL)
; JR NZ,SET_CONFIG1
; INC HL
; LD A,(HL)
; AND A
; JP Z,NO_SET_CONFIG
;
; DEC HL
; LD A,(HL)
;SET_CONFIG1:
;
; LD (HL),A
; INC HL
; LD (HL),0
LD (SYS_SP),SP
LD SP,SYS_SP-2
PUSH IY
PUSH IX
PUSH HL
PUSH DE
PUSH BC
PUSH AF
EXX
EX AF,AF'
PUSH HL
PUSH DE
PUSH BC
PUSH AF
EXX
; EX AF,AF'
; EX AF,AF'
LD A,R
PUSH AF
LD A,I
PUSH AF
LD (SP_SAVE),SP
IN A,(PAGE2)
LD (COPY_PAGE2),A
IN A,(PAGE1)
LD (COPY_PAGE1),A
IN A,(PAGE0)
LD (COPY_PAGE0),A
; LD A,1
; OUT (PAGE2),A
; LD HL,0BFE0H
; LD DE,0C0A0H
; LD BC,20H
; LDIR
; LD HL,PROG_RETS
; LD DE,0BFE0H
; LD BC,20H
; LDIR
; LD A,40H
; OUT (PAGE2),A
; LD HL,0BFE0H
; LD DE,0C080H
; LD BC,20H
; LDIR
; LD HL,PROG_RETS
; LD DE,0BFE0H
; LD BC,20H
; LDIR
; JP RESTART_RETS_X
LD HL,(CONFIG_BYTE)
LD IX,(CONFIG_BYTE)
LD A,0FFH
OUT (PAGE2),A
LD A,10H
LD BC,1FFDH
OUT (C),A ; 8-ï áâà ­¨æ  !!
IN A,(PAGE3)
EX AF,AF'
CP PG_SP1
LD DE,0FFFEh
JR Z,INT_PLD
CP PG_SP2
LD DE,0FFFDh
JR Z,INT_PLD
CP PG_AY
LD DE,0FFFCh
JR Z,INT_PLD
OUT (PAGE3),A ; ROM á ¯à®è¨¢ª®©
LD DE,(0C090H)
INT_PLD:
EX AF,AF'
OUT (PAGE3),A
LD XH,D
LD XL,E
AND A
SBC HL,DE
JP Z,RESTART_RETS_X
JP RESTART_RETS_X
;================================
; CALL DOS_ON
; XOR A
; OUT (0FH),A
; CALL DOS_OFF
; EX AF,AF'
; OUT (PAGE3),A
; LD HL,0C000H
; LD DE,08000H
; LD BC,4000H
; LDIR ; not Configs for Sp-2000!!!
; LD A,0FFH ; CASH !!
; OUT (PAGE3),A
; LD HL,08000H
; LD DE,0C000H
; LD BC,4000H
; LDIR ; not Config for Sp-2000!!!
RESET_ALL:
LD A,10H
LD BC,1FFDH
OUT (C),A ; 8-ï áâà ­¨æ  !!
LD A,0A0H
OUT (PAGE3),A
LD A,D_TBOFF
OUT (CNF_PORT),A
RESET_L:
LD (0C000H),A ; RESET !!!
JR RESET_L
DI
HALT
;=================================
PROG_RETS:
LD HL,RESTARTS ; 3
LD B,16 ; 2
REST_LOOPS:
LD (HL),0 ; 2
INC HL ; 1
DJNZ REST_LOOPS ; 2
NOP ; 1
NOP ; 1
LD A,1 ; 2
OUT (PAGE3),A ; 2
JP RESTART_RETS
RESTART_RETS_X:
RESTART_RETS:
XOR A
OUT (0EFH),A ; § ­ã«¥­¨¥ WAIT-®¢
LD BC,1FFDH
OUT (C),A
LD A,10H
LD B,7FH
OUT (C),A
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD (CONFIG_BYTE),IX
EX AF,AF'
OUT (PAGE3),A
EX AF,AF'
LD A,XL
CP #FF
LD A,128
JR Z,YES_CBL
XOR A
YES_CBL:
LD BC,78
OUT (C),A
LD A,XL
OR #FE
LD BC,204Eh ;ALL_MODE
OUT (C),A
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
; LD A,1
; OUT (PAGE2),A
; LD DE,0BFE0H
; LD HL,0C0A0H
; LD BC,20H
; LDIR
; LD A,40H
; OUT (PAGE2),A
; LD DE,0BFE0H
; LD HL,0C080H
; LD BC,20H
; LDIR
LD A,(COPY_PAGE0)
OUT (PAGE0),A
LD A,(COPY_PAGE1)
OUT (PAGE1),A
LD A,(COPY_PAGE2)
OUT (PAGE2),A
LD SP,(SP_SAVE)
POP AF
LD I,A
POP AF
LD R,A
EXX
EX AF,AF'
POP AF
POP BC
POP DE
POP HL
EXX
EX AF,AF'
POP AF
POP BC
POP DE
POP HL
POP IX
POP IY
LD SP,(SYS_SP)
IM 1
LD A,(BORDER)
RRCA
RRCA
RRCA
AND 7
OUT (0FEH),A
CALL DOS_ON
LD A,3CH
OUT (0FFH),A
CALL DOS_OFF
NO_SET_CONFIG:
LD A,(COPY_PAGE3)
OUT (PAGE3),A
AND A
; CALL DOS_ON
EI
RET
;*****************************
;PROG_SINC:
; DI
; LD C,PAGE1
; IN A,(C)
; LD B,0FFH
; OUT (C),B
; LD (7FFEH),BC
; LD (7FFCH),SP
; LD SP,7FF0H
; CALL PROG_SCR
; LD SP,(7FFCH)
; LD BC,(7FFEH)
; OUT (C),B
; EI
; RET
CNF_SC_312:
DI
CALL DOS_ON
LD A,CNF_0
OUT (CNF_PORT),A
LD A,61H ; set 312 lines
OUT (0BDh),A
CALL DOS_OFF
LD HL,L_SCORPION
RET
CNF_PN_320:
DI
CALL DOS_ON
LD A,CNF_0
OUT (CNF_PORT),A
LD A,41H ; set 320 lines
OUT (0BDh),A
CALL DOS_OFF
LD HL,L_PENTAGON
RET
SPRINTER_:
CALL CNF_PN_320
LD DE,CNF_0+D_TBON
JR CONFIG_SET1
SCORPION:
CALL CNF_SC_312
LD DE,CNF_1+D_TBON
JR CONFIG_SET1
PENTAGON:
CALL CNF_PN_320
LD DE,CNF_2+D_TBON
JR CONFIG_SET1
PENTAGON512:
CALL CNF_PN_320
LD DE,CNF_2+D_TBON+CNF_512
; JR CONFIG_SET1
CONFIG_SET1:
CALL DOS_ON
CALL CONFIG_SET
CALL DOS_OFF
EI
RET
CONFIG_SET:
EI
HALT
DI
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD (CONFIG_ALL),HL
LD (CONFIG_DE),DE
EX AF,AF'
OUT (PAGE3),A
PUSH DE
CALL SINC_DEF
LD HL,4104H
LD E,0
LD B,4
CALL LP_OPEN_S
LD HL,5104H
LD E,0
LD B,4
CALL LP_OPEN_S
POP DE
LD A,E
OUT (CNF_PORT),A
RET
; LD A,CNF_0
; OUT (CNF_PORT),A
; CALL DOS_OFF
; JP 0
;*****************************
; *** MENU UTILITES ***
;*****************************
UTILIT:
LD HL,C_DISK_C
CALL CALL_DOS1
CALL DOS_ON
LD A,0 ; DETECT_HDD
CALL EXP_HDD
CALL DOS_OFF
JR C,DISK_UTILIT
LD HL,C_DISK_C3
CALL CALL_DOS1
UTIL_DISK:
LD A,0
CALL EMM_FN3
LD HL,C_DEMO6
CALL CALL_DOS1
LD A,0
CALL GET_RAMD_ST
JR C,UTIL_DISK_L1
JR Z,UTIL_DISK_L1
LD HL,C_DISK_C1
CALL CALL_DOS1
LD HL,C_DISK_C2
CALL CALL_DOS1
RET
UTIL_DISK_L1:
LD A,(OPER_DISK)
INC A
CP 2
JR Z,DISK_UTIL_RET
LD HL,C_DISK_C5
CALL CALL_DOS1
JR UTIL_DISK
DISK_UTIL_RET:
LD HL,C_DISK_C6
CALL CALL_DOS1
RET
DISK_UTILIT:
LD HL,C_DISK_C4
CALL CALL_DOS1
JR UTIL_DISK
C_DEMO6: DB C_DEMO6_L,ZX_Token.rem,':/disk.trd',13,80
C_DEMO6_L EQU $-C_DEMO6-1
;***************************************
;VERSION: DEFB 22,21,0
; DEFB 16,2,"Expansion 3.02  1997 ELSY Co.",16,1,0FFh
;**********************************************
DOS_RUN:
LD HL,C_DISK_C1
CALL CALL_DOS1
LD HL,C_DISK_C2
CALL CALL_DOS1
RET
START_TRD:
LD HL,C_DISK_C
CALL CALL_DOS1
LD HL,C_DISK_C0
CALL CALL_DOS1
LD HL,C_DISK_C3
CALL CALL_DOS1
RET
C_DISK_C: DB C_DISK_CL,ZX_Token.rem,':',13,80
C_DISK_CL EQU $-C_DISK_C-1
C_DISK_C0: DB C_DISK_C0L,ZX_Token.rem,':/CLEAR E',13,80
C_DISK_C0L EQU $-C_DISK_C0-1
C_DISK_C1: DB C_DISK_C1L,ZX_Token.rem,':/RMD E',13,80
C_DISK_C1L EQU $-C_DISK_C1-1
C_DISK_C2: DB C_DISK_C2L,ZX_Token.rem,':RUN',13,80
C_DISK_C2L EQU $-C_DISK_C2-1
C_DISK_C3: DB C_DISK_C3L,ZX_Token.rem,':/HDD',13,80
C_DISK_C3L EQU $-C_DISK_C3-1
C_DISK_C4: DB C_DISK_C4L,ZX_Token.rem,':/FDD',13,80
C_DISK_C4L EQU $-C_DISK_C4-1
C_DISK_C5: DB C_DISK_C5L,ZX_Token.rem,':/B:',13,80
C_DISK_C5L EQU $-C_DISK_C5-1
C_DISK_C6: DB C_DISK_C6L,ZX_Token.rem,':/A:',13,80
C_DISK_C6L EQU $-C_DISK_C6-1
;