Beim TC64 v2 GEOS-Programe laden mit dem chacocmd.


  • spacer
  • 390 Views 26 replies

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • wweicht wrote:

    Schon beim Laden von Geos wird der Stack überschrieben, dafür ist er ja auch da.
    fast... 38911 ist die Anzahl der freien Bytes bei der Einschaltmeldung des C64, d.h. er hat einen Reset gemacht und die Einschaltmeldung hat die Werte überschrieben.

    Laut "C64 für Insider" ist $0100-$010A der Arbeitsbereich bei der Umwandlung von Gleitpunkt nach ASCII.
    Der Bereich $0100-$013E wird auch bei Bandfehler genutzt.

    GEOS hat damit also überhaupt nichts zu tun... Hab Bild.3 mit dem 3ten Bild (=Bild.4) verwechselt. Auf "Bild.4" sind verschiedene ASCII-Zeichen. Die Zeichen da sagen mir aber nichts, sieht aber aus wie -1.70301501E. Also evtl. auch eine Zahl von Float nach ASCII gewandelt. Für GEOS aber eine merkwürdige Zahl...

    The post was edited 2 times, last by darkvision ().

  • Ergänzung:
    Das Programm "GEOS" wird absolut mit ,8,1 geladen. Die Ladeadresse liegt da schon im Stack-Speicher, bei MegaPatch ab $0110. Damit wird quasi das Programm nach dem laden auch gleich gestartet weil der Stack bis zum Ende mit bestimmten Werten gefüllt wird das Sytem dann zu einer Stelle im Ladeprogramm "zurückkehrt" und diese dann ausführt.
  • Diese Zahl kommt immer auch wenn ich eine andere Float nehme:
    ----------------------------------------
    sieht aber aus wie -1.70301501E
    ----------------------------------------

    Ich weiß keine Lösung dafür , weil dort nun mal der String reingelegt wird.


    Danke.
    Gruss
  • Ich hab eben mal GEOS 2.0 gestartet, da steht bei mir nach dem starten von GEOS ab $0100 nach wie vor der String "38911.0000",NULL. GEOS scheint den Wert also doch nicht zu ändern... der Autostart wird ja nach $0110 geladen und die 38911 sind unverändert. Für MegaPatch gilt das nicht: Das gibt beim start die Größe des DACC als Float->ASCII aus und überschreibt dann die Werte ab $0100...
  • Jetzt funktioniert es.
    Alle Floatbefehle die es für Basic gibt können in GEOS dargestellt werden...sinus..cosinus..tangens...div...mult...und..und.

    Test ist 2xPi Wert.

    Jetzt liegen die Daten bei $7f40 , habe sie dort hinkopiert zur Weiterverarbeitung.
    Brauche mal eure Hilfe, mit welchen Befehl ich jetzt den String ausgeben kann in GEOS.

    Danke.
    Gruss

    Habe den ASM-Code in ASM gepackt.

    Source Code

    1. .export _bildschirm
    2. .export _linie
    3. .export _schleife
    4. .export _bason
    5. .export _basoff
    6. .export _adrpi
    7. .export _adr2pi
    8. .export _ramfac
    9. .export _facstr
    10. .include "geosmac.inc"
    11. .include "jumptab.inc"
    12. .include "geossym.inc"
    13. .include "const.inc"
    14. .include "geossym2.inc"
    15. .include "inputdrv.inc"
    16. .include "printdrv.inc"
    17. .include "diskdrv.inc"
    18. .include "dio.inc"
    19. _bason:
    20. sei
    21. ldx #$37
    22. stx $01
    23. rts
    24. _basoff:
    25. ldx #$36
    26. stx $01
    27. cli
    28. rts
    29. _adrpi:
    30. lda #$a8
    31. ldy #$ae
    32. rts
    33. _adr2pi:
    34. lda #$09
    35. ldy #$e3
    36. rts
    37. _ramfac:
    38. jsr 48034
    39. rts
    40. _facstr:
    41. jsr 48605
    42. rts
    43. _schleife:
    44. schl:
    45. jmp schl
    46. rts
    47. _linie:
    48. LoadW r3,50
    49. LoadB r11L,100
    50. LoadW r4,300
    51. lda #%11111111
    52. jsr HorizontalLine
    53. rts
    54. _bildschirm:
    55. lda #0
    56. jsr SetPattern
    57. LoadB dispBufferOn,ST_WR_FORE | ST_WR_BACK
    58. ldy #5
    59. back:
    60. lda RecTabelle,y
    61. sta r2L,y
    62. dey
    63. bpl back
    64. jsr Rectangle
    65. rts
    66. RecTabelle:
    67. .byte 0
    68. .byte 199
    69. .word 0
    70. .word 319
    Display All

    Datei 2xPI in cc65:

    C Source Code

    1. #include <geos.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. #include <stdio.h>
    5. #include <ctype.h>
    6. #include <peekpoke.h>
    7. struct window wholeScreen = {0, SC_PIX_HEIGHT-1, 0, SC_PIX_WIDTH-1};
    8. unsigned int x;
    9. unsigned int xx;
    10. unsigned char y;
    11. int main(void)
    12. {
    13. SetPattern(0);
    14. InitDrawWindow(&wholeScreen);
    15. Rectangle();
    16. y=0;
    17. xx=0x7f40+9;
    18. InitForIO();
    19. __asm__ ("jsr _bason");
    20. __asm__ ("jsr _adr2pi");
    21. __asm__ ("jsr _ramfac");
    22. __asm__ ("jsr _facstr");
    23. __asm__ ("jsr _basoff");
    24. DoneWithIO();
    25. for (x=0x7f40; x<xx; x++) {
    26. POKE(x,PEEK(256+y));
    27. y=y+1;
    28. }
    29. cgetc ();
    30. return 0;
    31. }
    Display All
    Images
    • Bild2.jpg

      25.1 kB, 308×310, viewed 2 times

    The post was edited 3 times, last by spacer ().

  • Users Online 1

    1 Guest