Pi1MHz Software

discuss both original and modern hardware for the bbc micro/electron
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

I went back to version 1.02 of the source code I had stored and did a simple ./release.sh on it and it compiled it all without any errors, and it works. So whatever I downloaded earlier from https://github.com/dp111/Pi1MHz/archive ... master.zip is significantly different that it doesn't work with these tools I have installed.
Image
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

Same with 1.03 but when I tried 1.04 which is the latest I have (originally downloaded 10/6/2020) this happens:

Code: Select all

ian@BMDesktop2020:/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-master1.04/src/scripts$ ./release.sh
-- The C compiler identification is GNU 9.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Configuring done
-- Generating done
-- Build files have been written to: /luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-master1.04/src/scripts
Scanning dependencies of target gitversion
Running version.sh script
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
version:
    
gitversion.h:
    #define GITVERSION ""
[  0%] Built target gitversion
Scanning dependencies of target Pi1MHz
[  3%] Building C object CMakeFiles/Pi1MHz.dir/ram_emulator.c.obj
[  7%] Building C object CMakeFiles/Pi1MHz.dir/rpi/armc-cstubs.c.obj
[ 15%] Building ASM object CMakeFiles/Pi1MHz.dir/rpi/arm-start.S.obj
[ 15%] Building C object CMakeFiles/Pi1MHz.dir/Pi1MHz.c.obj
[ 19%] Building C object CMakeFiles/Pi1MHz.dir/rpi/audio.c.obj
[ 23%] Building C object CMakeFiles/Pi1MHz.dir/rpi/auxuart.c.obj
[ 26%] Building C object CMakeFiles/Pi1MHz.dir/rpi/cache.c.obj
[ 30%] Building C object CMakeFiles/Pi1MHz.dir/rpi/exception.c.obj
[ 34%] Building C object CMakeFiles/Pi1MHz.dir/rpi/gpio.c.obj
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-master1.04/src/rpi/cache.c: In function 'enable_MMU_and_IDCaches':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-master1.04/src/rpi/cache.c:326:51: error: 'shareable' undeclared (first use in this function)
  326 |   unsigned int attr = ((aa6) << 6) | (bb << 3) | (shareable << 1) | ((aa0 ));
      |                                                   ^~~~~~~~~
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-master1.04/src/rpi/cache.c:326:51: note: each undeclared identifier is reported only once for each function it appears in
[ 38%] Building C object CMakeFiles/Pi1MHz.dir/rpi/info.c.obj
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:133: CMakeFiles/Pi1MHz.dir/rpi/cache.c.obj] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:105: CMakeFiles/Pi1MHz.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
Completely baffled by the whole thing.
Image
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

Commit ID 71abd8d 16/7/2021 works for me with ./release.sh but the next commit, 192ce0d 6/5/2022 is where it starts to go wrong, I have to comment out the fanalyser line and then still all this happens:

Code: Select all

ian@BMDesktop2020:/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/scripts$ ./release.sh
-- The C compiler identification is GNU 9.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Configuring done
-- Generating done
-- Build files have been written to: /luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/scripts
Scanning dependencies of target gitversion
Running version.sh script
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
version:
    
gitversion.h:
    #define GITVERSION ""
