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).
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cmp al, HEX (50)
je .L2
+ cmp al, HEX (52)
+ je .L77
+
cmp al, HEX (53)
je .L71
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
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
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:
mov cl, cs:[_scratch_size]
xor ch, ch
+ push cx
+ push di
rep stosb
xor al, al
.L18:
+ pop di
+ pop cx
+
pop ds
pop es
- pop di
pop si
pop dx
- pop cx
pop bx
pop ax
ret
_need_ext: dw HEX (0000)
_dta_addr: dw HEX (0000)
+_insert: dw HEX (0000)
+
global _vec_history
_vec_history: db 6 dup (0)