Hallo Besucher, der Thread wurde 950 mal aufgerufen und enthält 0 Antworten

letzter Beitrag von super_castle am

ein ganged koalabild von disk einlesen

  • habe jetzt gelernt ein koalabild byte für byte einzulesen von diskette in asm in den multicolormodus.


    mir ging es um das format des koalabildes kennenzulernen und deren handhabung und die handhabung der diskbefehle für das dateneinlesen einzelner bytes an bestimmten andressen in asm.
    auch das zuweisen von zahlen zu bestimmten registern habe ich als muster drin.
    natürlich kann man das programm verkürzen mit den laderoutinen, es
    braucht nicht jeder datenbereich eine eigene routine.


    hat länger gedauert, das zu kapieren. eure hilfe war gut.


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


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


    ziel_lo = $f9
    ziel_hi = $fa


    start
    lda #$3f
    sta bild_ende_hi
    lda #$40
    sta bild_ende_lo

    jsr scrloesche
    jsr hires_screen

    LDA #koala_bild_ende-koala_bild
    ldx #<koala_bild
    ldy #>koala_bild
    jsr oeffne_datei

    jsr get_byte
    jsr get_byte

    lda #$00
    sta ziel_lo
    lda #$20
    sta ziel_hi
    ldy #$00
    loop
    jsr $ffb7
    jsr $ffe4
    sta (ziel_lo),y
    inc ziel_lo
    bne noinchi
    inc ziel_hi
    noinchi
    sec
    lda ziel_lo
    sbc bild_ende_lo
    lda ziel_hi
    sbc bild_ende_hi
    bcc loop

    lda #$00
    sta ziel_lo
    lda #$04
    sta ziel_hi
    ldy #$00
    loop1
    jsr $ffb7
    jsr $ffe4
    sta (ziel_lo),y
    inc ziel_lo
    bne noinchi1
    inc ziel_hi
    noinchi1
    sec
    lda ziel_lo
    sbc screen_ende_lo
    lda ziel_hi
    sbc screen_ende_hi
    bcc loop1

    lda #$00
    sta ziel_lo
    lda #$d8
    sta ziel_hi
    ldy #$00
    loop2
    jsr $ffb7
    jsr $ffe4
    sta (ziel_lo),y
    inc ziel_lo
    bne noinchi2
    inc ziel_hi
    noinchi2
    sec
    lda ziel_lo
    sbc color_ende_lo
    lda ziel_hi
    sbc color_ende_hi
    bcc loop2


    jsr $ffb7 ; readst
    jsr $ffe4 ; get
    sta $d021

    lda #$02
    jsr $ffc3 ; close 2
    ldx #$00
    jsr $ffc6

    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


    oeffne_datei
    jsr $ffbd ; setnam
    lda #$02
    ldx #$08
    ldy #$02
    jsr $ffba ; setlfs
    jsr $ffc0 ; open 2,8,2,fname
    bcs error
    ldx #$02
    jsr $ffc6 ; chkin 2
    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


    hires_screen
    ;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
    rts

    get_byte
    jsr $ffb7 ; readst
    jsr $ffe4 ; get
    rts

    error
    rts


    koala_bild
    !text "koala.koa"
    koala_bild_ende


    bild_ende_lo !byte $00
    bild_ende_hi !byte $00


    screen_ende_lo !byte $e8
    screen_ende_hi !byte $07


    color_ende_lo !byte $e8
    color_ende_hi !byte $db