Z80 – Plotroutine (Monochrom)
Die hier gezeigte Routine wurde für den VDC MC6847 entwickelt. Und dort speziell für die Auflösung 256 x 192 Pixel mit zwei Farben. Die Routine funktioniert natürlich auch mit den geringeren Auflösungen. Allerdings nur in den monochromen Grafikmodi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
; Testpixel ld a,0x10 ld (var_xcord),a ld a,0x20 ld (var_ycord),a call plot halt ; Plotroutine plot: ld a,(var_ycord) ; Y-Koordinate laden ld e,a xor a ld d,a ex de,hl ; y * Zeilenlänge (32) add hl,hl ; x2 add hl,hl ; x4 add hl,hl ; x8 add hl,hl ; x16 add hl,hl ; x32 ex de,hl ; = rel. Zeilenanf.adresse ld a,(var_xcord) ; X-Wert laden push af ; und wieder auf den Stack srl a ; X-Koordinate / 8 srl a srl a add a,e ; + relative Zeilenanfangsadresse ld e,a ld a,d ; + Bildanfangsadresse or 0E0H ; (Das Highbyte des Grafikspeichers ist E000H) ld d,a ; DE = Bildadresse pop af ; X-Koordinate laden ; Ab hier: Pixel finden and 0x07 push af ld a,0x07 pop bc sub b or a ; Wenn x = 255, dann gleich raus jr z, ende ; Ende ohne zu schieben ld b,a ld a,0x01 ; Bit 0 setzen shift: rla ; und schieben djnz shift jr ende2 ende: ld a,0x01 ende2: ld b,a ld a,(de) xor b ld (de),a ret ; X- und Y-Koordinate var_xcord: defb 0 var_ycord: defb 0 |