Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Programmierung => Thema gestartet von: Devilmarkus am 02. Januar 2020, 14:28:26

Titel: Flipraster
Beitrag von: Devilmarkus am 02. Januar 2020, 14:28:26
Ich hab mal herumgespielt, und eine neue Technik entwickelt, mit der man Raster-Bilder als Flipscreens darstellen kann.
Wer mag, kann ja mal schauen.
Möglichst auf dem echten CPC!!! Die meisten Emulatoren können die Rastergrenzen nicht korrekt darstellen!
Zur Not tuts der JavaCPC, mit dem wurde das entwickelt.

Am Besten sieht es natürlich auf nem guten alten Röhrenmonitor aus, da es mit 25hz flimmert.
Titel: Re: Flipraster
Beitrag von: oobdoo am 02. Januar 2020, 16:46:57
Sieht bei mir im WinCPC genauso aus wie im JavaCPC.
Titel: Re: Flipraster
Beitrag von: HAL6128 am 03. Januar 2020, 21:45:25
Klasse. Einige Bilder sind richtig gut gelungen. Der Porsche oder das Fantasy Bild z.B.. Ist bestimmt gar nicht so einfach, die richtigen Raster-Einstellungen zu finden.
Titel: Re: Flipraster
Beitrag von: Devilmarkus am 04. Januar 2020, 20:28:28
Klasse. Einige Bilder sind richtig gut gelungen. Der Porsche oder das Fantasy Bild z.B.. Ist bestimmt gar nicht so einfach, die richtigen Raster-Einstellungen zu finden.

Hmmm das macht JavaCPC Rasterpaint fast automatisch, ein paar kleine manuelle Anpassungen muss man meistens aber noch vornehmen :)

Hier mal mein aktuellstes Bild:
Da musste ich sehr Viel manuell anpassen, damit es passt, aber der Aufwand lag so ca. bei 20 Minuten.
Titel: Re: Flipraster
Beitrag von: HAL6128 am 05. Januar 2020, 13:04:52
Extrem cool, das Programm!!
Es ist automatisch immer Mode 1? Würden Raster auch in Mode 2 funktionieren?
Würden theoretisch auch Filmsequenzen in Zusammenhang mit z.B. Laden vom M4 Board funktionieren oder sind die Ausgaben dann zu langsam?
Titel: Re: Flipraster
Beitrag von: Devilmarkus am 05. Januar 2020, 18:15:27
Theoretisch würde es in jedem MODE funktionieren, allerdings ist es in MODE 1 schon ein Sau-Aufwand gewesen.
Ich zerschnipple jedes 320x200 Pixel Bild in 8x200 Einzelbilder und rendere diese Bilder dann zu einem Rasterbild
Das klingt einfach, ist aber in der Anwendung wirklich ein wahnsinniger Aufwand.

Du solltest bei dem Catwoman Bild noch mit Gain, Kontrast und Helligkeit spielen, außerdem ruhig die Zellen bearbeiten (Das geht im Zoomview am Besten)
Im nächsten JavaCPC ist die Funktion  dann noch verbessert, da kann man dann für PEN 1 wählen, von welcher Zelle die Farben geerbt werden...

Zoom aktivieren -> Dort mit der rechten Maustaste reinklicken, dann siehst du feine Linien... Mit der linken Maustaste kannst du die Zelle wählen, welche blockiert werden soll, diese übernimmt dann die Farbe für PEN 1 von der vorigen Linie.
Nochmals rechter Mausklick, die Linien sind komplett durchgezogen, damit sperrst du die Linie für PEN 2 und 3.

(Im aktuellen JavaCPC noch nicht so ganz ausgereift, der Code hier funktioniert auch nicht am Plus, aber daran arbeite ich schon)
Titel: Re: Flipraster
Beitrag von: Devilmarkus am 05. Januar 2020, 18:21:53
Nur mal so:

Catwoman - Flipraster ;)

Aufwand: ~5 Minuten
Titel: Re: Flipraster
Beitrag von: TFM am 05. Januar 2020, 19:10:53
Ganz feine Sache! Hier tut der Original-Monitor aber wirklich Not.  :zunge0020: :smiley027:
Titel: Re: Flipraster
Beitrag von: Devilmarkus am 05. Januar 2020, 19:12:45
Na mit der aktuellen Technik sieht es auch auf einem TFT halbwegs manierlich aus.
Die Bilder haben immer nur einen Pixel Unterschied. Das bemerkt man nur wenig.
Titel: Re: Flipraster
Beitrag von: HAL6128 am 07. Januar 2020, 14:18:59
Sieht verdammt gut aus.

Eine Frage zum technischen Hintergrund:
Ein Rasterbild hat 16kb beim jede Zeile acht verschiedene Hintergrundfarben und drei Vordergrund Farben haben kann?
Ein Flipraster ist dann 32kb groß?
Titel: Re: Flipraster
Beitrag von: Devilmarkus am 07. Januar 2020, 14:39:10
Größer sogar:
&2000-&3FFF: Flipscreen / Rastercode + Raster Table
&4000-&7FFF: Screen Data A
&C000-&FFFF: Screen Data B
-------------------------------------

Daraus werden 2 Dateien assembliert:
FILE.BIN -> 25KB
FILE.BI1 -> 17KB
(AMSDOS Größen)

Assemblercode: (Ohne die Screens und den Table)

;-----------------------------------------
; JavaCPC RasterPaint Assembly code
; Authors; Oliver M. Lenz, Markus Hohmann
;-----------------------------------------

org &2000  ; CALL &2000
nolist

