English Amiga Board


Go Back   English Amiga Board > Support > support.Other

 
 
Thread Tools
Old 24 November 2022, 02:17   #81
alexh
Thalion Webshrine
alexh's Avatar
 
Join Date: Jan 2004
Location: Oxford
Posts: 13,401
They exist because I've had them.

We also know from documents that Motorola did parametric testing of 680x0 range including speed binning and fault detection. However industry people have said you never detect enough faulty parts to fill the demand for slower and less featured parts and so fill supply for these with known good fully featured chips.

Also parts had to pass at extremes of the operating voltage and temperature range of the 68060. In an Amiga at stable 3.3v, 45C it might work. 3.1v and 110C it might not and so be down labelled

Later 68EC060 they changed the die and physically took the MMU and FPU out to save money.
alexh is offline  
Old 24 November 2022, 06:58   #82
Samurai_Crow
Total Chaos forever!

Samurai_Crow's Avatar
 
Join Date: Aug 2007
Location: Waterville, MN, USA
Age: 48
Posts: 1,924
Quote:
Originally Posted by Thomas Richter View Post
No, that's not stupid. Please remember that SoftIEEE (the executable) redirects all but trivial (e.g. fmove, fbcc) instructions to the softieee.library to perform the mathematical operations. Thus, if you want to to that, you would need to replace the softieee.library by a library that forwards the requested computations to an external FPU.


As I'm a fan of open documentation and open specification (but not open source), you'll find all the information needed to implement an alternative softieee.library in the above archive. Essentially, you need to implement all the functions of the library (more or less one per FPU instruction) and provide a sufficiently large library base as the SoftIEEE binary will want to place of its internal state information there.


Hence, that's all well possible, the architecture was designed to allow that, just somebody needs to pick it up.
What about an experimental 68883 with additional vector instructions added? I have a friend in Australia with a stockpile of outdated chips including some CPLD chips that could be programmed to prototype such a design. Of course that would need a different patcher and library version but LC040's are downright cheap nowadays. Of course the ultimate goal of such a design is to run WebAssembly on an Amiga including 128-bit vector ops.
Samurai_Crow is offline  
Old 24 November 2022, 11:31   #83
Karlos
Registered User

 
Join Date: Aug 2022
Location: UK
Posts: 419
Quote:
Originally Posted by Reynolds View Post
Okay, now a theoretic question.
Could that happen, if SoftIEEE will cover all FPU functions, to redirect it using a PowerPC FPU in a BlizzardPPC-kind of card for example or in Ragnarok? I know it is something different, "rewiring" instead of emulating, but...

Do I ask something stupid?
Which combinations of fpuless 68K and PPC are there? I think the biggest obstacle here would be that the intercpu calling overhead would make it much slower than just doing it on the 68K.
Karlos is offline  
Old 24 November 2022, 12:06   #84
Thomas Richter
Registered User
 
Join Date: Jan 2019
Location: Germany
Posts: 2,125
Quote:
Originally Posted by Samurai_Crow View Post
What about an experimental 68883 with additional vector instructions added?
I didn't know that such a thing even exists, and I do not find any datasheet about, so if this is real, it is a very very exotic device.



Anyhow, SoftIEEE traps only instructions that are listed in the 68000 family user manual, and even there, it is quite slow. Vector instructions would use an alternative encoding the emulator would not be able to catch, and it does not look sensible to me to add emulation for such an exotic device. If it supports regular scalar floating point processing, well, as before, it is just a matter of another library implementation that forwards the instructions to the device.



I believe the most relevant use case of SoftIEEE is really to close a compatibility gap for those software that depends on a FPU, but does not make heavy use of it. Essentially,software where the authors did not provide a math-library based version, even though it would have been a feasible solution. You surely won't break a speed record by all this emulation business.
Thomas Richter is offline  
Old 24 November 2022, 12:09   #85
Reynolds
Alien Breeder
Reynolds's Avatar
 
Join Date: Dec 2007
Location: Szigetszentmiklos / Hungary
Age: 45
Posts: 789
Quote:
Originally Posted by Karlos View Post
Which combinations of fpuless 68K and PPC are there? I think the biggest obstacle here would be that the intercpu calling overhead would make it much slower than just doing it on the 68K.
Two combinations came to my mind, a BlizzPPC with LC 68K (more likely a 040) and any 68K with a PCI PPC board like Ragnarok or similar.
Reynolds is offline  
Old 24 November 2022, 13:08   #86
Chucky
Registered User

Chucky's Avatar
 
Join Date: Mar 2015
Location: Karlstad / Sweden
Age: 50
Posts: 1,172
Quote:
Originally Posted by Samurai_Crow View Post
What about an experimental 68883 with additional vector instructions added? I have a friend in Australia with a stockpile of outdated chips including some CPLD chips that could be programmed to prototype such a design. Of course that would need a different patcher and library version but LC040's are downright cheap nowadays. Of course the ultimate goal of such a design is to run WebAssembly on an Amiga including 128-bit vector ops.


