PlanetSwitch Planet3DS PlanetVita PSP.de PlanetiPhone Classics Forum Handheld-Wiki

PGN-ID:[?] (Nicht eingeloggt)
Login
Registrieren
PlanetDS PlanetGameboy N-Page.de
portablegaming.de  

Zurück   portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung


Development Abteilung Ihr wollt für euren Lieblingshandheld Spiele oder Tools entwickeln?
Bitte die Präfixe benutzen!

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 06.09.2004, 22:17   #1
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard 8x8 Software Sprite

So jetzt habe ich das Pomi langsam unter Kontrolle, demnächst werden ich mit Tharo ein Tutorial machen, in dem die Programmierung des PM erklärt wird.

Zum Programm, es kann ein 8x8 Sprite mittels der Richtungstasen über den Bildschirm bewegt werden.

Der Hintergrund wird gesichert und erneuert. Das Sprite kann über eine Maske transparente Pixel haben (Siehe ganz unten).

Der VSync geht noch nicht, da der Emulator immer VSync anzeigt? Deshalb habe ich eine Warteschleife eingebaut (Flackert leider machmal wergen fehlenden VSync).

Assembliert muss der Code mit pmas werden, für mindx müssen die Spritedaten in Hex-Zahlen umgewandelt werden.

Code:
;**********************************************
;*                                            *
;* 8x8 Spritetest written by goldmomo         *
;*                                            *
;**********************************************

        ;**** bios
        
.org 0
;.incbin bios.min

        ;**** ram
        
.orgfill 0x1000                         ;vram
.orgfill 0x1800

coo_yx: .db     0                       ;coordinaten
        .db     0
bg_save:                                ;bg buffer
        .db     0,0,0,0,0,0,0,0 
        .db     0,0,0,0,0,0,0,0 

.orgfill 0x2100  
        .db "MN"
.orgfill 0x2102  
        jmp start                       ;start vektor

        ;**** header
                
.orgfill 0x21A4 

        .db "NINTENDO"                  
        .db "TEST"
        .db "TESTTEST"                  
        .orgfill 0x21Bc
        .db "TS"               

        ;**** start
                
.orgfill 0x21D0

start:  mov     sp, $2000               ;set stack
        movw    nn, $2000               ;base

        movb    a,$8
        movb    b,$9                    ;enable0
        movb    l,$1                    ;enable1
        movb    [nn+8],a
        movb    [nn+$80],b
        movb    [nn+$81],l

        
        ;**** kopiere hintergurndbild
        
        movx    hl,0    
        mov     x1,bg_pic
        mov     x2,$1000
        mov     hl,768
        call    copy
        
loop:
        ;**** checke taste (oulr)  
        
        movx    hl,0
        movx    x1,0    
        mov     x1,coo_yx
        movw    ba,[x1]
        mov     hl,ba   
                
        movb    a,[nn+$52]              ;tasten
        testb   a,$20                   ;left
        jnz     not_left
        decb    l                       ;x--
not_left:       
        testb   a,$40                   ;right
        jnz     not_right
        incb    l                       ;x++
not_right:      
        testb   a,$8                    ;up
        jnz     not_up
        decb    h                       ;y--
not_up:         
        testb   a,$10                   ;down
        jnz     not_down
        incb    h                       ;y++
not_down:                                                       
        
        ;**** check pos gegen grenzen
        
        mov     a,l                     ;x min
        test    a,$80
        jz      nl_neg
        mov     l,0
nl_neg: 
                
        cmpb    l,96-8                  ;x max
        jnc     nl_hs   
        mov     l,96-8                  ;ja -> y = 96-8
nl_hs:  
        
        mov     a,h                     ;y min
        test    a,$80
        jz      nh_neg
        mov     h,0
nh_neg: 
                
        cmpb    h,64-8                  ;x max
        jnc     nh_hs   
        mov     h,64-8                  ;ja -> y = 64-8
