mirror of
https://github.com/mist64/msbasic.git
synced 2024-12-22 08:29:21 +00:00
Add support for W65C816SXB dev board from WDC
This commit is contained in:
parent
ef822f46cd
commit
217c98898e
@ -25,6 +25,12 @@ This lists the versions in the order in which they were forked from the Microsof
|
|||||||
|
|
||||||
The CONFIG_n defines specify what Microsoft-version the OEM version is based on. If CONFIG_2B is defined, for example, CONFIG_2A, CONFIG_2, CONFIG_11A, CONFIG_11 and CONFIG_10A will be defined as well, and all bugfixes up to version 2B will be enabled.
|
The CONFIG_n defines specify what Microsoft-version the OEM version is based on. If CONFIG_2B is defined, for example, CONFIG_2A, CONFIG_2, CONFIG_11A, CONFIG_11 and CONFIG_10A will be defined as well, and all bugfixes up to version 2B will be enabled.
|
||||||
|
|
||||||
|
Additionally these releases are built for computer originally not having "original" Microsoft BASIC
|
||||||
|
| Name | Release | .define |
|
||||||
|
| ------------------- |:--------:| ---------- |
|
||||||
|
| W65C816SXB | 2014 | CONFIG_2C |
|
||||||
|
|
||||||
|
|
||||||
The following symbols can be defined in addition:
|
The following symbols can be defined in addition:
|
||||||
|
|
||||||
| Configuration Symbol | Description
|
| Configuration Symbol | Description
|
||||||
|
@ -25,6 +25,9 @@ AIM65 := 1
|
|||||||
.elseif .def(sym1)
|
.elseif .def(sym1)
|
||||||
SYM1 := 1
|
SYM1 := 1
|
||||||
.include "defines_sym1.s"
|
.include "defines_sym1.s"
|
||||||
|
.elseif .def(w65c816sxb)
|
||||||
|
W65C816SXB := 1
|
||||||
|
.include "defines_w65c816sxb.s"
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.ifdef CONFIG_2C
|
.ifdef CONFIG_2C
|
||||||
|
26
defines_w65c816sxb.s
Normal file
26
defines_w65c816sxb.s
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
; configuration
|
||||||
|
CONFIG_2C := 1
|
||||||
|
|
||||||
|
CONFIG_NO_CR := 1
|
||||||
|
CONFIG_SCRTCH_ORDER := 2
|
||||||
|
|
||||||
|
; zero page
|
||||||
|
ZP_START1 := $00
|
||||||
|
ZP_START2 := $0D
|
||||||
|
ZP_START3 := $5B
|
||||||
|
ZP_START4 := $65
|
||||||
|
|
||||||
|
;extra ZP variables
|
||||||
|
USR := $000A
|
||||||
|
|
||||||
|
; constants
|
||||||
|
STACK_TOP := $FC
|
||||||
|
SPACE_FOR_GOSUB := $33
|
||||||
|
WIDTH := 72
|
||||||
|
WIDTH2 := 56
|
||||||
|
|
||||||
|
; memory layout
|
||||||
|
RAMSTART2 := $5000
|
||||||
|
SAVE:
|
||||||
|
LOAD:
|
||||||
|
rts
|
6
extra.s
6
extra.s
@ -26,4 +26,8 @@
|
|||||||
|
|
||||||
.ifdef SYM1
|
.ifdef SYM1
|
||||||
.byte 0,0,0
|
.byte 0,0,0
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
.ifdef W65C816SXB
|
||||||
|
.include "w65c816sxb_extra.s"
|
||||||
|
.endif
|
||||||
|
20
header.s
20
header.s
@ -1,4 +1,24 @@
|
|||||||
.segment "HEADER"
|
.segment "HEADER"
|
||||||
|
.ifdef W65C816SXB
|
||||||
|
; Disable emulation mode (is left on from the monitor)
|
||||||
|
.setcpu "65816"
|
||||||
|
SEC ;set carry for emulation mode
|
||||||
|
XCE ;go into emulation mode
|
||||||
|
.setcpu "65C02"
|
||||||
|
jsr INITUSBSERIAL
|
||||||
|
|
||||||
|
; Add a small delay to allow monitor to connect the terminal after
|
||||||
|
; starting execution
|
||||||
|
ldy #0
|
||||||
|
ldx #0
|
||||||
|
@loop:
|
||||||
|
dex
|
||||||
|
bne @loop
|
||||||
|
dey
|
||||||
|
bne @loop
|
||||||
|
jmp COLD_START
|
||||||
|
.endif
|
||||||
|
|
||||||
.ifdef KBD
|
.ifdef KBD
|
||||||
jmp LE68C
|
jmp LE68C
|
||||||
.byte $00,$13,$56
|
.byte $00,$13,$56
|
||||||
|
5
iscntc.s
5
iscntc.s
@ -26,4 +26,7 @@
|
|||||||
.ifdef SYM1
|
.ifdef SYM1
|
||||||
.include "sym1_iscntc.s"
|
.include "sym1_iscntc.s"
|
||||||
.endif
|
.endif
|
||||||
;!!! runs into "STOP"
|
.ifdef W65C816SXB
|
||||||
|
.include "w65c816sxb_iscntc.s"
|
||||||
|
.endif
|
||||||
|
;!!! runs into "STOP"
|
||||||
|
2
make.sh
2
make.sh
@ -2,7 +2,7 @@ if [ ! -d tmp ]; then
|
|||||||
mkdir tmp
|
mkdir tmp
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan aim65 sym1; do
|
for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan aim65 sym1 w65c816sxb; do
|
||||||
|
|
||||||
echo $i
|
echo $i
|
||||||
ca65 -D $i msbasic.s -o tmp/$i.o &&
|
ca65 -D $i msbasic.s -o tmp/$i.o &&
|
||||||
|
19
w65c816sxb.cfg
Normal file
19
w65c816sxb.cfg
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
MEMORY {
|
||||||
|
ZP: start = $0000, size = $0100, type = rw;
|
||||||
|
BASROM: start = $1000, size = $3F00, fill = no, file = %O;
|
||||||
|
DUMMY: start = $0000, size = $00FF, file = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
|
HEADER: load = BASROM, type = ro;
|
||||||
|
VECTORS: load = BASROM, type = ro;
|
||||||
|
KEYWORDS: load = BASROM, type = ro;
|
||||||
|
ERROR: load = BASROM, type = ro;
|
||||||
|
CODE: load = BASROM, type = ro;
|
||||||
|
CHRGET: load = BASROM, type = ro;
|
||||||
|
INIT: load = BASROM, type = ro;
|
||||||
|
EXTRA: load = BASROM, type = ro;
|
||||||
|
DUMMY: load = DUMMY; # don't include
|
||||||
|
}
|
||||||
|
|
92
w65c816sxb_extra.s
Normal file
92
w65c816sxb_extra.s
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
.segment "EXTRA"
|
||||||
|
.export MONRDKEY_NB, MONRDKEY, MONCOUT, INITUSBSERIAL
|
||||||
|
|
||||||
|
VIA_USB_REG_DDRB := $7FE2
|
||||||
|
VIA_USB_REG_DDRA := $7FE3
|
||||||
|
VIA_USB_REG_PORTB := $7FE0
|
||||||
|
VIA_USB_REG_PORTA := $7FE1
|
||||||
|
VIA_USB_NRD := %00001000 ; make RD# high to not output data from FTDI
|
||||||
|
VIA_USB_WR := %00000100 ; make WR high to output data from FTDI
|
||||||
|
VIA_USB_nRXF := %00000010
|
||||||
|
VIA_USB_DDRB_INIT := (VIA_USB_NRD+VIA_USB_WR)
|
||||||
|
|
||||||
|
; INIT: Set up outputs and block reading characters from FTDI
|
||||||
|
INITUSBSERIAL:
|
||||||
|
lda #(VIA_USB_NRD+VIA_USB_WR) ; Make these outputs
|
||||||
|
sta VIA_USB_REG_DDRB ; to DDRB
|
||||||
|
lda #VIA_USB_NRD ; Block RD, no WR
|
||||||
|
sta VIA_USB_REG_PORTB ; to REGB
|
||||||
|
rts
|
||||||
|
|
||||||
|
MONRDKEY_NB:
|
||||||
|
READCHAR:
|
||||||
|
lda VIA_USB_REG_PORTB
|
||||||
|
and #VIA_USB_nRXF
|
||||||
|
|
||||||
|
bne READCHAR_NOTHINGTOREAD ; Z=0 -> had no result
|
||||||
|
|
||||||
|
; Reset DDRA as input
|
||||||
|
lda #$00 ; 0x00
|
||||||
|
sta VIA_USB_REG_DDRA ; to Directory Data (all in)
|
||||||
|
|
||||||
|
lda #0 ; DO RD, no WR
|
||||||
|
sta VIA_USB_REG_PORTB ; to REGB
|
||||||
|
|
||||||
|
|
||||||
|
lda VIA_USB_REG_PORTA
|
||||||
|
|
||||||
|
; Save on stack temporrily
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda #VIA_USB_NRD ; Block RD, no WR
|
||||||
|
sta VIA_USB_REG_PORTB ; to REGB
|
||||||
|
|
||||||
|
; Get character back
|
||||||
|
pla
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
READCHAR_NOTHINGTOREAD:
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
MONRDKEY:
|
||||||
|
php
|
||||||
|
@MONRDKEYREREAD:
|
||||||
|
jsr MONRDKEY_NB
|
||||||
|
bcc @MONRDKEYREREAD
|
||||||
|
; Enable to echo back
|
||||||
|
; jsr SENDCHAR
|
||||||
|
plp
|
||||||
|
rts
|
||||||
|
|
||||||
|
MONCOUT:
|
||||||
|
; TXE SHOULD be read before sending, but since the USB connection is
|
||||||
|
; running full speed this buffer has not been seen filling up.
|
||||||
|
|
||||||
|
; Save A for when returning
|
||||||
|
pha
|
||||||
|
|
||||||
|
; Output character
|
||||||
|
sta VIA_USB_REG_PORTA ; to data
|
||||||
|
|
||||||
|
lda #VIA_USB_NRD ; Block RD, no WR
|
||||||
|
sta VIA_USB_REG_PORTB ; to REGB
|
||||||
|
|
||||||
|
lda #$FF
|
||||||
|
sta VIA_USB_REG_DDRA ; (all out)
|
||||||
|
|
||||||
|
; Pulse WR
|
||||||
|
lda #(VIA_USB_NRD+VIA_USB_WR) ; Block RD, DO WR
|
||||||
|
sta VIA_USB_REG_PORTB ; to REGB
|
||||||
|
lda #VIA_USB_NRD ; Block RD, no WR
|
||||||
|
sta VIA_USB_REG_PORTB ; to REGB
|
||||||
|
|
||||||
|
; Reset DDRA as input
|
||||||
|
lda #$00
|
||||||
|
sta VIA_USB_REG_DDRA ; to Directory Data (all in)
|
||||||
|
|
||||||
|
; Restore Accumulator
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
10
w65c816sxb_iscntc.s
Normal file
10
w65c816sxb_iscntc.s
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.segment "CODE"
|
||||||
|
ISCNTC:
|
||||||
|
jsr MONRDKEY_NB
|
||||||
|
bcc @NOTHING
|
||||||
|
cmp #$03
|
||||||
|
beq @STOPIT
|
||||||
|
@NOTHING:
|
||||||
|
rts
|
||||||
|
@STOPIT:
|
||||||
|
;!!! runs into "STOP"
|
Loading…
Reference in New Issue
Block a user