From 1923facd057cd839ce7a0d0e59b17b70164843b8 Mon Sep 17 00:00:00 2001 From: Baron-von-Riedesel Date: Mon, 10 Feb 2020 08:04:38 +0100 Subject: [PATCH] project tree reorg --- src/COPYING.txt => COPYING.txt | 0 src/History.txt => History.txt | 0 README.md | 4 --- src/Readme.txt => Readme.txt | 0 {bin => build}/TestC.exe | Bin {bin => build}/dos64stb.bin | Bin {bin => build}/mon64.exe | Bin {bin => build}/readme | 0 src/DOS64STB.asm | 15 +++++----- src/MON64.asm | 52 ++++++++++++++++++++++++--------- src/Makefile | 2 +- src/TestC.mak | 2 +- 12 files changed, 48 insertions(+), 27 deletions(-) rename src/COPYING.txt => COPYING.txt (100%) rename src/History.txt => History.txt (100%) delete mode 100644 README.md rename src/Readme.txt => Readme.txt (100%) rename {bin => build}/TestC.exe (100%) rename {bin => build}/dos64stb.bin (100%) rename {bin => build}/mon64.exe (100%) rename {bin => build}/readme (100%) diff --git a/src/COPYING.txt b/COPYING.txt similarity index 100% rename from src/COPYING.txt rename to COPYING.txt diff --git a/src/History.txt b/History.txt similarity index 100% rename from src/History.txt rename to History.txt diff --git a/README.md b/README.md deleted file mode 100644 index 2069f17..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Dos64stb -small stub that allows to run "bare" 64-bit PE binaries in DOS. - -details: https://github.com/Baron-von-Riedesel/Dos64-stub/blob/master/src/Readme.txt diff --git a/src/Readme.txt b/Readme.txt similarity index 100% rename from src/Readme.txt rename to Readme.txt diff --git a/bin/TestC.exe b/build/TestC.exe similarity index 100% rename from bin/TestC.exe rename to build/TestC.exe diff --git a/bin/dos64stb.bin b/build/dos64stb.bin similarity index 100% rename from bin/dos64stb.bin rename to build/dos64stb.bin diff --git a/bin/mon64.exe b/build/mon64.exe similarity index 100% rename from bin/mon64.exe rename to build/mon64.exe diff --git a/bin/readme b/build/readme similarity index 100% rename from bin/readme rename to build/readme diff --git a/src/DOS64STB.asm b/src/DOS64STB.asm index 46250ea..8e0beb7 100644 --- a/src/DOS64STB.asm +++ b/src/DOS64STB.asm @@ -516,7 +516,7 @@ backtoreal proc mov ds,ax mov es,ax mov ss,ax - movzx esp,wStkBot + mov sp,wStkBot mov eax,cr0 and eax,7ffffffeh ; disable protected-mode & paging @@ -578,7 +578,7 @@ call_rmode proc mov es, ax shl bx,2 mov ecx,ss:[bx] - mov dword ptr [esp].RMCS.regIP, ecx + mov [adjust], ecx ;use the adjust var to temporarily store CS:IP mov bx, wStkBot sub bx, 40h sub wStkBot,(8+6+4+4) ;saved RSP, 6 bytes unused, RMCS SS:SP, RMCS CS:IP @@ -589,7 +589,7 @@ call_rmode proc @@: mov ax,ds mov ss,ax - movzx esp,bx + movzx esp,bx ;clear highword ESP, [ESP] is used below! ;--- disable paging & protected-mode mov eax,cr0 @@ -610,8 +610,7 @@ call_rmode proc pop ds pop fs pop gs - pop dword ptr cs:[adjust] ;use this field temporarily - lss sp,[esp] + lss sp,[esp+4] push cs:wFlags push DGROUP push offset backtopm @@ -1279,13 +1278,13 @@ pcall_rmode label ptr far16 dw offset call_rmode dw SEL_CODE16 back_to_long:: - - xor eax,eax - mov ss,eax mov edx,DGROUP shl edx,4 lea esi,[esp+edx] + xor eax,eax + mov ss,eax mov rsp,[esi+38h] + sti mov rdi,[rsp] cld movsq ;copy 2Ah bytes back, don't copy CS:IP & SS:SP fields diff --git a/src/MON64.asm b/src/MON64.asm index 5d60afb..90caca0 100644 --- a/src/MON64.asm +++ b/src/MON64.asm @@ -100,28 +100,55 @@ c_cmd proc ret c_cmd endp -;--- enter address (for d cmd) +;--- get a line of characters +;--- rbx->buffer +;--- esi=size of buffer -a_cmd proc - invoke printf, CStr(<"enter start address for d cmd: ">) - mov rdi, 0 - lea rbx, buffer +getline proc + xor edi, edi + dec esi nextkey: mov ah,1 int 21h cmp al,0dh jz enter_pressed + cmp al,08h + jz backspace_pressed mov [rbx+rdi],al - inc rdi - cmp rdi,lbuffer-1 + inc edi + cmp edi,esi jnz nextkey - invoke printf,CStr(lf) + mov dl,0dh + mov ah,2 + int 21h + jmp enter_pressed +backspace_pressed: + mov dl,20h + mov ah,2 + int 21h + cmp edi,0 + jz nextkey + dec edi + mov dl,08h + mov ah,2 + int 21h + jmp nextkey enter_pressed: + mov byte ptr [rbx+rdi],0 + ret +getline endp + +;--- enter address (for d cmd) + +a_cmd proc + invoke printf, CStr(<"enter start address for d cmd: ">) + lea rbx, buffer + mov esi, lbuffer + call getline and edi,edi ;at least 1 digit entered? jz done - mov byte ptr [rbx+rdi],0 xor edi,edi - xor rsi,rsi + xor esi,esi .while byte ptr [rbx+rdi] mov al,byte ptr [rbx+rdi] sub al,'0' @@ -143,13 +170,12 @@ enter_pressed: jz @F invoke printf, CStr(<"hint: magnitude of address > 48 bits, exceeds paging capacity",lf>) @@: - mov [address],rsi + mov address,rsi done: invoke printf, CStr(lf) ret error: - lea rsi, [buffer] - invoke printf, CStr(), rsi + invoke printf, CStr(), addr buffer ret a_cmd endp diff --git a/src/Makefile b/src/Makefile index 935d5fc..2988123 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,7 +2,7 @@ # NMake makefile, makes dos64stb.bin and mon64.exe # needs JWasm and a 64-bit linker (MS link used here). -ODIR=Release +ODIR=..\build all: $(ODIR) $(ODIR)\mon64.exe diff --git a/src/TestC.mak b/src/TestC.mak index 20737ca..b353e05 100644 --- a/src/TestC.mak +++ b/src/TestC.mak @@ -2,7 +2,7 @@ # NMake makefile, makes TestC.exe # needs JWasm and MSVC 64-bit -ODIR=Release +ODIR=..\build all: $(ODIR) $(ODIR)\TestC.exe