Przeglądaj źródła

o add mmio to trigger cart irq
o add snes irq handlers
o add inline printf asm

David Voswinkel 15 lat temu
rodzic
commit
5dd4904f9c

+ 21 - 9
snes/irqtest/debug.asm

@@ -1,22 +1,34 @@
-.define	debug_pointer			$0080 
+.define	debug_pointer			$080 
 
-.MACRO printf
-    ldy.w   #\1                 ; load add of the string
+.MACRO printdb
+    ldy.w   #\1                 ; load addr of the marco arg string
     sty.w   debug_pointer       ; store address in defined mem area
-    ldy     #0                  ; zero y
+    ldy     #0                  ; zero y index
     jsr     do_printf           
 .ENDM
 
 
+.MACRO prints
+
+    ldy.w   #++                ; load addr of the marco arg string
+    sty.w   debug_pointer       ; store address in defined mem area
+    ldy     #0                  ; zero y index
+    jsr     do_printf           
+    jmp     +++
+++:
+    .db     \1,10,0
++++:
+
+.ENDM
 
 .BANK 0
 .SECTION "debug" SEMIFREE
 
 do_printf:
-    lda     (debug_pointer),y    ; get address of string
-	sta     $3000               ; write to MMIO debug reg
-	iny
-	cmp     #0                  ; len 5
-	bne     do_printf
+    lda     (debug_pointer),y   ; get address of string via indirect mem area
+    sta     $3000               ; write to MMIO debug reg
+    iny                         ; inc index
+    cmp     #0                  ; look for null byte
+    bne     do_printf
     rts
 .ENDs

+ 10 - 10
snes/irqtest/header.inc

@@ -34,19 +34,19 @@
 .ENDSNES
 
 .SNESNATIVEVECTOR               ; Define Native Mode interrupt vector table
-  COP EmptyHandler
-  BRK EmptyHandler
-  ABORT EmptyHandler
-  NMI EmptyHandler
-  IRQ EmptyHandler
+  COP       COPHandler
+  BRK       BRKHandler
+  ABORT     ABRTHandler
+  NMI       NMIHandler
+  IRQ       IRQHandler
 .ENDNATIVEVECTOR
 
 .SNESEMUVECTOR                  ; Define Emulation Mode interrupt vector table
-  COP EmptyHandler
-  ABORT EmptyHandler
-  NMI EmptyHandler
-  RESET Start
-  IRQBRK EmptyHandler
+  COP       EmptyHandler
+  ABORT     EmptyHandler
+  NMI       EmptyHandler
+  RESET     Start
+  IRQBRK    EmptyHandler
 .ENDEMUVECTOR
 
 .BANK 0 SLOT 0                  ; Defines the ROM bank and the slot it is inserted in memory.

+ 31 - 15
snes/irqtest/irqtest.asm

@@ -45,23 +45,17 @@ Start_do:
    
     ; Setup Video modes and other stuff, then turn on the screen
     jsr SetupVideo
+
+    sei
+    cop
+    prints "Init done"
+    stz $3001
     
-    lda  #65
-    sta  $3000
-    lda  #66
-    sta  $3000
-    lda  #67
-    sta  $3000
-    
-    printf str_COP
-    
-    lda  #65
-    sta  $3000
-    lda  #66
-    sta  $3000
-    lda  #67
-    sta  $3000
+    cop
     
+    lda #$81
+    sta $4200
+
 Infinity:
     jmp Infinity    ; bwa hahahahaha
 
@@ -98,6 +92,28 @@ SetupVideo:
     plp
     rts
 
+;.ENDS
+
+;.SECTION "IRQHandlers" 
+
+COPHandler:
+    prints "COPHandler"
+    rti
+
+BRKHandler:
+    prints "BRKHandler"
+    rti
+ABRTHandler:
+    prints "ABRTHandler"
+    rti
+NMIHandler:
+    ;prints "NMIHandler"
+    rti
+
+IRQHandler:
+    prints "IRQHandler"
+    rti
+
 
 str_COP:
     .db "COP",10,0

+ 66 - 205
snesram.tmproj

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
 	<key>currentDocument</key>
-	<string>tools/bsnes/ppu/bppu/bppu_mmio.cpp</string>
+	<string>snes/irqtest/debug.asm</string>
 	<key>documents</key>
 	<array>
 		<dict>
@@ -63,20 +63,6 @@
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>snes/banktest/header.inc</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>0</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
 		<key>snes/banktest/init.inc</key>
 		<dict>
 			<key>caret</key>
@@ -91,105 +77,79 @@
 			<key>firstVisibleLine</key>
 			<integer>211</integer>
 		</dict>
