1
0
Fork 0
mirror of https://github.com/CTCaer/hekate.git synced 2024-11-26 19:52:11 +00:00
Commit graph

246 commits

Author SHA1 Message Date
CTCaer
af0cd34f92 l4t: Add panic dump (PSTORE) 2020-07-19 20:32:22 +03:00
CTCaer
b8ca88ee0a exo: Change fatal names and add stack overflow 2020-07-18 12:53:05 +03:00
CTCaer
32e58d2bb3 hw init: Cosmetic refactoring 2020-07-17 18:08:27 +03:00
CTCaer
ab5b59e10d Refactor fatal/hard error names 2020-07-14 22:41:48 +03:00
CTCaer
98e05d941d Bump hekate to v5.3.0 and Nyx to v0.9.2 2020-06-15 17:33:20 +03:00
CTCaer
f689bb253e nyx: Add simple CAL0 info 2020-06-15 15:03:14 +03:00
CTCaer
2aa9055fae Various fixes 2020-06-15 14:58:50 +03:00
CTCaer
6e256d29c7 Utilize hekate's BDK for hekate main and Nyx 2020-06-14 16:45:45 +03:00
CTCaer
bb2b339b54 ianos: Remove sd (un)mount usage 2020-06-14 13:17:26 +03:00
CTCaer
0096b91146 Add corrupted bmp protection 2020-06-14 13:04:13 +03:00
CTCaer
d49a40b0da hekate: Better error prints for failed launching 2020-06-14 02:09:48 +03:00
CTCaer
75c6b01696 power: Always enable low battery protect 2020-06-14 02:05:57 +03:00
CTCaer
780d17e61c tui: Remove menu logo and ifdefs 2020-06-13 18:35:07 +03:00
CTCaer
21548545fc Equalize hekate main and Nyx sd based functions 2020-06-13 18:32:40 +03:00
CTCaer
7dd3178d48 Equalize hekate main and Nyx common functions 2020-06-13 18:16:29 +03:00
CTCaer
f085cbc4a4 Bump hekate to v5.2.1 and Nyx to v0.9.1 2020-05-05 20:40:22 +03:00
CTCaer
7543234401 emummc: Fix emupath folder and add more checks
The checks are checking if the emuMMC was found. If it didn't  and error will be show.
2020-05-05 19:23:31 +03:00
CTCaer
ee8854fa14 So it has come to this. (hekate v5.2.0, Nyx v0.9.0) 2020-05-01 17:33:31 +03:00
CTCaer
1a89246e7f Remove emmc tools from TUI. You will not be missed.
Now that Nyx has Joy-Con support as a fallback, the eMMC backup/restore tools can now be removed from TUI.
2020-04-30 16:25:35 +03:00
CTCaer
abcb1dec46 boot cfg: Allow Launching UMS from boot.
By using `BOOT_CFG_AUTOBOOT_EN` in `boot_cfg` and `EXTRA_CFG_NYX_UMS` in `extra_cfg` you can launch UMS from boot.

The `ums` variable must be populated with one of the following:

```
NYX_UMS_SD_CARD      0
NYX_UMS_EMMC_BOOT0   1
NYX_UMS_EMMC_BOOT1   2
NYX_UMS_EMMC_GPP     3
NYX_UMS_EMUMMC_BOOT0 4
NYX_UMS_EMUMMC_BOOT1 5
NYX_UMS_EMUMMC_GPP   6
```
2020-04-30 14:44:27 +03:00
CTCaer
8c762c52e2 Various fixes and whitespace removal 2020-04-30 03:25:22 +03:00
CTCaer
034f680a8e sd fs: Move sd init/mount/helpers to their own object 2020-04-29 23:20:18 +03:00
CTCaer
5442547a59 sdmmc v2: Name eMMC physical partitions 2020-04-29 22:06:33 +03:00
CTCaer
5b0a0070c7 sdmmc v2: Refactor everything 2020-04-29 18:53:29 +03:00
CTCaer
0462f3b252 Add simple exception handling
This adds support for exception handling.
It should provide simple and fast reporting of crucial info and full restoration without powering off.
2020-04-27 09:56:19 +03:00
CTCaer
4160037c81 emummc: Add boot entry emuMMC selection
Using the key `emupath` on a boot entry will load the selected emuMMC.
This can also be forced by using the correct boot cfg storage bit and writing the path at the emummc path offset. Check readme for these.

