Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > Vice Monitor
2010-06-08 00:27
Voltage
Account closed

Registered: Jul 2008
Posts: 14
Vice Monitor

Howdy all,

I've been toying with some vic timing tricks and I've read that when entering the monitor from vice, that I should see the current raster line and cycle.

I only ever get LIN 000 and CYC 000.

I'm using winvice 2.2, but I've also tried with winvice 2.1 with the same results.

Anyone have any advice?

Cheers

Voltage
2010-06-08 00:37
assiduous
Account closed

Registered: Jun 2007
Posts: 343
and whats wrong with that ? apparently vice enters the monitor at the start of a frame instead of some random cycle,thats why you`re seeing line 0 cycle 0. use `STEP` to step through the instructions or set a break point at the start of your vic code.
2010-06-08 03:45
Voltage
Account closed

Registered: Jul 2008
Posts: 14
That did the trick.

Thanks.
2010-06-08 05:19
enthusi

Registered: May 2004
Posts: 677
Yeah, I think vice does enter at the same point every time which can be a (minor) pain if you want (for example) enter during some rastersplit. Even if that area covers 80% of the screen, you're doomed to miss it and have to look for code executed in that raster-range to get a breakpoint set.
If there is some 'break at rasterline X' command I missed it as well.
But I'd want ONE! =)
2010-06-08 06:01
MagerValp

Registered: Dec 2001
Posts: 1078
z instruction (STEP) takes an option argument of how many instructions to step. The C64 executes roughly 20 instructions per rasterline, so to step down to line 100 or thereabouts use z +2000. For example on the basic screen:

** Monitor 000 001
(C:$e5cf) z +2000
Stepping through the next 2000 instruction(s).

** Monitor 100 021
.C:e5cf 85 CC STA $CC
(C:$e5cf)
2010-06-08 06:14
Mr. SID

Registered: Jan 2003
Posts: 424
Still, this kinda sucks. On Power64 I could just use the tl command to trace to the beginning of any rasterline.
Oh, and it had this command to dump the VIC state:

v vic
>VIC State (Video IC - $D000-$D02E)
>  Scanline: 0 - Cycle: 3
>
>  Display Mode: Standard Text
>  Scroll X/Y:   0/3
>  Screen Size:  40 x 25 Characters
>
>  VIC Memory Bank: $0000 - $3FFF
>  Video Memory:    $0400
>  Character Set:   $D000
>  Bitmap Memory:   $0000
>
>            Spr.0  Spr.1  Spr.2  Spr.3  Spr.4  Spr.5  Spr.6  Spr.7
>  Enabled:    No     No     No     No     No     No     No     No  
>  X-Pos:       0      0      0      0      0      0      0      0  
>  Y-Pos:       0      0      0      0      0      0      0      0  
>  Data:    $0000  $0000  $0000  $0000  $0000  $0000  $0000  $0000
>  Color:       1      2      3      4      5      6      7     12
>  Mode:      Std.   Std.   Std.   Std.   Std.   Std.   Std.   Std.
>  X-Expand:   No     No     No     No     No     No     No     No  
>  Y-Expand:   No     No     No     No     No     No     No     No  
>  Priority:  Spr.   Spr.   Spr.   Spr.   Spr.   Spr.   Spr.   Spr. 
>
>  Raster IRQ Scanline: 311
>  Enabled Interrupts:  None
>  Pending Interrupts:  Raster


I still miss that a lot in VICE...
2010-06-08 07:06
Radiant

Registered: Sep 2004
Posts: 639
(C:$dd10) io
VIC-II:
>C:d000  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 1b 00 00  00 00 c8 00   ........................
>C:d018  15 71 f0 00  00 00 00 00  fe f6 f1 f2  f3 f4 f0 f1  f2 f3 f4 f5  f6 f7 fc      .q.....................
SID:
>C:d400  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00   ........................
>C:d418  00 ff ff 00  00 00 00 00                                                       ........
CIA1:
>C:dc00  7f ff ff 00  65 3f ff ff  00 00 00 01  00 00 01 08                             ....M?..........
CIA2:
>C:dd00  97 ff 3f 00  ff ff ff ff  00 00 00 01  00 00 08 08                             ..?.............

You don't get the syntactic sugar and raster IRQ line/VIC bank, but otherwise it's pretty much the same.
2010-06-08 08:35
Mr. SID

Registered: Jan 2003
Posts: 424
While I can read VICE's io output too, I wouldn't go as far as calling it the same. It's not just syntactic sugar, it saves time and leaves less room for making mistakes...
2010-06-08 10:12
enthusi

Registered: May 2004
Posts: 677
Just patched vice-2.2/src/monitor/monitor.c to display this:

** Monitor 000 001
(C:$e5d4) io

Display Mode: Standard Text
GFX Mode: hires color
VIC Memory Bank: $0000 - $3fff
Video Memory: $0400
Character Set: $d000
Bitmap Memory: $0000

VIC-II:
>C:d000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
>C:d010 00 1b 00 00 00 00 c8 00 15 71 f0 00 00 00 00 00 .........q......
>C:d020 fe f6 f1 f2 f3 f4 f0 f1 f2 f3 f4 f5 f6 f7 fc ...............

Could be enhanced easyly of course:
if (mem_ioreg_list_base) {
        while (1) {
            
            if (n==0)
              { 
              v_d016 = mon_get_mem_val(default_memspace,0xd016);
              v_d011 = mon_get_mem_val(default_memspace,0xd011);
              v_dd00 = mon_get_mem_val(default_memspace,0xdd00);
              v_d018 = mon_get_mem_val(default_memspace,0xd018);
              v_bmflag = ((v_d011&0x20)>>5); /* 0 text, 1 gfx */
              v_hmflag = (v_d016&0x10)>>4; /* 0 hires, 1 multi */
              v_bank = 0xc000 - (v_dd00 & 3) * 0x4000;
              v_bitmap = ((v_d018 >> 3) & 1) * 0x2000 + v_bank;
              v_map = (v_d018 >> 4) * 0x0400 + v_bank;
	            v_font = ((v_d018 >> 1) & 0x7)*0x800 + v_bank;
              /* $1000 and $9000 mapped to $d000 */
              if ((v_font==0x1000)||(v_font==0x9000)) v_font=0xd000;

              if (v_bmflag) mon_out("Display Mode: Bitmap gfx\n");
                else mon_out("Display Mode: Standard Text\n");

              if (v_hmflag) mon_out("GFX Mode: multi color\n");
                else mon_out("GFX Mode: hires color\n");

              mon_out("VIC Memory Bank: $%04x - $%04x\n",v_bank,v_bank+0x3fff);
              mon_out("Video Memory:    $%04x\n",v_map);
              if (!v_bmflag) mon_out("Character Set:   $%04x\n",v_font);
              mon_out("Bitmap Memory:   $%04x\n\n",v_bitmap);
              }




Edit: I assume this to fuck up all monitors except for x64.
2010-06-09 06:07
MagerValp

Registered: Dec 2001
Posts: 1078
What would really rock would be a command to display the internal state of the chipset, and not just its external registers. It'd be a huge help for coding VIC tricks, and the SID would show something more interesting than zeros...
2010-06-09 10:28
Frantic

Registered: Mar 2003
Posts: 1648
Magervalp is right. It is precisely those things—those that would not be possible on C64—that make a emulator monitor especially valuable in some cases. In a similar vein, one cannot really check the status of the SID at a particular moment, as it works right now. I think it only shows the last value written to any SID register for all registers (just like the real SID works, when seen from the "outside").
2010-06-09 13:40
Mr. SID

Registered: Jan 2003
Posts: 424
This just proofs that the io command in VICE is utterly useless. Even for the VIC, I'd want to see both the read and the write state of $d012. Or for timers of a CIA. Currently it's far from useful.
2010-06-09 20:53
iAN CooG

Registered: May 2002
Posts: 3195
Enthusi: cheers, would be nice. But beware of the check for $1000/$9000, also $1800/$9800 should see $d800. Also, machine type can be checked.
--- monitor.c	2010-06-09 09:14:09 +0000
+++ monitor.c	2010-06-09 09:20:37 +0000
@@ -1288,4 +1288,45 @@
     if (mem_ioreg_list_base) {
         while (1) {
+            /*  Enthusi/ONS, fix by iAN CooG - display vic regs verbosely - start */
+            if (n==0) {
+                if (machine_class == VICE_MACHINE_C64   ||
+                    machine_class == VICE_MACHINE_C128  ||
+                    machine_class == VICE_MACHINE_C64DTV||
+                    machine_class == VICE_MACHINE_C64SC ) {
+                    int v_d016,v_d011,v_d018,v_dd00,v_bank,v_bitmap,v_map,v_font,v_bmflag,v_hmflag;
+                    v_d016 = mon_get_mem_val(default_memspace, 0xd016);
+                    v_d011 = mon_get_mem_val(default_memspace, 0xd011);
+                    v_dd00 = mon_get_mem_val(default_memspace, 0xdd00);
+                    v_d018 = mon_get_mem_val(default_memspace, 0xd018);
+                    v_bmflag = ((v_d011 & 0x20) >> 5); /* 0 text, 1 gfx */
+                    v_hmflag = (v_d016 & 0x10) >> 4; /* 0 hires, 1 multi */
+                    v_bank = 0xc000 - (v_dd00 & 3) * 0x4000;
+                    v_bitmap = ((v_d018 >> 3) & 1) * 0x2000 + v_bank;
+                    v_map = (v_d018 >> 4) * 0x0400 + v_bank;
+                    v_font = ((v_d018 >> 1) & 7) * 0x0800 + v_bank;
+                    /* $1x00 and $9x00 mapped to $dx00 */
+                    if ( (( v_font >> 12) == 1 ) ||
+                         (( v_font >> 12) == 9 ) ) {
+                        v_font = 0xd000 | (v_font & 0x0f00);
+                    }
+                    if (v_bmflag) {
+                        mon_out("Display Mode: Bitmap gfx\n");
+                    } else {
+                        mon_out("Display Mode: Standard Text\n");
+                    }
+                    if (v_hmflag) {
+                        mon_out("GFX Mode: multi color\n");
+                    } else {
+                        mon_out("GFX Mode: hires color\n");
+                    }
+                    mon_out("VIC Memory Bank: $%04x - $%04x\n", v_bank, v_bank + 0x3fff);
+                    mon_out("Video Memory:    $%04x\n",v_map);
+                    if (!v_bmflag) {
+                        mon_out("Character Set:   $%04x\n", v_font);
+                    }
+                    mon_out("Bitmap Memory:   $%04x\n\n", v_bitmap);
+                }
+            }
+            /*  Enthusi/ONS, fix by iAN CooG - display vic regs verbosely - end */
             mon_out("%s:\n", mem_ioreg_list_base[n].name);
             start = new_addr(default_memspace, mem_ioreg_list_base[n].start);
2010-06-10 04:54
chatGPZ

Registered: Dec 2001
Posts: 11386
i have added the needed mechanisms to dump states of any io devices.... try "io d000" in recent trunk, it will give output very similar to what mr.sid suggested :) (and ofcourse its now easily possible to extend and to add whatever fancy info from the internal structures)
2010-06-10 08:42
enthusi

Registered: May 2004
Posts: 677
the above posted patch is not complete obviously.
You will have to declare v_bank etc. first.
And the bitmap address need not be displayed in text-mode, etc...
But I guess if someone adds a "are we in c64-mode?"-check it could be formed into a real patch.
2010-06-10 19:08
iAN CooG

Registered: May 2002
Posts: 3195
Quote: i have added the needed mechanisms to dump states of any io devices.... try "io d000" in recent trunk, it will give output very similar to what mr.sid suggested :) (and ofcourse its now easily possible to extend and to add whatever fancy info from the internal structures)

Nice, Groepaz! I've applied this change and it works for me
--- vicii.c	2010-06-09 17:16:40 +0000
+++ vicii.c	2010-06-10 09:39:16 +0000
@@ -1372,5 +1372,5 @@
     m_disp = ((vic->regs[0x11] & 0x20) >> 5); /* 0 text, 1 bitmap */

-    v_bank = 0; /* FIXME */
+    v_bank = vic->vbank_phi2; /* FIXME: using either vbank_phi1 is the same or not? */

     mon_out("Display Mode:");
@@ -1389,5 +1389,10 @@
     mon_out("\nVIC Memory Bank:   $%04x - $%04x\n", v_bank, v_bank+0x3fff);
     mon_out("\nVideo Memory:      $%04x\n", ((vic->regs[0x18] >> 4) * 0x0400) + v_bank);
-    mon_out("Character Set:     $%04x\n", (((vic->regs[0x18] >> 1) & 0x7) * 0x800) + v_bank);
+    i=(((vic->regs[0x18] >> 1) & 0x7) * 0x800) + v_bank;
+    /* $1x00 and $9x00 mapped to $dx00 */
+    if ( (( i >> 12) == 1 ) || (( i >> 12) == 9 ) ) {
+        i = 0xd000 | (i & 0x0f00);
+    }
+    mon_out("Character Set:     $%04x\n", i);
     mon_out("Bitmap Memory:     $%04x\n", (((vic->regs[0x18] >> 3) & 1) * 0x2000) + v_bank);



too bad it has to be duplicated in viciinew\ aswell
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
The Syndrom/TIA/Pret..
CA$H/TRiAD
Microshark/Damage(HUN)
Mihai
The Phantom
rikib80
Freeze/Blazon
Guests online: 95
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 Edge of Disgrace  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 No Listen  (9.6)
2 Layers  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 Dawnfall V1.1  (9.5)
7 Rainbow Connection  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 Libertongo  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Censor Design  (9.3)
5 Triad  (9.3)
Top NTSC-Fixers
1 Pudwerx  (10)
2 Booze  (9.7)
3 Stormbringer  (9.7)
4 Fungus  (9.6)
5 Grim Reaper  (9.3)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.051 sec.