diff --git a/ROM2/Makefile b/ROM2/Makefile index ac77ee3cdaec8b3c1976d894477fe09cefdcbba8..38780bfa9582d758ce4fdff80eb0ef8d8c5c8093 100644 --- a/ROM2/Makefile +++ b/ROM2/Makefile @@ -41,7 +41,7 @@ rom2.elf: $(OBJS) memory.x $(SIZE) $@ clean: - rm -f *.o *.elf *.s19 *.b *.a rom.tar.bz2 romsrc.c crctab.h m68hc11-gdb gencrctab + rm -f *.o *.elf *.s19 *.b *.a rom.tar.bz2 romsrc.s crctab.h m68hc11-gdb gencrctab # # Some useful rules @@ -53,11 +53,11 @@ size: rom2.s19 $(SIZE) $< rom.tar.bz2: - rm -f romsrc.c crctab.h + rm -f romsrc.s crctab.h tar cjf rom.tar.bz2 README Makefile gdbsimrc *.pl *.c *.h *.s *.x -romsrc.c: rom.tar.bz2 - perl -w src2c.pl < $< > $@ +romsrc.s: rom.tar.bz2 src2asm.pl + perl -w src2asm.pl < $< > $@ xmodem.c: crctab.h @@ -82,6 +82,7 @@ crctab.h: gencrctab .elf.b: $(OBJCOPY) --output-target=binary --gap-fill=255 \ $(OBJCOPY_FLAGS) $< $*.b + @perl -e '$$sum = 0;while(read STDIN, $$a, 1){$$sum += ord($$a); $$sum = $$sum&0xffff;} printf "Checksum is \%x\n", $$sum' < $@ m68hc11-gdb: /usr/bin/m68hc11-gdb sed -e 's|m68hc11eepr/reg 0xb000 512|m68hc11eepr/reg 0x4000 1 |' < $< > $@ diff --git a/ROM2/main_basic.c b/ROM2/main_basic.c index 1165326b3e0693eaa7e0e89770491c35fd2b802c..8d86585ad771845cf0fec0f7101758dc9929051b 100644 --- a/ROM2/main_basic.c +++ b/ROM2/main_basic.c @@ -324,6 +324,9 @@ void getrom() { send_string("Writing to serial port (maybe). Size is 0x"); send_string(u82hex(_rom_src_len >> 8)); send_string(u82hex(_rom_src_len & 0xff)); + send_string("@0x"); + send_string(u82hex((u16)(&_rom_src_data) >> 8)); + send_string(u82hex((u16)(&_rom_src_data) & 0xff)); send_string(" with signature "); s[0] = _rom_src_data[0]; s[1] = _rom_src_data[1]; @@ -333,7 +336,10 @@ void getrom() { send_string(CRLF " Type YES to download rom.tar.bz2 via XMODEM: "); msg_clr(); while (!sci_have_packet); /* spin */ - if (!my_strncmp("YES", (char*)sci_rx_buf, 3)) return; + if (!my_strncmp("YES", (char*)sci_rx_buf, 3)) { + send_string(CRLF "Transfer cancelled." CRLF); + return; + } sci_init(); sci_doing_xmodem = 1; @@ -346,16 +352,19 @@ void getrom() { char *end = (char*)_rom_src_data+_rom_src_len; bool aborted = 0; while (1) { - if (!xmodem_send_packet((char*)p, 128)) { - aborted = 1; - break; - } - p += 128; if (p + 128 > end) { /* send partial packet */ if (!xmodem_send_packet((char*)p, end-p)) aborted = 1; break; + } if ((u16)p == 0xb600) { + /* we have an eeprom here. skip it. */ + p += 0x0200; + continue; + } else if (!xmodem_send_packet((char*)p, 128)) { + aborted = 1; + break; } + p += 128; } xmodem_finish_xfer(); diff --git a/ROM2/memory.x b/ROM2/memory.x index 6b3abc6e48e38dfd122081cf6f83f4ee9bd6bd1a..f1127cf468b79dcc46f3f0721ef5cc7e34b9b717 100644 --- a/ROM2/memory.x +++ b/ROM2/memory.x @@ -1,10 +1,9 @@ MEMORY -{ - /* we squeeze both page0 and data into the internal 256 bytes of RAM */ +{ /* we squeeze both page0 and data into the internal 256 bytes of RAM */ page0 (rwx) : ORIGIN = 0x0000, LENGTH = 0x0080 data (rw) : ORIGIN = 0x0080, LENGTH = 0x0080 text (rx) : ORIGIN = 0x8000, LENGTH = 0x8000 - eeprom(rwx) : ORIGIN = 0x4000, LENGTH = 0x0200 + eeprom(rwx) : ORIGIN = 0xb600, LENGTH = 0x0020 } /* Setup the stack on the top of the data internal ram (not used). */ diff --git a/ROM2/src2asm.pl b/ROM2/src2asm.pl new file mode 100644 index 0000000000000000000000000000000000000000..e382f24672f2d1fd51fd524879289a7bd1ca5d7e --- /dev/null +++ b/ROM2/src2asm.pl @@ -0,0 +1,32 @@ +#!/usr/bin/perl -w + +$origin = 0x9800; # must match address of .romsrc in memory.x +$hole_start = 0xb600; +$hole_size = 0x0200; + +print <<EOT; +.sect .rodata +.global _rom_src_data +.global _rom_src_len + +.align 7 ; for a 128-bit boundary +_rom_src_data: +EOT +my $size = 0; +my $a; +while (read STDIN,$a,1) { + if ($origin+$size == $hole_start) { + for($i = 0; $i < $hole_size; $i++) { + print "\t.byte 0xff\n"; + } + $size += $hole_size; + } + printf "\t.byte 0x%04x\n", ord($a); + $size++; +} +print <<EOT; + + .align 2 +_rom_src_len: + .word $size +EOT diff --git a/ROM2/src2c.pl b/ROM2/src2c.pl deleted file mode 100644 index 8da976622a2281e0ed83b5216c5e2acf12723c22..0000000000000000000000000000000000000000 --- a/ROM2/src2c.pl +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/perl -w - -print "#include \"types.h\"\n"; -print "const char _rom_src_data[] = {\n\t"; -my $size = 0; -my $a; -while (read STDIN,$a,1) { - printf "0x%02x,", ord($a); - $size++; - if ($size%8 == 0) { print "\n\t"; } -} -print <<EOT; -}; - -const u16 _rom_src_len = $size; - -EOT