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
+81 -2
View File
@@ -15,7 +15,7 @@
; - Unsupported functions cause FCERR, not a reset or REM
; - modern backspace handling
; - 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
@@ -386,6 +386,8 @@ WORDS: .BYTE 'E'+80H,"ND"
.BYTE 'B'+80H,"ANK0"
.BYTE 'B'+80H,"ANK1"
.BYTE 'F'+80H,"ULL"
.BYTE 'H'+80H,"EXD"
.BYTE 'E'+80H,"XEC"
.BYTE 80H ; End of list marker
; KEYWORD ADDRESS TABLE
@@ -463,6 +465,8 @@ ZEROM .EQU 0D3H
ZBANK0 .EQU 0D4H
ZBANK1 .EQU 0D5H
ZFULL .EQU 0D6H
ZHEXD .EQU 0D7H
ZEXEC .EQU 0D8H
; ARITHMETIC PRECEDENCE TABLE
@@ -1296,10 +1300,22 @@ CHKBANK1:
JP GETCHR
CHKFULL:
CP ZFULL
JP NZ,STDONJMP
JP NZ,CHKHEXD
LD BC,FULL
PUSH BC
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:
SUB ZEND ; Is it a token?
@@ -4439,6 +4455,68 @@ TSTBIT: PUSH AF ; Save bit mask
OUTNCR: CALL OUTC ; Output character in A
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
RET NZ
LD A,(BASTXT+1) ; Full mode has program RAM below BIOS
@@ -4637,6 +4715,7 @@ CLREADBLOCK:
call BIOS_CAS_WAIT_SILENCE
pop hl
ret
; Second block failed as well, error
CLERR: cp 1
jr z,CLECAL