Added hexd and exec commands

This commit is contained in:
Joppe Blondel
2026-10-08 17:12:57 +02:00
parent 67892cf81e
commit b6b1876cc4
2 changed files with 82 additions and 3 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ $(BUILDDIR):
$(BUILDDIR)/bios.bin: bios.asm tape.asm $(BUILDDIR)/memory.inc $(BUILDDIR)/bios.bin: bios.asm tape.asm $(BUILDDIR)/memory.inc
echo '>$<' echo '>$<'
$(ASM) $(ASMFLAGS) bios.bin $(BUILDDIR)/bios.bin $(ASM) $(ASMFLAGS) bios.asm $(BUILDDIR)/bios.bin
basic: basic:
$(MAKE) -C apps/basic $(or $(MAKECMDGOALS),all) --no-print-directory $(MAKE) -C apps/basic $(or $(MAKECMDGOALS),all) --no-print-directory
+81 -2
View File
@@ -15,7 +15,7 @@
; - Unsupported functions cause FCERR, not a reset or REM ; - Unsupported functions cause FCERR, not a reset or REM
; - modern backspace handling ; - modern backspace handling
; - Added DROM/EROM/BANK0/BANK1 commands ; - Added DROM/EROM/BANK0/BANK1 commands
; - CLOAD ; - Added CLOAD/HEXD/EXEC commands
; ;
;================================================================================== ;==================================================================================
; The updates to the original BASIC within this file are copyright Grant Searle ; The updates to the original BASIC within this file are copyright Grant Searle
@@ -386,6 +386,8 @@ WORDS: .BYTE 'E'+80H,"ND"
.BYTE 'B'+80H,"ANK0" .BYTE 'B'+80H,"ANK0"
.BYTE 'B'+80H,"ANK1" .BYTE 'B'+80H,"ANK1"
.BYTE 'F'+80H,"ULL" .BYTE 'F'+80H,"ULL"
.BYTE 'H'+80H,"EXD"
.BYTE 'E'+80H,"XEC"
.BYTE 80H ; End of list marker .BYTE 80H ; End of list marker
; KEYWORD ADDRESS TABLE ; KEYWORD ADDRESS TABLE
@@ -463,6 +465,8 @@ ZEROM .EQU 0D3H
ZBANK0 .EQU 0D4H ZBANK0 .EQU 0D4H
ZBANK1 .EQU 0D5H ZBANK1 .EQU 0D5H
ZFULL .EQU 0D6H ZFULL .EQU 0D6H
ZHEXD .EQU 0D7H
ZEXEC .EQU 0D8H
; ARITHMETIC PRECEDENCE TABLE ; ARITHMETIC PRECEDENCE TABLE
@@ -1296,10 +1300,22 @@ CHKBANK1:
JP GETCHR JP GETCHR
CHKFULL: CHKFULL:
CP ZFULL CP ZFULL
JP NZ,STDONJMP JP NZ,CHKHEXD
LD BC,FULL LD BC,FULL
PUSH BC PUSH BC
JP GETCHR JP GETCHR
CHKHEXD:
CP ZHEXD
JP NZ,CHKEXEC
LD BC,HEXD
PUSH BC
JP GETCHR
CHKEXEC:
CP ZEXEC
JP NZ,STDONJMP
LD BC,EXEC
PUSH BC
JP GETCHR
; ------------ ; ------------
STDONJMP: STDONJMP:
SUB ZEND ; Is it a token? SUB ZEND ; Is it a token?
@@ -4439,6 +4455,68 @@ TSTBIT: PUSH AF ; Save bit mask
OUTNCR: CALL OUTC ; Output character in A OUTNCR: CALL OUTC ; Output character in A
JP PRNTCRLF ; Output CRLF JP PRNTCRLF ; Output CRLF
; -------------------------------------------------------
; Hex dump
; syntax: HEXD start,length
; -------------------------------------------------------
HEXD: CALL GETNUM ; Get start address
CALL DEINT ; Convert it to 16 bits
PUSH DE ; Save start address
CALL CHKSYN ; Make sure "," follows
.BYTE ','
CALL GETNUM ; Get length
CALL DEINT ; Convert it to 16 bits
EX (SP),HL ; Save code pointer, get address
HEXDLINE:
LD A,D ; Anything left to print?
OR E
JP Z,HEXDDONE
LD A,H ; Print four-digit address
CALL HEXDBYTE
LD A,L
CALL HEXDBYTE
LD B,16 ; Print up to 16 bytes per line
HEXDLOOP:
LD A,D ; Stop at requested length
OR E
JP Z,HEXDEOL
LD A,' '
CALL OUTC
LD A,(HL)
CALL HEXDBYTE
INC HL
DEC DE
DJNZ HEXDLOOP
HEXDEOL:
CALL PRNTCRLF
JP HEXDLINE
HEXDDONE:
POP HL ; Restore code pointer
RET
HEXDBYTE:
PUSH BC
CALL BYT2ASC
LD A,B
CALL OUTC
LD A,C
CALL OUTC
POP BC
RET
; -------------------------------------------------------
; Execute machine code
; syntax: EXEC address
; -------------------------------------------------------
EXEC: CALL GETNUM ; Get address
CALL DEINT ; Convert it to 16 bits
PUSH HL ; Save code pointer
CALL EXECGO ; Call address in DE
POP HL ; Restore code pointer
RET
EXECGO: PUSH DE ; Put target address on stack
RET ; Continue there as a subroutine
DROM: ; disable ROM DROM: ; disable ROM
RET NZ RET NZ
LD A,(BASTXT+1) ; Full mode has program RAM below BIOS LD A,(BASTXT+1) ; Full mode has program RAM below BIOS
@@ -4637,6 +4715,7 @@ CLREADBLOCK:
call BIOS_CAS_WAIT_SILENCE call BIOS_CAS_WAIT_SILENCE
pop hl pop hl
ret ret
; Second block failed as well, error ; Second block failed as well, error
CLERR: cp 1 CLERR: cp 1
jr z,CLECAL jr z,CLECAL