Har lyckosamt sparat undan flera kassetter nu, men med vissa får jag inte ut någon data alls - och de fungerar i enheten.
Jo, det är kanske sant men PSU:n (Program Storage Unit) är en co-processor och har en egen programräknare t.ex. Det finns bara fem kontrollsignaler och databussen mellan CPU:n och PSU:n, en viss sekvens resulterar i samma beteende i CPU:n och samtliga PSU:er som är kopplade till denna... PSU:erna är aktiva i olika minnes-områden, det finns två i konsollen och oftast två i kassetterna, åtminstone de tidiga. Senare kassetter nyttjar "normalt" rom tillsammans med en interfacekrets - chippen är monterade direkt på PCB:t utan någon kapsel...
Datablad på PSU:
http://veswiki.com/images/c/c0/F3851_56.pdf
Timingen är med igen på sidan 6.
Aha - där har vi lite andra tider... (sidan 21) 10µs max periodtid på PSU-klockan, nu kör jag med 4 så det borde vara ok.
Jag tror att jag läser datan för tidigt, så det har jag flyttat fram något, ska ha minst 2 perioder plus 100ns - falltid för write-puls och max 2 perioder plus 0,85µs...
Då har jag sett över all timing och jag tror att detta ska bli bättre (förhoppningsvis).
Senaste kod (Pic Basic Pro) - försök nummer åtta:
Kod: Markera allt
; Fairchild Channel F cart dumper version 2
; 2/10/2004 Sean Riddle seanriddle@cox.net
; Edited from 16f84 to 16c84 by Fredric Blåholtz 03/08/2009
; Pic BASIC Pro
; 1/5 speed, the nop:s are half as many.
INCLUDE "modedefs.bas"
@ device pic16c84, hs_osc, wdt_off
DEFINE OSC 4 ;4 MHz oscillator
DEFINE NO_CLRWDT 1 ;watchdog is off
DEFINE DEBUG_REG PORTA ;serial output on A.0
DEFINE DEBUG_BIT 0
DEFINE DEBUG_BAUD 9600
' Set Debug mode: 0 = true, 1 = inverted
DEFINE DEBUG_MODE 1
k VAR WORD ;another
rom VAR BYTE ;buffer to store ROM
f8phi VAR PORTA.1 ;clock signal
f8write VAR PORTA.2 ;write signal
f8romc3 VAR PORTA.3 ;ROMC3 signal
; CMCON=7 ;turn off comparators
OPTION_REG.7=0 ;weak pull ups on port B
TRISB=$FF ;port B is all input
Low f8phi
Low f8write
Low f8romc3
Debug "Dumping starts in two seconds..."
Pause 2000 ;wait 2 seconds after reset
; what I do:
; clear PC0 with ROMC state 8
; loop 16384 times
; fetch 4 bytes into buffer with ROMC state 0
; dump buffer to serial port
; clear PC0
f8phi=1
f8write=1
f8phi=0
@ nop
f8phi=1
f8write=0
f8phi=0
f8romc3=1
;ROMC state 8, clear PC0.
f8phi=1
@ nop
f8phi=0
@ nop
f8phi=1
@ nop
f8phi=0
@ nop
f8phi=1
@ nop
f8phi=0
f8romc3=0
For k=0 TO 16383
f8phi=1
f8write=1
f8phi=0
@ nop
f8phi=1
f8write=0
f8phi=0
@ nop
f8phi=1
;ROMC state 0, fetch instruction
@ nop
f8phi=0
@ nop
f8phi=1
@ nop
f8phi=0
@ nop
f8phi=1
rom=PORTB ;read databus into buffer
f8phi=0
Debug rom
Next k
End
Passade förresten på att koppla på en riktig cartridge-hållare, så nu ska inte den biten orsaka några problem.
... det blev annorlunda iaf. Cartridge 26 läses som helt blank fortfarande, Luxor #2 däremot läste den till skillnad mot min förra version in första halvan... Kanske rör sig åt rätt håll då... Det enda problemet jag kan se nu är att det vid nollandet av PC0 är för långt mellanrum, kan lika gärna sätta f8romc3 till 1 direkt från början - nähe det gick inte alls...
Ett problem är att jag inte kan växla f8romc3 efter att write gått från hög till låg på mindre än 550 ns, det tar minst 1 µs med blott 4 MHz...
Version 7 dumpade ganska mycket men inte allt, slarvade bort pbp-koden så jag fick fixa till PC0-nollställningen baklänges. Så här ser assemblerkoden ut iaf när man konverterar från HEX-filen:
Kod: Markera allt
Working on filein 'VC-7.hex'
PICDIS-LITE PicChip HEX File Disassembler Utility. Version 1.0 Feb-02-2004
Copyright (C) 2004 Joe's Cat. All Rights Reserved. picdisl -h for help
list p=pic16f84
0000 2855 goto j055
0001 008e j001: movwf 0x0e
0002 1683 bsf STATUS,5
0003 1005 bcf PORTA/TRISA,0
0004 1283 bcf STATUS,5
0005 3009 movlw 0x09
0006 008f movwf 0x0f
0007 1003 clrc
0008 2010 j008: call j010
0009 0c8e rrf 0x0e,f
000a 0b8f decfsz 0x0f,f
000b 2808 goto j008
000c 1403 setc
000d 2010 call j010
000e 1403 setc
000f 2850 goto j050
0010 1803 j010: skpnc
0011 2815 goto j015
0012 0000 nop
0013 1405 bsf PORTA/TRISA,0
0014 2817 goto j017
0015 1005 j015: bcf PORTA/TRISA,0
0016 2817 goto j017
0017 3000 j017: movlw 0x00
0018 008d movwf 0x0d
0019 305b movlw 0x5b
001a 2829 goto j029
001b 018f clrf 0x0f
001c 008e j01c: movwf 0x0e
001d 30ff j01d: movlw 0xff
001e 078e addwf 0x0e,f
001f 1c03 skpc
0020 078f addwf 0x0f,f
0021 1c03 skpc
0022 2850 goto j050
0023 3003 movlw 0x03
0024 008d movwf 0x0d
0025 30df movlw 0xdf
0026 2029 call j029
0027 281d goto j01d
0028 018d clrf 0x0d
0029 3ee8 j029: addlw 0xe8
002a 008c movwf 0x0c
002b 098d comf 0x0d,f
002c 30fc movlw 0xfc
002d 1c03 skpc
002e 2832 goto j032
002f 078c j02f: addwf 0x0c,f
0030 1803 skpnc
0031 282f goto j02f
0032 078c j032: addwf 0x0c,f
0033 0000 nop
0034 0f8d incfsz 0x0d,f
0035 282f goto j02f
0036 180c btfsc 0x0c,0
0037 2838 goto j038
0038 1c8c j038: btfss 0x0c,1
0039 283c goto j03c
003a 0000 nop
003b 283c goto j03c
003c 0008 j03c: return
003d 008e j03d: movwf 0x0e
003e 3001 movlw 0x01
003f 2840 goto j040
0040 0094 j040: movwf 0x14
0041 080f movfw 0x0f
0042 020d subwf 0x0d,w
0043 1d03 skpz
0044 2847 goto j047
0045 080e movfw 0x0e
0046 020c subwf 0x0c,w
0047 3004 j047: movlw 0x04
0048 1803 skpnc
0049 3001 movlw 0x01
004a 1903 skpnz
004b 3002 movlw 0x02
004c 0514 andwf 0x14,w
004d 1d03 skpz
004e 30ff movlw 0xff
004f 2850 goto j050
0050 1383 j050: bcf STATUS,7
0051 1303 bcf STATUS,6
0052 1283 bcf STATUS,5
0053 0000 nop
0054 0008 return
0055 1683 j055: bsf STATUS,5
0056 1381 bcf TMR0/OPTION_REG,7
0057 30ff movlw 0xff
0058 0086 movwf PORTB/TRISB
0059 1283 bcf STATUS,5
005a 1085 bcf PORTA/TRISA,1
005b 1683 bsf STATUS,5
005c 1085 bcf PORTA/TRISA,1
005d 1283 bcf STATUS,5
005e 1105 bcf PORTA/TRISA,2
005f 1683 bsf STATUS,5
0060 1105 bcf PORTA/TRISA,2
0061 1283 bcf STATUS,5
0062 1185 bcf PORTA/TRISA,3
0063 1683 bsf STATUS,5
0064 1185 bcf PORTA/TRISA,3
0065 3044 movlw 0x44
0066 1283 bcf STATUS,5
0067 2001 call j001
0068 3075 movlw 0x75
0069 2001 call j001
006a 306d movlw 0x6d
006b 2001 call j001
006c 3070 movlw 0x70
006d 2001 call j001
006e 3069 movlw 0x69
006f 2001 call j001
0070 306e movlw 0x6e
0071 2001 call j001
0072 3067 movlw 0x67
0073 2001 call j001
0074 3020 movlw 0x20
0075 2001 call j001
0076 3073 movlw 0x73
0077 2001 call j001
0078 3074 movlw 0x74
0079 2001 call j001
007a 3061 movlw 0x61
007b 2001 call j001
007c 3072 movlw 0x72
007d 2001 call j001
007e 3074 movlw 0x74
007f 2001 call j001
0080 3073 movlw 0x73
0081 2001 call j001
0082 3020 movlw 0x20
0083 2001 call j001
0084 3069 movlw 0x69
0085 2001 call j001
0086 306e movlw 0x6e
0087 2001 call j001
0088 3020 movlw 0x20
0089 2001 call j001
008a 3074 movlw 0x74
008b 2001 call j001
008c 3077 movlw 0x77
008d 2001 call j001
008e 306f movlw 0x6f
008f 2001 call j001
0090 3020 movlw 0x20
0091 2001 call j001
0092 3073 movlw 0x73
0093 2001 call j001
0094 3065 movlw 0x65
0095 2001 call j001
0096 3063 movlw 0x63
0097 2001 call j001
0098 306f movlw 0x6f
0099 2001 call j001
009a 306e movlw 0x6e
009b 2001 call j001
009c 3064 movlw 0x64
009d 2001 call j001
009e 3073 movlw 0x73
009f 2001 call j001
00a0 302e movlw 0x2e
00a1 2001 call j001
00a2 302e movlw 0x2e
00a3 2001 call j001
00a4 302e movlw 0x2e
00a5 2001 call j001
00a6 3007 movlw 0x07
00a7 008f movwf 0x0f
00a8 30d0 movlw 0xd0
00a9 201c call j01c
00aa 1485 bsf PORTA/TRISA,1
00ab 1505 bsf PORTA/TRISA,2
00ac 0000 nop
00ad 1085 bcf PORTA/TRISA,1
00ae 0000 nop
00af 1105 bcf PORTA/TRISA,2
00b0 1485 bsf PORTA/TRISA,1
00b1 0000 nop
00b2 1085 bcf PORTA/TRISA,1
00b3 0000 nop
00b4 1485 bsf PORTA/TRISA,1
00b5 1585 bsf PORTA/TRISA,3
00b6 0000 nop
00b7 1085 bcf PORTA/TRISA,1
00b8 0000 nop
00b9 1485 bsf PORTA/TRISA,1
00ba 0000 nop
00bb 1085 bcf PORTA/TRISA,1
00bc 0000 nop
00bd 1485 bsf PORTA/TRISA,1
00be 1505 bsf PORTA/TRISA,2
00bf 0000 nop
00c0 1085 bcf PORTA/TRISA,1
00c1 0000 nop
00c2 1105 bcf PORTA/TRISA,2
00c3 1485 bsf PORTA/TRISA,1
00c4 1185 bcf PORTA/TRISA,3
00c5 0000 nop
00c6 1085 bcf PORTA/TRISA,1
00c7 0000 nop
00c8 1485 bsf PORTA/TRISA,1
00c9 0000 nop
00ca 1085 bcf PORTA/TRISA,1
00cb 0000 nop
00cc 1485 bsf PORTA/TRISA,1
00cd 0000 nop
00ce 1085 bcf PORTA/TRISA,1
00cf 01a4 clrf 0x24
00d0 01a5 clrf 0x25
00d1 0824 j0d1: movfw 0x24
00d2 008c movwf 0x0c
00d3 0825 movfw 0x25
00d4 008d movwf 0x0d
00d5 303f movlw 0x3f
00d6 008f movwf 0x0f
00d7 30ff movlw 0xff
00d8 203d call j03d
00d9 1d03 skpz
00da 28f5 goto j0f5
00db 1485 bsf PORTA/TRISA,1
00dc 1505 bsf PORTA/TRISA,2
00dd 1085 bcf PORTA/TRISA,1
00de 0000 nop
00df 1485 bsf PORTA/TRISA,1
00e0 1105 bcf PORTA/TRISA,2
00e1 1085 bcf PORTA/TRISA,1
00e2 0000 nop
00e3 1485 bsf PORTA/TRISA,1
00e4 0000 nop
00e5 1085 bcf PORTA/TRISA,1
00e6 0000 nop
00e7 1485 bsf PORTA/TRISA,1
00e8 0000 nop
00e9 1085 bcf PORTA/TRISA,1
00ea 0000 nop
00eb 1485 bsf PORTA/TRISA,1
00ec 0806 movfw PORTB/TRISB
00ed 00a6 movwf 0x26
00ee 1085 bcf PORTA/TRISA,1
00ef 0826 movfw 0x26
00f0 2001 call j001
00f1 0aa4 incf 0x24,f
00f2 1903 skpnz
00f3 0fa5 incfsz 0x25,f
00f4 28d1 goto j0d1
00f5 0063 j0f5: sleep
00f6 28f5 goto j0f5
2007 3ffa __fuses 0x3ffa