Updated disk image.
This commit is contained in:
parent
3474d3c77c
commit
ef478f1916
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
|
@ -235,6 +235,8 @@ MAINZP MAC
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -469,3 +469,5 @@ OSBM2 ASC ').'
|
|||
DB $00
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -445,3 +445,5 @@ BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT
|
|||
RTS ; Not possible with Apple
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -333,3 +333,5 @@ RELCOORD CLC
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1036,3 +1036,5 @@ ERROR27 DW $FF00
|
|||
ASC 'I/O error' ; $27 - I/O error
|
||||
DB $00
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -210,3 +210,5 @@ HELLO ASC 'Applecorn MOS 2021-11-13'
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
372
auxmem.misc.s
372
auxmem.misc.s
|
@ -15,28 +15,28 @@
|
|||
************************************
|
||||
* Read input device or buffer status
|
||||
|
||||
BYTE80 LDY #$00 ; Prepare return=&00xx
|
||||
TXA ; X<0 - info about buffers
|
||||
BMI ADVALBUF ; X>=0 - read input devices
|
||||
BYTE80 LDY #$00 ; Prepare return=&00xx
|
||||
TXA ; X<0 - info about buffers
|
||||
BMI ADVALBUF ; X>=0 - read input devices
|
||||
CPX #$7F
|
||||
BNE ADVALNONE
|
||||
ADVALWAIT JSR KBDREAD
|
||||
BCS ADVALWAIT
|
||||
TAX
|
||||
BPL ADVALOK1 ; &00xx for normal keys
|
||||
INY ; &01xx for function/edit keys
|
||||
BPL ADVALOK1 ; &00xx for normal keys
|
||||
INY ; &01xx for function/edit keys
|
||||
ADVALOK1 RTS
|
||||
ADVALNONE LDX #$00 ; Input, just return 0
|
||||
ADVALNONE LDX #$00 ; Input, just return 0
|
||||
RTS
|
||||
ADVALBUF INX
|
||||
BEQ :ADVALKBD ; Fake keyboard buffer
|
||||
BEQ :ADVALKBD ; Fake keyboard buffer
|
||||
INX
|
||||
BEQ :ADVALOK ; Serial input, return 0
|
||||
LDX #$01 ; For outputs, return 1 char free
|
||||
BEQ :ADVALOK ; Serial input, return 0
|
||||
LDX #$01 ; For outputs, return 1 char free
|
||||
RTS
|
||||
:ADVALKBD BIT $C000 ; Test keyboard data/strobe
|
||||
BPL :ADVALOK ; No Strobe, return 0
|
||||
INX ; Strobe, return 1
|
||||
:ADVALKBD BIT $C000 ; Test keyboard data/strobe
|
||||
BPL :ADVALOK ; No Strobe, return 0
|
||||
INX ; Strobe, return 1
|
||||
:ADVALOK RTS
|
||||
|
||||
|
||||
|
@ -61,21 +61,21 @@ ADVALBUF INX
|
|||
* (8 * frequency )
|
||||
|
||||
* BEEPX EQU #57 ; note=C5
|
||||
BEEPX EQU #116 ; note=C4
|
||||
BEEPX EQU #116 ; note=C4
|
||||
BEEP PHA
|
||||
PHX
|
||||
PHY
|
||||
LDY #$00 ; duration
|
||||
:L1 LDX #BEEPX ; 2cy pitch 2cy
|
||||
LDY #$00 ; duration
|
||||
:L1 LDX #BEEPX ; 2cy pitch 2cy
|
||||
*------------------------------------------------------
|
||||
:L2 DEX ; 2cy BEEPX * 2cy
|
||||
BNE :L2 ; 3cy/2cy (BEEPX-1) * 3cy + 1 * 2cy
|
||||
:L2 DEX ; 2cy BEEPX * 2cy
|
||||
BNE :L2 ; 3cy/2cy (BEEPX-1) * 3cy + 1 * 2cy
|
||||
*------------------------------------------------------
|
||||
* BEEPX*5-1cy
|
||||
LDA $C030 ; 4cy BEEPX*5+5
|
||||
DEY ; 2cy BEEPX*5+7
|
||||
BNE :L1 ; 3cy/2cy BEEPX*5+10
|
||||
PLY ;
|
||||
LDA $C030 ; 4cy BEEPX*5+5
|
||||
DEY ; 2cy BEEPX*5+7
|
||||
BNE :L1 ; 3cy/2cy BEEPX*5+10
|
||||
PLY ;
|
||||
PLX
|
||||
PLA
|
||||
RTS
|
||||
|
@ -85,9 +85,9 @@ BEEP PHA
|
|||
OUTSTR TXA
|
||||
|
||||
* Print string pointed to by A,Y to the screen
|
||||
PRSTR STA OSTEXT+0 ; String in A,Y
|
||||
PRSTR STA OSTEXT+0 ; String in A,Y
|
||||
STY OSTEXT+1
|
||||
:L1 LDA (OSTEXT) ; Ptr to string in OSTEXT
|
||||
:L1 LDA (OSTEXT) ; Ptr to string in OSTEXT
|
||||
BEQ PRSTROK
|
||||
JSR OSASCI
|
||||
INC OSTEXT
|
||||
|
@ -106,7 +106,7 @@ FORCENL LDA #$86
|
|||
* Print XY in hex
|
||||
OUT2HEX TYA
|
||||
JSR OUTHEX
|
||||
TXA ; Continue into OUTHEX
|
||||
TXA ; Continue into OUTHEX
|
||||
|
||||
* Print hex byte in A
|
||||
OUTHEX PHA
|
||||
|
@ -117,16 +117,16 @@ OUTHEX PHA
|
|||
AND #$0F
|
||||
JSR PRNIB
|
||||
PLA
|
||||
AND #$0F ; Continue into PRNIB
|
||||
AND #$0F ; Continue into PRNIB
|
||||
|
||||
* Print hex nibble in A
|
||||
PRNIB CMP #$0A
|
||||
BCC :S1
|
||||
CLC ; >= $0A
|
||||
CLC ; >= $0A
|
||||
ADC #'A'-$0A
|
||||
JSR OSWRCH
|
||||
RTS
|
||||
:S1 ADC #'0' ; < $0A
|
||||
:S1 ADC #'0' ; < $0A
|
||||
JMP OSWRCH
|
||||
|
||||
* TEMP ENTRY *
|
||||
|
@ -148,35 +148,35 @@ OSPAD EQU OSTEXT+4
|
|||
* X=>four byte zero page locations
|
||||
* Y= number of digits to pad to, 0 for no padding
|
||||
*
|
||||
PRINTDEC sty OSPAD ; Number of padding+digits
|
||||
ldy #0 ; Digit counter
|
||||
PRDECDIGIT lda #32 ; 32-bit divide
|
||||
PRINTDEC sty OSPAD ; Number of padding+digits
|
||||
ldy #0 ; Digit counter
|
||||
PRDECDIGIT lda #32 ; 32-bit divide
|
||||
sta OSTEMP
|
||||
lda #0 ; Remainder=0
|
||||
clv ; V=0 means div result = 0
|
||||
PRDECDIV10 cmp #10/2 ; Calculate OSNUM/10
|
||||
lda #0 ; Remainder=0
|
||||
clv ; V=0 means div result = 0
|
||||
PRDECDIV10 cmp #10/2 ; Calculate OSNUM/10
|
||||
bcc PRDEC10
|
||||
sbc #10/2+$80 ; Remove digit & set V=1 to show div result > 0
|
||||
sec ; Shift 1 into div result
|
||||
PRDEC10 rol 0,x ; Shift /10 result into OSNUM
|
||||
sbc #10/2+$80 ; Remove digit & set V=1 to show div result > 0
|
||||
sec ; Shift 1 into div result
|
||||
PRDEC10 rol 0,x ; Shift /10 result into OSNUM
|
||||
rol 1,x
|
||||
rol 2,x
|
||||
rol 3,x
|
||||
rol a ; Shift bits of input into acc (input mod 10)
|
||||
rol a ; Shift bits of input into acc (input mod 10)
|
||||
dec OSTEMP
|
||||
bne PRDECDIV10 ; Continue 32-bit divide
|
||||
bne PRDECDIV10 ; Continue 32-bit divide
|
||||
ora #48
|
||||
pha ; Push low digit 0-9 to print
|
||||
pha ; Push low digit 0-9 to print
|
||||
iny
|
||||
bvs PRDECDIGIT ; If V=1, result of /10 was > 0 & do next digit
|
||||
bvs PRDECDIGIT ; If V=1, result of /10 was > 0 & do next digit
|
||||
lda #32
|
||||
PRDECLP1 cpy OSPAD
|
||||
bcs PRDECLP2 ; Enough padding pushed
|
||||
pha ; Push leading space characters
|
||||
bcs PRDECLP2 ; Enough padding pushed
|
||||
pha ; Push leading space characters
|
||||
iny
|
||||
bne PRDECLP1
|
||||
PRDECLP2 pla ; Pop character left to right
|
||||
jsr OSWRCH ; Print it
|
||||
PRDECLP2 pla ; Pop character left to right
|
||||
jsr OSWRCH ; Print it
|
||||
dey
|
||||
bne PRDECLP2
|
||||
rts
|
||||
|
@ -197,16 +197,16 @@ PRDECLP2 pla ; Pop character left to right
|
|||
* Very difficult to write this without it being a direct clone
|
||||
* from the BBC MOS. ;)
|
||||
*
|
||||
GSINTGO ROR GSFLAG ; CY initially into bit 7
|
||||
JSR SKIPSPC ; Skip any spaces
|
||||
INY ; Step past in case it's a quote
|
||||
CMP #$22 ; Is it a quote?
|
||||
GSINTGO ROR GSFLAG ; CY initially into bit 7
|
||||
JSR SKIPSPC ; Skip any spaces
|
||||
INY ; Step past in case it's a quote
|
||||
CMP #$22 ; Is it a quote?
|
||||
BEQ GSINTGO1
|
||||
DEY ; Wasn't a quote, step back
|
||||
CLC ; Prepare CC=no leading quote
|
||||
GSINTGO1 ROR GSFLAG ; Rotate 'leading-quote' into flags
|
||||
DEY ; Wasn't a quote, step back
|
||||
CLC ; Prepare CC=no leading quote
|
||||
GSINTGO1 ROR GSFLAG ; Rotate 'leading-quote' into flags
|
||||
CMP #$0D
|
||||
RTS ; Return EQ if end of line
|
||||
RTS ; Return EQ if end of line
|
||||
* GSFLAG set to:
|
||||
* bit7: leading quote found
|
||||
* bit6: CC=filename CS=*KEY
|
||||
|
@ -249,13 +249,13 @@ GSINTGO1 ROR GSFLAG ; Rotate 'leading-quote' into flags
|
|||
* INX:BNE loop
|
||||
* done
|
||||
*
|
||||
GSRDGO LDA #$00 ; Prepare to clear accumulator
|
||||
GSREADLP STA GSCHAR ; Update accumulator
|
||||
LDA (OSLPTR),Y ; Get current character
|
||||
CMP #$0D ; End of line?
|
||||
BNE GSREAD2 ; No, check character
|
||||
GSRDGO LDA #$00 ; Prepare to clear accumulator
|
||||
GSREADLP STA GSCHAR ; Update accumulator
|
||||
LDA (OSLPTR),Y ; Get current character
|
||||
CMP #$0D ; End of line?
|
||||
BNE GSREAD2 ; No, check character
|
||||
BIT GSFLAG
|
||||
BPL GSREADEND ; We aren't waiting for a closing quote
|
||||
BPL GSREADEND ; We aren't waiting for a closing quote
|
||||
* ; End of line before closing quote
|
||||
ERRBADSTR BRK
|
||||
DB $FD
|
||||
|
@ -263,54 +263,54 @@ ERRBADSTR BRK
|
|||
BRK
|
||||
|
||||
GSREAD2 CMP #' '
|
||||
BCC ERRBADSTR ; Embedded control char
|
||||
BNE GSREAD3 ; Not a space, process it
|
||||
BIT GSFLAG ; Can space terminate string?
|
||||
BMI GSREADCHAR ; We're waiting for a terminating quote
|
||||
BCC ERRBADSTR ; Embedded control char
|
||||
BNE GSREAD3 ; Not a space, process it
|
||||
BIT GSFLAG ; Can space terminate string?
|
||||
BMI GSREADCHAR ; We're waiting for a terminating quote
|
||||
* ; so return the space character
|
||||
BVC GSREADEND ; Space is a terminator, finish
|
||||
GSREAD3 CMP #$22 ; Is it a quote?
|
||||
BNE GSREADESC ; Not quote, check for escapes
|
||||
BIT GSFLAG ; Was there an opening quote?
|
||||
BPL GSREADCHAR ; Not waiting for a closing quote
|
||||
INY ; Waiting for quote, check next character
|
||||
BVC GSREADEND ; Space is a terminator, finish
|
||||
GSREAD3 CMP #$22 ; Is it a quote?
|
||||
BNE GSREADESC ; Not quote, check for escapes
|
||||
BIT GSFLAG ; Was there an opening quote?
|
||||
BPL GSREADCHAR ; Not waiting for a closing quote
|
||||
INY ; Waiting for quote, check next character
|
||||
LDA (OSLPTR),Y
|
||||
CMP #$22 ; Is it another quote?
|
||||
BEQ GSREADCHAR ; Quote-Quote, expand to single quote
|
||||
CMP #$22 ; Is it another quote?
|
||||
BEQ GSREADCHAR ; Quote-Quote, expand to single quote
|
||||
* End of string
|
||||
* Either closing quote, or a space seperator, or end of line
|
||||
GSREADEND JSR SKIPSPC ; Skip any spaces to next word
|
||||
SEC ; SEC=end of string
|
||||
RTS ; and (OSLPTR),Y=>next word or end of line
|
||||
GSREADEND JSR SKIPSPC ; Skip any spaces to next word
|
||||
SEC ; SEC=end of string
|
||||
RTS ; and (OSLPTR),Y=>next word or end of line
|
||||
* CS=end of string
|
||||
* EQ=end of line
|
||||
* NE=not end of line, more words follow
|
||||
|
||||
GSREADESC CMP #$7C ; Is it '|' escape character
|
||||
BNE GSREADCHAR ; No, return as character
|
||||
INY ; Step to next character
|
||||
GSREADESC CMP #$7C ; Is it '|' escape character
|
||||
BNE GSREADCHAR ; No, return as character
|
||||
INY ; Step to next character
|
||||
LDA (OSLPTR),Y
|
||||
CMP #$7C
|
||||
BEQ GSREADCHAR ; bar-bar expands to bar
|
||||
BEQ GSREADCHAR ; bar-bar expands to bar
|
||||
CMP #$22
|
||||
BEQ GSREADCHAR ; bar-quote expands to quote
|
||||
CMP #'!' ; Is it bar-pling?
|
||||
BNE GSREAD5 ; No, check for bar-letter
|
||||
INY ; Step past it
|
||||
LDA #$80 ; Set bit 7 in accumulator
|
||||
BNE GSREADLP ; Loop back to check next character(s)
|
||||
BEQ GSREADCHAR ; bar-quote expands to quote
|
||||
CMP #'!' ; Is it bar-pling?
|
||||
BNE GSREAD5 ; No, check for bar-letter
|
||||
INY ; Step past it
|
||||
LDA #$80 ; Set bit 7 in accumulator
|
||||
BNE GSREADLP ; Loop back to check next character(s)
|
||||
|
||||
GSREAD5 CMP #'?' ; Check for '?'
|
||||
BCC ERRBADSTR ; <'?', bad character
|
||||
BEQ GSREADDEL ; bar-query -> DEL
|
||||
AND #$1F ; Convert bar-letter to control code
|
||||
BIT SETV ; SEV=control character
|
||||
GSREAD5 CMP #'?' ; Check for '?'
|
||||
BCC ERRBADSTR ; <'?', bad character
|
||||
BEQ GSREADDEL ; bar-query -> DEL
|
||||
AND #$1F ; Convert bar-letter to control code
|
||||
BIT SETV ; SEV=control character
|
||||
BVS GSREADOK
|
||||
GSREADDEL LDA #$7F
|
||||
GSREADCHAR CLV ; CLV=not control character
|
||||
GSREADOK INY ; Step to next character
|
||||
ORA GSCHAR ; Add in any bit 7 from |! prefix
|
||||
CLC ; CLC=not end of string
|
||||
GSREADCHAR CLV ; CLV=not control character
|
||||
GSREADOK INY ; Step to next character
|
||||
ORA GSCHAR ; Add in any bit 7 from |! prefix
|
||||
CLC ; CLC=not end of string
|
||||
RTS
|
||||
* CC=not end of string
|
||||
* VS=control character
|
||||
|
@ -321,12 +321,12 @@ GSREADOK INY ; Step to next character
|
|||
* On entry, Y=ROM to read from
|
||||
* On exit, A=byte read, X=current ROM, Y=$00
|
||||
RDROM LDA $F4
|
||||
PHA ; Save current ROM
|
||||
PHA ; Save current ROM
|
||||
TYA
|
||||
TAX ; X=ROM to read from
|
||||
JSR ROMSELECT ; Page in the required ROM
|
||||
TAX ; X=ROM to read from
|
||||
JSR ROMSELECT ; Page in the required ROM
|
||||
LDY #$00
|
||||
LDA ($F6),Y ; Read the byte
|
||||
LDA ($F6),Y ; Read the byte
|
||||
PLX
|
||||
|
||||
* Select a sideways ROM
|
||||
|
@ -340,17 +340,17 @@ ROMSELECT
|
|||
PHX
|
||||
PHY
|
||||
SEI
|
||||
TXA ; A=ROM to select
|
||||
TXA ; A=ROM to select
|
||||
>>> XF2MAIN,SELECTROM
|
||||
ROMSELDONE >>> ENTAUX
|
||||
PLY
|
||||
PLX
|
||||
PLA
|
||||
PLP
|
||||
:ROMSELOK STX $F4 ; Set Current ROM number
|
||||
:ROMSELOK STX $F4 ; Set Current ROM number
|
||||
RTS
|
||||
|
||||
|
||||
|
||||
|
||||
ROMXX
|
||||
* CPX $F8
|
||||
* BEQ :ROMSELOK ; Already selected
|
||||
|
@ -432,10 +432,10 @@ EVENT RTS
|
|||
*
|
||||
|
||||
* Initialize ROMTAB according to user selection in menu
|
||||
ROMINIT STZ MAXROM ; One sideways ROM only
|
||||
STA $C002 ; Read main mem
|
||||
ROMINIT STZ MAXROM ; One sideways ROM only
|
||||
STA $C002 ; Read main mem
|
||||
LDA USERSEL
|
||||
STA $C003 ; Read aux mem
|
||||
STA $C003 ; Read aux mem
|
||||
|
||||
CMP #6
|
||||
BNE :X1
|
||||
|
@ -550,7 +550,7 @@ ROMINIT STZ MAXROM ; One sideways ROM only
|
|||
**********************************************************
|
||||
|
||||
* Invoked from GSBRK in main memory. On IIgs only.
|
||||
GSBRKAUX >>> IENTAUX ; IENTAUX does not do CLI
|
||||
GSBRKAUX >>> IENTAUX ; IENTAUX does not do CLI
|
||||
* Continue into IRQBRKHDLR
|
||||
* TO DO: Check, IENTAUX modifies X
|
||||
|
||||
|
@ -558,43 +558,43 @@ GSBRKAUX >>> IENTAUX ; IENTAUX does not do CLI
|
|||
IRQBRKHDLR PHA
|
||||
* Mustn't enable IRQs within the IRQ handler
|
||||
* Do not use WRTMAIN/WRTAUX macros
|
||||
STA $C004 ; Write to main memory
|
||||
STA $45 ; $45=A for ProDOS IRQ handlers
|
||||
STA $C005 ; Write to aux memory
|
||||
STA $C004 ; Write to main memory
|
||||
STA $45 ; $45=A for ProDOS IRQ handlers
|
||||
STA $C005 ; Write to aux memory
|
||||
|
||||
TXA
|
||||
PHA
|
||||
CLD
|
||||
TSX
|
||||
LDA $103,X ; Get PSW from stack
|
||||
LDA $103,X ; Get PSW from stack
|
||||
AND #$10
|
||||
BEQ :IRQ ; IRQ
|
||||
BEQ :IRQ ; IRQ
|
||||
SEC
|
||||
LDA $0104,X
|
||||
SBC #$01
|
||||
STA FAULT+0 ; FAULT=>error block after BRK
|
||||
STA FAULT+0 ; FAULT=>error block after BRK
|
||||
LDA $0105,X
|
||||
SBC #$00
|
||||
STA FAULT+1
|
||||
|
||||
LDA $F4 ; Get current ROM
|
||||
STA BYTEVARBASE+$BA ; Set ROM at last BRK
|
||||
STX OSXREG ; Pass stack pointer
|
||||
LDA #$06 ; Service Call 6 = BRK occured
|
||||
LDA $F4 ; Get current ROM
|
||||
STA BYTEVARBASE+$BA ; Set ROM at last BRK
|
||||
STX OSXREG ; Pass stack pointer
|
||||
LDA #$06 ; Service Call 6 = BRK occured
|
||||
JSR SERVICE
|
||||
LDX BYTEVARBASE+$FC ; Get current language
|
||||
JSR ROMSELECT ; Bring it into memory
|
||||
LDX BYTEVARBASE+$FC ; Get current language
|
||||
JSR ROMSELECT ; Bring it into memory
|
||||
|
||||
PLA
|
||||
TAX
|
||||
PLA
|
||||
CLI
|
||||
JMP (BRKV) ; Pass on to BRK handler
|
||||
JMP (BRKV) ; Pass on to BRK handler
|
||||
|
||||
:IRQ >>> XF2MAIN,A2IRQ ; Bounce to Apple IRQ handler
|
||||
:IRQ >>> XF2MAIN,A2IRQ ; Bounce to Apple IRQ handler
|
||||
IRQBRKRET
|
||||
>>> IENTAUX ; IENTAUX does not do CLI
|
||||
PLA ; TODO: Pass on to IRQ1V
|
||||
>>> IENTAUX ; IENTAUX does not do CLI
|
||||
PLA ; TODO: Pass on to IRQ1V
|
||||
TAX
|
||||
PLA
|
||||
NULLRTI RTI
|
||||
|
@ -614,7 +614,7 @@ MOSBRKHDLR LDA #<MSGBRK
|
|||
JSR PRERR
|
||||
JSR OSNEWL
|
||||
JSR OSNEWL
|
||||
STOP JMP STOP ; Cannot return from a BRK
|
||||
STOP JMP STOP ; Cannot return from a BRK
|
||||
|
||||
MSGBRK DB $0D
|
||||
ASC 'ERROR: '
|
||||
|
@ -622,33 +622,33 @@ MSGBRK DB $0D
|
|||
|
||||
|
||||
* Default page 2 contents
|
||||
DEFVEC DW NULLRTS ; $200 USERV
|
||||
DW MOSBRKHDLR ; $202 BRKV
|
||||
DW NULLRTI ; $204 IRQ1V
|
||||
DW NULLRTI ; $206 IRQ2V
|
||||
DW CLIHND ; $208 CLIV
|
||||
DW BYTEHND ; $20A BYTEV
|
||||
DW WORDHND ; $20C WORDV
|
||||
DW WRCHHND ; $20E WRCHV
|
||||
DW RDCHHND ; $210 RDCHV
|
||||
DW FILEHND ; $212 FILEV
|
||||
DW ARGSHND ; $214 ARGSV
|
||||
DW BGETHND ; $216 BGETV
|
||||
DW BPUTHND ; $218 BPUTV
|
||||
DW GBPBHND ; $21A GBPBV
|
||||
DW FINDHND ; $21C FINDV
|
||||
DW FSCHND ; $21E FSCV
|
||||
DW NULLRTS ; $220 EVENTV
|
||||
DW NULLRTS ; $222
|
||||
DW NULLRTS ; $224
|
||||
DW NULLRTS ; $226
|
||||
DW NULLRTS ; $228
|
||||
DW NULLRTS ; $22A
|
||||
DW NULLRTS ; $22C
|
||||
DW NULLRTS ; $22E
|
||||
DW NULLRTS ; $230 SPARE1V
|
||||
DW NULLRTS ; $232 SPARE2V
|
||||
DW NULLRTS ; $234 SPARE3V
|
||||
DEFVEC DW NULLRTS ; $200 USERV
|
||||
DW MOSBRKHDLR ; $202 BRKV
|
||||
DW NULLRTI ; $204 IRQ1V
|
||||
DW NULLRTI ; $206 IRQ2V
|
||||
DW CLIHND ; $208 CLIV
|
||||
DW BYTEHND ; $20A BYTEV
|
||||
DW WORDHND ; $20C WORDV
|
||||
DW WRCHHND ; $20E WRCHV
|
||||
DW RDCHHND ; $210 RDCHV
|
||||
DW FILEHND ; $212 FILEV
|
||||
DW ARGSHND ; $214 ARGSV
|
||||
DW BGETHND ; $216 BGETV
|
||||
DW BPUTHND ; $218 BPUTV
|
||||
DW GBPBHND ; $21A GBPBV
|
||||
DW FINDHND ; $21C FINDV
|
||||
DW FSCHND ; $21E FSCV
|
||||
DW NULLRTS ; $220 EVENTV
|
||||
DW NULLRTS ; $222
|
||||
DW NULLRTS ; $224
|
||||
DW NULLRTS ; $226
|
||||
DW NULLRTS ; $228
|
||||
DW NULLRTS ; $22A
|
||||
DW NULLRTS ; $22C
|
||||
DW NULLRTS ; $22E
|
||||
DW NULLRTS ; $230 SPARE1V
|
||||
DW NULLRTS ; $232 SPARE2V
|
||||
DW NULLRTS ; $234 SPARE3V
|
||||
ENDVEC
|
||||
|
||||
*
|
||||
|
@ -664,53 +664,53 @@ MOSAPI EQU $FF95
|
|||
|
||||
* OPTIONAL ENTRIES
|
||||
* ----------------
|
||||
OSSERV JMP SERVICE ; FF95 OSSERV
|
||||
OSCOLD JMP NULLRTS ; FF98 OSCOLD
|
||||
OSPRSTR JMP OUTSTR ; FF9B OSPRSTR
|
||||
OSSCANDEC JMP SCANDEC ; FF9E SCANDEC
|
||||
OSSCANHEX JMP SCANHEX ; FFA1 SCANHEX
|
||||
OSFFA4 JMP NULLRTS ; FFA4 (DISKACC)
|
||||
OSFFA7 JMP NULLRTS ; FFA7 (DISKCCP)
|
||||
PRHEX JMP OUTHEX ; FFAA PRHEX
|
||||
PR2HEX JMP OUT2HEX ; FFAD PR2HEX
|
||||
OSFFB0 JMP PRINTDEC ; FFB0 (USERINT)
|
||||
OSWRRM JMP NULLRTS ; FFB3 OSWRRM
|
||||
OSSERV JMP SERVICE ; FF95 OSSERV
|
||||
OSCOLD JMP NULLRTS ; FF98 OSCOLD
|
||||
OSPRSTR JMP OUTSTR ; FF9B OSPRSTR
|
||||
OSSCANDEC JMP SCANDEC ; FF9E SCANDEC
|
||||
OSSCANHEX JMP SCANHEX ; FFA1 SCANHEX
|
||||
OSFFA4 JMP NULLRTS ; FFA4 (DISKACC)
|
||||
OSFFA7 JMP NULLRTS ; FFA7 (DISKCCP)
|
||||
PRHEX JMP OUTHEX ; FFAA PRHEX
|
||||
PR2HEX JMP OUT2HEX ; FFAD PR2HEX
|
||||
OSFFB0 JMP PRINTDEC ; FFB0 (USERINT)
|
||||
OSWRRM JMP NULLRTS ; FFB3 OSWRRM
|
||||
|
||||
* COMPULSARY ENTRIES
|
||||
* ------------------
|
||||
VECSIZE DB ENDVEC-DEFVEC ; FFB6 VECSIZE Size of vectors
|
||||
VECBASE DW DEFVEC ; FFB7 VECBASE Base of default vectors
|
||||
OSRDRM JMP RDROM ; FFB9 OSRDRM Read byte from paged ROM
|
||||
OSCHROUT JMP OUTCHAR ; FFBC CHROUT Send char to VDU driver
|
||||
OSEVEN JMP EVENT ; FFBF OSEVEN Signal an event
|
||||
GSINIT JMP GSINTGO ; FFC2 GSINIT Init string reading
|
||||
GSREAD JMP GSRDGO ; FFC5 GSREAD Parse general string
|
||||
NVWRCH JMP WRCHHND ; FFC8 NVWRCH Nonvectored WRCH
|
||||
NVRDCH JMP RDCHHND ; FFCB NVRDCH Nonvectored RDCH
|
||||
OSFIND JMP (FINDV) ; FFCE OSFIND
|
||||
OSGBPB JMP (GBPBV) ; FFD1 OSGBPB
|
||||
OSBPUT JMP (BPUTV) ; FFD4 OSBPUT
|
||||
OSBGET JMP (BGETV) ; FFD7 OSBGET
|
||||
OSARGS JMP (ARGSV) ; FFDA OSARGS
|
||||
OSFILE JMP (FILEV) ; FFDD OSFILE
|
||||
OSRDCH JMP (RDCHV) ; FFE0 OSRDCH
|
||||
OSASCI CMP #$0D ; FFE3 OSASCI
|
||||
VECSIZE DB ENDVEC-DEFVEC ; FFB6 VECSIZE Size of vectors
|
||||
VECBASE DW DEFVEC ; FFB7 VECBASE Base of default vectors
|
||||
OSRDRM JMP RDROM ; FFB9 OSRDRM Read byte from paged ROM
|
||||
OSCHROUT JMP OUTCHAR ; FFBC CHROUT Send char to VDU driver
|
||||
OSEVEN JMP EVENT ; FFBF OSEVEN Signal an event
|
||||
GSINIT JMP GSINTGO ; FFC2 GSINIT Init string reading
|
||||
GSREAD JMP GSRDGO ; FFC5 GSREAD Parse general string
|
||||
NVWRCH JMP WRCHHND ; FFC8 NVWRCH Nonvectored WRCH
|
||||
NVRDCH JMP RDCHHND ; FFCB NVRDCH Nonvectored RDCH
|
||||
OSFIND JMP (FINDV) ; FFCE OSFIND
|
||||
OSGBPB JMP (GBPBV) ; FFD1 OSGBPB
|
||||
OSBPUT JMP (BPUTV) ; FFD4 OSBPUT
|
||||
OSBGET JMP (BGETV) ; FFD7 OSBGET
|
||||
OSARGS JMP (ARGSV) ; FFDA OSARGS
|
||||
OSFILE JMP (FILEV) ; FFDD OSFILE
|
||||
OSRDCH JMP (RDCHV) ; FFE0 OSRDCH
|
||||
OSASCI CMP #$0D ; FFE3 OSASCI
|
||||
BNE OSWRCH
|
||||
OSNEWL LDA #$0A ; FFE7 OSNEWL
|
||||
OSNEWL LDA #$0A ; FFE7 OSNEWL
|
||||
JSR OSWRCH
|
||||
OSWRCR LDA #$0D ; FFEC OSWRCR
|
||||
OSWRCH JMP (WRCHV) ; FFEE OSWRCH
|
||||
OSWORD JMP (WORDV) ; FFF1 OSWORD
|
||||
OSBYTE JMP (BYTEV) ; FFF4 OSBYTE
|
||||
OSCLI JMP (CLIV) ; FFF7 OSCLI
|
||||
NMIVEC DW NULLRTI ; FFFA NMIVEC
|
||||
RSTVEC DW STOP ; FFFC RSTVEC
|
||||
OSWRCR LDA #$0D ; FFEC OSWRCR
|
||||
OSWRCH JMP (WRCHV) ; FFEE OSWRCH
|
||||
OSWORD JMP (WORDV) ; FFF1 OSWORD
|
||||
OSBYTE JMP (BYTEV) ; FFF4 OSBYTE
|
||||
OSCLI JMP (CLIV) ; FFF7 OSCLI
|
||||
NMIVEC DW NULLRTI ; FFFA NMIVEC
|
||||
RSTVEC DW STOP ; FFFC RSTVEC
|
||||
IRQVEC
|
||||
|
||||
* Assembler doesn't like running up to $FFFF, so we bodge a bit
|
||||
MOSEND
|
||||
ORG MOSEND-MOSAPI+MOSVEC
|
||||
DW IRQBRKHDLR ; FFFE IRQVEC
|
||||
DW IRQBRKHDLR ; FFFE IRQVEC
|
||||
MOSVEND
|
||||
|
||||
* Buffer for one 512 byte disk block in aux mem
|
||||
|
@ -719,3 +719,5 @@ AUXBLK ASC '**ENDOFCODE**'
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -76,3 +76,5 @@ OSGBPBCB EQU OSFILECB+1 ; OSGBPB control block
|
|||
* $03E0-$03FF Used for interfacing with ProDOS XFER
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -515,3 +515,5 @@ ECHOLP1 JSR GSREAD
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1010,3 +1010,5 @@ VDU01 RTS
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -91,6 +91,8 @@ GEOFCMD EQU $D1
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -230,6 +230,8 @@ MHGRTAB DW $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -137,6 +137,8 @@ RESET TSX
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -220,3 +220,5 @@ LOADCODE PHP ; Save carry flag
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -133,6 +133,8 @@ QUITPL HEX 04 ; Number of parameters
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
230
mainmem.menu.s
230
mainmem.menu.s
|
@ -6,17 +6,17 @@
|
|||
* 13-Nov-2021 List of selected ROMs kept locally.
|
||||
|
||||
|
||||
ROMMAX EQU $0382
|
||||
ROMTHIS EQU $0383
|
||||
ROMADDRS EQU $0384 ; List of ROM filename addresses
|
||||
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
|
||||
BNE :LP0
|
||||
ROMMENU JSR HOME ; Clear screen
|
||||
LDX #0
|
||||
:LP0 LDA TITLE1,X ; Print title
|
||||
BEQ :LP1
|
||||
JSR COUT1
|
||||
INX
|
||||
BNE :LP0
|
||||
:LP1
|
||||
|
||||
* LDA #<TITLE1 ; Print title
|
||||
|
@ -24,10 +24,10 @@ ROMMENU JSR HOME ; Clear screen
|
|||
* LDA #>TITLE1
|
||||
* STA A1H
|
||||
* JSR PRSTRA1
|
||||
JSR CROUT
|
||||
JSR CROUT
|
||||
* TEMP
|
||||
; LDA #$00
|
||||
; JMP :KEYOK
|
||||
* LDA #$00
|
||||
* JMP :KEYOK
|
||||
* TEMP
|
||||
* JSR CROUT
|
||||
* LDA #<TITLE2
|
||||
|
@ -53,72 +53,72 @@ ROMMENU JSR HOME ; Clear screen
|
|||
* BEQ :KEYIN
|
||||
* BRA :L1
|
||||
|
||||
:KEYIN LDA $C000 ; Kdb data / strobe
|
||||
BPL :KEYIN ; Wait for keystroke
|
||||
STA $C010 ; Clear strobe
|
||||
AND #$7F
|
||||
SEC
|
||||
SBC #'1' ; '1'->0, '2'->1 etc.
|
||||
CMP #8
|
||||
BCC :KEYOK
|
||||
JSR BELL ; Invalid - beep
|
||||
BRA :KEYIN ; Go again
|
||||
:KEYOK STA USERSEL ; Record selection
|
||||
:KEYIN LDA $C000 ; Kdb data / strobe
|
||||
BPL :KEYIN ; Wait for keystroke
|
||||
STA $C010 ; Clear strobe
|
||||
AND #$7F
|
||||
SEC
|
||||
SBC #'1' ; '1'->0, '2'->1 etc.
|
||||
CMP #8
|
||||
BCC :KEYOK
|
||||
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
|
||||
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
|
||||
|
||||
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
|
||||
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
|
||||
|
@ -133,10 +133,10 @@ SELECTROM >>> ENTMAIN
|
|||
*:NULL PLY
|
||||
* RTS
|
||||
|
||||
TITLE1 ASC "** APPLECORN **"
|
||||
DB $8D,$8D
|
||||
TITLE2 ASC "Choose a BBC Micro ROM:"
|
||||
DB $8D,$8D
|
||||
TITLE1 ASC "** APPLECORN **"
|
||||
DB $8D,$8D
|
||||
TITLE2 ASC "Choose a BBC Micro ROM:"
|
||||
DB $8D,$8D
|
||||
|
||||
*MSGTBL DW MSG1
|
||||
* DW MSG2
|
||||
|
@ -147,44 +147,46 @@ TITLE2 ASC "Choose a BBC Micro ROM:"
|
|||
* DW MSG7
|
||||
* DW MSG8
|
||||
|
||||
MSG1 ASC " 1. BBC BASIC"
|
||||
DB $8D,$8D
|
||||
MSG2 ASC " 2. Acornsoft COMAL"
|
||||
DB $8D,$8D
|
||||
MSG3 ASC " 3. Acornsoft Lisp"
|
||||
DB $8D,$8D
|
||||
MSG4 ASC " 4. Acornsoft Forth"
|
||||
DB $8D,$8D
|
||||
MSG5 ASC " 5. Acornsoft MicroProlog"
|
||||
DB $8D,$8D
|
||||
MSG6 ASC " 6. Acornsoft BCPL"
|
||||
DB $8D,$8D
|
||||
MSG7 ASC " 7. Acornsoft ISO Pascal (2 ROMs)"
|
||||
DB $8D,$8D
|
||||
MSG8 ASC " 8. Everything! (8 ROMs)"
|
||||
DB $8D
|
||||
DB $00
|
||||
MSG1 ASC " 1. BBC BASIC"
|
||||
DB $8D,$8D
|
||||
MSG2 ASC " 2. Acornsoft COMAL"
|
||||
DB $8D,$8D
|
||||
MSG3 ASC " 3. Acornsoft Lisp"
|
||||
DB $8D,$8D
|
||||
MSG4 ASC " 4. Acornsoft Forth"
|
||||
DB $8D,$8D
|
||||
MSG5 ASC " 5. Acornsoft MicroProlog"
|
||||
DB $8D,$8D
|
||||
MSG6 ASC " 6. Acornsoft BCPL"
|
||||
DB $8D,$8D
|
||||
MSG7 ASC " 7. Acornsoft ISO Pascal (2 ROMs)"
|
||||
DB $8D,$8D
|
||||
MSG8 ASC " 8. Everything! (8 ROMs)"
|
||||
DB $8D
|
||||
DB $00
|
||||
|
||||
|
||||
ROMLIST DW ROM1
|
||||
DW ROM2
|
||||
DW ROM3
|
||||
DW ROM4
|
||||
DW ROM5
|
||||
DW ROM6
|
||||
DW ROM7
|
||||
DW ROM8
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -185,3 +185,5 @@ FILEREFS DB $00,$00,$00,$00
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -314,6 +314,8 @@ PREFIX DS 65 ; Buffer for ProDOS prefix
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1121,3 +1121,5 @@ MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -424,6 +424,8 @@ MATCHBUF DS 65 ; For storing match results (Pascal str)
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue