diff --git a/zsnes/src/chips/sa1regs.asm b/zsnes/src/chips/sa1regs.asm index f0f7283f..95429aaa 100644 --- a/zsnes/src/chips/sa1regs.asm +++ b/zsnes/src/chips/sa1regs.asm @@ -1928,7 +1928,7 @@ EXTSYM BWUsed2 je .nosa1 mov dword[CurBWPtr],ebx .nosa1 - mov byte[debstop3],1 +; mov byte[debstop3],1 ret NEWSYM sa12250w mov byte[SA1ARC],al diff --git a/zsnes/src/dos/debug.asm b/zsnes/src/dos/debug.asm index 018c6971..5c1cfdcd 100644 --- a/zsnes/src/dos/debug.asm +++ b/zsnes/src/dos/debug.asm @@ -43,7 +43,7 @@ EXTSYM regaccessbankr8,selcB800,snesmap2,snesmmap EXTSYM ram7f EXTSYM StringLength EXTSYM exiter -EXTSYM SA1Status,CurrentCPU +EXTSYM SA1Status,CurrentCPU,SA1RegP EXTSYM curypos,xa,xd,xdb,xe,xp,xpb,xpc,xs,xx,xy EXTSYM SA1xpb,SA1xpc,SA1xa,SA1xx,SA1xy,SA1xd,SA1xdb,SA1xs EXTSYM cycpbl,debugbuf,soundon,spcA,spcNZ,spcP,spcPCRam @@ -147,16 +147,19 @@ NEWSYM startdebugger call Create_File xor ecx,ecx mov bx,ax -; mov ecx,65536 -; mov edx,[vram] + mov ecx,65536 + mov edx,[vram] + EXTSYM oamram + mov edx,oamram + mov ecx,544 ; mov ecx,2048*4 ; mov edx,[C4Ram] ; mov ecx,32768 ; mov edx,[romdata] ; add edx,65536*13h ; mov ecx,2EFh - mov edx,SDD1Array - mov ecx,[SDD1Entry] +; mov edx,SDD1Array +; mov ecx,[SDD1Entry] ; mov edx,[romdata] ; add edx,32768*40 ; mov edx,cnetplaybuf @@ -188,6 +191,10 @@ NEWSYM startdebugger ; mov edx,[romdata] ; add edx,3E5CCEh ; mov ecx,0022h +; mov edx,[romdata] +; add edx,1024*4096 +; mov ecx,65536 + or ecx,ecx jz .nofilecontents call Write_File @@ -385,7 +392,7 @@ NEWSYM debugloopb mov ah,07h int 21h cmp al,59 - je .execute65816 + je near .execute65816 cmp al,62 je near debugloadstate cmp al,60 @@ -396,6 +403,8 @@ NEWSYM debugloopb je .exit cmp al,13 je near .loope + cmp al,'-' + je near .skipopcode cmp al,'C' je near .clear cmp al,'M' @@ -448,8 +457,59 @@ NEWSYM debugloopb ; jnz .n jmp debugloopa +.skipopcode + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + mov bl,[xpb] + mov ax,[xpc] + test ax,8000h + jz .loweraddrso + mov esi,[snesmmap+ebx*4] + jmp .skiplowerso +.loweraddrso + cmp ax,4300h + jb .lowerso + cmp dword[memtabler8+ebx*4],regaccessbankr8 + je .dmaso +.lowerso + mov esi,[snesmap2+ebx*4] + jmp .skiplowerso +.dmaso + mov esi,dmadata-4300h +.skiplowerso + mov [initaddrl],esi + add esi,eax ; add program counter to address + ; 10,30,50,70,80,90,B0,D0,F0 + cmp byte[esi],10h + je .okay + cmp byte[esi],30h + je .okay + cmp byte[esi],50h + je .okay + cmp byte[esi],70h + je .okay + cmp byte[esi],80h + je .okay + cmp byte[esi],90h + je .okay + cmp byte[esi],0B0h + je .okay + cmp byte[esi],0D0h + je .okay + cmp byte[esi],0F0h + je .okay + jmp .notokay +.okay + mov word[esi],0EAEAh +.notokay + jmp debugloopa + .loope + mov byte[skipdebugsa1],0 call execnextop + mov byte[skipdebugsa1],1 cmp byte[soundon],0 je .nosnd test byte[debugds],02h @@ -1612,40 +1672,6 @@ NEWSYM breakatsign cmp al,27 je .skipc .skipa - mov al,[dmadata+01h] - and al,0F0h - cmp al,40h - je .skipc2 - mov al,[dmadata+11h] - and al,0F0h - cmp al,40h - je .skipc2 - mov al,[dmadata+21h] - and al,0F0h - cmp al,40h - je .skipc2 - mov al,[dmadata+31h] - and al,0F0h - cmp al,40h - je .skipc2 - mov al,[dmadata+41h] - and al,0F0h - cmp al,40h - je .skipc2 - mov al,[dmadata+51h] - and al,0F0h - cmp al,40h - je .skipc2 - mov al,[dmadata+61h] - and al,0F0h - cmp al,40h - je .skipc2 - mov al,[dmadata+71h] - and al,0F0h - cmp al,40h - je .skipc2 -.skipc2 - mov eax,[ram7f] cmp byte[debstop3],1 jne near .loopa mov byte[debstop3],0 @@ -1783,9 +1809,9 @@ NEWSYM breakatsignlog ; cmp byte[spcRam+6],40h ; je .skipc mov eax,[ram7f] - jmp .loopa -; cmp byte[debstop3],1 -; jne .loopa +; jmp .loopa + cmp byte[debstop3],1 + jne near .loopa .skipc mov byte[debstop3],0 ; copy back data @@ -1857,7 +1883,7 @@ NEWSYM prbreak, db 0 NEWSYM breakatsignb mov byte[keyonsn],0 mov byte[prbreak],0 - mov byte[debuggeron],1 +; mov byte[debuggeron],1 mov byte[exiter],01h xor eax,eax @@ -1922,7 +1948,7 @@ NEWSYM breakatsignb sub esi,eax ; subtract program counter by address mov [xpc],si mov byte[exiter],0 - mov byte[debuggeron],0 +; mov byte[debuggeron],0 ret ;******************************************************* @@ -1934,7 +1960,7 @@ NEWSYM sndwrit, db 0 NEWSYM breakatsignc mov byte[prbreak],0 mov byte[sndwrit],0 - mov byte[debuggeron],1 +; mov byte[debuggeron],1 mov byte[exiter],01h xor eax,eax @@ -2001,7 +2027,7 @@ NEWSYM breakatsignc sub esi,eax ; subtract program counter by address mov [xpc],si mov byte[exiter],0 - mov byte[debuggeron],0 +; mov byte[debuggeron],0 ret ;******************************************************* @@ -2290,6 +2316,9 @@ NEWSYM startdisplay ; Next Opcode Writes the next opcode & regs ;******************************************************* ; 008000 STZ $123456,x A:0000 X:0000 Y:0000 S:01FF DB:00 D:0000 P:33 E+ +NEWSYM debugsa1, db 0 +NEWSYM skipdebugsa1, db 1 + NEWSYM nextopcode push es mov es,[selcB800] @@ -2307,7 +2336,10 @@ NEWSYM nextopcode mov edi,160+52 mov ax,word[curypos] call .printnum - pop es + + mov ax,ds + mov es,ax + ; set output pointer mov edi,[debugbuf] ; set write pointer inc edi @@ -2319,7 +2351,14 @@ NEWSYM nextopcode pop bx add edi,eax + cmp byte[debugsa1],1 + je .sa1 call .outputbuffer + jmp .nosa1 +.sa1 + mov byte[debugsa1],0 + call .outputbuffersa1 +.nosa1 ; increment tail/head call .addtail @@ -2344,6 +2383,7 @@ NEWSYM nextopcode mov dh,0 mov dl,0 int 10h + pop es ret .outputbuffer @@ -2454,6 +2494,107 @@ NEWSYM nextopcode stosb ret +.outputbuffersa1 + mov al,'-' + stosb + + ; output pb/pc + mov al,[SA1xpb] + call .printhex8 + mov ax,[xpc] + call .printhex16 + mov al,32 + stosb + + ; output instruction + xor ebx,ebx + mov bl,[SA1xpb] + xor eax,eax + mov ax,[xpc] + test ax,8000h + jz .loweraddrsa1 + mov ebx,[snesmmap+ebx*4] + jmp .skiplowersa1 +.loweraddrsa1 + cmp ax,4300h + jb .lowersa1 + cmp dword[memtabler8+ebx*4],regaccessbankr8 + je .dmasa1 +.lowersa1 + mov ebx,[snesmap2+ebx*4] + jmp .skiplowersa1 +.dmasa1 + mov ebx,dmadata-4300h +.skiplowersa1 + add ebx,eax ; add program counter to address + xor ah,ah + mov al,[ebx] ; get instruction number + mov esi,ocname + shl eax,2 + add esi,eax + mov ecx,4 + rep movsb + call .outaddrmode + + ; output registers + mov al,'A' + stosb + mov al,':' + stosb + mov ax,[SA1xa] + call .printhex16 + mov al,32 + stosb + mov al,'X' + stosb + mov al,':' + stosb + mov ax,[SA1xx] + call .printhex16 + mov al,32 + stosb + mov al,'Y' + stosb + mov al,':' + stosb + mov ax,[SA1xy] + call .printhex16 + mov al,32 + stosb + mov al,'S' + stosb + mov al,':' + stosb + mov ax,[SA1xs] + call .printhex16 + mov al,32 + stosb + mov al,'D' + stosb + mov al,'B' + stosb + mov al,':' + stosb + mov al,[SA1xdb] + call .printhex8 + mov al,32 + stosb + mov al,'D' + stosb + mov al,':' + stosb + mov ax,[SA1xd] + call .printhex16 + mov al,32 + stosb + mov al,'P' + stosb + mov al,':' + stosb + mov al,[SA1RegP] + call .printhex8 + ret + .addtail inc word[debugt] cmp word[debugt],100