NKC Forum
Register | FAQ | Search | Who is online? | Member list | Today's posts | Calendar | Login



Author Topic: NKC Emulator für 68008
andi
Kennt sich schon aus
**
ID # 213


  Posted on February 11, 2024 08:53 PM (#21)  |  Quote Quote   PM PM   E-mail E-mail
Hallo Martin,

hab die eine PN geschickt. Hoffentlich funktioniert das schon (hat eine ganze Weile hier nicht funktioniert).

PS. Ich fürchte ich hab einen weiteren Bug entdeckt. Der 4x4 Block wird nicht richtig gezeichnet.
Schau ich mir demnächst an :-)

LG,
Andreas

Posts: 131 | Member since: May 2021 | IP address: not saved
b377
Lernt noch alles kennen
*
ID # 234


  Posted on February 13, 2024 01:49 PM (#22)  |  Quote Quote   PM PM   E-mail E-mail
Hallo Andi,

hat leider mit der PN nicht geklappt. Kannst mir aber gerne eine E-Mail schreiben (siehe Profil).

-----------------------
Gruß Martin

Posts: 14 | Member since: December 2023 | IP address: not saved
b377
Lernt noch alles kennen
*
ID # 234


  Posted on February 17, 2024 06:31 PM (#23)  |  Quote Quote   PM PM   E-mail E-mail
Hallo smed,

Space Invaders bleibt beim Warten auf den Firebutton hängen. Hier scheint die Logik im C Code invertiert (aktive low) bei der Simulation und bei meinem echten NKC ist dies jedoch aktive high. D.h.: Kein Joystick Input ist 0x00 und Fire ist 0x10.
Ich habe gesehen, das man auch die Tastatur benutzen kann, aber hier scheint das Strobe Signal auch invertiert.
Mit deinem Code:


key = readKey();
key = readKey();
key = key - 128;
if (key == ' ') {joystick = JOYSTICK_FIRE;}

wird der Vergleich bei normalen Strobe nie funktionieren. readKey() liefert bei der Leertaste den Wert 32 (Hex 0x20, Charachter ' '). Durch die Subtraktion von 128 wird dies jedoch hex 0xA0, was beim Vergleich mit ' ' nie identisch wird.

Konnte leider bisher keine angepasste Version Compilieren. Erhalte den Fehler:


a-file.o: in function `DebugPrint.constprop.0':
file.c:(.text+0xb1c): relocation truncated to fit: R_68K_PC16 against `.bss'
file.c:(.text+0xb42): relocation truncated to fit: R_68K_PC16 against `.bss'
a-file.o: in function `DebugPrint.constprop.1':
file.c:(.text+0xb88): relocation truncated to fit: R_68K_PC16 against `.bss'
file.c:(.text+0xc08): relocation truncated to fit: R_68K_PC16 against `.bss'
a-file.o: in function `DebugPrint':
file.c:(.text+0xc66): relocation truncated to fit: R_68K_PC16 against `.bss'
file.c:(.text+0xcee): relocation truncated to fit: R_68K_PC16 against `.bss'
a-file.o: in function `DebugPrintPos':
file.c:(.text+0xd66): relocation truncated to fit: R_68K_PC16 against `.bss'
file.c:(.text+0xd8e): relocation truncated to fit: R_68K_PC16 against `.bss'
a-file.o: in function `initObj':
file.c:(.text+0x182a): relocation truncated to fit: R_68K_PC16 against `.bss'
collect2.exe: error: ld returned 1 exit status


Muss wohl besser verstehen wie der Cross-Compiler funktioniert.

Martin

-----------------------
Gruß Martin

Posts: 14 | Member since: December 2023 | IP address: not saved
smed
Stammgast
**
ID # 114


  Posted on February 18, 2024 11:03 PM (#24)  |  Quote Quote   PM PM   E-mail E-mail
Hallo Martin,
danke fuer die Rueckmeldung. Zum Joystick hatte ich mal diesen Beitrag geschrieben: https://nkc-schuetz.de/forumdrc/index.php?mode=viewthread&forum_id=1&thread=158

Dort im screenshot ist zu sehen das bei meinem NKC/IOE+Atari Joystick tatsächlich die Logik active low ist...

Den compiler error kenne ich, hat mit der Entfernung des Sprungziels zu tun und ließe sich bisher, bei meiner gcc Version, durch verschieben der betreffenden Funktion beheben. Genau deshalb sind auch einige include statements mitten im Quellcode und nicht wie üblich alle am Anfang.

Bei den gcc Versionen von Andi habe ich auch viele dieser Fehler bekommen, soweit ich mich erinnere hat Andi allerdings SpaceInvaders bei sich kompilieren können. Ich werde mal meinen kompletten gcc in Github stellen.

Schau mal ob der Weihnachtsguss von 2018 läuft: https://nkc-schuetz.de/forumdrc/index.php?mode=viewthread&forum_id=4&thread=51&z=1#post1 am Ende des Threads sind der C Quelltext und link zur benutzten gcc version.

Gruss aus München
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: 182 | Member since: January 2011 | IP address: not saved
andi
Kennt sich schon aus
**
ID # 213


  Posted on February 19, 2024 12:59 PM (#25)  |  Quote Quote   PM PM   E-mail E-mail
Hallo,

ich hab SpaceInvaders mal vor einigen Jahren an mein GCC framework angepasst und auch einige updates gemacht damit er auf meinem NKC läuft. Das ganze ist hier eingecheckt: https://github.com/smedde/SpaceInvaders/tree/Changes_Andi

LG,
Andi

Posts: 131 | Member since: May 2021 | IP address: not saved
andi
Kennt sich schon aus
**
ID # 213


  Posted on February 19, 2024 02:32 PM (#26)  |  Quote Quote   PM PM   E-mail E-mail
Hallo,

um meine GCC Programme am Emulator einfach testen zu können bin ich auf der Suche nach einer Möglichkeit diese in den Speicher des emulierten NKCs zu schreiben (z.B. direkt ins Jados Disk Image). Kennt da jemand ein Tool dafür?
Derzeit transferiere ich dieses immer via RS232 (oder TFTP) zu meinem "echten NKC" kopiere es dort auf den Gotek Emulator, zieh dann den USB-Stick von dort ab und kopier mir das Disk-Image von dort dann runter und verwende es für den Emulator. Ist alles ein wenig umständlich...
LG,
Andi

Posts: 131 | Member since: May 2021 | IP address: not saved
b377
Lernt noch alles kennen
*
ID # 234


  Posted on February 19, 2024 08:19 PM (#27)  |  Quote Quote   PM PM   E-mail E-mail
Hallo Andi,

es gibt im Emulator viele Möglichkeiten Dateien zu importieren.

1.) Du konfigurierst deine Binärdatei als ein ROM in der Config.yaml. Du musst dann die genaue Größe der Binärdatei als ROM Größe eintragen (Ich glaube dies ist auch egal, solange die angegebene Größe >= der waren Dateigröße ist). Du solltest auch darauf achten, das die in Nachfolgenden ROM Slots nicht den Speicher deines "ROMs" überschreibst. Ist dein Programm relokativ und hat es einen Bibliotheksheader, (wie bei der Version von smed der Fall), kannst Du es dann direkt im Grundprogramm ausführen. (Bibliotheksfunktion oder auch Starten, wenn Du die Adresse kennst). Möchtest Du die Datei gerne auf einem JADOS Diskettenimage haben, kannst Du dies mit dem Jados Befehl DSAVE erledigen.

2.) Du benutzt CP/M68K und die cpmtools unter Linux. (https://github.com/lipro-cpm4l/cpmtools oder http://www.moria.de/~michael/cpmtools/). Die benötigten Diskdefs für das NKC Format findest Du unter resources/disks.
In dem Verzeichnis mit den Diskdefs kannst Du dann mit folgendem Befehl beliebige Dateien von einem Host Computer auf ein CPM-Image kopieren.
cpmcp --f nkc-68k <DISK_IMAGE> <FILE> 0:.
Von CP/M68K kannst Du dann mit dem Programm LADE.68K die Datei in beliebigen Speicherbereich laden.

3.) Du wartest bis ich meine JADOS-Tools veröffentliche die dann eine ähnliche Funktionalität wie die cpmtools für das JADOS-Format haben. ;) (Kann aber noch etwas dauern).


Habe auch deine Branch der SpaceInvaders gesehen. Kann ihn aber leider nicht kompilieren, da einige Header-Dateien fehlen:


#include "../../nkc_common/nkc/nkc.h"
#include <ndrcomp/target.h>


-----------------------
Gruß Martin

Posts: 14 | Member since: December 2023 | IP address: not saved
andi
Kennt sich schon aus
**
ID # 213


  Posted on February 19, 2024 09:56 PM (#28)  |  Quote Quote   PM PM   E-mail E-mail
Hallo Martin,

danke für die Infos.
Das mit dem ROM-File ist eine gute Idee.
Hab Spaceinvaders bei mir compiliert und am Emulator mal gestartet.

Spielen konnte ich es nicht weil ich am PC keinen Joystic habe.
Die fehlenden .h files kommen von meinem GCC-framework.
Irgendwo muss ich eine Anleitung zum Aufsetzen rum fliegen haben. Die schick ich dir mal zu wenn du willst.
Ich hab ein (bootfähiges) Jados-Diskimage auf github eingecheckt wo Spaceinvaders (spacei08.68k) sowie ein Minesweeper (mine_m08.68k), welches ich in C++ geschrieben hab, drauf ist. Weiters ist auch der XT (Xtree Clone) drauf. Leider stimmt bei dem die Tastatusbelegung am Emulator nicht ganz. Muss ich mir mal anschauen.
https://github.com/avg67/nkc/blob/main/SW/Disks/jadossys.raw

LG,
Andi

Posts: 131 | Member since: May 2021 | IP address: not saved
b377
Lernt noch alles kennen
*
ID # 234


  Posted on February 20, 2024 07:03 AM (#29)  |  Quote Quote   PM PM   E-mail E-mail
Kleiner Hinweis,

in der Emulation kannst Du auch die Pfeiltasten des Cursorblocks und die Enter-Taste des Nummernblocks als Joystick verwenden. Oder auch ALT-1 ... Alt-8. Jedoch ist das alles in regulärer positiven Logik (High=1=gedrückt, Low=0=keine Eingabe).

Werden an beide IO Port der IO gesendet, kannst also beliebigen Port verwenden, nur nicht beide auf einmal.

-----------------------
Gruß Martin

Posts: 14 | Member since: December 2023 | IP address: not saved
andi
Kennt sich schon aus
**
ID # 213


  Posted on February 21, 2024 09:15 PM (#30)  |  Quote Quote   PM PM   E-mail E-mail
Ah danke für den Hinweis. Hab es geschafft Spaceinvaders am Emulator zu spielen.
Kämpfe allerdings ein wenig mit der Geschwindigkeit. Ohne Turbo ist es zu langsam, mit hingegen viel zu schnell.

Posts: 131 | Member since: May 2021 | IP address: not saved
b377
Lernt noch alles kennen
*
ID # 234


  Posted on February 24, 2024 05:33 PM (#31)  |  Quote Quote   PM PM   E-mail E-mail
Hallo Andi,

Du kannst gerne auch die nicht "Turbo" Geschwindigkeit in der Config einstellen.

- CPUSpeed: 8
- NumWaitStates: 3

Dies bedeuted 8MHz und 3 Wait-States bei jedem Zugriff (Defaulteinstellung auf der 68K Karte, kann aber meistens mit nur einem Wait betrieben werden). In der Simulation geht natürlich alles. Du solltest auch unter Linux oder bei einem Debug-build angezeigt bekommen wie schnell das System wirklich läuft. Ein gewisses Problem ist, dass aktuell sowohl SDL als auch die 68K Emulation im selben Thread laufen, und dadurch die Geschwindigkeit abhängig ist wie viel Zeit beim Update des Bildschirms bei jedem SYNC draufgeht. Es ist auch so, dass ca. 1000 Assemblerbefehle (10000 Taktzyklen) mit maximaler Geschwindigkeit ausgeführt werden und danach die Zeitdifferenz gewartet wird um auf die Zielwerte der CPU zu kommen. Bei einer langsamen Host-CPU führt all dies zu Ruckeln und zu langsamer Simulation.

-----------------------
Gruß Martin

Posts: 14 | Member since: December 2023 | 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.018075 seconds
Processed 17 files
gzip compression enabled
728.75 KiB memory usage