TempleOSTS_130707.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:45 +02:00
1 parent 17b71f1a2d
commit 1343005a29
617 files changed
+14399 -25130

No files matched your search

+33 -54
View File
@@ -4,19 +4,14 @@
//Kernel module: Kernel.BIN.Z
#define KERNEL_BIN_C "Kernel.BIN.C"
//Must be first dir on CD.
#define BOOT_DIR "/0000Boot"
//Must be first file on CD.
#define BOOT_DIR_KERNEL_BIN_C BOOT_DIR "/0000" KERNEL_BIN_C
//Stage 2 of master boot loader
#define BOOTMHD2_BIN_C "/0000Boot/BootMHD2.BIN.C"
#define BOOTMHD2_BIN_C BOOT_DIR "/BootMHD2.BIN.C"
//Old master boot record
#define OLDMBR_BIN_C "/0000Boot/OldMBR.BIN.C"
//CD-ROM patched Boot Loader
#define BOOTCD_BIN_Z "/0000Boot/BootCD.BIN.Z"
#define OLDMBR_BIN_C BOOT_DIR "/OldMBR.BIN.C"
if (IsDrvWritable)
MkDir("/Temp"); //Good to have a Temp
@@ -25,30 +20,7 @@ if (IsDrvWritable)
#include "BootHD"
#include "BootMHD"
#include "BootMHD2"
#help_index "Install;File/Install Related;File/CD DVD"
public Bool CDBootFileCreate()
{
U8 *br;
I64 size=FileSize(BOOT_DIR_KERNEL_BIN_C);
br=CAlloc(CD_BOOT_LOADER_SIZE);
*BCD_BLK_CNT(U16 *)=(size+CD_BLK_SIZE-1)/CD_BLK_SIZE;
//$LK,"CDBOOT","FA:::/TempleOS/Adam/Dsk/DskCDDVD.CPP,CDBOOT"$ writes the following blocks:
//0x14 Preboot
//0x15 Boot-loader ($LK,"BootCD.BIN.C","FI:::/TempleOS/Adam/Boot/BootCD.CPP"$ stored uncompressed in a non-file block)
//0x16 0000Kernel.BIN.C.
//No emulation
//This trick assumes 0000Kernel is first file in first dir.
*BCD_BLK_LO(U32 *)=1+(CD_FILE_OFFSET+CD_BOOT_LOADER_SIZE/BLK_SIZE)/(CD_BLK_SIZE>>BLK_SIZE_BITS);
MemCpy(br,BCD_START,BCD_END-BCD_START);
FileWrite(BOOTCD_BIN_Z,br,CD_BOOT_LOADER_SIZE);
Free(br);
return TRUE;
}
#include "DskCDDVD"
#help_index "Call"
asm {
@@ -61,8 +33,24 @@ _HI_CALL::
CALL RAX
@@05: LEAVE
RET1 8
// ************************************
_HI_MEMCPY::
ENTER 0
PUSH RSI
PUSH RDI
CLD
MOV RDI,U64 SF_ARG1[RBP]
MOV RSI,U64 SF_ARG2[RBP]
MOV RCX,U64 SF_ARG3[RBP]
REP_MOVSB
MOV RAX,RDI
POP RDI
POP RSI
LEAVE
RET1 24
}
_extern _HI_CALL I64 HiCall(U8 *s);
_extern _HI_MEMCPY U8 *HiMemCpy(U8 *dst,U8 *src,I64 cnt);
#help_index "Boot"
public U0 SoftBoot(U8 *filename) //No hardware rst
@@ -74,23 +62,15 @@ public U0 SoftBoot(U8 *filename) //No hardware rst
reg *shutdown,*hi_image2;
if (!(hi_image2=FileRead(filename,&size))) return;
switch (snd_dev) {
case SD_PC_SPEAKER:
break;
case SD_HD_AUDIO:
CallExtStr("HDAudioEnd",TRUE);
break;
}
shutdown=MAlloc(SYS_RESTART_KERNEL_END-SYS_RESTART_KERNEL,Fs->code_heap);
hi_image=MAlloc(size,Fs->code_heap);
MemCpy(hi_image,hi_image2,size);
HiMemCpy(hi_image,hi_image2,size);
Free(hi_image2);
hi_image->boot_base=lo_image(U8 *)+sizeof(CBinFile);
hi_image->boot_patch_table_base=lo_image(U8 *)+hi_image->h.loader_patch_table_offset;
MemCpy(&hi_image->sys_mem_E801,&lo_image->sys_mem_E801,2*2);
MemCpy(&hi_image->sys_mem_E820,&lo_image->sys_mem_E820,NUM_MEM_E820_ENTRIES*MEM_E820_ENTRY_SIZE);
HiMemCpy(&hi_image->sys_mem_E801,&lo_image->sys_mem_E801,2*2);
HiMemCpy(&hi_image->sys_mem_E820,&lo_image->sys_mem_E820,NUM_MEM_E820_ENTRIES*MEM_E820_ENTRY_SIZE);
hi_image->sys_gr_mode=lo_image->sys_gr_mode;
hi_image->sys_pci_busses=lo_image->sys_pci_busses;
hi_image->boot_code=BOOT_CODE_RAM;
@@ -99,9 +79,9 @@ public U0 SoftBoot(U8 *filename) //No hardware rst
if (mp_cnt>1)
MPHalt;
MemCpy(shutdown,SYS_RESTART_KERNEL,SYS_RESTART_KERNEL_END-SYS_RESTART_KERNEL);
MemCpy(&hi_image->sys_gdttab,&lo_image->sys_gdttab,GDT_SIZE);
MemCpy(lo_image,hi_image,size);
HiMemCpy(shutdown,SYS_RESTART_KERNEL,SYS_RESTART_KERNEL_END-SYS_RESTART_KERNEL);
HiMemCpy(&hi_image->sys_gdttab,&lo_image->sys_gdttab,GDT_SIZE);
HiMemCpy(lo_image,hi_image,size);
HiCall(shutdown);
}
@@ -168,7 +148,7 @@ public Bool MakeOSInstallPrtBootLoader(U8 src_drv=0,U8 dst_drv=0)
//the code on that drive and update the boot sect.
//If you are making a bootable CD-ROM you supply a dst_drv.
//See $LK-A,"::/TempleOS/Demo/MakeDistro.CPP.Z"$
//See $LK-A,"::/TempleOS/Demo/MakeDistro.CPP"$
//See $LK,"Install Documentation","FI:::/TempleOS/Doc/Install.TXT"$
@@ -202,7 +182,6 @@ public Bool MakeOSInstallPrtBootLoader(U8 src_drv=0,U8 dst_drv=0)
switch (bdev->type) {
case BDT_ATAPI:
Move("/TempleOS/Kernel/Kernel.BIN.Z",BOOT_DIR_KERNEL_BIN_C);
CDBootFileCreate;
result=TRUE;
break;
case BDT_RAM:
@@ -214,9 +193,9 @@ public Bool MakeOSInstallPrtBootLoader(U8 src_drv=0,U8 dst_drv=0)
Free(de.full_name);
"Modifying partition boot record.\n";
RBlks(p,&br,p->offset,1);
br.jump_and_nop[0]=0xEB;
br.jump_and_nop[1]=0x58;
br.jump_and_nop[2]=0x90;
br.jump_and_nop[0]=OC_JMP_REL8;
br.jump_and_nop[1]=offset(CFAT32Boot.code)-2;
br.jump_and_nop[2]=OC_NOP;
*BHD_BLK_CNT(U16 *)=(de.size+BLK_SIZE-1)>>BLK_SIZE_BITS;
*BHD_DAP_BLK(I64 *)=p->data+de.cluster*p->spc;
for (i=0;i<BHD_END-BHD_CODE;i++)
@@ -243,8 +222,8 @@ public U0 OldMasterBootRead(U8 src_drv,U8 dst_drv)
CMasterBoot mbr;
Drv(dst_drv);
p=Fs->cur_prt;
if (p->type!=PT_NATIVE && p->type!=PT_FAT32)
PutDefineErr("ST_NOT_NATIVE");
if (p->type!=PT_REDSEA && p->type!=PT_FAT32)
PutDefineErr("ST_NOT_REDSEA");
else {
//Bypass partition bounds-checking
BlkDevLock(bdev);
@@ -312,8 +291,8 @@ public Bool InstallMasterBootLoader(U8 drv_let,U8 *drv_lst=NULL)
Drv(drv_let);
p=Fs->cur_prt;
if (p->type!=PT_NATIVE && p->type!=PT_FAT32)
PutDefineErr("ST_NOT_NATIVE");
if (p->type!=PT_REDSEA && p->type!=PT_FAT32)
PutDefineErr("ST_NOT_REDSEA");
else {
bdev=Drv2BlkDev(drv_let);
if (!FileFind(OLDMBR_BIN_C,,FUF_JUST_FILES))