На сколько я помню, у силабсов 1 команда 8051 за один такт. Вот тебе и 25 мипсов на 25МГц. Хотя я их не особо люблю (силабсовские контроллеры). Дорогие и непрактичные.Цитата:
Сообщение от icebear
Вид для печати
На сколько я помню, у силабсов 1 команда 8051 за один такт. Вот тебе и 25 мипсов на 25МГц. Хотя я их не особо люблю (силабсовские контроллеры). Дорогие и непрактичные.Цитата:
Сообщение от icebear
Ну сделай, посмотрим :).Цитата:
Сообщение от Titus
Дело не в мипсах, а в умении их прилагать ;)
Мне эмулировать AY наффиг не нужно :v2_tong:Цитата:
Сообщение от CHRV
p.s.: Я хоть и любитель Спектрума, но не фанат-маньяк :v2_wink2:
Ну это уж можно запрограммировать... а, погодь, ты говоришь, что там микросхема AY стояла?Цитата:
Сообщение от Robus
О, нашел! А схему сможешь достать?Цитата:
Сообщение от CHRV
Это что же, я по твоему фанат-маньяк? Ща как бензопилу включуЦитата:
Сообщение от Titus
ну и че, lpc2101 - ARM, за 2.5$ так и все 50 мипсов выдаст :) эт если уложите эмуляцию в 8кб :DЦитата:
Сообщение от Titus
Только не 2.5$, а 2$ (если мелкооптом). Только тут речь идет о контроллере с ЦАП'ом на борту :v2_wink2:Цитата:
Сообщение от Ronin
Описание проца здесь:Цитата:
Сообщение от Savage
http://www.venus.ru/news.php?id=67&arc=0&sct=1
Ух ты! Огромное спасибо
Ну вот и свершилось ... Хех ...
Прочитал я вот это:
и ещё вот это:Цитата:
Сообщение от CHRV
Странно, что тут такого, чего нельзя сделать ? Если, конечно, писать на Си, то и вправду нельзя, но на асме проще не бывает.Цитата:
Сообщение от CHRV
Итак, пришёл я вчера на работу, взял прайсы и нашёл C51F330 выпускаемый SILabs (Cygnal), у которого 32 ноги, короче мы на работе такое паяем простыми паяльниками. Микроконтроллер на 25 мипсов, стоит 16 гривень, или по всеобщему это $3.1. Нашёл флешку с последовательным доступом на 512к за 9 гривен по всеобщему это $1.7. Короче с буферами для RS232 это всё будет стоить максимум 10-20 долларов.
После взял отладочный модуль, который валяется в моём столе где стоит C51F120 он на 100 мипсов, и написал программу примерно за 6-7 часов с учётом того, что постоянно запускал эмулятор, что бы проверить как работают регистры AY’а. Безусловно микроконтроллер сконфигурирован на 25 мегагерц с помощью PLL. Конечно за такое малое время я не мог идеально написать эмулятор и я так и не дописал шипения, поэтому они заблокированы в программе. Но в основном всё повторено. Лично проверил на 20-30 демках и играх, всё звучит так как положено. Единственное, это огибающая, в которой я где-то то ли ошибся то ли не так запускаю, но этот глюк заметен был только на одной единственной демке - Mental Masturbation. Однако всё работает, плеер великолепно пишется. Как будет свободное время, сяду и сделаю, заодно и схему разведу, паяйте сколько душе угодно.
Инструкция по пользованию:
Ниже будет прикреплён архив в котором нужно сделать:
1. Запускаем «Ay8912.bat». На моём ассемблере откомпилируется программа лежащая в файле «Ay8912.ac5»
2. В итоге получатся два файла «Ay8912.bin» и «Ay8912.hex», любой из них можно прошить непосредственно в C51F120. Простите, программу «прошивателя» забыл на работе, но если нужно принесу.
3. После подсоединяем выводы DAC0 и DAC1 на входы уселителя. У меня на работе это сделано прямо в компьютер.
4. Подсоединяем RXD и TXD микроконтроллера через буфера на 12-ть воль к Com’у номер 2 !!! Простите, у меня был свободен именно он.
5. Запускаем мой эмулятор Wild Speccy имя файла - «Sp-emul.exe». И он на скорости 115200 отсылает 14*3 байт состояния AY’ка, каждый кадр монитора, который, безусловно, 50 герц, и только таким он должен быть НА ВСЕХ ЭМУЛЯТОРАХ.
6. Слушаем музыку.
Никогда не понимал, чего электронщики постоянно считают программистов за дураков ? Нет, что бы вместе сидеть и творить ?
... Продолжение следует ...
Вот текст программы для C51F120:
... Продолжение следует ...Код:
; AY-8912 Emulator On C51F330 - 16grn=$3.1 25-MIPs 4-Timers
; On C51F332 - 12grn=$2.4 25-MIPs 4-Timers
Include '51F120.inc'
Include 'intel.inc'
RCAP EQU (12*14-6)/12
.Delay
PUSH DPL
PUSH DPH
MOV DPTR,#[email protected]
CALL Dela
POP DPH
POP DPL
..
DEFDB R_AY15
DEFDB R_AY14
DEFDB R_AY13
DEFDB R_AY12
DEFDB R_AY11
DEFDB R_AY10
DEFDB R_AY09
DEFDB R_AY08
DEFDB R_AY07
DEFDB R_AY06
DEFDB R_AY05
DEFDB R_AY04
DEFDB R_AY03
DEFDB R_AY02
DEFDB R_AY01
DEFDB R_AY00
DEFDS Ch_AC,3
DEFDS Ch_BC,3
DEFDS Ch_CC,3
DEFDS Ch_EC,3
DEFDS Ch_NC,3
ORG 0
JMP Start
ORG 03Bh
RETI
ORG 00BH
JMP Timer0INT
ORG 100H
Start:
MOV SP,#SPMAX ;DSEG$+1
MOV WDTCN, #0DEh
MOV WDTCN, #0ADh
;ENABLE INTERNAL PLL (MNOGO MEGAGERTZZZSS)
MOV SFRPAGE,#0FH
ORL PLL0CN,#00000001B
MOV PLL0DIV,#1
MOV PLL0MUL,#1
CLR A
DJNZ ACC,$
ORL PLL0CN,#00000010B
MMM2: MOV A,PLL0CN
JNB ACC.4,MMM2
MOV OSCICN,#10000011B
MOV CLKSEL,#00000010B
;
; Enable the Port I/O Crossbar
; MOV P1MDIN,#11111111B
MOV XBR0,#00010111B
MOV XBR1,#00000000B
MOV XBR2,#01000100B
MOV P0MDOUT,#0FFH
MOV P1MDOUT,#0FFH
MOV P2MDOUT,#000H
MOV P3MDOUT,#000H
MOV P4MDOUT,#000H
MOV P5MDOUT,#000H
MOV P6MDOUT,#000H
MOV P7MDOUT,#11111111B
MOV SFRPAGE,#00H
MOV SFRPAGE,#00H
MOV REF0CN,#00001011B
MOV DAC0CN,#10000100B
MOV SFRPAGE,#01H
MOV DAC1CN,#10000100B
MOV SFRPAGE,#00H
MOV DPTR,#4095
MOV DAC0L,DPL
MOV DAC0H,DPH
MOV SFRPAGE,#00H
;Serial port
MOV SFRPAGE,#0
MOV RCAP2L,#LOW(-RCAP)
MOV RCAP2H,#HIGH(-RCAP)
MOV TMR2CN,#00000100B
MOV TMR2CF,#00001010B
MOV TMR2L,#0FFH
MOV TMR2L,#0FFH
MOV SCON0,#01010000B
MOV SSTA0,#00000101B
MOV TMOD,#00010010B
MOV TL0,#LOW(-T0REL)
MOV TH0,#LOW(-T0REL)
SETB TR0
ORL IE,#00000010B
SETB EA
CLR A
MOV Ch_AC+0,A
MOV Ch_AC+1,A
MOV Ch_AC+2,A
MOV Ch_BC+0,A
MOV Ch_BC+1,A
MOV Ch_BC+2,A
MOV Ch_CC+0,A
MOV Ch_CC+1,A
MOV Ch_CC+2,A
MOV Ch_EC+0,A
MOV Ch_EC+1,A
MOV Ch_EC+2,A
MOV R_AY00,A
MOV R_AY01,A
MOV R_AY02,A
MOV R_AY03,A
MOV R_AY04,A
MOV R_AY05,A
MOV R_AY06,A
MOV R_AY07,#00111111B
MOV R_AY08,#15
MOV R_AY09,#15
MOV R_AY10,#15
MOV R_AY11,A
MOV R_AY12,A
MOV R_AY13,A
MOV R_AY14,A
MOV R_AY15,A
MOV R7,#1
M1
;MOV R_AY00,#100
;MOV R_AY04,#200
; CPL P1.6
; MOV A,#10101010B
; CALL Write_Sbuf0
; DELAY 1
;
; MOV A,#30
; CALL Write_Sbuf0
; DELAY 1
JNB RI0,MM1
.0
MOV A,R7
ANL A,#10000000B
JNZ M3
CPL P1.6
M3 MOV R7,#255
..
CALL Read_Sbuf0
MOV B,A
ANL B,#00001111B
SWAP A
ANL A,#00001111B
JNZ MCM1
MOV R0,B
JMP MM1
MCM1: DEC A
JNZ MCM2
MOV R1,B
MCM2: DEC A
JNZ MCM3
MOV A,R0
ANL A,#00001111B
ADD A,#R_AY00
MOV R0,A
MOV A,B
SWAP A
ORL A,R1
MOV @R0,A
MOV R1,B
MCM3:
; CALL Write_Sbuf0
MM1:
JMP M1
Read_Sbuf0:
MOV SFRPAGE,#0
JNB RI0,$
MOV A,SBUF0
CLR RI0
RET
Write_Sbuf0:
MOV SFRPAGE,#0
MOV SBUF0,A
JNB TI0,$
CLR TI0
RET
DelNOP: ;CALL = 2 & RET = 1 ... 25-3=22
DS 245-3-2
RET
Dela: ;DPTR=Delay
PUSH ACC
DELA1: MOV A,#95
DELA2: CALL DelNOP
DJNZ ACC,DELA2
INC DPTR
MOV A,DPL
ORL A,DPH
JNZ DELA1
POP ACC
RET
;5025536 TELEFON V ZALE NA RABOTE
.PnDec ,ы
CLR C
MOV A,@.0+0
SUBB A,#2
MOV @.0+0,A
JNC @P_DE1
MOV A,@.1+0
ANL A,#00011111B
INC A
RL A
RL A
MOV @.0+0,A
INC @.0+2
; MOV B,A
;@P_DE2 INC @.0+2
; ADD A,@.0+0
; MOV @.0+0,A
; MOV A,B
; JNC @P_DE2
@P_DE1 MOV A,@.0+2
MOVC A,@A+DPTR
..
.PzDec ,ы
CLR C
MOV A,@.0+0
SUBB A,#LOW(DECCER)
MOV @.0+0,A
MOV A,@.0+1
SUBB A,#HIGH(DECCER)
MOV @.0+1,A
JNC @P_DE1
; ANL @.1+1,#00001111B
MOV A,@.1+0
ORL A,@.1+1
JNZ @P_DE2
MOV @.0+0,A
MOV @.0+1,A
; MOV @.0+2,#1
JMP @P_DE1
@P_DE2 INC @.0+2
MOV A,@.0+0
ADD A,@.1+0
MOV @.0+0,A
MOV A,@.0+1
ADDC A,@.1+1
MOV @.0+1,A
JNC @P_DE2
@P_DE1 MOV A,@.0+2
JNB ACC.4,@P_DE3
INC DPH
@P_DE3 ANL A,#00001111B
MOVC A,@A+DPTR
..
.PxDec ,,,ы
CLR C
MOV A,@.0+0
SUBB A,#LOW(DECCER)
MOV @.0+0,A
MOV A,@.0+1
SUBB A,#HIGH(DECCER)
MOV @.0+1,A
JNC @P_DE1
ANL @.1+1,#00001111B
MOV A,@.1+0
ORL A,@.1+1
JNZ @P_DE2
MOV @.0+0,A
MOV @.0+1,A
ORL @.0+2,#1
JMP @P_DE1
@P_DE2 INC @.0+2
CLR C
MOV A,@.0+0
ADDC A,@.1+0
MOV @.0+0,A
MOV A,@.0+1
ADDC A,@.1+1
MOV @.0+1,A
JNC @P_DE2
@P_DE1 MOV A,@.0+2
RRC A
MOV A,@.2
JNB ACC.4,@P_DE3
MOV A,R0
@P_DE3 ANL A,#00001111B
RLC A
; JB @.3+3,@P_DE4
; MOV C,B.0
; ORL C,ACC.0
; MOV ACC.0,C
@P_DE4:
MOV C,@.3
RLC A
MOVC A,@A+DPTR
RL A
..
DECCER EQU 4
T0REL EQU DECCER*11
Timer0INT:
; CLR TR0
CLR TF0
SETB P1.6
PUSH SFRPAGE
PUSH ACC
PUSH PSW
PUSH DPTR
PUSH R0
PUSH R1
PUSH R2
PUSH B
.0
MOV A,R7
JZ M2
DEC R7
MOV A,R7
JNZ M2
CLR P1.6
M2
..