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