to what use? as there doesn't exist anything like this...
Chucky is offline  
Old 24 November 2022, 15:10   #87
Locutus
Registered User

 
Join Date: Jul 2014
Location: Finland
Posts: 1,060
Quote:
Originally Posted by Samurai_Crow View Post
Of course the ultimate goal of such a design is to run WebAssembly on an Amiga including 128-bit vector ops.





.....What!?
Locutus is offline  
Old 24 November 2022, 15:15   #88
Samurai_Crow
Total Chaos forever!

Samurai_Crow's Avatar
 
Join Date: Aug 2007
Location: Waterville, MN, USA
Age: 48
Posts: 1,924
I need practice making cores. I think adding a Neon style vector-unit to an LC040 would be good practice. Since the 040 has only one 128-bit instruction, Move16, it would have to use memory-mapped i/o. Of course, Emu68 has access to a real Neon unit on it's ARM JIT so why not?
Samurai_Crow is offline  
Old 24 November 2022, 16:02   #89
Chucky
Registered User

Chucky's Avatar
 
Join Date: Mar 2015
Location: Karlstad / Sweden
Age: 50
Posts: 1,172
but. as 68k cpus does not have this. this is outside the scope of this software anyway.

this is to keep compability with software that requires a FPU. to run on a fpu-less solution.

what you ask for is something completly else. that people could just add in their software anyway
Chucky is offline  
Old 24 November 2022, 16:39   #90
Thomas Richter
Registered User
 
Join Date: Jan 2019
Location: Germany
Posts: 2,125
Quote:
Originally Posted by Samurai_Crow View Post
I need practice making cores. I think adding a Neon style vector-unit to an LC040 would be good practice. Since the 040 has only one 128-bit instruction, Move16, it would have to use memory-mapped i/o. Of course, Emu68 has access to a real Neon unit on it's ARM JIT so why not?

As a toy project to play with "why not", but as a realistic system design, the answer is quite simple: With software emulation, you would go over many cycles of execution and instruction interpretation just for a single vector instruction, thus there is nothing to be gained by this approach. It will be just slower than mutliple scalar 680x0 instructions.
Thomas Richter is offline  
Old 24 November 2022, 17:18   #91
Karlos
Registered User

 
Join Date: Aug 2022
Location: UK
Posts: 419
Floppy disk

Quote:
Originally Posted by Reynolds View Post
Two combinations came to my mind, a BlizzPPC with LC 68K (more likely a 040) and any 68K with a PCI PPC board like Ragnarok or similar.
I wasn't aware there were any BlizzardPPC variants that lacked an FPU, with the possible exception of prototype units.
Karlos is offline  
Old 24 November 2022, 17:23   #92
Karlos
Registered User

 
Join Date: Aug 2022
Location: UK
Posts: 419
Quote:
Originally Posted by Locutus View Post
.....What!?
That's what I was going to say. It doesn't seem like a very realistic proposition. In any case the whole point of web assembly is that it can be executed on scalar hardware. The vector stuff is OK where you have JIT implementations that can map the input vector operation to some reasonable native equivalent code (vector or scalar), but under interpretive execution it doesn't give any noticeable performance benefit, since all the cycles are spent elsewhere.
Karlos is offline  
Old 24 November 2022, 18:20   #93
Chucky
Registered User

Chucky's Avatar
 
Join Date: Mar 2015
Location: Karlstad / Sweden
Age: 50
Posts: 1,172
Quote:
Originally Posted by Karlos View Post
I wasn't aware there were any BlizzardPPC variants that lacked an FPU, with the possible exception of prototype units.
I guess for those who went cheap when upgrading their 040 to 060 and used LC
Chucky is offline  
Old 24 November 2022, 19:25   #94
Thomas Richter
Registered User
 
Join Date: Jan 2019
Location: Germany
Posts: 2,125
Quote:
Originally Posted by alenppc View Post
Thank you for the tip! I don't use WinUAE, if I did, I wouldn't care about this project. ]

Thanks again for the report, here is an update that should hopefully address the issue. This adds support for the fsneg and fdneg instructions I must have missed. Please kindly check again.


There was something else wrong which I found during code review and which I did not notice before, and that was SNAN (signaling NAN) handling, and detection of NAN and INF. Unfortunately, the MOT manual is not very clear about this, but the MSB of a an extended floating point number does not identify SNANs, but the second top most bit. Also, the SNAN decays to a NAN upon loading into the FPU. So this should hopefully be all fine.



I also updated the documentation to make clear which of the calls update the SNAN exception bit.
Attached Files
File Type: lha SoftIEEE.lha (56.1 KB, 18 views)
Thomas Richter is offline  
Old 24 November 2022, 19:48   #95
alenppc
Registered User
 
