Merge pull request #172 from apple2geek/system

System
This commit is contained in:
Bobbi Webber-Manners
2022-10-10 02:48:06 -04:00
committed by GitHub
3 changed files with 161 additions and 96 deletions

View File

@@ -18,79 +18,79 @@ A2IRQ2 PHP ; Fake things to look like IRQ
* 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 DEVNUM * LDA DEVNUM
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 MACHID *DISCONN LDA MACHID
AND #$30 * AND #$30
CMP #$30 * CMP #$30
BNE :S1 * BNE :S1
LDA DEVADR32 * LDA DEVADR32
CMP DEVADR01 * CMP DEVADR01
BNE :S2 * BNE :S2
LDA DEVADR32+1 * LDA DEVADR32+1
CMP DEVADR01+1 * CMP DEVADR01+1
BEQ :S1 * BEQ :S1
:S2 LDY DEVCNT *:S2 LDY DEVCNT
:L1 LDA DEVLST,Y *:L1 LDA DEVLST,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 DEVLST,Y *:S3 LDA DEVLST,Y
STA DRVBUF2+1 ; was $0302 * STA DRVBUF2+1 ; was $0302
:L2 LDA DEVLST+1,Y *:L2 LDA DEVLST+1,Y
STA DEVLST,Y * STA DEVLST,Y
BEQ :S4 * BEQ :S4
INY * INY
BNE :L2 * BNE :L2
:S4 LDA DEVADR32 *:S4 LDA DEVADR32
STA DRVBUF1 ; was $0300 * STA DRVBUF1 ; was $0300
LDA DEVADR32+1 * LDA DEVADR32+1
STA DRVBUF2 ; was $0301 * STA DRVBUF2 ; was $0301
LDA DEVADR01 * LDA DEVADR01
STA DEVADR32 * STA DEVADR32
LDA DEVADR01+1 * LDA DEVADR01+1
STA DEVADR32+1 * STA DEVADR32+1
DEC DEVCNT * DEC DEVCNT
: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

View File

@@ -42,8 +42,80 @@ SUPPORTED LDA #$DF ; Protect pages $0,$1,and $3-$7
STA P8BMAP282F STA P8BMAP282F
STA P8BMAP3037 STA P8BMAP3037
STA P8BMAP383F STA P8BMAP383F
* Set prefix if not already set
SETPRFX LDA #GPFXCMD
STA :OPC7 ; Initialize cmd byte to $C7
:L1 JSR MLI
:OPC7 DB $00
DW GSPFXPL
LDX DRVBUF1 ; was $0300
BNE RTSINST
LDA DEVNUM
STA ONLNPL+1 ; Device number
JSR MLI
DB ONLNCMD
DW ONLNPL
LDA DRVBUF2 ; was $0301
AND #$0F
TAX
INX
STX DRVBUF1 ; was $0300
LDA #'/'
STA DRVBUF2 ; was $0301
DEC :OPC7
BNE :L1
RTSINST LDA CMDPATH
BEQ :GETPFX ; CMDPATH empty
LDA CMDPATH+1
CMP #'/'
BEQ DISCONN ; CMDPATH already absolute path
:GETPFX JSR MLI
DB $C7 ; Get Prefix
DW GETPFXPARM
* Disconnect /RAM ramdrive to avoid aux corruption
* Stolen from Beagle Bros Extra K
DISCONN LDA MACHID
AND #$30
CMP #$30
BNE :S1
LDA DEVADR32
CMP DEVADR01
BNE :S2
LDA DEVADR32+1
CMP DEVADR01+1
BEQ :S1
:S2 LDY DEVCNT
:L1 LDA DEVLST,Y
AND #$F3
CMP #$B3
BEQ :S3
DEY
BPL :L1
BMI :S1
:S3 LDA DEVLST,Y
STA DRVBUF2+1 ; was $0302
:L2 LDA DEVLST+1,Y
STA DEVLST,Y
BEQ :S4
INY
BNE :L2
:S4 LDA DEVADR32
STA DRVBUF1 ; was $0300
LDA DEVADR32+1
STA DRVBUF2 ; was $0301
LDA DEVADR01
STA DEVADR32
LDA DEVADR01+1
STA DEVADR32+1
DEC DEVCNT
:S1
JMP START JMP START
GETPFXPARM HEX 01 ; One parameter
DW CMDPATH ; Get prefix to CMDPATH
UNSUPPORTED JSR HOME UNSUPPORTED JSR HOME
LDX #$00 LDX #$00
UNSUPLP LDA UNSUPMSG,X UNSUPLP LDA UNSUPMSG,X
@@ -71,10 +143,7 @@ PADDING ASC '***THISISPROTOTYPECODE***'
; Original APPLECORN.BIN code starts here ; Original APPLECORN.BIN code starts here
START JSR CROUT START
JSR SETPRFX
JSR DISCONN
JSR ROMMENU JSR ROMMENU
* LDA #>AUXADDR ; Address in aux * LDA #>AUXADDR ; Address in aux
* LDX #<AUXADDR * LDX #<AUXADDR

