Hallo Besucher, der Thread wurde 1,4k mal aufgerufen und enthält 4 Antworten

letzter Beitrag von super_castle am

koalabild von diskette einladen im asm-programm

  • hallo, habe dieses programm zum bild einlesen, funktioniert auch.
    nun möchte ich damit die koalabilder einladen, bei dien bildern muss ja immer eine relative adresse angeben un die anzahl der bytes, damit man auf die verschiedenen daten zugreift.


    wie kann ich das hier realisieren.
    wo kann ich im asm-diskloader die adressen angeben, damit die richtig an die adresse kommen?


    mfg peter


    !to "multibild.prg",cbm
    * =$c000 ;startadresse


    screenmem = $fb
    blockbasic = $04
    getin = $ffe4


    datenlo =$f7
    datenhi =$f8
    speicherlo =$f9
    speicherhi =$fa


    start


    jsr scrloesche

    ;waehlt den speicher ab $2000 als bitmap
    lda $d018
    ora #%00001000
    sta $d018


    ; schaltet den grafikmodus ein (hi-res, also 320*200*2)
    lda $d011
    ora #%00100000
    sta $d011

    ;schaltet auf Multicolor (160*200*16)
    lda $d016
    ora #%00010000
    sta $d016

    lda #>bild
    sta datenhi
    lda #<bild
    sta datenlo

    lda bildlo
    sta speicherlo
    lda bildhi
    sta speicherhi

    jsr diskette

    lda #>video
    sta datenhi
    lda #<video
    sta datenlo

    lda videolo
    sta speicherlo
    lda videohi
    sta speicherhi

    jsr diskette

    lda #>multi
    sta datenhi
    lda #<multi
    sta datenlo

    lda multilo
    sta speicherlo
    lda multihi
    sta speicherhi

    jsr diskette

    beenden
    jsr getin
    beq beenden

    lda $d011 ; hires-modus aus
    and #%11011111
    sta $d011

    lda $d016 ;Multicolor (160*200*16) aus
    and #%11101111
    sta $d016

    lda $d018 ;speicher ab $2000 als bitmap aus
    and #%11110111
    sta $d018

    jsr scrloesche

    rts

    ;ende

    diskette
    LDA #$00
    JSR $FF90 ; enable/disable KERNAL messages
    LDA fnnumb
    LDX drive
    LDY fn_sec
    JSR $FFBA ; Kernal : Set Logical File Parameters
    LDA fnchars
    LDX datenlo
    LDY datenhi
    JSR $FFBD ; Kernal : Set Filename
    LDA #$00 ; 0 = load
    LDX speicherlo
    LDY speicherhi
    JSR $FFD5 ; Load (to address)
    rts

    scrloesche
    lda #$00
    sta screenmem
    lda #$04
    sta screenmem+1
    ldx #blockbasic
    ldy #$00
    lda #32
    schleife
    sta (screenmem), y
    iny
    bne schleife
    inc screenmem+1
    dex
    bne schleife
    rts

    drive !byte $0a
    fnchars !byte $08
    fnnumb !byte $0F
    fn_sec !byte $00


    bild !tx "bild.prg"
    bildlo !byte $00
    bildhi !byte $20


    video !tx "vide.prg"
    videolo !byte $00
    videohi !byte $04


    multi !tx "colo.prg"
    multilo !byte $00
    multihi !byte $d8

  • Das eingebaute Load kann nur komplette Dateien am Stück einladen. Die Adrese, an der die Daten landen, kann man noch variieren, aber für alles weitere musst Du dann halt Byte für Byte holen und verwursten. So ein Laden von Hand gab's hier aber just dieser Tage.
    Oder Du lädst halt das Bild am Stück woanders hin und schiebst dann mit einer Kopierschleife dorthin, wo es gebraucht wird.

  • Zitat

    Original von super_castle
    dann bleibe ich bei der freiheit und speichere bitmap,$0400 und $d800 jeweils als eine datei ab wie oben. die speichermenge bleibt die gleiche.


    Uh, wie unelegant. Hier ein Vorschlag (aus der Erinnerung, ich hoffe, es ist alles ok):



    Darin sind die beiden Labels sc_texttab und ls_vekta8, zwei (freie) Zeropagevektoren. Die Datei muss bei jsr image bereits geöffnet sein. Eine Error-Abfangroutine müsstest du auch noch einbauen (zumindest die Datei wieder schließen).


    Lässt sich an jedes Multiformat bequem anpassen, Hires ist sowie mit eingeschlossen. Wenn die einzelnen Chunks (die Daten-Bereiche) andere Längen haben, änderst du halt die entsprechenden Werte (8192 statt 8000, 1024 statt 1000 u.ä.)


    Wo ist da die Schwierigkeit?


    Arndt