;.PRINTX "Service." SERVICE: LD DE,SR_MENU LD BC,SR_MENU.Size CALL RUN_MENU ;09f3 LD HL,SR_TAB CALL EXEC_PNT JR SERVICE SR_TAB: DW UTILIT DW GOTO_TRDOS.m128 DW GOTO_TRDOS.m48 DW TURBO_OFF DW TURBO_ON 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: GOTO_TRDOS: .m128: LD A,#10 JR .RUN ;SR_48: .m48: LD A,#30 ; Стопор на PORT_128 !!! ;SR_48A: .RUN: LD BC,#7FFD OUT (C),A LD BC,0 ; НА 0 !! PUSH BC LD BC,#3D2F ; В DOS ! PUSH BC JP SW_ROM ;******************************* TURBO_OFF: LD A,BIOS.FN_TURBO.OFF LD C,BIOS.FN_TURBO JP_to_BIOS TURBO_ON: LD A,BIOS.FN_TURBO.ON LD C,BIOS.FN_TURBO JP_to_BIOS ;******************************* CLEAR_RAM: DI LD C,BIOS.FullInit RST_to_BIOS ; при очистке памяти из меню спектрума возврат в DSS по CAD ; будет опасным (RAM Blocks освободились), ; поэтому отключаем перехват ресета. ;!TODO придумать как отключать перехват только на возврат в DSS LD A,ACEX.RET_PORT LD BC,BIOS.SET_PORTS CALL ToBIOS_3D13 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_reset ;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,0E2H ; LD A,0E1H ; JR TR_DOS1 ;TR_DOS: ; LD B,0EAH ; LD A,0E1H ;TR_DOS1: ; CALL DOS_ON ; CALL SET_ROM_PAGES ; CALL DOS_OFF ; RET ;****************************** ;************************************************** ;Sprinter ZX SPRINTER_1X: CALL _SET_CNF LD C,BIOS.RST_CONF.SP97_1 RST_to_BIOS CALL CNF_PN_320 LD L,2 ;FN_SYNC.INT_PENT JR 1F ;!FIXIT метку придумать ; ;ZX Spectrum AY8910_X: CALL _SET_CNF LD C,BIOS.RST_CONF.AY8910 RST_to_BIOS LD A,#FA ; no ACC, Original waits LD (Port_All_Mode),A CALL CNF_SC_312 LD L,3 ;FN_SYNC.INT_ORIG 1: LD DE,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON CALL CONFIG_SET CALL CLS ;!FIXIT нужно ли? RET ; SCORPION: CALL _SET_CNF CALL CNF_SC_312 LD L,1 ;FN_SYNC.INT_SCORP LD DE,CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON JR CONFIG_SET PENTAGON: CALL _SET_CNF CALL CNF_PN_320 LD L,2 ;FN_SYNC.INT_PENT LD DE,CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON JR CONFIG_SET PENTAGON512: CALL _SET_CNF CALL CNF_PN_320 LD L,2 ;FN_SYNC.INT_PENT LD DE,CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512 ; JR CONFIG_SET CONFIG_SET: PUSH DE EI HALT DI IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A LD (SYS_PAGE.CONFIG_DE),DE ;!FIXIT есть ли смысл делать до FN_SYNC? LD A,(ZX_VARS.BORDER) RRCA RRCA RRCA AND 7 OUT (BorderColor),A ; EX AF,AF' OUT (SLOT3),A LD A,L LD C,BIOS.FN_SYNC RST_to_BIOS LD HL,#4104 ;!HARDCODE LD E,0 LD BC,256*4 + BIOS.LP_OPEN_S ;!HARDCODE RST_to_BIOS LD HL,#5104 ;!HARDCODE LD E,0 LD BC,256*4 + BIOS.LP_OPEN_S RST_to_BIOS POP DE LD A,E OUT (SYS_PORT.ROM),A IM 1 EI RET SPRINTER_reset: CALL _SET_CNF LD BC,256*BIOS.REINIT.SOFT_RESET + BIOS.REINIT JP_to_BIOS _SET_CNF: DI LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON OUT (SYS_PORT.ROM),A RET CNF_SC_312: LD A,Port_VSYNC.SET_312L OUT (Port_VSYNC),A RET CNF_PN_320: LD A,Port_VSYNC.SET_320L OUT (Port_VSYNC),A RET ; LD A,CNF_0 ; OUT (SYS_PORT.ROM),A ; CALL DOS_OFF ; JP 0 ;***************************** ; *** MENU UTILITES *** ;***************************** ;!FIXIT это запуск c:\disk.trd - не думаю, что это нужно, можно заменить UTILIT: LD HL,C_DISK_C CALL CALL_DOS1 ;!TEST ;CALL DOS_ON ;LD A,0 ; DETECT_HDD ;CALL EXP_HDD LD C,BIOS.HDD_INIT RST_to_BIOS ;CALL DOS_OFF ; JR C,DISK_UTILIT LD HL,C_DISK_C3 CALL CALL_DOS1 UTIL_DISK: XOR A ;!TEST LD C,BIOS.FreeMemRMD RST_to_BIOS ;CALL EMM_FN3 ;!!!!! через RST_to_BIOS EMM.FreeMemRMD ; LD HL,C_DEMO6 CALL CALL_DOS1 XOR A ;!TEST LD C,BIOS.GET_RAMD_ST RST_to_BIOS ;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,(ZX_VARS.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 .Size, ZX_Token.rem, ':/disk.trd', 13,80 .Size 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 .Size, ZX_Token.rem, ':', 13,80 .Size EQU $-C_DISK_C-1 C_DISK_C0: DB .Size, ZX_Token.rem, ':/CLEAR E', 13,80 .Size EQU $-C_DISK_C0-1 C_DISK_C1: DB .Size, ZX_Token.rem, ':/RMD E', 13,80 .Size EQU $-C_DISK_C1-1 C_DISK_C2: DB .Size, ZX_Token.rem, ':RUN', 13,80 .Size EQU $-C_DISK_C2-1 C_DISK_C3: DB .Size, ZX_Token.rem, ':/HDD', 13,80 .Size EQU $-C_DISK_C3-1 C_DISK_C4: DB .Size, ZX_Token.rem, ':/FDD', 13,80 .Size EQU $-C_DISK_C4-1 C_DISK_C5: DB .Size, ZX_Token.rem, ':/B:', 13,80 .Size EQU $-C_DISK_C5-1 C_DISK_C6: DB .Size, ZX_Token.rem, ':/A:', 13,80 .Size EQU $-C_DISK_C6-1 ;