nh_hs:  
                                
        ;**** save coords
        
        mov     ba,hl                           
        movw    [x1],ba
        
        ;**** clear x von x1,x2,hl
        
        movx    x1,0
        movx    x2,0
        movx    hl,0
        
        ;**** save bg
        
        mov     x1,$1000
        mov     x2,bg_save
        call    bg2buf
        
        ;**** draw sprite
        
        mov     x1,sprite
        mov     x2,$1000
        call    set_sprite
        
        ;**** waste time
        
;wait_v:        
;       test    [nn+$8A],$10    ;dont work
;       jz      wait_v
        
        movx    hl,0
        mov     hl,$fff
        call    b_wait
        
        ;**** redraw bg 
        mov     x1,$1000
        mov     x2,bg_save
        call    buf2bg
        
        jmp     loop    
        
;**********************************************
;*
;* copy 
;*
;* x1 = source
;* x2 = dest
;* hl = length

copy:
        pusha
        
        mov     ba,1
copyb:  
        mov     [x2],[x1]
        inc     x1
        inc     x2
        subw    hl,ba
        jnz     copyb

        popa
        ret

                
;**********************************************
;*
;* b_wait (busy wait)
;*
;* hl = count
;*
b_wait: dec     hl
        jnz     b_wait  
        ret
        
;**********************************************
;*
;* bg2buf (8x16)
;*
;* a = x
;* b = y
;*
;* x1 = gfx
;* x2 = buf     

bg2buf:
        pusha
                        
        ;**** y*96 (ohne mul)
                
        push    ba
        and     b,$f8           ;lösche unteren 3 bit
        xorb    a,a             ;a=0
        mov     h,a             ;h=0
        mov     l,b             ;l=y
        shl     b               ;y*4 (no byte overflow)
        shl     b               ;
        addw    hl,hl           ;y*8 (byte overflow possible)
        addw    hl,hl   
        addw    hl,hl   
        xchgb   a,b             ; y*4
        add     hl,ba           ;+y*8
        add     x1,hl   
        pop     ba
                
        ;**** add x
                
        mov     hl,ba           ;hl = yx
        mov     h,0             ;x = 0
        add     x1,hl
                
        ;**** 

        mov     b,7
bbc:    mov     [x2],[x1]
        inc     x1
        inc     x2
        jdbnz   bbc
                
        add     x1,96-7         ;eigentlich 8?  
        
        ;**** kann bei y%8=0 weggelassen werden
                
        mov     b,7
bbc2:   mov     [x2],[x1]
        inc     x1
        inc     x2
        jdbnz   bbc2
                
        popa    
                
        ret
                
;**********************************************
;*
;* buf2bg (8x16)
;*
;* a = x
;* b = y
;*
;* x1 = gfx
;* x2 = buf     

buf2bg:
        pusha   
                                
        ;**** y*96 (ohne mul)
                
        push    ba
        and     b,$f8           ;lösche unteren 3 bit
        xorb    a,a             ;a=0
        mov     h,a             ;h=0
        mov     l,b             ;l=y
        shl     b               ;y*4 (no byte overflow)
        shl     b               ;
        addw    hl,hl           ;y*8 (byte overflow possible)
        addw    hl,hl   
        addw    hl,hl   
        xchgb   a,b             ; y*4
        add     hl,ba           ;+y*8
        add     x1,hl   
        pop     ba
                
        ;**** add x
                
        mov     hl,ba           ;hl = yx
        mov     h,0             ;x = 0
        add     x1,hl
                
        ;**** 
        
        mov     b,7
nbc:    mov     [x1],[x2]
        inc     x1
        inc     x2
        jdbnz   nbc
                
        add     x1,96-7         
                
        mov     b,7
nbc2:   mov     [x1],[x2]
        inc     x1
        inc     x2
        jdbnz   nbc2
                
        popa
                        
        ret
goldmomo ist offline   Mit Zitat antworten
Sponsored Links
Alt 06.09.2004, 22:18   #2
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard RE: 8x8 Software Sprite