View File

@@ -24,37 +24,33 @@ MOSFILE2 EQU $0341 ; $0341 length
* ; $03C4 EXEC EXEC COUNT * ; $03C4 EXEC EXEC COUNT
* ; $03C8 SIZE START OFFSET * ; $03C8 SIZE START OFFSET
* ; $03CC ATTR END * ; $03CC ATTR END
* ; $03D0-$03FF: ProDOS vectors, etc. * ; $03D0-$03EF: ProDOS - reserved for .SYSTEM programs
* ; $03D0-$03D2 JMP WARM * ; $03D0-$03EC Undefined, available
* ; $03D3-$03D5 JMP WARM * ; $03ED-$03EE XFER address
* ; $03D6-$03EC ProDOS * ; $03EF ProDOS reserved
* ; $03ED-$03DE XFER address * ; $03F0-$3FF: Monitor/Applesoft locations
* ; $03EF ProDOS * ; $03F0-$03F1 BRKV
* ; $03F0-$03D1 BRKV * ; $03F2-$03F3 RESETV
* ; $03F2-$03D3 RESETV * ; $03F4 PWDRUP
* ; $03F4 RESETV ACK * ; $03F5-$03F7 AMPERV
* ; $03F5-$03F7 JMP AMP * ; $03F8-$03FA USERV (^Y)
* ; $03F8-$03FA JMP USER * ; $03FB-$03FD NMIV
* ; $03FB-$03FD JMP MON
* ; $03FE-$03FF IRQV * ; $03FE-$03FF IRQV
* *
* EQU $0400 ; $0400- Can't use as ProDOS uses 'hidden' bytes * EQU $0400 ; $0400-$07FF Text Page 1 & screen holes - not for general use
* ; -$07FF within screen for workspace SCREEN EQU $0800 ; $0800-$0BFF Text Page 2
SCREEN EQU $0800 ; $0800-$0BFF Half 80-col screen or 40-col screen
IOBUF0 EQU $0C00 ; $0C00-$0FFF For loading ROM, OSFILE, *. IOBUF0 EQU $0C00 ; $0C00-$0FFF For loading ROM, OSFILE, *.
IOBUF1 EQU $1000 ; $1000-$13FF Four open files for langs IOBUF1 EQU $1000 ; $1000-$13FF Four open files for langs
IOBUF2 EQU $1400 ; $1400-$17FF IOBUF2 EQU $1400 ; $1400-$17FF
IOBUF3 EQU $1800 ; $1800-$1BFF IOBUF3 EQU $1800 ; $1800-$1BFF
IOBUF4 EQU $1C00 ; $1C00-$1FFF IOBUF4 EQU $1C00 ; $1C00-$1FFF
* ; $2000-$3FFF Hi-Res screen 1 * ; $2000-$3FFF Hi-Res screen 1 - used for transient .SYSTEM loader code
* ; $4000- Code, to do: make code move itself * ; $4000- Code, to do: make code move itself
* -$6FFF * -$6FFF
BLKBUF EQU $7000 ; $7000-$73FF 512-byte buffer plus channel data BLKBUF EQU $7000 ; $7000-$73FF 512-byte buffer plus channel data
BLKBUFEND EQU $7200 BLKBUFEND EQU $7200
* *
* ; $9600-$BDFF ProDOS buffers * ; $BF00-$BFFF ProDOS Global Page - reserved
* ; $BE00-$BEFF MLI Global workspace
* ; $BF00-$BFFF MLI API interface
Memory layout in aux memory (Acorn environment) Memory layout in aux memory (Acorn environment)