; First: Let's detect if we have a Plus machine
ld bc,#F782
ld e,c
out (c),c
dec b
ld c,#0f
out (c),c
inc b
ld a,e
out (c),a
dec b
in a,(c)
cp c
jr z,Plus ; Plus found
or a
jr z,CpcOld ; Old CPC found
Plus
; ASIC Unlock routine
di
ld b,&bc
ld hl,sequence
ld e,17
seq
ld a,(hl)
out (c),a
inc hl
dec e
jr nz,seq
ei

hardwarescroll

ld bc,&7fb8 ; Jump into ASIC RAM
out (c),c
ld a,142 ; Do a hardware scroll to the left
ld (&6804),a
ld bc,&7fa0 ; Jump back into CPC RAM
out (c),c

CpcOld
CPCNew EQU 1 ; Set this to 0 for Older CPC Models.
TableData EQU &3700
di

ld A,0  ; Define Background Color
ld B,26
ld C,26
call &BC32
call &bd19
call &bd19
call &bd19

im 1
ei

newframe:

ld BC,&BC0C
out (C),C ; select CRTC register 12
inc B
ld A,(scradr)
out (C),A
cp &10
jr z,switchto30 ; was &10 (&4000)-> change to &30 (&C000)
ld A,&10 ; was &30 -> change to &10
jp saveA
.switchto30
ld A,&30
.saveA
ld (scradr),A

ld HL,(&0038)
ld (rstsave),HL
ld HL,&C9FB
ld (&0038),HL

ld B,&F5
.waitvsync
in A,(C)
rra
jp nc,waitvsync


halt
halt

di
ld DE,&1702
.waitforstart
dec D
jr nz,waitforstart
dec E
jr nz,waitforstart

IF CPCNew
nop
ENDIF


ld BC,&7F80
ld HL,TableData
ld DE,&0203
ld A,&01
out (C),A  ; select pen 1
inc     B

.nextline
repeat 200
outi ; 5
outi ; 5
outi ; 5
outi ; 5
outi ; 5
outi ; 5
outi ; 5
outi ; 5
; 40

out (C),D  ; 4 ; pen 2
ld B,C  ; 1
outi ; 5
out (C),E  ; 4 ; pen 3
outi ; 5
out (C),A  ; 4 ; pen 1
ld B,C  ; 1
; --
; 64 microseconds
rend

ld HL,(rstsave)
ld (&0038),HL
ei

LD A,&45 ; from &40 to &49 with bdir/bc1=01
LD D,0
LD BC,&F782 ; PPI port A out /C out
OUT (C),C
LD BC,&F40E ; Select Ay reg 14 on ppi port A
OUT (C),C
LD BC,&F6C0 ; This value is an AY index (R14)
OUT (C),C
OUT (C),D ; Validate!! out (c),0
LD BC,&F792 ; PPI port A in/C out
OUT (C),C
DEC B
OUT (C),A ; Send KbdLine on reg 14 AY through ppi port A
LD B,&F4 ; Read ppi port A
IN A,(C) ; e.g. AY R14 (AY port A)
LD BC,&F782 ; PPI port A out / C out
OUT (C),C
DEC B ; Reset PPI Write
OUT (C),D ; out (c),0
bit 7,A
jp nz,newframe
ld BC,&BC0C ; Select CRTC Register 12
out (C),C
LD BC,&BD30 ; Return to screen offset #C000
OUT (C),C
ret

.rstsave
db 0,0

.scradr
db &10
.sequence
defb &ff,&00,&ff,&77,&b3,&51,&a8,&d4,&62,&39,&9c,&46,&2b,&15,&8a,&cd,&ee

;; ------------------------------------------------
DEFS 56



read "file_table.asm"

DEFS 304

read "file_screendata.asm"
read "file2_screendata.asm"

Neu dazu gekommen ist, dass geprüft wird, ob es sich um einen Plus handelt, da dieser im Vergleich zum alten CPC andere Raster-Timings hat.
Ich scrolle im Plus das Bild um 2 MODE 1 Pixel nach links, dann passt es dort auch :)
Eine Spalte in der Breite von einem MODE 2 Pixel bleibt leider, aber mit dem Ergebnis kann man sehr gut leben.
Der Plus hat hier einen ASIC Bug, der leider nicht erlaubt, halbe Pixel zu scrollen.
Bedeutet:
In MODE 1 *muss* man zwei MODE 2 Pixel scrollen, in MODE 0 dann sogar vier MODE 2 Pixel
Titel: Re: Flipraster
Beitrag von: Fessor am 08. Januar 2020, 01:24:00
Ähm... Ja...
Ihr spielt in ner anderen Liga.
Ich war schon froh, den Musikplayer von U4 in den 50Hz-Interrupt bekommen zu haben... ;)
Titel: Re: Flipraster
Beitrag von: Devilmarkus am 08. Januar 2020, 15:34:22
Musik (.PT3) wollte ich eigentlich ursprünglich auch abspielen, in den Raster-Screens, da stürzt aber leider der CPC ab :(

Edit: CPC stürzt nicht ab, aber schafft es dann nicht mehr, das Bild korrekt anzuzeigen, ist wirklich sehr CPU Lastig :(
Titel: Re: Flipraster
Beitrag von: HAL6128 am 15. Januar 2020, 20:47:46
Na mit der aktuellen Technik sieht es auch auf einem TFT halbwegs manierlich aus.
Die Bilder haben immer nur einen Pixel Unterschied. Das bemerkt man nur wenig.
In der Tat. Ich habe heute mir mal die Bilder auf einen realen CPC mit GBS8200 Konverter auf TFT angesehen und muss sagen, dass das Flackern kaum zu bemerken war. Richtig viele Farben in Mode1. Echt klasse!!!
Titel: Re: Flipraster
Beitrag von: Rennert am 15. Januar 2020, 22:14:05
am KC Compact sehe ich die Bilder nur in schwarz/weiß.