diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM index c7cb952..a40eff5 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -1,15 +1,16 @@ ;===================[ Функции распределения памяти ]===================; - +; Выход: BC - FREE MEM в блоках по 16k, HL - FULL MEM +;!TEST все SLOT2 на SLOT1 ; ;----------------------------------------------------------------------; ; Определение объема памяти. ; Выход: BC - FREE MEM в блоках по 16k, HL - FULL MEM EMM.GetMemSize: - IN A,(SLOT2) + IN A,(SLOT1) LD B,A LD A,SYS_PAGE - OUT (SLOT2),A - LD HL,SYS_PAGE.RAMD_FAT-#4000 + OUT (SLOT1),A + LD HL,SYS_PAGE.RAMD_FAT-#4000 - #4000 LD C,0 .loop: LD A,(HL) INC L @@ -21,7 +22,7 @@ EMM.GetMemSize: .exit: LD HL,#100 LD A,B LD B,0 - OUT (SLOT2),A + OUT (SLOT1),A RET ;----------------------------------------------------------------------; ; @@ -36,11 +37,11 @@ EMM.InitMem: PUSH HL PUSH DE - IN A,(SLOT2) + IN A,(SLOT1) LD C,A LD A,SYS_PAGE - OUT (SLOT2),A - LD HL,SYS_PAGE.RAMD_FAT-#4000 ; Адрес FAT ОЗУ. + OUT (SLOT1),A + LD HL,SYS_PAGE.RAMD_FAT-#4000 - #4000 ; Адрес FAT ОЗУ. ; обнуляем таблицу .loopFree: LD (HL),0 @@ -48,7 +49,7 @@ EMM.InitMem: JR NZ,.loopFree ; резервируем спец.страницы и страницы ZX LD B,RESERVED_PAGES.Blocks - LD DE,RESERVED_PAGES ; таблица занятых системных страниц + LD DE,RESERVED_PAGES ; таблица занятых системных страниц .loop: LD A,(DE) CP #FF JR Z,.exitLoop @@ -65,13 +66,13 @@ EMM.InitMem: LD L,A LD (HL),A ; Инициализация ключей RAM-Disks - LD HL,SYS_PAGE.RAMD_KEYS-#4000 + LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000 LD B,SYS_PAGE.RAMD_KEYS.NUM .loop2: LD (HL),0 INC L DJNZ .loop2 LD A,C - OUT (SLOT2),A + OUT (SLOT1),A POP DE POP HL @@ -115,12 +116,12 @@ RESERVED_PAGES: EMM.GetMem: ;PUSH DE PUSH BC - IN A,(SLOT2) + IN A,(SLOT1) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A LD C,B ; сохранить число нужных блоков - LD HL,SYS_PAGE.RAMD_FAT-#4000 + LD HL,SYS_PAGE.RAMD_FAT-#4000 - #4000 ; Цикл проверки наличия нужных блоков. .loop: DEC L JR Z,.noRAM @@ -132,7 +133,7 @@ EMM.GetMem: ; Место есть ! LD B,C ; Восстановить нужный объем диска LD C,#FF ; МЕТКА КОНЦА RAM-Disk - LD HL,SYS_PAGE.RAMD_FAT-#4000 + LD HL,SYS_PAGE.RAMD_FAT-#4000 - #4000 ; Заполнить RAMD_FAT .loop2: DEC L @@ -145,7 +146,7 @@ EMM.GetMem: ; L - указатель цепочки. EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A LD A,L AND A POP BC @@ -154,7 +155,7 @@ EMM.GetMem: .noRAM: LD L,1 ; НЕТ ПАМЯТИ EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A LD A,L SCF POP BC @@ -203,13 +204,13 @@ EMM.FreeMemRMD: SCF RET Z LD C,A - IN A,(SLOT2) + IN A,(SLOT1) LD B,A LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A LD (HL),0 LD A,B - OUT (SLOT2),A + OUT (SLOT1),A LD A,C ;JR EMM.FreeMem ;------[ @@ -222,12 +223,12 @@ EMM.FreeMem: RET Z LD L,A - IN A,(SLOT2) + IN A,(SLOT1) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A - LD H,high (SYS_PAGE.RAMD_FAT - #4000) + LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD A,L EMM_F3M_L1: LD L,A @@ -239,14 +240,14 @@ EMM_F3M_L1: JR NZ,EMM_F3M_L1 ; продолжать EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A LD A,0 ;!FIXIT недокументировано AND A RET EMM_FN3M_ERR: EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A LD A,2 ;!FIXIT недокументировано SCF RET @@ -273,13 +274,13 @@ EMM.GetMemPageRMD: ;EMM_FN4M: EMM.GetMemPage: LD L,A - IN A,(SLOT2) + IN A,(SLOT1) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A INC B - LD H,high (SYS_PAGE.RAMD_FAT - #4000) + LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) EMM_F4M_L1: LD A,(HL) AND A @@ -292,14 +293,14 @@ EMM_F4M_L1: EMM_F4M_ERR: LD L,A EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A LD A,L SCF RET EMM_F4M_END: EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A LD A,L AND A RET @@ -319,14 +320,14 @@ EMM.GetMemPageNext: AND A SCF RET Z - IN A,(SLOT2) + IN A,(SLOT1) LD H,A LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A LD A,H - LD H,high (SYS_PAGE.RAMD_FAT - #4000) + LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD L,(HL) - OUT (SLOT2),A + OUT (SLOT1),A LD A,L AND A SCF @@ -361,14 +362,14 @@ EMM.GetMemBlkPages: CP #FF JR Z,.end ; - IN A,(SLOT2) + IN A,(SLOT1) LD C,A LD A,SYS_PAGE - OUT (SLOT2),A - LD H,high (SYS_PAGE.RAMD_FAT - #4000) + OUT (SLOT1),A + LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD L,(HL) LD A,C - OUT (SLOT2),A + OUT (SLOT1),A ; INC B JR NZ,.loop @@ -450,105 +451,105 @@ BLK_RD_WR: PUSH HL PUSH BC - LD C,SLOT2 + LD C,SLOT1 IN B,(C) - ld h,a + LD H,A LD A,SYS_PAGE - OUT (SLOT2),A - ld a,h + OUT (SLOT1),A + LD A,H - LD H,high (SYS_PAGE.RAMD_FAT - #4000) + LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD L,A INC D -RAMD_LOOP_D: +.RAMD_LOOP_D: DEC D - JR Z,NOT_FOUR_BLK + JR Z,.NOT_FOUR_BLK LD L,(HL) LD L,(HL) LD L,(HL) LD L,(HL) - JR RAMD_LOOP_D + JR .RAMD_LOOP_D -NOT_FOUR_BLK: +.NOT_FOUR_BLK: LD A,E .loop: SUB #40 - JR C,NOT_ONE_BLK + JR C,.NOT_ONE_BLK LD L,(HL) JR .loop -NOT_ONE_BLK: +.NOT_ONE_BLK: AND #3F - LD D,A ; DE - ADRESS in RAM-Disk + LD D,A ; DE - ADRESS in RAM-Disk LD E,0 - LD A,L ; L - текущий банк RAM-Disk + LD A,L ; L - текущий банк RAM-Disk - OUT (C),B ; восстановить страницу + OUT (C),B ; восстановить страницу - POP BC ; длина данных - POP HL ; адрес буфера + POP BC ; длина данных + POP HL ; адрес буфера BIT 7,H - JR NZ,BLK_PAGE1 ; !!!!! JR NZ,BLK_PAGE1 ? + JR NZ,.BLK_PAGE1 ; !!!!! JR NZ,BLK_PAGE1 ? -BLK_PAGE3: ; !TODO переделать на SLOT ????? +.BLK_PAGE3: ; !TODO переделать на SLOT ????? LD C,SLOT3 IN C,(C) OUT (SLOT3),A SET 7,D SET 6,D - JR BLK_CONT1 + JR .BLK_CONT1 -BLK_PAGE1: +.BLK_PAGE1: LD C,SLOT1 IN C,(C) OUT (SLOT1),A RES 7,D SET 6,D -BLK_CONT1: ; DE - RamDisk, HL - data +.BLK_CONT1: ; DE - RamDisk, HL - data EX AF,AF' - JR Z,NO_EX_RW1 ; WRITE + JR Z,.NO_EX_RW1 ; WRITE EX DE,HL ; for READ -NO_EX_RW1: +.NO_EX_RW1: EX AF,AF' LD A,16 -BLK_LL1: +.BLK_LL1: DUP 16 LDI EDUP DEC A - JR NZ,BLK_LL1 + JR NZ,.BLK_LL1 EX AF,AF' - JR Z,NO_EX_RW2 ; WRITE + JR Z,.NO_EX_RW2 ; WRITE EX DE,HL ; for READ -NO_EX_RW2: +.NO_EX_RW2: EX AF,AF' ; DEC C прокрутился 256 раз и вернулся INC B ; B уже уменьшился на 1, DEC B - JP Z,BLK_EXIT_1 + JP Z,.BLK_EXIT_1 BIT 6,D - JP NZ,BLK_CONT1 + JP NZ,.BLK_CONT1 BIT 7,D - JR Z,BLK_PAGE3_X + JR Z,.BLK_PAGE3_X IN A,(SLOT1) LD E,A - LD D,#42 + LD D,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD A,SYS_PAGE OUT (SLOT1),A LD A,(DE) OUT (SLOT1),A LD DE,#4000 - JP BLK_CONT1 + JP .BLK_CONT1 -BLK_PAGE3_X: +.BLK_PAGE3_X: IN A,(SLOT3) LD E,A LD D,#C2 @@ -559,7 +560,7 @@ BLK_PAGE3_X: LD DE,#C000 BIT 7,H - JP Z,BLK_CONT1 + JP Z,.BLK_CONT1 LD E,A LD A,C @@ -569,17 +570,17 @@ BLK_PAGE3_X: LD A,E OUT (SLOT1),A LD DE,#4000 - JP BLK_CONT1 + JP .BLK_CONT1 -BLK_EXIT_1: +.BLK_EXIT_1: LD A,D DEC A RLCA LD A,C - JR C,BLK_EXIT_2 + JR C,.BLK_EXIT_2 OUT (SLOT1),A RET -BLK_EXIT_2: +.BLK_EXIT_2: OUT (SLOT3),A AND A RET @@ -794,17 +795,17 @@ RAMD_CALC_PAGE: ; A - Number (0..15) GET_RAMD_NUM: EX AF,AF' - IN A,(SLOT2) + IN A,(SLOT1) EX AF,AF' - LD BC,SYS_PAGE * 256 + SLOT2 + LD BC,SYS_PAGE * 256 + SLOT1 OUT (C),B - LD HL,SYS_PAGE.RAMD_KEYS-#4000 + LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000 LD BC,SYS_PAGE.RAMD_KEYS.NUM CPIR EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A EX AF,AF' SCF @@ -830,17 +831,17 @@ GET_RAMD_ST: PUSH BC - LD HL,SYS_PAGE.RAMD_KEYS-#4000 + LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000 ADD A,L LD L,A - IN A,(SLOT2) + IN A,(SLOT1) LD B,A LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A LD C,(HL) LD A,B - OUT (SLOT2),A + OUT (SLOT1),A LD A,C POP BC AND A @@ -861,12 +862,12 @@ BLK_TO_RAMD: PUSH HL LD L,A - IN A,(SLOT2) + IN A,(SLOT1) LD C,A LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A LD A,L - LD HL,SYS_PAGE.RAMD_KEYS-#4000 + LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000 ADD A,L LD L,A LD A,(HL) ; ключ блока @@ -875,7 +876,7 @@ BLK_TO_RAMD: LD (HL),B LD A,C - OUT (SLOT2),A + OUT (SLOT1),A LD A,B AND A @@ -884,7 +885,7 @@ BLK_TO_RAMD: BLK_BUSY: LD A,C - OUT (SLOT2),A + OUT (SLOT1),A SCF POP HL @@ -905,12 +906,12 @@ RAMD_CLEAR: PUSH HL LD L,A - IN A,(SLOT2) + IN A,(SLOT1) LD C,A LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A LD A,L - LD HL,SYS_PAGE.RAMD_KEYS-#4000 ; RAM-Disk свободен + LD HL,SYS_PAGE.RAMD_KEYS-#4000 - #4000 ; RAM-Disk свободен ADD A,L LD L,A LD B,A ; запомнить удаляемый рамдиск @@ -919,7 +920,7 @@ RAMD_CLEAR: JR Z,BLK_BUSY ; возврат с ошибкой LD (HL),0 LD A,C - OUT (SLOT2),A + OUT (SLOT1),A AND A POP HL @@ -945,19 +946,19 @@ EMM.DivMemBlocks: RET C LD D,A - IN A,(SLOT2) + IN A,(SLOT1) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT2),A + OUT (SLOT1),A - LD H,high (SYS_PAGE.RAMD_FAT - #4000) + LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD L,D LD A,(HL) - LD (HL),0FFH + LD (HL),#FF LD B,A EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A LD A,E AND A @@ -974,35 +975,36 @@ EMM.DivMemBlocks: ; выход: А - блок EMM.MergeMemBlocks: LD E,A - IN A,(SLOT2) + IN A,(SLOT1) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT2),A - LD H,high (SYS_PAGE.RAMD_FAT - #4000) + OUT (SLOT1),A + LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD L,E LD C,B LD B,0 -EMM_ADD_L: +.EMM_ADD_L: LD A,(HL) AND A - JR Z,EMM_ADD_ERR - CP 0FFH - JR Z,EMM_ADD_NEXT + JR Z,.EMM_ADD_ERR + CP #FF + JR Z,.EMM_ADD_NEXT LD L,A - DJNZ EMM_ADD_L -EMM_ADD_ERR: + DJNZ .EMM_ADD_L + +.EMM_ADD_ERR: EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A SCF RET -EMM_ADD_NEXT: +.EMM_ADD_NEXT: LD A,C AND A - JR Z,EMM_ADD_ERR + JR Z,.EMM_ADD_ERR LD (HL),A EX AF,AF' - OUT (SLOT2),A + OUT (SLOT1),A AND A LD A,E RET diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index d329567..dfc9e93 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -20,7 +20,7 @@ DEFINE TEST_INT 1 ; Тестовый обработчик пользовательского INT DEFINE NEW_FEATURE 0 ; !TODO пункты в сетап DEFINE HDDwriteProtect 0 - DEFINE RECOVERYmountTYPE 1 ; 1 - быстрый немного захардкоженый вариант. 2 - более "правильный" + DEFINE RECOVERYmountTYPE 2 ; 1 - быстрый немного захардкоженый вариант. 2 - более "правильный" DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY всегда грузится в диск 15, 2 - ищется свободный рамдиск и если такого нет, то занимается 15ый DEFINE FDD_NormalCount 0 ; \ No newline at end of file diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 3c046d8..64067dc 100755 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