[  0%] Built target gitversion
Scanning dependencies of target Pi1MHz
[  8%] Building C object CMakeFiles/Pi1MHz.dir/rpi/performance.c.obj
[  8%] Building C object CMakeFiles/Pi1MHz.dir/rpi/gpio.c.obj
[ 16%] Building C object CMakeFiles/Pi1MHz.dir/rpi/info.c.obj
[ 16%] Building C object CMakeFiles/Pi1MHz.dir/ram_emulator.c.obj
[ 20%] Building C object CMakeFiles/Pi1MHz.dir/rpi/exception.c.obj
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
[ 28%] Building C object CMakeFiles/Pi1MHz.dir/rpi/auxuart.c.obj
[ 28%] Building ASM object CMakeFiles/Pi1MHz.dir/rpi/arm-start.S.obj
[ 32%] Building C object CMakeFiles/Pi1MHz.dir/rpi/mailbox.c.obj
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:159: CMakeFiles/Pi1MHz.dir/rpi/gpio.c.obj] Error 1
make[2]: *** Waiting for unfinished jobs....
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:198: CMakeFiles/Pi1MHz.dir/rpi/performance.c.obj] Error 1
[ 36%] Building C object CMakeFiles/Pi1MHz.dir/Pi1MHz.c.obj
[ 40%] Building C object CMakeFiles/Pi1MHz.dir/rpi/armc-cstubs.c.obj
[ 44%] Building C object CMakeFiles/Pi1MHz.dir/rpi/cache.c.obj
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
[ 48%] Building C object CMakeFiles/Pi1MHz.dir/rpi/audio.c.obj
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:76: CMakeFiles/Pi1MHz.dir/ram_emulator.c.obj] Error 1
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:146: CMakeFiles/Pi1MHz.dir/rpi/exception.c.obj] Error 1
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:172: CMakeFiles/Pi1MHz.dir/rpi/info.c.obj] Error 1
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:185: CMakeFiles/Pi1MHz.dir/rpi/mailbox.c.obj] Error 1
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:120: CMakeFiles/Pi1MHz.dir/rpi/auxuart.c.obj] Error 1
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:63: CMakeFiles/Pi1MHz.dir/Pi1MHz.c.obj] Error 1
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:94: CMakeFiles/Pi1MHz.dir/rpi/armc-cstubs.c.obj] Error 1
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
arm-none-eabi-gcc: error: unrecognized command line option '-fanalyzer'
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:107: CMakeFiles/Pi1MHz.dir/rpi/audio.c.obj] Error 1
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:133: CMakeFiles/Pi1MHz.dir/rpi/cache.c.obj] Error 1
make[1]: *** [CMakeFiles/Makefile2:105: CMakeFiles/Pi1MHz.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
ian@BMDesktop2020:/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/scripts$ ./release.sh
-- The C compiler identification is GNU 9.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Configuring done
-- Generating done
-- Build files have been written to: /luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/scripts
Scanning dependencies of target gitversion
Running version.sh script
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
version:
    
gitversion.h:
    #define GITVERSION ""
[  0%] Built target gitversion
Scanning dependencies of target Pi1MHz
[  8%] Building C object CMakeFiles/Pi1MHz.dir/rpi/info.c.obj
[  8%] Building C object CMakeFiles/Pi1MHz.dir/rpi/auxuart.c.obj
[ 16%] Building C object CMakeFiles/Pi1MHz.dir/rpi/armc-cstubs.c.obj
[ 16%] Building ASM object CMakeFiles/Pi1MHz.dir/rpi/arm-start.S.obj
[ 20%] Building C object CMakeFiles/Pi1MHz.dir/Pi1MHz.c.obj
[ 24%] Building C object CMakeFiles/Pi1MHz.dir/ram_emulator.c.obj
[ 32%] Building C object CMakeFiles/Pi1MHz.dir/rpi/cache.c.obj
[ 32%] Building C object CMakeFiles/Pi1MHz.dir/rpi/audio.c.obj
[ 36%] Building C object CMakeFiles/Pi1MHz.dir/rpi/exception.c.obj
[ 40%] Building C object CMakeFiles/Pi1MHz.dir/rpi/gpio.c.obj
[ 48%] Building C object CMakeFiles/Pi1MHz.dir/rpi/mailbox.c.obj
[ 48%] Building C object CMakeFiles/Pi1MHz.dir/rpi/performance.c.obj
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/exception.c: In function 'dump_digit':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/exception.c:21:11: warning: conversion from 'int' to 'unsigned char' may change value [-Wconversion]
   21 |       c = '0' + c;
      |           ^~~
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/exception.c:23:11: warning: conversion from 'int' to 'unsigned char' may change value [-Wconversion]
   23 |       c = 'A' + c - 10;
      |           ^~~
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/gpio.c: In function 'RPI_SetGpioPinFunction':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/gpio.c:11:13: warning: conversion to 'long unsigned int' from 'int' may change the sign of the result [-Wsign-conversion]
   11 |   fsel_copy |= (func << ((gpio % 10) * 3));
      |             ^~
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/exception.c: In function 'dump_info':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/exception.c:67:14: warning: conversion from 'int' to 'unsigned char' may change value [-Wconversion]
   67 |   dump_digit(_get_core());
      |              ^~~~~~~~~~~
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/gpio.c: In function 'RPI_SetGpioHi':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/gpio.c:70:30: warning: conversion to 'rpi_reg_wo_t' {aka 'volatile long unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   70 |       RPI_GpioBase->GPSET0 = (1 << gpio);
      |                              ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/gpio.c:74:30: warning: conversion to 'rpi_reg_wo_t' {aka 'volatile long unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   74 |       RPI_GpioBase->GPSET1 = (1 << (gpio - 32));
      |                              ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/audio.c: In function 'init_dma_buffer':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/audio.c:85:17: warning: conversion to 'long unsigned int' from 'int' may change the sign of the result [-Wsign-conversion]
   85 |    buffer_state |= 1<<buf;
      |                 ^~
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/gpio.c: In function 'RPI_SetGpioLo':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/gpio.c:87:30: warning: conversion to 'rpi_reg_wo_t' {aka 'volatile long unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   87 |       RPI_GpioBase->GPCLR0 = (1 << gpio);
      |                              ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/gpio.c:91:30: warning: conversion to 'rpi_reg_wo_t' {aka 'volatile long unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   91 |       RPI_GpioBase->GPCLR1 = (1 << (gpio - 32));
      |                              ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/ram_emulator.c: In function 'ram_emulator_byte_addr':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/ram_emulator.c:44:61: warning: conversion to 'size_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   44 |       case 1:  byte_ram_addr = (byte_ram_addr & 0xFFFF00FF) | data<<8; break;
      |                                                             ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/ram_emulator.c:45:61: warning: conversion to 'size_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   45 |       default: byte_ram_addr = (byte_ram_addr & 0xFF00FFFF) | data<<16; break;
      |                                                             ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/ram_emulator.c: In function 'ram_emulator_page_addr':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/ram_emulator.c:67:52: warning: conversion to 'size_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   67 |       page_ram_addr = (page_ram_addr & 0x00FFFFFF) | data<<24;
      |                                                    ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/ram_emulator.c:70:52: warning: conversion to 'size_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   70 |       page_ram_addr = (page_ram_addr & 0xFF00FFFF) | data<<16;
      |                                                    ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/ram_emulator.c:72:52: warning: conversion to 'size_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
   72 |       page_ram_addr = (page_ram_addr & 0xFFFF00FF) | data<<8;
      |                                                    ^
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/cache.c: In function '_clean_cache_area':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/cache.c:123:20: warning: conversion to 'uint32_t' {aka 'long unsigned int'} from 'int' may change the sign of the result [-Wsign-conversion]
  123 |    cachelinesize = 4<<cachelinesize;
      |                    ^
[ 52%] Building C object CMakeFiles/Pi1MHz.dir/rpi/rpi.c.obj
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/cache.c: In function 'map_4k_page':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/cache.c:200:64: error: 'cachable' undeclared (first use in this function); did you mean 'cacheable'?
  200 |   PageTable2[logical] = (physical<<12) | 0x132u | (bb << 6) | (cachable<<3) | (bufferable << 2);
      |                                                                ^~~~~~~~
      |                                                                cacheable
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/cache.c:200:64: note: each undeclared identifier is reported only once for each function it appears in
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/performance.c: In function 'reset_performance_counters':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/performance.c:186:19: warning: conversion to 'unsigned int' from 'int' may change the sign of the result [-Wsign-conversion]
  186 |          cntenset |= (1 << i);
      |                   ^~
At top level:
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/cache.c:27:27: warning: 'cacheable' defined but not used [-Wunused-const-variable=]
   27 | static const unsigned int cacheable = 1;
      |                           ^~~~~~~~~
make[2]: *** [CMakeFiles/Pi1MHz.dir/build.make:133: CMakeFiles/Pi1MHz.dir/rpi/cache.c.obj] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:105: CMakeFiles/Pi1MHz.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
Image
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

so does head not build now ?
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

No, I get those hundreds of warnings and code that doesn't work in the Pi.

Maybe I need newer versions of the gcc and gcc-arm-none-eabi packages but I have the latest for Ubuntu 20.04.
Image
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

Are you still getting nosys.specs errors on head ?
User avatar
hoglet
Posts: 12683
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: Pi1MHz Software

Post by hoglet »

BeebMaster wrote: Sat Jul 16, 2022 6:37 pm No, I get those hundreds of warnings and code that doesn't work in the Pi.
The warnings are expected I think, because CMakeFile.txt has almost everything possible enabled.

I also see them all with GCC 11.2

Dominic, do you think it's worthing tuning these down a bit?

Dave
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

That's good to know, but doesn't explain why the firmware doesn't work when copied to the Pi SD card, I just get stuck in a reboot loop.
Image
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

if you have any warnings /errors for any files bar framebuffer.c can you post them ?
User avatar
BigEd
Posts: 6287
Joined: Sun Jan 24, 2010 10:24 am
Location: West Country
Contact:

Re: Pi1MHz Software

Post by BigEd »

I see one error in the log from upthread:

Code: Select all

/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/cache.c: In function 'map_4k_page':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-192ce0df9c30816f971d904e270b3606051acea2/src/rpi/cache.c:200:64: error: 'cachable' undeclared (first use in this function); did you mean 'cacheable'?
  200 |   PageTable2[logical] = (physical<<12) | 0x132u | (bb << 6) | (cachable<<3) | (bufferable << 2);
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

That suggests this isn't head and with that error there wouldn't be an output file.
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

Here's the full thing:
Attachments
debugPi1MHz.txt
(174.33 KiB) Downloaded 20 times
Image
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

With the debug build what comes out of the UART?
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

Using this:

https://linuxize.com/post/how-to-instal ... ntu-20-04/

I did this:

Code: Select all

sudo apt install gcc-8 g++-8 gcc-9 g++-9 gcc-10 g++-10
then this:

Code: Select all

sudo update-alternatives --config gcc
so now I get this:

Code: Select all

gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.3.0-1ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-S4I5Pr/gcc-10-10.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-S4I5Pr/gcc-10-10.3.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.3.0 (Ubuntu 10.3.0-1ubuntu1~20.04) 
but still this:

Code: Select all

arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/9.2.1/lto-wrapper
Target: arm-none-eabi
Configured with: ../configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/lib/include' --mandir='/usr/lib/share/man' --infodir='/usr/lib/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir='/usr/lib/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --mandir=/usr/share/man --enable-languages=c,c++,lto --enable-multilib --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --enable-tls --build=x86_64-linux-gnu --target=arm-none-eabi --with-system-zlib --with-gnu-as --with-gnu-ld --with-pkgversion=15:9-2019-q4-0ubuntu1 --without-included-gettext --prefix=/usr/lib --infodir=/usr/share/doc/gcc-arm-none-eabi/info --htmldir=/usr/share/doc/gcc-arm-none-eabi/html --pdfdir=/usr/share/doc/gcc-arm-none-eabi/pdf --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --disable-libstdc++-v3 --host=x86_64-linux-gnu --with-headers=no --without-newlib --with-multilib-list=rmprofile CFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' CPPFLAGS='-Wdate-time -D_FORTIFY_SOURCE=2' CXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' FCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' FFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' GCJFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' OBJCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' OBJCXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' INHIBIT_LIBC_CFLAGS=-DUSE_TM_CLONE_REGISTRY=0 AR_FOR_TARGET=arm-none-eabi-ar AS_FOR_TARGET=arm-none-eabi-as LD_FOR_TARGET=arm-none-eabi-ld NM_FOR_TARGET=arm-none-eabi-nm OBJDUMP_FOR_TARGET=arm-none-eabi-objdump RANLIB_FOR_TARGET=arm-none-eabi-ranlib READELF_FOR_TARGET=arm-none-eabi-readelf STRIP_FOR_TARGET=arm-none-eabi-strip
Thread model: single
gcc version 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599] (15:9-2019-q4-0ubuntu1) 
However, when I do this:

Code: Select all

env PATH=/luks3/BMNFS/Ubuntu/ARMDevTools/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/:$PATH ./release.sh
it starts with this:

Code: Select all

-- The C compiler identification is GNU 11.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /luks3/BMNFS/Ubuntu/ARMDevTools/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc
-- Configuring done
-- Generating done
-- Build files have been written to: /luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-master/src/scripts
but still gives me all the warnings and the firmware won't work in the Pi Zero.

Can anybody actually compile it successfully so it works in Pi1MHz from the zip I downloaded:
Pi1MHz-master.zip
(2.62 MiB) Downloaded 18 times
Or even make the firmware I compiled work?
Pi1MHz_20220716_2023_ian.zip
(1.19 MiB) Downloaded 16 times
Don't remotely understand where I am going wrong.
Image
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

I've just turn the warnings down so head should make clean with gcc 12.1.

Attached is my latest build ( I haven't yet tested it )
Attachments
Pi1MHz_20220716_2056_root.zip
(1.19 MiB) Downloaded 17 times
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

That doesn't work either, same reboot loop. Something must be wrong with the master.

Built my own again, from a new master download and all the warnings have gone away, but also still doesn't work.

Is it not supporting the Pi Zero any more maybe?
Image
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

okay let me have a look and see where I've made a mistake
User avatar
sweh
Posts: 3326
Joined: Sat Mar 10, 2012 12:05 pm
Location: 07410 New Jersey
Contact:

Re: Pi1MHz Software

Post by sweh »

Just to stop you going down the confusing paths and wasting time
BeebMaster wrote: Sat Jul 16, 2022 8:28 pm

Code: Select all

gcc -v
...
gcc version 10.3.0 (Ubuntu 10.3.0-1ubuntu1~20.04) 
The gcc version isn't' really relevant. That's the "native" compiler (on your machine that'll compile to i386 or x86_64).

The arm-none-eabi-gcc is from a completely different package and is the cross-compiler to generate ARM binaries

The version you install in /luks3/... is yet a newer version of the cross-compiler, not installed from packages.

These are all pretty independent of each other. The gcc version has no relation to the arm-none-eabi-gcc version which has no relation to the /luks3/... version.
Rgds
Stephen
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

OK, but if I compile it just using ./release.sh it doesn't even finish compiling, whereas if I compile it as you suggested earlier with env PATH=/luks3/BMNFS/Ubuntu/ARMDevTools/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/:$PATH ./release.sh then it does compile it, so the actual version of arm-non-eabi-gcc must be important, and Ubuntu 20.04 won't let me install that version as a normal package, so I have to extract it somewhere else and force release.sh to use it.
Image
User avatar
hoglet
Posts: 12683
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: Pi1MHz Software

Post by hoglet »

Dominic,

Master is currently building cleanly for me with GCC 11.2.1, but not booting properly (on a Pi Zero).

I've done some bisection, and the breaking change is the addition of the wait parameter to RPI_PropertyProcess() in a89cfedd (and the two preceeding commits on 2022/06/03)

Rolling forward to master, if you comment out lines 134 and 135 in src/rpi/mailbox.c then everything works OK:

Code: Select all

    //    if (wait == false)
    //        return 0;
(I only briefly tested PRINT $&FD00, Music 5000 and BeebSCSI emulation)

I think it's not sufficient to just ignore the response, because that causes the next mailbox call that needs a response to complete early, matched to the wrong reponse. In such calls you need to purge any outstanding responses. And even then there are possibly race conditions. We had some difficulty in RGBtoHDMI getting this pattern to work, and ended up with a global variable that tracked whether there was a pending response.

Dave
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

Thanks hoglet. I'll fix it properly soon for now beebmaster can you comment out those two lines and see if it builds for you
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

Thanks Dave, that fixes it, although the first time I put the card in the Pi, it was still doing a loop with the LED flashing. I took the card out, put it back in the PC, didn't do anything, and just decided to try the card again first in the Pi, and it worked. I guess that was just a freak weirdness, I seem to get a lot of freak weirdness going on round here.
Image
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

hoglet wrote: Sun Jul 17, 2022 9:46 am Dominic,

Master is currently building cleanly for me with GCC 11.2.1, but not booting properly (on a Pi Zero).

I've done some bisection, and the breaking change is the addition of the wait parameter to RPI_PropertyProcess() in a89cfedd (and the two preceeding commits on 2022/06/03)

Rolling forward to master, if you comment out lines 134 and 135 in src/rpi/mailbox.c then everything works OK:

Code: Select all

    //    if (wait == false)
    //        return 0;
The issue I think appears to be the buffer being shared can get over written by the next packet before the VPU has completed the previous access.
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

I'm not getting very far with what I wanted to do, mainly owing to my ineptitude in C, which is even more pronounced than my ineptitude in everything else. One particular thing is really baffling me. I'm trying to introduce a variable for sectors per track to replace the hard-coded value of 33 everywhere but I am getting a warning using the variable in one part of the scsi.c code, even though I use it in other functions without any problems:

Code: Select all

/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-masterISWDev17-7-22/src/BeebSCSI/scsi.c: In function 'scsiCommandFormat':
/luks3/BMNFS/BBC/Pi1MHz/Pi1MHz-masterISWDev17-7-22/src/BeebSCSI/scsi.c:754:13: warning: variable 'sectorspertrack' set but not used [-Wunused-but-set-variable]
  754 |    uint32_t sectorspertrack; // ISW 17/7/22
      |       
Here's a snippet, and even deliberately assigning a value to that variable directly after declaring it doesn't clear the warning:

Code: Select all

static uint8_t scsiCommandFormat(void)
{
   // Format unit command parameters:
   uint8_t formatOptions;
   uint8_t dataPattern;
   uint8_t interleave;                   // New variable ISW 17/7/22
   uint32_t sectorspertrack; // ISW 17/7/22
   
   sectorspertrack = 32;
   
   if (debugFlag_scsiCommands) {
      debugString_P(PSTR("SCSI Commands: FORMAT command (0x04) received\r\n"));
      debugStringInt16_P(PSTR("SCSI Commands: Target LUN = "), commandDataBlock.targetLUN, true);
   }

   // Make sure the target LUN is started
   if (!filesystemReadLunStatus(commandDataBlock.targetLUN)) {
      // If the LUN is unavailable we need to create the LUN image on the file system
      // before formatting it.
      if (!filesystemCreateLunImage(commandDataBlock.targetLUN)) {
         // Could not create LUN image... return with error status
         if (debugFlag_scsiCommands) debugStringInt16_P(PSTR("SCSI Commands: ERROR: Could not create new LUN image for LUN #"), commandDataBlock.targetLUN, true);
         commandDataBlock.status = (uint8_t)(commandDataBlock.targetLUN << 5) | 0x02; // 0x02 = Bad

         // Set request sense error globals
         requestSenseData[commandDataBlock.targetLUN] = BAD_FORMAT; // Unformatted or Bad format

         // The LUN is in an unknown state... Stop the LUN
         filesystemSetLunStatus(commandDataBlock.targetLUN, false);
         return SCSI_STATUS;
      }
   }

   // Interpret command parameters
   formatOptions = (commandDataBlock.data[1] & 0x1F);
   dataPattern = commandDataBlock.data[2]; // Default fill pattern is 0x6C (108)
   interleave = (commandDataBlock.data[3] << 8) + commandDataBlock.data[4];   // Restore interleave variable ISW 17/7/22
    
   if (interleave == 1) sectorspertrack = 32 ; // ISW 17/7/22
   if (interleave !=1) sectorspertrack = 33  ; // ISW 17/7/22
       

   if (debugFlag_scsiCommands) debugStringInt16_P(PSTR("SCSI Commands: Format option = "), formatOptions, true);

   // Interleave cannot be greater than the number of sectors per track minus one, or we
   // should send a 1A error code (Interleave Error)
   // We don't really care about the interleave... you could uncomment this for a more
   // exact emulation...
   if (interleave > 32)                                                                     // Restore interleave checking ISW 17/7/22
   {                                                                                        // Restore interleave checking ISW 17/7/22 
   // Indicate unsuccessful command in status and message
   commandDataBlock.status = (commandDataBlock.targetLUN << 5) | 0x02; // 0x02 = Bad        // Restore interleave checking ISW 17/7/22
   
   // Set request sense error globals
   requestSenseData[commandDataBlock.targetLUN] = INTERLEAVE_ERROR; // Interleave Error     // Restore interleave checking ISW 17/7/22  
              
   return SCSI_STATUS;                                                                      // Restore interleave checking ISW 17/7/22
   }                                                                                        // Restore interleave checking ISW 17/7/22        

   // Note: The defect list is ignored by the emulation since it does not apply
   // to the emulated file system; this code is included for debug completion.

   // If specified (by the options) read the defect list (ACB-4000 figure 5-6)
   if (formatOptions == 28 || formatOptions == 30) {
      uint8_t Buffer[8];
      // Read the defect list
      if (debugFlag_scsiCommands) debugString_P(PSTR("SCSI Commands: Reading the defect list:\r\n"));

      // Set up the control signals ready for the data out phase
      scsiInformationTransferPhase(ITPHASE_DATAOUT);

      // Read the defect list header
      if (debugFlag_scsiCommands) debugString_P(PSTR("SCSI Commands: Defect list header:\r\n"));
      for (size_t byteCounter = 0; byteCounter < 4; byteCounter++)
        Buffer[byteCounter] = hostadapterReadByte();

      uint16_t defectListLength = (uint16_t) ((Buffer[2] << 8) + (Buffer[3]) / 8);
      if (debugFlag_scsiCommands) debugStringInt16_P(PSTR("SCSI Commands:   Length = "), defectListLength, true);

      // Read the defect records
      for (uint16_t defectListRecords = 0; defectListRecords < defectListLength; defectListRecords++) {
         // Read the defect data
         for (size_t byteCounter = 0; byteCounter < 8; byteCounter++)
           Buffer[byteCounter] = hostadapterReadByte();

         // Output defect to debug
         if (debugFlag_scsiCommands) {
            debugStringInt16_P(PSTR("SCSI Commands: Defect #"), defectListRecords, true);
            debugStringInt32_P(PSTR("SCSI Commands:   Cylinder = "),
         ((uint32_t)Buffer[0] << 16) + ((uint32_t)Buffer[1] << 8) + (uint32_t)Buffer[2],
         true);
            debugStringInt16_P(PSTR("SCSI Commands:   Head = "), Buffer[3], true);
            debugStringInt32_P(PSTR("SCSI Commands:   Bytes = "),
         ((uint32_t)Buffer[4] << 24) + ((uint32_t)Buffer[5] << 16) +
         ((uint32_t)Buffer[6] << 8) + (uint32_t)Buffer[7],
         true);
         }
      }
   }

   // Create/recreate the LUN data file according to the drive descriptor and fill
   // with the required data pattern byte:
   if (!filesystemFormatLun(commandDataBlock.targetLUN, dataPattern)) {
      // Formatting failed...
      if (debugFlag_scsiCommands) debugString_P(PSTR("SCSI Commands: Format failed\r\n"));

      commandDataBlock.status = (uint8_t)(commandDataBlock.targetLUN << 5) | 0x02; // 0x02 = Bad

      // Set request sense error globals
      requestSenseData[commandDataBlock.targetLUN] = BAD_FORMAT; // 1C Bad format

      // The LUN is in an unknown state... Flag the LUN as unavailable
      filesystemSetLunStatus(commandDataBlock.targetLUN, false);

      return SCSI_STATUS;
   }

   // Tell the file system to start the new LUN
  // filesystemSetLunStatus(commandDataBlock.targetLUN, true);

   // Indicate successful command in status and message
   commandDataBlock.status = 0x00; // 0x00 = Good

   return SCSI_STATUS;
}
Just as I'm about to post, I'm thinking if the warning means that although I declare the variable and give it a value, I don't then read it back again so it isn't "used" in that sense.

(That's because I haven't finished this bit yet because I think after the format command, it needs to update the information in the .dsc file so that verify doesn't carry on forever, and I am planning to store sectors per track in the dsc file but I haven't worked out how to write a new dsc file following the format yet.)
Image
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

BeebMaster wrote: Sun Jul 17, 2022 7:21 pm Just as I'm about to post, I'm thinking if the warning means that although I declare the variable and give it a value, I don't then read it back again so it isn't "used" in that sense.
Seems I was right, if I add:

Code: Select all

   if (sectorspertrack == 32)  sectorspertrack = 32 ;
then the warning goes away!
Image
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

Right. I've abandoned everything up to this point as I put in too many changes and all sorts of things were going wrong. Softly softly approach from now on.

One thing I have fixed is the "verify forever" problem - I noticed in my earlier post that this line at the end of the format routine in scsi.c is commented out:

Code: Select all

   // Tell the file system to start the new LUN
  // filesystemSetLunStatus(commandDataBlock.targetLUN, true);
That needs to be restored and then it will only verify up to the size of the LUN.
Image
User avatar
BeebMaster
Posts: 7433
Joined: Sun Aug 02, 2009 5:59 pm
Location: Lost in the BeebVault!
Contact:

Re: Pi1MHz Software

Post by BeebMaster »

I'm doing much better now. One little change at at time, test and then carry on with the next thing.

So far I have fixed Read Capacity, which was returning the disc size in bytes instead of sectors as the data block being returned was mangled, and I've got it supporting 24 byte mode sense and mode select which in the case of mode select then writes a 24 byte .dsc file. This itself fixes a bug - or a bit more charitably, a divergence between the manual and actual behaviour - as the Adapter controller always allows 24 byte mode sense & select, it's just that the manual says 24 bytes is only for hard sectored or removable drives.

A side effect of this is that the extra 2 bytes are left in the Pi buffer block when moving from a LUN with a 24 byte .dsc file to a 22 byte one, so I will need to clear the whole buffer every time the mode sense or mode select functions are called.

I've replaced "33" with a sectorspertrack variable throughout, so this will make it easier to implement user-selectable spt of 32 or 33 based on interleave when I figure out the best way to do that. It will also make it easier to support the RLL ACB4070 controller as well if we decide to that; the only difference is the spt density of the discs.

I thought I should do a push or pull request in the Git Hub for these changes but when I read up on it, it suggested starting a new branch which can be pushed or pulled or merged later. However I don't seem to be important enough to start my own branches. Probably eminently sensible.

Another thing I am pondering is whether to replace all instances of "256" for the sector size with a variable, read from the .dsc file, in case anyone ever bodges ADFS to support 512-byte or greater sectors.
Image
User avatar
BigEd
Posts: 6287
Joined: Sun Jan 24, 2010 10:24 am
Location: West Country
Contact:

Re: Pi1MHz Software

Post by BigEd »

BeebMaster wrote: Mon Jul 18, 2022 12:09 am I thought I should do a push or pull request in the Git Hub for these changes but when I read up on it, it suggested starting a new branch which can be pushed or pulled or merged later. However I don't seem to be important enough to start my own branches. Probably eminently sensible.
The usual thing is to fork the project, then work in your fork, and then issue a pull request from your fork to the upstream one. There's a github button to create your fork.
dp11
Posts: 1763
Joined: Sun Aug 12, 2012 9:47 pm
Contact:

Re: Pi1MHz Software

Post by dp11 »

I'm very bad at this , but it helps if you can do one feature change/ bug fix per pull request. 10 small pull requests are better than one big one.
User avatar
sweh
Posts: 3326
Joined: Sat Mar 10, 2012 12:05 pm
Location: 07410 New Jersey
Contact:

Re: Pi1MHz Software

Post by sweh »

BeebMaster wrote: Mon Jul 18, 2022 12:09 am I thought I should do a push or pull request in the Git Hub for these changes but when I read up on it, it suggested starting a new branch which can be pushed or pulled or merged later. However I don't seem to be important enough to start my own branches. Probably eminently sensible.
Unless you have write access to the upstream repo, you would need to create your own fork on github then clone that to your machine and that's your working copy. You can that push changes back to your fork, and then create a pull request against the upstream repo.

If you plan on making multiple changes then you should create a branch on your own fork and that's what you use in the pull request. Even a 5 line change is worth a branch. It won't show up in the upstream because you'd make the pull request against upstream main/master. Once the PR is complete you could delete your branch.

This is better than making all changes against main/master because it allows you to do further development work against yet another different branch without impacting the existing PR.

If you do have upstream repo write access then you should definitely make a branch for your changes and push your changes to that.

Branches are effectively "free" (they're just a tag) and don't take up any real disk space and are a great way of segregating your work.
Rgds
Stephen
Post Reply

Return to “8-bit acorn hardware”