From: Hemstra Bart Jeroen <bart-jeroen@hemstra.com>
authorAlan Cox <alan@linux.intel.com>
Tue, 7 Jul 2015 14:42:53 +0000 (15:42 +0100)
committerAlan Cox <alan@linux.intel.com>
Tue, 7 Jul 2015 14:44:23 +0000 (15:44 +0100)
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
Kernel/platform-trs80/trs80load.s

index 034cde0..edd0ec7 100644 (file)
@@ -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
index aaa80b8..c9437f9 100644 (file)
@@ -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