diff --git a/Shared_Includes b/Shared_Includes index 7e812bc..72fb1b5 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 7e812bc0267db168c5a5b17780e567a7a01cd927 +Subproject commit 72fb1b5f112a67117ecf6d506e452501229154e0 diff --git a/spectrum.asm b/spectrum.asm index e077547..81e405b 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -19,13 +19,13 @@ [x] - প ࠧ vROM [x] - 䨣 ய 㧪 HDD ࠭ vROM, ய᪠ ᫨ । ⮨ ";" [x] - ஢ ZX, ᫨ 㧨 3 ᭮ vROM - [x] - ᮢ⨬ ATARIN, ᯮ饥 AY - [x] - । 室 ० ᯥ㬠 ⥪騬 ⠭ ࠧ HDD ண 㦠 ࠧ TRD + [x] - ᮢ⨬ ATARIN, ᯮ饩 AY + [x] - । 室 ० ᯥ㬠 ⥪騬 ⠭ ண 㦠 ࠧ TRD ; Images [+] - Load SCL image - [ ] - Load SNA file [ ] - Load TAP image + [ ] - Load SNA file ; Features [+] - ᫨ ࠭ ret-zx, ⨨ ஡ ࠧ ᫥ CAD DSS @@ -139,7 +139,8 @@ PALETTE_LINE EQU 9 ELSE ORG org_addr-CLP_Buffer ENDIF - +;; +;; BEGIN: LD (LINE_X),IX LD HL,START_MSG @@ -173,11 +174,18 @@ BEGIN: LD (LINE_X),IX ;LD C,Dss.CurDir ;RST ToDSS ; - - JP COMAND_LINE +; JR PARSE_CMD_LINE + CALL PARSE_CMD_LINE + CALL READ_CNF_FILE + CALL SETUP_ZX + ; + JP NC,PREPARE_TO_ZXMODE + JP EXIT_ALL +;; +;; Error_NoMemForSPpages: LD HL,NO_MEM_MSG JR ERROR_FILE.prn_msg @@ -206,447 +214,10 @@ EXIT_ALL: LD C,Dss.PChars RST ToDSS JR .loop ; +;; -COMAND_LINE: LD HL,(LINE_X) - LD A,(HL) - AND A - JR Z,NO_FIL - DEC A - JR Z,NO_FIL - - INC HL - INC HL - - CALL FIND_FILES - - CALL MAKE_FULL_NAME - LD A,SHARED_PAGE - CALL READ_FILE_1 - JP NC,CONTINUE - -NO_FIL: CALL MAKE_FULL_NAME.def_cnf - LD A,SHARED_PAGE - CALL READ_FILE_1 - JR C,ERROR_FILE - JP CONTINUE - -FIND_FILES: PUSH HL - - LD (X_FILE),HL - LD DE,0 - LD (IMAGE_FLAG),DE - LD (IMAGE_NAME),DE - LD (CNF_NAME),DE - LD B,A - JR NO_NEXT - -FIND_T_LOOP: LD A,(HL) - INC HL - CP "." - CALL Z,POINT_F - CP ' ' - CALL Z,BLANK_X - CP 9 - CALL Z,BLANK_X - CP 10 - CALL Z,BLANK_X1 - CP 13 - CALL Z,BLANK_X1 - JR Z,END_NO_IMAGE -NO_NEXT: DJNZ FIND_T_LOOP - -END_NO_IMAGE: POP HL - LD A,(CNF_NAME+1) - AND A - RET NZ - LD A,(IMAGE_NAME+1) - AND A - LD DE,(X_FILE) - JR Z,CNF_ALL - LD DE,CNF_FILE -CNF_ALL: LD (CNF_NAME),DE - RET - -BLANK_X: LD (X_FILE),HL ; ஡, 䠩 - ᭮ -BLANK_X1: DEC HL - LD (HL),0 - INC HL - RET - -;------------------------------------[v] -POINT_F: LD A,(HL) - CP 't' - JR Z,.TRD - CP 'T' - JR Z,.TRD - - CP 's' - JR Z,.SCL - CP 'S' - JR Z,.SCL - - CP 'z' - JR Z,.CNF - CP 'Z' - JR Z,.CNF -.exit: DEC HL - LD A,(HL) - INC HL - RET - -.SCL: LD DE,IMAGE_FLAG - LD A,1 - LD (DE),A -.TRD: LD DE,(X_FILE) - LD (IMAGE_NAME),DE - JR .exit - -.CNF: LD DE,(X_FILE) - LD (CNF_NAME),DE - JR .exit -;------------------------------------[^] - -LINE_ZX: DZ 'ZX Spectrum PAGES' -LEN_LINE_ZX EQU $-LINE_ZX -;********************************************* - -MSG_EXIT1: DB 13,10, "EXIT without run",13,10,0 -;MSG_EXIT2: DB 13,10, "室 ᪠" -CR_LINE: DB 13,10,0 -START_MSG: DB 13,10, 'SPECTRUM launcher v',SP_VERSION,'.' - DB 13,10, '(c) Sprinter Team.' - DB 13,10, 'Written by Ivan Mak.' - DB 13,10, 'Modified by Anatoliy Belyanskiy.' - DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 -ERROR_FILE_MSG_X: - DB 13,10, "Error in file: ",0 -;ERROR_FILE2_MSG_X: -; DB 13,10, "訡 䠩: ",0 -ERROR_FILE_MSG: DB 13,10, "Unable to work.",0 -;ERROR_FILE2_MSG: -; DB 13,10, " .",0 -ERROR_CNF: DB 13,10, "Unexpected CNF file end.",0 -;ERROR_CNF2: DB 13,10, " CNF 䠩.",0 -NO_MEM_MSG: DB 13,10, "The spesial pages are already used." - DB 13,10, "Clear memory and restart spectrum.exe again.",0 -;NO_MEM_MSG2: DB 13,10, "樠 ࠭ 㦥 ." -; DB 13,10, " १ spectrum.exe ᭮.",0 -MSG_NORMAL: DB 13,10, "All files has been read successfully.",13,10 - DB "MODE: ",0 -;MSG_NORMAL2: DB 13,10, " 䠩 ⠭ ଠ쭮.",13,10 -; DB "䨣: ",0 -MSG_NO_MEM: DB 13,10, "No memory space for image or",0 -;MSG_NO_MEM2: DB 13,10, " 墠⠥ ࠧ ",0 -MSG_LOAD_IMAGE: DB 13,10, "Image loading: ",0 -;MSG_LOAD_IMAGE2: -; DB 13,10, "㧪 ࠧ: ",0 -MSG_ZX_EXIT: DB 13,10, "EXIT from Spectrum mode",13,10,0 -;MSG_ZX_EXIT2: DB 13,10, "EXIT from ZX mode",0 -MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' - DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 -PROGRES_IND: DB '',0 ; 176 -PROGRES_100: DB ' 100%',13,10,0 - -;MEM_BLK: BYTE 0 -LINE_X: WORD 0 -X_FILE: WORD 0 -CNF_NAME: WORD 0 -IMAGE_FLAG: BYTE 0 ; 0 - trd, scl - 1, sna - 2, tap - 3 -IMAGE_NAME: WORD 0 -IMAGE_HANDLER: BYTE 0 -SAVE_SLOT3: BYTE 0 -LEN_CNF: WORD 0 -A_LINES: BLOCK CFG_FILE_LINES*2,0 -;********************************************* - -CONTINUE: LD (LEN_CNF),DE ; CNF 䠩 ⠭, DE - CNF - -READ_CNF_FILE: LD HL,#C000 - LD DE,A_LINES - LD C,CFG_FILE_LINES -.LOOP_A: LD B,MAX_LINE_LENGTH ; ப - EX DE,HL - LD (HL),E - INC HL - LD (HL),D - INC HL - EX DE,HL -.LOOP_L: LD A,(HL) - CP 13 - JR Z,.N_LINE - CP 10 - JR Z,.N_LINE - AND A - JP Z,END_CNF_ERROR - INC HL - DJNZ .LOOP_L -.N_LINE: LD (HL),0 -.N_LINE2: INC HL - LD A,(HL) - CP 13 - JR Z,.N_LINE2 - CP 10 - JR Z,.N_LINE2 - DEC C - JR NZ,.LOOP_A -; 뤥 8 ப CNF -;************************************* -;!TODO ᫨ ய᪠ 㧪 ROM 48, 128 trdos, ⠢ vROM ⠭⭮ ࢮ -;!TEST - MACRO vROM_LOAD romLine;,pageNumber -.romLine = (romLine-1)*2 - EX DE,HL - LD HL,(A_LINES+.romLine) - LD A,(HL) - CP ';' - EX DE,HL - - JR NZ,.go_load - - LD (HL),0 - EX DE,HL - LD A,(NO_ZX_FLAG) - OR A - JR Z,.skip_load - JP ERROR_ZX_FLAG -.go_load: - LD A,(HL) ;BUFFER_RAM_PAGES.ROM - PUSH HL - EX DE,HL - CALL READ_FILE_1 - POP DE - ; - LD A,SHARED_PAGE - OUT (SLOT3),A - JP C,ERROR_FILE -.skip_load: - INC DE - EX DE,HL - ENDM -; -LOAD_ZXROMS: - ;!FIXIT ६ ⪠ - CALL CHECK_ZX_FLAG - ; - - ;LD BC,BUFFER_RAM_PAGES.ROM - LD HL,BUFFER_RAM_PAGES.ROM - - vROM_LOAD BASIC128_LINE;, #42 ; 2- ப - 䠩 BASIC128 - vROM_LOAD BASIC_48_LINE;, #43 ; 3- ப - 䠩 BASIC 48 - vROM_LOAD TRDOS_LINE ;, #44 ; 4- ப - 䠩 TR-DOS - vROM_LOAD EXP_LINE ;, #45 ; 5- ப - 䠩 EXPANSION - vROM_LOAD BIOS_LINE ;, #46 ; 6- ப - 䠩 BIOS - vROM_LOAD BIOS2_LINE ;, #47 ; 7- ப - 䠩 BIOS2 - ;vROM_LOAD _LINE ;, #42 ; 8- ப - 䠩 - ;vROM_LOAD _LINE ;, #42 ; 9- ப - 䠩 - ;vROM_LOAD _LINE ;, #42 ; 10- ப - 䠩 - ;vROM_LOAD _LINE ;, #42 ; 11- ப - 䠩 - - ;!TEST palette load -LOADING_PALETTE: - EX DE,HL - LD HL,( A_LINES + ((PALETTE_LINE-1)*2) ) - LD A,(HL) - CP ';' - JR Z,.skip - - LD DE,ONE_FILE - LD BC,FULL_FILE_NAME_LENGTH - LDIR - LD HL,ONE_FILE - - LD A,Dss.Open.R - LD C,Dss.Open - RST ToDSS - JP C,ERROR_FILE ; 訡, ᫨ 䠩 - - LD (FILE_HANDLE),A - - LD HL,PlaceForPalette - LD DE,1024*4 ;!HARDCODE - LD C,Dss.Read - RST ToDSS - JP C,ERROR_FILE ; 訡 ⥭ - ;!TEST DSS ⮬. ᫨ 䠩 4096 4096, A 㤥 #FF - ;OR A - ;JP NZ,ERROR_FILE - ; - LD A,(FILE_HANDLE) - LD C,Dss.Close - RST ToDSS -.skip: - ; -;!TODO 䠩 , ᫨ 㦥 - -; 䠩 ⠭ -;************************************* - - LD HL,MSG_NORMAL - LD C,Dss.PChars - RST ToDSS - - LD HL,(A_LINES + (NAME_CFG_LINE-1)*2 ) - LD C,Dss.PChars - RST ToDSS - - LD HL,CR_LINE - LD C,Dss.PChars - RST ToDSS - - ;LD A,(SAVE_SLOT3) - ;OUT (SLOT3),A - -;************************************* - - LD A,SHARED_PAGE - OUT (SLOT3),A - LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; ப ࠬ஢ -LOOP_PAR1: LD A,(HL) - CP '/' - JR Z,PARAM_TEST - CP 0 - JR Z,PARAM_END - CP 13 - JR Z,PARAM_END - CP 10 - JR Z,PARAM_END - INC HL - JR LOOP_PAR1 - -PARAM_TEST: INC HL - PUSH HL - - LD IX,PARAMS -NEXT_PAR: LD E,(IX) - LD D,(IX+1) - -LOOP_PAR2: LD A,(DE) - CP (HL) - JR NZ,PARAM_E1 - INC HL - INC DE - JR LOOP_PAR2 - -PARAM_E1: CP 255 - JR NZ,NO_PAR - LD A,(HL) - CP ' ' - JR Z,PARAM_E2 - CP 0 - JR Z,PARAM_E2 - CP 13 - JR Z,PARAM_E2 -NO_PAR: POP HL - PUSH HL - INC IX - INC IX - INC IX - INC IX - LD A,(IX+1) - AND A - JR NZ,NEXT_PAR - POP HL - JR LOOP_PAR1 - -PARAM_E2: EX (SP),HL ; HL - ࠭! - - LD A,(IX+3) - LD (IX+2),A ; parameter alternate! - - LD L,(IX) - LD H,(IX+1) - - LD C,Dss.PChars - RST ToDSS - - POP HL - JR LOOP_PAR1 - -;************************************ - IF NEW_MEMORY_LOGIC -BUFFER_RAM_PAGES: -.ROM: BLOCK 10 ; ⢮ ⮢ -.RAM: BLOCK 16 ; 256 -.Size EQU $-BUFFER_RAM_PAGES -.end_marker: BYTE #FF - ELSE -BUFFER_RAM_PAGES: -.ROM: DB #42, #43, #44, #45, #46, #47 -;.RAM: BLOCK 16 ; 256 -.Size EQU $-BUFFER_RAM_PAGES -.end_marker: BYTE #FF - ENDIF - - - MACRO vROM_set dcp_port - LD B,(HL) ; page - INC HL - XOR A - OR B - JR Z,.next - LD A,dcp_port ; ROM-ID - PUSH HL - CALL SET_ROM - POP HL -.next: - ENDM - -PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM - - vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 - vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 - vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS - vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION - vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 - vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 - ;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 - ;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 - ;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 - ;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 - - LD HL,(IMAGE_NAME) - LD A,H - OR L - JP Z,SKIP_IMAGE - - LD C,SLOT3 - IN B,(C) - PUSH BC - - CALL READ_IMAGE - POP BC - OUT (C),B - JP C,ERROR_FILE - ; -SKIP_IMAGE: LD A,(No_run_+2) - AND A - JP NZ,PREPARE_TO_ZXMODE - ; - LD HL,MSG_EXIT1 - LD BC,SLOT3 - IN B,(C) - LD A,Spec_Page - OUT (C),A - ; !FIXIT 㤥 楤 । - LD A,"Z" - LD (Spec_Page.flag_Z),A - LD A,"X" - LD (Spec_Page.flag_X),A - ; - OUT (C),B - ; - JP EXIT_ALL - - - ;LD HL,MSG_NORMAL - ;JP EXIT_ALL - -;******************************************** - ;JP 0 -;******************************************** - +;; ; out B - old ROM-page SET_ROM: DI LD C,BIOS.SET_PORTS @@ -687,9 +258,10 @@ SET_ROM: DI ; POP AF ; OUT (SLOT3),A ; RET -;******************************************** +;; -;******************************************** + +;; ; ⥭ ࠧ TRD/SCL ࠬࠩ READ_IMAGE: LD DE,ONE_FILE LD BC,FULL_FILE_NAME_LENGTH @@ -805,7 +377,10 @@ READ_IMAGE: LD DE,ONE_FILE CALL Get_RAM_Disk_E RET C JP Load_IMAGE_File +;; + +;; ; hl:de - ࠧ 䠩 Get_RAM_Disk_E: LD A,D ADD A,A @@ -826,8 +401,7 @@ Get_RAM_Disk_E: LD A,D AND A JR Z,ERROR_NO_MEM PUSH AF -;*************************************** -; [x] 04/11/2023 ⤥ ࠬ᪨ ० ᯥ㬠 DSS + ; [x] 04/11/2023 ⤥ ࠬ᪨ ० ᯥ㬠 DSS .free_disk: DI ;!TEST ;XOR A ; RAM-Drive E: @@ -845,9 +419,10 @@ Get_RAM_Disk_E: LD A,D JR C,ERROR_NO_MEM LD (Load_IMAGE_File.MEM_BLK),A RET -;--------------------------------------- +;; -;******************************************** + +;; Load_IMAGE_File: LD A,(IMAGE_HANDLER) LD HL,0 @@ -900,7 +475,10 @@ Load_IMAGE_File: RST ToBIOS AND A RET +;; + +;; ERROR_IN_READ: POP AF JR ERROR_IMAGE_X @@ -912,42 +490,43 @@ ERROR_IMAGE_X: LD A,(IMAGE_HANDLER) RST ToDSS SCF RET +SAV_PG3X: DB 0 ; !FIXIT ७ +;; -SAV_PG3X: DB 0 -;******************************************** + +;; READ_FILE_1: LD DE,ONE_FILE LD BC,FULL_FILE_NAME_LENGTH LDIR LD HL,ONE_FILE OUT (SLOT3),A - -READ_FILE: LD A,Dss.Open.R + ; READ_FILE: + LD A,Dss.Open.R LD C,Dss.Open RST ToDSS RET C ; 訡, ᫨ 䠩 - + ; LD (FILE_HANDLE),A LD A,(FILE_HANDLE) - + ; LD HL,#C000 LD DE,#4000 LD C,Dss.Read RST ToDSS RET C ; 訡 ⥭ - + ; PUSH DE - LD A,(FILE_HANDLE) LD C,Dss.Close RST ToDSS - POP DE ; ⠭ RET ; 訡 ⨨ Ok +FILE_HANDLE: DB 0 ; !FIXIT ७ -FILE_HANDLE: DB 0 +;; -;******************************************** +;; RESTORE_PORT_HOLD: ;!FIXIT ᤥ १ API BIOS LD D,CMOS_CELL.ScreenPosition @@ -968,7 +547,10 @@ FIRST_PREPARE: LD A,CNF_PORT.CNF_0 AND #1F CP #1E RET -;******************************************** +;; + + +;; EXIT_TO_DSS: DI LD SP,stack_point @@ -1041,7 +623,10 @@ BACKTXT: ; LD HL,MSG_ZX_EXIT JP EXIT_ALL -;******************************************** +;; + + +;; PREPARE_TO_ZXMODE: LD C,Dss.GetVMod RST ToDSS @@ -1101,7 +686,7 @@ SETUP_RAM_DRIVES: LD C,BIOS.BLK_TO_RAMD RST ToBIOS .skip: ; -;******************************************** + ; ; ;!FIXIT । 㭪 SET_RELOAD_PROG: DI @@ -1127,9 +712,8 @@ NO_RET_FN: LD (#FFF4),DE ; IN A,(SLOT2) ; ࠭ ࠭ LD (#FFF2),A ; ணࠬ LD A,(SAVE_SLOT3) - LD (#FFF3),A ; -;******************************************** - + LD (#FFF3),A +; ; RESET_TO_ZX: DI LD SP,stack_point ; #BFF0 @@ -1194,13 +778,10 @@ RESET_TO_ZX: DI LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 LD C,BIOS.FN_TURBO RST ToBIOS_18 - -;---------------[test!!!!!]------------- ;[ ] 1/02/2024 ० ᯥ㬠 ࠡ⠥ 묨 ᭮묨 ࠧ CALL SET_CURRENT_HDD -;--------------------------------------- - -;****************************** + ; + ; LD A,(LD_Pal_+2) INC A JR NZ,SetDefaultPalette @@ -1221,7 +802,6 @@ RESET_TO_ZX: DI LD A,7 CALL SET_PAL JR SetDefaultPalette.skip - SetDefaultPalette: XOR A LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette @@ -1253,46 +833,46 @@ Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion XOR A OUT (RGADR),A OUT (RGMOD),A -;************************************************ -; 樠 ࠭ -;!FIXIT १ 㭪 ஡ + ; 樠 ࠭ + ;!FIXIT १ 㭪 ஡ DI LD A,5 OUT (SLOT1),A + ; #1FFD + LD BC,#1FFD XOR A OUT (SLOT0),A - - LD BC,#1FFD - OUT (C),A ; #1FFD + OUT (C),A + ; #7FFD LD B,#7F - LD A,8 LOOP_P1: DEC A - OUT (C),A ; #7FFD + OUT (C),A OUT (SLOT3),A JR NZ,LOOP_P1 - + ; #1FFD LD B,#1F LD A,#10 - OUT (C),A ; #1FFD + OUT (C),A + ; #7FFD LD B,#7F LD A,8 -LOOP_P2: OUT (C),A ; #7FFD +LOOP_P2: OUT (C),A OUT (SLOT3),A INC A CP 16 JR NZ,LOOP_P2 - + ; XOR A - OUT (C),A ; #7FFD + OUT (C),A + ; #1FFD LD B,#1F - OUT (C),A ; #1FFD - -; RAM, ஬ BANK2 - ணࠬ! -;*********************************************** - + OUT (C),A + ; + ; RAM, ஬ BANK2 - ணࠬ! + ; LD HL,PROG_STARTS - LD DE,PROG_STARTS.Launch ;!HARDCODE + LD DE,PROG_STARTS.Launch ;!HARDCODE LD BC,0*256 + PROG_STARTS.Length LDIR @@ -1333,8 +913,7 @@ LOOP_P2: OUT (C),A ; #7FFD OUT (SLOT3),A ; JP PROG_STARTS.Launch - -;*************************************** +; ; ; PROG_STARTS: .Launch: EQU #FF00 DISP .Launch @@ -1355,14 +934,17 @@ PROG_STARTS: ; .Length EQU $-PROG_STARTS ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' +;; -; + +;; SET_PAL: LD DE,0 LD BC,#FF*256 + BIOS.PIC_SET_PAL JP ToBIOS_18 -; +;; -;----------------------------------------------------------------------; + +;; MAKE_FULL_NAME: LD HL,(CNF_NAME) LD (.mode),HL LD DE,ONE_FILE @@ -1400,11 +982,378 @@ MAKE_FULL_NAME: LD HL,(CNF_NAME) LD (DE),A LD HL,ONE_FILE RET -;----------------------------------------------------------------------; -; +;; + +;; +PARSE_CMD_LINE: LD HL,(LINE_X) + LD A,(HL) + AND A + JR Z,.NO_FILE + DEC A + JR Z,.NO_FILE + ; + INC HL + INC HL + CALL FIND_FILES + + CALL MAKE_FULL_NAME + LD A,SHARED_PAGE + CALL READ_FILE_1 + JR C,.NO_FILE + ; +.exit: LD (LEN_CNF),DE ; CNF 䠩 ⠭, DE - CNF + RET + ; +.NO_FILE: CALL MAKE_FULL_NAME.def_cnf + LD A,SHARED_PAGE + CALL READ_FILE_1 + JP C,ERROR_FILE + JR .exit +;; + + +;; + +FIND_FILES: PUSH HL + LD (X_FILE),HL + LD DE,0 + LD (IMAGE_FLAG),DE + LD (IMAGE_NAME),DE + LD (CNF_NAME),DE + LD B,A + JR .NO_NEXT + ; +.PARSING_LOOP: LD A,(HL) + INC HL + CP "." + CALL Z,.CHOOSE_FILE + CP " " + CALL Z,.BLANK_X + CP "\t" + CALL Z,.BLANK_X + CP "\n" + CALL Z,.BLANK_X1 + CP "\r" + CALL Z,.BLANK_X1 + JR Z,.END_NO_IMAGE +.NO_NEXT: DJNZ .PARSING_LOOP + ; +.END_NO_IMAGE: POP HL + LD A,(CNF_NAME+1) + AND A + RET NZ + LD A,(IMAGE_NAME+1) + AND A + LD DE,(X_FILE) + JR Z,.CNF_ALL + LD DE,CNF_FILE +.CNF_ALL: LD (CNF_NAME),DE + RET + ; +.BLANK_X: LD (X_FILE),HL ; ஡, 䠩 - ᭮ +.BLANK_X1: DEC HL + LD (HL),0 + INC HL + RET + ; ; +.CHOOSE_FILE: LD A,(HL) + AND %1101'1111 + ; TRD file + CP 'T' + JR Z,.TRD + ; SCL file + CP 'S' + JR Z,.SCL + ; ZX file + CP 'Z' + JR NZ,.unknown + ; +.CNF: LD DE,(X_FILE) + LD (CNF_NAME),DE +.unknown: DEC HL + LD A,(HL) + INC HL + RET + ; +.SCL: LD DE,IMAGE_FLAG + LD A,1 + LD (DE),A +.TRD: LD DE,(X_FILE) + LD (IMAGE_NAME),DE + JR .unknown +;; + + +;; +READ_CNF_FILE: LD HL,#C000 + LD DE,A_LINES + LD C,CFG_FILE_LINES +.LOOP_A: LD B,MAX_LINE_LENGTH ; ப + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + EX DE,HL +.LOOP_L: LD A,(HL) + CP "\r" + JR Z,.N_LINE + CP "\n" + JR Z,.N_LINE + AND A + JP Z,END_CNF_ERROR + INC HL + DJNZ .LOOP_L + ; +.N_LINE: LD (HL),0 +.N_LINE2: INC HL + LD A,(HL) + CP "\r" + JR Z,.N_LINE2 + CP "\n" + JR Z,.N_LINE2 + DEC C + JR NZ,.LOOP_A + RET +; 뤥 8 ப CNF +;; + + +;; +;!TODO ᫨ ய᪠ 㧪 ROM 48, 128 trdos, +; ⠢ vROM ⠭⭮ ࢮ +;!TEST + MACRO vROM_LOAD romLine;,pageNumber +.romLine = (romLine-1)*2 + EX DE,HL + LD HL,(A_LINES+.romLine) + LD A,(HL) + CP ';' + EX DE,HL + + JR NZ,.go_load + + LD (HL),0 + EX DE,HL + LD A,(NO_ZX_FLAG) + OR A + JR Z,.skip_load + JP ERROR_ZX_FLAG +.go_load: + LD A,(HL) ;BUFFER_RAM_PAGES.ROM + PUSH HL + EX DE,HL + CALL READ_FILE_1 + POP DE + ; + LD A,SHARED_PAGE + OUT (SLOT3),A + JP C,ERROR_FILE +.skip_load: + INC DE + EX DE,HL + ENDM ; -;----------------------------------------------------------------------; +; +SETUP_ZX: ;LOAD_ZXROMS: ;!FIXIT ६ ⪠ + CALL CHECK_ZX_FLAG + ; + ;LD BC,BUFFER_RAM_PAGES.ROM + LD HL,BUFFER_RAM_PAGES.ROM + + vROM_LOAD BASIC128_LINE;, #42 2- ப - 䠩 BASIC128 + vROM_LOAD BASIC_48_LINE;, #43 3- ப - 䠩 BASIC 48 + vROM_LOAD TRDOS_LINE ;, #44 4- ப - 䠩 TR-DOS + vROM_LOAD EXP_LINE ;, #45 5- ப - 䠩 EXPANSION + vROM_LOAD BIOS_LINE ;, #46 6- ப - 䠩 BIOS + vROM_LOAD BIOS2_LINE ;, #47 7- ப - 䠩 BIOS2 + ;vROM_LOAD _LINE ;, #42 8- ப - 䠩 + ;vROM_LOAD _LINE ;, #42 9- ப - 䠩 + ;vROM_LOAD _LINE ;, #42 10- ப - 䠩 + ;vROM_LOAD _LINE ;, #42 11- ப - 䠩 + +LOADING_PALETTE:;!TEST palette load + EX DE,HL + LD HL,( A_LINES + ((PALETTE_LINE-1)*2) ) + LD A,(HL) + CP ';' + JR Z,.skip + + LD DE,ONE_FILE + LD BC,FULL_FILE_NAME_LENGTH + LDIR + LD HL,ONE_FILE + + LD A,Dss.Open.R + LD C,Dss.Open + RST ToDSS + JP C,ERROR_FILE ; 訡, ᫨ 䠩 + + LD (FILE_HANDLE),A + + LD HL,PlaceForPalette + LD DE,1024*4 ;!HARDCODE + LD C,Dss.Read + RST ToDSS + JP C,ERROR_FILE ; 訡 ⥭ + ;!TEST DSS ⮬. ᫨ 䠩 4096 4096, A 㤥 #FF + ;OR A + ;JP NZ,ERROR_FILE + ; + LD A,(FILE_HANDLE) + LD C,Dss.Close + RST ToDSS +.skip: ;!TODO 䠩 , ᫨ 㦥 + ; ; + ; 䠩 ⠭ + LD HL,MSG_NORMAL + LD C,Dss.PChars + RST ToDSS + ; + LD HL,(A_LINES + (NAME_CFG_LINE-1)*2 ) + LD C,Dss.PChars + RST ToDSS + ; + LD HL,CR_LINE + LD C,Dss.PChars + RST ToDSS + ;LD A,(SAVE_SLOT3) + ;OUT (SLOT3),A + ; +PARSE_PARAMETERS:; parameters parsing + LD A,SHARED_PAGE + OUT (SLOT3),A + LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; ப ࠬ஢ +.LOOP_1: LD A,(HL) + CP '/' + JR Z,.PARAM_TEST + CP 0 + JR Z,.PARAM_END + ;RET Z + CP "\r" + JR Z,.PARAM_END + ;RET Z + CP "\n" + JR Z,.PARAM_END + ;RET Z + INC HL + JR .LOOP_1 + ; +.PARAM_TEST: INC HL + PUSH HL + LD IX,PARAMS +.NEXT_PAR: LD E,(IX) + LD D,(IX+1) +.LOOP_2: LD A,(DE) + CP (HL) + JR NZ,.PARAM_E1 + INC HL + INC DE + JR .LOOP_2 +.PARAM_E1: CP #FF + JR NZ,.NO_PAR + LD A,(HL) + CP " " + JR Z,.PARAM_E2 + CP 0 + JR Z,.PARAM_E2 + CP "\r" + JR Z,.PARAM_E2 +.NO_PAR: POP HL + PUSH HL + INC IX + INC IX + INC IX + INC IX + LD A,(IX+1) + AND A + JR NZ,.NEXT_PAR + POP HL + JR .LOOP_1 + ; +.PARAM_E2: EX (SP),HL ; HL - ࠭! + LD A,(IX+3) + LD (IX+2),A ; parameter alternate! + LD L,(IX) + LD H,(IX+1) + LD C,Dss.PChars + RST ToDSS + ; + POP HL + JR .LOOP_1 + ; + + + + MACRO vROM_set dcp_port + LD A,dcp_port + CALL SET_DCP_PORT + ENDM + +.PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM + vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 + vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 + vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS + vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION + vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 + vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 + ;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 + ;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 + ;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 + ;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 + + LD HL,(IMAGE_NAME) + LD A,H + OR L + JP Z,SKIP_IMAGE + + LD C,SLOT3 + IN B,(C) + PUSH BC + + CALL READ_IMAGE + POP BC + OUT (C),B + JP C,ERROR_FILE + ; +SKIP_IMAGE: LD A,(No_run_+2) + AND A + RET NZ + ; + LD HL,MSG_EXIT1 + LD BC,SLOT3 + IN B,(C) + LD A,Spec_Page + OUT (C),A + ; !FIXIT 㤥 楤 । + LD A,"Z" + LD (Spec_Page.flag_Z),A + LD A,"X" + LD (Spec_Page.flag_X),A + ; + OUT (C),B + ; + SCF + RET +;; + + +;; +SET_DCP_PORT: LD B,(HL) ; page + INC HL + INC B + DEC B + RET Z + ; + PUSH HL + CALL SET_ROM + POP HL + RET +;; + + +;; ;!FIXIT ६ ⪠ CHECK_ZX_FLAG: LD BC,SLOT3 @@ -1417,7 +1366,6 @@ CHECK_ZX_FLAG: SBC HL,DE JR Z,.exit - ; LD A,(Spec_Page.flag_Z) ; CP 'Z' ; JR NZ,.no_zx @@ -1431,10 +1379,86 @@ CHECK_ZX_FLAG: .exit: OUT (C),B RET NO_ZX_FLAG DB 0 +;; + +; +;----------------------------------------------------------------------; + INCLUDE 'For_4X.asm' ;----------------------------------------------------------------------; ; - INCLUDE 'For_4X.asm' + +; +;----------------------------------------------------------------------; + IF NEW_MEMORY_LOGIC +BUFFER_RAM_PAGES: +.ROM: BLOCK 6 ; ⢮ ⮢ +.RAM: BLOCK 16 ; 256 +.Size EQU $-BUFFER_RAM_PAGES +.end_marker: BYTE #FF + ELSE +BUFFER_RAM_PAGES: +.ROM: DB #42, #43, #44, #45, #46, #47 +;.RAM: BLOCK 16 ; 256 +.Size EQU $-BUFFER_RAM_PAGES +.end_marker: BYTE #FF + ENDIF +;----------------------------------------------------------------------; +; + + +;----------------------------------------------------------------------; +LINE_ZX: DZ 'ZX Spectrum PAGES' +LEN_LINE_ZX EQU $-LINE_ZX +;********************************************* + +MSG_EXIT1: DB 13,10, "EXIT without run",13,10,0 +;MSG_EXIT2: DB 13,10, "室 ᪠" +CR_LINE: DB 13,10,0 +START_MSG: DB 13,10, 'SPECTRUM launcher v',SP_VERSION,'.' + DB 13,10, '(c) Sprinter Team.' + DB 13,10, 'Written by Ivan Mak.' + DB 13,10, 'Modified by Anatoliy Belyanskiy.' + DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 +ERROR_FILE_MSG_X: DB 13,10, "Error in file: ",0 +;ERROR_FILE2_MSG_X: DB 13,10, "訡 䠩: ",0 +ERROR_FILE_MSG: DB 13,10, "Unable to work.",0 +;ERROR_FILE2_MSG: DB 13,10, " .",0 +ERROR_CNF: DB 13,10, "Unexpected CNF file end.",0 +;ERROR_CNF2: DB 13,10, " CNF 䠩.",0 +NO_MEM_MSG: DB 13,10, "The spesial pages are already used." + DB 13,10, "Clear memory and restart spectrum.exe again.",0 +;NO_MEM_MSG2: DB 13,10, "樠 ࠭ 㦥 ." +; DB 13,10, " १ spectrum.exe ᭮.",0 +MSG_NORMAL: DB 13,10, "All files has been read successfully.",13,10 + DB "MODE: ",0 +;MSG_NORMAL2: DB 13,10, " 䠩 ⠭ ଠ쭮.",13,10 +; DB "䨣: ",0 +MSG_NO_MEM: DB 13,10, "No memory space for image or",0 +;MSG_NO_MEM2: DB 13,10, " 墠⠥ ࠧ ",0 +MSG_LOAD_IMAGE: DB 13,10, "Image loading: ",0 +;MSG_LOAD_IMAGE2: +; DB 13,10, "㧪 ࠧ: ",0 +MSG_ZX_EXIT: DB 13,10, "EXIT from Spectrum mode",13,10,0 +;MSG_ZX_EXIT2: DB 13,10, "EXIT from ZX mode",0 +MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' + DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 +PROGRES_IND: DB '',0 ; 176 +PROGRES_100: DB ' 100%',13,10,0 + +;MEM_BLK: BYTE 0 +LINE_X: WORD 0 +X_FILE: WORD 0 +CNF_NAME: WORD 0 +IMAGE_FLAG: BYTE 0 ; 0 - trd, scl - 1, sna - 2, tap - 3 +IMAGE_NAME: WORD 0 +IMAGE_HANDLER: BYTE 0 +SAVE_SLOT3: BYTE 0 +LEN_CNF: WORD 0 +A_LINES: BLOCK CFG_FILE_LINES*2,0 +;********************************************* +;----------------------------------------------------------------------; +; ; ᫨ ࠬ , 롨ࠥ 祭 Y @@ -1503,144 +1527,4 @@ PlaceForTXTscreen EQU PlaceForPalette + 1024*4 ;!HARDCODE ; Code after Loader ;[]-------------------------------------------------------------------[] ; Code end section -; - -; [x] new tr-hdd -; TO INIT by SPECTRUM.EXE: -; .CURRENT_DIR_SEC_L EQU #C196 ; word -; .CURRENT_DIR_SEC_H EQU #C198 ; word -; .CURRENT_DIR_DRIVE EQU #C19A -; .CURRENT_HDD EQU #C12D - -; CORRECT_CUR_DIR: -; DI -; IN A,(SLOT3) -; LD C,A -; LD A,SYS_PAGE -; OUT (SLOT3),A -; LD A,#FF -; JR C,.skip -; LD (SYS_PAGE.CURRENT_HDD),A -; .skip: INC A -; LD H,A -; LD L,A -; LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL -; LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL -; LD A,C -; OUT (SLOT3),A -; RET -/* -INIT_HDD_WORK: - LD A,(RESET_TO_ZX.hdd) - CP #FF - JR Z,.skip_hdd - ; - OR #80 - LD HL,Temp_Buffer - LD BC,Dss.DskInfo - RST ToDSS - ; - LD B,4 ;!HARDCODE 㦭 ࠬ - LD DE,0 - LD HL,Temp_Buffer -.loop_param: ADD HL,DE - LD E,(HL) - INC HL - DJNZ .loop_param - LD A,(HL) - AND #80 - JR Z,.no_change_Disk - CP #90 - JR NC,.no_change_Disk - ; - LD A,3 - AND (HL) - LD D,A - INC HL - LD A,(HL) - RLCA - RLCA - ; - OR D - AND #0F - JR .start - ; -.no_change_Disk:; - XOR A -.start: LD C,BIOS.HDD_PART ; IDE-1/IDE-2 - RST ToBIOS - ; -.loop: LD C,BIOS.HDD_INIT - RST ToBIOS - JR C,.loop - ; - - CALL BPB_SetUp - - - ;[x] music and dirs - LD HL,SND_DIR - LD DE,Temp_Buffer - LD A,FAT_ATTR.DIRECTORY - LD BC,Dss.F_First.FATname - RST ToDSS - JR NC,.start_setup - ; - LD A,#C9 ; RET opcode - disable music - LD (SoundOnOff2),A - RET - ; -.start_setup: -;-=-=-=-=-=-=-=- - LD HL,(Temp_Buffer+26) ; first dir cluster - CALL NSECTOR - LD (MSD_DATS.MSD_CAT_SEC2),HL - LD (MSD_DATS.MSD_CAT_SEC),IX - ;JP READ_DIR - - - - -.RESTORE_DIR: - PUSH AF - ; - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD HL,(SYS_PAGE.CURRENT_DIR_SEC_L) - LD DE,(SYS_PAGE.CURRENT_DIR_SEC_H) - LD A,H - OR L - OR D - OR E - JR Z,.exit_Res_Dir - ; - LD (SYS_PAGE.MSD_CAT_SEC),HL - LD (SYS_PAGE.MSD_CAT_SEC2),DE -.exit_Res_Dir: - EX AF,AF' - OUT (SLOT3),A - POP AF - RET - -CORRECT_CUR_DIR: - DI - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,#FF - JR C,.skip - LD (SYS_PAGE.CURRENT_HDD),A -.skip: INC A - LD H,A - LD L,A - LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL - LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL - LD A,C - OUT (SLOT3),A - RET - -*/ \ No newline at end of file +; \ No newline at end of file