-
Voy a ir recopilando aquí la información sobre este chip:
* Resumen realizado por aitopes: http://www.ucontrol.com.ar/wiki/index.php?title=SID6581
* Extensísima colección de archivos SID (>30.000): http://www.hvsc.c64.org/
* Emulador SID en java (no perderse la interpretación de la historia interminable): http://www.dreamfabric.com/c64/jsidplay/
* Interfaz para el SID por puerto paralelo: http://www.asciilifeform.com/parallelsid/parasid.html
* Emulador de SID con un ATMEL (si no tienes un SID, te lo puedes crear con un ATMEL): http://www.swinkels.tvtom.pl/swinsid/swinsid2.htm
* Reproductor de archivos SID a través de un SID original (no emulado) mediante un ATMEL: http://www.swinkels.tvtom.pl/swinsid/
* Sintetizador MIDI basado en un SID y controlador por un PIC (no perderse los ejemplos de audio que incluye la página): http://www.hypersynth.com/hypersid.html
* Los esquemáticos del C64 en Eagle: http://www.baltissen.org/newhtm/schemas.htm
* Información sobre cómo reparar un c64: http://personalpages.tds.net/~rcarlsen/cbm.html
* Un reproductor portátil de SID basado en un PIC16f877 (sin esquema ni código): http://tripoint.org/kevtris/Projects/sid/sidman.html
El mayor problema que le veo a este asunto es que los archivos PSID contienen, además de la música, el propio programa reproductor, de modo que es necesario emular el funcionamiento completo del 6502 de los Commodore 64 para poder reproducirlos. Esto supera mis posibilidades como programador de PICs, así que estoy estudiando la posibilidad de aplicar algún rodeo...
-
Escribí a swinkels, el creador de SwinSID (http://www.swinkels.tvtom.pl/swinsid/) para que me orientase (más bien para que confirmase mis sospechas) sobre cómo realizar la interfaz entre un PIC y un SID, y ésta ha sido su respuesta:
Hi
it is very easy to connect SID to PIC or AVR and play music with it. You
need to write own player to play custom songs.
If you want to play SID music from PSID files you have to implement
full 6502 emulation because SID files are actually a 6502 programm which
manipulates SID registers.
Good luck.
En resumen, es fácil conectar un PIC a un SID pero tendrás que crearte tu propia música, no podrás usar los miles de archivos PSID existentes.
¿Qué se me da peor, programar o componer música?
Habrá que empollarse las especificaciones del formato PSID y ver si podría emularse con un PIC.
-
interesante tema, voy a leer los links que has colocado. gracias.
-
Hola juanfe!
Quizas (es solo una presunción) no sea TAN dificil editar (usando algun programa que habria que construir) todo lo referente al programa para que solo queden los datos de la musica. Llevo algunas semanas pensando en ello, y estoy medio atorado de cosas, pero creo que es posible.
Por lo pronto, habia pensado en el siguiente esquema para "manejar" al SID:
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=21792.0;attach=6949)
No he diseñado el PSB aun. Quizas estaria bueno que me lo criticasen un poco para hacer un PCB de la version mejorada del esquema que propongo :)
Saludos!
-
Me gustaría ser tan optimista como tú aitopes, pero cuanto más estudio el asunto más complejo me parece convertir los archivos PSID a un formato utilizable desde el PIC.
Lo primero que intentaré es utilizar algo parecido a esto (http://www.asciilifeform.com/parallelsid/parasid.html) e intentar grabar la actividad en el puerto paralelo (http://www.beyondlogic.org/porttalk/porttalk.htm) para reproducirla con el PIC, pero me temo que generará un torrente de información ingente.
Muy buena idea la del 74ls90
-
Ya tengo medio arreglado el tema de la web, asi que es posible que durante la semana disponga de unas cuantas "horas-culo" para dedicarle a esto. (horas-culo son horas sentado frente al ordenador :) )
Voy a intentar "despanzurrar" un archivo y ver que me encuentro dentro. Mantengamonos en contacto por aqui :mrgreen:
-
Ya tengo medio arreglado el tema de la web, asi que es posible que durante la semana disponga de unas cuantas "horas-culo" para dedicarle a esto. (horas-culo son horas sentado frente al ordenador :) )
Muy buena definición de las horas sentado frente al ordenador :D :D :D :D
Un saludo
-
Hola Juanfe!
Ya estoy en la cama, y debo dejar el ordenador por que si no me van a echar de casa (encima, estoy estrenando cama :) ). Pero antes de apagar, queria dejarte este link:
http://search.cpan.org/src/LALA/Audio-SID-3.11/SID_file_format.txt
No pude verlo en profundidad, pero si es lo que yo creo, es la clave para crear un programa en Visual Basic o similar para que separe "la paja del trigo", o los datos del codigo contenido en los miles de ficheros con este formato que hay por alli.
Manana le voy a dar un buen vistazo.
Buenas noches! :-)
-
¿Estrenar cama en Argentina significa lo mismo que en España? :D
-
Espero que te haya aprovechado la cama aitopes :-/
Yo de la mía ya casi ni me acuerdo y referente a lo de horas-culo ¿es que hay otro tipo de horas? Como siga así voy a tener que estrenar silla :mrgreen:
Ese documento ya lo había visto pero sólo describe las cabeceras de los archivos PSID, es decir, lo que leen los reproductores para saber qué se van a encontrar dentro, pero no describe el código en sí del SID.
La especificación completa del SID debe estar descrita en el documento que se menciona al principio (http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/doc_formats.html
), pero no soy capaz de encontrarlo en ningún sitio.
Otro documento interesante: http://sid.kubarth.com/articles/the_c64_digi.txt
-
¿EUREKA?
http://www.ucapps.de/howto_sid_wavetables_1.html
SIDDUMP & SIDDASM: http://covertbitops.c64.org/ El siddasm no he conseguido hacerlo funcionar
-
Hola Juanfe!
El SIDDASM para DOS funciona. Con algunos .SID falla (no se todavia con cuales), pero con los demas genera un archivo .CAT que dentro tiene un programa en ASM de Commodore (pensar que en alguna vida anterior yo escribia codigo asi! :) ) como este:
0FFA: AA :TAX
0FFB: E8 :INX
0FFC: 8E 01 10 :STX $1001
0FFF: 60 :RTS
----------
1000: A9 01 :LDA #$01
1002: A2 00 :LDX #$00
1004: 0A :ASL A
1005: F0 44 :BEQ $44
1007: 6D 01 10 :ADC $1001
100A: A8 :TAY
100B: B9 D5 14 :LDA $14D5,Y
100E: 9D 2A 14 :STA $142A,X
1011: B9 D8 14 :LDA $14D8,Y
1014: 9D 2B 14 :STA $142B,X
1017: C8 :INY
1018: A9 00 :LDA #$00
101A: 9D 1B 14 :STA $141B,X
101D: 9D 1A 14 :STA $141A,X
1020: A9 05 :LDA #$05
1022: 9D 2E 14 :STA $142E,X
1025: 9D 2F 14 :STA $142F,X
1028: 9D 01 14 :STA $1401,X
102B: A9 08 :LDA #$08
102D: 9D 15 14 :STA $1415,X
1030: 9D 04 D4 :STA $D404,X
1033: A9 FF :LDA #$FF
1035: 9D 2C 14 :STA $142C,X
1038: BD 30 14 :LDA $1430,X
103B: AA :TAX
103C: D0 CD :BNE $CD
103E: 8D 15 D4 :STA $D415
1041: 8D 56 10 :STA $1056
1044: 8D 4E 10 :STA $104E
1047: 8D 01 10 :STA $1001
104A: 60 :RTS
Al final del archivo hay una zona de datos, que deben ser los que lee el programa de arriba para "meterle" al SID.
Sigo buscando info sobre la estructura interna de esa tabla de datos...
Si la encontramos, podriamos escribir un software para que a partir del SID extraiga los datos que meteriamos en la EEPROM y que el PIC le enviaria al SID... 8)
-
Joder qué recuerdos. No te lo vas a creer pero se me ha escapado una lagrimita al ver ese código.
-
Por si ayuda en algo, he "desensamblado" el archivo de 2.6Kb "ALA.SID" (http://search.cpan.org/src/LALA/Audio-SID-3.11/Ala.sid) y he obtenido esto: (va en dos partes)
ALA.CAS:
#ASM source for file ala.sid
#Init addr: $6000, Play addr: $6006
#Load addr: $6000, End addr: $69D2, Length: 2515 bytes
#----------------------------------------------------------------
6000: 4C 8A 65 :JMP $658A
-------
6003: 4C E9 65
-------
6006: A9 0F :LDA #$0F
6008: 8D 18 D4 :STA $D418
600B: A9 00 :LDA #$00
600D: 8D 17 D4 :STA $D417
6010: AD 33 67 :LDA $6733
6013: D0 01 :BNE $01
6015: 60 :RTS
6016: A2 02 :LDX #$02
6018: BD 61 66 :LDA $6661,X
601B: 8D 6E 66 :STA $666E
601E: A8 :TAY
601F: DE 28 67 :DEC $6728,X
6022: BD 28 67 :LDA $6728,X
6025: 30 03 :BMI $03
6027: 4C 6D 62 :JMP $626D
602A: A9 04 :LDA #$04
602C: 9D 28 67 :STA $6728,X
602F: BD 61 66 :LDA $6661,X
6032: 8D 6E 66 :STA $666E
6035: A8 :TAY
6036: DE 5B 66 :DEC $665B,X
6039: 10 03 :BPL $03
603B: 4C 98 60 :JMP $6098
603E: 4C 6D 62 :JMP $626D
6041: 48 :PHA
6042: 8A :TXA
6043: 48 :PHA
6044: 98 :TYA
6045: 48 :PHA
6046: BC 61 66 :LDY $6661,X
6049: A9 00 :LDA #$00
604B: 99 04 D4 :STA $D404,Y
604E: 9D 37 66 :STA $6637,X
6051: 9D 07 66 :STA $6607,X
6054: 9D F8 65 :STA $65F8,X
6057: 9D 68 66 :STA $6668,X
605A: 9D 6B 66 :STA $666B,X
605D: BD 43 66 :LDA $6643,X
6060: 9D 40 66 :STA $6640,X
6063: A9 01 :LDA #$01
6065: 9D 65 66 :STA $6665,X
6068: A9 02 :LDA #$02
606A: 9D F5 65 :STA $65F5,X
606D: BD 01 66 :LDA $6601,X
6070: 9D FE 65 :STA $65FE,X
6073: E0 00 :CPX #$00
6075: D0 0B :BNE $0B
6077: A9 00 :LDA #$00
6079: 8D 23 67 :STA $6723
607C: AD 25 67 :LDA $6725
607F: 8D 24 67 :STA $6724
6082: BD F2 65 :LDA $65F2,X
6085: A8 :TAY
6086: B9 CF 66 :LDA $66CF,Y
6089: 9D 2B 66 :STA $662B,X
608C: B9 D6 66 :LDA $66D6,Y
608F: 9D 2E 66 :STA $662E,X
6092: 68 :PLA
6093: A8 :TAY
6094: 68 :PLA
6095: AA :TAX
6096: 68 :PLA
6097: 60 :RTS
6098: A9 00 :LDA #$00
609A: 9D 4C 66 :STA $664C,X
609D: BD 37 67 :LDA $6737,X
60A0: 85 A7 :STA $A7
60A2: BD 3A 67 :LDA $673A,X
60A5: 85 A8 :STA $A8
60A7: BC 71 66 :LDY $6671,X
60AA: B1 A7 :LDA ($A7),Y
60AC: C9 FF :CMP #$FF
60AE: D0 08 :BNE $08
60B0: A9 00 :LDA #$00
60B2: 9D 71 66 :STA $6671,X
60B5: 4C A7 60 :JMP $60A7
60B8: C9 FE :CMP #$FE
60BA: D0 0F :BNE $0F
60BC: A9 00 :LDA #$00
60BE: 8D 33 67 :STA $6733
60C1: 8D 04 D4 :STA $D404
60C4: 8D 0B D4 :STA $D40B
60C7: 8D 12 D4 :STA $D412
60CA: 60 :RTS
60CB: C9 FD :CMP #$FD
60CD: D0 0F :BNE $0F
60CF: FE 71 66 :INC $6671,X
60D2: C8 :INY
60D3: B1 A7 :LDA ($A7),Y
60D5: 8D 07 60 :STA $6007
60D8: FE 71 66 :INC $6671,X
60DB: 4C A7 60 :JMP $60A7
60DE: C9 FC :CMP #$FC
60E0: D0 03 :BNE $03
60E2: 4C 2A 62 :JMP $622A
60E5: A8 :TAY
60E6: B9 49 67 :LDA $6749,Y
60E9: 85 A9 :STA $A9
60EB: B9 5D 67 :LDA $675D,Y
60EE: 85 AA :STA $AA
60F0: BC 74 66 :LDY $6674,X
60F3: B1 A9 :LDA ($A9),Y
60F5: 8D 77 66 :STA $6677
60F8: C9 FF :CMP #$FF
60FA: D0 03 :BNE $03
60FC: 4C 1F 62 :JMP $621F
60FF: C9 FE :CMP #$FE
6101: D0 03 :BNE $03
6103: 4C 84 61 :JMP $6184
6106: C9 FD :CMP #$FD
6108: D0 03 :BNE $03
610A: 4C 39 62 :JMP $6239
610D: C9 FC :CMP #$FC
610F: D0 22 :BNE $22
6111: C8 :INY
6112: B1 A9 :LDA ($A9),Y
6114: 9D 5B 66 :STA $665B,X
6117: A9 00 :LDA #$00
6119: 9D 65 66 :STA $6665,X
611C: 84 AA :STY $AA
611E: BC 61 66 :LDY $6661,X
6121: BD 1C 66 :LDA $661C,X
6124: 29 FE :AND #$FE
6126: 99 04 D4 :STA $D404,Y
6129: A4 AA :LDY $AA
612B: C8 :INY
612C: 98 :TYA
612D: 9D 74 66 :STA $6674,X
6130: 4C 6D 62 :JMP $626D
6133: 10 17 :BPL $17
6135: 29 7F :AND #$7F
6137: 48 :PHA
6138: A9 00 :LDA #$00
613A: 9D F8 65 :STA $65F8,X
613D: A9 02 :LDA #$02
613F: 9D F5 65 :STA $65F5,X
6142: BD 01 66 :LDA $6601,X
6145: 9D FE 65 :STA $65FE,X
6148: 68 :PLA
6149: 4C 4F 61 :JMP $614F
614C: 20 41 60 :JSR $6041
614F: 9D 5B 66 :STA $665B,X
6152: FE 74 66 :INC $6674,X
6155: C8 :INY
6156: B1 A9 :LDA ($A9),Y
6158: 18 :CLC
6159: 6D 64 66 :ADC $6664
615C: 9D 5E 66 :STA $665E,X
615F: A8 :TAY
6160: B9 C2 64 :LDA $64C2,Y
6163: 9D 46 66 :STA $6646,X
6166: B9 22 65 :LDA $6522,Y
6169: 9D 49 66 :STA $6649,X
616C: 9D 34 67 :STA $6734,X
616F: FE 74 66 :INC $6674,X
6172: 4C 6D 62 :JMP $626D
6175: 29 7F :AND #$7F
6177: 18 :CLC
6178: 6D 64 66 :ADC $6664
617B: 9D 5E 66 :STA $665E,X
617E: 4C 4F 61 :JMP $614F
6181: 4C 6D 62 :JMP $626D
6184: FE 74 66 :INC $6674,X
6187: C8 :INY
6188: B1 A9 :LDA ($A9),Y
618A: 9D F2 65 :STA $65F2,X
618D: A8 :TAY
618E: B9 90 66 :LDA $6690,Y
6191: 9D 25 66 :STA $6625,X
6194: B9 97 66 :LDA $6697,Y
6197: 9D 28 66 :STA $6628,X
619A: B9 BA 66 :LDA $66BA,Y
619D: 9D 1C 66 :STA $661C,X
61A0: C9 41 :CMP #$41
61A2: D0 12 :BNE $12
61A4: B9 CF 66 :LDA $66CF,Y
61A7: 9D 2B 66 :STA $662B,X
61AA: B9 D6 66 :LDA $66D6,Y
61AD: 9D 2E 66 :STA $662E,X
61B0: B9 DD 66 :LDA $66DD,Y
61B3: 9D 31 66 :STA $6631,X
61B6: B9 07 67 :LDA $6707,Y
61B9: 9D 0A 66 :STA $660A,X
61BC: F0 17 :BEQ $17
61BE: A9 00 :LDA #$00
61C0: 9D 07 66 :STA $6607,X
61C3: B9 0E 67 :LDA $670E,Y
61C6: 9D 10 66 :STA $6610,X
61C9: B9 15 67 :LDA $6715,Y
61CC: 9D 13 66 :STA $6613,X
61CF: B9 1C 67 :LDA $671C,Y
61D2: 9D 16 66 :STA $6616,X
61D5: B9 B3 66 :LDA $66B3,Y
61D8: 9D 19 66 :STA $6619,X
61DB: F0 0C :BEQ $0C
61DD: B9 C1 66 :LDA $66C1,Y
61E0: 9D 1F 66 :STA $661F,X
61E3: B9 C8 66 :LDA $66C8,Y
61E6: 9D 22 66 :STA $6622,X
61E9: B9 F2 66 :LDA $66F2,Y
61EC: 9D 34 66 :STA $6634,X
61EF: F0 09 :BEQ $09
61F1: B9 F9 66 :LDA $66F9,Y
61F4: 9D 3A 66 :STA $663A,X
61F7: 9D 3D 66 :STA $663D,X
61FA: B9 E4 66 :LDA $66E4,Y
61FD: 9D FB 65 :STA $65FB,X
6200: F0 17 :BEQ $17
6202: B9 EB 66 :LDA $66EB,Y
6205: 9D FE 65 :STA $65FE,X
6208: 9D 01 66 :STA $6601,X
620B: A9 00 :LDA #$00
620D: 9D F8 65 :STA $65F8,X
6210: B9 00 67 :LDA $6700,Y
6213: 9D 40 66 :STA $6640,X
6216: 9D 43 66 :STA $6643,X
6219: FE 74 66 :INC $6674,X
621C: 4C F0 60 :JMP $60F0
621F: A9 00 :LDA #$00
6221: 9D 74 66 :STA $6674,X
6224: FE 71 66 :INC $6671,X
6227: 4C A7 60 :JMP $60A7
622A: C8 :INY
622B: FE 71 66 :INC $6671,X
622E: B1 A7 :LDA ($A7),Y
6230: 8D 64 66 :STA $6664
6233: FE 71 66 :INC $6671,X
6236: 4C A7 60 :JMP $60A7
6239: C8 :INY
623A: B1 A9 :LDA ($A9),Y
623C: 10 22 :BPL $22
623E: 29 7F :AND #$7F
6240: 9D 58 66 :STA $6658,X
6243: A9 38 :LDA #$38
6245: 9D 4F 66 :STA $664F,X
6248: A9 FD :LDA #$FD
624A: 9D 52 66 :STA $6652,X
624D: C8 :INY
624E: B1 A9 :LDA ($A9),Y
6250: 9D 55 66 :STA $6655,X
6253: C8 :INY
6254: 98 :TYA
6255: 9D 74 66 :STA $6674,X
6258: A9 01 :LDA #$01
625A: 9D 4C 66 :STA $664C,X
625D: 4C F0 60 :JMP $60F0
6260: 9D 58 66 :STA $6658,X
6263: A9 18 :LDA #$18
6265: 9D 4F 66 :STA $664F,X
6268: A9 7D :LDA #$7D
626A: 4C 4A 62 :JMP $624A
626D: AC 6E 66 :LDY $666E
6270: BD 16 66 :LDA $6616,X
6273: F0 06 :BEQ $06
6275: DE 16 66 :DEC $6616,X
6278: 4C E8 62 :JMP $62E8
627B: BC F2 65 :LDY $65F2,X
627E: B9 1C 67 :LDA $671C,Y
6281: 9D 16 66 :STA $6616,X
6284: BC 61 66 :LDY $6661,X
6287: BD 0A 66 :LDA $660A,X
628A: D0 03 :BNE $03
628C: 4C CF 62 :JMP $62CF
628F: BD 07 66 :LDA $6607,X
6292: C9 02 :CMP #$02
6294: D0 0B :BNE $0B
6296: A9 01 :LDA #$01
6298: 9D 07 66 :STA $6607,X
629B: BD 10 66 :LDA $6610,X
629E: 4C B8 62 :JMP $62B8
62A1: C9 01 :CMP #$01
62A3: D0 0B :BNE $0B
62A5: A9 00 :LDA #$00
62A7: 9D 07 66 :STA $6607,X
62AA: BD 13 66 :LDA $6613,X
62AD: 4C B8 62 :JMP $62B8
62B0: BD 0A 66 :LDA $660A,X
62B3: 9D 07 66 :STA $6607,X
62B6: A9 00 :LDA #$00
62B8: 9D 0D 66 :STA $660D,X
62BB: BD 5E 66 :LDA $665E,X
62BE: 18 :CLC
62BF: 7D 0D 66 :ADC $660D,X
62C2: A8 :TAY
62C3: B9 C2 64 :LDA $64C2,Y
62C6: 9D 46 66 :STA $6646,X
62C9: B9 22 65 :LDA $6522,Y
62CC: 9D 49 66 :STA $6649,X
62CF: BD 19 66 :LDA $6619,X
62D2: D0 03 :BNE $03
62D4: 4C E8 62 :JMP $62E8
62D7: BD 1F 66 :LDA $661F,X
62DA: 48 :PHA
62DB: BD 22 66 :LDA $6622,X
62DE: 9D 1F 66 :STA $661F,X
62E1: 68 :PLA
62E2: 9D 22 66 :STA $6622,X
62E5: 9D 1C 66 :STA $661C,X
62E8: BC F2 65 :LDY $65F2,X
62EB: BD 68 66 :LDA $6668,X
62EE: D9 82 66 :CMP $6682,Y
62F1: F0 09 :BEQ $09
62F3: FE 68 66 :INC $6668,X
62F6: B9 89 66 :LDA $6689,Y
62F9: 4C FF 62 :JMP $62FF
62FC: BD 25 66 :LDA $6625,X
62FF: BC 61 66 :LDY $6661,X
6302: 99 05 D4 :STA $D405,Y
6305: BD 28 66 :LDA $6628,X
6308: 99 06 D4 :STA $D406,Y
630B: BD 6B 66 :LDA $666B,X
630E: BC F2 65 :LDY $65F2,X
6311: D9 9E 66 :CMP $669E,Y
6314: D0 03 :BNE $03
6316: 4C 37 63 :JMP $6337
6319: BD 5E 66 :LDA $665E,X
631C: 18 :CLC
631D: 79 AC 66 :ADC $66AC,Y
6320: A8 :TAY
6321: B9 C2 64 :LDA $64C2,Y
6324: 48 :PHA
6325: B9 22 65 :LDA $6522,Y
6328: 48 :PHA
6329: BC 61 66 :LDY $6661,X
632C: 68 :PLA
632D: 99 01 D4 :STA $D401,Y
6330: 68 :PLA
6331: 99 00 D4 :STA $D400,Y
6334: 4C 98 63 :JMP $6398
6337: BC 61 66 :LDY $6661,X
633A: BD 4C 66 :LDA $664C,X
633D: F0 12 :BEQ $12
633F: BD 4F 66 :LDA $664F,X
6342: 8D 82 63 :STA $6382
6345: BD 52 66 :LDA $6652,X
6348: 8D 83 63 :STA $6383
634B: 8D 8F 63 :STA $638F
634E: 4C 7F 63 :JMP $637F
6351: BD 46 66 :LDA $6646,X
6354: 99 00 D4 :STA $D400,Y
6357: BD 49 66 :LDA $6649,X
635A: 38 :SEC
635B: FD 37 66 :SBC $6637,X
635E: 99 01 D4 :STA $D401,Y
6361: BD 34 66 :LDA $6634,X
6364: F0 32 :BEQ $32
6366: DE 3A 66 :DEC $663A,X
6369: 10 2D :BPL $2D
636B: BD 3D 66 :LDA $663D,X
636E: 9D 3A 66 :STA $663A,X
6371: BD 37 66 :LDA $6637,X
6374: DD 34 67 :CMP $6734,X
6377: 10 1F :BPL $1F
6379: FE 37 66 :INC $6637,X
637C: 4C 98 63 :JMP $6398
637F: BD 46 66 :LDA $6646,X
6382: 18 :CLC
6383: 7D 55 66 :ADC $6655,X
6386: 9D 46 66 :STA $6646,X
6389: 99 00 D4 :STA $D400,Y
638C: BD 49 66 :LDA $6649,X
638F: 7D 58 66 :ADC $6658,X
6392: 9D 49 66 :STA $6649,X
6395: 99 01 D4 :STA $D401,Y
6398: BD 65 66 :LDA $6665,X
639B: F0 1D :BEQ $1D
639D: BD 6B 66 :LDA $666B,X
63A0: BC F2 65 :LDY $65F2,X
63A3: D9 9E 66 :CMP $669E,Y
63A6: F0 09 :BEQ $09
63A8: B9 A5 66 :LDA $66A5,Y
63AB: FE 6B 66 :INC $666B,X
63AE: 4C B4 63 :JMP $63B4
63B1: BD 1C 66 :LDA $661C,X
63B4: BC 61 66 :LDY $6661,X
63B7: 99 04 D4 :STA $D404,Y
63BA: BD 2E 66 :LDA $662E,X
63BD: 99 03 D4 :STA $D403,Y
63C0: BD 2B 66 :LDA $662B,X
63C3: 99 02 D4 :STA $D402,Y
63C6: BD 4C 66 :LDA $664C,X
63C9: F0 03 :BEQ $03
63CB: 4C 89 64 :JMP $6489
63CE: BD FB 65 :LDA $65FB,X
63D1: D0 03 :BNE $03
63D3: 4C 89 64 :JMP $6489
63D6: BD 40 66 :LDA $6640,X
63D9: F0 06 :BEQ $06
63DB: DE 40 66 :DEC $6640,X
63DE: 4C 89 64 :JMP $6489
63E1: BD F5 65 :LDA $65F5,X
63E4: C9 02 :CMP #$02
63E6: D0 03 :BNE $03
63E8: 4C F5 63 :JMP $63F5
63EB: C9 01 :CMP #$01
63ED: D0 03 :BNE $03
63EF: 4C 2A 64 :JMP $642A
63F2: 4C 5F 64 :JMP $645F
63F5: 18 :CLC
63F6: BD 46 66 :LDA $6646,X
63F9: 7D FB 65 :ADC $65FB,X
63FC: 9D 46 66 :STA $6646,X
63FF: BD 49 66 :LDA $6649,X
6402: 69 00 :ADC #$00
6404: 9D 49 66 :STA $6649,X
6407: FE F8 65 :INC $65F8,X
640A: BD F8 65 :LDA $65F8,X
640D: DD FE 65 :CMP $65FE,X
6410: F0 03 :BEQ $03
6412: 4C 89 64 :JMP $6489
6415: A9 00 :LDA #$00
6417: 9D F8 65 :STA $65F8,X
641A: A9 01 :LDA #$01
641C: 9D F5 65 :STA $65F5,X
641F: BD FE 65 :LDA $65FE,X
6422: 18 :CLC
6423: 0A :ASL A
6424: 9D FE 65 :STA $65FE,X
6427: 4C 89 64 :JMP $6489
642A: 38 :SEC
642B: BD 46 66 :LDA $6646,X
642E: FD FB 65 :SBC $65FB,X
6431: 9D 46 66 :STA $6646,X
6434: BD 49 66 :LDA $6649,X
6437: E9 00 :SBC #$00
6439: 9D 49 66 :STA $6649,X
643C: FE F8 65 :INC $65F8,X
643F: BD F8 65 :LDA $65F8,X
6442: DD FE 65 :CMP $65FE,X
6445: F0 03 :BEQ $03
6447: 4C 89 64 :JMP $6489
644A: A9 00 :LDA #$00
644C: 9D F8 65 :STA $65F8,X
644F: A9 00 :LDA #$00
6451: 9D F5 65 :STA $65F5,X
6454: BD FE 65 :LDA $65FE,X
6457: 18 :CLC
6458: 4A :LSR A
6459: 9D FE 65 :STA $65FE,X
645C: 4C 89 64 :JMP $6489
645F: BD 46 66 :LDA $6646,X
6462: 18 :CLC
6463: 7D FB 65 :ADC $65FB,X
6466: 9D 46 66 :STA $6646,X
6469: BD 49 66 :LDA $6649,X
646C: 69 00 :ADC #$00
646E: 9D 49 66 :STA $6649,X
6471: FE F8 65 :INC $65F8,X
6474: BD F8 65 :LDA $65F8,X
6477: DD FE 65 :CMP $65FE,X
647A: F0 03 :BEQ $03
647C: 4C 89 64 :JMP $6489
647F: A9 02 :LDA #$02
6481: 9D F5 65 :STA $65F5,X
6484: A9 00 :LDA #$00
6486: 9D F8 65 :STA $65F8,X
6489: BD 1C 66 :LDA $661C,X
648C: C9 41 :CMP #$41
648E: D0 12 :BNE $12
6490: 18 :CLC
6491: BD 2B 66 :LDA $662B,X
6494: 7D 31 66 :ADC $6631,X
6497: 9D 2B 66 :STA $662B,X
649A: BD 2E 66 :LDA $662E,X
649D: 69 00 :ADC #$00
649F: 9D 2E 66 :STA $662E,X
64A2: AD 23 67 :LDA $6723
64A5: 18 :CLC
64A6: 6D 26 67 :ADC $6726
64A9: 8D 23 67 :STA $6723
64AC: 8D 15 D4 :STA $D415
64AF: AD 24 67 :LDA $6724
64B2: 6D 27 67 :ADC $6727
64B5: 8D 24 67 :STA $6724
64B8: 8D 16 D4 :STA $D416
64BB: CA :DEX
64BC: 30 03 :BMI $03
64BE: 4C 18 60 :JMP $6018
64C1: 60 :RTS
-
2da y ultima parte:
-------
64C2: 16 27 38 4B
64C6: 5F 73 8A A1
64CA: BA D4 F0 0E
64CE: 2D 4E 71 96
64D2: BD E7 13 42
64D6: 74 A9 E0 1B
64DA: 5A 9B E2 2C
64DE: 7B CE 27 85
64E2: E8 51 C1 37
64E6: B4 37 C4 57
64EA: F5 9C 4E 09
64EE: D0 A3 82 6E
64F2: 68 6E 88 AF
64F6: EB 39 9C 13
64FA: A1 46 04 DC
64FE: D0 DC 10 5E
6502: D6 72 38 26
6506: 42 8C 08 B8
650A: A0 B8 20 BC
650E: AC E4 70 4C
6512: 84 18 10 70
6516: 40 70 40 78
651A: 58 C8 E0 98
651E: 08 30 20 2E
6522: 01 01 01 01
6526: 01 01 01 01
652A: 01 01 01 02
652E: 02 02 02 02
6532: 02 02 03 03
6536: 03 03 03 04
653A: 04 04 04 05
653E: 05 05 06 06
6542: 06 07 07 08
6546: 08 09 09 0A
654A: 0A 0B 0C 0D
654E: 0D 0E 0F 10
6552: 11 12 13 14
6556: 15 17 18 1A
655A: 1B 1D 1F 20
655E: 22 24 27 29
6562: 2B 2E 31 34
6566: 37 3A 3E 41
656A: 45 49 4E 52
656E: 57 5C 62 68
6572: 6E 75 7C 83
6576: 8B 93 9C A5
657A: AF B9 C4 D0
657E: DD EA F8 FD
6582: 00 00 00 00
6586: 00 00 00 00
-------
658A: AA :TAX
658B: BD 2B 67 :LDA $672B,X
658E: 8D 28 67 :STA $6728
6591: 8D 29 67 :STA $6729
6594: 8D 2A 67 :STA $672A
6597: 8D 2B 60 :STA $602B
659A: BD 2D 67 :LDA $672D,X
659D: 8D 07 60 :STA $6007
65A0: BD 2F 67 :LDA $672F,X
65A3: 8D 74 60 :STA $6074
65A6: BD 31 67 :LDA $6731,X
65A9: 8D 0C 60 :STA $600C
65AC: 8A :TXA
65AD: 0A :ASL A
65AE: 8D B4 65 :STA $65B4
65B1: 0A :ASL A
65B2: 18 :CLC
65B3: 69 00 :ADC #$00
65B5: AA :TAX
65B6: A0 00 :LDY #$00
65B8: BD 3D 67 :LDA $673D,X
65BB: 99 37 67 :STA $6737,Y
65BE: E8 :INX
65BF: C8 :INY
65C0: C0 06 :CPY #$06
65C2: D0 F4 :BNE $F4
65C4: A2 02 :LDX #$02
65C6: A9 00 :LDA #$00
65C8: 9D 71 66 :STA $6671,X
65CB: 9D 74 66 :STA $6674,X
65CE: 9D 5B 66 :STA $665B,X
65D1: 9D 1C 66 :STA $661C,X
65D4: CA :DEX
65D5: 10 F1 :BPL $F1
65D7: A9 01 :LDA #$01
65D9: 8D 33 67 :STA $6733
65DC: A2 17 :LDX #$17
65DE: A9 00 :LDA #$00
65E0: 10 00 :BPL $00
65E2: 9D 00 D4 :STA $D400,X
65E5: CA :DEX
65E6: 10 FA :BPL $FA
65E8: 60 :RTS
-------
65E9: 20 DC 65 A9
65ED: 00 8D 33 67
65F1: 60 02 00 01
65F5: 02 02 02 00
65F9: 00 00 3C 00
65FD: 00 03 02 02
6601: 03 02 02 00
6605: 00 00 00 02
6609: 00 00 02 00
660D: 00 00 00 00
6611: 01 00 00 05
6615: 00 00 02 00
6619: 00 00 00 00
661D: 41 41 00 41
6621: 00 00 81 00
6625: FF 0D 0A FF
6629: 0D 0A 00 60
662D: 00 04 37 07
6631: 40 78 40 00
6635: 00 00 00 00
6639: 00 00 04 00
663D: 00 04 00 00
6641: 00 00 00 00
6645: 00 E8 C4 5A
6649: 25 09 04 00
664D: 00 00 18 00
6651: 00 7D 00 00
6655: 58 00 00 00
6659: 00 00 0F 03
665D: 01 3C 26 18
6661: 00 07 0E 00
6665: 00 01 01 00
6669: 03 00 00 03
666D: 02 00 00 00
6671: 00 00 02 02
6675: 0C 0A 83 00
6679: 00 00 00 00
667D: 00 00 00 00
6681: 00 03 00 00
6685: 00 00 00 00
6689: 0A 00 00 00
668D: 00 00 00 0D
6691: 0A FF 0A 0D
6695: 0D 0D 0D 0A
6699: FF 0A CD 0D
669D: CD 03 02 00
66A1: 00 04 00 00
66A5: 15 81 00 00
66A9: 11 00 00 00
66AD: 30 00 00 00
66B1: 00 00 00 00
66B5: 00 01 00 00
66B9: 00 41 41 15
66BD: 41 43 41 41
66C1: 00 00 00 41
66C5: 00 00 00 00
66C9: 00 00 81 00
66CD: 00 00 00 00
66D1: 00 00 00 00
66D5: 00 10 06 04
66D9: 08 03 01 01
66DD: 78 40 02 00
66E1: 0C 40 40 00
66E5: 00 3C 00 5A
66E9: 14 3C 00 00
66ED: 03 00 03 02
66F1: 03 00 00 00
66F5: 00 00 00 00
66F9: 00 00 00 00
66FD: 00 00 00 00
6701: 00 00 00 00
6705: 00 18 02 00
6709: 00 01 00 00
670D: 00 01 00 00
6711: 00 00 00 00
6715: 05 00 00 12
6719: 00 00 00 02
671D: 00 00 00 00
6721: 00 00 00 00
6725: 00 00 00 01
6729: 01 01 04 02
672D: 0F 0F 00 00
6731: 00 00 01 22
6735: 09 04 71 92
6739: C7 67 67 67
673D: 71 92 C7 67
6741: 67 67 1C 25
6745: 37 68 68 68
6749: 48 4B 5E 72
674D: 95 B8 C9 DC
6751: F5 02 15 2F
6755: 36 6D 74 7D
6759: 84 8D CE D3
675D: 68 68 68 68
6761: 68 68 68 68
6765: 68 69 69 69
6769: 69 69 69 69
676D: 69 69 69 69
6771: 00 00 00 00
6775: 00 00 00 00
6779: 03 04 03 04
677D: 07 07 00 00
6781: 00 00 0A 0A
6785: FC 01 0A 0A
6789: FC 00 0A 0A
678D: 0A 0A 0C 0C
6791: FF 01 06 01
6795: 06 01 06 01
6799: 06 01 06 01
679D: 06 01 06 01
67A1: 06 01 06 0B
67A5: 0B 0B 0B 08
67A9: 08 08 08 08
67AD: 08 08 08 08
67B1: 08 08 08 08
67B5: 08 08 08 08
67B9: 08 08 08 08
67BD: 08 08 08 01
67C1: 01 01 01 01
67C5: 01 FF FC 00
67C9: 02 05 02 05
67CD: 02 05 02 05
67D1: 02 05 02 05
67D5: 02 05 02 05
67D9: 02 05 02 05
67DD: 02 05 09 09
67E1: 09 09 09 09
67E5: 09 09 09 09
67E9: 09 09 09 09
67ED: 09 09 09 09
67F1: 09 09 09 09
67F5: 09 09 09 09
67F9: 09 09 09 09
67FD: 09 09 09 09
6801: 09 09 09 09
6805: 09 09 09 09
6809: 09 09 09 09
680D: 09 09 09 09
6811: 09 09 09 09
6815: 09 09 09 09
6819: 02 FF FF 00
681D: 00 00 11 00
6821: 00 00 00 FE
6825: 0D 0D 0F 0F
6829: 0D 0D 0F 0F
682D: 0D 0D 0F 0F
6831: 12 00 00 00
6835: 00 FE 0E 0E
6839: 10 10 0E 0E
683D: 10 10 0E 0E
6841: 10 10 00 00
6845: 00 00 FE FC
6849: 1F FF FE 00
684D: 03 26 83 32
6851: 83 3E 83 4A
6855: 83 26 83 32
6859: 83 3E 83 4A
685D: FF FE 01 05
6861: 18 05 18 03
6865: 18 01 18 03
6869: 18 03 18 05
686D: 18 FF FC 07
6871: FF FE 01 01
6875: 30 01 2F 01
6879: 30 01 2B 01
687D: 30 01 2F 01
6881: 30 01 2B 01
6885: 30 01 2F 01
6889: 30 01 2B 01
688D: 30 01 2F 01
6891: 2D 01 2B FF
6895: FE 01 01 2D
6899: 01 2B 01 2D
689D: 01 28 01 2D
68A1: 01 2B 01 2D
68A5: 01 28 01 2D
68A9: 01 2B 01 2D
68AD: 01 28 01 2C
68B1: 01 2D 01 2E
68B5: 01 2F FF FE
68B9: 01 05 21 05
68BD: 21 03 21 01
68C1: 21 03 21 03
68C5: 21 05 21 FF
68C9: FE 00 03 23
68CD: 83 2F 83 3B
68D1: 83 47 83 23
68D5: 83 2F 83 3B
68D9: 83 47 FF FE
68DD: 02 1B 3C FD
68E1: 80 34 83 3C
68E5: 97 39 FC 07
68E9: 9B 3C FD 00
68ED: 58 83 3C 8F
68F1: 40 FC 0F FF
68F5: FE 03 07 26
68F9: 03 2A 03 2A
68FD: 07 26 07 2A
6901: FF FE 01 01
6905: 18 01 18 01
6909: 18 01 18 01
690D: 16 01 1B 01
6911: 16 01 17 FF
6915: FE 04 0B 30
6919: FD 00 20 83
691D: 30 87 32 FD
6921: 00 12 83 32
6925: FD 80 28 83
6929: 33 8F 30 FC
692D: 0F FF FE 03
6931: 07 26 17 26
6935: FF FE 04 0B
6939: 30 FD 00 28
693D: 83 30 87 33
6941: FD 00 30 07
6945: 33 9F 37 0B
6949: 3C FD 81 08
694D: 83 3C 8F 30
6951: 0B 3C FD 81
6955: 08 83 3C 87
6959: 33 FD 00 20
695D: 87 33 8F 37
6961: 07 35 FD 80
6965: 30 87 35 97
6969: 30 FC 07 FF
696D: FE 05 0F 21
6971: 0F 2D FF FC
6975: 07 FE 05 0F
6979: 28 07 28 FF
697D: FE 05 0F 1D
6981: 0F 29 FF FC
6985: 07 FE 05 0F
6989: 24 07 24 FF
698D: FC 0F FE 06
6991: FD 00 31 0F
6995: 35 8F 3B 0F
6999: 3C 0F 39 07
699D: 39 FD 80 30
69A1: 87 39 9F 34
69A5: 0B 37 01 35
69A9: 01 34 FD 00
69AD: 18 07 32 87
69B1: 34 1F 34 FD
69B5: 00 30 03 3B
69B9: 87 3C 07 3B
69BD: 0B 37 FD 00
69C1: 10 07 34 A7
69C5: 35 FD 80 12
69C9: 8F 35 8F 34
69CD: FF FE 05 0F
69D1: 21 FF
Parece mentira que con solo esos datos el SID toque esa musica! :)
-
Teoricamente, si fuesemos capaces de escarbar en nuestra memoria y comprender que hace ese codigo ASM con los datos, tendriamos el problema resuelto. :-)
El SID se programa simplemente "volcando" los datos en su registro, por lo que nuestro PIC deberia hacer lo mismo a partir de la parte de datos de ese ejemplo (previamente guardados en una EEPROM)....
No estamos cerca de lograrlo, pero me da la sensacion de que no es imposible. Tengo que dejar por un rato (y dejar descansar el culo), pero en unas horas vuelvo a seguir con esto :)
Estuve revolviendo y encontre varios manuales originales de Commodore (si, en PAPEL!!), pero son de BASIC.... Grrrr! :?
-
Más documentación sobre el funcionamiento del SID: http://unusedino.de/ec64/technical/misc/sid6581/index.html
Conexión de un SID a un ATMEL con indicaciones sobre las precauciones eléctricas: http://www.synthdiy.com/show/?id=1041
Un PIC enganchado a un SID: http://hct.ece.ubc.ca/research/sidgroove/indexold.html#schematics
Otro tipo embarcado en nuestra misma empresa pero con un ATMEL: http://www.mikekohn.net/micro/sid_player.php
Entender ese código implicaría emular el 6502... ¿a nadie se le habrá ocurrido crear una herramienta que extraiga directamente de los archivos PSID los estados que deben tener en cada instante los registros del SID? Sigo buscando... agotaré todas las posibilidades antes de pensar que la única solución es emular el 6502.
-
Hola juanfe!
No se trataria de emular al 6502....
Yo creo que tendriamos que hacer un software para la PC que a partir de un *.SID generase una tabla que luego cargariamos en la EEPROM para que el PIC la vuelque al SID
No he tenido tiempo de analizar la rutina contenida dentro del archivo que postee antes, pero es muy posible que sea poco mas que un bucle que recorre los datos enviandolos al SID. Una especie de....player.
No necesitamos que el PIC sea capaz de correr ESE codigo. Solo que entienda los datos contenidos en el fichero...
Sigamos buscando, que el programa que mencionas ya lo tiene que haber hecho alguien antes! Tengo que darle un vistazo a la pagina que pusiste con el ATMel que emula el SID..ese si que es un proyectazo!
Saludos.
-
He acabado de leerme la hoja de datos del SID6581 y es un texto ameno y muy instructivo, una maravilla. Creo que lo vamos a conseguir.
Por lo poco que recuerdo del 6502 no creo que sea tan sencillo aitopes, pero tienes razón en que habrá que investigarlo...
Entretanto, una buena opción es el programa siddump, que no da precisamente el contenido que deben tener los registros del SID en cada frame ¿pero, a qué se refieren con frame? ¿serán frames del sistema PAL?
Transmitir los datos al SID tampoco va a ser fácil, pues usa un sistema bastante curioso.
De acuerdo a un añadido de la hoja de datos, los condensadores que has puesto de 2200pF deberían ser en realidad de 1000pF.
-
Pues sí, según este documento http://www.ucapps.de/howto_sid_wavetables_1_es.html, cada frame corresponde a un campo PAL, es decir 20ms (50Hz). Estamos cerca, muuuuuuuuuy cerca,...
-
Yo también tengo un manual de la commodore que también está en basic (esa no la tiré y la tengo guardadita :wink: ) por lo que voy a leerlo haber si logro entender esto y poder ayudarlos.
-
Pues sí, según este documento http://www.ucapps.de/howto_sid_wavetables_1_es.html, cada frame corresponde a un campo PAL, es decir 20ms (50Hz). Estamos cerca, muuuuuuuuuy cerca,...
Si señor!
Eso es lo que puede deducirse del documento. Es curioso que se haya adoptado un valor fijo para esto, es como si el sonido estuviese..."cuantificado", es decir, no puede empezar y terminar en cualquier momento, si no que lo hace en posiciones de la linea de tiempo que son multiplos de 20ms (me parece que la explicacion quedo engorrosa)
Pero viendo este pedacito del documento se puede entender mejor:
Aquí finalmente una vista de la base de tambores emulada, que empieza en 0:38, canal #2:
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=21792.0;attach=6958)
Tenemos las siguientes partes:
* empieza con una onda triangular, que se mantiene activa durante 20 mS
* luego hay una parte corta de ruido durante 20 mS
* acaba con una onda de pulso, la frecuencia y la amplitud se hacen más bajas
-
Hola Aitopes, respecto a tu esquema, cada vez compruebo en más sitios que prefieren utilizar un pin PWM como reloj para el SID, pues parece ser que han encontrado problemas con otras configuraciones.
También me ha sorprendido en algunos casos que utilizan registros de desplazamiento para enviar datos al SID en lugar de hacerlo pin a pin con el PIC.
Otro señor que conectó un sid a un pic: http://emptybits.com/sidemin
Este programa también nos permitiría extraer el estado de los registros del SID en cada frame, y además funciona directamente en el C64 (o en un emulador): http://www.ffd2.com/fridge/ransid/
Esta gente (http://www.c64.no/nanosidplay/) utiliza nuestro mismo planteamiento (evitar emular el 6502 y extraer del PSID directamente los valores de los registros del SID):
--------------------
NanoSIDplay released
--------------------
A new SID player, NanoSIDPlay, was released recently. Here's
what was announced about it:
There is a new sid-music player available, named NanoSIDPlay,
developed by Tom Roger Skauen (that well-known C64 composer)
and Laurent Ovaert. Instead of emulating the Sound Interface
Device chip along with the whole environment (which is the
way SIDPlay2/w does it), it simply reads values that a tune
writes into the SID registers. Of course, it has to use format
totally different from PSID/RSID. So, a new format is
introduced - called ZSID (after Zipped SID, most probably).
ZSID stores values from SID registers (also tune length/loop
data and precise, almost cycle-exact information about ADSR
changes) in compressed format. Of course, it has its
disadvantages - for example it cannot store multiple subtunes
in a file. All in all, very much alike YM format, commonly
used to play Atari ST music. There exists a PSID->ZSID
converter, but it is unfinished and unavailable at
the moment. NanoSIDPlay developers have a plan to convert
the whole HVSCinto the ZSID format, so it could be played
on NanoSIDPlay. NanoSIDPlay is not trying to compete with
SIDPlay2/w in terms of sound fidelity etc. (but it isn't bad
compared to STSound for example, try it yourself!), it has
just one advantage - runs C64 tunes smoothly even on a 386
class CPU.
If you have a low spec PC, why not check it out?
http://www.sid6581.org/NanoSID/
-
Hay una cosa que no me cuadra después de leer con detenimiento el datasheet
¿sólo se puede escribir un registro cada 20ms? ¿o existe alguna forma de escribir varios registros en la ventana de tiempo durante la que está en alto el clock?
-
No parece haber informacion sobre ello en la hoja de datos, ni en uno ni en otro sentido.
Si no se te ocurren otros cambios en el circuito posteado mas arriba, quizas vaya siendo hora de dibujarle un PCB y armarlo, como para hacer alguna prueba. No digo tocar una melodia, pero al menos hacerlo hacer "Tuuuuuuttttttttt" :)
Por lo pronto, he estado jugando con Visual Studio para aprender a abrir y escribir ficheros de texto, y la cosa funciona. Por supuesto, falta saber "que" hacer con lo leido :)
Saludos!
-
Aitopes, no he tenido tiempo de estudiar con detalle tu esquema, pero cada vez estoy más seguro de que usaría una salida PWM del PIC para el clock del SID. Lo demás me parece bien, aunque no tendré tiempo de verlo con detalle hasta el fin de semana.
Yo lo probaría primero en un protoboard antes de hacer el PCB.
-
Ok. Me parece bien eliminar el integrado que divide la frecuencia.
Lo he simulado (a esa parte) y funciona, pero si lo evitamos es algo menos para tener en cuenta. Busquemos un pin libre, y lo hacemos por PWM.
Respecto del PSB, casi casi que me resulta mas rapido y facil hacer un diseño que renegar con un protoboard, pero eso es por bruto que soy nomas :)
Espermos al lunes, asi el fin de semana le damos el ultimo vistazo al esquema.
Saludos!
-
OK. aitopes, este finde lo miro con detenimiento y te cuento el lunes.
En mi pregunta de antes me he liado:
¿sólo se puede escribir un registro cada 20ms?
Obviamente la respuesta es NO. Creo que sólo se puede escribir un registro por cada ciclo de reloj, es decir, un registro cada 1us (si funciona a 1MHz).
Lo que debe ocurrir internamente es que el SID sólo actualiza los registros al cambiar de frame (es decir cada 20ms), o a lo mejor los actualiza en cada ciclo de reloj. Ésta es la verdadera duda, y no lo veo en el datasheet, aunque también es cierto que el datasheet es una fotocopia del año catapún y hay párrafos enteros que están velados.
Sigo investigando...
-
Offtopic: No quiero desviar el tema central del tema, por lo que seré breve.
Estube estudiando el manual de la commodore 64 para generar sonido. Al parecer es muy facil, con solo 7 instrucciones (y menos también) en basic, se puede generar un sonido o un efecto sonoro.
Las istrucciones son POKE; FORT; FORL que les sigue una serie de números en el que se selecciona el tipo de onda, el volumen, el sostenimiento/relajación, ataque/decaimiento.
Como mencioné es en basic, y no se si estas instrucciones están en el basic para los PIC, presumo que no, por lo que habría que averiguar como trabajan estas instrucciones. Voy a tratar de buscar información al respecto.
Cuando llegue el momento, postearé la tabla completa y algunos ejemplos para generar sonido, o cuando me lo soliciten. Se que ahora están con el tema de la conección y comunicación con el PIC.
-
Bueno, fue más facil de lo que pensaba. Aunque por ahora no es muy completo, porteo lo que encontré:
POKE (http://es.wikipedia.org/wiki/POKE)
Por ahora eso solo
-
Hola Leon!
Gracias por la ayuda!
Efectivamente, todo en una C64 puede (y a veces debe) hacerse con POKE. De hecho, lo unico que hace es colocar un valor en una posicion de memoria, mientras que PEEK lee el contenido de una de ellas.
Saludos.
-
Generar sonidos con el SID parece realmente sencillo, pero yo creo que lo interesante es poder aprovechar los archivos PSID existentes, especialmente porque como no se pase por aquí Modulay y nos componga las melodías, no cuenten conmigo, que tengo un oído pésimo.
El problema es que los PSID están en ensamblador. Ya estudié el desemsamblado que publicó aitopes anteriormente, y aunque no me acuerdo de todo, sí he visto que no sería fácil extraer de ahí los valores de los registros, pero que sería incluso más difícil saber cuándo debemos grabar esos valores en los registros. No descarto esta vía porque me parece la más desafiante...
Pero me temo que no hay más narices que emular el 6502 completito y, para eso, comenzaré con alguno de los emuladores ya existentes en forma de librería (para C o Java) e intentaré modificarlo para que nos dé el valor de los registros del SID y, sobre todo, cuándo deben adquirir esos valores.
De momento, lo que más me preocupa es cómo saber cuándo escribir en el SID. Sólo se puede escribir en el semiciclo positivo del reloj, que dura, 0.5us, de modo que se me ocurren tres posibilidades a priori:
1. Utilizar un timer del PIC para provocar una interrupción cuando se producen los semiciclos positivos y escribir los registros en ese momento. En lugar habría que detectar el flanco de bajada para preparar los datos...
2. Conectar el reloj del SID a una patilla del PIC con interrupción de cambio de estado, o a una de interrupción externa para saber el estado del ciclo en todo momento.
3. Olvidarnos de cómo esté el reloj y mantener los datos en el búffer de escritura durante al menos 2us, para tener la certeza de que solapamos completamente una ventana de semiciclo positivo de reloj, aunque esto es lo que menos me convence...
Perdón por el follón... son sólo notas que me escribo para que luego no se me olviden :mrgreen:
Por cierto, va a hacer falta mucha ayuda de Leon para que explique cómo se hacía en el MPlab para saber cuándo tiempo consumía un programa/instrucción.
-
En esta revista anual hay bastante información técnica: http://digilander.libero.it/ice00/tsid/sidin/
-
Creo que he encontrado el alivio a una de mis pesadillas: http://home.arcor.de/ms2002sep/bak/SID2MIDIw.exe
Es como el siddump pero no está limitado a 3000 frames (el siddump tampoco está limitado, pero hace falta configurar una opcioncilla), además de proporcionarnos los valores de todos los registros (excepto la frecuencia) en un formato más apropiado.
Por cierto, la documentación del programa está aquí (ojo que el programa que se incluye aquí está restringido; utilizar el del enlace anterior): http://home.arcor.de/ms2002sep/bak/s2mwr17.zip
-
Otra observación sobre memoria:
El SID usa 29 registros, cada uno de un byte, y se actualizan cada frame (0.020s), es decir, 1450 bytes por segundo, de modo que un minuto de música requeriría aprox 85KBytes. La memoria que puso aitopes en el esquema creo recordar que era de 32KBytes... quizás se quede un poco corta.
Podríamos ahorrar teniendo en cuenta que no todos los registros se actualizan en todos los frames, pero aún así quizás deberíamos pensar en algún sistema de compresión.
Por ejemplo, una canción media en PSID ocupa 10KB y a nosotros nos ocuparía casi 20 veces más.
-
Hola amigo!
Si, podemos usar una memoria mayor.
Pero es muy poco probable que siempre haya cambios cada 20ms...Asi que si lograsemos armar una especie de "tabla" que tenga una columna con el tiempo y otra con el estado de los registros, con una fila por cada cambio, el archivo seria muy pequeño.
El programa del pic deberia ir incrementando un contador del tiempo trancurrido, y cuando su valor coincide con una fila de la tabla (ordenada por tiempo para facilitar las cosas) cargaria los registros del SID.
Creo que asi el archivo seria mas pequeño.
Igual, la memoria debe ser mayor. Yo puse esa por que era el unico modelo que tenia en mi cajon de componentes, pero no debemos quedarnos cortos. :)
Saludos.
-
Pues por lo que yo he visto hasta ahora, casi siempre hay cambios en cada frame (cada 20ms), aunque no siempre se actualizan todos los registros.
Me sigue preocupando cómo va a saber el PIC cuando puede escribir, es decir, cuándo está en el semiciclo positivo la señal del reloj del SID.
Voy a intentar modificar el código de siddump y recompilarlo para que muestre los datos de un modo más apropiado a nuestros intereses.
-
Me sigue preocupando cómo va a saber el PIC cuando puede escribir, es decir, cuándo está en el semiciclo positivo la señal del reloj del SID.
Quizas tus opciones 1 y 3 sean las mas adecuadas. La 3 parece mas facil de implementar, y la 1 un poco mas elegante y "segura" :)
-
Los esquemas del C64, pueden venir bien para ver cómo lo conectaron ellos (condensadores y amplificador de salida): http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c64/
-
Que bien, Yo estaba buscando el esquemático pero no lograba encontrarlo. Ver como maneja el procesador al SID, va hacer más facil su comprensión
Mientras buscaba información, me enteré que el procesador corría a menos de 1MHZ y hoy los PIC más modestos, trabajan hasta 4 veces más rápido. La razón por lo que menciono esto, es porque en un hilo intentan hacer imágenes para la TV a color con un pic, y digeron que no es posible.
-
Hola Leon!
En muchos casos, el micro no se dedica directamente a dibujar el video...
Saludos!
-
Entónces se puede hacer lo mismo con los pic (talvéz para mucho es ovbio, pero para mi, es terreno que estoy descrubiendo)
Bueno, no desvío más el tema. Perdón
-
Acabo de encontrar algo muy interesante
h t t p://unusedino.de/ec64/technical1.html Fíjencen en dónde dice 6581, hay varias páginas, a partir de la 3 es interesante.
También mas abajo, hay mas documentación sobre el mismo, es lo siguiente: h t t p://unusedino.de/ec64/technical/misc/sid6581/index.html
-
Esta bueno! Es basicamente la hoja de datos trancripta. Eso mismo es lo que he puesto en uControl, en español.
Es una buena base para entender como trabaja el SID.
El reto, como dice Juanfe, es poder "traducir" los ficheros de musica existentes para no tener que ponerse a componer (algo que yo no podria hacer, claro! :) )
-
Si, mientras lo estaba leyendo me di cuenta :oops: y yo que pensaba que habia puesto la piedra angular
-
Si, mientras lo estaba leyendo me di cuenta :oops: y yo que pensaba que habia puesto la piedra angular
No, joder! Que todos esos links sirven. No dejes de buscar cosas. Todo suma! :)
-
Tranquilo que no estoy ofendido. Y estoy buscando cosas.
Estoy buscando si hay alguna otra opción de la que posteó Juan, sobre pasar wav a SID
-
Ánimo chicos, que esto se pone muy interesante...
En esta imagen sacada del foro del MIDIBox (http://www.midibox.org/forum/index.php?topic=5748.0), apuestan por la opción 3 de las que yo propuse:
(http://www.ucapps.de/midibox_sid/mbsid_synched_bus.gif)
Y con esto http://www.midibox.org/forum/index.php/topic,5204.0.html y esto http://www.midibox.org/forum/index.php/topic,2124.0.html ya casi puedo dormir tranquilo. En otras palabras, no pasa nada porque un registro se escriba 2 veces consecutivas, siempre y cuando los datos escritos sean los mismo, pues el SID no reinicia el sonido (la voz) si los datos son iguales.
Leon PIC: ¿El MPLab tiene alguna forma de saber cuánto tiempo consumen un conjunto de instrucciones, verdad? ¿Podrías orientarme un poco en esto?
Voy a ver si puedo recompilar siddump y, si lo consigo, creo que ya tenemos todo lo necesario para empezar. El problema es que nunca he utilizado gcc en Windows.
Me hubiera gustado más usar el SID2MIDI, pero el código no lo encuentro por ningún sitio.
-
Es pequeña explicación, pero aquí puse cómo funciona el stopwatch de mplab para medir tiempos con precisión:
http://www.todopic.com.ar/foros/index.php?topic=20476.msg154104#msg154104
-
Si, justamente como lo explicó Nocturno. Aunque no es necesario iniciar el stopwatch cuando se llega al breakpoints, se puede iniciar desde el principio y luego precionar el botón ZERO para reiniciar la cuenta.
Yo lo haría así, coloco los breakpoints desde el inicio de donde se quiere contar, y colocar el segundo breakpoints hasta dónde contar. Configuro la frecuencia de reloj, para eso ir a DEBUGGER ------> SETTINGS, luego abrir la ventana de STOPWACH en el menú DEBUGGER, Presionar F9 y se detendrá en el primer breakpoints, poner el contador en cero y precionar de nuevo F9 que se detendrá en el segundo breakpoints y mostrará exactamente los ciclos y los tiempos. Lo bueno de esta ventana, es que muestra el valor real. El problema viene después cuando se monta el circuito y ver si el oscilador oscila en la frecuancia deseada.
-
Un link más
h t t p://usuarios.lycos.es/putusoft/c64/c642pc.htm
-
Gracias nocturno por el capote, y también a Leon por la aclaración. No acabo de acostumbrarme al MPlab...
Buenas noticias: ya he recompilado el siddump, era tan fácil que me ha llevado un rato hacerlo :mrgreen:
Consecuentemente, ya podemos extraer de cualquier PSID compatible con siddump (que espero que sean muchos) los valores que deben tener los registros del SID6581 en cada frame/field y almacenarlos en el formato que más nos convenga.
Creo que de momento ahora ya sí lo tenemos todo para empezar :-/
Habría que elegir un PIC y un lenguaje de programación. ¿Qué proponen? ¿quizas un 18F con USB? y como lenguaje de programación CCS?
-
CCS, definitivamente!
Propon algun PIC, a ver si lo consigo.
Tengo algun PIC18F4520 SMD, pero no tienen USB :(
-
Para asegurar un poco más el asunto de la comunicación, ayer pregunté a uno de los líderes de MIDIbox cómo lo hacían ellos, y me respondió que al principio lo hacían con el método 3 (escribir durante 1.2us sin preocuparse del estado de la señal del reloj), pero que luego se dieron cuenta de que daba problemas y lo han cambiado, pero no acabo de enterder en qué consiste el cambio.
Podéis seguir la conversación en http://www.midibox.org/forum/index.php/topic,5204.0.html
-
Ya está (medio) claro, primero esperan hasta que el clock está en alto, inmediatamente se ponen a esperar hasta que se pone en bajo, e inmediatamente bajan el CS para enviar los datos y lo mantienen así durante 1.2us. No usan interrupciones para nada.
No obstante, parece ser que hay una cuestión de latencias que no acabo de comprender; espero poder comprobarlo con el osciloscopio...
Mientras tanto, voy animándome a emular el 6502 con el PIC. Aquí un buen recurso: http://fms.komkon.org/EMUL8/HOWTO.html He echado un ojo al código de siddump y realmente no es tan complejo... aunque me temo que harían falta 64KBytes de memoria...
Joer, este señor lo ha emulado en javascript: http://www.6502asm.com/
Más sobre cómo crear un emulador: http://www.cecs.csulb.edu/~hill/cecs497/nestreme/howto.html
-
Hola!
Recien caigo por aqui!
Estoy mirando el hilo del foro en ingles. Dos cosas:
1) El tio ese la tiene muuuuy clara! , y
2) Que bien manejas el ingles! :)
No esta nada mal emular el 6502 con una memoria externa. Sigue pareciendome que para hacer sonar el SID no es estrictamente necesario, pero para interpretar los archivos en cuestion puede ser un buen enfoque. Peeeero, el tener un emulador del 6502 en un PIC tendria muchas otras aplicaciones!!!!!!!
Creo que a partir de aqui estamos en un nuevo punto de inflexion en el proyecto. El esquema que habia dibujado ya no sirve de nada con este enfoque. Y no se si no nos conviene buscar algo mas potente que un PIC18....no te parece?
(en la que me estoy metiendo!!! Apenas hago cositas con un 16F628, y estoy pensando en saltearme los PIC18!)
-
PD: Excelente el HowTo sobre como escribir un emulador.
-
Creo que debemos ir poco a poco. Primero ver si somos capaces de dirigir la "orquesta" que contiene el SID y luego, si se puede, emular el 6502. No me apetece nada tener que programar en ASM, pero parece ser que hay algunas cuestiones de ratardos que pueden darnos la lata y que no sé si podremos gestionar directamente en C.
Creo que tu esquema sí sirve, aunque yo lo reduciría al mínimo, es decir, elegir un PIC básico con PWM, conectarlo a una memoria mayor que la que tú pisiste y al SID (olvidándome de momento del LM336). Lo del USB lo proponía para que resultase más sencillo actualizar el contenido de la memoria, pero también podemos hacerlo por RS232. Otra posibilidad sería hacer un PCB básico para el SID (incluidos sus condensadores, ...) y con unas tiras de pines que nos permitiesen conectarlo al protoboard o a otro PCB con el PIC. Me gusta esta idea, porque de momento lo único que tengo claro es que las conexiones del SID son las que son, mientras que las del PIC...
Si conseguimos que esto funcione, habría que analizar lo del emulador... ¡qué bonito proyecto sería!
-
En otro orden de cosas, otro señor de Polonia (swinkels) con el que me estoy posteando me contesta:
TK already said all about this but i can clear it for you.
If you don't need ultra fast writing speed you don't have to check for the
PWM clock level, just do the following: set data and address to SID bus,
then set WR to 0 and wait more than 1us (maybe 2us to be sure ;) and set WR
to 1.
SidPLAYER from my website uses this scenario and it works correctly.
You can synchronize writing to clock signal but i'm not familar with PIC so
can't tell your more.
SidPlayer es un chisme similar a lo que nosotros queremos hacer pero basado en un ATMEL:
(http://www.swinkels.tvtom.pl/swinsid/sidplayer-mini.jpg)
-
Se me ha ocurrido la posibilidad de investigar dónde obtener un SID6581 y me he quedado helado...
Resulta que la forma más sencilla es comprando un C64 antiguo, pero parece ser que muchos de los que se venden no contienen el chip verdadero, sino uno remarcado ¡ALUCINANTE! Además, no todos los modelos de C64 incluían un SID.
Por este motivo, hago desde aquí un llamamiento a cualquiera que pueda ayudarme a conseguir un C64... quizás en el mercadillo de vuestra ciudad hayáis visto alguno o sepáis de alguien de confianza que quiera deshacerse del suyo...
Gracias
-
¡Qué desilusión! Lo que sigue en un desahogo: :5]
Esta mañana había quedado con un tipo que me había asegurado que tenía un C64 del primer modelo por 50 euros (caja con forma de panera y color tirando a ocre en lugar de a marfil), que es el que trae el SID6581, y depués de darme el paseo resulta que era un C64 C (no tenía forma de panera, pero desde luego sí estaba marrón, ¡qué cantidad de mierda tenía! y eso que debería ser blanco).
Total que le he dicho que no, aunque ya estaba dispuesto casi a regalármelo...
A seguir buscando mientras lloro :?
-
Hola Juan. te paso un link de mercado libre en dónde venden varias C64, si te interesa alguna o si queres hacerle una pregunta al vendedor, dime que yo se lo hago con todo gusto.
http://listado.mercadolibre.com.ar/commodore-64
Si te interesa comprarlo, dime cual que te lo compro y te lo mando por correo.
otro link
http://listados.deremate.com.ar/commodore+64
-
Muchas gracias Leon. Ya me había fijado que en Argentina se venden bastantes C64 pero me temo que los gastos de envío serían demasiado altos. Según me comentó Aitopes, el cambio de vuestra moneda al euro es aproximadamente 4:1, de modo que, por ejemplo éste http://articulo.mercadolibre.com.ar/MLA-37047638-_JM, me costaría unos 40 euros ¿es así?
Voy a seguir intentándolo esta semana en ebay, y si no lo consigo, quizás os pida que me hagáis el favor de comprarme uno por ahí.
-
Hola jaunfe!
5:1 es el tipo de cambio, o algo mas.
Ese producto te costaria un poco menos :)
Aprovecho para comentarles a los interesados que las Dream Commodore 16 tambien tienen el SID6581, ya que usaban el mismo "motherboard" que las C64. De hecho, de una de ellas es de donde he sacdo el SID6581 que pienso usar. :)
Saludos!
-
Hoy está a 5.05 para la venta (vende banco) y 4.95 (compra el banco)
Te saldría la commodore 34 euros. No se si alla es mucho. Pero podes comprar alguna más incompleta, o sea, solo la computadora y yo la destripo por ti :mrgreen: y te mando solos los CI
-
Gracias Leon, quizás te tome la palabra. Voy a seguir intentándolo esta semana en ebay y, si no lo consigo, tendré que abusar un poco de mis compañeros argentinos.
En otro orden de cosas:
Estoy preocupado con el asunto de la memoria. Yo no tengo experiencia en el manejo de memorias EEPROM externas. El caso es que podríamos necesitar escribir un máximo de 29 registros de 8 bits en el SID cada 0.02 segundos, es decir, tendríamos que poder leer los datos de la memoria a unos 29x8x50=11600 bits por segundo. Además, la memoria requeriría una capacidad de más de 256 kilobytes.
Pregunté aquí (http://www.todopic.com.ar/foros/index.php?topic=19092.msg171609#msg171609) que me recomendaran una memoria con estas características y javicho me propuso algunas. Como no tengo ni idea pensé que lo más sencillo sería una SPI, pero... por más que investigo no encuentro nada. De hecho, pregunté aquí (http://www.todopic.com.ar/foros/index.php?topic=21899.0) y no me ha contestado nadie...
Esto me inclina a pensar que no voy por buen camino. ¿Saben ustedes algo más sobre memorias que yo? ¿podrían orientarme un poco en este asunto?
-
Estoy como tu...pero creo que no vamos a encontrar EEPROMs de esas caracteristicas.
Podemos probar todo con una tarjeta de pruebas con solo el SID, conectada mediante una serie de pines a otra placa que tenga el PIC y una EEPROM "normalita". Cuando esto funcione, vemos de usar una tarjeta SD o algo por el estilo. ;)
-
¿Una I2C no te da esa velocidad?
En caso que no te sirva, una vez utilicé unas memorias muy rápidas y muy útiles, aunque necesitarás un montón de pines para usarlas porque se procesan en paralelo: son las FIFO de Texas Instruments.
-
Hola manolo!
La velocidad es posible que si, ya que es menor a los 4 o 5Kbytes por segundo. El tema es el tamaño....aunque siempre se pueden usar varias y construir un "banco" de memorias como hizo alguien aqui en el foro (no recuerdo si era Diego....o vos mismo! :) )
Saludos!
-
Lo hizo Diego con una batería de cuatro 24AA1025 que responden como si fuera una sóla.
-
Me he leído las hojas de datos de las memorias I2C y SPI de microchip y, con mi nivel, no saco nada en claro respecto a sus velocidades. Lo mejor será probarlas en la práctica. Voy a probar las 24FC1025, que parece ser que utilizan un clock de hasta 1MHz, más rápido que los 400kHz de las memorias I2C normales.
Respecto a esas memorias FIFO nocturno, ¿recuerdas la referencia?
-
Mira aquí, que las tienes de todos los colores:
http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?familyId=183&family=logic&uiTemplateId=SZVI_T
-
Hola!
"Canibalizando" una regrabadora de CD me he topado con una EEPROM AT18C16.....si, es pequeña (solo 2KB), pero mira que caracteristicas:
Features
• Fast Read Access Time - 150 ns
• Fast Byte Write - 200 μs or 1 ms
• Self-Timed Byte Write Cycle
– Internal Address and Data Latches
– Internal Control Timer
– Automatic Clear Before Write
• Direct Microprocessor Control
– DATA POLLING
• Low Power
– 30 mA Active Current
– 100 μA CMOS Standby Current
• High Reliability
– Data Retention: 10 Years
• 5V ± 10% Supply
• CMOS & TTL Compatible Inputs and Outputs
• JEDEC Approved Byte Wide Pinout
• Commercial and Industrial Temperature Ranges
Description
The AT28C16 is a low-power, high-performance Electrically Erasable and Programmable Read Only Memory with easy to use features. The AT28C16 is a 16K memory organized as 2,048 words by 8 bits. The device is manufactured with Atmel’s reliable nonvolatile CMOS technology.
Aqui la hoja de datos. (http://www.datasheetcatalog.org/datasheet/atmel/DOC0540.PDF)
-
Está muy curiosa esa memoria porque sirve los datos en paralelo. Lo que más me gusta es que es fácil de utilizar y que las cosas están claras: pones este pin en bajo, el otro en alto, y en las salidas ya tienes el dato disponible. Las I2C son un misterio... y las SPI más.
Sigo dándole vueltas a las memorias que recomendó Nocturno porque son también paralelo.
También me he fijado en este "pepino" de 2MBytes y tiempo de acceso 70ns, que además incluye una batería para mantener los datos en caso de fallo de alimentación: http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2677
Lo malo es que cuesta $113. No sé si atraverme a pedir unos samples... seguro que me ponen pegas. Además, quizás no sea lo mejor utilizar chismes tan extraños que van a costar trabajo de encontrar. Mejor lo dejo estar... (pensamiento en directo :D)
-
Otro emulador del propio SID6581 creado con un ATMEL y programado en C,
(http://roboterclub-freiburg.de/atmega_sound/chMinimalSid.jpg)
con la opción de ser controlado a través de comunicación RS232 con un Arduino
(http://roboterclub-freiburg.de/atmega_sound/Arduino_plus_Bottom168.jpg)
o directamente desde el PC con un programa creado en LabView
(http://roboterclub-freiburg.de/atmega_sound/LabViewSidControl.jpg)
-
Buenismo!!!!
Ahora.....¿como se puede ser TAN HIJOPUTA al despatarrar asi a un micro???? :shock:
:D :D :D
-
ja, si vos vieras mis micros :D :D :D
-
Vuelvo aquí a desahogarme y llorar un rato...
Lo de ebay es casi imposible. Hay un usuario de ebay que compra todo lo que sale de c64 sin importarle el precio. He echado cuentas y se ha gastado casi 6000 euros sólo en el mes de mayo. ¿Cómo es posible?
-
Hola Juanfe:
Pero que es que no consigues uno por pujas?
De todas maneras he visto que por 19 euros lo tienes en compra directa.
A los que yo me refiero le quedan 3 dias, y el precio de salida es de 6 euros. Supongo que sera el mismo que tu buscaste
A ver si tienes suerte
-
Hola de nuevo;
Siento haber puesto antes el mensaje sin antes registrarme en ebay. Al registrarme me calculó los gastos de envio y con como el precio de compra directa del chip.
Total: un desaste. A ver si tienes suerte con este, loq ue pasa que esta pujado por varios tios.
http://cgi.ebay.com/6581-SID-sound-chip-tested-good-Commodore-64-128_W0QQitemZ150251599689QQihZ005QQcategoryZ4193QQssPageNameZWDVWQQrdZ1QQcmdZViewItem
-
Muchas gracias Diego. Me doy hasta el lunes de plazo y si no lo consigo, no sé qué hago :D
Lo que quiero es comprar un C64 completo, pues gracias a la generosidad de Leon PIC estoy a la espera de que me llegue un SID6581. El problema es que no sabemos si funciona, y me gustaría poderlo probar directamente en el ordenador (y también porque quiero darme un capricho, reconozcámoslo).
Traer un C64 desde EEUU sale un poco caro, y por eso lo estoy intentando en la UE. El caso es que cada vez que veo alguno interesante, llega este señor, puja y olvídate. Es imposible (para un currante normal) sobrepujarle. Le da igual el precio. Él hace su puja y se va, no creas que llega a última hora para ver si alguien le ha sobrepujado. Cada vez que actúa gana la puja con 2 o 3 días de antelación. Si supiera dónde vive le mandaba a "Ana Obregón" para que le diera una paliza... Es broma, me parece bien que cada uno gaste su dinero en lo que le parezca...
En fin, a seguir esperando un poco de suerte...
-
Joe, la que os ha dado con los C64. A ver si algún día alguien encuentra algo supervalioso en los Sony MSX, y lo saco de su letargo :P
-
AAAAAAAAAAAAAAAAAAAA me voy unos dias y que veo, 5 paginas de posts dedicadas al 6581 estare muy atento a lo que hacen, por si les sirve creo que habia rulando por la red simulaciones del sid sobre fpga, incluso versiones mejoradas para filtros y efectos, no ocupan un pequeño chip pero es una solucion. aqui una direccion
phoenixSID 65x81 (http://myhdl.jandecaluwe.com/doku.php/projects:phoenixsid_65x81)
un saludo
-
GRACIAS LEON PIC :-/
(http://img180.imageshack.us/img180/5113/leonsidam4.th.jpg) (http://img180.imageshack.us/my.php?image=leonsidam4.jpg)
He comprado por ebay 3 motherboard de C-64 para chatarra (sin teclado ni nada) y voy a sacar de ellas los condensadores que necesita el SID (por eso de que suene "realmente" como un C-64).
También he comprado un C-64 operativo (al fin lo conseguí) que pienso utilizar para probar los SID...
Ya tengo ganas de empezar a hacer las primeras pruebas, pero tendrá que esperar al menos 2 semanas. Creo que comenzaré montando una placa PCB sólo con el SID y todos sus condensadores, entradas y salidas... para poder hacer pruebas sin malograrlo.
GRACIAS LEON PIC :-/
Y un ejemplo de las posibilidades de este chip (incluida síntesis de voz):
-
Hola Juanfe!
Felicitaciones por la compra.
Si puedes, cuando lo tengas, tira el esquema que vas a usar, asi vamos haciendo uno igual para probar "a dos manos" :)
Repecto del video....Joder....lo escucho, y se me caen las medias! :)
-
Ariel, Juanfe y amigos los vengo siguiendo del principio, muy buen proyecto!!!
Suerte y que pronto pueda oir esos sonidos!!!
Muy bueno el vídeo, espectacular!!
saludos!!
-
Hola Flaco!
El que lleva la batuta es juanfe....yo solo lo empujo un poco, ja ja ja ja!
¿Viste que bien suena? No se vos, pero yo pase cientos de horas con la C64, y me vuelve loco la idea de poder volver a oir eso, mas si es mediante una placa "made in casa" y un PIC :)
Saludos.
-
Que buen video, se me cae un lagrimon.
Al escuchar la música (y como hablaba :shock: ) me hiso acordar de que hay una cónsola que suena exactamente igual o parecido, y es el family game principalmente el juego de jurassic park.
No se que sintetizador de sonido utiliza, pero por ahí tenemos una actualización.
-
Ya les conté que conseguí hacerme con un C64 por ebay. Ha llegado hoy... pero está roto :8} :8} :8} y :8}
El ordenador muestra menos bytes libres de los que debería. Parece ser que esto indica un fallo en los chips de memoria 4264 (4164) o en sus gestores 74LS257
Lo que más me joroba es que ahora no tengo tiempo para intentar repararlo (y tampoco sé si conseguiré las piezas)...
-
Hola amigo!
Que pena!
Pero a no preocuparse. Veamos cuales son los chips dañados, y quizas por aqui se pudan conseguir.
Por lo pronto: ¿El SID esta presente?
Si es asi, diseñemos un test para ver si está bueno! :)
-
Ya les conté que conseguí hacerme con un C64 por ebay. Ha llegado hoy... pero está roto :8} :8} :8} y :8}
El ordenador muestra menos bytes libres de los que debería. Parece ser que esto indica un fallo en los chips de memoria 4264 (4164) o en sus gestores 74LS257
mmmmmmmmmmmm, dejame revisar y te digo.
-
Sí el SID está presente, pero tengo las manos atadas... no puedo hacer nada de electrónica porque tengo el taller desmontado (necesitamos espacio en casa) y en el trabajo estoy hasta el cuello.
A ver si dentro de un par de semanas cambian las cosas...
-
¡Que mala pata! :( Ni siquiera uno tengo.
-
En esta página http://www.lemon64.com/manual/ está el manual de usuario del c64, y una parte especialmente interesante es todo lo relacionado con la generación de sonido: http://www.lemon64.com/manual/manual/8_1.html.
-
Hola Juanfe!
Buen material. Yo tengo uno similar en papel, que me vino con la C64.
Voy a ver de hacer una placa de pruebas para el SID, sencilla, que utilice conectores compatibles con mis modulos entrenadores. Solo me está comiendo el coco el tema del CLOCK. ¿convendrá nomas usar el PWM del PIC para generalo?
¿Que opinas?
Saludos!
-
Yo en eso ne tengo dudas. Seguro que te interesa usar el PWM porque así, como explicó Nocturno en otro hilo, podrás conocer internamente desde el PIC cuándo el reloj está en alto y cuándo en bajo, que es fundamental para la comunicación con el SID.
Creo que mañana por fin me quitaré de encima un proyecto de trabajo gordo que me ha tenido casi ahogado (será un gran día para mí) y a principios de la semana que viene terminaré algunos proyectos menores de trabajo, y probablemente para mediados de semana ya pueda ponerme de nuevo en serio con esto del SID y el nixie. Espero que no me pase como en el cuento de la lechera. Si puedes esperarme hasta mediados de semana, nos ponemos con ello juntos, y a ver si Leon también puede sumarse.
-
Como me alegra leer eso!
Es muy bueno sacarse las obligaciones de encima para poder encarar las cosas que nos gustan. :)
Por supuesto, esperamos hasta que estés listo. Mientras, voy a sacarme yo tambien algunas cosillas de la lista de "pendientes" :)
Saludos!
-
Con todo gusto me les voy a unir.
Me comprometo leer de nuevo lo más interesante del hilo, porque aún no me queda en claro la fuente para el mismo (en realidad quiero ver si encuentro algo diferente y que sea más sencillo y/o mejor). También trataré de conseguir el datasheet, porque no tengo ni idea de la distribución de los pines.
Me interesa también poder montarlo en el protoboard, para hacer todas las modificaciones hasta llegar al circuito original que será montado en la PCB.
EDITO: Como se nota que estaba distraido. Ja. Me equivoqué al escribir el post. De todas maneras, al final del proyecto, van juntos.
-
Me puse en contacto con Anthony Westbrook (http://www.toniwestbrook.com/shredz64), creador de la versión de Guitar Hero para Commodore 64, solicitándole sus impresiones sobre este proyecto (él había intentado algo parecido, pero lo tiene abandonado), y a continuación les dejo la respuesto, que no viene sino a confirmar la idea que ya teníamos de que para reproducir un SID en un PIC habría que emular casi por completo el 6502, además de otros procesadores.
I'm not sure how far you've gotten with your project, but if you're
looking to use a PIC to drive a 6581 using a PSID file, there are a few
issues. The biggest is that a PSID file is really just machine code
with a header that contains info about the song. You can see the PSID
format here:
http://search.cpan.org/src/LALA/Audio-SID-3.11/SID_file_format.txt
You can read what speed it should execute at from the header (either 50
or 60 hz), what SID it was designed for, name, author, etc.
The real problem though is that the song isn't stored as note data, it's
stored as 6502 machine code, which means that you need to have a 6502
CPU (or something emulating it) to process the code. But additionally,
you also need to handle calls that are made to other chips, such as the
CIA and VIC II, because songs use them for timing (e.g. either raster
interrupt timing or timer timing). This means either emulating this
functionality or the entire chip. This is why SID plugins for music
players like Winamp are actually basic commodore-64 emulators, because
they need to emulate almost all parts of the computer to play the SID
file properly. The way a SID file plays is the SID header has a
"player" address in it that gets called over and over again, at the
speed specified. The code at this address executes code that feeds the
SID registers the right values.
It's definitely doable, but its a big project - it would be a fun one
though! Let me know if I can provide anymore info. Thanks,
-Toni
-
Mi ingles no es muy avanzado, pero por lo que no me acabo de convencer es que, el SID, ¿es gobernado por mas de un CI? ¿es así?
-
Hola!
El tipo, con toda la razon, se espanta de que el contenido de los archivos SID son practicamente codigo ASM del 6502 (yo me siento muuuuy parecido a como se siente el :lol: )
Se me ocurre que tendriamos que armar una especie de "hoja de ruta" para el proyecto, para evitar frustrarnos. El objetivo final (desde mis conocimientos, al menos) esta muy lejos. Yo lo plantearia mas o menos asi:
1) Encarar la datasheet del SID, y comprender su funcionamiento BIEN
2) Armar un prototipo con el SID y un PIC, y escribir un programa que pueda hacerlo hacer "beeeep" :)
3) Encarar la datasheet del 6502, y aprender su ASM (un emulador de C64 podria servir para hacer pruebas)
4) Estudiar el funcionamiento de los emuladores. Mas arriba hay un EXCELENTE post de Juanfe, donde un tipo explicaca muy bien como construir uno.
5) Con lo aprendido en los puntos anteriores, determinar cuales son las sentencias (se me ocurre que todas :( ) del 6502 habria que emular
6) Escribir el codigo CCS (seria mi candidato a usar) para cada instruccion ASM del 6502. Quizas algunas requieran partes en ASM de PIC, que "meteriamos" dentro del proyecto principal CCS.
Puede que algunos puntos ya los tengamos comenzados, y me este faltando algo. Pero en este momento me parece la mejor forma de encarar esto.
¿Opiniones? :)
Saludos!
PD: Lo bueno, en mi caso al menos, es que cuanto mas dificil, mas ganas me dan de meterle mano ;)
-
Me gustan las hojas de ruta, porque como tengo un carácter "maverick", así tengo algo saltarme...
1. Cumplido :mrgreen:.
2. He renunciado a montarlo en breadboard, y haré una pequeña pcb de entrenamiento basada en el SID, que incluirá:
2.1. USB para enviar instrucciones fácilmente desde el PC. Si ven complicado obtener un PIC con USB, lo hacemos con RS232 y listo.
2.2. Memoria EEPROM. Hacer un beep con el SID creo que será fácil... lo chungo va a ser hacer un beep, beep, beep de forma más o menos sincronizada. Mi objetivo es comprobar el rendimiento de las memorias para almacenar los datos que debemos reproducir en el SID, en principio probaré con una melodía sencilla extrayendo los datos del archivo SID mediante mi versión modificada de siddump.exe. Conseguí una memoria paralelo super rápida de MAXIM, pero creo que montaré memorias I2C pues son más baratas.
2.3. Unos pocos LEDs y botoncitos para interacciones sencillas.
3. Antes de encarar el tema de la emulación me gustaría escuchar en el SID una melodía en condiciones. Emular el SID es sólo cuestión de tiempo y esfuerzo, pero lograr comunicarse con el SID a suficiente velocidad es lo que más me preocupa.
4. Ojalá lleguemos pronto aquí...
Bueno, creo que mañana ya podré ponerme con esto. ¿Qué más les parece que debería incluir la PCB de entrenamiento del SID?
-
Bueno, creo que mañana ya podré ponerme con esto. ¿Qué más les parece que debería incluir la PCB de entrenamiento del SID?
Hola Juanfe!
Yo pondria un pequeño amplificadorcito, basado en algun integrado popular, como el LM386, para no tener que "arrastar" otra placa pegada a esta todo el tiempo. Por lo demas...para probar me parece que estamos bien!
-
Sí tienes razón, se me olvidaba el amplificador... además, es imprescindible: por lo que he leído, la salida del SID es bastante delicada y no se puede conectar directamente a un amplificador externo porque se funde el SID. También pondré 2 potenciómetros para ver cómo funcionan los conversores ADC del SID.
En otro orden de cosas... ¡que buenas sensaciones deja a veces la electrónica! Recuerdan el C64 que compré y no funcionaba. Hoy lo he reparado... se trataba de sustituir un chip de memoria. Ahora sí que lo siento como si fuera mío... ¡Qué buena suerte ha tenido este C64 de caer en mis manos :mrgreen:!
(http://img74.imageshack.us/img74/7730/c64fixts8.th.jpg) (http://img74.imageshack.us/my.php?image=c64fixts8.jpg)
-
Me quedo boquiabierto :shock: , ¿y cómo has dado con la avería?
-
¿y cómo has dado con la avería?
Pues resulta que el fallo era que el ordenador indicaba menos memoria libre de la que en realidad de bería tener... esto me condujo a sospechar de la memoria RAM.
El problema es que el C64 tiene 8 chips de memoria RAM y soy un negado desoldando, de modo que necesitaba saber cuál o cuáles estaban mal.
Otro fallo del ordenador era que en algunas zonas de la pantalla donde debería haber un espacio en blanco aparecía una !. El espacio y la ! difieren sólo en un bit (concretamente en el bit0), entonces pregunté en el foro Lemon64 qué IC de la memoria era el responsable de ese bit, me dijeron que el U21, lo cambié y listo... así de fácil.
Los foros son una herramienta muy útil para los aficionados... ¿alguien lo duda?
-
Aquí les dejo el esquemático de la placa entrenadora para SID6581 por si lo quieren revisar.
(http://img253.imageshack.us/img253/7690/picsidplayervd7.th.jpg) (http://img253.imageshack.us/my.php?image=picsidplayervd7.jpg)
He elegido un pic18F4550 y le he metido 4 módulos de memoria EEPROM I2C para juntar medio megabyte. Me he quedado con ganas de meter memoria RAM, pero me ha parecido ya complicar demasiado las cosas.
Como amplificador del SID he utilizado el original del C64 buscando que suene lo más parecido posible.
Donde más dudas tengo es en el ICSP. Nunca lo he usado... si alguien me revisase esta parte se lo agradecería.
-
Tienes un problema en el circuito de reset. Si das al pulsador provocarás un cortocircuito entre 5V y GND.
Pon la resistencia justo debajo de los 5V, unida al pulsador por el otro extremo. En ese punto de unión también estaría el diodo hacia el pin MCLR.
De esta manera, cuando pulses reset, los 5V caerán en la resistencia sin que nadie se haga daño.
-
Gracias Nocturno... jod...r me paso el día dándote las gracias...
Me equivoqué al conectar el botón...
Creo que así también vale ¿no?
(http://img72.imageshack.us/img72/5333/picsidplayercx0.th.jpg) (http://img72.imageshack.us/my.php?image=picsidplayercx0.jpg)
Ahora, a ver quién el "guapo" que rutea este follón... :mrgreen:
Por cierto, ¿le noto algo raro a tu avatar... y a tu bandera?
-
Si, así eestá muy bien.
Si quieren, lo ruteo yo con el altium designer
¿vale?
-
Por mí encantado Leon... pero yo he hecho el esquemático con Proteus (ISIS), que tiene extensión DSN, y no tengo ni idea de si es compatible con ese programa.
Te adjunto el archivo por si quieres probarlo.
-
Parece que ahora sí está bien. Creo que Proteus también tiene autorouter, hace mucho que lo ví, algo así como Elektra, ¿no?
P.D.:
Mi avatar está cambiado, sí. Está como esta gente.
(http://www.cuatro.com/promociones/hinchas%20copia_14728.jpg)
-
No te preocupes. Voy a crear el esquemático en el altium y luego realizo el ruteo. Solo me vas a tener que dar un par de horas.
-
Leon, volver a dibujar el esquemático te va a dar mucho trabajo (además, no creo que el Altium traiga el SID... por lo menos el Proteus no lo traía y he tenido que hacerme el paquete).
Además no me corre ninguna prisa: este fin de semana lo voy a dedicar a otro proyecto y hasta el lunes no volveré sobre éste.
Si puedes hacer el ruteado estupendo, y si no, no te preocupes que yo tendré tiempo.
-
Por favor Juan, no es ninguna molestia. Además, no puedo permitir que hagas todo y yo estar recibiendo todo de arriba sin aportar nada.
Por el SID, es verdad, lo voy a tener que crear, pero solo me lleva un par de minutos, es fácil crearlo, gracias a los videotutoriales que están en la página de Nocturno (http://www.micropic.es)
Con respecto al esqueático, me viene muy bien para practicar unir componentes con BUS
Bueno, me alegra tener más tiempo (así mi señora no me mata :D :D ), de seguro estará para mañana o el sábado como mucho, porque tengo otras cosas pendientes.
-
Bueno, la cosa se encamina!!!
Veo que llegué tarde para el PCB....que pena!!! :D :D :D
Estoy un poco liado, pero prometo pasarme en un par de horas a ver que novedades tienen.
Saludos!
PD: Creo que Manolo esta fuera de si. Encima, la ultima vez que oi sobre la Eurocup, España le habia metido dos pepinazos a los Rusos...;)
-
Hola Leon, si tienes tiempo para hacer el PCB, por favor cambia los terminales de entrada y salida de audio por hembras de audio mini jack... así podemos conectar directamente unos auriculares
-
Muy bien pensado. Ya estoy empezando con la placa. :-)
-
Parece ser que SÍ es posible: Este señor (http://tripoint.org/kevtris/Projects/sid/sidman.html) ha desarrollado un reproductor SID basado en un PIC16F877, pero no aporta esquema ni códigos. Según sus notas, emula completamente el 6510 y otros chips...
(http://tripoint.org/kevtris/Projects/sid/images/TSIDman_Final1_Outside.jpg)
-
Bueno, he terminado la versión v1.0 de la placa.
(http://img47.imageshack.us/img47/3795/sid6581al7.th.jpg) (http://img47.imageshack.us/my.php?image=sid6581al7.jpg)
Es de doble fax. Las medidas son 10x10 cm. Para hacerla de una sola cara, la placa va hacer un poco más grande.
¿Qué quieren modificar? Digan que yo hago :-) :-)
-
Aqui les dejo el PDF con el esquemático y el PCB.
Aún no logré que en el PDF me ponga las caras por separadas. Ya veré como.
-
Perdón muchachos. Anoche terminé muy tarde para hacer el primer ruteado y estaba muy cansado. Recién salgo del trabajo, que estube trabajando toda la noche y mientras me bañaba para irme a descansar, me dí cuenta que no le hise el plano de tierra al PCB.
Alrededor del mediodía (argentina), subo el mismo PCB, pero con el plano de tierra en ambas caras.
-
¡Bravo Leon! Tiene una pinta estupenda.
Lo he descargado y estoy revisándolo. Personalmente lo prefiero sin plano de tierra porque mi pulso es malo y al soldar me salta el estaño al plano de tierra. Dentro de 6 horas te cuento el resultado de la revisión... y si todo está correcto el lunes lo plancho.
-
Hola Leon. Ya lo revisé y no echo nada en falta salvo la conexión a +5V de los pines 3 (A2) de las EEPROM C15 y C16.
Saludos.... está bien esto de trabajar en equipo :mrgreen:
-
Si, tienes razón. DE echo, el Altiúm me decía que faltaba una conección y no me di cuenta :mrgreen:
Estoy subiendo el PDF de nuevo, pero no logro hacer que me divida las dos caras. Ahora posteo un nuevo tema en el foro de Altium, para que me alluden.
Con respecto al plano de tierra, le puedo dejar una separación entre las pistas y los hollos de 1mm o 2mm.
Y si, a mi también me gusta trabajar en equipo :-/ Está muy bueno. Uno se siente más motivado para hacer las cosas :-/ :)
-
Para separar cada capa o agrupación de capas en páginas separadas, tienes que hacer Printouts separados en la opción Page setup -> advanced.
Si quieres, por ejemplo, una página con la TOP y otra con la BOTTOM, crea dos prinouts, y mete en el primero la Top Layer y en el segundo la Bottom Layer.
-
Muchas gracias Nocturno.
He recorrido el foro de Altium y no lo encontré, pero lo mas parecido que encontré, fue descargar el programa gratuito Primo PDF y con eso, hise cada capa. De ahora en más, lo haré como me dijiste. De todas maneras, el programa me viene muy bien.
Aquí les adjunto por separado las caras. Incluye, esqemático, Top y Botton layer y el Top Overlay. Ninguna de estas tres capas, están en formato espejo, por lo que hay que tener mucha precaución a la hora de pasarlo al PCB.
Me llevó toda la tarde para solucionar este problema, que no me queda más tiempo en rutearla en una cara. Esto lo voy hacer mañana.
-
Hola Leon. Está muy bien... y si se puede hacer a una cara mejor que mejor.
Al imprimirlo me salen unos textos muy pequeñitos en la zona derecha ¿se pueden quitar?
Por otro lado, algunos pads y las vías son demasiado finos (queda muy poco cobre) ¿podrían hacerse más gruesos?
-
Si, no hay ningún problema.
Yo utilizo esta medida, porque cunado lo imprimo, las pistas me quedan de 1mm de espesor, y en el altium, le indico que sea de 0.6mm de espesor :shock:
A lo que te refieres es a ¿las cotas?. Y de los Pad, tienes razón. En mi última placa, cuando lo taladré, prácticamente me quede sin cobre. Me olvidé de actulaizar esto. Gracias por aserme acordar.
-
Hola Leon:
Me refería a los textos que se ven en la siguiente figura, no a las cotas.
(http://img235.imageshack.us/img235/5729/sidpcbix6.th.jpg) (http://img235.imageshack.us/my.php?image=sidpcbix6.jpg)
Respecto a los PADS, quizás no son pequeños, pero creo que el agujero interior es demasiado grande y eso hace que apenas quede cobre en el anillo exterior, de modo que cualquier pequeño desvío con el taladro puede arruinar el PAD.
-
No me había dado cuenta. Son una indicaciones del mini jack. Ya se lo saqué.
http://rapidshare.de/files/39864457/M_dulo_prueba_SID6581.rar.html
Lamentablemente me quedó más pesado que 250Kb, por lo que lo tube que subir a rapidshare
-
Hola Leon, cuando voy a imprimir los PCBs del PDF me salen a un tamaño enorme (83x59 centímetros)
¿cómo hago para que se impriman a su tamaño real
-
Hola Juanfe!
¿Tienes el esquema electrico en algun formato que pueda abrir facilmente (PDF, JPG, GIF, etc)?
Me gustaria intentar rutearlo en casa.
Saludos!
-
Hola Aitopes, el esquema lo tienes en el PDF que ha dejado Leon aqui: http://rapidshare.de/files/39864457/M_dulo_prueba_SID6581.rar.html
y que es el mismo que hice yo y que te dejo aquí en formato jpeg:
(http://img149.imageshack.us/img149/5259/picsidplayerly2.th.jpg) (http://img149.imageshack.us/my.php?image=picsidplayerly2.jpg)
También te adjunto mi archivo en ISIS:
De todas formas, creo que con el ruteado de Leon nos va bien... y así no duplicamos trabajo.
-
Gracias!!!
Si, seguro que duplicar el trabajo no es una buena idea. Pero como con la plancha tengo algunas limitaciones (anchos de pistas, separacion entre pads, tamaño de la placa), me gusta la idea de tenerlo a mano por si quiero modificarle algo.
A todo esto...esta muy bueno el esquema.
Leon, has averiguado donde comprar el PIC18F4550? Yo lo busque hace unos meses, sin exito.
De todos modos, tengo que preguntarle a MarioGuillote, se que estuvo haciendo algo con el puerto USB, y quizas haya tenido que comprar este modelo.
Saludos!
-
Con respecto al PDF, eso pasó porque lo hise con el creador del PDF del Altium. Ahora lo hise con el Primo PDF que queda 1:1
Aquí les dejo el PDF con la placa ruteado en una sola cara. La top layer, están los puentes que hay que hacer con alambre.
Esta es la vista en 3D
(http://img179.imageshack.us/img179/4343/6581ky3.th.jpg) (http://img179.imageshack.us/my.php?image=6581ky3.jpg)
Tengo una duda de como está conectado el puente de diodo. En el esquemático lo hise bien, pero al pasar al PCB, me invertió la polaridad, por lo que lo hise manualmente. Como no tengo ningún rectificador a mano, no se si está bien.
-
Aquí les dejo el otro PDF pero esta vez con plano a tierra, para el que le guste más.
-
Leon, Aitopes, no se preocupen por los componentes... los estoy reuniendo, tanto el PIC como las memorias y, en cuanto los tenga, se los mando. ¿necesitan algo más? Lo más difícil va a ser encontrar las memorias, porque necesitamos 12. Leon, ¿podrías hacer una versión del pcb en la que las memorias usaran paquete SOIC? Es más fácil reunir memorias con distintos paquetes.
Aitopes, el ruteado de Leon no creo que te dé problemas con la plancha (las rutas son bastante anchas).
Leon, voy a planchar tu versión del ruteado a una cara, pero en una placa de dos caras, para no tener que hacer los puentes a mano.
No sé por qué sigue sin salirme exactamente a escala 1:1 cuando lo imprimo. Ahora me sale un poquitín más pequeño de lo que debiera.
Los puentes rectificadores que yo tengo son como el que te pongo en la figura... ¿podrías adaptar el PCB?
(http://img110.imageshack.us/img110/3661/sid02vl0.th.jpg) (http://img110.imageshack.us/my.php?image=sid02vl0.jpg)
Al imprimir, el agujero de los PADs me sale en gris claro en lugar de en blanco. ¿se puede cambiar esto?
¿Podrías reducir el agujero de los pads que te marco en esta imagen para que quede más cobre alrededor?
(http://img110.imageshack.us/img110/552/sic01tc5.th.jpg) (http://img110.imageshack.us/my.php?image=sic01tc5.jpg)
Saludos
-
Perdón por esos pad, me los olvidé. No les achico el agujero, son de 0.7 mm, lo que hago es darle mas pared. Tengo un pequeño problema con los pad, e intentado todo para que salga blanco y no lo he conseguido. Tengo que dirigirme al foro altium. (es un programa muy bueno, pero me está dando canas verdes con estos pequeños problemas)
Por el rectificador, no hay problemas. Lo puedo adaptar, es cuestión de minutos. Lo mismo con las memorias con encapsulado SOIC, ningún problema.
El problema es que recién hoy a la noche o mañana a la mañana voy a poder ponerme con el circuito. Me hise un tiempito ahora para ver las novedades, pero ya me estoy llendo. Y hasta la noche no me desocupo.
Que lástima lo de la escala, se ve que el Primo PDF no es tan exacto. Demasiado por ser gratuito. Lamentablemente, se me rompio la impresora, por lo que no lo puedo probar.
Juan, tu me has regalado 2 PIC 18f4455. Por lo que ví en el datasheet, no son muy distintos, uno se lo puedo dar a Ariel y adaptamos el programa para este PIC. En cuanto a las memorias, estamos complicados.
Ariel, igual que Juan, no creo que tengas problemas con el ruteado, yo lo hago con el método de la plancha y con rutas más chicas, y salen muy bien. A estas les dí 1mm de grosor.
-
Estuve revisando el esquemático del C64 y me han llamado la atención los condensadores que usan para el SID. En una placa me he encontrado los que se ven a la derecha de esta figura, que efectivamente parecen condensadores de poliester.
(http://img300.imageshack.us/img300/4724/sid03ap6.th.jpg) (http://img300.imageshack.us/my.php?image=sid03ap6.jpg)
Pero en otra placa me he encontrado esto. ¿son realmente condensadores?
(http://img300.imageshack.us/img300/7442/sid04nd3.th.jpg) (http://img300.imageshack.us/my.php?image=sid04nd3.jpg)
Otra cosa que me ha llamado la atención son los componentes negros marcados como FB (fíjense a la izquierda de la primera imagen), que los utilizan a la salida de audio, por ejemplo. ¿Qué serán, algún tipo de fusible?
-
Hola Leon... también he visto que el paquete de los conectores minijack de audio no coincide con los que he podido encontrar. El paquete que has utilizado coincide con el de una clavija de alimentación, pero no con el del minijack.
Te adjunto unas fotos por si te sirven de ayuda para localizar el paquete correcto.
A la izquierda está el minijack que me han vendido, y a la derecha la clavija de alimentación. Como ves, la separación entre los pines es mayor en el minijack.
(http://img117.imageshack.us/img117/2033/sid05kl9.th.jpg) (http://img117.imageshack.us/my.php?image=sid05kl9.jpg)
(http://img159.imageshack.us/img159/378/sid06ay2.th.jpg) (http://img159.imageshack.us/my.php?image=sid06ay2.jpg)
(http://img370.imageshack.us/img370/6302/sid07du2.th.jpg) (http://img370.imageshack.us/my.php?image=sid07du2.jpg)
-
Uops!
Yo voy a tomar los mios de una lectoras de CD...y son distintos a esos y a los que uso Leon... :D :D
Pero no problem, yo lo arreglo. :mrgreen:
-
Interesante componente el FB....
Estoy mirando en internet, y no veo nada que me saque de la duda. ¿Mediste si tienen continuidad?
Off topic: Otra direccion para anotar: Manuales, historia, etc. :http://www.commodore.ca/ y un texto con la descripcion de varios de los componentes usados y que funcion cumplen (no aparece el "famoso" FB): http://personalpages.tds.net/~rcarlsen/cbm/c64cdiag.txt
-
No medí nada... mañana lo hago.
En este esquemático del C64 en eagle http://www.baltissen.org/images/c64.png aparece el FB13 a la salida de audio del SID (a la derecha)
-
Yo tengo destripada la C16, por eso no coinciden algunas cosas. Mañana voy a ver si le meto mano a la 64. Seria interesante ver a donde estan conectados esos "cositos"...
Respecto a la oferta de enviarnos los componentes, que recien veo releyendo el hilo, no puedo mas que agradecertelo de corazon. Dejame ver primero si puedo comparlos en Argentina. Si no, con gusto los voy a aceptar :)
Saludos!
-
Juan, me sirve muy bien. Por suerte lo pusiste con una regla, así puedo ver las distancia de los pines :-/
Una consulta, porque quiero prevenir, antes que curar.
El encapsulado SOIC obivamente este componente, se pone sobre la cara BOTTOM LAYER. En mi caso, cuando yo paso de la hoja al cobre, esta, en forma automática, pasa en formato espejo. O sea, yo lo imprimo al derecho, pero solo se pasa en espejo para así poner los componentes en la cara TOP LAYER. Ahora viene el lio.
Si yo, cuando ruteo la placa con el encapsulado SOIC, en el momento de crearlo y solo a este encansulado, si lo pongo en espejo, al momento de transferir este encapsulado se pasa en espejo, pero quedará al derecho :shock:
Haber, si yo solo modifico el encapsulado, le pongo el SOIC, ruteo como si se tratase de un encapsulado DIP, cuando se transfiere a la placa, se transferirá en espejo junto con todo el ruteo, pero al pasarce a la placa, los pines no me coincidirán (al pasarce en espejo, el pin 1 del componente, va a coincidir con la pata 4, la pata 2 con el 3, y así con los demás pines)
Entónces, cuando saco el encapsulado DIP, lo cambio por el SOIC, a este lo tengo que poner en espejo (Pin 1 por Pin 4, Pin 3 por Pin 2, Pin 8 por Pin 5, Pin 7 por Pin 6) Dejo al ruteo como está, y cuando se transfiere a la placa, al pasarce en espejo, ¿me coincidiran los PINES?
¿me explico?
Ahora publico el mismo PDF, pero actualizando los hollos chicos. Cuando se me aclare esta duda, hago el nuevo PDF con el encapsulado SOIC.
-
Bueno, primer archivo modificado.
-
Este con plano a tierra. Tube que ponerlo en dos mensajes, porque en uno no entraba.
-
Hola Leon. Creo que el PCB está de lujo... voy a revisarlo y si no encuentro nada raro lo plancho ya, ya, ya...
Respecto a lo del componente SOIC, no sé cómo será en Altium, pero en Proteus, yo simplemente cambio el paquete a SOIC, indico a proteus que ese componente va en la Bottom Layer y todo sale correctamente al imprimirlo.
Sigo indagando en el tema de emular el 6510 dentro del PIC. Como investigar el funcionamiento interno del 6510 me parece complicado, sobre todo porque parece haber ciertos op codes no documentados, se me ha ocurrido intentar adaptar uno de los emuladores ya existentes. Lo ideal sería utilizar sidplay2, que parece ser el mejor de todos, pero el código es un poquito raro y habría que trabajar en Linux, pues no he sido capaz de compilar la versión de Windows. La otra alternativa es TinySID (http://www.rsinsch.de/?id=7298b&s=k2&lang=en) que utiliza rutinas de emulación desarrolladas por Tammo Hinrichs, que es un gurú de la música SID. Me he puesto en contacto con el autor de este programa para que me facilite el código fuente para Windows pero me ha contestado que lo ha perdido. No obstante me ofrece otra versión que le aceptaré muy gustosamente. Aquí les dejo el mensaje:
Hi jfmateos,
this looks like a very interesting idea ;)
TinySID is open source since it I made a rockbox port of it (http://www.rockbox.org). You can have a look at the linux version at http://www.rsinsch.de/?id=download&s=k2&action=showall&category=77021f9669&lang=en.
I would also give you the tinysid windows source code but I have to admit that I totally screwed the source up.
If you are interested I can offer you a windows command line version of the player written in c++ that is easy to understand. If you want to you can have the command line version of the hardsid device I am currently experimenting with.
The basic concept behind playing sids on real hardware is not difficult. In my current hardsid tests I am using the following:
cpuJSR(initAddress, subSongNumber);
While (1)
{
cpuJSR(playAddress, 0);
waitTime(memory[0xdc04] | (memory[0xdc05]<<8);
}
Sample playback requires some more attention, but the basic idea is always the same.
If you need help for your project just let me know. I am also interested in such a portable player myself ;)
Regards
Rainer
-
Muy buena la respuesta de este señor!
Todavia me sigo sorprendiendo de lo accesible que pueden ser. Uno tiende a considerar que un genio de estos no contestaria ni el telefono, pero por lo visto (y afortunadamente) no es asi.
Va a venir muy bien el fuente de ese soft. Mas si funciona desde la linea de comandos, ya que nos ahorramos de separar toda la parte referida a la gestion de la interfaz, etc.
Respecto del PCB, el de Leon esta.....impresionante! (felicitaciones, Leon!!!)
Yo estoy rapiñando componentes. ¿El conector USB debe ser macho o hembra?
Por las dudas, ya he dibujado el esquema con el PCBWizard por si necesito modificar alguna cosilla en el PCB.
Respecto de las memorias SMD: Yo no tengo en el soft que uso componentes SMD, pero como puedo colocar pads o pistas a mano (mas del 50% de cada PCB lo hago asi), tranquilamente puedo dibujar pistas del ancho de los pines SMD (0.025 pugadas), separadas 0.05 pulgadas una de otras (enfrentadas 4 y 4) y sobre ella soldaria las memorias. No se si se entiende, pero puede ser una solucion si las que consigues tienen esa capsula.
Este es el esquema que he dibujado (o ROBADO, mejor dicho... :D ). Aun no he probado de ahcer el PCB, por que espero usar el de Leon.
Saludos!
Esto avanza!!!!!!
-
Me alegro mucho que les alla gustado la placa, tenía miedo que el ruteado sea cualquier cosa.
Ahora pruebo lo del encaplsulado SOIC, si me quedan dúdas, haré dos versiones más, una con el encapsulado al derecho (como si se tratase de un encapsulado DIP) y otra versión con el encapsulado en espejo.
Confieso que yo también me copié casi a raja tabla el circuito de Juan. La razón por la que lo subo en cada archivo, es porque la numeración de los componentes, no concuerda con el circuito original de Juan, y se va hacer mucho lío tener que ver a cual corresponde cada componente.
Ariel, me encanta como ese programa dibuja el esquemático, o sea, me gusta mucho el dibujo de cada componente. Es muy atractivo.
Aaaaa, encontré un error en mi esquemático, los dos condensadores que tienen los pontenciómetros, son de 1.8nF, yo lo puse de 1nF. Ahora lo corrigo. Lo mensiono por si hay alguien que se nos une en forma callada
-
Hola Leon!
Yo respete el nombre de los componentes originales para no tener problemas a la hora de intercambiar opiniones mas adelante.
Los programas que uso (son dos, en realidad) son el LiveWire para hacer el esquema y simularlos (muuuuy rudimentaria simulacion) y el PCBWizard para rutear los PCB (tambien tiene el modulo de dibujo de esquemas del LiveWire incluido). Ambos son de la misma empresa y trabajan codo a codo. :mrgreen:
Son bastante economicos, si los quieres comprar, me avisas antes.
-
La semana que viene espero recibir 8 memorias DIP y 4 memorias SOIC. Los 18F ya los tengo. ¿Necesitan algún otro elemento?
* Puente rectificador?
* Conector USB hembra?
* Conectores mini-jack?
...
-
Hola juanfe!
Por mi parte, con el micro y las memorias seria suficiente. El resto de las cosas las tengo en casa. Por lo que he averiguado, a las memorias y al micro no los tienen en los dos locales a los que escribi, hoy voy a llamar a Cika. Asi que espera, es posible que te ahorres el envio!
Leon, has buscado en algun proveedor?
Saludos!
-
En realidad me he fijado en una tienda, que es a la que voy siempre w w w.electronicaliniers.com.ar No consigo el PIC, las memorias y el conector USB. Lo demás, todo lo consigo. Recién entré a la página de Cika, y no tienen el pic, las memorias y el conector hembra USB :5] ¿Porqué estaremos tan atrasados? :x
Juan si necesitaría eso.
-
Quizas viviendo en el centro de Bs. As. sea mas facil. De todos modos, hay muchos componentes que solo los traen por pedido, a precios astronomicos por que te cobran el flete, y demoran hasta un mes.
El conector USB podes sacarlo de algun componente informatico en desuso....un mother viejo, una placa que agrega puertos USB quemada, un hub USB roto, etc.
Entonces, vamos a "molestarlo" a Juanfe. Eso si, que haga solo un envio con todo y lo repartimos aqui.
Juanfe, pasame un mail privado con tu direccion fisica completa, a arielpalazzesi@gmail.com
PD: me surgieron unas cosas para resolver, asi que hasta mañana no voy a avanzar demasiado. Ufa!!!!!!
Saludos!
-
Pues ya que vamos a hacer un envío a Argentina, ¿les mando también bobinas para la fuente de alimentación del reloj Nixie?
Voy a hacer el pedido mañana.
-
No seria mala idea....a ver si todavia por algun motivo la que tengo del scanner no funciona, y me quedo parado con eso :(
-
El problema es que no tengo de dónde sacar un USB.
Ahora que me acuerdo, tengo una casa de computación cerca. Talvez ahí tengan algo para tirar que tenga un USB hembra.
Con respecto a las bobinas para los nixie, las bobinas que traen la mother, ¿sirven?
-
Listo la version 3. Las memorias con encapsulado SOIC.
Debo decir, que cuando le indiqué que hiba en la cara de bottom layer, automáticamente lo puso en espejo.
-
Hola Leon. Imprimiéndolo al 102% queda casi bien, pero al 103% ya sale demasiado grande. ¿No te ha comentado nadie en el foro de Altium cuál puede ser la razón de esta merma?
¿No tiene el Altium Designer otra opción de exportación que no sea PDF; quizás esté ahí el problema
-
Este PDF no está importado con el creador PDF del altium. Está echo con el PRIMO PDF. Este instala una impresora virtual y cuando le das a imprimir un documento, te crea el PDF.
Elproblema está en el PRIMO PDF. Estoy tratando de encontrarle alguna solución. Es una pena que me quedé sin impresora. :(
-
La solución a lo que os está pasando es una casilla en el cuadro de diálogo de impresión.
Si te fijas, León, verás que hay una opción llamada "Rotar automáticamente y centrar" debajo de un desplegable llamado "Escalado de página".
Asegúrate que esa casilla esté desmarcada, y el desplegable esté con la opción "Ninguno".
Verás como entonces sale perfecto.
-
Cinseramente no lo encuentro. Fui a todas las opciones y no encuentro nada de nada.
(http://img116.imageshack.us/img116/4106/altiumlj1.th.jpg) (http://img116.imageshack.us/my.php?image=altiumlj1.jpg)
¿Es esta la ventana a la que te refieres?
Me olvidé de mencionar, que dentro de las propiedades que dá en la ventana de impresión, la escala está en 100%, pero no habla nada de rotación, centrar.
-
No me refiero a esa ventana, sino a la que te sale cuando le das a Imprimir el PDF.
De todas formas, ante la duda, pásame el fichero PcbDoc y lo intento yo, por si se trata de otra cosa.
-
OK. En un par de horas te lo envío. Ahora no estoy en casa.
-
Aquí te paso el documento PCB.
-
Adjunto el PDF. Son 3 páginas:
- cara TOP + regla de referencia para comprobar escalas
- cara BOTTOM
- cara Top Overlay, para usarla como referencia cuando se posicionen componentes
-
Pues al imprimir la versión de Nocturno también me sale un poco más pequeño de lo normal, igual que la de Leon. He medido directamente sobre el PDF como se ve en la figura y en lugar de medir 19x2.54=48.26 mm mide 47.56 mm como podéis ver.
(http://img365.imageshack.us/img365/1372/sid08qv6.th.jpg) (http://img365.imageshack.us/my.php?image=sid08qv6.jpg)
¿A ti te sale bien al imprimir, Nocturno?
-
A mí me sale perfecto, Juanfe.
Insisto, estoy convencido que al imprimir el PDF no estáis haciendo lo que os dije antes.
Os dejo una captura de pantalla de dónde tenéis que tocar:
(http://img118.imageshack.us/img118/6372/opcionesimpresionyo7.jpg)
-
Aquí muestro cómo tengo configurado Acrobat (he probado con las versiones 6 y 8 ):
(http://img92.imageshack.us/img92/8448/sid10ef0.th.jpg) (http://img92.imageshack.us/my.php?image=sid10ef0.jpg)
Y aquí muestro el ligero desplazamiento que hay en los PADs; observen cómo el pin de la derecha pisa el pad.
(http://img371.imageshack.us/img371/6185/sid11jj9.th.jpg) (http://img371.imageshack.us/my.php?image=sid11jj9.jpg)
No es un fallo de arrastre de mi impresora porque ocurre exactamente lo mismo al girar el pdf, e incluso midiendo directamente sobre el PDF como mostré en la imagen de mi post anterior.
¿igual es que el normal ese pequeño desplazamiento? Estas cosas son desesperantes.
¿No puede el altium generar un TIFF?
-
Te lo mando en TIF, aunque no he sido capaz de sacarlo en positivo; sale en negativo.
Servirá al menos para que compruebes lo de la escala.
Lo que te pasa es tan raro...
-
Pues tampoco. Con el TIFF sale exactamente el mismo corrimiento...
He probado a imprimir con una impresora de inyección de tinta y también aparece el mismo problema.
Lo único que se me ocurre es que con el calor que hace se hayan dilatado la regla y el PIC (y se me haya encogido el cerebro :mrgreen:)... pero esto no explica por qué midiendo directamente sobre el PDF en el ordenador antes de imprimirlo no sale el valor que debería salir.
Esto no pasa ni en "Cuarto milenio" (es un programa de TV sobre efectos paranormales que no he visto nunca...)
Bueno chicos, no quiero fastidiarles más... gracias Nocturno por todo.
-
Hola Juanfe!
Me paso algo parecido la primera vez que fui con un PDF a una imprenta para que me hagan un monton de PCBs por serigrafia: en la impresora del lugar salian LIGERAMENTE mas grande. Quizas sea algun problema de la marca de la impresora o del driver o algo de eso. Lo solucionamos imprimiendo al 99% en lugar de al 100%.....por que el defecto se daba en las dos direcciones (ancho y alto).
No puedes probar eso?
Saludos!
-
Ultimo momento:
Acabo de imprimir el PDF de Manolo, y me pasa EXACTAMENTE lo mismo que a Juanfe. La imagen, por lo visto, viene mal "de fabrica" :)
Espero que este dato sirva para solucionar el problema. :mrgreen:
-
Hola Aitopes... Con el PDF podría tener alguna duda de que fuera un fallo de mi equipo... pero el formato TIFF lo conozco bastante bien y si sale mal impreso es porque está mal el origen. Lo que me mosquea es que a Nocturno le salga bien...
Quizás sea alguna "puñeta" del Altium, y como yo no lo tengo...
-
Hola Aitopes... Con el PDF podría tener alguna duda de que fuera un fallo de mi equipo... pero el formato TIFF lo conozco bastante bien y si sale mal impreso es porque está mal el origen. Lo que me mosquea es que a Nocturno le salga bien...
Quizás sea alguna "puñeta" del Altium, y como yo no lo tengo...
Es facil! Manolo tiene una impresora defectuosa! :) :) :) :) :) :)
No, evidentemente no es eso. La mia es una Xerox...y la tuya?
PD: Yo, que siempre elijo el camino dificil, estoy ruteando el esquema pero en DOS placas: una con el pic, EEPROMs, fuente, etc y otra con el SID, amplificador, potx, poty, etc. Ambas se enlazan con tres cables planos de un par de cm de longitud. Uno de datos (8 bits), otro de direcciones (5) y otro de control (4).
Estoy trabajando en ello, y pretendo que tengan el mismo tamaño y se puedan montar una sobre la otra.
En caso de que todo falle, cuando este lista, puedes probar con estas :)
-
:5] :5] :5] :5] :5] :5] :5] :5] No puedo creerlo.
Lo que me decía Nocturno, en la ventana de las opciones de imprimir, a mi, no me aparecen.
Con respecto al Altium, si yo lo imprimo desde el Altium, la escala me sale muy bien. Ni mas chico, ni más grande. Por eso cree los PDF con una impresora virtual que genera el Primo PDF, o sea, que es como si lo estaría imprimiendo directamente, con la salvedad, que me genera el archivo PDF. Es aquí dónde está el problema. Conseguí una impresora en el trabajo que trabaja con USB y lo imprimí desde el PDF y me sale más chico. Pero desde el Altium no. A Nocturno, le sale bien, porque seguro lo imprimió desde el Altium. Ahora, si el creó un PDF desde el archivo que le mandé y le sale al 100%, bueno, quedaría que nos haga el favor de subir ese archivo. Pero si lo imprimió desde los PDF que yo cree, estoy totalmente desconcertado.
Mi teoría es
Al momento de crear el PDF con el Primo PDF, este, no lo hace en el 100%. Debe ocurrir en la compresión.
Solución: Utilizar otro programa para generar el ruteado para la PCB (aprovecharíamos el que está haciendo Ariel) y que sea capaz de pasarlo a PDF o a JPG en una escala del 100%.
Cambio de generador de PDF para ver si consigo uno mejor (ya estoy en eso)
-
Bueno, bueno, señores, ante la duda he vuelto a comprobar sobre el papel que imprimí antes.
Si pongo la regla sobre la marca de 140.84mm que he puesto en la primera hoja sale perfecto.
Pero en la prueba del chip sobre sus pines también me sale mal a mi.
Conclusión: el encapsulado que ha usado Leon en Altium está mal dimensionado. Acabo de comprobarlo en Altium y entre sus pines, en lugar de haber 0.1", hay 0.08426"
La pregunta ahora es, ¿cómo has hecho eso, León?
-
Joder!!!!!!!!!
Si fuese 28 de diciembre, hubiese pensado que era una broma!! ja ja!!!
Bueno, conociendo el problema, la solucion está mucho mas cerca, seguramente. :-)
-
¡joder! :x
El encapsulado DIP lo hise con el wizard del Altium. Lo único que le cambié fue el ancho del componente porque no era el correcto. Yo también debería haber echo la prueba del Chip. Medí con la regla el ancho de PCB y el largo y era igual al que me daba el altium
Bueno, lo bueno que ya sabemos que el error era mío y se solucina muy fácil.
En un ratito vengo.
-
Bien, creo que tengo el PCB de la placa que lleva el PIC, la alimentacion y las memorias. Los nombres de los componentes son los del esquema de Juanfe.
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=21792.0;attach=7328)
Antes de pasar al planchado, voy a diseñar la otra (la del SID), y asegurarme que todo esté bien. Me falta la huella del conector USB, entre otras cosas.
Por supuesto, los archivos y PDF con el diseño del impreso están a disposicion del que los necesite. ;) (lease, "aquellos masoquistas que quieran complicar el proyecto).
-
Me parece buena idea la de aitopes de dividir la placa... así tienes una placa de entrenamiento universal para el 18F y, por otro lado, la placa del SID... (me recuerda al sistema modular de RedPIC).
-
EXACTO!
Esa es la idea.
El SID "solo" tambien permite usarlo en otros proyectos.
Afortunadamente, la segunda placa parece mucho mas sencilla de rutear que la primera. En el transcurso del dia voy a terminanarla, y pasar los archivos para que le den un vistazo.
Me falta la huella del USB, y poco mas. Diria que estoy al 80%. Solo tengo que "robarle" un par de horas al "curro" :)
Saludos.
-
Y la repu...a del servidor :x . Acabo de perder el mensaje que había escrito.
Decía que, no puedo tener más mala suerte, porque supero los límites de la naturaleza. Anoche estaba modificando el PCB, cuando se me colgó la PC. No respondía ni con el ctrl+alt+supr Tube que apagar la PC. Cuando arranco el altium y habro e documento PCB, este me da un error y me habre el documento totalmente en blanco :8} Me fui a dormir recontra re caliente :5] .
Ahora me conecté para descargar el documento PCB que subí para manolo. Si con esto no lo hago andar, todo este tiempo tirado a la basura.
Por cierto Ariel, muy buena idea haberlo dividido (¿porqué no se me ocurrió eso a mi?) Hubiera sido más fácil rutearlo, y como dicen, puede servir para entrenamiento.
-
Mira en la carpeta de tu proyecto, encontrarás una carpeta llamada "History". Dentro están todas las versiones de tu PCB y puedes recuperar cualquier paso atrás.
Graba un fichero comprimido ZIP por cada vez que diste a "Guardar".
-
Bueno...ha llegado el momento: Al percloruro con ellas!!!!!!!
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=21792.0;attach=7335)
-
Están muy "chulas" aitopes... ya tengo ganas de darle un empujón a este proyecto.
Aquí les dejo la respuesta de Rainer Sinsch y adjunto encontrarán el código fuente:
Hi jfmateos,
sorry fort he late reply. It was a tough weak ;)
Here you go with the source code for a hardsid usb interface.
The routines should be self explanatory.
HardSID.h/cpp : Interface routines for the USB HardSID Device
SidEmu.h/cpp: Emulation of the c64 and sid
SidPlayer.h/cpp: Main player routine (nothing special)
Regards
Rainer
-
Buenisimo Juanfe!
Yo estoy que me salgo de mi por meter mano al codigo fuente del proyecto.
Hoy espero hacerme tiempo de montar las placas.
Te dejo un par de fotos mas, "quemadas" y agujereadas, y de como pienso montar una sobre otra. La de arriba es la del PIC.
Aquellos que quieran el archivo de los PCB, me manda un mail. Para el lunes prometo darle forma y publicarlo aqui.
(http://www.ucontrol.com.ar/fotos/S6000034.JPG)
(http://www.ucontrol.com.ar/fotos/S6000035.JPG)
(http://www.ucontrol.com.ar/fotos/S6000036.JPG)
-
Comence a soldar los componentes. Pero...
<MODO ENOJADO>Acabo de descubrir que los 20 zocalos de 20 pines que pedi junto a otros componentes la semana pasada son en realidad...de 32!!!!!!!!!!!!!!!!! :5]</MODO ENOJADO>
Estoy intentando rescatar uno de un motherboard viejo. :?
-
Ánimo Aitopes, yo creo que recibiré los pics y las memorias a principio de esta semana y os los enviaré por correo urgente...
-
Hola Juanfe!
No hay TANTO apuro :)
PD: Saque el put@ zocalo....enterito, perfecto. Con el metodo !Aitopes! (R). (caliento el PCB sobre la hornalla de la cocina....cuando veo que se funde el estaño, lo doy vuelta y golpeo suavemente sobre la mesada. Salen perfectos).
Peeeeeerooo..CONTE MAL!! Es de 42 pines. El primero que veo en mi vida. Obviamente, le "podé" dos pines de un extremo, y lo usaré lo mismo :)
-
Bueno, ya logré hacer andar el archivo. También actualizé los dos encapsulados DIP, el del PIC y el del SID, las de las memorias están bien.
Esta noche, voy a imprimirlo para verificar que esté todo bien.
V2
http://www.mediafire.com/?1vbmnmutezc
v2 con plano a tierra
http://www.mediafire.com/?zi0ztnxgvdm
v3
http://www.mediafire.com/?nnfnyfdoji9
v3 con plano a tierra
http://www.mediafire.com/?jbd2mtnrtyz
Listo actualizada las dos versiones.
-
Que lindo que te quedó Ariel. Una pregunta:
¿Cómo se llama el separador de las 2 placas? Porque las quiero comprar y no tengo ni idea como pedirlos
-
"Separadores"? :)
Yo los vi en el mostrador de Electrocomponentes, en Parana 180 aprox, y me traje 12. Son relativamente caros, $1.8 c/u, hace unos 6 meses.
son muy utiles! Tengo 4 puestos en el GTP-USB+ para montar el zocalo ZIF sobre el programador.
-
Bueno amigos, he montado todo. (O casi: no he tomado ninguna desicion sobre el conector USB, asi que no he puesto aun el cablecito final).
El resultado es el "Frankenstein" de la foto: presets de videograbadoras, jacks stereo de reproductores de CD, pulsadores de VCR, condensadores de 1 uF y de 10 uF de impresoras Epson, cables planos de conectores IDE y LEDs de algun panel de VCR (si la memoria no me falla). Ahhh, y un zocalo de un motherboard :)
(http://www.ucontrol.com.ar/fotos/S6000045.JPG)
(http://www.ucontrol.com.ar/fotos/S6000047.JPG)
(http://www.ucontrol.com.ar/fotos/S6000048.JPG)
(http://www.ucontrol.com.ar/fotos/S6000049.JPG)
-
"Separadores"? :)
:D :D
No importa, veré como conseguir algunos parecidos.
Hermosa la placa. Espero que Juan te pueda mandar las memorias en encapsulado DIP. En cuanto monte la placa, subo la foto.
¡¡¡Aaaa!!! me olvidaba. Para el envío de los componentes, será recomendable que Juan me los envíe a mi, ya que estoy a 25km de la aduana y lo puedo retirar personalmente. Luego se la envío a Ariel.
-
Preciosa Aitopes... respecto a las memorias, dispondremos de 2 juegos en DIP y uno en SOIC. Está claro que aitopes necesita las DIP... Leon y yo tendremos que repartirnos el otro juego de DIP y la SOIC.
-
Gracias Juanfe!
Yo no tengo problemas en hacer 4 pequeños PCBs a modo de "adaptadores" para las memorias, asi que no se compliquen por mi!!! :)
-
No te preocupes Ariel. Juan, como tu te has tomado el trabajo de comprar las memorias, mándame las que tu quieras. Ya imprimí las dos versiones (con DIP y SOIC). Una vez que me confirmes, armo el PCB.
Para hacerte sincero, me dá lo mismo cualquiera de los 2 encapsulados.
¡Ah!, para el que quiera armar mi placa, los taladros de los CI, están bien. Deberían estar muy bien, pero no. No se si fué la impresora o que, pero desde el primer taladro hasta el último, me robo 1 mm. En vez de tener 50mm, tiene 49mm. En el altium, lo revisé y todos están bien.
-
Leon, no entiendo a qué taladros te refieres con esto:
¡Ah!, para el que quiera armar mi placa, los taladros de los CI, están bien. Deberían estar muy bien, pero no. No se si fué la impresora o que, pero desde el primer taladro hasta el último, me robo 1 mm. En vez de tener 50mm, tiene 49mm. En el altium, lo revisé y todos están bien.
Leon, si todo está bien (que a mí me parece que sí), mañana lo plancho.
Os mandaré a vosotros las memorias DIP y me quedaré yo con las SOIC.
Esta mañana he estado haciendo de canguro con mi hijo y he aprovechado unos instantes para probar en el C64 un juego en cartucho que compré hace unos días... en cuanto ha oido la musiquita se ha quedado pegado al televisor. La verdad es que el C64 suena de lujo.
(http://img295.imageshack.us/img295/525/c64bt4.th.jpg) (http://img295.imageshack.us/my.php?image=c64bt4.jpg)
-
Esta mañana he estado haciendo de canguro con mi hijo y he aprovechado unos instantes para probar en el C64 un juego en cartucho que compré hace unos días... en cuanto ha oido la musiquita se ha quedado pegado al televisor. La verdad es que el C64 suena de lujo.
siiiii!!! La musica del PacMan fue una de las primeras que oí en el C64, allá por fines de los ochenta, principio de los noventa. Recuerdo que me sorprendio por que sonaba identica a la de las recreativas....Creo que sera uno de los primeros archivos a meter en el aparato que estamos armando.
Tengo ganas de ver si el patillaje de un 16f877A que tengo a mano coincide con la placa que arme...Si coincide, me gustaria aunque sea poder hacerle hacer "Tuuuut" al SID.
Anoche lei el capitulo 13 del manual de la C16, el que se dedica al sonido, y trae los programitas (en basic) para hacer sirenas de policia, latidos de corazon, ruidos de motores....todo con muy pocas instrucciones (4 o 5)....son simplemente envios de valores a los registros del SID. :-)
Eso se puede hacer "facilemente". Asi que veré como ando de tiempo esta semana. :)
-
Perdón Juan, no se en que estaba pensando a la hora de escribir :oops: , me refería a los agujeros de los pines del Circuito Integrado.
No lo planches aún Juan, porque me quedé impaciente y estube revisando cual fue el error, si la impresora, el Primo PDF, el altium o yo. El error fue mío, por despistado, volví a subir el archivo sin actualizar las nuevas ubicaciones de los ollos :oops: cuando fuí a las casas de mis padres, descargue estos archiivos y los imprimí. Hise esto para no cometer el error de imprimir desde el altium e imprimir los mismo archivos que compartía con ustedes. Ahora me tengo que ir a ingles. Estoy volviendo a las 17 hs, en esa hora, subo los archivos correctos.
-
Listo. Ya actualizé las dos versiones en el post que subí las direcciones. De todas maneras, pongo aquí también las direcciones.
V2
http://www.mediafire.com/?1vbmnmutezc
v2 con plano a tierra
http://www.mediafire.com/?zi0ztnxgvdm
v3
http://www.mediafire.com/?nnfnyfdoji9
v3 con plano a tierra
http://www.mediafire.com/?jbd2mtnrtyz
Subo también una imágenes (muy malas ya que fue sacado con un celular) para intentar mostrar que todos los pines coinciden.
El SID (de Ariel)
(http://img519.imageshack.us/img519/2369/sidlh5.th.jpg) (http://img519.imageshack.us/my.php?image=sidlh5.jpg)
El PIC
(http://img139.imageshack.us/img139/5818/picop5.th.jpg) (http://img139.imageshack.us/my.php?image=picop5.jpg)
Ariel, cuando Juan me mande tu componentes, te envío lo que te prometí.
-
Perfecto!! :)
-
Hola amigos!
como se viene la hora de empezar a programar, les pongo unos links que comenzaré a mirar esta misma noche:
CC65, el compilador C y ensamblador: http://www.cc65.org/
La "casa" del 6502: http://www.6502.org/
Documento experimental sobre instrucciones no documentadas: http://www.neshq.com/6502program/6502-N ... pcodes.htm
Plugin para editar ensamblador de 6502 en Eclipse: http://home.chello.no/~gstraume/c64/cpu6502_0.5.0.zip
-
Alguien tiene alguno de estos libros?
o 6502 Assembly Language Subroutines, Leventhal and Saville
(Osborne/McGraw-Hill)
o 6502 Software Design, Scanlon (Howard W. Sams & Co.)
o 6502 Assembly Language Programming, Leventhal (Osborne/McGraw-Hill)
o Commodore 64 Programmer's Reference Guide (Commodore/Howard W. Sams
& Co.)
o Programming in 6502, Rodnay Zaks (Sybex)
Estoy hojeando est tutorial de assembler del 6502: http://project64.c64.org/misc/assembler.txt
-
http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/
http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/front_cover.html
-
Hola Juanfe!
Luego de leer un poco sobre el 6502, veo que no es TAAAN complicado. (es solo TAAN complicado...una "A" menos :) ).
Yo pensaba....(y eso puede significar que el hard que construimos tenga algun problema, o no, veamos): podriamos tomar 64Kb de memoria externa, y suponer que es la RAM/ROM del C64 (la parte correspondiente a la ROM puede que debamos "metarle" en nuestra memoria, por si el soft emulado hace lecturas de esa zona).
Luego, el programa del PIC tomaria una a una las instrucciones del programa del 6502, y haria lo que estas indican. No son demasiadas.
Supongamos que tenemos una variable (en el PIC) llamada "Program_counter", otra "AcumuladorA", etc.
Si encontramos "JMP $5545" simplemente ponemos "Program_counter" apuntando a esa dir, y seguimos revisando el programa original desde alli.
Si encontramos "STA $FE", hacemos "AcumuladorA = FE", incrementamos en 1 el "Program_counter", y pasamos a la siguiente.
Etc.
Emular de esa manera seria bastante sencillo.
Y cuando detectamos instrucciones de escritura en la direccion del mapa de memoria del C64 que correspondan al SID, enviamos los comandos al chip y listo....
¿Que te parece?
La duda sobre el hard es si una EEPROM puede soportar ese ritmo de trabajo, o si necesitamos en su lugar una RAM.
Saludos!
-
Hola Aitopes... mi enfoque coincide al 100% con el tuyo. El primer intento será utilizar 64 K de EEPROM externa a modo de RAM. Las EEPROM I2C de nuestro proyecto son las más rápidas que existen, pero aún así no sé si será suficiente.
Si no lo fuera, habría que utilizar RAM, pero la RAM paralelo actual es bastante (muy) cara. En este caso, y como un guiño al espíritu del C64, yo optaría por usar su misma memoria: 8 chips 4164, que no son difíciles de conseguir...
De todas formas, yo no me acuerdo del juego de instrucciones completo del 6502 (¿has encontrado alguna referencia básica?), pero mi enfoque sería traducir directamente al PIC el código del archivo sidemu.ccp (el meollo está en el método CSIDEmu::cpuParse) que me mandó Rainer (y que adjunté en un post anterior), pues no se trata sólo de emular el juego de instrucciones del 6502, sino también el funcionamiento de otros chips que intervienen en el manejo del SID a través de la generación de interrupciones externas.
-
Hola!
Buenisimo, eso significa que estamos en el buen camino....o terriblemente equivocados, pero al menos 100% de acuerdo :D :D :D (no hagas caso, se que vamos bien!)
Respecto de la RAM/EEPROM, creo que van a estar a la altura. Lo que no tengo la mas palida idea por ahora es de, por ejemplo, cuantas veces se escribe o lee en ellas durante la ejecucion de los programas.
Supongamos que el programa que toca la musica resuelva las demoras mediante un bucle que se repita algunos miles de veces (a la frecuencia de trabajo del 6502, eso no serian mas que unas decimas de segundo). Si una EEPROM soporta (digamos) 200.000 ciclos de lectura/escritura, podriamos acabar con su salud en poco tiempo. ¿Entiendes el pundo de vista?
Respecto a los chips de RAM, te contesto en unos minutos. Tengo que revolver un poco entre mis cacharros.
El repertorio del 6502 esta en el libro que me pasaste recien. Es pequeño. Pero ahi me enteré que en la ROM del C64 hay un monton de funciones que se llaman todo el tiempo (leer el teclado, borrar RAM, etc) que tambien deberiamos emular.
Ahora veo lo de las RAM....dame un momento.
-
RAMS:
Tengo 32 chips de RAM TMS4256 de 12 ns de acceso, (http://pdf1.alldatasheet.com/datasheet-pdf/view/29078/TI/TMS4256.html) de una placa de video Trident 8900. Pero dudo nos sirvan por ser "dinamicas". Si no me equivoco, eso significa que hay que refrescarlas todo el tiempo, y me cansa de solo pensarlo :)
Creo que necesitamos del tipo "estatico".
De esas tengo varias en la mano, y muchas mas en equipos para destripar (mi garage parece una sucursal de un basurero, pero me provee de estas cosas :) )
-CXK5864CM, (http://www.datasheetcatalog.com/datasheets_pdf/C/X/K/5/CXK5864B.shtml)
8bits x 8192 (es pequeña....creo) (Pero tengo al menos 2 identicas)
- M5M5256CFP-12VLL, 262144-BIT (32768-WORD BY 8-BIT) CMOS STATIC RAM (http://www.datasheetcatalog.com/datasheets_pdf/M/5/M/5/M5M5256CFP-12VLL.shtml) (cuatro veces mas grande....pero aun menor a los 38Kb de RAM del C64. Si encontrase otra mas....)
- W24257 32K X 8 High Speed CMOS Static RAM (http://www.datasheetcatalog.com/datasheets_pdf/W/2/4/2/W24257.shtml)
Y algunas mas, pero veo que tienen en el nombre "xxx256", por lo que debem ser de 256kb, o sea, 32KB.
Si este es el tipo de RAM que necesitamos, posiblemente podamos hacernos de algunos chips gratis, solo tengo que ponerme a cacharrear en el garage :)
Saludos.
-
Esta quizas sirviese.
Por supuesto, hay que buscar un componente del que se puedan obtener mas cantidad, si no seria un proyecto que nadie podria reproducir...y no es lo que (yo personalmente) quiero.
MSM5416258A 262,144-Word x 16-Bit (http://www.datasheetcatalog.com/datasheets_pdf/M/S/M/5/MSM5416258A.shtml)
(aunque es DINAMICA)
-
Yo tengo entendido que las memorias dinámicas, se autorefrescan y que en ese momento, no se puede leer ni escribir.
-
Yo tengo entendido que las memorias dinámicas, se autorefrescan y que en ese momento, no se puede leer ni escribir.
Si es asi, seria PERFECTO! En ese caso deben tener algun pin que avise "espera un momento, me estoy refrescando". Sensando ese dato, estamos en condiciones.
:)
-
Hola gente: las memorias de las cdrom no sirven?
-
Hola flaco!
Buena pregunta. De esas, en 32K tengo (para compartir, obvio, igual que las anteriores) unas cuantas. Solo tengo la duda si al ser "dinamicas" complican o no el proyecto. Ahi es donde extraño el no haber cursado una carrera formal....tengo esos malditos baches que me frenan todo el tiempo :)
-
creo que el refresco se hace en un pin de la memoria y no hace falta refrescar dato por dato, es algo así como un clock, la verdad es que no recuerdo mucho, pero creo que era así, sería cuestión de estudiar el DS de la memoria.
saludos!!!
-
Esta noche voy a leer sobre el tema. Pero la idea que tengo (sacada de no se donde) es que hay que leer y volver a escribir el contenido para referescarla. Claro que si el circuito que hace ese trabajo esta en el mismo chip de la RAM, se reduce a enviar los pulsos cada "x" us... Si no, es un lio.
Ya veremos.
De todos modos, con las EEPROM puede que podamos cansarnos de luchar para emular el 6502 y hacer pruebas.....:)
-
Estube estudiando con mejor detalle el tema del refresco de las memorias, y la respuesta está en el mismo datasheet que colgó Ariel.
Hay varios PIN que seleccionan el modo, uno de los modos es refresh. Para hacer el Refresh hay que RAS en 0, LCAS y UCAS en 1, por lo que cuando no se necesita acceder a la memoria, se dejan en estado al chip y no se pierden los datos.
Además el tiempo de refresco como máximo se debe tardar 8ms, o sea, que no hay que demorar por más de 8ms para hacer un nuevo refresco. Se tiene mucho tiempo para grabar, leer y cuando no se utilize la memoria, dejarlo en modo refresh.
Me parece que el tema de la memoria, está solucionado.
-
buenisimo Leon!
Voy a ver si encuentro 3 iguales, de 64kb o más. Salvo que las de la placa de video sirvan...esas hasta son DIP!
PD: ¿Saben de algun lugar donde me pueda meter la placa que ya arme? :)
-
¿Pero la que hisiste no son DIP? Además, si mal no recuerdo, Juan nos va a enviar las memorias eeprom I2C
Parte de tu placa va a servir para un nuevo proyecto, en cambio la que yo diseñe no sirve nada, a no ser que amputemos varias partes :D
-
El problema es que estas memorias tienen diferente numero de pines, y distina funcion en cada pin...:)
Si ves la hoja de datos de las TMS que postee mas arriba, vas a ver que tienen el doble de pines. Yo no las analice mucho en cuanto a sus caracteristicas, pero fisicamente no van en esta placa. :(
Al menos la parte del SID me va a servir.
-
Gente tiro otra opinión por si les sirve, quizás esté errado pero ¿64K es la memoria completa que tenía la Commodore? porque si es así no creo que utilicen toda esa memoria para el tema del sonido, recuerden que esta maquinita hacía todo con esa memoria, me refiero al SO en basic, video, periféricos y calculo que una porción no muy grande debe haber sido la dedicada al sonido, quizás esas memorias de 32k te recontrasobren Ariel, bueno es solo un punto de vista de alguien que no está muy compenetrado en el tema y ve todo desde la baranda :D :D :D :D :D
saludos!!!!!
-
Flaco, me ganaste de mano.
No creo que emulemos completamente al Chip, si no que parte del sonido. Ahora si quieren emular completamente al chip, tendremos un clon de la commodore 64 (me gusta mucho la idea)
-
Flaco, me ganaste de mano.
No creo que emulemos completamente al Chip, si no que parte del sonido. Ahora si quieren emular completamente al chip, tendremos un clon de la commodore 64 (me gusta mucho la idea)
Bueno ya si quieren emular completo es otro cantar, quizás ahí sí necesiten los 64K...
-
Gente tiro otra opinión por si les sirve, quizás esté errado pero ¿64K es la memoria completa que tenía la Commodore? porque si es así no creo que utilicen toda esa memoria para el tema del sonido, recuerden que esta maquinita hacía todo con esa memoria, me refiero al SO en basic, video, periféricos y calculo que una porción no muy grande debe haber sido la dedicada al sonido, quizás esas memorias de 32k te recontrasobren Ariel, bueno es solo un punto de vista de alguien que no está muy compenetrado en el tema y ve todo desde la baranda :D :D :D :D :D
saludos!!!!!
Hola flaco!
No pretendemos emular TODO un C64. Pero el problema , creo yo, es que necesitamos igual los 64Kb. En una zona estan las rutinas en ROM, que debe ser emuladas y puestas en las mismas direcciones, por que de antemano no sabemos cuales va a usar el programa que querramos correr (algunas podrian descartarse, como las que gestionan la cinta del grabador de audio, pero....0.
Y la zona de la RAM pasa lo mismo. El programador del tema musical a reproducir puede haber elegido cualquier parte para guardar una tabla o algo asi....
En difinitiva, es casi como si emulasemos el C64 entero, sin la parte de video, teclado,etc. Estamos (intentando) emulando el micro y la memoria.
Saludos!
-
Tienes razón Ariel, no había pensado en ello. Bueno, a darle memoria entónces.
-
Hola Leon!
Temprano por aqui para ser feriado! :) (yo trabajo igual, por que NeoTeo esta en España ;) )
Ojo: yo creo que con las EEPROM originales podemos trabajar MESES desarrollando el "interprete". Es un trabajo largo. anoche me lei la datasheet del 6502, y tiene 55 instrucciones a simular. 13 tipos de direccionamiento, un acumulador y dos registos, u un byte de estado donde cada bit es un flag que indica si hubo acarreo, etc. Todo eso va a ser un lindo ejercicio.
Cuando termine con las tareas del dia, voy a empezar a traducir eso, y ponerlo en algun lado (seguramente en el articulo del SID que tengo en ucontrol) para usarlo de referencia. Tambien tengo la tabla con los 255 opcodes del micro, que es lo que vamos a encontrar dentro de los archivos con la musica.
Esa table dice que "$AD" es el equivalente al mnemonico "ADD", por ejemplo. Entonces, si encontramos en el fichero "FE 0E AD", por ejemplo, puede que signifique "JMP $AD0E", por decir algo. Con esa tabla tenemos la equivalencia de casa cosa.
como puede verse, es un trabajo como minimo largo y tedioso. Que puede complicarse (por ejemplo, el 6502 soporta al menos un tipo de interrupcion, y hay que simularlas)....Tambien los tiempos son importantisimos. Nuestras instrucciones tienen que demorar exactamente lo mismo que en el 6502, si no todo va a ir mas lento o a mayor velocidad. hay MUCHO para discutir.
Saludos!
-
Sip, mi hija me levantó temprano y una vez que no me tocó ir a trabajar un feriado pudiendo dormir :8} , ¡¡pero son lindo a veces los bebes!!
Yo tengo ganas de hacer rutinas del 6505 par el PIC, pero he estado leyendo la hoja que pusiste y me pierdo, porque mi ingles no es muy bueno.
Lo bueno que si logro hacer algunas rutinas igual a una instrucción del 6505, luego será más fácil todo, también para pasarlo a CCS. Y si no, se deja en assembler y listo. Total una vez que se tenga por completo el programa escrito igual al original, tendremos al C64 completamente emulado, hasta con la generación de video y audio.
No queda otra que armarme de paciencia y listo.
Si te pacere bien, creo un tema en offtopic para ir tratando las instrucciones de C64. Ahí bamos poniendo los avances e instrucciones traducidas al PIC por medio de rutinas, tanto en assembler como en CCS.
-
¿Te parece que en OffTopic?
Me parece que, por ahora, este es el lugar adecuado, para tener todo junto.
Las "rutinas" me parecen casi triviales....dale un vistazo al post donde explicaba como emular, el que juanfe contesto en que estaba "100% de acuerdo", y verás que cada rutina solo tendria un par de instucciones.
el lio empieza con las interrupciones, CREO :)
Me "borro" un par de horas, sino me entusiasmo con esto y no avanzo nada en el trabajo! :)
-
Bueno, puedo ponerlo en el foro técnico, junto con este.
Para mí, el lío también está en las interrupciones. Ya que son distintas de un micro a otro. Pero se nos va hacer mas fácil tener el equivalente de las instrucciones para el pic, para luego encarar las interrupciones.
Voy a tratar de hacerme un lugar hoy a la tarde, para empezar a traducir las intrucciones, asi, avanzamos en algo y no nos quedamos estancados.
-
Estoy en el "dique seco" por cuestiones de salud (problemillas de espalda ¿será por el puñetero programador que me obliga a meterme debajo de la mesa? :mrgreen:)... pero les sigo en lo que puedo.
En los cuatro primeros números de esta publicación viene un tutorial de lenguaje ensamblador para C64: http://www.ffd2.com/fridge/chacking/
Respecto a la memoria RAM, encontrar una barata y fácilmente accesible creo que va a resultar difícil. ¿Qué les parecería ésta de 128kbytes si pudiéramos conseguirla: http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2664? Yo tampoco descartaría la opción de usar los 8 chips 4164 que trae originalmente el C64, son fáciles de conseguir aunque no baratos...
Las EEPROM que tenemos en el diseño actual aguantan 1.000.000 de ciclos lectura/escritura.
-
Estoy en el "dique seco" por cuestiones de salud (problemillas de espalda ¿será por el puñetero programador que me obliga a meterme debajo de la mesa? :mrgreen:)... pero les sigo en lo que puedo.
Juanfe!! Eso no, tenes que poner como excusa que el "exceso de sexo me deterioro la salud", o algo asi! :)
Respecto a la memoria RAM, encontrar una barata y fácilmente accesible creo que va a resultar difícil. ¿Qué les parecería ésta de 128kbytes si pudiéramos conseguirla: http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2664? Yo tampoco descartaría la opción de usar los 8 chips 4164 que trae originalmente el C64, son fáciles de conseguir aunque no baratos...
Esa tiene buena pinta!
1.000.000 parece mucho, y lo es. Yo creo que podemos arrancar como estamos. Pero a la larga, y con tiempo, debermos migrar a una RAM, por que si un bucle "se ensaña" con alguna posicion de memoria, nos va a durar poco. :)
Esta misma tarde empiezo una "traduccion" de los aspectos mas interesantes de la datasheet, y la pongo en uControl para que la tengamos a mano.
-
He comenzado a darle forma "legible", ordenada y en español a la informacion disponible sobre el micro 6510 (hemos hablado del mismo como 6502, pero el 6510 es el usado en las C64) en este espacio (http://www.ucontrol.com.ar/wiki/index.php/Microprocesador_6510).
No hay demasiado por ahora, pero con el correr de las horas voy a ir traduciendo y dibujando mas cosas. Voy a ir priorizando lo que se necesite para la emulacion en si misma.
Al final del articulo voy a reunir los links utiles.
(como pueden ver, es un proyecto, junto al de la maquina SIMPLE de videojuegos (http://www.todopic.com.ar/foros/index.php?topic=22402.0), que se me esta convirtiendo en un verdadero vicio). :mrgreen:
-
Muy buena la información sobre el 6510 aitopes.
Aitopes y Leon PIC, cuenten con una DS1245AB (en paquete DIP ancho de 32 pines, parecido al SID) para cada uno que acabo de conseguir.
-
Juanfe,....¿tienes algun parentesco con los Reyes Magos?
Gracias!!
Espero poder devolverte las atenciones alguna vez. (personalmente, si fuese posible!)
-
Ufffffffffff!
Dado que en Argentina es feriado, me estoy dando una panzada de lectura sobre el tema en cuestion.
Tanto, que ya un solo articulo en ucontrol parece ser insuficiente. Por un lado pondré la info del SID (http://www.ucontrol.com.ar/wiki/index.php/SID6581), por otro la del 6510 (http://www.ucontrol.com.ar/wiki/index.php/Microprocesador_6510), por otro el mapa de memoria del C64 (http://www.ucontrol.com.ar/wiki/index.php/Mapa_de_memoria_del_C64), etc.
Y toooodo junto, accesible desde aquí. (http://www.ucontrol.com.ar/wiki/index.php/Categor%C3%ADa:Commodore_64)
Creo que es mas ordenado.
Encaro primero los temas que supongo tenemos que ver primero. Pero si tienen sujerencias, no se corten!
Saludos!
-
Hola Leon!
Recuerdo que tenias ganas de comenzar a codificar cada instruccion del 6510 en CCS....Pues no te apures!
Mira esto:
//****************************************************************************
//
// Process the "STA" instruction
//
//****************************************************************************
void ProcessSTA_C_85( void ){
uint32 zpage;
zpage=(uint32) GETABYTE();
Poke(zpage,_A);
Cycles=3;
}
//----------------------------------------------------------------------------
void ProcessSTA_C_95( void ){
uint32 zpage;
zpage=(uint32) (GETABYTE()+_X);
zpage&=255;
Poke(zpage,_A);
Cycles=4;
}
//----------------------------------------------------------------------------
void ProcessSTA_C_8d( void ){
uint32 address;
address=(uint32) GETAWORD();
Poke(address,_A);
Cycles=4;
}
//----------------------------------------------------------------------------
void ProcessSTA_C_9d( void ){
uint32 address;
address=(uint32) (GETAWORD()+_X);
Poke(address,_A);
Cycles=5;
}
//----------------------------------------------------------------------------
void ProcessSTA_C_99( void ){
uint32 address;
byte zpage;
address=(uint32) (GETAWORD()+_Y);
Poke(address,_A);
Cycles=5;
}
//----------------------------------------------------------------------------
void ProcessSTA_C_81( void ){
uint32 address;
uint32 zpage;
zpage=(uint32) (GETABYTE()+_X);
zpage&=255;
address=Deek( zpage );
Poke(address,_A);
Cycles=6;
}
//----------------------------------------------------------------------------
void ProcessSTA_C_91( void ){
uint32 address;
uint32 zpage;
zpage=(uint32) GETABYTE();
address=(uint32) (Deek(zpage)+_Y);
Poke(address,_A);
Cycles=6;
}
//----------------------------------------------------------------------------
void ProcessSTA_C( void ){
word address;
byte zpage;
switch (opcode) {
case 0x85 : zpage=GETABYTE(); Poke(zpage,_A); Cycles=3; break;
case 0x95 : zpage=GETABYTE(); Poke((zpage+_X)&255,_A); Cycles=4; break;
case 0x8D : address=GETAWORD(); Poke(address,_A); Cycles=4; break;
case 0x9D : address=GETAWORD(); Poke(address+_X,_A); Cycles=5; break;
case 0x99 : address=GETAWORD(); Poke(address+_Y,_A); Cycles=5; break;
case 0x81 : zpage=GETABYTE(); address=Deek((zpage+_X)&255); Poke(address,_A); Cycles=6; break;
case 0x91 : zpage=GETABYTE(); address=Deek(zpage); Cycles=6; Poke(address+_Y,_A); break;
}
}
Forma parte de un emulador de la C64 para Pc, cuyo codigo fuente está liberado al publico y para que se lo modifique, siempre que se publiquen los resultados de la misma manera (cosa que a mi me gustaría hacer...no vale de nada tomarse todo este trabajo para luego esconderlo debajo de la cama).
El paquete de emulador + fuentes esta aqui. (http://www.emulatronia.com/doctec/ordenadores/c64/m4src.zip)
Saludos!
EDITO: si analizas ese trozo de código, veras que hay varias funciones para la misma STA. Eso es por que hay varios opcodes que hace "casi lo mismo" dentro del 6510. Aun no tengo claras las diferencias entre una y otra, pero el emulador las tiene que simular a todas. Los opcodes ya están en uControl.
-
Juan, muchiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisimas graaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacias :-/ :-/ :-/ :-/ :-/ :-/
Haber, corríganmen si estoy equivocado, pero estás instrucciones, no la maneja el PIC, ya que el C de la PC, no es lo mismo que el C para el PIC.
De todas maneras, tendremos que traducir estas instruciones de C al CCS del PIC. Ya aca no me animo, porque de C no C nada :mrgreen: En realidad se poco y no me acostumbro a utilizar el CCS. Por alguna extraña razón, le escapo.
-
Aquí dejo un TIFF de la versión 3 del PCB (con las memorias SOIC) sin plano de tierra creado por Leon PIC listo para imprimir y planchar (con la cara de componentes en mirror): www.villatic.org/carpetaJuanfe/SID6581 v3 completo.tif (http://www.villatic.org/carpetaJuanfe/SID6581 v3 completo.tif)
-
Ya sé que no tiene nada que ver, pero me gustaría compartir con vosotros este desarrollo que he encontrado sobre un PIC. No dejéis de escuchar los samples de audio que vienen en la web.
(http://oopic.com/soundgin/soundginsm.jpg) (http://oopic.com/soundgin/)
-
Hola Leon, pensé que te gustaría ver el resultado de tu ruteado una vez atacado. Lo he hecho con el método de la plancha, que generalmente se me da muy mal, pero, gracias a que tus pistas son muy gruesas, esta vez me ha quedado aceptable.
(http://img166.imageshack.us/img166/7488/pcbleonbottomgu6.th.jpg) (http://img166.imageshack.us/my.php?image=pcbleonbottomgu6.jpg)
(http://img132.imageshack.us/img132/4691/pcbleontopio5.th.jpg) (http://img132.imageshack.us/my.php?image=pcbleontopio5.jpg)
No he podido probar tu SID en el C64 que compré porque tengo todo el taller embalado en cajas pues tenemos que pintar la casa. En cuanto terminemos lo pruebo.
-
Muy bueno!!!!!!
Han quedado "de miedo" :)
Que tema el de los pintores... Este verano me tocará embalar todo a mi. :)
Saludos.
-
Se me cae un lagrimón :-/ :-/
Quedó muy bien. Si te salen mal las placas con el planchado, nome quiero imaginar como te salen con el método que usas. Esta placa quedó muy bien.
Mañana voy a comprar PCB, por lo que yo también plancharé mi PCB.
-
Hola amigos!
Mientras esperamos, podemos deleitar los oidos con esta banda sueca (http://www.myspace.com/machinaesupremacy)que usa entre sus instrumentos un SID6581..
El comienzo del tema "stand" te pone de punta los pelitos de los brazos!!
(http://www.machinaesupremacy.com/myspace/masumsphead.jpg)
-
Wow :shock: :shock: Que lindo que suena el SID, me gustaría hacerlo sonar así también en el Nixie como alarma despertador.
-
Este señor ha convertido un SI6581 en un instrumento MIDI mediante un Atmel y apenas otros componentes: http://kaput.retroarchive.org/MIDI.html
Aquí lo tienen interpretando el concierto de Brandemburgo.
-
Pero....mira lo que son las casualidades!!!
Yo tambien me he quedado embobado con el trabajito de ese tio, y me he puesto otra vez con este tema.
Rediseñe la placa....me parece que la vez anterior comence por algo muy complejo. Esta vez, simplemente quiero que el SID haga "tuuuuuuu".....y luego recien empezar a complicar la cosa pasito a pasito.
Si te parece pongo aqui una copia de lo que tengo hecho:
El circuito que tengo en mente es bastante sencillo. Tenemos el PIC, el SID, una fuente de 5V y 12V y un divisor de frecuencia que convierte los 4MHz del oscilador del PIC en el MHz que requiere el SID para funcionar. El esquema siguiente tiene un error: si no me equivoco, el RESET del SID debe estar a +V en lugar de a GND. Eso fue corregido en el PCB.
(http://www.ucontrol.com.ar/forosmf/ordenadores-commodore-y-atari/proyecto-controlando-un-chip-sid6581-con-un-pic/?action=dlattach;attach=2246)
El PCB me quedó más o menos asi:
(http://www.ucontrol.com.ar/forosmf/ordenadores-commodore-y-atari/proyecto-controlando-un-chip-sid6581-con-un-pic/?action=dlattach;attach=2248) (http://www.ucontrol.com.ar/forosmf/ordenadores-commodore-y-atari/proyecto-controlando-un-chip-sid6581-con-un-pic/?action=dlattach;attach=2256)
Y una vez construido, el aparatejo quedó asi:
(http://www.ucontrol.com.ar/forosmf/ordenadores-commodore-y-atari/proyecto-controlando-un-chip-sid6581-con-un-pic/?action=dlattach;attach=2252)
(http://www.ucontrol.com.ar/forosmf/ordenadores-commodore-y-atari/proyecto-controlando-un-chip-sid6581-con-un-pic/?action=dlattach;attach=2254)
Ahora, solo me falta escribir algun programita para probarlo. :P
(Estoy copiando de este hilo (http://www.ucontrol.com.ar/forosmf/ordenadores-commodore-y-atari/proyecto-controlando-un-chip-sid6581-con-un-pic/msg16143/#new))
-
:mrgreen: pues a mi me encanta que intenteis generar un beep. yo todavia no monte mi plaquita, pero espero darle caña en poco tiempo. estare atento a los pasos a seguir para disparar un sonido.
un saludo
-
Y creo que por fin encontré el rodeo que estaba buscando para evitarme emular el 6510 dentro del PIC.
Resulta que unos señores (http://gadgetgangster.com/find-a-project/56.html?projectnum=236) han desarrollado un reproductor de SID utilizando un Propeller, pero no han implementado la emulación del 6510 dentro del Propeller, sino sólo la del SID; externamente utilizan un programa que han llamado dumper (y que ya me he guardado convenientemente http://www.villatic.org/carpetaJuanfe/dumper.zip) que es quién realmente se encarga de la emulación del 6510, de tal modo que toma un archivo SID y lo convierte en un archivo DMP, que es un formato que se han inventado y que simplemente contiene el estado de los registros del SID en cada frame... ¡BRAVO, BRAVO y BRAVO!
Os dejo una explicación de ellos mismos que encontré en su foro (http://www.gadgetgangster.com/forums/viewtopic.php?f=56&t=250&p=527&hilit=sidstick#p527):
A dump file is just a raw binary dump of the 25 SID-registers each frame, nothing more nothing less.
In other words if you open up a dump-file in a hex editor and for instance look at position 103, it means you are looking at frame 4 (103/25) and SID register 3 (channel 1 - Attack/Decay).
When the SIDstick plays these dumps it basically reads 25 bytes at a time from the SD-card and feeds them directly to the SID emulator at the same rate as the 6510 emulation in the Dumper was writing to the SID. (usally once every vbl)
De tal modo que nosotros (que estamos usando un SID real) sólo tendríamos que tomar esos archivos DMP, leer su contenido en paquetes de 25 bytes (el SID tiene 25 registros) y presentar cada uno de esos paquetes de 25 bytes al SID a un ritmo de 25 paquetes por segundo (frecuencia PAL). CHUPAOOOOOOO
-
He estado probando el dumper y parece que va de maravilla... incluye un reproductor de SID, el conversos a DMP e incluso una ventana monitor en la que puedes ver en tiempo real cómo se van actualizando los registros del SID.
Por ejemplo, el SID de Donkey Kong pasado por el dumper y mostrado en XVI32:
(http://img594.imageshack.us/img594/7045/siddumper.jpg) (http://img594.imageshack.us/i/siddumper.jpg/)
Eso sí, el SID original de 5 minutos no llega a 3KB y el DMP final ocupa más de 400KB.
-
jop¡¡ yo esto me lo guardo para las configuraciones de ruidos :mrgreen: me viene de perlas. ya os enseñaré como lo llevo
un saludo
-
¿A qué configuraciones de ruidos te refieres alogic? Me debo haber perdido algún post tuyo porque últimamente estoy hasta el cuello de curro...
-
no creo que te hayas perdido ningun post, es el proyecto que tengo en el aire (por lo mismo que cuasi todos nosotros, no time :5]). pero no tiene na que ver con lo que estais haciendo vosotros, mi idea es hacer un sintetizador de tres voces para conectar a un secuenciador y trastear. a configuraciones de ruidos me refiero, perdona mi expresion no se dice asi :mrgreen: seria la libreria de sonidos, por ej.
instrumentos de viento -flauta, trompeta...de cuerda -etc etc etc
si te interesa este es el frontal (http://img571.imageshack.us/img571/7614/frontalsid.jpg) que tengo pensado.
-
mirad :shock:, sid player (http://overtone-labs.ning.com/profiles/blogs/sid-player-firmware) sobre un pic32
-
Dice que ha compilado la librería de TinySID library, pero ¿de dónde la ha sacado?
-
Hola,esta muy buena toda la info.Tengo un SID en el cajon desde hace rato y estoy interesado en armar el proyecto que posteo "jfmateos2" (http://kaput.retroarchive.org/MIDI.html) que por lo que entiendo solo interpreta midi,lo que si le pondria la salida transistorizada que implementa "aitopes". Làstima que es con un atmega8 y nunca programe ninguno .. serà muy dificil adaptar el codigo para un PIC ?
Tengo un "Core" de MidiBox (sin Lcd) y voy a ver si le quemo el soft para el SID y hago unas pruebas..
con escuchar un "tuuuu" salto en una pata! :D
saludos.
-
Hola,bueno he armado el MidiBox SID V1,cuando me di cuenta que solo necesitaba un 18f452(que tengo) para que funcione el SID,enviandole midi. Una vez mas quede maravillado de lo que han logrado con el "Mios" que nos permite cargar aplicaciones via midi (controladores,seq,synth,etc).En el caso del SID se puede utilizar solo un pic y agregarle una Superficie de Control minima (LCD,1 encoder y 4 teclas) hasta la Sup Control completa (con matriz de Led y varios encoders).Se puede simultaneamente controlar el SID con una interface en Java (JSynthLib). Teniendo una EEPROM 24LC256 ( BankStick ) podes cargar 127 "patch" de audio ...
fotos:
-
Estoy haciendo un video , para explicar como funciona y como se escucha.Quisiera compartir mi experiencia con este SID y si ayudar en lo que pueda si alguien quiere poner en marcha el "Mios". No se si abrir un tema a parte o continuar aqui?
unas fotos mas..
-
hombre supongo que si lo que vas a usar es MIOS, lo logico es que lo pongas en su foro ucapps.de (http://midibox.org/forums/forum/26-espanol/), si lo que vas a hacer es una nueva programacion, que no tiene nada que ver con ellos... y crees que lo mejor es exponerla por aqui, pues adelante. pero supongo que deberias dejar constancia de lo que haces por alli, si usas su hard o soft ;-) de todas formas enhorabuena por el juguete, ya veras que es un aparatillo muy entretenido
un saludo
-
Gracias alogic.on , vos tambien lo armaste? Creo no me explique bien,estoy editando un video donde manejo el SID con un nuevo controlador midi que armè (Caoss Synth),de ahi mi pregunta anterior ... que me la contesto solo; nuevo tema.
Una pregunta; como ven el tema de que use esa fuente de disco externo,porque me da justo los 5v y los 12v para el SID .. por ahora anda bien.
Saludos!
-
Parece que alguien lo ha hecho.
http://dangerousprototypes.com/forum/viewtopic.php?f=56&t=2197&view=unread#p22493