diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index 2677159..1f89b62 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -273,7 +273,7 @@ sys: .WRITE_PROTECT EQU #18 ; 24 - защита записи .READ_ERROR EQU #19 ; 25 - ошибка чтения .WRITE_ERROR EQU #1A ; 26 - ошибка записи -;.GENERAL_FAILURE EQU #1B ; 27 - общая ошибка +;.GENERAL_FAILURE EQU #1B ; 27 - общая ошибка .DRIVE_FAILURE EQU #1B ; 27 - сбой диска ;.RESERVED_28 EQU #1C ; 28 - зарезервирован ;.RESERVED_29 EQU #1D ; 29 - зарезервирован diff --git a/macroses/macros.z80 b/macroses/macros.z80 index 8a1f2b7..3eede33 100644 --- a/macroses/macros.z80 +++ b/macroses/macros.z80 @@ -140,6 +140,72 @@ ENDM ;======================================= +;======================================= + MACRO _mCHECK_SYS_VERSIONS dss_v, dss_m, dss_b, bios_v, bios_m + + DEFINE MIN_DSS_VERSION dss_v*256 + dss_m + DEFINE MIN_DSS_BUILD dss_b + DEFINE MIN_BIOS_VERSION bios_v*256 + bios_m + ; + DEFINE TXT_DSS_VERSION ('0'+dss_v),\ + '.',\ + ('0'+dss_m/10),\ + ('0'+dss_m-(dss_m/10)*10),\ + '.',\ + ('0'+dss_b/100),\ + ('0'+(dss_b/10 - dss_b/100*10)),\ + ('0'+(dss_b - dss_b/10*10)) ; + ; + DEFINE TXT_BIOS_VERSION '0'+bios_v,\ + '.',\ + '0'+bios_m/10,\ + '0'+bios_m-(bios_m/10)*10 + ; + LD C,Dss.Version + RST ToDSS + JR C,.Error_DOS + LD HL,MIN_DSS_VERSION + EX DE,HL + SBC HL,DE + JR C,.Error_DOS + ; + LD HL,-(MIN_DSS_BUILD) + ADD HL,BC + JR NC,.Error_DOS + ; + LD C,BIOS.DRV_VERSION + RST ToBIOS + JR C,.Error_BIOS + LD HL,-(MIN_BIOS_VERSION) + ADD HL,DE + RET C +.Error_BIOS: + LD HL,.MSG.Error_BIOS + JR .next +.Error_DOS: + LD HL,.MSG.Error_DSS +.next: LD C,Dss.PChars + RST ToDSS + ; +.loop: LD B,DSS_Error.sys.COMMON_ERROR +.error: LD C,Dss.Exit + RST ToDSS + JR .loop + ; +.MSG.Error_BIOS: + DB "\r\nERROR! Uncompatible version of BIOS. Needs version ",TXT_BIOS_VERSION," or higher.\r\n",0 +.MSG.Error_DSS: + DB "\r\nERROR! Uncompatible version of DSS. Needs version ",TXT_DSS_VERSION," or higher.\r\n",0 + ; + UNDEFINE MIN_DSS_VERSION + UNDEFINE MIN_DSS_BUILD + UNDEFINE MIN_BIOS_VERSION + UNDEFINE TXT_DSS_VERSION + UNDEFINE TXT_BIOS_VERSION + ENDM + +;======================================= + ;======================================= MACRO _mCollectInfo_begin IF COLLECT_INFO