Updated and cleaned up Applecorn disk image.

This commit is contained in:
Bobbi Webber-Manners 2021-11-14 18:04:10 -05:00
parent 66bb51c646
commit 1da0773b2f
21 changed files with 237 additions and 197 deletions

Binary file not shown.

View File

@ -237,6 +237,8 @@ MAINZP MAC

View File

@ -471,3 +471,5 @@ OSBM2 ASC ').'

View File

@ -447,3 +447,5 @@ BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT

View File

@ -335,3 +335,5 @@ RELCOORD CLC

View File

@ -1038,3 +1038,5 @@ ERROR27 DW $FF00

View File

@ -212,3 +212,5 @@ HELLO ASC 'Applecorn MOS 2021-11-14'

View File

@ -721,3 +721,5 @@ AUXBLK ASC '**ENDOFCODE**'

View File

@ -78,3 +78,5 @@ OSGBPBCB EQU OSFILECB+1 ; OSGBPB control block

View File

@ -517,3 +517,5 @@ ECHOLP1 JSR GSREAD

View File

@ -1012,3 +1012,5 @@ VDU01 RTS

View File

@ -93,6 +93,8 @@ GEOFCMD EQU $D1

View File

@ -232,6 +232,8 @@ MHGRTAB DW $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380

View File

