Нашел тут недавно mc68030 на али...

Motorola 6800, 6809, 68HC05, 68HC08, 68HC11 и m68k, а также компьютеры на них (Amiga, Macintosh, Palm etc.)

Moderator: Shaos

User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Нашел тут недавно mc68030 на али...

Post by Barsevich »

Нашел тут недавно mc68030 на али
Думаю, хорошее дело собрать на нем какую-нибудь несложную отладочную плату
You do not have the required permissions to view the files attached to this post.
User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Re: MC68000

Post by Barsevich »

Вообще познакомился с этим процессором где-то полгода назад, читал данный топик. Наткнулся на пост уважаемого lvd о том, что мол "68020 и 68030 отличаются немного, разве что у 68030 есть датакеш".. А мне всегда было интересно, как работает кеш у процессора. Вот и стал читать доки на 68030. Оказалось, правда, что у 68020 кеш тоже есть, но только кеш инструкций
А сейчас натыкаюсь на предложение купить данный проц
Сейчас в 2024 достать такую древность весьма непросто

Думаю, надо решать свои проблемы сходу, а именно начать с осваивания и установки кросс-компилятора Си, ибо на асме вообще не вариаент прогать что-то большое. А потом можно и на отладочную плату замахнуться, чисто чтобы "пощупать" работу сложного проца. До этого только с 8085 вазякался, а он примитивен, как сибирский валенок. А у этого хотя бы кеш есть и MMU встроенное
User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Re: MC68000

Post by Barsevich »

На досуге покопался в документации на компиляторы gcc. Установил на комп gcc-шные компиляторы c и c++ под m68k. Тестовый код оно закомпилило, интересно посмотреть в ассемблерный файл и файл hex..

Code: Select all

void main()
{
    int a = 7;
    a *= 234;
    //return 0;
}
Вот, что наассемблилось:

Code: Select all

#NO_APP
	.file	"testm.c"
	.text
	.align	2
	.globl	main
	.type	main, @function
main:
	link.w %fp,#-4
	moveq #7,%d0
	move.l %d0,-4(%fp)
	move.l -4(%fp),%d1
	move.l %d1,%d0
	lsl.l #3,%d0
	sub.l %d1,%d0
	lsl.l #2,%d0
	add.l %d1,%d0
	lsl.l #2,%d0
	add.l %d1,%d0
	add.l %d0,%d0
	move.l %d0,-4(%fp)
	nop
	unlk %fp
	rts
	.size	main, .-main
	.ident	"GCC: (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0"
	.section	.note.GNU-stack,"",@progbits
Любопытно, конечно, компилятор что-то налепил каких-то сдвигов (LSL.L) :surprised: Не изучал еще язык ассемблера m68k, но уже сталкивался с riscv. Там нет как таковой операции непосредственной загрузки в регистр, поэтому каждый раз при загрузке константы компилятор/ассемблер идут окольными путями, извращаются. Могу предположить, что тут так же

Сейчас необходимо разобраться, как правильно сказать линковщику, 1)с какого адреса запускаться будет наша программа 2)где размещать кучу и стек (где оператива?)
Работал некогда с AVR, так там проблем нет. Известно, сколько памяти у конкретного МК плюс архитектура Гарварда и тут уже все заранее предрешено, область ОЗУ есть и она неизменяема. А тут архитектура фон-Неймана, тут все несколько сложнее, потому что концепция более гибкая, и только пользователь решает, где будет ОЗУ и сколько
Продолжаю работу
imsushka
Maniac
Posts: 231
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: MC68000

Post by imsushka »

загрузил он нормально, а вот умножил кучей сдвигов с плюсом
User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Re: MC68000

Post by Barsevich »

Хммм.. и правда :) мнемоники умножения нету
Ну так компилятору виднее, значит :D
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: MC68000

Post by Shaos »

Компилятор по умолчанию наверное решил, что это старый допотопный mc68000 - поди ему ключиками можно как-то сказать, чтобы задействовал инструкции mc68030?

