added full mode to basic

This commit is contained in:
Joppe Blondel
2026-10-07 18:00:25 +02:00
parent 322c54d2b9
commit 463c4bddc3
+95 -3
View File
@@ -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