Eine Zusammenstellung aller mir bekannten Verfahren, um auf den Bildschirm des PCW zuzugreifen.
- Als Eingabe steht im Register
E die Zeilennummer im Bereich 0..31
- Das Ergebnis der Bildschirmadresse steht im Register
HL
- Alle Routinen müssen im Common-Bereich des Speichers liegen (
C000H-FFFFH )
- Sie werden aufgerufen mit dem bekannten Verfahren über die Funktion
SCR RUN ROUTINE .
Ausnahme: Die Verfahren 09 und Verfahren 10 blendet den Videospeicher direkt über I/O Ports ein und aus.
Gemeinsame Konstanten
ROLLER equ 0b600h
_SCBNK equ 81h ; Bildschirm Speicherbank
_TPBNK equ 85h ; TPA Speicherbank
_SEL1 equ 0f1h ; Auswahl Speicherbank 4000H-7FFFH
_SEL2 equ 0f2h ; Auswahl Speicherbank 8000H-BFFFH
LOWBITS equ 00000111b
HIGBITS equ 11111000b
UPPBITS equ 11110000b
Verfahren 1
:
(Von Cliff Lawson, 1986 Amstrad)
Verfahren01:
ld h,0
ld l,e ; Hl=Zeilennummmer
add hl,hl ; Hl=2*e
add hl,hl ; Hl=4*e
add hl,hl ; Hl=8*e
add hl,hl ; Hl=16*e
ld de,ROLLER
add hl,de ; Hl=ROLLER+16*Zeilennummmer
ld e,(hl)
inc hl
ld d,(hl) ; De=kodierte Adresse
ld a,e ; Untere Bits
ex de,hl ; Hl=kodierte Adresse
add hl,hl ; Hl=(kodierte Adresse)*2
and LOWBITS ; A=untere 3 Bits der original kodierten Adresse
or l ; Kombinieren mit Unteren der doppelt kodierten Adresse
ld l,a ; Nach hl zurueckladen.
ret
Verfahren 2
:
(Eigener Test)
Verfahren02:
ld h,0
ld l,e ; HL=E
add hl,hl ; HL=2*E
add hl,hl ; HL=4*E
add hl,hl ; HL=8*E
add hl,hl ; Hl=16*E
ld bc,ROLLER ; Adresse fuer Roller RAM
add hl,bc ; HL=ROLLER+16*E
ld c,(hl)
inc hl
ld b,(hl) ; BC=Adresse aus Roller RAM
ld a,c
and LOWBITS
ld l,a
ld a,c
rla
ld c,a
ld a,b
rla
ld h,a
ld a,c
and UPPBITS
or l
ld l,a
ret
Verfahren 3
:
(Eigener Test)
Verfahren03:
ld h,0
ld l,e ; HL=Zeile
add hl,hl
add hl,hl
add hl,hl
add hl,hl ; Zeile = Zeile * 16
ex de,hl
ld iy,ROLLER
add iy,de ; Rolleradresse = $B600 + Zeile in IY
ld l,(iy+0)
ld h,(iy+1) ; Inhalt der Rolleradr. in HL
add hl,hl ; ... * 2
ret
Verfahren 4
:
(Aus dem Artikel Superscript)
Verfahren04:
ld a,e ; Reihe
ld d,0
rlca ; reihe * 16
rla
rla
rla
ld l,a
ld a,d
adc a,HIGH ROLLER
ld h,a ; hl = b600+Reihe*16
ld a,(hl) ; Wert aus Roller-RAM
inc hl
ld h,(hl)
ld l,a
add hl,hl ; * 2 = Screenadresse
ret
Verfahren 5
:
(Aus dem Artikel Screeny)
Verfahren05:
ld a,e
rlca ; reihe * 8
rla
rla
ld e,a
and LOWBITS
ld c,a
ld d,0
ex de,hl
add hl,hl
ld a,h
add a,HIGH ROLLER
ld h,a
ld e,(hl)
inc hl
ld d,(hl)
ex de,hl
add hl,hl
ld b,0
or a
sbc hl,bc
ret
Verfahren 6
:
(Aus dem Artikel Die Grafik rollt)
Verfahren06:
ld l,e
ld h,0 ;HL = Zeile
ld de,roller
add hl,hl
add hl,hl
add hl,hl
add hl,hl ;Zeile * 16
add hl,de ;Zeile + rolleradr
ld a,(hl) ;HL = Rolleradresse der Zeile
inc hl
ld h,(hl)
ld l,a ;Inhalt vom RollerRam in HL
add hl,hl ;...* 2
ret
Verfahren 7
:
(Aus den Artikeln Drawing Package,
Plot Routine und
Surfaces)
Verfahren07:
ld l,e
ld h,0
add hl,hl ; Mal zwei
add hl,hl
add hl,hl
add hl,hl
ld de,ROLLER
add hl,de ; Position in Roller RAM
ld e,(hl) ; Eintrag aus Roller laden
inc hl
ld d,(hl)
ld a,e ; Echte Adresse berechnen
and HIGBITS
sla a
rl d
ld b,a
ld a,e
and LOWBITS
or b
ld e,a
ex de,hl
ret
Verfahren 8
:
(Aus dem Artikel Turbo-Grafik für den JOYCE)
Verfahren08:
ld h,0
ld l,e
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ld bc,ROLLER
add hl,bc
ld c,(hl)
inc hl
ld b,(hl)
ld a,c
and HIGBITS
ld l,a
ld h,b
add hl,hl
add hl,de
ld a,l
and HIGBITS
ld l,a
ld a,c
and LOWBITS
or l
ld l,a
ret
Verfahren 9
:
(Aus dem Artikel Spirographix)
Verfahren09:
ld l,e ; Zeile laden
ld h,0
add hl,hl ; *16
add hl,hl
add hl,hl
add hl,hl
ld de,ROLLER
add hl,de ; Position im Roller RAM
call RollAddr ; Adresse der aktuellen Zeile
ex de,hl
ld a,l
and LOWBITS ; Bits maskieren
ld e,a
add hl,hl
ld a,l
and HIGBITS
or e
ld l,a
ret
RollAddr:
di
ld a,_SCBNK2
out (_SEL2),a ; Bank fuer Bildschirm einstellen
ld e,(hl)
inc hl
ld d,(hl)
ld a,_TPBNK2
out (_SEL2),a ; Bank fuer TPA einstellen
ei
ret
Verfahren 10
:
(Aus dem Artikel Plot, Draw and Circle Routine)
Verfahren10:
ld l,e ; Zeile laden
ld h,0
add hl,hl ; *8
add hl,hl
add hl,hl
di
ld a,_SCBNK
out (_SEL1),a ; Bank fuer Bildschirm einstellen
inc a
out (_SEL2),a
add hl,hl
ld de,ROLLER
add hl,de ; Position im Roller RAM
ld e,(hl) ; Adresse der aktuellen Zeile laden
inc hl
ld d,(hl)
ex de,hl
ld a,l
and LOWBITS ; Bits maskieren
ld e,a
add hl,hl
ld a,l
and UPPBITS
or e
ld l,a
ld a,_TPBNK
out (_SEL1),a ; Auf TPA Bank zurueckstellen
inc a
out (_SEL2),a
ei
ret
Verfahren 11
:
(Aus BasiCode)
Verfahren11:
ld a,e
and LOWBITS ; Bits extrahieren
ld d,0
ex de,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ld a,h
add a,HIGH ROLLER ; Zeiger in das Roller RAM
ld h,a
ld e,(hl)
inc hl
ld d,(hl)
ex de,hl
add hl,hl
ret
|