hier der Rest

Code:
;**********************************************
;*
;* set sprite (8x8)
;*
;* a = x
;* b = y
;*
;* x1 = sprite
;* sprite_msk = sprite+8
;* x2 = gfx
;*              
set_sprite:
        pusha                   ;save n
                                
        ;**** y*96 (ohne mul)
                
        push    ba
        and     b,$f8           ;lösche unteren 3 bit
        xorb    a,a             ;a=0
        mov     h,a             ;h=0
        mov     l,b             ;l=y
        shl     b               ;y*4 (no byte overflow)
        shl     b               ;
        addw    hl,hl           ;y*8 (byte overflow possible)
        addw    hl,hl   
        addw    hl,hl   
        xchgb   a,b             ; y*4
        add     hl,ba           ;+y*8
        add     x2,hl   

        pop     ba
                
        ;**** add x
                
        mov     hl,ba           ;hl = yx
        mov     h,0             ;x = 0
        add     x2,hl
                
        ;**** y rest

        movx    hl,0

        xorb    a,a
        pushb   a               ;0 byte on stack (for 3Byte ret)
        and     b,$7            ;b 0..7
        shl     b               ;*2
        shl     b               ;*2
        mov     hl,shifter_end  ;shift end
        xchgb   a,b
        sub     hl,ba           ;set shiftend
        pushw   hl              ;auf stack (für ret)
                        
        ;**** for every v-line  
                        
        mov     nn,$800         ;n=8
vlines:                 
        movb    b,[x1+8]        ;get msk
        movb    a,[x1]          ;get gfx
        and     a,b             ;gfx=gfx&msk
        mov     l,a             ;l=gfx
        xorb    a,a             ;a=0
        xchg    a,b             ;b=msk a=0
        mov     h,b             ;h=0
                
        ;b=h=0  a=msk l=gfx     
                        
        ret                     ;jump (bissl hart :))
                
        addw    ba,ba           ;lets shift left
        addw    hl,hl
        addw    ba,ba
        addw    hl,hl
        addw    ba,ba
        addw    hl,hl
        addw    ba,ba
        addw    hl,hl
        addw    ba,ba
        addw    hl,hl
        addw    ba,ba
        addw    hl,hl
        addw    ba,ba
        addw    hl,hl
        addw    ba,ba
        
shifter_end:    
        
        not     a               ;switch msk
        not     b
                
        andb    a,[x2]          ;a = msk & background -> untern 8 bit
        movx    hl,a            ;save mask in Xhl
                
        mov     a,b             
        andb    a,[x2+96]       ;a <= msk & background -> oberen 8 bit
        mov     b,h             ;backgoundmasked | spritegfx
        orb     a,b
        movb    [x2+96],a       
                                
        movx    a,hl            ;get  backgoundmasked 
        mov     b,l             ;get spritegfx
        orb     a,b             ;or it
        movb    [x2],a          ;save
                
        inc     x2
        inc     x1
        sub     sp,3            ;correct shift jump
                
        dec     n
        cmp     n,0
        jnz     vlines
                
        add     sp,3            ;no jump 
        popa            
        ret     
                                                        
sprite:         .db     0b00111000 
                .db     0b01111100
                .db     0b11101110
                .db     0b11000110
                .db     0b11101110
                .db     0b01111100
                .db     0b00111000
                .db     0b00000000
                
sprite_msk:     .db     0b00111000 
                .db     0b01111100
                .db     0b11111110
                .db     0b11111110
                .db     0b11111110
                .db     0b01111100
                .db     0b00111000
                .db     0b00000000
                                
bg_pic:         .incbin bild.raw
Miniaturansicht angehängter Grafiken
8x8 Software Sprite-pomi1.gif  
goldmomo ist offline   Mit Zitat antworten
Alt 06.09.2004, 22:36   #3
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard RE: 8x8 Software Sprite

