Skip to content

Commit

Permalink
z8: Further work
Browse files Browse the repository at this point in the history
Add split id support for the kernel image. Userspace will need a load
of things dealing with including binary format and also lower level changes
so that valaddr can do the right thing for signals (where it's a code pointer)
and disk I/O can be told to load into code or data space.

(and then there's swap to worry about too)
  • Loading branch information
EtchedPixels committed Feb 15, 2024
1 parent de68da3 commit 01b1e06
Show file tree
Hide file tree
Showing 6 changed files with 424 additions and 65 deletions.
8 changes: 3 additions & 5 deletions Kernel/cpu-z8/image.mk
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
tools/visualize6800: tools/visualize6800.c
tools/visualize_splitid: tools/visualize_splitid.c

tools/pack85: tools/pack85.c

fuzix.bin: target $(OBJS) tools/pack85 tools/visualize6800
fuzix.bin: target $(OBJS) tools/visualize_splitid
+$(MAKE) -C platform/platform-$(TARGET) image
tools/visualize6800 <fuzix.map
tools/visualize_splitid <fuzix.map
4 changes: 2 additions & 2 deletions Kernel/platform/platform-rcbus-z8/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ clean:
rm -f $(OBJS) $(JUNK) core *~ bootblock.bin bootblock fuzix.bin loader.tmp

image:
$(CROSS_LD) -b -C 0x0100 -D 0x0100 -S 0xF000 -f CLDBbXSs -o fuzix.bin crt0.o devices.o main.o \
$(CROSS_LD) -i -b -C 0x0100 -D 0x0000 -S 0xF000 -f CXSDLBbs -o fuzix.bin crt0.o devices.o main.o \
discard.o commonmem.o tricks.o rcbus-z8.o devtty.o \
../../start.o ../../version.o ../../cpu-z8/lowlevel-z8.o \
../../mm/bankfixed.o ../../timer.o ../../kdata.o ../../mm/memalloc_none.o \
Expand All @@ -59,7 +59,7 @@ image:
../../dev/tinydisk_discard.o ../../dev/tinysd_discard.o \
../../blk512.o ../../cpu-z8/usermem_std-z8.o -m fuzix.tmpmap /opt/fcc/lib/z8/libz8.a
perl -lpe '$$_=hex' fuzix.tmpmap | paste -d" " - fuzix.tmpmap | sort -n | cut -d" " -f 2- >../../fuzix.map
../../tools/pack85 <../../fuzix.map fuzix.bin ../../fuzix.bin
cp fuzix.bin ../../fuzix.bin

loader.o: loader.S
$(CROSS_AS) $(ASOPS) loader.S
Expand Down
16 changes: 11 additions & 5 deletions Kernel/platform/platform-rcbus-z8/discard.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,17 @@
/* Add memory */
void pagemap_init(void)
{
register unsigned i;
/* Simple banking to get us going */
for (i = 35; i <= 63; i+=3)
pagemap_add(i);
/* TODO: do we need 35 last ? */
/* Low 0 is kernel map, high 0 unused except at boot */
/* 0xC3 is the kernel data */
/* pagemap_add(0xC3); */
pagemap_add(0x33);
pagemap_add(0xF3);
pagemap_add(0x0F);
pagemap_add(0xCF);
pagemap_add(0x3F);
/* This one weill be picked up by init and must be first to
match crt0.S */
pagemap_add(0xFF);
}

void map_init(void)
Expand Down
187 changes: 178 additions & 9 deletions Kernel/platform/platform-rcbus-z8/rcbus-z8.S
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ init_hardware:

_program_vectors:
; TODO need to fill in low 12 bytes when we do ints
; Do this in crt0.S instead for each code bank
ret

.export map_proc
Expand All @@ -85,22 +86,22 @@ map_save_kernel:
ld _mem_saved_bank, _mem_bank
map_kernel:
map_kernel_di:
ld _mem_bank,#0x20
map_bank:
push r3
push r14
push r15
map_bankp:
ld r14,#0xFF
ld r15,#0x78
ld _mem_bank,#0x20
ld r14,#0xFF ; MMU E
ld r15,r14
; set I/O on
push 2
and 2,#0xBF
push r3
ld r3,_mem_bank
ld r3,#0xC3 ; Bank 0 is kernel
; Write to E bank
lde @rr14,r3
inc r3
incw rr14
decw rr14
clr r3 ; Bank 0 is kernel code
; Write to C bank
lde @rr14,r3
inc r3
incw rr14
Expand All @@ -123,7 +124,32 @@ map_notk:
lde r3,@rr14
ld _mem_bank,r3
pop r3
jr map_bank
map_bank:
push r3
push r14
push r15
map_bankp:
ld r14,#0xFF ; MMU E
ld r15,r14
; set I/O on
push 2
and 2,#0xBF
push r3
ld r3,_mem_bank
; Write to E bank
lde @rr14,r3
decw rr14
; Write to C bank
lde @rr14,r3
inc r3
incw rr14
lde @rr14,r3
; Restore I/O on/off
pop 2
pop r15
pop r14
pop r3
ret

map_for_swap:
map_proc_a:
Expand Down Expand Up @@ -171,11 +197,154 @@ outchw:
.export _sd_spi_slow

_sd_spi_tx_byte:
ld r15,#2
call __gargr1
; r3 is now the byte
ld r12,3
ld r13,r12
or r12,#0x40 ; clock high
and r13,#0xBF ; clock low
spi_tx_r3:
; 8 cycles of bit banging
rlc r0
add r3,r3
ld 2,r12 ; clock high
rrc r0 ; top bit is now bit to send
ld 2,r3
ld 2,r13 ; clock low
rlc r0
add r3,r3
ld 2,r12 ; clock high
rrc r0 ; top bit is now bit to send
ld 2,r3
ld 2,r13 ; clock low
rlc r0
add r3,r3
ld 2,r12 ; clock high
rrc r0 ; top bit is now bit to send
ld 2,r3
ld 2,r13 ; clock low
rlc r0
add r3,r3
ld 2,r12 ; clock high
rrc r0 ; top bit is now bit to send
ld 2,r3
ld 2,r13 ; clock low
rlc r0
add r3,r3
ld 2,r12 ; clock high
rrc r0 ; top bit is now bit to send
ld 2,r3
ld 2,r13 ; clock low
rlc r0
add r3,r3
ld 2,r12 ; clock high
rrc r0 ; top bit is now bit to send
ld 2,r3
ld 2,r13 ; clock low
rlc r0
add r3,r3
ld 2,r12 ; clock high
rrc r0 ; top bit is now bit to send
ld 2,r3
ld 2,r13 ; clock low
rlc r0
add r3,r3
ld 2,r12 ; clock high
rrc r0 ; top bit is now bit to send
ld 2,r3
ld 2,r13 ; clock low

ret

_sd_spi_rx_byte:
ld r12,3
ld r13,r12
or r12,#0x40 ; clock high
and r13,#0xBF ; clock low
spi_rx_r3:
ld 2,r12
ld 2,r13
cp 3,#0x80
adc r3,r3 ; shift left amd add in bit
ld 2,r12
ld 2,r13
cp 3,#0x80
adc r3,r3 ; shift left amd add in bit
ld 2,r12
ld 2,r13
cp 3,#0x80
adc r3,r3 ; shift left amd add in bit
ld 2,r12
ld 2,r13
cp 3,#0x80
adc r3,r3 ; shift left amd add in bit
ld 2,r12
ld 2,r13
cp 3,#0x80
adc r3,r3 ; shift left amd add in bit
ld 2,r12
ld 2,r13
cp 3,#0x80
adc r3,r3 ; shift left amd add in bit
ld 2,r12
ld 2,r13
cp 3,#0x80
adc r3,r3 ; shift left amd add in bit
ld 2,r12
ld 2,r13
cp 3,#0x80
adc r3,r3 ; shift left amd add in bit
com r3
ret

_sd_spi_tx_sector:
ld r15,#2
call __gargr2
ld r15,r3
ld r14,r2 ; pointer
clr r2
ld r12,3
ld r13,r12
or r12,#0x40 ; clock high
and r13,#0xBF ; clock low
txlp:
call spi_tx_r3
lde @rr14,r3
incw rr14
call spi_rx_r3
lde @rr14,r3
incw rr14
djnz r2,txlp
ret

_sd_spi_rx_sector:
ld r15,#2
call __gargr2
ld r15,r3
ld r14,r2 ; pointer
clr r2
ld r12,3
ld r13,r12
or r12,#0x40 ; clock high
and r13,#0xBF ; clock low
rxlp:
lde r3,@rr14
incw rr14
call spi_rx_r3
lde r3,@rr14
incw rr14
call spi_rx_r3
djnz r2,rxlp
ret

_sd_spi_lower_cs:
or 2,#0x20 ; set CS1 high fist
and 3,#0xDF ; set CS0 low CS1 high
ret
_sd_spi_raise_cs:
or 2,#0x20 ; set CS1 high
or 3,#0x40 ; set CS0 high
_sd_spi_fast:
_sd_spi_slow:
ret
Expand Down
Loading

0 comments on commit 01b1e06

Please sign in to comment.