URL
https://opencores.org/ocsvn/eco32/eco32/trunk
Subversion Repositories eco32
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 188 to Rev 189
- ↔ Reverse comparison
Rev 188 → Rev 189
/eco32/trunk/monitor/monitor/boards/simulator/Makefile
0,0 → 1,45
# |
# Makefile for ECO32 ROM monitor |
# |
|
BUILD = ../../../../build |
|
SRC = start.s \ |
../../common/main.c \ |
../../common/command.c \ |
../../common/instr.c \ |
../../common/asm.c \ |
../../common/disasm.c \ |
../../common/load.c \ |
../../common/boot.c \ |
../../common/cpu.c \ |
../../common/mmu.c \ |
../../common/getline.c \ |
../../common/romlib.c \ |
../../common/keyboard.s \ |
../../kbdtbls/kbdtbls.s \ |
../../common/display.s \ |
../../common/serial.s \ |
../../common/dskctl.s \ |
../../common/dskser.s \ |
../../common/end.s |
|
.PHONY: all install clean |
|
all: monitor.bin |
|
install: monitor.bin |
mkdir -p $(BUILD)/monitor/simulator |
cp monitor.bin $(BUILD)/monitor/simulator |
|
monitor.bin: $(SRC) |
$(BUILD)/bin/lcc -A -Wo-rom -Wl-rc -Wl0xC0000000 \ |
-Wl-rd -Wl0xC000C000 \ |
-Wl-m -Wlmonitor.map \ |
-o prelim.bin $(SRC) |
cat ../../copy/copy.bin prelim.bin >monitor.bin |
rm prelim.bin |
|
clean: |
rm -f *~ |
rm -f prelim.bin monitor.map monitor.bin |
/eco32/trunk/monitor/monitor/boards/simulator/start.s
0,0 → 1,481
; |
; start.s -- ECO32 ROM monitor startup and support routines |
; |
|
; .set CIO_CTL,0x00 ; set console to keyboard/display |
.set CIO_CTL,0x03 ; set console to serial line 0 |
|
.set dmapaddr,0xC0000000 ; base of directly mapped addresses |
.set stacktop,0xC0010000 ; monitor stack is at top of 64K |
|
.set PSW,0 ; reg # of PSW |
.set V_SHIFT,27 ; interrupt vector ctrl bit |
.set V,1 << V_SHIFT |
|
.set TLB_INDEX,1 ; reg # of TLB Index |
.set TLB_ENTRY_HI,2 ; reg # of TLB EntryHi |
.set TLB_ENTRY_LO,3 ; reg # of TLB EntryLo |
.set TLB_ENTRIES,32 ; number of TLB entries |
.set BAD_ADDRESS,4 ; reg # of bad address reg |
.set BAD_ACCESS,5 ; reg # of bad access reg |
|
.set USER_CONTEXT_SIZE,38*4 ; size of user context |
|
;*************************************************************** |
|
.import _ecode |
.import _edata |
.import _ebss |
|
.import kbdinit |
.import kbdinchk |
.import kbdin |
|
.import dspinit |
.import dspoutchk |
.import dspout |
|
.import ser0init |
.import ser0inchk |
.import ser0in |
.import ser0outchk |
.import ser0out |
|
.import ser1init |
.import ser1inchk |
.import ser1in |
.import ser1outchk |
.import ser1out |
|
.import dskinitctl |
.import dskcapctl |
.import dskioctl |
|
.import dskinitser |
.import dskcapser |
.import dskioser |
|
.import main |
|
.export _bcode |
.export _bdata |
.export _bbss |
|
.export setcon |
.export cinchk |
.export cin |
.export coutchk |
.export cout |
.export dskcap |
.export dskio |
|
.export getTLB_HI |
.export getTLB_LO |
.export setTLB |
|
.export saveState |
.export monitorReturn |
|
.import userContext |
.export resume |
|
;*************************************************************** |
|
.code |
_bcode: |
|
.data |
_bdata: |
|
.bss |
_bbss: |
|
;*************************************************************** |
|
.code |
.align 4 |
|
startup: |
j start |
|
interrupt: |
j isr |
|
userMiss: |
j umsr |
|
;*************************************************************** |
|
.code |
.align 4 |
|
setcon: |
j setcio |
|
cinchk: |
j cichk |
|
cin: |
j ci |
|
coutchk: |
j cochk |
|
cout: |
j co |
|
dskcap: |
j dcap |
|
dskio: |
j dio |
|
reserved10: |
j reserved10 |
|
reserved11: |
j reserved11 |
|
reserved12: |
j reserved12 |
|
reserved13: |
j reserved13 |
|
reserved14: |
j reserved14 |
|
reserved15: |
j reserved15 |
|
;*************************************************************** |
|
.code |
.align 4 |
|
start: |
; let irq/exc vectors point to RAM |
add $8,$0,V |
mvts $8,PSW |
|
; initialize TLB |
mvts $0,TLB_ENTRY_LO ; invalidate all TLB entries |
add $8,$0,dmapaddr ; by impossible virtual page number |
mvts $8,TLB_ENTRY_HI |
add $8,$0,$0 |
add $9,$0,TLB_ENTRIES |
tlbloop: |
mvts $8,TLB_INDEX |
tbwi |
add $8,$8,1 |
bne $8,$9,tlbloop |
|
; copy data segment |
add $10,$0,_bdata ; lowest dst addr to be written to |
add $8,$0,_edata ; one above the top dst addr |
sub $9,$8,$10 ; $9 = size of data segment |
add $9,$9,_ecode ; data is waiting right after code |
j cpytest |
cpyloop: |
ldw $11,$9,0 ; src addr in $9 |
stw $11,$8,0 ; dst addr in $8 |
cpytest: |
sub $8,$8,4 ; downward |
sub $9,$9,4 |
bgeu $8,$10,cpyloop |
|
; clear bss segment |
add $8,$0,_bbss ; start with first word of bss |
add $9,$0,_ebss ; this is one above the top |
j clrtest |
clrloop: |
stw $0,$8,0 ; dst addr in $8 |
add $8,$8,4 ; upward |
clrtest: |
bltu $8,$9,clrloop |
|
; initialize I/O |
add $29,$0,stacktop ; setup monitor stack |
jal kbdinit ; init keyboard |
jal dspinit ; init display |
jal ser0init ; init serial line 0 |
jal ser1init ; init serial line 1 |
jal dskinitctl ; init disk (controller) |
jal dskinitser ; init disk (serial line) |
add $4,$0,CIO_CTL ; set console |
jal setcio |
|
; call main |
jal main ; enter command loop |
|
; main should never return |
j start ; just to be sure... |
|
;*************************************************************** |
|
.code |
.align 4 |
|
; Word getTLB_HI(int index) |
getTLB_HI: |
mvts $4,TLB_INDEX |
tbri |
mvfs $2,TLB_ENTRY_HI |
jr $31 |
|
; Word getTLB_LO(int index) |
getTLB_LO: |
mvts $4,TLB_INDEX |
tbri |
mvfs $2,TLB_ENTRY_LO |
jr $31 |
|
; void setTLB(int index, Word entryHi, Word entryLo) |
setTLB: |
mvts $4,TLB_INDEX |
mvts $5,TLB_ENTRY_HI |
mvts $6,TLB_ENTRY_LO |
tbwi |
jr $31 |
|
;*************************************************************** |
|
.data |
.align 4 |
|
cioctl: |
.byte 0 |
|
.code |
.align 4 |
|
; void setcon(Byte ctl) |
setcio: |
stb $4,$0,cioctl |
j $31 |
|
; int cinchk(void) |
cichk: |
ldbu $8,$0,cioctl |
and $8,$8,0x01 |
bne $8,$0,cichk1 |
j kbdinchk |
cichk1: |
j ser0inchk |
|
; char cin(void) |
ci: |
ldbu $8,$0,cioctl |
and $8,$8,0x01 |
bne $8,$0,ci1 |
j kbdin |
ci1: |
j ser0in |
|
; int coutchk(void) |
cochk: |
ldbu $8,$0,cioctl |
and $8,$8,0x02 |
bne $8,$0,cochk1 |
j dspoutchk |
cochk1: |
j ser0outchk |
|
; void cout(char c) |
co: |
ldbu $8,$0,cioctl |
and $8,$8,0x02 |
bne $8,$0,co1 |
j dspout |
co1: |
j ser0out |
|
;*************************************************************** |
|
.code |
.align 4 |
|
; int dskcap(int dskno) |
dcap: |
bne $4,$0,dcapser |
j dskcapctl |
dcapser: |
j dskcapser |
|
; int dskio(int dskno, char cmd, int sct, Word addr, int nscts) |
dio: |
bne $4,$0,dioser |
add $4,$5,$0 |
add $5,$6,$0 |
add $6,$7,$0 |
ldw $7,$29,16 |
j dskioctl |
dioser: |
add $4,$5,$0 |
add $5,$6,$0 |
add $6,$7,$0 |
ldw $7,$29,16 |
j dskioser |
|
;*************************************************************** |
|
.code |
.align 4 |
|
; Bool saveState(MonitorState *msp) |
; always return 'true' here |
saveState: |
stw $31,$4,0*4 ; return address |
stw $29,$4,1*4 ; stack pointer |
stw $16,$4,2*4 ; local variables |
stw $17,$4,3*4 |
stw $18,$4,4*4 |
stw $19,$4,5*4 |
stw $20,$4,6*4 |
stw $21,$4,7*4 |
stw $22,$4,8*4 |
stw $23,$4,9*4 |
add $2,$0,1 |
jr $31 |
|
; load state when re-entering monitor |
; this appears as if returning from saveState |
; but the return value is 'false' here |
loadState: |
ldw $8,$0,monitorReturn |
beq $8,$0,loadState ; fatal error: monitor state lost |
ldw $31,$8,0*4 ; return address |
ldw $29,$8,1*4 ; stack pointer |
ldw $16,$8,2*4 ; local variables |
ldw $17,$8,3*4 |
ldw $18,$8,4*4 |
ldw $19,$8,5*4 |
ldw $20,$8,6*4 |
ldw $21,$8,7*4 |
ldw $22,$8,8*4 |
ldw $23,$8,9*4 |
add $2,$0,0 |
jr $31 |
|
.bss |
.align 4 |
|
; extern MonitorState *monitorReturn |
monitorReturn: |
.space 4 |
|
; extern UserContext userContext |
userContext: |
.space USER_CONTEXT_SIZE |
|
;*************************************************************** |
|
.code |
.align 4 |
|
; void resume(void) |
; use userContext to load state |
resume: |
mvts $0,PSW |
add $28,$0,userContext |
.nosyn |
ldw $8,$28,33*4 ; tlbIndex |
mvts $8,TLB_INDEX |
ldw $8,$28,34*4 ; tlbEntryHi |
mvts $8,TLB_ENTRY_HI |
ldw $8,$28,35*4 ; tlbEntryLo |
mvts $8,TLB_ENTRY_LO |
ldw $8,$28,36*4 ; badAddress |
mvts $8,BAD_ADDRESS |
ldw $8,$28,37*4 ; badAccess |
mvts $8,BAD_ACCESS |
;ldw $0,$28,0*4 ; registers |
ldw $1,$28,1*4 |
ldw $2,$28,2*4 |
ldw $3,$28,3*4 |
ldw $4,$28,4*4 |
ldw $5,$28,5*4 |
ldw $6,$28,6*4 |
ldw $7,$28,7*4 |
ldw $8,$28,8*4 |
ldw $9,$28,9*4 |
ldw $10,$28,10*4 |
ldw $11,$28,11*4 |
ldw $12,$28,12*4 |
ldw $13,$28,13*4 |
ldw $14,$28,14*4 |
ldw $15,$28,15*4 |
ldw $16,$28,16*4 |
ldw $17,$28,17*4 |
ldw $18,$28,18*4 |
ldw $19,$28,19*4 |
ldw $20,$28,20*4 |
ldw $21,$28,21*4 |
ldw $22,$28,22*4 |
ldw $23,$28,23*4 |
ldw $24,$28,24*4 |
ldw $25,$28,25*4 |
ldw $26,$28,26*4 |
ldw $27,$28,27*4 |
;ldw $28,$28,28*4 |
ldw $29,$28,29*4 |
ldw $30,$28,30*4 |
ldw $31,$28,31*4 |
ldw $28,$28,32*4 ; psw |
mvts $28,PSW |
rfx |
.syn |
|
; interrupt entry |
; use userContext to store state |
isr: |
umsr: |
.nosyn |
ldhi $28,userContext |
or $28,$28,userContext |
stw $0,$28,0*4 ; registers |
stw $1,$28,1*4 |
stw $2,$28,2*4 |
stw $3,$28,3*4 |
stw $4,$28,4*4 |
stw $5,$28,5*4 |
stw $6,$28,6*4 |
stw $7,$28,7*4 |
stw $8,$28,8*4 |
stw $9,$28,9*4 |
stw $10,$28,10*4 |
stw $11,$28,11*4 |
stw $12,$28,12*4 |
stw $13,$28,13*4 |
stw $14,$28,14*4 |
stw $15,$28,15*4 |
stw $16,$28,16*4 |
stw $17,$28,17*4 |
stw $18,$28,18*4 |
stw $19,$28,19*4 |
stw $20,$28,20*4 |
stw $21,$28,21*4 |
stw $22,$28,22*4 |
stw $23,$28,23*4 |
stw $24,$28,24*4 |
stw $25,$28,25*4 |
stw $26,$28,26*4 |
stw $27,$28,27*4 |
stw $28,$28,28*4 |
stw $29,$28,29*4 |
stw $30,$28,30*4 |
stw $31,$28,31*4 |
mvfs $8,PSW |
stw $8,$28,32*4 ; psw |
mvfs $8,TLB_INDEX |
stw $8,$28,33*4 ; tlbIndex |
mvfs $8,TLB_ENTRY_HI |
stw $8,$28,34*4 ; tlbEntryHi |
mvfs $8,TLB_ENTRY_LO |
stw $8,$28,35*4 ; tlbEntryLo |
mvfs $8,BAD_ADDRESS |
stw $8,$28,36*4 ; badAddress |
mvfs $8,BAD_ACCESS |
stw $8,$28,37*4 ; badAccess |
.syn |
j loadState |
/eco32/trunk/monitor/monitor/boards/Makefile
1,10 → 1,10
# |
# Makefile for building the ECO32 ROM monitor |
# Makefile for building the ECO32 ROM monitor for different boards |
# |
|
BUILD = ../../../build |
|
DIRS = xsa-xst-3 s3e-500 |
DIRS = simulator xsa-xst-3 s3e-500 |
|
.PHONY: all install clean |
|
/eco32/trunk/disk/tools/Makefile.run
18,7 → 18,7
|
run-sim: $(DSK_IMG) |
$(BUILD)/bin/sim -i -m 16 -c -t 2 \ |
-r $(BUILD)/monitor/xsa-xst-3/monitor.bin \ |
-r $(BUILD)/monitor/simulator/monitor.bin \ |
-d $(DSK_IMG) -o $(RUN_LOG) |
|
run-server: $(DSK_IMG) |