From 6cbb73f2e1b5b85f97a1da15c91ceb7655338529 Mon Sep 17 00:00:00 2001
From: Robert Pengelly <robertapengelly@hotmail.com>
Date: Mon, 12 Aug 2024 05:46:10 +0100
Subject: [PATCH] Implemented int 21h/AH=01

---
 build/chimaera.img       | Bin 368640 -> 368640 bytes
 build/chimaera.vhd       | Bin 34120704 -> 34120704 bytes
 src/apps/hello/hello.asm |   9 +++-
 src/kernel/int21.asm     | 102 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 110 insertions(+), 1 deletion(-)

diff --git a/build/chimaera.img b/build/chimaera.img
index 1a20b316af9aa033ee77c59245a1204993a22ae1..a28c5360de2a52173e1910e83c15486619a68741 100644
GIT binary patch
delta 5606
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
F{{zJ~Fkt`y

delta 5451
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
R6g-^ILi?Ti%y9p5`d{2k;cfr`

diff --git a/build/chimaera.vhd b/build/chimaera.vhd
index 3868ac93db139f313cd27c6f5df927a8404a7437..2321841972c112fd147baee467c70c6f5ed7fbc9 100644
GIT binary patch
delta 8245
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
AQ2+n{

delta 8089
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
E0*{!lcmMzZ

diff --git a/src/apps/hello/hello.asm b/src/apps/hello/hello.asm
index 5f26689..6180d5f 100644
--- a/src/apps/hello/hello.asm
+++ b/src/apps/hello/hello.asm
@@ -18,7 +18,14 @@ _main:
 
     mov     bx,     offset _msg_hello
     call    _writestr
-    
+
+;.console_loop:
+;
+;    mov     ah,     HEX (01)
+;    int     HEX (21)
+;    
+;    jmp     .console_loop
+;    
 ;    mov     ax,     offset _flags
 ;    push    ax
 ;    
diff --git a/src/kernel/int21.asm b/src/kernel/int21.asm
index eb28c8f..257d2b7 100644
--- a/src/kernel/int21.asm
+++ b/src/kernel/int21.asm
@@ -750,6 +750,12 @@ _int21_dispatch.list:
     db      HEX (00)
     dw      _int21_00
     
+    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+    ;; Console Input With Echo.
+    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+    db      HEX (01)
+    dw      _int21_01
+    
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ;; Display Output.
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -970,6 +976,102 @@ _int21_00:
     xor     al,     al
     jmp     _int21_4C
 
+;******************************************************************************
+; @function         _int21_01
+; @brief            Console Input With Echo
+;******************************************************************************
+_int21_01:
+
+    mov     al,     cs:[_int21_01.scan]
+    
+    and     al,     al
+    jz      _int21_01.wait
+    
+    mov     byte ptr cs:[_int21_01.scan],    0
+    jmp     _int21_01.output
+
+_int21_01.wait:
+
+    xor     ah,     ah
+    int     HEX (16)
+    
+    cmp     ax,     HEX (2E03)
+    jne     _int21_01.char_ok
+    
+    mov     al,     '^'
+    call    _writechr
+    
+    mov     al,     'C'
+    call    _writechr
+    
+    mov     al,     HEX (0D)
+    call    _writechr
+    
+    mov     al,     HEX (0A)
+    call    _writechr
+    
+    jmp     _spawn_int23
+
+_int21_01.char_ok:
+
+    mov     cs:[_int21_01.scan],     ah
+    
+    and     al,     al
+    jz      _int21_01.output
+    
+    mov     byte ptr cs:[_int21_01.scan],    0
+
+_int21_01.output:
+
+    cmp     al,     HEX (09)
+    jne     _int21_01.no_tab
+    
+    push    ax
+    push    bx
+    push    cx
+    push    dx
+    
+    mov     ah,     HEX (03)
+    xor     bh,     bh
+    int     HEX (10)
+    
+    xor     ah,     ah
+    mov     al,     dl
+    xor     dx,     dx
+    
+    mov     cx,     4
+    div     cx
+    
+    mov     cx,     4
+    sub     cx,     dx
+
+_int21_01.tab_loop:
+
+    mov     al,     ' '
+    call    _writechr
+    
+    loop    _int21_01.tab_loop
+
+_int21_01.tab_done:
+
+    pop     dx
+    pop     cx
+    pop     bx
+    pop     ax
+    
+    jmp     _int21_01.done
+
+_int21_01.no_tab:
+
+    call    _writechr
+
+_int21_01.done:
+
+    mov     ah,     HEX (01)
+    iret
+
+_int21_01.scan:                  db      HEX (00)
+
 ;******************************************************************************
 ; @function         _int21_02
 ; @brief            Display Ouput
-- 
2.34.1