From 3af24c20795a0f31682d9bb13d686e4ffe9c6d21 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Tue, 7 Jul 2015 15:42:53 +0100 Subject: [PATCH] From: Hemstra Bart Jeroen trs80: move bootloader to use sdasz80/sdldz80 I converted the boot loader to SDASZ80, the result assembles neatly into 256 bytes. I included the file so if you like you can check it and place it in github. I didn't change the (complex) makefile, I assembled it with: sdasz80 -o trs80load.s sdldz80 -i trs80load.rel makebin -s 256 trs80load.ihx trs80load.bin dd if=trs80load.bin of=mydisk.jv3 bs=1 seek=8704 conv=notrunc [added Make bits - Alan] --- Kernel/platform-trs80/Makefile | 7 ++- Kernel/platform-trs80/trs80load.s | 88 ++++++++++++++++++------------- 2 files changed, 57 insertions(+), 38 deletions(-) diff --git a/Kernel/platform-trs80/Makefile b/Kernel/platform-trs80/Makefile index 034cde03..edd0ec75 100644 --- a/Kernel/platform-trs80/Makefile +++ b/Kernel/platform-trs80/Makefile @@ -18,7 +18,7 @@ CROSS_CCOPTS += -I../dev/ JUNK = $(CSRCS:.c=.lst) $(CSRCS:.c=.asm) $(CSRCS:.c=.sym) $(ASRCS:.s=.lst) $(ASRCS:.s=.sym) $(CSRCS:.c=.rst) $(ASRCS:.s=.rst) -all: $(OBJS) +all: $(OBJS) trs80load.bin $(COBJS): %.rel: %.c $(CROSS_CC) $(CROSS_CCOPTS) -c $< @@ -36,3 +36,8 @@ clean: rm -f $(OBJS) $(JUNK) core *~ image: + +trs80load.bin: trs80load.s + sdasz80 -o trs80load.s + sdldz80 -i trs80load.rel + makebin -s 256 trs80load.ihx trs80load.bin diff --git a/Kernel/platform-trs80/trs80load.s b/Kernel/platform-trs80/trs80load.s index aaa80b8b..c9437f90 100644 --- a/Kernel/platform-trs80/trs80load.s +++ b/Kernel/platform-trs80/trs80load.s @@ -1,31 +1,32 @@ +.z80 ; ; TRS80 bootblock (256 bytes) ; - .org 0x0 +; .org #0x0 start: - ld a, 0x06 ; kernel map, 80 column, no remap + ld a, #0x06 ; kernel map, 80 column, no remap out (0x84), a - ld a, 0x50 ; 80 column, sound, altchars off, + ld a, #0x50 ; 80 column, sound, altchars off, ; ext I/O on , 4MHz out (0xEC), a - ld hl, 0x4300 - ld de, 0x0 - ld bc, 256 + ld hl, #0x4300 + ld de, #0x0 + ld bc, #256 ldir jp go ; ; Assume the boot ROM left us on track 0 and motor on ; floppy_read: - ld bc, 0x81F4 ; select drive + ld bc, #0x81F4 ; select drive out (c), b out (0xF2), a ; sector please - ld a, 0x80 ; READ + ld a, #0x80 ; READ out (0xF0), a - ld b, 100 + ld b, #100 l1: djnz l1 - ld de, 0x8116 - ld bc, 0xF3 + ld de, #0x8116 + ld bc, #0xF3 flopin: in a, (0xF0) and e jr z, flopin @@ -37,22 +38,22 @@ flopind: jr nz, flopind flopstat: in a, (0xF0) - and 0x19 + and #0x19 bit 0, a jr nz, flopstat or a ret z - ld de, 0xF850 + ld de, #0xF850 call prints - .db 'Read',0 + .ascii 'Read\0' fail: jr fail - +; go: - ld sp, floppy_read + ld sp, #floppy_read ; load the 6845 parameters - ld hl, _ctc6845 - ld bc, 1588 + ld hl, #_ctc6845 + ld bc, #1588 ctcloop: out (c), b ; register ld a, (hl) out (0x89), a ; data @@ -60,29 +61,29 @@ ctcloop: out (c), b ; register djnz ctcloop ; clear screen - ld hl, 0xF800 + ld hl, #0xF800 inc hl - ld de, 0xF801 - ld bc, 1999 - ld (hl), ' ' + ld de, #0xF801 + ld bc, #1999 + ld (hl), #' ' ldir - ld de, 0xF800 + ld de, #0xF800 call prints - .db 'TRS80Load 0.1',0 - - ld hl, 0x0100 + .ascii 'TRS80Load 0.1\0' + ld hl, #0x0100 +; lastsec: ld a, (tracknum) inc a ld (tracknum), a - cp 40 + cp #40 jr z, booted out (0xF3), a - ld a, 0x18 ; seek + ld a, #0x18 ; seek out (0xF0), a - ld b, 100 + ld b, #100 cmd1: djnz cmd1 cmdwait: in a, (0xF0) bit 0, a @@ -91,14 +92,14 @@ cmdwait: in a, (0xF0) jr z, cmdwait seekstat: in a, (0xF0) - and 0x18 + and #0x18 bit 0, a jr nz, seekstat or a jr z, secmove - ld de, 0xF850 + ld de, #0xF850 call prints - .db 'seek',0 + .ascii 'seek\0' bad: jr bad secmove: xor a ld (secnum), a @@ -106,7 +107,7 @@ nextsec: ld a, (secnum) inc a ld (secnum), a - cp 19 + cp #19 jr z, lastsec push hl call floppy_read @@ -116,9 +117,22 @@ nextsec: tracknum: .db 28 ; tracks 29-39 (50688 bytes) - _ctc6845: ; registers in reverse order - .db 99, 80, 85, 10, 25, 4, 24, 24, 0, 9, 101, 9, 0, 0, 0 + .db 99 + .db 80 + .db 85 + .db 10 + .db 25 + .db 4 + .db 24 + .db 24 + .db 0 + .db 9 + .db 101 + .db 9 + .db 0 + .db 0 + .db 0 ; recycle last crc value as secnum so we fit 256 bytes secnum: .db 0 @@ -135,8 +149,8 @@ printsl: jr printsl out: jp (hl) -booted: ld de, 0xF850 +booted: ld de, #0xF850 call prints - .db 'Booting..',0 + .ascii 'Booting..\0' ; OS starts on the following byte -- 2.34.1