You seem to have an UEFI-based system. Both GRUB and the Windows bootloader are installed in the EFI System Partition (ESP for short), which is your partition
(hd1,1) as GRUB sees it.
Debian 10's default UEFI GRUB includes essentially all the GRUB modules in the main
grubx64.efi executable, so a lack of filesystem drivers should not be the issue here.
Your internal eMMC has standard Windows partitioning:
(hd1,1) is ESP, with a FAT32 filesystem, sized about 260M (the minimum supported size for FAT32 on disks with 4k block size)
(hd1,2) is the "Microsoft Reserved" partition, which is not formatted at all and is about 128M in size. It exists to allow easy conversion to Windows Dynamic Disk (sort of an equivalent of Linux LVM for Windows) or other conversions.
(hd1,3) is your main Windows system drive, with a NTFS filesystem.
(hd1,4) is another partition with a NTFS filesystem, possibly the Windows recovery partition.
All your Linux partitions are located on the external flash drive. And there's the problem: by default, Debian 10 installs only a very minimal GRUB configuration file into the ESP. Essentially it only identifies the filesystem that contains the Linux
/boot directory by UUID, and tells GRUB to load its real configuration from there. Obviously that cannot happen when the external flash drive is disconnected. And the real configuration file contains all the boot menu definitions, including the one for Windows. Without them, GRUB can only show the command prompt.
You can fix this by booting into Linux and copying the real GRUB configuration file onto the ESP, like this:
mv /boot/efi/EFI/debian/grub.cfg /boot/efi/EFI/debian/grub.cfg.mini
cp /boot/grub/grub.cfg /boot/efi/EFI/debian/grub.cfg
update-grub command (which is used by Debian's kernel update packages!) will not automatically update the new location. Fortunately, that command is just a script so it will be easy to modify.
First, create a diversion in the package management system so that any updates won't overwrite our changes:
dpkg-divert --local --rename --add /usr/sbin/update-grub
This will automatically rename the current
/usr/sbin/update-grub.distrib and will redirect any future updates of it to the new location too.
Now, you can make a copy of the script back to the original location, and then modify it using your preferred text editor.
cp -a /usr/sbin/update-grub.distrib /usr/sbin/update-grub
Originally, the script looks like this:
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
You'll want to modify the third line like this:
exec grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg "$@"
After any major system updates (e.g. from Debian 10 "buster" to Debian 11), you should re-check
/usr/sbin/update-grub.distrib and the modified
/usr/sbin/update-grub to verify that the diversion is still valid and the new version has not brought any changes to the
Actually, you might need to copy some other files to the ESP also, like the GRUB font file (from
/boot/efi/EFI/debian/fonts/unicode.pf2) and possibly a GRUB menu background image or something similar related to the GRUB theme you might be using.