Hier der ROM.
Läuft nur unter mindestens Version v0.6.2 des PokeKaMini Debuggers ( http://jb.shizzle.it/ ). PokeMini kann den ROM nicht fehlerfrei ausführen, bei gelegenheit wird justburn (Programmierer von Poke(Ka)Mini) sicherlich auch diesen erweitern.
Angehängte Dateien
Dateityp: zip rom5.zip (902 Bytes, 64x aufgerufen)
goldmomo ist offline   Mit Zitat antworten
Alt 06.09.2004, 22:38   #4
ehem. Teammitglied
 
Benutzerbild von Tharo
 
Registriert seit: 02.09.2002
Ort: フランクフルト
Spielt gerade: FF7 Remake

Tharo wird schon bald berühmt werdenTharo wird schon bald berühmt werden

Standard

Hmm momo wir sollten uns mal umschauen nach einer möglichkeit pm programmierung auf eine höhere Programmiersprache zu portieren..
__________________
Ney ney ney. So viel Sand und keine Förmchen

Code:
Hey DU! Join uns im PG Discord! https://discord.gg/SVqutfFpTc
Tharo ist offline   Mit Zitat antworten
Alt 07.09.2004, 09:15   #5
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard

Ein Basic oder C-Compiler waeren eine feine Sache, aber das wird nicht so einfach machbar sein. Einen minimalen BASIC - Intepreter koennte man schon bauen, ist aber auch einiges an Arbeit. Bei einen C-Compiler wird sicherlich noch schwieriger, da kenn ich mich ueberhaupt nicht aus, aber ich denk gcc sollte da erweiterbar sein. Ansonsten bleibt noch der schon vorhandene Assembler, ist fuer Anfaenger sicherlich extrem schwierig, fuer Leute die sich mit Assembler etwas auskennen sollte es aber nicht das Problem sein. Habe selbst auch nur einige Stunden gebraucht um damit gut umgehen zu koennen. Mit einem vernuenftigen Tutorial ist aber auch Programmieren die mit C umgehen koennen (sollten wissen was Pointer sind ) ein schneller Umstieg in Pomki-Assembler moeglich, zumal die Pomi-CPU der vernuenftigst zu programmierende 8-Bitter ist den ich kenne (im Vergleich zu 6502 und Z80). Schon aus Performance und Speichergruenden ist Assembler fuers das Pomi zu empfehlen, mit 4Mhz und 4KByte RAM kann man keine grossen Spruenge machen.
goldmomo ist offline   Mit Zitat antworten
Alt 07.09.2004, 10:58   #6
ehem. Teammitglied
 
Benutzerbild von Tharo
 
Registriert seit: 02.09.2002
Ort: フランクフルト
Spielt gerade: FF7 Remake

Tharo wird schon bald berühmt werdenTharo wird schon bald berühmt werden

Standard

In Ordnung, da stimm ich dir zu. In dem Fall würd ich mir von dem Forum hier aber einen ordentlichen ASM Syntax highlighter wünschen.
HURIK ! Seiten Admin !
__________________
Ney ney ney. So viel Sand und keine Förmchen

Code:
Hey DU! Join uns im PG Discord! https://discord.gg/SVqutfFpTc
Tharo ist offline   Mit Zitat antworten
Antwort

  portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Nintendo DS Software in Der Software Pyramide Mugen Spiele (Nintendo DS) 1 15.12.2006 14:43
Mode4 vs. Sprite Vertex Development Abteilung 5 24.07.2003 14:26
Sprite - Character Memory Vertex Development Abteilung 3 19.07.2003 12:04
Kartengröße von 256x256 Tiles in Größe 8x8 ? ProfEich Development Abteilung 19 24.05.2003 19:39
32x32p Sprite bewegen ToruX Development Abteilung 4 22.09.2002 12:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:59 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0
Template-Modifikationen durch TMS
PortableGaming.de © bk 2000 - 2010

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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231