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 'B'+80H,"ANK0"
|
||||
.BYTE 'B'+80H,"ANK1"
|
||||
.BYTE 'F'+80H,"ULL"
|
||||
.BYTE 80H ; End of list marker
|
||||
|
||||
; KEYWORD ADDRESS TABLE
|
||||
@@ -460,6 +461,7 @@ ZDROM .EQU 0D2H
|
||||
ZEROM .EQU 0D3H
|
||||
ZBANK0 .EQU 0D4H
|
||||
ZBANK1 .EQU 0D5H
|
||||
ZFULL .EQU 0D6H
|
||||
|
||||
; ARITHMETIC PRECEDENCE TABLE
|
||||
|
||||
@@ -1287,10 +1289,16 @@ CHKBANK0:
|
||||
JP GETCHR
|
||||
CHKBANK1:
|
||||
CP ZBANK1
|
||||
JP NZ,STDONJMP
|
||||
JP NZ,CHKFULL
|
||||
LD BC,BANK1
|
||||
PUSH BC
|
||||
JP GETCHR
|
||||
CHKFULL:
|
||||
CP ZFULL
|
||||
JP NZ,STDONJMP
|
||||
LD BC,FULL
|
||||
PUSH BC
|
||||
JP GETCHR
|
||||
; ------------
|
||||
STDONJMP:
|
||||
SUB ZEND ; Is it a token?
|
||||
@@ -1584,6 +1592,9 @@ LET: CALL GETVAR ; Get variable name
|
||||
LETSTR: PUSH HL ; Save address of string var
|
||||
LD HL,(FPREG) ; Pointer to string entry
|
||||
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
|
||||
LD E,(HL) ; LSB of string address
|
||||
@@ -4406,7 +4417,8 @@ MONOUT: JP MC_BIOS_PUTC ; output a char
|
||||
|
||||
|
||||
MONITR: CALL MC_BIOS_FLUSH
|
||||
CALL EROM ; enable rom
|
||||
LD A,1 ; enable rom
|
||||
call MC_BIOS_ROM
|
||||
JP 0 ; reboot
|
||||
|
||||
INITST: LD A,0 ; Clear break flag
|
||||
@@ -4428,27 +4440,107 @@ OUTNCR: CALL OUTC ; Output character in A
|
||||
|
||||
DROM: ; disable ROM
|
||||
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
|
||||
call MC_BIOS_ROM
|
||||
RET
|
||||
|
||||
EROM: ; enable ROM
|
||||
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
|
||||
call MC_BIOS_ROM
|
||||
RET
|
||||
|
||||
BANK0: ; Bank 0
|
||||
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
|
||||
call MC_BIOS_BANK
|
||||
RET
|
||||
|
||||
BANK1: ; Bank 1
|
||||
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
|
||||
call MC_BIOS_BANK
|
||||
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