Hello, Guest the thread was called2.2k times and contains 28 replays

last post from hoogo at the

zahlen über 256 in asm

  • Hmmm.... das ist immer so ein Problem mit der Doku...
    Die gibts sicher irgendwo, nur das Finden ist das Problem...und meistens findet man Teile, die nicht so toll sind.... :wand


    Klar gibt es hier im Formun ne Menge Leute, die dir jedes Bit von jedem VIC Register genau erklären können... wenn du aber erstmal richtig suchst, solltest du auch was finden.


    Sonst wird das hier ziemlich Aufwendig...


    ist aber auch nicht so komplieziert.


    Für die Multicolor Bitmap brauchst du ja erstmal nur 3 - 6 Register.


    $D020 und $D021 um Hintergrundfarbe und Rahmenfarbe zu setzen (sollte klar sein)


    $D011 um die Bitmap einzuschalten.
    Dabei gilt:


    Bit 0-2 : Vertikale Verschiebung des Bildschirms um 0 - 7 Pixel
    Bit 3 : Bildschirm auf 24 oder 25 Bildschirmzeilen
    Bit 4 : Bildschirm an / aus (bzw nur Border)
    Bit 5 : Textmodus oder Bitmapmodus
    Bit 6 : Extended Colormodus (geht nur im Textmodus mit Singlecolor. Wenn du das mit Bitmap und/oder Multicolor verwendest, bekommst du nur einen schwarzen Screen)
    Bit 7 : 9tes Rasterregister für Rasterzeilen 256 - 311 (gehört zu $D012)


    $D018 um die Bitmap und Videoram zu platzieren.
    Die Bit 4 - 7 sind dabei jeweils für das VideoRam. Sind ja 16 Möglichkeiten wobei diese im um $0400 Bytes verschoben sind... Kannst also zunächst VideoRams mit Startposition von $0000 bis einschliesslich $3c00 auswählen (wobei der VIC von $1000-$1fff und $9000-$9FFF nicht kann...auch keine Bitmap,Sprites oder Charsets). Wenn du Video Rams über $4000 haben willst, must du zusätzlich die VIC BANK umschalten. Der VIC kann immer nur auf $4000 Bytes zugreifen. Ist Defaultmässig auf $0000-$3FFF eingestellt. Kann aber mit den Bits 0 - 1 von $DD00 umgeschaltet werden.
    Dabei gilt: %11 ist von $0000-$3FFFF, %10 von $4000-$7FFFF, %01 von $8000-$BFFF und %00 von $C000-$FFFF.


    Die Bits 1 - 3 von $D018 bestimmen im Textmodus den zu verwendenen Charset (immer $0800 Bytes lang). Also z.B. von $0000-$07FF, $0800-$0FFF (1000-17FF und 1800-1FFF geht wieder nicht..kann VIC ja nicht. ABER, wenn du das als Charset anwählst, bekommst du eben den ROM-CHARSET, den du defaultmässig hast).


    Im Bitmapmodus spielt bloss Bit 3 eine Rolle für die Position der Bitmap ($2000 Bytes lang). Entweder von $0000-$1FFFF (nicht zu empfehlen) oder $2000-$3FFF (besser). Dann wird der Platz für zusätzlich Sprites aber sehr knapp (nur so zwisch $0800-$0FFF, da ja das VideoRam gewöhlich auf $0400-$07FF liegt und drunter ja noch die ZeroPage, Stack und andere Systemdinge liegen).
    Da macht es meist Sinn, Die VIC BANK von vorneherein auf $4000-$7FFF zu legen und quasi alle Speicherbereiche um $4000 nach hinten zu verschieben).


    Dann noch $D016:
    Bits 0-2 sind (wie bei $D011) diesmal für Horizontale Verschiebung um 0 - 7 Pixel.
    Bit 3 : Bildschirmbreite auf 40 oder 38 Zeichen
    Bit 4 : Singlecolor oder Multicolor



    Das wars erstmal .... :)

  • hallo roland, vielen dank für deine mühe.


    wennn ich die vicbank ab $4000 verlege, wieviel basicspeicher habe ich noch frei?


    kann das videoram dann gleich ab $4000 gesetzt werden? vorher fing es ja bei 0400 an und nicht bei 0, oder muss es hier auch wieder bei $4000+$0400 anfangen?


    bei der bitmap muss das bit 3 gesetzt werden , wenn diese bei $4000+$2000 anfangen soll?


    was kann ich mit dem speicher machen, der dann zwischen $4400 und $5fff liegt, oder ist der speicher garnicht frei, weil ja optisch der bildschirm auch wieder 8000byte brauch um die buchstaben darzustellen?


    mfg peter

  • Basicspeicher hast Du von $0800 bis $4000 frei, wenn Du das Basic-Ende nach $4000 legst. In den Bereich musst Du dann Programm und alle Variablen quetschen. Alternativ kann man aber auch noch was tricksen: Nicht das Basic-Ende nach $4000 verschieben, sondern das Programmende hinter deine Grafikdaten! Dann hast Du bis $4000 Platz fürs Basicprogramm und dann von der Grafik bis $a000 für die Variablen.
    Der Bereich zwischen $4400 und $6000 wäre frei, da frisst der VIC nichts weg, nur weil Bitmap eingeschaltet ist. Videoram und Bitmap darfst Du schieben, wie Du magst, hauptsache, alles in der gleichen 16KB-VIC-Bank.


    Aber wenn Du schon die Grafik rumschiebst: Die kannst Du auch prima unter dem ROM unterbringen: Screen ab $c000, Bitmap ab $e000. Da musst Du zwar hinkopieren, aber der Basic-Speicher bleibt frei. Oder wenn's denn im Basic-RAM sein soll: Bitmap ab $4000, Screen ab $6000 bis $6400.


    Ach, und da war ja letztens die Frage, wie Du eine Grafik-Datei am besten mit ins Programm einbinden kannst, finde das aber nicht mehr:
    Am besten im Koala-Format abspeichern und zum PC transferieren. Der !Bin vom Acme kann eine bestimmte Anzahl Bytes laden und auch überspringen.

    Code
    1. *=$4000
    2. ba_bitmap !bin "filename",8000,2
    3. *=$6000
    4. ba_screen !bin "filename",1000,8002
    5. *=$6400
    6. ba_color !bin "filename",1000,9002
    7. *=$63ff
    8. b_hintergrund !bin "filename",1,10002
  • von $4400 - $6000 könnte ich dann meinen asm-code reinbringen und die 2. bitmap könnte ich dann von $c000 - $dfff machen, richtig.


    von $4000-$4400 liegt dann der videoram und von $0800 - 3fff läge dann der basicspeicher???


    da der videobereich jetzt bei $4000-$4400 liegt könnte ja der basic bereich jetzt ab $0400 anfangen, weil ja da nicht mehr der videobereich liegt und nicht mehr bei $0800 oder?


    mfg peter

  • hallo hoogo, dein vorschlag mit dem koalabild ist klasse. ich hatte dieses bildformat noch nicht so gut eingeschätzt.


    ich fertige die bilder mit ganged an, ist ein sehr gutes tool.


    mfg peter

  • Ein paar Adressen für den Zweck (in Dezimal):
    43/44: Startadesse Basic-Programm, normalerweise 1/8=$0801. Das Byte DAVOR muß 0 sein!
    45/46: Ende des Basic-Programms, Anfang der Variablen-Zeiger.
    55/56: Ende des Basic-Speichers, normalerweise 0/160=$A000.


    Kann sein, daß man anch dem Ändern von den Dingern noch ein NEW braucht, welches noch weitere Pointer korrigiert. Das wurde immer so gesagt, und ich hab's nie geprüft.