P.S. Хотя пишут даже 68000 умел умножать за много-много тактов через микрокод:

MULS 70(1/0)+*
MULU 70(1/0)+*

P.P.S. Может int 32-битный, а умножает оно 16-битные слова? Попробуй заменить int на short в программе
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Re: MC68000

Post by Barsevich »

Нет-нет, компилер самой последней версии + в строку компилятора изначально вставил прямо mcpu=68030:

Code: Select all

m68k-linux-gnu-gcc-10 -mcpu=68030 -msoft-float testm.s -S testm.c
Компилируем без оптимизации, она нам в данном случае не нужна (наша цель -- понять, как оно работает и приспособить компилер под наше голое железо)
Если немного видоизменить входной файл, то компилер начнет использовать инструкцию MULS.L:

Code: Select all

void main()
{
    int a = 7;
    int b = 123;
    a = a*b;
}
Вот, что получается

Code: Select all

#NO_APP
	.file	"testm.c"
	.text
	.align	2
	.globl	main
	.type	main, @function
main:
	link.w %fp,#-8
	moveq #7,%d0
	move.l %d0,-4(%fp)
	moveq #123,%d0
	move.l %d0,-8(%fp)
	move.l -4(%fp),%d0
	muls.l -8(%fp),%d0
	move.l %d0,-4(%fp)
	nop
	unlk %fp
	rts
	.size	main, .-main
	.ident	"GCC: (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0"
	.section	.note.GNU-stack,"",@progbits
Last edited by Barsevich on 30 Mar 2024 03:16, edited 3 times in total.
User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Re: MC68000

Post by Barsevich »

Да, касательно указания компилятору, где какая область памяти находится. Пока накопал следующую инфу: объектный файл разбит на несколько секций:
- секция .text -- это непосредственно машинный код
- секция .data -- это данные программы (как я понял, это что-то вроде progmem, но могу ошибаться, надо еще изучать тему)
- секция .bss -- это и есть наша "куча", область для статических переменных
- секция .stack -- это область стека

Изначально этим секциям присвоены какие-то неочевидные адреса. (например, для .text начальный адрес -- 0x8000032C). Слева на этом дампе можно видеть адреса. Если преобразовывать -o в -hex, то там те же адреса программ остаются

Code: Select all

m68k-linux-gnu-objdump -s -j .text testm.o

testm.o:     file format elf32-m68k