-		<key>snes/banktest/vram2.asm</key>
+		<key>snes/irqtest/LoadGraphics.asm</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>91</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>43</integer>
-		</dict>
-		<key>snes/mmio/data.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>0</integer>
+				<integer>45</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>snes/mmio/debug.c</key>
+		<key>snes/irqtest/debug.asm</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>4</integer>
+				<integer>22</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>snes/mmio/debug.h</key>
+		<key>snes/irqtest/header.inc</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>10</integer>
-				<key>line</key>
 				<integer>0</integer>
+				<key>line</key>
+				<integer>36</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
+			<integer>9</integer>
 		</dict>
-		<key>snes/mmio/main.c</key>
+		<key>snes/irqtest/init.inc</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>7</integer>
+				<integer>248</integer>
 			</dict>
+			<key>columnSelection</key>
+			<false/>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>5</integer>
-		</dict>
-		<key>tools/bsnes/cart/cart.cpp</key>
-		<dict>
-			<key>caret</key>
+			<integer>211</integer>
+			<key>selectFrom</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>95</integer>
+				<integer>246</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>44</integer>
-		</dict>
-		<key>tools/bsnes/cart/cart.hpp</key>
-		<dict>
-			<key>caret</key>
+			<key>selectTo</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>248</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>24</integer>
 		</dict>
-		<key>tools/bsnes/cc.sh</key>
+		<key>snes/irqtest/intro.asm</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -203,35 +163,35 @@
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>tools/bsnes/memory/memory.cpp</key>
+		<key>snes/irqtest/irqtest.asm</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>4</integer>
+				<integer>0</integer>
 				<key>line</key>
-				<integer>37</integer>
+				<integer>67</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>4</integer>
+			<integer>49</integer>
 		</dict>
-		<key>tools/bsnes/memory/memory.hpp</key>
+		<key>tools/bsnes/cart/cart.cpp</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>95</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
+			<integer>44</integer>
 		</dict>
-		<key>tools/bsnes/memory/smemory/mapper/chip.cpp</key>
+		<key>tools/bsnes/cart/cart.hpp</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -243,95 +203,69 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>tools/bsnes/memory/smemory/mapper/generic.cpp</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>42</integer>
-				<key>line</key>
-				<integer>93</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>39</integer>
+			<integer>24</integer>
 		</dict>
-		<key>tools/bsnes/memory/smemory/mapper/system.cpp</key>
+		<key>tools/bsnes/chip/cmmio/cmmio.cpp</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
+				<integer>1</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>17</integer>
 			</dict>
+			<key>columnSelection</key>
+			<false/>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
-		</dict>
-		<key>tools/bsnes/memory/smemory/smemory.cpp</key>
-		<dict>
-			<key>caret</key>
+			<key>selectFrom</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>17</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>tools/bsnes/ppu/bppu/bppu.cpp</key>
-		<dict>
-			<key>caret</key>
+			<key>selectTo</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
+				<integer>1</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>17</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>67</integer>
 		</dict>
-		<key>tools/bsnes/ppu/bppu/bppu.hpp</key>
+		<key>tools/bsnes/cpu/scpu/memory/memory.cpp</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>13</integer>
+				<integer>1</integer>
 				<key>line</key>
-				<integer>166</integer>
+				<integer>56</integer>
 			</dict>
 			<key>columnSelection</key>
 			<false/>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>134</integer>
+			<integer>56</integer>
 			<key>selectFrom</key>
 			<dict>
 				<key>column</key>
-				<integer>9</integer>
+				<integer>0</integer>
 				<key>line</key>
-				<integer>166</integer>
+				<integer>56</integer>
 			</dict>
 			<key>selectTo</key>
 			<dict>
 				<key>column</key>
-				<integer>13</integer>
+				<integer>2</integer>
 				<key>line</key>
-				<integer>166</integer>
+				<integer>56</integer>
 			</dict>
 		</dict>
-		<key>tools/bsnes/ppu/bppu/bppu_mmio.cpp</key>
+		<key>tools/bsnes/cpu/scpu/memory/memory.hpp</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -343,30 +277,30 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>220</integer>
+			<integer>0</integer>
 		</dict>
-		<key>tools/bsnes/ppu/bppu/bppu_render_mode7.cpp</key>
+		<key>tools/bsnes/cpu/scpu/mmio/mmio.cpp</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>32</integer>
+				<integer>0</integer>
 				<key>line</key>
-				<integer>33</integer>
+				<integer>485</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
+			<integer>459</integer>
 		</dict>
-		<key>tools/bsnes/ppu/ppu.cpp</key>
+		<key>tools/bsnes/memory/memory.cpp</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
+				<integer>6</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>22</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
@@ -376,94 +310,21 @@
 	</dict>
 	<key>openDocuments</key>
 	<array>
