Reworked ROM menu to use sideways ROM loading.

This commit is contained in:
Bobbi Webber-Manners 2021-10-24 17:02:12 -04:00
parent 0ca2cb0689
commit fb997fec6d
5 changed files with 104 additions and 79 deletions

Binary file not shown.

View File

@ -7,7 +7,7 @@
* BBC Micro 'virtual machine' in Apple //e aux memory
***********************************************************
MAXROM EQU $00 ; Only one sideways ROM
MAXROM EQU $00 ; Just one ROM
ZP1 EQU $90 ; $90-$9f are spare Econet space
; so safe to use
@ -125,6 +125,8 @@ MOSHIGH SEI
DEX
BPL :INITPG2
JSR INITROMS ; Initialize sideways ROM table
JSR KBDINIT ; Returns A=startup MODE
JSR VDUINIT ; Initialise VDU driver
JSR PRHELLO

View File

@ -327,15 +327,108 @@ RDROM LDA $F4
* X=ROM to select
* All registers must be preserved
ROMSELECT CPX $F4
BNE :ROMSELOK ; Already selected
BEQ :ROMSELOK ; Already selected
* Insert code here for faking sideways ROMs by loading or otherwise
* fetching code to $8000. All registers must be preserved.
PHA
PHX
PHY
TXA
ASL A
TAX
LDA ROMTAB,X ; LSB of pointer to name
STA OSFILECB+0
LDA ROMTAB+1,X ; MSB of pointer to name
STA OSFILECB+1
STZ OSFILECB+2 ; Dest address $8000
LDA #$80
STA OSFILECB+3
LDX #<OSFILECB
LDY #>OSFILECB
LDA #$FF ; Means 'LOAD'
JSR OSFILE
PLY
PLX
PLA
STX $F4 ; Set Current ROM number
:ROMSELOK
EVENT RTS
BASICROM ASC 'BASIC2.ROM'
DB $0D,$00
COMALROM ASC 'COMAL.ROM'
DB $0D,$00
LISPROM ASC 'LISP501.ROM'
DB $0D,$00
FORTHROM ASC 'FORTH103.ROM'
DB $0D,$00
PROLOGROM ASC 'MPROLOG310.ROM'
DB $0D,$00
BCPLROM ASC 'BCPL7.0.ROM'
DB $0D,$00
PASCROM1 ASC 'USERROM2.ROM'
DB $0D,$00
PASCROM2 ASC 'USERROM1.ROM'
DB $0D,$00
* Initialize ROMTAB according to user selection in menu
INITROMS STA $C002 ; Read main mem
LDA USERSEL
STA $C003 ; Read aux mem
ASL ; x2
CLC
ADC #<ROMS
STA OSLPTR+0
LDA #>ROMS
ADC #$00
STA OSLPTR+1
LDY #$00
LDA (OSLPTR),Y
STA ROMTAB+0
INY
LDA (OSLPTR),Y
STA ROMTAB+1
LDA #$FF
STA $F4 ; Force ROM to load
RTS
* Active sideways ROMs
ROMTAB DW $0000 ; ROM0
DW $0000 ; ROM1
DW $0000 ; ROM2
DW $0000 ; ROM3
DW $0000 ; ROM4
DW $0000 ; ROM5
DW $0000 ; ROM6
DW $0000 ; ROM7
DW $0000 ; ROM8
DW $0000 ; ROM9
DW $0000 ; ROMA
DW $0000 ; ROMB
DW $0000 ; ROMC
DW $0000 ; ROMD
DW $0000 ; ROME
DW $0000 ; ROMF
* ROM filenames in same order as in the menu
* ROMMENU copies these to ROMTAB upon user selection
ROMS DW BASICROM
DW COMALROM
DW LISPROM
DW FORTHROM
DW PROLOGROM
DW BCPLROM
DW PASCROM1
DW PASCROM2
*EVENT LDA #<OSEVENM
* LDY #>OSEVENM
* JMP PRSTR

View File

@ -17,10 +17,10 @@ START JSR CROUT
TRB $C035
JSR ROMMENU
LDA #>AUXADDR ; Address in aux
LDX #<AUXADDR
SEC ; Load into aux
JSR LOADCODE ; Load lang ROM
* LDA #>AUXADDR ; Address in aux
* LDX #<AUXADDR
* SEC ; Load into aux
* JSR LOADCODE ; Load lang ROM
LDA #<:FDFILE
STA OPENPL+1

View File

@ -44,12 +44,7 @@ ROMMENU JSR HOME ; Clear screen
BCC :KEYOK
JSR BELL ; Invalid - beep
BRA :KEYIN ; Go again
:KEYOK ASL ; x2
TAX
LDA ROMTBL,X ; Fetch ROM filename ...
STA OPENPL+1 ; ... and put in MLI OPEN PL
LDA ROMTBL+1,X
STA OPENPL+2
:KEYOK STA USERSEL ; Record selection
RTS
* Print a string pointed to by A1L/A1H
@ -78,94 +73,29 @@ MSGTBL DW MSG1
DW MSG7
DW MSG8
ROMTBL DW ROM1
DW ROM2
DW ROM3
DW ROM4
DW ROM5
DW ROM6
DW ROM7
DW ROM8
MSG1 ASC " 1. BBC BASIC"
DB $00
ROM1 STR "BASIC2.ROM"
MSG2 ASC " 2. Acornsoft COMAL"
DB $00
ROM2 STR "COMAL.ROM"
MSG3 ASC " 3. Acornsoft Lisp"
DB $00
ROM3 STR "LISP501.ROM"
MSG4 ASC " 4. Acornsoft Forth"
DB $00
ROM4 STR "FORTH103.ROM"
MSG5 ASC " 5. Acornsoft MicroProlog"
DB $00
ROM5 STR "MPROLOG310.ROM"
MSG6 ASC " 6. Acornsoft BCPL"
DB $00
ROM6 STR "BCPL7.0.ROM"
MSG7 ASC " 7. USERROM1.ROM"
DB $00
ROM7 STR "USERROM1.ROM"
MSG8 ASC " 8. USERROM2.ROM"
DB $00
ROM8 STR "USERROM2.ROM"
USERSEL DB $00