Join Date: Apr 2012
Location: Canada
Age: 42
Posts: 876
Quote:
Originally Posted by Thomas Richter View Post
Thanks again for the report, here is an update that should hopefully address the issue. This adds support for the fsneg and fdneg instructions I must have missed. Please kindly check again.


There was something else wrong which I found during code review and which I did not notice before, and that was SNAN (signaling NAN) handling, and detection of NAN and INF. Unfortunately, the MOT manual is not very clear about this, but the MSB of a an extended floating point number does not identify SNANs, but the second top most bit. Also, the SNAN decays to a NAN upon loading into the FPU. So this should hopefully be all fine.



I also updated the documentation to make clear which of the calls update the SNAN exception bit.

I get the following crash now:


Code:
 
Exception !!   0000000B     TCB: 08392F68     CTX: 08081DC8     SSP: 08002308
USP : 083F3898 SR: 0000  (U0)(-)(-)  TCB: 08392F68
  PC: 082B6FDC
Data: 00000098 3F000000 0837E954 00000098 00000140 0000013A 00000140 00000000
Addr: 00000000 083F3958 0837E918 082B6FAA 083F3888 083F38A8 0829D878 08002308
Stck: 0837E918 3FFE0000 91EB8500 00000000 083F3904 082EBE46 0837E918 083F398C
Stck: 00000001 00000001 00000030 082FBFEC 082FBFD8 083F3958 082AE4EC 00000000
082b6fbc :  f200 0063                  fsmul.x fp0 ;extended opcode
082b6fc0 :  f22a 4540 0004             fsmove.s $4(a2),fp2 ;extended opcode
082b6fc6 :  f200 0963                  fsmul.x fp2 ;extended opcode
082b6fca :  f200 0862                  fsadd.x fp2,fp0 ;extended opcode
082b6fce :  f22a 44c0 0008             fsmove.s $8(a2),fp1 ;extended opcode
082b6fd4 :  f200 04e3                  fsmul.x fp1 ;extended opcode
082b6fd8 :  f200 0462                  fsadd.x fp1,fp0 ;extended opcode
082b6fdc : *f200 00c5                  fdint.x fp0,fp1 ;extended opcode
082b6fe0 :  f200 04b8                  fcmp.x fp1 ;extended opcode
082b6fe4 :  f28e 0040                  fbne $82b7026 ;extended opcode
082b6fe8 :  f200 04c0                  fsmove.x fp1 ;extended opcode
082b6fec :  f281 004e                  fbeq $82b703c ;extended opcode
082b6ff0 :  f23c 4400 3f80 0000        fmove.s #+1,fp0 ;extended opcode
082b6ff8 :  f200 0460                  fsdiv.x fp1,fp0 ;extended opcode
Name: "AmiQuake.FPU"  Hunk 0000 Offset 0001007C

 
LONG READ from 3FB99999                        PC: 094A7348
USP : 0AD25F9C SR: 0010  (U0)(-)(-)  TCB: 0ACDCC38
Data: 3FEFFFFC C0000000 0000009F 00000053 00000053 000002FD 00000010 00000000
Addr: 00F8781C 0A4ECE82 0AD68734 094354D6 094BA2F8 0AD25FC4 0ACDB7A0 08002308
Stck: 0AD68734 094354D6 094BA2F8 0ACDB7A0 00000000 00000000 00000000 7FFF0000
Stck: FFFFFFFF FFFFFFFF 0AD26000 094AEA6E FFFFFFFF FFFFFFFF FFFFFFBB FFFFFF89
094a7328 :  0440 f21a                  subi.w #-$de6,d0
094a732c :  6400 f23c                  bcc $94a656a
094a7330 :  55e6                       scs.b -(a6)
094a7332 :  3fb9 9999 a000 0000        move.w -$66666000,$0(a7,d0.w)
094a733a :  b5fc 0a51 376c             cmpa.l #$a51376c,a2
094a7340 :  6fa2                       ble.s $94a72e4
094a7342 :  4ced 5c00 ffd8             movem.l -$28(a5),a2-a4/a6
094a7348 : *f22d d030 ffe8             fmovem.x -$18(a5),fp2-fp3 ;extended opcode
094a734e :  4e5d                       unlk a5
094a7350 :  4e75                       rts
094a7352 :  4e55 ff94                  link.w a5,#-$6c
094a7356 :  f227 e004                  fmovem.x fp2,-(a7) ;extended opcode
094a735a :  48e7 3038                  movem.l d2-d3/a2-a4,-(a7)
094a735e :  4282                       clr.l d2
094a7360 :  263c 3f80 0000             move.l #$3f800000,d3
094a7366 :  2b43 ffdc                  move.l d3,-$24(a5)
Name: "AmiQuake2"  Hunk 0000 Offset 0008D700

 
LONG READ from 43340000                        PC: 0941D8C2
USP : 0AD24CD0 SR: 0000  (U0)(-)(-)  TCB: 0ACDCC38
Data: 0AD25DC0 00000002 0AD25E64 0AD25FF4 0AD25FE8 0AAE2924 0AD25E2C 00000000
Addr: 0AD25DF4 0AD25FF4 0AD25DC0 094BC898 09428D28 0AD25D88 0800089C 08002308
Stck: 0AD25E64 0AD25FF4 0AD25FE8 0AAE2924 0AD25E2C 00000000 0AD25DC0 094BC898
Stck: 09428D28 0800089C 3F800000 3DE56042 00000000 00000000 00000000 00000000
0941d8a2 :  0aaa e288 20f9 0aaa        eori.l #-$1d77df07,$aaa(a2)
0941d8aa :  e28c                       lsr.l #$1,d4
0941d8ac :  20f9 0aaa e290             move.l $aaae290,(a0)+
0941d8b2 :  20b9 0aaa e294             move.l $aaae294,(a0)
0941d8b8 :  202d efd4                  move.l -$102c(a5),d0
0941d8bc :  4ced 5cfc ef48             movem.l -$10b8(a5),d2-d7/a2-a4/a6
0941d8c2 : *f22d d03f ef70             fmovem.x -$1090(a5),fp2-fp7 ;extended opcode
0941d8c8 :  4e5d                       unlk a5
0941d8ca :  4e75                       rts
0941d8cc :  4e55 ff74                  link.w a5,#-$8c
0941d8d0 :  f227 e0fc                  fmovem.x fp2-fp7,-(a7) ;extended opcode
0941d8d4 :  48e7 3f3a                  movem.l d2-d7/a2-a4/a6,-(a7)
0941d8d8 :  2c09                       move.l a1,d6
0941d8da :  266d 0008                  movea.l $8(a5),a3
0941d8de :  286d 000c                  movea.l $c(a5),a4
Name: "AmiQuake2"  Hunk 0000 Offset 00003C7A

 
Exception !!   0000000B     TCB: 0ACDCC38     CTX: 08081DC8     SSP: 08002308
USP : 0AD25DF8 SR: 0000  (U0)(-)(-)  TCB: 0ACDCC38
  PC: 0942914A
