National Semiconductor's HPC46003 (строим комп nedoPC-46)

Другие микроконтроллеры и микропроцессоры, не попавшие в предыдущие разделы

Moderator: Shaos

b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Нашёл в AN-0486 такую команду:

Code: Select all

105 F5BE 80C9CAAB LD K, H(A)
Т.е. мои догадки скорее всего верны, и берётся байт с нулевым старшим байтом.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Реальная программа для HPC: move.html
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

b2m wrote:Реальная программа для HPC: move.html
Угу - уже качнул. Он бы ещё бы листинг приложил - вообще было бы замечательно ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Он бы ещё ассемблер приложил :)
Насколько я понял, ассемблер распространялся только по соглашению с N.S., где-то видел, чувак, имеющий тулзы, советовал кому-то обратиться к ним, и если они будут не против он вышлет архив с тулзами.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

b2m wrote:Он бы ещё ассемблер приложил :)
Насколько я понял, ассемблер распространялся только по соглашению с N.S., где-то видел, чувак, имеющий тулзы, советовал кому-то обратиться к ним, и если они будут не против он вышлет архив с тулзами.
Я тоже это письмо читал - это единственная попытка создать самодельный комп на этом проце, которая видимо на этой переписке и закончилась ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

b2m wrote:Насколько я понял, ассемблер распространялся только по соглашению с N.S.,...
За деньги, да ещё и по соглашению? :o Забавно...
b2m wrote:где-то видел, чувак, имеющий тулзы, советовал кому-то обратиться к ним, и если они будут не против он вышлет архив с тулзами.
Мне кажется, этот чувак мне тоже попадался, но казалось мне он денег хочет - $50.
Либо я чего не понял...
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
b2m wrote:Насколько я понял, ассемблер распространялся только по соглашению с N.S.,...
За деньги, да ещё и по соглашению? :o Забавно...
Раньше это была вполне распостранённая практика как я понимаю - пока опенсорцовцы не начали нажимать на индустрию (в некоторых отраслях оно до сих пор так - только под NDA и только за большие бабосы)

P.S. Вот та переписка:
http://coding.derkeiler.com/Archive/Gen ... 00704.html
http://coding.derkeiler.com/Archive/Gen ... 00706.html
Перечитал внимательно - чуваку по работе дали задачу поправить софт для какой-то существующей HPC-железяки и он спрашивает как это делать - это было в 2005 году...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

b2m wrote:
Shaos wrote:А датащит у меня был - там опкодов нету ;)
Зато там есть кое-что про 16-битный режим работы памяти, но как адресуются байты в этом режиме - я так и не понял, написано, что для этого используется /HBE, видимо в комбинации с битом A0. А как конкретно происходит обмен - диаграмм нет.

А, нашёл на картинке - /CS младшего байта это A0, а /CS старшего байта это /HBE.
Это по-видимому значит, что к половинкам слова процессор может обращаться раздельно. С другой стороны если прицепить настоящую 16-битную память и работать с ней только словами и только по чётным адресам, то всё срастётся?...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: HPC46003

Post by Shaos »

Shaos wrote:Блуждая по www.jameco.com наткнулся на безромный 16-битный микроконтроллер от National Semiconductor середины 90-х под названием HPC46003V20 в корпусе PLCC68 за 15 бабосов - не глядя купил два :)
А вот и они:

Image

P.S. Что-то не могу понять в каком году они их выпустили - в 2012 чтоли?...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
b2m wrote:Реальная программа для HPC: move.html
Угу - уже качнул. Он бы ещё бы листинг приложил - вообще было бы замечательно ;)
Там кстати ещё есть:

http://user.xmission.com/~lre/newt/newt.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
Я тут за главного - если что шлите мыло на me собака shaos точка net
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Shaos wrote:Это по-видимому значит, что к половинкам слова процессор может обращаться раздельно. С другой стороны если прицепить настоящую 16-битную память и работать с ней только словами и только по чётным адресам, то всё срастётся?...
Это если он программу в этом режиме не побайтно читает. С другой стороны, это же ускорение обмена с памятью, может они там как-то заморочились с кешем на два байта :)

Хотя, я думаю, всё будет пучком, если всё равно и старший, и младший байт всегда на шине данных. Даже чтение байт будет работать как надо. Проблема будет только с записью байт.

Интересно, а в приведённой в даташите схеме в режиме 16-бит он может читать слова по нечётному адресу? Т.е. делает ли он два цикла чтения в таких случаях?
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

b2m wrote:
Shaos wrote:Это по-видимому значит, что к половинкам слова процессор может обращаться раздельно. С другой стороны если прицепить настоящую 16-битную память и работать с ней только словами и только по чётным адресам, то всё срастётся?...
Это если он программу в этом режиме не побайтно читает. С другой стороны, это же ускорение обмена с памятью, может они там как-то заморочились с кешем на два байта :)

Хотя, я думаю, всё будет пучком, если всё равно и старший, и младший байт всегда на шине данных. Даже чтение байт будет работать как надо. Проблема будет только с записью байт.

Интересно, а в приведённой в даташите схеме в режиме 16-бит он может читать слова по нечётному адресу? Т.е. делает ли он два цикла чтения в таких случаях?
да - точно, программа то побайтно сливается - не выйдет подключить 16-битную память :(

P.S. тогда пожалуй я начну с тестового стенда аля nedoPC-85-A - с одной ROM 8K, одной RAM 8K и одной NI-15...
Я тут за главного - если что шлите мыло на me собака shaos точка net
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Shaos wrote:да - точно, программа то побайтно сливается - не выйдет подключить 16-битную память :(
Не кипятись. :) Всё получится. Какая разница, будет ли на нечитаемой в данный момент части шины данных какой-то байт, или не будет (главное чтобы контроллер тоже ничего не выдавал). Просто будет дважды прочитано слово, первый раз чтобы считать младший байт, второй раз - чтобы старший.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

b2m wrote:
Shaos wrote:да - точно, программа то побайтно сливается - не выйдет подключить 16-битную память :(
Не кипятись. :) Всё получится. Какая разница, будет ли на нечитаемой в данный момент части шины данных какой-то байт, или не будет (главное чтобы контроллер тоже ничего не выдавал). Просто будет дважды прочитано слово, первый раз чтобы считать младший байт, второй раз - чтобы старший.
а дёргать то при этом она будет разные CS :(
Я тут за главного - если что шлите мыло на me собака shaos точка net
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Shaos wrote:а дёргать то при этом она будет разные CS :(
А ты их через И сделай. :)
Что-то мне начинает казаться, что и запись байтов сделать можно.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/