Depuis samedi je tentais passer aux simples non signés pour obtenir au moins 65536 essais
Mais j'obtenais des résultats farfelus au delà de 33000 qui m'ont amenés à faire des recherches.
Effectivement la procédure Figforth: U/ souffre d'un bug.
http://6502org.wikidot.com/errata-software-figforth
Fig a donné un correctif et j'ai fini par trouver un U/ (que je teste sous le nom DU/ ici)
Procédure actuelle de notre Forth MO5
U/ : effectue la division non signée avec reste
d'un double non signé par un simple précision
(ud1 u1 . . . u2 reste , u3 quotient)
Code : Tout sélectionner
cf_uslash
4A5C 4A5E FDB c_uslash
c_uslash
4A5E 8DAA BSR mod5
4A60 0EAC JMP PULL
... ... ... ...
mod5
4A0A DD4F STD l454F
4A0C 8E0020 LDX #$0020
4A0F CC0000 LDD #$0000
4A12 DD51 STD l4551
mod3
4A14 0850 ASL l4550
4A16 094F ROL l454F
4A18 094E ROL l454E
4A1A 094D ROL l454D
4A1C 59 ROLB
4A1D 49 ROLA
4A1E 0952 ROL l4552
4A20 0951 ROL l4551
4A22 10A3C4 CMPD ,U
4A25 2504 BCS mod2
4A27 A3C4 SUBD ,U
4A29 0C50 INC l4550
mod2
4A2B 301F LEAX -$01,X
4A2D 26E5 BNE mod3
4A2F ED44 STD $04,U
4A31 DC4D LDD l454D
4A33 EDC4 STD ,U
4A35 DC4F LDD l454F
4A37 ED42 STD $02,U
4A39 39 RTS
mod6
4A3A CC0000 LDD #$0000
4A3D A302 SUBD $02,X
4A3F ED02 STD $02,X
4A41 CC0000 LDD #$0000
4A44 E201 SBCB $01,X
4A46 A284 SBCA ,X
4A48 ED84 STD ,X
4A4A 39 RTS
Procédure trouvée sur le Net
Code : Tout sélectionner
HEX CREATE DU/ EC42 , AE44 , AF42 , ED44 , 6843 , 6942 , 8E C, 0010 , 6945 ,
6944 , EC44 , A3C4 , 1CFE , 2B04 , ED44 , 1A01 , 6943 , 6942 ,
301F , 26E8 , 3342 , 0EB6 , SMUDGE
ce qui donne
Code : Tout sélectionner
69C7 EC42 LDD $02,U 6
69C9 AE44 LDX $04,U 6
69CB AF42 STX $02,U 6
69CD ED44 STD $04,U 6
69CF 6843 ASL $03,U 7
69D1 6942 ROL $02,U 7
69D3 8E0010 LDX #$0010 3
69D6 6945 ROL $05,U 7
69D8 6944 ROL $04,U 7
69DA EC44 LDD $04,U 6
69DC A3C4 SUBD ,U 6
69DE 1CFE ANDCC #$FE 3
69E0 2B04 BMI $69E6 3
69E2 ED44 STD $04,U 6
69E4 1A01 ORCC #$01 3
69E6 6943 ROL $03,U 7
69E8 6942 ROL $02,U 7
69EA 301F LEAX -$01,X 5
69EC 26E8 BNE $69D6 3
69EE 3342 LEAU $02,U 5
69F0 0EB6 JMP /$B6 3
- DU.jpeg (3.57 Kio) Consulté 4784 fois
Si le Forth du MO5 avait été un grand succès commercial
peut être les auteurs auraient-ils fait une procédure corrective comme les Américains.
Y a-t-il lieu de le faire dans notre version en recompilant, peut être en
mettant une procédure patch sous forme de note dans un TXT qui accompagnerait la K7 ?
Est il possible de corriger le bug sans déplacer les adresses ?
Je laisse aux experts parce que je n'ai pas les compétences en LM 6809