diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 245bc47..ef22a44 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -216,7 +216,7 @@ ID_Version: DW BIOS_ver_hex ID_SPRINTER: DB 'Firmware v' .BIOS_ver: DB BIOS_ver_string,' ' IF BETA_BUILD - DB 'BETA 2' + DB BETA_str_ver ELSE DB '[',BUILD_DATE,']' ENDIF diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm index d5d72d5..2be27bf 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm @@ -26,40 +26,39 @@ FDD_5x_GETMED: ;!TEST FDD 720/1440 IF FDD_NormalCount - LD IY,FDD_INI_TABLE.FDD_0 - DEC A - JR C,.getParams - LD IY,FDD_INI_TABLE.FDD_1 + LD IY,FDD_INI_TABLE.FDD_0 + DEC A + JR C,.getParams + LD IY,FDD_INI_TABLE.FDD_1 .getParams: ENDIF - - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A ;!TEST FDD 720/1440 IF FDD_NormalCount - LD L,(IY+1) ;SECTORS - LD H,(IY+2) ;HEADS - LD E,(IY+3) ;CYLINDL - LD D,(IY+4) ;CYLINDH - LD A,(IY+5) ;B_P_S low - LD XL,A - LD A,(IY+6) ;B_P_S High - LD XH,A - LD A,(IY+0) ;F144/720 + LD L,(IY+1) ;SECTORS + LD H,(IY+2) ;HEADS + LD E,(IY+3) ;CYLINDL + LD D,(IY+4) ;CYLINDH + LD A,(IY+5) ;B_P_S low + LD XL,A + LD A,(IY+6) ;B_P_S High + LD XH,A + LD A,(IY+0) ;F144/720 ELSE - LD HL,(FDD_INI_TABLE.FDD_0.SECTORS) - LD DE,(FDD_INI_TABLE.FDD_0.CYLINDL) - LD IX,(FDD_INI_TABLE.FDD_0.BytesPerSector) - LD A,(FDD_INI_TABLE.FDD_0.F144) + LD HL,(FDD_INI_TABLE.FDD_0.SECTORS) + LD DE,(FDD_INI_TABLE.FDD_0.CYLINDL) + LD IX,(FDD_INI_TABLE.FDD_0.BytesPerSector) + LD A,(FDD_INI_TABLE.FDD_0.F144) ENDIF - LD B,A - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - AND A - RET + LD B,A + EX AF,AF' + OUT (SLOT3),A + ;EX AF,AF' + AND A + RET ;[]===========================================================[] ;Function: Set Current Media Parameters @@ -149,9 +148,9 @@ FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off XOR A OUT (FDC_93.Track),A IN A,(FDC_93.Command) - LD C,A + ;LD C,A CALL SET_DOS_OFF - LD A,C + ;LD A,C AND A JP SAVE_INTERRUPTS.restore ;RET @@ -164,7 +163,7 @@ FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off OUT (FDC_93.DrvCTRL),A CALL SET_DOS_OFF ; CF=1 - LD A,4 ;NOT READY /NO DISK/ + LD A,BIOS.Error.NotReady ;POP AF JP SAVE_INTERRUPTS.restore @@ -208,7 +207,7 @@ FDD_5x_LONG_READ: PUSH BC CALL SET_DOS_ON CALL S_FDD - CALL SPEED + CALL SET_SPEED CALL NTRACK POP BC EX DE,HL @@ -233,7 +232,7 @@ FDD_5x_LONG_READ: PUSH BC PUSH HL CALL READ_SECTOR - JP C,ERRDOS + JR C,ERRDOS LD D,YH LD E,YL POP HL @@ -256,7 +255,7 @@ FDD_5x_LONG_READ: LD A,C INC E CP E - JP NZ,.NINC_T + JR NZ,.NINC_T LD E,0 INC D .NINC_T: DJNZ .DSK_LP @@ -353,7 +352,7 @@ FDD_5x_LONG_WRITE: PUSH BC CALL SET_DOS_ON CALL S_FDD - CALL SPEED + CALL SET_SPEED CALL NTRACK POP BC EX DE,HL @@ -378,7 +377,7 @@ FDD_5x_LONG_WRITE: PUSH BC PUSH HL CALL WR_SEC - JP C,ERRDOS + JR C,ERRDOS LD D,YH LD E,YL POP HL @@ -401,7 +400,7 @@ FDD_5x_LONG_WRITE: LD A,C INC E CP E - JP NZ,.NINC_T2 + JR NZ,.NINC_T2 LD E,0 INC D .NINC_T2: DJNZ .DSK_LP2 @@ -441,9 +440,10 @@ READ_SECTOR: LD D,5 ;RETRY COUNT EX AF,AF' LD A,XH OUT (SLOT3),A - LD B,4 + ; + LD B,4 ; счётчик LD C,FDC_93.Data - LD A,#80 ;COMMAND READ + LD A,#80 ;!HARDCODE COMMAND READ OUT (FDC_93.Command),A .FDR001: IN A,(FDC_93.DrvCTRL) ;WAIT INTRQ or DRQ AND #C0 @@ -472,7 +472,7 @@ READ_SECTOR: LD D,5 ;RETRY COUNT ;R01 ; JP C,ERRRD ;READ ERROR ; !TEST 29/06/2024 ;JP C,.ERR_XRD - JP NC,.NO_ERR_XRD + JR NC,.NO_ERR_XRD DEC D JR Z,.RSTOP JR .RRETRY @@ -482,7 +482,7 @@ READ_SECTOR: LD D,5 ;RETRY COUNT RET Z BIT 2,C JR NZ,.ERDATA - LD A,5 ;SEEK ERROR + LD A,BIOS.Error.Seek DEC D JR Z,.RSTOP PUSH DE @@ -494,7 +494,7 @@ READ_SECTOR: LD D,5 ;RETRY COUNT ; .ERDATA: DEC D ; POTERIA DANNYH JR NZ,.RRETRY -.ERRRD: LD A,9 ;READ ERROR +.ERRRD: LD A,BIOS.Error.Read .RSTOP: EX AF,AF' LD A,#D0 OUT (FDC_93.Command),A ;STOP OPERATION @@ -502,7 +502,7 @@ READ_SECTOR: LD D,5 ;RETRY COUNT BIT 0,C SCF RET Z - LD A,6 ;SECTOR NOT FOUND /NO DISK/ + LD A,BIOS.Error.SectorNotFound RET ; ; ; @@ -554,18 +554,17 @@ WR_SEC: LD D,5 ;RETRY COUNT IN A,(FDC_93.Command) LD C,A ;R01 - JP C,.ERR_XWR -; JP C,ERRWR ;WRITE ERROR + JR C,.ERR_XWR AND #7F RET Z BIT 6,C - LD A,8 ;WRITE PROTECT + LD A,BIOS.Error.WriteProtect JR NZ,.WSTOP BIT 2,C JR NZ,.EWDATA - LD A,5 ;SEEK ERROR + LD A,BIOS.Error.Seek DEC D - JP Z,.WSTOP + JR Z,.WSTOP .ERR_XWR: PUSH DE CALL RESWG ; RESET_WG @@ -576,7 +575,7 @@ WR_SEC: LD D,5 ;RETRY COUNT .EWDATA: DEC D ; POTERIA DANNYH JR NZ,.WRETRY -.ERRWR: LD A,10 ;WRITE ERROR +.ERRWR: LD A,BIOS.Error.Write .WSTOP: EX AF,AF' LD A,#D0 OUT (FDC_93.Command),A ;STOP OPERATION @@ -584,7 +583,7 @@ WR_SEC: LD D,5 ;RETRY COUNT BIT 0,C SCF RET Z - LD A,6 ;SECTOR NOT FOUND /NO DISK/ + LD A,BIOS.Error.SectorNotFound RET @@ -605,21 +604,6 @@ SET_DOS_OFF: OUT (SYS_PORT.ROM),A ; - CLOSE EX AF,AF' RET -; - -; -FDD.SET720: - LD A,FDD_Density.SET_720 - OUT (FDD_Density),A - RET -; - -; -FDD.SET1440: - LD A,FDD_Density.SET_1440 - OUT (FDD_Density),A - RET -; ; S_FDD: PUSH BC @@ -656,85 +640,81 @@ S_FDD: PUSH BC ; ; -TURNSPD: - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.F144) - XOR #80 - LD (FDD_INI_TABLE.FDD_0.F144),A - AND #80 - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - JP Z,FDD.SET720 - JP FDD.SET1440 ;NZ +CHANGE_SPEED: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(FDD_INI_TABLE.FDD_0.F144) + XOR #80 + LD (FDD_INI_TABLE.FDD_0.F144),A + AND #80 + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + JR Z,FDD.SET720 + ;JP FDD.SET1440 ;ZF=0 +FDD.SET1440: LD A,FDD_Density.SET_1440 + OUT (FDD_Density),A + RET ; - -; -SPEED: IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.F144) - AND #80 - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - JP Z,FDD.SET720 - JP FDD.SET1440 ;NZ ; +SET_SPEED: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(FDD_INI_TABLE.FDD_0.F144) + AND #80 + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + JR NZ,FDD.SET1440 + ;JR FDD.SET720 ;ZF=1 +FDD.SET720: LD A,FDD_Density.SET_720 + OUT (FDD_Density),A + RET ; прерывания должны быть отключены -DISK_ID: - ;DI - EXX - CALL SPEED - IN A,(FDC_93.Track) - OUT (FDC_93.Data),A - LD A,#18 ;!TODO выписать комманды ВГ ;SEARCH ; !HARDCODE - CALL EXECOM - LD C,4 -.ID_LP0: - LD A,#C0 - OUT (FDC_93.Command),A - LD HL,#F000 -.ID_LP1: - IN A,(FDC_93.DrvCTRL) - AND #C0 - JR Z,.ID_LP4 -.ID_LP2: - IN A,(FDC_93.Data) -.ID_LP3: - IN A,(FDC_93.DrvCTRL) - AND #C0 - JR Z,.ID_LP3 - JP P,.ID_LP2 - EXX - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.F144) - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - AND #80 - ;EI - RET -.ID_LP4: - DEC HL - LD A,H - OR L - JP NZ,.ID_LP1 - CALL TURNSPD - DEC C - JP NZ,.ID_LP0 - EXX - SCF - ;EI - RET +DISK_ID: EXX + CALL SET_SPEED + IN A,(FDC_93.Track) + OUT (FDC_93.Data),A + LD A,#18 ;!TODO выписать комманды ВГ ;SEARCH ; !HARDCODE + CALL EXECOM + LD C,4 ; счётчик +.loop_reg_C: LD A,#C0 + OUT (FDC_93.Command),A + LD HL,#F000 ; счётчик +.loop_reg_HL: IN A,(FDC_93.DrvCTRL) + AND #C0 + JR Z,.ID_LP4 + ; +.ID_LP2: IN A,(FDC_93.Data) +.ID_LP3: IN A,(FDC_93.DrvCTRL) + AND #C0 + JR Z,.ID_LP3 + JP P,.ID_LP2 + EXX + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(FDD_INI_TABLE.FDD_0.F144) + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + AND #80 + RET + ; +.ID_LP4: DEC HL + LD A,H + OR L + JR NZ,.loop_reg_HL + CALL CHANGE_SPEED + DEC C + JR NZ,.loop_reg_C + EXX + SCF + RET ; ; @@ -793,16 +773,17 @@ P50ms: LD A,12 ; RESWG: LD A,8 EXECOM: OUT (FDC_93.Command),A - LD HL,#0000 + LD HL,#0000 ; счётчик .WREST: DEC HL LD A,H OR L SCF RET Z + ; IN A,(FDC_93.DrvCTRL) AND #80 JR Z,.WREST - AND A + ;AND A RET ; diff --git a/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM b/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM index 95301d1..cf5edb6 100644 --- a/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM @@ -1,5 +1,5 @@ ;[ ] 18/12/2023. добавление/допиливание API CD-ROM (ATAPI) - +;██████████████████████████████████████████████████████████████████████████ ;CD ROM DRIVE DRIVER ;--------------------------------------------------------------- ;Rev Date Name Description @@ -156,6 +156,7 @@ TRAY_FN: ;----------------------------------------------------------------------; ; INPUT: HL - AP paket (12bytes) ; RETURN: CF - ERROR +; !TODO CD ERRORS to INCLUDES ; #01 - RECOVERED ERROR ; #02 - NOT READY ; #03 - MEDIUM ERROR @@ -284,7 +285,7 @@ AP_COM: EXX IN A,(C) AND #02 ;CP #02 - JP NZ,.FROM_CD + JR NZ,.FROM_CD ;.TO_CD: LD BC,IDE.Read.Data .WR_T_CD: diff --git a/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM b/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM index 43ddb30..47d1c9f 100644 --- a/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM @@ -112,10 +112,10 @@ HDD_5x_GETMED: LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh) LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) - LD IX,512 + LD IX,512 ;!HARDCODE sector size EX AF,AF' OUT (SLOT3),A - EX AF,AF' + ;EX AF,AF' AND A RET ;[]================================================================[#58] @@ -144,7 +144,7 @@ HDD_5x_SETMED: LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B EX AF,AF' OUT (SLOT3),A - EX AF,AF' + ;EX AF,AF' AND A RET ;[]================================================================[#59] @@ -184,7 +184,7 @@ HDD_5x_LONG_READ: PUSH HL CALL RDS000 EX DE,HL - JP C,HERRRD0 + JR C,HERRRD0 LD A,XH EX AF,AF' POP HL @@ -645,7 +645,7 @@ WAITPRT: DEC L JR NZ,.loop ; -.error: LD A,BIOS.Error.WaitPort +.error: LD A,BIOS.Error.NotReady SCF RET .ok: POP HL diff --git a/src/bios/exp/EXTENDED/IDE/shared.asm b/src/bios/exp/EXTENDED/IDE/shared.asm index 5cbcabc..9715cc6 100644 --- a/src/bios/exp/EXTENDED/IDE/shared.asm +++ b/src/bios/exp/EXTENDED/IDE/shared.asm @@ -18,7 +18,7 @@ SELECT_DRIVE: LD IY,IDE.INIT_TBL_IDE3 ; JR Z,.channel - LD A,BIOS.Error.BadDrvNumber + LD A,BIOS.Error.BadNumber SCF RET ; @@ -46,7 +46,7 @@ SELECT_DRIVE: CP C EXX SCF - LD A,BIOS.Error.BadDrvNumber + LD A,BIOS.Error.BadNumber RET NZ ; LD A,B @@ -96,5 +96,5 @@ DRV_DETECT: OUT (C),B RET Z SCF -.error: LD A,BIOS.Error.BadDrvNumber +.error: LD A,BIOS.Error.BadNumber RET \ No newline at end of file diff --git a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm index deb1421..6c3afe0 100644 --- a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm +++ b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm @@ -53,7 +53,7 @@ RMD_5x_GETMED: JR NC,.loop ; CF==1, A==0 - ошибка, A==#FF - ok INC A - RET NZ ; если выходит, то с фдагами CF==1, ZF==1 + RET NZ ; если выходит, то с флагами CF==1, ZF==1 LD E,B LD B,C diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM index d85fb65..a5c09fc 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -19,7 +19,7 @@ EMM.GetMemSize: JR NZ,.loop INC C JR .loop -.exit: LD HL,#100 +.exit: LD HL,#100 ;!HARDCODE max mem pages LD A,B LD B,0 OUT (SLOT1),A @@ -31,7 +31,7 @@ EMM.GetMemSize: ; стеком, там может быть SP в режиме спектрума ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + +;----------------------------------------------------------------------; ; Инициализация распределения памяти. EMM.InitMem: PUSH BC @@ -116,7 +116,7 @@ RESERVED_PAGES: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + +;----------------------------------------------------------------------; ; Получить блок памяти N bytes, ; Вход: B - число необходимых блоков ; Выход: L,A - КЛЮЧ RAM-Disk/код ошибки @@ -262,7 +262,7 @@ EMM_F3M_L1: EMM_FN3M_ERR: EX AF,AF' OUT (SLOT3),A - LD A,2 ;!HARDCODE error code + LD A,BIOS.Error.BadNumber SCF RET ;----------------------------------------------------------------------; @@ -956,7 +956,7 @@ GET_RAMD_ST: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + +;----------------------------------------------------------------------; ; RAM-Disk A, BLK - B BLK_TO_RAMD: CP SYS_PAGE.RAMD_KEYS.NUM @@ -1000,7 +1000,7 @@ BLK_BUSY: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + +;----------------------------------------------------------------------; ; RAM-Disk A RAMD_CLEAR: CP SYS_PAGE.RAMD_KEYS.NUM @@ -1035,7 +1035,7 @@ RAMD_CLEAR: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + +;----------------------------------------------------------------------; ; разделить блок памяти на два блока ; A - блок, B - длина первого блока после разделения ; выход: A - блок 1, B - блок 2 @@ -1073,7 +1073,7 @@ EMM.DivMemBlocks: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + +;----------------------------------------------------------------------; ; слить два блока памяти в один ; А - блок 1, B - блок 2 ; выход: А - блок diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 150ba86..6c248da 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -1,6 +1,9 @@ ; ;---------[All shared defines]---------- DEFINE BETA_BUILD 1 ; добавляет строку и сообщение о тестовой сборке на стартовом экране + IF BETA_BUILD + DEFINE BETA_str_ver 'BETA 3' + ENDIF DEFINE PACKED_MAIN 0 ; паковать MAIN или влезает без этого? DEFINE SP2000_Loader_Flag #0107 DEFINE IDE_Optimization 1 ; слегка оптимизирует некоторые процедуры работы с HDD diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index acdef4c..bcb3770 100755 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