Skip to content

Commit

Permalink
[Add] step7 completed 🎉
Browse files Browse the repository at this point in the history
  • Loading branch information
wakame-tech committed Aug 18, 2019
1 parent 155b677 commit 96bf824
Show file tree
Hide file tree
Showing 19 changed files with 438 additions and 160 deletions.
6 changes: 5 additions & 1 deletion 01/bootload/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ H8WRITE = ../../tools/h8write/h8write

H8WRITE_SERDEV = /dev/cu.usbserial-FTRVI7J0

OBJS = vector.o startup.o main.o
OBJS = vector.o startup.o intr.o main.o interrupt.o
OBJS += lib.o serial.o xmodem.o elf.o

TARGET = kzload
Expand All @@ -31,6 +31,7 @@ LFRAGS = -static -T ld.scr -L.

.SUFFIXES: .c .o
.SUFFIXES: .s .o
.SUFFIXES: .S .o

all : $(TARGET)

Expand All @@ -45,6 +46,9 @@ $(TARGET) : $(OBJS)
.s.o : $<
$(CC) -c $(CFRAGS) $<

.S.o : $<
$(CC) -c $(CFRAGS) $<

$(TARGET).mot : $(TARGET)
$(OBJCOPY) -O srec $(TARGET) $(TARGET).mot

Expand Down
22 changes: 22 additions & 0 deletions 01/bootload/interrupt.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include "defines.h"
#include "intr.h"
#include "interrupt.h"

int softvec_init(void) {
int type;
for (type = 0; type < SOFTVEC_TYPE_NUM; type++)
softvec_setintr(type, NULL);

return 0;
}

int softvec_setintr(softvec_type_t type, softvec_handler_t handler) {
SOFTVECS[type] = handler;
return 0;
}

void interrupt(softvec_type_t type, unsigned long sp) {
softvec_handler_t handler = SOFTVECS[type];
if(handler)
handler(type, sp);
}
22 changes: 22 additions & 0 deletions 01/bootload/interrupt.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef _INTERRUPT_H_INCLUDED_
#define _INTERRUPT_H_INCLUDED_

extern char softvec;
#define SOFTVEC_ADDR (&softvec)

typedef short softvec_type_t;

typedef void (*softvec_handler_t)(softvec_type_t type, unsigned long sp);

#define SOFTVECS ((softvec_handler_t *)SOFTVEC_ADDR)

#define INTR_ENABLE asm volatile ("andc.b #0x3f, ccr")
#define INTR_DISABLE asm volatile ("orc.b #0xc0, ccr")

int softvec_init(void);

int softvec_setintr(softvec_type_t type, softvec_handler_t handler);

void interrupt(softvec_type_t type, unsigned long sp);

#endif
71 changes: 71 additions & 0 deletions 01/bootload/intr.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#include "intr.h"
.h8300h
.section .text

.global _intr_softerr
# .type _intr_softerr, @function

_intr_softerr:
mov.l er6, @-er7
mov.l er5, @-er7
mov.l er4, @-er7
mov.l er3, @-er7
mov.l er2, @-er7
mov.l er1, @-er7
mov.l er0, @-er7
mov.l er7, er1
mov.w #SOFTVEC_TYPE_SOFTERR, r0
jsr @_interrupt
mov.l @er7+, er0
mov.l @er7+, er1
mov.l @er7+, er2
mov.l @er7+, er3
mov.l @er7+, er4
mov.l @er7+, er5
mov.l @er7+, er6
rte

.global _intr_syscall
# .type _intr_syscall, @function

_intr_syscall:
mov.l er6, @-er7
mov.l er5, @-er7
mov.l er4, @-er7
mov.l er3, @-er7
mov.l er2, @-er7
mov.l er1, @-er7
mov.l er0, @-er7
mov.l er7, er1
mov.w #SOFTVEC_TYPE_SYSCALL, r0
jsr @_interrupt
mov.l @er7+, er0
mov.l @er7+, er1
mov.l @er7+, er2
mov.l @er7+, er3
mov.l @er7+, er4
mov.l @er7+, er5
mov.l @er7+, er6
rte

.global _intr_serintr
# .type _intr_serintr @function
_intr_serintr:
mov.l er6, @-er7
mov.l er5, @-er7
mov.l er4, @-er7
mov.l er3, @-er7
mov.l er2, @-er7
mov.l er1, @-er7
mov.l er0, @-er7
mov.l er7, er1
mov.w #SOFTVEC_TYPE_SERINTR, r0
jsr @_interrupt
mov.l @er7+, er0
mov.l @er7+, er1
mov.l @er7+, er2
mov.l @er7+, er3
mov.l @er7+, er4
mov.l @er7+, er5
mov.l @er7+, er6
rte
10 changes: 10 additions & 0 deletions 01/bootload/intr.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#ifndef _INTR_H_INCLUDED_
#define _INTR_H_INCLUDED_

#define SOFTVEC_TYPE_NUM 3

#define SOFTVEC_TYPE_SOFTERR 0
#define SOFTVEC_TYPE_SYSCALL 1
#define SOFTVEC_TYPE_SERINTR 2

#endif
Binary file modified 01/bootload/kzload
Binary file not shown.
Loading

0 comments on commit 96bf824

Please sign in to comment.