Data: 00000000 00000000 00000002 00000001 00000001 0AD25F40 0AD25F26 00000000
Addr: 0AD25F26 0AD25F26 0AD25E58 0AD25E58 0AD25DE8 0AD25E08 0800089C 08002308
Stck: 094269FA C1B80000 0AD25F00 09427B00 0AD25E70 09426DF4 0AD25E58 094269FA
Stck: 094BC898 09428D28 00000000 00000000 00000000 00000000 00000000 3F800000
0942912a :  f200 0063                  fsmul.x fp0 ;extended opcode
0942912e :  f22a 4540 0004             fsmove.s $4(a2),fp2 ;extended opcode
09429134 :  f200 0963                  fsmul.x fp2 ;extended opcode
09429138 :  f200 0862                  fsadd.x fp2,fp0 ;extended opcode
0942913c :  f22a 44c0 0008             fsmove.s $8(a2),fp1 ;extended opcode
09429142 :  f200 04e3                  fsmul.x fp1 ;extended opcode
09429146 :  f200 0462                  fsadd.x fp1,fp0 ;extended opcode
0942914a : *f200 00c5                  fdint.x fp0,fp1 ;extended opcode
0942914e :  f200 04b8                  fcmp.x fp1 ;extended opcode
09429152 :  f28e 0040                  fbne $9429194 ;extended opcode
09429156 :  f200 04c0                  fsmove.x fp1 ;extended opcode
0942915a :  f281 004e                  fbeq $94291aa ;extended opcode
0942915e :  f23c 4400 3f80 0000        fmove.s #+1,fp0 ;extended opcode
09429166 :  f200 0460                  fsdiv.x fp1,fp0 ;extended opcode
Name: "AmiQuake2"  Hunk 0000 Offset 0000F502
alenppc is offline  
Old 24 November 2022, 20:30   #96
Thomas Richter
Registered User
 
Join Date: Jan 2019
Location: Germany
Posts: 2,125
Sigh. Here we go, another one I forgot, the square root. Apparently, I still need to fix the disassembler here.
Attached Files
File Type: lha SoftIEEE.lha (56.2 KB, 17 views)
Thomas Richter is offline  
Old 24 November 2022, 21:04   #97
alenppc
Registered User
 
Join Date: Apr 2012
Location: Canada
Age: 42
Posts: 876
Quote:
Originally Posted by Thomas Richter View Post
Sigh. Here we go, another one I forgot, the square root. Apparently, I still need to fix the disassembler here.
We are getting somewhere. Now I can get to the loading screen, it will eventually crash, but I get a huge crashlog. I suspect that only the Exception ones at the bottom are relevant, and the Long Read ones are just general bugs.

