Added hexd and exec commands
This commit is contained in:
+81
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user