na dann muss ich mir selber was einfallen lassen
jetzt aender ich das nich mehr ![]()
Beiträge von Haubitze im Thema „farbinformationen besser speichern?“
-
-
ja ich weis Fröhn das kommt dann zum schluss das macht ja waerend der entwiklung noch keinen sinn

somal ich davon ausgehe das garnich mehr alzuviel dazukommt ich schaetze ich werd so bei 20kb+-2kb rauskomm.
-
oh hab ich ganz vergessen, mit mc71s pseudo code bin ich ans ziehl gekommen, laeuft einwand frei
ind reicht meinen anspruechen. zZ verbraucht mein ganzez prg mir allen zusatz daten und routinen
17kb da koennte man sicher noch mehr rausholen aber das waere dann doch zu viel des guten.ich denke die restlichen 43kb sollten fuer den rest dann auch noch reichen.
also ich bedanke mich bei allen beteiligten, fuer mich is das thema damit erstmal erledigt.
salute
-
hehe danke mc71, ja hab das schon mitbekomm das der auch etwas langsam ist, war aber auch mal ne nette uebung.
werd deinen pseudocode mal umsetzen und schaun ob ich den verwenden kann

salute
-
es kommt ja auch auf den screen an, wenn im colorspeicher folgen wie
$0f,0f,$0f,0f,$0f,0f,$0f,0f,$0f,0f,$0f,0f,... stehen
dann cruncht man die zu $ff,ff,ff,ff,ff,ff,ff,...
diese koennte man dann weiter crunchen mit bspw rlenormal sollten da ja nich soviele moeglichkeiten zu stande kommen
so das sich der rle nich aufblaeht. -
recht hast du M.J. hab das geaendert und nun laeufts auch wie gewuenscht.
danke und schluss nun hier

salute
-
hm irgenwie geht das nich ...
naja ich hab das jetzt auf selfmod code umgestellt da ich ah in der ZP bin,
und da ja (zp),y wrapt dachte ich mir das das besser waer.nun muss ich ja aber die zeiger immer updaten und da hab ich mal wider ein problem mit dem colorspeicher.
wann muss ich den denn updaten, eigendlich aller 2 durchlaeufe aber das will irgenwie nich.
koenntet ihr mir bitte nochmal auf die spruenge helfen.
salute
-
wow aufstehen und losk.. aeh loscoden und schon isses erledigt

