diff --git a/src/BIOS/sysinit1.nas b/src/BIOS/sysinit1.nas --- a/src/BIOS/sysinit1.nas +++ b/src/BIOS/sysinit1.nas @@ -1062,10 +1062,14 @@ MOV WORD PTR [BX + EXEC0_5C_FCB+2],CS EXEC0_6C_FCB equ Exec0_6C_FCB ; NASM port equate MOV WORD PTR [BX + EXEC0_6C_FCB+2],CS +EXEC equ Exec ; NASM port equate +%if 1 XOR AX,AX ;Load and go -EXEC equ Exec ; NASM port equate MOV AH,EXEC STC ;IN CASE OF INT 24 +%else + call 54h:0 +%endif INT 21H ;GO START UP COMMAND %ENDIF ; NOTE FALL THROUGH IF EXEC RETURNS (an error) diff --git a/src/CMD/COMMAND/COMMAND1.ASM b/src/CMD/COMMAND/COMMAND1.ASM --- a/src/CMD/COMMAND/COMMAND1.ASM +++ b/src/CMD/COMMAND/COMMAND1.ASM @@ -408,6 +408,7 @@ ORG 100H PROGSTART: +int 3 JMP RESGROUP:CONPROC ; diff --git a/src/CMD/COMMAND/COMMAND2.ASM b/src/CMD/COMMAND/COMMAND2.ASM --- a/src/CMD/COMMAND/COMMAND2.ASM +++ b/src/CMD/COMMAND/COMMAND2.ASM @@ -562,6 +562,16 @@ ; ENDINIT: + push ax + push bx + push bp + mov ax, 0E00h + '!' + mov bx, 7 + int 10h + pop bp + pop bx + pop ax + int 3 push ds ;g save segments push es ;g push cs ;g get resident segment to DS @@ -584,6 +594,27 @@ cmp resetenv,1 ;eg Do we need to setblock to env end? jnz noreset ;eg no - we already did it mov bx,envsiz ;eg get size of environment in paragraphs + push ax + push dx + mov ax, "se" + mov dl, "=" + call disp_dlax + mov ax, es + call disp_ax_hex + mov ax, "d " + mov dx, "=s" + call disp_dxax + mov ax, ds + call disp_ax_hex + mov ax, "b " + mov dx, "=x" + call disp_dxax + mov ax, bx + call disp_ax_hex + mov ax, 0A0Dh + call disp_ax + pop dx + pop ax push es ;eg save environment - just to make sure mov ah,SETBLOCK ;eg int int_command ;eg @@ -595,6 +626,68 @@ pop ds ;g jmp lodcom ;g allocate transient + + public disp_dxax +disp_dxax: + call disp_ax + xchg dx, ax + call disp_ax + xchg dx, ax + retn + + public disp_dlax +disp_dlax: + call disp_ax + xchg dx, ax + call disp_al + xchg dx, ax + retn + + public disp_ax +disp_ax: + call disp_al + xchg al, ah + call disp_al + xchg al, ah + retn + + public disp_al +disp_al: + push ax + push bx + push bp + mov ah, 0Eh + mov bx, 7 + int 10h + pop bp + pop bx + pop ax + retn + + public disp_ax_hex +disp_ax_hex: + xchg al, ah + call disp_al_hex + xchg al, ah +disp_al_hex: + push cx + mov cl, 4 + rol al, cl + call disp_nybble_hex + rol al, cl + pop cx +disp_nybble_hex: + push ax + and al, 15 + add al, '0' + cmp al, '9' + jbe .got + add al, 'A' - ('9' + 1) +.got: + call disp_al + pop ax + retn + CODERES ENDS ; This TAIL segment is used to produce a PARA aligned label in the resident diff --git a/src/CMD/COMMAND/INIT.ASM b/src/CMD/COMMAND/INIT.ASM --- a/src/CMD/COMMAND/INIT.ASM +++ b/src/CMD/COMMAND/INIT.ASM @@ -27,6 +27,11 @@ EXTRN CONTC:NEAR EXTRN DskErr:NEAR EXTRN endinit:near + EXTRN disp_dxax:near + EXTRN disp_dlax:near + EXTRN disp_ax:near + EXTRN disp_al:near + EXTRN disp_ax_hex:near EXTRN INT_2E:NEAR EXTRN LODCOM:NEAR EXTRN RSTACK:WORD @@ -203,6 +208,29 @@ CONPROC: MOV SP,OFFSET RESGROUP:RSTACK ; MUST be first instruction + push dx + push ax + mov ax, "se" + mov dl, "=" + call disp_dlax + mov ax, es + call disp_ax_hex + mov ax, "d " + mov dx, "=s" + call disp_dxax + mov ax, ds + call disp_ax_hex + mov ax, "E " + mov dx, "=N" + call disp_dxax + MOV AX,DS:[PDB_environ] ; ax = environment segment + call disp_ax_hex + mov ax, 0A0Dh + call disp_ax + pop ax + pop dx + + CALL SYSLOADMSG ;AN000; check dos version JNC OKDOS ;AN000; if no problem - continue @@ -356,6 +384,30 @@ SUB AX,DX ; max seg addr - # para's needed for transient MOV [TRNSEG],AX ; = seg addr to load the transient at. MOV AX,DS:[PDB_environ] ; ax = environment segment + + push dx + push ax + mov ax, "se" + mov dl, "=" + call disp_dlax + mov ax, es + call disp_ax_hex + mov ax, "d " + mov dx, "=s" + call disp_dxax + mov ax, ds + call disp_ax_hex + mov ax, "a " + mov dx, "=x" + call disp_dxax + pop ax + push ax + call disp_ax_hex + mov ax, 0A0Dh + call disp_ax + pop ax + pop dx + OR AX,AX ; If there is no environment segment, JZ BUILDENV ; go compute one. INC BYTE PTR [CHUCKENV] ; Flag no new ENVIRONSEG to set up @@ -1007,6 +1059,7 @@ MOV BATCH,AX ;eg save batch segment NOBATCHSEG: + int 3 MOV BX, 0FFFFH ; Get size of largest block for env MOV AH, ALLOC INT int_command @@ -1025,8 +1078,37 @@ MOV AH, ALLOC ; Get max size INT int_command - mov bx,[envirseg] ;g get old environment segment + push dx + push bx + + mov bx,[envirseg] ;g get old environment segment/ mov oldenv,bx ;g save it + + push ax + mov ax, "xa" + mov dl, "=" + call disp_dlax + pop ax + push ax + call disp_ax_hex + mov ax, "d " + mov dx, "=x" + call disp_dxax + pop ax + pop dx + push ax + mov ax, dx + call disp_ax_hex + mov ax, "b " + mov dx, "=x" + call disp_dxax + mov ax, bx + call disp_ax_hex + mov ax, 0A0Dh + call disp_ax + pop ax + pop dx + mov usedenv,0 ;g initialize env size counter MOV DS,bx ASSUME DS:NOTHING diff --git a/src/DOS/msinit.nas b/src/DOS/msinit.nas --- a/src/DOS/msinit.nas +++ b/src/DOS/msinit.nas @@ -454,8 +454,14 @@ MOV [arena_size],AX pop ds +%if 0 MOV AX,[ENDMEM] MOV dx, [CurrentPDB] +%else + call 54h:0 + nop + nop +%endif neartransfer SETMEM ; Basic Header ; SETMEM works with ss != DOSDATA