This can only be used if the emuMMC was created via Nyx. because of the raw_based and file_based files that have emuMMC info.
(emupath=emuMMC/RAW1, emupath=emuMMC/SD00, etc)
2020-04-27 09:30:53 +03:00
CTCaer
a4c90aeff3 Bump hekate to v5.1.4 and Nyx to v0.8.7 2020-04-14 21:34:59 +03:00
CTCaer
bfe13981bc Disable some options from TUI to lessen codesize v2 2020-04-14 18:11:34 +03:00
CTCaer
ef11dd883a Allow bypassing empty battery charging 2020-04-14 17:55:31 +03:00
CTCaer
5f142b4c86 main: Add empty battery screen
This disables low battery monitor shutdown (LBM shutdown) on boot and checks if battery is enough.

The logic is as follows:

If battery is not enough:
- If not charging and 15s pass, it will re enable LBM shutdown and power off.
- If charging, it will wait until it is charged above the limit.
 Screen will auto turn off to save power. A press on Power button or a change on charger, will enable it for another 15s.

If battery is enough:
- Enables LBM shutdown and continues with the boot process.
2020-04-06 05:54:45 +03:00
CTCaer
52c506af9a tools: Force sparse verification on TUI
Additionally, because the tool relies 100% on sd card, it will become a Nyx only. Remove the config also, as it will be moved to nyx configuration.
2020-04-06 05:36:09 +03:00
CTCaer
9c2202fa39 Bump hekate to v5.1.3 and Nyx to v0.8.6 2020-03-21 22:30:39 +02:00
CTCaer
9c6931a17c Bugfixes
The fan driver change ensures power off in any situation where a chainload software re-enables the 5V regulator.
2020-03-21 22:28:50 +02:00
CTCaer
d50af46b03 chnldr: Support variable sizes of coreboot.rom 2020-03-21 22:18:40 +02:00
CTCaer
f5040f1e41 Update and add missing copyrights
Probably more need to change.
2020-03-14 09:24:24 +02:00
CTCaer
3f10cc774b Bump hekate to v5.1.2 and Nyx to v0.8.5
Additionally disable archive bit fix tool in hekate main to shave binary size.
The archive bit fix in Nyx is the only maintained one and so the only one that should be used.
2020-03-03 04:42:01 +02:00
CTCaer
03a8a11933 Small fixes and changes
- Allow printing of more log on HOS boot when LOGS are OFF.
- A small name refactoring
- Add battery warning symbol when battery < 3200mV
2020-03-03 04:11:13 +02:00
CTCaer
91759aba95 r2p/update: Fix check for the 'if not forced' case
This fixes the following case:
When force is 0 and the payload is not hekate, the function jumps to the 'is old' check.

This skips the is magic value check and only does the version check.

In case the foreign payload has a low value on that offset, it causes an overwrite which is unneeded.
2020-01-17 09:35:16 +02:00
CTCaer
8584493c7f sept: Add support for loading sept from fss0
If `fss0=` key is detected, sept will be loaded from fusee-secondary.bin instead of `sept/sept_*`.

This will negate missing sept and failed to decrypt pkg2 errors, when booting HOS, for users that forget to update sept folder.
2019-12-16 00:53:22 +02:00
CTCaer
562a6fb61d Bump hekate to v5.1.1 and Nyx to v0.8.4 2019-12-12 00:24:13 +02:00
CTCaer
a664118fc7 r2p: Update r2p payload
2 modes:
- With updater2p; Forces the reboot to payload binary to be hekate
- Without; Checks if hekate and then if old
2019-12-12 00:13:32 +02:00
CTCaer
87d376654b util: Update update.bin if old 2019-12-12 00:07:18 +02:00
CTCaer
c6e92311f9 Add error printing for issues with libraries
It will now show erros for the following:
- Missing or old libsys_minerva.bso (DRAM training).
- Missing libsys_lp0.bso (LP0 sleep mode).
- Missing or old Nyx version
2019-12-11 11:22:11 +02:00
CTCaer
d0850516ab Bump hekate to v5.1.0 and Nyx to v0.8.3 2019-12-08 18:59:00 +02:00
CTCaer
f256bd5909 Move all I/DRAM addresses into a memory map
Many addresses were moved around to pack the memory usage!
2019-12-08 02:23:03 +02:00
CTCaer
dbe6ed4060 autoboot: Fix custom bootlogo for boot via id 2019-12-08 01:11:13 +02:00
CTCaer
943477fdde autoboot: Support VOL-+ combo for fastboot
This is conditional:
In order to not cancel booting while trying to enter fastboot in android, the combo MUST be initiated with `VOL+` (hold) -> `VOL-` (hold)
2019-12-07 23:37:07 +02:00
Kostas Missos
edc2b12f0f chainloader: Only unmount if trying to update
This will speed up boot times for some sd cards up to 500ms when running update.bin is not needed (old or same version).
2019-12-07 02:40:56 +02:00
Kostas Missos
0b45a5a11a bpmp: Reduce freq to 589MHz
3 users had issues with 602MHz.
This will probably bring the SoC binning compatibility to 100%.

