Spreading my own resources a bit thin lately.
a) Investigating the crash bug in Vectorblade still shows no results
b) helping some other vectrex coders
c) preparing a Vide release
(d) playing games)
Anyway – I have a new Vide Release candidate – it has been over a year since last official changes to Vide. Still – there is no “big thing” here. It is rather a maintenance release.
Following are my own notes regarding the changes:
(The “C Warnings” are not new in this release, only discovered and documented!)
- C: WARNING – code like below does not work – even though dp_VIA_port_b is declared as volatile, it is not read again!
dp_VIA_port_b = 0x01;
if ((dp_VIA_port_b & 0x40) == 0x40)
Implementation of “volatile” is compiler dependend, to be on the save side explicit memory barriers should be set, like:
asm volatile (“” ::: “memory”); // memory barrier
before the if clause in above example!
- C: WARNING – Code MIGHT be build wrongly if the second parameter of a function is 8 bit and the first is 16 bit, example:
extern void foo(unsigned long int x, unsigned int b);
static unsigned int v;
This is a gcc bug, documented in:
also documented methods to circumvent (usage of compile parameters!)!
For new C – projects the command line parameters
“-fno-ipa-reference -ftree-ter” are added per default!
- C: linkage changed (Peer) – only library/calls which are needed are linked, removed option to use RUM INLINED
- C: new CRT0, which always has 48k support enabled
(old assembler sources (YM-song data…) generated might have a line
these must be exchanged with
- C: assert functionality added (Peer)
in “main” just add
Per default asserts are active, do switch them off use either in code: “#define NDEBUG”,
or add the CCFLAG parameter (in project) “-D NDEBUG”.
Active asserts use precious cycles!
If an asserts fires, a message with the assert parameters are output.
On a button press the program continues (at your own risk)!
- misc: fixed download link for YM files (https now)
- vecxi: added mouse Analog -> coordinate input method (Graham)
Note mouse coordinates in window map to scale +-127, to get 1:1, either change the scale of drawing…
Or “zoom” in using configuration “emulated vectrex integrator max” (smaller values)
- vedi: Add cmd A to editor (on OSX this has to be done manually for all field… I am certain I missed a few!)
- vedi: add cmd A/X/C/V to search
- vedi: all (in Vide added) tabs are now spaces
- dissi/vecxi: added “nmi”
- vecci: added hotkeys (standard) for delete (del) copy(meta c)/cut(meta x)/paste(meta v) undo(meta z)/redo(meta shift z) selectAll (meta a) and mode switch (M)
-> needs new config settings
Win -> meta = CTRL
Max -> meta = Command
- vecxi: added “super” save to debug when “SHIFT” is pressed during save (takes quiet some time, depending on the backstep configuration)
- all: added more debug info to startup and search of VIDE_HOME
- util: added some vecVefer conversion modes (8)
- test: for testing purposes added a vectrex color mode (Jason)
- vecci: added (text-)import filter for synced lists
- vecci: added import filter for Gyrock lists
- vecci: added template for smartlist with NO SHIFT REGISTER usage
- vedi: added “*.md” files to be editable
- vedi: pretty print asm if then else elseif ifdef … Only 1 space “insert”
- vecxi: added “faulty” VIA mode
- vedi: if resulting binary is too large – it prints the size!
- -vecxi: Changes done in Vide for 100% cycle exact execution of VB
(it still is not 100%!)
- -vecxi: T1 timer one shot, was not “reset” with latch values after reaching 0, including one cycle “duration” of reset (reloaded value is shown “false” in vecxi since it shows “value+”)
the real VIA shows hi ff, lo 0 and than the “real” value appears next round – >there is a delay of one cycle!
- -vecxi: t2 needs one cycle to START the actual timer, befor it counts down
- -vecxi: values read with “lda” kind of instructions are read AFTER all instruction cycles are processed (however strange that may be)
- -vecxi: STB direct, value is written after 3 of 4 cycles (STA after 4 !?!?!?)
- -vecxi: Info (still): falsly shown in Vide:
– State of CB1 (also interrupt flag CB1), vectrex has NO CB1
– half carry is “uncertain” emulated
- dissi: load in dissi different configured disassemblings
- vedi: file not found exception when trying to edit file properties
- dissi: UNOWN data types were possible in dissi (not disassembled)
- dissi: strings could be “closed” with any negative value (instead of only 0x80) – during a string scan!
- vedi: include in subdirectories were not parsed correctly (sometimes)
- vecci: corrected VBSmartlist generation
- vecxi: analog joystick vertical in relative mode had wrong directions
- vecxi: better reconnect to joysticks that time out
- vedi: lower/upper character independency added in label jumping
- ym/vedi: ym menu was not enabled correctly
- vecxi: soft reset no does not delete/initialize RAM
- vecx: joystick buttons must only be set, when PSG regs are in output mode
Just received a new gcc.lib from Peer.
This is NOT YET included!
The only function implemented in the downloadable version of gcc.lib is memcpy.
Download: Windows 32
Download: Windows 64
Download: Mac OSX
Download: Ubuntu Linux 32
Download: Ubuntu Linux 64
Download: Debian Linux 64
Download: Java (JRE 1.8)
Still bug hunting for the crash. Starting to reduce code complexity in order to circle in.
I (we) have decided to not implement the Major Havoc stuff. This gives us some free space for additionional “nonsense” :-). I started using the space, by adding different Fighter “skins” for each type of shot, that can be fired:
On the other hand… except about 50 small screws for the cartridges – I have EVERYTHING I need to finish Vectorblade:
- Overlay protection
- Cartridge shell
- Flash, chips and solder
- Shipping boxes
- “Fill material”
- only about 50 screws 🙂
Now – I didn’t think this would be the case… I just have to FINISH Vectorblade (mostly finding the BUG).