In any case, here's the whole thing:


Code:
LONG READ from 3FF66666                        PC: 082D15E0
USP : 083D9024 SR: 0004  (U0)(-)(-)  TCB: 083786D8
Data: 00000280 00000000 083D90FC 00000001 00000001 00000030 082E1274 082E1260
Addr: 09353194 0000FA00 083D90C8 08293774 0829462C 083D9074 08284460 08002340
Stck: 083D90FC 00000001 00000001 00000030 082E1274 082E1260 083D90C8 08293774
Stck: 00000000 00000000 00000000 7FFF0000 4007FFFF FFFFFFFF 40060000 C8000000
082d15c0 :  f23c 46b8 42b4 0000        fcmp.s #+90,fp5 ;extended opcode
082d15c8 :  f295 fb90                  fble $82d115a ;extended opcode
082d15cc :  7e01                       moveq.l #$1,d7
082d15ce :  23c7 0836 34c0             move.l d7,$83634c0
082d15d4 :  61ff ffff 6e66             bsr.l $82c843c ;extended opcode
082d15da :  4ced 0cfc ffb0             movem.l -$50(a5),d2-d7/a2-a3
082d15e0 : *f22d d03c ffd0             fmovem.x -$30(a5),fp2-fp5 ;extended opcode
082d15e6 :  4e5d                       unlk a5
082d15e8 :  4e75                       rts
082d15ea :  4e55 0000                  link.w a5,#$0
082d15ee :  48e7 3030                  movem.l d2-d3/a2-a3,-(a7)
082d15f2 :  2039 0836 3b8c             move.l $8363b8c,d0
082d15f8 :  b0b9 0836 3774             cmp.l $8363774,d0
082d15fe :  6770                       beq.s $82d1670
Name: "AmiQuake.FPU"  Hunk 0000 Offset 000453F8

 
LONG READ from 3F800000                        PC: 082C3B12
USP : 083D8D50 SR: 0014  (U0)(-)(-)  TCB: 083786D8
Data: 082846AC 00000000 00000004 000000C8 00000000 00000001 00000000 082E1260
Addr: 00F8781C 082E9A4E 00000000 08293774 0829462C 083D9080 08284460 08002340
Stck: 083D8D80 00000004 000000C8 00000000 00000001 00000000 00000000 08293774
Stck: 0829462C 4E550000 48E72030 242D0008 0000000F 0F0F1F1F 1F2F2F2F 3F3F3F4B
082c3af2 :  4285                       clr.l d5
082c3af4 :  4282                       clr.l d2
082c3af6 :  43f9 0831 d984             lea.l $831d984,a1
082c3afc :  45f9 0831 d944             lea.l $831d944,a2
082c3b02 :  47f9 0831 d814             lea.l $831d814,a3
082c3b08 :  6000 fce6                  bra $82c37f0
082c3b0c :  4ced 1c7c fcd4             movem.l -$32c(a5),d2-d6/a2-a4
082c3b12 : *f22d d020 fcf4             fmovem.x -$30c(a5),fp2 ;extended opcode
082c3b18 :  4e5d                       unlk a5
082c3b1a :  4e75                       rts
082c3b1c :  4e55 0000                  link.w a5,#$0
082c3b20 :  f22d 4444 0008             fdmove.s $8(a5),fp0 ;extended opcode
082c3b26 :  f23c 5467 4066 c16c 16c1 6c17 fdmul.d #+182.0444444444445,fp0 ;extended opcode
Name: "AmiQuake.FPU"  Hunk 0000 Offset 0003792A

 
LONG READ from 3F800000                        PC: 082B6780
USP : 083D9088 SR: 0014  (U0)(-)(-)  TCB: 083786D8
Data: 00000001 00000001 083D90FC 00000000 00000001 00000001 082E1274 082E1260
Addr: 0801AB2E 0801AB2E 08295124 08293774 0829462C 083D90F0 08284460 08002340
Stck: 083D90FC 00000000 00000001 00000001 082E1274 08295124 08293774 4E550000
Stck: 226D0008 206D000C 00000000 00000001 00000000 00000000 000001AF 000001B1
082b675e :  0000 0000                  ori.b #$0,d0
082b6762 :  f23c 5467 3fd6 6666 6666 6666 fdmul.d #+0.35,fp0 ;extended opcode
082b676e :  f200 0203                  fintrz.x fp0,fp4 ;extended opcode
082b6772 :  f206 6200                  fmove.l fp4,d6 ;extended opcode
082b6776 :  6000 f91c                  bra $82b6094
082b677a :  4ced 0c7c ff98             movem.l -$68(a5),d2-d6/a2-a3
082b6780 : *f22d d038 ffb4             fmovem.x -$4c(a5),fp2-fp4 ;extended opcode
082b6786 :  4e5d                       unlk a5
082b6788 :  4e75                       rts
082b678a :  4e55 0000                  link.w a5,#$0
082b678e :  2f0a                       move.l a2,-(a7)
082b6790 :  2f02                       move.l d2,-(a7)
082b6792 :  42b9 0834 f114             clr.l $834f114
082b6798 :  4282                       clr.l d2
082b679a :  f239 4440 0834 f12c        fsmove.s $834f12c,fp0 ;extended opcode
Name: "AmiQuake.FPU"  Hunk 0000 Offset 0002A598

 
LONG READ from 3FF66666                        PC: 082D15E0
USP : 083D9020 SR: 0004  (U0)(-)(-)  TCB: 083786D8
Data: 00000280 00000000 083D90F8 00000000 00000001 00000030 082E1274 082E1260
Addr: 09353194 0000FA00 083D90C4 083E6718 0829462C 083D9070 080008D4 08002340
Stck: 083D90F8 00000000 00000001 00000030 082E1274 082E1260 083D90C4 083E6718
Stck: 40070000 A0000000 00000000 40040000 CB430000 00000000 40060000 C8000000
082d15c0 :  f23c 46b8 42b4 0000        fcmp.s #+90,fp5 ;extended opcode
082d15c8 :  f295 fb90                  fble $82d115a ;extended opcode
082d15cc :  7e01                       moveq.l #$1,d7
082d15ce :  23c7 0836 34c0             move.l d7,$83634c0
082d15d4 :  61ff ffff 6e66             bsr.l $82c843c ;extended opcode
082d15da :  4ced 0cfc ffb0             movem.l -$50(a5),d2-d7/a2-a3
082d15e0 : *f22d d03c ffd0             fmovem.x -$30(a5),fp2-fp5 ;extended opcode
082d15e6 :  4e5d                       unlk a5
082d15e8 :  4e75                       rts
082d15ea :  4e55 0000                  link.w a5,#$0
082d15ee :  48e7 3030                  movem.l d2-d3/a2-a3,-(a7)
082d15f2 :  2039 0836 3b8c             move.l $8363b8c,d0
082d15f8 :  b0b9 0836 3774             cmp.l $8363774,d0
082d15fe :  6770                       beq.s $82d1670
Name: "AmiQuake.FPU"  Hunk 0000 Offset 000453F8

 
LONG READ from 3FF66666                        PC: 082D15E0
USP : 083D8C08 SR: 0004  (U0)(-)(-)  TCB: 083786D8
Data: 00000280 00000000 083D8CE0 00000000 083D9D48 00000030 082E1274 082E1260
Addr: 09353194 0000FA00 083D8CAC 0829462C 08293D48 083D8C58 08296FE4 08002340
Stck: 083D8CE0 00000000 083D9D48 00000030 082E1274 082E1260 083D8CAC 0829462C
Stck: 40070000 A0000000 00000000 40040000 CB430000 00000000 40060000 C8000000
082d15c0 :  f23c 46b8 42b4 0000        fcmp.s #+90,fp5 ;extended opcode
082d15c8 :  f295 fb90                  fble $82d115a ;extended opcode
082d15cc :  7e01                       moveq.l #$1,d7
082d15ce :  23c7 0836 34c0             move.l d7,$83634c0
082d15d4 :  61ff ffff 6e66             bsr.l $82c843c ;extended opcode
082d15da :  4ced 0cfc ffb0             movem.l -$50(a5),d2-d7/a2-a3
082d15e0 : *f22d d03c ffd0             fmovem.x -$30(a5),fp2-fp5 ;extended opcode
082d15e6 :  4e5d                       unlk a5
082d15e8 :  4e75                       rts
082d15ea :  4e55 0000                  link.w a5,#$0
082d15ee :  48e7 3030                  movem.l d2-d3/a2-a3,-(a7)
082d15f2 :  2039 0836 3b8c             move.l $8363b8c,d0
082d15f8 :  b0b9 0836 3774             cmp.l $8363774,d0
082d15fe :  6770                       beq.s $82d1670
Name: "AmiQuake.FPU"  Hunk 0000 Offset 000453F8

 
LONG READ from 3FEFAE14                        PC: 082A7056
USP : 083D1C38 SR: 0004  (U0)(-)(-)  TCB: 083786D8
Data: 0000002C 00000028 092927D4 0926C180 09202AE4 000186A0 082D9A06 082E1260
Addr: 08495034 09243A04 08333338 09202AE4 09202AE4 083D1C68 08333338 08002340
Stck: 092927D4 0926C180 09202AE4 000186A0 082D9A06 08333338 09202AE4 09202AE4
Stck: 08333338 3F266666 00000000 00000000 083D1CB4 082A82AE 09202B18 09202AF0
082a7034 :  f29b 000e                  fbnlt $82a7044 ;extended opcode
082a7038 :  2d7c 4000 0000 fff8        move.l #$40000000,-$8(a6)
082a7040 :  6000 ff30                  bra $82a6f72
082a7044 :  2d7c 3f80 0000 fff8        move.l #$3f800000,-$8(a6)
082a704c :  6000 ff24                  bra $82a6f72
082a7050 :  4ced 5c7c ffd0             movem.l -$30(a5),d2-d6/a2-a4/a6
082a7056 : *f22d d020 fff4             fmovem.x -$c(a5),fp2 ;extended opcode
082a705c :  4e5d                       unlk a5
082a705e :  4e75                       rts
082a7060 :  4261                       clr.w -(a1)
082a7062 :  6420                       bcc.s $82a7084
082a7064 :  7375                       moveq.l #$75,d1 ;illegal opcode
082a7066 :  7266                       moveq.l #$66,d1
082a7068 :  6163                       bsr.s $82a70cd
082a706a :  6520                       bcs.s $82a708c
082a706c :  6578                       bcs.s $82a70e6
082a706e :  7465                       moveq.l #$65,d2
082a7070 :  6e74                       bgt.s $82a70e6
082a7072 :  7300                       moveq.l #$0,d1 ;illegal opcode
082a7074 :  4e55 ffe0                  link.w a5,#-$20
Name: "AmiQuake.FPU"  Hunk 0000 Offset 0001AE6E

 
Exception !!   0000000B     TCB: 083786D8     CTX: 08085410     SSP: 08002348
USP : 083D1C78 SR: 0008  (U0)(-)(-)  TCB: 083786D8
  PC: 082A80D0
