From 6454c1d978aafde64e1526aa9ce1afd2ede89e08 Mon Sep 17 00:00:00 2001 From: Joppe Blondel Date: Wed, 7 Oct 2026 15:06:03 +0200 Subject: [PATCH] Fixed backspace in basic --- Makefile | 6 +++--- apps/basic/basic.asm | 31 ++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 5cb1186..8439170 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,7 @@ $(BUILDDIR)/%.bin: ./%.asm $(BUILDDIR)/memory.inc echo '>$<' $(ASM) $(ASMFLAGS) $< $@ -$(BUILDDIR)/basic.bin: $(BUILDDIR)/memory.inc +basic: $(MAKE) -C apps/basic $(or $(MAKECMDGOALS),all) --no-print-directory $(BUILDDIR)/memory.inc: memory.mk @@ -33,7 +33,7 @@ $(BUILDDIR)/memory.inc: memory.mk @awk 'BEGIN { print "; Generated from rom_layout.mk; do not edit." } \ /^[A-Z][A-Z0-9_]*[[:space:]]*:=[[:space:]]*/ { print $$1 " .equ " $$3 }' $< > $@ -$(BUILDDIR)/rom.bin: $(BUILDDIR)/bios.bin $(BUILDDIR)/basic.bin +$(BUILDDIR)/rom.bin: $(BUILDDIR)/bios.bin basic echo "bios: $(shell wc -c < $(BUILDDIR)/bios.bin) / $$(($(BIOS_ROM_SIZE)+0))" echo "basic: $(shell wc -c < $(BUILDDIR)/basic.bin) / $$(($(BASIC_ROM_SIZE)+0))" objcopy --pad-to=$$(($(BIOS_ROM_START)+$(BIOS_ROM_SIZE))) \ @@ -43,4 +43,4 @@ $(BUILDDIR)/rom.bin: $(BUILDDIR)/bios.bin $(BUILDDIR)/basic.bin cat $(BUILDDIR)/bios_padded.bin $(BUILDDIR)/basic_padded.bin > $(BUILDDIR)/rom.bin -.PHONY: $(TOPTARGETS) $(SUBDIRS) +.PHONY: $(TOPTARGETS) $(SUBDIRS) basic diff --git a/apps/basic/basic.asm b/apps/basic/basic.asm index 0a85ae3..9244bbb 100644 --- a/apps/basic/basic.asm +++ b/apps/basic/basic.asm @@ -13,6 +13,7 @@ ; - fixed ram size instead of poking at ram locations ; - BIOS calls instead of using RST ; - Unsupported functions cause FCERR, not a reset or REM +; - modern backspace handling ; ;================================================================================== ; The updates to the original BASIC within this file are copyright Grant Searle @@ -52,7 +53,7 @@ MC_RAM_END .EQU 0FFFFH CTRLC .EQU 03H ; Control "C" CTRLG .EQU 07H ; Control "G" -BKSP .EQU 7FH ; Back space +BKSP .EQU 08H ; Back space LF .EQU 0AH ; Line feed CS .EQU 0CH ; Clear screen CR .EQU 0DH ; Carriage return @@ -62,7 +63,7 @@ CTRLR .EQU 12H ; Control "R" CTRLS .EQU 13H ; Control "S" CTRLU .EQU 15H ; Control "U" ESC .EQU 1BH ; Escape -DEL .EQU 08H ; Delete +DEL .EQU 7fH ; Delete ; BASIC WORK SPACE LOCATIONS @@ -942,10 +943,25 @@ ECHDEL: DEC B ; Count bytes in buffer CALL OUTC ; Echo it JP MORINP ; Get more input -DELCHR: DEC B ; Count bytes in buffer - DEC HL ; Back space buffer - CALL OUTC ; Output character in A - JP NZ,MORINP ; Not end - Get more +DELCHR: ;DEC B ; Count bytes in buffer + ;DEC HL ; Back space buffer + ;CALL OUTC ; Output character in A + ;JP NZ,MORINP ; Not end - Get more + LD A,B + CP 1 + JP Z,MORINP + DEC B + DEC HL + LD A,(CURPOS) + DEC A + LD (CURPOS),A + LD A,BKSP + CALL MONOUT + LD A,' ' + CALL MONOUT + LD A,BKSP + CALL MONOUT + JP MORINP OTKLN: CALL OUTC ; Output character in A KILIN: CALL PRNTCRLF ; Output CRLF JP TTYLIN ; Get line again @@ -958,7 +974,8 @@ TTYLIN: LD HL,BUFFER ; Get a line by character MORINP: CALL CLOTST ; Get character and test ^O LD C,A ; Save character in C CP DEL ; Delete character? - JP Z,DODEL ; Yes - Process it + ;JP Z,DODEL ; Yes - Process it + JP Z,DELCHR LD A,(NULFLG) ; Get null flag OR A ; Test null flag status JP Z,PROCES ; Reset - Process character