@ -9,98 +9,100 @@
* Trampoline in main memory used by aux memory IRQ handler * Trampoline in main memory used by aux memory IRQ handler
* to invoke Apple II / ProDOS IRQs in main memory * to invoke Apple II / ProDOS IRQs in main memory
A2IRQ >>> IENTMAIN ; IENTMAIN does not do CLI A2IRQ >>> IENTMAIN ; IENTMAIN does not do CLI
JSR A2IRQ2 JSR A2IRQ2
>>> XF2AUX,IRQBRKRET >>> XF2AUX,IRQBRKRET
A2IRQ2 PHP ; Fake things to look like IRQ A2IRQ2 PHP ; Fake things to look like IRQ
JMP (A2IRQV) ; Call Apple II ProDOS ISR JMP (A2IRQV) ; Call Apple II ProDOS ISR
* BRK handler in main memory. Used on Apple IIgs only. * BRK handler in main memory. Used on Apple IIgs only.
GSBRK >>> XF2AUX,GSBRKAUX GSBRK >>> XF2AUX,GSBRKAUX
* Set prefix if not already set * Set prefix if not already set
SETPRFX LDA #GPFXCMD SETPRFX LDA #GPFXCMD
STA :OPC7 ; Initialize cmd byte to $C7 STA :OPC7 ; Initialize cmd byte to $C7
:L1 JSR MLI :L1 JSR MLI
:OPC7 DB $00 :OPC7 DB $00
DW GSPFXPL DW GSPFXPL
LDX DRVBUF1 ; was $0300 LDX DRVBUF1 ; was $0300
BNE RTSINST BNE RTSINST
LDA $BF30 LDA $BF30
STA ONLNPL+1 ; Device number STA ONLNPL+1 ; Device number
JSR MLI JSR MLI
DB ONLNCMD DB ONLNCMD
DW ONLNPL DW ONLNPL
LDA DRVBUF2 ; was $0301 LDA DRVBUF2 ; was $0301
AND #$0F AND #$0F
TAX TAX
INX INX
STX DRVBUF1 ; was $0300 STX DRVBUF1 ; was $0300
LDA #'/' LDA #'/'
STA DRVBUF2 ; was $0301 STA DRVBUF2 ; was $0301
DEC :OPC7 DEC :OPC7
BNE :L1 BNE :L1
RTSINST LDA CMDPATH RTSINST LDA CMDPATH
BEQ :GETPFX ; CMDPATH empty BEQ :GETPFX ; CMDPATH empty
LDA CMDPATH+1 LDA CMDPATH+1
CMP #'/' CMP #'/'
BEQ :GETPFXDONE ; CMDPATH already absolute path BEQ :GETPFXDONE ; CMDPATH already absolute path
:GETPFX JSR MLI :GETPFX JSR MLI
DB $C7 ; Get Prefix DB $C7 ; Get Prefix
DW :GETADDR DW :GETADDR
:GETPFXDONE RTS :GETPFXDONE RTS
:GETADDR HEX 01 ; One parameter :GETADDR HEX 01 ; One parameter
DW CMDPATH ; Get prefix to CMDPATH DW CMDPATH ; Get prefix to CMDPATH
* Disconnect /RAM ramdrive to avoid aux corruption * Disconnect /RAM ramdrive to avoid aux corruption
* Stolen from Beagle Bros Extra K * Stolen from Beagle Bros Extra K
DISCONN LDA $BF98 DISCONN LDA $BF98
AND #$30 AND #$30
CMP #$30 CMP #$30
BNE :S1 BNE :S1
LDA $BF26 LDA $BF26
CMP $BF10 CMP $BF10
BNE :S2 BNE :S2
LDA $BF27 LDA $BF27
CMP $BF11 CMP $BF11
BEQ :S1 BEQ :S1
:S2 LDY $BF31 :S2 LDY $BF31
:L1 LDA $BF32,Y :L1 LDA $BF32,Y
AND #$F3 AND #$F3
CMP #$B3 CMP #$B3
BEQ :S3 BEQ :S3
DEY DEY
BPL :L1 BPL :L1
BMI :S1 BMI :S1
:S3 LDA $BF32,Y :S3 LDA $BF32,Y
STA DRVBUF2+1 ; was $0302 STA DRVBUF2+1 ; was $0302
:L2 LDA $BF33,Y :L2 LDA $BF33,Y
STA $BF32,Y STA $BF32,Y
BEQ :S4 BEQ :S4
INY INY
BNE :L2 BNE :L2
:S4 LDA $BF26 :S4 LDA $BF26
STA DRVBUF1 ; was $0300 STA DRVBUF1 ; was $0300
LDA $BF27 LDA $BF27
STA DRVBUF2 ; was $0301 STA DRVBUF2 ; was $0301
LDA $BF10 LDA $BF10
STA $BF26 STA $BF26
LDA $BF11 LDA $BF11
STA $BF27 STA $BF27
DEC $BF31 DEC $BF31
:S1 RTS :S1 RTS
* Reset handler - invoked on Ctrl-Reset * Reset handler - invoked on Ctrl-Reset
* XFER to AUXMOS ($C000) in aux, AuxZP on, LC on * XFER to AUXMOS ($C000) in aux, AuxZP on, LC on
RESET TSX RESET TSX
STX $0100 STX $0100
LDA $C058 ; AN0 off LDA $C058 ; AN0 off
LDA $C05A ; AN1 off LDA $C05A ; AN1 off
LDA $C05D ; AN2 on LDA $C05D ; AN2 on
LDA $C05F ; AN3 on LDA $C05F ; AN3 on
LDA #$20 ; Turn off PAGE2 shadow on ROM3 GS LDA #$20 ; Turn off PAGE2 shadow on ROM3 GS
TSB $C035 TSB $C035
>>> XF2AUX,AUXMOS >>> XF2AUX,AUXMOS
RTS RTS

View File

@ -221,4 +221,6 @@ LOADCODE PHP ; Save carry flag

View File

@ -135,6 +135,8 @@ QUITPL HEX 04 ; Number of parameters

View File