hab die tips von Hexworx mit umgesetzt, danke dafuer
Code
Alles anzeigencursor_row = $d3 cursor_column = $d6 colorcode = $0286 colorram_ptr = $f3 lineaddr_ptr = $d1 screenadd = $0288 txt_tmp = $4b ;2bytes for free use int_tmp = $7 ;2 byte for free use flp1_tmp = $57 ;4bytes for free use flp2_tmp = $5c ;4bytes for free use zpfb = $fb zpfc = $fc zpfd = $fd zpfe = $fe !cpu 6502 ;== Basic Start == *= $0801 ; basic start !byte <init,>init;$0e,$08 ; zeiger zur naechsten basic zeile !byte $00,$00 ; zeilen nummer low-high-byte !byte $9e ; token fuer SYS !pet " 2064:" ; die adresse und ein doppelpunkt !byte $a2 ; token fuer NEW !byte $00 ; zeilen ende !byte $00,$00 init: ldy #4 ldx #8 clc jsr locate ldx #15 stx msg_lenght ldx #<text ldy #>text stx zpfb sty zpfc ldx #<textc ldy #>textc stx zpfd sty zpfe jsr print_line ldy #7 ldx #1 clc jsr locate jsr print_line rts text: !scr "hallo welt. bla " textc: !byte $01,$23,$45,$67,$89,$ab,$cd,$ef ;*************************************************** print_line: ldy #0 ;laenge holen loop: cpy msg_lenght ;am ende? beq ende ;ja sty print_line_offs ;nein, dann zwischenspeichern tya ;lenght nach akku lsr ; und durch 2 teilen sta print_line_coloroffs ;in coloroffset speichern lda print_line_offs ;laenge holen and #1 ;ungerade? sta print_line_flag ;speichern ldy print_line_coloroffs ;color offset holen lda (zpfd),y;color holen bit print_line_flag; teste auf ungerade bne + ;ja dann low nibble speichern lsr ;nein dann high nibble isolieren lsr lsr lsr + sta colorcode ;speichern ldy print_line_offs ;laenge holen lda (zpfb),y ;zeichen holen jsr put_char ;zeichen ausgeben iny ;laenge decrementieren bne loop ;nicht fertig dann weiter ende: rts print_line_flag: !byte 0 print_line_offs: !byte 0 print_line_coloroffs: !byte 0 ;*************************************************************** ; prints a character on current cursor position ; and updates the position ;*************************************************************** ; parameters: a = character ;*************************************************************** put_char: stx pc_tmp sty pc_tmp+1 ldy #$00 sta (lineaddr_ptr),y lda colorcode sta (colorram_ptr),y ldx cursor_column ldy cursor_row inx cpx #41 bne pc_end: ldx #0 iny pc_end: clc jsr locate: ldy pc_tmp+1 ldx pc_tmp rts pc_tmp: !byte 0,0 ;*************************************************************** ; set or get the current cursor position ;*************************************************************** ; parameters: carry 0 = set cursor position ; x = x position ; y = y position ; carry 1 = get cursor position ; x = x position ; y = y position ;*************************************************************** locate: bcc locate_set: locate_get: ldy cursor_row ldx cursor_column rts locate_set: sty cursor_row stx cursor_column lda screenposy_low,y clc adc screenposx,x sta lineaddr_ptr lda screenposy_high,y adc screenadd sta lineaddr_ptr+1 lda screenposy_low,y clc adc screenposx,x sta colorram_ptr lda screenposy_high,y adc #$d8 sta colorram_ptr+1 rts screenposx: !byte 0,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,6,37,38,39 screenposy_low: !byte $00,$28,$50,$78,$a0,$c8,$f0,$18,$40,$68,$90,$b8,$e0,$08,$30,$58,$80,$a8,$d0,$f8,$20,$48,$70,$98,$c0,$e8 screenposy_high: !byte $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$02,$02,$02,$02,$02,$02,$02,$03,$03,$03,$03,$03,$03
somit waere diese baustelle fuer mich erstmal erledigt.
ich bedanke mich bei allen beteiligten.salute
-
hm also soweit ich das feststelle sind locate und put_char wohl in ordnung also muss der hund wo anders
begraben sein... nur hab ich da heute echt keinen blick mehr fuer
gute nacht und winke
-
hm ja hm aha
ich hab mir den code eben wieder zerschossen beim versuch ihn in mein project zu integrieren.glaub ich brauch ne pause ich seh nur noch "lda sta"'s.
werd mich morgen noch mal dran machen,
anbei mal ein kaputter code den ich versuch zum laufen zu bekomm.Code
Alles anzeigen; 10 SYS2064 *=$0801 BYTE $0A, $C0, $0A, $00, $9E, $32, $30, $36, $34, $00, $00, $00 cursor_row = $d3 cursor_column = $d6 colorcode = $0286 colorram_ptr = $f3 lineaddr_ptr = $d1 screenadd = $0288 txt_tmp = $4b ;2bytes for free use int_tmp = $7 ;2 byte for free use flp1_tmp = $57 ;4bytes for free use flp2_tmp = $5c ;4bytes for free use zpfb = $fb zpfc = $fc zpfd = $fd zpfe = $fe msg_ptr = $fb msg_color_ptr = $fd *=$0810 lda #$04 sta screenadd ldy #0 ldx #0 clc jsr locate: ldx #8 stx msg_lenght: ldx #<msg: ldy #>msg: stx msg_ptr: sty msg_ptr:+1 ldx #<msgc: ldy #>msgc: stx msg_color_ptr: sty msg_color_ptr:+1 jsr print_line: ldy #7 ldx #10 clc jsr locate: lda #01 sta colorcode lda #$20+128 jsr put_char: rts ;*************************************************** print_line: ldy msg_lenght: ;laenge holen loop: sty offs: ;und zwischenspeichern tya lsr sta coloroffs: ;in coloroffset speichern lda offs: ;laenge holen and #1 ;ungerade? beq high: ;ja dann low nibble ausgeben bne low: ;nein dann high nibble ausgeben high: ldy coloroffs: ;color offset holen lda (msg_color_ptr),y;color holen lsr ;und high nibble isolieren lsr lsr lsr sta colorcode ;speichern ldy offs: ;laenge holen lda (msg_ptr),y ;zeichen holen jsr put_char: dey ;decrementieren bpl loop: ;nicht fertig dann weiter bne ende: ;fertig ende low: ldy coloroffs: ;color offset holen lda (msg_color_ptr),y;color holen and #$0f sta colorcode ;low nibble isolieren ldy offs: ;laenge holen lda (msg_ptr),y ;zeichen holen jsr put_char: dey ;decrementieren bpl loop: ;nicht fertig weiter ende: rts ;*************************************************************** ; prints a character on current cursor position ; and updates the position ;*************************************************************** ; parameters: a = character ;*************************************************************** put_char: stx pc_tmp: sty pc_tmp:+1 ldy #$00 sta (lineaddr_ptr),y lda colorcode sta (colorram_ptr),y ldx cursor_column ldy cursor_row inx cpx #41 bne pc_end: ldx #0 iny pc_end: clc jsr locate: ldy pc_tmp:+1 ldx pc_tmp: rts pc_tmp: byte 0,0 ;*************************************************************** ; set or get the current cursor position ;*************************************************************** ; parameters: carry 0 = set cursor position ; x = x position ; y = y position ; carry 1 = get cursor position ; x = x position ; y = y position ;*************************************************************** locate: bcc locate_set: locate_get: ldy cursor_row ldx cursor_column rts locate_set: sty cursor_row stx cursor_column lda screenposy_low:,y clc adc screenposx:,x sta lineaddr_ptr lda screenposy_high:,y adc screenadd sta lineaddr_ptr+1 lda screenposy_low:,y clc adc screenposx:,x sta colorram_ptr lda screenposy_high:,y adc #$d8 sta colorram_ptr+1 rts screenposx: byte 0,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,6,37,38,39 screenposy_low: byte $00,$28,$50,$78,$a0,$c8,$f0,$18,$40,$68,$90,$b8,$e0,$08,$30,$58,$80,$a8,$d0,$f8,$20,$48,$70,$98,$c0,$e8 screenposy_high: byte $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$02,$02,$02,$02,$02,$02,$02,$03,$03,$03,$03,$03,$03 msg: BYTE $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 msgc: byte $17,$F5,$C4,$29 copy_screen: msg_ptr: byte 0,0 msg_color_ptr: byte 0,0 msg_lenght: byte 0 offs: byte 0 coloroffs: byte 0 -
naja zZ sind das ganze 5 screens evtl kommen noch 1 oder 2 dazu, weis ih noch nich.
dann liegen da noch viele kleinere blockgrafiken rum die auch alle farbe haben, die werden
benutzt um teile des screens zu ueberschreiben.von daher denke ich schon mal 5*1000b gegen 5*500b das es da schon lonenswert ist etwas platz zu sparen

