diff --git a/MK_DEMO.ASM b/MK_DEMO.ASM index f7cf48a..a824821 100644 --- a/MK_DEMO.ASM +++ b/MK_DEMO.ASM @@ -133,7 +133,21 @@ START: ld c,Dss.PChars RST ToDSS + LD BC,BIOS.SWAP_RAM_DRIVES.Info + RST ToBIOS + CP high BIOS.SWAP_RAM_DRIVES.ZX + JR Z,1F + ; + LD (EXIT_ram_drv),A + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS +1: ; call Load_Resources + JR NC,NEXT_STEP + + ld hl,NO_FREE_MEM + LD (set_msg),HL + JP EXIT_TO_DSS.no_mem ; jp start_load ; JP BEGIN @@ -195,6 +209,7 @@ START: ;-------TEST--------------------------[v] +NEXT_STEP: ld hl,#9000 ld a,#FF ACC_SetBlockSize @@ -1063,9 +1078,9 @@ L_DDX: JR NZ,NO_SNDP LD A,(SYS_PAGE.RAMD_KEYS.H) LD (SND_P),A - + ; ld hl,_lastPageMuzOffset + ; LD (SND_A),HL NO_SNDP: - LD A,E OUT (SLOT3),A @@ -1097,7 +1112,8 @@ PlayMusic: IN A,(SLOT1) LD E,A -SND_P+*: LD A,0 +SND_P+1: + LD A,0 OUT (SLOT1),A ld a,CBL.BUFFER_PAGE @@ -1106,8 +1122,9 @@ SND_P+*: LD A,0 out (c),a -SND_A+*: ld hl,#4000 - ld d,#C0 +SND_A+1: + ld hl,#4000 + ld d,#C0 ACC_SetBlockSize ld a,#80 ACC_CopyBlock @@ -1136,9 +1153,11 @@ SND_A+*: ld hl,#4000 LD (SND_P),A LD HL,#4000 -checkLastPage+*: cp 0 +checkLastPage+1: + ;INC A + cp 0 jp nz,1F - LD A,(SYS_PAGE.RAMD_KEYS.H) + LD A,(SYS_PAGE.RAMD_KEYS.H-#8000) LD (SND_P),A ld hl,_lastPageMuzOffset 1: LD (SND_A),HL @@ -1281,14 +1300,14 @@ EXIT_TO_DSS: CP FilesTBL.END+1 JR C,.loop_mem - +.no_mem: IF MODE_CBL && MUSIC_22khz 1: CALL MemHack.restore - JR NC,1F - LD A,R - AND 7 - OUT (BorderColor),A - JR 1B + ; JR NC,1F + ; LD A,R + ; AND 7 + ; OUT (BorderColor),A + ; JR 1B 1: ; ENDIF @@ -1319,11 +1338,16 @@ clean_kbd_buf: jr clean_kbd_buf .exit: ;--------------------------------- - + +set_msg+1: ld hl,EXIT_MSG ld c,Dss.PChars RST ToDSS +EXIT_ram_drv+2: ;возврат режима рамдисков + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS + IM 1 .loop_exit: LD B,0 @@ -1343,6 +1367,20 @@ Load_Resources: in a,(SLOT3) ld (.SavePage),a + + IF MODE_CBL && MUSIC_22khz +; LD B,SYS_PAGE.RAMD_KEYS.NUM+1 +; .RMD_Loop: +; PUSH BC +; LD A,B +; DEC A +; LD C,BIOS.FreeMemRMD +; RST ToBIOS +; POP BC +; DJNZ .RMD_Loop + ENDIF + + LD B,FilesTBL.END LD DE,FilesTBL LD HL,RAMBlkIDs @@ -1360,6 +1398,7 @@ Load_Resources: ; B - размер блока в страницах ld c,Dss.GetMem rst ToDSS + JR C,.error di ; A - идентификатор блока памяти @@ -1456,21 +1495,27 @@ Load_Resources: ;-----------[] ;-------------[Возврат] -.SavePage+*: ld a,0 +.SavePage+1: ld a,0 out (SLOT3),a IF MODE_CBL IF MUSIC_22khz ld a,(RAMBlkIDs + _ramDiskNumForMuz) - ld bc, +( _memPagesForMuz - 1) * 256 + BIOS.GetMemPage + ld bc, +( _memPagesForMuz -1) * 256 + BIOS.GetMemPage rst ToBIOS ;!FIXIT сделать проверку на ошибку ld (checkLastPage),a ENDIF ENDIF - + AND A RET +.error: + POP HL + POP HL + LD A,(.SavePage) + out (SLOT3),a + RET ;-------------[] ;---[освобождаем рамдиски F..I] @@ -1614,6 +1659,7 @@ FilesTBL: ENDIF .END EQU ($-FilesTBL)/14 ; количество файлов + IF BACKPLANE_BMP BackPlane.FileName: DZ 'BACKGRN1.PAL' ELSE @@ -1626,11 +1672,12 @@ RAMBlkIDs: BLOCK FilesTBL.END,0 Temp_Buffer: BLOCK _memPagesForMuz + 1,#FF ; Длина в блоках самого большого из файлов выше + 1 -START_MSG: DB 13,10,13,10 - DB 'Mortal Kombat demo by Ivan Mak. 2002 year.',13,10 - DZ 'EXE v.',MK_VERSION,' by Anatoliy Belyanskiy. ',BUILD_DATE,' (',#91,') Sprinter Team.',13,10,13,10 +START_MSG: DB 13,10,13,10 + DB 'Mortal Kombat demo by Ivan Mak. 2002 year.',13,10 + DZ 'EXE v.',MK_VERSION,' by Anatoliy Belyanskiy. ',BUILD_DATE,' (',#91,') Sprinter Team.',13,10,13,10 LOADING_MSG: DZ 'Loading resources, please wait...',13,10 -EXIT_MSG: DZ 'All done)))',13,10 +NO_FREE_MEM: DZ 'ERROR: No free memory to load resources!',13,10 +EXIT_MSG: DZ 'All done)))',13,10 ;---[] ; ASSERT IM2_Handler>$, "The code leaks into the IM2 byte address!"