;.PRINTX "Service." SERVICE: LD HL,SR_TAB LD DE,SR_MENU LD BC,SR_MENU.Size 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 " " ; маркер конца .Size 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 ; НА 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_1+D_TBON JR CONFIG_SET1 PENTAGON512: CALL CNF_PN_320 LD DE,CNF_1+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 ;