Basic-Erweiterungen selbermachen?

Es gibt 112 Antworten in diesem Thema, welches 22.864 mal aufgerufen wurde. Der letzte Beitrag (14. Januar 2012 um 11:19) ist von Haubitze.

  • wenn irgend jemand ne idee hatt woran das liegen mag, bitte hilf mir auf die spruenge.


    Benutzt du zum Interpretieren der Klammer denn FRMEVL ($ad9e; sollte man bei Funktionen immer machen)? Dann dürfte eigentlich kein Problem auftauchen. Außerdem wär in dem Fall sogar egal, was da in der Klammer steht, Hauptsache, es kommt ein numerischer Wert dabei raus...

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • ja supie Arndt,

    habe erstmal garnich auf klammern getestet :/ was wohl auch der fehler war,
    habe es dann mit besagtem FRMEVL versucht aber ohne erfolg.
    jetzt scheints hinzuhaun, benutze dazu die einzelnen funktionen
    fuer klammer auf und klammer zu ($aefa, $aef7) und hole
    zwischen beiden meinen byte wert. nun haengt es nicht merh bei 3 stelligen
    zahlen beim printen.

    endlich kann ich weiter an meiner erweiterung arbeiten, das war nun schon
    hn bissl arg eh ich ueberhaupt wusste wo ich ansetzen muss.

    also danke nochmal und Salutee

  • Hallo Leute,

    ich habe mal wieder ein problem wo ich nicht weis
    warum es nicht klappen will. :/

    und zwar habe ich nun die BIN function geschrieben dabei tritt das problem,
    naehmlich ein syntax error nur auf wenn ich ein WORD uebergeben moechte.
    bei einem normalen BYTE wert klappst soweit ich das getestet hab einwandfrei.

    hier mal mein code dazu evtl sieht ja jemand den fehler den ich uebersehe.

    das CALL ABS rufe ich nur auf damit ich immer positive werte bekomme.
    wenn alles nichts hilft muss ich dann wohl auf BYTE werte begrenzen.

    ich hoffe das ihr mir mal wieder auf die spruenge helfen koennt und
    danke euch im vorraus :)

    Salute Haubitze

  • Code
    lda zp3				;low byte laden
    	asl					;und eins nach links schieben
    	sta zp3				;und zurueckspeichern
    	lda zp4				;high byte laden
    	adc #0				;carry addieren 
                             	;(ist nur da wenn bei der linksshiftung vom lowbyte 
                             	;das hoechste bit in das carry kommt)
    	asl					;und nach links schieben

    Öh, müsstest Du nicht erst das hi-byte shiften und dann den Übertrag aufaddieren?
    Beispiel:

    Code
    hi=%00000001 lo=%10000000 - Wert=256+128=384
    asl lo -> lo=%00000000, carry=1
    adc hi, 0 ->hi=%00000010 (%00000001+%1)
    asl hi ->hi=%00000100
    in Summe
    hi=%00000100  lo=%00000000 - Wert=1024+0=1024
    müsste aber
    hi=%00000011 lo=%00000000 - Wert=512+256=768 sein

    Da aber bei einem asl hi das Carry-Flag schon wieder überschrieben wird, kannst Du nicht einfach die Reihenfolge umdrehen.

    Für solche Zwecke bietet sich dann ein rol an:

    Code
    asl lo
    rol hi

    Das er dabei das hi-bit aus dem hi-byte in das Carry-Flag schiebt kann man getrost ignorieren - oder als check für einen Overflow einsetzen. Wenn nach dem rol das Carry-Flag gesetzt ist, bist Du beim 17. Bit angelangt und hast einen Overflow.

    Allerdings dürfte das obige Problem nur zu einem falschen Ergebnis, aber nicht zu einem Syntax-Error führen, das muss noch ein anderes Problem sein...

    Basic V2 Programme unter Windows editieren: Bitte melde dich an, um diesen Link zu sehen.

  • hm ja stimmt eigendlich Schlowski
    komischerweise bekomme ich aber mit meinem prozedere bei
    bin 100000000=512 raus
    mit erst shift und dann add bekomm ich 0 :huh:
    was ja beide falsche ergebnisse sind, muss ich also auch nochmal ueberarbeiten.

    aber das problem mit dem syntax error besteht weiterhin und ich hab bisher noch
    keinen blassen schimmer warum ich diesen bekomme :(
    wiegesagt bei BYTE werten klapps wunderbar nur bei WORD werten nich.
    und ich kann mir nicht vorstellen das man in asm keine WORD werte uebergeben
    kann. in basic kann ich ja auch schreiben a=12*256+8 was ja auch einen
    korrekten WORD wert der variablen a zuweist.

    das einzige was ich mir vorstellen kann ist das was mit der schleife nich stimmt
    aber ich seh da den fehler nicht. (muss ich evtl die interups speeren? kann aber
    eigendlich nich der grund sein oda?)

    Salute Haubitze

  • hm leider muss ich die sache mit den Funktionen verschieben
    da da wohl doch groessere probleme auftauchen wie zB
    das nun meine Befehle rumspinnen. X(
    irgenwie glaube ich das da mehr dahintersteckt wie vermuttet :huh:

    naja dann mach ich halt erstmal mit meinen grafik routinen weiter :)

    salute Haubitze

  • Hi Leute,

    nich das ihr denkt ich mache nicht weiter, zZ muss ich nun doch erstmal die
    ausfuehrenden Routienen unters ROM legen, das heist etwas mehr
    umstruckturierung und mehr JSR/RTS. dies wurde notwendig da ich nun
    doch schon unters ROM gekommen bin mit meiner laenge der Erweiterung.
    Gleichzeitig suche ich inerhalb des Codes nach wiederkehrenden aufrufen
    um diese gegebenen falls als unterroutine zu haben und so den code nochmal
    etwas zu kuerzen. Im grossen und ganzen habe ich nun vor alle Routinen die
    BASIC Routinen anspringen vorm ROM zu halten, dafuer duerften
    dann auch 4K RAM reichen, und alles andere unters ROM zu legen.

    nur eine Frage noch unter welches ROM wuerdet Ihr eure codes legen?
    BASIC oder KERNAL? ich denke das BASIC wuerde sich ja anbieten da ich ja
    aus dem Basic sowieso nicht direkt unter dieses ROM zugreifen koennen sollte
    da ja sonst das basic ueberhaupt nichmehr funzen taet oder.

    ausserdem haette ich gern eine "SCHUTZROUTINE" die aufpasst das die Erweiterung
    nicht durch BITMAPS oder anderem zeugs ueberschrieben werden kann also
    den bereich der erweiterung ueberwacht. Wie koennte man sowas aufbauen?

    so naja also nich denken ich arbeite nich mehr dran, muss halt wie gesagt
    erstmal einige umstruckturierungs arbeiten erledigen damit es weitergehen
    kann.

    Salute Haubitze

  • Hallo Leute,

    leider muss ich meine arbeiten vorruebergehend einstellen,
    ich haette zwar noch zeit dafuer aber die prioritaeten haben sich verschoben;
    auf grund eines krankheitfalles innerhalb der familie die, um es mal nicht
    ganz so boese klingen zu lassen, den namen eines sternbildes der noerdlichen
    hemisphaere traegt, stelle ich meine arbeiten vorlaeufig ein.

    ich bitte um verstaendniss und hoffe das dieses kapitel so schnell und gut wie moeglich
    abgeschlossen ist, so das ich bei euch weiter lernen und evtl gute freds
    posten kann.

    also bis auf unbestimmte zeit werde ich erstmal nichts mehr machen, troz
    alledem schau ich ab und zu mal rein um zu schaun was ihr so treibt.

    Gruesse Euer Haubitze

  • hi leute,

    ich haette da mal 2 fragen.

    1.
    moechte ich sowas wie bei manchen fastloadern haben, eine ausgabe wie

    Code
    searching blablub
    loading from ???? to ????
    ready

    giebt es spezielle zeropage addressen oder muss ich das
    ueber den umweg mit open machen und die ersten 2 byte selber laden?
    wenn letzteres welche routine muss ich denn dann anspringen?
    hab leider nur was zu load und save gefunden aber nix zu open in asm.

    2.
    dann wuerde mich nochmal die parameteruebergabe intressiern.
    zb habe ich den befehl

    Bload filename$,startadr,device

    nun moechte ich aber auch parameter weglassen zb

    Code
    Bload filename$,startadr -> hier wird standartmaessig device 8 angesprochen
    Bload filename$,device -> hier soll an den basicstart geladen werden
    Bload filenam$ -> basicstart und device 8


    wie kann ich kongret die ersten beiden varianten unterscheiden?
    natuerlich moechte ich keinen vorgefertigten code haben.

    salute Haubitze

  • Zitat

    giebt es spezielle zeropage addressen


    yo, sowohl start- als auch endadresse kannst du da nach dem laden abgreifen.... einfach mal in eine entsprechende liste guckn :)

  • yo, sowohl start- als auch endadresse kannst du da nach dem laden abgreifen.... einfach mal in eine entsprechende liste guckn :)


    Und der Vollständigkeit halber: Fastloader mit einer Anzeige dafür (und auch manche ohne, z.B. Jiffy) laden meist die Startadresse vorher "von Hand", da anhand der Adresse entschieden wird ob nicht doch lieber mit den normalen Kernalroutinen geladen werden sollte - manche Autostarts würden sonst nicht funktionieren.

    Beispiele zum byteweisen Lesen einer Datei gibts z.B. in der Bitte melde dich an, um diesen Link zu sehen..

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • hallo,

    so das mit dem bload hab ich geschafft.

    nun hab ich nochmal ne frage zur hires grafik.
    und zwar geht es um den bresenham.

    wenn ich das richtig verstanden hab so wird da ja der fehler mit deltax/2 initialisiert.
    wenn nun deltax 319 ist so ist der fehler 159, nun muss ich rausbekomm ob der fehler <= 0 ist
    gehe ich richtig in der annahme das ich das zb so machen kann?

    wo bei die abfrage auf fehlerlo wohl fehlerhaft ist da der lowwert ja auch werte zwischen 0 und 255 haben kann.

    salute