Data: 000016E1 00000000 FFFFFFFF 00000000 083D1C9E 0829C1E2 083D1CA8 082E1260
Addr: 08333398 0833338C 085E8564 083333A0 083D1CA8 083D1CB4 08333338 08002348
Stck: 00000078 0000009E 00000001 0829462C 082E1274 08333338 09202AE4 082A95B4
Stck: 082E1728 08333310 0833333D 00000004 08333338 09202AE4 082A95B4 083D20CC
082a80b0 :  2d52 0054                  move.l (a2),$54(a6)
082a80b4 :  2d6a 0004 0058             move.l $4(a2),$58(a6)
082a80ba :  2d6a 0008 005c             move.l $8(a2),$5c(a6)
082a80c0 :  49ed fff4                  lea.l -$c(a5),a4
082a80c4 :  41ee 0060                  lea.l $60(a6),a0
082a80c8 :  43ee 0054                  lea.l $54(a6),a1
082a80cc :  47ee 0068                  lea.l $68(a6),a3
082a80d0 : *f219 44d8                  fsabs.s (a1)+,fp1 ;extended opcode
082a80d4 :  f218 4458                  fsabs.s (a0)+,fp0 ;extended opcode
082a80d8 :  f200 00b8                  fcmp.x fp0,fp1 ;extended opcode
082a80dc :  f29d 0174                  fbngt $82a8252 ;extended opcode
082a80e0 :  f200 6480                  fmove.s fp1,d0 ;extended opcode
082a80e4 :  28c0                       move.l d0,(a4)+
082a80e6 :  b7c8                       cmpa.l a0,a3
082a80e8 :  6ce6                       bge.s $82a80d0
082a80ea :  2f06                       move.l d6,-(a7)
082a80ec :  2845                       movea.l d5,a4
082a80ee :  4e94                       jsr (a4)
Name: "AmiQuake.FPU"  Hunk 0000 Offset 0001BEE8

 
Exception !!   0000000B     TCB: 083786D8     CTX: 08085410     SSP: 08002340
USP : 083D1C78 SR: 0008  (U0)(-)(-)  TCB: 083786D8
  PC: 082A80D0