@ -6,17 +6,17 @@
* 13-Nov-2021 List of selected ROMs kept locally. * 13-Nov-2021 List of selected ROMs kept locally.
ROMMAX EQU $0382 ROMMAX EQU $0382
ROMTHIS EQU $0383 ROMTHIS EQU $0383
ROMADDRS EQU $0384 ; List of ROM filename addresses ROMADDRS EQU $0384 ; List of ROM filename addresses
ROMMENU JSR HOME ; Clear screen ROMMENU JSR HOME ; Clear screen
LDX #0 LDX #0
:LP0 LDA TITLE1,X ; Print title :LP0 LDA TITLE1,X ; Print title
BEQ :LP1 BEQ :LP1
JSR COUT1 JSR COUT1
INX INX
BNE :LP0 BNE :LP0
:LP1 :LP1
* LDA #<TITLE1 ; Print title * LDA #<TITLE1 ; Print title
@ -24,10 +24,10 @@ ROMMENU JSR HOME ; Clear screen
* LDA #>TITLE1 * LDA #>TITLE1
* STA A1H * STA A1H
* JSR PRSTRA1 * JSR PRSTRA1
JSR CROUT JSR CROUT
* TEMP * TEMP
; LDA #$00 * LDA #$00
; JMP :KEYOK * JMP :KEYOK
* TEMP * TEMP
* JSR CROUT * JSR CROUT
* LDA #<TITLE2 * LDA #<TITLE2
@ -53,72 +53,72 @@ ROMMENU JSR HOME ; Clear screen
* BEQ :KEYIN * BEQ :KEYIN
* BRA :L1 * BRA :L1
:KEYIN LDA $C000 ; Kdb data / strobe :KEYIN LDA $C000 ; Kdb data / strobe
BPL :KEYIN ; Wait for keystroke BPL :KEYIN ; Wait for keystroke
STA $C010 ; Clear strobe STA $C010 ; Clear strobe
AND #$7F AND #$7F
SEC SEC
SBC #'1' ; '1'->0, '2'->1 etc. SBC #'1' ; '1'->0, '2'->1 etc.
CMP #8 CMP #8
BCC :KEYOK BCC :KEYOK
JSR BELL ; Invalid - beep JSR BELL ; Invalid - beep
BRA :KEYIN ; Go again BRA :KEYIN ; Go again
:KEYOK STA USERSEL ; Record selection :KEYOK STA USERSEL ; Record selection
* Make list of ROMs * Make list of ROMs
LDX #63 LDX #63
LDA #0 LDA #0
:INITLP1 STA ROMADDRS,X :INITLP1 STA ROMADDRS,X
DEX DEX
BPL :INITLP1 BPL :INITLP1
STX ROMTHIS ; Current ROM=none STX ROMTHIS ; Current ROM=none
LDY USERSEL ; Index to ROM to load LDY USERSEL ; Index to ROM to load
LDA #0 ; Load it to bank 0 LDA #0 ; Load it to bank 0
CPY #6 CPY #6
BCC :INITROM2 ; <6, single ROM BCC :INITROM2 ; <6, single ROM
LDA #1 ; Load to bank 1 and 0 LDA #1 ; Load to bank 1 and 0
CPY #7 CPY #7
BCC :INITROM2 ; =7, two ROMs BCC :INITROM2 ; =7, two ROMs
LDA #7 ; Load to bank 7 to 0 LDA #7 ; Load to bank 7 to 0
LDY #0 ; Starting at ROM 0 LDY #0 ; Starting at ROM 0
:INITROM2 STA ROMMAX :INITROM2 STA ROMMAX
ASL A ASL A
TAX ; X=>ROM address table TAX ; X=>ROM address table
TYA TYA
ASL A ASL A
TAY ; Y=>ROM addresses TAY ; Y=>ROM addresses
:INITROM3 LDA ROMLIST+0,Y :INITROM3 LDA ROMLIST+0,Y
STA ROMADDRS+0,X STA ROMADDRS+0,X
LDA ROMLIST+1,Y LDA ROMLIST+1,Y
STA ROMADDRS+1,X STA ROMADDRS+1,X
INY INY
INY INY
DEX DEX
DEX DEX
BPL :INITROM3 BPL :INITROM3
RTS RTS
SELECTROM >>> ENTMAIN SELECTROM >>> ENTMAIN
CMP ROMTHIS CMP ROMTHIS
BEQ :SELECTDONE ; Already selected BEQ :SELECTDONE ; Already selected
CMP ROMMAX CMP ROMMAX
BCC :GETROM BCC :GETROM
BNE :SELECTDONE ; Out of range BNE :SELECTDONE ; Out of range
:GETROM PHA :GETROM PHA
ASL A ASL A
TAX TAX
LDA ROMADDRS+0,X ; ROM filename LDA ROMADDRS+0,X ; ROM filename
STA OPENPL+1 STA OPENPL+1
LDA ROMADDRS+1,X LDA ROMADDRS+1,X
STA OPENPL+2 STA OPENPL+2
LDA #$80 ; Load address $8000 LDA #$80 ; Load address $8000
LDX #$00 LDX #$00
SEC ; Aux memory SEC ; Aux memory
JSR LOADCODE ; Try and fetch it JSR LOADCODE ; Try and fetch it
PLA ; Get bank back PLA ; Get bank back
BCS :SELECTDONE ; Failed BCS :SELECTDONE ; Failed
STA ROMTHIS ; It is paged in STA ROMTHIS ; It is paged in
:SELECTDONE >>> XF2AUX,ROMSELDONE :SELECTDONE >>> XF2AUX,ROMSELDONE
** Print a string pointed to by A1L/A1H ** Print a string pointed to by A1L/A1H
@ -133,10 +133,10 @@ SELECTROM >>> ENTMAIN
*:NULL PLY *:NULL PLY
* RTS * RTS
TITLE1 ASC "** APPLECORN **" TITLE1 ASC "** APPLECORN **"
DB $8D,$8D DB $8D,$8D
TITLE2 ASC "Choose a BBC Micro ROM:" TITLE2 ASC "Choose a BBC Micro ROM:"
DB $8D,$8D DB $8D,$8D
*MSGTBL DW MSG1 *MSGTBL DW MSG1
* DW MSG2 * DW MSG2
@ -147,44 +147,46 @@ TITLE2 ASC "Choose a BBC Micro ROM:"
* DW MSG7 * DW MSG7
* DW MSG8 * DW MSG8
MSG1 ASC " 1. BBC BASIC" MSG1 ASC " 1. BBC BASIC"
DB $8D,$8D DB $8D,$8D
MSG2 ASC " 2. Acornsoft COMAL" MSG2 ASC " 2. Acornsoft COMAL"
DB $8D,$8D DB $8D,$8D
MSG3 ASC " 3. Acornsoft Lisp" MSG3 ASC " 3. Acornsoft Lisp"
DB $8D,$8D DB $8D,$8D
MSG4 ASC " 4. Acornsoft Forth" MSG4 ASC " 4. Acornsoft Forth"
DB $8D,$8D DB $8D,$8D
MSG5 ASC " 5. Acornsoft MicroProlog" MSG5 ASC " 5. Acornsoft MicroProlog"
DB $8D,$8D DB $8D,$8D
MSG6 ASC " 6. Acornsoft BCPL" MSG6 ASC " 6. Acornsoft BCPL"
DB $8D,$8D DB $8D,$8D
MSG7 ASC " 7. Acornsoft ISO Pascal (2 ROMs)" MSG7 ASC " 7. Acornsoft ISO Pascal (2 ROMs)"
DB $8D,$8D DB $8D,$8D
MSG8 ASC " 8. Everything! (8 ROMs)" MSG8 ASC " 8. Everything! (8 ROMs)"
DB $8D DB $8D
DB $00 DB $00
ROMLIST DW ROM1 ROMLIST DW ROM1
DW ROM2 DW ROM2
DW ROM3 DW ROM3
DW ROM4 DW ROM4
DW ROM5 DW ROM5
DW ROM6 DW ROM6
DW ROM7 DW ROM7
DW ROM8 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
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

View File

@ -187,3 +187,5 @@ FILEREFS DB $00,$00,$00,$00

View File

@ -316,6 +316,8 @@ PREFIX DS 65 ; Buffer for ProDOS prefix

View File

@ -1123,3 +1123,5 @@ MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS

View File

@ -426,6 +426,8 @@ MATCHBUF DS 65 ; For storing match results (Pascal str)