und wiegesagt geschwindigkeit ist bei meinem project nicht so relevant.salute
-
hehe ja Mac Bacon das war ja nur ein beispiel, klar macht das erst bei groesseren strings sinn.
diese sind aber auch vorhanden
hier mal mein grottiger versuch nach rogie67's pseudo code.
Code
Alles anzeigen; 10 SYS (2064) *=$0801 BYTE $0D, $C0, $0A, $00, $9E, $20, $28, $32, $30, $36, $34, $29, $00, $00, $00 *=$0810 ;*=$c000 print_line: ldx lenght: ;laenge holen loop: stx offs: ;und zwischenspeichern lda hallo:,x ;zeichen holen sta $0400,x ;und schreiben txa ;lenght nach akku lsr ; und durch 2 teilen sta coloroffs: ;in coloroffset speichern lda offs: ;laenge holen and #1 ;ungerade? beq high: ;ja dann low nibble ausgeben bne low: ;nein dann high nibble ausgeben high: ldy offs: ;laenge holen ldx coloroffs: ;color offset holen lda colors:,x ;color holen lsr ;und high nibble isolieren lsr lsr lsr sta $d800,y ;speichern ldx offs: ;laenge holen dex ;decrementieren bpl loop: ;nicht fertig dann weiter bne ende: ;fertig ende low: ldy offs: ;laenge holen ldx coloroffs: ;color offset holen lda colors:,x ;color holen and#$0f ;low nibble isolieren sta $d800,y ;speichern ldx offs: ;laenge holen dex ;decrementieren bpl loop: ;nicht fertig weiter ende: rts colors: BYTE $01,$23,$45,$67,$89,$AB,$CD,$EF hallo: BYTE $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 lenght: byte 14 offs: byte 0 coloroffs: byte 0
danke und salutePS:geschwindigkeit ist eigendlich auch garnich so wichtig.
EDIT: fehler gefunden und thema somit erledigt
-
ah sauber rogie67 damit kann ich arbeiten werd ich mal versuchen umzusetzen.
danke dafuer

-
hm klar ich kann j das carry benutzen um zu sagen "denk dran ungerade anzahl zeichen"
wie ich das jetzt aber umsetze weis
ich noch nich, wird wohl aber noch kommen.Bitte melde dich an, um diesen Link zu sehen. gute idee die farbwerte andrsrum zu speichern, werd das mal testen. danke dafuer

Bitte melde dich an, um diesen Link zu sehen.hm ja counter und so werd ich testen, RLE is mir jetzt noch zu aufwendig, hab ja noch mehr
als genur ram zur verfuegung ;Ddanke erstmal
-
okay also wie ich an die nibbles komm is mir klar aber bei einem text der laenge 6 hab ich genau 3 "farbbytes"
was wunderbar klappt aber bei einem text der laenge 5 haette ich ja 2.5 "farbbytes" und hier komm ich nich weiter.
irgendie muss ich ja rausbekomm wieviele farbinformationen ich habe, nur weis ich nicht wie
das problem ist halt das wenn ich bei textlaenge 5, 6 farbbytes schreibe ich ja 1 farbbyte ueberschreibe und
so evtl bestehende grafik/text zerstoere. das mochte ich vermeiden wenn das ueberhaupt geht. -
hallo leute,
ich steh grad bissl aufn schlauch.
ich moechte den bildschirm mit zeichen und farbe fuellen, dazu hab ich mir einen screen im CBM Programm Studion
gemacht. dieses speichert mir die noetigen farb daten aber etwas verschwenderisch.
naehmlich socrunchen kann ich das ja per hand zu sowas hier
aber wie kann ich dann meinen text/blockgrafik ausgeben so das die farben im farbram wie oben stehen?

ein kleiner pseudocode oder einfach nur hn wink mitm
waere nett.danke und salute