+(defun ez-enter ()
+ (interactive)
+ (if (not (eq ez-machine-state 'wait-for-input))
+ (error "Z-machine not ready for input."))
+ (let ((input-string
+ (downcase
+ (with-current-buffer "*ez*"
+ (buffer-substring ez-input-marker (point-max))))))
+ (delete-region ez-input-marker (point-max))
+ (ez-print (concat input-string "\n"))
+ (ez-debug-message "\tReceived string \"%s\"" input-string)
+ (ez-op-read2 input-string)
+ (ez-run)))
+
+;; Debugging info
+
+(defun ez-setup-debug-buffer ()
+ (with-current-buffer (get-buffer-create "*ez-debug-trace*")
+ (setq-local buffer-read-only t)
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+ (insert "--- Trace Start ---\n\n"))))
+
+(defun ez-debug-message (&rest strings)
+ (with-current-buffer (get-buffer-create "*ez-debug-trace*")
+ (save-excursion
+ (goto-char (point-max))
+ (let ((inhibit-read-only t))
+ (insert (apply #'format-message strings) "\n")))))
+
+(defun ez-debug-memory ()
+ (interactive)
+ (with-current-buffer (get-buffer-create "*ez-debug-memory*")
+ (setq-local buffer-read-only t)
+ (let ((inhibit-read-only t)
+ (old-point (point)))
+ (if (eq major-mode 'hexl-mode)
+ (hexl-mode-exit))
+ (erase-buffer)
+ (insert ez-memory)
+ (setq-local buffer-undo-list nil)
+ (hexl-mode)
+ (goto-char old-point))))
+