+		<string>snes/irqtest/debug.asm</string>
+		<string>tools/bsnes/cpu/scpu/mmio/mmio.cpp</string>
+		<string>tools/bsnes/chip/cmmio/cmmio.cpp</string>
+		<string>tools/bsnes/cpu/scpu/memory/memory.cpp</string>
 		<string>tools/bsnes/memory/memory.cpp</string>
-		<string>tools/bsnes/ppu/ppu.cpp</string>
-		<string>tools/bsnes/ppu/bppu/bppu.cpp</string>
-		<string>tools/bsnes/ppu/bppu/bppu_mmio.cpp</string>
-		<string>tools/bsnes/ppu/bppu/bppu.hpp</string>
-		<string>tools/bsnes/ppu/bppu/bppu_render_mode7.cpp</string>
-		<string>tools/bsnes/cc.sh</string>
-		<string>snes/mmio/main.c</string>
-		<string>snes/mmio/data.h</string>
-		<string>snes/mmio/debug.h</string>
-		<string>snes/mmio/debug.c</string>
-		<string>tools/bsnes/memory/memory.hpp</string>
+		<string>tools/bsnes/cpu/scpu/memory/memory.hpp</string>
+		<string>snes/irqtest/irqtest.asm</string>
+		<string>snes/irqtest/intro.asm</string>
+		<string>snes/irqtest/LoadGraphics.asm</string>
+		<string>snes/irqtest/init.inc</string>
+		<string>snes/irqtest/header.inc</string>
 	</array>
 	<key>showFileHierarchyDrawer</key>
 	<false/>
-	<key>showFileHierarchyPanel</key>
-	<true/>
-	<key>treeState</key>
-	<dict>
-		<key>snesram</key>
-		<dict>
-			<key>isExpanded</key>
-			<true/>
-			<key>subItems</key>
-			<dict>
-				<key>snes</key>
-				<dict>
-					<key>isExpanded</key>
-					<true/>
-					<key>subItems</key>
-					<dict/>
-				</dict>
-				<key>tools</key>
-				<dict>
-					<key>isExpanded</key>
-					<true/>
-					<key>subItems</key>
-					<dict>
-						<key>bsnes</key>
-						<dict>
-							<key>isExpanded</key>
-							<true/>
-							<key>subItems</key>
-							<dict>
-								<key>lib</key>
-								<dict>
-									<key>isExpanded</key>
-									<true/>
-									<key>subItems</key>
-									<dict/>
-								</dict>
-								<key>memory</key>
-								<dict>
-									<key>isExpanded</key>
-									<true/>
-									<key>subItems</key>
-									<dict/>
-								</dict>
-								<key>ppu</key>
-								<dict>
-									<key>isExpanded</key>
-									<true/>
-									<key>subItems</key>
-									<dict>
-										<key>bppu</key>
-										<dict>
-											<key>isExpanded</key>
-											<true/>
-											<key>subItems</key>
-											<dict/>
-										</dict>
-									</dict>
-								</dict>
-								<key>ui_qt</key>
-								<dict>
-									<key>isExpanded</key>
-									<true/>
-									<key>subItems</key>
-									<dict/>
-								</dict>
-							</dict>
-						</dict>
-					</dict>
-				</dict>
-			</dict>
-		</dict>
-	</dict>
 	<key>windowFrame</key>
-	<string>{{0, 58}, {720, 820}}</string>
+	<string>{{0, 59}, {895, 819}}</string>
 </dict>
 </plist>

+ 6 - 0
tools/bsnes/chip/cmmio/cmmio.cpp

@@ -35,6 +35,12 @@ void CMMIO::mmio_write(unsigned addr, uint8 data) {
       fprintf(stderr,"%c",data);
       fflush(stderr);
   }
+  if (addr == 0x3001){
+      fprintf(stderr,"Trigger IRQ\n");
+      fflush(stderr);
+      cpu.triggerIRQ();
+  }
+
 }
 
 CMMIO::CMMIO() {

+ 4 - 0
tools/bsnes/cpu/scpu/scpu.cpp

@@ -23,6 +23,10 @@ void sCPU::power() {
   reset();
 }
 
+void sCPU::triggerIRQ() {
+    status.irq_pending = true;
+}
+
 void sCPU::reset() {
   CPU::reset();
 

+ 3 - 2
tools/bsnes/cpu/scpu/scpu.hpp

@@ -1,4 +1,4 @@
-class sCPU : public CPU {
+class sCPU : public CPU {
 public:
   void enter();
 
@@ -47,7 +47,7 @@ public:
     bool hdma_mode;  //0 = init, 1 = run
     DmaState dma_state;
 
-    //MMIO
+    //MMIO
 
     //$2181-$2183
     uint32 wram_addr;
@@ -88,6 +88,7 @@ public:
 
   void power();
   void reset();
+  void triggerIRQ();
 
   sCPU();
   ~sCPU();