;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ; затрётся после инициализации ;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ; Первый старт системы, после инициализации адрес в таблице меняется на VERSION ;-----------------------------------------------------------------------; F_START: DI ; загрузка с активного раздела, а не с первого LD H,A LD (.saveDRV),HL ; H - номер устройства, L - номер раздела на устройстве ; LD HL,0 ; писать в никуда LD C,BIOS.FN_VERSION RST ToBIOS JR C,.err_oldBIOS EX DE,HL LD DE,MINIMUM_BIOS_VERSION SBC HL,DE JR C,.err_oldBIOS ; .good: CALL DEPLOY ;эта процедура затрётся после исполнения RET C CALL KEYBOARD_INIT CALL PRINT_INIT LD C,Dss.Mouse.Init RST ToDSS.Mouse LD A,(VMODE) LD C,Dss.Mouse.SetVideoMode RST ToDSS.Mouse ; LD C,Dss.DRV.Init RST ToDSS.DRV LD (LDRIVE),A ; загрузка с активного раздела, а не с первого .saveDRV+1: LD HL,0 ; H - номер устройства, L - номер раздела на устройстве CALL BOOTDSK.SET RET C ; EI ;Set new address fn. VERSION LD HL,DSS_API_TABLE LD (HL),low VERSION INC H LD (HL),high VERSION JP CLEAR_BUFFER_AND_INIT_PROC ; .err_oldBIOS: IN A,(SLOT0) OUT (SLOT3),A LD HL,.err_oldBIOS_message + SLOT3.MEM_ADDR CALL PCHARS SCF RET .err_oldBIOS_message: DB "\r\nWARNING! This version of DSS requires BIOS v" DB STR_MINIMUM_BIOS_VERSION DZ " or later to boot from IDE." ;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------; DEPLOY: ;Allocate memory LD BC,USING_MEMPAGES*256 + BIOS.GetMem RST ToBIOS RET C LD C,A ; IN A,(SLOT3) PUSH AF IN A,(SLOT0) LD (DRV_CONTENT + DRIVES_DRIVER.DRV_PAGE.MAIN_PAGE_NUMBER),A OUT (SLOT3),A ; LD A,C LD HL,BANKTBL + #C000 LD C,BIOS.GetMemBlkPages RST ToBIOS ; должна идти после GetMemBlkPages, чтоб вместо ; закрывашки #FF поставить страницу COREPAGE LD HL,BANKTBL + COREPAGE IN A,(SLOT0) LD (HL),A ; для API драйвера мышки LD (DRIVES_DRIVER.MOUSE_HANDLER.CorePage),A LD A,(BANKTBL + DRVPAGE) LD (RST_0x30.drv_page),A ; POP AF OUT (SLOT3),A SET_PAGE_X DRVPAGE PUSH AF ; LD HL,DRV_CONTENT LD DE,#C000 LD BC,DRV_CONTENT.SIZE LDIR IN A,(SLOT3) LD (DRV_PG_NUMBER),A ; [ ] CDFS prepare /* SET_PAGE_X FSPAGE ; LD HL,FS_CONTENT LD DE,#C000 LD BC,FS_CONTENT.SIZE LDIR IN A,(SLOT3) LD (FS_PG_NUMBER),A */ ; POP AF OUT (SLOT3),A AND A RET ;-----------------------------------------------------------------------;