Merge PR145 'Updated ROM selection'
This commit is contained in:
parent
565075e464
commit
0024867910
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
|
@ -204,7 +204,7 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error
|
|||
RTS ; %000x1xxx host type, 'A'pple
|
||||
BYTE00A BRK
|
||||
DB $F7
|
||||
HELLO ASC 'Applecorn MOS 2021-11-05'
|
||||
HELLO ASC 'Applecorn MOS 2021-11-13'
|
||||
DB $00 ; Unify MOS messages
|
||||
|
||||
|
||||
|
|
348
auxmem.misc.s
348
auxmem.misc.s
|
@ -8,6 +8,7 @@
|
|||
* 25-Oct-2021 Initial pseudo-sideways ROM selection code.
|
||||
* 26-Oct-2021 Corrected entry parameters to OSRDRM.
|
||||
* 03-Nov-2021 Temp'y fix, if can't find SROM, ignores it.
|
||||
* 13-Nov-2021 ROMSELECT calls mainmem to load ROM.
|
||||
|
||||
|
||||
* OSBYTE $80 - ADVAL
|
||||
|
@ -331,182 +332,211 @@ RDROM LDA $F4
|
|||
* Select a sideways ROM
|
||||
* X=ROM to select
|
||||
* All registers must be preserved
|
||||
ROMSELECT CPX $F8
|
||||
BEQ :ROMSELOK ; Already selected
|
||||
|
||||
ROMSELECT
|
||||
* Insert code here for faking sideways ROMs by loading or otherwise
|
||||
* fetching code to $8000. All registers must be preserved.
|
||||
CPX MAXROM
|
||||
BEQ :ROMSEL
|
||||
BCS :ROMSELOK ; Out of range, ignore
|
||||
:ROMSEL PHA
|
||||
:ROMSEL PHP
|
||||
PHA
|
||||
PHX
|
||||
PHY
|
||||
|
||||
LDA OSLPTR+0
|
||||
PHA
|
||||
LDA OSLPTR+1
|
||||
PHA
|
||||
|
||||
TXA
|
||||
ASL A
|
||||
TAX
|
||||
LDA ROMTAB+0,X ; LSB of pointer to name
|
||||
STA OSFILECB+0
|
||||
LDA ROMTAB+1,X ; MSB of pointer to name
|
||||
STA OSFILECB+1
|
||||
|
||||
LDX #<OSFILECB
|
||||
LDY #>OSFILECB
|
||||
LDA #$05 ; Means 'INFO'
|
||||
JSR OSFILE
|
||||
CMP #$01
|
||||
BNE :ROMNOTFND ; File not found
|
||||
|
||||
STZ OSFILECB+2 ; Dest address $8000
|
||||
LDA #$80
|
||||
STA OSFILECB+3
|
||||
STZ OSFILECB+4
|
||||
STZ OSFILECB+5
|
||||
STZ OSFILECB+6 ; Load to specified address
|
||||
LDX #<OSFILECB
|
||||
LDY #>OSFILECB
|
||||
LDA #$FF ; Means 'LOAD'
|
||||
JSR OSFILE
|
||||
:ROMNOTFND
|
||||
PLA
|
||||
STA OSLPTR+1
|
||||
PLA
|
||||
STA OSLPTR+0
|
||||
SEI
|
||||
TXA ; A=ROM to select
|
||||
>>> XF2MAIN,SELECTROM
|
||||
ROMSELDONE >>> ENTAUX
|
||||
PLY
|
||||
PLX
|
||||
PLA
|
||||
STX $F8 ; Set ROM loaded
|
||||
PLP
|
||||
:ROMSELOK STX $F4 ; Set Current ROM number
|
||||
RTS
|
||||
|
||||
|
||||
ROMXX
|
||||
* CPX $F8
|
||||
* BEQ :ROMSELOK ; Already selected
|
||||
*
|
||||
** Insert code here for faking sideways ROMs by loading or otherwise
|
||||
** fetching code to $8000. All registers must be preserved.
|
||||
* CPX MAXROM
|
||||
* BEQ :ROMSEL
|
||||
* BCS :ROMSELOK ; Out of range, ignore
|
||||
*:ROMSEL PHA
|
||||
* PHX
|
||||
* PHY
|
||||
*
|
||||
* LDA OSLPTR+0
|
||||
* PHA
|
||||
* LDA OSLPTR+1
|
||||
* PHA
|
||||
*
|
||||
* TXA
|
||||
* ASL A
|
||||
* TAX
|
||||
* LDA ROMTAB+0,X ; LSB of pointer to name
|
||||
* STA OSFILECB+0
|
||||
* LDA ROMTAB+1,X ; MSB of pointer to name
|
||||
* STA OSFILECB+1
|
||||
*
|
||||
* LDX #<OSFILECB
|
||||
* LDY #>OSFILECB
|
||||
* LDA #$05 ; Means 'INFO'
|
||||
* JSR OSFILE
|
||||
* CMP #$01
|
||||
* BNE :ROMNOTFND ; File not found
|
||||
*
|
||||
* STZ OSFILECB+2 ; Dest address $8000
|
||||
* LDA #$80
|
||||
* STA OSFILECB+3
|
||||
* STZ OSFILECB+4
|
||||
* STZ OSFILECB+5
|
||||
* STZ OSFILECB+6 ; Load to specified address
|
||||
* LDX #<OSFILECB
|
||||
* LDY #>OSFILECB
|
||||
* LDA #$FF ; Means 'LOAD'
|
||||
* JSR OSFILE
|
||||
*:ROMNOTFND
|
||||
* PLA
|
||||
* STA OSLPTR+1
|
||||
* PLA
|
||||
* STA OSLPTR+0
|
||||
* PLY
|
||||
* PLX
|
||||
* PLA
|
||||
* STX $F8 ; Set ROM loaded
|
||||
*:ROMSELOK STX $F4 ; Set Current ROM number
|
||||
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 'PASC.1.10.1.ROM'
|
||||
DB $0D,$00
|
||||
|
||||
PASCROM2 ASC 'PASC.1.10.2.ROM'
|
||||
DB $0D,$00
|
||||
|
||||
*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 'PASC.1.10.1.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
*PASCROM2 ASC 'PASC.1.10.2.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
|
||||
* Initialize ROMTAB according to user selection in menu
|
||||
ROMINIT STZ MAXROM ; One sideways ROM only
|
||||
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
|
||||
STA $C002 ; Read main mem
|
||||
LDA USERSEL
|
||||
STA $C003 ; Read aux mem
|
||||
CMP #6 ; Menu entry 7 has two ROMs
|
||||
BNE :S1
|
||||
LDA #<PASCROM2
|
||||
STA ROMTAB+2
|
||||
LDA #>PASCROM2
|
||||
STA ROMTAB+3
|
||||
INC MAXROM ; Two ROMs
|
||||
BRA :DONE
|
||||
:S1 CMP #7 ; Menu entry 8
|
||||
BNE :DONE
|
||||
LDA #<PASCROM1
|
||||
STA ROMTAB+0
|
||||
LDA #>PASCROM1
|
||||
STA ROMTAB+1
|
||||
LDA #<PASCROM2
|
||||
STA ROMTAB+2
|
||||
LDA #>PASCROM2
|
||||
STA ROMTAB+3
|
||||
LDA #<LISPROM
|
||||
STA ROMTAB+4
|
||||
LDA #>LISPROM
|
||||
STA ROMTAB+5
|
||||
LDA #<FORTHROM
|
||||
STA ROMTAB+6
|
||||
LDA #>FORTHROM
|
||||
STA ROMTAB+7
|
||||
LDA #<PROLOGROM
|
||||
STA ROMTAB+8
|
||||
LDA #>PROLOGROM
|
||||
STA ROMTAB+9
|
||||
LDA #<BCPLROM
|
||||
STA ROMTAB+10
|
||||
LDA #>BCPLROM
|
||||
STA ROMTAB+11
|
||||
LDA #<COMALROM
|
||||
STA ROMTAB+12
|
||||
LDA #>COMALROM
|
||||
STA ROMTAB+13
|
||||
LDA #<BASICROM
|
||||
STA ROMTAB+14
|
||||
LDA #>BASICROM
|
||||
STA ROMTAB+15
|
||||
LDA #7 ; 8 sideways ROMs
|
||||
|
||||
CMP #6
|
||||
BNE :X1
|
||||
INC MAXROM
|
||||
:X1 CMP #7
|
||||
BNE :X2
|
||||
STA MAXROM
|
||||
:DONE LDA #$FF
|
||||
STA $F8 ; Force ROM to load
|
||||
RTS
|
||||
:X2 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
|
||||
* 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
|
||||
* STA $C002 ; Read main mem
|
||||
* LDA USERSEL
|
||||
* STA $C003 ; Read aux mem
|
||||
* CMP #6 ; Menu entry 7 has two ROMs
|
||||
* BNE :S1
|
||||
* LDA #<PASCROM2
|
||||
* STA ROMTAB+2
|
||||
* LDA #>PASCROM2
|
||||
* STA ROMTAB+3
|
||||
* INC MAXROM ; Two ROMs
|
||||
* BRA :DONE
|
||||
*:S1 CMP #7 ; Menu entry 8
|
||||
* BNE :DONE
|
||||
* LDA #<PASCROM1
|
||||
* STA ROMTAB+0
|
||||
* LDA #>PASCROM1
|
||||
* STA ROMTAB+1
|
||||
* LDA #<PASCROM2
|
||||
* STA ROMTAB+2
|
||||
* LDA #>PASCROM2
|
||||
* STA ROMTAB+3
|
||||
* LDA #<LISPROM
|
||||
* STA ROMTAB+4
|
||||
* LDA #>LISPROM
|
||||
* STA ROMTAB+5
|
||||
* LDA #<FORTHROM
|
||||
* STA ROMTAB+6
|
||||
* LDA #>FORTHROM
|
||||
* STA ROMTAB+7
|
||||
* LDA #<PROLOGROM
|
||||
* STA ROMTAB+8
|
||||
* LDA #>PROLOGROM
|
||||
* STA ROMTAB+9
|
||||
* LDA #<BCPLROM
|
||||
* STA ROMTAB+10
|
||||
* LDA #>BCPLROM
|
||||
* STA ROMTAB+11
|
||||
* LDA #<COMALROM
|
||||
* STA ROMTAB+12
|
||||
* LDA #>COMALROM
|
||||
* STA ROMTAB+13
|
||||
* LDA #<BASICROM
|
||||
* STA ROMTAB+14
|
||||
* LDA #>BASICROM
|
||||
* STA ROMTAB+15
|
||||
* LDA #7 ; 8 sideways ROMs
|
||||
* STA MAXROM
|
||||
*:DONE LDA #$FF
|
||||
* STA $F8 ; 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
|
||||
|
@ -689,5 +719,3 @@ AUXBLK ASC '**ENDOFCODE**'
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
*
|
||||
* Applecorn loader code. Runs in main memory.
|
||||
* 01-Oct-2021 Copies MOS code to whole $D000-$FFFF.
|
||||
* 13-Nov-2021 LOADCODE uses absolute path to Applecorn directory.
|
||||
|
||||
|
||||
* Loads Acorn ROM file (16KB) from disk and writes it
|
||||
* to aux memory starting at $08000. Copies Applecorn MOS
|
||||
|
@ -16,8 +18,6 @@ START JSR CROUT
|
|||
LDA #$20 ; PAGE2 shadow on ROM3 GS
|
||||
TRB $C035
|
||||
|
||||
STZ $C073 ; Force RamWorks bank zero
|
||||
|
||||
JSR ROMMENU
|
||||
* LDA #>AUXADDR ; Address in aux
|
||||
* LDX #<AUXADDR
|
||||
|
@ -84,21 +84,60 @@ START JSR CROUT
|
|||
:FNTFILE STR "FONT.DAT" ; Filename for bitmap font
|
||||
|
||||
* Load image from file into memory
|
||||
* On entry: OPENPL set up to point to file to load
|
||||
* On entry: OPENPL set up to point to leafname of file to load
|
||||
* Loads file from directory applecorn started from
|
||||
* Uses BLKBUF at loading buffer
|
||||
* Load address in A,X
|
||||
* Carry set->load to aux, carry clear->load to main
|
||||
LOADCODE PHP ; Save carry flag
|
||||
STA :ADDRH ; MSB of load address
|
||||
STX :ADDRL ; LSB of load address
|
||||
STZ :BLOCKS
|
||||
JSR OPENFILE ; Open ROM file
|
||||
|
||||
LDX #0
|
||||
:LP1 LDA CMDPATH+1,X ; Copy Applecorn path to MOSFILE
|
||||
STA MOSFILE2+1,X
|
||||
INX
|
||||
CPX CMDPATH
|
||||
BCC :LP1
|
||||
:LP2 DEX
|
||||
LDA MOSFILE2+1,X
|
||||
CMP #'/'
|
||||
BNE :LP2
|
||||
LDA OPENPL+1
|
||||
STA A1L
|
||||
LDA OPENPL+2
|
||||
STA A1H
|
||||
LDY #1
|
||||
LDA (A1L),Y
|
||||
CMP #'/'
|
||||
BEQ :L4 ; Already absolute path
|
||||
:LP3 LDA (A1L),Y
|
||||
STA MOSFILE2+2,X
|
||||
INX
|
||||
INY
|
||||
TYA
|
||||
CMP (A1L)
|
||||
BCC :LP3
|
||||
BEQ :LP3
|
||||
INX
|
||||
STX MOSFILE2+0
|
||||
LDA #<MOSFILE2 ; Point to absolute path
|
||||
STA OPENPL+1
|
||||
LDA #>MOSFILE2
|
||||
STA OPENPL+2
|
||||
|
||||
:L4 JSR OPENFILE ; Open ROM file
|
||||
BCC :S1
|
||||
LDX #$00
|
||||
:L1A LDA :CANTOPEN,X ; Part one of error msg
|
||||
PLP
|
||||
BCC :L1A ; Load to main, report error
|
||||
RTS ; Load to aux, return CS=Failed
|
||||
:L1A LDX #$00
|
||||
:L1B LDA :CANTOPEN,X ; Part one of error msg
|
||||
BEQ :S0
|
||||
JSR COUT1
|
||||
INX
|
||||
BRA :L1A
|
||||
BRA :L1B
|
||||
:S0 LDA OPENPL+1 ; Print filename
|
||||
STA A1L
|
||||
LDA OPENPL+2
|
||||
|
@ -117,9 +156,12 @@ LOADCODE PHP ; Save carry flag
|
|||
:SPIN BRA :SPIN
|
||||
:S1 LDA OPENPL+5 ; File reference number
|
||||
STA READPL+1
|
||||
:L2 LDA #'.'+$80 ; Read file block by block
|
||||
:L2 PLP
|
||||
PHP
|
||||
BCS :L2A ; Loading to aux, skip dots
|
||||
LDA #'.'+$80 ; Print progress dots
|
||||
JSR COUT1
|
||||
JSR RDFILE
|
||||
:L2A JSR RDFILE ; Read file block by block
|
||||
BCS :CLOSE ; EOF (0 bytes left) or some error
|
||||
LDA #<BLKBUF ; Source start addr -> A1L,A1H
|
||||
STA A1L
|
||||
|
@ -153,6 +195,7 @@ LOADCODE PHP ; Save carry flag
|
|||
JSR CLSFILE
|
||||
JSR CROUT
|
||||
PLP
|
||||
CLC ; CC=Ok
|
||||
RTS
|
||||
:ADDRL DB $00 ; Destination address (LSB)
|
||||
:ADDRH DB $00 ; Destination address (MSB)
|
||||
|
@ -176,8 +219,4 @@ LOADCODE PHP ; Save carry flag
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
215
mainmem.menu.s
215
mainmem.menu.s
|
@ -3,36 +3,55 @@
|
|||
*
|
||||
* Applecorn ROM menu. Runs in main memory.
|
||||
|
||||
ROMMENU JSR HOME ; Clear screen
|
||||
LDA #<TITLE1 ; Print title
|
||||
STA A1L
|
||||
LDA #>TITLE1
|
||||
STA A1H
|
||||
JSR PRSTRA1
|
||||
JSR CROUT
|
||||
JSR CROUT
|
||||
LDA #<TITLE2
|
||||
STA A1L
|
||||
LDA #>TITLE2
|
||||
STA A1H
|
||||
JSR PRSTRA1
|
||||
JSR CROUT
|
||||
JSR CROUT
|
||||
JSR CROUT
|
||||
* 13-Nov-2021 List of selected ROMs kept locally.
|
||||
|
||||
LDX #$00 ; Print menu
|
||||
:L1 LDA MSGTBL,X
|
||||
STA A1L
|
||||
|
||||
ROMMAX EQU $0382
|
||||
ROMTHIS EQU $0383
|
||||
ROMADDRS EQU $0384 ; List of ROM filename addresses
|
||||
|
||||
ROMMENU JSR HOME ; Clear screen
|
||||
LDX #0
|
||||
:LP0 LDA TITLE1,X ; Print title
|
||||
BEQ :LP1
|
||||
JSR COUT1
|
||||
INX
|
||||
LDA MSGTBL,X
|
||||
STA A1H
|
||||
INX
|
||||
JSR PRSTRA1
|
||||
BNE :LP0
|
||||
:LP1
|
||||
|
||||
* LDA #<TITLE1 ; Print title
|
||||
* STA A1L
|
||||
* LDA #>TITLE1
|
||||
* STA A1H
|
||||
* JSR PRSTRA1
|
||||
JSR CROUT
|
||||
JSR CROUT
|
||||
CPX #8*2
|
||||
BEQ :KEYIN
|
||||
BRA :L1
|
||||
* TEMP
|
||||
; LDA #$00
|
||||
; JMP :KEYOK
|
||||
* TEMP
|
||||
* JSR CROUT
|
||||
* LDA #<TITLE2
|
||||
* STA A1L
|
||||
* LDA #>TITLE2
|
||||
* STA A1H
|
||||
* JSR PRSTRA1
|
||||
* JSR CROUT
|
||||
* JSR CROUT
|
||||
* JSR CROUT
|
||||
*
|
||||
* LDX #$00 ; Print menu
|
||||
*:L1 LDA MSGTBL,X
|
||||
* STA A1L
|
||||
* INX
|
||||
* LDA MSGTBL,X
|
||||
* STA A1H
|
||||
* INX
|
||||
* JSR PRSTRA1
|
||||
* JSR CROUT
|
||||
* JSR CROUT
|
||||
* CPX #8*2
|
||||
* BEQ :KEYIN
|
||||
* BRA :L1
|
||||
|
||||
:KEYIN LDA $C000 ; Kdb data / strobe
|
||||
BPL :KEYIN ; Wait for keystroke
|
||||
|
@ -45,63 +64,127 @@ ROMMENU JSR HOME ; Clear screen
|
|||
JSR BELL ; Invalid - beep
|
||||
BRA :KEYIN ; Go again
|
||||
:KEYOK STA USERSEL ; Record selection
|
||||
|
||||
* Make list of ROMs
|
||||
LDX #63
|
||||
LDA #0
|
||||
:INITLP1 STA ROMADDRS,X
|
||||
DEX
|
||||
BPL :INITLP1
|
||||
STX ROMTHIS ; Current ROM=none
|
||||
LDY USERSEL ; Index to ROM to load
|
||||
LDA #0 ; Load it to bank 0
|
||||
CPY #6
|
||||
BCC :INITROM2 ; <6, single ROM
|
||||
LDA #1 ; Load to bank 1 and 0
|
||||
CPY #7
|
||||
BCC :INITROM2 ; =7, two ROMs
|
||||
LDA #7 ; Load to bank 7 to 0
|
||||
LDY #0 ; Starting at ROM 0
|
||||
:INITROM2 STA ROMMAX
|
||||
ASL A
|
||||
TAX ; X=>ROM address table
|
||||
TYA
|
||||
ASL A
|
||||
TAY ; Y=>ROM addresses
|
||||
:INITROM3 LDA ROMLIST+0,Y
|
||||
STA ROMADDRS+0,X
|
||||
LDA ROMLIST+1,Y
|
||||
STA ROMADDRS+1,X
|
||||
INY
|
||||
INY
|
||||
DEX
|
||||
DEX
|
||||
BPL :INITROM3
|
||||
RTS
|
||||
|
||||
* Print a string pointed to by A1L/A1H
|
||||
* Trashes A, preserves X and Y
|
||||
PRSTRA1 PHY
|
||||
LDY #$00
|
||||
:L1 LDA (A1L),Y
|
||||
BEQ :NULL
|
||||
JSR COUT1
|
||||
INY
|
||||
BRA :L1
|
||||
:NULL PLY
|
||||
RTS
|
||||
SELECTROM >>> ENTMAIN
|
||||
CMP ROMTHIS
|
||||
BEQ :SELECTDONE ; Already selected
|
||||
CMP ROMMAX
|
||||
BCC :GETROM
|
||||
BNE :SELECTDONE ; Out of range
|
||||
:GETROM PHA
|
||||
ASL A
|
||||
TAX
|
||||
LDA ROMADDRS+0,X ; ROM filename
|
||||
STA OPENPL+1
|
||||
LDA ROMADDRS+1,X
|
||||
STA OPENPL+2
|
||||
LDA #$80 ; Load address $8000
|
||||
LDX #$00
|
||||
SEC ; Aux memory
|
||||
JSR LOADCODE ; Try and fetch it
|
||||
PLA ; Get bank back
|
||||
BCS :SELECTDONE ; Failed
|
||||
STA ROMTHIS ; It is paged in
|
||||
:SELECTDONE >>> XF2AUX,ROMSELDONE
|
||||
|
||||
|
||||
** Print a string pointed to by A1L/A1H
|
||||
** Trashes A, preserves X and Y
|
||||
*PRSTRA1 PHY
|
||||
* LDY #$00
|
||||
*:L1 LDA (A1L),Y
|
||||
* BEQ :NULL
|
||||
* JSR COUT1
|
||||
* INY
|
||||
* BRA :L1
|
||||
*:NULL PLY
|
||||
* RTS
|
||||
|
||||
TITLE1 ASC "** APPLECORN **"
|
||||
DB $00
|
||||
DB $8D,$8D
|
||||
TITLE2 ASC "Choose a BBC Micro ROM:"
|
||||
DB $00
|
||||
DB $8D,$8D
|
||||
|
||||
MSGTBL DW MSG1
|
||||
DW MSG2
|
||||
DW MSG3
|
||||
DW MSG4
|
||||
DW MSG5
|
||||
DW MSG6
|
||||
DW MSG7
|
||||
DW MSG8
|
||||
*MSGTBL DW MSG1
|
||||
* DW MSG2
|
||||
* DW MSG3
|
||||
* DW MSG4
|
||||
* DW MSG5
|
||||
* DW MSG6
|
||||
* DW MSG7
|
||||
* DW MSG8
|
||||
|
||||
MSG1 ASC " 1. BBC BASIC"
|
||||
DB $00
|
||||
|
||||
DB $8D,$8D
|
||||
MSG2 ASC " 2. Acornsoft COMAL"
|
||||
DB $00
|
||||
|
||||
DB $8D,$8D
|
||||
MSG3 ASC " 3. Acornsoft Lisp"
|
||||
DB $00
|
||||
|
||||
DB $8D,$8D
|
||||
MSG4 ASC " 4. Acornsoft Forth"
|
||||
DB $00
|
||||
|
||||
DB $8D,$8D
|
||||
MSG5 ASC " 5. Acornsoft MicroProlog"
|
||||
DB $00
|
||||
|
||||
DB $8D,$8D
|
||||
MSG6 ASC " 6. Acornsoft BCPL"
|
||||
DB $00
|
||||
|
||||
DB $8D,$8D
|
||||
MSG7 ASC " 7. Acornsoft ISO Pascal (2 ROMs)"
|
||||
DB $8D,$8D
|
||||
MSG8 ASC " 8. Everything! (8 ROMs)"
|
||||
DB $8D
|
||||
DB $00
|
||||
|
||||
MSG8 ASC " 8. Everything! (8 ROMs)"
|
||||
DB $00
|
||||
|
||||
ROMLIST DW ROM1
|
||||
DW ROM2
|
||||
DW ROM3
|
||||
DW ROM4
|
||||
DW ROM5
|
||||
DW ROM6
|
||||
DW ROM7
|
||||
DW ROM8
|
||||
|
||||
ROM1 STR "BASIC2.ROM"
|
||||
ROM2 STR "COMAL.ROM"
|
||||
ROM3 STR "LISP501.ROM"
|
||||
ROM4 STR "FORTH103.ROM"
|
||||
ROM5 STR "MPROLOG310.ROM"
|
||||
ROM6 STR "BCPL700.ROM"
|
||||
ROM7 STR "PASCAL110A.ROM"
|
||||
ROM8 STR "PASCAL110B.ROM"
|
||||
|
||||
USERSEL DB $00
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue