added full mode to basic
This commit is contained in:
+95
-3
@@ -384,6 +384,7 @@ WORDS: .BYTE 'E'+80H,"ND"
|
|||||||
.BYTE 'E'+80H,"ROM"
|
.BYTE 'E'+80H,"ROM"
|
||||||
.BYTE 'B'+80H,"ANK0"
|
.BYTE 'B'+80H,"ANK0"
|
||||||
.BYTE 'B'+80H,"ANK1"
|
.BYTE 'B'+80H,"ANK1"
|
||||||
|
.BYTE 'F'+80H,"ULL"
|
||||||
.BYTE 80H ; End of list marker
|
.BYTE 80H ; End of list marker
|
||||||
|
|
||||||
; KEYWORD ADDRESS TABLE
|
; KEYWORD ADDRESS TABLE
|
||||||
@@ -460,6 +461,7 @@ ZDROM .EQU 0D2H
|
|||||||
ZEROM .EQU 0D3H
|
ZEROM .EQU 0D3H
|
||||||
ZBANK0 .EQU 0D4H
|
ZBANK0 .EQU 0D4H
|
||||||
ZBANK1 .EQU 0D5H
|
ZBANK1 .EQU 0D5H
|
||||||
|
ZFULL .EQU 0D6H
|
||||||
|
|
||||||
; ARITHMETIC PRECEDENCE TABLE
|
; ARITHMETIC PRECEDENCE TABLE
|
||||||
|
|
||||||
@@ -1287,10 +1289,16 @@ CHKBANK0:
|
|||||||
JP GETCHR
|
JP GETCHR
|
||||||
CHKBANK1:
|
CHKBANK1:
|
||||||
CP ZBANK1
|
CP ZBANK1
|
||||||
JP NZ,STDONJMP
|
JP NZ,CHKFULL
|
||||||
LD BC,BANK1
|
LD BC,BANK1
|
||||||
PUSH BC
|
PUSH BC
|
||||||
JP GETCHR
|
JP GETCHR
|
||||||
|
CHKFULL:
|
||||||
|
CP ZFULL
|
||||||
|
JP NZ,STDONJMP
|
||||||
|
LD BC,FULL
|
||||||
|
PUSH BC
|
||||||
|
JP GETCHR
|
||||||
; ------------
|
; ------------
|
||||||
STDONJMP:
|
STDONJMP:
|
||||||
SUB ZEND ; Is it a token?
|
SUB ZEND ; Is it a token?
|
||||||
@@ -1584,6 +1592,9 @@ LET: CALL GETVAR ; Get variable name
|
|||||||
LETSTR: PUSH HL ; Save address of string var
|
LETSTR: PUSH HL ; Save address of string var
|
||||||
LD HL,(FPREG) ; Pointer to string entry
|
LD HL,(FPREG) ; Pointer to string entry
|
||||||
PUSH HL ; Save it on stack
|
PUSH HL ; Save it on stack
|
||||||
|
LD A,(BASTXT+1) ; Full mode has program RAM below BIOS
|
||||||
|
CP 0C0H
|
||||||
|
JP C,CRESTR ; Copy strings into the full-mode heap
|
||||||
INC HL ; Skip over length
|
INC HL ; Skip over length
|
||||||
INC HL
|
INC HL
|
||||||
LD E,(HL) ; LSB of string address
|
LD E,(HL) ; LSB of string address
|
||||||
@@ -4406,7 +4417,8 @@ MONOUT: JP MC_BIOS_PUTC ; output a char
|
|||||||
|
|
||||||
|
|
||||||
MONITR: CALL MC_BIOS_FLUSH
|
MONITR: CALL MC_BIOS_FLUSH
|
||||||
CALL EROM ; enable rom
|
LD A,1 ; enable rom
|
||||||
|
call MC_BIOS_ROM
|
||||||
JP 0 ; reboot
|
JP 0 ; reboot
|
||||||
|
|
||||||
INITST: LD A,0 ; Clear break flag
|
INITST: LD A,0 ; Clear break flag
|
||||||
@@ -4428,27 +4440,107 @@ OUTNCR: CALL OUTC ; Output character in A
|
|||||||
|
|
||||||
DROM: ; disable ROM
|
DROM: ; disable ROM
|
||||||
RET NZ
|
RET NZ
|
||||||
|
LD A,(BASTXT+1) ; Full mode has program RAM below BIOS
|
||||||
|
CP 0C0H
|
||||||
|
JP C,FCERR ; Return error in full mode
|
||||||
LD A,0
|
LD A,0
|
||||||
call MC_BIOS_ROM
|
call MC_BIOS_ROM
|
||||||
RET
|
RET
|
||||||
|
|
||||||
EROM: ; enable ROM
|
EROM: ; enable ROM
|
||||||
RET NZ
|
RET NZ
|
||||||
|
LD A,(BASTXT+1) ; Full mode has program RAM below BIOS
|
||||||
|
CP 0C0H
|
||||||
|
JP C,FCERR ; Return error in full mode
|
||||||
LD A,1
|
LD A,1
|
||||||
call MC_BIOS_ROM
|
call MC_BIOS_ROM
|
||||||
RET
|
RET
|
||||||
|
|
||||||
BANK0: ; Bank 0
|
BANK0: ; Bank 0
|
||||||
RET NZ
|
RET NZ
|
||||||
|
LD A,(BASTXT+1) ; Full mode has program RAM below BIOS
|
||||||
|
CP 0C0H
|
||||||
|
JP C,FCERR ; Return error in full mode
|
||||||
LD A,0
|
LD A,0
|
||||||
call MC_BIOS_BANK
|
call MC_BIOS_BANK
|
||||||
RET
|
RET
|
||||||
|
|
||||||
BANK1: ; Bank 1
|
BANK1: ; Bank 1
|
||||||
RET NZ
|
RET NZ
|
||||||
|
LD A,(BASTXT+1) ; Full mode has program RAM below BIOS
|
||||||
|
CP 0C0H
|
||||||
|
JP C,FCERR ; Return error in full mode
|
||||||
LD A,1
|
LD A,1
|
||||||
call MC_BIOS_BANK
|
call MC_BIOS_BANK
|
||||||
RET
|
RET
|
||||||
|
|
||||||
.end
|
FULL: ; New entry. exposes full 48k ram to basic
|
||||||
|
RET NZ
|
||||||
|
|
||||||
|
; FULL BOOT SEQUENCE
|
||||||
|
; ------------------
|
||||||
|
LD A,0
|
||||||
|
CALL MC_BIOS_ROM ; Expose RAM below the ROM
|
||||||
|
|
||||||
|
LD HL,WRKSPC ; Start of workspace RAM
|
||||||
|
LD SP,HL ; Set up a temporary stack
|
||||||
|
|
||||||
|
LD DE,INITAB ; Initialise workspace
|
||||||
|
LD B,INITBE-INITAB+3
|
||||||
|
LD HL,WRKSPC
|
||||||
|
FULLCPY:
|
||||||
|
LD A,(DE)
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DEC B
|
||||||
|
JP NZ,FULLCPY
|
||||||
|
|
||||||
|
LD SP,HL ; Temporary stack
|
||||||
|
CALL CLREG ; Clear registers and stack
|
||||||
|
CALL PRNTCRLF
|
||||||
|
XOR A
|
||||||
|
LD (BUFFER+72+1),A ; Mark end of input buffer
|
||||||
|
|
||||||
|
LD HL,0100H ; Program and variables start here
|
||||||
|
LD (BASTXT),HL
|
||||||
|
|
||||||
|
LD HL,FULLMSG ; Announce the alternate layout
|
||||||
|
CALL PRS
|
||||||
|
|
||||||
|
LD HL,SHARED_MEM_START-1
|
||||||
|
JP FULLSETTOP ; Finish full-memory initialisation
|
||||||
|
|
||||||
|
FULLSETTOP:
|
||||||
|
LD DE,0-512 ; Reserve 512 bytes for strings
|
||||||
|
LD (LSTRAM),HL ; Save last available RAM
|
||||||
|
ADD HL,DE
|
||||||
|
LD (STRSPC),HL ; Bottom of string space / stack top
|
||||||
|
CALL CLRPTR ; Clear program and variables
|
||||||
|
|
||||||
|
LD HL,(STRSPC)
|
||||||
|
LD DE,0-17 ; BASIC's working-space adjustment
|
||||||
|
ADD HL,DE
|
||||||
|
LD DE,(BASTXT) ; Relocatable program start
|
||||||
|
DEC DE ; Preserve original inclusive count
|
||||||
|
LD A,L
|
||||||
|
SUB E
|
||||||
|
LD L,A
|
||||||
|
LD A,H
|
||||||
|
SBC A,D
|
||||||
|
LD H,A
|
||||||
|
|
||||||
|
PUSH HL ; Save calculated free-byte count
|
||||||
|
LD HL,SIGNON
|
||||||
|
CALL PRS
|
||||||
|
POP HL
|
||||||
|
CALL PRNTHL
|
||||||
|
LD HL,BFREE
|
||||||
|
CALL PRS
|
||||||
|
JP WARMST
|
||||||
|
; ------------------
|
||||||
|
|
||||||
|
FULLMSG:
|
||||||
|
.BYTE "[FULL MEMORY]",CR,LF,0,0
|
||||||
|
|
||||||
|
.end
|
||||||
|
|||||||
Reference in New Issue
Block a user