Contents of section .text:
 8000032c 4e754e71 9dce201f 204f4857 48514879  NuNq.. . OHWHQHy
 8000033c 80000460 48798000 04104850 2f004879  ...`Hy....HP/.Hy
 8000034c 8000032c 61ffffff ffc64afc 203c8000  ...,a.....J. <..
 8000035c 40280c80 80004028 671441f9 00000000  @(....@(g.A.....
 8000036c 4a88670a 48798000 40284e90 588f4e75  J.g.Hy..@(N.X.Nu
 8000037c 203c8000 40280480 80004028 2200e481   <..@(....@("...
 8000038c d0809180 4480d081 e2806716 41f90000  ....D.....g.A...
 8000039c 00004a88 670c2f00 48798000 40284e90  ..J.g./.Hy..@(N.
 800003ac 508f4e75 2f0a2f02 4a398000 40286644  P.Nu/./.J9..@(fD
 800003bc 243c8000 3f2c0482 80003f28 e4825382  $<..?,....?(..S.
 800003cc 45f98000 3f282039 8000402a b4806318  E...?( 9..@*..c.
 800003dc 528023c0 8000402a 20720c00 4e902039  R.#...@* r..N. 9
 800003ec 8000402a b48062e8 4ebaff62 13fc0001  ..@*..b.N..b....
 800003fc 80004028 241f245f 4e754e75 6000ff72  ..@($.$_NuNu`..r
 8000040c 4e754e71 48e73e24 4bfb0170 00003bea  NuNqH.>$K..p..;.
 8000041c 282f0020 2a2f0024 2c2f0028 61ffffff  (/. */.$,/.(a...
 8000042c fe922475 01700000 00182635 01700000  ..$u.p....&5.p..
 8000043c 001c968a e4836716 4282205a 2f062f05  ......g.B. Z/./.
 8000044c 2f044e90 52824fef 000cb483 66ec4cdf  /.N.R.O.....f.L.
 8000045c 247c4e75 4e754e71 2f0a2079 80003f20  $|NuNuNq/. y..? 
 8000046c 70ffb088 671045f9 80003f20 4e902062  p...g.E...? N. b
 8000047c 70ffb088 66f6245f 4e754e75           p...f.$_NuNu    
Когда мы преобразуем .o файл в гексовый с помощью objcopy, можно изменить дефолтные адреса секций ключом --change-section-address.
- с .text все понятно -- в конечном гексовом файле видно, как изменяются адреса кода
- с .bss в теории понятно -- устанавливаем адрес начала "кучи"
- co .stack в теории тоже понятно
- а вот что касается .data, мне пока не очень понятно, какой адрес ему выдавать, .data должно быть в той же области памяти, что и .text
Короче надо копать дальше

А лучше, найти какую-то книгу, в которой это все было бы расписано подробно
imsushka
Maniac
Posts: 231
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: MC68000

Post by imsushka »

data это глобальные переменные или инициализированные

text - или пзу или озу как хошь
data - сначала озу или конец проги
bss - после даты
stack - конец озу
User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Re: MC68000

Post by Barsevich »

Приехали сегодня, красавцы
На фото для сравнения с 1801ВМ3, тоже желанной штучкой)
Надо бы двигаться в сторону стенда для испытаний микропроцессора.
You do not have the required permissions to view the files attached to this post.
Mixa64
Doomed
Posts: 478
Joined: 25 Aug 2009 07:02
Location: Москва

Re: MC68000

Post by Mixa64 »

Barsevich wrote:На фото для сравнения с 1801ВМ3, тоже желанной штучкой)
Надо бы двигаться в сторону стенда для испытаний микропроцессора.
ВМ3 из другого зверинца, хотя бы и 68k была придумана с оглядкой на PDP-11.
Вот этот родственник на его месте более естественно смотрелся бы, он из дедов прямой ветви.
MC68010.jpg
И стенд, да, вещь полезная и хорошая сама по себе, факт проверенный.
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: MC68000

Post by Shaos »

Может создать подфорум про M68K внутри MCU/MPU?
И перекидать туда немногочисленные сообщения про Амигу и Пальм...

P.S. В итоге 1 июля 2024 года сделал полноценный новый форум: viewforum.php?f=118
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Re: MC68000

Post by Barsevich »

Давай, кэп, хорошее дело)
User avatar
Barsevich
Writer
Posts: 13
Joined: 20 Jul 2023 15:10

Re: MC68000

Post by Barsevich »

Долго я ничего не постил -- дел своих было много.
На днях решил еще покопать тему компиляции для m68k. Позавчера написал свой первый makefile, вчера начал копать ld-скрипты...
На текущий момент удалось уже в дизассемблернике получить что-то походящее на правду, прошивка хранится по указанным адресам ПЗУ, переменные хранятся по указанным адресам ОЗУ. Но теперь нужно изучить язык ассемблера m68k, чтобы лучше понимать, что творится в точке входа в программу.

Задача: собрать комп на mc68030 (или по крайней мере стенд)
Но я не хочу опять все окружение писать на языке ассемблера (раньше занимался 8085, под компьютеры на его основе писал ось)
Также в теории на mc68030 можно запустить линукс, интересно, как это сделать, будем потихонечку разбираться.
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: MC68000

Post by Shaos »

Про комп на mc68030 наверное надо будет отрезать в отельный топик
Я тут за главного - если что шлите мыло на me собака shaos точка net