NKC Forum |
Autor | Thema: bewegte Grafik mit GDP64 |
---|---|
hellobomm Lernt noch alles kennen ID # 201 |
Erstellt am 13. Januar 2020 22:31 (#1)
Zitat
PN E-Mail
Ich versuche grad in Assembler (Z80) ein Programm zu schreiben in dem ein Objekt auf dem Bildschirm flackerfrei bewegt wird. Dabei nutze ich zwei der vier Bildschirmseiten der GDP64. Ich schreibe auf die nicht sichtbare und schalte dann um.
Was ich aber nicht hinbringe ist es die nicht sichtbare Seite schnell zu löschen. Der normale Löschbefehl an die GDP löscht immer die gerade sichtbare Leseseite. Hat jemand eventuell ein kurzes Assemblerprogrammlisting das zb. ein quadrat flackerfrei auf dem Bildschirm bewegt? Ah mir wäre da sehr geholfen. Grüße, Alex |
Beiträge: 19 | Mitglied seit: Mai 2019 | IP-Adresse: nicht gespeichert | |
smed Stammgast ID # 114 |
Erstellt am 14. Januar 2020 10:55 (#2)
Zitat
PN E-Mail
Hallo,
(schnelles) loeschen mit der GDP geht durch ueberschreiben mit 'Loeschstift' (0x01). Also mit Loeschstift entweder einfach die komplette Grafik nochmal schreiben, oder falls es sich um eine komplexe Grafik aus vielen Kurzvektoren handelt (zB ein SpaceInvaders Monster), ist es schneller mit einem Block/Cursor (0x0a oder 0x0b) die Grafik zu ueberschreiben, dazu ist ggf die Fontgroesse anzupassen. Beispiele fuer Bewegtes mit der GDP64 gibts auch in den RDK Buechern. Gruss smed ----------------------- NKC'ler seit 1984 (Pause zw. 1988-2017) CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k. NKC - OpenSource since 1983 |
Beiträge: 198 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert | |
hellobomm Lernt noch alles kennen ID # 201 |
Erstellt am 14. Januar 2020 17:08 (#3)
Zitat
PN E-Mail
Hi smed,
perfekt, verstanden. Das probier ich gleich mal aus Verwendest du das Vertical Blank Signal der GDP? Das ist Bit 1 des Statusregisters. Oder brauchst du das gar nicht? Die Grafik deines Spaceinvaders sieht saugut und flüssig aus! Grüße und danke nochmal für die Tips! Alex |
Beiträge: 19 | Mitglied seit: Mai 2019 | IP-Adresse: nicht gespeichert | |
smed Stammgast ID # 114 |
Erstellt am 14. Januar 2020 20:48 (#4)
Zitat
PN E-Mail
Hi,
das VSYNC bit (siehe auch @SYNC im GP) kann man als 20ms Timer verwenden und damit die Seitenumschaltung synchronisieren um Flickereffekte zu vermeiden. Man verlangsamt damit allerding uU das gesamte Program. Bei SpaceInvaders wird das VSYNC nur als Zeitbasis verwandt um Soundsamples in gleichmaessigen Abstaenden auszugeben. Die Feuer-Gerausche bestehen aus mehreren Toenen die alle ~20ms aus einem Ringbuffer an den Soundchip gegeben werden. SpaceInvaders basiert uebrigens auf einer kleinen "NKC GameEngine" fuer Grafik/Sound/Joystick. Die GameEngine kuemmert sich vor allem um die bewegten Grafikelemente, also ggf das Neuzeichnen und Loeschen an der richtigen Stelle und Bildseite, dann kann man sich beim proogrammieren auf das eigentliche Game konzentrieren. Hast du einen Z80 C (cross) Compiler? Dann koenntest du eine Z80 Portierung versuchen, sollte nicht zu kompilziert sein, ich benutze keine C libraries. Wenn du was zum Laufen kriegts bitte zeigen ! Willst du ein Spiel programmieren? Gruss smed ----------------------- NKC'ler seit 1984 (Pause zw. 1988-2017) CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k. NKC - OpenSource since 1983 |
Beiträge: 198 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert | |
hellobomm Lernt noch alles kennen ID # 201 |
Erstellt am 15. Januar 2020 21:01 (#5)
Zitat
PN E-Mail
Hi smed,
ich bin da super spartanisch unterwegs mit dem EZASS 2.0 der eine echte Qual ist. Mit kleinen Routinen kann ich zumindest Code einfügen aber lustig ist das nicht. Wäre schon cool wenn man auf dem PC den Code schreiben könnte und dann z.B. übder die CAS-NEO dann in den NKC überträgt. So versuch ich grad das Mondlandeprogramm nachzubauen das man in einem der alten Videos sieht. Das war aber mit einem 68000er und nicht mit der Z80. Kein Vergleich zu deinem Spiel natürlich :-) Grüße Alex |
Beiträge: 19 | Mitglied seit: Mai 2019 | IP-Adresse: nicht gespeichert | |
smed Stammgast ID # 114 |
Erstellt am 16. Januar 2020 09:15 (#6)
Zitat
PN E-Mail
Hi,
ich habe gcc 8.2 als 68k C cross compiler auf dem Windows PC und Sublime Text als Texteditor, damit macht NKC programmierung wieder richtig Spass. SpaceInvaders source ist komplett C, keine einzige Zeile Assembler code. Der gcc compiler ist ganz rudimentaer konfiguriert, ohne Support fuer die standart C libraries, floating point, ELF etc. Als output gibt es dann ein ganz einfaches relokatives binary ohne jeglichen esoterischen overhead. Das laesst sich auch gut dis-assemblieren und anschauen was manchmal ganz interessant ist und sehr nah (und manchmal sogar 'besser') als "Handassembler" ist. Ich benutze C also eher als grossen 'Makroassembler', das reicht mir voellig fuer ein paar sehr hardwarenahe Games. Zum NKC uebertragen und gestartet wird das binary automatisch per USB/Arduino...von so einem setup habe ich 35 Jahre getrauemt und letztendlich (dem Internet sei Dank) in ein paar Wochen von Null hinbekommen. Schau dir mal den Z80 cross compiler SDCC an http://sdcc.sourceforge.net/ ich denke mal damit liesse sich so ein setup wie ich es fuer den 68k habe auch fuer den Z80 machen. Waere ja super das SpaceInvaders auch fuer den Z80 zu kompilieren, und ganz generell etwas fuer das NKC Softwareportfolio zu tun... Gruss smed ----------------------- NKC'ler seit 1984 (Pause zw. 1988-2017) CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k. NKC - OpenSource since 1983 |
Beiträge: 198 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert | |
smed Stammgast ID # 114 |
Erstellt am 16. Januar 2020 19:41 (#7)
Zitat
PN E-Mail
...na, der SDCC Z80 C cross compiler hat mich dann doch noch interessiert. Also schnell mal auf PC installiert. Easy. Dann ein rudimentaeres C Program um die GDP anzusprechen:
Der erzeugte Z80 Assembler code: So compiliert: Die erste Zeile compiliert und erzeugt ein S19 'executable' file ohne den startup code der hier unerwuenschten C runtime libraries. Die zweite Zeile macht aus dem S19 file ein "flat binary". Dazu benutze ich das GNU tool objcopy, das gibts ueberall im Netz. Und hier das binary mit HxD angeschaut, 5 bytes ready for the NKC! Ja, die Z80 CP/M C Compiler Gurus gähnen jetzt , aber es geht hier um Z80 C cross compiler auf PC...und etwas NKC spezifisches (GDP), ich finde das interessanter als ein multi-kB grosses "Hello World" mit dem Speicherfresserferkel 'printf'...und all den C standart libraries, etc. die fuer die meisten NKC Prograemmchen doch irrelevant sind. Gruss smed ----------------------- NKC'ler seit 1984 (Pause zw. 1988-2017) CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k. NKC - OpenSource since 1983 |
Beiträge: 198 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert | |
Steffen.111 Kennt sich schon aus ID # 184 |
Erstellt am 18. Januar 2020 15:58 (#8)
Zitat
PN E-Mail
@hellobomm
...warum überträgst Du nicht mit USB-Stick? ...ist doch einfacher als mit SD-Card! Hast Du Dir mal das GP-2019 angesehen? VG Steffen |
Beiträge: 140 | Mitglied seit: August 2017 | IP-Adresse: nicht gespeichert | |
hellobomm Lernt noch alles kennen ID # 201 |
Erstellt am 23. März 2020 18:39 (#9)
Zitat
PN E-Mail
Jungs, kann mir jemand verraten wie ich in Assembler den Inhalt eines Registers als Dezimalzahl auf der GDP64 ausgeben kann??
Hat jemand ein Codeschnipsel für mich? :-))))) |
Beiträge: 19 | Mitglied seit: Mai 2019 | IP-Adresse: nicht gespeichert | |
smed Stammgast ID # 114 |
Erstellt am 23. März 2020 19:48 (#10)
Zitat
PN E-Mail
Hi,
bist Du ein 68k'ler? Dann zitiere ich Jens' Handbuch des Grundprograms: START: CLR D4 * Zähler SCHLEIFE: LEA BUFFER(PC),A0 * Adresse für Ablage MOVE.B D4,D0 MOVEQ #!PRINT8B,D7 * Zahl ausgeben TRAP #1 LEA BUFFER(PC),A0 * Wieder Adresse laden MOVEQ #$22,D0 * Schriftgröße MOVEQ #2,D1 * X-Position MOVE #128,D2 * Y-Position MOVEQ #!WRITE,D7 * Ausgabe auf den Bildschirm TRAP #1 MOVEQ #2,D0 * 200 ms warten MOVEQ #!DELAY,D7 TRAP #1 ADDQ #1,D4 * Nächste Zahl CMP #256,D4 BNE.S SCHLEIFE * Wiederholen RTS BUFFER: DS.B 10 * eigentlich nur 9 Bytes nötig. Im Z80 Grundprogramm gibts entsprechendes. Gruss smed ----------------------- NKC'ler seit 1984 (Pause zw. 1988-2017) CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k. NKC - OpenSource since 1983 |
Beiträge: 198 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert | |
hellobomm Lernt noch alles kennen ID # 201 |
Erstellt am 23. März 2020 23:14 (#11)
Zitat
PN E-Mail
Hi smed,
danke aber ich bin noch mit der Z80 unterwegs Weißt du wie die Funktion im Z80 Grundprogramm heißt die das macht? Dann kann ich im Listing nachgucken. Ich hab eigentlich schon geschaut Grüße hellobomm |
Beiträge: 19 | Mitglied seit: Mai 2019 | IP-Adresse: nicht gespeichert | |
smed Stammgast ID # 114 |
Erstellt am 24. März 2020 10:32 (#12)
Zitat
PN E-Mail
>Im Z80 Grundprogramm gibts entsprechendes.
Oops, sorry das stimmt ja gar nicht! Da kann ich leider nicht wirklich weiterhelfen, habe nix in Sachen Z80. Dieser link hilft aber weiter: https://www.chibiakumas.com/z80/advanced.php Gruss smed ----------------------- NKC'ler seit 1984 (Pause zw. 1988-2017) CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k. NKC - OpenSource since 1983 |
Beiträge: 198 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert | |
Steffen.111 Kennt sich schon aus ID # 184 |
Erstellt am 24. März 2020 14:25 (#13)
Zitat
PN E-Mail
Doch, ist im GP drin !
Mist, die Formatierung ist dahin auch mit [Code] Ich hoffe Du kommst trotzdem klar! VG Steffen |
Beiträge: 140 | Mitglied seit: August 2017 | IP-Adresse: nicht gespeichert | |
hellobomm Lernt noch alles kennen ID # 201 |
Erstellt am 18. April 2020 20:10 (#14)
Zitat
PN E-Mail
Hi Steffen,
danke!! Aber ich glaub ich brauche doch deine Hilfe. Sieht das Listing formatiert so aus? ld(ix+1),0 wurde nicht akzeptiert. Also hab ich ld a=0, ld(ix+1),a draus gemacht ;Dezimalzahl HL in Buffer schreiben ;Input: hl in hex, IXZeiger Ausgabepuffer ;Output: IXZeigt auf Ende-Kennung prthld: push hl push bc ld bc,-10000 call prthld1 ld bc,-1000 call prthld1 prthld0: ld bc,-100 call prthld1 ld c,-10 call prthld1 ld c,-1 call prthld1 pop bc pop hl ret prthld1: ld a,'0'-1 prthld2: inc a add hl,bc jr c,prthld2 sbc hl,bc RST 10h (was macht denn das?) call zeich (RICHTIG??????) ret ;Ausgabe Zeichen in Accu zeich: ld (ix+0),a; Zeichen in Buffer schreiben zeich1: ld a=0; (geändert damit mein NKC das frisst) ld (ix+1),a; Endekennung in Buffer schreiben inc ix; Pointer erhöhen ret Könntest du mir ein ganz kurzes Beispiel zeigen wie ich z.B. die Zahl "45" mit der "prthld" auf einer Stelle im Bildschirm ausgeben kann? Das wäre super!! Vielen Dank!!!! |
Beiträge: 19 | Mitglied seit: Mai 2019 | IP-Adresse: nicht gespeichert | |
hellobomm Lernt noch alles kennen ID # 201 |
Erstellt am 18. April 2020 22:25 (#15)
Zitat
PN E-Mail
ha!
ich habs hinbekommen. Ich hab das rst10h weggelassen Danke nochmal!!! |
Beiträge: 19 | Mitglied seit: Mai 2019 | IP-Adresse: nicht gespeichert | |
Steffen.111 Kennt sich schon aus ID # 184 |
Erstellt am 19. April 2020 13:30 (#16)
Zitat
PN E-Mail
Hallo Alex,
war leider ein paar Tage nicht hier. "RST 10h" ersetzt bei mir "Call zeich" ld (ix+1),0 übersetzt mein Assi mit: "DD 36 01 00" (Assi: Z80 Simulator IDE) Mit Deiner Lösung geht das Ausgabezeichen verloren, kann aber es sein, dass es hier nicht stört. Ist Mist, dass die Listings deformatiert werden! Oder ich bin zu blöd!? Aber Du hast ja schon was Du wolltest! VG Steffen PS.: Ach so Deine Frage: call getausbuf ;Textbuffer initialisieren -> IX = Pointer LD HL,0045h call prthld ;HL DEZ in Buffer ab IX schreiben ld HL,100 ;=X-Pos ld DE,100 ;=Y-Pos ld A, 21h ;=Schriftgröße call printbu ;gibt Buffer auf BS aus (incl. 0ah etc) |
Beiträge: 140 | Mitglied seit: August 2017 | IP-Adresse: nicht gespeichert |
| https://hschuetz.selfhost.eu | Boardregeln | Datenschutzerklärung
Tritanium Bulletin Board 1.8
© 2010–2021 Tritanium Scripts
Seite in 0,032407 Sekunden erstellt
16 Dateien verarbeitet
gzip Komprimierung eingeschaltet
2497,12 KiB Speichernutzung