Code: Select all
105 F5BE 80C9CAAB LD K, H(A)
Moderator: Shaos
Code: Select all
105 F5BE 80C9CAAB LD K, H(A)
Угу - уже качнул. Он бы ещё бы листинг приложил - вообще было бы замечательноb2m wrote:Реальная программа для HPC: move.html
Я тоже это письмо читал - это единственная попытка создать самодельный комп на этом проце, которая видимо на этой переписке и закончиласьb2m wrote:Он бы ещё ассемблер приложил
Насколько я понял, ассемблер распространялся только по соглашению с N.S., где-то видел, чувак, имеющий тулзы, советовал кому-то обратиться к ним, и если они будут не против он вышлет архив с тулзами.
За деньги, да ещё и по соглашению?b2m wrote:Насколько я понял, ассемблер распространялся только по соглашению с N.S.,...
Мне кажется, этот чувак мне тоже попадался, но казалось мне он денег хочет - $50.b2m wrote:где-то видел, чувак, имеющий тулзы, советовал кому-то обратиться к ним, и если они будут не против он вышлет архив с тулзами.
Раньше это была вполне распостранённая практика как я понимаю - пока опенсорцовцы не начали нажимать на индустрию (в некоторых отраслях оно до сих пор так - только под NDA и только за большие бабосы)Lavr wrote:За деньги, да ещё и по соглашению?b2m wrote:Насколько я понял, ассемблер распространялся только по соглашению с N.S.,...Забавно...
Это по-видимому значит, что к половинкам слова процессор может обращаться раздельно. С другой стороны если прицепить настоящую 16-битную память и работать с ней только словами и только по чётным адресам, то всё срастётся?...b2m wrote:Зато там есть кое-что про 16-битный режим работы памяти, но как адресуются байты в этом режиме - я так и не понял, написано, что для этого используется /HBE, видимо в комбинации с битом A0. А как конкретно происходит обмен - диаграмм нет.Shaos wrote:А датащит у меня был - там опкодов нету
А, нашёл на картинке - /CS младшего байта это A0, а /CS старшего байта это /HBE.
А вот и они:Shaos wrote:Блуждая по www.jameco.com наткнулся на безромный 16-битный микроконтроллер от National Semiconductor середины 90-х под названием HPC46003V20 в корпусе PLCC68 за 15 бабосов - не глядя купил два
Там кстати ещё есть:Shaos wrote:Угу - уже качнул. Он бы ещё бы листинг приложил - вообще было бы замечательноb2m wrote:Реальная программа для HPC: move.html
Code: Select all
;
;
; FILE NAME MAIN.ASM
;
;------------- MAIN LOOP & INITIALIZATION ---------------------------------
;
;
; SynPet Personal Electronic Technologies
; 7225 Franklin Road, Boise, ID 83709
;
; Created: 8/22/89 - LRE
; Firmware version 1.00 3/15/90
; Firmware version 1.01 3/18/90 - Fix commo lockup.
;
;
;
;
;---------------------------------------------------------------------------
.chip 16003
.incld GLOBDEFS
;--------------- MODULE PRIVATE DEFINES ----------------------------------
;---------- END OF MODULE PRIVATE DEFINES -------------------------------
.sect DATA,ram8
;---------------- MODULE PRIVATE VARIABLES --------------------------------
;--------------- END OF MODULE PRIVATE VARIABLES --------------------------
;-------------------- EXTERNAL GLOBAL VARIABLES ---------------------------
.extrn total_jobs_in_qs
.extrn jobs_in_q
.extrn a_to_d_tic
.extrn chk_rd_intrn_t0_tic
.extrn first_msg_received
.extrn lights_t0_tic
.extrn last_ir_change_status
.extrn ir_change
.extrn internal_msg_buffer
;----------------- END OF EXTERNAL GLOBAL VARIABLES -----------------------
.endsect
;---------------- START OF MODULE CODE -----------------------------------
.public REV_NO
.extrn PROCESS_COMMO
.extrn INIT_TIMERS
.extrn INIT_HEAD
.extrn INIT_COMMO
.extrn INIT_MICRO_WIRE
.extrn INIT_MOVE
.extrn INIT_LIGHTS
.extrn INIT_RD_EXTRN
.extrn INIT_CONTROL
.extrn MOVE_MAIN
.extrn TEST_MAIN
.extrn LIGHTS_MAIN
.extrn CONTROL_MAIN
.extrn READ_INTERNAL_MAIN
.extrn RDEXTRN_MAIN
.extrn HEAD_MAIN
.extrn BEACON_MAIN
.extrn LIGHTSHOWS_MAIN
.extrn A_TO_D_MAIN
.extrn LIGHT_SHOW
.extrn PROCESS_REMOTE_CONTROL
.extrn CHECK_RD_INTRN
.extrn PROCESS_LIGHT_T0_TIC
.extrn SND_INTERNAL_MSG
;--------------- START OF INITIALIZATION ------ ----------------------------
.sect RESET,rom8
MAIN:
; LD PSW.B,#010H ; Set addressing and wait states. 64K address,
; 4 waits. Must be done immediately.
LD PSW.B,#014 ; Two waits.
; LD PSW.B,#018 ; One wait.
JMP INITIALIZE ; Go set up everything else.
.endsect
.sect HIMEM,rom8
; .sect LOMEM,rom8
; .sect CODE,rom8
COPYRIGHT_NOTICE:
.DB 'COPYRIGHT (C) 1990 - SYNPET PERSONAL ELECTRONIC TECHNOLOGIES'
.DB 'NEWTON PESONAL ROBOT HPC FIRMWARE.'
VERSION:
.DB 'REV NO. - '
REV_NO:
.DB '01.01'
INITIALIZE:
; Clear all RAM.
LD B.W,#06000H ; Set up loop.
LD K.W,#067FFH ;
CLR_LOOP:
CLR A ; Put all zeroes into mem.
XS A,[B+].B ;
JMP CLR_LOOP ;
JSR INIT_COMMO ;
JSR INIT_TIMERS ;
JSR INIT_HEAD ;
; JSR INIT_MICRO_WIRE ;
JSR INIT_MOVE ;
; JSR INIT_LIGHTS ;
; JSR INIT_RD_EXTRN ;
JSR INIT_CONTROL ;
DO_INTS: ; Start timers & let ints in.
LD ENIR.B,#0 ;
SBIT 0,TMMODE.B ; Only Have a T0 int to begin with on timer ints.
; T0 is already running & don't want the others
; started yet.
RBIT 2,TMMODE_HI.B ; Start timer T2 for sonar.
RBIT 6,TMMODE_HI.B ; Start timer T3 for sonar.
SBIT 5,ENIR.B ; Enable timer interrupt.
SBIT 7,ENIR.B ; Enable head opto interrupt.
SBIT 3,ENIR.B ; Enable right motor opto int.
SBIT 2,ENIR.B ; Enable left motor opto int.
SBIT 4,ENIR.B ; Enable remote control int.
_EN_INTS_ ; & The global enable.
_EN_NMI_
; Send home head command to head routine to startup.
LD internal_msg_buffer + 0.B,#3 ;
LD internal_msg_buffer + 1.B,#061H ;
LD internal_msg_buffer + 2.B,#084H ;
JSR SND_INTERNAL_MSG ;
JMP MAIN_LOOP ; Go back - done with initialization.
;----------------- END OF INITIALIZATION -----------------------------------
;-------------------- START OF MAIN ----------------------------------------
;
; THIS ROUTINE STARTS THINGS UP & THEN GOES INTO PRIMARY ENDLESS LOOP.
MAIN_LOOP:
JSR PROCESS_COMMO ; Go check communications.
; Chk to see if any jobs running or pending & go process if
; there are.
IFEQ total_jobs_in_qs.B,#0 ; Anything going on?
JMP CHK_A2D ; No - don't process.
; Else fall thru to go do jobs.
LD B,#0 ; For index thru jobs.
CHK_NEXT_JOB:
LD A,jobs_in_q[B].B ;
IFEQ A,#0 ; Anything this job?
JMP SETUP_FOR_NEXT_JOB_CHK ; No don't do job.
; Else go process job.
PUSH B ; Save for next.
JSR DO_JOB ; Go process.
POP B ; Get index back .
SETUP_FOR_NEXT_JOB_CHK:
INC B ;
IFGT B,#NUMBER_OF_JOBS_ROLLOVER ; Done checking all yet?
JMP CHK_A2D ; Yes - go to next on main loop.
JMP CHK_NEXT_JOB ; No - go check for more.
CHK_A2D:
; IFGT a_to_d_tic.B,#1 ; Time to go A to D?
; JSR A_TO_D_MAIN ; Yes - go to it.
CHK_IR_CHANGE:
LD A,DIGITAL_STATUS_PORT.B ;
AND A,#04H ;
LD B,last_ir_change_status.B ;
XOR A,B ;
IFGT A,#0 ;
LD ir_change.B,#1 ;
CHK_LIGHTS:
IFEQ lights_t0_tic.B,#0 ;
JMP DO_REMOTE_CONTROL ;
; JSR PROCESS_LIGHT_T0_TIC ;
; JSR LIGHT_SHOW ;
LD lights_t0_tic.B,#0 ;
DO_REMOTE_CONTROL:
NOP
NOP
JSR PROCESS_REMOTE_CONTROL ;
; IFEQ first_msg_received.B,#0 ;
JMP MAIN_LOOP ;
IFGT chk_rd_intrn_t0_tic.B,#15 ;
JSR CHECK_RD_INTRN ;
JMP MAIN_LOOP ; This is the main endless loop. Only exit on reset.
;-------------------- END OF MAIN ----------------------------------------
;-------------------- DO JOB ---------------------------------------------
DO_JOB:
LD A,B ; Job number into A for lookup;
JID ; Vector to right job.
.PT DO_MOVE,DO_TST,DO_LIGHTS,DO_CONTROL,DO_READ_INTERNAL
.PT DO_READ_EXTERNAL,DO_HEAD,DO_BEACON,DO_LIGHTSHOWS
DO_MOVE:
JMP MOVE_MAIN ;
DO_TST:
RET ;
; JMP TEST_MAIN ;
DO_LIGHTS:
RET ;
; JMP LIGHTS_MAIN ;
DO_CONTROL:
; RET ;
JMP CONTROL_MAIN
DO_READ_INTERNAL:
RET ;
; JMP READ_INTERNAL_MAIN
DO_READ_EXTERNAL:
RET ;
; JMP RDEXTRN_MAIN
DO_HEAD:
; RET ;
JMP HEAD_MAIN
DO_BEACON:
RET ;
; JMP BEACON_MAIN
DO_LIGHTSHOWS:
RET ;
; JMP LIGHTSHOWS_MAIN
;---------------------- END OF DO JOB ------------------------------------
.endsect
.end MAIN
Это если он программу в этом режиме не побайтно читает. С другой стороны, это же ускорение обмена с памятью, может они там как-то заморочились с кешем на два байтаShaos wrote:Это по-видимому значит, что к половинкам слова процессор может обращаться раздельно. С другой стороны если прицепить настоящую 16-битную память и работать с ней только словами и только по чётным адресам, то всё срастётся?...
да - точно, программа то побайтно сливается - не выйдет подключить 16-битную памятьb2m wrote:Это если он программу в этом режиме не побайтно читает. С другой стороны, это же ускорение обмена с памятью, может они там как-то заморочились с кешем на два байтаShaos wrote:Это по-видимому значит, что к половинкам слова процессор может обращаться раздельно. С другой стороны если прицепить настоящую 16-битную память и работать с ней только словами и только по чётным адресам, то всё срастётся?...
Хотя, я думаю, всё будет пучком, если всё равно и старший, и младший байт всегда на шине данных. Даже чтение байт будет работать как надо. Проблема будет только с записью байт.
Интересно, а в приведённой в даташите схеме в режиме 16-бит он может читать слова по нечётному адресу? Т.е. делает ли он два цикла чтения в таких случаях?
Не кипятись.Shaos wrote:да - точно, программа то побайтно сливается - не выйдет подключить 16-битную память
а дёргать то при этом она будет разные CSb2m wrote:Не кипятись.Shaos wrote:да - точно, программа то побайтно сливается - не выйдет подключить 16-битную памятьВсё получится. Какая разница, будет ли на нечитаемой в данный момент части шины данных какой-то байт, или не будет (главное чтобы контроллер тоже ничего не выдавал). Просто будет дважды прочитано слово, первый раз чтобы считать младший байт, второй раз - чтобы старший.
А ты их через И сделай.Shaos wrote:а дёргать то при этом она будет разные CS