diff --git a/Shared_Includes b/Shared_Includes index 722db55..7e00c2a 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 722db55c24ee5172d610e832f3933c90914fcb8c +Subproject commit 7e00c2aa909241367878004ad104b56abb907f80 diff --git a/spectrum.asm b/spectrum.asm index b629407..9011a60 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -164,13 +164,14 @@ BEGIN: LD (LINE_X),IX CALL PARSE_PARAMETERS CALL COUNT_vROM_PAGES PUSH AF - ;!FIXIT ¯à®¢¥à¨âì ä« £ ZX, ¥á«¨ CF ; [ ] free zx pages ??ERROR_ZX_FLAG?? ; Žç¨é ¥¬ ¯ ¬ïâì, ¥á«¨ ROM_BIN > 0 - LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages + LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages.vROM CALL NC,ToBIOS ; ‚뤥«ï¥¬ áâà ­¨æë ¯®¤ vRAM - CALL GET_vRAM_PAGES - ;JR C, ; no mem for vRAM ;!FIXIT ;[ ] free zx pages + LD A,(PARAMS.No_run + 2) + AND A + CALL NZ,GET_vRAM_PAGES + JR C,Error_NoMemForSPpages POP AF ; ‚뤥«ï¥¬ áâà ­¨æë ¯®¤ vROM, ¥á«¨ ROM_BIN > 0 JR C,.skip_vROM @@ -178,20 +179,23 @@ BEGIN: LD (LINE_X),IX LD B,A LD C,BIOS.GetMem RST ToBIOS - ;JR C, ; no mem for vROM ;!FIXIT ;[ ] free zx pages + JR C,Error_NoMemForSPpages LD (ZX_vROM_BLK),A ; Œ ¯¯¨¬ áâà ­¨æë vROM, ¥á«¨ ROM_BIN > 0 LD HL,BUFFER_RAM_PAGES LD C,BIOS.GetMemBlkPages RST ToBIOS CALL LOAD_vROM_BIN - -.skip_vROM: CALL LOADING_PALETTE - ;CALL INIT_vROM_PAGES +.skip_vROM: ; ¥á«¨ norun, â® ¤ «ìè¥ ­¥ ­ ¤® + LD A,(PARAMS.No_run + 2) + AND A + LD HL,MSG_EXIT1 + JP Z,EXIT_ALL ; - ;JP NC,PREPARE_TO_ZXMODE + ; £à㧨¬ ¯ «¨âàã ¨ ®¡à § ¤¨áª , ¥á«¨ ­ ¤® + CALL LOAD_IMAGE_FILE + CALL LOADING_PALETTE JP PREPARE_TO_ZXMODE - ;JP EXIT_ALL ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ; @@ -213,14 +217,16 @@ ERROR_FILE: LD HL,ERROR_FILE_MSG_X RST ToDSS ; LD HL,ERROR_FILE_MSG - JP EXIT_ALL + JR EXIT_ALL ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG - JP EXIT_ALL + JR EXIT_ALL END_CNF_ERROR: LD HL,ERROR_CNF EXIT_ALL: LD C,Dss.PChars RST ToDSS ; + LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages.vRAM + RST ToBIOS .loop: LD BC,Dss.Exit RST ToDSS JR .loop @@ -634,30 +640,30 @@ SAVETXT: LD (BACKTXT.VMODE),A .EXIT: ; ;!TEST; [ ] 04/11/2023 Žâ¤¥«ì­ë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS. BLK_TO_RAMD -; SETUP_RAM_DRIVES: -; LD BC,BIOS.SWAP_RAM_DRIVES.ZX -; RST ToBIOS -; ; § ¯ã᪠á ä ©«®¬ ¤«ï à ¬¤¨áª ? -; LD A,(Load_IMAGE_File.MEM_BLK) -; OR A -; JR Z,.skip -; ; ¯à®¢¥à塞 ¤à ©¢ ¯¥à¥¤ ¯¥à¥­ §­ ç¥­¨¥¬ -; XOR A -; LD C,BIOS.GET_RAMD_ST -; RST ToBIOS -; OR A -; JR Z,.set_block -; ; ®á¢®¡®¤¨âì à ¬¤¨áª -; XOR A -; LD C,BIOS.FreeMemRMD -; RST ToBIOS -; ; set disk e: -; .set_block: LD A,(Load_IMAGE_File.MEM_BLK) -; LD B,A -; XOR A -; LD C,BIOS.BLK_TO_RAMD -; RST ToBIOS -; .skip: ; +SETUP_RAM_DRIVES: + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS + ; § ¯ã᪠á ä ©«®¬ ¤«ï à ¬¤¨áª ? + LD A,(Load_IMAGE_File.MEM_BLK) + OR A + JR Z,.skip + ; ¯à®¢¥à塞 ¤à ©¢ ¯¥à¥¤ ¯¥à¥­ §­ ç¥­¨¥¬ + XOR A + LD C,BIOS.GET_RAMD_ST + RST ToBIOS + OR A + JR Z,.set_block + ; ®á¢®¡®¤¨âì à ¬¤¨áª + XOR A + LD C,BIOS.FreeMemRMD + RST ToBIOS + ; set disk e: +.set_block: LD A,(Load_IMAGE_File.MEM_BLK) + LD B,A + XOR A + LD C,BIOS.BLK_TO_RAMD + RST ToBIOS +.skip: ; ; ; ;!FIXIT ¯¥à¥¤¥« âì ­  äã­ªæ¨î ¡¨®á  SET_RELOAD_PROG: @@ -722,38 +728,13 @@ RESET_TO_ZX: DI LD A,#FF LD (SYS_PAGE.CURRENT_DIR_DRIVE),A LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A - ;;;;;;;; - - ; LD A,CNF_PORT.CNF_3 - ; OUT (SYS_PORT.ROM),A ; System-page on & CNF = 3 - - ; XOR A - ; OUT (BorderColor),A ; border-0 - ; OUT (RGADR),A ; Screen-page = 0 - ; OUT (RGMOD),A ; Screen-mode-page = 0 - ; LD BC,#1FFD - ; OUT (C),A ; Scorpion-port = 0 - ; LD BC,#7FFD - ; OUT (C),A ; pentagon-port = 0 - -; LD A,(PARAMS.Int_or+2) -; AND A -; LD A,#FA ; original waits on -; JR NZ,.ORIG1 -; LD A,#FE -; .ORIG1: LD BC,Port_All_Mode -; OUT (C),A ; ACC-Off - + ;!TODO ¢ BIOS? LD BC,CBL.SYS_PORT XOR A OUT (C),A ; CBL-off + ; ;[ ] 1/02/2024 ०¨¬ ᯥªâà㬠 à ¡®â ¥â á «î¡ë¬¨ ª ­ « ¬¨ ¨ ®á­®¢­ë¬¨ à §¤¥« ¬¨ CALL SET_CURRENT_HDD - - ; LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 - ; LD C,BIOS.FN_TURBO - ; RST ToBIOS_18 - ; ; XOR A ; reg A' for GOTO_SPECTRUM EX AF,AF' @@ -814,162 +795,14 @@ Set_Next_Par: ; SYS_PORT/CNF_PORT ; vROM & vRAM LD HL,(ZX_vROM_BLK) ; RESERVED - XOR A + EX AF,AF' ; LD C,BIOS.GOTO_SPECTRUM RST ToBIOS - ; + ;!FIXIT ᤥ« âì ®¡à ¡®â稪 .di_halt: DI HALT JR .di_halt - - -; [ ] free zx pages! -; ‚室: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128, -; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨: -; 4 - TR-DOS, 5 - BASIC 48 -; E: §­ ç¥­¨¥ ¤«ï SYS_PORT/CNF_PORT -; L: Block_ID.vROM -; H: Block_ID.vRAM -; B: Port All Mode -; A: RESERVED (TASK Number = 0) -;A'[1..0]: 1 - int scorp, 2 - int pent, 3 - int ZX -; A'[2]: 0 - set default palette, 1 - don't change palette -; A'[7]: 0 - 320, 1 - 312 áâப - - - - ; XOR A - ; LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette - ; RST ToBIOS_18 -;.skip: -; LD A,(PARAMS.Int_or+2) -; AND A ; 3 -; JR NZ,Original -; LD A,(PARAMS.Int_sc+2) ; 1/2 -; Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion -; RST ToBIOS_18 - - ; LD HL,#4000 ; clear ZX-Spectrum screen - ; LD DE,#4001 - ; LD BC,#1AFF - ; LD (HL),L - ; LDIR - - ; LD HL,#4104 ; Screen-1 - ; LD E,0 - ; LD BC,4*256+BIOS.LP_OPEN_S - ; RST ToBIOS_18 - - ; LD HL,#5104 ; Screen-2 - ; LD E,0 - ; LD BC,4*256+BIOS.LP_OPEN_S - ; RST ToBIOS_18 - - ; XOR A - ; OUT (RGADR),A - ; OUT (RGMOD),A - ; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ - ;!FIXIT ç¥à¥§ äã­ªæ¨î ¡¨®á ¯®¯à®¡®¢ âì -; DI -; LD A,5 ; [ ] free zx pages! -; OUT (SLOT1),A -; ; #1FFD -; LD BC,#1FFD -; XOR A -; OUT (SLOT0),A ; [ ] free zx pages! -; OUT (C),A -; ; #7FFD -; LD B,#7F -; LD A,8 -; LOOP_P1: DEC A -; OUT (C),A -; OUT (SLOT3),A -; JR NZ,LOOP_P1 -; ; #1FFD -; LD B,#1F -; LD A,#10 -; OUT (C),A -; ; #7FFD -; LD B,#7F -; LD A,8 -; LOOP_P2: OUT (C),A -; OUT (SLOT3),A -; INC A -; CP 16 -; JR NZ,LOOP_P2 -; ; -; XOR A -; OUT (C),A -; ; #1FFD -; LD B,#1F -; OUT (C),A -; ; -; ; ‚ᥠRAM, ªà®¬¥ BANK2 - ¢ ­¥© ¯à®£à ¬¬ ! -; ; -; LD HL,PROG_STARTS -; LD DE,PROG_STARTS.Launch ;!HARDCODE -; LD BC,0*256 + PROG_STARTS.Length -; LDIR - -; LD A,(PARAMS.Lines312+2) -; OUT (Port_VSYNC),A - -; LD A,(PARAMS.P_7FFD+2) ; - Pentagon off -; LD BC,#7FFD -; OUT (C),A - -; LD A,(PARAMS.Turbo+2) ; 3 - turbo - -; LD HL,(PARAMS.Sprinter+2) ; +04h - Sprinter-ZX -; ADD A,L ; +0Ch - Scorpion/Pentagon - -; LD HL,(PARAMS.P_1FFD+2) ; +40h - Scorpion port off -; ADD A,L - -; LD HL,(PARAMS.Mem512+2) ; +80h - Pentagon-512 on -; ADD A,L - -; LD E,A -; LD A,(PARAMS.To_trd+2) -; LD D,A - -; ;!TEST -; IN A,(SLOT3) -; LD C,A -; LD A,SYS_PAGE -; OUT (SLOT3),A - -; LD A,E -; LD (SYS_PAGE.CONFIG_DE),A -; XOR A -; LD (SYS_PAGE.CONFIG_DE+1),A - -; LD A,C -; OUT (SLOT3),A -; ; -; JP PROG_STARTS.Launch -; ; ; ; -; PROG_STARTS: -; .Launch: EQU #FF00 -; DISP .Launch -; LD A,2 ; [ ] free zx pages! -; OUT (SLOT2),A -; LD A,E -; OUT (SYS_PORT.RAM),A -; LD A,D -; AND A -; JP Z,0 -; LD A,#10 -; LD BC,#7FFD -; OUT (C),A -; LD HL,0 -; PUSH HL -; JP #3D29 ; RESET to TR-DOS -; ENT -; ; -; .Length EQU $-PROG_STARTS -; ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; @@ -1159,14 +992,13 @@ READ_CNF_FILE: LD HL,#C000 ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; MACRO vROM_LOAD romLine;,pageNumber -.romLine = (romLine-1)*2 - LD DE,(ADDRESS_LINES+.romLine) +.RomLine = (romLine-1)*2 + LD DE,(ADDRESS_LINES+.RomLine) CALL vROM_LOAD_BIN ENDM ; -LOAD_vROM_BIN: CALL CHECK_ZX_FLAG - EXX - LD HL,BUFFER_vROM_PAGES +LOAD_vROM_BIN: EXX + LD HL,BUFFER_vROM_PAGES.Pages EXX LD HL,BUFFER_RAM_PAGES vROM_LOAD CFG_FILE_LINES.BASIC128 ;, #42 2-ï áâப  - ¨¬ï ä ©«  BASIC128 @@ -1179,6 +1011,12 @@ LOAD_vROM_BIN: CALL CHECK_ZX_FLAG vROM_LOAD CFG_FILE_LINES.BASIC_48_2 ;, ??? 9-ï áâப  - ¨¬ï ä ©«  vROM_LOAD CFG_FILE_LINES.TRDOS_2 ;, ??? 10-ï áâப  - ¨¬ï ä ©«  vROM_LOAD CFG_FILE_LINES.ZXEXP_2 ;, ??? 11-ï áâப  - ¨¬ï ä ©«  + LD HL,BUFFER_vROM_PAGES + LD A,(ZX_vROM_BLK) + LD (HL),A + LD BC,BIOS.ZX_MEMORY_MANAGER.SetCustomVroms + RST ToBIOS + RET ; vROM_LOAD_BIN: EX DE,HL @@ -1190,19 +1028,19 @@ vROM_LOAD_BIN: EX DE,HL .go_load: LD A,(HL) ;BUFFER_RAM_PAGES.ROM EXX LD (HL),A - INC HL + ;INC HL PUSH HL EXX PUSH HL EX DE,HL CALL READ_FILE_1 ; A - RAM page POP HL - LD A,(HL) + ; LD A,(HL) INC HL ; EXX POP HL - LD (HL),A + ; LD (HL),A EXX ; LD A,SHARED_PAGE @@ -1214,23 +1052,9 @@ vROM_LOAD_BIN: EX DE,HL EXX RET ; -;!FIXIT ¢à¥¬¥­­ ï § ¯« âª  -CHECK_ZX_FLAG: LD BC,SLOT3 - IN B,(C) - LD A,Spec_Page - OUT (C),A - LD HL,(Spec_Page.flag_Z) - LD DE,'Z'+'X'*256 - ; - XOR A - SBC HL,DE - OUT (C),B - RET Z - ; - INC A - LD (NO_ZX_FLAG),A - RET -NO_ZX_FLAG: DB 0 + + +;NO_ZX_FLAG: DB 0 ; ; MACRO vROM_LOAD romLine;,pageNumber ; .romLine = (romLine-1)*2 @@ -1266,6 +1090,26 @@ NO_ZX_FLAG: DB 0 ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; +;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; +LOAD_IMAGE_FILE: + LD HL,(IMAGE_NAME) + LD A,H + OR L + RET Z + ; + LD C,SLOT3 + IN B,(C) + PUSH BC + ; + CALL READ_IMAGE + ; + POP BC + OUT (C),B + RET NC + JP ERROR_FILE +;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; + + ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; ;!TEST palette load LOADING_PALETTE: @@ -1415,7 +1259,6 @@ PARSE_PARAMETERS:; parameters parsing ;¥á«¨ áâíª ­ å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«î祭­ë¬¨ ¯à¥à뢠­¨ï¬¨ ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; GET_vRAM_PAGES: CALL .check_params - XOR A LD C,BIOS.ZX_MEMORY_MANAGER RST ToBIOS RET C @@ -1468,7 +1311,21 @@ COUNT_vROM_PAGES: LD A,C LD (ZX_vROM_COUNT),A SUB 1 ; ¥á«¨ 0 - â® ­¥ ¬¥­ï¥¬ ­ ¡®à - RET + RET NC + ; CHECK_ZX_FLAG + LD BC,SLOT3 + IN B,(C) + LD A,Spec_Page + OUT (C),A + LD HL,(Spec_Page.flag_Z) + LD DE,'Z'+'X'*256 + ; + XOR A + SBC HL,DE + OUT (C),B + SCF ; ROM ä ©«®¢ 0, ¬¥âª  ZX ¥áâì + RET Z + JP ERROR_ZX_FLAG ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; @@ -1554,7 +1411,8 @@ BUFFER_RAM_PAGES: BLOCK 10,#FF ; !HARDCODE ª®«¨ç¥á⢮ ¯®à⮢ í¬ã«ïâ®à  ‡“ .Size EQU $-BUFFER_RAM_PAGES BUFFER_vROM_PAGES: - BLOCK 10,#FF ; !HARDCODE ª®«¨ç¥á⢮ ¯®à⮢ í¬ã«ïâ®à  ‡“ +.BlockID: BYTE 0 +.Pages: BLOCK 10,#FF ; !HARDCODE ª®«¨ç¥á⢮ ¯®à⮢ í¬ã«ïâ®à  ‡“ .Size EQU $-BUFFER_RAM_PAGES ELSE BUFFER_RAM_PAGES: @@ -1586,8 +1444,8 @@ 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_MSG: DB 13,10, "Not enough free memory pages for ZX mode." + DB 13,10, "Clear the 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