home *** CD-ROM | disk | FTP | other *** search
- ;***************************************
- ;Zugriff auf das Screen-Environment
- ; des Joyce
- ;
- ;Funktionsnummern:
- ; 0 = Plot
- ; 1 = GetDotColor
- ; 2 = Byte schreiben
- ; 3 = Byte lesen
- ;
- ;Param.Offset im Array:
- ; 100 = Funktionsnr.
- ; 101 = Byte/Farbe
- ; 102/103 = X-Koord./Adresse
- ; 104/105 = Y-Koord.
- ;
- ;***************************************
- ;IX zeigt auf ArrayStart
- ;
- ld a,(ix+100); Funktionsnr. holen
- ld c,(ix+102); LoByte X/Adr
- ld b,(ix+103); HiByte X/Adr
- cp 2 ; Funktionsnr, testen
- jr c,graph ; -> Grafikfunktion
- jr nz,rdbyte ; -> Byte lesen
- ;
- ;*** Funktion 2: Byte schreiben
- ld a,(ix+101); Byte holen
- ld (bc),a ; und schreiben
- ret
- ;
- ;*** Funktion 3: Byte lesen
- rdbyte ld a,(bc); Byte lesen
- ld (ix+101),a ; und sichern
- ret
- ;
- ;*** Adressberechnung f. Grafik
- graph
- ld a,(ix+104); LoByte y
- and &Hf8 ; maskieren
- ld l,a
- ld h,&H5b ; h = &Hb6/2
- add hl,hl ; hl = y*2 + &Hb600
- ld e,(hl) ; Adresse aus
- inc hl ; RollerRAM lesen
- ld d,(hl)
- ex de,hl ; Adresse nach hl
- add hl,hl ; hl = Start Textzeile
- ld a,(ix+104); LoByte y
- and 7 ; maskieren
- ld e,a ; y-Offset in Zeile
- ld d,0 ; nach de
- add hl,de ; und addieren
- ld a,c ; LoByte x
- and &Hf8 ; maskieren
- ld e,a ; x-Offset in Zeile
- ld d,b ; nach de
- add hl,de ; und addieren
- ;(hl enthaelt Screenadr.)
- ;
- ;*** Bitmaske erzeugen
- ld a,c ; LoByte x
- and 7 ; maskieren
- ld b,a ; Shiftcount nach b
- ld a,&H80
- loop
- rrca ; Akku rechts rotieren
- djnz loop
- ld c,a
- ;(c enthaelt Bitmaske)
- ;
- ld a,(ix+100); Funktionsnr holen
- or a ; und testen
- jr nz,rdcol ; -> Farbe holen
- ;
- ;*** Punkt setzen
- ld b,(ix+101); Farbnummer holen
- rr b ; und ins Carry rot.
- sbc a,a ; Farbmaske erzeugen
- rr b ; Test auf XOR-Modus
- jr c,xormod
- xor (hl) ; mit Screenbyte und
- xormod
- and c ; Bitmaske verknuepfen
- xor (hl)
- ld (hl),a ; und zurueckschreiben
- ret
- ;
- ;*** Punktfarbe holen
- rdcol
- ld a,(hl) ; Screenbyte holen
- and c ; ausmaskieren
- add a,&Hff ; Pixel ins Carry
- ld a,b ; a = b = 0 (wegen djnz)
- rla ; Farbnummer nach a rotieren
- ld (ix+101),a ; und sichern
- ret