[Oberon] ORX.WriteFile
Chris Burrows
chris at cfbsoftware.com
Thu Oct 17 12:00:50 CEST 2019
There sure are loads of ways! The approach we used with Astrobe was to modify ORG so it always outputs a .mem text file directly from the code array if a Module* is being compiled:
IF version = 0 THEN WriteHexFile(modid) END
Regards,
Chris Burrows
CFB Software
https://www.astrobe.com/RISC5
> -----Original Message-----
> From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of
> Joerg
> Sent: Thursday, 17 October 2019 8:05 PM
> To: 'ETH Oberon and related systems'
> Subject: Re: [Oberon] ORX.WriteFile
>
> Interesting approach to take the decode output instead of the .rsc
> file directly ??
> But as I said, there are loads of ways to build your FPGA Oberon.
>
> J rg
>
> -----Original Message-----
> From: Oberon <oberon-bounces at lists.inf.ethz.ch> On Behalf Of Tomas
> Kral
> Sent: Thursday, October 17, 2019 10:50 AM
> To: oberon at lists.inf.ethz.ch
> Subject: Re: [Oberon] ORX.WriteFile
>
> Hi All,
>
> > You can build your FPGA Oberon system on any system
>
> Linux wise...
>
> I wish to catch up with the post, as I was away from Oberon scene for
> quite some time.
>
> As part the exercise of boot loading, I coded this shell script, it
> takes the output of ORTool.Decode [object.rsc], and makes PROM.mem
> output of it.
>
> #!/bin/sh
> # ORX.WriteFile
> # (c)tcat 18.10.2017
> # USAGE: orx [decode] > [prom.mem]
>
> # echo -n > prom.mem
> i=0; while read hex; do
> hex=$( echo $hex | sed s'/[ ]*[0-9]*[ \t]*\([0-9A-F]*\).*/\1/' )
> echo $hex # >> prom.mem
> i=$((i+1))
> done < $1
>
> j=$i; while [ $j -lt 512 ]; do
> echo 00000000 # >> prom.mem
> j=$((j+1))
> done
>
> # eof
>
> E.G. it just outputs this,
>
> E7000000
> 40000000
> A0D00008
> 80D00008
> 5100FFC4
> A0100000
> 400003E8
> A0D00000
> 400003E8
> A0D00004
> ...
> 00000000
> 00000000
>
> 0-padding to 512 entries
>
>
> From this rsc decode input
>
> 0 E7000000 B 0
> 1 40000000 MOV R0 R0 0
> 2 A0D00008 STW R0 SB 8
> 3 80D00008 LDW R0 SB 8
> 4 5100FFC4 MOV R1 R0 -60
> 5 A0100000 STW R0 R1 0
> 6 400003E8 MOV R0 R0 1000
> 7 A0D00000 STW R0 SB 0
> 8 400003E8 MOV R0 R0 1000
> 9 A0D00004 STW R0 SB 4
> 10 80D00004 LDW R0 SB 4
> 11 40090001 SUB R0 R0 1
> 12 A0D00004 STW R0 SB 4
> 13 80D00004 LDW R0 SB 4
> 14 40090000 SUB R0 R0 0
> 15 E9FFFFFA BNE -6
> 16 80D00000 LDW R0 SB 0
> 17 40090001 SUB R0 R0 1
> 18 A0D00000 STW R0 SB 0
> 19 80D00000 LDW R0 SB 0
> 20 40090000 SUB R0 R0 0
> 21 E9FFFFF2 BNE -14
> 22 80D00008 LDW R0 SB 8
> 23 40080001 ADD R0 R0 1
> 24 A0D00008 STW R0 SB 8
> 25 E7FFFFE9 B -23
> 26 40000000 MOV R0 R0 0
> 27 C7000000 B R0
>
> Later I put some of the build commands to exiting ORTool.Mod, naming
> commands differently to PO2013.
>
> MODULE ORTool; (*NW 18.2.2013*)
> ...
> (*2017 TK added*)
> PROCEDURE Boot*; (*create boot file from object file*)
> PROCEDURE Prom*; (*create PROM mem file from object file*)
> PROCEDURE StoreBoot*; (*store SD boot area to Boot.bin file*)
> PROCEDURE Limits*; (*SD boot Limits*)
> PROCEDURE InitBoot*; (*init SD boot area with Modules.bin file*)
>
> I use Andreas' ORL.Link tool to create inner core => `Modules.bin'
>
> This also allows for booting over serial with user standalone boot
> files.
>
> E.G.
> $ cp Boot[.bin] [serial device=[/dev/ttyUSB1,/dev/ttyS1, etc]]
>
> --
> Tomas Kral <thomas.kral at email.cz>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> systems https://lists.inf.ethz.ch/mailman/listinfo/oberon
>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> systems https://lists.inf.ethz.ch/mailman/listinfo/oberon
More information about the Oberon
mailing list