Data: 000016E1 00000000 FFFFFFFF 00000000 083D1C9E 0829C1E2 083D1CA8 082E1260
Addr: 08333398 0833338C 085E8564 083333A0 083D1C68 083D1CB4 08333338 08002340
Stck: 00000078 0000009E 00000001 0829462C 082E1274 08333338 09202AE4 082A95B4
Stck: 082E1728 08333310 0833333D 00000004 08333338 09202AE4 082A95B4 083D20CC
082a80b0 :  2d52 0054                  move.l (a2),$54(a6)
082a80b4 :  2d6a 0004 0058             move.l $4(a2),$58(a6)
082a80ba :  2d6a 0008 005c             move.l $8(a2),$5c(a6)
082a80c0 :  49ed fff4                  lea.l -$c(a5),a4
082a80c4 :  41ee 0060                  lea.l $60(a6),a0
082a80c8 :  43ee 0054                  lea.l $54(a6),a1
082a80cc :  47ee 0068                  lea.l $68(a6),a3
082a80d0 : *f219 44d8                  fsabs.s (a1)+,fp1 ;extended opcode
082a80d4 :  f218 4458                  fsabs.s (a0)+,fp0 ;extended opcode
082a80d8 :  f200 00b8                  fcmp.x fp0,fp1 ;extended opcode
082a80dc :  f29d 0174                  fbngt $82a8252 ;extended opcode
082a80e0 :  f200 6480                  fmove.s fp1,d0 ;extended opcode
082a80e4 :  28c0                       move.l d0,(a4)+
082a80e6 :  b7c8                       cmpa.l a0,a3
082a80e8 :  6ce6                       bge.s $82a80d0
082a80ea :  2f06                       move.l d6,-(a7)
082a80ec :  2845                       movea.l d5,a4
082a80ee :  4e94                       jsr (a4)
Name: "AmiQuake.FPU"  Hunk 0000 Offset 0001BEE8
alenppc is offline  
Old 24 November 2022, 22:22   #98
Thomas Richter
Registered User
 
