Hello community,
here is the log from the commit of package reveng for openSUSE:Factory checked in at 2019-11-19 12:59:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/reveng (Old)
and /work/SRC/openSUSE:Factory/.reveng.new.26869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "reveng"
Tue Nov 19 12:59:52 2019 rev:6 rq:749477 version:2.0.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/reveng/reveng.changes 2019-11-06 13:56:53.676207453 +0100
+++ /work/SRC/openSUSE:Factory/.reveng.new.26869/reveng.changes 2019-11-19 12:59:54.706111866 +0100
@@ -1,0 +2,15 @@
+Mon Nov 18 21:32:19 UTC 2019 - Martin Hauke
+
+- Update to version 2.0.3
+ * Added tomtorfs-wrapper.
+ * Revised poly class definitions and function entry conditions
+ in poly.c.
+ * Added DFSFIX veneer for ARM Tube OS binary.
+
+-------------------------------------------------------------------
+Mon Nov 4 18:48:53 UTC 2019 - Martin Hauke
+
+- Revert to http download since obs seems to have some issues
+ with https downloads from sourceforge
+
+-------------------------------------------------------------------
Old:
----
reveng-2.0.2.tar.xz
New:
----
reveng-2.0.3.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ reveng.spec ++++++
--- /var/tmp/diff_new_pack.L3Oavo/_old 2019-11-19 12:59:55.474111381 +0100
+++ /var/tmp/diff_new_pack.L3Oavo/_new 2019-11-19 12:59:55.478111379 +0100
@@ -18,13 +18,13 @@
Name: reveng
-Version: 2.0.2
+Version: 2.0.3
Release: 0
Summary: An arbitrary-precision CRC calculator and algorithm finder
License: GPL-3.0-or-later
Group: Development/Tools/Other
URL: http://reveng.sourceforge.net/
-Source: https://sourceforge.net/projects/%{name}/files/%{version}/%{name}-%{version}.tar.xz
+Source: http://sourceforge.net/projects/%{name}/files/%{version}/%{name}-%{version}.tar.xz
Patch0: reveng-dont-strip.patch
Patch1: reveng-obey-cflags.patch
Patch2: reveng-presets_x86_64.patch
++++++ reveng-2.0.2.tar.xz -> reveng-2.0.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/CHANGES new/reveng-2.0.3/CHANGES
--- old/reveng-2.0.2/CHANGES 2019-11-02 16:55:52.000000000 +0100
+++ new/reveng-2.0.3/CHANGES 2019-11-18 18:45:26.000000000 +0100
@@ -19,19 +19,25 @@
Revision history of CRC RevEng
+2.0.3 18 November 2019
+ * Added tomtorfs-wrapper.
+ * Revised poly class definitions and function entry conditions
+ in poly.c.
+ * Added DFSFIX veneer for ARM Tube OS binary.
+
2.0.2 2 November 2019
* The memory allocation expands geometrically while reading
polynomials from files; this improves performance on large
files but memory overhead is increased during the read.
* The argument index is initialized at run time, allowing
- RISC OS and ARM Tube OS users to re-invoke CRC RevEng from
+ RISC OS and ARM Tube OS users to reinvoke CRC RevEng from
memory using *Go.
* Replaced getopt library.
* Removed underscores from system calls.
* Updated documentation.
2.0.1 9 May 2019
- * Improved robustness of reveng()
+ * Improved robustness of reveng().
2.0.0 6 May 2019
* Much faster brute force search for generator polynomials if
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/RISCOSify new/reveng-2.0.3/RISCOSify
--- old/reveng-2.0.2/RISCOSify 2019-10-02 21:45:06.000000000 +0200
+++ new/reveng-2.0.3/RISCOSify 2019-11-18 18:51:15.000000000 +0100
@@ -1,5 +1,5 @@
| RISCOSify
-| Greg Cook, 2/Oct/2019
+| Greg Cook, 18/Nov/2019
| CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
| Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,
@@ -26,6 +26,9 @@
| Mk/ARMTube or Mk/RISCOS.
Set CRCRevEng$Dir
+IfThere .bin.armtubeos.dfsfix Then SetType .bin.armtubeos.dfsfix &FFD
+IfThere .bin.armtubeos.dfsfix/inf Then SetType .bin.armtubeos.dfsfix/inf &FFF
+IfThere .bin.armtubeos.dfsfix/txt Then SetType .bin.armtubeos.dfsfix/txt &FFE
IfThere .bin.armtubeos.README Then SetType .bin.armtubeos.README &FFF
IfThere .bin.armtubeos.reveng Then SetType .bin.armtubeos.reveng &FF8
IfThere .bin.armtubeos.reveng/inf Then SetType .bin.armtubeos.reveng/inf &FFF
@@ -43,7 +46,7 @@
IfThere .bin.riscos.Select_429.!Boot.Resources.!System.!Run Then SetType .bin.riscos.Select_429.!Boot.Resources.!System.!Run &FEB
IfThere .bin.riscos.!System.310.Modules.CLib Then SetType .bin.riscos.!System.310.Modules.CLib &FFA
IfThere .bin.riscos.!System.500.Modules.CLib Then SetType .bin.riscos.!System.500.Modules.CLib &FFA
-IfThere .bin.win32.reveng/exe Then SetType .bin.win32.reveng/exe &FE4
+IfThere .bin.win32.reveng/exe Then SetType .bin.win32.reveng/exe &FD9
IfThere .bmpbit/c Then SetType .bmpbit/c &FFF
IfThere .CHANGES Then SetType .CHANGES &FFF
IfThere .cli/c Then SetType .cli/c &FFF
@@ -65,6 +68,7 @@
IfThere .reveng/h Then SetType .reveng/h &FFF
IfThere .reveng/ico Then SetType .reveng/ico &132
IfThere .reveng/rc Then SetType .reveng/rc &FFF
+IfThere .tomtorfs-wrapper Then SetType .tomtorfs-wrapper &FFF
CDir .c
CDir .h
CDir .o
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/bin/armtubeos/README new/reveng-2.0.3/bin/armtubeos/README
--- old/reveng-2.0.2/bin/armtubeos/README 2019-11-01 19:59:18.000000000 +0100
+++ new/reveng-2.0.3/bin/armtubeos/README 2019-11-18 18:41:48.000000000 +0100
@@ -1,5 +1,5 @@
System requirements of ARM Tube OS binary
-Greg Cook, 1 November 2019
+Greg Cook, 18 November 2019
CRC RevEng has been tested on a 16MB SPROW ARM7TDMI Coprocessor running
ARM Tube OS version 0.45, with OS 1.20 on the host. Installation on
@@ -7,10 +7,8 @@
The following filing systems are known to be compatible:-
- OPUS EDOS 0.4, patched by EDOSPAT versions 4.90, 5.40 or 6.03
-
-Acorn DFS 2.26, as supplied with the GoMMC interface (PDFS226.BIN) is
-verified for invocations that do not read files (command lines without
--f).
+- Acorn DFS 2.26, as supplied with the GoMMC interface (PDFS226.BIN),
+ with DFSFIX installed (see below)
To load and run the ARM Tube OS binary successfully, the Disc Filing
System (DFS) on the host computer must support at least the following:
@@ -44,3 +42,25 @@
The ARM Tube OS binary also runs as a statically-linked image under
RISC OS, at twice the size of the RISC OS binary.
+
+DFSFIX
+
+This is a small veneer which installs itself over the host's filing
+system, and emulates just enough of RISC OS's FileSwitch API for simple
+RISC OS programs using the ANSI C Library to read and write files to
+Acorn DFS through the ARM Tube OS.
+
+DFSFIX is only for use with Acorn DFS.
+
+To install DFSFIX, enter the following (once) after pressing BREAK:
+
+ *DFSFIX
+
+The supplied binary is assembled to reside in the sector buffer of
+file handle &15. This retains compatibility with all the BBC Micro's
+facilities, as long as at most four files are opened simultaneously -
+a limit seldom reached in practice.
+
+The assembler program listing for DFSFIX is included, to allow
+reassembly to another base address or selection of extended features.
+Assembly options are documented in the listing.
Binary files old/reveng-2.0.2/bin/armtubeos/dfsfix and new/reveng-2.0.3/bin/armtubeos/dfsfix differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/bin/armtubeos/dfsfix.inf new/reveng-2.0.3/bin/armtubeos/dfsfix.inf
--- old/reveng-2.0.2/bin/armtubeos/dfsfix.inf 1970-01-01 01:00:00.000000000 +0100
+++ new/reveng-2.0.3/bin/armtubeos/dfsfix.inf 2019-11-18 18:16:23.000000000 +0100
@@ -0,0 +1 @@
+$.DFSFIX FFFF1600 FFFF1600 00FE CRC=D806
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/bin/armtubeos/dfsfix.txt new/reveng-2.0.3/bin/armtubeos/dfsfix.txt
--- old/reveng-2.0.2/bin/armtubeos/dfsfix.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/reveng-2.0.3/bin/armtubeos/dfsfix.txt 2019-11-18 18:16:06.000000000 +0100
@@ -0,0 +1,471 @@
+*| dfsfix.txt
+*| Greg Cook, 18 November 2019
+*|
+*| This is a small veneer which installs itself over the host's filing
+*| system, and emulates just enough of RISC OS's FileSwitch API for simple
+*| RISC OS programs using the ANSI C Library to read and write files to
+*| Acorn DFS through the ARM Tube OS.
+*|
+*| Functions performed:
+*| OSFILE: A=7, A=11 translated to A=0; A=9 translated to A=5.
+*| OSARGS: A=3,Y>0 (set EXT) implemented.
+*| OSGBPB: A=1..4 clears the EOF warning flag.
+*| If DFS returns A>0, optionally sets C=1 or C=1 iff L>0.
+*| OSFIND: passes only b7,b6 to DFS. Raises "Not found" error iff
+*| b6,b3 are both set and DFS returns A=0 (no file handle.)
+*|
+*| Caveats:
+*| A is undefined on exit from OSARGS 3,Y.
+*| The underlying OSARGS and OSGBPB are expected to raise an error
+*| if the file handle is invalid.
+*| Installing DFSFIX over a filing system other than its intended FS
+*| results in undefined behaviour.
+*| Installing DFSFIX twice after pressing BREAK hangs the machine.
+*|
+*| Recommended assembly options:
+*| 1600,Y,N,N,Y,S (Acorn DFS, 254 bytes)
+*| 1500,Y,Y,N,N,L (Unpatched Opus EDOS 0.4, 254 bytes)
+*|
+*| Assembly options:
+*| Address (&1400): &
+*| Assemble DFSFIX starting at this address. Press RETURN to use the
+*| default address of &1400, or type a hexadecimal address (after the
+*| &) and then press RETURN.
+*| Where DFSFIX resides determines which of the BBC Micro's facilities
+*| remain available.
+*| DFSFIX can be placed for instance at:-
+*| &B00, in place of function key expansions
+*| &C00, in place of user-defined characters
+*| &1400, in place of sector buffer &13..14 (DFS) / &14..&15 (EDOS)
+*| &1500, in place of sector buffer &14..15 (DFS) / &15 (EDOS)
+*| &1600, in place of sector buffer &15 (DFS)
+*| &6800, in place of graphics display modes, clear of the BASIC
+*| program, heap and stack
+*| Thus an assembly address of &1400 leaves two file handles free in
+*| DFS and three in EDOS.
+*| DFSFIX without options assembles to 193 bytes of routines + 41 byte
+*| installer erasable after use = 234 (&EA) bytes.
+*| The address need not be page-aligned, but remember that 256 or 512
+*| bytes of memory will be overwritten when DFSFIX is loaded.
+*|
+*| Installer first? (Y/N):
+*| Typing Y places the installer before the routines. This usually
+*| causes the execution address to equal the load address.
+*|
+*| For old EDOS? (Y/N): Y adds 3 bytes
+*| Assembles DFSFIX for Acorn DFS (N) or any version of Opus EDOS (Y).
+*| Decides where PTR, EXT and the EOF warning flag are located.
+*| Type N here as the EDOS version is only for testing, and EDOSPAT
+*| carries out all these functions better.
+*|
+*| OSARGS 3,Y to test MSB? (Y/N): Y adds 12 bytes
+*| Treats the parameter to OSARGS as a 24-bit (N) or 32-bit (Y)
+*| quantity. In the latter case any request to extend a file beyond
+*| 16 MiB raises a "Can't extend" error.
+*| With N a pointer prepared for a 24-bit implementation of
+*| OSARGS 1,Y can also be passed to OSARGS 3,Y. The Y option
+*| enables strict compliance with the DFS and RISC OS APIs.
+*|
+*| OSARGS 3,Y to clamp PTR? (Y/N): Y adds 17 bytes
+*| With N, calls to OSARGS 3,Y do not change a file's pointer while
+*| changing its size, and so the pointer may sometimes be left far
+*| beyond the end of the file.
+*| This is a normal condition in some filing systems, where setting
+*| PTR makes no changes to the file and only takes effect on the next
+*| write operation. Type N for use with EDOS and other such filing
+*| systems, where OSARGS 1,Y and 3,Y may be expected to act
+*| independently.
+*| However the RISC OS PRM defines that setting EXT shall leave PTR
+*| pointing to the end-of-file or before. Acorn DFS enforces this
+*| condition at all times, so the proper choice is Y in this case.
+*| Otherwise, refrain from performing a truncation that will leave the
+*| pointer 'dangling'.
+*| Fortunately, RISC OS programs that just write files sequentially
+*| only zero a file's length initially, when the pointer is also zero.
+*| Not clamping PTR is potentially useful, making file truncation a
+*| means of discarding a portion of data before the pointer in a
+*| single step. But as mentioned, it may violate the filing system's
+*| assumptions about the pointer, and should be tried with caution.
+*|
+*| C if OSGBPB returns A>0:-
+*| Preserve / Set / Set iff L>0 (P/S/L): S adds 3 bytes, L adds 17 bytes
+*| Tells DFSFIX what to do with the carry flag when the underlying
+*| OSARGS routine returns a nonzero A register. This implies an
+*| illegal use of A, an unimplemented OSARGS call, or a filing system
+*| that implements the call but improperly preserves the call number.
+*| With P, DFSFIX does not interfere, passing whatever carry flag
+*| (and accumulator) was returned from OSARGS.
+*| With S, DFSFIX returns C=1; the user can then tell solely from C=1
+*| that there was a problem with his or her call.
+*| With L, DFSFIX sets C=1 if the length field at XY+5..8 indicates
+*| that one or more bytes were not transferred, C=0 otherwise.
+*| This covers for EDOS when A=1..4 or 8.
+*| Knowing that a filing system is indeed there, more complex code can
+*| return the appropriate carry flag; but this is beyond the scope of
+*| DFSFIX.
+*|
+*| Save? (Y/N):
+*| Type Y to save DFSFIX to disc as well or N to generate only the
+*| assembly listing.
+*|
+*| Page aligned file? (Y/N):
+*| Type Y to save DFSFIX starting at a page boundary, so that less
+*| data beyond the DFSFIX code may be overwritten when loading.
+*| Type N to save DFSFIX starting at the code.
+*| Where the code is page aligned, the option is not given.
+
+*BASIC
+NEW
+AUTO
+REM >A.DFSFIX
+REM Greg Cook 18/Nov/2019 16:28
+
+REM Reportedly unused space in the Econet area
+REM http://mdfs.net/Docs/Comp/BBC/AllMem
+tempptr=&93
+REM OSARGS 3,Y and OSGBPB will not cause themselves or each other to be called
+ptr=&93
+os_vector_base=&200
+os_filev=&212
+os_argsv=&214
+os_gbpbv=&21A
+os_findv=&21C
+os_softkey_buffer=&B00
+osbput=&FFD4
+osfile=&FFDD
+
+base%=FNgethex("Address (&1400): &",&1400)
+PRINT"Installer first? ";:installer_first%=FNyesno
+PRINT"For old EDOS? ";:edos%=FNyesno
+PRINT"OSARGS 3,Y to test MSB? ";:args32%=FNyesno
+PRINT"OSARGS 3,Y to clamp PTR? ";:clampptr%=FNyesno
+PRINT"C if OSGBPB returns A>0:-"'"Preserve / Set / Set iff L>0 (P/S/L):";
+REPEAT input%=INSTR(" PpSsLl",GET$)DIV 2:UNTIL input%>0
+PRINT MID$("PSL",input%,1)
+IF input%=1 THEN preserve%=1:test_length%=0
+IF input%=2 THEN preserve%=0:test_length%=0
+IF input%=3 THEN preserve%=0:test_length%=1
+
+IF edos% THEN channel_ext=&1082 ELSE channel_ext=&1114
+IF edos% THEN channel_ptr=&1085 ELSE channel_ptr=&1110
+IF edos% THEN channel_eof_warning_flag=&1070 ELSE channel_eof_warning_flag=&1117
+IF edos% THEN channel_eof_warning_mask%=&FE ELSE channel_eof_warning_mask%=&EF
+
+pass1%=0:pass2%=3
+
+DIM osblock% 19, filename% 255
+FOR pass%=pass1% TO pass2% STEP pass2%-pass1%
+P%=base%
+REM IF base%=os_softkey_buffer THEN PROCasm_softkey_indices
+IF installer_first% THEN PROCasm_installer
+PROCasm_routines
+IF installer_first% ELSE PROCasm_installer
+NEXT
+
+PRINT '"Save? ";:IF FNyesno THEN PROCsave
+END
+
+DEF FNgethex(prompt$,default%)
+LOCAL input$,good%,iter%
+REPEAT
+REPEAT
+PRINT prompt$;
+INPUT "" input$
+UNTIL LEN(input$) <=8
+good%=TRUE
+FOR iter%=1 TO LEN(input$)
+good%=good% AND INSTR("0123456789ABCDEF",MID$(input$,iter%,1))>0
+NEXT
+UNTIL good%
+IF LEN(input$)=0 =default%
+=EVAL("&"+input$)
+
+DEF FNyesno
+LOCAL input%
+PRINT "(Y/N):";
+REPEAT
+input%=INSTR(" NnYy",GET$)DIV 2
+UNTIL input%>0
+IF input%=2 PRINT "yes" ELSE PRINT "no"
+=input%=2
+
+DEF PROCasm_softkey_indices
+routines_end=routines_end
+PROCequs(STRING$(17,CHR$(routines_end-base%-1)))
+ENDPROC
+
+DEF PROCequs(A$)
+$P%=A$
+P%=P%+LENA$
+ENDPROC
+
+DEF PROCequb(A%)
+?P%=A%
+P%=P%+1
+ENDPROC
+
+DEF PROCasm_installer
+[OPT pass%
+.install
+LDX #os_filev-os_vector_base
+LDY #filewrap_jmp+1-routines
+JSR install_hook
+\LDX #os_argsv-os_vector_base
+LDY #argswrap_jmp+1-routines
+JSR install_hook
+LDX #os_gbpbv-os_vector_base
+LDY #gbpbwrap_jsr+1-routines
+JSR install_hook
+\LDX #os_findv-os_vector_base
+LDY #findwrap_jsr+1-routines
+.install_hook
+JSR install_hook_byte
+.install_hook_byte
+LDA routines,Y
+PHA
+LDA os_vector_base,X
+STA routines,Y
+PLA
+STA os_vector_base,X
+INX
+INY
+RTS
+.install_end
+]
+ENDPROC
+
+DEF PROCasm_routines
+[OPT pass%
+.routines
+.routines_clear_eof_warning
+]
+IF edos% THEN PROCasm_edos ELSE PROCasm_dfs
+[OPT pass%
+LDA channel_eof_warning_flag,Y
+AND #channel_eof_warning_mask%
+STA channel_eof_warning_flag,Y
+RTS
+:
+.filewrap_5
+LDA #5
+.filewrap
+CMP #7
+BEQ filewrap_0
+CMP #9
+BEQ filewrap_5
+CMP #11
+BNE filewrap_jmp
+.filewrap_0
+LDA #0
+.filewrap_jmp
+JMP filewrap
+:
+.argswrap
+CPY #1
+BCC argswrap_jmp
+CMP #3
+BNE argswrap_jmp
+TXA
+PHA
+LDA #0
+.argswrap_temp_ptr
+LDX #tempptr
+JSR argswrap_jmp
+PLA
+TAX
+TYA
+PHA
+JSR routines_clear_eof_warning
+]
+IF args32% THEN PROCasm_args32_1
+[OPT pass%
+LDA channel_ext,Y \EXT - request
+CMP 0,X
+LDA channel_ext+1,Y
+SBC 1,X
+LDA channel_ext+2,Y
+SBC 2,X
+BCC argswrap_extend \if request > EXT then extend
+LDA 2,X
+STA channel_ext+2,Y
+LDA 1,X
+STA channel_ext+1,Y
+LDA 0,X
+STA channel_ext,Y
+]
+IF clampptr% THEN PROCasm_clampptr
+IF args32% THEN PROCasm_args32_2
+[OPT pass%
+.argswrap_extend \on entry C=0 to extend, C=1 to return EXT; request > 0
+PLA
+TAY
+LDA #2
+BCS argswrap_jmp
+LDA 0,X
+BNE argswrap_dec_1
+LDA 1,X
+BNE argswrap_dec_2
+DEC 2,X
+.argswrap_dec_2
+DEC 1,X
+.argswrap_dec_1
+DEC 0,X
+JSR argswrap_set_ptr
+LDA #0
+JSR osbput
+JSR argswrap_jmp
+TXA
+PHA
+LDA #1
+BNE argswrap_temp_ptr
+]
+IF clampptr% THEN [OPT pass%:.argswrap_ply_set_ptr:PLA:TAY:]
+[OPT pass%
+.argswrap_set_ptr
+LDA #1
+.argswrap_jmp
+JMP argswrap
+:
+.gbpbwrap
+STA ptr
+STY ptr+1
+.gbpbwrap_jsr
+JSR gbpbwrap
+TAY
+]
+IF preserve% THEN [OPT pass%:BNE gbpbwrap_quit:]
+IF test_length% THEN [OPT pass%:BNE gbpbwrap_test_length:]
+IF test_length% OR preserve% ELSE [OPT pass%:BNE gbpbwrap_sec_quit:]
+[OPT pass%
+PHP
+LDA #4
+CMP ptr
+BCC gbpbwrap_plp
+STX ptr
+LDA (ptr),Y
+JSR routines_clear_eof_warning
+LDA #0
+.gbpbwrap_plp
+PLP
+.gbpbwrap_quit
+LDY ptr+1
+.gbpbwrap_exit
+RTS
+]
+IF test_length% THEN PROCasm_gbpbwrap_test_length
+IF test_length% OR preserve% ELSE [OPT pass%:.gbpbwrap_sec_quit:SEC:BCS gbpbwrap_quit:]
+[OPT pass%
+:
+.findwrap
+PHA
+AND #&48
+CMP #&48
+PLA
+PHP
+AND #&C0
+.findwrap_jsr
+JSR findwrap
+PLP
+EOR #0
+BNE gbpbwrap_exit
+BCC gbpbwrap_exit
+BRK
+]
+PROCequb(&D6)
+PROCequs("Not found")
+PROCequb(&00)
+[OPT pass%
+.routines_end
+]
+ENDPROC
+
+DEF PROCasm_args32_1
+[OPT pass%
+\treat parameter as 32 bits
+LDA #0
+CMP 3,X
+BCC argswrap_extend_max
+]
+ENDPROC
+
+DEF PROCasm_clampptr
+[OPT pass%
+\clamp PTR
+\request - PTR
+CMP channel_ptr,Y
+LDA 1,X
+SBC channel_ptr+1,Y
+LDA 2,X
+SBC channel_ptr+2,Y
+BCC argswrap_ply_set_ptr
+]
+ENDPROC
+
+DEF PROCasm_args32_2
+[OPT pass%
+.argswrap_extend_max \on entry C=0 to extend, C=1 to return EXT
+STA 0,X
+\LDA #&FF
+STA 1,X
+STA 2,X
+]
+ENDPROC
+
+DEF PROCasm_edos
+[OPT pass%
+\return Y=A*0x18 for y=1..7
+AND #&07
+TAY
+\BEQ routines_edos_exit
+SEC
+.routines_edos_loop
+INY
+ADC #&85
+BNE routines_edos_loop
+\.routines_edos_exit
+]
+ENDPROC
+
+DEFPROCasm_dfs
+[OPT pass%
+ASL A
+ASL A
+ASL A
+ASL A
+ASL A
+TAY
+]
+ENDPROC
+
+DEF PROCasm_gbpbwrap_test_length
+[OPT pass%
+.gbpbwrap_test_length
+PHA
+STX ptr
+LDY #9
+.gbpbwrap_test_length_byte
+DEY
+CPY #5
+BCC gbpbwrap_test_length_quit
+LDA (ptr),Y
+BEQ gbpbwrap_test_length_byte
+.gbpbwrap_test_length_quit
+PLA
+BNE gbpbwrap_quit
+]
+ENDPROC
+
+DEF PROCsave
+LOCAL A%,X%,Y%
+X%=osblock%
+Y%=X% DIV 256
+$filename%="DFSFIX"
+!osblock%=filename%
+osblock%!2=&FFFF0000 OR base%
+osblock%!6=&FFFF0000 OR install
+osblock%!10=base%
+IF osblock%?2 THEN PRINT "Page aligned file? ";:IF FNyesno THEN osblock%?2=0:osblock%?10=0
+osblock%!14=P%
+A%=0
+CALL osfile
+ENDPROC
Binary files old/reveng-2.0.2/bin/armtubeos/reveng and new/reveng-2.0.3/bin/armtubeos/reveng differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/bin/armtubeos/reveng.inf new/reveng-2.0.3/bin/armtubeos/reveng.inf
--- old/reveng-2.0.2/bin/armtubeos/reveng.inf 2019-11-02 16:53:48.000000000 +0100
+++ new/reveng-2.0.3/bin/armtubeos/reveng.inf 2019-11-18 20:56:36.000000000 +0100
@@ -1 +1 @@
-$.reveng 8000 8000 10D6F CRC=8FA6
+$.reveng 8000 8000 10D6F CRC=5F47
Binary files old/reveng-2.0.2/bin/i386-linux/reveng and new/reveng-2.0.3/bin/i386-linux/reveng differ
Binary files old/reveng-2.0.2/bin/raspbian/reveng and new/reveng-2.0.3/bin/raspbian/reveng differ
Binary files old/reveng-2.0.2/bin/riscos/reveng and new/reveng-2.0.3/bin/riscos/reveng differ
Binary files old/reveng-2.0.2/bin/win32/reveng.exe and new/reveng-2.0.3/bin/win32/reveng.exe differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/cli.c new/reveng-2.0.3/cli.c
--- old/reveng-2.0.2/cli.c 2019-11-02 15:41:12.000000000 +0100
+++ new/reveng-2.0.3/cli.c 2019-11-11 17:15:01.000000000 +0100
@@ -1,5 +1,5 @@
/* cli.c
- * Greg Cook, 2/Nov/2019
+ * Greg Cook, 11/Nov/2019
*/
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
@@ -95,7 +95,8 @@
/* reset getopt() with our extension in case user used *Go */
optind = 0; opterr = 0;
- c=getopt(1, nargv, string);
+ getopt(1, nargv, string); /* getopt() sees end of argument 0 */
+ getopt(1, nargv, string); /* getopt() sees end of arguments */
optind = 1; opterr = 1;
/* stdin must be binary */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/contrib/getopt.h new/reveng-2.0.3/contrib/getopt.h
--- old/reveng-2.0.2/contrib/getopt.h 2014-02-01 14:50:11.000000000 +0100
+++ new/reveng-2.0.3/contrib/getopt.h 2019-11-06 22:56:28.000000000 +0100
@@ -1,11 +1,11 @@
-/* Public domain getopt.h, Greg Cook, */
-
-#ifndef GETOPT_H
-# define GETOPT_H
-extern int opterr; /* undocumented error-suppressor*/
-extern int optind; /* index into argv vector */
-extern int optopt; /* char checked for validity */
-extern char *optarg; /* arg associated with option */
-
-extern int getopt(int nargc, char **nargv, char *ostr);
-#endif /* GETOPT_H */
+/* Public domain getopt.h, Greg Cook, */
+
+#ifndef GETOPT_H
+# define GETOPT_H
+extern int opterr; /* undocumented error-suppressor*/
+extern int optind; /* index into argv vector */
+extern int optopt; /* char checked for validity */
+extern char *optarg; /* arg associated with option */
+
+extern int getopt(int nargc, char **nargv, char *ostr);
+#endif /* GETOPT_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/poly.c new/reveng-2.0.3/poly.c
--- old/reveng-2.0.2/poly.c 2019-05-09 23:20:35.000000000 +0200
+++ new/reveng-2.0.3/poly.c 2019-11-07 20:59:55.000000000 +0100
@@ -1,5 +1,5 @@
/* poly.c
- * Greg Cook, 9/May/2019
+ * Greg Cook, 7/Nov/2019
*/
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
@@ -22,7 +22,8 @@
* along with CRC RevEng. If not, see https://www.gnu.org/licenses/.
*/
-/* 2019-04-29: added quotient argument to pcrc(), pmod()
+/* 2019-11-07: reviewed poly class defs and function entry conditions
+ * 2019-04-29: added quotient argument to pcrc(), pmod()
* 2017-11-28: added braces, redundant statement skipped in prev()
* 2016-06-27: pcmp() shortcut returns 0 when pointers identical
* 2015-07-29: discard leading $, &, 0x from argument to strtop()
@@ -60,8 +61,9 @@
/* Note: WELL-FORMED poly_t objects have a valid bitmap pointer pointing
* to a malloc()-ed array of at least as many bits as stated in its
- * length field. Any poly_t with a length of 0 is also a WELL-FORMED
- * poly_t (whatever value the bitmap pointer has.)
+ * length field. If the length is 0 then the pointer may also be equal
+ * to NULL (that is, at any length, the pointer must be a valid argument
+ * to realloc() or free().)
* All poly_t objects passed to and from functions must be WELL-FORMED
* unless otherwise stated.
*
@@ -73,7 +75,7 @@
* bit, at position (length - 1), is one.
*
* NORMALISED poly_t objects are SEMI-NORMALISED objects in which the
- * first bit is one.
+ * first bit, at position 0 is one.
*
* pfree() should be called on every poly_t object (including
* those returned by functions) after its last use.
@@ -418,7 +420,6 @@
* The length field has absolute priority over the contents of the bitmap.
* Canonicalisation differs from normalisation in that leading and trailing
* zero terms are significant and preserved.
- * poly may or may not be WELL-FORMED.
*/
praloc(poly, poly->length);
}
@@ -428,7 +429,6 @@
/* Converts poly into a NORMALISED object by removing leading
* and trailing zeroes, so that the polynomial starts and ends
* with significant terms.
- * poly may or may not be WELL-FORMED.
*/
unsigned long first;
@@ -448,7 +448,6 @@
/* Converts poly into a SEMI-NORMALISED object by removing
* trailing zeroes, so that the polynomial ends with a
* significant term.
- * poly may or may not be WELL-FORMED.
*/
/* call pcanon() here so plast() returns the correct result */
@@ -461,7 +460,6 @@
/* Normalise poly, then chop off the highest significant term
* (produces a SEMI-NORMALISED object). poly becomes a suitable
* divisor for pcrc().
- * poly may or may not be WELL-FORMED.
*/
/* call pcanon() here so pfirst() and plast() return correct
@@ -476,7 +474,6 @@
/* Convert poly from Koopman notation to chopped form (produces
* a SEMI-NORMALISED object). poly becomes a suitable divisor
* for pcrc().
- * poly may or may not be WELL-FORMED.
*/
unsigned long first;
@@ -531,8 +528,8 @@
/* Compares polys for identical effect, i.e. as though the
* shorter poly were padded with zeroes to the length of the
* longer.
- * a and b must still be CLEAN, therefore psncmp() is *not*
- * identical to pcmp() on semi-normalised polys as psnorm()
+ * a and b must be CLEAN, therefore psncmp(a,b) is *not*
+ * identical to psnorm(a); psnorm(b); pcmp(a,b) as psnorm()
* clears the slack space.
*/
unsigned long length, iter, idx;
@@ -616,6 +613,12 @@
poly_t
psubs(const poly_t src, unsigned long head, unsigned long start, unsigned long end, unsigned long tail) {
+ /* Returns a freestanding copy of a substring of src.
+ * See pshift().
+ * src must be CLEAN in the case that the end is overrun.
+ * If src is CLEAN then the returned poly_t is CLEAN.
+ */
+
poly_t dest = PZERO;
pshift(&dest, src, head, start, end, tail);
return(dest);
@@ -626,7 +629,6 @@
/* Trims or extends poly to length at the left edge, prepending
* zeroes if necessary. Analogous to praloc() except the
* rightmost terms of poly are preserved.
- * On entry, poly may or may not be WELL-FORMED.
* On exit, poly is CLEAN.
*/
@@ -640,10 +642,13 @@
void
pshift(poly_t *dest, const poly_t src, unsigned long head, unsigned long start, unsigned long end, unsigned long tail) {
- /* copies bits start to end-1 of src to dest, plus the number of leading and trailing zeroes given by head and tail.
- * end may exceed the length of src in which case more zeroes are appended.
- * dest may point to src, in which case the poly is edited in place.
- * src must be CLEAN.
+ /* copies bits start to end-1 of src to dest, plus the number of
+ * leading and trailing zeroes given by head and tail.
+ * end may exceed the length of src in which case more zeroes
+ * are appended.
+ * dest may point to src, in which case the poly is edited in
+ * place.
+ * src must be CLEAN in the case that the end is overrun.
* On exit, dest is CLEAN.
*/
@@ -706,15 +711,17 @@
void
ppaste(poly_t *dest, const poly_t src, unsigned long skip, unsigned long seek, unsigned long end, unsigned long fulllength) {
- /* pastes terms of src, starting from skip, to positions seek to end-1 of dest
- * then sets length of dest to fulllength (>= end)
+ /* pastes terms of src, starting from skip, to positions seek to
+ * end-1 of dest then sets length of dest to fulllength (>= end)
* to paste n terms of src, give end = seek + n
* to truncate dest at end of paste, set fulllength = end
* to avoid truncating, set fulllength = plen(*dest)
- * dest may point to src, in which case the poly is edited in place.
+ * dest may point to src, in which case the poly is edited in
+ * place.
* src must be CLEAN in the case that the end is overrun.
- * On exit, dest is CLEAN.
+ * Does not clean dest unless end <= fulllength < plen(*dest).
*/
+
bmp_t mask;
unsigned long seekidx, endidx, iter;
int seekofs;
@@ -766,7 +773,8 @@
pdiff(poly_t *dest, const poly_t src, unsigned long ofs) {
/* Subtract src from dest (modulo 2) at offset ofs.
* In modulo 2 arithmetic, subtraction is equivalent to addition
- * We include an alias for those who wish to retain the distinction
+ * We include an alias for those who wish to retain the
+ * distinction
* src and dest must be CLEAN.
*/
psum(dest, src, ofs);
@@ -898,6 +906,8 @@
* If calling repeatedly with a constant divisor, produce a chopped copy
* with pchop() and call pcrc() directly for higher efficiency.
* dividend and divisor must be CLEAN.
+ * If dividend and divisor are CLEAN then the returned poly_t is CLEAN.
+ * On exit, quotient is CLEAN unless it is NULL.
*/
/* perhaps generate an error if divisor is zero */
@@ -919,7 +929,8 @@
* before adding init and division. Set P_MULXN for most CRC
* calculations.
* All inputs must be CLEAN.
- * If all inputs are CLEAN, the returned poly_t will be CLEAN.
+ * If all inputs are CLEAN then the returned poly_t is CLEAN.
+ * On exit, quotient is CLEAN unless it is NULL.
*/
unsigned long max = 0UL, iter, ofs, resiter;
bmp_t probe, rem, dvsr, quot = BMP_C(0), *qptr, *rptr, *sptr;
@@ -1035,7 +1046,7 @@
/* Replace poly with the 'next' polynomial of equal length.
* Returns zero if the next polynomial is all zeroes, a nonzero
* value otherwise.
- * Does not clean poly.
+ * poly must be CLEAN.
*/
bmp_t *bptr;
if(!poly->length) return(0);
@@ -1053,7 +1064,6 @@
* consisting of all zeroes.
* It is safe to call with length = 0, in which case the object
* is freed.
- * poly may or may not be WELL-FORMED.
* On exit, poly is CLEAN.
*/
unsigned long size = SIZE(length);
@@ -1075,7 +1085,6 @@
pfree(poly_t *poly) {
/* Frees poly's bitmap storage and sets poly equal to the empty
* polynomial (PZERO).
- * poly may or may not be WELL-FORMED.
* On exit, poly is CLEAN.
*/
@@ -1090,7 +1099,6 @@
praloc(poly_t *poly, unsigned long length) {
/* Trims or extends poly to length at the right edge, appending
* zeroes if necessary.
- * On entry, poly may or may not be WELL-FORMED.
* On exit, poly is CLEAN.
*/
unsigned long oldsize, size = SIZE(length);
@@ -1131,7 +1139,7 @@
int
pmpar(const poly_t poly, const poly_t mask) {
/* Return even parity of poly masked with mask.
- * Poly and mask must be CLEAN.
+ * poly and mask must be CLEAN.
*/
bmp_t res = BMP_C(0);
int i = BMP_SUB;
@@ -1152,7 +1160,7 @@
pident(const poly_t a, const poly_t b) {
/* Return nonzero if a and b have the same length
* and point to the same bitmap.
- * a and b need not be CLEAN.
+ * a and b may or may not be CLEAN.
*/
return(a.length == b.length && a.bitmap == b.bitmap);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/reveng.h new/reveng-2.0.3/reveng.h
--- old/reveng-2.0.2/reveng.h 2019-11-01 13:05:30.000000000 +0100
+++ new/reveng-2.0.3/reveng.h 2019-11-18 20:18:51.000000000 +0100
@@ -1,5 +1,5 @@
/* reveng.h
- * Greg Cook, 1/Nov/2019
+ * Greg Cook, 18/Nov/2019
*/
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
@@ -93,7 +93,7 @@
/* Global definitions */
/* CRC RevEng version string */
-#define VERSION "2.0.2"
+#define VERSION "2.0.3"
/* bmpbit.c */
typedef BMP_T bmp_t;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/reveng.rc new/reveng-2.0.3/reveng.rc
--- old/reveng-2.0.2/reveng.rc 2019-05-15 14:51:31.000000000 +0200
+++ new/reveng-2.0.3/reveng.rc 2019-11-18 20:19:27.000000000 +0100
@@ -1,5 +1,5 @@
/* reveng.rc
- * Greg Cook, 15/May/2019
+ * Greg Cook, 18/Nov/2019
*/
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
@@ -30,11 +30,11 @@
#include
-#define VER_FILEVERSION 2,0,2,0
-#define VER_FILEVERSION_STR "2.0.2.0\0"
+#define VER_FILEVERSION 2,0,3,0
+#define VER_FILEVERSION_STR "2.0.3.0\0"
-#define VER_PRODUCTVERSION 2,0,2,0
-#define VER_PRODUCTVERSION_STR "2.0.2\0"
+#define VER_PRODUCTVERSION 2,0,3,0
+#define VER_PRODUCTVERSION_STR "2.0.3\0"
#ifndef DEBUG
#define VER_DEBUG 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reveng-2.0.2/tomtorfs-wrapper new/reveng-2.0.3/tomtorfs-wrapper
--- old/reveng-2.0.2/tomtorfs-wrapper 1970-01-01 01:00:00.000000000 +0100
+++ new/reveng-2.0.3/tomtorfs-wrapper 2019-11-06 21:59:38.000000000 +0100
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# tomtorfs-wrapper
+# Greg Cook, 6/Nov/2019
+
+# CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
+# Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,
+# 2019 Gregory Cook
+#
+# This file is part of CRC RevEng.
+#
+# CRC RevEng is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# CRC RevEng is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with CRC RevEng. If not, see https://www.gnu.org/licenses/.
+
+# Replacement for the 'tomtorfs' CRC calculator, used in CRC examples
+# on the Computer Interfacing Forum and elsewhere.
+#
+# INSTALLATION:
+# chmod a+x tomtorfs-wrapper
+# sudo cp tomtorfs-wrapper /usr/local/bin
+# sudo ln -s tomtorfs-wrapper /usr/local/bin/tomtorfs
+#
+# USAGE:
+# tomtorfs FILE WIDTH POLY REFL INIT XOROUT
+# tomtorfs-wrapper FILE WIDTH POLY REFL INIT XOROUT
+#
+# FILE is a filename; WIDTH is a decimal integer. All other arguments
+# are hexadecimal integers, optionally beginning with '0x'.
+#
+# Translates the tomtorfs command to the equivalent CRC RevEng command
+# and executes it, calculating a CRC on the contents of FILE.
+# If invoked as 'tomtorfs-wrapper', prints the equivalent reveng command
+# line to standard error before execution.
+# For information on the arguments and their meanings, study the
+# translated command lines with reference to the CRC RevEng user guide.
+#
+# REFERENCES:
+# Greg Cook, CRC RevEng user guide.
+# http://reveng.sourceforge.net/readme.htm
+# Lammert Bies, "Error detection and correction" Web forum.
+# https://www.lammertbies.nl/forum/viewforum.php?f=11
+# Tom Torfs, IOCCC winning entry, 1998, CRC generator
+# https://www.ioccc.org/years.html#1998_tomtorfs
+
+REVENG="reveng"
+PROG=${0##*/}
+
+REFL="-b -B"
+[ "$4" -gt "0" ] && REFL="-l -L"
+
+[ "$PROG" = "tomtorfs" ] || \
+ echo "$REVENG" -A "$2" -w "$2" -p "$3" -i "$5" $REFL -x "$6" \
+ -c -X -f "$1" >&2
+"$REVENG" -A "$2" -w "$2" -p "$3" -i "$5" $REFL -x "$6" -c -X -f "$1"