NKC Forum |
Author | Topic: bewegte Grafik mit GDP64 |
---|---|
hellobomm Lernt noch alles kennen ID # 201 |
Posted on January 13, 2020 10:31 PM (#1)
Quote
PM 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 |
Posts: 19 | Member since: May 2019 | IP address: not saved | |
smed Stammgast ID # 114 |
Posted on January 14, 2020 10:55 AM (#2)
Quote
PM 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 |
Posts: 198 | Member since: January 2011 | IP address: not saved | |
hellobomm Lernt noch alles kennen ID # 201 |
Posted on January 14, 2020 05:08 PM (#3)
Quote
PM 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 |
Posts: 19 | Member since: May 2019 | IP address: not saved | |
smed Stammgast ID # 114 |
Posted on January 14, 2020 08:48 PM (#4)
Quote
PM 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 |
Posts: 198 | Member since: January 2011 | IP address: not saved | |
hellobomm Lernt noch alles kennen ID # 201 |
Posted on January 15, 2020 09:01 PM (#5)
Quote
PM 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 |
Posts: 19 | Member since: May 2019 | IP address: not saved | |
smed Stammgast ID # 114 |
Posted on January 16, 2020 09:15 AM (#6)
Quote
PM 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 |
Posts: 198 | Member since: January 2011 | IP address: not saved | |
smed Stammgast ID # 114 |
Posted on January 16, 2020 07:41 PM (#7)
Quote
PM 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 |
Posts: 198 | Member since: January 2011 | IP address: not saved | |
Steffen.111 Kennt sich schon aus ID # 184 |
Posted on January 18, 2020 03:58 PM (#8)
Quote
PM 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 |
Posts: 140 | Member since: August 2017 | IP address: not saved | |
hellobomm Lernt noch alles kennen ID # 201 |
Posted on March 23, 2020 06:39 PM (#9)
Quote
PM 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? :-))))) |
Posts: 19 | Member since: May 2019 | IP address: not saved | |
smed Stammgast ID # 114 |
Posted on March 23, 2020 07:48 PM (#10)
Quote
PM 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 |
Posts: 198 | Member since: January 2011 | IP address: not saved | |
hellobomm Lernt noch alles kennen ID # 201 |
Posted on March 23, 2020 11:14 PM (#11)
Quote
PM 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 |
Posts: 19 | Member since: May 2019 | IP address: not saved | |
smed Stammgast ID # 114 |
Posted on March 24, 2020 10:32 AM (#12)
Quote
PM 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 |
Posts: 198 | Member since: January 2011 | IP address: not saved | |
Steffen.111 Kennt sich schon aus ID # 184 |
Posted on March 24, 2020 02:25 PM (#13)
Quote
PM E-mail
Doch, ist im GP drin !
Mist, die Formatierung ist dahin auch mit [Code] Ich hoffe Du kommst trotzdem klar! VG Steffen |
Posts: 140 | Member since: August 2017 | IP address: not saved | |
hellobomm Lernt noch alles kennen ID # 201 |
Posted on April 18, 2020 08:10 PM (#14)
Quote
PM 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!!!! |
Posts: 19 | Member since: May 2019 | IP address: not saved | |
hellobomm Lernt noch alles kennen ID # 201 |
Posted on April 18, 2020 10:25 PM (#15)
Quote
PM E-mail
ha!
ich habs hinbekommen. Ich hab das rst10h weggelassen Danke nochmal!!! |
Posts: 19 | Member since: May 2019 | IP address: not saved | |
Steffen.111 Kennt sich schon aus ID # 184 |
Posted on April 19, 2020 01:30 PM (#16)
Quote
PM 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) |
Posts: 140 | Member since: August 2017 | IP address: not saved |
| https://hschuetz.selfhost.eu | Board rules | Privacy policy
Tritanium Bulletin Board 1.8
© 2010–2021 Tritanium Scripts
Site created in 0.034147 seconds
Processed 17 files
gzip compression enabled
2770.66 KiB memory usage