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