So is there a download here? (and yeah, that can be a little troublesome)See below.
Are there any plans to support color from the CX?Perhaps. The CX isn't just a normal Nspire with a color screen. We know it has extra RAM and flash - what else in the hardware might have changed? We'll just have to wait and see.
Yay for that. Will there be another linux-compatible release? :)Someone else made that, not me. I'm not familiar with Linux GUI libraries.
Will this version run at accurate speed?Timing is the same as it always was (1 instruction per cycle). I may make it more accurate at some point, but various features of the CPU make exact cycle timing impractical.
Does this mean that we now have enough information on the USB controller to implement on-calc drivers?I think we already did: we know that it's Freescale's USB OTG module, revision 0x42; you can find documentation of it in the MCF54455 reference manual (the MCF54455 is not related to the TI-Nspire but just happens to use the same revision of this module). The host interface is based on EHCI 1.0 (http://www.intel.com/technology/usb/ehcispec.htm).
I have just experienced a bug, after idling around in the nspire home screen for some minutes, the console starts spamming usb resets and I can't send any files... I have used 0.41 before and haven't had this error.
Warning at PC=10374D2C: Bad read_word: b00001bc
debug> c
Warning at PC=10374D50: Bad write_word: b00001bc 00000000
debug> c
Warning at PC=10374D2C: Bad read_word: b00001ac
debug> c
Warning at PC=10374D2C: Bad read_word: b00001bc
debug>
usb reset
usb reset
usb reset
...
That's not what I mean, I have set the standby time to 30 minutes ;)Yes. With the new modifications to the USB code, the symptoms have changed, but it's still the same bug. And I still don't see it any sooner than whatever the standby time is set to (unless emulation is sped up by pressing "`" or something)
My output looks more likeCode: [Select]usb reset
usb reset
usb reset
...
And the calculator doesn't crash.
By the way Goplat, if you find the time, would you mind adding those access permission bits to the MMU before you get too busy adding support for OS 3.0 and Nspire CX?
Just wondering, but how many Hz does the nspire emulator get. My current version of the Prizm emulator achieves about 8MHz now on the average computer (I released the first test version yesterday), but I still have many more optimizations to do including multi threading.
#!/bin/sh
pushd ~/TI-Nspire/ncubate_emu-v032b
wine nspire_emu.exe /B=boot2.img.raw /F=tinspire_boot2.bin /G=2000 &
popd
#!/bin/sh
pushd ~/TI-Nspire/ncubate_emu-v032b
wine nspire_emu.exe /C /B=boot2.img.raw /F=tinspirecas_1.7.2741.bin /G=2000 &
popd
#!/bin/sh
pushd ~/TI-Nspire/ncubate_emu-v032b
wine nspire_emu.exe /B=boot2.img.raw /F=tinspire_1.7.2741.bin /G=2000 &
popd
Have you notified that the OS 3.0.2 reboots infinitively ? (tested with boot2 1.4)
Thanks you for this clear explanation =)Have you notified that the OS 3.0.2 reboots infinitively ? (tested with boot2 1.4)
I've noticed this. In OS 3.0.2, if you're using boot2 1.4, then it updates to boot2 3.0 and then immediately reboots (the reboot is to prevent the bricking that sometimes happened on-calc in OS 3.0.1). Of course, updating boot2 means nothing if you're using the /B option, so you'll get an infinite loop.
another way around this problem is just to use TNOC.
How do you do a boot1 dump?Through the dock connector.
Or eNulator. It sounds almost the same except the m is replaced with an n.Doesn't start with an N.
How do you do a boot1 dump?If you're trying to run OS 3.0.1, just use TNOC to get rid of boot2, and use a boot2 ripped from a lower OS version. (That's how Levak showed me.)
Or somewhere else maybe.QuoteHow do you do a boot1 dump?Through the dock connector.
How aboot teh "Nulator"? "Nspire Emulator"?
Or eNulator. It sounds almost the same except the m is replaced with an n.Yeah, I probably should have given this thing a better name by now. I'm not too creative with names.
I'm not sure I understand correctly your problem, but the emulator communicates neither with a real calculator, nor with TI's software (TI-Nspire Computer Link Software a.k.a "TINCLS", TI-Nspire Computer Software a.k.a "TINCS").
With the emulator we can use the CAS functions on a non cas spire calculator, right?makes me think that you don't want to emulate a Nspire calculator on your computer (which you can do as described in the page you linked to, adding a /C switch to the final nspire_emu / ncubate invocation if you want to emulate a CAS calculator). Instead, I think that you want to try to use the CAS OS on your real, non-CAS Nspire calculator. Is that right ?
Do you think it will possible someday to make the CAS work in a real calc? that would be great!!It became possible to hot-launch "other" OS during the spring of 2010, but "RunOS" was never released, for fear TI would lock down the calculators even further.
Is anyone making a CX emulator?For now, no, because:
Or is it similar enough to the old Nspire that it would be just an update with some changes of the nspire emulator?The CX hardware is presumably reasonably similar to the Touchpad hardware (besides the difference in bpp for the screen), but there's a significant software difference: as mentioned by critor above, unlike the boot2 in Clickpad & Touchpad calculators, the boot2 in the CX is partially encrypted, and decrypted by the boot1.
(*): embedding the boot2 decryption code into the emulator is not possible: circumventing protection measures would easily fall under the DMCA, and this time, TI would have a better case than they did for the signing key fiasco.
(*): embedding the boot2 decryption code into the emulator is not possible: circumventing protection measures would easily fall under the DMCA, and this time, TI would have a better case than they did for the signing key fiasco.But aren't the os update files (.tnc/.tno) also encrypted in a weird way? And the imgdump tool was distributed without legal problems?
2) this hurdle will eventually be overcome in the future (like on pretty much any closed platform in the past two decades), but the result cannot be redistributed: the boot1 contains TI's copyrighted code...I know the old boot1 was available on the internet because I've downloaded it myself, but that's certainly illegal.
But aren't the os update files (.tnc/.tno) also encrypted in a weird way?They're ZIP files with a weird header; the boot2 (if any) is compressed with a non-standard format; the OS is encrypted with a symmetric cipher whose name evocates fish.
And the imgdump tool was distributed without legal problems?Well, the original author of imgdump removed all references to imgdump from his own posts, and all copies of imgdump able to decrypt the OS.
OSLauncher just launches the other OS, it does not install it in any way; just reboot the calculator and the effect of OSLauncher is gone :)
That means right now I have the "deadly" SO 3.1 and I'm stuck!...Yes, completely stuck, at the time of this writing...
I tried to find a solution to do a downgrade with this SO and found a software called TNOC that claims that removes the boot2 from the SO and generates a new file without the boot2. Tried that and installed the SO generated by TNOC but didn't find any difference and couldn't do the downgrade..Well, TNOC avoids installation of the newer boot2 (with more lockdown) on calculators that still have the old boot2, but is obviously powerless for calculators which already received said newest boot2 through unmodified OS upgrades :)
Then I also read that there is a way to "crash" the SO by installing it and during the instalation, swap the keypad to the TI-84 and swap back again.. or something like that.. That should crash the SO and then should be able to install any SO.No, not at all: even if you erase the OS completely, the anti-downgrade protection enforced by the boot2 won't allow you to downgrade to any OS version supported by Ndless - and thus, to use OSLauncher.
In the meantime, do you have any other sugestions of how to "kill the beast" SO 3.1?...I don't, because there's no way to do that ;)
I won't risk putting boot2 v3.xxx on my nspire cuz I don't want to live with the impossibility to downgrade to OS 2.1 however it looks that ndless3 is near from being out. So maybe it is wiser to wait a while and try all Lua programs out there until it is out that to spend the time and effort on downgrading for nothing...
nspire_emu.exe /MC /N /F=emu.bin /PO=c:\nspire.tnc
That's the command, isnt't it?
Code: [Select]nspire_emu.exe /MC /N /F=emu.bin /PO=c:\nspire.tnc
That's the command, isnt't it?
I got rid of /N because it just adds an extra unnecessary step to the goal of creating a flash image with the OS installed. Here's a quick guide to getting set up without it.Code: [Select]nspire_emu.exe /MC /N /F=emu.bin /PO=c:\nspire.tnc
nspire_emu /B=boot2.raw /MC /PO=os.tnc
(http://t.imgbox.com/aazw3n7Q.jpg) (http://imgbox.com/aazw3n7Q) Yes, it does :)How did you do it?
I try to emulate the Touchpad CAS version with the command in your quote. I didn't get any error.Code: [Select]nspire_emu.exe /MC /N /F=emu.bin /PO=c:\nspire.tnc
That's the command, isnt't it?
What model are you trying to emulate, and what commands are you using? Perhaps we could help. :D
Edit: What error are you getting as well?
I try to emulate the Touchpad CAS version with the command in your quote. I didn't get any error.
Thanks, but I solved it by myself ;)
I only need to know how to open a document or ndless in the emulator?
regards Wayne
In my experience, nspire_emu works well in Wine, like many Windows programs anyway. Certainly well enough for nobody to bother maintaining non-Windows versions.
What doesn't work for you ? :)
gcc -m32 -c asmcode.S -o asmcode.o
asmcode.S:204:Rest of line ignored. 1st junk character valued 64 (@).
asmcode.S:205:Alignment too large: 15. assumed.
asmcode.S:206:Junk character 64 (@).
asmcode.S:206:Rest of line ignored. 1st junk character valued 114 (r).
asmcode.S:229:invalid char '@' beginning operand 1 `@mmio_read_byte@4'
asmcode.S:232:invalid char '@' beginning operand 1 `@read_byte@4'
asmcode.S:235:Rest of line ignored. 1st junk character valued 64 (@).
asmcode.S:236:Alignment too large: 15. assumed.
asmcode.S:237:Junk character 64 (@).
asmcode.S:237:Rest of line ignored. 1st junk character valued 114 (r).
asmcode.S:259:invalid char '@' beginning operand 1 `@read_align_fail@4'
asmcode.S:263:invalid char '@' beginning operand 1 `@mmio_read_half@4'
asmcode.S:266:invalid char '@' beginning operand 1 `@read_half@4'
asmcode.S:269:Rest of line ignored. 1st junk character valued 64 (@).
asmcode.S:270:Alignment too large: 15. assumed.
asmcode.S:271:Junk character 64 (@).
asmcode.S:271:Rest of line ignored. 1st junk character valued 114 (r).
asmcode.S:291:invalid char '@' beginning operand 1 `@read_align_fail@4'
asmcode.S:295:invalid char '@' beginning operand 1 `@mmio_read_word@4'
asmcode.S:298:invalid char '@' beginning operand 1 `@read_word@4'
asmcode.S:318:Rest of line ignored. 1st junk character valued 64 (@).
asmcode.S:319:Alignment too large: 15. assumed.
asmcode.S:320:Junk character 64 (@).
asmcode.S:320:Rest of line ignored. 1st junk character valued 119 (w).
asmcode.S:343:invalid char '@' beginning operand 1 `@mmio_write_byte@8'
asmcode.S:346:invalid char '@' beginning operand 1 `@write_byte@8'
asmcode.S:349:Rest of line ignored. 1st junk character valued 64 (@).
asmcode.S:350:Alignment too large: 15. assumed.
asmcode.S:351:Junk character 64 (@).
asmcode.S:351:Rest of line ignored. 1st junk character valued 119 (w).
asmcode.S:373:invalid char '@' beginning operand 1 `@write_align_fail@4'
asmcode.S:377:invalid char '@' beginning operand 1 `@mmio_write_half@8'
asmcode.S:380:invalid char '@' beginning operand 1 `@write_half@8'
asmcode.S:383:Rest of line ignored. 1st junk character valued 64 (@).
asmcode.S:384:Alignment too large: 15. assumed.
asmcode.S:385:Junk character 64 (@).
asmcode.S:385:Rest of line ignored. 1st junk character valued 119 (w).
asmcode.S:405:invalid char '@' beginning operand 1 `@write_align_fail@4'
asmcode.S:409:invalid char '@' beginning operand 1 `@mmio_write_word@8'
asmcode.S:412:invalid char '@' beginning operand 1 `@write_word@8'
make: *** [asmcode.o] Error 1
i686-w64-mingw32-windres -v resource.rc -o resource.o
i686-w64-mingw32-windres: resource.rc:52: syntax error
Using `i686-w64-mingw32-gcc -E -xc -DRC_INVOKED resource.rc'
Using popen to read preprocessor output
Your screenshots show that you're using MacOS X, where "gcc" is a quite old, and heavily patched, version of GCC, which will produce executables targetting MacOS X.
But what you want to do is to cross-compile, producing executables targetting Windows ;)
On Debian, installing a Win32/64 SDK takes only several clicks... but on MacOS X, unless someone provides ready-made DMG, it's probably going to be a major pain for you to install.
easier yet:When I looked at nspirememory.bin through notepad, I got random symbols.
debug> w nspirememory.bin 10000000 2000000
Then you dont have to look at the rest of the emulator code only what you are interested in.
Another way to get files off nspire_emu/Ncubate is to make a program that outputs the file to the RS232 port.I wouldn't know how to program something that would output through RS232. Not entirely sure what it is... :P
A few things about nspire_emu as of present.I've got one optimized for the Linux version.
The clickpad is fine but the Touchpad is horribly mapped to the keyboard. Nearly every key I press is wrongly mapped. I suspect this has been a problem for quite a while, and it's a shame I can't really try out the touchpad.
I plan to release my personal edited versions of Levak's batch file scripts that work with v060, if that's fine.
#!/bin/bash
# Répertoire absolu du fichier
RELPAT="$(dirname $0)"
function menup {
select_menup=$(zenity --list --title="Menu Principal" \
--text="Veuillez choisir un item" \
--column="select" --column=" " \
"quit" "Quitter" \
"tnc" "TI-nSpire CAS" \
"tno" "TI-nSpire" \
"tcc" "TI-nSpire CAS CX" \
"tco" "TI-nSpire CX" \
"binrun" "Fichier bin" \
"aide" "Aide" \
--hide-column="1" \
--height="300" \
--width="500");
}
function calc {
# $1 = tnc tno tcc tco
if [ "$1" = "tno" ]; then
select_menuc=$(zenity --list --title="Menu TI-nSpire" \
--text="Veuillez choisir un item" \
--column="select" --column=" " \
"return" "Retour" \
"extboot2" "Extraire le boot2" \
"rom" "Créer une ROM" \
"runb1" "Lancer une ROM sur le boot1" \
"runb2" "Lancer une ROM sur le boot2" \
"run84b1" "Lancer une ROM en mode 84+ sur le boot1" \
"run84b2" "Lancer une ROM en mode 84+ sur le boot2" \
"dump" "Dumper un classeur (Ctrl+S -- dump.xml)" \
--hide-column="1" \
--height="300" \
--width="500");
else
select_menuc=$(zenity --list --title="Menu TI-nSpire" \
--text="Veuillez choisir un item" \
--column="select" --column=" " \
"return" "Retour" \
"extboot2" "Extraire le boot2" \
"rom" "Créer une ROM" \
"runb1" "Lancer une ROM sur le boot1" \
"runb2" "Lancer une ROM sur le boot2" \
--hide-column="1" \
--height="300" \
--width="500");
fi
}
function binrun {
binfile=$(zenity --file-selection --title="Sélectionnez un fichier *.bin" --height="30" --width="500" --filename="$RELPAT/");
if [ "$binfile" ]; then
"$RELPAT"/nspire_emu.exe /B="$binfile"
fi
}
function extboot2 {
clear
echo "#####################################################"
echo "# Extraire le Boot2 de boot2.img #"
echo "#####################################################"
wine "$RELPAT"/imgdump.exe boot2.img
}
function rom {
# $1 = tnc tno tcc tco
os=$(zenity --file-selection --title="Sélectionnez un fichier *.$1" --filename="$RELPAT/");
if [ "$os" ]; then
if [ "${os##*.}" = "$1" ]; then
rom=$(zenity --file-selection --title="Enregistrer une ROM" --save --confirm-overwrite --filename="$RELPAT/");
if [ "$rom" ]; then
if [ "${rom##*.}" != "rom" ]; then
rom="$rom.rom"
fi
if [ "$1" = "tno" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /N /PB=boot2.img /PO="$os"
elif [ "$1" = "tnc" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /N /PB=boot2.img /PO="$os" /C
elif [ "$1" = "tco" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /N /PB=boot2.img /PO="$os" /X
elif [ "$1" = "tcc" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /N /PB=boot2.img /PO="$os" /C /X
fi
fi
else
zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.$1 et pas autre chose ! \n Opération annulée"
fi
fi
}
function runb1 {
# $1 = tnc tno tcc tco
rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
if [ "$rom" ]; then
if [ "${rom##*.}" = "rom" ]; then
boot1=$(zenity --file-selection --title="Sélectionnez un fichier BOOT1" --filename="$RELPAT/");
if [ "$boot1" ]; then
if [ "$1" = "tno" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /1="$boot1"
elif [ "$1" = "tnc" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /1="$boot1" /C
elif [ "$1" = "tco" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /1="$boot1" /X
elif [ "$1" = "tcc" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /1="$boot1" /C /X
fi
fi
else
zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opération annulée"
fi
fi
}
function runb2 {
# $1 = tnc tno tcc tco
rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
if [ "$rom" ]; then
if [ "${rom##*.}" = "rom" ]; then
if [ "$1" = "tno" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /B=boot2.img.raw
elif [ "$1" = "tnc" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /B=boot2.img.raw /C
elif [ "$1" = "tco" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /B=boot2.img.raw /X
elif [ "$1" = "tcc" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /B=boot2.img.raw /C /X
fi
else
zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opération annulée"
fi
fi
}
function run84b1 {
rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
if [ "$rom" ]; then
if [ "${rom##*.}" = "rom" ]; then
boot1=$(zenity --file-selection --title="Sélectionnez un fichier BOOT1" --filename="$RELPAT/");
if [ "$boot1" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /1="$boot1" /K
fi
else
zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opération annulée"
fi
fi
}
function run84b2 {
rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
if [ "$rom" ]; then
if [ "${rom##*.}" = "rom" ]; then
"$RELPAT"/nspire_emu.exe /F="$rom" /B=boot2.img.raw /K
else
zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opération annulée"
fi
fi
}
function dump {
local winePath="$HOME/.wine/dosdevices/c:"
local rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
if [ "$rom" ]; then
if [ "${rom##*.}" = "rom" ]; then
local size=$(zenity --entry --title="Taille du classeur à dumper (octets)" --entry-text="0");
let num=$size/170
echo "k 10032AA0 +x" > "$RELPAT/commands.txt"
echo "c" >> "$RELPAT/commands.txt"
local i=0
while [ $i -le $num ]; do
# Complete tempory file names with zeros so that it's listed correclty
let local dif=${#num}-${#i}
local spaces=$(printf "%"$dif"s")
local zeros=${spaces// /0}
# Fill command list
echo "w C:\dump$zeros$i.xml r1 r2" >> "$RELPAT/commands.txt"
echo "c" >> "$RELPAT/commands.txt"
let i=$i+1
done
# Launch emulator with debug command list
"$RELPAT"/nspire_emu.exe /F="$rom" /B=boot2.img.raw /D < "$RELPAT/commands.txt"
# Concatenate final XML file using tempory files
echo -n "" > "$RELPAT/dump.xml"
for f in "$winePath/dump*"; do
cat $f >> "$RELPAT/dump.xml"
done
# rm -f "$winePath/dump"*
rm -f "$RELPAT/commands.txt"
else
zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opération annulée"
fi
fi
}
function aide {
clear
echo "#####################################################"
echo "# Aide #"
echo "# ---------- ##"
echo "## sur l'utilisation de l'emulateur en boot2 ##"
echo "#####################################################"
echo "- Recuperez le fichier de mise a jour TI (*.tnc/*.tno/*.tcc/*.tco) en le telechargeant "
echo " depuis le site de TI ou sur TI-bank, qui lui ressence une grande partie "
echo " des OS ayant existes."
echo "- Copiez ce fichier dans la racine du dossier de l'emulateur."
echo "- Le renommer pour plus de simplicite (ex : 17.tnc) !"
echo "- L'assimiler a un format *.zip."
echo "- Ouvrir l'archive et en extraire 'boot2.img' et le placer dans la racine"
echo " du dossier de l'emulateur."
echo "- Retablir l'extension du fichier de mise a jour TI (*.tnc/*.tno)."
echo "- Grace a ce fichier batch, decryptez le 'boot2.img'."
echo "- Grace a ce fichier batch, lancez l'emulation."
echo "### Pour regarder ce tutoriel en video : http://vimeo.com/8884626"
echo ""
echo "Appuyer la touche <Entrée> pour continuer..."
read touche
}
while [ "$select_menup" != "quit" ]; do
menup
if [ "$select_menup" = "binrun" ]; then
binrun
elif [ "$select_menup" = "aide" ]; then
aide
elif [ "${select_menup:0:1}" = "t" ]; then
while [ "$select_menuc" != "return" ]; do
calc $select_menup
if [ "$select_menuc" = "extboot2" ]; then
extboot2
elif [ "$select_menuc" = "rom" ]; then
rom $select_menup
elif [ "$select_menuc" = "runb1" ]; then
runb1 $select_menup
elif [ "$select_menuc" = "runb2" ]; then
runb2 $select_menup
elif [ "$select_menuc" = "run84b1" ]; then
run84b1
elif [ "$select_menuc" = "run84b2" ]; then
run84b2
elif [ "$select_menuc" = "dump" ]; then
dump
else break;
fi
done
select_menuc="none"
else break;
fi
done
# Credits
clear
zenity --info --title="Credits" \
--text=\
"Merci d'avoir utilisé ce shell Bash réalisé par Levak.
Un grand merci à Goplat pour son émulateur !"
clear
A few things about nspire_emu as of present.
The clickpad is fine but the Touchpad is horribly mapped to the keyboard. Nearly every key I press is wrongly mapped. I suspect this has been a problem for quite a while, and it's a shame I can't really try out the touchpad.
I plan to release my personal edited versions of Levak's batch file scripts that work with v060, if that's fine.
Hi everyone, (my very first message here)A few things about nspire_emu as of present.
The clickpad is fine but the Touchpad is horribly mapped to the keyboard. Nearly every key I press is wrongly mapped. I suspect this has been a problem for quite a while, and it's a shame I can't really try out the touchpad.
I plan to release my personal edited versions of Levak's batch file scripts that work with v060, if that's fine.
I hope the Touchpad mapping is just wrongly configured for me, because it is quite confusing at the moment and nearly every key is mapped to another key that shouldn't be.
Could you/someone implement the missing instructions which libndls' show_msg_user_input uses?What missing instructions ?
Although I still don't understand what I have to do in order to not make it crash if esc or cancel is pressed. But that isn't a problem of the emulator.Oh ... =(
Hey is it possible to access the scratchpad while in a calculator page, or really anywhere other than the home screen?Ctrl+0
Because emulator screenshots are much prettier than handheld screenshots.
OK, it appears that keeping these features in beta has caused some drama
here's a new release./me feels concerned :P
- implement CAS+ emulation (just enough to get the OS to boot, so I could test dumpers before sending them to critor... this wasn't really intended as a public feature, but someone on the mailing list wanted to see it and now that word has gotten out I can't really remove it now :p)
- implemented sending files via XMODEM (mainly for CAS+ prototype OSes (1.0.3xx/4xx) - each one needs a different header so /PO= won't cut it - but works for any model)
implement correct behavior of unaligned memory access and jumps
Well, this should help you once and for all ;)Yeah, thanks to that tutorial, even I managed to make the emulator work with only one question :P
http://tiplanet.org/forum/viewtopic.php?f=15&t=8698
Well, this should help you once and for all ;)Thanks for the link. I bookmarked it earlier :)
http://tiplanet.org/forum/viewtopic.php?f=15&t=8698
I have a question for Goplat: how difficult would nspire_emu be to port, especially to Android? I might do that if the project is feasible.Porting to another x86 OS like Linux or Mac OS X would require rewriting the GUI, and replacing some of the funky memory management code (I think I do have an unreleased Linux port of the memory code somewhere, but I never ported the GUI)
oh and it just changes from permission denied to boot1.img/M/PB=boot2.img/PO=310.tno: No such files or directoryIs windows set to show file extensions?
and I did change the names of the files so they would match yours so the codes would match and be easier to fix if any problems were to occur
or if i Input boot1.img /M /PB=boot2.img /PO=310.tno it says that boot2.img no such files or directory
By the way, is there a Linux version of Nspire_Emu?Nope.
Because I am wondering if it would run a TI-Nspire CX with Debian installed?nspire_emu cannot run the Nspire port of Linux, as Linux uses the processor's features (especially the MMU) more extensively than TI's Nucleus-based OS does, and nspire_emu only implements what is needed for TI's OS to work.
Because I am wondering if it would run a TI-Nspire CX with Debian installed?nspire_emu cannot run the Nspire port of Linux, as Linux uses the processor's features (especially the MMU) more extensively than TI's Nucleus-based OS does, and nspire_emu only implements what is needed for TI's OS to work.
Which version of Ndless, on which OS version ?
Is there anywhere that I can download the CX boot1cx.raw file?No. Dump it with Polydumper.
Is there anywhere that I can download the CX boot1cx.raw file?No. Dump it with Polydumper.
$ arm-none-eabi-gdb
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-none-eabi".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) file ~/nTxt15/src/nTxt15.elf
Reading symbols from /home/Legimet/nTxt15/src/nTxt15.elf...done.
(gdb) target remote localhost:1024
Remote debugging using localhost:1024
0x00000000 in _nspire_start ()
(gdb) break main
Breakpoint 1 at 0xad0: file texteditor.c, line 62.
(gdb)
This page was last modified on 7 November 2010, at 19:56.That was in the time of the second generation of Ndless, long before the release of OS 3.1 and the later release of Ndless 3.1.
Boot Loader Stage 1 (3.00.DEVBUILD)
Build: 2010/9/14, 16:30:29
Copyright (c) 2006-2010 Texas Instruments Incorporated
Using developer keys
Last boot progress: 65
Warning at PC=00007718: Bad write_byte: 0001c634 00
debug> c
nspire_emu.exe /1=boot1cx.tns /MX /PD=diagscx.tns
I would like to help developing this emulator. I have seen the source code and I think I can improve some bits.
Is there any repo where I can checkout the last version?
I do extensively use GitHub and AFAIK there's no clone of this project there. I would like to clone the source code there so people can also send patches through there.
Thanks for all your work!
You can find the nspire_emu v0.60p1-gdb by Goplat repo clone here: http://goo.gl/E4uscN but I really do not know where is the latest code.
./nspire_emu -1=Boot1cx.img -F=Flash.bin
Error at PC=00003B74: Invalid new processor mode
Backtrace:
Frame PrvFrame Self Return Start
00000000: invalid address
debug> d 3b74
00003B70 00 00 0F E1-1F 00 C0 E3 13 00 80 E3 ...ß..└π..Çπ
00003B80 C0 00 80 E3 00 F0 2F E1-AC D0 1F E5 00 00 A0 E3 └.Çπ.≡/ß¼╨.σ..áπ
00003B90 74 1D 9F E5 00 00 81 E5-70 1D 9F E5 00 00 81 E5 t.ƒσ..üσp.ƒσ..üσ
00003BA0 6C 0D 9F E5 6C 1D 9F E5-00 00 81 E5 08 03 00 EB l.ƒσl.ƒσ..üσ...δ
00003BB0 6C 10 1F E5 00 10 91 E5-5C 0D 9F E5 00 00 11 E1 l..σ..æσ\.ƒσ...ß
00003BC0 08 00 00 0A 54 0D 9F E5-00 10 90 E5 02 10 81 E3 ....T.ƒσ..Éσ..üπ
00003BD0 00 10 80 E5 48 0D 9F E5-FD 10 A0 E3 00 10 80 E5 ..ÇσH.ƒσ².áπ..Çσ
00003BE0 B0 01 00 EB 00 00 00 EA-26 01 00 EB E8 00 00 EB ░..δ...Ω&..δΦ..δ
00003BF0 F7 02 00 EB ≈..δ
debug>
Congrats Vogtinator for your work. Your repo looks quite good.It looks good, but apart from the SDK part nothing works :)
cd src
OPTS=mingw make
I know this is not clean but I think it is better than the "prefix" solution there's in your makefile because prefix is tipically used for other things in a makefile.You did it almost like I'd have done it, I'd just have a common section for not linux-native Makefile lines and a section for both MinGW and windows native builds.
printf("Data abort: address=%08x status=%02x pc=%08x\n", mva, status, arm.reg[15]);
at the top of data_abort in emu.c and launch ndless_installer?Data abort: address=0101010d status=01 pc=102fd8e4
before "Segmentation fault".As it seems there's more people interested in a Qt gui I will think about it but a lot of work must be done before that.The Qt GUI for linux could then be used as-is for windows as well, so not more work than removing gui-windows.c :P
Program received signal SIGSEGV, Segmentation fault.
0x004018e5 in write_word ()
(gdb)
Continuing.
Program received signal SIGSEGV, Segmentation fault.
main (argc=0, argv=0x0) at emu.c:551
551 sched_process_pending_events();
(gdb) bt
#0 main (argc=0, argv=0x0) at emu.c:551
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
main (argc=0, argv=0x0) at emu.c:551
551 sched_process_pending_events();
(gdb) bt
#0 main (argc=0, argv=0x0) at emu.c:551
(gdb) s
[Inferior 1 (process 1516) exited with code 030000000005]
And I don't really know how to use GDB, but if I read it correctly the call to sched_process_pending_events() segfaults once before crashing the second time?It seems that it is true but the position of argv?? Argv is null?? I have to take a deeper look it must be in another point.
Program received signal SIGSEGV, Segmentation fault.
0x004018e5 in write_word ()
(gdb) b data_abort
Breakpoint 1 at 0x40aa00: file emu.c, line 112.
(gdb) c
Continuing.
21:57:04.050,14-06-24,0000001605,refreshApList
←[0m21:57:04.160,14-06-24,0000001616,Doc open complete in 0.85000002 seconds for
: ndless/ndless_installer.tns
←[0m21:57:04.160,14-06-24,0000001616,Memory avail before open: 35822688. Memory
avail after open: 34665812. Memory used: 1156876
←[0mIME: non-ALPHA key pressed
Program received signal SIGSEGV, Segmentation fault.
0x004018e5 in write_word ()
(gdb) c
Continuing.
Breakpoint 1, data_abort (mva=16843021, status=1 '\001') at emu.c:112
warning: Source file is more recent than executable.
112 void data_abort(u32 mva, u8 status) {
(gdb) n
113 logprintf(LOG_CPU, "Data abort: address=%08x status=%02x\n", mva
, status);
(gdb) n
114 fix_pc_for_fault();
(gdb) n
118 cpu_exception(EX_DATA_ABORT);
(gdb) print restart_after_exception
$1 = {2686664, 16, 10767564, 13045723, 2686540, 4276596, 2686616, 0,
1447244336, 0, 0, 0, 0, 0, 0, 0}
(gdb) info registers
eax 0x4 4
ecx 0xc784e1e 209210910
edx 0x48dd8e4 76404964
ebx 0x1 1
esp 0x28fdec 0x28fdec
ebp 0x28fe04 0x28fe04
esi 0x101010d 16843021
edi 0xa44ccc 10767564
eip 0x40aa32 0x40aa32 <data_abort+50>
eflags 0x216 [ PF AF IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x53 83
gs 0x2b 43
(gdb) n
115 arm.reg[15] += 8;
(gdb) n
116 arm.fault_address = mva;
(gdb) n
117 arm.data_fault_status = status;
(gdb) n
118 cpu_exception(EX_DATA_ABORT);
(gdb) n
119 longjmp(restart_after_exception, 0);
(gdb) print restart_after_exception
$2 = {2686664, 16, 10767564, 13045723, 2686540, 4276596, 2686616, 0,
1447244336, 0, 0, 0, 0, 0, 0, 0}
(gdb) info registers
eax 0x102fd904 271571204
ecx 0x0 0
edx 0x20000013 536870931
ebx 0x1 1
esp 0x28fdec 0x28fdec
ebp 0x28fe04 0x28fe04
esi 0x101010d 16843021
edi 0xa44ccc 10767564
eip 0x40aa51 0x40aa51 <data_abort+81>
eflags 0x202 [ IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x53 83
gs 0x2b 43
(gdb) n
0x00401982 in longjmp ()
(gdb) print restart_after_exception
$3 = {2686664, 16, 10767564, 13045723, 2686540, 4276596, 2686616, 0,
1447244336, 0, 0, 0, 0, 0, 0, 0}
(gdb) info registers
eax 0x102fd904 271571204
ecx 0x40aa65 4237925
edx 0x20000013 536870931
ebx 0x1 1
esp 0x28fdec 0x28fdec
ebp 0x28fe04 0x28fe04
esi 0x101010d 16843021
edi 0xa44ccc 10767564
eip 0x401982 0x401982 <longjmp+1>
eflags 0x202 [ IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x53 83
gs 0x2b 43
(gdb) n
Single stepping until exit from function longjmp,
which has no line number information.
main (argc=0, argv=0x0) at emu.c:550
550 while (!exiting) {
(gdb) print restart_after_exception
$4 = {2686664, 16, 10767564, 13045723, 2686540, 4276596, 2686616, 0,
1447244336, 0, 0, 0, 0, 0, 0, 0}
(gdb) info registers
eax 0x0 0
ecx 0xa44040 10764352
edx 0x20000013 536870931
ebx 0x28fec8 2686664
esp 0x10 0x10
ebp 0xa44ccc 0xa44ccc <arm+204>
esi 0xc70fdb 13045723
edi 0x28fe4c 2686540
eip 0x414174 0x414174 <main+2068>
eflags 0x202 [ IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x53 83
gs 0x2b 43
(gdb) n
551 sched_process_pending_events();
(gdb) print restart_after_exception
$5 = {2686664, 16, 10767564, 13045723, 2686540, 4276596, 2686616, 0,
1447244336, 0, 0, 0, 0, 0, 0, 0}
(gdb) info registers
eax 0x0 0
ecx 0xa44040 10764352
edx 0x20000013 536870931
ebx 0x28fec8 2686664
esp 0x10 0x10
ebp 0xa44ccc 0xa44ccc <arm+204>
esi 0xc70fdb 13045723
edi 0x28fe4c 2686540
eip 0x414181 0x414181 <main+2081>
eflags 0x246 [ PF ZF IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x53 83
gs 0x2b 43
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
main (argc=0, argv=0x0) at emu.c:551
551 sched_process_pending_events();
(gdb)
Using built-in specs.
COLLECT_GCC=i686-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-w64-mingw32/4.9.0/lto-wrapper
Target: i686-w64-mingw32
Configured with: /build/mingw-w64-gcc/src/gcc-4.9.0/configure --prefix=/usr --libexecdir=/usr/lib --target=i686-w64-mingw32 --enable-languages=c,lto,c++,objc,obj-c++,fortran,ada
--enable-shared --enable-static --enable-threads=posix --enable-fully-dynamic-string --enable-libstdcxx-time=yes --with-system-zlib --enable-cloog-backend=isl
--disable-cloog-version-check --disable-isl-version-check --enable-lto --disable-dw2-exceptions --enable-libgomp --disable-multilib --enable-checking=release
Thread model: posix
gcc version 4.9.0 (GCC)
By the way. Given that we have two repos with similar content now, I think we should merge them into one and start working in one organization repo with some conventions like for example git-flow.Yup, I think the same. My changes are smaller: A message if ndless wasn't detected at gdb connection and prefixing emu output with "[nspire_emu]".
It took me a while see it... I'm a noob with this code...Maybe it got corrupted somehow. Can you step through setjmp or look when 0x10/16 gets written into restart_after_exception[1]?
Now what? Have you reported to mingw? Any hotfix?
Starting program: c:\Users\............................\nspire_emu\src/nspire_emu.exe -1=boot1cx.img -f=flash.bin
[New Thread 1600.0x710]
[New Thread 1600.0x884]
[New Thread 1600.0xa1c]
Hardware watchpoint 1: restart_after_exception[1]
Old value = 0
New value = 16
0x75e9e27e in setjmp3 () from C:\Windows\SysWOW64\msvcrt.dll
(gdb)
(gdb) c
Continuing.
...................................................................... (Tons of output...)
Program received signal SIGSEGV, Segmentation fault.
0x004018e5 in write_word ()
(gdb)
Continuing.
Program received signal SIGSEGV, Segmentation fault.
main (argc=0, argv=0x0) at emu.c:551
551 sched_process_pending_events();
(gdb)
$ gdb nspire_emu.exe
GNU gdb (GDB) 7.6.1
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "mingw32".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from c:\Users\....................\nspire_emu\src\nspire_emu.exe...done.
(gdb) b main:546
Breakpoint 1 at 0x41396c: file emu.c, line 260.
(gdb) b emu.c:546
Breakpoint 2 at 0x414140: file emu.c, line 546.
(gdb) watch restart_after_exception[1]
Hardware watchpoint 3: restart_after_exception[1]
(gdb) run -1=boot1cx.img -f=flash.bin
Starting program: c:\Users\..................\nspire_emu\src/ns
pire_emu.exe -1=boot1cx.img -f=flash.bin
[New Thread 2604.0x804]
Breakpoint 1, main (argc=3, argv=0xc429e0) at emu.c:260
warning: Source file is more recent than executable.
260 char *preload_filename[4] = { NULL };
(gdb) c
Continuing.
[New Thread 2604.0x3ac]
[New Thread 2604.0x94c]
Breakpoint 2, main (argc=3, argv=0xc429e0) at emu.c:546
546 sched_update_next_event(0);
(gdb) n
543 sched_items[SCHED_THROTTLE].clock = CLOCK_27M;
(gdb)
544 sched_items[SCHED_THROTTLE].proc = throttle_interval_event;
(gdb)
546 sched_update_next_event(0);
(gdb)
548 setjmp(restart_after_exception);
(gdb) si
0x00414168 548 setjmp(restart_after_exception);
(gdb)
0x0041416f 548 setjmp(restart_after_exception);
(gdb)
0x004138a8 in _setjmp3 ()
(gdb)
0x75e9e275 in setjmp3 () from C:\Windows\SysWOW64\msvcrt.dll
(gdb)
0x75e9e279 in setjmp3 () from C:\Windows\SysWOW64\msvcrt.dll
(gdb)
0x75e9e27b in setjmp3 () from C:\Windows\SysWOW64\msvcrt.dll
(gdb)
Hardware watchpoint 3: restart_after_exception[1]
Old value = 0
New value = 16
0x75e9e27e in setjmp3 () from C:\Windows\SysWOW64\msvcrt.dll
(gdb) disassemble setjmp3
Dump of assembler code for function setjmp3:
0x75e9e275 <+0>: mov 0x4(%esp),%edx
0x75e9e279 <+4>: mov %ebp,(%edx)
0x75e9e27b <+6>: mov %ebx,0x4(%edx)
=> 0x75e9e27e <+9>: mov %edi,0x8(%edx)
0x75e9e281 <+12>: mov %esi,0xc(%edx)
0x75e9e284 <+15>: mov %esp,0x10(%edx)
0x75e9e287 <+18>: mov (%esp),%eax
0x75e9e28a <+21>: mov %eax,0x14(%edx)
0x75e9e28d <+24>: movl $0x56433230,0x20(%edx)
0x75e9e294 <+31>: movl $0x0,0x24(%edx)
0x75e9e29b <+38>: mov %fs:0x0,%eax
0x75e9e2a1 <+44>: mov %eax,0x18(%edx)
0x75e9e2a4 <+47>: cmp $0xffffffff,%eax
0x75e9e2a7 <+50>: je 0x75ed992d <setjmp+56>
0x75e9e2ad <+56>: mov 0x8(%esp),%ecx
0x75e9e2b1 <+60>: or %ecx,%ecx
0x75e9e2b3 <+62>: jne 0x75ed9939 <setjmp+68>
0x75e9e2b9 <+68>: mov 0xc(%eax),%eax
0x75e9e2bc <+71>: mov %eax,0x1c(%edx)
0x75e9e2bf <+74>: sub %eax,%eax
0x75e9e2c1 <+76>: ret
0x75e9e2c2 <+77>: nop
0x75e9e2c3 <+78>: nop
0x75e9e2c4 <+79>: nop
0x75e9e2c5 <+80>: nop
0x75e9e2c6 <+81>: nop
End of assembler dump.
(gdb)
emuprintf("Ndless not detected or too old. Debugging of applications not available!\n");
:P It's pretty awesome to see someone porting Nspire-emu to Linux by the way. You're doing a great job.
Greetings help a lot :)Well, have some:
An important question is where to start. First GUI, then "kernel"?
I'd go for the first, as that could be tested with wine accurately.QuoteGreetings help a lot :)Well, have some:
Hi! Hi! Hi! Hi! Hello! Hello! Hello! Hello! Hello! Hello! Hey! Hey! Hey! 'sup? 'sup? 'sup? 'sup? :P
When I have more time again I'll try to do something.
A few bugs: Newline after "GDB connected" and disconncted is missing and you put the "Ndless not detected" message at the wrong place.
I use Arch too. Wine wants libmpg123 for some reason and this is not program specific.
I have no idea, I never tried to run nspire-emu on Arch. I just got started with Ndless so I still test on calc. :P
Oh wow I didn't know you started helping developing the emulator. Hopefully this helps the project moving forward faster, although it's already pretty good actually. :)
In theory you could run X and wine with qemu and binfmt support in a chroot.
:drooooool:That exactly. Nspire-emu is like, the only thing I rely on Wine for atm. :P
Where is the drool icon when you need it.
:drooooool:(http://www.confessionsofaninsomniac.com/wp-content/uploads/2010/05/homerdrool21.JPG)
Where is the drool icon when you need it.
So you are taking over this project? :DYes, in the way of "implementing support until it's usable", but not in the way of "I'll maintain it until we both are dead" :P
Nspire-emu is like, the only thing I rely on Wine for atm. :PI've still got IDA. It's a real PITA to use sometimes.
Nspire-emu is like, the only thing I rely on Wine for atm. :PI've still got IDA. It's a real PITA to use sometimes.
In theory you could run X and wine with qemu and binfmt support in a chroot.I tried that once, but apparently qemu required a patch for something called "NTPL support" to run wine :P
If you just want some calculating capabilities similiar to the nspire, there are some apps in the store.
Anyway, ARM emu on ARM, though... :PDoes ARM support hardware virtualization ?
The core of a good reverse engineer tool is to provide a nice user interface. Decompilation is mostly useless anyway. I'll try it, do you use it?Nspire-emu is like, the only thing I rely on Wine for atm. :PI've still got IDA. It's a real PITA to use sometimes.
You might want to try try radare2. You can import the Nspire .idc files using a script called idc2rdb. Although radare2 doesn't have a good GUI and it lacks decompilation support.
You know, "there's an app for that" :P I'm sure that somewhere is wine on an android device on the internet. Wouldn't be much fun, though.In theory you could run X and wine with qemu and binfmt support in a chroot.I tried that once, but apparently qemu required a patch for something called "NTPL support" to run wine :P
If you just want some calculating capabilities similiar to the nspire, there are some apps in the store.
BTW, what about QT for iOS ? It compiles fine (and runs almost fine, probably the same issue you mentioned) on Mac, so... maybe ?It may work but be even slower as iOS has some massive restrictions. But I guess it would run on iOS as well if it works on android.
I can try (sometime later....), I guess, as I have a iOS dev. account.
Most ARM processors in consumer devices don't, but AFAIK Aarch64 requires it. (Xen and KVM support the extensions already, they're quite new)Anyway, ARM emu on ARM, though... :PDoes ARM support hardware virtualization ?
Really, nspire_emu on Android phone would be amazing!Well, as you can see above, I couldn't resist so installed the Android SDK, NDK and Qt SDK for Android and it works already :P
But I don't know how to perform what you're asking to do with Qt, Vogtinator.
Well, as you can see above, I couldn't resist so installed the Android SDK, NDK and Qt SDK for Android and it works already :POh, I see, you spoke about Qt on computer, didn't you? Anyway, could you please upload the working app? :p
Yeah, I can upload the "working" app if you want to, but it'll take some minutes to fix some stupid issues (using "-Os" instead of "-Ofast" e.g.) and the framebuffer.For me, it's either /sdcard0 or /sdcard1, depending on if I use the flash or the SD card.
Also, as I have hardcoded the path to boot1 and flash, is "/sdcard" ok?
Is it still supposed to crash in boot1 as you said earlier? Because for me it does.Which version on which platform are you using? It should work just fine on linux, windows and android. Mac crashes due to some mmap weirdness. (https://github.com/Vogtinator/nspire_emu/issues/3)
Still, good job so far!
I changed it and it runs a bit faster now, compiled for armeabi-v7a.Sorry, I was talking about this android app. It's emulating a non-cas classic nspire, right?
Links:
https://dl.dropboxusercontent.com/u/105478372/QtApp-debug-sdcard.apk
Great! It really fixed everything, I could load a CX and a classic OS without any problems. Booting took about 2-3 minutesSame here. How much RAM do you have? Large or small NAND?
The only thing that doesn't seem to work is the "Reset" menu entry, but that's a minor problem (actually not important at all as long as there's no input ).Not surprising, it's not implemented yet, like the file transfer and settings tabs.
Oh, and the progress percentages are displayed after each other on a very long line instead of overwriting the old percentage as on the PC.That's a known bug, it's just appending the serial data to the QPlainTextEdit, '\b' and '\r' are ignored, like other ANSI escape sequences for colors.
Same here. How much RAM do you have? Large or small NAND?3GB RAM. Large or small NAND didn't make a big difference I think (didn't measure the time exactly).
That's a known bug, it's just appending the serial data to the QPlainTextEdit, '\b' and '\r' are ignored, like other ANSI escape sequences for colors.Ah ok. Well, it's not important anyway.
I've got less than a tenth.. Not a surprise that it works with 132MiB NAND for you...Same here. How much RAM do you have? Large or small NAND?3GB RAM. Large or small NAND didn't make a big difference I think (didn't measure the time exactly).
It's already fixed :PQuoteThat's a known bug, it's just appending the serial data to the QPlainTextEdit, '\b' and '\r' are ignored, like other ANSI escape sequences for colors.Ah ok. Well, it's not important anyway.
../emu.c:206:8: internal compiler error: in update_ssa_across_abnormal_edges, at tree-inline.c:1853
memset(rom, -1, 0x80000);
^
Strange, I get an ICE trying to compile it with GCC 4.8.Code: [Select]../emu.c:206:8: internal compiler error: in update_ssa_across_abnormal_edges, at tree-inline.c:1853
memset(rom, -1, 0x80000);
^
gcc version 4.8.3 20140627 [gcc-4_8-branch revision 212064] (SUSE Linux)
andclang version 3.5.0 (tags/RELEASE_350/final 216961)
just fine.gcc version 4.9 20140827 (prerelease) (GCC)
to compile for android and it works well.EDIT: Also, you should add armcode_bin.h to .gitignore.I kept it in the repo as it's a PITA on some platforms to make the header. On windows there are some $PATH issues and xxd not available and on Mac it's not possible to create a 32bit mach file from a binary.
Works for me with gcc 4.9, though it crashed clang now ("internal backend error" on linking emu.o)Report that, I assume you use lld?
I haven't tried yet because I have no idea how to grab the ROM from my Nspire... TiLP doens't work :\TILP can't do it. You have to use polydumper.
It seems that I should delete my repo and start collaborating with the organization.No, don't delete your repo, instead push upstream whenever you like to. If it's in any way a massive change, a pull request is the best way to avoid merge conflicts.
QuoteIt seems that I should delete my repo and start collaborating with the organization.No, don't delete your repo, instead push upstream whenever you like to. If it's in any way a massive change, a pull request is the best way to avoid merge conflicts.
Branches on upstream work as well, but there are no pull requests for them. At least that's how it works now for ndless-nspire/Ndless and Vogtinator/Ndless.
SHIT I THINK I DELETED THE ORG REPO!
I WANTED TO DELETE MINE AND CHANGED TAB ACCIDENTALLY! :banghead: :banghead: :banghead: :banghead: :banghead:
Sorry!!!!!
What can I do? :'(
Oh, so that's what the automatic subscription was about.... :PDid you get a message? If antonio hadn't posted here, I wouldn't know about the accident..
Anyway, back to the code. How should the keymap be implemented? I thought about a direct mapping of characters, so to type a ( you just have to type (. For {, { and so on.Yeah, I think it would be a good idea. But we obviously still need buttons, too (for nspire-specific keys...)
The downside to this is that the shift key can't be controlled anymore. What do you think about that?Hmm. Is there any specific application of this where it could be an annoyance ?
QuoteOh, so that's what the automatic subscription was about.... :PDid you get a message? If antonio hadn't posted here, I wouldn't know about the accident..
Hm, what about Qml/Qt Quick? It seems to be perfect for this, it supports SVG natively and makes design relatively easy.Anyway, back to the code. How should the keymap be implemented? I thought about a direct mapping of characters, so to type a ( you just have to type (. For {, { and so on.Yeah, I think it would be a good idea. But we obviously still need buttons, too (for nspire-specific keys...)
When the core stuff are done, a skin-based thing (well, at least, a keyboard that looks like the real one) would be good too, like what KarmTI does (or to a lesser extent, nRemote (https://github.com/adriweb/nRemote#i---about-)).
I looked at Qt and frame/headless windows (such that custom window shape/frames could be done for the skin-based interface, if that's the plan) and it looked relatively easy (3-4 lines of code in mainwindow actually, for making the window "custom", with transparent background etc.). I think I have the details bookmarked somewhere...
Yeah, only double the work...The downside to this is that the shift key can't be controlled anymore. What do you think about that?Hmm. Is there any specific application of this where it could be an annoyance ?
But once again, the mapping could be temp. disabled with an option, too... :P
So they notify you about repo creation, but not deletion, wtf.QuoteOh, so that's what the automatic subscription was about.... :PDid you get a message? If antonio hadn't posted here, I wouldn't know about the accident..
Got this:Spoiler For Spoiler:
Hm, what about Qml/Qt Quick? It seems to be perfect for this, it supports SVG natively and makes design relatively easy.Ah, maybe. Cool then. I have never used it, so I didn't think about it.
Two seperate modules actually, one of them is WebKit's JavaScriptCore IIRC...Hm, what about Qml/Qt Quick? It seems to be perfect for this, it supports SVG natively and makes design relatively easy.Ah, maybe. Cool then. I have never used it, so I didn't think about it.
As long as it still works on all platform without adding much size overhead (?)
I've been touching the keymap because I wasn't able to use the calculator at all. I could add the remaining keys to the map if you want me to. What do you suggest for the special keys? F1-F12? Alt? Ctrl? ...That's the problem. What about "easy", "normal" keys like (?
It would be very nice to detect mouse over the Lcd widget and send it to the emulator...That's working already (LMB: touch, RMB: click), if you try pyWrite or crafti. Only the OS doesn't like it.
I've been touching the keymap because I wasn't able to use the calculator at all. I could add the remaining keys to the map if you want me to. What do you suggest for the special keys? F1-F12? Alt? Ctrl? ...That's the problem. What about "easy", "normal" keys like (?
You can't assign it to "(" on the keyboard as it's Shift-8. (or Shift-9 for qwerty) and that means shift is active.
Maybe distinguish between left and right shift?
I'm not sure on how to investigate this... Any clue?QuoteIt would be very nice to detect mouse over the Lcd widget and send it to the emulator...That's working already (LMB: touch, RMB: click), if you try pyWrite or crafti. Only the OS doesn't like it.
Of course, shift isn't implemented yet.I've been touching the keymap because I wasn't able to use the calculator at all. I could add the remaining keys to the map if you want me to. What do you suggest for the special keys? F1-F12? Alt? Ctrl? ...That's the problem. What about "easy", "normal" keys like (?
You can't assign it to "(" on the keyboard as it's Shift-8. (or Shift-9 for qwerty) and that means shift is active.
Maybe distinguish between left and right shift?
Qt::Key_Question among others is working for me... :)
Right click the right edge in the center and the cursor moves.I'm not sure on how to investigate this... Any clue?QuoteIt would be very nice to detect mouse over the Lcd widget and send it to the emulator...That's working already (LMB: touch, RMB: click), if you try pyWrite or crafti. Only the OS doesn't like it.
That could work, what do you mean by normal keyboard emulation?"Operation"... May be Spanglish. I meant the computer OS handles the keypress.
Oops, of course, operation not emulation.That would be very nice... I think it would be a good idea to have a look on how the official emulator handles all this details.
So if the { key is pressed, it triggers Ctrl and then the ( key on the calc?
Anyway, to dump your boot1, @jamesguessis, you can use PolyDumper (https://tiplanet.org/forum/archives_voir.php?id=3829).I kinda lost my nspire, this is the only reason i'm trying to USE the emulator.
Hey Vogtinator and antoniovazquezblanco (and anybody I should have addressed),Great! I assume you used a flash file createy by nspire_emu v0.70?
Just wanted to say I was able to compile and run the emulator you are working on from source! :)
I am on Linux (OpenSuse), I got a TI-NSpire CX with 3.6.0.550 image running and installed NDless 3.6 on it :)
Thanks for working on this! And have an amazing day!Thanks, you too!
Great! I assume you used a flash file createy by nspire_emu v0.70?
If you're running on 64bit, could you try the latest source with x86-64 JIT?