freeze dos progress, maybe some day

This commit is contained in:
veclavtlica
2026-10-10 19:34:22 +03:00
parent fd54d48aca
commit 1ada1a12cc
11 changed files with 262 additions and 53 deletions
+7 -36
View File
@@ -1,47 +1,18 @@
.section .data
.align 4
# TODO: Make sure it's placed under 1 MiB.
# The DPMI Register Structure (50 bytes total)
# This holds the register states injected into Real Mode.
dpmi_regs:
.long 0 # edi (offset 0)
.long 0 # esi (offset 4)
.long 0 # ebp (offset 8)
.long 0 # esp / reserved (offset 12)
.long 0 # ebx (offset 16)
.long 0 # edx (offset 20)
.long 0 # ecx (offset 24)
dpmi_eax:
.long 0 # eax (offset 28)
.short 0 # flags(offset 32)
.short 0 # es (offset 34)
.short 0 # ds (offset 36)
.short 0 # fs (offset 38)
.short 0 # gs (offset 40)
.short 0 # ip (offset 42)
.short 0 # cs (offset 44)
.short 0 # sp (offset 46)
.short 0 # ss (offset 48)
.section .text
.global _start
_start:
push %ebp
mov %esp, %ebp
cld
call plr_display_dos_main
# 1. Set up the Real-Mode registers inside the DPMI structure
# AH = 4Ch (DOS Exit Function), AL = 00h (Return Code 0)
movl $0x00004C00, dpmi_eax
# 2. Call DPMI Simulate Real Mode Interrupt
movw $0x0300, %ax # DPMI Function: Simulate Real Mode Interrupt
movb $0x21, %bl # Interrupt number to trigger (INT 21h)
movb $0x00, %bh # Flags (Must be 0)
movw $0x0000, %cx # Number of words to copy to RM stack (0)
# ES:EDI points to our DPMI register block.
# In WDOSX flat model, %es already targets the flat data descriptor.
movl $dpmi_regs, %edi
int $0x31 # Trigger DPMI host to execute the RM interrupt
# --- Execution halts here as DOS terminates the program ---
movb $0x4C, %ah
int $0x21