Overrite/append based on insert key
authorRobert Pengelly <robertapengelly@hotmail.com>
Wed, 18 Sep 2024 23:23:19 +0000 (00:23 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Wed, 18 Sep 2024 23:23:19 +0000 (00:23 +0100)
build/chimaera.img
build/chimaera.vhd
src/apps/pcomm/cbreak.asm
src/apps/pcomm/pcomm.asm
src/kernel/int23.asm

index ba8e0bfeed27209aa84ff3bb1d5c7c4524cf86c6..3a86ddacd4e7672947429944b112c67088e2b842 100644 (file)
Binary files a/build/chimaera.img and b/build/chimaera.img differ
index d02a78b548617f4613338af23fc813ec3323a63e..9aadad5a7c60cb7c9ed9280b650f20440dae25b7 100644 (file)
Binary files a/build/chimaera.vhd and b/build/chimaera.vhd differ
index e09ff3aeca51bd896e7b49fa0b3ec8484537af9b..6ead9483c847c92ffea422ac45ce8a00640f70fb 100644 (file)
@@ -18,37 +18,6 @@ _cbreak_handler:
     push    ax
     push    bx
     
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    ;; Make sure the extra segment is the same as the code segment.
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    mov     ax,     cs
-    mov     es,     ax
-    
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    ;; Set up di and cx ready to clear the current command.
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    mov     di,     offset _scratch
-    xor     ch,     ch
-    
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    ;; Preserve the di and cx registers.
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    push    di
-    push    cx
-    
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    ;; Zero out al and clear the current command.
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    xor     al,     al
-    rep     movsb
-    
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    ;; Preserve the cx (command length and current offset) and di
-    ;; (current command address) registers.
-    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-    pop     cx
-    pop     di
-    
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ;; Reset our history index (bp should be unchanged).
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
index a229ecacab4d78d49fe6256329286397ea7450c9..c32bb431c6b7dce53d1ccba89679dc1aee94d6f8 100644 (file)
@@ -114,6 +114,9 @@ _main:
     cmp     al,     HEX (50)
     je      .L2
     
+    cmp     al,     HEX (52)
+    je      .L77
+    
     cmp     al,     HEX (53)
     je      .L71
     
@@ -561,6 +564,49 @@ _main:
     cmp     al,     HEX (7F)
     ja      .L11
     
+    cmp     word ptr cs:[_insert],      1
+    jne     .L79
+    
+    push    ax
+    push    bx
+    push    cx
+    push    dx
+    
+    mov     ah,     HEX (02)
+    mov     dl,     al
+    int     HEX (21)
+    
+    stosb
+    mov     bx,     offset _scratch
+    
+    mov     ax,     di
+    sub     ax,     bx
+    
+    mov     cl,     ch
+    xor     ch,     ch
+    
+    cmp     ax,     cx
+    jbe     .L80
+    
+    pop     dx
+    pop     cx
+    pop     bx
+    pop     ax
+    
+    inc     ch
+    jmp     .L11
+
+.L80:
+
+    pop     dx
+    pop     cx
+    pop     bx
+    pop     ax
+    
+    jmp     .L11
+
+.L79:
+
     push    ax
     push    bx
     push    cx
@@ -880,6 +926,36 @@ _main:
     
     jmp     .L11
 
+.L77:
+
+    push    ax
+    push    cx
+    
+    cmp     word ptr cs:[_insert],      1
+    jne     .L78
+    
+    mov     ah,     HEX (01)
+    mov     cx,     HEX (0607)
+    int     HEX (10)
+    
+    mov     word ptr cs:[_insert],      0
+    jmp     .L81
+
+.L78:
+
+    mov     word ptr cs:[_insert],      1
+    
+    mov     ah,     HEX (01)
+    mov     cx,     HEX (0007)
+    int     HEX (10)
+
+.L81:
+
+    pop     cx
+    pop     ax
+    
+    jmp     .L11
+
 .L71:
 
     push    ax
@@ -1743,15 +1819,14 @@ _prompt:
 
     push    ax
     push    bx
-    push    cx
     push    dx
     push    si
-    push    di
     push    es
     push    ds
     
     mov     ax,     cs
     mov     ds,     ax
+    mov     es,     ax
 
 .L17:
 
@@ -1761,6 +1836,8 @@ _prompt:
     mov     cl,     cs:[_scratch_size]
     xor     ch,     ch
     
+    push    cx
+    push    di
     rep     stosb
     
     xor     al,     al
@@ -1811,12 +1888,13 @@ _prompt:
 
 .L18:
 
+    pop     di
+    pop     cx
+    
     pop     ds
     pop     es
-    pop     di
     pop     si
     pop     dx
-    pop     cx
     pop     bx
     pop     ax
     ret
@@ -1856,6 +1934,8 @@ _temp:                          db      257     dup (0)
 _need_ext:                      dw      HEX (0000)
 _dta_addr:                      dw      HEX (0000)
 
+_insert:                        dw      HEX (0000)
+
 global      _vec_history
 _vec_history:                   db      6       dup (0)
 
index 1af383809f23eb752ce636f1802f38aaec6ed41d..5f1074ed91f590abb7cf29fddd2dcd8af22fc5d9 100644 (file)
@@ -71,13 +71,13 @@ _regain_control_int23:
 _int23_ign_carry:
 
     pop     ax
-    jnc     _int23_respawn
+    pop     bp
     
+    jnc     _int23_respawn
     xor     ah,     ah
 
 _int23_respawn:
 
-    pop     bp
     jmp     _int21_dispatch
 
 ;******************************************************************************