Additionally, make it easy to change default boost frequency.

The tiny loss in perf, will be mitigated in Nyx. (It's actually even faster)
2019-12-07 02:01:29 +02:00
CTCaer
641a57a4f6 hos/mtc: Add FSP WAR and boost HOS booting times
By implementing FSP WAR we can allow HOS to boot in 1600MHz and be able to switch frequency without hanging.
2019-12-04 21:59:58 +02:00
CTCaer
0b1eebefe1 Small refactor and bugfixes 2019-12-04 21:31:39 +02:00
CTCaer
9a082c1b18 hos: Improve errors more for HOS launch 2019-12-04 17:46:12 +02:00
CTCaer
2c1da3a97d se: Upgrade SE and allow SHA calc continue
- Allow SHA to calculate sizes > 16MB and refactor sha function
- Name various registers and magic numbers
- Fix various key access bugs

In a later commit this new design will boost verification times significantly and also allow full SHA256 hashes.
2019-12-04 17:18:16 +02:00
Kostas Missos
7c42f72b8a refactor: Remove all unwanted whitespace 2019-10-18 18:02:06 +03:00
CTCaer
9104b85143 hos: Improve boot error display 2019-10-09 00:42:13 +03:00
CTCaer
fe339120e2 Bump hekate to v5.0.2 and Nyx to v0.8.2
Also rip hekate main's menu logo.

(It will be back :P)
2019-09-12 23:55:48 +03:00
CTCaer
4dcb2c6343 autoboot: Allow critical info to be shown
This is part of the big refactoring which had all HOS fatal errors.
2019-09-12 23:22:42 +03:00
CTCaer
a8d529cf6a Refactoring and comment adding 2019-09-12 23:08:38 +03:00
Kostas Missos
718e502983 Add more register names + refactoring 2019-09-09 16:56:37 +03:00
CTCaer
02826dd9a6 sdmmc: Streamline power cycle wait for Sandisks U1 2019-08-28 02:39:43 +03:00
CTCaer
f622d57f6b utils: Fix ms timer accuracy
Additionally add BPMP delay timers for future use.
2019-08-28 01:33:38 +03:00
CTCaer
6cc0711382 autoboot: Fix force boot from ID 2019-08-28 01:12:34 +03:00
CTCaer
3472e7e7fb Various bugfixes 2019-08-28 01:08:57 +03:00
CTCaer
31db2735ce autoboot: Add forced boot from ID
By using the key `id=` with a max 7 ASCII id, hekate will search all inis automatically and pinpoint the boot entry with that id.
After that it forces a boot from this one.
2019-08-16 22:00:32 +03:00
ctcaer@gmail.com
101c8bc1d0 Bump hekate to v5.0.1 and Nyx to v0.8.1 2019-07-06 22:43:53 +03:00
ctcaer@gmail.com
2bb0dba724 [Nyx] Add button to force HOS boot screen logs 2019-07-06 22:34:03 +03:00
ctcaer@gmail.com
08b84384a6 Bugfixes and cleanup 2019-07-06 22:08:37 +03:00
ctcaer@gmail.com
01e2302f84 Bump version to v5.0.0 2019-06-30 04:03:42 +03:00
ctcaer@gmail.com
03872e814a [Nyx] Prep hekate main for nyx 2019-06-30 03:55:19 +03:00
ctcaer@gmail.com
52478833de [MTC] Utilize Minerva Training Cell 2019-06-30 03:49:33 +03:00
ctcaer@gmail.com
bd7f572989 [emuMMC] Add support 2019-06-30 03:24:58 +03:00
ctcaer@gmail.com
8101fd3f7f Various bugfixes 2019-06-30 03:15:46 +03:00
ctcaer@gmail.com
03268c4655 Bump version to v4.10.1 2019-04-23 18:23:17 +03:00
ctcaer@gmail.com
36d2da5d79 Bump version to v4.10.0 2019-04-21 17:38:29 +03:00
ctcaer@gmail.com
c80fecd080 [main] Add brick protection for RCM patched units
- If AutoRCM was found enabled, force disable it.
 (In case of chainloading.)
- Additionally disable AutoRCM function.
2019-04-16 20:09:04 +03:00
ctcaer@gmail.com
a2ba2ecf26 Battery "desync" fix is now applied on boot 2019-04-16 19:58:12 +03:00
ctcaer@gmail.com
07fe94b6d4 [exo] Add exosphere panic report save to sd 2019-04-14 04:24:37 +03:00
ctcaer@gmail.com
b0af57f98a [GFX] Refactor gfx to utilize global contexts 2019-04-14 02:30:14 +03:00
ctcaer@gmail.com
961768e14e [sd tools] Utilize sd_file_read better
Additionally fix a long standing fread/fwrite bug, via a FatFS fix.
(Doesn't affect Tegra arch though)
2019-03-16 23:35:43 +02:00
Kostas Missos
ff9671c481 Bump version to v4.9.1 2019-03-10 00:38:18 +02:00
Kostas Missos
be09b68532 Bump version to v4.9 2019-03-09 00:12:08 +02:00
Kostas Missos
50eff41351 [eMMC Tools] Support for partial restore
Co-Authored-By: emvym3two <emvym3two@users.noreply.github.com>
2019-03-09 00:09:36 +02:00
Kostas Missos
dfb5640bfe Performance fixes 2019-03-08 22:18:54 +02:00
Kostas Missos
4f4df9ccd1 [Auto boot] Change order of invoking sept
This is important, otherwise it can break tools like memloader.

Until a semi-usb init solution is found, hekate will show bootlogo and allow you to go to menu.
If >= 7.0.0 after that, it will run sept and then show logo again without a wait. For as long as rebuilding the boot process takes.
2019-03-08 00:35:43 +02:00
Kostas Missos
b1110caed1 [Reloc patcher] Use structs and name more consts 2019-03-08 00:23:19 +02:00
Kostas Missos
e7f72b711a [Utils] btn_wait_timeout
- Allow btn_wait_timeout to be triggered immediately
- Make power options global
2019-03-08 00:22:15 +02:00
Kostas Missos
0ddc1c71a8 Bugfixes and hardcoded naming
- Make debugmode for exosphere mandatory
- Support dev RSA modulus for warmboot
- Fix a critical bug where it allowed free() to be used on a non-heap address.
- Better the makefile
2019-03-08 00:19:04 +02:00
Kostas Missos
4e7c39d6a0 [Logos] Optimize logos and save ~7KB
Additionally stop unneeded frees of menu logo to increase redrwaing performance.
2019-03-08 00:08:39 +02:00
Kostas Missos
72a81e7c2a [gfx] Make gfx context and macros global 2019-03-08 00:02:37 +02:00
Kostas Missos
2e9a89aa20 [Versioning] Better and smarter for update and sept
- Still compatible with old hekate.
- Allows for hotfix control
- Sept is now copied from actual running payload, negating the need to check update.bin
- If a foreign payload is found in sept then it is renamed and hekate copies itself. After sept run, it renames it back and continues with boot.
2019-03-07 23:53:58 +02:00
Kostas Missos
ca68818efe [Boot cfg] Proper usage of storage and structs 2019-03-07 23:41:07 +02:00
Kostas Missos
3b9bf65071 Bump version to v4.8 2019-02-24 03:09:07 +02:00
Kostas Missos
50d4cbbda1 [sept] Auto update sept payload via update.bin
This will check if payload.bin is the same version with update.bin
2019-02-24 03:04:28 +02:00
Kostas Missos
f911fab9f2 [7.0.0-7.0.1] Add full support via Atmosphere's sept 2019-02-24 03:03:17 +02:00
Kostas Missos
2fb37db707 [Boot Config] Add HOS reboot to config
This storage allows you to reboot from HOS to the selected ini boot entry.

In the future it will be used for far more.
2019-02-24 02:43:13 +02:00
Kostas Missos
de830df7e7 Add automatic NOGC based on fuses burnt
Auto NoGC:
0: Force disable, 1: Auto (checks fuses and fw version)

And also remove customlogo. It's redudunt.
2019-02-24 01:06:24 +02:00
Kostas Missos
04907e2823 Bug fixes and refactoring
- Info tools
- Tools
- Tsec
- Many more
2019-02-24 00:59:33 +02:00
Kostas Missos
4f2bbbf101 Fix GPU on Linux when booting from warmboot 2019-02-12 00:46:06 +02:00
Kostas Missos
b677d6cad3 Add max77620-rtc driver & disable alarm on shut off 2019-02-12 00:45:27 +02:00
Kostas Missos
e105634b0d Proper warmboot exploit impl and documentation
Side effect:
Fixed a bug where the dumped patched bootrom had the warmboot exploit patch

Co-Authored-By: Balázs Triszka <balika011@gmail.com>
2018-12-17 21:10:13 +02:00
Kostas Missos
4781dc2ab4 Bump version to v4.6 2018-12-17 02:31:44 +02:00
Kostas Missos
e779e53406 Some tiny fixes 2018-12-17 02:31:00 +02:00
Kostas Missos
98d715243a Fixes to update.bin reloc (breaking!)
This fixes a regression in chainloading update.bin where the added check for if it's update or not, didn't copy the reloc code. And the calling was not updated to reflect this.

Additionally:
- Delete the reloc.S relic
- Force running config_hw in case we change hw init again in the future.
2018-12-16 19:04:46 +02:00
Kostas Missos
0d9aebda7b Fix archive bits V2
It can now fix the whole nintendo folder.

A proposed usage is by using the first option and then the 2nd.
2018-12-16 16:57:49 +02:00
Kostas Missos
30d3c76655 Bugfixes 2018-12-16 16:52:38 +02:00
Yule Hou
71b0975730 Fix debug uart 2018-12-08 12:38:59 +08:00
Kostas Missos
20040ae70f Bump version to v4.5 2018-12-02 11:12:19 +02:00
Kostas Missos
471c1e514c Major refactoring of main.c 2018-11-27 11:45:43 +02:00
Kostas Missos
267a04c4ac Fix HDCP + some bugfixes
Thanks @hexkyz for taking the time to recheck for the missing 6.x changes
2018-11-20 21:32:54 +02:00
Kostas Missos
4eb5b5f91b Name more hardcoded regs/vals 2018-11-10 14:11:42 +02:00
Kostas Missos
cfef8b4f72 Update libminerva to v1.1 2018-11-10 13:30:17 +02:00
Steven Mattera
14cdcc1497 Ignore hidden files when using wildcards. 2018-11-08 19:09:14 -05:00
Kostas Missos
ec1bb508b3 Fix minerva build
This is still for testing it out.
The real usage will come later.
2018-11-05 10:54:31 +02:00
Kostas Missos
cae9044c17 Minerva our DRAM trainer
Supports up to 1600MHz and periodic training.

For more check here: https://github.com/CTCaer/minerva_tc
2018-11-04 03:15:32 +02:00
Hunter
288b5c08db Add "Silent" auto full power off option 2018-09-30 13:24:30 -04:00
Kostas Missos
fac8db4238 Bump version to v4.2 2018-09-24 23:51:36 +03:00
Kostas Missos
04ac8ebd43 Allow verification cancel. Backup still remains. 2018-09-24 23:51:04 +03:00
Kostas Missos
1392e6eaf4 Add use of wildcard "*" for loading kips from a folder 2018-09-24 23:47:35 +03:00
Kostas Missos
381d5c9236 Allow toggling of auto power off from HOS waking 2018-09-24 23:45:06 +03:00
Kostas Missos
2f43b20124 Bugfixes / formating 2018-09-24 23:22:19 +03:00
Kostas Missos
c99ea77daf Bump version to v4.1 2018-09-19 17:58:26 +03:00
Kostas Missos
efc3fc34de Add cancel backup if VOL DOWN + UP are held
- Long press of both buttons cancels the backup process now
- Fixed an issue with partial backup when the resume was happening on the last part
2018-09-19 00:50:23 +03:00
Kostas Missos
89fb29e35e Add support for payloads with broken hw inits 2018-09-19 00:46:32 +03:00
Kostas Missos
b54cbbfc3c Fix version check for the update chainloader 2018-09-19 00:36:40 +03:00
Kostas Missos
fc0f75495e Add auto full power off if woke up from HOS.
Useful for modchips/dongles.
It shows a brief breathing style of hekate logo before powering off completely.
2018-09-19 00:34:05 +03:00
Kostas Missos
7aeac2c379 Add 4/5.X and 6.X hw config changes
Thanks to @balika011 for notice on 2.x vs 5.x changes.

(Some 2.x vs 5.x changes were added with the `fdd94ff` commit)
2018-09-19 00:11:18 +03:00
Kostas Missos
b9e348fc17 Add warnings on missing bootloader libraries 2018-09-19 00:04:58 +03:00
Kostas Missos
67a470921a Add PWM backlight support + options
- No eye blasting backlight
- Option to choose the prefered brightness
- Smooths transitions
2018-09-19 00:01:42 +03:00
Kostas Missos
780736591e Improvements to ini/payload handling
- Allow no hekate_ipl.ini and create it at 1st hekate boot
- Show Payloads/More configs options when no boot entry in main .ini
- Fix black screen on empty ini/payload folders
- Fix some stack corruption with freeing ini lists (wip)
2018-09-18 23:47:37 +03:00
Kostas Missos
fdd94ffd2b General bugfixes + hardcoded name replacement 2018-09-18 23:38:54 +03:00
balika011
532dd6ddee Add ipatch and bootrom dumping 2018-09-10 01:12:28 +02:00
Kostas Missos
6da09b3b93 Bump version to v4.0 2018-08-23 05:06:10 +03:00
Kostas Missos
7803bbcd83 Add payload launching. Supports all CFW bins, Linux, Tools. 2018-08-23 05:05:31 +03:00
Kostas Missos
382f727be3 Fix all the bugs
- Mem leaks
- Stack corruption
- Div by 0
- Double frees
2018-08-23 04:37:02 +03:00
Kostas Missos
6a554eec6c Update Readme + Fix Auto Update 2018-08-23 04:27:49 +03:00
Kostas Missos
0540128709 Faster backups
- Add file pre-allocations to greatly reduce overhead of FatFS.
This was missing before, because it takes 1.5KB payload size.

Speed bumps (no verify) are between 7 to 30% for exFAT and ~50% for FAT32, depending on the workload.
2018-08-22 03:42:25 +03:00
Kostas Missos
c5a6ad823e Add payload/libtools launching prerequisites 2018-08-21 04:45:19 +03:00
Kostas Missos
463383abca AutoRCM disabler support for all AutoRCM versions 2018-08-21 04:43:00 +03:00
Kostas Missos
13a07663ee Add autolaunch updated bootloader (mostly for modchips) 2018-08-21 04:41:16 +03:00
Kostas Missos
5328f89ffe Add support for split inis in 'bootloader/ini'
- A new option was added to Launch.
- These can be configured for autoboot
2018-08-21 04:37:40 +03:00
Kostas Missos
7e876388b4 Bugfixes
- Fixed partial dumping filename/bar position
- Add return for menu function handler
- More files to bootloader folder
2018-08-21 04:26:14 +03:00
Kostas Missos
bf816c5107 Move everything to 'bootloader' folder to reduce clutter
+ Make everything all lowercase
2018-08-21 04:21:09 +03:00
Kostas Missos
1d623eacf9 Our 1st module. LP0 configuration. 2018-08-21 04:14:31 +03:00
Kostas Missos
3d6216a6f3 Deploy ianos. Our elf/module loader. 2018-08-21 04:12:03 +03:00
Kostas Missos
6b8887b5d8 Move display_end before secmon + add boolean supp.
Currently bpmp loses access to the relevant registers when secmon or exosphere is launched.

This change provides support for all firmwares and properly sanitizes the display.
2018-08-13 12:12:53 +03:00
Kostas Missos
e5abdd938e Refactor ALL the things + enable LTO 2018-08-13 11:58:24 +03:00
Renamed from ipl/main.c (Browse further)