o add mmio to trigger cart irq

o add snes irq handlers
o add inline printf asm
This commit is contained in:
David Voswinkel 2009-05-20 00:16:30 +02:00
parent aa649c89ee
commit 5dd4904f9c
7 changed files with 199 additions and 299 deletions

View File

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

View File

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

View File

@ -45,23 +45,17 @@ Start_do:
; Setup Video modes and other stuff, then turn on the screen ; Setup Video modes and other stuff, then turn on the screen
jsr SetupVideo jsr SetupVideo
sei
cop
prints "Init done"
stz $3001
lda #65 cop
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
lda #$81
sta $4200
Infinity: Infinity:
jmp Infinity ; bwa hahahahaha jmp Infinity ; bwa hahahahaha
@ -98,6 +92,28 @@ SetupVideo:
plp plp
rts 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: str_COP:
.db "COP",10,0 .db "COP",10,0

View File

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

View File

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

View File

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

View File

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