OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /eco32/trunk/monitor
    from Rev 185 to Rev 189
    Reverse comparison

Rev 185 → Rev 189

/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
/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
/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
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.