Join Date: Jan 2019
Location: Germany
Posts: 2,125
Thank you a lot. The last exception is again a missing instruction I added, so this should be fixed. .The first access faults look curious to me - as if the CPU does not supply a proper effective address for fmovem, which should not happen. I currently disabled using this <ea> in the attached version and kindly ask you for testing again.

Also, could you please provide me which CPU that is, and if possible, which mask that is? This looks almost like a CPU erratum to me. I cannot reproduce this under emulation or on my 68020 (but the latter uses a different execution path anyhow).

Thanks,
Thomas
Attached Files
File Type: lha SoftIEEE.lha (56.1 KB, 16 views)
Thomas Richter is offline  
Old 24 November 2022, 22:43   #99
alenppc
Registered User
 
Join Date: Apr 2012
Location: Canada
Age: 42
Posts: 876
Quote:
Originally Posted by Thomas Richter View Post
Also, could you please provide me which CPU that is, and if possible, which mask that is? This looks almost like a CPU erratum to me. I cannot reproduce this under emulation or on my 68020 (but the latter uses a different execution path anyhow).

Thanks,
Thomas
Excellent, I have the FPU Quake timedemo running now. If I encounter any crashes I will launch MuForce and try to catch it and report back.

Fun fact, the performance is considerably slower than the build compiled with the -nofpu switch (which is playable at 100 mhz) but with SoftIeee it's a slideshow. (Not a criticism, of course, I am reporting this just as a note for people compiling ports, adding a softfloat build won't hurt).

In any case thank you very much for this much needed tool.

The cpu in question is a rev4 LC060 pictured here:


alenppc is offline  
Old 24 November 2022, 23:03   #100
Thomas Richter
Registered User
 
Join Date: Jan 2019
Location: Germany
Posts: 2,125
Thanks, so we're really close now. The first hits you saw on the previous post were really interesting. Now that they are gone (are they? Do you see any hits anymore?) indicates that there was indeed an interesting CPU erratum I did not find in any mot specs. I'm also not quite sure which mask the 75G69 comes from, but if the PCR register contains a rev.4, then so might it be.

The difference between the previous version and this working version is that in the working version the FPU emulation core decodes the effective address of all instructions manually instead of taking them from the stack frame where the CPU prepared it. However, instead of preparing it, the fmovem from memory instruction seem to have put there the leading bits of the FPU register (or some other trash that seems to ressemble some FPU instruction). Interestingly, this only seems to hold for the fmovem-from-memory.

Anyhow, here is a (potentially, hopefully) more effective workaround that decodes only then the <ea> manually if the instruction is an fmovem into the FPU. This will help to make the instruction decoding more effective and save a tiny little bit of speed.

Would be great if you could give this a test and report back whether it works without any hits.

That this performs very slowly is of course expected, that's pretty much what the emulation can do.

No matter what, I thank you a lot for helping me, and it seems we even found something interesting and new about the 68060 masks that does not seem to be documented anywhere else.
Attached Files
File Type: lha SoftIEEE.lha (56.2 KB, 35 views)
Thomas Richter is offline  
 


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Similar Threads
Thread Thread Starter Forum Replies Last Post
Demos to test FPU on SX32 MkII (020+FPU) Rochabian request.Demos 1 21 April 2020 04:03
Betatesting Amiga and C64 Forever 7 michaelz support.Amiga Forever 23 22 June 2017 17:58
[obsolete] EoB 2 Thread AGA and translations betatesting Marcuz project.Amiga Game Factory 17 21 August 2008 23:47
Frederic's Emulator inside and Emulator thread Fred the Fop Retrogaming General Discussion 22 09 March 2006 08:31

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 04:44.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2022, vBulletin Solutions Inc.
Page generated in 0.09592 seconds with 16 queries